* [PATCH] ASan phase place change
@ 2015-02-20 12:08 Marat Zakirov
2015-02-20 13:03 ` Jakub Jelinek
0 siblings, 1 reply; 6+ messages in thread
From: Marat Zakirov @ 2015-02-20 12:08 UTC (permalink / raw)
To: gcc-patches; +Cc: Jakub Jelinek, Kostya Serebryany, Yury Gribov
[-- Attachment #1: Type: text/plain, Size: 257 bytes --]
Hi all!
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.
Performance data attached.
--Marat
[-- Attachment #2: perf.txt --]
[-- Type: text/plain, Size: 1549 bytes --]
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%
[-- Attachment #3: mavdt-153_3.diff --]
[-- Type: text/x-patch, Size: 5148 bytes --]
gcc/ChangeLog:
2015-02-20 Marat Zakirov <m.zakirov@samsung.com>
* 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 <m.zakirov@samsung.com>
* 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);
-}
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] ASan phase place change
2015-02-20 12:08 [PATCH] ASan phase place change Marat Zakirov
@ 2015-02-20 13:03 ` Jakub Jelinek
2015-02-24 15:10 ` Marat Zakirov
0 siblings, 1 reply; 6+ messages in thread
From: Jakub Jelinek @ 2015-02-20 13:03 UTC (permalink / raw)
To: Marat Zakirov; +Cc: gcc-patches, Kostya Serebryany, Yury Gribov
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
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] ASan phase place change
2015-02-20 13:03 ` Jakub Jelinek
@ 2015-02-24 15:10 ` Marat Zakirov
2015-03-03 7:36 ` [PING][PATCH] " Marat Zakirov
0 siblings, 1 reply; 6+ messages in thread
From: Marat Zakirov @ 2015-02-24 15:10 UTC (permalink / raw)
To: Jakub Jelinek; +Cc: gcc-patches, Kostya Serebryany, Yury Gribov
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
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PING][PATCH] ASan phase place change
2015-02-24 15:10 ` Marat Zakirov
@ 2015-03-03 7:36 ` Marat Zakirov
2015-03-11 7:43 ` [PINGv2][PATCH] " Marat Zakirov
0 siblings, 1 reply; 6+ messages in thread
From: Marat Zakirov @ 2015-03-03 7:36 UTC (permalink / raw)
To: gcc-patches; +Cc: Jakub Jelinek, Kostya Serebryany, Yury Gribov
[-- Attachment #1: Type: text/plain, Size: 1009 bytes --]
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
[-- Attachment #2: mavdt-153_3.diff --]
[-- Type: text/x-patch, Size: 5148 bytes --]
gcc/ChangeLog:
2015-02-20 Marat Zakirov <m.zakirov@samsung.com>
* 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 <m.zakirov@samsung.com>
* 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);
-}
[-- Attachment #3: perf.txt --]
[-- Type: text/plain, Size: 1549 bytes --]
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%
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PINGv2][PATCH] ASan phase place change
2015-03-03 7:36 ` [PING][PATCH] " Marat Zakirov
@ 2015-03-11 7:43 ` Marat Zakirov
2015-03-11 7:46 ` Yury Gribov
0 siblings, 1 reply; 6+ messages in thread
From: Marat Zakirov @ 2015-03-11 7:43 UTC (permalink / raw)
To: gcc-patches; +Cc: Jakub Jelinek, Kostya Serebryany, Yury Gribov
[-- Attachment #1: Type: text/plain, Size: 1084 bytes --]
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
>
[-- Attachment #2: mavdt-153_3.diff --]
[-- Type: text/x-patch, Size: 5148 bytes --]
gcc/ChangeLog:
2015-02-20 Marat Zakirov <m.zakirov@samsung.com>
* 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 <m.zakirov@samsung.com>
* 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);
-}
[-- Attachment #3: perf.txt --]
[-- Type: text/plain, Size: 1549 bytes --]
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%
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PINGv2][PATCH] ASan phase place change
2015-03-11 7:43 ` [PINGv2][PATCH] " Marat Zakirov
@ 2015-03-11 7:46 ` Yury Gribov
0 siblings, 0 replies; 6+ messages in thread
From: Yury Gribov @ 2015-03-11 7:46 UTC (permalink / raw)
To: Marat Zakirov, gcc-patches; +Cc: Jakub Jelinek, Kostya Serebryany
On 03/11/2015 10:43 AM, Marat Zakirov wrote:
>
> 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.
I think it would help if we could analyze where performance improvements
are coming from. You can check Max's presentation for inspiration
(http://www.youtube.com/watch?v=qTDBHJsWDHw).
-Y
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2015-03-11 7:46 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-02-20 12:08 [PATCH] ASan phase place change Marat Zakirov
2015-02-20 13:03 ` Jakub Jelinek
2015-02-24 15:10 ` Marat Zakirov
2015-03-03 7:36 ` [PING][PATCH] " Marat Zakirov
2015-03-11 7:43 ` [PINGv2][PATCH] " Marat Zakirov
2015-03-11 7:46 ` Yury Gribov
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).