[Bug fortran/90539] [10 Regression] 481.wrf slowdown by 25% on Intel Kaby with -Ofast -march=native starting with r271377

marxin at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Wed May 22 11:07:00 GMT 2019


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90539

--- Comment #17 from Martin Liška <marxin at gcc dot gnu.org> ---
(In reply to Thomas Koenig from comment #16)
> Hi Martin,
> 
> Is this for the slowdown or for the wrong-code issue?

It's the wrong code for cam4_r benchmark.

> 
> To get another view, from a gdb seesion of the compiler:
> 
> call debug(expr)
> call debug(fsym)

(gdb) p debug(expr)
nf90_put_var_1d_eightbytereal:values(FULL) (REAL 8)
$3 = void
(gdb) p debug(fsym)
|| symbol: '_formal_107'  
  type spec : (REAL 8)
  attributes: (VARIABLE  DIMENSION DUMMY)
  Array spec:(0 [0])
$4 = void


> 
> a look at expr->symtree->n.sym (I think call debug(expr->symtree->n.sym)
> will also work,

(gdb) call debug(expr->symtree->n.sym)
|| symbol: 'values'       
  type spec : (REAL 8)
  attributes: (VARIABLE  DIMENSION DUMMY(IN))
  Array spec:(1 [0] AS_ASSUMED_SHAPE 1 () )


> 
> a look at expr->ref (follow a few pointers)
> 

(gdb) p *expr->ref
$8 = {
  type = REF_ARRAY, 
  u = {
    ar = {
      type = AR_FULL, 
      dimen = 1, 
      codimen = 0, 
      in_allocate = false, 
      team = 0x0, 
      stat = 0x0, 
      where = {
        nextc = 0x0, 
        lb = 0x0
      }, 
      as = 0x27d7ee0, 
      c_where = {{
          nextc = 0x0, 
          lb = 0x0
        } <repeats 15 times>}, 
      start = {0x0 <repeats 15 times>}, 
      end = {0x0 <repeats 15 times>}, 
      stride = {0x0 <repeats 15 times>}, 
      dimen_type = {DIMEN_RANGE, 0 <repeats 14 times>}
    }, 
    c = {
      component = 0x100000001, 
      sym = 0x0
    }, 
    ss = {
      start = 0x100000001, 
      end = 0x0, 
      length = 0x0
    }, 
    i = INQUIRY_IM
  }, 
  next = 0x0
}

> a look at fsym->as (also follow non-zero pointers).

(gdb) p *fsym->as 
$9 = {
  rank = 0, 
  corank = 0, 
  type = AS_ASSUMED_SIZE, 
  cotype = 0, 
  lower = {0x0 <repeats 15 times>}, 
  upper = {0x0 <repeats 15 times>}, 
  cray_pointee = false, 
  cp_was_assumed = false, 
  resolved = false
}

> 
> Also, if you have
> 
> call foo(...,a, ...)
> 
> you can put
> 
> print *,shape(a)
> print *,size(a)
> print *,is_contiguous(a)

Let me work on this..

> 
> into the source, run it and see what you get.
> 
> Also, look into the callee if there is a bounds violation - what
> is the dummy argumet declared as on the calee's side?
> 
> Maybe you could also put
> 
> subroutine foo (...., a, ...)
> 
> print *,shape(a)
> print *,size(a)
> print *,is_contiguous(a)
> 
> into the source code and paste the output.
> 
> Regards
> 
> Thomas


More information about the Gcc-bugs mailing list