+2019-06-17 Tom de Vries <tdevries@suse.de>
+
+ * config/nvptx/nvptx-protos.h (gen_set_softstack_insn): Declare.
+ * config/nvptx/nvptx.c (gen_set_softstack_insn): New function.
+ * config/nvptx/nvptx.md (define_insn "set_softstack_insn"): Rename to
+ ...
+ (define_insn "set_softstack_<mode>"): ... this. Use P iterator on
+ match_operand 0.
+ (define_insn "omp_simt_enter_insn"): Rename to ...
+ (define_insn "omp_simt_enter_<mode>"): ... this. Use P iterator on
+ match_operand 0, 1 and 2, as well as the unspec_volatile result.
+ (define_expand "omp_simt_enter): Use gen_omp_simt_enter_di and
+ gen_omp_simt_enter_si.
+ (define_expand "omp_simt_exit"): New.
+ (define_insn "omp_simt_exit"): Rename to ...
+ (define_insn "omp_simt_exit_<mode>"): ... this. Use P iterator on
+ match_operand 0.
+
2019-06-17 Matthew Green <mrg@eterna.com.au>
Maya Rashish <coypu@sdf.org>
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) \
DONE;
})
-(define_insn "set_softstack_insn"
- [(unspec [(match_operand 0 "nvptx_register_operand" "R")]
+(define_insn "set_softstack_<mode>"
+ [(unspec [(match_operand:P 0 "nvptx_register_operand" "R")]
UNSPEC_SET_SOFTSTACK)]
"TARGET_SOFT_STACK"
{
;; Patterns for OpenMP SIMD-via-SIMT lowering
-(define_insn "omp_simt_enter_insn"
- [(set (match_operand 0 "nvptx_register_operand" "=R")
- (unspec_volatile [(match_operand 1 "nvptx_nonmemory_operand" "Ri")
- (match_operand 2 "nvptx_nonmemory_operand" "Ri")]
+(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")]
UNSPECV_SIMT_ENTER))]
""
{
cfun->machine->simt_stack_align = MAX (UINTVAL (operands[2]),
cfun->machine->simt_stack_align);
cfun->machine->has_simtreg = true;
- emit_insn (gen_omp_simt_enter_insn (operands[0], operands[1], operands[2]));
+ 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 ();
+ DONE;
+})
+
+(define_expand "omp_simt_exit"
+ [(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 ();
DONE;
})
-(define_insn "omp_simt_exit"
- [(unspec_volatile [(match_operand 0 "nvptx_register_operand" "R")]
+(define_insn "omp_simt_exit_<mode>"
+ [(unspec_volatile [(match_operand:P 0 "nvptx_register_operand" "R")]
UNSPECV_SIMT_EXIT)]
""
{