<div dir="ltr"><br><div class="gmail_extra"><br><br><div class="gmail_quote">On Thu, Jan 16, 2014 at 1:02 PM, Diego Novillo <span dir="ltr"><<a href="mailto:dnovillo@google.com" target="_blank">dnovillo@google.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im">On Thu, Jan 16, 2014 at 9:26 AM, Nadav Rotem <<a href="mailto:nrotem@apple.com">nrotem@apple.com</a>> wrote:<br>

> Hi Diego,<br>
><br>
> It looks like the problem is with the code in the vectorizer that tries to estimate the most profitable vectorization factor:<br>
><br>
>> LV: Found an estimated cost of 6 for VF 2 For instruction:   %3 = load<br>
>> i64* %state, align 8, !dbg !58, !tbaa !61<br>
><br>
><br>
> It looks like a cost model problem.  The vectorizer thinks that loading %3 (above) is non consecutive and would require scatter/gather.  Is that correct? I wonder that SCEV is reporting. Is there an index overflow problem that is preventing us from loading consecutive elements?<br>

<br>
</div>Yes, I forgot to mention that. The access is non-consecutive:<br>
<br>
      for(i=0; i<reg->size; i++)<br>
         {<br>
             /* Flip the target bit of each basis state */<br>
             reg->node[i].state ^= ((MAX_UNSIGNED) 1 << target);<br>
}<br>
<br>
The code is writing to the 'state' field. The data structures look like this:<br>
<br>
typedef struct quantum_matrix_struct quantum_matrix;<br>
<br>
struct quantum_reg_node_struct<br>
{<br>
  COMPLEX_FLOAT amplitude; /* alpha_j */<br>
  MAX_UNSIGNED state;      /* j */<br>
};<br>
<br>
typedef struct quantum_reg_node_struct quantum_reg_node;<br>
<br>
/* The quantum register */<br>
<br>
struct quantum_reg_struct<br>
{<br>
  int width;    /* number of qubits in the qureg */<br>
  int size;     /* number of non-zero vectors */<br>
  int hashw;    /* width of the hash array */<br>
  quantum_reg_node *node;<br>
  int *hash;<br>
};<br>
<br>
If you do the trick of writing to a separate array, then the loop can<br>
be vectorized.<br></blockquote><div><br></div><div>Or use scatter-gather. </div><div><br></div><div>-- Sean Silva</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<div class="HOEnZb"><div class="h5"><br>
<br>
Diego.<br>
<br>
_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:LLVMdev@cs.uiuc.edu">LLVMdev@cs.uiuc.edu</a>         <a href="http://llvm.cs.uiuc.edu" target="_blank">http://llvm.cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev</a><br>
</div></div></blockquote></div><br></div></div>