From 39a19f7cae66f563676c61109fe0700d4b3ba401 Mon Sep 17 00:00:00 2001 From: Philip Reames Date: Wed, 12 Jun 2019 19:52:05 +0000 Subject: [PATCH] [IndVars] Extend diagnostic -replexitval flag w/ability to bypass hard use hueristic Note: This does mean that "always" is now more powerful than it was. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@363196 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Transforms/Scalar/IndVarSimplify.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/lib/Transforms/Scalar/IndVarSimplify.cpp b/lib/Transforms/Scalar/IndVarSimplify.cpp index 06ebe165224..7c0dc9b99bf 100644 --- a/lib/Transforms/Scalar/IndVarSimplify.cpp +++ b/lib/Transforms/Scalar/IndVarSimplify.cpp @@ -100,7 +100,7 @@ static cl::opt VerifyIndvars( "verify-indvars", cl::Hidden, cl::desc("Verify the ScalarEvolution result after running indvars")); -enum ReplaceExitVal { NeverRepl, OnlyCheapRepl, AlwaysRepl }; +enum ReplaceExitVal { NeverRepl, OnlyCheapRepl, NoHardUse, AlwaysRepl }; static cl::opt ReplaceExitValue( "replexitval", cl::Hidden, cl::init(OnlyCheapRepl), @@ -108,6 +108,8 @@ static cl::opt ReplaceExitValue( cl::values(clEnumValN(NeverRepl, "never", "never replace exit value"), clEnumValN(OnlyCheapRepl, "cheap", "only replace exit value when the cost is cheap"), + clEnumValN(NoHardUse, "noharduse", + "only replace exit values when loop def likely dead"), clEnumValN(AlwaysRepl, "always", "always replace exit value whenever possible"))); @@ -632,7 +634,8 @@ bool IndVarSimplify::rewriteLoopExitValues(Loop *L, SCEVExpander &Rewriter) { // Computing the value outside of the loop brings no benefit if it is // definitely used inside the loop in a way which can not be optimized // away. - if (!isa(ExitValue) && hasHardUserWithinLoop(L, Inst)) + if (ReplaceExitValue != AlwaysRepl && + !isa(ExitValue) && hasHardUserWithinLoop(L, Inst)) continue; bool HighCost = Rewriter.isHighCostExpansion(ExitValue, L, Inst); -- 2.50.1