diff options
author | Nikita Popov <npopov@redhat.com> | 2024-05-20 07:40:54 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-05-20 07:40:54 +0200 |
commit | b6e102e08cd35543175459494211a3a15f793302 (patch) | |
tree | 2d623ef8fcdb3a9c77ec05d106031ff1ffff6ffc /llvm/lib/Bitcode/Reader/BitcodeReader.cpp | |
parent | d316a0bd48ceb4a0ee851d729291a2cdcc8818eb (diff) | |
download | llvm-b6e102e08cd35543175459494211a3a15f793302.zip llvm-b6e102e08cd35543175459494211a3a15f793302.tar.gz llvm-b6e102e08cd35543175459494211a3a15f793302.tar.bz2 |
[SCEV] Don't use non-deterministic constant folding for trip counts (#90942)
When calculating the exit count exhaustively, if any of the involved
operations is non-deterministic, the exit count we compute at
compile-time and the exit count at run-time may differ. Using these
non-deterministic constant folding results is only correct if we
actually replace all uses of the instruction with the value. SCEV (or
its consumers) generally don't do this.
Handle this by adding a new AllowNonDeterministic flag to the constant
folding API, and disabling it in SCEV. If non-deterministic results are
not allowed, do not fold FP lib calls in general, and FP operations
returning NaNs in particular. This could be made more precise (some FP
libcalls like fabs are fully deterministic), but I don't think this that
precise handling here is worthwhile.
Fixes the interesting part of
https://github.com/llvm/llvm-project/issues/89885.
Diffstat (limited to 'llvm/lib/Bitcode/Reader/BitcodeReader.cpp')
0 files changed, 0 insertions, 0 deletions