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

Nick Lewycky nicholas at mxc.ca
Fri Aug 8 00:00:10 PDT 2008


Author: nicholas
Date: Fri Aug  8 02:00:09 2008
New Revision: 54520

URL: http://llvm.org/viewvc/llvm-project?rev=54520&view=rev
Log:
Constant fold these GEPs upon construction. PR2603

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=54520&r1=54519&r2=54520&view=diff

==============================================================================
--- llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp (original)
+++ llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp Fri Aug  8 02:00:09 2008
@@ -6111,7 +6111,7 @@
   case VIEW_CONVERT_EXPR: return Convert(TREE_OPERAND(exp, 0));
   case ADDR_EXPR:     
     return ConstantExpr::getBitCast(EmitLV(TREE_OPERAND(exp, 0)),
-                                 ConvertType(TREE_TYPE(exp)));
+                                    ConvertType(TREE_TYPE(exp)));
   }
 }
 
@@ -6979,7 +6979,14 @@
   if (isArrayCompatible(ArrayType))
     Idx.push_back(ConstantInt::get(Type::Int32Ty, 0));
   Idx.push_back(IndexVal);
-  return ConstantExpr::getGetElementPtr(ArrayAddr, &Idx[0], Idx.size());
+
+  Constant *ArrayRef = ConstantExpr::getGetElementPtr(ArrayAddr, &Idx[0],
+                                                      Idx.size());
+
+  if (ConstantExpr *CE = dyn_cast<ConstantExpr>(ArrayRef))
+    return ConstantFoldConstantExpression(CE, &getTargetData());
+  else
+    return ArrayRef;
 }
 
 Constant *TreeConstantToLLVM::EmitLV_COMPONENT_REF(tree exp) {





More information about the llvm-commits mailing list