diff options
author | Evan Cheng <evan.cheng@apple.com> | 2007-07-05 07:19:29 +0000 |
---|---|---|
committer | Evan Cheng <evan.cheng@apple.com> | 2007-07-05 07:19:29 +0000 |
commit | 8012b077dd4d1c88e0221448c67147324c4e00cf (patch) | |
tree | fce93ccd6c36339c1da4aff000fac827fd793fd5 | |
parent | 0e1d37904abbf7e8c4c478408253dd995f3040f4 (diff) |
Instructions with ImmutablePredicateOperand aren't really predicable since their predicates are fixed at isel time.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37899 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | utils/TableGen/CodeGenTarget.cpp | 5 | ||||
-rw-r--r-- | utils/TableGen/InstrInfoEmitter.cpp | 3 |
2 files changed, 6 insertions, 2 deletions
diff --git a/utils/TableGen/CodeGenTarget.cpp b/utils/TableGen/CodeGenTarget.cpp index c54ecd02e4..e4d80ee669 100644 --- a/utils/TableGen/CodeGenTarget.cpp +++ b/utils/TableGen/CodeGenTarget.cpp @@ -411,7 +411,10 @@ CodeGenInstruction::CodeGenInstruction(Record *R, const std::string &AsmStr) if (unsigned NumArgs = MIOpInfo->getNumArgs()) NumOps = NumArgs; - isPredicable |= Rec->isSubClassOf("PredicateOperand"); + if (Rec->isSubClassOf("PredicateOperand")) { + if (!Rec->getValueAsBit("isImmutable")) + isPredicable = true; + } } else if (Rec->getName() == "variable_ops") { hasVariableNumberOfOperands = true; continue; diff --git a/utils/TableGen/InstrInfoEmitter.cpp b/utils/TableGen/InstrInfoEmitter.cpp index af01e4cd75..a57770de46 100644 --- a/utils/TableGen/InstrInfoEmitter.cpp +++ b/utils/TableGen/InstrInfoEmitter.cpp @@ -107,7 +107,8 @@ InstrInfoEmitter::GetOperandInfo(const CodeGenInstruction &Inst) { // Predicate operands. Check to see if the original unexpanded operand // was of type PredicateOperand. - if (Inst.OperandList[i].Rec->isSubClassOf("PredicateOperand")) + if (Inst.OperandList[i].Rec->isSubClassOf("PredicateOperand") && + !Inst.OperandList[i].Rec->getValueAsBit("isImmutable")) Res += "|M_PREDICATE_OPERAND"; // Fill in constraint info. |