nvptx.c (enum nvptx_shuffle_kind): New.

* config/nvptx/nvptx.c (enum nvptx_shuffle_kind): New.  Absorb
	SHUFFLE defines.
	(nvptx_gen_shuffle, nvptx_print_operand, nvptx_expand_shuffle): Adjust.

From-SVN: r231192
This commit is contained in:
Nathan Sidwell 2015-12-02 17:28:32 +00:00 committed by Nathan Sidwell
parent 2e733703c0
commit 592632598b
2 changed files with 22 additions and 9 deletions

View file

@ -1,3 +1,9 @@
2015-12-02 Nathan Sidwell <nathan@acm.org>
* config/nvptx/nvptx.c (enum nvptx_shuffle_kind): New. Absorb
SHUFFLE defines.
(nvptx_gen_shuffle, nvptx_print_operand, nvptx_expand_shuffle): Adjust.
2015-12-02 Aditya Kumar <aditya.k7@samsung.com> 2015-12-02 Aditya Kumar <aditya.k7@samsung.com>
Sebastian Pop <s.pop@samsung.com> Sebastian Pop <s.pop@samsung.com>

View file

@ -70,10 +70,15 @@
/* This file should be included last. */ /* This file should be included last. */
#include "target-def.h" #include "target-def.h"
#define SHUFFLE_UP 0 /* The kind of shuffe instruction. */
#define SHUFFLE_DOWN 1 enum nvptx_shuffle_kind
#define SHUFFLE_BFLY 2 {
#define SHUFFLE_IDX 3 SHUFFLE_UP,
SHUFFLE_DOWN,
SHUFFLE_BFLY,
SHUFFLE_IDX,
SHUFFLE_MAX
};
/* Record the function decls we've written, and the libfuncs and function /* Record the function decls we've written, and the libfuncs and function
decls corresponding to them. */ decls corresponding to them. */
@ -1221,7 +1226,7 @@ nvptx_gen_pack (rtx dst, rtx src0, rtx src1)
across the vectors of a single warp. */ across the vectors of a single warp. */
static rtx static rtx
nvptx_gen_shuffle (rtx dst, rtx src, rtx idx, unsigned kind) nvptx_gen_shuffle (rtx dst, rtx src, rtx idx, nvptx_shuffle_kind kind)
{ {
rtx res; rtx res;
@ -2019,10 +2024,11 @@ nvptx_print_operand (FILE *file, rtx x, int code)
case 'S': case 'S':
{ {
unsigned kind = UINTVAL (x); nvptx_shuffle_kind kind = (nvptx_shuffle_kind) UINTVAL (x);
/* Same order as nvptx_shuffle_kind. */
static const char *const kinds[] = static const char *const kinds[] =
{"up", "down", "bfly", "idx"}; {".up", ".down", ".bfly", ".idx"};
fprintf (file, ".%s", kinds[kind]); fputs (kinds[kind], file);
} }
break; break;
@ -3990,7 +3996,8 @@ nvptx_expand_shuffle (tree exp, rtx target, machine_mode mode, int ignore)
if (!REG_P (idx) && GET_CODE (idx) != CONST_INT) if (!REG_P (idx) && GET_CODE (idx) != CONST_INT)
idx = copy_to_mode_reg (SImode, idx); idx = copy_to_mode_reg (SImode, idx);
rtx pat = nvptx_gen_shuffle (target, src, idx, INTVAL (op)); rtx pat = nvptx_gen_shuffle (target, src, idx,
(nvptx_shuffle_kind) INTVAL (op));
if (pat) if (pat)
emit_insn (pat); emit_insn (pat);