aboutsummaryrefslogtreecommitdiff
path: root/gcc/config/nvptx
diff options
context:
space:
mode:
authorTom de Vries <tdevries@suse.de>2022-03-29 16:04:09 +0200
committerTom de Vries <tdevries@suse.de>2022-03-29 16:16:31 +0200
commita2eacdbd4c4a698b3b6f27ef5e1f8dd3d836b2e5 (patch)
treeb048248848706ee3d0368274b9744bae56ffcfa1 /gcc/config/nvptx
parent1625e893cca658a8df3dea50189c932a7025e223 (diff)
downloadgcc-a2eacdbd4c4a698b3b6f27ef5e1f8dd3d836b2e5.zip
gcc-a2eacdbd4c4a698b3b6f27ef5e1f8dd3d836b2e5.tar.gz
gcc-a2eacdbd4c4a698b3b6f27ef5e1f8dd3d836b2e5.tar.bz2
[nvptx] Add __PTX_ISA_VERSION_{MAJOR,MINOR}__
Add preprocessor macros __PTX_ISA_VERSION_MAJOR__ and __PTX_ISA_VERSION_MINOR__. For the default 6.0, we have: ... $ echo | cc1 -E -dD - 2>&1 | grep PTX_ISA_VERSION #define __PTX_ISA_VERSION_MAJOR__ 6 #define __PTX_ISA_VERSION_MINOR__ 0 ... and for 3.1, we have: ... $ echo | cc1 -mptx=3.1 -E -dD - 2>&1 | grep PTX_ISA_VERSION #define __PTX_ISA_VERSION_MAJOR__ 3 #define __PTX_ISA_VERSION_MINOR__ 1 ... These can be used to express things like: ... #if __PTX_ISA_VERSION_MAJOR__ >= 4 && __PTX_ISA_VERSION_MAJOR__ >= 1 /* Code using %dynamic_smem_size. */ #else /* Fallback code. */ #endif ... Tested on nvptx. gcc/ChangeLog: 2022-03-29 Tom de Vries <tdevries@suse.de> PR target/104857 * config/nvptx/nvptx-c.cc (nvptx_cpu_cpp_builtins): Emit __PTX_ISA_VERSION_MAJOR__ and __PTX_ISA_VERSION_MINOR__. * config/nvptx/nvptx.cc (ptx_version_to_number): New function. * config/nvptx/nvptx-protos.h (ptx_version_to_number): Declare. gcc/testsuite/ChangeLog: 2022-03-29 Tom de Vries <tdevries@suse.de> PR target/104857 * gcc.target/nvptx/ptx31.c: New test. * gcc.target/nvptx/ptx60.c: New test. * gcc.target/nvptx/ptx63.c: New test. * gcc.target/nvptx/ptx70.c: New test.
Diffstat (limited to 'gcc/config/nvptx')
-rw-r--r--gcc/config/nvptx/nvptx-c.cc9
-rw-r--r--gcc/config/nvptx/nvptx-protos.h1
-rw-r--r--gcc/config/nvptx/nvptx.cc22
3 files changed, 32 insertions, 0 deletions
diff --git a/gcc/config/nvptx/nvptx-c.cc b/gcc/config/nvptx/nvptx-c.cc
index 02f7562..f060a8a 100644
--- a/gcc/config/nvptx/nvptx-c.cc
+++ b/gcc/config/nvptx/nvptx-c.cc
@@ -49,5 +49,14 @@ nvptx_cpu_cpp_builtins (void)
#include "nvptx-sm.def"
#undef NVPTX_SM
cpp_define (parse_in, ptx_sm);
+
+ {
+ unsigned major
+ = ptx_version_to_number ((ptx_version)ptx_version_option, true);
+ unsigned minor
+ = ptx_version_to_number ((ptx_version)ptx_version_option, false);
+ cpp_define_formatted (parse_in, "__PTX_ISA_VERSION_MAJOR__=%u", major);
+ cpp_define_formatted (parse_in, "__PTX_ISA_VERSION_MINOR__=%u", minor);
+ }
}
diff --git a/gcc/config/nvptx/nvptx-protos.h b/gcc/config/nvptx/nvptx-protos.h
index ca0a87e..dfa08ec 100644
--- a/gcc/config/nvptx/nvptx-protos.h
+++ b/gcc/config/nvptx/nvptx-protos.h
@@ -44,6 +44,7 @@ extern void nvptx_cpu_cpp_builtins (void);
extern void nvptx_register_pragmas (void);
extern unsigned int nvptx_data_alignment (const_tree, unsigned int);
extern void nvptx_asm_output_def_from_decls (FILE *, tree, tree);
+extern unsigned int ptx_version_to_number (enum ptx_version, bool);
#ifdef RTX_CODE
extern void nvptx_expand_oacc_fork (unsigned);
diff --git a/gcc/config/nvptx/nvptx.cc b/gcc/config/nvptx/nvptx.cc
index 87efc23..e4297e2 100644
--- a/gcc/config/nvptx/nvptx.cc
+++ b/gcc/config/nvptx/nvptx.cc
@@ -272,6 +272,28 @@ ptx_version_to_string (enum ptx_version v)
}
}
+unsigned int
+ptx_version_to_number (enum ptx_version v, bool major_p)
+{
+ switch (v)
+ {
+ case PTX_VERSION_3_0:
+ return major_p ? 3 : 0;
+ case PTX_VERSION_3_1:
+ return major_p ? 3 : 1;
+ case PTX_VERSION_4_2:
+ return major_p ? 4 : 2;
+ case PTX_VERSION_6_0:
+ return major_p ? 6 : 0;
+ case PTX_VERSION_6_3:
+ return major_p ? 6 : 3;
+ case PTX_VERSION_7_0:
+ return major_p ? 7 : 0;
+ default:
+ gcc_unreachable ();
+ }
+}
+
static const char *
sm_version_to_string (enum ptx_isa sm)
{