[PATCH, i386] Partially revert ix86_cannot_change_mode_class changes
Uros Bizjak
ubizjak@gmail.com
Thu Feb 4 19:49:00 GMT 2016
Hello!
After PR rtl-optimization/69577 fix went in, it looks that we can
remove various kludges involving SSE and MMX register classes from
ix86_cannot_change_mode_class.
2016-02-04 Uros Bizjak <ubizjak@gmail.com>
PR rtl-optimization/69577
Revert:
2015-10-29 Richard Henderson <rth@redhat.com>
PR target/68124
PR rtl-opt/67609
* config/i386/i386.c (ix86_cannot_change_mode_class): Tighten
sse check to the exact conditions of PR 67609.
Patch was bootstrapped and regression tested on x86_64-linux-gnu {,-m32}.
rth, as the author of the patch the attached patch is reverting, does
the patch look OK to you?
Uros.
-------------- next part --------------
Index: config/i386/i386.c
===================================================================
--- config/i386/i386.c (revision 233143)
+++ config/i386/i386.c (working copy)
@@ -43283,25 +43283,12 @@ ix86_cannot_change_mode_class (machine_mode from,
if (MAYBE_SSE_CLASS_P (regclass) || MAYBE_MMX_CLASS_P (regclass))
{
- int from_size = GET_MODE_SIZE (from);
- int to_size = GET_MODE_SIZE (to);
-
/* Vector registers do not support QI or HImode loads. If we don't
disallow a change to these modes, reload will assume it's ok to
drop the subreg from (subreg:SI (reg:HI 100) 0). This affects
the vec_dupv4hi pattern. */
- if (from_size < 4)
+ if (GET_MODE_SIZE (from) < 4)
return true;
-
- /* Further, we cannot allow word_mode subregs of full vector modes.
- Otherwise the middle-end will assume it's ok to store to
- (subreg:DI (reg:TI 100) 0) in order to modify only the low 64 bits
- of the 128-bit register. However, after reload the subreg will
- be dropped leaving a plain DImode store. This is indistinguishable
- from a "normal" DImode move, and so we're justified to use movsd,
- which modifies the entire 128-bit register. */
- if (to_size == UNITS_PER_WORD && from_size > UNITS_PER_WORD)
- return true;
}
return false;
More information about the Gcc-patches
mailing list