137 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z14 -verify-machineinstrs | FileCheck %s3 4define i32 @fun0(i32 %n) #0 {5; CHECK-LABEL: fun0:6; CHECK: # %bb.0:7; CHECK-NEXT: stmg %r11, %r15, 88(%r15)8; CHECK-NEXT: .cfi_offset %r11, -729; CHECK-NEXT: .cfi_offset %r15, -4010; CHECK-NEXT: aghi %r15, -16011; CHECK-NEXT: .cfi_def_cfa_offset 32012; CHECK-NEXT: lgr %r11, %r1513; CHECK-NEXT: .cfi_def_cfa_register %r1114; CHECK-NEXT: # kill: def $r2l killed $r2l def $r2d15; CHECK-NEXT: risbgn %r1, %r2, 30, 189, 216; CHECK-NEXT: la %r0, 7(%r1)17; CHECK-NEXT: risbgn %r1, %r0, 29, 188, 018; CHECK-NEXT: clgfi %r1, 409619; CHECK-NEXT: jl .LBB0_220; CHECK-NEXT: .LBB0_1: # =>This Inner Loop Header: Depth=121; CHECK-NEXT: slgfi %r1, 409622; CHECK-NEXT: slgfi %r15, 409623; CHECK-NEXT: cg %r15, 4088(%r15)24; CHECK-NEXT: clgfi %r1, 409625; CHECK-NEXT: jhe .LBB0_126; CHECK-NEXT: .LBB0_2:27; CHECK-NEXT: cgije %r1, 0, .LBB0_428; CHECK-NEXT: # %bb.3:29; CHECK-NEXT: slgr %r15, %r130; CHECK-NEXT: cg %r15, -8(%r1,%r15)31; CHECK-NEXT: .LBB0_4:32; CHECK-NEXT: la %r1, 160(%r15)33; CHECK-NEXT: lhi %r0, 134; CHECK-NEXT: sty %r0, 4792(%r1)35; CHECK-NEXT: l %r2, 0(%r1)36; CHECK-NEXT: lmg %r11, %r15, 248(%r11)37; CHECK-NEXT: br %r1438 39 %a = alloca i32, i32 %n40 %b = getelementptr inbounds i32, ptr %a, i64 119841 store volatile i32 1, ptr %b42 %c = load volatile i32, ptr %a43 ret i32 %c44}45 46; Probe size should be modulo stack alignment.47define i32 @fun1(i32 %n) #0 "stack-probe-size"="1250" {48; CHECK-LABEL: fun1:49; CHECK: # %bb.0:50; CHECK-NEXT: stmg %r11, %r15, 88(%r15)51; CHECK-NEXT: .cfi_offset %r11, -7252; CHECK-NEXT: .cfi_offset %r15, -4053; CHECK-NEXT: aghi %r15, -16054; CHECK-NEXT: .cfi_def_cfa_offset 32055; CHECK-NEXT: lgr %r11, %r1556; CHECK-NEXT: .cfi_def_cfa_register %r1157; CHECK-NEXT: # kill: def $r2l killed $r2l def $r2d58; CHECK-NEXT: risbgn %r1, %r2, 30, 189, 259; CHECK-NEXT: la %r0, 7(%r1)60; CHECK-NEXT: risbgn %r1, %r0, 29, 188, 061; CHECK-NEXT: clgfi %r1, 124862; CHECK-NEXT: jl .LBB1_263; CHECK-NEXT: .LBB1_1: # =>This Inner Loop Header: Depth=164; CHECK-NEXT: slgfi %r1, 124865; CHECK-NEXT: slgfi %r15, 124866; CHECK-NEXT: cg %r15, 1240(%r15)67; CHECK-NEXT: clgfi %r1, 124868; CHECK-NEXT: jhe .LBB1_169; CHECK-NEXT: .LBB1_2:70; CHECK-NEXT: cgije %r1, 0, .LBB1_471; CHECK-NEXT: # %bb.3:72; CHECK-NEXT: slgr %r15, %r173; CHECK-NEXT: cg %r15, -8(%r1,%r15)74; CHECK-NEXT: .LBB1_4:75; CHECK-NEXT: la %r1, 160(%r15)76; CHECK-NEXT: lhi %r0, 177; CHECK-NEXT: sty %r0, 4792(%r1)78; CHECK-NEXT: l %r2, 0(%r1)79; CHECK-NEXT: lmg %r11, %r15, 248(%r11)80; CHECK-NEXT: br %r1481 %a = alloca i32, i32 %n82 %b = getelementptr inbounds i32, ptr %a, i64 119883 store volatile i32 1, ptr %b84 %c = load volatile i32, ptr %a85 ret i32 %c86}87 88; The minimum probe size is the stack alignment.89define i32 @fun2(i32 %n) #0 "stack-probe-size"="4" {90; CHECK-LABEL: fun2:91; CHECK: # %bb.0:92; CHECK-NEXT: stmg %r11, %r15, 88(%r15)93; CHECK-NEXT: .cfi_offset %r11, -7294; CHECK-NEXT: .cfi_offset %r15, -4095; CHECK-NEXT: lgr %r0, %r1596; CHECK-NEXT: .cfi_def_cfa_register %r097; CHECK-NEXT: aghi %r0, -16098; CHECK-NEXT: .cfi_def_cfa_offset 32099; CHECK-NEXT: .LBB2_1: # =>This Inner Loop Header: Depth=1100; CHECK-NEXT: aghi %r15, -8101; CHECK-NEXT: cg %r0, 0(%r15)102; CHECK-NEXT: clgrjh %r15, %r0, .LBB2_1103; CHECK-NEXT: # %bb.2:104; CHECK-NEXT: .cfi_def_cfa_register %r15105; CHECK-NEXT: lgr %r11, %r15106; CHECK-NEXT: .cfi_def_cfa_register %r11107; CHECK-NEXT: # kill: def $r2l killed $r2l def $r2d108; CHECK-NEXT: risbgn %r1, %r2, 30, 189, 2109; CHECK-NEXT: la %r0, 7(%r1)110; CHECK-NEXT: risbgn %r1, %r0, 29, 188, 0111; CHECK-NEXT: clgijl %r1, 8, .LBB2_4112; CHECK-NEXT: .LBB2_3: # =>This Inner Loop Header: Depth=1113; CHECK-NEXT: slgfi %r1, 8114; CHECK-NEXT: slgfi %r15, 8115; CHECK-NEXT: cg %r15, 0(%r15)116; CHECK-NEXT: clgijhe %r1, 8, .LBB2_3117; CHECK-NEXT: .LBB2_4:118; CHECK-NEXT: cgije %r1, 0, .LBB2_6119; CHECK-NEXT: # %bb.5:120; CHECK-NEXT: slgr %r15, %r1121; CHECK-NEXT: cg %r15, -8(%r1,%r15)122; CHECK-NEXT: .LBB2_6:123; CHECK-NEXT: la %r1, 160(%r15)124; CHECK-NEXT: lhi %r0, 1125; CHECK-NEXT: sty %r0, 4792(%r1)126; CHECK-NEXT: l %r2, 0(%r1)127; CHECK-NEXT: lmg %r11, %r15, 248(%r11)128; CHECK-NEXT: br %r14129 %a = alloca i32, i32 %n130 %b = getelementptr inbounds i32, ptr %a, i64 1198131 store volatile i32 1, ptr %b132 %c = load volatile i32, ptr %a133 ret i32 %c134}135 136attributes #0 = {"probe-stack"="inline-asm"}137