aboutsummaryrefslogtreecommitdiff
path: root/lib/Transforms/LevelRaise.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2001-12-06 18:06:13 +0000
committerChris Lattner <sabre@nondot.org>2001-12-06 18:06:13 +0000
commitf17a09d878f742dbdbbb22bd10b0081dfa3991ff (patch)
treed51c4ba83c463894d9f843facfca414f30834cb1 /lib/Transforms/LevelRaise.cpp
parent26a408ab9a336cf77ac9af977b53138756fa68f7 (diff)
We can do cast-add elimination even on casts that reinterpret
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@1427 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Transforms/LevelRaise.cpp')
-rw-r--r--lib/Transforms/LevelRaise.cpp24
1 files changed, 11 insertions, 13 deletions
diff --git a/lib/Transforms/LevelRaise.cpp b/lib/Transforms/LevelRaise.cpp
index 19325b065c..c35b5c6730 100644
--- a/lib/Transforms/LevelRaise.cpp
+++ b/lib/Transforms/LevelRaise.cpp
@@ -51,7 +51,6 @@ static inline bool isReinterpretingCast(const CastInst *CI) {
-#if 0 // Unneccesary code, handled by convert exprs
// Peephole optimize the following instructions:
// %t1 = cast ? to x *
// %t2 = add x * %SP, %t1 ;; Constant must be 2nd operand
@@ -117,8 +116,7 @@ static bool HandleCastToPointer(BasicBlock::iterator BI,
OtherPtr = C;
}
- GetElementPtrInst *GEP = new GetElementPtrInst(OtherPtr, Indices,
- I->getName());
+ GetElementPtrInst *GEP = new GetElementPtrInst(OtherPtr, Indices);
PRINT_PEEPHOLE1("cast-add-to-gep:i", I);
@@ -128,7 +126,6 @@ static bool HandleCastToPointer(BasicBlock::iterator BI,
}
return true;
}
-#endif
// Peephole optimize the following instructions:
// %t1 = cast ulong <const int> to {<...>} *
@@ -269,16 +266,17 @@ static bool PeepholeOptimize(BasicBlock *BB, BasicBlock::iterator &BI) {
#endif
return true;
}
-#if 0
- // Otherwise find out it this cast is a cast to a pointer type, which is
- // then added to some other pointer, then loaded or stored through. If
- // so, convert the add into a getelementptr instruction...
- //
- if (const PointerType *DestPTy = dyn_cast<PointerType>(DestTy)) {
- if (HandleCastToPointer(BI, DestPTy))
- return true;
+ }
+
+ // Otherwise find out it this cast is a cast to a pointer type, which is
+ // then added to some other pointer, then loaded or stored through. If
+ // so, convert the add into a getelementptr instruction...
+ //
+ if (const PointerType *DestPTy = dyn_cast<PointerType>(DestTy)) {
+ if (HandleCastToPointer(BI, DestPTy)) {
+ BI = BB->begin(); // Rescan basic block. BI might be invalidated.
+ return true;
}
-#endif
}
// Check to see if we are casting from a structure pointer to a pointer to