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

Nikita Popov via All-commits all-commits at lists.llvm.org
Mon Oct 17 07:11:28 PDT 2022

  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: 779fd3968412dd2c8b75a0f5884d39bd5ba29bfd
  Author: Nikita Popov <npopov at redhat.com>
  Date:   2022-10-17 (Mon, 17 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

Relative to the previous attempt, this is rebased over the
InstSimplify fix in ac74e7a7806480a000c9a3502405c3dedd8810de,
which addresses the miscompile reported in PR58401.


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

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