Skip to content

Commit 30b9bd1

Browse files
committed
[X86] canCreateUndefOrPoisonForTargetNode - add GF2P8AFFINEINVQB / GF2P8AFFINEQB / GF2P8MULB handling
All 3 instructions are well defined bit twiddling operations - they do not introduce undef/poison with well defined inputs. Fixes regressions in llvm#152107
1 parent 4af268c commit 30b9bd1

File tree

2 files changed

+8
-6
lines changed

2 files changed

+8
-6
lines changed

llvm/lib/Target/X86/X86ISelLowering.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45167,6 +45167,11 @@ bool X86TargetLowering::canCreateUndefOrPoisonForTargetNode(
4516745167
// SSE signbit extraction.
4516845168
case X86ISD::MOVMSK:
4516945169
return false;
45170+
// GFNI instructions.
45171+
case X86ISD::GF2P8AFFINEINVQB:
45172+
case X86ISD::GF2P8AFFINEQB:
45173+
case X86ISD::GF2P8MULB:
45174+
return false;
4517045175
case ISD::INTRINSIC_WO_CHAIN:
4517145176
switch (Op->getConstantOperandVal(0)) {
4517245177
case Intrinsic::x86_sse2_pmadd_wd:

llvm/test/CodeGen/X86/combine-gfni.ll

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,7 @@ define <16 x i8> @gf2p8affineqb_freeze(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> %
2424
; AVX512-LABEL: gf2p8affineqb_freeze:
2525
; AVX512: # %bb.0:
2626
; AVX512-NEXT: vpmovb2m %xmm2, %k1
27-
; AVX512-NEXT: vgf2p8affineqb $11, %xmm1, %xmm1, %xmm1
28-
; AVX512-NEXT: vmovdqu8 %xmm1, %xmm0 {%k1}
27+
; AVX512-NEXT: vgf2p8affineqb $11, %xmm1, %xmm1, %xmm0 {%k1}
2928
; AVX512-NEXT: retq
3029
%i = icmp slt <16 x i8> %a2, zeroinitializer
3130
%g = call <16 x i8> @llvm.x86.vgf2p8affineqb.128(<16 x i8> %a1, <16 x i8> %a1, i8 11)
@@ -55,8 +54,7 @@ define <16 x i8> @gf2p8affineinvqb_freeze(<16 x i8> %a0, <16 x i8> %a1, <16 x i8
5554
; AVX512-LABEL: gf2p8affineinvqb_freeze:
5655
; AVX512: # %bb.0:
5756
; AVX512-NEXT: vpmovb2m %xmm2, %k1
58-
; AVX512-NEXT: vgf2p8affineinvqb $11, %xmm1, %xmm1, %xmm1
59-
; AVX512-NEXT: vmovdqu8 %xmm1, %xmm0 {%k1}
57+
; AVX512-NEXT: vgf2p8affineinvqb $11, %xmm1, %xmm1, %xmm0 {%k1}
6058
; AVX512-NEXT: retq
6159
%i = icmp slt <16 x i8> %a2, zeroinitializer
6260
%g = call <16 x i8> @llvm.x86.vgf2p8affineinvqb.128(<16 x i8> %a1, <16 x i8> %a1, i8 11)
@@ -86,8 +84,7 @@ define <16 x i8> @gf2p8mulb_freeze(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> %a2)
8684
; AVX512-LABEL: gf2p8mulb_freeze:
8785
; AVX512: # %bb.0:
8886
; AVX512-NEXT: vpmovb2m %xmm2, %k1
89-
; AVX512-NEXT: vgf2p8mulb %xmm1, %xmm1, %xmm1
90-
; AVX512-NEXT: vmovdqu8 %xmm1, %xmm0 {%k1}
87+
; AVX512-NEXT: vgf2p8mulb %xmm1, %xmm1, %xmm0 {%k1}
9188
; AVX512-NEXT: retq
9289
%i = icmp slt <16 x i8> %a2, zeroinitializer
9390
%g = call <16 x i8> @llvm.x86.vgf2p8mulb.128(<16 x i8> %a1, <16 x i8> %a1)

0 commit comments

Comments
 (0)