Commit b4d1725b by Christian Bruel Committed by Christian Bruel

re PR target/64835 (-fno-ipa-cp is inconsitently supported when attributes…

re PR target/64835 (-fno-ipa-cp is inconsitently supported when attributes optimize or target are used)

2015-04-29  Christian Bruel  <christian.bruel@st.com>

	PR target/64835
	* config/i386/i386.c (ix86_default_align): New function.
	(ix86_override_options_after_change): Call ix86_default_align.
	(TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE): New hook.
	(ix86_override_options_after_change): New function.

From-SVN: r222559
parent 874ef163
2015-04-29 Christian Bruel <christian.bruel@st.com>
PR target/64835
* config/i386/i386.c (ix86_default_align): New function.
(ix86_override_options_after_change): Call ix86_default_align.
(TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE): New hook.
(ix86_override_options_after_change): New function.
2015-04-28 Jeff Law <law@redhat.com>
* tree-ssa-dom.c (record_equality); Fix comment typos.
......
......@@ -3106,6 +3106,35 @@ set_ix86_tune_features (enum processor_type ix86_tune, bool dump)
}
/* Default align_* from the processor table. */
static void
ix86_default_align (struct gcc_options *opts)
{
if (opts->x_align_loops == 0)
{
opts->x_align_loops = processor_target_table[ix86_tune].align_loop;
align_loops_max_skip = processor_target_table[ix86_tune].align_loop_max_skip;
}
if (opts->x_align_jumps == 0)
{
opts->x_align_jumps = processor_target_table[ix86_tune].align_jump;
align_jumps_max_skip = processor_target_table[ix86_tune].align_jump_max_skip;
}
if (opts->x_align_functions == 0)
{
opts->x_align_functions = processor_target_table[ix86_tune].align_func;
}
}
/* Implement TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE hook. */
static void
ix86_override_options_after_change (void)
{
ix86_default_align (&global_options);
}
/* Override various settings based on options. If MAIN_ARGS_P, the
options are from the command line, otherwise they are from
attributes. */
......@@ -3903,20 +3932,7 @@ ix86_option_override_internal (bool main_args_p,
opts->x_ix86_regparm = REGPARM_MAX;
/* Default align_* from the processor table. */
if (opts->x_align_loops == 0)
{
opts->x_align_loops = processor_target_table[ix86_tune].align_loop;
align_loops_max_skip = processor_target_table[ix86_tune].align_loop_max_skip;
}
if (opts->x_align_jumps == 0)
{
opts->x_align_jumps = processor_target_table[ix86_tune].align_jump;
align_jumps_max_skip = processor_target_table[ix86_tune].align_jump_max_skip;
}
if (opts->x_align_functions == 0)
{
opts->x_align_functions = processor_target_table[ix86_tune].align_func;
}
ix86_default_align (opts);
/* Provide default for -mbranch-cost= value. */
if (!opts_set->x_ix86_branch_cost)
......@@ -52098,6 +52114,9 @@ ix86_operands_ok_for_move_multiple (rtx *operands, bool load,
#undef TARGET_PROMOTE_FUNCTION_MODE
#define TARGET_PROMOTE_FUNCTION_MODE ix86_promote_function_mode
#undef TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE
#define TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE ix86_override_options_after_change
#undef TARGET_MEMBER_TYPE_FORCES_BLK
#define TARGET_MEMBER_TYPE_FORCES_BLK ix86_member_type_forces_blk
2015-04-29 Christian Bruel <christian.bruel@st.com>
PR target/64835
* gcc.dg/ipa/iinline-attr.c: New test.
* gcc.target/i386/iinline-attr-2.c: New test.
2015-04-28 Andre Vehreschild <vehre@gmx.de>
* gfortran.dg/implicit_class_1.f90: Adding flag to check, if
......
/* Verify that simple indirect calls are inlined even when
attribute __optimize is used. */
/* { dg-do compile } */
/* { dg-options "-O2 -fdump-ipa-inline" } */
extern void non_existent(int);
static void hooray ()
{
non_existent (1);
}
__attribute__ ((__optimize__ ("O2")))
static void hiphip (void (*f)())
{
non_existent (2);
f ();
}
int test (void)
{
hiphip (hooray);
return 0;
}
/* { dg-final { scan-ipa-dump "hooray\[^\\n\]*inline copy in test" "inline" } } */
/* { dg-final { cleanup-ipa-dump "inline" } } */
/* Verify that alignment flags are set when attribute __optimize is used. */
/* { dg-do compile } */
/* { dg-options "-O2" } */
extern void non_existent(int);
__attribute__ ((__optimize__ ("O2")))
static void hooray ()
{
non_existent (1);
}
__attribute__ ((__optimize__ ("O2")))
static void hiphip (void (*f)())
{
non_existent (2);
f ();
}
__attribute__ ((__optimize__ ("O2")))
int test (void)
{
hiphip (hooray);
return 0;
}
/* { dg-final { scan-assembler "p2align" } } */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment