diff options
| author | David Berard <dberard@meta.com> | 2023-07-21 05:24:47 -0700 |
|---|---|---|
| committer | Alexey Bataev <a.bataev@outlook.com> | 2023-07-21 05:40:55 -0700 |
| commit | 8fa02db8cf82edb136d905ce44ffbc00f1cb6dbd (patch) | |
| tree | 7e6ad9646e069abe2527ce27fc87f19cffda3aaa /lldb/source/Plugins/ScriptInterpreter/Python | |
| parent | 0a093f62d15468f2b6ac4bfdc7a2dc7ba88364d0 (diff) | |
[llvm][SLP] Exit early if inputs to comparator are equal
**TL;DR:** This PR modifies a comparator. The comparator is used in a subsequent call to llvm::stable_sort. Sorting comparators should follow strict weak ordering - in particular, (x < x) should return false. This PR adds a fix to avoid an infinite loop when the inputs to the comparator are equal.
**Details**:
Sometimes when two equivalent tensors passed into the comparator, we encounter infinite looping (at https://github.com/llvm/llvm-project/blob/aae2eaae2cefd3132059925c4592276defdb1faa/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp#L4049)
Although it seems like this comparator will never be called with two equivalent pointers, some sanitizers, e.g. https://chromium.googlesource.com/chromiumos/third_party/gcc/+/refs/heads/stabilize-zako-5712.88.B/libstdc++-v3/include/bits/stl_algo.h#360, will add checks for (x < x). When this sanitizer is used with the current implementation, it triggers a comparator check for (x < x) which runs into the infinite loop
Reviewed By: ABataev
Differential Revision: https://reviews.llvm.org/D155874
Diffstat (limited to 'lldb/source/Plugins/ScriptInterpreter/Python')
0 files changed, 0 insertions, 0 deletions
