[nvptx] Use define_insn parametrization
authorTom de Vries <tdevries@suse.de>
Tue, 18 Jun 2019 09:19:41 +0000 (09:19 +0000)
committerTom de Vries <vries@gcc.gnu.org>
Tue, 18 Jun 2019 09:19:41 +0000 (09:19 +0000)
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.

From-SVN: r272413

gcc/ChangeLog
gcc/config/nvptx/nvptx-protos.h
gcc/config/nvptx/nvptx.c
gcc/config/nvptx/nvptx.md

index 15bc6d734ad90749e8896677c939d4eb5833eff0..cdfaa5fbf233a79b58548f0797bc7377b5274247 100644 (file)
@@ -1,3 +1,14 @@
+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.
+
 2019-06-18  Richard Sandiford  <richard.sandiford@arm.com>
 
        * tree-vect-loop-manip.c (vect_set_loop_masks_directly): Remove
index 061897a39213dd249ecb4ffc890306b473d6f52d..be09a15e49c65a665ae5e6a43c357d1408f76757 100644 (file)
@@ -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
index aa4a67fbeadcd24151445986a8f9e3066a83605a..c53a1ae9f26abf9d05231b9bb84753e4e9403a2f 100644 (file)
@@ -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) \
index 84c0ea4543152e6a3b6f60e6ab8e31fa8410020a..58a18fe21cfd9e955c0b807077d179ca81eaf75f 100644 (file)
   ""
 {
   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;
 })
     {
       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;
     }
   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"
   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;
 })
 
 ;; 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")]
   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;
 })
 
   [(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)]
   ""