Skip to content
Snippets Groups Projects
Commit 6b49d50a authored by Roger Sayle's avatar Roger Sayle Committed by Tom de Vries
Browse files

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.
parent d3d44a00
No related branches found
No related tags found
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment