mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-24 03:33:20 +01:00
* 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(). llvm-svn: 19875
This commit is contained in:
parent
f24ea9cf5e
commit
b035ec4a9c
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user