Skip to content

Commit daa022c

Browse files
author
Leon Clark
committed
Enable roundeven.
Add support for roundeven and implement appropriate tests. Reviewed By: arsenm Differential Revision: https://reviews.llvm.org/D137954
1 parent d73383c commit daa022c

File tree

3 files changed

+632
-0
lines changed

3 files changed

+632
-0
lines changed

llvm/lib/Target/AMDGPU/AMDGPUISelLowering.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -332,6 +332,8 @@ AMDGPUTargetLowering::AMDGPUTargetLowering(const TargetMachine &TM,
332332

333333
setOperationAction(ISD::FNEARBYINT, {MVT::f16, MVT::f32, MVT::f64}, Custom);
334334

335+
setOperationAction(ISD::FROUNDEVEN, {MVT::f16, MVT::f32, MVT::f64}, Custom);
336+
335337
setOperationAction(ISD::FREM, {MVT::f16, MVT::f32, MVT::f64}, Custom);
336338

337339
if (Subtarget->has16BitInsts())
@@ -1252,6 +1254,8 @@ SDValue AMDGPUTargetLowering::LowerOperation(SDValue Op,
12521254
case ISD::FTRUNC: return LowerFTRUNC(Op, DAG);
12531255
case ISD::FRINT: return LowerFRINT(Op, DAG);
12541256
case ISD::FNEARBYINT: return LowerFNEARBYINT(Op, DAG);
1257+
case ISD::FROUNDEVEN:
1258+
return LowerFROUNDEVEN(Op, DAG);
12551259
case ISD::FROUND: return LowerFROUND(Op, DAG);
12561260
case ISD::FFLOOR: return LowerFFLOOR(Op, DAG);
12571261
case ISD::FLOG:
@@ -2244,6 +2248,13 @@ SDValue AMDGPUTargetLowering::LowerFNEARBYINT(SDValue Op, SelectionDAG &DAG) con
22442248
return DAG.getNode(ISD::FRINT, SDLoc(Op), Op.getValueType(), Op.getOperand(0));
22452249
}
22462250

2251+
SDValue AMDGPUTargetLowering::LowerFROUNDEVEN(SDValue Op,
2252+
SelectionDAG &DAG) const {
2253+
auto VT = Op.getValueType();
2254+
auto Arg = Op.getOperand(0u);
2255+
return DAG.getNode(ISD::FRINT, SDLoc(Op), VT, Arg);
2256+
}
2257+
22472258
// XXX - May require not supporting f32 denormals?
22482259

22492260
// Don't handle v2f16. The extra instructions to scalarize and repack around the

llvm/lib/Target/AMDGPU/AMDGPUISelLowering.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ class AMDGPUTargetLowering : public TargetLowering {
5757
SDValue LowerFRINT(SDValue Op, SelectionDAG &DAG) const;
5858
SDValue LowerFNEARBYINT(SDValue Op, SelectionDAG &DAG) const;
5959

60+
SDValue LowerFROUNDEVEN(SDValue Op, SelectionDAG &DAG) const;
6061
SDValue LowerFROUND(SDValue Op, SelectionDAG &DAG) const;
6162
SDValue LowerFFLOOR(SDValue Op, SelectionDAG &DAG) const;
6263
SDValue LowerFLOG(SDValue Op, SelectionDAG &DAG,

0 commit comments

Comments
 (0)