Skip to content

Commit

Permalink
[X86][EVEX512] Check hasEVEX512 for canExtendTo512DQ (llvm#90390)
Browse files Browse the repository at this point in the history
  • Loading branch information
phoebewang authored Apr 29, 2024
1 parent 145176d commit 35b89dd
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 35b89dd

Please sign in to comment.