[committed][nvptx] Add -mptx=_ in gcc.target/nvptx/smxx.c
Hi, With target board nvptx-none-run/-mptx=3.1 we run into: ... cc1: error: PTX version (-mptx) needs to be at least 4.2 to support \ selected -misa (sm_53)^M compiler exited with status 1 FAIL: gcc.target/nvptx/sm53.c (test for excess errors) ... Fix this by adding -mptx=_ in sm53.c and similar. Tested on nvptx. Committed to trunk. Thanks, - Tom [nvptx] Add -mptx=_ in gcc.target/nvptx/smxx.c gcc/testsuite/ChangeLog: 2022-03-03 Tom de Vries * gcc.target/nvptx/sm53.c: Add -mptx=_. * gcc.target/nvptx/sm70.c: Same. * gcc.target/nvptx/sm75.c: Same. * gcc.target/nvptx/sm80.c: Same. --- gcc/testsuite/gcc.target/nvptx/sm53.c | 2 +- gcc/testsuite/gcc.target/nvptx/sm70.c | 2 +- gcc/testsuite/gcc.target/nvptx/sm75.c | 2 +- gcc/testsuite/gcc.target/nvptx/sm80.c | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/gcc/testsuite/gcc.target/nvptx/sm53.c b/gcc/testsuite/gcc.target/nvptx/sm53.c index c47790b6448..b4d819c6a79 100644 --- a/gcc/testsuite/gcc.target/nvptx/sm53.c +++ b/gcc/testsuite/gcc.target/nvptx/sm53.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-misa=sm_53" } */ +/* { dg-options "-misa=sm_53 -mptx=_" } */ #if __PTX_SM__ != 530 #error wrong value for __PTX_SM__ diff --git a/gcc/testsuite/gcc.target/nvptx/sm70.c b/gcc/testsuite/gcc.target/nvptx/sm70.c index dc5a5fd8bfa..4bd012b5680 100644 --- a/gcc/testsuite/gcc.target/nvptx/sm70.c +++ b/gcc/testsuite/gcc.target/nvptx/sm70.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-misa=sm_70" } */ +/* { dg-options "-misa=sm_70 -mptx=_" } */ #if __PTX_SM__ != 700 #error wrong value for __PTX_SM__ diff --git a/gcc/testsuite/gcc.target/nvptx/sm75.c b/gcc/testsuite/gcc.target/nvptx/sm75.c index c098bf77ca2..d159d3f5fb3 100644 --- a/gcc/testsuite/gcc.target/nvptx/sm75.c +++ b/gcc/testsuite/gcc.target/nvptx/sm75.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-misa=sm_75" } */ +/* { dg-options "-misa=sm_75 -mptx=_" } */ #if __PTX_SM__ != 750 #error wrong value for __PTX_SM__ diff --git a/gcc/testsuite/gcc.target/nvptx/sm80.c b/gcc/testsuite/gcc.target/nvptx/sm80.c index 3770563eb16..ef6d8b7fa23 100644 --- a/gcc/testsuite/gcc.target/nvptx/sm80.c +++ b/gcc/testsuite/gcc.target/nvptx/sm80.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-misa=sm_80" } */ +/* { dg-options "-misa=sm_80 -mptx=_" } */ #if __PTX_SM__ != 800 #error wrong value for __PTX_SM__
[committed][nvptx] Add -mptx=_
Hi, Add an -mptx=_ value, that indicates the default ptx version. It can be used to undo an explicit -mptx setting, so this: ... $ gcc test.c -mptx=3.1 -mptx=_ ... has the same effect as: ... $ gcc test.c ... Tested on nvptx. Committed to trunk. Thanks, - Tom [nvptx] Add -mptx=_ gcc/ChangeLog: 2022-02-28 Tom de Vries * config/nvptx/nvptx-opts.h (enum ptx_version): Add PTX_VERSION_default. * config/nvptx/nvptx.cc (handle_ptx_version_option): Handle PTX_VERSION_default. * config/nvptx/nvptx.opt: Add EnumValue "_" / PTX_VERSION_default. --- gcc/config/nvptx/nvptx-opts.h | 1 + gcc/config/nvptx/nvptx.cc | 3 ++- gcc/config/nvptx/nvptx.opt| 3 +++ 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/gcc/config/nvptx/nvptx-opts.h b/gcc/config/nvptx/nvptx-opts.h index e918d43ea16..30852b6992c 100644 --- a/gcc/config/nvptx/nvptx-opts.h +++ b/gcc/config/nvptx/nvptx-opts.h @@ -32,6 +32,7 @@ enum ptx_isa enum ptx_version { + PTX_VERSION_default, PTX_VERSION_3_0, PTX_VERSION_3_1, PTX_VERSION_4_2, diff --git a/gcc/config/nvptx/nvptx.cc b/gcc/config/nvptx/nvptx.cc index b9451c2ed09..7862a90a65a 100644 --- a/gcc/config/nvptx/nvptx.cc +++ b/gcc/config/nvptx/nvptx.cc @@ -296,7 +296,8 @@ sm_version_to_string (enum ptx_isa sm) static void handle_ptx_version_option (void) { - if (!OPTION_SET_P (ptx_version_option)) + if (!OPTION_SET_P (ptx_version_option) + || ptx_version_option == PTX_VERSION_default) { ptx_version_option = default_ptx_version_option (); return; diff --git a/gcc/config/nvptx/nvptx.opt b/gcc/config/nvptx/nvptx.opt index 9776c3b9a1f..f555ad1d8bf 100644 --- a/gcc/config/nvptx/nvptx.opt +++ b/gcc/config/nvptx/nvptx.opt @@ -94,6 +94,9 @@ Enum(ptx_version) String(6.3) Value(PTX_VERSION_6_3) EnumValue Enum(ptx_version) String(7.0) Value(PTX_VERSION_7_0) +EnumValue +Enum(ptx_version) String(_) Value(PTX_VERSION_default) + mptx= Target RejectNegative ToLower Joined Enum(ptx_version) Var(ptx_version_option) Specify the version of the ptx version to use.
[committed][nvptx] Add -mptx-comment
Hi, Add functionality that indicates which insns are added by -minit-regs, such that for instance we have for pr53465.s: ... // #APP // 9 "gcc/testsuite/gcc.c-torture/execute/pr53465.c" 1 // Start: Added by -minit-regs=3: // #NO_APP mov.u32 %r26, 0; // #APP // 9 "gcc/testsuite/gcc.c-torture/execute/pr53465.c" 1 // End: Added by -minit-regs=3: // #NO_APP ... Can be switched off using -mno-ptx-comment. Tested on nvptx. Committed to trunk. Thanks, - Tom [nvptx] Add -mptx-comment gcc/ChangeLog: 2022-02-21 Tom de Vries * config/nvptx/nvptx.cc (gen_comment): New function. (workaround_uninit_method_1, workaround_uninit_method_2) (workaround_uninit_method_3): : Use gen_comment. * config/nvptx/nvptx.opt (mptx-comment): New option. --- gcc/config/nvptx/nvptx.cc | 42 ++ gcc/config/nvptx/nvptx.opt | 3 +++ 2 files changed, 45 insertions(+) diff --git a/gcc/config/nvptx/nvptx.cc b/gcc/config/nvptx/nvptx.cc index a37a6c78b41..981b91f7095 100644 --- a/gcc/config/nvptx/nvptx.cc +++ b/gcc/config/nvptx/nvptx.cc @@ -5372,6 +5372,17 @@ workaround_barsyncs (void) } #endif +static rtx +gen_comment (const char *s) +{ + const char *sep = " "; + size_t len = strlen (ASM_COMMENT_START) + strlen (sep) + strlen (s) + 1; + char *comment = (char *) alloca (len); + snprintf (comment, len, "%s%s%s", ASM_COMMENT_START, sep, s); + return gen_rtx_ASM_INPUT_loc (VOIDmode, ggc_strdup (comment), + cfun->function_start_locus); +} + /* Initialize all declared regs at function entry. Advantage : Fool-proof. Disadvantage: Potentially creates a lot of long live ranges and adds a lot @@ -5394,6 +5405,8 @@ workaround_uninit_method_1 (void) gcc_assert (CONST0_RTX (GET_MODE (reg))); start_sequence (); + if (nvptx_comment && first != NULL) + emit_insn (gen_comment ("Start: Added by -minit-regs=1")); emit_move_insn (reg, CONST0_RTX (GET_MODE (reg))); rtx_insn *inits = get_insns (); end_sequence (); @@ -5411,6 +5424,9 @@ workaround_uninit_method_1 (void) else insert_here = emit_insn_after (inits, insert_here); } + + if (nvptx_comment && insert_here != NULL) +emit_insn_after (gen_comment ("End: Added by -minit-regs=1"), insert_here); } /* Find uses of regs that are not defined on all incoming paths, and insert a @@ -5446,6 +5462,8 @@ workaround_uninit_method_2 (void) gcc_assert (CONST0_RTX (GET_MODE (reg))); start_sequence (); + if (nvptx_comment && first != NULL) + emit_insn (gen_comment ("Start: Added by -minit-regs=2:")); emit_move_insn (reg, CONST0_RTX (GET_MODE (reg))); rtx_insn *inits = get_insns (); end_sequence (); @@ -5463,6 +5481,9 @@ workaround_uninit_method_2 (void) else insert_here = emit_insn_after (inits, insert_here); } + + if (nvptx_comment && insert_here != NULL) +emit_insn_after (gen_comment ("End: Added by -minit-regs=2"), insert_here); } /* Find uses of regs that are not defined on all incoming paths, and insert a @@ -5531,6 +5552,27 @@ workaround_uninit_method_3 (void) } } + if (nvptx_comment) +FOR_EACH_BB_FN (bb, cfun) + { + if (single_pred_p (bb)) + continue; + + edge e; + edge_iterator ei; + FOR_EACH_EDGE (e, ei, bb->preds) + { + if (e->insns.r == NULL_RTX) + continue; + start_sequence (); + emit_insn (gen_comment ("Start: Added by -minit-regs=3:")); + emit_insn (e->insns.r); + emit_insn (gen_comment ("End: Added by -minit-regs=3:")); + e->insns.r = get_insns (); + end_sequence (); + } + } + commit_edge_insertions (); } diff --git a/gcc/config/nvptx/nvptx.opt b/gcc/config/nvptx/nvptx.opt index 08580071731..e56ec9288da 100644 --- a/gcc/config/nvptx/nvptx.opt +++ b/gcc/config/nvptx/nvptx.opt @@ -95,3 +95,6 @@ Specify the version of the ptx version to use. minit-regs= Target Var(nvptx_init_regs) IntegerRange(0, 3) Joined UInteger Init(3) Initialize ptx registers. + +mptx-comment +Target Var(nvptx_comment) Init(1) Undocumented
[committed][nvptx] Add -mptx=7.0
Hi, Add support for ptx isa version 7.0, required for the addition of -misa=sm_75 and -misa=sm_80. Tested by setting the default ptx isa version to 7.0, and doing a build and libgomp test run. Committed to trunk. Thanks, - Tom [nvptx] Add -mptx=7.0 gcc/ChangeLog: * config/nvptx/nvptx-opts.h (enum ptx_version): Add PTX_VERSION_7_0. * config/nvptx/nvptx.c (nvptx_file_start): Handle TARGET_PTX_7_0. * config/nvptx/nvptx.h (TARGET_PTX_7_0): New macro. * config/nvptx/nvptx.opt (ptx_version): Add 7.0. --- gcc/config/nvptx/nvptx-opts.h | 3 ++- gcc/config/nvptx/nvptx.c | 4 +++- gcc/config/nvptx/nvptx.h | 1 + gcc/config/nvptx/nvptx.opt| 3 +++ 4 files changed, 9 insertions(+), 2 deletions(-) diff --git a/gcc/config/nvptx/nvptx-opts.h b/gcc/config/nvptx/nvptx-opts.h index f7371dc274c..396fe871163 100644 --- a/gcc/config/nvptx/nvptx-opts.h +++ b/gcc/config/nvptx/nvptx-opts.h @@ -30,7 +30,8 @@ enum ptx_isa enum ptx_version { PTX_VERSION_3_1, - PTX_VERSION_6_3 + PTX_VERSION_6_3, + PTX_VERSION_7_0 }; #endif diff --git a/gcc/config/nvptx/nvptx.c b/gcc/config/nvptx/nvptx.c index 445d7ce8cc9..51eef2b45b2 100644 --- a/gcc/config/nvptx/nvptx.c +++ b/gcc/config/nvptx/nvptx.c @@ -5404,7 +5404,9 @@ static void nvptx_file_start (void) { fputs ("// BEGIN PREAMBLE\n", asm_out_file); - if (TARGET_PTX_6_3) + if (TARGET_PTX_7_0) +fputs ("\t.version\t7.0\n", asm_out_file); + else if (TARGET_PTX_6_3) fputs ("\t.version\t6.3\n", asm_out_file); else fputs ("\t.version\t3.1\n", asm_out_file); diff --git a/gcc/config/nvptx/nvptx.h b/gcc/config/nvptx/nvptx.h index c3480cc1c26..92fd9d3b6d1 100644 --- a/gcc/config/nvptx/nvptx.h +++ b/gcc/config/nvptx/nvptx.h @@ -90,6 +90,7 @@ #define TARGET_SM53 (ptx_isa_option >= PTX_ISA_SM53) #define TARGET_PTX_6_3 (ptx_version_option >= PTX_VERSION_6_3) +#define TARGET_PTX_7_0 (ptx_version_option >= PTX_VERSION_7_0) /* Registers. Since ptx is a virtual target, we just define a few hard registers for special purposes and leave pseudos unallocated. diff --git a/gcc/config/nvptx/nvptx.opt b/gcc/config/nvptx/nvptx.opt index 514f19d171e..04b45da9249 100644 --- a/gcc/config/nvptx/nvptx.opt +++ b/gcc/config/nvptx/nvptx.opt @@ -79,6 +79,9 @@ Enum(ptx_version) String(3.1) Value(PTX_VERSION_3_1) EnumValue Enum(ptx_version) String(6.3) Value(PTX_VERSION_6_3) +EnumValue +Enum(ptx_version) String(7.0) Value(PTX_VERSION_7_0) + mptx= Target RejectNegative ToLower Joined Enum(ptx_version) Var(ptx_version_option) Init(PTX_VERSION_3_1) Specify the version of the ptx version to use.