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

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

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |missed-optimization, openmp
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2019-09-11
                 CC|                            |jakub at gcc dot gnu.org
          Component|c                           |tree-optimization
             Blocks|                            |53947
     Ever confirmed|0                           |1

--- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> ---
The runtime alias test is between the two stores of the inner unrolled loop.
That's dv[i] vs. dv[i+Q].

Creating dr for *_61
analyze_innermost: success.
        base_address: dv_44(D)
        offset from base address: 0
        constant offset from base address: 0
        step: 8
        base alignment: 8
        base misalignment: 0
        offset alignment: 512
        step alignment: 8
        base_object: *dv_44(D)
        Access function 0: {0B, +, 8}_1
Creating dr for *_79
analyze_innermost: success.
        base_address: (double *) dv_44(D) + (sizetype) ((long unsigned int)
Q_35(D) * 8)
        offset from base address: 0
        constant offset from base address: 0
        step: 8
        base alignment: 8
        base misalignment: 0
        offset alignment: 512
        step alignment: 8
        base_object: *(double *) dv_44(D) + (sizetype) ((long unsigned int)
Q_35(D) * 8)
        Access function 0: {0B, +, 8}_1

it's probably unfortunate association since we compute inside the loop

  _11 = Q_35(D) + i_39;
  _12 = (long unsigned int) _11;
  _13 = _12 * 8;


With OpenMP SIMD we fail to analyze the data-refs:

Creating dr for D.4113[_37][1][0]
analyze_innermost: t.c:4:18: missed:  failed: evolution of offset is not
affine.
        base_address:
        offset from base address:
        constant offset from base address:
        step:
        base alignment: 0
        base misalignment: 0
        offset alignment: 0
        step alignment: 0
        base_object: D.4113
        Access function 0: 0
        Access function 1: 1
        Access function 2: scev_not_known;

where _37 is the SIMD lane.


Referenced Bugs:

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53947
[Bug 53947] [meta-bug] vectorizer missed-optimizations

Reply via email to