From: Pan Li <pan2...@intel.com>

In some cases the widen-mul may generate unnecessary cast similar
as below, this patch series would like to refine it.  Then, some
pattern match like SAT_MUL could be simplified based on it.

  29   │   _1 = (__int128 unsigned) a_8(D);
  30   │   _2 = (__int128 unsigned) b_9(D);
  31   │   _35 = (unsigned long) _1;
  32   │   _34 = (unsigned long) _2;
  33   │   x_10 = _35 w* _34;

Pan Li (2):
  Widening-Mul: Refine build_and_insert_cast when rhs is cast
  Match: Adjust the unsigned SAT_MUL pattern

 gcc/match.pd                                  |  4 ++--
 .../gcc.target/riscv/sat/widen-mul-0.c        |  8 +++++++
 .../gcc.target/riscv/sat/widen-mul-1.c        |  8 +++++++
 .../gcc.target/riscv/sat/widen-mul-2.c        |  8 +++++++
 .../gcc.target/riscv/sat/widen-mul-3.c        |  8 +++++++
 .../gcc.target/riscv/sat/widen-mul.h          | 15 +++++++++++++
 gcc/tree-ssa-math-opts.cc                     | 21 ++++++++++++++++++-
 7 files changed, 69 insertions(+), 3 deletions(-)
 create mode 100644 gcc/testsuite/gcc.target/riscv/sat/widen-mul-0.c
 create mode 100644 gcc/testsuite/gcc.target/riscv/sat/widen-mul-1.c
 create mode 100644 gcc/testsuite/gcc.target/riscv/sat/widen-mul-2.c
 create mode 100644 gcc/testsuite/gcc.target/riscv/sat/widen-mul-3.c
 create mode 100644 gcc/testsuite/gcc.target/riscv/sat/widen-mul.h

-- 
2.43.0

Reply via email to