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@cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits