diff options
author | JF Bastien <jfb@google.com> | 2016-04-12 18:06:55 +0000 |
---|---|---|
committer | JF Bastien <jfb@google.com> | 2016-04-12 18:06:55 +0000 |
commit | 5e99fa6feee87b9ef05525849b5daced20edfdd4 (patch) | |
tree | 0bdff729efb4316d5224d16bf0f715d07dcf1883 /lib/IR/Instruction.cpp | |
parent | 0802f714a20e9f13ec1c3dc5ee557c8119f68942 (diff) |
Check alloca's special state
Following up to a similar fix in MergeFunctions: r266022. This patch keeps both in sync, it would be nice to not have to do this. It doesn't look like there's an easy way to test this code directly at the moment: AFAICT all currect uses of isSameOperationAs are looking at instructions deep inside a function. IndVarSimplify/pr24952.ll and InstMerge/st_sink_* look at alloca inadvertently but are brittle tests.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@266099 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/IR/Instruction.cpp')
-rw-r--r-- | lib/IR/Instruction.cpp | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/lib/IR/Instruction.cpp b/lib/IR/Instruction.cpp index 62cb6b27428..9b996efb5af 100644 --- a/lib/IR/Instruction.cpp +++ b/lib/IR/Instruction.cpp @@ -279,6 +279,10 @@ static bool haveSameSpecialState(const Instruction *I1, const Instruction *I2, assert(I1->getOpcode() == I2->getOpcode() && "Can not compare special state of different instructions"); + if (const AllocaInst *AI = dyn_cast<AllocaInst>(I1)) + return AI->getAllocatedType() == cast<AllocaInst>(I2)->getAllocatedType() && + (AI->getAlignment() == cast<AllocaInst>(I2)->getAlignment() || + IgnoreAlignment); if (const LoadInst *LI = dyn_cast<LoadInst>(I1)) return LI->isVolatile() == cast<LoadInst>(I2)->isVolatile() && (LI->getAlignment() == cast<LoadInst>(I2)->getAlignment() || |