On Mon, Sep 30, 2024 at 3:33 PM Jan Beulich <[email protected]> wrote:
>
> Commit a79d13a01f8c ("i386: Fix aes/vaes patterns [PR114576]") correctly
> said "..., but we need to emit {evex} prefix in the assembly if AES ISA
> is not enabled". Yet it did so only for the TARGET_AES insns. Going from
> the alternative chosen in the TARGET_VAES insns isn't quite right: If
> AES is (also) enabled, EVEX encoding would needlessly be forced.
>
> gcc/
>
> * config/i386/sse.md (vaesdec_<mode>, vaesdeclast_<mode>,
> vaesenc_<mode>, vaesenclast_<mode>): Replace which_alternative
> check by TARGET_AES one.
> ---
> As an aside - {evex} (and other) pseudo-prefixes would better be avoided
> anyway whenever possible, as those are getting in the way of code
> putting in place macro overrides for certain insns: gas 2.43 rejects
> such bogus placement of pseudo-prefixes.
>
> Is it, btw, correct that none of these insns have a "prefix" attribute?
There's some automatic in i386.md to determine the prefix, rough, not
very accurate.
688;; Prefix used: original, VEX or maybe VEX.
689(define_attr "prefix" "orig,vex,maybe_vex,evex,maybe_evex"
690 (cond [(eq_attr "mode" "OI,V8SF,V4DF")
691 (const_string "vex")
692 (eq_attr "mode" "XI,V16SF,V8DF")
693 (const_string "evex")
694 (eq_attr "type" "ssemuladd")
695 (if_then_else (eq_attr "isa" "fma4")
696 (const_string "vex")
697 (const_string "maybe_evex"))
698 (eq_attr "type" "sse4arg")
699 (const_string "vex")
700 ]
701 (const_string "orig")))
702
> ---
> v2: Adjust (shrink) description.
Ok for the patch.
>
> --- a/gcc/config/i386/sse.md
> +++ b/gcc/config/i386/sse.md
> @@ -30802,7 +30802,7 @@
> UNSPEC_VAESDEC))]
> "TARGET_VAES"
> {
> - if (which_alternative == 0 && <MODE>mode == V16QImode)
> + if (!TARGET_AES && <MODE>mode == V16QImode)
> return "%{evex%} vaesdec\t{%2, %1, %0|%0, %1, %2}";
> else
> return "vaesdec\t{%2, %1, %0|%0, %1, %2}";
> @@ -30816,7 +30816,7 @@
> UNSPEC_VAESDECLAST))]
> "TARGET_VAES"
> {
> - if (which_alternative == 0 && <MODE>mode == V16QImode)
> + if (!TARGET_AES && <MODE>mode == V16QImode)
> return "%{evex%} vaesdeclast\t{%2, %1, %0|%0, %1, %2}";
> else
> return "vaesdeclast\t{%2, %1, %0|%0, %1, %2}";
> @@ -30830,7 +30830,7 @@
> UNSPEC_VAESENC))]
> "TARGET_VAES"
> {
> - if (which_alternative == 0 && <MODE>mode == V16QImode)
> + if (!TARGET_AES && <MODE>mode == V16QImode)
> return "%{evex%} vaesenc\t{%2, %1, %0|%0, %1, %2}";
> else
> return "vaesenc\t{%2, %1, %0|%0, %1, %2}";
> @@ -30844,7 +30844,7 @@
> UNSPEC_VAESENCLAST))]
> "TARGET_VAES"
> {
> - if (which_alternative == 0 && <MODE>mode == V16QImode)
> + if (!TARGET_AES && <MODE>mode == V16QImode)
> return "%{evex%} vaesenclast\t{%2, %1, %0|%0, %1, %2}";
> else
> return "vaesenclast\t{%2, %1, %0|%0, %1, %2}";
--
BR,
Hongtao