diff options
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/Transforms/Scalar/GVN.cpp | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/llvm/lib/Transforms/Scalar/GVN.cpp b/llvm/lib/Transforms/Scalar/GVN.cpp index c080c2a1813..440ea4a5bc7 100644 --- a/llvm/lib/Transforms/Scalar/GVN.cpp +++ b/llvm/lib/Transforms/Scalar/GVN.cpp @@ -2156,6 +2156,16 @@ bool GVN::performScalarPRE(Instruction *CurInst) { if (isa<CmpInst>(CurInst)) return false; + // Don't do PRE on GEPs. The inserted PHI would prevent CodeGenPrepare from + // sinking the addressing mode computation back to its uses. Extending the + // GEP's live range increases the register pressure, and therefore it can + // introduce unnecessary spills. + // + // This doesn't prevent Load PRE. PHI translation will make the GEP available + // to the load by moving it to the predecessor block if necessary. + if (isa<GetElementPtrInst>(CurInst)) + return false; + // We don't currently value number ANY inline asm calls. if (CallInst *CallI = dyn_cast<CallInst>(CurInst)) if (CallI->isInlineAsm()) |

