re PR target/56858 (alpha looks for NOTE_INSN_EH_REGION notes that cannot exist)
PR target/56858 * config/alpha/alpha.c: Include tree-pass.h, context.h and pass_manager.h. (pass_data_handle_trap_shadows): New pass. (pass_handle_trap_shadows::gate): New pass gate function. (make_pass_handle_trap_shadows): New function. (rest_of_handle_trap_shadows): Ditto. (alpha_align_insns_1): Rename from alpha_align_insns. (pass_data_align_insns): New pass. (pass_align_insns::gate): New pass gate function. (make_pass_aling_insns): New function. (rest_of_align_insns): Ditto. (alpha_align_insns): Ditto. (alpha_option_override): Declare handle_trap_shadows info and align_insns_info. Register handle_trap_shadows and align_insns passes here. (alpha_reorg): Do not call alpha_trap_shadows and alpha_align_insn from here. (alpha_pad_function_end): Do not skip BARRIERs. From-SVN: r212449
This commit is contained in:
parent
c77556a5d1
commit
4bdf641875
|
@ -1,7 +1,31 @@
|
|||
2014-07-11 Uros Bizjak <ubizjak@gmail.com>
|
||||
|
||||
PR target/56858
|
||||
* config/alpha/alpha.c: Include tree-pass.h, context.h
|
||||
and pass_manager.h.
|
||||
(pass_data_handle_trap_shadows): New pass.
|
||||
(pass_handle_trap_shadows::gate): New pass gate function.
|
||||
(make_pass_handle_trap_shadows): New function.
|
||||
(rest_of_handle_trap_shadows): Ditto.
|
||||
|
||||
(alpha_align_insns_1): Rename from alpha_align_insns.
|
||||
(pass_data_align_insns): New pass.
|
||||
(pass_align_insns::gate): New pass gate function.
|
||||
(make_pass_aling_insns): New function.
|
||||
(rest_of_align_insns): Ditto.
|
||||
(alpha_align_insns): Ditto.
|
||||
|
||||
(alpha_option_override): Declare handle_trap_shadows info
|
||||
and align_insns_info. Register handle_trap_shadows and align_insns
|
||||
passes here.
|
||||
(alpha_reorg): Do not call alpha_trap_shadows and
|
||||
alpha_align_insn from here.
|
||||
|
||||
(alpha_pad_function_end): Do not skip BARRIERs.
|
||||
|
||||
2014-07-10 Rong Xu <xur@google.com>
|
||||
|
||||
Add gcov-tool: an offline gcda profile processing tool
|
||||
Support.
|
||||
Add gcov-tool: an offline gcda profile processing tool support.
|
||||
* gcov-io.c (gcov_position): Make avaialble to gcov-tool.
|
||||
(gcov_is_error): Ditto.
|
||||
(gcov_read_string): Ditto.
|
||||
|
@ -55,9 +79,9 @@
|
|||
|
||||
2014-07-09 Tom de Vries <tom@codesourcery.com>
|
||||
|
||||
* final.c (get_call_fndecl): Declare.
|
||||
(self_recursive_call_p): New function.
|
||||
(collect_fn_hard_reg_usage): Handle self-recursive function calls.
|
||||
* final.c (get_call_fndecl): Declare.
|
||||
(self_recursive_call_p): New function.
|
||||
(collect_fn_hard_reg_usage): Handle self-recursive function calls.
|
||||
|
||||
2014-07-08 Jan Hubicka <hubicka@ucw.cz>
|
||||
|
||||
|
@ -96,8 +120,8 @@
|
|||
2014-07-08 Trevor Saunders <tsaunders@mozilla.com>
|
||||
|
||||
PR bootstrap/61679
|
||||
* hash-table.h: use hash_table::value_type instead of
|
||||
Descriptor::value_type in the return types of several methods.
|
||||
* hash-table.h: use hash_table::value_type instead of
|
||||
Descriptor::value_type in the return types of several methods.
|
||||
|
||||
2014-07-08 Trevor Saunders <tsaunders@mozilla.com>
|
||||
|
||||
|
@ -212,9 +236,8 @@
|
|||
2014-07-08 Yuri Rumyantsev <ysrumyan@gmail.com>
|
||||
|
||||
PR tree-optimization/61576
|
||||
* tree-if-conv.c (is_cond_scalar_reduction): Add check that
|
||||
basic block containing reduction statement is predecessor
|
||||
of phi basi block.
|
||||
* tree-if-conv.c (is_cond_scalar_reduction): Add check that basic
|
||||
block containing reduction statement is predecessor of phi basi block.
|
||||
|
||||
2014-07-08 Marek Polacek <polacek@redhat.com>
|
||||
|
||||
|
@ -226,30 +249,24 @@
|
|||
|
||||
2014-07-07 Jan Hubicka <hubicka@ucw.cz>
|
||||
|
||||
* symtab.c: Include calls.h
|
||||
(symtab_nonoverwritable_alias_1): Check sanity of the local
|
||||
alias.
|
||||
* symtab.c: Include calls.h.
|
||||
(symtab_nonoverwritable_alias_1): Check sanity of the local alias.
|
||||
|
||||
2014-07-07 Maciej W. Rozycki <macro@codesourcery.com>
|
||||
|
||||
* config/rs6000/rs6000.c (output_vec_const_move): Handle
|
||||
little-endian code generation.
|
||||
* config/rs6000/spe.md (spe_evmergehi): Rename to...
|
||||
(vec_perm00_v2si): ... this. Handle little-endian code
|
||||
generation.
|
||||
(vec_perm00_v2si): ... this. Handle little-endian code generation.
|
||||
(spe_evmergehilo): Rename to...
|
||||
(vec_perm01_v2si): ... this. Handle little-endian code
|
||||
generation.
|
||||
(vec_perm01_v2si): ... this. Handle little-endian code generation.
|
||||
(spe_evmergelo): Rename to...
|
||||
(vec_perm11_v2si): ... this. Handle little-endian code
|
||||
generation.
|
||||
(vec_perm11_v2si): ... this. Handle little-endian code generation.
|
||||
(spe_evmergelohi): Rename to...
|
||||
(vec_perm10_v2si): ... this. Handle little-endian code
|
||||
generation.
|
||||
(vec_perm10_v2si): ... this. Handle little-endian code generation.
|
||||
(spe_evmergehi, spe_evmergehilo): New expanders.
|
||||
(spe_evmergelo, spe_evmergelohi): Likewise.
|
||||
(*frob_<SPE64:mode>_<DITI:mode>): Handle little-endian code
|
||||
generation.
|
||||
(*frob_<SPE64:mode>_<DITI:mode>): Handle little-endian code generation.
|
||||
(*frob_tf_ti): Likewise.
|
||||
(*frob_<mode>_di_2): Likewise.
|
||||
(*frob_tf_di_8_2): Likewise.
|
||||
|
@ -263,7 +280,7 @@
|
|||
endianness only.
|
||||
(*mov_si<mode>_e500_subreg0_le): New instruction pattern.
|
||||
(*mov_si<mode>_e500_subreg0_elf_low): Rename to...
|
||||
(*mov_si<mode>_e500_subreg0_elf_low_be): ... this. Restrict to
|
||||
(*mov_si<mode>_e500_subreg0_elf_low_be): ... this. Restrict to
|
||||
the big endianness only.
|
||||
(*mov_si<mode>_e500_subreg0_elf_low_le): New instruction pattern.
|
||||
(*mov_si<mode>_e500_subreg0_2): Rename to...
|
||||
|
@ -302,8 +319,8 @@
|
|||
|
||||
2014-07-07 Max Ostapenko <m.ostapenko@partner.samsung.com>
|
||||
|
||||
* asan.c (instrument_strlen_call): Do not instrument first byte in strlen
|
||||
if already instrumented.
|
||||
* asan.c (instrument_strlen_call): Do not instrument first byte
|
||||
in strlen if already instrumented.
|
||||
|
||||
2014-07-07 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
|
||||
|
||||
|
|
|
@ -62,6 +62,9 @@ along with GCC; see the file COPYING3. If not see
|
|||
#include "gimple-expr.h"
|
||||
#include "is-a.h"
|
||||
#include "gimple.h"
|
||||
#include "tree-pass.h"
|
||||
#include "context.h"
|
||||
#include "pass_manager.h"
|
||||
#include "gimple-iterator.h"
|
||||
#include "gimplify.h"
|
||||
#include "gimple-ssa.h"
|
||||
|
@ -209,6 +212,8 @@ static struct alpha_rtx_cost_data const alpha_rtx_cost_size =
|
|||
/* Declarations of static functions. */
|
||||
static struct machine_function *alpha_init_machine_status (void);
|
||||
static rtx alpha_emit_xfloating_compare (enum rtx_code *, rtx, rtx);
|
||||
static void alpha_handle_trap_shadows (void);
|
||||
static void alpha_align_insns (void);
|
||||
|
||||
#if TARGET_ABI_OPEN_VMS
|
||||
static void alpha_write_linkage (FILE *, const char *);
|
||||
|
@ -217,6 +222,113 @@ static bool vms_valid_pointer_mode (enum machine_mode);
|
|||
#define vms_patch_builtins() gcc_unreachable()
|
||||
#endif
|
||||
|
||||
static unsigned int
|
||||
rest_of_handle_trap_shadows (void)
|
||||
{
|
||||
alpha_handle_trap_shadows ();
|
||||
return 0;
|
||||
}
|
||||
|
||||
namespace {
|
||||
|
||||
const pass_data pass_data_handle_trap_shadows =
|
||||
{
|
||||
RTL_PASS,
|
||||
"trap_shadows", /* name */
|
||||
OPTGROUP_NONE, /* optinfo_flags */
|
||||
TV_NONE, /* tv_id */
|
||||
0, /* properties_required */
|
||||
0, /* properties_provided */
|
||||
0, /* properties_destroyed */
|
||||
0, /* todo_flags_start */
|
||||
TODO_df_finish, /* todo_flags_finish */
|
||||
};
|
||||
|
||||
class pass_handle_trap_shadows : public rtl_opt_pass
|
||||
{
|
||||
public:
|
||||
pass_handle_trap_shadows(gcc::context *ctxt)
|
||||
: rtl_opt_pass(pass_data_handle_trap_shadows, ctxt)
|
||||
{}
|
||||
|
||||
/* opt_pass methods: */
|
||||
virtual bool gate (function *)
|
||||
{
|
||||
return alpha_tp != ALPHA_TP_PROG || flag_exceptions;
|
||||
}
|
||||
|
||||
virtual unsigned int execute (function *)
|
||||
{
|
||||
return rest_of_handle_trap_shadows ();
|
||||
}
|
||||
|
||||
}; // class pass_handle_trap_shadows
|
||||
|
||||
} // anon namespace
|
||||
|
||||
rtl_opt_pass *
|
||||
make_pass_handle_trap_shadows (gcc::context *ctxt)
|
||||
{
|
||||
return new pass_handle_trap_shadows (ctxt);
|
||||
}
|
||||
|
||||
static unsigned int
|
||||
rest_of_align_insns (void)
|
||||
{
|
||||
alpha_align_insns ();
|
||||
return 0;
|
||||
}
|
||||
|
||||
namespace {
|
||||
|
||||
const pass_data pass_data_align_insns =
|
||||
{
|
||||
RTL_PASS,
|
||||
"align_insns", /* name */
|
||||
OPTGROUP_NONE, /* optinfo_flags */
|
||||
TV_NONE, /* tv_id */
|
||||
0, /* properties_required */
|
||||
0, /* properties_provided */
|
||||
0, /* properties_destroyed */
|
||||
0, /* todo_flags_start */
|
||||
TODO_df_finish, /* todo_flags_finish */
|
||||
};
|
||||
|
||||
class pass_align_insns : public rtl_opt_pass
|
||||
{
|
||||
public:
|
||||
pass_align_insns(gcc::context *ctxt)
|
||||
: rtl_opt_pass(pass_data_align_insns, ctxt)
|
||||
{}
|
||||
|
||||
/* opt_pass methods: */
|
||||
virtual bool gate (function *)
|
||||
{
|
||||
/* Due to the number of extra trapb insns, don't bother fixing up
|
||||
alignment when trap precision is instruction. Moreover, we can
|
||||
only do our job when sched2 is run. */
|
||||
return ((alpha_tune == PROCESSOR_EV4
|
||||
|| alpha_tune == PROCESSOR_EV5)
|
||||
&& optimize && !optimize_size
|
||||
&& alpha_tp != ALPHA_TP_INSN
|
||||
&& flag_schedule_insns_after_reload);
|
||||
}
|
||||
|
||||
virtual unsigned int execute (function *)
|
||||
{
|
||||
return rest_of_align_insns ();
|
||||
}
|
||||
|
||||
}; // class pass_align_insns
|
||||
|
||||
} // anon namespace
|
||||
|
||||
rtl_opt_pass *
|
||||
make_pass_align_insns (gcc::context *ctxt)
|
||||
{
|
||||
return new pass_align_insns (ctxt);
|
||||
}
|
||||
|
||||
#ifdef TARGET_ALTERNATE_LONG_DOUBLE_MANGLING
|
||||
/* Implement TARGET_MANGLE_TYPE. */
|
||||
|
||||
|
@ -273,6 +385,18 @@ alpha_option_override (void)
|
|||
64, 64, 16*1024 }
|
||||
};
|
||||
|
||||
opt_pass *pass_handle_trap_shadows = make_pass_handle_trap_shadows (g);
|
||||
static struct register_pass_info handle_trap_shadows_info
|
||||
= { pass_handle_trap_shadows, "eh_ranges",
|
||||
1, PASS_POS_INSERT_AFTER
|
||||
};
|
||||
|
||||
opt_pass *pass_align_insns = make_pass_align_insns (g);
|
||||
static struct register_pass_info align_insns_info
|
||||
= { pass_align_insns, "shorten",
|
||||
1, PASS_POS_INSERT_BEFORE
|
||||
};
|
||||
|
||||
int const ct_size = ARRAY_SIZE (cpu_table);
|
||||
int line_size = 0, l1_size = 0, l2_size = 0;
|
||||
int i;
|
||||
|
@ -506,6 +630,10 @@ alpha_option_override (void)
|
|||
if (!(target_flags_explicit & MASK_LONG_DOUBLE_128))
|
||||
target_flags |= MASK_LONG_DOUBLE_128;
|
||||
#endif
|
||||
|
||||
/* This needs to be done at start up. It's convenient to do it here. */
|
||||
register_pass (&handle_trap_shadows_info);
|
||||
register_pass (&align_insns_info);
|
||||
}
|
||||
|
||||
/* Returns 1 if VALUE is a mask that contains full bytes of zero or ones. */
|
||||
|
@ -9178,9 +9306,9 @@ alphaev5_next_nop (int *pin_use)
|
|||
/* The instruction group alignment main loop. */
|
||||
|
||||
static void
|
||||
alpha_align_insns (unsigned int max_align,
|
||||
rtx (*next_group) (rtx, int *, int *),
|
||||
rtx (*next_nop) (int *))
|
||||
alpha_align_insns_1 (unsigned int max_align,
|
||||
rtx (*next_group) (rtx, int *, int *),
|
||||
rtx (*next_nop) (int *))
|
||||
{
|
||||
/* ALIGN is the known alignment for the insn group. */
|
||||
unsigned int align;
|
||||
|
@ -9305,6 +9433,17 @@ alpha_align_insns (unsigned int max_align,
|
|||
}
|
||||
}
|
||||
|
||||
static void
|
||||
alpha_align_insns (void)
|
||||
{
|
||||
if (alpha_tune == PROCESSOR_EV4)
|
||||
alpha_align_insns_1 (8, alphaev4_next_group, alphaev4_next_nop);
|
||||
else if (alpha_tune == PROCESSOR_EV5)
|
||||
alpha_align_insns_1 (16, alphaev5_next_group, alphaev5_next_nop);
|
||||
else
|
||||
gcc_unreachable ();
|
||||
}
|
||||
|
||||
/* Insert an unop between sibcall or noreturn function call and GP load. */
|
||||
|
||||
static void
|
||||
|
@ -9324,12 +9463,6 @@ alpha_pad_function_end (void)
|
|||
next = NEXT_INSN (insn);
|
||||
if (next == NULL)
|
||||
continue;
|
||||
if (BARRIER_P (next))
|
||||
{
|
||||
next = NEXT_INSN (next);
|
||||
if (next == NULL)
|
||||
continue;
|
||||
}
|
||||
if (NOTE_P (next) && NOTE_KIND (next) == NOTE_INSN_CALL_ARG_LOCATION)
|
||||
insn = next;
|
||||
|
||||
|
@ -9397,22 +9530,6 @@ And in the noreturn case:
|
|||
|
||||
if (current_function_has_exception_handlers ())
|
||||
alpha_pad_function_end ();
|
||||
|
||||
if (alpha_tp != ALPHA_TP_PROG || flag_exceptions)
|
||||
alpha_handle_trap_shadows ();
|
||||
|
||||
/* Due to the number of extra trapb insns, don't bother fixing up
|
||||
alignment when trap precision is instruction. Moreover, we can
|
||||
only do our job when sched2 is run. */
|
||||
if (optimize && !optimize_size
|
||||
&& alpha_tp != ALPHA_TP_INSN
|
||||
&& flag_schedule_insns_after_reload)
|
||||
{
|
||||
if (alpha_tune == PROCESSOR_EV4)
|
||||
alpha_align_insns (8, alphaev4_next_group, alphaev4_next_nop);
|
||||
else if (alpha_tune == PROCESSOR_EV5)
|
||||
alpha_align_insns (16, alphaev5_next_group, alphaev5_next_nop);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
Loading…
Reference in New Issue