[Bug rtl-optimization/63616] New: PRE failure
ubizjak at gmail dot com
gcc-bugzilla@gcc.gnu.org
Wed Oct 22 12:55:00 GMT 2014
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63616
Bug ID: 63616
Summary: PRE failure
Product: gcc
Version: 4.9.2
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: rtl-optimization
Assignee: unassigned at gcc dot gnu.org
Reporter: ubizjak at gmail dot com
Target: alpha-linux-gnu
Currently text/template/parse testcase from libgo fails on alpha-linux-gnu due
to failure of PRE pass.
Before PRE pass, we have:
409: r229:DI=[FP:DI+0x60]
410: pc={(r229:DI==0)?L437:pc}
REG_DEAD r229:DI
REG_BR_PROB 1500
...
427: L427: [***] <--- jump target
428: NOTE_INSN_BASIC_BLOCK 33
430: r236:SI=[r70:DI+0x10] <--- load from r70+0x10
431: r235:QI#0=zero_extract(r236:SI#0,0x8,0)
REG_DEAD r236:SI
432: r95:DI=zero_extend(r235:QI)
REG_DEAD r235:QI
433: pc={(r95:DI!=0)?L458:pc}
REG_DEAD r95:DI
REG_BR_PROB 5000
437: L437:
438: NOTE_INSN_BASIC_BLOCK 34
439: r237:QI=0x1
440: r238:SI=[r70:DI+0x10] <--- load from r70+0x10
441: r238:SI#0=r238:SI#0&0xffffffffffffff00
443: r239:SI#0=r238:SI#0|0x1
REG_DEAD r238:SI
444: [r70:DI+0x10]=r239:SI <--- store to r70+0x10
REG_DEAD r239:SI
445: [r70:DI+0x18]=r94:DI
446: pc={(r94:DI!=0)?L427:pc} jump back ---> [***]
REG_DEAD r94:DI
REG_BR_PROB 5000
...
PRE pass eliminates load to:
...
409: r229:DI=[FP:DI+0x60]
410: pc={(r229:DI==0)?L437:pc}
REG_DEAD r229:DI
REG_BR_PROB 1500
708: NOTE_INSN_BASIC_BLOCK 30
699: r307:SI=[r70:DI+0x10] <--- load to temp from r70+0x10
...
427: L427: [***] <--- jump target
428: NOTE_INSN_BASIC_BLOCK 32
698: r236:SI=r307:SI <--- move from temp
REG_EQUAL [r70:DI+0x10]
431: r235:QI#0=zero_extract(r236:SI#0,0x8,0)
REG_DEAD r236:SI
432: r95:DI=zero_extend(r235:QI)
REG_DEAD r235:QI
433: pc={(r95:DI!=0)?L458:pc}
REG_DEAD r95:DI
REG_BR_PROB 5000
437: L437:
438: NOTE_INSN_BASIC_BLOCK 33
439: r237:QI=0x1
440: r307:SI=[r70:DI+0x10] <--- load to temp from r70+0x10
707: r238:SI=r307:SI <--- move from temp
441: r238:SI#0=r238:SI#0&0xffffffffffffff00
443: r239:SI#0=r238:SI#0|0x1
REG_DEAD r238:SI
444: [r70:DI+0x10]=r239:SI <--- store to r70+0x10
REG_DEAD r239:SI
445: [r70:DI+0x18]=r94:DI
446: pc={(r94:DI!=0)?L427:pc} jump back ---> [***]
REG_DEAD r94:DI
REG_BR_PROB 5000
...
As shown above, PRE inserted BB 30, but when progam jumps back, the value is
moved from temporary, not from the memory. It looks that when a new BB is
inserted, the compiler forgot to update the jumpback label.
I will attach complete cprop1 and pre dumps. I didn't find any kind of
"preprocessed" go file with -fsave-temps to attach.
More information about the Gcc-bugs
mailing list