[all-commits] [llvm/llvm-project] 94e69f: [RISCV] Add DAG combine to fold (fp_to_int_sat (ff...

Craig Topper via All-commits all-commits at lists.llvm.org
Thu Jan 20 11:38:47 PST 2022


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: 94e69fbb4f3a9719d4d8cc7268dd5db5d0be7e8f
      https://github.com/llvm/llvm-project/commit/94e69fbb4f3a9719d4d8cc7268dd5db5d0be7e8f
  Author: Craig Topper <craig.topper at sifive.com>
  Date:   2022-01-20 (Thu, 20 Jan 2022)

  Changed paths:
    M llvm/lib/Target/RISCV/RISCVISelLowering.cpp
    A llvm/test/CodeGen/RISCV/double-round-conv-sat.ll
    A llvm/test/CodeGen/RISCV/float-round-conv-sat.ll
    A llvm/test/CodeGen/RISCV/half-round-conv-sat.ll

  Log Message:
  -----------
  [RISCV] Add DAG combine to fold (fp_to_int_sat (ffloor X)) -> (select X == nan, 0, (fcvt X, rdn))

Similar for ceil, trunc, round, and roundeven. This allows us to use
static rounding modes to avoid a libcall.

This is similar to D116771, but for the saturating conversions.

This optimization is done for AArch64 as isel patterns.
RISCV doesn't have instructions for ceil/floor/trunc/round/roundeven
so the operations don't stick around until isel to enable a pattern
match. Thus I've implemented a DAG combine.

I'm only handling saturating to i64 or i32. This could be extended
to other sizes in the future.

Reviewed By: asb

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




More information about the All-commits mailing list