Skip to content

Commit 56720a4

Browse files
authored
[X86][StrictFP] Add missing patterns for AVX512 fmin/fmax (#116240)
Fix crash after #109512, see https://godbolt.org/z/M6aP5Ka4j
1 parent e5a62d4 commit 56720a4

File tree

2 files changed

+51
-4
lines changed

2 files changed

+51
-4
lines changed

llvm/lib/Target/X86/X86InstrAVX512.td

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5690,13 +5690,13 @@ defm VDIV : avx512_fp_binop_p<0x5E, "vdiv", any_fdiv, fdiv, HasAVX512,
56905690
SchedWriteFDivSizes>,
56915691
avx512_fp_binop_ph<0x5E, "vdiv", any_fdiv, fdiv, SchedWriteFDivSizes>,
56925692
avx512_fp_binop_p_round<0x5E, "vdiv", X86fdivRnd, SchedWriteFDivSizes>;
5693-
defm VMIN : avx512_fp_binop_p<0x5D, "vmin", X86fmin, X86fmin, HasAVX512,
5693+
defm VMIN : avx512_fp_binop_p<0x5D, "vmin", X86any_fmin, X86fmin, HasAVX512,
56945694
SchedWriteFCmpSizes, 0>,
5695-
avx512_fp_binop_ph<0x5D, "vmin", X86fmin, X86fmin, SchedWriteFCmpSizes, 0>,
5695+
avx512_fp_binop_ph<0x5D, "vmin", X86any_fmin, X86fmin, SchedWriteFCmpSizes, 0>,
56965696
avx512_fp_binop_p_sae<0x5D, "vmin", X86fminSAE, SchedWriteFCmpSizes>;
5697-
defm VMAX : avx512_fp_binop_p<0x5F, "vmax", X86fmax, X86fmax, HasAVX512,
5697+
defm VMAX : avx512_fp_binop_p<0x5F, "vmax", X86any_fmax, X86fmax, HasAVX512,
56985698
SchedWriteFCmpSizes, 0>,
5699-
avx512_fp_binop_ph<0x5F, "vmax", X86fmax, X86fmax, SchedWriteFCmpSizes, 0>,
5699+
avx512_fp_binop_ph<0x5F, "vmax", X86any_fmax, X86fmax, SchedWriteFCmpSizes, 0>,
57005700
avx512_fp_binop_p_sae<0x5F, "vmax", X86fmaxSAE, SchedWriteFCmpSizes>;
57015701
let isCodeGenOnly = 1 in {
57025702
defm VMINC : avx512_fp_binop_p<0x5D, "vmin", X86fminc, X86fminc, HasAVX512,

llvm/test/CodeGen/X86/vec-strict-cmp-128.ll

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6040,6 +6040,53 @@ define <2 x i64> @test_v2f64_uno_s(<2 x i64> %a, <2 x i64> %b, <2 x double> %f1,
60406040
ret <2 x i64> %res
60416041
}
60426042

6043+
define <2 x double> @test_v4f64_ogt2_s(<2 x double> %a, <2 x double> %b) #0 {
6044+
; SSE-32-LABEL: test_v4f64_ogt2_s:
6045+
; SSE-32: # %bb.0:
6046+
; SSE-32-NEXT: maxpd %xmm1, %xmm0
6047+
; SSE-32-NEXT: retl
6048+
;
6049+
; SSE-64-LABEL: test_v4f64_ogt2_s:
6050+
; SSE-64: # %bb.0:
6051+
; SSE-64-NEXT: maxpd %xmm1, %xmm0
6052+
; SSE-64-NEXT: retq
6053+
;
6054+
; AVX-32-LABEL: test_v4f64_ogt2_s:
6055+
; AVX-32: # %bb.0:
6056+
; AVX-32-NEXT: vmaxpd %xmm1, %xmm0, %xmm0
6057+
; AVX-32-NEXT: retl
6058+
;
6059+
; AVX-64-LABEL: test_v4f64_ogt2_s:
6060+
; AVX-64: # %bb.0:
6061+
; AVX-64-NEXT: vmaxpd %xmm1, %xmm0, %xmm0
6062+
; AVX-64-NEXT: retq
6063+
;
6064+
; AVX512-32-LABEL: test_v4f64_ogt2_s:
6065+
; AVX512-32: # %bb.0:
6066+
; AVX512-32-NEXT: vmaxpd %xmm1, %xmm0, %xmm0
6067+
; AVX512-32-NEXT: retl
6068+
;
6069+
; AVX512-64-LABEL: test_v4f64_ogt2_s:
6070+
; AVX512-64: # %bb.0:
6071+
; AVX512-64-NEXT: vmaxpd %xmm1, %xmm0, %xmm0
6072+
; AVX512-64-NEXT: retq
6073+
;
6074+
; AVX512F-32-LABEL: test_v4f64_ogt2_s:
6075+
; AVX512F-32: # %bb.0:
6076+
; AVX512F-32-NEXT: vmaxpd %xmm1, %xmm0, %xmm0
6077+
; AVX512F-32-NEXT: retl
6078+
;
6079+
; AVX512F-64-LABEL: test_v4f64_ogt2_s:
6080+
; AVX512F-64: # %bb.0:
6081+
; AVX512F-64-NEXT: vmaxpd %xmm1, %xmm0, %xmm0
6082+
; AVX512F-64-NEXT: retq
6083+
%cond = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(
6084+
<2 x double> %a, <2 x double> %b, metadata !"ogt",
6085+
metadata !"fpexcept.strict") #0
6086+
%res = select <2 x i1> %cond, <2 x double> %a, <2 x double> %b
6087+
ret <2 x double> %res
6088+
}
6089+
60436090
attributes #0 = { strictfp nounwind }
60446091

60456092
declare <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float>, <4 x float>, metadata, metadata)

0 commit comments

Comments
 (0)