* [PATCH] i386: Fix up z operand modifier diagnostics on inline-asm [PR109458]
@ 2023-04-12 14:28 Jakub Jelinek
2023-04-12 14:35 ` Uros Bizjak
0 siblings, 1 reply; 2+ messages in thread
From: Jakub Jelinek @ 2023-04-12 14:28 UTC (permalink / raw)
To: Uros Bizjak; +Cc: gcc-patches
Hi!
On the following testcase, we emit weird diagnostics.
User used the z modifier, but diagnostics talks about Z instead.
This is because z is implemented by doing some stuff and then falling
through into the Z case.
The following patch adjusts the Z diagnostics, such that it prints whatever
modifier user actually uses in places which could happen with either
modifier.
Furthermore, in case of the non-integer operand used with operand code %<z%>
warning the warning location was incorrect (and of function), so I've used
warning_for_asm to get it a proper location in case it is a user inline-asm.
Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?
2023-04-12 Jakub Jelinek <jakub@redhat.com>
PR target/109458
* config/i386/i386.cc: Include rtl-error.h.
(ix86_print_operand): For z modifier warning, use warning_for_asm
if this_is_asm_operands. For Z modifier errors, use %c and code
instead of hardcoded Z.
* gcc.target/i386/pr109458.c: New test.
--- gcc/config/i386/i386.cc.jj 2023-03-31 09:26:47.970219929 +0200
+++ gcc/config/i386/i386.cc 2023-04-10 10:21:39.506793959 +0200
@@ -96,6 +96,7 @@ along with GCC; see the file COPYING3.
#include "i386-expand.h"
#include "i386-features.h"
#include "function-abi.h"
+#include "rtl-error.h"
/* This file should be included last. */
#include "target-def.h"
@@ -13218,7 +13219,13 @@ ix86_print_operand (FILE *file, rtx x, i
}
if (GET_MODE_CLASS (GET_MODE (x)) == MODE_FLOAT)
- warning (0, "non-integer operand used with operand code %<z%>");
+ {
+ if (this_is_asm_operands)
+ warning_for_asm (this_is_asm_operands,
+ "non-integer operand used with operand code %<z%>");
+ else
+ warning (0, "non-integer operand used with operand code %<z%>");
+ }
/* FALLTHRU */
case 'Z':
@@ -13281,11 +13288,12 @@ ix86_print_operand (FILE *file, rtx x, i
else
{
output_operand_lossage ("invalid operand type used with "
- "operand code 'Z'");
+ "operand code '%c'", code);
return;
}
- output_operand_lossage ("invalid operand size for operand code 'Z'");
+ output_operand_lossage ("invalid operand size for operand code '%c'",
+ code);
return;
case 'd':
--- gcc/testsuite/gcc.target/i386/pr109458.c.jj 2023-04-10 10:30:44.950822263 +0200
+++ gcc/testsuite/gcc.target/i386/pr109458.c 2023-04-10 10:30:22.257153906 +0200
@@ -0,0 +1,13 @@
+/* PR target/109458 */
+/* { dg-do compile } */
+/* { dg-options "-msse2" } */
+
+void
+foo (_Float16 x)
+{
+ asm volatile ("# %z0" : : "i" (42)); /* { dg-error "invalid 'asm': invalid operand type used with operand code 'z'" } */
+ asm volatile ("# %Z0" : : "i" (42)); /* { dg-error "invalid 'asm': invalid operand type used with operand code 'Z'" } */
+ asm volatile ("# %z0" : : "x" (x)); /* { dg-error "invalid 'asm': invalid operand size for operand code 'z'" } */
+ /* { dg-warning "non-integer operand used with operand code 'z'" "" { target *-*-* } .-1 } */
+ asm volatile ("# %Z0" : : "x" (x)); /* { dg-error "invalid 'asm': invalid operand size for operand code 'Z'" } */
+}
Jakub
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [PATCH] i386: Fix up z operand modifier diagnostics on inline-asm [PR109458]
2023-04-12 14:28 [PATCH] i386: Fix up z operand modifier diagnostics on inline-asm [PR109458] Jakub Jelinek
@ 2023-04-12 14:35 ` Uros Bizjak
0 siblings, 0 replies; 2+ messages in thread
From: Uros Bizjak @ 2023-04-12 14:35 UTC (permalink / raw)
To: Jakub Jelinek; +Cc: gcc-patches
On Wed, Apr 12, 2023 at 4:28 PM Jakub Jelinek <jakub@redhat.com> wrote:
>
> Hi!
>
> On the following testcase, we emit weird diagnostics.
> User used the z modifier, but diagnostics talks about Z instead.
> This is because z is implemented by doing some stuff and then falling
> through into the Z case.
>
> The following patch adjusts the Z diagnostics, such that it prints whatever
> modifier user actually uses in places which could happen with either
> modifier.
>
> Furthermore, in case of the non-integer operand used with operand code %<z%>
> warning the warning location was incorrect (and of function), so I've used
> warning_for_asm to get it a proper location in case it is a user inline-asm.
>
> Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?
>
> 2023-04-12 Jakub Jelinek <jakub@redhat.com>
>
> PR target/109458
> * config/i386/i386.cc: Include rtl-error.h.
> (ix86_print_operand): For z modifier warning, use warning_for_asm
> if this_is_asm_operands. For Z modifier errors, use %c and code
> instead of hardcoded Z.
>
> * gcc.target/i386/pr109458.c: New test.
OK.
Thanks,
Uros.
>
> --- gcc/config/i386/i386.cc.jj 2023-03-31 09:26:47.970219929 +0200
> +++ gcc/config/i386/i386.cc 2023-04-10 10:21:39.506793959 +0200
> @@ -96,6 +96,7 @@ along with GCC; see the file COPYING3.
> #include "i386-expand.h"
> #include "i386-features.h"
> #include "function-abi.h"
> +#include "rtl-error.h"
>
> /* This file should be included last. */
> #include "target-def.h"
> @@ -13218,7 +13219,13 @@ ix86_print_operand (FILE *file, rtx x, i
> }
>
> if (GET_MODE_CLASS (GET_MODE (x)) == MODE_FLOAT)
> - warning (0, "non-integer operand used with operand code %<z%>");
> + {
> + if (this_is_asm_operands)
> + warning_for_asm (this_is_asm_operands,
> + "non-integer operand used with operand code %<z%>");
> + else
> + warning (0, "non-integer operand used with operand code %<z%>");
> + }
> /* FALLTHRU */
>
> case 'Z':
> @@ -13281,11 +13288,12 @@ ix86_print_operand (FILE *file, rtx x, i
> else
> {
> output_operand_lossage ("invalid operand type used with "
> - "operand code 'Z'");
> + "operand code '%c'", code);
> return;
> }
>
> - output_operand_lossage ("invalid operand size for operand code 'Z'");
> + output_operand_lossage ("invalid operand size for operand code '%c'",
> + code);
> return;
>
> case 'd':
> --- gcc/testsuite/gcc.target/i386/pr109458.c.jj 2023-04-10 10:30:44.950822263 +0200
> +++ gcc/testsuite/gcc.target/i386/pr109458.c 2023-04-10 10:30:22.257153906 +0200
> @@ -0,0 +1,13 @@
> +/* PR target/109458 */
> +/* { dg-do compile } */
> +/* { dg-options "-msse2" } */
> +
> +void
> +foo (_Float16 x)
> +{
> + asm volatile ("# %z0" : : "i" (42)); /* { dg-error "invalid 'asm': invalid operand type used with operand code 'z'" } */
> + asm volatile ("# %Z0" : : "i" (42)); /* { dg-error "invalid 'asm': invalid operand type used with operand code 'Z'" } */
> + asm volatile ("# %z0" : : "x" (x)); /* { dg-error "invalid 'asm': invalid operand size for operand code 'z'" } */
> + /* { dg-warning "non-integer operand used with operand code 'z'" "" { target *-*-* } .-1 } */
> + asm volatile ("# %Z0" : : "x" (x)); /* { dg-error "invalid 'asm': invalid operand size for operand code 'Z'" } */
> +}
>
> Jakub
>
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2023-04-12 14:36 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-04-12 14:28 [PATCH] i386: Fix up z operand modifier diagnostics on inline-asm [PR109458] Jakub Jelinek
2023-04-12 14:35 ` Uros Bizjak
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).