[Bug tree-optimization/56145] [4.8/4.9 Regression] Use of too much optimizations -O2 -ffast-math -floop-parallelize-all

rguenth at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Fri Oct 25 12:30:00 GMT 2013


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56145

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Target|x86_64-w64-mingw32          |
           Priority|P3                          |P2
                 CC|                            |grosser at gcc dot gnu.org

--- Comment #10 from Richard Biener <rguenth at gcc dot gnu.org> ---
Reduced testcase, fails on trunk and the 4.8 branch:

struct frame {
    int stereo;
};
struct gr_info_s {
    unsigned part2_3_length;
};
struct III_sideinfo {
    unsigned main_data_begin;
    struct {
        struct gr_info_s gr[2];
    } ch[2];
};
typedef struct mpstr_tag {
    struct frame fr;
    struct III_sideinfo sideinfo;
} MPSTR, *PMPSTR;
int decode_layer3_sideinfo(PMPSTR mp) 
{
  struct frame *fr = &mp->fr;
  int stereo = fr->stereo;
  int granules;
  int ch, gr, databits = 0;
  for (gr = 0; gr < granules; ++gr) {
      for (ch = 0; ch < stereo; ++ch) {
          struct gr_info_s *gr_infos = &(mp->sideinfo.ch[ch].gr[gr]);
          databits += gr_infos->part2_3_length;
      }
  }
  return databits - 8 * mp->sideinfo.main_data_begin;
}


Program received signal SIGSEGV, Segmentation fault.
0x000000000120c3b5 in subtract_commutative_associative_deps (scop=0x1de6ec0, 
    pbbs=..., original=0x1e22200, must_raw=0x7fffffffd5f8, 
    may_raw=0x7fffffffd5f0, must_raw_no_source=0x0, may_raw_no_source=0x0, 
    must_war=0x7fffffffd5e8, may_war=0x7fffffffd5e0, must_war_no_source=0x0, 
    may_war_no_source=0x0, must_waw=0x7fffffffd5d8, may_waw=0x7fffffffd5d0, 
    must_waw_no_source=0x0, may_waw_no_source=0x0)
    at /space/rguenther/src/svn/trunk/gcc/graphite-dependences.c:424
424                                                          
x_must_raw_no_source);
(gdb) l
419             gcc_assert (res == 0);
420
421             *must_raw = isl_union_map_subtract (*must_raw, x_must_raw);
422             *may_raw = isl_union_map_subtract (*may_raw, x_may_raw);
423             *must_raw_no_source = isl_union_map_subtract
(*must_raw_no_source,
424                                                          
x_must_raw_no_source);
425             *may_raw_no_source = isl_union_map_subtract
(*may_raw_no_source,
426                                                         
x_may_raw_no_source);
427             *must_war = isl_union_map_subtract (*must_war, x_must_war);
428             *may_war = isl_union_map_subtract (*may_war, x_may_war);
(gdb) p must_raw_no_source
$2 = (isl_union_map **) 0x0

which means that

        res = isl_union_map_compute_flow (isl_union_map_copy (r),
                                          isl_union_map_copy (must_w),
                                          isl_union_map_copy (may_w),
                                          isl_union_map_copy (original),
                                          &x_must_raw, &x_may_raw,
                                          &x_must_raw_no_source,
                                          &x_may_raw_no_source);
        gcc_assert (res == 0);

doesn't compute it but returns no error either.  Tobias?  maybe
that's valid and we simply should not do anything with that set then?



More information about the Gcc-bugs mailing list