[Bug tree-optimization/77647] [6/7 Regression] Missed opportunity to use register value causes additional load
rguenth at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Tue Sep 20 08:14:00 GMT 2016
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77647
Richard Biener <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |law at gcc dot gnu.org,
| |rguenth at gcc dot gnu.org
Known to work| |5.4.0
Target Milestone|--- |6.3
Summary|Missed opportunity to use |[6/7 Regression] Missed
|register value causes |opportunity to use register
|additional load |value causes additional
| |load
--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> ---
DOM doesn't propagate the equivalence on the not unreachable edge, that is,
it doesn't copy-propagate because of PR71947
if (ret_3 != _5)
goto <bb 3>;
else
goto <bb 4>;
<bb 3>:
__builtin_unreachable ();
<bb 4>:
_4 = ret_3 + _5;
DOM does the following after Jeffs patch:
Optimizing block #4
1>>> STMT 1 = ret_3 le_expr _5
1>>> STMT 1 = ret_3 ge_expr _5
1>>> STMT 1 = ret_3 eq_expr _5
1>>> STMT 0 = ret_3 ne_expr _5
0>>> COPY ret_3 = _5
0>>> COPY _5 = ret_3
Optimizing statement _4 = ret_3 + _5;
Replaced 'ret_3' with variable '_5'
Replaced '_5' with variable 'ret_3'
Folded to: _4 = ret_3 + _5;
which is of course a quite stupid replacement. I still believe the change
should be reverted ... Jeff, are you still investigating this?
Works on the GCC 5 branch:
Optimizing block #4
0>>> COPY _5 = ret_3
1>>> STMT 1 = ret_3 le_expr _5
1>>> STMT 1 = ret_3 ge_expr _5
1>>> STMT 1 = ret_3 eq_expr _5
1>>> STMT 0 = ret_3 ne_expr _5
Optimizing statement _4 = ret_3 + _5;
Replaced '_5' with variable 'ret_3'
LKUP STMT _4 = ret_3 plus_expr ret_3
2>>> STMT _4 = ret_3 plus_expr ret_3
with assembly
foo:
.LFB1:
.cfi_startproc
#APP
# 4 "t.c" 1
movq (%rdi),%rax
# 0 "" 2
#NO_APP
addq %rax, %rax
ret
More information about the Gcc-bugs
mailing list