[all-commits] [llvm/llvm-project] 34ae30: [SCEV] Use context to strengthen flags of BinOps

Max Kazantsev via All-commits all-commits at lists.llvm.org
Wed Aug 3 00:09:17 PDT 2022

  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: 34ae308c73e4d76dbdab25a6206d3fbc5ebafdf5
  Author: Max Kazantsev <mkazantsev at azul.com>
  Date:   2022-08-03 (Wed, 03 Aug 2022)

  Changed paths:
    M llvm/include/llvm/Analysis/ScalarEvolution.h
    M llvm/lib/Analysis/ScalarEvolution.cpp
    M llvm/test/Transforms/IndVarSimplify/AArch64/widen-loop-comp.ll
    M llvm/test/Transforms/IndVarSimplify/X86/iv-widen.ll
    M llvm/test/Transforms/IndVarSimplify/X86/pr35406.ll
    M llvm/test/Transforms/IndVarSimplify/bbi-63564.ll
    M llvm/test/Transforms/IndVarSimplify/cycled_phis.ll
    M llvm/test/Transforms/IndVarSimplify/eliminate-comparison.ll
    M llvm/test/Transforms/IndVarSimplify/finite-exit-comparisons.ll
    M llvm/test/Transforms/IndVarSimplify/loop-predication.ll
    M llvm/test/Transforms/IndVarSimplify/trivial-guard.ll
    M llvm/test/Transforms/LoopUnroll/runtime-loop-multiple-exits.ll

  Log Message:
  [SCEV] Use context to strengthen flags of BinOps

Sometimes SCEV cannot infer nuw/nsw from something as simple as
  len in [0, MAX_INT]
  iv = phi(0, iv.next)
  guard(iv <s len)
  guard(iv <u len)
  iv.next = iv + 1
just because flag strenthening only relies on definition and does not use local facts.
This patch adds support for the simplest case: inference of flags of `add(x, constant)`
if we can contextually prove that `x <= max_int - constant`.

In case if it has negative CT impact, we can add an option to switch it off. I woudln't
expect that though.

Differential Revision: https://reviews.llvm.org/D129643
Reviewed By: apilipenko

More information about the All-commits mailing list