[llvm-dev] Vectorization fails when dealing with a lot of for loops.
Nema, Ashutosh via llvm-dev
llvm-dev at lists.llvm.org
Sun Aug 25 22:53:08 PDT 2019
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,
From: llvm-dev <llvm-dev-bounces at lists.llvm.org> On Behalf Of manolis mi via llvm-dev
Sent: Friday, August 23, 2019 9:13 PM
To: via llvm-dev <llvm-dev at lists.llvm.org>
Cc: Stephan Hageboeck <stephan.hageboeck at cern.ch>
Subject: [llvm-dev] Vectorization fails when dealing with a lot of for loops.
[CAUTION: External Email]
Hello, could you please have a look at this code posted on godbolt.org:
The problem is that inside the compute function, only the first loop vectorizes while the rest copies of it don't. But if I remove any of the for loops, then the rest vectorize successfully. Could you please confirm that this is a bug, otherwise give me more insight on why the vectorization fails? The message "Cannot identify array bounds" is not helpful.
Thank you for your time,
Emmanouil Michalainas, CERN
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the llvm-dev