Skip to content

Commit 6e16bb5

Browse files
committed
Address review comments
1 parent fc9ec25 commit 6e16bb5

File tree

2 files changed

+45
-48
lines changed

2 files changed

+45
-48
lines changed

llvm/lib/Target/NVPTX/NVPTXISelLowering.cpp

Lines changed: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -2319,39 +2319,39 @@ SDValue NVPTXTargetLowering::LowerBITCAST(SDValue Op, SelectionDAG &DAG) const {
23192319
// Handle bitcasting to/from v2i8 without hitting the default promotion
23202320
// strategy which goes through stack memory.
23212321
SDNode *Node = Op.getNode();
2322-
SDLoc dl(Node);
2322+
SDLoc DL(Node);
23232323

2324-
auto maybeBitcast = [&](EVT vt, SDValue val) {
2325-
if (val->getValueType(0) == vt) {
2326-
return val;
2327-
}
2328-
return DAG.getNode(ISD::BITCAST, dl, vt, val);
2324+
auto maybeBitcast = [&](EVT VT, SDValue Value) {
2325+
if (Value->getValueType(0) == VT)
2326+
return Value;
2327+
return DAG.getNode(ISD::BITCAST, DL, VT, Value);
23292328
};
23302329

2331-
EVT VT = Op->getValueType(0);
2332-
EVT fromVT = Op->getOperand(0)->getValueType(0);
2330+
EVT ToVT = Op->getValueType(0);
2331+
EVT FromVT = Op->getOperand(0)->getValueType(0);
23332332

2334-
if (VT == MVT::v2i8) {
2333+
if (ToVT == MVT::v2i8) {
23352334
// Bitcast to i16 and unpack elements into a vector
2336-
SDValue reg = maybeBitcast(MVT::i16, Op->getOperand(0));
2337-
SDValue v0 = DAG.getNode(ISD::TRUNCATE, dl, MVT::i8, reg);
2338-
SDValue C8 = DAG.getConstant(8, dl, MVT::i16);
2339-
SDValue v1 = DAG.getNode(ISD::TRUNCATE, dl, MVT::i8,
2340-
DAG.getNode(ISD::SRL, dl, MVT::i16, {reg, C8}));
2341-
return DAG.getNode(ISD::BUILD_VECTOR, dl, MVT::v2i8, {v0, v1});
2342-
} else if (fromVT == MVT::v2i8) {
2335+
SDValue AsInt = maybeBitcast(MVT::i16, Op->getOperand(0));
2336+
SDValue Vec0 = DAG.getNode(ISD::TRUNCATE, DL, MVT::i8, AsInt);
2337+
SDValue Const8 = DAG.getConstant(8, DL, MVT::i16);
2338+
SDValue Vec1 =
2339+
DAG.getNode(ISD::TRUNCATE, DL, MVT::i8,
2340+
DAG.getNode(ISD::SRL, DL, MVT::i16, {AsInt, Const8}));
2341+
return DAG.getNode(ISD::BUILD_VECTOR, DL, MVT::v2i8, {Vec0, Vec1});
2342+
} else if (FromVT == MVT::v2i8) {
23432343
// Pack vector elements into i16 and bitcast to final type
2344-
SDValue v0 = DAG.getNode(ISD::EXTRACT_VECTOR_ELT, dl, MVT::i8,
2345-
Op->getOperand(0), DAG.getIntPtrConstant(0, dl));
2346-
SDValue v1 = DAG.getNode(ISD::EXTRACT_VECTOR_ELT, dl, MVT::i8,
2347-
Op->getOperand(0), DAG.getIntPtrConstant(1, dl));
2348-
SDValue E0 = DAG.getNode(ISD::ZERO_EXTEND, dl, MVT::i16, v0);
2349-
SDValue E1 = DAG.getNode(ISD::ZERO_EXTEND, dl, MVT::i16, v1);
2350-
SDValue C8 = DAG.getConstant(8, dl, MVT::i16);
2351-
SDValue reg =
2352-
DAG.getNode(ISD::OR, dl, MVT::i16,
2353-
{E0, DAG.getNode(ISD::SHL, dl, MVT::i16, {E1, C8})});
2354-
return maybeBitcast(VT, reg);
2344+
SDValue Vec0 = DAG.getNode(ISD::EXTRACT_VECTOR_ELT, DL, MVT::i8,
2345+
Op->getOperand(0), DAG.getIntPtrConstant(0, DL));
2346+
SDValue Vec1 = DAG.getNode(ISD::EXTRACT_VECTOR_ELT, DL, MVT::i8,
2347+
Op->getOperand(0), DAG.getIntPtrConstant(1, DL));
2348+
SDValue Extend0 = DAG.getNode(ISD::ZERO_EXTEND, DL, MVT::i16, Vec0);
2349+
SDValue Extend1 = DAG.getNode(ISD::ZERO_EXTEND, DL, MVT::i16, Vec1);
2350+
SDValue Const8 = DAG.getConstant(8, DL, MVT::i16);
2351+
SDValue AsInt = DAG.getNode(
2352+
ISD::OR, DL, MVT::i16,
2353+
{Extend0, DAG.getNode(ISD::SHL, DL, MVT::i16, {Extend1, Const8})});
2354+
return maybeBitcast(ToVT, AsInt);
23552355
}
23562356
return Op;
23572357
}

llvm/test/CodeGen/NVPTX/i8x2-instructions.ll

Lines changed: 18 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -9,28 +9,25 @@
99

1010
target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128"
1111

12-
; CHECK-LABEL: test_trunc_2xi8(
13-
; CHECK: ld.param.u32 [[R1:%r[0-9]+]], [test_trunc_2xi8_param_0];
14-
; CHECK: mov.b32 {[[RS1:%rs[0-9]+]], [[RS2:%rs[0-9]+]]}, [[R1]];
15-
; CHECK: shl.b16 [[RS3:%rs[0-9]+]], [[RS2]], 8;
16-
; CHECK: and.b16 [[RS4:%rs[0-9]+]], [[RS1]], 255;
17-
; CHECK: or.b16 [[RS5:%rs[0-9]+]], [[RS4]], [[RS3]]
18-
; CHECK: cvt.u32.u16 [[R2:%r[0-9]]], [[RS5]]
19-
; CHECK: st.param.b32 [func_retval0], [[R2]];
20-
define i16 @test_trunc_2xi8(<2 x i16> %a) #0 {
21-
%trunc = trunc <2 x i16> %a to <2 x i8>
22-
%res = bitcast <2 x i8> %trunc to i16
12+
; CHECK-LABEL: test_bitcast_2xi8_i16(
13+
; CHECK: ld.param.u32 %r1, [test_bitcast_2xi8_i16_param_0];
14+
; CHECK: mov.b32 {%rs1, %rs2}, %r1;
15+
; CHECK: shl.b16 %rs3, %rs2, 8;
16+
; CHECK: and.b16 %rs4, %rs1, 255;
17+
; CHECK: or.b16 %rs5, %rs4, %rs3;
18+
; CHECK: cvt.u32.u16 %r2, %rs5;
19+
; CHECK: st.param.b32 [func_retval0], %r2;
20+
define i16 @test_bitcast_2xi8_i16(<2 x i8> %a) {
21+
%res = bitcast <2 x i8> %a to i16
2322
ret i16 %res
2423
}
2524

26-
; CHECK-LABEL: test_zext_2xi8(
27-
; CHECK: ld.param.u16 [[RS1:%rs[0-9]+]], [test_zext_2xi8_param_0];
28-
; CHECK: shr.u16 [[RS2:%rs[0-9]+]], [[RS1]], 8;
29-
; CHECK: mov.b32 [[R1:%r[0-9]+]], {[[RS1]], [[RS2]]}
30-
; CHECK: and.b32 [[R2:%r[0-9]+]], [[R1]], 16711935;
31-
; CHECK: st.param.b32 [func_retval0], [[R2]];
32-
define <2 x i16> @test_zext_2xi8(i16 %a) #0 {
33-
%vec = bitcast i16 %a to <2 x i8>
34-
%ext = zext <2 x i8> %vec to <2 x i16>
35-
ret <2 x i16> %ext
25+
; CHECK-LABEL: test_bitcast_i16_2xi8(
26+
; CHECK: ld.param.u16 %rs1, [test_bitcast_i16_2xi8_param_0];
27+
; CHECK: shr.u16 %rs2, %rs1, 8;
28+
; CHECK: mov.b32 %r1, {%rs1, %rs2};
29+
; CHECK: st.param.b32 [func_retval0], %r1;
30+
define <2 x i8> @test_bitcast_i16_2xi8(i16 %a) {
31+
%res = bitcast i16 %a to <2 x i8>
32+
ret <2 x i8> %res
3633
}

0 commit comments

Comments
 (0)