nvptx: Add support for PTX's cnot instruction.
authorRoger Sayle <roger@nextmovesoftware.com>
Fri, 7 Jan 2022 09:57:21 +0000 (09:57 +0000)
committerRoger Sayle <roger@nextmovesoftware.com>
Fri, 7 Jan 2022 09:57:21 +0000 (09:57 +0000)
commit659f8161f61d3f75c3a47cf646147e8f7b4dcb34
tree0b74b1a131369f0ca8adadd4e8f835ea6b951594
parentadd37d3bf4f375bb202abdc7cf7768f27fc968d7
nvptx: Add support for PTX's cnot instruction.

This is a simple patch, now that the nvptx backend has transitioned
to STORE_FLAG_VALUE=1, that adds support for NVidia's cnot instruction,
that implements C/C++ style logical negation.

Previously, the simple function:

int foo(int x) { return !x; }

on nvptx-none with -O2 would generate:

mov.u32 %r24, %ar0;
setp.eq.u32     %r28, %r24, 0;
selp.u32        %value, 1, 0, %r28;

with this patch, GCC now generates:

mov.u32 %r24, %ar0;
cnot.b32        %value, %r24;

2022-01-07  Roger Sayle  <roger@nextmovesoftware.com>

gcc/ChangeLog
* config/nvptx/nvptx.md (*cnot<mode>2): New define_insn.

gcc/testsuite/ChangeLog
* gcc.target/nvptx/cnot-1.c: New test case.
gcc/config/nvptx/nvptx.md
gcc/testsuite/gcc.target/nvptx/cnot-1.c [new file with mode: 0644]