[Bug target/66930] [5 Regression]: gengtype.c is miscompiled during stage2
kkojima at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Thu Jul 23 05:21:00 GMT 2015
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66930
--- Comment #6 from Kazumoto Kojima <kkojima at gcc dot gnu.org> ---
Created attachment 36040
--> https://gcc.gnu.org/bugzilla/attachment.cgi?id=36040&action=edit
.i file for gengtype.c
I've confirmed a miscompile for gengtype.c with -O1 on my 5/6
compilers. With them,
if (union_p)
{
oprintf (d->of, "%*sbreak;\n", d->indent, "");
d->indent -= 2;
}
lines in gengtype.c:walk_type function are compiled like as:
bf .L2253
mov.l .L2593,r7
mov.l @(36,r12),r6
mov.l .L2580,r5
mov.l .L2595,r1
jsr @r1
...
i.e. the instruction testing union_p variable is removed.
The resulted gengtype produces files without "break" in many
cases. Although it's the other way around with the reported
full of "break" symptom, I think the both are the same issue.
The deletion has happened in sh_split_movrt_negc_to_movt_xor
which is called by movrt_negc insn_and_split. It seems that
that splitting is applied for the case
tst reg,reg
mov #-1,reg1
negc reg1,reg1
...
call ...
...
tst reg,reg
and the last tst was removed. Oleg, could you take a look into
this?
BTW, I guess that
> * Build with -O1 on sh4 (try to work around PR target/66358).
will open a can of worms :-)
More information about the Gcc-bugs
mailing list