brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.4 KiB · 9bafa10 Raw
118 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc --mtriple=loongarch32 -mattr=+d < %s | FileCheck %s --check-prefix=LA323; RUN: llc --mtriple=loongarch64 -mattr=+d < %s | FileCheck %s --check-prefix=LA644 5;; Check that ldptr.w is not emitted for small offsets.6define signext i32 @ldptr_w_too_small_offset(ptr %p) nounwind {7; LA32-LABEL: ldptr_w_too_small_offset:8; LA32:       # %bb.0: # %entry9; LA32-NEXT:    ld.w $a0, $a0, 204410; LA32-NEXT:    ret11;12; LA64-LABEL: ldptr_w_too_small_offset:13; LA64:       # %bb.0: # %entry14; LA64-NEXT:    ld.w $a0, $a0, 204415; LA64-NEXT:    ret16entry:17  %addr = getelementptr inbounds i32, ptr %p, i64 51118  %val = load i32, ptr %addr, align 419  ret i32 %val20}21 22;; Check that ldptr.w is emitted for applicable offsets.23define signext i32 @ldptr_w(ptr %p) nounwind {24; LA32-LABEL: ldptr_w:25; LA32:       # %bb.0: # %entry26; LA32-NEXT:    addi.w $a0, $a0, 204727; LA32-NEXT:    ld.w $a0, $a0, 128; LA32-NEXT:    ret29;30; LA64-LABEL: ldptr_w:31; LA64:       # %bb.0: # %entry32; LA64-NEXT:    ldptr.w $a0, $a0, 204833; LA64-NEXT:    ret34entry:35  %addr = getelementptr inbounds i32, ptr %p, i64 51236  %val = load i32, ptr %addr, align 437  ret i32 %val38}39 40;; Check that ldptr.w is not emitted for out-of-range offsets.41define signext i32 @ldptr_w_too_big_offset(ptr %p) nounwind {42; LA32-LABEL: ldptr_w_too_big_offset:43; LA32:       # %bb.0: # %entry44; LA32-NEXT:    lu12i.w $a1, 845; LA32-NEXT:    add.w $a0, $a0, $a146; LA32-NEXT:    ld.w $a0, $a0, 047; LA32-NEXT:    ret48;49; LA64-LABEL: ldptr_w_too_big_offset:50; LA64:       # %bb.0: # %entry51; LA64-NEXT:    lu12i.w $a1, 852; LA64-NEXT:    ldx.w $a0, $a0, $a153; LA64-NEXT:    ret54entry:55  %addr = getelementptr inbounds i32, ptr %p, i64 819256  %val = load i32, ptr %addr, align 457  ret i32 %val58}59 60;; Check that ldptr.d is not emitted for small offsets.61define i64 @ldptr_d_too_small_offset(ptr %p) nounwind {62; LA32-LABEL: ldptr_d_too_small_offset:63; LA32:       # %bb.0: # %entry64; LA32-NEXT:    ld.w $a2, $a0, 204065; LA32-NEXT:    ld.w $a1, $a0, 204466; LA32-NEXT:    move $a0, $a267; LA32-NEXT:    ret68;69; LA64-LABEL: ldptr_d_too_small_offset:70; LA64:       # %bb.0: # %entry71; LA64-NEXT:    ld.d $a0, $a0, 204072; LA64-NEXT:    ret73entry:74  %addr = getelementptr inbounds i64, ptr %p, i64 25575  %val = load i64, ptr %addr, align 876  ret i64 %val77}78 79;; Check that ldptr.d is emitted for applicable offsets.80define i64 @ldptr_d(ptr %p) nounwind {81; LA32-LABEL: ldptr_d:82; LA32:       # %bb.0: # %entry83; LA32-NEXT:    addi.w $a1, $a0, 204784; LA32-NEXT:    ld.w $a0, $a1, 185; LA32-NEXT:    ld.w $a1, $a1, 586; LA32-NEXT:    ret87;88; LA64-LABEL: ldptr_d:89; LA64:       # %bb.0: # %entry90; LA64-NEXT:    ldptr.d $a0, $a0, 204891; LA64-NEXT:    ret92entry:93  %addr = getelementptr inbounds i64, ptr %p, i64 25694  %val = load i64, ptr %addr, align 895  ret i64 %val96}97 98;; Check that ldptr.d is not emitted for out-of-range offsets.99define i64 @ldptr_d_too_big_offset(ptr %p) nounwind {100; LA32-LABEL: ldptr_d_too_big_offset:101; LA32:       # %bb.0: # %entry102; LA32-NEXT:    lu12i.w $a1, 8103; LA32-NEXT:    add.w $a1, $a0, $a1104; LA32-NEXT:    ld.w $a0, $a1, 0105; LA32-NEXT:    ld.w $a1, $a1, 4106; LA32-NEXT:    ret107;108; LA64-LABEL: ldptr_d_too_big_offset:109; LA64:       # %bb.0: # %entry110; LA64-NEXT:    lu12i.w $a1, 8111; LA64-NEXT:    ldx.d $a0, $a0, $a1112; LA64-NEXT:    ret113entry:114  %addr = getelementptr inbounds i64, ptr %p, i64 4096115  %val = load i64, ptr %addr, align 8116  ret i64 %val117}118