[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