diff --git a/lib/Transforms/Scalar/MergedLoadStoreMotion.cpp b/lib/Transforms/Scalar/MergedLoadStoreMotion.cpp index 4161d6f7dd7..744ab4b9100 100644 --- a/lib/Transforms/Scalar/MergedLoadStoreMotion.cpp +++ b/lib/Transforms/Scalar/MergedLoadStoreMotion.cpp @@ -118,6 +118,7 @@ public: private: // This transformation requires dominator postdominator info void getAnalysisUsage(AnalysisUsage &AU) const override { + AU.setPreservesCFG(); AU.addRequired<TargetLibraryInfoWrapperPass>(); AU.addRequired<AAResultsWrapperPass>(); AU.addPreserved<GlobalsAAWrapperPass>(); diff --git a/test/Transforms/GVN/pr24426.ll b/test/Transforms/GVN/pr24426.ll new file mode 100644 index 00000000000..76b190f8fc2 --- /dev/null +++ b/test/Transforms/GVN/pr24426.ll @@ -0,0 +1,18 @@ +; RUN: opt < %s -memcpyopt -mldst-motion -gvn -S | FileCheck %s + +declare void @check(i8) + +declare void @write(i8* %res) + +define void @test1() { + %1 = alloca [10 x i8] + %2 = bitcast [10 x i8]* %1 to i8* + call void @write(i8* %2) + %3 = load i8, i8* %2 + +; CHECK-NOT: undef + call void @check(i8 %3) + + ret void +} +