From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 3963 invoked by alias); 2 Jun 2014 15:13:58 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 3951 invoked by uid 89); 2 Jun 2014 15:13:56 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.1 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=ham version=3.3.2 X-HELO: mail-ig0-f174.google.com Received: from mail-ig0-f174.google.com (HELO mail-ig0-f174.google.com) (209.85.213.174) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-SHA encrypted) ESMTPS; Mon, 02 Jun 2014 15:13:55 +0000 Received: by mail-ig0-f174.google.com with SMTP id h3so3457698igd.13 for ; Mon, 02 Jun 2014 08:13:53 -0700 (PDT) MIME-Version: 1.0 X-Received: by 10.50.124.42 with SMTP id mf10mr19992405igb.41.1401722032992; Mon, 02 Jun 2014 08:13:52 -0700 (PDT) Received: by 10.64.31.200 with HTTP; Mon, 2 Jun 2014 08:13:52 -0700 (PDT) In-Reply-To: References: <20140529111140.GC30323@msticlxl57.ims.intel.com> Date: Mon, 02 Jun 2014 15:13:00 -0000 Message-ID: Subject: Re: [PATCH, Pointer Bounds Checker 14/x] Pointer Bounds Checker passes From: Ilya Enkovich To: Richard Biener Cc: GCC Patches Content-Type: text/plain; charset=UTF-8 X-IsSubscribed: yes X-SW-Source: 2014-06/txt/msg00098.txt.bz2 2014-06-02 17:37 GMT+04:00 Richard Biener : > On Mon, Jun 2, 2014 at 2:44 PM, Ilya Enkovich wrote: >> 2014-06-02 15:35 GMT+04:00 Richard Biener : >>> On Fri, May 30, 2014 at 2:25 PM, Ilya Enkovich 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? :) Ilya > > Richard. > >> Ilya >>> >>> Richard. >>> >>>> Bootstrapped and tested on linux-x86_64. >>>> >>>> Thanks, >>>> Ilya >>>> -- >>>> gcc/ >>>> >>>> 2014-05-29 Ilya Enkovich >>>> >>>> * 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.