From 80c6e79602f396f9f7b6ce6117e868230b17aca0 Mon Sep 17 00:00:00 2001 From: Alina Sbirlea Date: Tue, 14 May 2019 18:07:18 +0000 Subject: [PATCH] [MemorySSA] LoopSimplify preserves MemorySSA only when flag is flipped. LoopSimplify can preserve MemorySSA after r360270. But the MemorySSA analysis is retrieved and preserved only when the EnableMSSALoopDependency is set to true. Use the same conditional to mark the pass as preserved, otherwise subsequent passes will get an invalid analysis. Resolves PR41853. llvm-svn: 360697 --- llvm/lib/Transforms/Utils/LoopSimplify.cpp | 3 ++- llvm/test/Analysis/MemorySSA/pr41853.ll | 16 ++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 llvm/test/Analysis/MemorySSA/pr41853.ll diff --git a/llvm/lib/Transforms/Utils/LoopSimplify.cpp b/llvm/lib/Transforms/Utils/LoopSimplify.cpp index 4fa04d473e13..5ec12aafff05 100644 --- a/llvm/lib/Transforms/Utils/LoopSimplify.cpp +++ b/llvm/lib/Transforms/Utils/LoopSimplify.cpp @@ -768,7 +768,8 @@ namespace { AU.addPreserved(); AU.addPreservedID(BreakCriticalEdgesID); // No critical edges added. AU.addPreserved(); - AU.addPreserved(); + if (EnableMSSALoopDependency) + AU.addPreserved(); } /// verifyAnalysis() - Verify LoopSimplifyForm's guarantees. diff --git a/llvm/test/Analysis/MemorySSA/pr41853.ll b/llvm/test/Analysis/MemorySSA/pr41853.ll new file mode 100644 index 000000000000..6dbc9d782621 --- /dev/null +++ b/llvm/test/Analysis/MemorySSA/pr41853.ll @@ -0,0 +1,16 @@ +; RUN: opt -S -memoryssa -loop-simplify -early-cse-memssa -verify-memoryssa %s | FileCheck %s +; RUN: opt -S -memoryssa -loop-simplify -early-cse-memssa -enable-mssa-loop-dependency -verify-memoryssa %s | FileCheck %s +; REQUIRES: asserts +target triple = "x86_64-unknown-linux-gnu" + +; CHECK-LABEL: @func() +define void @func() { + br i1 undef, label %bb5, label %bb3 + +bb5: ; preds = %bb5, %0 + store i16 undef, i16* undef + br i1 undef, label %bb5, label %bb3 + +bb3: ; preds = %bb5, %0 + ret void +}