3 ms·
A few months ago I was doing FFTs on arrays larger than 4GB. Amusingly, this uncovered a bug in the LLVM optimizer: It was looking at stride lengths to figure
by cperciva 10y ago
A few months ago I was doing FFTs on arrays larger than 4GB. Amusingly, this uncovered a bug in the LLVM optimizer: It was looking at stride lengths to figure out if accesses were independent, and truncated a 4GB stride down to 0.
- ksml 10y agoI would be extremely interested to hear how you found this bug. Sounds like a difficult bug to track down, and I always learn from good debugging stories.
- cperciva 10y agoIt was pretty easy to track down: clang38 was exiting with Assertion failed: (Distance > 0 && "The distance must be non-zero"), function areStridedAccessesIndependent, file /wrkdirs/usr/ports/devel/ llvm38/work/llvm-3.8.0.src/lib/Analysis/LoopAccessAnalysis.cpp, line 1004. Looking at the file it was easy to see what was being asserted, and to see that the type was a 32-bit integer; since I knew I was dealing with huge FFTs, the problem was obvious. Let this be a lesson: Asserting that impossible things don't happen makes debugging much easier when they do happen!
- flamedoge 10y agoWell good thing it was ReleaseWithAsserts build!