summaryrefslogtreecommitdiffstats
path: root/llvm/lib/CodeGen
diff options
context:
space:
mode:
authorDavid L. Jones <dlj@google.com>2019-01-31 03:28:46 +0000
committerDavid L. Jones <dlj@google.com>2019-01-31 03:28:46 +0000
commitd81f23071c8e6e31cd54486fb0b0372957ff5fa9 (patch)
tree5d74bd7d47707eb2429b83a88b836a07d58bbee2 /llvm/lib/CodeGen
parent7e0219d979e52dd6795e4187f313c76d23599123 (diff)
downloadbcm5719-llvm-d81f23071c8e6e31cd54486fb0b0372957ff5fa9.tar.gz
bcm5719-llvm-d81f23071c8e6e31cd54486fb0b0372957ff5fa9.zip
Revert "Reapply "[CGP] Check for existing inttotpr before creating new one""
This change reverts r351626. The changes in r351626 cause quadratic work in several cases. (See r351626 thread on llvm-commits for details.) llvm-svn: 352722
Diffstat (limited to 'llvm/lib/CodeGen')
-rw-r--r--llvm/lib/CodeGen/CodeGenPrepare.cpp22
1 files changed, 4 insertions, 18 deletions
diff --git a/llvm/lib/CodeGen/CodeGenPrepare.cpp b/llvm/lib/CodeGen/CodeGenPrepare.cpp
index 24c926c01a5..e382798b692 100644
--- a/llvm/lib/CodeGen/CodeGenPrepare.cpp
+++ b/llvm/lib/CodeGen/CodeGenPrepare.cpp
@@ -4661,27 +4661,13 @@ bool CodeGenPrepare::optimizeMemoryInst(Instruction *MemoryInst, Value *Addr,
// will look through it and provide only the integer value. In that case,
// use it here.
if (!DL->isNonIntegralPointerType(Addr->getType())) {
- const auto getResultPtr = [MemoryInst, Addr,
- &Builder](Value *Reg) -> Value * {
- BasicBlock *BB = MemoryInst->getParent();
- for (User *U : Reg->users())
- if (auto *I2P = dyn_cast<IntToPtrInst>(U))
- if (I2P->getType() == Addr->getType() && I2P->getParent() == BB) {
- auto *RegInst = dyn_cast<Instruction>(Reg);
- if (RegInst && RegInst->getParent() == BB &&
- !isa<PHINode>(RegInst) && !RegInst->isEHPad())
- I2P->moveAfter(RegInst);
- else
- I2P->moveBefore(*BB, BB->getFirstInsertionPt());
- return I2P;
- }
- return Builder.CreateIntToPtr(Reg, Addr->getType(), "sunkaddr");
- };
if (!ResultPtr && AddrMode.BaseReg) {
- ResultPtr = getResultPtr(AddrMode.BaseReg);
+ ResultPtr = Builder.CreateIntToPtr(AddrMode.BaseReg, Addr->getType(),
+ "sunkaddr");
AddrMode.BaseReg = nullptr;
} else if (!ResultPtr && AddrMode.Scale == 1) {
- ResultPtr = getResultPtr(AddrMode.ScaledReg);
+ ResultPtr = Builder.CreateIntToPtr(AddrMode.ScaledReg, Addr->getType(),
+ "sunkaddr");
AddrMode.Scale = 0;
}
}
OpenPOWER on IntegriCloud