forked from OSchip/llvm-project
R600: Move more out of AMDILISelLowering
llvm-svn: 211516
This commit is contained in:
parent
72573adbf2
commit
e54e1c3a21
|
@ -111,6 +111,14 @@ AMDGPUTargetLowering::AMDGPUTargetLowering(TargetMachine &TM) :
|
|||
// Initialize target lowering borrowed from AMDIL
|
||||
InitAMDILLowering();
|
||||
|
||||
setOperationAction(ISD::Constant, MVT::i32, Legal);
|
||||
setOperationAction(ISD::Constant, MVT::i64, Legal);
|
||||
setOperationAction(ISD::ConstantFP, MVT::f32, Legal);
|
||||
setOperationAction(ISD::ConstantFP, MVT::f64, Legal);
|
||||
|
||||
setOperationAction(ISD::BR_JT, MVT::Other, Expand);
|
||||
setOperationAction(ISD::BRIND, MVT::Other, Expand);
|
||||
|
||||
// We need to custom lower some of the intrinsics
|
||||
setOperationAction(ISD::INTRINSIC_WO_CHAIN, MVT::Other, Custom);
|
||||
|
||||
|
@ -300,6 +308,7 @@ AMDGPUTargetLowering::AMDGPUTargetLowering(TargetMachine &TM) :
|
|||
setOperationAction(ISD::UDIVREM, VT, Custom);
|
||||
setOperationAction(ISD::SELECT, VT, Expand);
|
||||
setOperationAction(ISD::VSELECT, VT, Expand);
|
||||
setOperationAction(ISD::SELECT_CC, VT, Expand);
|
||||
setOperationAction(ISD::XOR, VT, Expand);
|
||||
setOperationAction(ISD::BSWAP, VT, Expand);
|
||||
setOperationAction(ISD::CTPOP, VT, Expand);
|
||||
|
@ -307,6 +316,7 @@ AMDGPUTargetLowering::AMDGPUTargetLowering(TargetMachine &TM) :
|
|||
setOperationAction(ISD::CTTZ_ZERO_UNDEF, VT, Expand);
|
||||
setOperationAction(ISD::CTLZ, VT, Expand);
|
||||
setOperationAction(ISD::CTLZ_ZERO_UNDEF, VT, Expand);
|
||||
setOperationAction(ISD::VECTOR_SHUFFLE, VT, Expand);
|
||||
}
|
||||
|
||||
static const MVT::SimpleValueType FloatVectorTypes[] = {
|
||||
|
@ -333,7 +343,9 @@ AMDGPUTargetLowering::AMDGPUTargetLowering(TargetMachine &TM) :
|
|||
setOperationAction(ISD::FNEG, VT, Expand);
|
||||
setOperationAction(ISD::SELECT, VT, Expand);
|
||||
setOperationAction(ISD::VSELECT, VT, Expand);
|
||||
setOperationAction(ISD::SELECT_CC, VT, Expand);
|
||||
setOperationAction(ISD::FCOPYSIGN, VT, Expand);
|
||||
setOperationAction(ISD::VECTOR_SHUFFLE, VT, Expand);
|
||||
}
|
||||
|
||||
setOperationAction(ISD::FNEARBYINT, MVT::f32, Custom);
|
||||
|
@ -348,6 +360,7 @@ AMDGPUTargetLowering::AMDGPUTargetLowering(TargetMachine &TM) :
|
|||
// There are no integer divide instructions, and these expand to a pretty
|
||||
// large sequence of instructions.
|
||||
setIntDivIsCheap(false);
|
||||
setPow2DivIsCheap(false);
|
||||
|
||||
// TODO: Investigate this when 64-bit divides are implemented.
|
||||
addBypassSlowDiv(64, 32);
|
||||
|
|
|
@ -13,7 +13,6 @@
|
|||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "AMDGPUISelLowering.h"
|
||||
#include "AMDGPUSubtarget.h"
|
||||
#include "llvm/CodeGen/SelectionDAG.h"
|
||||
|
||||
using namespace llvm;
|
||||
|
@ -24,56 +23,24 @@ using namespace llvm;
|
|||
void AMDGPUTargetLowering::InitAMDILLowering() {
|
||||
static const MVT::SimpleValueType types[] = {
|
||||
MVT::i32,
|
||||
MVT::f32,
|
||||
MVT::f64,
|
||||
MVT::i64,
|
||||
MVT::v4f32,
|
||||
MVT::v4i32,
|
||||
MVT::v2f32,
|
||||
MVT::v2i32
|
||||
MVT::v2i32,
|
||||
MVT::v4i32
|
||||
};
|
||||
|
||||
static const MVT::SimpleValueType VectorTypes[] = {
|
||||
MVT::v4f32,
|
||||
MVT::v4i32,
|
||||
MVT::v2f32,
|
||||
MVT::v2i32
|
||||
};
|
||||
|
||||
const AMDGPUSubtarget &STM = getTargetMachine().getSubtarget<AMDGPUSubtarget>();
|
||||
|
||||
for (MVT VT : types) {
|
||||
setOperationAction(ISD::SUBE, VT, Expand);
|
||||
setOperationAction(ISD::SUBC, VT, Expand);
|
||||
setOperationAction(ISD::ADDE, VT, Expand);
|
||||
setOperationAction(ISD::ADDC, VT, Expand);
|
||||
setOperationAction(ISD::BRCOND, VT, Custom);
|
||||
setOperationAction(ISD::BR_JT, VT, Expand);
|
||||
setOperationAction(ISD::BRIND, VT, Expand);
|
||||
}
|
||||
|
||||
for (MVT VT : VectorTypes) {
|
||||
setOperationAction(ISD::VECTOR_SHUFFLE, VT, Expand);
|
||||
setOperationAction(ISD::SELECT_CC, VT, Expand);
|
||||
}
|
||||
|
||||
if (STM.hasHWFP64()) {
|
||||
setOperationAction(ISD::ConstantFP, MVT::f64, Legal);
|
||||
setOperationAction(ISD::FABS, MVT::f64, Expand);
|
||||
}
|
||||
|
||||
setOperationAction(ISD::SUBC, MVT::Other, Expand);
|
||||
setOperationAction(ISD::ADDE, MVT::Other, Expand);
|
||||
setOperationAction(ISD::ADDC, MVT::Other, Expand);
|
||||
|
||||
setOperationAction(ISD::BRCOND, MVT::Other, Custom);
|
||||
setOperationAction(ISD::BR_JT, MVT::Other, Expand);
|
||||
setOperationAction(ISD::BRIND, MVT::Other, Expand);
|
||||
|
||||
setOperationAction(ISD::Constant, MVT::i32, Legal);
|
||||
setOperationAction(ISD::Constant, MVT::i64, Legal);
|
||||
setOperationAction(ISD::ConstantFP, MVT::f32, Legal);
|
||||
|
||||
setPow2DivIsCheap(false);
|
||||
setSelectIsExpensive(true); // FIXME: This makes no sense at all
|
||||
}
|
||||
|
||||
|
|
|
@ -138,6 +138,7 @@ SITargetLowering::SITargetLowering(TargetMachine &TM) :
|
|||
setOperationAction(ISD::INTRINSIC_WO_CHAIN, MVT::v4f32, Custom);
|
||||
|
||||
setOperationAction(ISD::INTRINSIC_VOID, MVT::Other, Custom);
|
||||
setOperationAction(ISD::BRCOND, MVT::Other, Custom);
|
||||
|
||||
setLoadExtAction(ISD::SEXTLOAD, MVT::i1, Promote);
|
||||
setLoadExtAction(ISD::SEXTLOAD, MVT::i8, Custom);
|
||||
|
@ -214,9 +215,10 @@ SITargetLowering::SITargetLowering(TargetMachine &TM) :
|
|||
setOperationAction(ISD::FRINT, MVT::f64, Legal);
|
||||
}
|
||||
|
||||
// FIXME: This should be removed and handled the same was as f32 fneg. Source
|
||||
// FIXME: These should be removed and handled the same was as f32 fneg. Source
|
||||
// modifiers also work for the double instructions.
|
||||
setOperationAction(ISD::FNEG, MVT::f64, Expand);
|
||||
setOperationAction(ISD::FABS, MVT::f64, Expand);
|
||||
|
||||
setTargetDAGCombine(ISD::SELECT_CC);
|
||||
setTargetDAGCombine(ISD::SETCC);
|
||||
|
|
Loading…
Reference in New Issue