Fix for powerpc/c4x problem with missed loop optimizations.
* loop.c (get_condition): Allow combine when either compare is VOIDmode. From-SVN: r22922
This commit is contained in:
parent
1636b950f9
commit
12f289ac32
@ -1,3 +1,8 @@
|
||||
Thu Oct 8 12:50:47 1998 Jim Wilson <wilson@cygnus.com>
|
||||
|
||||
* loop.c (get_condition): Allow combine when either compare is
|
||||
VOIDmode.
|
||||
|
||||
Thu Oct 8 11:31:01 PDT 1998 Jeff Law (law@cygnus.com)
|
||||
|
||||
* version.c: Bump for snapshot.
|
||||
|
20
gcc/loop.c
20
gcc/loop.c
@ -7765,7 +7765,14 @@ get_condition (jump, earliest)
|
||||
like Alpha that have an IEEE compliant EQ instruction, and
|
||||
a non-IEEE compliant BEQ instruction. The use of CCmode is
|
||||
actually artificial, simply to prevent the combination, but
|
||||
should not affect other platforms. */
|
||||
should not affect other platforms.
|
||||
|
||||
However, we must allow VOIDmode comparisons to match either
|
||||
CCmode or non-CCmode comparison, because some ports have
|
||||
modeless comparisons inside branch patterns.
|
||||
|
||||
??? This mode check should perhaps look more like the mode check
|
||||
in simplify_comparison in combine. */
|
||||
|
||||
if ((GET_CODE (SET_SRC (set)) == COMPARE
|
||||
|| (((code == NE
|
||||
@ -7783,8 +7790,9 @@ get_condition (jump, earliest)
|
||||
#endif
|
||||
))
|
||||
&& GET_RTX_CLASS (GET_CODE (SET_SRC (set))) == '<'))
|
||||
&& ((GET_MODE_CLASS (mode) == MODE_CC)
|
||||
== (GET_MODE_CLASS (inner_mode) == MODE_CC)))
|
||||
&& (((GET_MODE_CLASS (mode) == MODE_CC)
|
||||
== (GET_MODE_CLASS (inner_mode) == MODE_CC))
|
||||
|| mode == VOIDmode || inner_mode == VOIDmode))
|
||||
x = SET_SRC (set);
|
||||
else if (((code == EQ
|
||||
|| (code == GE
|
||||
@ -7801,8 +7809,10 @@ get_condition (jump, earliest)
|
||||
#endif
|
||||
))
|
||||
&& GET_RTX_CLASS (GET_CODE (SET_SRC (set))) == '<'
|
||||
&& ((GET_MODE_CLASS (mode) == MODE_CC)
|
||||
== (GET_MODE_CLASS (inner_mode) == MODE_CC)))
|
||||
&& (((GET_MODE_CLASS (mode) == MODE_CC)
|
||||
== (GET_MODE_CLASS (inner_mode) == MODE_CC))
|
||||
|| mode == VOIDmode || inner_mode == VOIDmode))
|
||||
|
||||
{
|
||||
/* We might have reversed a LT to get a GE here. But this wasn't
|
||||
actually the comparison of data, so we don't flag that we
|
||||
|
Loading…
Reference in New Issue
Block a user