mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-14 16:33:28 +00:00
R600: Change operation action from Custom to Expand for BR_CC
Reviewed-by: Christian König <christian.koenig@amd.com> git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@176698 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
9c6b0b0cce
commit
d416505906
@ -50,8 +50,8 @@ R600TargetLowering::R600TargetLowering(TargetMachine &TM) :
|
|||||||
setOperationAction(ISD::UREM, MVT::v4i32, Expand);
|
setOperationAction(ISD::UREM, MVT::v4i32, Expand);
|
||||||
setOperationAction(ISD::SETCC, MVT::v4i32, Expand);
|
setOperationAction(ISD::SETCC, MVT::v4i32, Expand);
|
||||||
|
|
||||||
setOperationAction(ISD::BR_CC, MVT::i32, Custom);
|
setOperationAction(ISD::BR_CC, MVT::i32, Expand);
|
||||||
setOperationAction(ISD::BR_CC, MVT::f32, Custom);
|
setOperationAction(ISD::BR_CC, MVT::f32, Expand);
|
||||||
|
|
||||||
setOperationAction(ISD::FSUB, MVT::f32, Expand);
|
setOperationAction(ISD::FSUB, MVT::f32, Expand);
|
||||||
|
|
||||||
@ -312,7 +312,6 @@ using namespace llvm::AMDGPUIntrinsic;
|
|||||||
SDValue R600TargetLowering::LowerOperation(SDValue Op, SelectionDAG &DAG) const {
|
SDValue R600TargetLowering::LowerOperation(SDValue Op, SelectionDAG &DAG) const {
|
||||||
switch (Op.getOpcode()) {
|
switch (Op.getOpcode()) {
|
||||||
default: return AMDGPUTargetLowering::LowerOperation(Op, DAG);
|
default: return AMDGPUTargetLowering::LowerOperation(Op, DAG);
|
||||||
case ISD::BR_CC: return LowerBR_CC(Op, DAG);
|
|
||||||
case ISD::ROTL: return LowerROTL(Op, DAG);
|
case ISD::ROTL: return LowerROTL(Op, DAG);
|
||||||
case ISD::SELECT_CC: return LowerSELECT_CC(Op, DAG);
|
case ISD::SELECT_CC: return LowerSELECT_CC(Op, DAG);
|
||||||
case ISD::SELECT: return LowerSELECT(Op, DAG);
|
case ISD::SELECT: return LowerSELECT(Op, DAG);
|
||||||
@ -475,44 +474,6 @@ SDValue R600TargetLowering::LowerFPTOUINT(SDValue Op, SelectionDAG &DAG) const {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
SDValue R600TargetLowering::LowerBR_CC(SDValue Op, SelectionDAG &DAG) const {
|
|
||||||
SDValue Chain = Op.getOperand(0);
|
|
||||||
SDValue CC = Op.getOperand(1);
|
|
||||||
SDValue LHS = Op.getOperand(2);
|
|
||||||
SDValue RHS = Op.getOperand(3);
|
|
||||||
SDValue JumpT = Op.getOperand(4);
|
|
||||||
SDValue CmpValue;
|
|
||||||
SDValue Result;
|
|
||||||
|
|
||||||
if (LHS.getValueType() == MVT::i32) {
|
|
||||||
CmpValue = DAG.getNode(
|
|
||||||
ISD::SELECT_CC,
|
|
||||||
Op.getDebugLoc(),
|
|
||||||
MVT::i32,
|
|
||||||
LHS, RHS,
|
|
||||||
DAG.getConstant(-1, MVT::i32),
|
|
||||||
DAG.getConstant(0, MVT::i32),
|
|
||||||
CC);
|
|
||||||
} else if (LHS.getValueType() == MVT::f32) {
|
|
||||||
CmpValue = DAG.getNode(
|
|
||||||
ISD::SELECT_CC,
|
|
||||||
Op.getDebugLoc(),
|
|
||||||
MVT::f32,
|
|
||||||
LHS, RHS,
|
|
||||||
DAG.getConstantFP(1.0f, MVT::f32),
|
|
||||||
DAG.getConstantFP(0.0f, MVT::f32),
|
|
||||||
CC);
|
|
||||||
} else {
|
|
||||||
assert(0 && "Not valid type for br_cc");
|
|
||||||
}
|
|
||||||
Result = DAG.getNode(
|
|
||||||
AMDGPUISD::BRANCH_COND,
|
|
||||||
CmpValue.getDebugLoc(),
|
|
||||||
MVT::Other, Chain,
|
|
||||||
JumpT, CmpValue);
|
|
||||||
return Result;
|
|
||||||
}
|
|
||||||
|
|
||||||
SDValue R600TargetLowering::LowerImplicitParameter(SelectionDAG &DAG, EVT VT,
|
SDValue R600TargetLowering::LowerImplicitParameter(SelectionDAG &DAG, EVT VT,
|
||||||
DebugLoc DL,
|
DebugLoc DL,
|
||||||
unsigned DwordOffset) const {
|
unsigned DwordOffset) const {
|
||||||
|
@ -52,8 +52,6 @@ private:
|
|||||||
void lowerImplicitParameter(MachineInstr *MI, MachineBasicBlock &BB,
|
void lowerImplicitParameter(MachineInstr *MI, MachineBasicBlock &BB,
|
||||||
MachineRegisterInfo & MRI, unsigned dword_offset) const;
|
MachineRegisterInfo & MRI, unsigned dword_offset) const;
|
||||||
|
|
||||||
SDValue LowerBR_CC(SDValue Op, SelectionDAG &DAG) const;
|
|
||||||
|
|
||||||
/// \brief Lower ROTL opcode to BITALIGN
|
/// \brief Lower ROTL opcode to BITALIGN
|
||||||
SDValue LowerROTL(SDValue Op, SelectionDAG &DAG) const;
|
SDValue LowerROTL(SDValue Op, SelectionDAG &DAG) const;
|
||||||
|
|
||||||
|
@ -15,10 +15,11 @@ entry:
|
|||||||
}
|
}
|
||||||
|
|
||||||
; This test checks that a setcc node with f32 operands is lowered to a
|
; This test checks that a setcc node with f32 operands is lowered to a
|
||||||
; SET* instruction.
|
; SET*_DX10 instruction. Previously we were lowering this to:
|
||||||
|
; SET* + FP_TO_SINT
|
||||||
|
|
||||||
; CHECK: @fcmp_br
|
; CHECK: @fcmp_br
|
||||||
; CHECK: SET{{[N]*}}E T{{[0-9]+\.[XYZW], [a-zA-Z0-9, .]+}}(5.0
|
; CHECK: SET{{[N]*}}E_DX10 T{{[0-9]+\.[XYZW], [a-zA-Z0-9, .]+}}(5.0
|
||||||
|
|
||||||
define void @fcmp_br(i32 addrspace(1)* %out, float %in) {
|
define void @fcmp_br(i32 addrspace(1)* %out, float %in) {
|
||||||
entry:
|
entry:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user