[Bug rtl-optimization/79131] New: [7 Regression] ICE: in extract_constrain_insn, at recog.c:2213, big-endian ARM
arnd at linaro dot org
gcc-bugzilla@gcc.gnu.org
Wed Jan 18 14:28:00 GMT 2017
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79131
Bug ID: 79131
Summary: [7 Regression] ICE: in extract_constrain_insn, at
recog.c:2213, big-endian ARM
Product: gcc
Version: 7.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: rtl-optimization
Assignee: unassigned at gcc dot gnu.org
Reporter: arnd at linaro dot org
Target Milestone: ---
A variant of pr79058, which is already fixed by r244535, but a couple remain,
and also bisect to r243578:
$ cat /home/arnd/creduce/0x6F389A53/sufile-0x6F389A53.i
long long a;
enum { NILFS_SEGMENT_USAGE_ACTIVE, NILFS_SEGMENT_USAGE_DIRTY } b;
void nilfs_sufile_mod_counter(long long p1) {
long c = p1;
unsigned d = __builtin_bswap64(a);
a = __builtin_bswap64(d + c);
}
void nilfs_sufile_do_free() {
int e, f;
e = __builtin_bswap32(b) & 1 << NILFS_SEGMENT_USAGE_DIRTY;
f = e;
nilfs_sufile_mod_counter(f ? -1 : 0);
}
$ /home/arnd/cross-gcc/bin/arm-linux-gnueabi-gcc-7.0.0 -c -Wall -O2
-mbig-endian /home/arnd/creduce/0x6F389A53/sufile-0x6F389A53.i
/home/arnd/creduce/0x6F389A53/sufile-0x6F389A53.i: In function
'nilfs_sufile_do_free':
/home/arnd/creduce/0x6F389A53/sufile-0x6F389A53.i:13:1: error: insn does not
satisfy its constraints:
}
^
(insn 31 28 54 2 (set (reg:DI 0 r0 [141])
(and:DI (reg:DI 1 r1 [orig:139+-4 ] [139])
(const_int 1 [0x1])))
"/home/arnd/creduce/0x6F389A53/sufile-0x6F389A53.i":12 79 {*anddi3_insn}
(nil))
/home/arnd/creduce/0x6F389A53/sufile-0x6F389A53.i:13:1: internal compiler
error: in extract_constrain_insn, at recog.c:2213
0x98ef23 _fatal_insn(char const*, rtx_def const*, char const*, int, char
const*)
/home/arnd/git/gcc/gcc/rtl-error.c:108
0x98ef4f _fatal_insn_not_found(rtx_def const*, char const*, int, char const*)
/home/arnd/git/gcc/gcc/rtl-error.c:119
0x96361d extract_constrain_insn(rtx_insn*)
/home/arnd/git/gcc/gcc/recog.c:2213
0x940a3c reload_cse_simplify_operands
/home/arnd/git/gcc/gcc/postreload.c:391
0x943845 reload_cse_simplify
/home/arnd/git/gcc/gcc/postreload.c:179
0x943845 reload_cse_regs_1
/home/arnd/git/gcc/gcc/postreload.c:218
0x943913 reload_cse_regs
/home/arnd/git/gcc/gcc/postreload.c:64
0x943913 execute
/home/arnd/git/gcc/gcc/postreload.c:2342
For completeness, here are the three other reduced files that have the same
symptom:
$ cat 0x2F25F020/sufile-0x2F25F020.i
struct nilfs_segment_usage {
int su_flags;
} a;
enum { NILFS_SEGMENT_USAGE_ACTIVE, NILFS_SEGMENT_USAGE_DIRTY } fn1();
int b;
void fn2(int *, long long);
void fn3() {
int c, d;
struct nilfs_segment_usage e = a;
fn1();
c = e.su_flags & 1 << NILFS_SEGMENT_USAGE_DIRTY;
d = c;
fn2(&b, d ? -1 : 0);
}
$ cat 0xB0981CD0/sufile-0xB0981CD0.i
long a;
struct {
int su_flags;
} * b;
struct nilfs_segment_usage *e;
void fn1();
enum { NILFS_SEGMENT_USAGE_ACTIVE, NILFS_SEGMENT_USAGE_DIRTY } fn2() {
return b->su_flags & 1 << NILFS_SEGMENT_USAGE_DIRTY;
}
void fn3(long long p1) {
fn1();
long c = p1;
unsigned d = a;
a = d + c;
}
void fn4() {
void *f;
int g;
f = fn1;
e = f;
g = fn2();
fn3(g ? -1 : 0);
}
$ cat 0xDD0D5D68/sufile-0xDD0D5D68.i
long a;
struct nilfs_segment_usage {
int su_flags;
};
void *b;
enum {
NILFS_SEGMENT_USAGE_ACTIVE,
NILFS_SEGMENT_USAGE_DIRTY
} fn1(struct nilfs_segment_usage *p1) {
return p1->su_flags & 1 << NILFS_SEGMENT_USAGE_DIRTY;
}
struct nilfs_segment_usage *fn2();
void fn3(long long p1) {
b = 0;
long c = p1;
unsigned d = a;
a = d + c;
}
void fn4() {
struct nilfs_segment_usage *e;
int f;
e = fn2();
f = fn1(e);
fn3(f ? -1 : 0);
}
More information about the Gcc-bugs
mailing list