mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-11-02 22:23:10 +00:00
Make APFloat constructor require explicit semantics.
Previously we tried to infer it from the bit width size, with an added IsIEEE argument for the PPC/IEEE 128-bit case, which had a default value. This default value allowed bugs to creep in, where it was inappropriate. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@173138 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -184,9 +184,9 @@ namespace llvm {
|
||||
APFloat(const fltSemantics &, integerPart);
|
||||
APFloat(const fltSemantics &, fltCategory, bool negative);
|
||||
APFloat(const fltSemantics &, uninitializedTag);
|
||||
APFloat(const fltSemantics &, const APInt &);
|
||||
explicit APFloat(double d);
|
||||
explicit APFloat(float f);
|
||||
explicit APFloat(const APInt &, bool isIEEE = false);
|
||||
APFloat(const APFloat &);
|
||||
~APFloat();
|
||||
|
||||
@@ -423,7 +423,7 @@ namespace llvm {
|
||||
APInt convertQuadrupleAPFloatToAPInt() const;
|
||||
APInt convertF80LongDoubleAPFloatToAPInt() const;
|
||||
APInt convertPPCDoubleDoubleAPFloatToAPInt() const;
|
||||
void initFromAPInt(const APInt& api, bool isIEEE = false);
|
||||
void initFromAPInt(const fltSemantics *Sem, const APInt& api);
|
||||
void initFromHalfAPInt(const APInt& api);
|
||||
void initFromFloatAPInt(const APInt& api);
|
||||
void initFromDoubleAPInt(const APInt& api);
|
||||
|
||||
@@ -935,6 +935,20 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
/// Returns an APFloat semantics tag appropriate for the given type. If VT is
|
||||
/// a vector type, the element semantics are returned.
|
||||
static const fltSemantics &EVTToAPFloatSemantics(EVT VT) {
|
||||
switch (VT.getScalarType().getSimpleVT().SimpleTy) {
|
||||
default: llvm_unreachable("Unknown FP format");
|
||||
case MVT::f16: return APFloat::IEEEhalf;
|
||||
case MVT::f32: return APFloat::IEEEsingle;
|
||||
case MVT::f64: return APFloat::IEEEdouble;
|
||||
case MVT::f80: return APFloat::x87DoubleExtended;
|
||||
case MVT::f128: return APFloat::IEEEquad;
|
||||
case MVT::ppcf128: return APFloat::PPCDoubleDouble;
|
||||
}
|
||||
}
|
||||
|
||||
/// AssignOrdering - Assign an order to the SDNode.
|
||||
void AssignOrdering(const SDNode *SD, unsigned Order);
|
||||
|
||||
|
||||
@@ -15,8 +15,10 @@
|
||||
#ifndef LLVM_IR_TYPE_H
|
||||
#define LLVM_IR_TYPE_H
|
||||
|
||||
#include "llvm/ADT/APFloat.h"
|
||||
#include "llvm/Support/Casting.h"
|
||||
#include "llvm/Support/DataTypes.h"
|
||||
#include "llvm/Support/ErrorHandling.h"
|
||||
|
||||
namespace llvm {
|
||||
|
||||
@@ -162,6 +164,18 @@ public:
|
||||
getTypeID() == PPC_FP128TyID;
|
||||
}
|
||||
|
||||
const fltSemantics &getFltSemantics() const {
|
||||
switch (getTypeID()) {
|
||||
case HalfTyID: return APFloat::IEEEhalf;
|
||||
case FloatTyID: return APFloat::IEEEsingle;
|
||||
case DoubleTyID: return APFloat::IEEEdouble;
|
||||
case X86_FP80TyID: return APFloat::x87DoubleExtended;
|
||||
case FP128TyID: return APFloat::IEEEquad;
|
||||
case PPC_FP128TyID: return APFloat::PPCDoubleDouble;
|
||||
default: llvm_unreachable("Invalid floating type");
|
||||
}
|
||||
}
|
||||
|
||||
/// isX86_MMXTy - Return true if this is X86 MMX.
|
||||
bool isX86_MMXTy() const { return getTypeID() == X86_MMXTyID; }
|
||||
|
||||
|
||||
Reference in New Issue
Block a user