* [Bug rtl-optimization/96998] GCC ICEs in on building AArch64 Linux kernel after basepoints/gcc-11-2903-g6b3034eaba83
2020-09-09 12:50 [Bug rtl-optimization/96998] New: GCC ICEs in on building AArch64 Linux kernel after basepoints/gcc-11-2903-g6b3034eaba83 mkuvyrkov at gcc dot gnu.org
@ 2020-09-09 12:52 ` mkuvyrkov at gcc dot gnu.org
2020-09-09 13:18 ` acoplan at gcc dot gnu.org
` (11 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: mkuvyrkov at gcc dot gnu.org @ 2020-09-09 12:52 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96998
Maxim Kuvyrkov <mkuvyrkov at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |acoplan at gcc dot gnu.org,
| |mkuvyrkov at gcc dot gnu.org
Target| |aarch64-linux-gnu
--- Comment #1 from Maxim Kuvyrkov <mkuvyrkov at gcc dot gnu.org> ---
Alex, would you please look into this?
Let me know if you have problems reproducing the crash and I'll make a smaller
reproducer.
^ permalink raw reply [flat|nested] 14+ messages in thread
* [Bug rtl-optimization/96998] GCC ICEs in on building AArch64 Linux kernel after basepoints/gcc-11-2903-g6b3034eaba83
2020-09-09 12:50 [Bug rtl-optimization/96998] New: GCC ICEs in on building AArch64 Linux kernel after basepoints/gcc-11-2903-g6b3034eaba83 mkuvyrkov at gcc dot gnu.org
2020-09-09 12:52 ` [Bug rtl-optimization/96998] " mkuvyrkov at gcc dot gnu.org
@ 2020-09-09 13:18 ` acoplan at gcc dot gnu.org
2020-09-09 14:27 ` acoplan at gcc dot gnu.org
` (10 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: acoplan at gcc dot gnu.org @ 2020-09-09 13:18 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96998
--- Comment #2 from Alex Coplan <acoplan at gcc dot gnu.org> ---
I'll take a look, thanks.
^ permalink raw reply [flat|nested] 14+ messages in thread
* [Bug rtl-optimization/96998] GCC ICEs in on building AArch64 Linux kernel after basepoints/gcc-11-2903-g6b3034eaba83
2020-09-09 12:50 [Bug rtl-optimization/96998] New: GCC ICEs in on building AArch64 Linux kernel after basepoints/gcc-11-2903-g6b3034eaba83 mkuvyrkov at gcc dot gnu.org
2020-09-09 12:52 ` [Bug rtl-optimization/96998] " mkuvyrkov at gcc dot gnu.org
2020-09-09 13:18 ` acoplan at gcc dot gnu.org
@ 2020-09-09 14:27 ` acoplan at gcc dot gnu.org
2020-09-09 16:04 ` acoplan at gcc dot gnu.org
` (9 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: acoplan at gcc dot gnu.org @ 2020-09-09 14:27 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96998
Alex Coplan <acoplan at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Last reconfirmed| |2020-09-09
Ever confirmed|0 |1
Assignee|unassigned at gcc dot gnu.org |acoplan at gcc dot gnu.org
Status|UNCONFIRMED |ASSIGNED
--- Comment #3 from Alex Coplan <acoplan at gcc dot gnu.org> ---
Confirmed. GCC trunk ICEs on AArch64 when compiling kernel/cgroup/cgroup.c.
Seems to happen when compiling multiple kernel source files.
I'll reduce a testcase and take a look.
^ permalink raw reply [flat|nested] 14+ messages in thread
* [Bug rtl-optimization/96998] GCC ICEs in on building AArch64 Linux kernel after basepoints/gcc-11-2903-g6b3034eaba83
2020-09-09 12:50 [Bug rtl-optimization/96998] New: GCC ICEs in on building AArch64 Linux kernel after basepoints/gcc-11-2903-g6b3034eaba83 mkuvyrkov at gcc dot gnu.org
` (2 preceding siblings ...)
2020-09-09 14:27 ` acoplan at gcc dot gnu.org
@ 2020-09-09 16:04 ` acoplan at gcc dot gnu.org
2020-09-09 17:17 ` acoplan at gcc dot gnu.org
` (8 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: acoplan at gcc dot gnu.org @ 2020-09-09 16:04 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96998
--- Comment #4 from Alex Coplan <acoplan at gcc dot gnu.org> ---
Ok, the following reduced testcase ICEs at -O2:
int h(void);
struct c d;
struct c {
int e[1];
};
void f(void) {
int g;
for (;; g = h()) {
int *i = &d.e[g];
asm("" : "=Q"(*i));
}
}
^ permalink raw reply [flat|nested] 14+ messages in thread
* [Bug rtl-optimization/96998] GCC ICEs in on building AArch64 Linux kernel after basepoints/gcc-11-2903-g6b3034eaba83
2020-09-09 12:50 [Bug rtl-optimization/96998] New: GCC ICEs in on building AArch64 Linux kernel after basepoints/gcc-11-2903-g6b3034eaba83 mkuvyrkov at gcc dot gnu.org
` (3 preceding siblings ...)
2020-09-09 16:04 ` acoplan at gcc dot gnu.org
@ 2020-09-09 17:17 ` acoplan at gcc dot gnu.org
2020-09-10 9:24 ` [Bug target/96998] " acoplan at gcc dot gnu.org
` (7 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: acoplan at gcc dot gnu.org @ 2020-09-09 17:17 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96998
--- Comment #5 from Alex Coplan <acoplan at gcc dot gnu.org> ---
This just looks like a missing pattern which we've started noticing since the
new canonicalisation was introduced.
I imagine reinstating the *add_<optab><mode>_multp2 pattern and rewriting it to
use shifts instead will fix the issue.
I should have a patch to fix this tomorrow.
^ permalink raw reply [flat|nested] 14+ messages in thread
* [Bug target/96998] GCC ICEs in on building AArch64 Linux kernel after basepoints/gcc-11-2903-g6b3034eaba83
2020-09-09 12:50 [Bug rtl-optimization/96998] New: GCC ICEs in on building AArch64 Linux kernel after basepoints/gcc-11-2903-g6b3034eaba83 mkuvyrkov at gcc dot gnu.org
` (4 preceding siblings ...)
2020-09-09 17:17 ` acoplan at gcc dot gnu.org
@ 2020-09-10 9:24 ` acoplan at gcc dot gnu.org
2020-09-10 14:54 ` acoplan at gcc dot gnu.org
` (6 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: acoplan at gcc dot gnu.org @ 2020-09-10 9:24 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96998
--- Comment #6 from Alex Coplan <acoplan at gcc dot gnu.org> ---
I have a patch, just testing it now.
^ permalink raw reply [flat|nested] 14+ messages in thread
* [Bug target/96998] GCC ICEs in on building AArch64 Linux kernel after basepoints/gcc-11-2903-g6b3034eaba83
2020-09-09 12:50 [Bug rtl-optimization/96998] New: GCC ICEs in on building AArch64 Linux kernel after basepoints/gcc-11-2903-g6b3034eaba83 mkuvyrkov at gcc dot gnu.org
` (5 preceding siblings ...)
2020-09-10 9:24 ` [Bug target/96998] " acoplan at gcc dot gnu.org
@ 2020-09-10 14:54 ` acoplan at gcc dot gnu.org
2020-10-05 8:12 ` acoplan at gcc dot gnu.org
` (5 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: acoplan at gcc dot gnu.org @ 2020-09-10 14:54 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96998
--- Comment #7 from Alex Coplan <acoplan at gcc dot gnu.org> ---
Patch up for review:
https://gcc.gnu.org/pipermail/gcc-patches/2020-September/553605.html
^ permalink raw reply [flat|nested] 14+ messages in thread
* [Bug target/96998] GCC ICEs in on building AArch64 Linux kernel after basepoints/gcc-11-2903-g6b3034eaba83
2020-09-09 12:50 [Bug rtl-optimization/96998] New: GCC ICEs in on building AArch64 Linux kernel after basepoints/gcc-11-2903-g6b3034eaba83 mkuvyrkov at gcc dot gnu.org
` (6 preceding siblings ...)
2020-09-10 14:54 ` acoplan at gcc dot gnu.org
@ 2020-10-05 8:12 ` acoplan at gcc dot gnu.org
2020-10-05 8:15 ` acoplan at gcc dot gnu.org
` (4 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: acoplan at gcc dot gnu.org @ 2020-10-05 8:12 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96998
Alex Coplan <acoplan at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |dr.duncan.p.simpson at gmail dot c
| |om
--- Comment #8 from Alex Coplan <acoplan at gcc dot gnu.org> ---
*** Bug 97275 has been marked as a duplicate of this bug. ***
^ permalink raw reply [flat|nested] 14+ messages in thread
* [Bug target/96998] GCC ICEs in on building AArch64 Linux kernel after basepoints/gcc-11-2903-g6b3034eaba83
2020-09-09 12:50 [Bug rtl-optimization/96998] New: GCC ICEs in on building AArch64 Linux kernel after basepoints/gcc-11-2903-g6b3034eaba83 mkuvyrkov at gcc dot gnu.org
` (7 preceding siblings ...)
2020-10-05 8:12 ` acoplan at gcc dot gnu.org
@ 2020-10-05 8:15 ` acoplan at gcc dot gnu.org
2020-10-22 8:14 ` acoplan at gcc dot gnu.org
` (3 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: acoplan at gcc dot gnu.org @ 2020-10-05 8:15 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96998
--- Comment #9 from Alex Coplan <acoplan at gcc dot gnu.org> ---
So the plan is to fix this with a patch to combine. Waiting on a review from
Segher for https://gcc.gnu.org/pipermail/gcc-patches/2020-September/555158.html
^ permalink raw reply [flat|nested] 14+ messages in thread
* [Bug target/96998] GCC ICEs in on building AArch64 Linux kernel after basepoints/gcc-11-2903-g6b3034eaba83
2020-09-09 12:50 [Bug rtl-optimization/96998] New: GCC ICEs in on building AArch64 Linux kernel after basepoints/gcc-11-2903-g6b3034eaba83 mkuvyrkov at gcc dot gnu.org
` (8 preceding siblings ...)
2020-10-05 8:15 ` acoplan at gcc dot gnu.org
@ 2020-10-22 8:14 ` acoplan at gcc dot gnu.org
2020-10-22 8:17 ` acoplan at gcc dot gnu.org
` (2 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: acoplan at gcc dot gnu.org @ 2020-10-22 8:14 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96998
Alex Coplan <acoplan at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |marxin at gcc dot gnu.org
--- Comment #10 from Alex Coplan <acoplan at gcc dot gnu.org> ---
*** Bug 97526 has been marked as a duplicate of this bug. ***
^ permalink raw reply [flat|nested] 14+ messages in thread
* [Bug target/96998] GCC ICEs in on building AArch64 Linux kernel after basepoints/gcc-11-2903-g6b3034eaba83
2020-09-09 12:50 [Bug rtl-optimization/96998] New: GCC ICEs in on building AArch64 Linux kernel after basepoints/gcc-11-2903-g6b3034eaba83 mkuvyrkov at gcc dot gnu.org
` (9 preceding siblings ...)
2020-10-22 8:14 ` acoplan at gcc dot gnu.org
@ 2020-10-22 8:17 ` acoplan at gcc dot gnu.org
2020-10-30 9:22 ` cvs-commit at gcc dot gnu.org
2020-10-30 10:26 ` acoplan at gcc dot gnu.org
12 siblings, 0 replies; 14+ messages in thread
From: acoplan at gcc dot gnu.org @ 2020-10-22 8:17 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96998
--- Comment #11 from Alex Coplan <acoplan at gcc dot gnu.org> ---
The patch series has been restructured to first fix the AArch64 bug, and then
restore code quality with a patch to combine.
The AArch64 patch
(https://gcc.gnu.org/pipermail/gcc-patches/2020-October/556237.html) has been
approved, we're waiting for a review of the 2/2 combine patch.
^ permalink raw reply [flat|nested] 14+ messages in thread
* [Bug target/96998] GCC ICEs in on building AArch64 Linux kernel after basepoints/gcc-11-2903-g6b3034eaba83
2020-09-09 12:50 [Bug rtl-optimization/96998] New: GCC ICEs in on building AArch64 Linux kernel after basepoints/gcc-11-2903-g6b3034eaba83 mkuvyrkov at gcc dot gnu.org
` (10 preceding siblings ...)
2020-10-22 8:17 ` acoplan at gcc dot gnu.org
@ 2020-10-30 9:22 ` cvs-commit at gcc dot gnu.org
2020-10-30 10:26 ` acoplan at gcc dot gnu.org
12 siblings, 0 replies; 14+ messages in thread
From: cvs-commit at gcc dot gnu.org @ 2020-10-30 9:22 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96998
--- Comment #12 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Alex Coplan <acoplan@gcc.gnu.org>:
https://gcc.gnu.org/g:7de23b8c536397117bbea04a722fa1b86564dd7c
commit r11-4563-g7de23b8c536397117bbea04a722fa1b86564dd7c
Author: Alex Coplan <alex.coplan@arm.com>
Date: Fri Oct 30 09:21:31 2020 +0000
aarch64: Fix PR96998 and restore code quality in combine
This change fixes a bug in the AArch64 backend. Currently, we accept an
odd sign_extract representation of addresses, but don't accept that same
odd form of address as an LEA.
This is the cause of PR96998. In the testcase given in the PR, combine
produces:
(insn 9 8 10 3 (set (mem:SI (plus:DI (sign_extract:DI (mult:DI (subreg:DI
(reg/v:SI 92 [ g ]) 0)
(const_int 4 [0x4]))
(const_int 34 [0x22])
(const_int 0 [0]))
(reg/f:DI 96)) [3 *i_5+0 S4 A32])
(asm_operands:SI ("") ("=Q") 0 []
[]
[] test.c:11)) "test.c":11:5 -1
(expr_list:REG_DEAD (reg/v:SI 92 [ g ])
(nil)))
Then LRA reloads the address and we ICE because we fail to recognize the
sign_extract outside the mem:
(insn 33 8 34 3 (set (reg:DI 100)
(sign_extract:DI (ashift:DI (subreg:DI (reg/v:SI 92 [ g ]) 0)
(const_int 2 [0x2]))
(const_int 34 [0x22])
(const_int 0 [0]))) "test.c":11:5 -1
(nil))
The aarch64 changes here remove the support for this sign_extract
representation of addresses, fixing PR96998. Now this by itself would
regress code quality, so this change is paired with an improvement to
combine which prevents an extract rtx from being emitted in this case:
we now write the rtx above as a shift of an extend, which allows the
combination to go ahead.
Prior to this, combine.c:make_extraction() identified where we can emit
an ashift of an extend in place of an extraction, but failed to make the
corresponding canonicalization/simplification when presented with a mult
by a power of two. Such a representation is canonical when representing
a left-shifted address inside a mem.
This change remedies this situation. For rtxes such as:
(mult:DI (subreg:DI (reg:SI r) 0) (const_int 2^n))
where the bottom 32 + n bits are valid (the higher-order bits are
undefined) and make_extraction() is being asked to sign_extract the
lower (valid) bits, after the patch, we rewrite this as:
(mult:DI (sign_extend:DI (reg:SI r)) (const_int 2^n))
instead of using a sign_extract.
gcc/ChangeLog:
PR target/96998
* combine.c (make_extraction): Also handle shifts written as
(mult x 2^n), avoid creating an extract rtx for these.
* config/aarch64/aarch64.c (aarch64_is_extend_from_extract):
Delete.
(aarch64_classify_index): Remove extract-based address handling.
(aarch64_strip_extend): Likewise.
(aarch64_rtx_arith_op_extract_p): Likewise, remove now-unused
parameter.
Update callers...
(aarch64_rtx_costs): ... here.
gcc/testsuite/ChangeLog:
PR target/96998
* gcc.c-torture/compile/pr96998.c: New test.
^ permalink raw reply [flat|nested] 14+ messages in thread
* [Bug target/96998] GCC ICEs in on building AArch64 Linux kernel after basepoints/gcc-11-2903-g6b3034eaba83
2020-09-09 12:50 [Bug rtl-optimization/96998] New: GCC ICEs in on building AArch64 Linux kernel after basepoints/gcc-11-2903-g6b3034eaba83 mkuvyrkov at gcc dot gnu.org
` (11 preceding siblings ...)
2020-10-30 9:22 ` cvs-commit at gcc dot gnu.org
@ 2020-10-30 10:26 ` acoplan at gcc dot gnu.org
12 siblings, 0 replies; 14+ messages in thread
From: acoplan at gcc dot gnu.org @ 2020-10-30 10:26 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96998
Alex Coplan <acoplan at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|ASSIGNED |RESOLVED
Resolution|--- |FIXED
--- Comment #13 from Alex Coplan <acoplan at gcc dot gnu.org> ---
Fixed. After the above commit I can now build a defconfig linux-next on AArch64
with trunk GCC.
^ permalink raw reply [flat|nested] 14+ messages in thread