[llvm-commits] [llvm-gcc-4.2] r47077 - /llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp

Chris Lattner clattner at apple.com
Fri Feb 15 11:38:07 PST 2008


On Feb 13, 2008, at 10:36 AM, Dale Johannesen wrote:

> Author: johannes
> Date: Wed Feb 13 12:36:09 2008
> New Revision: 47077
>
> URL: http://llvm.org/viewvc/llvm-project?rev=47077&view=rev
> Log:
> Don't omit copying of PaddingElements; this causes
> wrong code when structs are identical except that
> one has padding in the same place another has a
> real field.  Look at the right node when looking
> for MODIFY under RET.

I think this makes isPaddingElement and a bunch of code in llvm- 
types.cpp dead.  Doesn't this also cause us to regress on PR1278?

I'm fine with temporarily saying "we'll take a code pessimization for  
improved correctness" but we need to address this somehow, perhaps by  
filing another bug.

-Chris


>
>
>
> Modified:
>    llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp
>
> Modified: llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp?rev=47077&r1=47076&r2=47077&view=diff
>
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp (original)
> +++ llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp Wed Feb 13 12:36:09 2008
> @@ -1246,8 +1246,6 @@
>     const StructLayout *SL = getTargetData().getStructLayout(STy);
>     Constant *Zero = ConstantInt::get(Type::Int32Ty, 0);
>     for (unsigned i = 0, e = STy->getNumElements(); i != e; ++i) {
> -      if (isPaddingElement(STy, i))
> -        continue;
>       Constant *Idx = ConstantInt::get(Type::Int32Ty, i);
>       Value *Idxs[2] = { Zero, Idx };
>       Value *DElPtr = Builder.CreateGEP(DestLoc.Ptr, Idxs, Idxs + 2,  
> "tmp");
> @@ -1721,7 +1719,8 @@
>     // operand is an aggregate value, create a temporary to evaluate  
> it into.
>     MemRef DestLoc;
>     const Type *DestTy = ConvertType(TREE_TYPE(TREE_OPERAND(exp, 0)));
> -    if (!DestTy->isFirstClassType() && TREE_CODE(exp) != MODIFY_EXPR)
> +    if (!DestTy->isFirstClassType() &&
> +        TREE_CODE(TREE_OPERAND(exp, 0)) != MODIFY_EXPR)
>       DestLoc = CreateTempLoc(DestTy);
>     Emit(TREE_OPERAND(exp, 0), DestLoc.Ptr ? &DestLoc : NULL);
>   }
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits




More information about the llvm-commits mailing list