http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55845
Uros Bizjak <ubizjak at gmail dot com> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |NEW
Last reconfirmed| |2013-01-04
Ever Confirmed|0 |1
--- Comment #4 from Uros Bizjak <ubizjak at gmail dot com> 2013-01-04 08:13:03
UTC ---
Please note how unspec_volatile vzeroupper (insn 225) moves above conditional
jump comparison, passing many instructions:
_.c.218r.csa:
...
110: {r8:SI=r8:SI+r11:SI;clobber flags:CC;}
REG_UNUSED flags:CC
111: flags:CCZ=cmp(bx:SI,r11:SI)
REG_DEAD r11:SI
REG_DEAD bx:SI
105: xmm2:V4DF=vec_select(vec_concat(xmm1:V4DF,xmm1:V4DF),parallel)
106: xmm1:V4DF=xmm1:V4DF+xmm2:V4DF
REG_DEAD xmm2:V4DF
234: xmm1:V2DF=xmm1:V2DF
235: xmm1:DF=xmm1:DF
109: xmm0:DF=xmm0:DF+xmm1:DF
REG_DEAD xmm1:DF
112: pc={(flags:CCZ==0)?L230:pc}
REG_DEAD flags:CCZ
REG_BR_PROB 0xd06
226: NOTE_INSN_BASIC_BLOCK 22
225: unspec/v[0] 43
113: L113:
114: NOTE_INSN_BASIC_BLOCK 23
...
_.c.219r.jump2:
...
110: {r8:SI=r8:SI+r11:SI;clobber flags:CC;}
REG_UNUSED flags:CC
225: unspec/v[0] 43
111: flags:CCZ=cmp(bx:SI,r11:SI)
REG_DEAD r11:SI
REG_DEAD bx:SI
105: xmm2:V4DF=vec_select(vec_concat(xmm1:V4DF,xmm1:V4DF),parallel)
106: xmm1:V4DF=xmm1:V4DF+xmm2:V4DF
REG_DEAD xmm2:V4DF
109: xmm0:DF=xmm0:DF+xmm1:DF
REG_DEAD xmm1:DF
112: pc={(flags:CCZ==0)?L231:pc}
REG_DEAD flags:CCZ
REG_BR_PROB 0xd06
113: L113:
114: NOTE_INSN_BASIC_BLOCK 23
...
Confirmed as rtl-optimization infrastructure problem.