mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-05 12:31:33 +00:00
Allow targets to specify the return type of libcalls that are generated for floating point comparisons, rather than hard-coding them as i32.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92199 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
202249a698
commit
8f17a36d31
@ -139,6 +139,12 @@ public:
|
||||
virtual
|
||||
MVT::SimpleValueType getSetCCResultType(EVT VT) const;
|
||||
|
||||
/// getCmpLibcallReturnType - Return the ValueType for comparison
|
||||
/// libcalls. Comparions libcalls include floating point comparion calls,
|
||||
/// and Ordered/Unordered check calls on floating point numbers.
|
||||
virtual
|
||||
MVT::SimpleValueType getCmpLibcallReturnType() const;
|
||||
|
||||
/// getBooleanContents - For targets without i1 registers, this gives the
|
||||
/// nature of the high-bits of boolean values held in types wider than i1.
|
||||
/// "Boolean values" are special true/false values produced by nodes like
|
||||
|
@ -637,7 +637,8 @@ void DAGTypeLegalizer::SoftenSetCCOperands(SDValue &NewLHS, SDValue &NewRHS,
|
||||
}
|
||||
}
|
||||
|
||||
EVT RetVT = MVT::i32; // FIXME: is this the correct return type?
|
||||
// Use the target specific return value for comparions lib calls.
|
||||
EVT RetVT = TLI.getCmpLibcallReturnType();
|
||||
SDValue Ops[2] = { LHSInt, RHSInt };
|
||||
NewLHS = MakeLibCall(LC1, RetVT, Ops, 2, false/*sign irrelevant*/, dl);
|
||||
NewRHS = DAG.getConstant(0, RetVT);
|
||||
|
@ -713,6 +713,10 @@ MVT::SimpleValueType TargetLowering::getSetCCResultType(EVT VT) const {
|
||||
return PointerTy.SimpleTy;
|
||||
}
|
||||
|
||||
MVT::SimpleValueType TargetLowering::getCmpLibcallReturnType() const {
|
||||
return MVT::i32; // return the default value
|
||||
}
|
||||
|
||||
/// getVectorTypeBreakdown - Vector types are broken down into some number of
|
||||
/// legal first class types. For example, MVT::v8f32 maps to 2 MVT::v4f32
|
||||
/// with Altivec or SSE1, or 8 promoted MVT::f64 values with the X86 FP stack.
|
||||
|
@ -371,6 +371,11 @@ PIC16TargetLowering::getSetCCResultType(EVT ValType) const {
|
||||
return MVT::i8;
|
||||
}
|
||||
|
||||
MVT::SimpleValueType
|
||||
PIC16TargetLowering::getCmpLibcallReturnType() const {
|
||||
return MVT::i8;
|
||||
}
|
||||
|
||||
/// The type legalizer framework of generating legalizer can generate libcalls
|
||||
/// only when the operand/result types are illegal.
|
||||
/// PIC16 needs to generate libcalls even for the legal types (i8) for some ops.
|
||||
|
@ -84,6 +84,7 @@ namespace llvm {
|
||||
virtual const char *getTargetNodeName(unsigned Opcode) const;
|
||||
/// getSetCCResultType - Return the ISD::SETCC ValueType
|
||||
virtual MVT::SimpleValueType getSetCCResultType(EVT ValType) const;
|
||||
virtual MVT::SimpleValueType getCmpLibcallReturnType() const;
|
||||
SDValue LowerShift(SDValue Op, SelectionDAG &DAG);
|
||||
SDValue LowerMUL(SDValue Op, SelectionDAG &DAG);
|
||||
SDValue LowerADD(SDValue Op, SelectionDAG &DAG);
|
||||
|
Loading…
Reference in New Issue
Block a user