[llvm-commits] [llvm] r124368 - in /llvm/trunk:	lib/Transforms/IPO/MergeFunctions.cpp	test/Transforms/MergeFunc/vector.ll
    Chris Lattner 
    clattner at apple.com
       
    Thu Jan 27 10:11:48 PST 2011
    
    
  
On Jan 27, 2011, at 12:38 AM, Nick Lewycky wrote:
> URL: http://llvm.org/viewvc/llvm-project?rev=124368&view=rev
> Log:
> Fix surprising missed optimization in mergefunc where we forgot to consider
> that relationships like "i8* null" is equivalent to "i32* null".
Nice!
> +++ llvm/trunk/lib/Transforms/IPO/MergeFunctions.cpp Thu Jan 27 02:38:19 2011
> @@ -460,9 +460,18 @@
> +  if (isa<Constant>(V1)) {
> +    if (V1 == V2) return true;
> +    const Constant *C1 = cast<Constant>(V1);
Please use dyn_cast in the if instead of isa+cast.
> +    const Constant *C2 = dyn_cast<Constant>(V2);
> +    if (!C2) return false;
> +    // TODO: constant expressions with GEP or references to F1 or F2.
> +    if (C1->isNullValue() && C2->isNullValue() &&
> +	isEquivalentType(C1->getType(), C2->getType()))
> +      return true;
isEquivalentType accepts intptr_t and void* as equiv, so this will merge null with (intptr)0 right?
> +    return C1->getType()->canLosslesslyBitCastTo(C2->getType()) &&
> +      C1 == ConstantExpr::getBitCast(const_cast<Constant*>(C2), C1->getType());
> +  }
Urr?  What is this about?  This needs a comment at the very least.
-Chris
    
    
More information about the llvm-commits
mailing list