Skip to content

Commit

Permalink
[X86][EVEX512] Check hasEVEX512 for canExtendTo512DQ (#90390)
Browse files Browse the repository at this point in the history
Fixes #90356

(cherry picked from commit 35b89dd)
  • Loading branch information
phoebewang authored and tstellar committed Apr 30, 2024
1 parent 6350acd commit 58648f3
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 3 deletions.
3 changes: 2 additions & 1 deletion llvm/lib/Target/X86/X86Subtarget.h
Original file line number Diff line number Diff line change
Expand Up @@ -244,7 +244,8 @@ class X86Subtarget final : public X86GenSubtargetInfo {
// TODO: Currently we're always allowing widening on CPUs without VLX,
// because for many cases we don't have a better option.
bool canExtendTo512DQ() const {
return hasAVX512() && (!hasVLX() || getPreferVectorWidth() >= 512);
return hasAVX512() && hasEVEX512() &&
(!hasVLX() || getPreferVectorWidth() >= 512);
}
bool canExtendTo512BW() const {
return hasBWI() && canExtendTo512DQ();
Expand Down
35 changes: 33 additions & 2 deletions llvm/test/CodeGen/X86/avx512bwvl-arith.ll
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512bw,+avx512vl | FileCheck %s
; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512bw,+avx512vl,-evex512 | FileCheck %s
; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512bw,+avx512vl | FileCheck %s --check-prefixes=CHECK,EVEX256
; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512bw,+avx512vl,-evex512 | FileCheck %s --check-prefixes=CHECK,EVEX512

; 256-bit

Expand Down Expand Up @@ -236,3 +236,34 @@ define <8 x i16> @vpmullw128_test(<8 x i16> %i, <8 x i16> %j) {
ret <8 x i16> %x
}

define i16 @PR90356(<16 x i1> %a) {
; EVEX256-LABEL: PR90356:
; EVEX256: # %bb.0:
; EVEX256-NEXT: vpsllw $7, %xmm0, %xmm0
; EVEX256-NEXT: vpmovb2m %xmm0, %k1
; EVEX256-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k1} {z}
; EVEX256-NEXT: movb $63, %al
; EVEX256-NEXT: kmovd %eax, %k1
; EVEX256-NEXT: vpexpandq %zmm0, %zmm0 {%k1} {z}
; EVEX256-NEXT: vptestmd %zmm0, %zmm0, %k0
; EVEX256-NEXT: kmovd %k0, %eax
; EVEX256-NEXT: # kill: def $ax killed $ax killed $eax
; EVEX256-NEXT: vzeroupper
; EVEX256-NEXT: retq
;
; EVEX512-LABEL: PR90356:
; EVEX512: # %bb.0:
; EVEX512-NEXT: vpsllw $7, %xmm0, %xmm0
; EVEX512-NEXT: vpmovb2m %xmm0, %k0
; EVEX512-NEXT: vpmovm2w %k0, %ymm0
; EVEX512-NEXT: vpxor %xmm1, %xmm1, %xmm1
; EVEX512-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0,1,2,3,4,5],ymm1[6,7]
; EVEX512-NEXT: vpmovw2m %ymm0, %k0
; EVEX512-NEXT: kmovd %k0, %eax
; EVEX512-NEXT: # kill: def $ax killed $ax killed $eax
; EVEX512-NEXT: vzeroupper
; EVEX512-NEXT: retq
%1 = shufflevector <16 x i1> %a, <16 x i1> zeroinitializer, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 28, i32 29, i32 30, i32 31>
%2 = bitcast <16 x i1> %1 to i16
ret i16 %2
}

0 comments on commit 58648f3

Please sign in to comment.