Guard 2 peephole optimizations which should only work on the currently-last instruction by a check if it's actually really at the end...

This commit is contained in:
Wolfgang Bumiller 2013-01-07 00:22:54 +01:00
parent f4d1ef4740
commit 99249c8fa3
2 changed files with 3 additions and 3 deletions

View file

@ -9,7 +9,7 @@ CYGWIN = $(findstring CYGWIN, $(UNAME))
MINGW = $(findstring MINGW32, $(UNAME))
CC ?= clang
CFLAGS += -Wall -Wextra -I. -fno-strict-aliasing -fsigned-char -O2
CFLAGS += -Wall -Wextra -I. -fno-strict-aliasing -fsigned-char
CFLAGS += -DGMQCC_GITINFO="`git describe`"
#turn on tons of warnings if clang is present
# but also turn off the STUPID ONES

4
ir.c
View file

@ -2884,7 +2884,7 @@ tailcall:
if (onfalse->generated) {
/* fixup the jump address */
code_statements[stidx].o2.s1 = (onfalse->code_start) - (stidx);
if (code_statements[stidx].o2.s1 == 1) {
if (stidx+2 == vec_size(code_statements) && code_statements[stidx].o2.s1 == 1) {
code_statements[stidx] = code_statements[stidx+1];
if (code_statements[stidx].o1.s1 < 0)
code_statements[stidx].o1.s1++;
@ -2909,7 +2909,7 @@ tailcall:
code_push_statement(&stmt, instr->context.line);
return true;
}
else if (code_statements[stidx].o2.s1 == 1) {
else if (stidx+2 == vec_size(code_statements) && code_statements[stidx].o2.s1 == 1) {
code_statements[stidx] = code_statements[stidx+1];
if (code_statements[stidx].o1.s1 < 0)
code_statements[stidx].o1.s1++;