[Bug rtl-optimization/63483] Scheduler performs Invalid move of aliased memory reference
ubizjak at gmail dot com
gcc-bugzilla@gcc.gnu.org
Wed Oct 8 08:44:00 GMT 2014
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63483
--- Comment #3 from Uroš Bizjak <ubizjak at gmail dot com> ---
The patched compiler creates prevents scheduler to move "unchanging" reference
over possibly aliasing memory:
7: r74:QI=0x1
5: r73:DI=`a'
14: r79:DI=`b'
6: r72:DI=[r73:DI]
REG_DEAD r73:DI
9: r75:DI=r72:DI+0x1
8: r76:DI=[r72:DI+0x1&0xfffffffffffffff8]
11: r77:DI=zero_extend(r74:QI)<<r75:DI<<0x3
REG_DEAD r75:DI
REG_EQUAL 0x1<<r75:DI<<0x3
10: r76:DI=!0xff<<r75:DI<<0x3&r76:DI
12: r77:DI=r77:DI|r76:DI
REG_DEAD r76:DI
13: [r72:DI+0x1&0xfffffffffffffff8]=r77:DI
REG_DEAD r77:DI
REG_DEAD r72:DI
15: r78:DI=[r79:DI]
REG_DEAD r79:DI
18: r81:DI=r78:DI+0x2
17: r82:DI=[r78:DI+0x2&0xfffffffffffffff8]
20: r83:DI=zero_extend(r74:QI)<<r81:DI<<0x3
REG_DEAD r81:DI
REG_DEAD r74:QI
REG_EQUAL 0x1<<r81:DI<<0x3
19: r82:DI=!0xff<<r81:DI<<0x3&r82:DI
21: r83:DI=r83:DI|r82:DI
REG_DEAD r82:DI
22: [r78:DI+0x2&0xfffffffffffffff8]=r83:DI
REG_DEAD r83:DI
REG_DEAD r78:DI
25: NOTE_INSN_DELETED
which results in:
$foo..ng:
.prologue 1
lda $1,1($31) # 7 *movqi/2 [length = 4]
lda $2,a # 5 *movdi/7 [length = 4]
ldq $2,0($2) # 6 *movdi/8 [length = 4]
bis $31,$31,$31 # 34 nop [length = 4]
lda $5,1($2) # 9 *adddi_internal/2 [length = 4]
ldq_u $4,1($2) # 8 *movdi/8 [length = 4]
insbl $1,$5,$3 # 11 insbl [length = 4]
mskbl $4,$5,$4 # 10 mskxl [length = 4]
bis $3,$4,$3 # 12 iordi3/1 [length = 4]
stq_u $3,1($2) # 13 *movdi/9 [length = 4]
lda $2,b # 26 *movdi/7 [length = 4]
ldq $2,0($2) # 15 *movdi/8 [length = 4]
lda $4,2($2) # 18 *adddi_internal/2 [length = 4]
ldq_u $3,2($2) # 17 *movdi/8 [length = 4]
insbl $1,$4,$1 # 20 insbl [length = 4]
mskbl $3,$4,$3 # 19 mskxl [length = 4]
bis $1,$3,$1 # 21 iordi3/1 [length = 4]
stq_u $1,2($2) # 22 *movdi/9 [length = 4]
ret $31,($26),1 # 33 *return_internal [length = 4]
.end foo
e.g. (insn 15) stays after possibly aliasing (insn 13).
More information about the Gcc-bugs
mailing list