mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 20:51:52 +01:00
[TargetLowering] Remove optional arguments passing to makeLibCall
The patch introduces MakeLibCallOptions struct as suggested by @efriedma on D65497. The struct contain argument flags which will pass to makeLibCall function. The patch should not has any functionality changes. Differential Revision: https://reviews.llvm.org/D65795 llvm-svn: 369622
This commit is contained in:
parent
6a358c4b85
commit
9815a52a07
@ -2943,6 +2943,7 @@ protected:
|
||||
class TargetLowering : public TargetLoweringBase {
|
||||
public:
|
||||
struct DAGCombinerInfo;
|
||||
struct MakeLibCallOptions;
|
||||
|
||||
TargetLowering(const TargetLowering &) = delete;
|
||||
TargetLowering &operator=(const TargetLowering &) = delete;
|
||||
@ -3017,10 +3018,10 @@ public:
|
||||
|
||||
/// Returns a pair of (return value, chain).
|
||||
/// It is an error to pass RTLIB::UNKNOWN_LIBCALL as \p LC.
|
||||
std::pair<SDValue, SDValue> makeLibCall(
|
||||
SelectionDAG &DAG, RTLIB::Libcall LC, EVT RetVT, ArrayRef<SDValue> Ops,
|
||||
bool isSigned, const SDLoc &dl, bool doesNotReturn = false,
|
||||
bool isReturnValueUsed = true, bool isPostTypeLegalization = false) const;
|
||||
std::pair<SDValue, SDValue> makeLibCall(SelectionDAG &DAG, RTLIB::Libcall LC,
|
||||
EVT RetVT, ArrayRef<SDValue> Ops,
|
||||
MakeLibCallOptions CallOptions,
|
||||
const SDLoc &dl) const;
|
||||
|
||||
/// Check whether parameters to a call that are passed in callee saved
|
||||
/// registers are the same as from the calling function. This needs to be
|
||||
@ -3549,6 +3550,38 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
/// This structure is used to pass arguments to makeLibCall function.
|
||||
struct MakeLibCallOptions {
|
||||
bool IsSExt : 1;
|
||||
bool DoesNotReturn : 1;
|
||||
bool IsReturnValueUsed : 1;
|
||||
bool IsPostTypeLegalization : 1;
|
||||
|
||||
MakeLibCallOptions()
|
||||
: IsSExt(false), DoesNotReturn(false), IsReturnValueUsed(true),
|
||||
IsPostTypeLegalization(false) {}
|
||||
|
||||
MakeLibCallOptions &setSExt(bool Value = true) {
|
||||
IsSExt = Value;
|
||||
return *this;
|
||||
}
|
||||
|
||||
MakeLibCallOptions &setNoReturn(bool Value = true) {
|
||||
DoesNotReturn = Value;
|
||||
return *this;
|
||||
}
|
||||
|
||||
MakeLibCallOptions &setDiscardResult(bool Value = true) {
|
||||
IsReturnValueUsed = !Value;
|
||||
return *this;
|
||||
}
|
||||
|
||||
MakeLibCallOptions &setIsPostTypeLegalization(bool Value = true) {
|
||||
IsPostTypeLegalization = Value;
|
||||
return *this;
|
||||
}
|
||||
};
|
||||
|
||||
/// This function lowers an abstract call to a function into an actual call.
|
||||
/// This returns a pair of operands. The first element is the return value
|
||||
/// for the function (if RetTy is not VoidTy). The second element is the
|
||||
|
@ -200,51 +200,55 @@ SDValue DAGTypeLegalizer::SoftenFloatRes_FMINNUM(SDNode *N) {
|
||||
EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
|
||||
SDValue Ops[2] = { GetSoftenedFloat(N->getOperand(0)),
|
||||
GetSoftenedFloat(N->getOperand(1)) };
|
||||
TargetLowering::MakeLibCallOptions CallOptions;
|
||||
return TLI.makeLibCall(DAG, GetFPLibCall(N->getValueType(0),
|
||||
RTLIB::FMIN_F32,
|
||||
RTLIB::FMIN_F64,
|
||||
RTLIB::FMIN_F80,
|
||||
RTLIB::FMIN_F128,
|
||||
RTLIB::FMIN_PPCF128),
|
||||
NVT, Ops, false, SDLoc(N)).first;
|
||||
NVT, Ops, CallOptions, SDLoc(N)).first;
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::SoftenFloatRes_FMAXNUM(SDNode *N) {
|
||||
EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
|
||||
SDValue Ops[2] = { GetSoftenedFloat(N->getOperand(0)),
|
||||
GetSoftenedFloat(N->getOperand(1)) };
|
||||
TargetLowering::MakeLibCallOptions CallOptions;
|
||||
return TLI.makeLibCall(DAG, GetFPLibCall(N->getValueType(0),
|
||||
RTLIB::FMAX_F32,
|
||||
RTLIB::FMAX_F64,
|
||||
RTLIB::FMAX_F80,
|
||||
RTLIB::FMAX_F128,
|
||||
RTLIB::FMAX_PPCF128),
|
||||
NVT, Ops, false, SDLoc(N)).first;
|
||||
NVT, Ops, CallOptions, SDLoc(N)).first;
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::SoftenFloatRes_FADD(SDNode *N) {
|
||||
EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
|
||||
SDValue Ops[2] = { GetSoftenedFloat(N->getOperand(0)),
|
||||
GetSoftenedFloat(N->getOperand(1)) };
|
||||
TargetLowering::MakeLibCallOptions CallOptions;
|
||||
return TLI.makeLibCall(DAG, GetFPLibCall(N->getValueType(0),
|
||||
RTLIB::ADD_F32,
|
||||
RTLIB::ADD_F64,
|
||||
RTLIB::ADD_F80,
|
||||
RTLIB::ADD_F128,
|
||||
RTLIB::ADD_PPCF128),
|
||||
NVT, Ops, false, SDLoc(N)).first;
|
||||
NVT, Ops, CallOptions, SDLoc(N)).first;
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::SoftenFloatRes_FCEIL(SDNode *N) {
|
||||
EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
|
||||
SDValue Op = GetSoftenedFloat(N->getOperand(0));
|
||||
TargetLowering::MakeLibCallOptions CallOptions;
|
||||
return TLI.makeLibCall(DAG, GetFPLibCall(N->getValueType(0),
|
||||
RTLIB::CEIL_F32,
|
||||
RTLIB::CEIL_F64,
|
||||
RTLIB::CEIL_F80,
|
||||
RTLIB::CEIL_F128,
|
||||
RTLIB::CEIL_PPCF128),
|
||||
NVT, Op, false, SDLoc(N)).first;
|
||||
NVT, Op, CallOptions, SDLoc(N)).first;
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::SoftenFloatRes_FCOPYSIGN(SDNode *N, unsigned ResNo) {
|
||||
@ -301,98 +305,106 @@ SDValue DAGTypeLegalizer::SoftenFloatRes_FCOPYSIGN(SDNode *N, unsigned ResNo) {
|
||||
SDValue DAGTypeLegalizer::SoftenFloatRes_FCOS(SDNode *N) {
|
||||
EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
|
||||
SDValue Op = GetSoftenedFloat(N->getOperand(0));
|
||||
TargetLowering::MakeLibCallOptions CallOptions;
|
||||
return TLI.makeLibCall(DAG, GetFPLibCall(N->getValueType(0),
|
||||
RTLIB::COS_F32,
|
||||
RTLIB::COS_F64,
|
||||
RTLIB::COS_F80,
|
||||
RTLIB::COS_F128,
|
||||
RTLIB::COS_PPCF128),
|
||||
NVT, Op, false, SDLoc(N)).first;
|
||||
NVT, Op, CallOptions, SDLoc(N)).first;
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::SoftenFloatRes_FDIV(SDNode *N) {
|
||||
EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
|
||||
SDValue Ops[2] = { GetSoftenedFloat(N->getOperand(0)),
|
||||
GetSoftenedFloat(N->getOperand(1)) };
|
||||
TargetLowering::MakeLibCallOptions CallOptions;
|
||||
return TLI.makeLibCall(DAG, GetFPLibCall(N->getValueType(0),
|
||||
RTLIB::DIV_F32,
|
||||
RTLIB::DIV_F64,
|
||||
RTLIB::DIV_F80,
|
||||
RTLIB::DIV_F128,
|
||||
RTLIB::DIV_PPCF128),
|
||||
NVT, Ops, false, SDLoc(N)).first;
|
||||
NVT, Ops, CallOptions, SDLoc(N)).first;
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::SoftenFloatRes_FEXP(SDNode *N) {
|
||||
EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
|
||||
SDValue Op = GetSoftenedFloat(N->getOperand(0));
|
||||
TargetLowering::MakeLibCallOptions CallOptions;
|
||||
return TLI.makeLibCall(DAG, GetFPLibCall(N->getValueType(0),
|
||||
RTLIB::EXP_F32,
|
||||
RTLIB::EXP_F64,
|
||||
RTLIB::EXP_F80,
|
||||
RTLIB::EXP_F128,
|
||||
RTLIB::EXP_PPCF128),
|
||||
NVT, Op, false, SDLoc(N)).first;
|
||||
NVT, Op, CallOptions, SDLoc(N)).first;
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::SoftenFloatRes_FEXP2(SDNode *N) {
|
||||
EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
|
||||
SDValue Op = GetSoftenedFloat(N->getOperand(0));
|
||||
TargetLowering::MakeLibCallOptions CallOptions;
|
||||
return TLI.makeLibCall(DAG, GetFPLibCall(N->getValueType(0),
|
||||
RTLIB::EXP2_F32,
|
||||
RTLIB::EXP2_F64,
|
||||
RTLIB::EXP2_F80,
|
||||
RTLIB::EXP2_F128,
|
||||
RTLIB::EXP2_PPCF128),
|
||||
NVT, Op, false, SDLoc(N)).first;
|
||||
NVT, Op, CallOptions, SDLoc(N)).first;
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::SoftenFloatRes_FFLOOR(SDNode *N) {
|
||||
EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
|
||||
SDValue Op = GetSoftenedFloat(N->getOperand(0));
|
||||
TargetLowering::MakeLibCallOptions CallOptions;
|
||||
return TLI.makeLibCall(DAG, GetFPLibCall(N->getValueType(0),
|
||||
RTLIB::FLOOR_F32,
|
||||
RTLIB::FLOOR_F64,
|
||||
RTLIB::FLOOR_F80,
|
||||
RTLIB::FLOOR_F128,
|
||||
RTLIB::FLOOR_PPCF128),
|
||||
NVT, Op, false, SDLoc(N)).first;
|
||||
NVT, Op, CallOptions, SDLoc(N)).first;
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::SoftenFloatRes_FLOG(SDNode *N) {
|
||||
EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
|
||||
SDValue Op = GetSoftenedFloat(N->getOperand(0));
|
||||
TargetLowering::MakeLibCallOptions CallOptions;
|
||||
return TLI.makeLibCall(DAG, GetFPLibCall(N->getValueType(0),
|
||||
RTLIB::LOG_F32,
|
||||
RTLIB::LOG_F64,
|
||||
RTLIB::LOG_F80,
|
||||
RTLIB::LOG_F128,
|
||||
RTLIB::LOG_PPCF128),
|
||||
NVT, Op, false, SDLoc(N)).first;
|
||||
NVT, Op, CallOptions, SDLoc(N)).first;
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::SoftenFloatRes_FLOG2(SDNode *N) {
|
||||
EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
|
||||
SDValue Op = GetSoftenedFloat(N->getOperand(0));
|
||||
TargetLowering::MakeLibCallOptions CallOptions;
|
||||
return TLI.makeLibCall(DAG, GetFPLibCall(N->getValueType(0),
|
||||
RTLIB::LOG2_F32,
|
||||
RTLIB::LOG2_F64,
|
||||
RTLIB::LOG2_F80,
|
||||
RTLIB::LOG2_F128,
|
||||
RTLIB::LOG2_PPCF128),
|
||||
NVT, Op, false, SDLoc(N)).first;
|
||||
NVT, Op, CallOptions, SDLoc(N)).first;
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::SoftenFloatRes_FLOG10(SDNode *N) {
|
||||
EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
|
||||
SDValue Op = GetSoftenedFloat(N->getOperand(0));
|
||||
TargetLowering::MakeLibCallOptions CallOptions;
|
||||
return TLI.makeLibCall(DAG, GetFPLibCall(N->getValueType(0),
|
||||
RTLIB::LOG10_F32,
|
||||
RTLIB::LOG10_F64,
|
||||
RTLIB::LOG10_F80,
|
||||
RTLIB::LOG10_F128,
|
||||
RTLIB::LOG10_PPCF128),
|
||||
NVT, Op, false, SDLoc(N)).first;
|
||||
NVT, Op, CallOptions, SDLoc(N)).first;
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::SoftenFloatRes_FMA(SDNode *N) {
|
||||
@ -400,38 +412,41 @@ SDValue DAGTypeLegalizer::SoftenFloatRes_FMA(SDNode *N) {
|
||||
SDValue Ops[3] = { GetSoftenedFloat(N->getOperand(0)),
|
||||
GetSoftenedFloat(N->getOperand(1)),
|
||||
GetSoftenedFloat(N->getOperand(2)) };
|
||||
TargetLowering::MakeLibCallOptions CallOptions;
|
||||
return TLI.makeLibCall(DAG, GetFPLibCall(N->getValueType(0),
|
||||
RTLIB::FMA_F32,
|
||||
RTLIB::FMA_F64,
|
||||
RTLIB::FMA_F80,
|
||||
RTLIB::FMA_F128,
|
||||
RTLIB::FMA_PPCF128),
|
||||
NVT, Ops, false, SDLoc(N)).first;
|
||||
NVT, Ops, CallOptions, SDLoc(N)).first;
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::SoftenFloatRes_FMUL(SDNode *N) {
|
||||
EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
|
||||
SDValue Ops[2] = { GetSoftenedFloat(N->getOperand(0)),
|
||||
GetSoftenedFloat(N->getOperand(1)) };
|
||||
TargetLowering::MakeLibCallOptions CallOptions;
|
||||
return TLI.makeLibCall(DAG, GetFPLibCall(N->getValueType(0),
|
||||
RTLIB::MUL_F32,
|
||||
RTLIB::MUL_F64,
|
||||
RTLIB::MUL_F80,
|
||||
RTLIB::MUL_F128,
|
||||
RTLIB::MUL_PPCF128),
|
||||
NVT, Ops, false, SDLoc(N)).first;
|
||||
NVT, Ops, CallOptions, SDLoc(N)).first;
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::SoftenFloatRes_FNEARBYINT(SDNode *N) {
|
||||
EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
|
||||
SDValue Op = GetSoftenedFloat(N->getOperand(0));
|
||||
TargetLowering::MakeLibCallOptions CallOptions;
|
||||
return TLI.makeLibCall(DAG, GetFPLibCall(N->getValueType(0),
|
||||
RTLIB::NEARBYINT_F32,
|
||||
RTLIB::NEARBYINT_F64,
|
||||
RTLIB::NEARBYINT_F80,
|
||||
RTLIB::NEARBYINT_F128,
|
||||
RTLIB::NEARBYINT_PPCF128),
|
||||
NVT, Op, false, SDLoc(N)).first;
|
||||
NVT, Op, CallOptions, SDLoc(N)).first;
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::SoftenFloatRes_FNEG(SDNode *N, unsigned ResNo) {
|
||||
@ -452,13 +467,14 @@ SDValue DAGTypeLegalizer::SoftenFloatRes_FNEG(SDNode *N, unsigned ResNo) {
|
||||
// Expand Y = FNEG(X) -> Y = SUB -0.0, X
|
||||
SDValue Ops[2] = { DAG.getConstantFP(-0.0, dl, N->getValueType(0)),
|
||||
GetSoftenedFloat(N->getOperand(0)) };
|
||||
TargetLowering::MakeLibCallOptions CallOptions;
|
||||
return TLI.makeLibCall(DAG, GetFPLibCall(N->getValueType(0),
|
||||
RTLIB::SUB_F32,
|
||||
RTLIB::SUB_F64,
|
||||
RTLIB::SUB_F80,
|
||||
RTLIB::SUB_F128,
|
||||
RTLIB::SUB_PPCF128),
|
||||
NVT, Ops, false, dl).first;
|
||||
NVT, Ops, CallOptions, dl).first;
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::SoftenFloatRes_FP_EXTEND(SDNode *N) {
|
||||
@ -485,7 +501,8 @@ SDValue DAGTypeLegalizer::SoftenFloatRes_FP_EXTEND(SDNode *N) {
|
||||
|
||||
RTLIB::Libcall LC = RTLIB::getFPEXT(Op.getValueType(), N->getValueType(0));
|
||||
assert(LC != RTLIB::UNKNOWN_LIBCALL && "Unsupported FP_EXTEND!");
|
||||
return TLI.makeLibCall(DAG, LC, NVT, Op, false, SDLoc(N)).first;
|
||||
TargetLowering::MakeLibCallOptions CallOptions;
|
||||
return TLI.makeLibCall(DAG, LC, NVT, Op, CallOptions, SDLoc(N)).first;
|
||||
}
|
||||
|
||||
// FIXME: Should we just use 'normal' FP_EXTEND / FP_TRUNC instead of special
|
||||
@ -493,15 +510,16 @@ SDValue DAGTypeLegalizer::SoftenFloatRes_FP_EXTEND(SDNode *N) {
|
||||
SDValue DAGTypeLegalizer::SoftenFloatRes_FP16_TO_FP(SDNode *N) {
|
||||
EVT MidVT = TLI.getTypeToTransformTo(*DAG.getContext(), MVT::f32);
|
||||
SDValue Op = N->getOperand(0);
|
||||
TargetLowering::MakeLibCallOptions CallOptions;
|
||||
SDValue Res32 = TLI.makeLibCall(DAG, RTLIB::FPEXT_F16_F32, MidVT, Op,
|
||||
false, SDLoc(N)).first;
|
||||
CallOptions, SDLoc(N)).first;
|
||||
if (N->getValueType(0) == MVT::f32)
|
||||
return Res32;
|
||||
|
||||
EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
|
||||
RTLIB::Libcall LC = RTLIB::getFPEXT(MVT::f32, N->getValueType(0));
|
||||
assert(LC != RTLIB::UNKNOWN_LIBCALL && "Unsupported FP_EXTEND!");
|
||||
return TLI.makeLibCall(DAG, LC, NVT, Res32, false, SDLoc(N)).first;
|
||||
return TLI.makeLibCall(DAG, LC, NVT, Res32, CallOptions, SDLoc(N)).first;
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::SoftenFloatRes_FP_ROUND(SDNode *N) {
|
||||
@ -515,20 +533,22 @@ SDValue DAGTypeLegalizer::SoftenFloatRes_FP_ROUND(SDNode *N) {
|
||||
|
||||
RTLIB::Libcall LC = RTLIB::getFPROUND(Op.getValueType(), N->getValueType(0));
|
||||
assert(LC != RTLIB::UNKNOWN_LIBCALL && "Unsupported FP_ROUND!");
|
||||
return TLI.makeLibCall(DAG, LC, NVT, Op, false, SDLoc(N)).first;
|
||||
TargetLowering::MakeLibCallOptions CallOptions;
|
||||
return TLI.makeLibCall(DAG, LC, NVT, Op, CallOptions, SDLoc(N)).first;
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::SoftenFloatRes_FPOW(SDNode *N) {
|
||||
EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
|
||||
SDValue Ops[2] = { GetSoftenedFloat(N->getOperand(0)),
|
||||
GetSoftenedFloat(N->getOperand(1)) };
|
||||
TargetLowering::MakeLibCallOptions CallOptions;
|
||||
return TLI.makeLibCall(DAG, GetFPLibCall(N->getValueType(0),
|
||||
RTLIB::POW_F32,
|
||||
RTLIB::POW_F64,
|
||||
RTLIB::POW_F80,
|
||||
RTLIB::POW_F128,
|
||||
RTLIB::POW_PPCF128),
|
||||
NVT, Ops, false, SDLoc(N)).first;
|
||||
NVT, Ops, CallOptions, SDLoc(N)).first;
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::SoftenFloatRes_FPOWI(SDNode *N) {
|
||||
@ -536,87 +556,94 @@ SDValue DAGTypeLegalizer::SoftenFloatRes_FPOWI(SDNode *N) {
|
||||
"Unsupported power type!");
|
||||
EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
|
||||
SDValue Ops[2] = { GetSoftenedFloat(N->getOperand(0)), N->getOperand(1) };
|
||||
TargetLowering::MakeLibCallOptions CallOptions;
|
||||
return TLI.makeLibCall(DAG, GetFPLibCall(N->getValueType(0),
|
||||
RTLIB::POWI_F32,
|
||||
RTLIB::POWI_F64,
|
||||
RTLIB::POWI_F80,
|
||||
RTLIB::POWI_F128,
|
||||
RTLIB::POWI_PPCF128),
|
||||
NVT, Ops, false, SDLoc(N)).first;
|
||||
NVT, Ops, CallOptions, SDLoc(N)).first;
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::SoftenFloatRes_FREM(SDNode *N) {
|
||||
EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
|
||||
SDValue Ops[2] = { GetSoftenedFloat(N->getOperand(0)),
|
||||
GetSoftenedFloat(N->getOperand(1)) };
|
||||
TargetLowering::MakeLibCallOptions CallOptions;
|
||||
return TLI.makeLibCall(DAG, GetFPLibCall(N->getValueType(0),
|
||||
RTLIB::REM_F32,
|
||||
RTLIB::REM_F64,
|
||||
RTLIB::REM_F80,
|
||||
RTLIB::REM_F128,
|
||||
RTLIB::REM_PPCF128),
|
||||
NVT, Ops, false, SDLoc(N)).first;
|
||||
NVT, Ops, CallOptions, SDLoc(N)).first;
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::SoftenFloatRes_FRINT(SDNode *N) {
|
||||
EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
|
||||
SDValue Op = GetSoftenedFloat(N->getOperand(0));
|
||||
TargetLowering::MakeLibCallOptions CallOptions;
|
||||
return TLI.makeLibCall(DAG, GetFPLibCall(N->getValueType(0),
|
||||
RTLIB::RINT_F32,
|
||||
RTLIB::RINT_F64,
|
||||
RTLIB::RINT_F80,
|
||||
RTLIB::RINT_F128,
|
||||
RTLIB::RINT_PPCF128),
|
||||
NVT, Op, false, SDLoc(N)).first;
|
||||
NVT, Op, CallOptions, SDLoc(N)).first;
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::SoftenFloatRes_FROUND(SDNode *N) {
|
||||
EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
|
||||
SDValue Op = GetSoftenedFloat(N->getOperand(0));
|
||||
TargetLowering::MakeLibCallOptions CallOptions;
|
||||
return TLI.makeLibCall(DAG, GetFPLibCall(N->getValueType(0),
|
||||
RTLIB::ROUND_F32,
|
||||
RTLIB::ROUND_F64,
|
||||
RTLIB::ROUND_F80,
|
||||
RTLIB::ROUND_F128,
|
||||
RTLIB::ROUND_PPCF128),
|
||||
NVT, Op, false, SDLoc(N)).first;
|
||||
NVT, Op, CallOptions, SDLoc(N)).first;
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::SoftenFloatRes_FSIN(SDNode *N) {
|
||||
EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
|
||||
SDValue Op = GetSoftenedFloat(N->getOperand(0));
|
||||
TargetLowering::MakeLibCallOptions CallOptions;
|
||||
return TLI.makeLibCall(DAG, GetFPLibCall(N->getValueType(0),
|
||||
RTLIB::SIN_F32,
|
||||
RTLIB::SIN_F64,
|
||||
RTLIB::SIN_F80,
|
||||
RTLIB::SIN_F128,
|
||||
RTLIB::SIN_PPCF128),
|
||||
NVT, Op, false, SDLoc(N)).first;
|
||||
NVT, Op, CallOptions, SDLoc(N)).first;
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::SoftenFloatRes_FSQRT(SDNode *N) {
|
||||
EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
|
||||
SDValue Op = GetSoftenedFloat(N->getOperand(0));
|
||||
TargetLowering::MakeLibCallOptions CallOptions;
|
||||
return TLI.makeLibCall(DAG, GetFPLibCall(N->getValueType(0),
|
||||
RTLIB::SQRT_F32,
|
||||
RTLIB::SQRT_F64,
|
||||
RTLIB::SQRT_F80,
|
||||
RTLIB::SQRT_F128,
|
||||
RTLIB::SQRT_PPCF128),
|
||||
NVT, Op, false, SDLoc(N)).first;
|
||||
NVT, Op, CallOptions, SDLoc(N)).first;
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::SoftenFloatRes_FSUB(SDNode *N) {
|
||||
EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
|
||||
SDValue Ops[2] = { GetSoftenedFloat(N->getOperand(0)),
|
||||
GetSoftenedFloat(N->getOperand(1)) };
|
||||
TargetLowering::MakeLibCallOptions CallOptions;
|
||||
return TLI.makeLibCall(DAG, GetFPLibCall(N->getValueType(0),
|
||||
RTLIB::SUB_F32,
|
||||
RTLIB::SUB_F64,
|
||||
RTLIB::SUB_F80,
|
||||
RTLIB::SUB_F128,
|
||||
RTLIB::SUB_PPCF128),
|
||||
NVT, Ops, false, SDLoc(N)).first;
|
||||
NVT, Ops, CallOptions, SDLoc(N)).first;
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::SoftenFloatRes_FTRUNC(SDNode *N) {
|
||||
@ -625,13 +652,14 @@ SDValue DAGTypeLegalizer::SoftenFloatRes_FTRUNC(SDNode *N) {
|
||||
return DAG.getNode(ISD::FP_TO_FP16, SDLoc(N), NVT, N->getOperand(0));
|
||||
|
||||
SDValue Op = GetSoftenedFloat(N->getOperand(0));
|
||||
TargetLowering::MakeLibCallOptions CallOptions;
|
||||
return TLI.makeLibCall(DAG, GetFPLibCall(N->getValueType(0),
|
||||
RTLIB::TRUNC_F32,
|
||||
RTLIB::TRUNC_F64,
|
||||
RTLIB::TRUNC_F80,
|
||||
RTLIB::TRUNC_F128,
|
||||
RTLIB::TRUNC_PPCF128),
|
||||
NVT, Op, false, SDLoc(N)).first;
|
||||
NVT, Op, CallOptions, SDLoc(N)).first;
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::SoftenFloatRes_LOAD(SDNode *N, unsigned ResNo) {
|
||||
@ -736,9 +764,11 @@ SDValue DAGTypeLegalizer::SoftenFloatRes_XINT_TO_FP(SDNode *N) {
|
||||
// Sign/zero extend the argument if the libcall takes a larger type.
|
||||
SDValue Op = DAG.getNode(Signed ? ISD::SIGN_EXTEND : ISD::ZERO_EXTEND, dl,
|
||||
NVT, N->getOperand(0));
|
||||
TargetLowering::MakeLibCallOptions CallOptions;
|
||||
CallOptions.setSExt(Signed);
|
||||
return TLI.makeLibCall(DAG, LC,
|
||||
TLI.getTypeToTransformTo(*DAG.getContext(), RVT),
|
||||
Op, Signed, dl).first;
|
||||
Op, CallOptions, dl).first;
|
||||
}
|
||||
|
||||
|
||||
@ -868,7 +898,8 @@ SDValue DAGTypeLegalizer::SoftenFloatOp_FP_EXTEND(SDNode *N) {
|
||||
RTLIB::Libcall LC = RTLIB::getFPEXT(SVT, RVT);
|
||||
assert(LC != RTLIB::UNKNOWN_LIBCALL && "Unsupported FP_EXTEND libcall");
|
||||
|
||||
return TLI.makeLibCall(DAG, LC, RVT, Op, false, SDLoc(N)).first;
|
||||
TargetLowering::MakeLibCallOptions CallOptions;
|
||||
return TLI.makeLibCall(DAG, LC, RVT, Op, CallOptions, SDLoc(N)).first;
|
||||
}
|
||||
|
||||
|
||||
@ -885,7 +916,8 @@ SDValue DAGTypeLegalizer::SoftenFloatOp_FP_ROUND(SDNode *N) {
|
||||
assert(LC != RTLIB::UNKNOWN_LIBCALL && "Unsupported FP_ROUND libcall");
|
||||
|
||||
SDValue Op = GetSoftenedFloat(N->getOperand(0));
|
||||
return TLI.makeLibCall(DAG, LC, RVT, Op, false, SDLoc(N)).first;
|
||||
TargetLowering::MakeLibCallOptions CallOptions;
|
||||
return TLI.makeLibCall(DAG, LC, RVT, Op, CallOptions, SDLoc(N)).first;
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::SoftenFloatOp_BR_CC(SDNode *N) {
|
||||
@ -962,7 +994,8 @@ SDValue DAGTypeLegalizer::SoftenFloatOp_FP_TO_XINT(SDNode *N) {
|
||||
assert(LC != RTLIB::UNKNOWN_LIBCALL && "Unsupported FP_TO_XINT!");
|
||||
|
||||
SDValue Op = GetSoftenedFloat(N->getOperand(0));
|
||||
SDValue Res = TLI.makeLibCall(DAG, LC, NVT, Op, false, dl).first;
|
||||
TargetLowering::MakeLibCallOptions CallOptions;
|
||||
SDValue Res = TLI.makeLibCall(DAG, LC, NVT, Op, CallOptions, dl).first;
|
||||
|
||||
// Truncate the result if the libcall returns a larger type.
|
||||
return DAG.getNode(ISD::TRUNCATE, dl, RVT, Res);
|
||||
@ -1047,13 +1080,14 @@ SDValue DAGTypeLegalizer::SoftenFloatOp_LROUND(SDNode *N) {
|
||||
|
||||
SDValue Op = GetSoftenedFloat(N->getOperand(0));
|
||||
EVT RetVT = N->getOperand(0).getValueType().getSimpleVT().SimpleTy;
|
||||
TargetLowering::MakeLibCallOptions CallOptions;
|
||||
return TLI.makeLibCall(DAG, GetFPLibCall(RetVT,
|
||||
RTLIB::LROUND_F32,
|
||||
RTLIB::LROUND_F64,
|
||||
RTLIB::LROUND_F80,
|
||||
RTLIB::LROUND_F128,
|
||||
RTLIB::LROUND_PPCF128),
|
||||
NVT, Op, false, SDLoc(N)).first;
|
||||
NVT, Op, CallOptions, SDLoc(N)).first;
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::SoftenFloatOp_LLROUND(SDNode *N) {
|
||||
@ -1061,13 +1095,14 @@ SDValue DAGTypeLegalizer::SoftenFloatOp_LLROUND(SDNode *N) {
|
||||
|
||||
SDValue Op = GetSoftenedFloat(N->getOperand(0));
|
||||
EVT RetVT = N->getOperand(0).getValueType().getSimpleVT().SimpleTy;
|
||||
TargetLowering::MakeLibCallOptions CallOptions;
|
||||
return TLI.makeLibCall(DAG, GetFPLibCall(RetVT,
|
||||
RTLIB::LLROUND_F32,
|
||||
RTLIB::LLROUND_F64,
|
||||
RTLIB::LLROUND_F80,
|
||||
RTLIB::LLROUND_F128,
|
||||
RTLIB::LLROUND_PPCF128),
|
||||
NVT, Op, false, SDLoc(N)).first;
|
||||
NVT, Op, CallOptions, SDLoc(N)).first;
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::SoftenFloatOp_LRINT(SDNode *N) {
|
||||
@ -1075,13 +1110,14 @@ SDValue DAGTypeLegalizer::SoftenFloatOp_LRINT(SDNode *N) {
|
||||
|
||||
SDValue Op = GetSoftenedFloat(N->getOperand(0));
|
||||
EVT RetVT = N->getOperand(0).getValueType().getSimpleVT().SimpleTy;
|
||||
TargetLowering::MakeLibCallOptions CallOptions;
|
||||
return TLI.makeLibCall(DAG, GetFPLibCall(RetVT,
|
||||
RTLIB::LRINT_F32,
|
||||
RTLIB::LRINT_F64,
|
||||
RTLIB::LRINT_F80,
|
||||
RTLIB::LRINT_F128,
|
||||
RTLIB::LRINT_PPCF128),
|
||||
NVT, Op, false, SDLoc(N)).first;
|
||||
NVT, Op, CallOptions, SDLoc(N)).first;
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::SoftenFloatOp_LLRINT(SDNode *N) {
|
||||
@ -1089,13 +1125,14 @@ SDValue DAGTypeLegalizer::SoftenFloatOp_LLRINT(SDNode *N) {
|
||||
|
||||
SDValue Op = GetSoftenedFloat(N->getOperand(0));
|
||||
EVT RetVT = N->getOperand(0).getValueType().getSimpleVT().SimpleTy;
|
||||
TargetLowering::MakeLibCallOptions CallOptions;
|
||||
return TLI.makeLibCall(DAG, GetFPLibCall(RetVT,
|
||||
RTLIB::LLRINT_F32,
|
||||
RTLIB::LLRINT_F64,
|
||||
RTLIB::LLRINT_F80,
|
||||
RTLIB::LLRINT_F128,
|
||||
RTLIB::LLRINT_PPCF128),
|
||||
NVT, Op, false, SDLoc(N)).first;
|
||||
NVT, Op, CallOptions, SDLoc(N)).first;
|
||||
}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
@ -1267,13 +1304,14 @@ void DAGTypeLegalizer::ExpandFloatRes_FCOS(SDNode *N,
|
||||
void DAGTypeLegalizer::ExpandFloatRes_FDIV(SDNode *N, SDValue &Lo,
|
||||
SDValue &Hi) {
|
||||
SDValue Ops[2] = { N->getOperand(0), N->getOperand(1) };
|
||||
TargetLowering::MakeLibCallOptions CallOptions;
|
||||
SDValue Call = TLI.makeLibCall(DAG, GetFPLibCall(N->getValueType(0),
|
||||
RTLIB::DIV_F32,
|
||||
RTLIB::DIV_F64,
|
||||
RTLIB::DIV_F80,
|
||||
RTLIB::DIV_F128,
|
||||
RTLIB::DIV_PPCF128),
|
||||
N->getValueType(0), Ops, false,
|
||||
N->getValueType(0), Ops, CallOptions,
|
||||
SDLoc(N)).first;
|
||||
GetPairElements(Call, Lo, Hi);
|
||||
}
|
||||
@ -1341,13 +1379,14 @@ void DAGTypeLegalizer::ExpandFloatRes_FLOG10(SDNode *N,
|
||||
void DAGTypeLegalizer::ExpandFloatRes_FMA(SDNode *N, SDValue &Lo,
|
||||
SDValue &Hi) {
|
||||
SDValue Ops[3] = { N->getOperand(0), N->getOperand(1), N->getOperand(2) };
|
||||
TargetLowering::MakeLibCallOptions CallOptions;
|
||||
SDValue Call = TLI.makeLibCall(DAG, GetFPLibCall(N->getValueType(0),
|
||||
RTLIB::FMA_F32,
|
||||
RTLIB::FMA_F64,
|
||||
RTLIB::FMA_F80,
|
||||
RTLIB::FMA_F128,
|
||||
RTLIB::FMA_PPCF128),
|
||||
N->getValueType(0), Ops, false,
|
||||
N->getValueType(0), Ops, CallOptions,
|
||||
SDLoc(N)).first;
|
||||
GetPairElements(Call, Lo, Hi);
|
||||
}
|
||||
@ -1355,13 +1394,14 @@ void DAGTypeLegalizer::ExpandFloatRes_FMA(SDNode *N, SDValue &Lo,
|
||||
void DAGTypeLegalizer::ExpandFloatRes_FMUL(SDNode *N, SDValue &Lo,
|
||||
SDValue &Hi) {
|
||||
SDValue Ops[2] = { N->getOperand(0), N->getOperand(1) };
|
||||
TargetLowering::MakeLibCallOptions CallOptions;
|
||||
SDValue Call = TLI.makeLibCall(DAG, GetFPLibCall(N->getValueType(0),
|
||||
RTLIB::MUL_F32,
|
||||
RTLIB::MUL_F64,
|
||||
RTLIB::MUL_F80,
|
||||
RTLIB::MUL_F128,
|
||||
RTLIB::MUL_PPCF128),
|
||||
N->getValueType(0), Ops, false,
|
||||
N->getValueType(0), Ops, CallOptions,
|
||||
SDLoc(N)).first;
|
||||
GetPairElements(Call, Lo, Hi);
|
||||
}
|
||||
@ -1470,13 +1510,14 @@ void DAGTypeLegalizer::ExpandFloatRes_FSQRT(SDNode *N,
|
||||
void DAGTypeLegalizer::ExpandFloatRes_FSUB(SDNode *N, SDValue &Lo,
|
||||
SDValue &Hi) {
|
||||
SDValue Ops[2] = { N->getOperand(0), N->getOperand(1) };
|
||||
TargetLowering::MakeLibCallOptions CallOptions;
|
||||
SDValue Call = TLI.makeLibCall(DAG, GetFPLibCall(N->getValueType(0),
|
||||
RTLIB::SUB_F32,
|
||||
RTLIB::SUB_F64,
|
||||
RTLIB::SUB_F80,
|
||||
RTLIB::SUB_F128,
|
||||
RTLIB::SUB_PPCF128),
|
||||
N->getValueType(0), Ops, false,
|
||||
N->getValueType(0), Ops, CallOptions,
|
||||
SDLoc(N)).first;
|
||||
GetPairElements(Call, Lo, Hi);
|
||||
}
|
||||
@ -1555,7 +1596,9 @@ void DAGTypeLegalizer::ExpandFloatRes_XINT_TO_FP(SDNode *N, SDValue &Lo,
|
||||
}
|
||||
assert(LC != RTLIB::UNKNOWN_LIBCALL && "Unsupported XINT_TO_FP!");
|
||||
|
||||
Hi = TLI.makeLibCall(DAG, LC, VT, Src, true, dl).first;
|
||||
TargetLowering::MakeLibCallOptions CallOptions;
|
||||
CallOptions.setSExt(true);
|
||||
Hi = TLI.makeLibCall(DAG, LC, VT, Src, CallOptions, dl).first;
|
||||
GetPairElements(Hi, Lo, Hi);
|
||||
}
|
||||
|
||||
@ -1732,7 +1775,8 @@ SDValue DAGTypeLegalizer::ExpandFloatOp_FP_TO_SINT(SDNode *N) {
|
||||
|
||||
RTLIB::Libcall LC = RTLIB::getFPTOSINT(N->getOperand(0).getValueType(), RVT);
|
||||
assert(LC != RTLIB::UNKNOWN_LIBCALL && "Unsupported FP_TO_SINT!");
|
||||
return TLI.makeLibCall(DAG, LC, RVT, N->getOperand(0), false, dl).first;
|
||||
TargetLowering::MakeLibCallOptions CallOptions;
|
||||
return TLI.makeLibCall(DAG, LC, RVT, N->getOperand(0), CallOptions, dl).first;
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::ExpandFloatOp_FP_TO_UINT(SDNode *N) {
|
||||
@ -1741,8 +1785,9 @@ SDValue DAGTypeLegalizer::ExpandFloatOp_FP_TO_UINT(SDNode *N) {
|
||||
|
||||
RTLIB::Libcall LC = RTLIB::getFPTOUINT(N->getOperand(0).getValueType(), RVT);
|
||||
assert(LC != RTLIB::UNKNOWN_LIBCALL && "Unsupported FP_TO_UINT!");
|
||||
TargetLowering::MakeLibCallOptions CallOptions;
|
||||
return TLI.makeLibCall(DAG, LC, N->getValueType(0), N->getOperand(0),
|
||||
false, dl).first;
|
||||
CallOptions, dl).first;
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::ExpandFloatOp_SELECT_CC(SDNode *N) {
|
||||
@ -1807,49 +1852,53 @@ SDValue DAGTypeLegalizer::ExpandFloatOp_STORE(SDNode *N, unsigned OpNo) {
|
||||
SDValue DAGTypeLegalizer::ExpandFloatOp_LROUND(SDNode *N) {
|
||||
EVT RVT = N->getValueType(0);
|
||||
EVT RetVT = N->getOperand(0).getValueType().getSimpleVT().SimpleTy;
|
||||
TargetLowering::MakeLibCallOptions CallOptions;
|
||||
return TLI.makeLibCall(DAG, GetFPLibCall(RetVT,
|
||||
RTLIB::LROUND_F32,
|
||||
RTLIB::LROUND_F64,
|
||||
RTLIB::LROUND_F80,
|
||||
RTLIB::LROUND_F128,
|
||||
RTLIB::LROUND_PPCF128),
|
||||
RVT, N->getOperand(0), false, SDLoc(N)).first;
|
||||
RVT, N->getOperand(0), CallOptions, SDLoc(N)).first;
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::ExpandFloatOp_LLROUND(SDNode *N) {
|
||||
EVT RVT = N->getValueType(0);
|
||||
EVT RetVT = N->getOperand(0).getValueType().getSimpleVT().SimpleTy;
|
||||
TargetLowering::MakeLibCallOptions CallOptions;
|
||||
return TLI.makeLibCall(DAG, GetFPLibCall(RetVT,
|
||||
RTLIB::LLROUND_F32,
|
||||
RTLIB::LLROUND_F64,
|
||||
RTLIB::LLROUND_F80,
|
||||
RTLIB::LLROUND_F128,
|
||||
RTLIB::LLROUND_PPCF128),
|
||||
RVT, N->getOperand(0), false, SDLoc(N)).first;
|
||||
RVT, N->getOperand(0), CallOptions, SDLoc(N)).first;
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::ExpandFloatOp_LRINT(SDNode *N) {
|
||||
EVT RVT = N->getValueType(0);
|
||||
EVT RetVT = N->getOperand(0).getValueType().getSimpleVT().SimpleTy;
|
||||
TargetLowering::MakeLibCallOptions CallOptions;
|
||||
return TLI.makeLibCall(DAG, GetFPLibCall(RetVT,
|
||||
RTLIB::LRINT_F32,
|
||||
RTLIB::LRINT_F64,
|
||||
RTLIB::LRINT_F80,
|
||||
RTLIB::LRINT_F128,
|
||||
RTLIB::LRINT_PPCF128),
|
||||
RVT, N->getOperand(0), false, SDLoc(N)).first;
|
||||
RVT, N->getOperand(0), CallOptions, SDLoc(N)).first;
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::ExpandFloatOp_LLRINT(SDNode *N) {
|
||||
EVT RVT = N->getValueType(0);
|
||||
EVT RetVT = N->getOperand(0).getValueType().getSimpleVT().SimpleTy;
|
||||
TargetLowering::MakeLibCallOptions CallOptions;
|
||||
return TLI.makeLibCall(DAG, GetFPLibCall(RetVT,
|
||||
RTLIB::LLRINT_F32,
|
||||
RTLIB::LLRINT_F64,
|
||||
RTLIB::LLRINT_F80,
|
||||
RTLIB::LLRINT_F128,
|
||||
RTLIB::LLRINT_PPCF128),
|
||||
RVT, N->getOperand(0), false, SDLoc(N)).first;
|
||||
RVT, N->getOperand(0), CallOptions, SDLoc(N)).first;
|
||||
}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
@ -2481,7 +2481,9 @@ void DAGTypeLegalizer::ExpandIntRes_FP_TO_SINT(SDNode *N, SDValue &Lo,
|
||||
|
||||
RTLIB::Libcall LC = RTLIB::getFPTOSINT(Op.getValueType(), VT);
|
||||
assert(LC != RTLIB::UNKNOWN_LIBCALL && "Unexpected fp-to-sint conversion!");
|
||||
SplitInteger(TLI.makeLibCall(DAG, LC, VT, Op, true/*irrelevant*/, dl).first,
|
||||
TargetLowering::MakeLibCallOptions CallOptions;
|
||||
CallOptions.setSExt(true);
|
||||
SplitInteger(TLI.makeLibCall(DAG, LC, VT, Op, CallOptions, dl).first,
|
||||
Lo, Hi);
|
||||
}
|
||||
|
||||
@ -2496,7 +2498,8 @@ void DAGTypeLegalizer::ExpandIntRes_FP_TO_UINT(SDNode *N, SDValue &Lo,
|
||||
|
||||
RTLIB::Libcall LC = RTLIB::getFPTOUINT(Op.getValueType(), VT);
|
||||
assert(LC != RTLIB::UNKNOWN_LIBCALL && "Unexpected fp-to-uint conversion!");
|
||||
SplitInteger(TLI.makeLibCall(DAG, LC, VT, Op, false/*irrelevant*/, dl).first,
|
||||
TargetLowering::MakeLibCallOptions CallOptions;
|
||||
SplitInteger(TLI.makeLibCall(DAG, LC, VT, Op, CallOptions, dl).first,
|
||||
Lo, Hi);
|
||||
}
|
||||
|
||||
@ -2522,7 +2525,9 @@ void DAGTypeLegalizer::ExpandIntRes_LLROUND(SDNode *N, SDValue &Lo,
|
||||
|
||||
SDLoc dl(N);
|
||||
EVT RetVT = N->getValueType(0);
|
||||
SplitInteger(TLI.makeLibCall(DAG, LC, RetVT, Op, true/*irrelevant*/, dl).first,
|
||||
TargetLowering::MakeLibCallOptions CallOptions;
|
||||
CallOptions.setSExt(true);
|
||||
SplitInteger(TLI.makeLibCall(DAG, LC, RetVT, Op, CallOptions, dl).first,
|
||||
Lo, Hi);
|
||||
}
|
||||
|
||||
@ -2548,7 +2553,9 @@ void DAGTypeLegalizer::ExpandIntRes_LLRINT(SDNode *N, SDValue &Lo,
|
||||
|
||||
SDLoc dl(N);
|
||||
EVT RetVT = N->getValueType(0);
|
||||
SplitInteger(TLI.makeLibCall(DAG, LC, RetVT, Op, true/*irrelevant*/, dl).first,
|
||||
TargetLowering::MakeLibCallOptions CallOptions;
|
||||
CallOptions.setSExt(true);
|
||||
SplitInteger(TLI.makeLibCall(DAG, LC, RetVT, Op, CallOptions, dl).first,
|
||||
Lo, Hi);
|
||||
}
|
||||
|
||||
@ -2751,7 +2758,9 @@ void DAGTypeLegalizer::ExpandIntRes_MUL(SDNode *N,
|
||||
}
|
||||
|
||||
SDValue Ops[2] = { N->getOperand(0), N->getOperand(1) };
|
||||
SplitInteger(TLI.makeLibCall(DAG, LC, VT, Ops, true/*irrelevant*/, dl).first,
|
||||
TargetLowering::MakeLibCallOptions CallOptions;
|
||||
CallOptions.setSExt(true);
|
||||
SplitInteger(TLI.makeLibCall(DAG, LC, VT, Ops, CallOptions, dl).first,
|
||||
Lo, Hi);
|
||||
}
|
||||
|
||||
@ -3038,7 +3047,9 @@ void DAGTypeLegalizer::ExpandIntRes_SDIV(SDNode *N,
|
||||
LC = RTLIB::SDIV_I128;
|
||||
assert(LC != RTLIB::UNKNOWN_LIBCALL && "Unsupported SDIV!");
|
||||
|
||||
SplitInteger(TLI.makeLibCall(DAG, LC, VT, Ops, true, dl).first, Lo, Hi);
|
||||
TargetLowering::MakeLibCallOptions CallOptions;
|
||||
CallOptions.setSExt(true);
|
||||
SplitInteger(TLI.makeLibCall(DAG, LC, VT, Ops, CallOptions, dl).first, Lo, Hi);
|
||||
}
|
||||
|
||||
void DAGTypeLegalizer::ExpandIntRes_Shift(SDNode *N,
|
||||
@ -3137,7 +3148,9 @@ void DAGTypeLegalizer::ExpandIntRes_Shift(SDNode *N,
|
||||
|
||||
if (LC != RTLIB::UNKNOWN_LIBCALL && TLI.getLibcallName(LC)) {
|
||||
SDValue Ops[2] = { N->getOperand(0), N->getOperand(1) };
|
||||
SplitInteger(TLI.makeLibCall(DAG, LC, VT, Ops, isSigned, dl).first, Lo, Hi);
|
||||
TargetLowering::MakeLibCallOptions CallOptions;
|
||||
CallOptions.setSExt(isSigned);
|
||||
SplitInteger(TLI.makeLibCall(DAG, LC, VT, Ops, CallOptions, dl).first, Lo, Hi);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -3225,7 +3238,9 @@ void DAGTypeLegalizer::ExpandIntRes_SREM(SDNode *N,
|
||||
LC = RTLIB::SREM_I128;
|
||||
assert(LC != RTLIB::UNKNOWN_LIBCALL && "Unsupported SREM!");
|
||||
|
||||
SplitInteger(TLI.makeLibCall(DAG, LC, VT, Ops, true, dl).first, Lo, Hi);
|
||||
TargetLowering::MakeLibCallOptions CallOptions;
|
||||
CallOptions.setSExt(true);
|
||||
SplitInteger(TLI.makeLibCall(DAG, LC, VT, Ops, CallOptions, dl).first, Lo, Hi);
|
||||
}
|
||||
|
||||
void DAGTypeLegalizer::ExpandIntRes_TRUNCATE(SDNode *N,
|
||||
@ -3381,7 +3396,8 @@ void DAGTypeLegalizer::ExpandIntRes_UDIV(SDNode *N,
|
||||
LC = RTLIB::UDIV_I128;
|
||||
assert(LC != RTLIB::UNKNOWN_LIBCALL && "Unsupported UDIV!");
|
||||
|
||||
SplitInteger(TLI.makeLibCall(DAG, LC, VT, Ops, false, dl).first, Lo, Hi);
|
||||
TargetLowering::MakeLibCallOptions CallOptions;
|
||||
SplitInteger(TLI.makeLibCall(DAG, LC, VT, Ops, CallOptions, dl).first, Lo, Hi);
|
||||
}
|
||||
|
||||
void DAGTypeLegalizer::ExpandIntRes_UREM(SDNode *N,
|
||||
@ -3407,7 +3423,8 @@ void DAGTypeLegalizer::ExpandIntRes_UREM(SDNode *N,
|
||||
LC = RTLIB::UREM_I128;
|
||||
assert(LC != RTLIB::UNKNOWN_LIBCALL && "Unsupported UREM!");
|
||||
|
||||
SplitInteger(TLI.makeLibCall(DAG, LC, VT, Ops, false, dl).first, Lo, Hi);
|
||||
TargetLowering::MakeLibCallOptions CallOptions;
|
||||
SplitInteger(TLI.makeLibCall(DAG, LC, VT, Ops, CallOptions, dl).first, Lo, Hi);
|
||||
}
|
||||
|
||||
void DAGTypeLegalizer::ExpandIntRes_ZERO_EXTEND(SDNode *N,
|
||||
@ -3767,7 +3784,9 @@ SDValue DAGTypeLegalizer::ExpandIntOp_SINT_TO_FP(SDNode *N) {
|
||||
RTLIB::Libcall LC = RTLIB::getSINTTOFP(Op.getValueType(), DstVT);
|
||||
assert(LC != RTLIB::UNKNOWN_LIBCALL &&
|
||||
"Don't know how to expand this SINT_TO_FP!");
|
||||
return TLI.makeLibCall(DAG, LC, DstVT, Op, true, SDLoc(N)).first;
|
||||
TargetLowering::MakeLibCallOptions CallOptions;
|
||||
CallOptions.setSExt(true);
|
||||
return TLI.makeLibCall(DAG, LC, DstVT, Op, CallOptions, SDLoc(N)).first;
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::ExpandIntOp_STORE(StoreSDNode *N, unsigned OpNo) {
|
||||
@ -3932,7 +3951,9 @@ SDValue DAGTypeLegalizer::ExpandIntOp_UINT_TO_FP(SDNode *N) {
|
||||
RTLIB::Libcall LC = RTLIB::getUINTTOFP(SrcVT, DstVT);
|
||||
assert(LC != RTLIB::UNKNOWN_LIBCALL &&
|
||||
"Don't know how to expand this UINT_TO_FP!");
|
||||
return TLI.makeLibCall(DAG, LC, DstVT, Op, true, dl).first;
|
||||
TargetLowering::MakeLibCallOptions CallOptions;
|
||||
CallOptions.setSExt(true);
|
||||
return TLI.makeLibCall(DAG, LC, DstVT, Op, CallOptions, dl).first;
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::ExpandIntOp_ATOMIC_STORE(SDNode *N) {
|
||||
|
@ -1003,25 +1003,27 @@ SDValue DAGTypeLegalizer::JoinIntegers(SDValue Lo, SDValue Hi) {
|
||||
/// Convert the node into a libcall with the same prototype.
|
||||
SDValue DAGTypeLegalizer::LibCallify(RTLIB::Libcall LC, SDNode *N,
|
||||
bool isSigned) {
|
||||
TargetLowering::MakeLibCallOptions CallOptions;
|
||||
CallOptions.setSExt(isSigned);
|
||||
unsigned NumOps = N->getNumOperands();
|
||||
SDLoc dl(N);
|
||||
if (NumOps == 0) {
|
||||
return TLI.makeLibCall(DAG, LC, N->getValueType(0), None, isSigned,
|
||||
return TLI.makeLibCall(DAG, LC, N->getValueType(0), None, CallOptions,
|
||||
dl).first;
|
||||
} else if (NumOps == 1) {
|
||||
SDValue Op = N->getOperand(0);
|
||||
return TLI.makeLibCall(DAG, LC, N->getValueType(0), Op, isSigned,
|
||||
return TLI.makeLibCall(DAG, LC, N->getValueType(0), Op, CallOptions,
|
||||
dl).first;
|
||||
} else if (NumOps == 2) {
|
||||
SDValue Ops[2] = { N->getOperand(0), N->getOperand(1) };
|
||||
return TLI.makeLibCall(DAG, LC, N->getValueType(0), Ops, isSigned,
|
||||
return TLI.makeLibCall(DAG, LC, N->getValueType(0), Ops, CallOptions,
|
||||
dl).first;
|
||||
}
|
||||
SmallVector<SDValue, 8> Ops(NumOps);
|
||||
for (unsigned i = 0; i < NumOps; ++i)
|
||||
Ops[i] = N->getOperand(i);
|
||||
|
||||
return TLI.makeLibCall(DAG, LC, N->getValueType(0), Ops, isSigned, dl).first;
|
||||
return TLI.makeLibCall(DAG, LC, N->getValueType(0), Ops, CallOptions, dl).first;
|
||||
}
|
||||
|
||||
/// Expand a node into a call to a libcall. Similar to ExpandLibCall except that
|
||||
|
@ -2599,9 +2599,11 @@ void SelectionDAGBuilder::visitSPDescriptorParent(StackProtectorDescriptor &SPD,
|
||||
void
|
||||
SelectionDAGBuilder::visitSPDescriptorFailure(StackProtectorDescriptor &SPD) {
|
||||
const TargetLowering &TLI = DAG.getTargetLoweringInfo();
|
||||
TargetLowering::MakeLibCallOptions CallOptions;
|
||||
CallOptions.setDiscardResult(true);
|
||||
SDValue Chain =
|
||||
TLI.makeLibCall(DAG, RTLIB::STACKPROTECTOR_CHECK_FAIL, MVT::isVoid,
|
||||
None, false, getCurSDLoc(), false, false).second;
|
||||
None, CallOptions, getCurSDLoc()).second;
|
||||
// On PS4, the "return address" must still be within the calling function,
|
||||
// even if it's at the very end, so emit an explicit TRAP here.
|
||||
// Passing 'true' for doesNotReturn above won't generate the trap for us.
|
||||
|
@ -120,10 +120,9 @@ void TargetLoweringBase::ArgListEntry::setAttributes(const CallBase *Call,
|
||||
/// result of type RetVT.
|
||||
std::pair<SDValue, SDValue>
|
||||
TargetLowering::makeLibCall(SelectionDAG &DAG, RTLIB::Libcall LC, EVT RetVT,
|
||||
ArrayRef<SDValue> Ops, bool isSigned,
|
||||
const SDLoc &dl, bool doesNotReturn,
|
||||
bool isReturnValueUsed,
|
||||
bool isPostTypeLegalization) const {
|
||||
ArrayRef<SDValue> Ops,
|
||||
MakeLibCallOptions CallOptions,
|
||||
const SDLoc &dl) const {
|
||||
TargetLowering::ArgListTy Args;
|
||||
Args.reserve(Ops.size());
|
||||
|
||||
@ -131,8 +130,9 @@ TargetLowering::makeLibCall(SelectionDAG &DAG, RTLIB::Libcall LC, EVT RetVT,
|
||||
for (SDValue Op : Ops) {
|
||||
Entry.Node = Op;
|
||||
Entry.Ty = Entry.Node.getValueType().getTypeForEVT(*DAG.getContext());
|
||||
Entry.IsSExt = shouldSignExtendTypeInLibCall(Op.getValueType(), isSigned);
|
||||
Entry.IsZExt = !shouldSignExtendTypeInLibCall(Op.getValueType(), isSigned);
|
||||
Entry.IsSExt = shouldSignExtendTypeInLibCall(Op.getValueType(),
|
||||
CallOptions.IsSExt);
|
||||
Entry.IsZExt = !Entry.IsSExt;
|
||||
Args.push_back(Entry);
|
||||
}
|
||||
|
||||
@ -143,13 +143,13 @@ TargetLowering::makeLibCall(SelectionDAG &DAG, RTLIB::Libcall LC, EVT RetVT,
|
||||
|
||||
Type *RetTy = RetVT.getTypeForEVT(*DAG.getContext());
|
||||
TargetLowering::CallLoweringInfo CLI(DAG);
|
||||
bool signExtend = shouldSignExtendTypeInLibCall(RetVT, isSigned);
|
||||
bool signExtend = shouldSignExtendTypeInLibCall(RetVT, CallOptions.IsSExt);
|
||||
CLI.setDebugLoc(dl)
|
||||
.setChain(DAG.getEntryNode())
|
||||
.setLibCallee(getLibcallCallingConv(LC), RetTy, Callee, std::move(Args))
|
||||
.setNoReturn(doesNotReturn)
|
||||
.setDiscardResult(!isReturnValueUsed)
|
||||
.setIsPostTypeLegalization(isPostTypeLegalization)
|
||||
.setNoReturn(CallOptions.DoesNotReturn)
|
||||
.setDiscardResult(!CallOptions.IsReturnValueUsed)
|
||||
.setIsPostTypeLegalization(CallOptions.IsPostTypeLegalization)
|
||||
.setSExtResult(signExtend)
|
||||
.setZExtResult(!signExtend);
|
||||
return LowerCallTo(CLI);
|
||||
@ -364,8 +364,8 @@ void TargetLowering::softenSetCCOperands(SelectionDAG &DAG, EVT VT,
|
||||
// Use the target specific return value for comparions lib calls.
|
||||
EVT RetVT = getCmpLibcallReturnType();
|
||||
SDValue Ops[2] = {NewLHS, NewRHS};
|
||||
NewLHS = makeLibCall(DAG, LC1, RetVT, Ops, false /*sign irrelevant*/,
|
||||
dl).first;
|
||||
TargetLowering::MakeLibCallOptions CallOptions;
|
||||
NewLHS = makeLibCall(DAG, LC1, RetVT, Ops, CallOptions, dl).first;
|
||||
NewRHS = DAG.getConstant(0, dl, RetVT);
|
||||
|
||||
CCCode = getCmpLibcallCC(LC1);
|
||||
@ -377,8 +377,7 @@ void TargetLowering::softenSetCCOperands(SelectionDAG &DAG, EVT VT,
|
||||
ISD::SETCC, dl,
|
||||
getSetCCResultType(DAG.getDataLayout(), *DAG.getContext(), RetVT),
|
||||
NewLHS, NewRHS, DAG.getCondCode(CCCode));
|
||||
NewLHS = makeLibCall(DAG, LC2, RetVT, Ops, false/*sign irrelevant*/,
|
||||
dl).first;
|
||||
NewLHS = makeLibCall(DAG, LC2, RetVT, Ops, CallOptions, dl).first;
|
||||
NewLHS = DAG.getNode(
|
||||
ISD::SETCC, dl,
|
||||
getSetCCResultType(DAG.getDataLayout(), *DAG.getContext(), RetVT),
|
||||
@ -6895,20 +6894,19 @@ bool TargetLowering::expandMULO(SDNode *Node, SDValue &Result,
|
||||
// being a legal type for the architecture and thus has to be split to
|
||||
// two arguments.
|
||||
SDValue Ret;
|
||||
TargetLowering::MakeLibCallOptions CallOptions;
|
||||
CallOptions.setSExt(isSigned);
|
||||
CallOptions.setIsPostTypeLegalization(true);
|
||||
if (shouldSplitFunctionArgumentsAsLittleEndian(DAG.getDataLayout())) {
|
||||
// Halves of WideVT are packed into registers in different order
|
||||
// depending on platform endianness. This is usually handled by
|
||||
// the C calling convention, but we can't defer to it in
|
||||
// the legalizer.
|
||||
SDValue Args[] = { LHS, HiLHS, RHS, HiRHS };
|
||||
Ret = makeLibCall(DAG, LC, WideVT, Args, isSigned, dl,
|
||||
/* doesNotReturn */ false, /* isReturnValueUsed */ true,
|
||||
/* isPostTypeLegalization */ true).first;
|
||||
Ret = makeLibCall(DAG, LC, WideVT, Args, CallOptions, dl).first;
|
||||
} else {
|
||||
SDValue Args[] = { HiLHS, LHS, HiRHS, RHS };
|
||||
Ret = makeLibCall(DAG, LC, WideVT, Args, isSigned, dl,
|
||||
/* doesNotReturn */ false, /* isReturnValueUsed */ true,
|
||||
/* isPostTypeLegalization */ true).first;
|
||||
Ret = makeLibCall(DAG, LC, WideVT, Args, CallOptions, dl).first;
|
||||
}
|
||||
assert(Ret.getOpcode() == ISD::MERGE_VALUES &&
|
||||
"Ret value is a collection of constituent nodes holding result.");
|
||||
|
@ -2193,7 +2193,8 @@ getAArch64XALUOOp(AArch64CC::CondCode &CC, SDValue Op, SelectionDAG &DAG) {
|
||||
SDValue AArch64TargetLowering::LowerF128Call(SDValue Op, SelectionDAG &DAG,
|
||||
RTLIB::Libcall Call) const {
|
||||
SmallVector<SDValue, 2> Ops(Op->op_begin(), Op->op_end());
|
||||
return makeLibCall(DAG, Call, MVT::f128, Ops, false, SDLoc(Op)).first;
|
||||
MakeLibCallOptions CallOptions;
|
||||
return makeLibCall(DAG, Call, MVT::f128, Ops, CallOptions, SDLoc(Op)).first;
|
||||
}
|
||||
|
||||
// Returns true if the given Op is the overflow flag result of an overflow
|
||||
@ -2402,7 +2403,8 @@ SDValue AArch64TargetLowering::LowerFP_ROUND(SDValue Op,
|
||||
// precise. That doesn't take part in the LibCall so we can't directly use
|
||||
// LowerF128Call.
|
||||
SDValue SrcVal = Op.getOperand(0);
|
||||
return makeLibCall(DAG, LC, Op.getValueType(), SrcVal, /*isSigned*/ false,
|
||||
MakeLibCallOptions CallOptions;
|
||||
return makeLibCall(DAG, LC, Op.getValueType(), SrcVal, CallOptions,
|
||||
SDLoc(Op)).first;
|
||||
}
|
||||
|
||||
@ -2472,7 +2474,8 @@ SDValue AArch64TargetLowering::LowerFP_TO_INT(SDValue Op,
|
||||
LC = RTLIB::getFPTOUINT(Op.getOperand(0).getValueType(), Op.getValueType());
|
||||
|
||||
SmallVector<SDValue, 2> Ops(Op->op_begin(), Op->op_end());
|
||||
return makeLibCall(DAG, LC, Op.getValueType(), Ops, false, SDLoc(Op)).first;
|
||||
MakeLibCallOptions CallOptions;
|
||||
return makeLibCall(DAG, LC, Op.getValueType(), Ops, CallOptions, SDLoc(Op)).first;
|
||||
}
|
||||
|
||||
static SDValue LowerVectorINT_TO_FP(SDValue Op, SelectionDAG &DAG) {
|
||||
|
@ -5215,8 +5215,9 @@ SDValue ARMTargetLowering::LowerFP_TO_INT(SDValue Op, SelectionDAG &DAG) const {
|
||||
else
|
||||
LC = RTLIB::getFPTOUINT(Op.getOperand(0).getValueType(),
|
||||
Op.getValueType());
|
||||
MakeLibCallOptions CallOptions;
|
||||
return makeLibCall(DAG, LC, Op.getValueType(), Op.getOperand(0),
|
||||
/*isSigned*/ false, SDLoc(Op)).first;
|
||||
CallOptions, SDLoc(Op)).first;
|
||||
}
|
||||
|
||||
return Op;
|
||||
@ -5279,8 +5280,9 @@ SDValue ARMTargetLowering::LowerINT_TO_FP(SDValue Op, SelectionDAG &DAG) const {
|
||||
else
|
||||
LC = RTLIB::getUINTTOFP(Op.getOperand(0).getValueType(),
|
||||
Op.getValueType());
|
||||
MakeLibCallOptions CallOptions;
|
||||
return makeLibCall(DAG, LC, Op.getValueType(), Op.getOperand(0),
|
||||
/*isSigned*/ false, SDLoc(Op)).first;
|
||||
CallOptions, SDLoc(Op)).first;
|
||||
}
|
||||
|
||||
return Op;
|
||||
@ -15605,6 +15607,7 @@ SDValue ARMTargetLowering::LowerFP_EXTEND(SDValue Op, SelectionDAG &DAG) const {
|
||||
// without FP16. So we must do a function call.
|
||||
SDLoc Loc(Op);
|
||||
RTLIB::Libcall LC;
|
||||
MakeLibCallOptions CallOptions;
|
||||
if (SrcSz == 16) {
|
||||
// Instruction from 16 -> 32
|
||||
if (Subtarget->hasFP16())
|
||||
@ -15615,7 +15618,7 @@ SDValue ARMTargetLowering::LowerFP_EXTEND(SDValue Op, SelectionDAG &DAG) const {
|
||||
assert(LC != RTLIB::UNKNOWN_LIBCALL &&
|
||||
"Unexpected type for custom-lowering FP_EXTEND");
|
||||
SrcVal =
|
||||
makeLibCall(DAG, LC, MVT::f32, SrcVal, /*isSigned*/ false, Loc).first;
|
||||
makeLibCall(DAG, LC, MVT::f32, SrcVal, CallOptions, Loc).first;
|
||||
}
|
||||
}
|
||||
|
||||
@ -15628,7 +15631,7 @@ SDValue ARMTargetLowering::LowerFP_EXTEND(SDValue Op, SelectionDAG &DAG) const {
|
||||
LC = RTLIB::getFPEXT(MVT::f32, MVT::f64);
|
||||
assert(LC != RTLIB::UNKNOWN_LIBCALL &&
|
||||
"Unexpected type for custom-lowering FP_EXTEND");
|
||||
return makeLibCall(DAG, LC, MVT::f64, SrcVal, /*isSigned*/ false, Loc).first;
|
||||
return makeLibCall(DAG, LC, MVT::f64, SrcVal, CallOptions, Loc).first;
|
||||
}
|
||||
|
||||
SDValue ARMTargetLowering::LowerFP_ROUND(SDValue Op, SelectionDAG &DAG) const {
|
||||
@ -15654,7 +15657,8 @@ SDValue ARMTargetLowering::LowerFP_ROUND(SDValue Op, SelectionDAG &DAG) const {
|
||||
RTLIB::Libcall LC = RTLIB::getFPROUND(SrcVT, DstVT);
|
||||
assert(LC != RTLIB::UNKNOWN_LIBCALL &&
|
||||
"Unexpected type for custom-lowering FP_ROUND");
|
||||
return makeLibCall(DAG, LC, DstVT, SrcVal, /*isSigned*/ false, Loc).first;
|
||||
MakeLibCallOptions CallOptions;
|
||||
return makeLibCall(DAG, LC, DstVT, SrcVal, CallOptions, Loc).first;
|
||||
}
|
||||
|
||||
void ARMTargetLowering::lowerABS(SDNode *N, SmallVectorImpl<SDValue> &Results,
|
||||
|
@ -2951,9 +2951,11 @@ static SDValue LowerUMULO_SMULO(SDValue Op, SelectionDAG &DAG,
|
||||
SDValue HiRHS = DAG.getNode(ISD::SRA, dl, MVT::i64, RHS, ShiftAmt);
|
||||
SDValue Args[] = { HiLHS, LHS, HiRHS, RHS };
|
||||
|
||||
TargetLowering::MakeLibCallOptions CallOptions;
|
||||
CallOptions.setSExt(isSigned);
|
||||
SDValue MulResult = TLI.makeLibCall(DAG,
|
||||
RTLIB::MUL_I128, WideVT,
|
||||
Args, isSigned, dl).first;
|
||||
Args, CallOptions, dl).first;
|
||||
SDValue BottomHalf = DAG.getNode(ISD::EXTRACT_ELEMENT, dl, VT,
|
||||
MulResult, DAG.getIntPtrConstant(0, dl));
|
||||
SDValue TopHalf = DAG.getNode(ISD::EXTRACT_ELEMENT, dl, VT,
|
||||
|
@ -1056,8 +1056,9 @@ SDValue WebAssemblyTargetLowering::LowerRETURNADDR(SDValue Op,
|
||||
return SDValue();
|
||||
|
||||
unsigned Depth = cast<ConstantSDNode>(Op.getOperand(0))->getZExtValue();
|
||||
MakeLibCallOptions CallOptions;
|
||||
return makeLibCall(DAG, RTLIB::RETURN_ADDRESS, Op.getValueType(),
|
||||
{DAG.getConstant(Depth, DL, MVT::i32)}, false, DL)
|
||||
{DAG.getConstant(Depth, DL, MVT::i32)}, CallOptions, DL)
|
||||
.first;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user