[all-commits] [llvm/llvm-project] b6e102: [SCEV] Don't use non-deterministic constant foldin...

Nikita Popov via All-commits all-commits at lists.llvm.org
Sun May 19 22:41:15 PDT 2024


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: b6e102e08cd35543175459494211a3a15f793302
      https://github.com/llvm/llvm-project/commit/b6e102e08cd35543175459494211a3a15f793302
  Author: Nikita Popov <npopov at redhat.com>
  Date:   2024-05-20 (Mon, 20 May 2024)

  Changed paths:
    M llvm/include/llvm/Analysis/ConstantFolding.h
    M llvm/lib/Analysis/ConstantFolding.cpp
    M llvm/lib/Analysis/ScalarEvolution.cpp
    M llvm/test/Analysis/ScalarEvolution/exhaustive-trip-counts.ll

  Log Message:
  -----------
  [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.



To unsubscribe from these emails, change your notification settings at https://github.com/llvm/llvm-project/settings/notifications


More information about the All-commits mailing list