xref: /llvm-project/llvm/test/CodeGen/LoongArch/ldptr.ll (revision 9d4f7f44b64d87d1068859906f43b7ce03a7388b)
12492bdb2Sgonglingqin; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2*9d4f7f44Swanglei; RUN: llc --mtriple=loongarch32 -mattr=+d < %s | FileCheck %s --check-prefix=LA32
3*9d4f7f44Swanglei; RUN: llc --mtriple=loongarch64 -mattr=+d < %s | FileCheck %s --check-prefix=LA64
42492bdb2Sgonglingqin
52492bdb2Sgonglingqin;; Check that ldptr.w is not emitted for small offsets.
62492bdb2Sgonglingqindefine signext i32 @ldptr_w_too_small_offset(ptr %p) nounwind {
72492bdb2Sgonglingqin; LA32-LABEL: ldptr_w_too_small_offset:
82492bdb2Sgonglingqin; LA32:       # %bb.0: # %entry
92492bdb2Sgonglingqin; LA32-NEXT:    ld.w $a0, $a0, 2044
102492bdb2Sgonglingqin; LA32-NEXT:    ret
112492bdb2Sgonglingqin;
122492bdb2Sgonglingqin; LA64-LABEL: ldptr_w_too_small_offset:
132492bdb2Sgonglingqin; LA64:       # %bb.0: # %entry
142492bdb2Sgonglingqin; LA64-NEXT:    ld.w $a0, $a0, 2044
152492bdb2Sgonglingqin; LA64-NEXT:    ret
162492bdb2Sgonglingqinentry:
172492bdb2Sgonglingqin  %addr = getelementptr inbounds i32, ptr %p, i64 511
182492bdb2Sgonglingqin  %val = load i32, ptr %addr, align 4
192492bdb2Sgonglingqin  ret i32 %val
202492bdb2Sgonglingqin}
212492bdb2Sgonglingqin
222492bdb2Sgonglingqin;; Check that ldptr.w is emitted for applicable offsets.
232492bdb2Sgonglingqindefine signext i32 @ldptr_w(ptr %p) nounwind {
242492bdb2Sgonglingqin; LA32-LABEL: ldptr_w:
252492bdb2Sgonglingqin; LA32:       # %bb.0: # %entry
26ec37a35aSBen Shi; LA32-NEXT:    addi.w $a0, $a0, 2047
27ec37a35aSBen Shi; LA32-NEXT:    addi.w $a0, $a0, 1
282492bdb2Sgonglingqin; LA32-NEXT:    ld.w $a0, $a0, 0
292492bdb2Sgonglingqin; LA32-NEXT:    ret
302492bdb2Sgonglingqin;
312492bdb2Sgonglingqin; LA64-LABEL: ldptr_w:
322492bdb2Sgonglingqin; LA64:       # %bb.0: # %entry
332492bdb2Sgonglingqin; LA64-NEXT:    ldptr.w $a0, $a0, 2048
342492bdb2Sgonglingqin; LA64-NEXT:    ret
352492bdb2Sgonglingqinentry:
362492bdb2Sgonglingqin  %addr = getelementptr inbounds i32, ptr %p, i64 512
372492bdb2Sgonglingqin  %val = load i32, ptr %addr, align 4
382492bdb2Sgonglingqin  ret i32 %val
392492bdb2Sgonglingqin}
402492bdb2Sgonglingqin
412492bdb2Sgonglingqin;; Check that ldptr.w is not emitted for out-of-range offsets.
422492bdb2Sgonglingqindefine signext i32 @ldptr_w_too_big_offset(ptr %p) nounwind {
432492bdb2Sgonglingqin; LA32-LABEL: ldptr_w_too_big_offset:
442492bdb2Sgonglingqin; LA32:       # %bb.0: # %entry
452492bdb2Sgonglingqin; LA32-NEXT:    lu12i.w $a1, 8
462492bdb2Sgonglingqin; LA32-NEXT:    add.w $a0, $a0, $a1
472492bdb2Sgonglingqin; LA32-NEXT:    ld.w $a0, $a0, 0
482492bdb2Sgonglingqin; LA32-NEXT:    ret
492492bdb2Sgonglingqin;
502492bdb2Sgonglingqin; LA64-LABEL: ldptr_w_too_big_offset:
512492bdb2Sgonglingqin; LA64:       # %bb.0: # %entry
522492bdb2Sgonglingqin; LA64-NEXT:    lu12i.w $a1, 8
532492bdb2Sgonglingqin; LA64-NEXT:    ldx.w $a0, $a0, $a1
542492bdb2Sgonglingqin; LA64-NEXT:    ret
552492bdb2Sgonglingqinentry:
562492bdb2Sgonglingqin  %addr = getelementptr inbounds i32, ptr %p, i64 8192
572492bdb2Sgonglingqin  %val = load i32, ptr %addr, align 4
582492bdb2Sgonglingqin  ret i32 %val
592492bdb2Sgonglingqin}
602492bdb2Sgonglingqin
612492bdb2Sgonglingqin;; Check that ldptr.d is not emitted for small offsets.
622492bdb2Sgonglingqindefine i64 @ldptr_d_too_small_offset(ptr %p) nounwind {
632492bdb2Sgonglingqin; LA32-LABEL: ldptr_d_too_small_offset:
642492bdb2Sgonglingqin; LA32:       # %bb.0: # %entry
652492bdb2Sgonglingqin; LA32-NEXT:    ld.w $a2, $a0, 2040
662492bdb2Sgonglingqin; LA32-NEXT:    ld.w $a1, $a0, 2044
672492bdb2Sgonglingqin; LA32-NEXT:    move $a0, $a2
682492bdb2Sgonglingqin; LA32-NEXT:    ret
692492bdb2Sgonglingqin;
702492bdb2Sgonglingqin; LA64-LABEL: ldptr_d_too_small_offset:
712492bdb2Sgonglingqin; LA64:       # %bb.0: # %entry
722492bdb2Sgonglingqin; LA64-NEXT:    ld.d $a0, $a0, 2040
732492bdb2Sgonglingqin; LA64-NEXT:    ret
742492bdb2Sgonglingqinentry:
752492bdb2Sgonglingqin  %addr = getelementptr inbounds i64, ptr %p, i64 255
762492bdb2Sgonglingqin  %val = load i64, ptr %addr, align 8
772492bdb2Sgonglingqin  ret i64 %val
782492bdb2Sgonglingqin}
792492bdb2Sgonglingqin
802492bdb2Sgonglingqin;; Check that ldptr.d is emitted for applicable offsets.
812492bdb2Sgonglingqindefine i64 @ldptr_d(ptr %p) nounwind {
822492bdb2Sgonglingqin; LA32-LABEL: ldptr_d:
832492bdb2Sgonglingqin; LA32:       # %bb.0: # %entry
84ec37a35aSBen Shi; LA32-NEXT:    addi.w $a0, $a0, 2047
85ec37a35aSBen Shi; LA32-NEXT:    addi.w $a1, $a0, 1
86d6f1c85eSgonglingqin; LA32-NEXT:    ld.w $a0, $a1, 0
87d6f1c85eSgonglingqin; LA32-NEXT:    ld.w $a1, $a1, 4
882492bdb2Sgonglingqin; LA32-NEXT:    ret
892492bdb2Sgonglingqin;
902492bdb2Sgonglingqin; LA64-LABEL: ldptr_d:
912492bdb2Sgonglingqin; LA64:       # %bb.0: # %entry
922492bdb2Sgonglingqin; LA64-NEXT:    ldptr.d $a0, $a0, 2048
932492bdb2Sgonglingqin; LA64-NEXT:    ret
942492bdb2Sgonglingqinentry:
952492bdb2Sgonglingqin  %addr = getelementptr inbounds i64, ptr %p, i64 256
962492bdb2Sgonglingqin  %val = load i64, ptr %addr, align 8
972492bdb2Sgonglingqin  ret i64 %val
982492bdb2Sgonglingqin}
992492bdb2Sgonglingqin
1002492bdb2Sgonglingqin;; Check that ldptr.d is not emitted for out-of-range offsets.
1012492bdb2Sgonglingqindefine i64 @ldptr_d_too_big_offset(ptr %p) nounwind {
1022492bdb2Sgonglingqin; LA32-LABEL: ldptr_d_too_big_offset:
1032492bdb2Sgonglingqin; LA32:       # %bb.0: # %entry
1042492bdb2Sgonglingqin; LA32-NEXT:    lu12i.w $a1, 8
105d6f1c85eSgonglingqin; LA32-NEXT:    add.w $a1, $a0, $a1
106d6f1c85eSgonglingqin; LA32-NEXT:    ld.w $a0, $a1, 0
107d6f1c85eSgonglingqin; LA32-NEXT:    ld.w $a1, $a1, 4
1082492bdb2Sgonglingqin; LA32-NEXT:    ret
1092492bdb2Sgonglingqin;
1102492bdb2Sgonglingqin; LA64-LABEL: ldptr_d_too_big_offset:
1112492bdb2Sgonglingqin; LA64:       # %bb.0: # %entry
1122492bdb2Sgonglingqin; LA64-NEXT:    lu12i.w $a1, 8
1132492bdb2Sgonglingqin; LA64-NEXT:    ldx.d $a0, $a0, $a1
1142492bdb2Sgonglingqin; LA64-NEXT:    ret
1152492bdb2Sgonglingqinentry:
1162492bdb2Sgonglingqin  %addr = getelementptr inbounds i64, ptr %p, i64 4096
1172492bdb2Sgonglingqin  %val = load i64, ptr %addr, align 8
1182492bdb2Sgonglingqin  ret i64 %val
1192492bdb2Sgonglingqin}
120