aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/llvm/CodeGen/SelectionDAGISel.h6
-rw-r--r--utils/TableGen/DAGISelEmitter.cpp10
2 files changed, 7 insertions, 9 deletions
diff --git a/include/llvm/CodeGen/SelectionDAGISel.h b/include/llvm/CodeGen/SelectionDAGISel.h
index 397a5d8..790f23b 100644
--- a/include/llvm/CodeGen/SelectionDAGISel.h
+++ b/include/llvm/CodeGen/SelectionDAGISel.h
@@ -62,6 +62,10 @@ public:
SelectionDAG &DAG) {
return true;
}
+
+ /// IsFoldableBy - Returns true if the specific operand node N of U can be
+ /// folded during instruction selection?
+ virtual bool IsFoldableBy(SDNode *N, SDNode *U) { return true; }
/// CreateTargetHazardRecognizer - Return a newly allocated hazard recognizer
/// to use for this target when scheduling the DAG.
@@ -111,7 +115,7 @@ protected:
/// by tblgen. Others should not call it.
void SelectInlineAsmMemoryOperands(std::vector<SDOperand> &Ops,
SelectionDAG &DAG);
-
+
private:
SDOperand CopyValueToVirtualRegister(SelectionDAGLowering &SDL,
Value *V, unsigned Reg);
diff --git a/utils/TableGen/DAGISelEmitter.cpp b/utils/TableGen/DAGISelEmitter.cpp
index 8a62ed8..c194c47 100644
--- a/utils/TableGen/DAGISelEmitter.cpp
+++ b/utils/TableGen/DAGISelEmitter.cpp
@@ -2280,14 +2280,8 @@ public:
PInfo.hasProperty(SDNodeInfo::SDNPHasChain) ||
PInfo.hasProperty(SDNodeInfo::SDNPInFlag) ||
PInfo.hasProperty(SDNodeInfo::SDNPOptInFlag))
- if (PInfo.getNumOperands() > 1) {
- emitCheck("!isNonImmUse(" + ParentName + ".Val, " + RootName +
- ".Val)");
- } else {
- emitCheck("(" + ParentName + ".getNumOperands() == 1 || !" +
- "isNonImmUse(" + ParentName + ".Val, " + RootName +
- ".Val))");
- }
+ emitCheck("IsFoldableBy(" + RootName + ".Val, " + ParentName +
+ ".Val)");
}
}