teach the type inference code how to infer types for instructions and node
xforms. Run type inference on result patterns, so we always have fully typed
results (and to catch errors in .td files).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@23369 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/utils/TableGen/DAGISelEmitter.h b/utils/TableGen/DAGISelEmitter.h
index bd1018b..de223b1 100644
--- a/utils/TableGen/DAGISelEmitter.h
+++ b/utils/TableGen/DAGISelEmitter.h
@@ -20,6 +20,7 @@
namespace llvm {
class Record;
struct Init;
+ class ListInit;
class DagInit;
class SDNodeInfo;
class TreePattern;
@@ -222,8 +223,9 @@
/// TreePattern constructor - Parse the specified DagInits into the
/// current record.
- TreePattern(Record *TheRec,
- const std::vector<DagInit *> &RawPat, DAGISelEmitter &ise);
+ TreePattern(Record *TheRec, ListInit *RawPat, DAGISelEmitter &ise);
+ TreePattern(Record *TheRec, DagInit *Pat, DAGISelEmitter &ise);
+ TreePattern(Record *TheRec, TreePatternNode *Pat, DAGISelEmitter &ise);
/// getTrees - Return the tree patterns which corresponds to this pattern.
///
@@ -285,15 +287,16 @@
public:
DAGInstruction(TreePattern *TP,
const std::vector<MVT::ValueType> &resultTypes,
- const std::vector<MVT::ValueType> &operandTypes,
- TreePatternNode *resultPattern)
+ const std::vector<MVT::ValueType> &operandTypes)
: Pattern(TP), ResultTypes(resultTypes), OperandTypes(operandTypes),
- ResultPattern(resultPattern) {}
+ ResultPattern(0) {}
TreePattern *getPattern() const { return Pattern; }
unsigned getNumResults() const { return ResultTypes.size(); }
unsigned getNumOperands() const { return OperandTypes.size(); }
+ void setResultPattern(TreePatternNode *R) { ResultPattern = R; }
+
MVT::ValueType getResultType(unsigned RN) const {
assert(RN < ResultTypes.size());
return ResultTypes[RN];