[llvm] 04a7c67 - [PhaseOrdering] Add test showing mis-compile caused by 17fdaccccf.

Florian Hahn via llvm-commits llvm-commits at lists.llvm.org
Wed Jun 21 13:16:35 PDT 2023


Author: Florian Hahn
Date: 2023-06-21T21:15:14+01:00
New Revision: 04a7c672ab302d972ceabe43b1bbcdb2aa5ebe71

URL: https://github.com/llvm/llvm-project/commit/04a7c672ab302d972ceabe43b1bbcdb2aa5ebe71
DIFF: https://github.com/llvm/llvm-project/commit/04a7c672ab302d972ceabe43b1bbcdb2aa5ebe71.diff

LOG: [PhaseOrdering] Add test showing mis-compile caused by 17fdaccccf.

The test shows a mis-compile where @test gets incorrectly simplified to
unreachable. The test case is reduced from a ThinLTO build of Clang,
with only the relevant pass sequence included.

Added: 
    llvm/test/Transforms/PhaseOrdering/dse-ephemeral-value-captures.ll

Modified: 
    

Removed: 
    


################################################################################
diff  --git a/llvm/test/Transforms/PhaseOrdering/dse-ephemeral-value-captures.ll b/llvm/test/Transforms/PhaseOrdering/dse-ephemeral-value-captures.ll
new file mode 100644
index 0000000000000..aed2282265bca
--- /dev/null
+++ b/llvm/test/Transforms/PhaseOrdering/dse-ephemeral-value-captures.ll
@@ -0,0 +1,41 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 2
+; RUN: opt -passes='function(dse),cgscc(inline),function(sroa,gvn,sccp)' -S %s | FileCheck %s
+
+declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture)
+
+declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture)
+
+declare void @llvm.assume(i1 noundef)
+
+declare i1 @cond() #0
+
+define internal i1 @check_cond(ptr %a) #0 {
+  %l = load i32, ptr %a
+  %c = icmp eq i32 %l, 1
+  br i1 %c, label %then, label %else
+
+then:
+  %res = call i1 @cond()
+  ret i1 %res
+
+else:
+  ret i1 0
+}
+
+; FIXME: At the moment, the function is incorrectly simplified to unreachable.
+define i32 @test() {
+; CHECK-LABEL: define i32 @test() {
+; CHECK-NEXT:  entry:
+; CHECK-NEXT:    unreachable
+;
+entry:
+  %a = alloca i32, align 4
+  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %a)
+  store i32 1, ptr %a, align 4
+  %res = call i1 @check_cond(ptr %a)
+  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %a)
+  call void @llvm.assume(i1 %res)
+  ret i32 0
+}
+
+attributes #0 = { nounwind readonly willreturn }


        


More information about the llvm-commits mailing list