gcc/ChangeLog:
2019-03-27 Martin Liska <[email protected]>
* dbgcnt.c (dbg_cnt_set_limit_by_name): Add new argument
aux_base and filter based on aux_base_name.
(dbg_cnt_process_single_pair): Parse aux_base.
* doc/invoke.texi: Document new extended format.
gcc/testsuite/ChangeLog:
2019-03-27 Martin Liska <[email protected]>
* gcc.dg/dbg-cnt-1.c: New test.
---
gcc/dbgcnt.c | 11 ++++++++---
gcc/doc/invoke.texi | 8 ++++++--
gcc/testsuite/gcc.dg/dbg-cnt-1.c | 6 ++++++
3 files changed, 20 insertions(+), 5 deletions(-)
create mode 100644 gcc/testsuite/gcc.dg/dbg-cnt-1.c
diff --git a/gcc/dbgcnt.c b/gcc/dbgcnt.c
index e2f65f449e5..5a7c9a8bf6e 100644
--- a/gcc/dbgcnt.c
+++ b/gcc/dbgcnt.c
@@ -24,6 +24,7 @@ See dbgcnt.def for usage information. */
#include "coretypes.h"
#include "diagnostic-core.h"
#include "dumpfile.h"
+#include "options.h"
#include "dbgcnt.h"
@@ -87,8 +88,11 @@ dbg_cnt_set_limit_by_index (enum debug_counter index, int low, int high)
}
static bool
-dbg_cnt_set_limit_by_name (const char *name, int low, int high)
+dbg_cnt_set_limit_by_name (const char *name, int low, int high, char *aux_base)
{
+ if (aux_base != NULL && strcmp (aux_base_name, aux_base) != 0)
+ return true;
+
if (high < low)
{
error ("%<-fdbg-cnt=%s:%d:%d%> has smaller upper limit than the lower",
@@ -123,7 +127,7 @@ dbg_cnt_set_limit_by_name (const char *name, int low, int high)
}
-/* Process a single "name:value" pair.
+/* Process a single "name:value1[:value2][:aux_base]" tuple.
Returns NULL if there's no valid pair is found.
Otherwise returns a pointer to the end of the pair. */
@@ -134,6 +138,7 @@ dbg_cnt_process_single_pair (const char *arg)
char *name = strtok (str, ":");
char *value1 = strtok (NULL, ":");
char *value2 = strtok (NULL, ":");
+ char *aux_base = strtok (NULL, ":");
int high, low;
@@ -151,7 +156,7 @@ dbg_cnt_process_single_pair (const char *arg)
high = strtol (value2, NULL, 10);
}
- return dbg_cnt_set_limit_by_name (name, low, high);
+ return dbg_cnt_set_limit_by_name (name, low, high, aux_base);
}
void
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index 4735b0ab673..d2934edd36d 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -15386,10 +15386,14 @@ Print the name and the counter upper bound for all debug counters.
@item -fdbg-cnt=@var{counter-value-list}
@opindex fdbg-cnt
Set the internal debug counter lower and upper bound. @var{counter-value-list}
-is a comma-separated list of @var{name}:@var{lower_bound}:@var{upper_bound}
+is a comma-separated list of
+@var{name}:@var{lower_bound}:@var{upper_bound}:@var{aux_base_name}
tuples which sets the lower and the upper bound of each debug
counter @var{name}. The @var{lower_bound} is optional and is zero
-initialized if not set.
+initialized if not set. When @var{aux_base_name} is set, the debug counter
+is only applied to source files that match by @option{-auxbase}.
+The @var{aux_base_name} is also optional.
+
All debug counters have the initial upper bound of @code{UINT_MAX};
thus @code{dbg_cnt} returns true always unless the upper bound
is set by this option.
diff --git a/gcc/testsuite/gcc.dg/dbg-cnt-1.c b/gcc/testsuite/gcc.dg/dbg-cnt-1.c
new file mode 100644
index 00000000000..2afd2428eb9
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/dbg-cnt-1.c
@@ -0,0 +1,6 @@
+/* { dg-do compile } */
+/* { dg-options "-fdbg-cnt=vect_loop:1:2,vect_slp:2,merged_ipa_icf:7:8:dbg-cnt-1" } */
+/* { dg-additional-options "-mavx2" { target { i?86-*-* x86_64-*-* } } } */
+/* { dg-prune-output "dbg_cnt 'vect_loop' set to 1-2" } */
+/* { dg-prune-output "dbg_cnt 'vect_slp' set to 0-2" } */
+/* { dg-prune-output "dbg_cnt 'merged_ipa_icf' set to 7-8" } */