* add some DEBUG statements
authorChris Lattner <sabre@nondot.org>
Fri, 28 Jan 2005 19:32:01 +0000 (19:32 +0000)
committerChris Lattner <sabre@nondot.org>
Fri, 28 Jan 2005 19:32:01 +0000 (19:32 +0000)
* 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

lib/Transforms/Scalar/InstructionCombining.cpp

index c3d62e3f070e012a979857a260c3ac6dcb2a01c4..f56fe817ab0343917fbb4f2bfa991591c6558681 100644 (file)
@@ -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);