diff options
author | Tom de Vries <tdevries@suse.de> | 2022-03-29 16:04:09 +0200 |
---|---|---|
committer | Tom de Vries <tdevries@suse.de> | 2022-03-29 16:16:31 +0200 |
commit | a2eacdbd4c4a698b3b6f27ef5e1f8dd3d836b2e5 (patch) | |
tree | b048248848706ee3d0368274b9744bae56ffcfa1 /gcc/config/nvptx | |
parent | 1625e893cca658a8df3dea50189c932a7025e223 (diff) | |
download | gcc-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.cc | 9 | ||||
-rw-r--r-- | gcc/config/nvptx/nvptx-protos.h | 1 | ||||
-rw-r--r-- | gcc/config/nvptx/nvptx.cc | 22 |
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) { |