aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2010-02-24 07:06:50 +0000
committerChris Lattner <sabre@nondot.org>2010-02-24 07:06:50 +0000
commit91c6a822baaba3cb2def94224115e57b84805347 (patch)
treef4dc2be05accba1ccf02ff1c0f3bbf4c7ac26f45
parent95b6b9ae75bce23eb3e536f37a3e1b84fbedc9bb (diff)
The new isel passes all tests, time to start making it go fast.
Also add an easy macro at the top of DAGISelEmitter.cpp to enable it. Lets see if I can avoid accidentally turning it on :) git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@97029 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--utils/TableGen/CMakeLists.txt1
-rw-r--r--utils/TableGen/DAGISelEmitter.cpp10
-rw-r--r--utils/TableGen/DAGISelMatcher.h2
-rw-r--r--utils/TableGen/DAGISelMatcherOpt.cpp19
4 files changed, 29 insertions, 3 deletions
diff --git a/utils/TableGen/CMakeLists.txt b/utils/TableGen/CMakeLists.txt
index a2678a29f7..881b50a01f 100644
--- a/utils/TableGen/CMakeLists.txt
+++ b/utils/TableGen/CMakeLists.txt
@@ -11,6 +11,7 @@ add_executable(tblgen
DAGISelEmitter.cpp
DAGISelMatcherEmitter.cpp
DAGISelMatcherGen.cpp
+ DAGISelMatcherOpt.cpp
DAGISelMatcher.cpp
DisassemblerEmitter.cpp
EDEmitter.cpp
diff --git a/utils/TableGen/DAGISelEmitter.cpp b/utils/TableGen/DAGISelEmitter.cpp
index b9ef3da5ca..2d2ab3e707 100644
--- a/utils/TableGen/DAGISelEmitter.cpp
+++ b/utils/TableGen/DAGISelEmitter.cpp
@@ -24,6 +24,9 @@
#include <iostream>
using namespace llvm;
+//#define ENABLE_NEW_ISEL
+
+
static cl::opt<bool>
GenDebug("gen-debug", cl::desc("Generate debug code"), cl::init(false));
@@ -1791,6 +1794,9 @@ void DAGISelEmitter::EmitInstructionSelector(raw_ostream &OS) {
OS << "// The main instruction selector code.\n"
<< "SDNode *SelectCode(SDNode *N) {\n"
+#ifdef ENABLE_NEW_ISEL
+ << " return SelectCode2(N);\n"
+#endif
<< " MVT::SimpleValueType NVT = N->getValueType(0).getSimpleVT().SimpleTy;\n"
<< " switch (N->getOpcode()) {\n"
<< " default:\n"
@@ -1946,7 +1952,7 @@ void DAGISelEmitter::run(raw_ostream &OS) {
// definitions. Emit the resultant instruction selector.
EmitInstructionSelector(OS);
-#if 0
+#ifdef ENABLE_NEW_ISEL
MatcherNode *Matcher = 0;
// Add all the patterns to a temporary list so we can sort them.
@@ -1977,7 +1983,7 @@ void DAGISelEmitter::run(raw_ostream &OS) {
Matcher = new PushMatcherNode(N, Matcher);
}
- // OptimizeMatcher(Matcher);
+ OptimizeMatcher(Matcher);
//Matcher->dump();
EmitMatcherTable(Matcher, OS);
delete Matcher;
diff --git a/utils/TableGen/DAGISelMatcher.h b/utils/TableGen/DAGISelMatcher.h
index 469a2807ff..4dcbc8f55f 100644
--- a/utils/TableGen/DAGISelMatcher.h
+++ b/utils/TableGen/DAGISelMatcher.h
@@ -26,7 +26,7 @@ namespace llvm {
MatcherNode *ConvertPatternToMatcher(const PatternToMatch &Pattern,
const CodeGenDAGPatterns &CGP);
-
+void OptimizeMatcher(const MatcherNode *Matcher);
void EmitMatcherTable(const MatcherNode *Matcher, raw_ostream &OS);
diff --git a/utils/TableGen/DAGISelMatcherOpt.cpp b/utils/TableGen/DAGISelMatcherOpt.cpp
new file mode 100644
index 0000000000..7859f36eef
--- /dev/null
+++ b/utils/TableGen/DAGISelMatcherOpt.cpp
@@ -0,0 +1,19 @@
+//===- DAGISelMatcherOpt.cpp - Optimize a DAG Matcher ---------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file implements the DAG Matcher optimizer.
+//
+//===----------------------------------------------------------------------===//
+
+#include "DAGISelMatcher.h"
+using namespace llvm;
+
+void llvm::OptimizeMatcher(const MatcherNode *Matcher) {
+ // Nothing yet.
+}