47 void DAGTypeLegalizer::SoftenFloatResult(
SDNode *
N,
unsigned ResNo) {
48 DEBUG(
dbgs() <<
"Soften float result " << ResNo <<
": "; N->
dump(&DAG);
55 dbgs() <<
"SoftenFloatResult #" << ResNo <<
": ";
64 R = SoftenFloatRes_ConstantFP(cast<ConstantFPSDNode>(N));
67 R = SoftenFloatRes_EXTRACT_VECTOR_ELT(N);
break;
68 case ISD::FABS: R = SoftenFloatRes_FABS(N);
break;
69 case ISD::FADD: R = SoftenFloatRes_FADD(N);
break;
70 case ISD::FCEIL: R = SoftenFloatRes_FCEIL(N);
break;
72 case ISD::FCOS: R = SoftenFloatRes_FCOS(N);
break;
73 case ISD::FDIV: R = SoftenFloatRes_FDIV(N);
break;
74 case ISD::FEXP: R = SoftenFloatRes_FEXP(N);
break;
75 case ISD::FEXP2: R = SoftenFloatRes_FEXP2(N);
break;
76 case ISD::FFLOOR: R = SoftenFloatRes_FFLOOR(N);
break;
77 case ISD::FLOG: R = SoftenFloatRes_FLOG(N);
break;
78 case ISD::FLOG2: R = SoftenFloatRes_FLOG2(N);
break;
79 case ISD::FLOG10: R = SoftenFloatRes_FLOG10(N);
break;
80 case ISD::FMA: R = SoftenFloatRes_FMA(N);
break;
81 case ISD::FMUL: R = SoftenFloatRes_FMUL(N);
break;
83 case ISD::FNEG: R = SoftenFloatRes_FNEG(N);
break;
87 case ISD::FPOW: R = SoftenFloatRes_FPOW(N);
break;
88 case ISD::FPOWI: R = SoftenFloatRes_FPOWI(N);
break;
89 case ISD::FREM: R = SoftenFloatRes_FREM(N);
break;
90 case ISD::FRINT: R = SoftenFloatRes_FRINT(N);
break;
91 case ISD::FROUND: R = SoftenFloatRes_FROUND(N);
break;
92 case ISD::FSIN: R = SoftenFloatRes_FSIN(N);
break;
93 case ISD::FSQRT: R = SoftenFloatRes_FSQRT(N);
break;
94 case ISD::FSUB: R = SoftenFloatRes_FSUB(N);
break;
95 case ISD::FTRUNC: R = SoftenFloatRes_FTRUNC(N);
break;
96 case ISD::LOAD: R = SoftenFloatRes_LOAD(N);
break;
97 case ISD::SELECT: R = SoftenFloatRes_SELECT(N);
break;
101 case ISD::UNDEF: R = SoftenFloatRes_UNDEF(N);
break;
102 case ISD::VAARG: R = SoftenFloatRes_VAARG(N);
break;
107 SetSoftenedFloat(
SDValue(N, ResNo), R);
110 SDValue DAGTypeLegalizer::SoftenFloatRes_BITCAST(
SDNode *N) {
114 SDValue DAGTypeLegalizer::SoftenFloatRes_MERGE_VALUES(
SDNode *N,
116 SDValue Op = DisintegrateMERGE_VALUES(N, ResNo);
117 return BitConvertToInteger(Op);
120 SDValue DAGTypeLegalizer::SoftenFloatRes_BUILD_PAIR(
SDNode *N) {
135 SDValue DAGTypeLegalizer::SoftenFloatRes_EXTRACT_VECTOR_ELT(
SDNode *N) {
164 NVT, Ops, 2,
false,
SDLoc(N)).first;
176 NVT, &Op, 1,
false,
SDLoc(N)).first;
179 SDValue DAGTypeLegalizer::SoftenFloatRes_FCOPYSIGN(
SDNode *N) {
185 EVT RVT = RHS.getValueType();
203 }
else if (SizeDiff < 0) {
230 NVT, &Op, 1,
false,
SDLoc(N)).first;
243 NVT, Ops, 2,
false,
SDLoc(N)).first;
255 NVT, &Op, 1,
false,
SDLoc(N)).first;
267 NVT, &Op, 1,
false,
SDLoc(N)).first;
279 NVT, &Op, 1,
false,
SDLoc(N)).first;
291 NVT, &Op, 1,
false,
SDLoc(N)).first;
303 NVT, &Op, 1,
false,
SDLoc(N)).first;
315 NVT, &Op, 1,
false,
SDLoc(N)).first;
329 NVT, Ops, 3,
false,
SDLoc(N)).first;
342 NVT, Ops, 2,
false,
SDLoc(N)).first;
345 SDValue DAGTypeLegalizer::SoftenFloatRes_FNEARBYINT(
SDNode *N) {
354 NVT, &Op, 1,
false,
SDLoc(N)).first;
368 NVT, Ops, 2,
false,
SDLoc(N)).first;
371 SDValue DAGTypeLegalizer::SoftenFloatRes_FP_EXTEND(
SDNode *N) {
381 SDValue DAGTypeLegalizer::SoftenFloatRes_FP16_TO_FP32(
SDNode *N) {
388 SDValue DAGTypeLegalizer::SoftenFloatRes_FP_ROUND(
SDNode *N) {
406 NVT, Ops, 2,
false,
SDLoc(N)).first;
411 "Unsupported power type!");
420 NVT, Ops, 2,
false,
SDLoc(N)).first;
433 NVT, Ops, 2,
false,
SDLoc(N)).first;
445 NVT, &Op, 1,
false,
SDLoc(N)).first;
457 NVT, &Op, 1,
false,
SDLoc(N)).first;
469 NVT, &Op, 1,
false,
SDLoc(N)).first;
481 NVT, &Op, 1,
false,
SDLoc(N)).first;
494 NVT, Ops, 2,
false,
SDLoc(N)).first;
506 NVT, &Op, 1,
false,
SDLoc(N)).first;
548 SDValue DAGTypeLegalizer::SoftenFloatRes_SELECT_CC(
SDNode *N) {
578 SDValue DAGTypeLegalizer::SoftenFloatRes_XINT_TO_FP(
SDNode *N) {
603 &Op, 1,
false, dl).first;
611 bool DAGTypeLegalizer::SoftenFloatOperand(
SDNode *N,
unsigned OpNo) {
612 DEBUG(
dbgs() <<
"Soften float operand " << OpNo <<
": "; N->
dump(&DAG);
619 dbgs() <<
"SoftenFloatOperand Op #" << OpNo <<
": ";
624 case ISD::BITCAST: Res = SoftenFloatOp_BITCAST(N);
break;
625 case ISD::BR_CC: Res = SoftenFloatOp_BR_CC(N);
break;
631 case ISD::SETCC: Res = SoftenFloatOp_SETCC(N);
break;
632 case ISD::STORE: Res = SoftenFloatOp_STORE(N, OpNo);
break;
636 if (!Res.getNode())
return false;
640 if (Res.getNode() ==
N)
644 "Invalid operand expansion");
646 ReplaceValueWith(
SDValue(N, 0), Res);
655 SDValue DAGTypeLegalizer::SoftenFloatOp_FP_ROUND(
SDNode *N) {
671 NewLHS = GetSoftenedFloat(NewLHS);
672 NewRHS = GetSoftenedFloat(NewRHS);
677 if (NewRHS.getNode() == 0) {
689 SDValue DAGTypeLegalizer::SoftenFloatOp_FP_TO_SINT(
SDNode *N) {
697 SDValue DAGTypeLegalizer::SoftenFloatOp_FP_TO_UINT(
SDNode *N) {
705 SDValue DAGTypeLegalizer::SoftenFloatOp_FP32_TO_FP16(
SDNode *N) {
712 SDValue DAGTypeLegalizer::SoftenFloatOp_SELECT_CC(
SDNode *N) {
717 NewLHS = GetSoftenedFloat(NewLHS);
718 NewRHS = GetSoftenedFloat(NewRHS);
723 if (NewRHS.getNode() == 0) {
740 NewLHS = GetSoftenedFloat(NewLHS);
741 NewRHS = GetSoftenedFloat(NewRHS);
745 if (NewRHS.getNode() == 0) {
747 "Unexpected setcc expansion!");
757 SDValue DAGTypeLegalizer::SoftenFloatOp_STORE(
SDNode *N,
unsigned OpNo) {
759 assert(OpNo == 1 &&
"Can only soften the stored value!");
769 Val = GetSoftenedFloat(Val);
784 void DAGTypeLegalizer::ExpandFloatResult(
SDNode *N,
unsigned ResNo) {
796 dbgs() <<
"ExpandFloatResult #" << ResNo <<
": ";
801 case ISD::UNDEF: SplitRes_UNDEF(N, Lo, Hi);
break;
802 case ISD::SELECT: SplitRes_SELECT(N, Lo, Hi);
break;
810 case ISD::VAARG: ExpandRes_VAARG(N, Lo, Hi);
break;
813 case ISD::FABS: ExpandFloatRes_FABS(N, Lo, Hi);
break;
814 case ISD::FADD: ExpandFloatRes_FADD(N, Lo, Hi);
break;
815 case ISD::FCEIL: ExpandFloatRes_FCEIL(N, Lo, Hi);
break;
817 case ISD::FCOS: ExpandFloatRes_FCOS(N, Lo, Hi);
break;
818 case ISD::FDIV: ExpandFloatRes_FDIV(N, Lo, Hi);
break;
819 case ISD::FEXP: ExpandFloatRes_FEXP(N, Lo, Hi);
break;
820 case ISD::FEXP2: ExpandFloatRes_FEXP2(N, Lo, Hi);
break;
821 case ISD::FFLOOR: ExpandFloatRes_FFLOOR(N, Lo, Hi);
break;
822 case ISD::FLOG: ExpandFloatRes_FLOG(N, Lo, Hi);
break;
823 case ISD::FLOG2: ExpandFloatRes_FLOG2(N, Lo, Hi);
break;
824 case ISD::FLOG10: ExpandFloatRes_FLOG10(N, Lo, Hi);
break;
825 case ISD::FMA: ExpandFloatRes_FMA(N, Lo, Hi);
break;
826 case ISD::FMUL: ExpandFloatRes_FMUL(N, Lo, Hi);
break;
828 case ISD::FNEG: ExpandFloatRes_FNEG(N, Lo, Hi);
break;
830 case ISD::FPOW: ExpandFloatRes_FPOW(N, Lo, Hi);
break;
831 case ISD::FPOWI: ExpandFloatRes_FPOWI(N, Lo, Hi);
break;
832 case ISD::FRINT: ExpandFloatRes_FRINT(N, Lo, Hi);
break;
833 case ISD::FROUND: ExpandFloatRes_FROUND(N, Lo, Hi);
break;
834 case ISD::FSIN: ExpandFloatRes_FSIN(N, Lo, Hi);
break;
835 case ISD::FSQRT: ExpandFloatRes_FSQRT(N, Lo, Hi);
break;
836 case ISD::FSUB: ExpandFloatRes_FSUB(N, Lo, Hi);
break;
837 case ISD::FTRUNC: ExpandFloatRes_FTRUNC(N, Lo, Hi);
break;
838 case ISD::LOAD: ExpandFloatRes_LOAD(N, Lo, Hi);
break;
841 case ISD::FREM: ExpandFloatRes_FREM(N, Lo, Hi);
break;
849 void DAGTypeLegalizer::ExpandFloatRes_ConstantFP(
SDNode *N,
SDValue &Lo,
853 "Do not know how to expand this float constant!");
854 APInt C = cast<ConstantFPSDNode>(
N)->getValueAPF().bitcastToAPInt();
863 void DAGTypeLegalizer::ExpandFloatRes_FABS(
SDNode *N,
SDValue &Lo,
866 "Logic only correct for ppcf128!");
877 void DAGTypeLegalizer::ExpandFloatRes_FADD(
SDNode *N,
SDValue &Lo,
884 GetPairElements(Call, Lo, Hi);
887 void DAGTypeLegalizer::ExpandFloatRes_FCEIL(
SDNode *N,
894 GetPairElements(Call, Lo, Hi);
897 void DAGTypeLegalizer::ExpandFloatRes_FCOPYSIGN(
SDNode *N,
906 GetPairElements(Call, Lo, Hi);
909 void DAGTypeLegalizer::ExpandFloatRes_FCOS(
SDNode *N,
916 GetPairElements(Call, Lo, Hi);
919 void DAGTypeLegalizer::ExpandFloatRes_FDIV(
SDNode *N,
SDValue &Lo,
930 GetPairElements(Call, Lo, Hi);
933 void DAGTypeLegalizer::ExpandFloatRes_FEXP(
SDNode *N,
940 GetPairElements(Call, Lo, Hi);
943 void DAGTypeLegalizer::ExpandFloatRes_FEXP2(
SDNode *N,
950 GetPairElements(Call, Lo, Hi);
953 void DAGTypeLegalizer::ExpandFloatRes_FFLOOR(
SDNode *N,
960 GetPairElements(Call, Lo, Hi);
963 void DAGTypeLegalizer::ExpandFloatRes_FLOG(
SDNode *N,
970 GetPairElements(Call, Lo, Hi);
973 void DAGTypeLegalizer::ExpandFloatRes_FLOG2(
SDNode *N,
980 GetPairElements(Call, Lo, Hi);
983 void DAGTypeLegalizer::ExpandFloatRes_FLOG10(
SDNode *N,
990 GetPairElements(Call, Lo, Hi);
993 void DAGTypeLegalizer::ExpandFloatRes_FMA(
SDNode *N,
SDValue &Lo,
1004 GetPairElements(Call, Lo, Hi);
1007 void DAGTypeLegalizer::ExpandFloatRes_FMUL(
SDNode *N,
SDValue &Lo,
1018 GetPairElements(Call, Lo, Hi);
1021 void DAGTypeLegalizer::ExpandFloatRes_FNEARBYINT(
SDNode *N,
1030 GetPairElements(Call, Lo, Hi);
1033 void DAGTypeLegalizer::ExpandFloatRes_FNEG(
SDNode *N,
SDValue &Lo,
1041 void DAGTypeLegalizer::ExpandFloatRes_FP_EXTEND(
SDNode *N,
SDValue &Lo,
1049 void DAGTypeLegalizer::ExpandFloatRes_FPOW(
SDNode *N,
1056 GetPairElements(Call, Lo, Hi);
1059 void DAGTypeLegalizer::ExpandFloatRes_FPOWI(
SDNode *N,
1066 GetPairElements(Call, Lo, Hi);
1069 void DAGTypeLegalizer::ExpandFloatRes_FREM(
SDNode *N,
1076 GetPairElements(Call, Lo, Hi);
1079 void DAGTypeLegalizer::ExpandFloatRes_FRINT(
SDNode *N,
1086 GetPairElements(Call, Lo, Hi);
1089 void DAGTypeLegalizer::ExpandFloatRes_FROUND(
SDNode *N,
1098 GetPairElements(Call, Lo, Hi);
1101 void DAGTypeLegalizer::ExpandFloatRes_FSIN(
SDNode *N,
1108 GetPairElements(Call, Lo, Hi);
1111 void DAGTypeLegalizer::ExpandFloatRes_FSQRT(
SDNode *N,
1118 GetPairElements(Call, Lo, Hi);
1121 void DAGTypeLegalizer::ExpandFloatRes_FSUB(
SDNode *N,
SDValue &Lo,
1132 GetPairElements(Call, Lo, Hi);
1135 void DAGTypeLegalizer::ExpandFloatRes_FTRUNC(
SDNode *N,
1142 GetPairElements(Call, Lo, Hi);
1145 void DAGTypeLegalizer::ExpandFloatRes_LOAD(
SDNode *N,
SDValue &Lo,
1148 ExpandRes_NormalLoad(N, Lo, Hi);
1159 assert(NVT.
isByteSized() &&
"Expanded type not byte sized!");
1170 APInt(NVT.getSizeInBits(), 0)), NVT);
1174 ReplaceValueWith(
SDValue(LD, 1), Chain);
1177 void DAGTypeLegalizer::ExpandFloatRes_XINT_TO_FP(
SDNode *N,
SDValue &Lo,
1209 Hi = TLI.
makeLibCall(DAG, LC, VT, &Src, 1,
true, dl).first;
1210 GetPairElements(Hi, Lo, Hi);
1221 static const uint64_t TwoE32[] = { 0x41f0000000000000LL, 0 };
1222 static const uint64_t TwoE64[] = { 0x43f0000000000000LL, 0 };
1223 static const uint64_t TwoE128[] = { 0x47f0000000000000LL, 0 };
1246 GetPairElements(Lo, Lo, Hi);
1258 bool DAGTypeLegalizer::ExpandFloatOperand(
SDNode *N,
unsigned OpNo) {
1269 dbgs() <<
"ExpandFloatOperand Op #" << OpNo <<
": ";
1278 case ISD::BR_CC: Res = ExpandFloatOp_BR_CC(N);
break;
1284 case ISD::SETCC: Res = ExpandFloatOp_SETCC(N);
break;
1285 case ISD::STORE: Res = ExpandFloatOp_STORE(cast<StoreSDNode>(N),
1290 if (!Res.getNode())
return false;
1294 if (Res.getNode() ==
N)
1298 "Invalid operand expansion");
1300 ReplaceValueWith(
SDValue(N, 0), Res);
1306 void DAGTypeLegalizer::FloatExpandSetCCOperands(
SDValue &NewLHS,
1310 SDValue LHSLo, LHSHi, RHSLo, RHSHi;
1311 GetExpandedFloat(NewLHS, LHSLo, LHSHi);
1312 GetExpandedFloat(NewRHS, RHSLo, RHSHi);
1325 LHSLo, RHSLo, CCCode);
1330 LHSHi, RHSHi, CCCode);
1332 NewLHS = DAG.
getNode(
ISD::OR, dl, Tmp1.getValueType(), Tmp1, Tmp3);
1339 FloatExpandSetCCOperands(NewLHS, NewRHS, CCCode,
SDLoc(N));
1354 SDValue DAGTypeLegalizer::ExpandFloatOp_FCOPYSIGN(
SDNode *N) {
1356 "Logic only correct for ppcf128!");
1365 SDValue DAGTypeLegalizer::ExpandFloatOp_FP_ROUND(
SDNode *N) {
1367 "Logic only correct for ppcf128!");
1375 SDValue DAGTypeLegalizer::ExpandFloatOp_FP_TO_SINT(
SDNode *N) {
1383 "Logic only correct for ppcf128!");
1396 SDValue DAGTypeLegalizer::ExpandFloatOp_FP_TO_UINT(
SDNode *N) {
1404 "Logic only correct for ppcf128!");
1405 const uint64_t TwoE31[] = {0x41e0000000000000LL, 0};
1429 SDValue DAGTypeLegalizer::ExpandFloatOp_SELECT_CC(
SDNode *N) {
1432 FloatExpandSetCCOperands(NewLHS, NewRHS, CCCode,
SDLoc(N));
1450 FloatExpandSetCCOperands(NewLHS, NewRHS, CCCode,
SDLoc(N));
1455 "Unexpected setcc expansion!");
1464 SDValue DAGTypeLegalizer::ExpandFloatOp_STORE(
SDNode *N,
unsigned OpNo) {
1466 return ExpandOp_NormalStore(N, OpNo);
1469 assert(OpNo == 1 &&
"Can only expand the stored value so far");
1477 assert(NVT.
isByteSized() &&
"Expanded type not byte sized!");
SDValue getConstant(uint64_t Val, EVT VT, bool isTarget=false)
SDValue getValue(unsigned R) const
static APInt getAllOnesValue(unsigned numBits)
Get the all-ones value.
LLVMContext * getContext() const
void dump() const
dump - Dump this node, for debugging.
SDValue getVAArg(EVT VT, SDLoc dl, SDValue Chain, SDValue Ptr, SDValue SV, unsigned Align)
unsigned getOpcode() const
SDValue getSelectCC(SDLoc DL, SDValue LHS, SDValue RHS, SDValue True, SDValue False, ISD::CondCode Cond)
static const fltSemantics & EVTToAPFloatSemantics(EVT VT)
const SDValue & getOperand(unsigned Num) const
const SDValue & getBasePtr() const
Libcall getFPROUND(EVT OpVT, EVT RetVT)
Libcall getUINTTOFP(EVT OpVT, EVT RetVT)
SDValue getLoad(EVT VT, SDLoc dl, SDValue Chain, SDValue Ptr, MachinePointerInfo PtrInfo, bool isVolatile, bool isNonTemporal, bool isInvariant, unsigned Alignment, const MDNode *TBAAInfo=0, const MDNode *Ranges=0)
EVT getShiftAmountTy(EVT LHSTy) const
SDValue getStore(SDValue Chain, SDLoc dl, SDValue Val, SDValue Ptr, MachinePointerInfo PtrInfo, bool isVolatile, bool isNonTemporal, unsigned Alignment, const MDNode *TBAAInfo=0)
bool isNormalStore(const SDNode *N)
#define llvm_unreachable(msg)
EVT getValueType(unsigned ResNo) const
std::pair< SDValue, SDValue > makeLibCall(SelectionDAG &DAG, RTLIB::Libcall LC, EVT RetVT, const SDValue *Ops, unsigned NumOps, bool isSigned, SDLoc dl, bool doesNotReturn=false, bool isReturnValueUsed=true) const
Returns a pair of (return value, chain).
bool bitsGE(EVT VT) const
bitsGE - Return true if this has no less bits than VT.
SDValue getConstantFP(double Val, EVT VT, bool isTarget=false)
EVT getVectorElementType() const
bool isUNINDEXEDStore(const SDNode *N)
unsigned getNumValues() const
Simple integer binary arithmetic operators.
const SDValue & getBasePtr() const
SDValue getUNDEF(EVT VT)
getUNDEF - Return an UNDEF node. UNDEF does not have a useful SDLoc.
EVT getMemoryVT() const
getMemoryVT - Return the type of the in-memory value.
static RTLIB::Libcall GetFPLibCall(EVT VT, RTLIB::Libcall Call_F32, RTLIB::Libcall Call_F64, RTLIB::Libcall Call_F80, RTLIB::Libcall Call_F128, RTLIB::Libcall Call_PPCF128)
GetFPLibCall - Return the right libcall for the given floating point type.
bool bitsLE(EVT VT) const
bitsLE - Return true if this has no more bits than VT.
UNDEF - An undefined node.
SDNode * getNode() const
get the SDNode which holds the desired result
A self-contained host- and target-independent arbitrary-precision floating-point software implementat...
bool isNormalLoad(const SDNode *N)
Simple binary floating point operators.
bool isNonTemporal() const
const unsigned int integerPartWidth
Libcall getFPTOSINT(EVT OpVT, EVT RetVT)
const SDValue & getValue() const
X = FP_EXTEND(Y) - Extend a smaller FP type into a larger FP type.
const APFloat & getValueAPF() const
ISD::MemIndexedMode getAddressingMode() const
uint64_t getConstantOperandVal(unsigned Num) const
const MachinePointerInfo & getPointerInfo() const
bool isUNINDEXEDLoad(const SDNode *N)
const SDValue & getOffset() const
Libcall getFPEXT(EVT OpVT, EVT RetVT)
static const fltSemantics PPCDoubleDouble
SDNode * UpdateNodeOperands(SDNode *N, SDValue Op)
SDValue getExtLoad(ISD::LoadExtType ExtType, SDLoc dl, EVT VT, SDValue Chain, SDValue Ptr, MachinePointerInfo PtrInfo, EVT MemVT, bool isVolatile, bool isNonTemporal, unsigned Alignment, const MDNode *TBAAInfo=0)
SDValue getIntPtrConstant(uint64_t Val, bool isTarget=false)
const SDValue & getChain() const
MachineMemOperand * getMemOperand() const
raw_ostream & dbgs()
dbgs - Return a circular-buffered debug stream.
const MDNode * getTBAAInfo() const
Returns the TBAAInfo that describes the dereference.
ISD::LoadExtType getExtensionType() const
Class for arbitrary precision integers.
ZERO_EXTEND - Used for integer types, zeroing the new bits.
APInt bitcastToAPInt() const
SDValue getNode(unsigned Opcode, SDLoc DL, EVT VT)
ANY_EXTEND - Used for integer types. The high bits are undefined.
Libcall getFPTOUINT(EVT OpVT, EVT RetVT)
Bitwise operators - logical and, logical or, logical xor.
unsigned getSizeInBits() const
getSizeInBits - Return the size of the specified value type in bits.
void clearBit(unsigned bitPosition)
Set a given bit to 0.
SDValue getTruncStore(SDValue Chain, SDLoc dl, SDValue Val, SDValue Ptr, MachinePointerInfo PtrInfo, EVT TVT, bool isNonTemporal, bool isVolatile, unsigned Alignment, const MDNode *TBAAInfo=0)
SDValue getCondCode(ISD::CondCode Cond)
Libcall getSINTTOFP(EVT OpVT, EVT RetVT)
bool isByteSized() const
isByteSized - Return true if the bit size is a multiple of 8.
SDValue getSelect(SDLoc DL, EVT VT, SDValue Cond, SDValue LHS, SDValue RHS)
EVT getTypeToTransformTo(LLVMContext &Context, EVT VT) const
bool isTruncatingStore() const
SDValue getValueType(EVT)
SDValue getSetCC(SDLoc DL, EVT VT, SDValue LHS, SDValue RHS, ISD::CondCode Cond)
TRUNCATE - Completely drop the high bits.
unsigned getAlignment() const
void softenSetCCOperands(SelectionDAG &DAG, EVT VT, SDValue &NewLHS, SDValue &NewRHS, ISD::CondCode &CCCode, SDLoc DL) const