On Mon, May 18, 2020 at 9:27 AM Kito Cheng <kito.ch...@sifive.com> wrote:
>
> ping
>
> On Tue, Apr 14, 2020 at 2:53 PM Kito Cheng <kito.ch...@sifive.com> wrote:
>>
>>  - The alignment for local variable was adjust during 
>> estimate_stack_frame_size,
>>    however it seems wrong spot to adjust that, expand phase will adjust that
>>    but it little too late to some gimple optimization, which rely on certain
>>    target hooks need to check alignment, forwprop is an example for
>>    that, result of simplify_builtin_call rely on the alignment on some
>>    target like ARM or RISC-V.
>>
>>  - Exclude static local var and hard register var in the process of
>>    alignment adjustment.
>>
>>  - This patch fix gfortran.dg/pr45636.f90 for arm and riscv.
>>
>>  - Regression test on riscv32/riscv64 and x86_64-linux-gnu, no new fail
>>    introduced.
>>
>> gcc/ChangeLog
>>
>>         PR target/90811
>>         * Makefile.in (OBJS): Add tree-adjust-alignment.o.
>>         * tree-adjust-alignment.cc (pass_data_adjust_alignment): New.
>>         (pass_adjust_alignment): New.
>>         (-pass_adjust_alignment::execute): New.
>>         (make_pass_adjust_alignment): New.
>>         * tree-pass.h (make_pass_adjust_alignment): New.
>>         * passes.def: Add pass_adjust_alignment.
>> ---
>>  gcc/Makefile.in              |  1 +
>>  gcc/passes.def               |  1 +
>>  gcc/tree-adjust-alignment.cc | 92 ++++++++++++++++++++++++++++++++++++
>>  gcc/tree-pass.h              |  1 +
>>  4 files changed, 95 insertions(+)
>>  create mode 100644 gcc/tree-adjust-alignment.cc
>>
>> diff --git a/gcc/Makefile.in b/gcc/Makefile.in
>> index fa9923bb270..9b73288f776 100644
>> --- a/gcc/Makefile.in
>> +++ b/gcc/Makefile.in
>> @@ -1545,6 +1545,7 @@ OBJS = \
>>         ubsan.o \
>>         sanopt.o \
>>         sancov.o \
>> +       tree-adjust-alignment.o \

Please rename the file to just 'adjust-alignment.c'

>>         tree-call-cdce.o \
>>         tree-cfg.o \
>>         tree-cfgcleanup.o \
>> diff --git a/gcc/passes.def b/gcc/passes.def
>> index 2bf2cb78fc5..92cbe587a8a 100644
>> --- a/gcc/passes.def
>> +++ b/gcc/passes.def
>> @@ -183,6 +183,7 @@ along with GCC; see the file COPYING3.  If not see
>>    NEXT_PASS (pass_oacc_device_lower);
>>    NEXT_PASS (pass_omp_device_lower);
>>    NEXT_PASS (pass_omp_target_link);
>> +  NEXT_PASS (pass_adjust_alignment);
>>    NEXT_PASS (pass_all_optimizations);
>>    PUSH_INSERT_PASSES_WITHIN (pass_all_optimizations)
>>        NEXT_PASS (pass_remove_cgraph_callee_edges);
>> diff --git a/gcc/tree-adjust-alignment.cc b/gcc/tree-adjust-alignment.cc
>> new file mode 100644
>> index 00000000000..77f38f6949b
>> --- /dev/null
>> +++ b/gcc/tree-adjust-alignment.cc
>> @@ -0,0 +1,92 @@
>> +/* Adjust alignment for local variable.
>> +   Copyright (C) 2003-2020 Free Software Foundation, Inc.

Just 2020 please

>> +   Contributed by Dorit Naishlos <do...@il.ibm.com>

Eh?  Please put in your name.

>> +
>> +This file is part of GCC.
>> +
>> +GCC is free software; you can redistribute it and/or modify it under
>> +the terms of the GNU General Public License as published by the Free
>> +Software Foundation; either version 3, or (at your option) any later
>> +version.
>> +
>> +GCC is distributed in the hope that it will be useful, but WITHOUT ANY
>> +WARRANTY; without even the implied warranty of MERCHANTABILITY or
>> +FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
>> +for more details.
>> +
>> +You should have received a copy of the GNU General Public License
>> +along with GCC; see the file COPYING3.  If not see
>> +<http://www.gnu.org/licenses/>.  */
>> +
>> +#include "config.h"
>> +#include "system.h"
>> +#include "coretypes.h"
>> +#include "backend.h"
>> +#include "target.h"
>> +#include "tree.h"
>> +#include "gimple.h"
>> +#include "tree-pass.h"
>> +#include "cgraph.h"
>> +#include "fold-const.h"
>> +#include "gimple-iterator.h"
>> +#include "tree-cfg.h"
>> +#include "cfgloop.h"
>> +#include "tree-vectorizer.h"
>> +#include "tm_p.h"

Did you try to narrow down the set of includes?
Please do so, tree-vectorizer.h does not look needed.

>> +namespace {
>> +
>> +const pass_data pass_data_adjust_alignment =
>> +{
>> +  GIMPLE_PASS, /* type */
>> +  "adjust_alignment", /* name */
>> +  OPTGROUP_NONE, /* optinfo_flags */
>> +  TV_NONE, /* tv_id */
>> +  0, /* properties_required */
>> +  0, /* properties_provided */
>> +  0, /* properties_destroyed */
>> +  0, /* todo_flags_start */
>> +  0, /* todo_flags_finish */
>> +};
>> +
>> +class pass_adjust_alignment : public gimple_opt_pass
>> +{
>> +public:
>> +  pass_adjust_alignment (gcc::context *ctxt)
>> +    : gimple_opt_pass (pass_data_adjust_alignment, ctxt)
>> +  {}
>> +
>> +  virtual unsigned int execute (function *);
>> +

excessive vertical space

>> +}; // class pass_adjust_alignment
>> +
>> +} // anon namespace
>> +
>> +/* Entry point to adjust_alignment pass.  */
>> +unsigned int
>> +pass_adjust_alignment::execute (function *fun) {

The { goes to the next line and the following lines indents
are off then.

>> +  size_t i;
>> +  tree var;
>> +  unsigned int align;

declare variables where they are used, thus...

>> +
>> +  FOR_EACH_LOCAL_DECL (fun, i, var)
>> +    {
>> +      /* Don't adjust aligment for static local var and hard register var.  
>> */
>> +      if (is_global_var (var) || DECL_HARD_REGISTER (var))
>> +       continue;
>> +
>> +      align = LOCAL_DECL_ALIGNMENT (var);

 unsigned align = LOCAL...

for example.

OK with those changes.

Thanks,
Richard.

>> +
>> +      /* Make sure alignment only increase.  */
>> +      gcc_assert (align >= DECL_ALIGN (var));
>> +
>> +      SET_DECL_ALIGN (var, align);
>> +    }
>> +  return 0;
>> +}
>> +
>> +gimple_opt_pass *
>> +make_pass_adjust_alignment (gcc::context *ctxt)
>> +{
>> +  return new pass_adjust_alignment (ctxt);
>> +}
>> diff --git a/gcc/tree-pass.h b/gcc/tree-pass.h
>> index a1207a20a3c..576b3f67434 100644
>> --- a/gcc/tree-pass.h
>> +++ b/gcc/tree-pass.h
>> @@ -480,6 +480,7 @@ extern gimple_opt_pass *make_pass_sprintf_length 
>> (gcc::context *ctxt);
>>  extern gimple_opt_pass *make_pass_walloca (gcc::context *ctxt);
>>  extern gimple_opt_pass *make_pass_coroutine_lower_builtins (gcc::context 
>> *ctxt);
>>  extern gimple_opt_pass *make_pass_coroutine_early_expand_ifns (gcc::context 
>> *ctxt);
>> +extern gimple_opt_pass *make_pass_adjust_alignment (gcc::context *ctxt);
>>
>>  /* IPA Passes */
>>  extern simple_ipa_opt_pass *make_pass_ipa_lower_emutls (gcc::context *ctxt);
>> --
>> 2.26.0
>>

Reply via email to