-
Notifications
You must be signed in to change notification settings - Fork 59
Open
Description
Recently we ran into this issue on a couple of programs, when compiling code which uses floating point at -O2 optimization level:
$ xtensa-esp32-elf-gcc -c test.c -mlongcalls -O2 -Wall -Werror -Wextra -Wpedantic -fdump-rtl-all
test.c: In function 'd':
test.c:15:1: error: insn does not satisfy its constraints:
}
^
(insn 74 27 19 4 (set (reg:SF 19 f0 [orig:43 iftmp$0_6 ] [43])
(mem/u/c:SF (symbol_ref/u:SI ("*.LC0") [flags 0x2]) [0 S4 A32])) "test.c":11 47 {movsf_internal}
(nil))
during RTL pass: postreload
dump file: test.c.279r.postreload
test.c:15:1: internal compiler error: in extract_constrain_insn, at recog.c:2210
test.c (as minimal as i could c-reduce it):
extern unsigned char a();
extern float b;
extern unsigned char c, h;
void d(signed char unused)
{
(void) unused;
const unsigned char e = a();
for (unsigned char f = c; f; f++) {
for (unsigned char g = 0; g <= h; g++) {
b = e ? b : 0;
d(f);
}
}
}I'm slowly learning my way through the RTL dumps, hoping to find the cause, but wanted to post just in case there is any obvious issue here.
GCC branch I'm using is https://github.com/espressif/gcc/tree/esp_based_on_8_4_0 (a few patches on top of GCC 8.4).
Metadata
Metadata
Assignees
Labels
No labels