brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.3 KiB · 23b433a Raw
111 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 stptr.w is not emitted for small offsets.6define void @stptr_w_too_small_offset(ptr %p, i32 signext %val) nounwind {7; LA32-LABEL: stptr_w_too_small_offset:8; LA32:       # %bb.0:9; LA32-NEXT:    st.w $a1, $a0, 204410; LA32-NEXT:    ret11;12; LA64-LABEL: stptr_w_too_small_offset:13; LA64:       # %bb.0:14; LA64-NEXT:    st.w $a1, $a0, 204415; LA64-NEXT:    ret16  %addr = getelementptr inbounds i32, ptr %p, i64 51117  store i32 %val, ptr %addr, align 418  ret void19}20 21;; Check that stptr.w is emitted for applicable offsets.22define void @stptr_w(ptr %p, i32 signext %val) nounwind {23; LA32-LABEL: stptr_w:24; LA32:       # %bb.0:25; LA32-NEXT:    addi.w $a0, $a0, 204726; LA32-NEXT:    st.w $a1, $a0, 127; LA32-NEXT:    ret28;29; LA64-LABEL: stptr_w:30; LA64:       # %bb.0:31; LA64-NEXT:    stptr.w $a1, $a0, 204832; LA64-NEXT:    ret33  %addr = getelementptr inbounds i32, ptr %p, i64 51234  store i32 %val, ptr %addr, align 435  ret void36}37 38;; Check that stptr.w is not emitted for out-of-range offsets.39define void @stptr_w_too_big_offset(ptr %p, i32 signext %val) nounwind {40; LA32-LABEL: stptr_w_too_big_offset:41; LA32:       # %bb.0:42; LA32-NEXT:    lu12i.w $a2, 843; LA32-NEXT:    add.w $a0, $a0, $a244; LA32-NEXT:    st.w $a1, $a0, 045; LA32-NEXT:    ret46;47; LA64-LABEL: stptr_w_too_big_offset:48; LA64:       # %bb.0:49; LA64-NEXT:    lu12i.w $a2, 850; LA64-NEXT:    stx.w $a1, $a0, $a251; LA64-NEXT:    ret52  %addr = getelementptr inbounds i32, ptr %p, i64 819253  store i32 %val, ptr %addr, align 454  ret void55}56 57;; Check that stptr.d is not emitted for small offsets.58define void @stptr_d_too_small_offset(ptr %p, i64 %val) nounwind {59; LA32-LABEL: stptr_d_too_small_offset:60; LA32:       # %bb.0:61; LA32-NEXT:    st.w $a2, $a0, 204462; LA32-NEXT:    st.w $a1, $a0, 204063; LA32-NEXT:    ret64;65; LA64-LABEL: stptr_d_too_small_offset:66; LA64:       # %bb.0:67; LA64-NEXT:    st.d $a1, $a0, 204068; LA64-NEXT:    ret69  %addr = getelementptr inbounds i64, ptr %p, i64 25570  store i64 %val, ptr %addr, align 871  ret void72}73 74;; Check that stptr.d is emitted for applicable offsets.75define void @stptr_d(ptr %p, i64 %val) nounwind {76; LA32-LABEL: stptr_d:77; LA32:       # %bb.0:78; LA32-NEXT:    addi.w $a0, $a0, 204779; LA32-NEXT:    st.w $a2, $a0, 580; LA32-NEXT:    st.w $a1, $a0, 181; LA32-NEXT:    ret82;83; LA64-LABEL: stptr_d:84; LA64:       # %bb.0:85; LA64-NEXT:    stptr.d $a1, $a0, 204886; LA64-NEXT:    ret87  %addr = getelementptr inbounds i64, ptr %p, i64 25688  store i64 %val, ptr %addr, align 889  ret void90}91 92;; Check that stptr.d is not emitted for out-of-range offsets.93define void @stptr_d_too_big_offset(ptr %p, i64 %val) nounwind {94; LA32-LABEL: stptr_d_too_big_offset:95; LA32:       # %bb.0:96; LA32-NEXT:    lu12i.w $a3, 897; LA32-NEXT:    add.w $a0, $a0, $a398; LA32-NEXT:    st.w $a2, $a0, 499; LA32-NEXT:    st.w $a1, $a0, 0100; LA32-NEXT:    ret101;102; LA64-LABEL: stptr_d_too_big_offset:103; LA64:       # %bb.0:104; LA64-NEXT:    lu12i.w $a2, 8105; LA64-NEXT:    stx.d $a1, $a0, $a2106; LA64-NEXT:    ret107  %addr = getelementptr inbounds i64, ptr %p, i64 4096108  store i64 %val, ptr %addr, align 8109  ret void110}111