[llvm] r198290 - BasicAA: Fix value equality and phi cycles

Nick Lewycky nicholas at mxc.ca
Wed Jan 1 20:24:26 PST 2014


On 01/01/2014 07:31 PM, Arnold Schwaighofer wrote:
> Author: arnolds
> Date: Wed Jan  1 21:31:36 2014
> New Revision: 198290
>

I don't entirely understand why the fix isn't to speculate less often in 
aliasPHI?

>     // Are we checking for alias of the same value?
> -  if (V1 == V2) return MustAlias;
> +  if (isValueEqual(V1, V2)) return MustAlias;

This demands a massive explanation of what on earth is going on. Of 
course %x mustalias %x! (Yes, I've read the PR and understand it what's 
going on, but I'd much rather see code that explicitly dealt with the 
"we're in a loop and speculating on PHIs case" broken out.)

> +bool BasicAliasAnalysis::isValueEqual(const Value *V, const Value *V2) {
> +  if (V != V2)
> +    return false;
> +
> +  const Instruction *Inst = dyn_cast<Instruction>(V);
> +  if (!Inst)
> +    return true;
> +
> +  // Use the dominance if available.
> +  DT = getAnalysisIfAvailable<DominatorTree>();
> +  if (DT) {
> +    if (VisitedPhiBBs.size() > MaxNumPhiBBsValueDominanceCheck)
> +      return false;
> +
> +    // Make sure that the visited phis are dominated by the Value.
> +    for (SmallPtrSet<const BasicBlock *, 8>::iterator
> +             PI = VisitedPhiBBs.begin(),
> +             PE = VisitedPhiBBs.end();
> +         PI != PE; ++PI)
> +      if (!DT->dominates(Inst, *PI))
> +        return false;

I haven't thought really hard about this, but did you want to use 
llvm::isPotentiallyReachable?

> Modified: llvm/trunk/test/Analysis/BasicAA/2006-03-03-BadArraySubscript.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/BasicAA/2006-03-03-BadArraySubscript.ll?rev=198290&r1=198289&r2=198290&view=diff
> ==============================================================================
> --- llvm/trunk/test/Analysis/BasicAA/2006-03-03-BadArraySubscript.ll (original)
> +++ llvm/trunk/test/Analysis/BasicAA/2006-03-03-BadArraySubscript.ll Wed Jan  1 21:31:36 2014
> @@ -1,4 +1,4 @@
> -; RUN: opt < %s -basicaa -aa-eval -disable-output 2>&1 | FileCheck %s
> +; RUN: opt < %s -domtree -basicaa -aa-eval -disable-output 2>&1 | FileCheck %s

Adding -domtree to all these tests makes me very sad.

Nick




More information about the llvm-commits mailing list