Skip to content

Commit 795fb8c

Browse files
author
Leon Clark
committed
Address review comments.
1 parent da0a058 commit 795fb8c

File tree

2 files changed

+13
-10
lines changed

2 files changed

+13
-10
lines changed

llvm/lib/Target/AMDGPU/AMDGPUISelLowering.cpp

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -446,7 +446,9 @@ AMDGPUTargetLowering::AMDGPUTargetLowering(const TargetMachine &TM,
446446
{ISD::CTTZ, ISD::CTTZ_ZERO_UNDEF, ISD::CTLZ, ISD::CTLZ_ZERO_UNDEF},
447447
MVT::i64, Custom);
448448

449-
setOperationAction({ISD::CTLZ, ISD::CTLZ_ZERO_UNDEF}, MVT::i8, Custom);
449+
for (auto VT : {MVT::i8, MVT::i16}) {
450+
setOperationAction({ISD::CTLZ, ISD::CTLZ_ZERO_UNDEF}, VT, Custom);
451+
}
450452

451453
static const MVT::SimpleValueType VectorIntTypes[] = {
452454
MVT::v2i32, MVT::v3i32, MVT::v4i32, MVT::v5i32, MVT::v6i32, MVT::v7i32,
@@ -1402,7 +1404,8 @@ void AMDGPUTargetLowering::ReplaceNodeResults(SDNode *N,
14021404
return;
14031405
case ISD::CTLZ:
14041406
case ISD::CTLZ_ZERO_UNDEF:
1405-
replaceCTLZResults(SDValue(N, 0u), DAG, Results);
1407+
if (auto Lowered = lowerCTLZResults(SDValue(N, 0u), DAG))
1408+
Results.push_back(Lowered);
14061409
return;
14071410
default:
14081411
return;
@@ -3069,23 +3072,24 @@ static bool isCttzOpc(unsigned Opc) {
30693072
return Opc == ISD::CTTZ || Opc == ISD::CTTZ_ZERO_UNDEF;
30703073
}
30713074

3072-
void AMDGPUTargetLowering::replaceCTLZResults(
3073-
SDValue Op, SelectionDAG &DAG, SmallVectorImpl<SDValue> &Results) const {
3075+
SDValue AMDGPUTargetLowering::lowerCTLZResults(SDValue Op,
3076+
SelectionDAG &DAG) const {
30743077
auto SL = SDLoc(Op);
30753078
auto Arg = Op.getOperand(0u);
30763079
auto ResultVT = Op.getValueType();
30773080

3078-
if (ResultVT != MVT::i8)
3079-
return;
3081+
if (!(ResultVT == MVT::i8 || ResultVT == MVT::i16))
3082+
return {};
30803083

30813084
assert(isCtlzOpc(Op.getOpcode()));
30823085
assert(ResultVT == Arg.getValueType());
30833086

3084-
auto SubVal = DAG.getConstant(24u, SL, MVT::i32);
3087+
auto const LeadingZeroes = 32u - ResultVT.getFixedSizeInBits();
3088+
auto SubVal = DAG.getConstant(LeadingZeroes, SL, MVT::i32);
30853089
auto NewOp = DAG.getNode(ISD::ZERO_EXTEND, SL, MVT::i32, Arg);
30863090
NewOp = DAG.getNode(Op.getOpcode(), SL, MVT::i32, NewOp);
30873091
NewOp = DAG.getNode(ISD::SUB, SL, MVT::i32, NewOp, SubVal);
3088-
Results.push_back(DAG.getNode(ISD::TRUNCATE, SL, ResultVT, NewOp));
3092+
return DAG.getNode(ISD::TRUNCATE, SL, ResultVT, NewOp);
30893093
}
30903094

30913095
SDValue AMDGPUTargetLowering::LowerCTLZ_CTTZ(SDValue Op, SelectionDAG &DAG) const {

llvm/lib/Target/AMDGPU/AMDGPUISelLowering.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,8 +84,7 @@ class AMDGPUTargetLowering : public TargetLowering {
8484
SDNodeFlags Flags) const;
8585
SDValue lowerFEXP(SDValue Op, SelectionDAG &DAG) const;
8686

87-
void replaceCTLZResults(SDValue Op, SelectionDAG &DAG,
88-
SmallVectorImpl<SDValue> &Results) const;
87+
SDValue lowerCTLZResults(SDValue Op, SelectionDAG &DAG) const;
8988

9089
SDValue LowerCTLZ_CTTZ(SDValue Op, SelectionDAG &DAG) const;
9190

0 commit comments

Comments
 (0)