115 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc --mtriple=loongarch64 -mattr=+d -O0 < %s | FileCheck %s --check-prefix=NOSHRINKW3; RUN: llc --mtriple=loongarch64 -mattr=+d -O2 < %s | FileCheck %s --check-prefix=SHRINKW4 5declare void @abort()6 7define void @eliminate_restore(i32 %n) nounwind {8; NOSHRINKW-LABEL: eliminate_restore:9; NOSHRINKW: # %bb.0:10; NOSHRINKW-NEXT: addi.d $sp, $sp, -1611; NOSHRINKW-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill12; NOSHRINKW-NEXT: addi.w $a1, $a0, 013; NOSHRINKW-NEXT: ori $a0, $zero, 3214; NOSHRINKW-NEXT: bltu $a0, $a1, .LBB0_215; NOSHRINKW-NEXT: b .LBB0_116; NOSHRINKW-NEXT: .LBB0_1: # %if.then17; NOSHRINKW-NEXT: pcaddu18i $ra, %call36(abort)18; NOSHRINKW-NEXT: jirl $ra, $ra, 019; NOSHRINKW-NEXT: .LBB0_2: # %if.end20; NOSHRINKW-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload21; NOSHRINKW-NEXT: addi.d $sp, $sp, 1622; NOSHRINKW-NEXT: ret23;24; SHRINKW-LABEL: eliminate_restore:25; SHRINKW: # %bb.0:26; SHRINKW-NEXT: addi.w $a0, $a0, 027; SHRINKW-NEXT: ori $a1, $zero, 3228; SHRINKW-NEXT: bgeu $a1, $a0, .LBB0_229; SHRINKW-NEXT: # %bb.1: # %if.end30; SHRINKW-NEXT: ret31; SHRINKW-NEXT: .LBB0_2: # %if.then32; SHRINKW-NEXT: addi.d $sp, $sp, -1633; SHRINKW-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill34; SHRINKW-NEXT: pcaddu18i $ra, %call36(abort)35; SHRINKW-NEXT: jirl $ra, $ra, 036 %cmp = icmp ule i32 %n, 3237 br i1 %cmp, label %if.then, label %if.end38 39if.then:40 call void @abort()41 unreachable42 43if.end:44 ret void45}46 47declare void @notdead(ptr)48 49define void @conditional_alloca(i32 %n) nounwind {50; NOSHRINKW-LABEL: conditional_alloca:51; NOSHRINKW: # %bb.0:52; NOSHRINKW-NEXT: addi.d $sp, $sp, -3253; NOSHRINKW-NEXT: st.d $ra, $sp, 24 # 8-byte Folded Spill54; NOSHRINKW-NEXT: st.d $fp, $sp, 16 # 8-byte Folded Spill55; NOSHRINKW-NEXT: addi.d $fp, $sp, 3256; NOSHRINKW-NEXT: addi.w $a1, $a0, 057; NOSHRINKW-NEXT: st.d $a0, $fp, -24 # 8-byte Folded Spill58; NOSHRINKW-NEXT: ori $a0, $zero, 3259; NOSHRINKW-NEXT: bltu $a0, $a1, .LBB1_260; NOSHRINKW-NEXT: b .LBB1_161; NOSHRINKW-NEXT: .LBB1_1: # %if.then62; NOSHRINKW-NEXT: ld.d $a0, $fp, -24 # 8-byte Folded Reload63; NOSHRINKW-NEXT: bstrpick.d $a0, $a0, 31, 064; NOSHRINKW-NEXT: addi.d $a0, $a0, 1565; NOSHRINKW-NEXT: bstrpick.d $a0, $a0, 32, 466; NOSHRINKW-NEXT: slli.d $a1, $a0, 467; NOSHRINKW-NEXT: move $a0, $sp68; NOSHRINKW-NEXT: sub.d $a0, $a0, $a169; NOSHRINKW-NEXT: move $sp, $a070; NOSHRINKW-NEXT: pcaddu18i $ra, %call36(notdead)71; NOSHRINKW-NEXT: jirl $ra, $ra, 072; NOSHRINKW-NEXT: b .LBB1_273; NOSHRINKW-NEXT: .LBB1_2: # %if.end74; NOSHRINKW-NEXT: addi.d $sp, $fp, -3275; NOSHRINKW-NEXT: ld.d $fp, $sp, 16 # 8-byte Folded Reload76; NOSHRINKW-NEXT: ld.d $ra, $sp, 24 # 8-byte Folded Reload77; NOSHRINKW-NEXT: addi.d $sp, $sp, 3278; NOSHRINKW-NEXT: ret79;80; SHRINKW-LABEL: conditional_alloca:81; SHRINKW: # %bb.0:82; SHRINKW-NEXT: addi.w $a1, $a0, 083; SHRINKW-NEXT: ori $a2, $zero, 3284; SHRINKW-NEXT: bltu $a2, $a1, .LBB1_285; SHRINKW-NEXT: # %bb.1: # %if.then86; SHRINKW-NEXT: addi.d $sp, $sp, -1687; SHRINKW-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill88; SHRINKW-NEXT: st.d $fp, $sp, 0 # 8-byte Folded Spill89; SHRINKW-NEXT: addi.d $fp, $sp, 1690; SHRINKW-NEXT: bstrpick.d $a0, $a0, 31, 091; SHRINKW-NEXT: addi.d $a0, $a0, 1592; SHRINKW-NEXT: bstrpick.d $a0, $a0, 32, 493; SHRINKW-NEXT: slli.d $a0, $a0, 494; SHRINKW-NEXT: sub.d $a0, $sp, $a095; SHRINKW-NEXT: move $sp, $a096; SHRINKW-NEXT: pcaddu18i $ra, %call36(notdead)97; SHRINKW-NEXT: jirl $ra, $ra, 098; SHRINKW-NEXT: addi.d $sp, $fp, -1699; SHRINKW-NEXT: ld.d $fp, $sp, 0 # 8-byte Folded Reload100; SHRINKW-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload101; SHRINKW-NEXT: addi.d $sp, $sp, 16102; SHRINKW-NEXT: .LBB1_2: # %if.end103; SHRINKW-NEXT: ret104 %cmp = icmp ule i32 %n, 32105 br i1 %cmp, label %if.then, label %if.end106 107if.then:108 %addr = alloca i8, i32 %n109 call void @notdead(ptr %addr)110 br label %if.end111 112if.end:113 ret void114}115