forked from OSchip/llvm-project
add a new SDTCisOpSmallerThanOp type constraint, and implement fround/fextend in terms of it
llvm-svn: 23726
This commit is contained in:
parent
4892df38f3
commit
6e83cbf7f3
|
@ -45,6 +45,10 @@ class SDTCisVTSmallerThanOp<int OpNum, int OtherOp> : SDTypeConstraint<OpNum> {
|
|||
int OtherOperandNum = OtherOp;
|
||||
}
|
||||
|
||||
class SDTCisOpSmallerThanOp<int SmallOp, int BigOp> : SDTypeConstraint<SmallOp>{
|
||||
int BigOperandNum = BigOp;
|
||||
}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// Selection DAG Type Profile definitions.
|
||||
//
|
||||
|
@ -77,6 +81,12 @@ def SDTIntUnaryOp : SDTypeProfile<1, 1, [ // ctlz
|
|||
def SDTFPUnaryOp : SDTypeProfile<1, 1, [ // fneg, fsqrt, etc
|
||||
SDTCisSameAs<0, 1>, SDTCisFP<0>
|
||||
]>;
|
||||
def SDTFPRoundOp : SDTypeProfile<1, 1, [ // fround
|
||||
SDTCisFP<0>, SDTCisFP<1>, SDTCisOpSmallerThanOp<0, 1>
|
||||
]>;
|
||||
def SDTFPExtendOp : SDTypeProfile<1, 1, [ // fextend
|
||||
SDTCisFP<0>, SDTCisFP<1>, SDTCisOpSmallerThanOp<1, 0>
|
||||
]>;
|
||||
def SDTExtInreg : SDTypeProfile<1, 2, [ // sext_inreg
|
||||
SDTCisSameAs<0, 1>, SDTCisInt<0>, SDTCisVT<2, OtherVT>,
|
||||
SDTCisVTSmallerThanOp<2, 1>
|
||||
|
@ -136,6 +146,9 @@ def fabs : SDNode<"ISD::FABS" , SDTFPUnaryOp>;
|
|||
def fneg : SDNode<"ISD::FNEG" , SDTFPUnaryOp>;
|
||||
def fsqrt : SDNode<"ISD::FSQRT" , SDTFPUnaryOp>;
|
||||
|
||||
def fround : SDNode<"ISD::FP_ROUND" , SDTFPRoundOp>;
|
||||
def fextend : SDNode<"ISD::FP_EXTEND" , SDTFPExtendOp>;
|
||||
|
||||
def sext_inreg : SDNode<"ISD::SIGN_EXTEND_INREG", SDTExtInreg>;
|
||||
def ctlz : SDNode<"ISD::CTLZ" , SDTIntUnaryOp>;
|
||||
|
||||
|
|
Loading…
Reference in New Issue