[llvm-commits] [llvm] r168711 - in /llvm/trunk: lib/Analysis/ScalarEvolution.cpp test/Transforms/IndVarSimplify/eliminate-comparison.ll

Andrew Trick atrick at apple.com
Thu Nov 29 10:33:08 PST 2012


On Nov 29, 2012, at 8:00 AM, Benjamin Kramer <benny.kra at gmail.com> wrote:
>>> 
>>> Chris, can you approve this for 3.2? It fixes a miscompilation and is apparently a regression from 3.1.
>>> 
>>> - Ben
>>> 
>>>> 
>>>> Modified:
>>>>  llvm/trunk/lib/Analysis/ScalarEvolution.cpp
>>>>  llvm/trunk/test/Transforms/IndVarSimplify/eliminate-comparison.ll
>>>> 
>>>> Modified: llvm/trunk/lib/Analysis/ScalarEvolution.cpp
>>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/ScalarEvolution.cpp?rev=168711&r1=168710&r2=168711&view=diff
>>>> ==============================================================================
>>>> --- llvm/trunk/lib/Analysis/ScalarEvolution.cpp (original)
>>>> +++ llvm/trunk/lib/Analysis/ScalarEvolution.cpp Tue Nov 27 12:16:32 2012
>>>> @@ -6149,9 +6149,10 @@
>>>> if (SimplifyICmpOperands(Pred, LHS, RHS))
>>>>   if (LHS == RHS)
>>>>     return CmpInst::isTrueWhenEqual(Pred);
>>>> -  if (SimplifyICmpOperands(FoundPred, FoundLHS, FoundRHS))
>>>> -    if (FoundLHS == FoundRHS)
>>>> -      return CmpInst::isFalseWhenEqual(Pred);
>>>> +
>>>> +  // Canonicalize the found cond too.  We can't conclude a result from the
>>>> +  // simplified values.
>>>> +  SimplifyICmpOperands(FoundPred, FoundLHS, FoundRHS);

Hi Ben,

Thanks for the fix. But why didn't you go for the more obvious fix?

-      return CmpInst::isFalseWhenEqual(Pred);
+      return CmpInst::isFalseWhenEqual(FoundPred);

As an example, invert the predicate in your test case:

 %tmp76 = icmp ne i32 %sext34, %sext21

In this case, I think the following compare should be eliminated, but won't be with your fix:

 %tmp46 = icmp slt i32 %__key8.0, 10

-Andy



More information about the llvm-commits mailing list