aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEvan Cheng <evan.cheng@apple.com>2007-07-05 07:19:29 +0000
committerEvan Cheng <evan.cheng@apple.com>2007-07-05 07:19:29 +0000
commit8012b077dd4d1c88e0221448c67147324c4e00cf (patch)
treefce93ccd6c36339c1da4aff000fac827fd793fd5
parent0e1d37904abbf7e8c4c478408253dd995f3040f4 (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.cpp5
-rw-r--r--utils/TableGen/InstrInfoEmitter.cpp3
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.