getSDVTList(VT)),
Value(VT==MVT::f64 ? APFloat(val) : APFloat((float)val)) {
}
- ConstantFPSDNode(bool isTarget, APFloat val, MVT::ValueType VT)
+ ConstantFPSDNode(bool isTarget, const APFloat& val, MVT::ValueType VT)
: SDNode(isTarget ? ISD::TargetConstantFP : ISD::ConstantFP,
getSDVTList(VT)), Value(val) {
}
else
return Value.convertToFloat();
}
- APFloat getValueAPF() const { return Value; }
+ const APFloat& getValueAPF() const { return Value; }
/// isExactlyValue - We don't rely on operator== working on double values, as
/// it returns true for things that are clearly not equal, like -0.0 and 0.0.
else
return isExactlyValue(APFloat((float)V));
}
- bool isExactlyValue(APFloat V) const;
+ bool isExactlyValue(const APFloat& V) const;
static bool classof(const ConstantFPSDNode *) { return true; }
static bool classof(const SDNode *N) {
return DAG.getNode(ISD::FCOPYSIGN, VT, N0, N1);
if (N1CFP) {
- APFloat V = N1CFP->getValueAPF();
+ const APFloat& V = N1CFP->getValueAPF();
// copysign(x, c1) -> fabs(x) iff ispos(c1)
// copysign(x, c1) -> fneg(fabs(x)) iff isneg(c1)
if (!V.isNegative())
/// it returns true for things that are clearly not equal, like -0.0 and 0.0.
/// As such, this method can be used to do an exact bit-for-bit comparison of
/// two floating point values.
-bool ConstantFPSDNode::isExactlyValue(APFloat V) const {
+bool ConstantFPSDNode::isExactlyValue(const APFloat& V) const {
return Value.bitwiseIsEqual(V);
}