[Bug target/90877] New: Dead codes in ix86_register_move_cost
hjl.tools at gmail dot com
gcc-bugzilla@gcc.gnu.org
Thu Jun 13 20:52:00 GMT 2019
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90877
Bug ID: 90877
Summary: Dead codes in ix86_register_move_cost
Product: gcc
Version: 10.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: target
Assignee: unassigned at gcc dot gnu.org
Reporter: hjl.tools at gmail dot com
CC: skpgkp1 at gmail dot com, ubizjak at gmail dot com
Target Milestone: ---
ix86_register_move_cost has
if (inline_secondary_memory_needed (mode, class1, class2, false))
{
...
return cost;
}
/* Moves between SSE/MMX and integer unit are expensive. */
if (MMX_CLASS_P (class1) != MMX_CLASS_P (class2)
|| SSE_CLASS_P (class1) != SSE_CLASS_P (class2))
/* ??? By keeping returned value relatively high, we limit the number
of moves between integer and MMX/SSE registers for all targets.
Additionally, high value prevents problem with x86_modes_tieable_p(),
where integer modes in MMX/SSE registers are not tieable
because of missing QImode and HImode moves to, from or between
MMX/SSE registers. */
return MAX (8, MMX_CLASS_P (class1) || MMX_CLASS_P (class2)
? ix86_cost->mmxsse_to_integer : ix86_cost->ssemmx_to_integer);
Since inline_secondary_memory_needed has
/* ??? This is a lie. We do have moves between mmx/general, and for
mmx/sse2. But by saying we need secondary memory we discourage the
register allocator from using the mmx registers unless needed. */
if (MMX_CLASS_P (class1) != MMX_CLASS_P (class2))
return true;
MMX_CLASS_P (class1) != MMX_CLASS_P (class2) is always false. Also
struct processor_costs has:
const int mmxsse_to_integer; /* cost of moving mmxsse register to
integer. */
const int ssemmx_to_integer; /* cost of moving integer to mmxsse register.
*/
the mmxsse_to_integer field is never used.
More information about the Gcc-bugs
mailing list