aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDan Gohman <gohman@apple.com>2008-08-20 16:30:28 +0000
committerDan Gohman <gohman@apple.com>2008-08-20 16:30:28 +0000
commita267651b7ec4f96e01b31f541d446758bf8da8a9 (patch)
treeeb7f679364a41131c4f4fdc7f8e34c8edf898c26
parentb8d2f550b84523e8a73198f98e5d450ec3b4fee7 (diff)
downloadexternal_llvm-a267651b7ec4f96e01b31f541d446758bf8da8a9.zip
external_llvm-a267651b7ec4f96e01b31f541d446758bf8da8a9.tar.gz
external_llvm-a267651b7ec4f96e01b31f541d446758bf8da8a9.tar.bz2
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
-rw-r--r--include/llvm/CodeGen/SelectionDAG.h2
-rw-r--r--lib/CodeGen/SelectionDAG/DAGCombiner.cpp13
-rw-r--r--lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp8
3 files changed, 13 insertions, 10 deletions
diff --git a/include/llvm/CodeGen/SelectionDAG.h b/include/llvm/CodeGen/SelectionDAG.h
index 3c1c031..c90cdb2 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 9682a2f..49b695c 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<SDNode*> 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 cb71f1a..f38b2eb 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";