[nvptx] Fix printing of 128-bit constant
authorTom de Vries <tdevries@suse.de>
Thu, 10 Sep 2020 13:54:14 +0000 (15:54 +0200)
committerTom de Vries <tdevries@suse.de>
Thu, 10 Sep 2020 19:30:33 +0000 (21:30 +0200)
commitaf47a2035a4882e6d4506e3d00b5a42414e3ee2b
tree84adb9201f74b952e64fe1c209f0bace9098420d
parenta8f9b4c54cc350625accbb2c6b4005acb42d4c2e
[nvptx] Fix printing of 128-bit constant

Currently, for this code from c-c++-common/spec-barrier-1.c:
...
__int128 g = 9;
...
we generate:
...
// BEGIN GLOBAL VAR DEF: g
.visible .global .align 8 .u64 g[2] = { 9, 9 };
...
and consequently the test-case fails in execution.

The problem is caused by a shift in nvptx_assemble_value:
...
      val >>= part * BITS_PER_UNIT;
...
where the shift amount is equal to the number of bits in val, which is
undefined behaviour.

Fix this by detecting the situation and setting val to 0.

Tested on nvptx.

gcc/ChangeLog:

PR target/97004
* config/nvptx/nvptx.c (nvptx_assemble_value): Handle shift by
number of bits in shift operand.
gcc/config/nvptx/nvptx.c