aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2011-01-16 02:05:10 +0000
committerChris Lattner <sabre@nondot.org>2011-01-16 02:05:10 +0000
commitd5f656f48b98b4fc4dcb131f113316ba04180f11 (patch)
treea1ddbefc1738f1919dc28616ff5da608c29985fb /lib
parentc850965ec06bdf3f71374cee8d63a5401e4228de (diff)
downloadexternal_llvm-d5f656f48b98b4fc4dcb131f113316ba04180f11.zip
external_llvm-d5f656f48b98b4fc4dcb131f113316ba04180f11.tar.gz
external_llvm-d5f656f48b98b4fc4dcb131f113316ba04180f11.tar.bz2
simplify this code, it is still broken but will follow up on llvm-commits.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@123558 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r--lib/Transforms/IPO/GlobalOpt.cpp20
1 files changed, 5 insertions, 15 deletions
diff --git a/lib/Transforms/IPO/GlobalOpt.cpp b/lib/Transforms/IPO/GlobalOpt.cpp
index c1f66b7..8519fce 100644
--- a/lib/Transforms/IPO/GlobalOpt.cpp
+++ b/lib/Transforms/IPO/GlobalOpt.cpp
@@ -2169,16 +2169,10 @@ static bool isSimpleEnoughPointerToCommit(Constant *C) {
// and we know how to evaluate it by moving the bitcast from the pointer
// operand to the value operand.
} else if (CE->getOpcode() == Instruction::BitCast &&
- isa<GlobalVariable>(CE->getOperand(0)) &&
- CE->getType()->isPointerTy() &&
- CE->getOperand(0)->getType()->isPointerTy()) {
- GlobalVariable *GV = cast<GlobalVariable>(CE->getOperand(0));
+ isa<GlobalVariable>(CE->getOperand(0))) {
// Do not allow weak/*_odr/linkonce/dllimport/dllexport linkage or
// external globals.
- if (!GV->hasUniqueInitializer())
- return false;
-
- return true;
+ return cast<GlobalVariable>(CE->getOperand(0))->hasUniqueInitializer();
}
}
@@ -2360,12 +2354,9 @@ static bool EvaluateFunction(Function *F, Constant *&RetVal,
// If we're evaluating a store through a bitcast, then we need
// to pull the bitcast off the pointer type and push it onto the
// stored value.
- Ptr = dyn_cast<Constant>(Ptr->getOperand(0));
- if (!Ptr) return false;
+ Ptr = CE->getOperand(0);
- const PointerType *Ty = dyn_cast<PointerType>(Ptr->getType());
- if (!Ty) return false;
- const Type *NewTy = Ty->getElementType();
+ const Type *NewTy=cast<PointerType>(Ptr->getType())->getElementType();
// A bitcast'd pointer implicitly points to the first field of a
// struct. Insert implicity "gep @x, 0, 0, ..." until we get down
@@ -2374,8 +2365,7 @@ static bool EvaluateFunction(Function *F, Constant *&RetVal,
while (const StructType *STy = dyn_cast<StructType>(NewTy)) {
NewTy = STy->getTypeAtIndex(0U);
- const IntegerType *IdxTy =
- IntegerType::get(NewTy->getContext(), 32);
+ const IntegerType *IdxTy =IntegerType::get(NewTy->getContext(), 32);
Constant *IdxZero = ConstantInt::get(IdxTy, 0, false);
Constant * const IdxList[] = {IdxZero, IdxZero};