On Mon, Sep 30, 2024 at 3:33 PM Jan Beulich <jbeul...@suse.com> 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

Reply via email to