summaryrefslogtreecommitdiff
path: root/lib/Transforms/InstCombine/InstructionCombining.cpp
diff options
context:
space:
mode:
authorChandler Carruth <chandlerc@gmail.com>2014-05-29 23:21:12 +0000
committerChandler Carruth <chandlerc@gmail.com>2014-05-29 23:21:12 +0000
commitc62ba58063c3714f36486db3bea3f79049305cb5 (patch)
treefb5a6ffe215ce1c36f2b64f293629ef94e62aceb /lib/Transforms/InstCombine/InstructionCombining.cpp
parente4b37ec73a7d9aecb5cbd131036188572921cc64 (diff)
downloadllvm-c62ba58063c3714f36486db3bea3f79049305cb5.tar.gz
llvm-c62ba58063c3714f36486db3bea3f79049305cb5.tar.bz2
llvm-c62ba58063c3714f36486db3bea3f79049305cb5.tar.xz
And fix my fix to sink down through the type at the right time. My
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
Diffstat (limited to 'lib/Transforms/InstCombine/InstructionCombining.cpp')
-rw-r--r--lib/Transforms/InstCombine/InstructionCombining.cpp17
1 files changed, 9 insertions, 8 deletions
diff --git a/lib/Transforms/InstCombine/InstructionCombining.cpp b/lib/Transforms/InstCombine/InstructionCombining.cpp
index 38f92ddf66..9b8fdb2700 100644
--- a/lib/Transforms/InstCombine/InstructionCombining.cpp
+++ b/lib/Transforms/InstCombine/InstructionCombining.cpp
@@ -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;
+ }
+ }
}
}