[llvm-commits] CVS: llvm/lib/Transforms/Scalar/InstructionCombining.cpp

Chris Lattner lattner at cs.uiuc.edu
Mon Mar 6 17:29:10 PST 2006



Changes in directory llvm/lib/Transforms/Scalar:

InstructionCombining.cpp updated: 1.450 -> 1.451
---
Log message:

Teach the alignment handling code to look through constant expr casts and GEPs


---
Diffs of the changes:  (+12 -4)

 InstructionCombining.cpp |   16 ++++++++++++----
 1 files changed, 12 insertions(+), 4 deletions(-)


Index: llvm/lib/Transforms/Scalar/InstructionCombining.cpp
diff -u llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.450 llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.451
--- llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.450	Mon Mar  6 14:18:44 2006
+++ llvm/lib/Transforms/Scalar/InstructionCombining.cpp	Mon Mar  6 19:28:57 2006
@@ -5285,11 +5285,17 @@
       }
     }
     return Align;
-  } else if (CastInst *CI = dyn_cast<CastInst>(V)) {
+  } else if (isa<CastInst>(V) ||
+             (isa<ConstantExpr>(V) && 
+              cast<ConstantExpr>(V)->getOpcode() == Instruction::Cast)) {
+    User *CI = cast<User>(V);
     if (isa<PointerType>(CI->getOperand(0)->getType()))
       return GetKnownAlignment(CI->getOperand(0), TD);
     return 0;
-  } else if (GetElementPtrInst *GEPI = dyn_cast<GetElementPtrInst>(V)) {
+  } else if (isa<GetElementPtrInst>(V) ||
+             (isa<ConstantExpr>(V) && 
+              cast<ConstantExpr>(V)->getOpcode()==Instruction::GetElementPtr)) {
+    User *GEPI = cast<User>(V);
     unsigned BaseAlignment = GetKnownAlignment(GEPI->getOperand(0), TD);
     if (BaseAlignment == 0) return 0;
     
@@ -5311,8 +5317,10 @@
 
     const Type *BasePtrTy = GEPI->getOperand(0)->getType();
     if (TD->getTypeAlignment(cast<PointerType>(BasePtrTy)->getElementType())
-        <= BaseAlignment)
-      return TD->getTypeAlignment(GEPI->getType()->getElementType());
+        <= BaseAlignment) {
+      const Type *GEPTy = GEPI->getType();
+      return TD->getTypeAlignment(cast<PointerType>(GEPTy)->getElementType());
+    }
     return 0;
   }
   return 0;






More information about the llvm-commits mailing list