diff options
author | Roger Sayle <roger@nextmovesoftware.com> | 2021-12-08 12:45:38 +0100 |
---|---|---|
committer | Tom de Vries <tdevries@suse.de> | 2021-12-08 16:42:12 +0100 |
commit | 6b49d50a27428e9de0ae2913651a6379744f3067 (patch) | |
tree | bcec92b6adfafa5faf2ce4a9480a69d22ec913b7 /gcc/c/c-parser.c | |
parent | d3d44a00e511f0402e8a2449c1c9c27f28ac9cf7 (diff) | |
download | gcc-6b49d50a27428e9de0ae2913651a6379744f3067.zip gcc-6b49d50a27428e9de0ae2913651a6379744f3067.tar.gz gcc-6b49d50a27428e9de0ae2913651a6379744f3067.tar.bz2 |
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.
Diffstat (limited to 'gcc/c/c-parser.c')
0 files changed, 0 insertions, 0 deletions