288 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc --mtriple=loongarch64 -mattr=+d,+lsx --verify-machineinstrs < %s | FileCheck %s3define void @eliminate_frame_index(<16 x i8> %a) nounwind {4; CHECK-LABEL: eliminate_frame_index:5; CHECK: # %bb.0:6; CHECK-NEXT: addi.d $sp, $sp, -2407; CHECK-NEXT: st.d $ra, $sp, 232 # 8-byte Folded Spill8; CHECK-NEXT: st.d $fp, $sp, 224 # 8-byte Folded Spill9; CHECK-NEXT: st.d $s0, $sp, 216 # 8-byte Folded Spill10; CHECK-NEXT: st.d $s1, $sp, 208 # 8-byte Folded Spill11; CHECK-NEXT: st.d $s2, $sp, 200 # 8-byte Folded Spill12; CHECK-NEXT: st.d $s3, $sp, 192 # 8-byte Folded Spill13; CHECK-NEXT: st.d $s4, $sp, 184 # 8-byte Folded Spill14; CHECK-NEXT: st.d $s5, $sp, 176 # 8-byte Folded Spill15; CHECK-NEXT: st.d $s6, $sp, 168 # 8-byte Folded Spill16; CHECK-NEXT: st.d $s7, $sp, 160 # 8-byte Folded Spill17; CHECK-NEXT: st.d $s8, $sp, 152 # 8-byte Folded Spill18; CHECK-NEXT: #APP19; CHECK-NEXT: addi.d $zero, $zero, 120; CHECK-NEXT: #NO_APP21; CHECK-NEXT: #APP22; CHECK-NEXT: addi.d $ra, $zero, 123; CHECK-NEXT: #NO_APP24; CHECK-NEXT: #APP25; CHECK-NEXT: addi.d $tp, $zero, 126; CHECK-NEXT: #NO_APP27; CHECK-NEXT: #APP28; CHECK-NEXT: addi.d $a0, $zero, 129; CHECK-NEXT: #NO_APP30; CHECK-NEXT: #APP31; CHECK-NEXT: addi.d $a1, $zero, 132; CHECK-NEXT: #NO_APP33; CHECK-NEXT: #APP34; CHECK-NEXT: addi.d $a2, $zero, 135; CHECK-NEXT: #NO_APP36; CHECK-NEXT: #APP37; CHECK-NEXT: addi.d $a3, $zero, 138; CHECK-NEXT: #NO_APP39; CHECK-NEXT: #APP40; CHECK-NEXT: addi.d $a4, $zero, 141; CHECK-NEXT: #NO_APP42; CHECK-NEXT: #APP43; CHECK-NEXT: addi.d $a5, $zero, 144; CHECK-NEXT: #NO_APP45; CHECK-NEXT: #APP46; CHECK-NEXT: addi.d $a6, $zero, 147; CHECK-NEXT: #NO_APP48; CHECK-NEXT: #APP49; CHECK-NEXT: addi.d $a7, $zero, 150; CHECK-NEXT: #NO_APP51; CHECK-NEXT: #APP52; CHECK-NEXT: addi.d $t0, $zero, 153; CHECK-NEXT: #NO_APP54; CHECK-NEXT: #APP55; CHECK-NEXT: addi.d $t1, $zero, 156; CHECK-NEXT: #NO_APP57; CHECK-NEXT: #APP58; CHECK-NEXT: addi.d $t2, $zero, 159; CHECK-NEXT: #NO_APP60; CHECK-NEXT: #APP61; CHECK-NEXT: addi.d $t3, $zero, 162; CHECK-NEXT: #NO_APP63; CHECK-NEXT: #APP64; CHECK-NEXT: addi.d $t4, $zero, 165; CHECK-NEXT: #NO_APP66; CHECK-NEXT: #APP67; CHECK-NEXT: addi.d $t5, $zero, 168; CHECK-NEXT: #NO_APP69; CHECK-NEXT: #APP70; CHECK-NEXT: addi.d $t6, $zero, 171; CHECK-NEXT: #NO_APP72; CHECK-NEXT: #APP73; CHECK-NEXT: addi.d $t7, $zero, 174; CHECK-NEXT: #NO_APP75; CHECK-NEXT: #APP76; CHECK-NEXT: addi.d $t8, $zero, 177; CHECK-NEXT: #NO_APP78; CHECK-NEXT: #APP79; CHECK-NEXT: addi.d $fp, $zero, 180; CHECK-NEXT: #NO_APP81; CHECK-NEXT: #APP82; CHECK-NEXT: addi.d $s0, $zero, 183; CHECK-NEXT: #NO_APP84; CHECK-NEXT: #APP85; CHECK-NEXT: addi.d $s1, $zero, 186; CHECK-NEXT: #NO_APP87; CHECK-NEXT: #APP88; CHECK-NEXT: addi.d $s2, $zero, 189; CHECK-NEXT: #NO_APP90; CHECK-NEXT: #APP91; CHECK-NEXT: addi.d $s3, $zero, 192; CHECK-NEXT: #NO_APP93; CHECK-NEXT: #APP94; CHECK-NEXT: addi.d $s4, $zero, 195; CHECK-NEXT: #NO_APP96; CHECK-NEXT: #APP97; CHECK-NEXT: addi.d $s5, $zero, 198; CHECK-NEXT: #NO_APP99; CHECK-NEXT: #APP100; CHECK-NEXT: addi.d $s6, $zero, 1101; CHECK-NEXT: #NO_APP102; CHECK-NEXT: #APP103; CHECK-NEXT: addi.d $s7, $zero, 1104; CHECK-NEXT: #NO_APP105; CHECK-NEXT: #APP106; CHECK-NEXT: addi.d $s8, $zero, 1107; CHECK-NEXT: #NO_APP108; CHECK-NEXT: st.d $a0, $sp, 0 # 8-byte Folded Spill109; CHECK-NEXT: addi.d $a0, $sp, 136110; CHECK-NEXT: vstelm.b $vr0, $a0, 0, 0111; CHECK-NEXT: ld.d $a0, $sp, 0 # 8-byte Folded Reload112; CHECK-NEXT: #APP113; CHECK-NEXT: # reg use $zero114; CHECK-NEXT: #NO_APP115; CHECK-NEXT: #APP116; CHECK-NEXT: # reg use $ra117; CHECK-NEXT: #NO_APP118; CHECK-NEXT: #APP119; CHECK-NEXT: # reg use $tp120; CHECK-NEXT: #NO_APP121; CHECK-NEXT: #APP122; CHECK-NEXT: # reg use $a0123; CHECK-NEXT: #NO_APP124; CHECK-NEXT: #APP125; CHECK-NEXT: # reg use $a1126; CHECK-NEXT: #NO_APP127; CHECK-NEXT: #APP128; CHECK-NEXT: # reg use $a2129; CHECK-NEXT: #NO_APP130; CHECK-NEXT: #APP131; CHECK-NEXT: # reg use $a3132; CHECK-NEXT: #NO_APP133; CHECK-NEXT: #APP134; CHECK-NEXT: # reg use $a4135; CHECK-NEXT: #NO_APP136; CHECK-NEXT: #APP137; CHECK-NEXT: # reg use $a5138; CHECK-NEXT: #NO_APP139; CHECK-NEXT: #APP140; CHECK-NEXT: # reg use $a6141; CHECK-NEXT: #NO_APP142; CHECK-NEXT: #APP143; CHECK-NEXT: # reg use $a7144; CHECK-NEXT: #NO_APP145; CHECK-NEXT: #APP146; CHECK-NEXT: # reg use $t0147; CHECK-NEXT: #NO_APP148; CHECK-NEXT: #APP149; CHECK-NEXT: # reg use $t1150; CHECK-NEXT: #NO_APP151; CHECK-NEXT: #APP152; CHECK-NEXT: # reg use $t2153; CHECK-NEXT: #NO_APP154; CHECK-NEXT: #APP155; CHECK-NEXT: # reg use $t3156; CHECK-NEXT: #NO_APP157; CHECK-NEXT: #APP158; CHECK-NEXT: # reg use $t4159; CHECK-NEXT: #NO_APP160; CHECK-NEXT: #APP161; CHECK-NEXT: # reg use $t5162; CHECK-NEXT: #NO_APP163; CHECK-NEXT: #APP164; CHECK-NEXT: # reg use $t6165; CHECK-NEXT: #NO_APP166; CHECK-NEXT: #APP167; CHECK-NEXT: # reg use $t7168; CHECK-NEXT: #NO_APP169; CHECK-NEXT: #APP170; CHECK-NEXT: # reg use $t8171; CHECK-NEXT: #NO_APP172; CHECK-NEXT: #APP173; CHECK-NEXT: # reg use $fp174; CHECK-NEXT: #NO_APP175; CHECK-NEXT: #APP176; CHECK-NEXT: # reg use $s0177; CHECK-NEXT: #NO_APP178; CHECK-NEXT: #APP179; CHECK-NEXT: # reg use $s1180; CHECK-NEXT: #NO_APP181; CHECK-NEXT: #APP182; CHECK-NEXT: # reg use $s2183; CHECK-NEXT: #NO_APP184; CHECK-NEXT: #APP185; CHECK-NEXT: # reg use $s3186; CHECK-NEXT: #NO_APP187; CHECK-NEXT: #APP188; CHECK-NEXT: # reg use $s4189; CHECK-NEXT: #NO_APP190; CHECK-NEXT: #APP191; CHECK-NEXT: # reg use $s5192; CHECK-NEXT: #NO_APP193; CHECK-NEXT: #APP194; CHECK-NEXT: # reg use $s6195; CHECK-NEXT: #NO_APP196; CHECK-NEXT: #APP197; CHECK-NEXT: # reg use $s7198; CHECK-NEXT: #NO_APP199; CHECK-NEXT: #APP200; CHECK-NEXT: # reg use $s8201; CHECK-NEXT: #NO_APP202; CHECK-NEXT: ld.d $s8, $sp, 152 # 8-byte Folded Reload203; CHECK-NEXT: ld.d $s7, $sp, 160 # 8-byte Folded Reload204; CHECK-NEXT: ld.d $s6, $sp, 168 # 8-byte Folded Reload205; CHECK-NEXT: ld.d $s5, $sp, 176 # 8-byte Folded Reload206; CHECK-NEXT: ld.d $s4, $sp, 184 # 8-byte Folded Reload207; CHECK-NEXT: ld.d $s3, $sp, 192 # 8-byte Folded Reload208; CHECK-NEXT: ld.d $s2, $sp, 200 # 8-byte Folded Reload209; CHECK-NEXT: ld.d $s1, $sp, 208 # 8-byte Folded Reload210; CHECK-NEXT: ld.d $s0, $sp, 216 # 8-byte Folded Reload211; CHECK-NEXT: ld.d $fp, $sp, 224 # 8-byte Folded Reload212; CHECK-NEXT: ld.d $ra, $sp, 232 # 8-byte Folded Reload213; CHECK-NEXT: addi.d $sp, $sp, 240214; CHECK-NEXT: ret215 %s = alloca [16 x i8]216 %ss = alloca [128 x i8]217 218 %zero = call i64 asm sideeffect "addi.d $$zero, $$zero, 1", "={r0}"()219 %ra = call i64 asm sideeffect "addi.d $$ra, $$zero, 1", "={r1}"()220 %tp = call i64 asm sideeffect "addi.d $$tp, $$zero, 1", "={r2}"()221 %a0 = call i64 asm sideeffect "addi.d $$a0, $$zero, 1", "={r4}"()222 %a1 = call i64 asm sideeffect "addi.d $$a1, $$zero, 1", "={r5}"()223 %a2 = call i64 asm sideeffect "addi.d $$a2, $$zero, 1", "={r6}"()224 %a3 = call i64 asm sideeffect "addi.d $$a3, $$zero, 1", "={r7}"()225 %a4 = call i64 asm sideeffect "addi.d $$a4, $$zero, 1", "={r8}"()226 %a5 = call i64 asm sideeffect "addi.d $$a5, $$zero, 1", "={r9}"()227 %a6 = call i64 asm sideeffect "addi.d $$a6, $$zero, 1", "={r10}"()228 %a7 = call i64 asm sideeffect "addi.d $$a7, $$zero, 1", "={r11}"()229 %t0 = call i64 asm sideeffect "addi.d $$t0, $$zero, 1", "={r12}"()230 %t1 = call i64 asm sideeffect "addi.d $$t1, $$zero, 1", "={r13}"()231 %t2 = call i64 asm sideeffect "addi.d $$t2, $$zero, 1", "={r14}"()232 %t3 = call i64 asm sideeffect "addi.d $$t3, $$zero, 1", "={r15}"()233 %t4 = call i64 asm sideeffect "addi.d $$t4, $$zero, 1", "={r16}"()234 %t5 = call i64 asm sideeffect "addi.d $$t5, $$zero, 1", "={r17}"()235 %t6 = call i64 asm sideeffect "addi.d $$t6, $$zero, 1", "={r18}"()236 %t7 = call i64 asm sideeffect "addi.d $$t7, $$zero, 1", "={r19}"()237 %t8 = call i64 asm sideeffect "addi.d $$t8, $$zero, 1", "={r20}"()238 ;; r21 Reserved (Non-allocatable)239 %s9 = call i64 asm sideeffect "addi.d $$s9, $$zero, 1", "={r22}"()240 %s0 = call i64 asm sideeffect "addi.d $$s0, $$zero, 1", "={r23}"()241 %s1 = call i64 asm sideeffect "addi.d $$s1, $$zero, 1", "={r24}"()242 %s2 = call i64 asm sideeffect "addi.d $$s2, $$zero, 1", "={r25}"()243 %s3 = call i64 asm sideeffect "addi.d $$s3, $$zero, 1", "={r26}"()244 %s4 = call i64 asm sideeffect "addi.d $$s4, $$zero, 1", "={r27}"()245 %s5 = call i64 asm sideeffect "addi.d $$s5, $$zero, 1", "={r28}"()246 %s6 = call i64 asm sideeffect "addi.d $$s6, $$zero, 1", "={r29}"()247 %s7 = call i64 asm sideeffect "addi.d $$s7, $$zero, 1", "={r30}"()248 %s8 = call i64 asm sideeffect "addi.d $$s8, $$zero, 1", "={r31}"()249 250 %e = extractelement <16 x i8> %a, i64 0251 252 store volatile i8 %e, ptr %s253 254 call void asm sideeffect "# reg use $0", "{r0}"(i64 %zero)255 call void asm sideeffect "# reg use $0", "{r1}"(i64 %ra)256 call void asm sideeffect "# reg use $0", "{r2}"(i64 %tp)257 call void asm sideeffect "# reg use $0", "{r4}"(i64 %a0)258 call void asm sideeffect "# reg use $0", "{r5}"(i64 %a1)259 call void asm sideeffect "# reg use $0", "{r6}"(i64 %a2)260 call void asm sideeffect "# reg use $0", "{r7}"(i64 %a3)261 call void asm sideeffect "# reg use $0", "{r8}"(i64 %a4)262 call void asm sideeffect "# reg use $0", "{r9}"(i64 %a5)263 call void asm sideeffect "# reg use $0", "{r10}"(i64 %a6)264 call void asm sideeffect "# reg use $0", "{r11}"(i64 %a7)265 call void asm sideeffect "# reg use $0", "{r12}"(i64 %t0)266 call void asm sideeffect "# reg use $0", "{r13}"(i64 %t1)267 call void asm sideeffect "# reg use $0", "{r14}"(i64 %t2)268 call void asm sideeffect "# reg use $0", "{r15}"(i64 %t3)269 call void asm sideeffect "# reg use $0", "{r16}"(i64 %t4)270 call void asm sideeffect "# reg use $0", "{r17}"(i64 %t5)271 call void asm sideeffect "# reg use $0", "{r18}"(i64 %t6)272 call void asm sideeffect "# reg use $0", "{r19}"(i64 %t7)273 call void asm sideeffect "# reg use $0", "{r20}"(i64 %t8)274 ;; r21 Reserved (Non-allocatable)275 call void asm sideeffect "# reg use $0", "{r22}"(i64 %s9)276 call void asm sideeffect "# reg use $0", "{r23}"(i64 %s0)277 call void asm sideeffect "# reg use $0", "{r24}"(i64 %s1)278 call void asm sideeffect "# reg use $0", "{r25}"(i64 %s2)279 call void asm sideeffect "# reg use $0", "{r26}"(i64 %s3)280 call void asm sideeffect "# reg use $0", "{r27}"(i64 %s4)281 call void asm sideeffect "# reg use $0", "{r28}"(i64 %s5)282 call void asm sideeffect "# reg use $0", "{r29}"(i64 %s6)283 call void asm sideeffect "# reg use $0", "{r30}"(i64 %s7)284 call void asm sideeffect "# reg use $0", "{r31}"(i64 %s8)285 286 ret void287}288