aboutsummaryrefslogtreecommitdiff
path: root/include/llvm/CodeGen
diff options
context:
space:
mode:
Diffstat (limited to 'include/llvm/CodeGen')
-rw-r--r--include/llvm/CodeGen/DAGISelHeader.h17
1 files changed, 16 insertions, 1 deletions
diff --git a/include/llvm/CodeGen/DAGISelHeader.h b/include/llvm/CodeGen/DAGISelHeader.h
index f9490a77ca..831475d9a5 100644
--- a/include/llvm/CodeGen/DAGISelHeader.h
+++ b/include/llvm/CodeGen/DAGISelHeader.h
@@ -202,7 +202,9 @@ enum BuiltinOpcodes {
OPC_CheckValueType,
OPC_CheckComplexPat,
OPC_CheckAndImm1, OPC_CheckAndImm2, OPC_CheckAndImm4, OPC_CheckAndImm8,
- OPC_CheckOrImm1, OPC_CheckOrImm2, OPC_CheckOrImm4, OPC_CheckOrImm8
+ OPC_CheckOrImm1, OPC_CheckOrImm2, OPC_CheckOrImm4, OPC_CheckOrImm8,
+ OPC_IsProfitableToFold,
+ OPC_IsLegalToFold
};
struct MatchScope {
@@ -379,6 +381,19 @@ SDNode *SelectCodeCommon(SDNode *NodeToMatch, const unsigned char *MatcherTable,
case OPC_CheckOrImm8:
if (CheckOrImmediate(N, GetInt8(MatcherTable, MatcherIndex))) break;
continue;
+
+ case OPC_IsProfitableToFold:
+ assert(!NodeStack.size() == 1 && "No parent node");
+ if (!IsProfitableToFold(N, NodeStack[NodeStack.size()-2].getNode(),
+ NodeToMatch))
+ break;
+ continue;
+ case OPC_IsLegalToFold:
+ assert(!NodeStack.size() == 1 && "No parent node");
+ if (!IsLegalToFold(N, NodeStack[NodeStack.size()-2].getNode(),
+ NodeToMatch))
+ break;
+ continue;
}
// If the code reached this point, then the match failed pop out to the next