From a267651b7ec4f96e01b31f541d446758bf8da8a9 Mon Sep 17 00:00:00 2001 From: Dan Gohman Date: Wed, 20 Aug 2008 16:30:28 +0000 Subject: [PATCH] Disable DAGCombine's alignment inference in "fast" codegen mode. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@55059 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/CodeGen/SelectionDAG.h | 2 +- lib/CodeGen/SelectionDAG/DAGCombiner.cpp | 13 ++++++++----- lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp | 8 ++++---- 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/include/llvm/CodeGen/SelectionDAG.h b/include/llvm/CodeGen/SelectionDAG.h index 3c1c031bd76..c90cdb25e22 100644 --- a/include/llvm/CodeGen/SelectionDAG.h +++ b/include/llvm/CodeGen/SelectionDAG.h @@ -169,7 +169,7 @@ public: /// certain types of nodes together, or eliminating superfluous nodes. When /// the AfterLegalize argument is set to 'true', Combine takes care not to /// generate any nodes that will be illegal on the target. - void Combine(bool AfterLegalize, AliasAnalysis &AA); + void Combine(bool AfterLegalize, AliasAnalysis &AA, bool Fast); /// LegalizeTypes - This transforms the SelectionDAG into a SelectionDAG that /// only uses types natively supported by the target. diff --git a/lib/CodeGen/SelectionDAG/DAGCombiner.cpp b/lib/CodeGen/SelectionDAG/DAGCombiner.cpp index 9682a2f31dc..49b695c63e3 100644 --- a/lib/CodeGen/SelectionDAG/DAGCombiner.cpp +++ b/lib/CodeGen/SelectionDAG/DAGCombiner.cpp @@ -51,6 +51,7 @@ namespace { SelectionDAG &DAG; TargetLowering &TLI; bool AfterLegalize; + bool Fast; // Worklist of all of the nodes that need to be simplified. std::vector WorkList; @@ -237,10 +238,11 @@ namespace { SDValue FindBetterChain(SDNode *N, SDValue Chain); public: - DAGCombiner(SelectionDAG &D, AliasAnalysis &A) + DAGCombiner(SelectionDAG &D, AliasAnalysis &A, bool fast) : DAG(D), TLI(D.getTargetLoweringInfo()), AfterLegalize(false), + Fast(fast), AA(A) {} /// Run - runs the dag combiner on all nodes in the work list @@ -4411,7 +4413,7 @@ SDValue DAGCombiner::visitLOAD(SDNode *N) { SDValue Ptr = LD->getBasePtr(); // Try to infer better alignment information than the load already has. - if (LD->isUnindexed()) { + if (!Fast && LD->isUnindexed()) { if (unsigned Align = InferAlignment(Ptr, DAG)) { if (Align > LD->getAlignment()) return DAG.getExtLoad(LD->getExtensionType(), LD->getValueType(0), @@ -4529,7 +4531,7 @@ SDValue DAGCombiner::visitSTORE(SDNode *N) { SDValue Ptr = ST->getBasePtr(); // Try to infer better alignment information than the store already has. - if (ST->isUnindexed()) { + if (!Fast && ST->isUnindexed()) { if (unsigned Align = InferAlignment(Ptr, DAG)) { if (Align > ST->getAlignment()) return DAG.getTruncStore(Chain, Value, Ptr, ST->getSrcValue(), @@ -5664,8 +5666,9 @@ SDValue DAGCombiner::FindBetterChain(SDNode *N, SDValue OldChain) { // SelectionDAG::Combine - This is the entry point for the file. // -void SelectionDAG::Combine(bool RunningAfterLegalize, AliasAnalysis &AA) { +void SelectionDAG::Combine(bool RunningAfterLegalize, AliasAnalysis &AA, + bool Fast) { /// run - This is the main entry point to this class. /// - DAGCombiner(*this, AA).Run(RunningAfterLegalize); + DAGCombiner(*this, AA, Fast).Run(RunningAfterLegalize); } diff --git a/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp b/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp index cb71f1aae01..f38b2ebaf79 100644 --- a/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp +++ b/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp @@ -5369,9 +5369,9 @@ void SelectionDAGISel::CodeGenAndEmitDAG(SelectionDAG &DAG) { // Run the DAG combiner in pre-legalize mode. if (TimePassesIsEnabled) { NamedRegionTimer T("DAG Combining 1", GroupName); - DAG.Combine(false, *AA); + DAG.Combine(false, *AA, Fast); } else { - DAG.Combine(false, *AA); + DAG.Combine(false, *AA, Fast); } DOUT << "Optimized lowered selection DAG:\n"; @@ -5413,9 +5413,9 @@ void SelectionDAGISel::CodeGenAndEmitDAG(SelectionDAG &DAG) { // Run the DAG combiner in post-legalize mode. if (TimePassesIsEnabled) { NamedRegionTimer T("DAG Combining 2", GroupName); - DAG.Combine(true, *AA); + DAG.Combine(true, *AA, Fast); } else { - DAG.Combine(true, *AA); + DAG.Combine(true, *AA, Fast); } DOUT << "Optimized legalized selection DAG:\n"; -- 2.34.1