mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-26 08:30:10 +01:00
radeon/llvm: Add optimization for FP_ROUND
This commit is contained in:
parent
87decd6e66
commit
aa8367dd13
2 changed files with 27 additions and 0 deletions
|
|
@ -50,6 +50,9 @@ R600TargetLowering::R600TargetLowering(TargetMachine &TM) :
|
|||
setOperationAction(ISD::SETCC, MVT::i32, Custom);
|
||||
setOperationAction(ISD::SETCC, MVT::f32, Custom);
|
||||
setOperationAction(ISD::FP_TO_UINT, MVT::i1, Custom);
|
||||
|
||||
setTargetDAGCombine(ISD::FP_ROUND);
|
||||
|
||||
setSchedulingPreference(Sched::VLIW);
|
||||
}
|
||||
|
||||
|
|
@ -603,3 +606,26 @@ SDValue R600TargetLowering::LowerFormalArguments(
|
|||
}
|
||||
return Chain;
|
||||
}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// Custom DAG Optimizations
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
SDValue R600TargetLowering::PerformDAGCombine(SDNode *N,
|
||||
DAGCombinerInfo &DCI) const
|
||||
{
|
||||
SelectionDAG &DAG = DCI.DAG;
|
||||
|
||||
switch (N->getOpcode()) {
|
||||
// (f32 fp_round (f64 uint_to_fp a)) -> (f32 uint_to_fp a)
|
||||
case ISD::FP_ROUND: {
|
||||
SDValue Arg = N->getOperand(0);
|
||||
if (Arg.getOpcode() == ISD::UINT_TO_FP && Arg.getValueType() == MVT::f64) {
|
||||
return DAG.getNode(ISD::UINT_TO_FP, N->getDebugLoc(), N->getValueType(0),
|
||||
Arg.getOperand(0));
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
return SDValue();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@ public:
|
|||
virtual MachineBasicBlock * EmitInstrWithCustomInserter(MachineInstr *MI,
|
||||
MachineBasicBlock * BB) const;
|
||||
virtual SDValue LowerOperation(SDValue Op, SelectionDAG &DAG) const;
|
||||
virtual SDValue PerformDAGCombine(SDNode *N, DAGCombinerInfo &DCI) const;
|
||||
void ReplaceNodeResults(SDNode * N,
|
||||
SmallVectorImpl<SDValue> &Results,
|
||||
SelectionDAG &DAG) const;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue