On Mon, Oct 23, 2017 at 12:57 PM, Eric Botcazou <ebotca...@adacore.com> wrote: > Hi, > > this is the regression present on the mainline for Power6 and introduced by my > patch fiddling with SUBREG_PROMOTED_VAR_P in expand_expr_real_1. It turns out > that the ouf-of-ssa pass implicitly assumes that promoted RTXes for partitions > are fully initialized (because it can generate direct moves in promoted mode) > and clearing SUBREG_PROMOTED_VAR_P for some of them goes against this. > > Therefore the attached patch goes in the opposite direction and initializes > the RTXes for problematic partitions on function entry. Surprisingly enough, > this generates smaller code on average at -O2 for gcc.c-torture/compile: > > 49 files changed, 1243 insertions(+), 1694 deletions(-) > > probably because the compiler can now infer values on paths from entry where > variables are uninitialized. Tested on PowerPC64/Linux, OK for the mainline?
Ok. Thanks, Richard. > > 2017-10-23 Eric Botcazou <ebotca...@adacore.com> > > PR middle-end/82569 > * tree-outof-ssa.h (always_initialized_rtx_for_ssa_name_p): Delete. > * expr.c (expand_expr_real_1) <expand_decl_rtl>: Revert latest change. > * loop-iv.c (iv_get_reaching_def): Likewise. > * cfgexpand.c (expand_one_ssa_partition): Initialize the RTX if the > variable is promoted and the partition contains undefined values. > > -- > Eric Botcazou