[all-commits] [llvm/llvm-project] e94619: Reapply [InstCombine] Switch foldOpIntoPhi() to us...

Nikita Popov via All-commits all-commits at lists.llvm.org
Wed Oct 5 05:00:41 PDT 2022


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: e94619b955104841cc2a4a6febe4025ee140194e
      https://github.com/llvm/llvm-project/commit/e94619b955104841cc2a4a6febe4025ee140194e
  Author: Nikita Popov <npopov at redhat.com>
  Date:   2022-10-05 (Wed, 05 Oct 2022)

  Changed paths:
    M llvm/lib/Transforms/InstCombine/InstructionCombining.cpp
    M llvm/test/Transforms/InstCombine/intptr1.ll
    M llvm/test/Transforms/InstCombine/intptr4.ll
    M llvm/test/Transforms/InstCombine/intptr5.ll
    M llvm/test/Transforms/InstCombine/intptr7.ll
    M llvm/test/Transforms/InstCombine/phi-select-constant.ll
    M llvm/test/Transforms/InstCombine/phi.ll
    M llvm/test/Transforms/InstCombine/recurrence.ll

  Log Message:
  -----------
  Reapply [InstCombine] Switch foldOpIntoPhi() to use InstSimplify

The infinite loop seen on buildbots should be fixed by
11897708c0229c92802e747564e7c34b722f045f (assuming there are not
multiple infinite combine loops...)

-----

foldOpIntoPhi() currently only folds operations into the phi if all
but one operands constant-fold. The two exceptions to this are freeze
and select, where we allow more general simplification.

This patch makes foldOpIntoPhi() generally simplification based and
removes all the instruction-specific logic. We just try to simplify
the instruction for each operand, and for the (potentially) one
non-simplified operand, we move it into the new block with adjusted
operands.

This fixes https://github.com/llvm/llvm-project/issues/57448, which
was my original motivation for the change.

Differential Revision: https://reviews.llvm.org/D134954




More information about the All-commits mailing list