[Bug target/78222] target-tilegx: Incorrect bundle: let addli in y pipe
gang.chen.5i5j at gmail dot com
gcc-bugzilla@gcc.gnu.org
Sat Dec 10 10:55:00 GMT 2016
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78222
--- Comment #1 from Chen Gang <gang.chen.5i5j at gmail dot com> ---
The root cause is: in tilegx_gen_bundle, gcc will lose prev insn when it
deletes useless insns.
The related insns before tilegx_gen_bbundle (it is correct).
249 (insn:TI 71 68 75 4 (set (mem:DI (reg/f:DI 10 r10 [112]) [3 *rp_19(D)+8 S8
A64])
250 (reg:DI 32 r32 [orig:115 r+8 ] [115])) "test.c":25 4 {*movdi_insn}
251 (expr_list:REG_DEAD (reg:DI 32 r32 [orig:115 r+8 ] [115])
252 (expr_list:REG_DEAD (reg/f:DI 10 r10 [112])
253 (nil))))
254 (insn 75 71 78 4 (unspec_volatile [
255 (const_int 0 [0])
256 ] 201) "test.c":27 162 {blockage}
257 (nil))
258 (insn 78 71 160 4 (unspec_volatile [
259 (const_int 0 [0])
260 ] 201) "test.c":27 162 {blockage}
261 (nil))
262
263
264 (insn:TI 144 160 142 4 (set (reg:DI 28 r28)
265 (plus:DI (reg/f:DI 54 sp)
266 (const_int 120 [0x78]))) "test.c":27 38 {adddi3}
267 (nil))
268 (insn 142 144 79 4 (set (reg:DI 29 r29)
269 (plus:DI (reg/f:DI 54 sp)
270 (const_int 128 [0x80]))) "test.c":27 38 {adddi3}
271 (nil))
The insns after tilegx_gen_bundle (remove 2 useless insns, but forgot to
correct the prev insn)
249 (insn:SI # 0 0 4 (set (mem:DI (reg/f:DI 10 r10 [112]) [ *rp_19(D)+8 S8
A64])
250 (reg:DI 32 r32 [orig:115 r+8 ] [115])) "test.c":25# {*movdi_insn}
251 (expr_list:REG_DEAD (reg:DI 32 r32 [orig:115 r+8 ] [115])
252 (expr_list:REG_DEAD (reg/f:DI 10 r10 [112])
253 (nil))))
254 (insn:SI # 0 0 4 (set (reg:DI 28 r28)
255 (plus:DI (reg/f:DI 54 sp)
256 (const_int 120 [0x78]))) "test.c":27# {adddi3}
257 (nil))
258 (insn:QI # 0 0 4 (set (reg:DI 29 r29)
259 (plus:DI (reg/f:DI 54 sp)
260 (const_int 128 [0x80]))) "test.c":27# {adddi3}
261 (nil))
The correct insns after tilegx_gen_bundle should be:
220 (insn:QI # 0 0 4 (set (mem:DI (reg/f:DI 10 r10 [112]) [ *rp_19(D)+8 S8
A64])
221 (reg:DI 32 r32 [orig:115 r+8 ] [115])) "test.c":25# {*movdi_insn}
222 (expr_list:REG_DEAD (reg:DI 32 r32 [orig:115 r+8 ] [115])
223 (expr_list:REG_DEAD (reg/f:DI 10 r10 [112])
224 (nil))))
225 (note # 0 0 NOTE_INSN_EPILOGUE_BEG)
226 (insn:SI # 0 0 4 (set (reg:DI 28 r28)
227 (plus:DI (reg/f:DI 54 sp)
228 (const_int 120 [0x78]))) "test.c":27# {adddi3}
229 (nil))
230 (insn:QI # 0 0 4 (set (reg:DI 29 r29)
231 (plus:DI (reg/f:DI 54 sp)
232 (const_int 128 [0x80]))) "test.c":27# {adddi3}
233 (nil))
234 (insn # 0 0 4 (use (reg/i:TI 0 r0)) "test.c":27#
235 (nil))
I shall make patch for it next.
More information about the Gcc-bugs
mailing list