On Fri, May 30, 2014 at 2:25 PM, Ilya Enkovich <enkovich....@gmail.com> wrote: > Hi, > > This patch adds Pointer Bounds Checker passes. Versioning happens before > early local passes. Earply local passes are split into 3 stages to have > everything instrumented before any optimization applies.
That looks artificial to me. If you need to split up early_local_passes then do that - nesting three IPA pass groups inside it looks odd to me. Btw - doing this in three "IPA phases" makes things possibly slower due to cache effects. It might be worth pursuing to move the early stage completely to the lowering pipeline. Btw, fixup_cfg only needs to run once local_pure_const was run on a callee, thus it shouldn't be neccessary to run it from the first group. void pass_manager::execute_early_local_passes () { - execute_pass_list (pass_early_local_passes_1->sub); + execute_pass_list (pass_early_local_passes_1->sub->sub); + execute_pass_list (pass_early_local_passes_1->sub->next->sub); + execute_pass_list (pass_early_local_passes_1->sub->next->next->next->sub); } is gross - it should be enough to execute the early local pass list (obsolete comment with the suggestion above). Richard. > Bootstrapped and tested on linux-x86_64. > > Thanks, > Ilya > -- > gcc/ > > 2014-05-29 Ilya Enkovich <ilya.enkov...@intel.com> > > * tree-chkp.c: New. > * tree-chkp.h: New. > * rtl-chkp.c: New. > * rtl-chkp.h: New. > * Makefile.in (OBJS): Add tree-chkp.o, rtl-chkp.o. > (GTFILES): Add tree-chkp.c. > * c-family/c.opt (fchkp-check-incomplete-type): New. > (fchkp-zero-input-bounds-for-main): New. > (fchkp-first-field-has-own-bounds): New. > (fchkp-narrow-bounds): New. > (fchkp-narrow-to-innermost-array): New. > (fchkp-optimize): New. > (fchkp-use-fast-string-functions): New. > (fchkp-use-nochk-string-functions): New. > (fchkp-use-static-bounds): New. > (fchkp-use-static-const-bounds): New. > (fchkp-treat-zero-dynamic-size-as-infinite): New. > (fchkp-check-read): New. > (fchkp-check-write): New. > (fchkp-store-bounds): New. > (fchkp-instrument-calls): New. > (fchkp-instrument-marked-only): New. > * cppbuiltin.c (define_builtin_macros_for_compilation_flags): Add > __CHKP__ macro when Pointer Bounds Checker is on. > * passes.def (pass_ipa_chkp_versioning): New. > (pass_before_local_optimization_passes): New. > (pass_chkp_instrumentation_passes): New. > (pass_ipa_chkp_produce_thunks): New. > (pass_local_optimization_passes): New. > (pass_chkp_opt): New. > * toplev.c: include tree-chkp.h. > (compile_file): Add chkp_finish_file call. > * tree-pass.h (make_pass_ipa_chkp_versioning): New. > (make_pass_ipa_chkp_produce_thunks): New. > (make_pass_chkp): New. > (make_pass_chkp_opt): New. > (make_pass_before_local_optimization_passes): New. > (make_pass_chkp_instrumentation_passes): New. > (make_pass_local_optimization_passes): New. > * tree.h (called_as_built_in): New. > * builtins.c (called_as_built_in): Not static anymore. > * passes.c (pass_manager::execute_early_local_passes): Execute > early passes in three steps. > (pass_data_before_local_optimization_passes): New. > (pass_before_local_optimization_passes): New. > (pass_data_chkp_instrumentation_passes): New. > (pass_chkp_instrumentation_passes): New. > (pass_data_local_optimization_passes): New. > (pass_local_optimization_passes): New. > (make_pass_before_local_optimization_passes): New. > (make_pass_chkp_instrumentation_passes): New. > (make_pass_local_optimization_passes): New.