We were generating some unnecessary instructions for integer division.
These two patches improve the code generation to compile

    template <class T> T div(T a, T b) { return a / b; }

into a single division instruction (along with a return instruction of
course) as we expected for T in {int32_t, uint32_t, int64_t}.

Bootstrapped and regtested on loongarch64-linux-gnu.  Ok for trunk?

Xi Ruoyao (2):
  loongarch: add alternatives for idiv insns to improve code generation
  loongarch: avoid unnecessary sign-extend after 32-bit division

 gcc/config/loongarch/loongarch-protos.h    |  1 +
 gcc/config/loongarch/loongarch.cc          |  2 +-
 gcc/config/loongarch/loongarch.md          | 34 ++++++++++++++++------
 gcc/testsuite/gcc.target/loongarch/div-1.c |  9 ++++++
 gcc/testsuite/gcc.target/loongarch/div-2.c |  9 ++++++
 gcc/testsuite/gcc.target/loongarch/div-3.c |  9 ++++++
 gcc/testsuite/gcc.target/loongarch/div-4.c |  9 ++++++
 7 files changed, 63 insertions(+), 10 deletions(-)
 create mode 100644 gcc/testsuite/gcc.target/loongarch/div-1.c
 create mode 100644 gcc/testsuite/gcc.target/loongarch/div-2.c
 create mode 100644 gcc/testsuite/gcc.target/loongarch/div-3.c
 create mode 100644 gcc/testsuite/gcc.target/loongarch/div-4.c

-- 
2.37.0

Reply via email to