[ was: Re: [nvptx] Fix missing mode warnings in nvptx.md, omp part ] On 17-06-19 17:09, Jakub Jelinek wrote: > On Mon, Jun 17, 2019 at 04:53:24PM +0200, Tom de Vries wrote: >> Updated accordingly, and committed as attached. > > Note, current trunk allows one to define expanders that take mode as the > first argument, so you could > (define_insn "@set_softstack_<mode>" > [(unspec [(match_operand:P 0 "nvptx_register_operand" "R")] > UNSPEC_SET_SOFTSTACK)] > "TARGET_SOFT_STACK" > ... > and then just use gen_set_softstack (Pmode, arg).
Thanks, that's useful. Committed as attached. Thanks, - Tom
[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 <tdevr...@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(-) diff --git a/gcc/config/nvptx/nvptx-protos.h b/gcc/config/nvptx/nvptx-protos.h index 061897a3921..be09a15e49c 100644 --- a/gcc/config/nvptx/nvptx-protos.h +++ b/gcc/config/nvptx/nvptx-protos.h @@ -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 diff --git a/gcc/config/nvptx/nvptx.c b/gcc/config/nvptx/nvptx.c index aa4a67fbead..c53a1ae9f26 100644 --- a/gcc/config/nvptx/nvptx.c +++ b/gcc/config/nvptx/nvptx.c @@ -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) \ diff --git a/gcc/config/nvptx/nvptx.md b/gcc/config/nvptx/nvptx.md index 84c0ea45431..58a18fe21cf 100644 --- a/gcc/config/nvptx/nvptx.md +++ b/gcc/config/nvptx/nvptx.md @@ -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)] ""