-
- Downloads
nvptx: Use cvt to perform sign-extension of truncation
This patch introduces some new define_insn rules to the nvptx backend, to perform sign-extension of a truncation (from and to the same mode), using a single cvt instruction. As an example, the following function int foo(int x) { return (char)x; } with -O2 currently generates: mov.u32 %r24, %ar0; mov.u32 %r26, %r24; cvt.s32.s8 %value, %r26; and with this patch, now generates: mov.u32 %r24, %ar0; cvt.s32.s8 %value, %r24; This patch has been tested on nvptx-none hosted by x86_64-pc-linux-gnu with a top-level "make" (including newlib) and a "make check" with no new regressions. gcc/ChangeLog: * config/nvptx/nvptx.md (*extend_trunc_<mode>2_qi, *extend_trunc_<mode>2_hi, *extend_trunc_di2_si): New insns. Use cvt to perform sign-extension of truncation in one step. gcc/testsuite/ChangeLog: * gcc.target/nvptx/exttrunc-2.c: New test case. * gcc.target/nvptx/exttrunc-3.c: New test case. * gcc.target/nvptx/exttrunc-4.c: New test case. * gcc.target/nvptx/exttrunc-5.c: New test case. * gcc.target/nvptx/exttrunc-6.c: New test case.
Showing
- gcc/config/nvptx/nvptx.md 26 additions, 0 deletionsgcc/config/nvptx/nvptx.md
- gcc/testsuite/gcc.target/nvptx/exttrunc-2.c 17 additions, 0 deletionsgcc/testsuite/gcc.target/nvptx/exttrunc-2.c
- gcc/testsuite/gcc.target/nvptx/exttrunc-3.c 17 additions, 0 deletionsgcc/testsuite/gcc.target/nvptx/exttrunc-3.c
- gcc/testsuite/gcc.target/nvptx/exttrunc-4.c 17 additions, 0 deletionsgcc/testsuite/gcc.target/nvptx/exttrunc-4.c
- gcc/testsuite/gcc.target/nvptx/exttrunc-5.c 17 additions, 0 deletionsgcc/testsuite/gcc.target/nvptx/exttrunc-5.c
- gcc/testsuite/gcc.target/nvptx/exttrunc-6.c 17 additions, 0 deletionsgcc/testsuite/gcc.target/nvptx/exttrunc-6.c
Loading
Please register or sign in to comment