This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug tree-optimization/42893] New: [4.3/4.4/4.5 Regression] Missed conditionally dead store elimination
- From: "steven at gcc dot gnu dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 28 Jan 2010 07:17:28 -0000
- Subject: [Bug tree-optimization/42893] New: [4.3/4.4/4.5 Regression] Missed conditionally dead store elimination
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
Taken from
http://embed.cs.utah.edu/embarrassing/jan_10/harvest/source/8A/8AB0B238.shtml:
struct frame_info;
void tui_registers_changed_hook (void);
extern struct frame_info *deprecated_selected_frame;
int tui_refreshing_registers = 0;
void
tui_registers_changed_hook (void)
{
struct frame_info *fi;
fi = deprecated_selected_frame;
if (fi)
{
if (tui_refreshing_registers == 0)
{
tui_refreshing_registers = 1;
tui_refreshing_registers = 0;
}
}
return;
}
Assembler output from GCC 3.4.6 at -O3 on x86_64:
.globl tui_registers_changed_hook
.type tui_registers_changed_hook, @function
tui_registers_changed_hook:
.LFB2:
rep ; ret
.LFE2:
.size tui_registers_changed_hook, .-tui_registers_changed_hook
Assembler output from GCC 4.5.0 (r155776) at -O3 on x86_64:
.globl tui_registers_changed_hook
.type tui_registers_changed_hook, @function
tui_registers_changed_hook:
.LFB0:
.cfi_startproc
cmpq $0, deprecated_selected_frame(%rip)
je .L1
movl tui_refreshing_registers(%rip), %eax
testl %eax, %eax
jne .L1
movl $0, tui_refreshing_registers(%rip)
.L1:
rep
ret
.cfi_endproc
.LFE0:
.size tui_registers_changed_hook, .-tui_registers_changed_hook
This also confuses the tree optimizers (e.g. GCC now fails to note that the
function is pure+const). The .optimized dump:
;; Function tui_registers_changed_hook (tui_registers_changed_hook)
tui_registers_changed_hook ()
{
struct frame_info * fi;
int tui_refreshing_registers.0;
<bb 2>:
fi_1 = deprecated_selected_frame;
if (fi_1 != 0B)
goto <bb 3>;
else
goto <bb 5>;
<bb 3>:
tui_refreshing_registers.0_2 = tui_refreshing_registers;
if (tui_refreshing_registers.0_2 == 0)
goto <bb 4>;
else
goto <bb 5>;
<bb 4>:
tui_refreshing_registers = 0;
<bb 5>:
return;
}
--
Summary: [4.3/4.4/4.5 Regression] Missed conditionally dead store
elimination
Product: gcc
Version: 4.5.0
Status: UNCONFIRMED
Keywords: missed-optimization
Severity: normal
Priority: P3
Component: tree-optimization
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: steven at gcc dot gnu dot org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42893