On 6/26/07, Steve Ellcey <[EMAIL PROTECTED]> wrote:
After the dataflow merge (and after doing a couple of other patches that
were needed just to boostrap GCC on IA64 HP-UX), I am still getting some
failures in the GCC testsuite and am hoping for some advise / help on
figuring out what is going on.
A bunch of tests like the following one:
void __attribute__ ((__noinline__)) foo (int xf) {}
int main() { foo (1); return 0; }
Are failing because the generate the following warning:
$ obj_gcc/gcc/cc1 -quiet -O2 x.c
x.c:2: warning: inline function 'foo' given attribute noinline
Now, the problem here is, of course, that foo was no declared to be
inline and the warning should not be happening. If I recompile the GCC
file c-decl.c with -O2 -fno-tree-dominator-opts (instead of just -O2)
then the resulting GCC will not generate the warning message. But so
far I haven't been able to look at the tree dump files and see where
things are going wrong. It doesn't help that the dominator pass gets
run 3 times and I am not sure which one is causing the problem.
Unfortunately, I am only seeing this on IA64 HP-UX. It does not happen
on IA64 Linux.
Does anyone have any advice / ideas / recommendations on how to debug
this problem?
Steve Ellcey
[EMAIL PROTECTED]
If you want to find out exactl which invocation of dominator pass
is causing the problem,
I recommend adding a new dbg_cnt, something like (untested):
diff -r d856dc0baad4 gcc/dbgcnt.def
--- a/gcc/dbgcnt.def Wed Jun 27 01:21:13 2007 +0000
+++ b/gcc/dbgcnt.def Tue Jun 26 21:17:55 2007 -0700
@@ -84,3 +84,5 @@ DEBUG_COUNTER (tail_call)
DEBUG_COUNTER (tail_call)
DEBUG_COUNTER (global_alloc_at_func)
DEBUG_COUNTER (global_alloc_at_reg)
+DEBUG_COUNTER (uncprop_at_func)
+DEBUG_COUNTER (dominator_at_func)
diff -r d856dc0baad4 gcc/tree-ssa-dom.c
--- a/gcc/tree-ssa-dom.c Wed Jun 27 01:21:13 2007 +0000
+++ b/gcc/tree-ssa-dom.c Tue Jun 26 21:18:26 2007 -0700
@@ -44,6 +44,7 @@ Boston, MA 02110-1301, USA. */
#include "tree-ssa-propagate.h"
#include "langhooks.h"
#include "params.h"
+#include "dbgcnt.h"
/* This file implements optimizations on the dominator tree. */
@@ -365,7 +366,7 @@ static bool
static bool
gate_dominator (void)
{
- return flag_tree_dom != 0;
+ return flag_tree_dom != 0 && dbg_cnt (dominator_at_func);
}
struct tree_opt_pass pass_dominator =
diff -r d856dc0baad4 gcc/tree-ssa-uncprop.c
--- a/gcc/tree-ssa-uncprop.c Wed Jun 27 01:21:13 2007 +0000
+++ b/gcc/tree-ssa-uncprop.c Tue Jun 26 21:18:35 2007 -0700
@@ -40,6 +40,7 @@ Boston, MA 02110-1301, USA. */
#include "tree-pass.h"
#include "tree-ssa-propagate.h"
#include "langhooks.h"
+#include "dbgcnt.h"
/* The basic structure describing an equivalency created by traversing
an edge. Traversing the edge effectively means that we can assume
@@ -604,7 +605,7 @@ static bool
static bool
gate_uncprop (void)
{
- return flag_tree_dom != 0;
+ return flag_tree_dom != 0 && dbg_cnt (uncprop_at_func);
}
struct tree_opt_pass pass_uncprop =
This will at least allow you to fairly quickly find which invocation of the pass
is causing the problem, by doing a binary search on "n"
by adding the following extra flag to the compilation line:
-fdbg-cnt=uncprop_at_func:n
or
-fdbg-cnt=dominator_at_func:n
Of course, once you narrowed it down to that level,
you'll most likely still need to narrow it down further
but you'll have a better chance (you may want to add
another more fine grained dbgcnt for that).
--
#pragma ident "Seongbae Park, compiler, http://seongbae.blogspot.com"