Re: [PATCH] Fix target/100106 ICE in gen_movdi

2021-04-22 Thread Richard Biener
On Thu, 22 Apr 2021, Bernd Edlinger wrote:

> Aehm,
> 
> forgot to mention,
> 
> tested on arm-none-eabi (arm-sim target)
> is it OK for trunk?

OK next week (when RC2 looks good).

Thanks,
Richard.

> 
> Thanks
> Bernd.
> 
> On 4/22/21 8:37 AM, Bernd Edlinger wrote:
> > As the test case shows, the outer mode may have a higher alignment
> > requirement than the inner mode here.
> > 
> > 2021-04-22  Bernd Edlinger  
> > 
> > PR target/100106
> > * gimplify-rtx.c (simplify_context::simplify_subreg): Check the
> > memory alignment for the outer mode.
> > 
> > * gcc.c-torture/compile/pr100106.c: New testcase.
> > ---
> >  gcc/simplify-rtx.c |  1 +
> >  gcc/testsuite/gcc.c-torture/compile/pr100106.c | 11 +++
> >  2 files changed, 12 insertions(+)
> >  create mode 100644 gcc/testsuite/gcc.c-torture/compile/pr100106.c
> > 
> > diff --git a/gcc/simplify-rtx.c b/gcc/simplify-rtx.c
> > index d13c390..ad3b7b2 100644
> > --- a/gcc/simplify-rtx.c
> > +++ b/gcc/simplify-rtx.c
> > @@ -7217,6 +7217,7 @@ simplify_context::simplify_subreg (machine_mode 
> > outermode, rtx op,
> >   have instruction to move the whole thing.  */
> >&& (! MEM_VOLATILE_P (op)
> >   || ! have_insn_for (SET, innermode))
> > +  && !(STRICT_ALIGNMENT && MEM_ALIGN (op) < GET_MODE_ALIGNMENT 
> > (outermode))
> >&& known_le (outersize, innersize))
> >  return adjust_address_nv (op, outermode, byte);
> >  
> > diff --git a/gcc/testsuite/gcc.c-torture/compile/pr100106.c 
> > b/gcc/testsuite/gcc.c-torture/compile/pr100106.c
> > new file mode 100644
> > index 000..7f98b4f
> > --- /dev/null
> > +++ b/gcc/testsuite/gcc.c-torture/compile/pr100106.c
> > @@ -0,0 +1,11 @@
> > +union a {
> > +  float _Complex b;
> > +  long long c;
> > +};
> > +
> > +void g(union a);
> > +
> > +void e() {
> > +  union a f = {1.0f};
> > +  g(f);
> > +}
> > 
> 

-- 
Richard Biener 
SUSE Software Solutions Germany GmbH, Maxfeldstrasse 5, 90409 Nuernberg,
Germany; GF: Felix Imendörffer; HRB 36809 (AG Nuernberg)


Re: [PATCH] Fix target/100106 ICE in gen_movdi

2021-04-22 Thread Bernd Edlinger
Aehm,

forgot to mention,

tested on arm-none-eabi (arm-sim target)
is it OK for trunk?


Thanks
Bernd.

On 4/22/21 8:37 AM, Bernd Edlinger wrote:
> As the test case shows, the outer mode may have a higher alignment
> requirement than the inner mode here.
> 
> 2021-04-22  Bernd Edlinger  
> 
>   PR target/100106
>   * gimplify-rtx.c (simplify_context::simplify_subreg): Check the
>   memory alignment for the outer mode.
> 
>   * gcc.c-torture/compile/pr100106.c: New testcase.
> ---
>  gcc/simplify-rtx.c |  1 +
>  gcc/testsuite/gcc.c-torture/compile/pr100106.c | 11 +++
>  2 files changed, 12 insertions(+)
>  create mode 100644 gcc/testsuite/gcc.c-torture/compile/pr100106.c
> 
> diff --git a/gcc/simplify-rtx.c b/gcc/simplify-rtx.c
> index d13c390..ad3b7b2 100644
> --- a/gcc/simplify-rtx.c
> +++ b/gcc/simplify-rtx.c
> @@ -7217,6 +7217,7 @@ simplify_context::simplify_subreg (machine_mode 
> outermode, rtx op,
>   have instruction to move the whole thing.  */
>&& (! MEM_VOLATILE_P (op)
> || ! have_insn_for (SET, innermode))
> +  && !(STRICT_ALIGNMENT && MEM_ALIGN (op) < GET_MODE_ALIGNMENT 
> (outermode))
>&& known_le (outersize, innersize))
>  return adjust_address_nv (op, outermode, byte);
>  
> diff --git a/gcc/testsuite/gcc.c-torture/compile/pr100106.c 
> b/gcc/testsuite/gcc.c-torture/compile/pr100106.c
> new file mode 100644
> index 000..7f98b4f
> --- /dev/null
> +++ b/gcc/testsuite/gcc.c-torture/compile/pr100106.c
> @@ -0,0 +1,11 @@
> +union a {
> +  float _Complex b;
> +  long long c;
> +};
> +
> +void g(union a);
> +
> +void e() {
> +  union a f = {1.0f};
> +  g(f);
> +}
> 


[PATCH] Fix target/100106 ICE in gen_movdi

2021-04-22 Thread Bernd Edlinger
As the test case shows, the outer mode may have a higher alignment
requirement than the inner mode here.

2021-04-22  Bernd Edlinger  

PR target/100106
* gimplify-rtx.c (simplify_context::simplify_subreg): Check the
memory alignment for the outer mode.

* gcc.c-torture/compile/pr100106.c: New testcase.
---
 gcc/simplify-rtx.c |  1 +
 gcc/testsuite/gcc.c-torture/compile/pr100106.c | 11 +++
 2 files changed, 12 insertions(+)
 create mode 100644 gcc/testsuite/gcc.c-torture/compile/pr100106.c

diff --git a/gcc/simplify-rtx.c b/gcc/simplify-rtx.c
index d13c390..ad3b7b2 100644
--- a/gcc/simplify-rtx.c
+++ b/gcc/simplify-rtx.c
@@ -7217,6 +7217,7 @@ simplify_context::simplify_subreg (machine_mode 
outermode, rtx op,
  have instruction to move the whole thing.  */
   && (! MEM_VOLATILE_P (op)
  || ! have_insn_for (SET, innermode))
+  && !(STRICT_ALIGNMENT && MEM_ALIGN (op) < GET_MODE_ALIGNMENT (outermode))
   && known_le (outersize, innersize))
 return adjust_address_nv (op, outermode, byte);
 
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr100106.c 
b/gcc/testsuite/gcc.c-torture/compile/pr100106.c
new file mode 100644
index 000..7f98b4f
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/pr100106.c
@@ -0,0 +1,11 @@
+union a {
+  float _Complex b;
+  long long c;
+};
+
+void g(union a);
+
+void e() {
+  union a f = {1.0f};
+  g(f);
+}
-- 
1.9.1