[llvm] [SLP]Do extra analysis int minbitwidth if some checks return false. (PR #84363)
Mike Hommey via llvm-commits
llvm-commits at lists.llvm.org
Fri Mar 15 02:01:52 PDT 2024
glandium wrote:
This caused a crash building libjpeg's jdsample.c. Here's a reduced testcase:
```
typedef char *JSAMPROW;
int h2v2_fancy_upsample_compptr_0;
void h2v2_fancy_upsample() {
JSAMPROW inptr0, inptr1, outptr;
int thiscolsum, lastcolsum, nextcolsum, colctr;
for (;;) {
thiscolsum = *inptr0++ * 3 + *inptr1++;
nextcolsum = *inptr0++ * 3 + *inptr1++;
lastcolsum = thiscolsum;
colctr = h2v2_fancy_upsample_compptr_0;
for (; colctr; colctr--) {
nextcolsum = *inptr1++;
*outptr++ = thiscolsum;
lastcolsum = thiscolsum = nextcolsum;
}
*outptr = nextcolsum * lastcolsum;
}
}
```
Compile with:
```
clang-19 "-cc1" "-triple" "x86_64-unknown-linux-gnu" "-emit-obj" "-disable-free" "-clear-ast-before-backend" "-disable-llvm-verifier" "-discard-value-names" "-main-file-name" "jdsample.c" "-mrelocation-model" "pic" "-pic-level" "2" "-fhalf-no-semantic-interposition" "-mframe-pointer=all" "-relaxed-aliasing" "-ffp-contract=off" "-fno-rounding-math" "-mconstructor-aliases" "-funwind-tables=2" "-target-cpu" "x86-64" "-tune-cpu" "generic" "-debug-info-kind=constructor" "-dwarf-version=4" "-debugger-tuning=gdb" "-sys-header-deps" "-O2" "-std=gnu99" "-ferror-limit" "19" "-pthread" "-stack-protector" "2" "-fstack-clash-protection" "-fgnuc-version=4.2.1" "-fskip-odr-check-in-gmf" "-fcolor-diagnostics" "-vectorize-loops" "-vectorize-slp" "-faddrsig" "-x" "c" test.c
```
(I didn't try to reduce the flags more than removing preprocessing and warning flags)
A debug build shows this:
```
clang-19: /tmp/llvm/llvm/include/llvm/ADT/DenseMap.h:1270: pointer llvm::DenseMapIterator<const llvm::slpvectorizer::BoUpSLP::TreeEntry *, std::pair<unsigned long, bool>>::operator->() const [KeyT = const llvm::slpvectorizer::BoUpSLP::TreeEntry *, ValueT = std::pair<unsigned long, bool>, KeyInfoT = llvm::DenseMapInfo<const llvm::slpvectorizer::BoUpSLP::TreeEntry *>, Bucket = llvm::detail::DenseMapPair<const llvm::slpvectorizer::BoUpSLP::TreeEntry *, std::pair<unsigned long, bool>>, IsConst = false]: Assertion `Ptr != End && "dereferencing end() iterator"' failed.
```
https://github.com/llvm/llvm-project/pull/84363
More information about the llvm-commits
mailing list