[nvptx] Use define_insn parametrization
Parametrize some define_insn to simplify code in define_expands generating
those insns.
Build and reg-tested on x86_64 with nvptx accelerator.
2019-06-18 Tom de Vries <tdevries@suse.de>
* config/nvptx/nvptx-protos.h (gen_set_softstack_insn): Remove.
* config/nvptx/nvptx.c (gen_set_softstack_insn): Remove.
* config/nvptx/nvptx.md (define_insn "set_softstack_<mode>"): Rename to ...
(define_insn "@set_softstack_<mode>"): ... this.
(define_insn "omp_simt_enter_<mode>"): Rename to ...
(define_insn "@omp_simt_enter_<mode>"): ... this.
(define_insn "omp_simt_exit_<mode>"): Rename to ...
(define_insn "@omp_simt_exit_<mode>"): ... this.
---
gcc/config/nvptx/nvptx-protos.h | 1 -
gcc/config/nvptx/nvptx.c | 12 ------------
gcc/config/nvptx/nvptx.md | 30 +++++++++---------------------
3 files changed, 9 insertions(+), 34 deletions(-)
@@ -57,6 +57,5 @@ extern const char *nvptx_output_set_softstack (unsigned);
extern const char *nvptx_output_simt_enter (rtx, rtx, rtx);
extern const char *nvptx_output_simt_exit (rtx);
extern const char *nvptx_output_red_partition (rtx, rtx);
-extern rtx gen_set_softstack_insn (rtx);
#endif
#endif
@@ -112,18 +112,6 @@ enum nvptx_data_area
DATA_AREA_MAX
};
-rtx
-gen_set_softstack_insn (rtx op)
-{
- gcc_assert (GET_MODE (op) == Pmode);
- if (GET_MODE (op) == DImode)
- return gen_set_softstack_di (op);
- else if (GET_MODE (op) == SImode)
- return gen_set_softstack_si (op);
- else
- gcc_unreachable ();
-}
-
/* We record the data area in the target symbol flags. */
#define SYMBOL_DATA_AREA(SYM) \
(nvptx_data_area)((SYMBOL_REF_FLAGS (SYM) >> SYMBOL_FLAG_MACH_DEP_SHIFT) \
@@ -1025,8 +1025,8 @@
""
{
if (TARGET_SOFT_STACK)
- emit_insn (gen_set_softstack_insn (gen_rtx_REG (Pmode,
- SOFTSTACK_PREV_REGNUM)));
+ emit_insn (gen_set_softstack (Pmode, gen_rtx_REG (Pmode,
+ SOFTSTACK_PREV_REGNUM)));
emit_jump_insn (gen_return ());
DONE;
})
@@ -1059,7 +1059,7 @@
{
emit_move_insn (stack_pointer_rtx,
gen_rtx_MINUS (Pmode, stack_pointer_rtx, operands[1]));
- emit_insn (gen_set_softstack_insn (stack_pointer_rtx));
+ emit_insn (gen_set_softstack (Pmode, stack_pointer_rtx));
emit_move_insn (operands[0], virtual_stack_dynamic_rtx);
DONE;
}
@@ -1071,7 +1071,7 @@
DONE;
})
-(define_insn "set_softstack_<mode>"
+(define_insn "@set_softstack_<mode>"
[(unspec [(match_operand:P 0 "nvptx_register_operand" "R")]
UNSPEC_SET_SOFTSTACK)]
"TARGET_SOFT_STACK"
@@ -1087,7 +1087,7 @@
if (TARGET_SOFT_STACK)
{
emit_move_insn (operands[0], operands[1]);
- emit_insn (gen_set_softstack_insn (operands[0]));
+ emit_insn (gen_set_softstack (Pmode, operands[0]));
}
DONE;
})
@@ -1237,7 +1237,7 @@
;; Patterns for OpenMP SIMD-via-SIMT lowering
-(define_insn "omp_simt_enter_<mode>"
+(define_insn "@omp_simt_enter_<mode>"
[(set (match_operand:P 0 "nvptx_register_operand" "=R")
(unspec_volatile:P [(match_operand:P 1 "nvptx_nonmemory_operand" "Ri")
(match_operand:P 2 "nvptx_nonmemory_operand" "Ri")]
@@ -1261,13 +1261,7 @@
cfun->machine->simt_stack_align = MAX (UINTVAL (operands[2]),
cfun->machine->simt_stack_align);
cfun->machine->has_simtreg = true;
- gcc_assert (GET_MODE (operands[0]) == Pmode);
- if (GET_MODE (operands[0]) == DImode)
- emit_insn (gen_omp_simt_enter_di (operands[0], operands[1], operands[2]));
- else if (GET_MODE (operands[0]) == SImode)
- emit_insn (gen_omp_simt_enter_si (operands[0], operands[1], operands[2]));
- else
- gcc_unreachable ();
+ emit_insn (gen_omp_simt_enter (Pmode, operands[0], operands[1], operands[2]));
DONE;
})
@@ -1275,17 +1269,11 @@
[(match_operand 0 "nvptx_register_operand" "R")]
""
{
- gcc_assert (GET_MODE (operands[0]) == Pmode);
- if (GET_MODE (operands[0]) == DImode)
- emit_insn (gen_omp_simt_exit_di (operands[0]));
- else if (GET_MODE (operands[0]) == SImode)
- emit_insn (gen_omp_simt_exit_si (operands[0]));
- else
- gcc_unreachable ();
+ emit_insn (gen_omp_simt_exit (Pmode, operands[0]));
DONE;
})
-(define_insn "omp_simt_exit_<mode>"
+(define_insn "@omp_simt_exit_<mode>"
[(unspec_volatile [(match_operand:P 0 "nvptx_register_operand" "R")]
UNSPECV_SIMT_EXIT)]
""