REE: fix uninitialized registers handling
authorPierre-Marie de Rodat <derodat@adacore.com>
Mon, 19 Oct 2015 23:47:35 +0000 (23:47 +0000)
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>
Mon, 19 Oct 2015 23:47:35 +0000 (23:47 +0000)
commit524d9b4b9035ff69f1024ca2c32c7217128f3cf9
treed4b672674b050b5804bf9a28e4d83b5c24ea0d85
parent32308c8db4af9260cafcb517fe020dff5280f993
REE: fix uninitialized registers handling

gcc/ChangeLog:

PR rtl-optimization/66790
* df.h (DF_MIR): New macro.
(DF_LAST_PROBLEM_PLUS1): Update to be past DF_MIR
(DF_MIR_INFO_BB): New macro.
(DF_MIR_IN, DF_MIR_OUT): New macros.
(struct df_mir_bb_info): New.
(df_mir): New macro.
(df_mir_add_problem, df_mir_simulate_one_insn): New forward
declarations.
(df_mir_get_bb_info): New.
* df-problems.c (struct df_mir_problem_data): New.
(df_mir_free_bb_info, df_mir_alloc, df_mir_reset,
df_mir_bb_local_compute, df_mir_local_compute, df_mir_init,
df_mir_confluence_0, df_mir_confluence_n,
df_mir_transfer_function, df_mir_free, df_mir_top_dump,
df_mir_bottom_dump, df_mir_verify_solution_start,
df_mir_verify_solution_end): New.
(problem_MIR): New.
(df_mir_add_problem, df_mir_simulate_one_insn): New.
* timevar.def (TV_DF_MIR): New.
* ree.c: Include bitmap.h
(add_removable_extension): Add an INIT_REGS parameter.  Use it
to skip zero-extensions that may get an uninitialized register.
(find_removable_extensions): Compute must-initialized registers
using the MIR dataflow problem. Update the call to
add_removable_extension.
(find_and_remove_re): Call df_mir_add_problem.

gcc/testsuite/ChangeLog:

* gnat.dg/opt50.adb: New test.
* gnat.dg/opt50_pkg.adb: New helper.
* gnat.dg/opt50_pkg.ads: New helper.

From-SVN: r229008
gcc/ChangeLog
gcc/df-problems.c
gcc/df.h
gcc/ree.c
gcc/testsuite/ChangeLog
gcc/testsuite/gnat.dg/opt50.adb [new file with mode: 0644]
gcc/testsuite/gnat.dg/opt50_pkg.adb [new file with mode: 0644]
gcc/testsuite/gnat.dg/opt50_pkg.ads [new file with mode: 0644]
gcc/timevar.def