And fix my fix to sink down through the type at the right time. My
authorChandler Carruth <chandlerc@gmail.com>
Thu, 29 May 2014 23:21:12 +0000 (23:21 +0000)
committerChandler Carruth <chandlerc@gmail.com>
Thu, 29 May 2014 23:21:12 +0000 (23:21 +0000)
original fix would actually trigger the *exact* same crasher as the
original bug for a different reason. Awesomesauce.

Working on test cases now, but wanted to get bots healthier.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@209860 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/InstCombine/InstructionCombining.cpp

index 38f92ddf6653b6823f485aad2fc06e767fe71fdb..9b8fdb2700228964f85f3a3d29e5983c43209f99 100644 (file)
@@ -1240,14 +1240,6 @@ Instruction *InstCombiner::visitGetElementPtrInst(GetElementPtrInst &GEP) {
         if (Op1->getOperand(J)->getType() != Op2->getOperand(J)->getType())
           return nullptr;
 
-        if (J > 1) {
-          if (CompositeType *CT = dyn_cast<CompositeType>(CurTy)) {
-            CurTy = CT->getTypeAtIndex(Op1->getOperand(J));
-          } else {
-            CurTy = nullptr;
-          }
-        }
-
         if (Op1->getOperand(J) != Op2->getOperand(J)) {
           if (DI == -1) {
             // We have not seen any differences yet in the GEPs feeding the
@@ -1270,6 +1262,15 @@ Instruction *InstCombiner::visitGetElementPtrInst(GetElementPtrInst &GEP) {
             return nullptr;
           }
         }
+
+        // Sink down a layer of the type for the next iteration.
+        if (J > 0) {
+          if (CompositeType *CT = dyn_cast<CompositeType>(CurTy)) {
+            CurTy = CT->getTypeAtIndex(Op1->getOperand(J));
+          } else {
+            CurTy = nullptr;
+          }
+        }
       }
     }