aboutsummaryrefslogtreecommitdiff
path: root/gcc/c/c-parser.c
diff options
context:
space:
mode:
authorRoger Sayle <roger@nextmovesoftware.com>2021-12-08 12:45:38 +0100
committerTom de Vries <tdevries@suse.de>2021-12-08 16:42:12 +0100
commit6b49d50a27428e9de0ae2913651a6379744f3067 (patch)
treebcec92b6adfafa5faf2ce4a9480a69d22ec913b7 /gcc/c/c-parser.c
parentd3d44a00e511f0402e8a2449c1c9c27f28ac9cf7 (diff)
downloadgcc-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