This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH 1/2] [graphite] add more dumps on data dependence graph


Hi Sebastian,

On Fri, 25 Dec 2015, Sebastian Pop wrote:
>> on December 17th 2015, my nightly bootstrap (on i386-unknown-freebsd10.1,
>> but I don't think this is material) started to fail as follows:
>>
>>   /scratch/tmp/gerald/gcc-HEAD/gcc/graphite-scop-detection.c:1892:17:
>>   note: in instantiation of member function 'vec<dr_info, va_heap, vl_ptr>::safe_push'
>>   requested here
>>       scop->drs.safe_push (dr_info (dr, pbb));
> I do not see what the error is.  Do you happen to have
> the few lines with the error before this note?

thanks for the quick response.  My Internet (non-)connectivity the 
last two weeks did not allow me to debug this further.  Now I'm back 
to normal, and here is what I found:

When I remove the isl package, GCC bootstraps just fine.  As soon as 
I add the package again, things fail again.

>From the configure log:

  checking for isl 0.15 (or deprecated 0.14)... yes
  checking Checking for isl_options_set_schedule_serialize_sccs... no

And here is the actual failure, which is different from my original
report (probably due to forcing serial building).  Invocation:

  c++ -std=gnu++98 -fno-PIE -c -g -DIN_GCC -fno-strict-aliasing 
  -fno-exceptions -fno-rtti -fasynchronous-unwind-tables -W -Wall 
  -Wno-narrowing -Wwrite-string s -Wcast-qual -Wno-format 
  -Wmissing-format-attribute -Woverloaded-virtual -pedantic -Wno-long-long 
  -Wno-variadic-macros -Wno-overlength-strings -fno-common -DHAVE_CONFIG_H 
  :
  -o graphite-dependences.o -MT graphite-dependences.o -MMD -MP -MF 
  ./.deps/graphite-dependences.TPo /scratch/tmp/gerald/gcc-HEAD/gcc/graphite-dependences.c

Error:

  /scratch/tmp/gerald/gcc-HEAD/gcc/graphite-dependences.c:240:3: error: no matching function for call to 'isl_union_map_foreach_map'
  isl_union_map_foreach_map (x, max_number_of_out_dimensions, (void *) &max);
  ^~~~~~~~~~~~~~~~~~~~~~~~~
  /home/gerald/10-i386/include/isl/union_map.h:204:10: note: candidate 
  function not viable: no known conversion from 'int (isl_map *, void *)' 
  to 'isl_stat (*)(isl_map *, void *)' for 2nd argument 
  isl_stat isl_union_map_foreach_map(__isl_keep isl_union_map *umap,


At first I thought this is related to FreeBSD now using clang as the
system compiler, but the same happens using a current GCC 6 build.

Then I started digging into this, wondering why apparently it had
as the return type for the second argument as opposed to "isl_stat".

My .../include/isl/union_map.h has

  isl_stat isl_union_map_foreach_map(__isl_keep isl_union_map *umap,
        isl_stat (*fn)(__isl_take isl_map *map, void *user), void *user);

whereas graphite_dependences.c has

  static isl_stat
  max_number_of_out_dimensions (__isl_take isl_map *map, void *user)

so everything should be fine, shouldn't it?

Turns out gcc/graphite.h is causing all this:

  #ifdef HAVE_ISL_OPTIONS_SET_SCHEDULE_SERIALIZE_SCCS
  /* isl 0.15 or later.  */
  #include <isl/schedule_node.h>

  #else
  /* isl 0.14 or 0.13.  */
  # define isl_stat int
  # define isl_stat_ok 0
  #endif

So, despite actually _having_ type isl_stat we #define isl_stat to int 
and do so after having all the isl/ include files use the proper type.

Digging deeper, there appear to be two issues:

 1. Instead of a feature test (for isl_stat) we use a version check
    based on another feature test (isl_options_set_schedule_serialize_sccs).

 2. That feature test for isl_options_set_schedule_serialize_sccs does
    not work properly.

It would be great could you look into issue 1 in any case, but for the 
time being let's focus on issue 2.  Here is what gcc/config.log shows:

  configure:28943: checking Checking for isl_options_set_schedule_serialize_sccs
  configure:28956: /home/gerald/gcc-ref10-i386/bin/g++ -std=gnu++98 -o conftest -g
    -static-libstdc++ -static-libgcc  conftest.cpp  -lisl 
    -L/home/gerald/10-i386 /lib -lmpc -lmpfr -lgmp >&5
  conftest.cpp:258:26: fatal error: isl/schedule.h: No such file or directory
     #include <isl/schedule.h>
  compilation terminated.
  configure:28956: $? = 1

Note the -L option pointing to /home/gerald/10-i386 (where I have my
local packages for this kind of testing), whereas the associated -I 
option is missing.  And indeed, that's it:  We use GMPLIB in that
configure test, but not GMPINC.

(For MPFR and MPC, the include and library paths for GMP are always
included as well, by the way.  It is only necessary to use --with-gmp=
if one has a non-standard tree structure.)

With the patch allow, my bootstraps in that environment succeed again,
so I went ahead and applied it.

Gerald


2016-01-09  Gerald Pfeifer  <gerald@pfeifer.com>

	* configure.ac (isl_options_set_schedule_serialize_sccs): Also 
	use GMPINC.
	* configure: Regenerate.
 
Index: gcc/configure.ac
===================================================================
--- gcc/configure.ac	(revision 232188)
+++ gcc/configure.ac	(working copy)
@@ -5918,7 +5918,7 @@
 # it's new in isl 0.15.
 if test "x${ISLLIBS}" != "x" ; then
   saved_CXXFLAGS="$CXXFLAGS"
-  CXXFLAGS="$CXXFLAGS $ISLINC"
+  CXXFLAGS="$CXXFLAGS $ISLINC $GMPINC"
   saved_LIBS="$LIBS"
   LIBS="$LIBS $ISLLIBS $GMPLIBS"
 


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]