From patchwork Wed Mar 11 07:43:34 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marat Zakirov X-Patchwork-Id: 448835 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id B2AE814012F for ; Wed, 11 Mar 2015 18:43:50 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=pass reason="1024-bit key; unprotected key" header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b=T6aChXDa; dkim-adsp=none (unprotected policy); dkim-atps=neutral DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender :message-id:date:from:mime-version:to:cc:subject:references :in-reply-to:content-type; q=dns; s=default; b=if+a8piI/If6xnnE4 9zlVLC4G6kuXo9ltgTSLFElpOeFlyvgAYAC6+3KTkypdVmJBX1DiBBl2KqxfyEUB RpEE4xhi+qRflORz2rr3j3q6p6FMq8aGCatbLA5tO0DhtW05vyU5bsXo0jFuESKn 0eMW4Z+tx0sizdZLKlwox4wEkg= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender :message-id:date:from:mime-version:to:cc:subject:references :in-reply-to:content-type; s=default; bh=DytqbSStE7R4BiO0mHgmAeU K6kE=; b=T6aChXDapRzvMG+fdJ+34lKQr74L/yMiWYns/4VJFNVxho5+CPj+zYl 42UdpkHl6cJ4rxFO0I/Q/ZZ+4ioJnDdAhIRQgQa7wS25s7a8CUy0S082AVOU8eUp W6SBYgUR1ZUpQfn2AWNA7J0hamtcDnZAhgqVF0rpWTd7ntGGGl4E= Received: (qmail 43124 invoked by alias); 11 Mar 2015 07:43:42 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 43113 invoked by uid 89); 11 Mar 2015 07:43:41 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.1 required=5.0 tests=AWL, BAYES_00, SPF_HELO_PASS, T_RP_MATCHES_RCVD autolearn=ham version=3.3.2 X-HELO: mailout1.w1.samsung.com Received: from mailout1.w1.samsung.com (HELO mailout1.w1.samsung.com) (210.118.77.11) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (DES-CBC3-SHA encrypted) ESMTPS; Wed, 11 Mar 2015 07:43:39 +0000 Received: from eucpsbgm2.samsung.com (unknown [203.254.199.245]) by mailout1.w1.samsung.com (Oracle Communications Messaging Server 7u4-24.01(7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTP id <0NL100MTJEZHJR70@mailout1.w1.samsung.com> for gcc-patches@gcc.gnu.org; Wed, 11 Mar 2015 07:47:41 +0000 (GMT) Received: from eusync4.samsung.com ( [203.254.199.214]) by eucpsbgm2.samsung.com (EUCPMTA) with SMTP id 6B.99.26295.191FFF45; Wed, 11 Mar 2015 07:41:05 +0000 (GMT) Received: from [106.109.129.103] by eusync4.samsung.com (Oracle Communications Messaging Server 7u4-24.01(7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTPA id <0NL1002K0ESM8240@eusync4.samsung.com>; Wed, 11 Mar 2015 07:43:35 +0000 (GMT) Message-id: <54FFF226.1070203@samsung.com> Date: Wed, 11 Mar 2015 10:43:34 +0300 From: Marat Zakirov User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.5.0 MIME-version: 1.0 To: "gcc-patches@gcc.gnu.org" Cc: Jakub Jelinek , Kostya Serebryany , Yury Gribov Subject: [PINGv2][PATCH] ASan phase place change References: <54E721B7.8000109@samsung.com> <20150220120745.GX1746@tucnak.redhat.com> <54EC736D.20600@samsung.com> <54F56472.3000602@samsung.com> In-reply-to: <54F56472.3000602@samsung.com> Content-type: multipart/mixed; boundary=------------040707060907010702020005 On 03/03/2015 10:36 AM, Marat Zakirov wrote: > > On 02/24/2015 03:49 PM, Marat Zakirov wrote: >> >> On 02/20/2015 03:07 PM, Jakub Jelinek wrote: >>> On Fri, Feb 20, 2015 at 02:59:51PM +0300, Marat Zakirov wrote: >>>> Here is simple patch that moves asan phase just behind sanopt for all >>>> O0/O1/O2/O3 modes which gives +7% on x86 SPEC2006 (ref dataset). >>>> Regression testing and sanitized GCC bootstrapping were >>>> successfully done. >>> This isn't a regression, so I think it isn't appropriate for stage 4. >>> >>> I bet the difference is mainly vectorization. I believe the right >>> change is to teach the vectorizer about the ASAN_CHECK internal call >>> instead. >>> >>> Jakub >>> >> Jakub, >> >> I reproduced +28% for 433.milk with "-fno-tree-vectorize" on ref >> data. Are there some other GCC vectorization options? And why do you >> think that performance difference caused only by vectorization? As an >> example In llvm loop hoisting suffers from early asan phase >> http://lists.cs.uiuc.edu/pipermail/llvmdev/2011-December/046332.html. >> >> --Marat > PATCH REF PERCENT 400.perlbench 1319 1334 1.14% 401.bzip2 700 718 2.57% 403.gcc 586 618 5.46% 429.mcf 435 521 19.77% 445.gobmk 720 750 4.17% 456.hmmer 815 816 0.12% 458.sjeng 890 919 3.26% 462.libquantum 327 347 6.12% 464.h264ref 1353 1600 18.26% 471.omnetpp 738 730 -1.08% 473.astar 536 544 1.49% 483.xalancbmk 544 615 13.05% 410.bwaves 1939 1938 -0.05% 416.gamess 3201 3202 0.03% 433.milc 419 540 28.88% 434.zeusmp 1641 1641 0.00% 435.gromacs 923 938 1.63% 436.cactusADM 2970 2973 0.10% 437.leslie3d 1564 1588 1.53% 444.namd 484 490 1.24% 447.dealII 591 676 14.38% 450.soplex 320 348 8.75% 453.povray 322 328 1.86% 459.GemsFDTD 1921 1950 1.51% 465.tonto 1621 1641 1.23% 470.lbm 252 337 33.73% 482.sphinx3 656 943 43.75% GEOMEAN 7.07% gcc/ChangeLog: 2015-02-20 Marat Zakirov * asan.c (make_pass_asan_O0): Pass remove. * passes.def: Change place for ASan pass. * tree-pass.h: Passes remove. * tsan.c (make_pass_tsan_O0): Pass remove. gcc/testsuite/ChangeLog: 2015-02-20 Marat Zakirov * c-c++-common/asan/inc.c: Fix option. diff --git a/gcc/asan.c b/gcc/asan.c index b7c2b11..001d79e 100644 --- a/gcc/asan.c +++ b/gcc/asan.c @@ -2796,40 +2796,4 @@ make_pass_asan (gcc::context *ctxt) return new pass_asan (ctxt); } -namespace { - -const pass_data pass_data_asan_O0 = -{ - GIMPLE_PASS, /* type */ - "asan0", /* name */ - OPTGROUP_NONE, /* optinfo_flags */ - TV_NONE, /* tv_id */ - ( PROP_ssa | PROP_cfg | PROP_gimple_leh ), /* properties_required */ - 0, /* properties_provided */ - 0, /* properties_destroyed */ - 0, /* todo_flags_start */ - TODO_update_ssa, /* todo_flags_finish */ -}; - -class pass_asan_O0 : public gimple_opt_pass -{ -public: - pass_asan_O0 (gcc::context *ctxt) - : gimple_opt_pass (pass_data_asan_O0, ctxt) - {} - - /* opt_pass methods: */ - virtual bool gate (function *) { return !optimize && gate_asan (); } - virtual unsigned int execute (function *) { return asan_instrument (); } - -}; // class pass_asan_O0 - -} // anon namespace - -gimple_opt_pass * -make_pass_asan_O0 (gcc::context *ctxt) -{ - return new pass_asan_O0 (ctxt); -} - #include "gt-asan.h" diff --git a/gcc/passes.def b/gcc/passes.def index 2bc5dcd..398d8dc 100644 --- a/gcc/passes.def +++ b/gcc/passes.def @@ -214,8 +214,6 @@ along with GCC; see the file COPYING3. If not see NEXT_PASS (pass_split_crit_edges); NEXT_PASS (pass_pre); NEXT_PASS (pass_sink_code); - NEXT_PASS (pass_asan); - NEXT_PASS (pass_tsan); /* Pass group that runs when 1) enabled, 2) there are loops in the function. Make sure to run pass_fix_loops before to discover/remove loops before running the gate function @@ -344,8 +342,8 @@ along with GCC; see the file COPYING3. If not see NEXT_PASS (pass_vtable_verify); NEXT_PASS (pass_lower_vector); NEXT_PASS (pass_lower_complex_O0); - NEXT_PASS (pass_asan_O0); - NEXT_PASS (pass_tsan_O0); + NEXT_PASS (pass_asan); + NEXT_PASS (pass_tsan); NEXT_PASS (pass_sanopt); NEXT_PASS (pass_cleanup_eh); NEXT_PASS (pass_lower_resx); diff --git a/gcc/testsuite/c-c++-common/asan/inc.c b/gcc/testsuite/c-c++-common/asan/inc.c index 36cc3d8..8c38150 100644 --- a/gcc/testsuite/c-c++-common/asan/inc.c +++ b/gcc/testsuite/c-c++-common/asan/inc.c @@ -1,4 +1,4 @@ -/* { dg-options "-fdump-tree-asan0" } */ +/* { dg-options "-fdump-tree-asan" } */ /* { dg-do compile } */ /* { dg-skip-if "" { *-*-* } { "*" } { "-O0" } } */ @@ -16,6 +16,6 @@ main () return 0; } -/* { dg-final { scan-tree-dump-times "ASAN_" 1 "asan0" } } */ -/* { dg-final { scan-tree-dump "ASAN_CHECK \\(.*, 4\\);" "asan0" } } */ -/* { dg-final { cleanup-tree-dump "asan0" } } */ +/* { dg-final { scan-tree-dump-times "ASAN_" 1 "asan" } } */ +/* { dg-final { scan-tree-dump "ASAN_CHECK \\(.*, 4\\);" "asan" } } */ +/* { dg-final { cleanup-tree-dump "asan" } } */ diff --git a/gcc/tree-pass.h b/gcc/tree-pass.h index b59ae7a..50cbf85 100644 --- a/gcc/tree-pass.h +++ b/gcc/tree-pass.h @@ -339,9 +339,7 @@ extern simple_ipa_opt_pass *make_pass_ipa_chkp_produce_thunks (gcc::context *ctx extern gimple_opt_pass *make_pass_chkp (gcc::context *ctxt); extern gimple_opt_pass *make_pass_chkp_opt (gcc::context *ctxt); extern gimple_opt_pass *make_pass_asan (gcc::context *ctxt); -extern gimple_opt_pass *make_pass_asan_O0 (gcc::context *ctxt); extern gimple_opt_pass *make_pass_tsan (gcc::context *ctxt); -extern gimple_opt_pass *make_pass_tsan_O0 (gcc::context *ctxt); extern gimple_opt_pass *make_pass_lower_cf (gcc::context *ctxt); extern gimple_opt_pass *make_pass_refactor_eh (gcc::context *ctxt); extern gimple_opt_pass *make_pass_lower_eh (gcc::context *ctxt); diff --git a/gcc/tsan.c b/gcc/tsan.c index ae89d5f..a9dca1f 100644 --- a/gcc/tsan.c +++ b/gcc/tsan.c @@ -882,44 +882,3 @@ make_pass_tsan (gcc::context *ctxt) return new pass_tsan (ctxt); } -namespace { - -const pass_data pass_data_tsan_O0 = -{ - GIMPLE_PASS, /* type */ - "tsan0", /* name */ - OPTGROUP_NONE, /* optinfo_flags */ - TV_NONE, /* tv_id */ - ( PROP_ssa | PROP_cfg ), /* properties_required */ - 0, /* properties_provided */ - 0, /* properties_destroyed */ - 0, /* todo_flags_start */ - TODO_update_ssa, /* todo_flags_finish */ -}; - -class pass_tsan_O0 : public gimple_opt_pass -{ -public: - pass_tsan_O0 (gcc::context *ctxt) - : gimple_opt_pass (pass_data_tsan_O0, ctxt) - {} - - /* opt_pass methods: */ - virtual bool gate (function *) - { - return ((flag_sanitize & SANITIZE_THREAD) != 0 && !optimize - && !lookup_attribute ("no_sanitize_thread", - DECL_ATTRIBUTES (current_function_decl))); - } - - virtual unsigned int execute (function *) { return tsan_pass (); } - -}; // class pass_tsan_O0 - -} // anon namespace - -gimple_opt_pass * -make_pass_tsan_O0 (gcc::context *ctxt) -{ - return new pass_tsan_O0 (ctxt); -}