[llvm-commits] [llvm-gcc-4.2] r50842 - /llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp
Chris Lattner
sabre at nondot.org
Wed May 7 21:56:41 PDT 2008
Author: lattner
Date: Wed May 7 23:56:41 2008
New Revision: 50842
URL: http://llvm.org/viewvc/llvm-project?rev=50842&view=rev
Log:
Eliminate constant vector and allow constant folding to hack
on struct offset computation. This fixes rdar://5914926 and
test/C++Frontend/2008-05-07-CrazyOffsetOf.cpp
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=50842&r1=50841&r2=50842&view=diff
==============================================================================
--- llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp (original)
+++ llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp Wed May 7 23:56:41 2008
@@ -6646,11 +6646,16 @@
if (TREE_CODE(field_offset) == INTEGER_CST) {
unsigned int MemberIndex = GetFieldIndex(FieldDecl);
- std::vector<Value*> Idxs;
- Idxs.push_back(Constant::getNullValue(Type::Int32Ty));
- Idxs.push_back(ConstantInt::get(Type::Int32Ty, MemberIndex));
- FieldPtr = ConstantExpr::getGetElementPtr(StructAddrLV, &Idxs[0],
- Idxs.size());
+ Constant *Ops[] = {
+ StructAddrLV,
+ Constant::getNullValue(Type::Int32Ty),
+ ConstantInt::get(Type::Int32Ty, MemberIndex)
+ };
+ FieldPtr = ConstantExpr::getGetElementPtr(StructAddrLV, Ops+1, 2);
+
+ FieldPtr = ConstantFoldInstOperands(Instruction::GetElementPtr,
+ FieldPtr->getType(), Ops,
+ 3, &TD);
// Now that we did an offset from the start of the struct, subtract off
// the offset from BitStart.
More information about the llvm-commits
mailing list