Message ID | AM8PR10MB4708482C3AC40FFF984113C5E4469@AM8PR10MB4708.EURPRD10.PROD.OUTLOOK.COM |
---|---|
State | New |
Headers | show |
Series | Fix target/100106 ICE in gen_movdi | expand |
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 <bernd.edlinger@hotmail.de> > > 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 0000000..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); > +} >
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 <bernd.edlinger@hotmail.de> > > > > 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 0000000..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); > > +} > > >
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 0000000..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); +}