aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2005-10-19 02:07:26 +0000
committerChris Lattner <sabre@nondot.org>2005-10-19 02:07:26 +0000
commit4c59309f591064f2207df5a98f41ed2d504b52da (patch)
treecdd1952c75a27635390d3d2b33a2bcd78f540440
parentab1bf27be5a3045ef8174eebd74f7630a7c58d3b (diff)
Add support for patterns that have physical registers in them. Testcase:
def : Pat<(trunc G8RC:$in), (OR8To4 G8RC:$in, X0)>; Even though this doesn't make any sense on PPC :) git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@23815 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--utils/TableGen/DAGISelEmitter.cpp12
1 files changed, 12 insertions, 0 deletions
diff --git a/utils/TableGen/DAGISelEmitter.cpp b/utils/TableGen/DAGISelEmitter.cpp
index 12ca95f7d0..0f9d30450e 100644
--- a/utils/TableGen/DAGISelEmitter.cpp
+++ b/utils/TableGen/DAGISelEmitter.cpp
@@ -1617,6 +1617,18 @@ CodeGenPatternResult(TreePatternNode *N, unsigned &Ctr,
}
if (N->isLeaf()) {
+ // If this is an explicit register reference, handle it.
+ if (DefInit *DI = dynamic_cast<DefInit*>(N->getLeafValue())) {
+ unsigned ResNo = Ctr++;
+ if (DI->getDef()->isSubClassOf("Register")) {
+ OS << " SDOperand Tmp" << ResNo << " = CurDAG->getRegister("
+ << getQualifiedName(DI->getDef()) << ", MVT::"
+ << getEnumName(N->getType())
+ << ");\n";
+ return ResNo;
+ }
+ }
+
N->dump();
assert(0 && "Unknown leaf type!");
return ~0U;