Hi Emmanouil,
Seems like when you comment out a loop in “compute” function, it gets inlined, this helps LV by finding the bounds and vectorizes it.
With the presence of all the loops LAA is not able to identify the bounds for the accesses:
LAA: Can't find bounds for ptr: %arrayidx.i159 = getelementptr inbounds double, double* %30, i64 %and.i158, !dbg !46
LAA: Can't find bounds for ptr: %arrayidx.i155 = getelementptr inbounds double, double* %36, i64 %and.i154, !dbg !66
LAA: Can't find bounds for ptr: %arrayidx.i151 = getelementptr inbounds double, double* %42, i64 %and.i150, !dbg !91
Its bit strange as its able to identify the bounds correctly for the first loop.
Without commenting the loop, if you make the “compute” function inline, it gets vectorize:
- void compute( size_t batchSize,
+ void inline compute( size_t batchSize,
Regards,
Ashutosh
From: llvm-dev <llvm-dev...@lists.llvm.org>
On Behalf Of manolis mi via llvm-dev
Sent: Friday, August 23, 2019 9:13 PM
To: via llvm-dev <llvm...@lists.llvm.org>
Cc: Stephan Hageboeck <stephan....@cern.ch>
Subject: [llvm-dev] Vectorization fails when dealing with a lot of for loops.
[CAUTION: External Email]
LAA: Processing memory accesses...
AST: Alias Set Tracker: 2 alias sets for 7 pointer values.
AliasSet[0x16a131c3120, 1] must alias, No access Pointers: (double*
%arrayidx6, unknown)
AliasSet[0x16a131c1e90, 6] may alias, No access Pointers: (double*
%arrayidx, unknown), (double* %arrayidx1, unknown), (double**
%_pointer.i, unknown), (i64* %_mask.i, unknown), (double* %arrayidx.i,
unknown), (double* %arrayidx5, unknown)
After vectorizing the first loop, it is not able to do this anymore
(did not investigate the why). When trying to vectorize the second
loop, it requires a runtime condition to guard against aliasing (for
which it needs to determine the loop bounds), but is unable to do so
because of the the and-mask of "G"/BracketAdapterWithMask:
%arrayidx.i159 --- or as SCEV: ((8 * %and.i158)<nsw> + %36)<nsw>
When removing one of the for-loops, the entire compute-function is
inlined into the run function and this problem is magically resolved.
Not sure why.
Would you file a bug report?
Michael
Am Fr., 23. Aug. 2019 um 10:43 Uhr schrieb manolis mi via llvm-dev
<llvm...@lists.llvm.org>:
> _______________________________________________
> LLVM Developers mailing list
> llvm...@lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
_______________________________________________
LLVM Developers mailing list
llvm...@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev