Skip to content

Commit 6832d86

Browse files
committed
AMDGPU: Make cvt_pknorm and cvt_pk intrinsics propagate poison
1 parent 61adca7 commit 6832d86

File tree

2 files changed

+99
-0
lines changed

2 files changed

+99
-0
lines changed

llvm/lib/Target/AMDGPU/AMDGPUInstCombineIntrinsic.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -719,6 +719,9 @@ GCNTTIImpl::instCombineIntrinsic(InstCombiner &IC, IntrinsicInst &II) const {
719719
Value *Src0 = II.getArgOperand(0);
720720
Value *Src1 = II.getArgOperand(1);
721721

722+
if (isa<PoisonValue>(Src0) || isa<PoisonValue>(Src1))
723+
return IC.replaceInstUsesWith(II, PoisonValue::get(II.getType()));
724+
722725
if (isa<UndefValue>(Src0) && isa<UndefValue>(Src1)) {
723726
return IC.replaceInstUsesWith(II, UndefValue::get(II.getType()));
724727
}

llvm/test/Transforms/InstCombine/AMDGPU/amdgcn-intrinsics.ll

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1320,6 +1320,30 @@ define <2 x i16> @undef_cvt_pknorm_i16() {
13201320
ret <2 x i16> %cvt
13211321
}
13221322

1323+
define <2 x i16> @poison_lhs_cvt_pknorm_i16(float %y) {
1324+
; CHECK-LABEL: @poison_lhs_cvt_pknorm_i16(
1325+
; CHECK-NEXT: ret <2 x i16> poison
1326+
;
1327+
%cvt = call <2 x i16> @llvm.amdgcn.cvt.pknorm.i16(float poison, float %y)
1328+
ret <2 x i16> %cvt
1329+
}
1330+
1331+
define <2 x i16> @poison_rhs_cvt_pknorm_i16(float %x) {
1332+
; CHECK-LABEL: @poison_rhs_cvt_pknorm_i16(
1333+
; CHECK-NEXT: ret <2 x i16> poison
1334+
;
1335+
%cvt = call <2 x i16> @llvm.amdgcn.cvt.pknorm.i16(float %x, float poison)
1336+
ret <2 x i16> %cvt
1337+
}
1338+
1339+
define <2 x i16> @poison_cvt_pknorm_i16() {
1340+
; CHECK-LABEL: @poison_cvt_pknorm_i16(
1341+
; CHECK-NEXT: ret <2 x i16> poison
1342+
;
1343+
%cvt = call <2 x i16> @llvm.amdgcn.cvt.pknorm.i16(float poison, float poison)
1344+
ret <2 x i16> %cvt
1345+
}
1346+
13231347
; --------------------------------------------------------------------
13241348
; llvm.amdgcn.cvt.pknorm.u16
13251349
; --------------------------------------------------------------------
@@ -1352,6 +1376,30 @@ define <2 x i16> @undef_cvt_pknorm_u16() {
13521376
ret <2 x i16> %cvt
13531377
}
13541378

1379+
define <2 x i16> @poison_lhs_cvt_pknorm_u16(float %y) {
1380+
; CHECK-LABEL: @poison_lhs_cvt_pknorm_u16(
1381+
; CHECK-NEXT: ret <2 x i16> poison
1382+
;
1383+
%cvt = call <2 x i16> @llvm.amdgcn.cvt.pknorm.u16(float poison, float %y)
1384+
ret <2 x i16> %cvt
1385+
}
1386+
1387+
define <2 x i16> @poison_rhs_cvt_pknorm_u16(float %x) {
1388+
; CHECK-LABEL: @poison_rhs_cvt_pknorm_u16(
1389+
; CHECK-NEXT: ret <2 x i16> poison
1390+
;
1391+
%cvt = call <2 x i16> @llvm.amdgcn.cvt.pknorm.u16(float %x, float poison)
1392+
ret <2 x i16> %cvt
1393+
}
1394+
1395+
define <2 x i16> @poison_cvt_pknorm_u16() {
1396+
; CHECK-LABEL: @poison_cvt_pknorm_u16(
1397+
; CHECK-NEXT: ret <2 x i16> poison
1398+
;
1399+
%cvt = call <2 x i16> @llvm.amdgcn.cvt.pknorm.u16(float poison, float poison)
1400+
ret <2 x i16> %cvt
1401+
}
1402+
13551403
; --------------------------------------------------------------------
13561404
; llvm.amdgcn.cvt.pk.i16
13571405
; --------------------------------------------------------------------
@@ -1384,6 +1432,30 @@ define <2 x i16> @undef_cvt_pk_i16() {
13841432
ret <2 x i16> %cvt
13851433
}
13861434

1435+
define <2 x i16> @poison_lhs_cvt_pk_i16(i32 %y) {
1436+
; CHECK-LABEL: @poison_lhs_cvt_pk_i16(
1437+
; CHECK-NEXT: ret <2 x i16> poison
1438+
;
1439+
%cvt = call <2 x i16> @llvm.amdgcn.cvt.pk.i16(i32 poison, i32 %y)
1440+
ret <2 x i16> %cvt
1441+
}
1442+
1443+
define <2 x i16> @poison_rhs_cvt_pk_i16(i32 %x) {
1444+
; CHECK-LABEL: @poison_rhs_cvt_pk_i16(
1445+
; CHECK-NEXT: ret <2 x i16> poison
1446+
;
1447+
%cvt = call <2 x i16> @llvm.amdgcn.cvt.pk.i16(i32 %x, i32 poison)
1448+
ret <2 x i16> %cvt
1449+
}
1450+
1451+
define <2 x i16> @poison_cvt_pk_i16() {
1452+
; CHECK-LABEL: @poison_cvt_pk_i16(
1453+
; CHECK-NEXT: ret <2 x i16> poison
1454+
;
1455+
%cvt = call <2 x i16> @llvm.amdgcn.cvt.pk.i16(i32 poison, i32 poison)
1456+
ret <2 x i16> %cvt
1457+
}
1458+
13871459
; --------------------------------------------------------------------
13881460
; llvm.amdgcn.cvt.pk.u16
13891461
; --------------------------------------------------------------------
@@ -1416,6 +1488,30 @@ define <2 x i16> @undef_cvt_pk_u16() {
14161488
ret <2 x i16> %cvt
14171489
}
14181490

1491+
define <2 x i16> @poison_lhs_cvt_pk_u16(i32 %y) {
1492+
; CHECK-LABEL: @poison_lhs_cvt_pk_u16(
1493+
; CHECK-NEXT: ret <2 x i16> poison
1494+
;
1495+
%cvt = call <2 x i16> @llvm.amdgcn.cvt.pk.u16(i32 poison, i32 %y)
1496+
ret <2 x i16> %cvt
1497+
}
1498+
1499+
define <2 x i16> @poison_rhs_cvt_pk_u16(i32 %x) {
1500+
; CHECK-LABEL: @poison_rhs_cvt_pk_u16(
1501+
; CHECK-NEXT: ret <2 x i16> poison
1502+
;
1503+
%cvt = call <2 x i16> @llvm.amdgcn.cvt.pk.u16(i32 %x, i32 poison)
1504+
ret <2 x i16> %cvt
1505+
}
1506+
1507+
define <2 x i16> @poison_cvt_pk_u16() {
1508+
; CHECK-LABEL: @poison_cvt_pk_u16(
1509+
; CHECK-NEXT: ret <2 x i16> poison
1510+
;
1511+
%cvt = call <2 x i16> @llvm.amdgcn.cvt.pk.u16(i32 poison, i32 poison)
1512+
ret <2 x i16> %cvt
1513+
}
1514+
14191515
; --------------------------------------------------------------------
14201516
; llvm.amdgcn.ubfe
14211517
; --------------------------------------------------------------------

0 commit comments

Comments
 (0)