TableGen: Only fold when some operand made resolve progress
Summary: Make sure that we always fold immediately, so there's no point in attempting to re-fold when nothing changes. Change-Id: I069e1989455b6f2ca8606152f6adc1a5e817f1c8 Reviewers: arsenm, craig.topper, tra, MartinO Subscribers: wdng, llvm-commits Differential Revision: https://reviews.llvm.org/D44198 llvm-svn: 327847
This commit is contained in:
parent
a43af64fa2
commit
335c70f55e
|
@ -765,7 +765,7 @@ Init *UnOpInit::resolveReferences(Resolver &R) const {
|
|||
if (LHS != lhs)
|
||||
return (UnOpInit::get(getOpcode(), lhs, getType()))
|
||||
->Fold(R.getCurrentRecord());
|
||||
return Fold(R.getCurrentRecord());
|
||||
return const_cast<UnOpInit *>(this);
|
||||
}
|
||||
|
||||
std::string UnOpInit::getAsString() const {
|
||||
|
@ -948,7 +948,7 @@ Init *BinOpInit::resolveReferences(Resolver &R) const {
|
|||
if (LHS != lhs || RHS != rhs)
|
||||
return (BinOpInit::get(getOpcode(), lhs, rhs, getType()))
|
||||
->Fold(R.getCurrentRecord());
|
||||
return Fold(R.getCurrentRecord());
|
||||
return const_cast<BinOpInit *>(this);
|
||||
}
|
||||
|
||||
std::string BinOpInit::getAsString() const {
|
||||
|
@ -1173,7 +1173,7 @@ Init *TernOpInit::resolveReferences(Resolver &R) const {
|
|||
if (LHS != lhs || MHS != mhs || RHS != rhs)
|
||||
return (TernOpInit::get(getOpcode(), lhs, mhs, rhs, getType()))
|
||||
->Fold(R.getCurrentRecord());
|
||||
return Fold(R.getCurrentRecord());
|
||||
return const_cast<TernOpInit *>(this);
|
||||
}
|
||||
|
||||
std::string TernOpInit::getAsString() const {
|
||||
|
|
|
@ -1961,7 +1961,14 @@ Init *TGParser::ParseValue(Record *CurRec, RecTy *ItemType, IDParseMode Mode) {
|
|||
}
|
||||
|
||||
if (LHS->getType() != StringRecTy::get()) {
|
||||
LHS = UnOpInit::get(UnOpInit::CAST, LHS, StringRecTy::get());
|
||||
LHS = dyn_cast<TypedInit>(
|
||||
UnOpInit::get(UnOpInit::CAST, LHS, StringRecTy::get())
|
||||
->Fold(CurRec));
|
||||
if (!LHS) {
|
||||
Error(PasteLoc, Twine("can't cast '") + LHS->getAsString() +
|
||||
"' to string");
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
TypedInit *RHS = nullptr;
|
||||
|
@ -1988,7 +1995,14 @@ Init *TGParser::ParseValue(Record *CurRec, RecTy *ItemType, IDParseMode Mode) {
|
|||
}
|
||||
|
||||
if (RHS->getType() != StringRecTy::get()) {
|
||||
RHS = UnOpInit::get(UnOpInit::CAST, RHS, StringRecTy::get());
|
||||
RHS = dyn_cast<TypedInit>(
|
||||
UnOpInit::get(UnOpInit::CAST, RHS, StringRecTy::get())
|
||||
->Fold(CurRec));
|
||||
if (!RHS) {
|
||||
Error(PasteLoc, Twine("can't cast '") + RHS->getAsString() +
|
||||
"' to string");
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
|
|
Loading…
Reference in New Issue