diff options
Diffstat (limited to 'utils/TableGen')
-rw-r--r-- | utils/TableGen/CodeGenDAGPatterns.cpp | 2 | ||||
-rw-r--r-- | utils/TableGen/CodeGenTarget.cpp | 2 | ||||
-rw-r--r-- | utils/TableGen/CodeGenTarget.h | 5 | ||||
-rw-r--r-- | utils/TableGen/DAGISelEmitter.cpp | 7 |
4 files changed, 10 insertions, 6 deletions
diff --git a/utils/TableGen/CodeGenDAGPatterns.cpp b/utils/TableGen/CodeGenDAGPatterns.cpp index 44dbe6c..2a7fd0b 100644 --- a/utils/TableGen/CodeGenDAGPatterns.cpp +++ b/utils/TableGen/CodeGenDAGPatterns.cpp @@ -401,6 +401,8 @@ SDNodeInfo::SDNodeInfo(Record *R) : Def(R) { Properties |= 1 << SDNPMayLoad; } else if (PropList[i]->getName() == "SDNPSideEffect") { Properties |= 1 << SDNPSideEffect; + } else if (PropList[i]->getName() == "SDNPMemOperand") { + Properties |= 1 << SDNPMemOperand; } else { cerr << "Unknown SD Node property '" << PropList[i]->getName() << "' on node '" << R->getName() << "'!\n"; diff --git a/utils/TableGen/CodeGenTarget.cpp b/utils/TableGen/CodeGenTarget.cpp index 9b38647..2aae877 100644 --- a/utils/TableGen/CodeGenTarget.cpp +++ b/utils/TableGen/CodeGenTarget.cpp @@ -366,6 +366,8 @@ ComplexPattern::ComplexPattern(Record *R) { Properties |= 1 << SDNPMayLoad; } else if (PropList[i]->getName() == "SDNPSideEffect") { Properties |= 1 << SDNPSideEffect; + } else if (PropList[i]->getName() == "SDNPMemOperand") { + Properties |= 1 << SDNPMemOperand; } else { cerr << "Unsupported SD Node property '" << PropList[i]->getName() << "' on ComplexPattern '" << R->getName() << "'!\n"; diff --git a/utils/TableGen/CodeGenTarget.h b/utils/TableGen/CodeGenTarget.h index 1191488..f53b6a9 100644 --- a/utils/TableGen/CodeGenTarget.h +++ b/utils/TableGen/CodeGenTarget.h @@ -30,6 +30,8 @@ struct CodeGenRegister; class CodeGenTarget; // SelectionDAG node properties. +// SDNPMemOperand: indicates that a node touches memory and therefore must +// have an associated memory operand that describes the access. enum SDNP { SDNPCommutative, SDNPAssociative, @@ -39,7 +41,8 @@ enum SDNP { SDNPOptInFlag, SDNPMayLoad, SDNPMayStore, - SDNPSideEffect + SDNPSideEffect, + SDNPMemOperand }; // ComplexPattern attributes. diff --git a/utils/TableGen/DAGISelEmitter.cpp b/utils/TableGen/DAGISelEmitter.cpp index 8d89eee..5075d48 100644 --- a/utils/TableGen/DAGISelEmitter.cpp +++ b/utils/TableGen/DAGISelEmitter.cpp @@ -394,11 +394,8 @@ public: // Save loads/stores matched by a pattern. if (!N->isLeaf() && N->getName().empty()) { - std::string EnumName = N->getOperator()->getValueAsString("Opcode"); - if (EnumName == "ISD::LOAD" || - EnumName == "ISD::STORE") { + if (NodeHasProperty(N, SDNPMemOperand, CGP)) LSI.push_back(RootName); - } } bool isRoot = (P == NULL); @@ -1082,7 +1079,7 @@ public: std::vector<std::string>::const_iterator mi, mie; for (mi = LSI.begin(), mie = LSI.end(); mi != mie; ++mi) { emitCode("SDOperand LSI_" + *mi + " = " - "CurDAG->getMemOperand(cast<LSBaseSDNode>(" + + "CurDAG->getMemOperand(cast<MemSDNode>(" + *mi + ")->getMemOperand());"); if (IsVariadic) emitCode("Ops" + utostr(OpsNo) + ".push_back(LSI_" + *mi + ");"); |