rs6000.c (rs6000_reassociation_width): Add function for TARGET_SCHED_REASSOCIATION_WIDTH to enable parallel...
* config/rs6000/rs6000.c (rs6000_reassociation_width): Add function for TARGET_SCHED_REASSOCIATION_WIDTH to enable parallel reassociation for power8 and forward. From-SVN: r236043
This commit is contained in:
parent
fc97f80502
commit
8964ed82db
2 changed files with 43 additions and 0 deletions
|
@ -1,3 +1,9 @@
|
|||
2016-05-04 Aaron Sawdey <acsawdey@linux.vnet.ibm.com>
|
||||
|
||||
* config/rs6000/rs6000.c (rs6000_reassociation_width): Add
|
||||
function for TARGET_SCHED_REASSOCIATION_WIDTH to enable
|
||||
parallel reassociation for power8 and forward.
|
||||
|
||||
2016-05-09 Uros Bizjak <ubizjak@gmail.com>
|
||||
|
||||
* config/i386/i386.md (absneg splitters with general regs): Use
|
||||
|
|
|
@ -1755,6 +1755,9 @@ static const struct attribute_spec rs6000_attribute_table[] =
|
|||
#undef TARGET_CONDITIONAL_REGISTER_USAGE
|
||||
#define TARGET_CONDITIONAL_REGISTER_USAGE rs6000_conditional_register_usage
|
||||
|
||||
#undef TARGET_SCHED_REASSOCIATION_WIDTH
|
||||
#define TARGET_SCHED_REASSOCIATION_WIDTH rs6000_reassociation_width
|
||||
|
||||
#undef TARGET_TRAMPOLINE_INIT
|
||||
#define TARGET_TRAMPOLINE_INIT rs6000_trampoline_init
|
||||
|
||||
|
@ -8633,6 +8636,40 @@ rs6000_offsettable_memref_p (rtx op, machine_mode reg_mode)
|
|||
true, worst_case);
|
||||
}
|
||||
|
||||
/* Determine the reassociation width to be used in reassociate_bb.
|
||||
This takes into account how many parallel operations we
|
||||
can actually do of a given type, and also the latency.
|
||||
P8:
|
||||
int add/sub 6/cycle
|
||||
mul 2/cycle
|
||||
vect add/sub/mul 2/cycle
|
||||
fp add/sub/mul 2/cycle
|
||||
dfp 1/cycle
|
||||
*/
|
||||
|
||||
static int
|
||||
rs6000_reassociation_width (unsigned int opc ATTRIBUTE_UNUSED,
|
||||
enum machine_mode mode)
|
||||
{
|
||||
switch (rs6000_cpu)
|
||||
{
|
||||
case PROCESSOR_POWER8:
|
||||
case PROCESSOR_POWER9:
|
||||
if (DECIMAL_FLOAT_MODE_P (mode))
|
||||
return 1;
|
||||
if (VECTOR_MODE_P (mode))
|
||||
return 4;
|
||||
if (INTEGRAL_MODE_P (mode))
|
||||
return opc == MULT_EXPR ? 4 : 6;
|
||||
if (FLOAT_MODE_P (mode))
|
||||
return 4;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* Change register usage conditional on target flags. */
|
||||
static void
|
||||
rs6000_conditional_register_usage (void)
|
||||
|
|
Loading…
Add table
Reference in a new issue