[llvm-commits] CVS: llvm/utils/TableGen/DAGISelEmitter.cpp
Chris Lattner
lattner at cs.uiuc.edu
Sun Dec 4 18:36:49 PST 2005
Changes in directory llvm/utils/TableGen:
DAGISelEmitter.cpp updated: 1.83 -> 1.84
---
Log message:
Implement PR673: http://llvm.cs.uiuc.edu/PR673 : for explicit register references, use type information
if available
---
Diffs of the changes: (+8 -15)
DAGISelEmitter.cpp | 23 ++++++++---------------
1 files changed, 8 insertions(+), 15 deletions(-)
Index: llvm/utils/TableGen/DAGISelEmitter.cpp
diff -u llvm/utils/TableGen/DAGISelEmitter.cpp:1.83 llvm/utils/TableGen/DAGISelEmitter.cpp:1.84
--- llvm/utils/TableGen/DAGISelEmitter.cpp:1.83 Sun Dec 4 18:48:51 2005
+++ llvm/utils/TableGen/DAGISelEmitter.cpp Sun Dec 4 20:36:37 2005
@@ -467,9 +467,12 @@
// Pattern fragment types will be resolved when they are inlined.
return MVT::isUnknown;
} else if (R->isSubClassOf("Register")) {
- //const CodeGenTarget &T = TP.getDAGISelEmitter().getTargetInfo();
- // TODO: if a register appears in exactly one regclass, we could use that
- // type info.
+ // If the register appears in exactly one regclass, and the regclass has one
+ // value type, use it as the known type.
+ const CodeGenTarget &T = TP.getDAGISelEmitter().getTargetInfo();
+ if (const CodeGenRegisterClass *RC = T.getRegisterClassForRegister(R))
+ if (RC->getNumValueTypes() == 1)
+ return RC->getValueTypeNum(0);
return MVT::isUnknown;
} else if (R->isSubClassOf("ValueType") || R->isSubClassOf("CondCode")) {
// Using a VTSDNode or CondCodeSDNode.
@@ -1719,18 +1722,8 @@
/// getRegisterValueType - Look up and return the first ValueType of specified
/// RegisterClass record
static MVT::ValueType getRegisterValueType(Record *R, const CodeGenTarget &T) {
- const std::vector<CodeGenRegisterClass> &RegisterClasses =
- T.getRegisterClasses();
-
- for (unsigned i = 0, e = RegisterClasses.size(); i != e; ++i) {
- const CodeGenRegisterClass &RC = RegisterClasses[i];
- for (unsigned ei = 0, ee = RC.Elements.size(); ei != ee; ++ei) {
- if (R == RC.Elements[ei]) {
- return RC.getValueTypeNum(0);
- }
- }
- }
-
+ if (const CodeGenRegisterClass *RC = T.getRegisterClassForRegister(R))
+ return RC->getValueTypeNum(0);
return MVT::Other;
}
More information about the llvm-commits
mailing list