@@ -550,6 +550,18 @@ define void @llvm_stack_builtins(i32 %alloc) noredzone {
550
550
ret void
551
551
}
552
552
553
+ ; Use of stacksave requires local SP definition even without dymamic alloca.
554
+ ; CHECK-LABEL: llvm_stacksave_noalloca:
555
+ define void @llvm_stacksave_noalloca () noredzone {
556
+ ; CHECK: global.get $push[[L11:.+]]=, __stack_pointer{{$}}
557
+ %stack = call i8* @llvm.stacksave ()
558
+
559
+ ; CHECK-NEXT: call use_i8_star, $pop[[L11:.+]]
560
+ call void @use_i8_star (i8* %stack )
561
+
562
+ ret void
563
+ }
564
+
553
565
; Not actually using the alloca'd variables exposed an issue with register
554
566
; stackification, where copying the stack pointer into the frame pointer was
555
567
; moved after the stack pointer was updated for the dynamic alloca.
@@ -617,7 +629,7 @@ define void @copytoreg_fi(i1 %cond, ptr %b) {
617
629
; CHECK-32-NEXT: i32.const $push4=, 1
618
630
; CHECK-32-NEXT: i32.and $push7=, $pop8, $pop4
619
631
; CHECK-32-NEXT: local.set 0, $pop7
620
- ; CHECK-32-NEXT: .LBB10_1: # %body
632
+ ; CHECK-32-NEXT: # %body
621
633
; CHECK-32-NEXT: # =>This Inner Loop Header: Depth=1
622
634
; CHECK-32-NEXT: loop # label0:
623
635
; CHECK-32-NEXT: local.get $push9=, 2
@@ -645,7 +657,7 @@ define void @copytoreg_fi(i1 %cond, ptr %b) {
645
657
; CHECK-64-NEXT: i32.const $push4=, 1
646
658
; CHECK-64-NEXT: i32.and $push7=, $pop8, $pop4
647
659
; CHECK-64-NEXT: local.set 0, $pop7
648
- ; CHECK-64-NEXT: .LBB10_1: # %body
660
+ ; CHECK-64-NEXT: # %body
649
661
; CHECK-64-NEXT: # =>This Inner Loop Header: Depth=1
650
662
; CHECK-64-NEXT: loop # label0:
651
663
; CHECK-64-NEXT: local.get $push9=, 2
0 commit comments