[PATCH, Pointer Bounds Checker 14/x] Pointer Bounds Checker passes

Ilya Enkovich enkovich.gnu@gmail.com
Mon Jun 2 12:44:00 GMT 2014


2014-06-02 15:35 GMT+04:00 Richard Biener <richard.guenther@gmail.com>:
> On Fri, May 30, 2014 at 2:25 PM, Ilya Enkovich <enkovich.gnu@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.

Early local passes is some special case because these passes are
executed separately for new functions. I did not want to get three
special passes instead and therefore made split inside.

If you prefer split pass itself, I suppose pass_early_local_passes may
be replaced with something like pass_build_ssa_passes +
pass_chkp_instrumentation_passes + pass_ipa_chkp_produce_thunks +
pass_local_optimization_passes. execute_early_local_passes would
execute gimple passes lists of pass_build_ssa_passes,
pass_chkp_instrumentation_passes and pass_local_optimization_passes.

I think we cannot have the first stage moved into lowering passes
because it should be executed for newly created functions.

>
> 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.

OK. Will try to remove 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).

This function should call only gimple passes for cfun. Therefore we
cannot call IPA passes here and has to execute each gimple passes list
separately.

Ilya
>
> Richard.
>
>> Bootstrapped and tested on linux-x86_64.
>>
>> Thanks,
>> Ilya
>> --
>> gcc/
>>
>> 2014-05-29  Ilya Enkovich  <ilya.enkovich@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.



More information about the Gcc-patches mailing list