brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.6 KiB · 0d441e6 Raw
145 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 22 3;; Test how memcpy is optimized when ual is turned off which is similar to AArch64/arm64-misaligned-memcpy-inline.ll.4 5; RUN: llc --mtriple=loongarch32 --mattr=-ual < %s | FileCheck %s --check-prefix=LA326; RUN: llc --mtriple=loongarch64 --mattr=-ual < %s | FileCheck %s --check-prefix=LA647 8;; Small (16 bytes here) unaligned memcpy() should be a function call if9;; ual is turned off.10define void @t0(ptr %out, ptr %in) {11; LA32-LABEL: t0:12; LA32:       # %bb.0: # %entry13; LA32-NEXT:    addi.w $sp, $sp, -1614; LA32-NEXT:    .cfi_def_cfa_offset 1615; LA32-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill16; LA32-NEXT:    .cfi_offset 1, -417; LA32-NEXT:    ori $a2, $zero, 1618; LA32-NEXT:    bl memcpy19; LA32-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload20; LA32-NEXT:    addi.w $sp, $sp, 1621; LA32-NEXT:    ret22;23; LA64-LABEL: t0:24; LA64:       # %bb.0: # %entry25; LA64-NEXT:    addi.d $sp, $sp, -1626; LA64-NEXT:    .cfi_def_cfa_offset 1627; LA64-NEXT:    st.d $ra, $sp, 8 # 8-byte Folded Spill28; LA64-NEXT:    .cfi_offset 1, -829; LA64-NEXT:    ori $a2, $zero, 1630; LA64-NEXT:    pcaddu18i $ra, %call36(memcpy)31; LA64-NEXT:    jirl $ra, $ra, 032; LA64-NEXT:    ld.d $ra, $sp, 8 # 8-byte Folded Reload33; LA64-NEXT:    addi.d $sp, $sp, 1634; LA64-NEXT:    ret35entry:36  call void @llvm.memcpy.p0.p0.i64(ptr %out, ptr %in, i64 16, i1 false)37  ret void38}39 40;; Small (16 bytes here) aligned memcpy() should be inlined even if41;; ual is turned off.42define void @t1(ptr align 8 %out, ptr align 8 %in) {43; LA32-LABEL: t1:44; LA32:       # %bb.0: # %entry45; LA32-NEXT:    ld.w $a2, $a1, 1246; LA32-NEXT:    st.w $a2, $a0, 1247; LA32-NEXT:    ld.w $a2, $a1, 848; LA32-NEXT:    st.w $a2, $a0, 849; LA32-NEXT:    ld.w $a2, $a1, 450; LA32-NEXT:    st.w $a2, $a0, 451; LA32-NEXT:    ld.w $a1, $a1, 052; LA32-NEXT:    st.w $a1, $a0, 053; LA32-NEXT:    ret54;55; LA64-LABEL: t1:56; LA64:       # %bb.0: # %entry57; LA64-NEXT:    ld.d $a2, $a1, 858; LA64-NEXT:    st.d $a2, $a0, 859; LA64-NEXT:    ld.d $a1, $a1, 060; LA64-NEXT:    st.d $a1, $a0, 061; LA64-NEXT:    ret62entry:63  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %out, ptr align 8 %in, i64 16, i1 false)64  ret void65}66 67;; Tiny (4 bytes here) unaligned memcpy() should be inlined with byte sized68;; loads and stores if ual is turned off.69define void @t2(ptr %out, ptr %in) {70; LA32-LABEL: t2:71; LA32:       # %bb.0: # %entry72; LA32-NEXT:    ld.b $a2, $a1, 373; LA32-NEXT:    st.b $a2, $a0, 374; LA32-NEXT:    ld.b $a2, $a1, 275; LA32-NEXT:    st.b $a2, $a0, 276; LA32-NEXT:    ld.b $a2, $a1, 177; LA32-NEXT:    st.b $a2, $a0, 178; LA32-NEXT:    ld.b $a1, $a1, 079; LA32-NEXT:    st.b $a1, $a0, 080; LA32-NEXT:    ret81;82; LA64-LABEL: t2:83; LA64:       # %bb.0: # %entry84; LA64-NEXT:    ld.b $a2, $a1, 385; LA64-NEXT:    st.b $a2, $a0, 386; LA64-NEXT:    ld.b $a2, $a1, 287; LA64-NEXT:    st.b $a2, $a0, 288; LA64-NEXT:    ld.b $a2, $a1, 189; LA64-NEXT:    st.b $a2, $a0, 190; LA64-NEXT:    ld.b $a1, $a1, 091; LA64-NEXT:    st.b $a1, $a0, 092; LA64-NEXT:    ret93entry:94  call void @llvm.memcpy.p0.p0.i64(ptr %out, ptr %in, i64 4, i1 false)95  ret void96}97 98@.str = private constant [22 x i8] c"preemption imbalance \00", align 199 100define void @t3() {101; LA32-LABEL: t3:102; LA32:       # %bb.0: # %entry103; LA32-NEXT:    addi.w $sp, $sp, -64104; LA32-NEXT:    .cfi_def_cfa_offset 64105; LA32-NEXT:    pcalau12i $a0, %pc_hi20(.L.str)106; LA32-NEXT:    addi.w $a0, $a0, %pc_lo12(.L.str)107; LA32-NEXT:    ld.h $a1, $a0, 20108; LA32-NEXT:    ld.w $a2, $a0, 16109; LA32-NEXT:    st.h $a1, $sp, 20110; LA32-NEXT:    st.w $a2, $sp, 16111; LA32-NEXT:    ld.w $a1, $a0, 12112; LA32-NEXT:    ld.w $a2, $a0, 8113; LA32-NEXT:    ld.w $a3, $a0, 4114; LA32-NEXT:    ld.w $a0, $a0, 0115; LA32-NEXT:    st.w $a1, $sp, 12116; LA32-NEXT:    st.w $a2, $sp, 8117; LA32-NEXT:    st.w $a3, $sp, 4118; LA32-NEXT:    st.w $a0, $sp, 0119; LA32-NEXT:    addi.w $sp, $sp, 64120; LA32-NEXT:    ret121;122; LA64-LABEL: t3:123; LA64:       # %bb.0: # %entry124; LA64-NEXT:    addi.d $sp, $sp, -80125; LA64-NEXT:    .cfi_def_cfa_offset 80126; LA64-NEXT:    pcalau12i $a0, %pc_hi20(.L.str)127; LA64-NEXT:    addi.d $a0, $a0, %pc_lo12(.L.str)128; LA64-NEXT:    ld.h $a1, $a0, 20129; LA64-NEXT:    ld.w $a2, $a0, 16130; LA64-NEXT:    ld.d $a3, $a0, 8131; LA64-NEXT:    ld.d $a0, $a0, 0132; LA64-NEXT:    st.h $a1, $sp, 36133; LA64-NEXT:    st.w $a2, $sp, 32134; LA64-NEXT:    st.d $a3, $sp, 24135; LA64-NEXT:    st.d $a0, $sp, 16136; LA64-NEXT:    addi.d $sp, $sp, 80137; LA64-NEXT:    ret138entry:139  %msgbuf = alloca [64 x i8], align 1140  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %msgbuf, ptr align 1 @.str, i64 22, i1 false)141  ret void142}143 144declare void @llvm.memcpy.p0.p0.i64(ptr nocapture, ptr nocapture readonly, i64, i1)145