mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 12:41:49 +01:00
TableGen: Allow dag operators to be resolved late
Change-Id: I51bb80fd5c48c8ac441ab11e43d43c1b91b4b590 Differential revision: https://reviews.llvm.org/D44113 llvm-svn: 327495
This commit is contained in:
parent
5962b8bbf7
commit
1faf7228d7
@ -859,8 +859,13 @@ Init *BinOpInit::Fold(Record *CurRec, MultiClass *CurMultiClass) const {
|
||||
if (LHSs && RHSs) {
|
||||
DefInit *LOp = dyn_cast<DefInit>(LHSs->getOperator());
|
||||
DefInit *ROp = dyn_cast<DefInit>(RHSs->getOperator());
|
||||
if (!LOp || !ROp || LOp->getDef() != ROp->getDef())
|
||||
PrintFatalError("Concated Dag operators do not match!");
|
||||
if (!LOp || !ROp)
|
||||
break;
|
||||
if (LOp->getDef() != ROp->getDef()) {
|
||||
PrintFatalError(Twine("Concatenated Dag operators do not match: '") +
|
||||
LHSs->getAsString() + "' vs. '" + RHSs->getAsString() +
|
||||
"'");
|
||||
}
|
||||
SmallVector<Init*, 8> Args;
|
||||
SmallVector<StringInit*, 8> ArgNames;
|
||||
for (unsigned i = 0, e = LHSs->getNumArgs(); i != e; ++i) {
|
||||
|
@ -40,7 +40,13 @@
|
||||
// CHECK: dag d1 = (ops 1, ?:$name1, 2, 3);
|
||||
// CHECK: }
|
||||
|
||||
def ops;
|
||||
// CHECK: def E0 {
|
||||
// CHECK: dag ret = (ops 1, 2);
|
||||
// CHECK: }
|
||||
|
||||
class Ops;
|
||||
|
||||
def ops : Ops;
|
||||
|
||||
class Node<int val, string name> {
|
||||
int Val = val;
|
||||
@ -100,4 +106,11 @@ def C0 : C<[1, 2], ["a", "b"]>;
|
||||
|
||||
def D {
|
||||
dag d1 = !con((ops 1), (ops $name1), (ops), (ops 2, 3));
|
||||
}
|
||||
}
|
||||
|
||||
class E<Ops op> {
|
||||
// Allow concatenation of DAG nodes with operators from template arguments.
|
||||
dag ret = !con((op 1), (op 2));
|
||||
}
|
||||
|
||||
def E0 : E<ops>;
|
||||
|
Loading…
x
Reference in New Issue
Block a user