[all-commits] [llvm/llvm-project] 5238e7: [InstCombine] Replace one-use select operand based...

Nikita Popov via All-commits all-commits at lists.llvm.org
Sat Jan 16 14:25:25 PST 2021


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: 5238e7b302ffc40707677960da9d64e872745dac
      https://github.com/llvm/llvm-project/commit/5238e7b302ffc40707677960da9d64e872745dac
  Author: Nikita Popov <nikita.ppv at gmail.com>
  Date:   2021-01-16 (Sat, 16 Jan 2021)

  Changed paths:
    M llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp
    M llvm/test/Transforms/InstCombine/select-binop-cmp.ll
    M llvm/test/Transforms/InstCombine/select-safe-transforms.ll

  Log Message:
  -----------
  [InstCombine] Replace one-use select operand based on condition

InstCombine already performs a fold where X == Y ? f(X) : Z is
transformed to X == Y ? f(Y) : Z if f(Y) simplifies. However,
if f(X) only has one use, then we can always directly replace the
use inside the instruction. To actually be profitable, limit it to
the case where Y is a non-expr constant.

This could be further extended to replace uses further up a one-use
instruction chain, but for now this only looks one level up.

Among other things, this also subsumes D94860.

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




More information about the All-commits mailing list