[llvm] 724664c - [test][SimplifyCFG] Precommit test with hoisting inallocas

Arthur Eubanks via llvm-commits llvm-commits at lists.llvm.org
Mon Sep 12 15:09:00 PDT 2022


Author: Arthur Eubanks
Date: 2022-09-12T15:07:52-07:00
New Revision: 724664c56b5a095d4d5ebec493b04744ed76b7b2

URL: https://github.com/llvm/llvm-project/commit/724664c56b5a095d4d5ebec493b04744ed76b7b2
DIFF: https://github.com/llvm/llvm-project/commit/724664c56b5a095d4d5ebec493b04744ed76b7b2.diff

LOG: [test][SimplifyCFG] Precommit test with hoisting inallocas

Added: 
    

Modified: 
    llvm/test/Transforms/SimplifyCFG/hoist-common-skip.ll

Removed: 
    


################################################################################
diff  --git a/llvm/test/Transforms/SimplifyCFG/hoist-common-skip.ll b/llvm/test/Transforms/SimplifyCFG/hoist-common-skip.ll
index fcb5d5203a9cb..273f8573a177d 100644
--- a/llvm/test/Transforms/SimplifyCFG/hoist-common-skip.ll
+++ b/llvm/test/Transforms/SimplifyCFG/hoist-common-skip.ll
@@ -387,7 +387,61 @@ if.end:
   ret i16 %w
 }
 
+;; Don't hoist stacksaves across inalloca allocas
+;; FIXME: currently this is miscompiled
+define void @f10(i1 %cond) {
+; CHECK-LABEL: @f10(
+; CHECK-NEXT:    [[SS:%.*]] = call ptr @llvm.stacksave()
+; CHECK-NEXT:    [[SS2:%.*]] = call ptr @llvm.stacksave()
+; CHECK-NEXT:    [[I2:%.*]] = alloca inalloca i64, align 8
+; CHECK-NEXT:    br i1 [[COND:%.*]], label [[BB1:%.*]], label [[BB2:%.*]]
+; CHECK:       bb1:
+; CHECK-NEXT:    [[I1:%.*]] = alloca inalloca i32, align 4
+; CHECK-NEXT:    call void @inalloca_i64(ptr inalloca(i64) [[I2]])
+; CHECK-NEXT:    call void @llvm.stackrestore(ptr [[SS2]])
+; CHECK-NEXT:    call void @inalloca_i32(ptr inalloca(i32) [[I1]])
+; CHECK-NEXT:    br label [[END:%.*]]
+; CHECK:       bb2:
+; CHECK-NEXT:    [[I3:%.*]] = alloca inalloca i64, align 8
+; CHECK-NEXT:    [[TMP1:%.*]] = call ptr @inalloca_i64(ptr inalloca(i64) [[I2]])
+; CHECK-NEXT:    call void @llvm.stackrestore(ptr [[SS2]])
+; CHECK-NEXT:    [[TMP2:%.*]] = call ptr @inalloca_i64(ptr inalloca(i64) [[I3]])
+; CHECK-NEXT:    br label [[END]]
+; CHECK:       end:
+; CHECK-NEXT:    call void @llvm.stackrestore(ptr [[SS]])
+; CHECK-NEXT:    ret void
+;
+  %ss = call ptr @llvm.stacksave()
+  br i1 %cond, label %bb1, label %bb2
+
+bb1:
+  %i1 = alloca inalloca i32
+  %ss2 = call ptr @llvm.stacksave()
+  %i2 = alloca inalloca i64
+  call void @inalloca_i64(ptr inalloca(i64) %i2)
+  call void @llvm.stackrestore(ptr %ss2)
+  call void @inalloca_i32(ptr inalloca(i32) %i1)
+  br label %end
+
+bb2:
+  %i3 = alloca inalloca i64
+  %ss3 = call ptr @llvm.stacksave()
+  %i4 = alloca inalloca i64
+  call ptr @inalloca_i64(ptr inalloca(i64) %i4)
+  call void @llvm.stackrestore(ptr %ss3)
+  call ptr @inalloca_i64(ptr inalloca(i64) %i3)
+  br label %end
+
+end:
+  call void @llvm.stackrestore(ptr %ss)
+  ret void
+}
+
 declare void @side_effects0()
 declare void @side_effects1()
 declare void @no_side_effects0() readonly nounwind willreturn
 declare void @no_side_effects1() readonly nounwind willreturn
+declare void @inalloca_i64(ptr inalloca(i64))
+declare void @inalloca_i32(ptr inalloca(i32))
+declare ptr @llvm.stacksave()
+declare void @llvm.stackrestore(ptr)


        


More information about the llvm-commits mailing list