diff options
author | Hans Wennborg <hans@hanshq.net> | 2017-10-04 17:54:06 +0000 |
---|---|---|
committer | Hans Wennborg <hans@hanshq.net> | 2017-10-04 17:54:06 +0000 |
commit | 2a6c9adb2f30f725579bcc8922583798a5b0feea (patch) | |
tree | 63dd6580649e5d0d4bbb7c9d1018f108ab348ca2 /llvm/lib/CodeGen/SelectionDAG | |
parent | 084400bad95254f612c2eb0bbd4a614b01ca2a66 (diff) | |
download | bcm5719-llvm-2a6c9adb2f30f725579bcc8922583798a5b0feea.tar.gz bcm5719-llvm-2a6c9adb2f30f725579bcc8922583798a5b0feea.zip |
Revert r314886 "[X86] Improvement in CodeGen instruction selection for LEAs (re-applying post required revision changes.)"
It broke the Chromium / SQLite build; see PR34830.
> Summary:
> 1/ Operand folding during complex pattern matching for LEAs has been
> extended, such that it promotes Scale to accommodate similar operand
> appearing in the DAG.
> e.g.
> T1 = A + B
> T2 = T1 + 10
> T3 = T2 + A
> For above DAG rooted at T3, X86AddressMode will no look like
> Base = B , Index = A , Scale = 2 , Disp = 10
>
> 2/ During OptimizeLEAPass down the pipeline factorization is now performed over LEAs
> so that if there is an opportunity then complex LEAs (having 3 operands)
> could be factored out.
> e.g.
> leal 1(%rax,%rcx,1), %rdx
> leal 1(%rax,%rcx,2), %rcx
> will be factored as following
> leal 1(%rax,%rcx,1), %rdx
> leal (%rdx,%rcx) , %edx
>
> 3/ Aggressive operand folding for AM based selection for LEAs is sensitive to loops,
> thus avoiding creation of any complex LEAs within a loop.
>
> Reviewers: lsaba, RKSimon, craig.topper, qcolombet, jmolloy
>
> Reviewed By: lsaba
>
> Subscribers: jmolloy, spatel, igorb, llvm-commits
>
> Differential Revision: https://reviews.llvm.org/D35014
llvm-svn: 314919
Diffstat (limited to 'llvm/lib/CodeGen/SelectionDAG')
-rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp | 11 |
1 files changed, 0 insertions, 11 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp index ff8c892c5f9..15d06871e70 100644 --- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp @@ -26,7 +26,6 @@ #include "llvm/Analysis/AliasAnalysis.h" #include "llvm/Analysis/BranchProbabilityInfo.h" #include "llvm/Analysis/CFG.h" -#include "llvm/Analysis/LoopInfo.h" #include "llvm/Analysis/OptimizationDiagnosticInfo.h" #include "llvm/Analysis/TargetLibraryInfo.h" #include "llvm/CodeGen/FastISel.h" @@ -326,8 +325,6 @@ void SelectionDAGISel::getAnalysisUsage(AnalysisUsage &AU) const { if (OptLevel != CodeGenOpt::None) AU.addRequired<AAResultsWrapperPass>(); AU.addRequired<GCModuleInfo>(); - if (OptLevel != CodeGenOpt::None) - AU.addRequired<LoopInfoWrapperPass>(); AU.addRequired<StackProtector>(); AU.addPreserved<StackProtector>(); AU.addPreserved<GCModuleInfo>(); @@ -1419,7 +1416,6 @@ void SelectionDAGISel::SelectAllBasicBlocks(const Function &Fn) { // Iterate over all basic blocks in the function. for (const BasicBlock *LLVMBB : RPOT) { - CurDAG->IsDAGPartOfLoop = false; if (OptLevel != CodeGenOpt::None) { bool AllPredsVisited = true; for (const_pred_iterator PI = pred_begin(LLVMBB), PE = pred_end(LLVMBB); @@ -1597,13 +1593,6 @@ void SelectionDAGISel::SelectAllBasicBlocks(const Function &Fn) { FunctionBasedInstrumentation); } - if (OptLevel != CodeGenOpt::None) { - auto &LIWP = getAnalysis<LoopInfoWrapperPass>(); - LoopInfo &LI = LIWP.getLoopInfo(); - if (LI.getLoopFor(LLVMBB)) - CurDAG->IsDAGPartOfLoop = true; - } - if (Begin != BI) ++NumDAGBlocks; else |