On Mon, Jun 2, 2014 at 5:13 PM, Ilya Enkovich <enkovich....@gmail.com> wrote:
> 2014-06-02 17:37 GMT+04:00 Richard Biener <richard.guent...@gmail.com>:
>> On Mon, Jun 2, 2014 at 2:44 PM, Ilya Enkovich <enkovich....@gmail.com> wrote:
>>> 2014-06-02 15:35 GMT+04:00 Richard Biener <richard.guent...@gmail.com>:
>>>> 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.
>>>
>>> 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.
>>
>> Yeah, but all passes are already executed via execute_early_local_passes,
>> so it would be only an implementation detail.
>>
>>> 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.
>>
>> Well, let's defer that then.
>>
>>>>
>>>> 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.
>>
>> Ok, given a different split this would then become somewhat more sane
>> anyway.
>
> Sorry, didn't catch it. Should I try a different split or defer it? :)

Please try a different split.  Defer moving the first part to the
lowering stage.

Richard.

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

Reply via email to