diff options
author | Chris Lattner <sabre@nondot.org> | 2010-02-19 07:49:56 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2010-02-19 07:49:56 +0000 |
commit | 906b4995eeab9e6b6fd11a492498c95bba1ce0af (patch) | |
tree | 4ab297299463dfee3887fc22f4677c4b53bb463b /include | |
parent | 45a2d7d44ae697e28df383d31455145fb754ac58 (diff) | |
download | llvm-906b4995eeab9e6b6fd11a492498c95bba1ce0af.tar.gz llvm-906b4995eeab9e6b6fd11a492498c95bba1ce0af.tar.bz2 llvm-906b4995eeab9e6b6fd11a492498c95bba1ce0af.tar.xz |
add emitter support for integer constants and simple physreg references.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@96663 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include')
-rw-r--r-- | include/llvm/CodeGen/DAGISelHeader.h | 43 |
1 files changed, 42 insertions, 1 deletions
diff --git a/include/llvm/CodeGen/DAGISelHeader.h b/include/llvm/CodeGen/DAGISelHeader.h index fd0c4f1f85..1514dbaa70 100644 --- a/include/llvm/CodeGen/DAGISelHeader.h +++ b/include/llvm/CodeGen/DAGISelHeader.h @@ -172,6 +172,11 @@ bool CheckOrImmediate(SDValue V, int64_t Val) { return true; } +void EmitInteger(int64_t Val, MVT::SimpleValueType VT, + SmallVectorImpl<SDValue> &RecordedNodes) { + RecordedNodes.push_back(CurDAG->getTargetConstant(Val, VT)); +} + // These functions are marked always inline so that Idx doesn't get pinned to // the stack. ALWAYS_INLINE static int8_t @@ -218,7 +223,10 @@ enum BuiltinOpcodes { OPC_CheckAndImm1, OPC_CheckAndImm2, OPC_CheckAndImm4, OPC_CheckAndImm8, OPC_CheckOrImm1, OPC_CheckOrImm2, OPC_CheckOrImm4, OPC_CheckOrImm8, OPC_CheckFoldableChainNode, - OPC_CheckChainCompatible + OPC_CheckChainCompatible, + + OPC_EmitInteger1, OPC_EmitInteger2, OPC_EmitInteger4, OPC_EmitInteger8, + OPC_EmitRegister }; struct MatchScope { @@ -417,6 +425,39 @@ SDNode *SelectCodeCommon(SDNode *NodeToMatch, const unsigned char *MatcherTable, break; continue; } + + case OPC_EmitRegister: { + unsigned RegNo = MatcherTable[MatcherIndex++]; + MVT::SimpleValueType VT = + (MVT::SimpleValueType)MatcherTable[MatcherIndex++]; + SDValue Reg = CurDAG->getRegister(RegNo, VT); + RecordedNodes.push_back(N); + continue; + } + case OPC_EmitInteger1: { + MVT::SimpleValueType VT = + (MVT::SimpleValueType)MatcherTable[MatcherIndex++]; + EmitInteger(GetInt1(MatcherTable, MatcherIndex), VT, RecordedNodes); + continue; + } + case OPC_EmitInteger2: { + MVT::SimpleValueType VT = + (MVT::SimpleValueType)MatcherTable[MatcherIndex++]; + EmitInteger(GetInt2(MatcherTable, MatcherIndex), VT, RecordedNodes); + continue; + } + case OPC_EmitInteger4: { + MVT::SimpleValueType VT = + (MVT::SimpleValueType)MatcherTable[MatcherIndex++]; + EmitInteger(GetInt4(MatcherTable, MatcherIndex), VT, RecordedNodes); + continue; + } + case OPC_EmitInteger8: { + MVT::SimpleValueType VT = + (MVT::SimpleValueType)MatcherTable[MatcherIndex++]; + EmitInteger(GetInt8(MatcherTable, MatcherIndex), VT, RecordedNodes); + continue; + } } // If the code reached this point, then the match failed pop out to the next |