diff options
author | Chris Lattner <sabre@nondot.org> | 2005-01-28 19:32:01 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2005-01-28 19:32:01 +0000 |
commit | ad5fec12a02d4e43f9baa5854cff0442d7d682f5 (patch) | |
tree | 43b980173992950fe3fa6a46198594475330e89d | |
parent | ce04a6d7f6ce25c7d765a57baa30a70993a46021 (diff) |
* add some DEBUG statements
* Properly compile this:
struct a {};
int test() {
struct a b[2];
if (&b[0] != &b[1])
abort ();
return 0;
}
to 'return 0', not abort().
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@19875 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Transforms/Scalar/InstructionCombining.cpp | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/lib/Transforms/Scalar/InstructionCombining.cpp b/lib/Transforms/Scalar/InstructionCombining.cpp index c3d62e3f07..f56fe817ab 100644 --- a/lib/Transforms/Scalar/InstructionCombining.cpp +++ b/lib/Transforms/Scalar/InstructionCombining.cpp @@ -2198,14 +2198,17 @@ Instruction *InstCombiner::FoldGEPSetCC(User *GEPLHS, Value *RHS, // index is zero or not. if (Cond == Instruction::SetEQ || Cond == Instruction::SetNE) { Instruction *InVal = 0; - for (unsigned i = 1, e = GEPLHS->getNumOperands(); i != e; ++i) { + gep_type_iterator GTI = gep_type_begin(GEPLHS); + for (unsigned i = 1, e = GEPLHS->getNumOperands(); i != e; ++i, ++GTI) { bool EmitIt = true; if (Constant *C = dyn_cast<Constant>(GEPLHS->getOperand(i))) { if (isa<UndefValue>(C)) // undef index -> undef. return ReplaceInstUsesWith(I, UndefValue::get(I.getType())); if (C->isNullValue()) EmitIt = false; - else if (isa<ConstantInt>(C)) + else if (TD->getTypeSize(GTI.getIndexedType()) == 0) { + EmitIt = false; // This is indexing into a zero sized array? + } else if (isa<ConstantInt>(C)) return ReplaceInstUsesWith(I, // No comparison is needed here. ConstantBool::get(Cond == Instruction::SetNE)); } @@ -4902,7 +4905,9 @@ bool InstCombiner::runOnFunction(Function &F) { AddUsesToWorkList(*I); ++NumDeadInst; - I->getParent()->getInstList().erase(I); + DEBUG(std::cerr << "IC: DCE: " << *I); + + I->eraseFromParent(); removeFromWorkList(I); continue; } @@ -4929,6 +4934,8 @@ bool InstCombiner::runOnFunction(Function &F) { } } + DEBUG(std::cerr << "IC: ConstFold to: " << *C << " from: " << *I); + // Add operands to the worklist... AddUsesToWorkList(*I); ReplaceInstUsesWith(*I, C); |