[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