* [PATCH] libgccjit: Add support for the type bfloat16 @ 2023-11-16 22:19 Antoni Boucher 2023-11-16 22:20 ` Antoni Boucher 0 siblings, 1 reply; 6+ messages in thread From: Antoni Boucher @ 2023-11-16 22:19 UTC (permalink / raw) To: jit, gcc-patches; +Cc: David Malcolm Hi. This patch adds the support for the type bfloat16 (bug 112574). This was asked to be splitted from a another patch sent here: https://gcc.gnu.org/pipermail/jit/2023q1/001607.html Thanks for the review. ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] libgccjit: Add support for the type bfloat16 2023-11-16 22:19 [PATCH] libgccjit: Add support for the type bfloat16 Antoni Boucher @ 2023-11-16 22:20 ` Antoni Boucher 2023-12-01 14:52 ` Antoni Boucher 2023-12-01 17:45 ` David Malcolm 0 siblings, 2 replies; 6+ messages in thread From: Antoni Boucher @ 2023-11-16 22:20 UTC (permalink / raw) To: jit, gcc-patches; +Cc: David Malcolm [-- Attachment #1: Type: text/plain, Size: 322 bytes --] I forgot to attach the patch. On Thu, 2023-11-16 at 17:19 -0500, Antoni Boucher wrote: > Hi. > This patch adds the support for the type bfloat16 (bug 112574). > > This was asked to be splitted from a another patch sent here: > https://gcc.gnu.org/pipermail/jit/2023q1/001607.html > > Thanks for the review. [-- Attachment #2: 0001-libgccjit-Add-support-for-the-type-bfloat16.patch --] [-- Type: text/x-patch, Size: 7391 bytes --] From 0e57583bba7e9fe5f5ff89559d4f29bf1bd7a240 Mon Sep 17 00:00:00 2001 From: Antoni Boucher <bouanto@zoho.com> Date: Thu, 16 Nov 2023 10:59:22 -0500 Subject: [PATCH] libgccjit: Add support for the type bfloat16 gcc/jit/ChangeLog: PR jit/112574 * docs/topics/types.rst: Document GCC_JIT_TYPE_BFLOAT16. * jit-common.h: Update NUM_GCC_JIT_TYPES. * jit-playback.cc (get_tree_node_for_type): Support bfloat16. * jit-recording.cc (recording::memento_of_get_type::get_size, recording::memento_of_get_type::dereference, recording::memento_of_get_type::is_int, recording::memento_of_get_type::is_signed, recording::memento_of_get_type::is_float, recording::memento_of_get_type::is_bool): Support bfloat16. * libgccjit.h (enum gcc_jit_types): Add GCC_JIT_TYPE_BFLOAT16. gcc/testsuite/ChangeLog: PR jit/112574 * jit.dg/test-types.c: Test GCC_JIT_TYPE_BFLOAT16. * jit.dg/test-bfloat16.c: New test. --- gcc/jit/docs/topics/types.rst | 2 ++ gcc/jit/jit-common.h | 2 +- gcc/jit/jit-playback.cc | 2 ++ gcc/jit/jit-recording.cc | 11 +++++++++ gcc/jit/libgccjit.h | 4 ++- gcc/testsuite/jit.dg/test-bfloat16.c | 37 ++++++++++++++++++++++++++++ gcc/testsuite/jit.dg/test-types.c | 2 ++ 7 files changed, 58 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/jit.dg/test-bfloat16.c diff --git a/gcc/jit/docs/topics/types.rst b/gcc/jit/docs/topics/types.rst index d8c1d15d69d..1ae814a349d 100644 --- a/gcc/jit/docs/topics/types.rst +++ b/gcc/jit/docs/topics/types.rst @@ -113,6 +113,8 @@ Standard types - C99's ``__int128_t`` * - :c:data:`GCC_JIT_TYPE_FLOAT` - + * - :c:data:`GCC_JIT_TYPE_BFLOAT16` + - C's ``__bfloat16`` * - :c:data:`GCC_JIT_TYPE_DOUBLE` - * - :c:data:`GCC_JIT_TYPE_LONG_DOUBLE` diff --git a/gcc/jit/jit-common.h b/gcc/jit/jit-common.h index 80c1618da96..983c9190d44 100644 --- a/gcc/jit/jit-common.h +++ b/gcc/jit/jit-common.h @@ -36,7 +36,7 @@ along with GCC; see the file COPYING3. If not see #endif #endif -const int NUM_GCC_JIT_TYPES = GCC_JIT_TYPE_INT128_T + 1; +const int NUM_GCC_JIT_TYPES = GCC_JIT_TYPE_BFLOAT16 + 1; /* This comment is included by the docs. diff --git a/gcc/jit/jit-playback.cc b/gcc/jit/jit-playback.cc index 18cc4da25b8..7e1c97a4638 100644 --- a/gcc/jit/jit-playback.cc +++ b/gcc/jit/jit-playback.cc @@ -280,6 +280,8 @@ get_tree_node_for_type (enum gcc_jit_types type_) case GCC_JIT_TYPE_FLOAT: return float_type_node; + case GCC_JIT_TYPE_BFLOAT16: + return bfloat16_type_node; case GCC_JIT_TYPE_DOUBLE: return double_type_node; case GCC_JIT_TYPE_LONG_DOUBLE: diff --git a/gcc/jit/jit-recording.cc b/gcc/jit/jit-recording.cc index 9b5b8005ebe..af8b7a421ec 100644 --- a/gcc/jit/jit-recording.cc +++ b/gcc/jit/jit-recording.cc @@ -2385,6 +2385,10 @@ recording::memento_of_get_type::get_size () case GCC_JIT_TYPE_FLOAT: size = FLOAT_TYPE_SIZE; break; +#ifdef HAVE_BFmode + case GCC_JIT_TYPE_BFLOAT16: + return GET_MODE_UNIT_SIZE (BFmode); +#endif case GCC_JIT_TYPE_DOUBLE: size = DOUBLE_TYPE_SIZE; break; @@ -2444,6 +2448,7 @@ recording::memento_of_get_type::dereference () case GCC_JIT_TYPE_INT64_T: case GCC_JIT_TYPE_INT128_T: case GCC_JIT_TYPE_FLOAT: + case GCC_JIT_TYPE_BFLOAT16: case GCC_JIT_TYPE_DOUBLE: case GCC_JIT_TYPE_LONG_DOUBLE: case GCC_JIT_TYPE_COMPLEX_FLOAT: @@ -2508,6 +2513,7 @@ recording::memento_of_get_type::is_int () const return true; case GCC_JIT_TYPE_FLOAT: + case GCC_JIT_TYPE_BFLOAT16: case GCC_JIT_TYPE_DOUBLE: case GCC_JIT_TYPE_LONG_DOUBLE: return false; @@ -2566,6 +2572,7 @@ recording::memento_of_get_type::is_signed () const case GCC_JIT_TYPE_UINT128_T: case GCC_JIT_TYPE_FLOAT: + case GCC_JIT_TYPE_BFLOAT16: case GCC_JIT_TYPE_DOUBLE: case GCC_JIT_TYPE_LONG_DOUBLE: @@ -2625,6 +2632,7 @@ recording::memento_of_get_type::is_float () const return false; case GCC_JIT_TYPE_FLOAT: + case GCC_JIT_TYPE_BFLOAT16: case GCC_JIT_TYPE_DOUBLE: case GCC_JIT_TYPE_LONG_DOUBLE: return true; @@ -2688,6 +2696,7 @@ recording::memento_of_get_type::is_bool () const return false; case GCC_JIT_TYPE_FLOAT: + case GCC_JIT_TYPE_BFLOAT16: case GCC_JIT_TYPE_DOUBLE: case GCC_JIT_TYPE_LONG_DOUBLE: return false; @@ -2768,6 +2777,7 @@ static const char * const get_type_strings[] = { "__int64_t", /* GCC_JIT_TYPE_INT64_T */ "__int128_t", /* GCC_JIT_TYPE_INT128_T */ + "bfloat16", /* GCC_JIT_TYPE_BFLOAT16 */ }; /* Implementation of recording::memento::make_debug_string for @@ -2813,6 +2823,7 @@ static const char * const get_type_enum_strings[] = { "GCC_JIT_TYPE_INT32_T", "GCC_JIT_TYPE_INT64_T", "GCC_JIT_TYPE_INT128_T", + "GCC_JIT_TYPE_BFLOAT16", }; void diff --git a/gcc/jit/libgccjit.h b/gcc/jit/libgccjit.h index 749f6c24177..1633753fb89 100644 --- a/gcc/jit/libgccjit.h +++ b/gcc/jit/libgccjit.h @@ -604,7 +604,9 @@ enum gcc_jit_types GCC_JIT_TYPE_INT16_T, GCC_JIT_TYPE_INT32_T, GCC_JIT_TYPE_INT64_T, - GCC_JIT_TYPE_INT128_T + GCC_JIT_TYPE_INT128_T, + + GCC_JIT_TYPE_BFLOAT16, }; extern gcc_jit_type * diff --git a/gcc/testsuite/jit.dg/test-bfloat16.c b/gcc/testsuite/jit.dg/test-bfloat16.c new file mode 100644 index 00000000000..6aed3920351 --- /dev/null +++ b/gcc/testsuite/jit.dg/test-bfloat16.c @@ -0,0 +1,37 @@ +/* { dg-do compile { target x86_64-*-* } } */ + +#include <stdlib.h> +#include <stdio.h> + +#include "libgccjit.h" + +/* We don't want set_options() in harness.h to set -O3 so our little local + is optimized away. */ +#define TEST_ESCHEWS_SET_OPTIONS +static void set_options (gcc_jit_context *ctxt, const char *argv0) +{ +} + +#define TEST_COMPILING_TO_FILE +#define OUTPUT_KIND GCC_JIT_OUTPUT_KIND_ASSEMBLER +#define OUTPUT_FILENAME "output-of-test-bfloat16.c.s" +#include "harness.h" + +void +create_code (gcc_jit_context *ctxt, void *user_data) +{ + gcc_jit_type *bf16_type = + gcc_jit_context_get_type (ctxt, GCC_JIT_TYPE_BFLOAT16); + + gcc_jit_lvalue *foo = + gcc_jit_context_new_global ( + ctxt, NULL, GCC_JIT_GLOBAL_EXPORTED, bf16_type, "foo"); + + gcc_jit_rvalue *value = + gcc_jit_context_new_rvalue_from_double (ctxt, bf16_type, 3.1415); + gcc_jit_global_set_initializer_rvalue (foo, value); +} + +/* { dg-final { jit-verify-output-file-was-created "" } } */ +/* { dg-final { jit-verify-assembler-output ".value 16457" } } */ +/* { dg-final { jit-verify-assembler-output ".size foo, 2" } } */ diff --git a/gcc/testsuite/jit.dg/test-types.c b/gcc/testsuite/jit.dg/test-types.c index a01944e35fa..9e7c4f3e046 100644 --- a/gcc/testsuite/jit.dg/test-types.c +++ b/gcc/testsuite/jit.dg/test-types.c @@ -1,3 +1,4 @@ +#include <immintrin.h> #include <stdint.h> #include <stdlib.h> #include <stdio.h> @@ -492,4 +493,5 @@ verify_code (gcc_jit_context *ctxt, gcc_jit_result *result) CHECK_VALUE (gcc_jit_type_get_size (gcc_jit_context_get_type (ctxt, GCC_JIT_TYPE_FLOAT)), sizeof (float)); CHECK_VALUE (gcc_jit_type_get_size (gcc_jit_context_get_type (ctxt, GCC_JIT_TYPE_DOUBLE)), sizeof (double)); + CHECK_VALUE (gcc_jit_type_get_size (gcc_jit_context_get_type (ctxt, GCC_JIT_TYPE_BFLOAT16)), sizeof (__bfloat16)); } -- 2.42.1 ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] libgccjit: Add support for the type bfloat16 2023-11-16 22:20 ` Antoni Boucher @ 2023-12-01 14:52 ` Antoni Boucher 2023-12-01 17:45 ` David Malcolm 1 sibling, 0 replies; 6+ messages in thread From: Antoni Boucher @ 2023-12-01 14:52 UTC (permalink / raw) To: jit, gcc-patches; +Cc: David Malcolm David: ping. On Thu, 2023-11-16 at 17:20 -0500, Antoni Boucher wrote: > I forgot to attach the patch. > > On Thu, 2023-11-16 at 17:19 -0500, Antoni Boucher wrote: > > Hi. > > This patch adds the support for the type bfloat16 (bug 112574). > > > > This was asked to be splitted from a another patch sent here: > > https://gcc.gnu.org/pipermail/jit/2023q1/001607.html > > > > Thanks for the review. > ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] libgccjit: Add support for the type bfloat16 2023-11-16 22:20 ` Antoni Boucher 2023-12-01 14:52 ` Antoni Boucher @ 2023-12-01 17:45 ` David Malcolm 2024-02-21 15:56 ` Antoni Boucher 1 sibling, 1 reply; 6+ messages in thread From: David Malcolm @ 2023-12-01 17:45 UTC (permalink / raw) To: Antoni Boucher, jit, gcc-patches On Thu, 2023-11-16 at 17:20 -0500, Antoni Boucher wrote: > I forgot to attach the patch. > > On Thu, 2023-11-16 at 17:19 -0500, Antoni Boucher wrote: > > Hi. > > This patch adds the support for the type bfloat16 (bug 112574). > > > > This was asked to be splitted from a another patch sent here: > > https://gcc.gnu.org/pipermail/jit/2023q1/001607.html > > > > Thanks for the review. > Thanks for the patch. > diff --git a/gcc/jit/jit-playback.cc b/gcc/jit/jit-playback.cc > index 18cc4da25b8..7e1c97a4638 100644 > --- a/gcc/jit/jit-playback.cc > +++ b/gcc/jit/jit-playback.cc > @@ -280,6 +280,8 @@ get_tree_node_for_type (enum gcc_jit_types type_) > > case GCC_JIT_TYPE_FLOAT: > return float_type_node; > + case GCC_JIT_TYPE_BFLOAT16: > + return bfloat16_type_node; The code to create bfloat16_type_node (in build_common_tree_nodes) is guarded by #ifdef HAVE_BFmode, so we should probably have a test for this in case GCC_JIT_TYPE_BFLOAT16 to at least add an error message when it's NULL_TREE, rather than silently returning NULL_TREE and crashing. [...] > diff --git a/gcc/testsuite/jit.dg/test-bfloat16.c b/gcc/testsuite/jit.dg/test-bfloat16.c > new file mode 100644 > index 00000000000..6aed3920351 > --- /dev/null > +++ b/gcc/testsuite/jit.dg/test-bfloat16.c > @@ -0,0 +1,37 @@ > +/* { dg-do compile { target x86_64-*-* } } */ > + > +#include <stdlib.h> > +#include <stdio.h> > + > +#include "libgccjit.h" > + > +/* We don't want set_options() in harness.h to set -O3 so our little local > + is optimized away. */ > +#define TEST_ESCHEWS_SET_OPTIONS > +static void set_options (gcc_jit_context *ctxt, const char *argv0) > +{ > +} Please add a comment to all-non-failing-tests.h noting the exclusion of this test case from the array. [...] > diff --git a/gcc/testsuite/jit.dg/test-types.c b/gcc/testsuite/jit.dg/test-types.c > index a01944e35fa..9e7c4f3e046 100644 > --- a/gcc/testsuite/jit.dg/test-types.c > +++ b/gcc/testsuite/jit.dg/test-types.c > @@ -1,3 +1,4 @@ > +#include <immintrin.h> > #include <stdint.h> > #include <stdlib.h> > #include <stdio.h> > @@ -492,4 +493,5 @@ verify_code (gcc_jit_context *ctxt, gcc_jit_result *result) > > CHECK_VALUE (gcc_jit_type_get_size (gcc_jit_context_get_type (ctxt, GCC_JIT_TYPE_FLOAT)), sizeof (float)); > CHECK_VALUE (gcc_jit_type_get_size (gcc_jit_context_get_type (ctxt, GCC_JIT_TYPE_DOUBLE)), sizeof (double)); > + CHECK_VALUE (gcc_jit_type_get_size (gcc_jit_context_get_type (ctxt, GCC_JIT_TYPE_BFLOAT16)), sizeof (__bfloat16)); This is only going to work on targets which #ifdef HAVE_BFmode, so this CHECK_VALUE needs to be conditionalized somehow, to avoid having this, test-combination, and test-threads from bailing out early on targets without BFmode. Dave ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] libgccjit: Add support for the type bfloat16 2023-12-01 17:45 ` David Malcolm @ 2024-02-21 15:56 ` Antoni Boucher 2024-06-26 15:48 ` David Malcolm 0 siblings, 1 reply; 6+ messages in thread From: Antoni Boucher @ 2024-02-21 15:56 UTC (permalink / raw) To: David Malcolm, jit, gcc-patches [-- Attachment #1: Type: text/plain, Size: 3211 bytes --] Thanks for the review. Here's the updated patch. On Fri, 2023-12-01 at 12:45 -0500, David Malcolm wrote: > On Thu, 2023-11-16 at 17:20 -0500, Antoni Boucher wrote: > > I forgot to attach the patch. > > > > On Thu, 2023-11-16 at 17:19 -0500, Antoni Boucher wrote: > > > Hi. > > > This patch adds the support for the type bfloat16 (bug 112574). > > > > > > This was asked to be splitted from a another patch sent here: > > > https://gcc.gnu.org/pipermail/jit/2023q1/001607.html > > > > > > Thanks for the review. > > > > Thanks for the patch. > > > diff --git a/gcc/jit/jit-playback.cc b/gcc/jit/jit-playback.cc > > index 18cc4da25b8..7e1c97a4638 100644 > > --- a/gcc/jit/jit-playback.cc > > +++ b/gcc/jit/jit-playback.cc > > @@ -280,6 +280,8 @@ get_tree_node_for_type (enum gcc_jit_types > > type_) > > > > case GCC_JIT_TYPE_FLOAT: > > return float_type_node; > > + case GCC_JIT_TYPE_BFLOAT16: > > + return bfloat16_type_node; > > The code to create bfloat16_type_node (in build_common_tree_nodes) is > guarded by #ifdef HAVE_BFmode, so we should probably have a test for > this in case GCC_JIT_TYPE_BFLOAT16 to at least add an error message > when it's NULL_TREE, rather than silently returning NULL_TREE and > crashing. > > [...] > > > diff --git a/gcc/testsuite/jit.dg/test-bfloat16.c > > b/gcc/testsuite/jit.dg/test-bfloat16.c > > new file mode 100644 > > index 00000000000..6aed3920351 > > --- /dev/null > > +++ b/gcc/testsuite/jit.dg/test-bfloat16.c > > @@ -0,0 +1,37 @@ > > +/* { dg-do compile { target x86_64-*-* } } */ > > + > > +#include <stdlib.h> > > +#include <stdio.h> > > + > > +#include "libgccjit.h" > > + > > +/* We don't want set_options() in harness.h to set -O3 so our > > little local > > + is optimized away. */ > > +#define TEST_ESCHEWS_SET_OPTIONS > > +static void set_options (gcc_jit_context *ctxt, const char *argv0) > > +{ > > +} > > > Please add a comment to all-non-failing-tests.h noting the exclusion > of > this test case from the array. > > [...] > > > diff --git a/gcc/testsuite/jit.dg/test-types.c > > b/gcc/testsuite/jit.dg/test-types.c > > index a01944e35fa..9e7c4f3e046 100644 > > --- a/gcc/testsuite/jit.dg/test-types.c > > +++ b/gcc/testsuite/jit.dg/test-types.c > > @@ -1,3 +1,4 @@ > > +#include <immintrin.h> > > #include <stdint.h> > > #include <stdlib.h> > > #include <stdio.h> > > @@ -492,4 +493,5 @@ verify_code (gcc_jit_context *ctxt, > > gcc_jit_result *result) > > > > CHECK_VALUE (gcc_jit_type_get_size (gcc_jit_context_get_type > > (ctxt, GCC_JIT_TYPE_FLOAT)), sizeof (float)); > > CHECK_VALUE (gcc_jit_type_get_size (gcc_jit_context_get_type > > (ctxt, GCC_JIT_TYPE_DOUBLE)), sizeof (double)); > > + CHECK_VALUE (gcc_jit_type_get_size (gcc_jit_context_get_type > > (ctxt, GCC_JIT_TYPE_BFLOAT16)), sizeof (__bfloat16)); > > > This is only going to work on targets which #ifdef HAVE_BFmode, so > this > CHECK_VALUE needs to be conditionalized somehow, to avoid having > this, > test-combination, and test-threads from bailing out early on targets > without BFmode. > > Dave > [-- Attachment #2: 0001-libgccjit-Add-support-for-the-type-bfloat16.patch --] [-- Type: text/x-patch, Size: 8226 bytes --] From 3b31bca3a1144a5fa4dc34e402ad3287ccca84dd Mon Sep 17 00:00:00 2001 From: Antoni Boucher <bouanto@zoho.com> Date: Thu, 16 Nov 2023 10:59:22 -0500 Subject: [PATCH] libgccjit: Add support for the type bfloat16 gcc/jit/ChangeLog: PR jit/112574 * docs/topics/types.rst: Document GCC_JIT_TYPE_BFLOAT16. * jit-common.h: Update NUM_GCC_JIT_TYPES. * jit-playback.cc (get_tree_node_for_type): Support bfloat16. * jit-recording.cc (recording::memento_of_get_type::get_size, recording::memento_of_get_type::dereference, recording::memento_of_get_type::is_int, recording::memento_of_get_type::is_signed, recording::memento_of_get_type::is_float, recording::memento_of_get_type::is_bool): Support bfloat16. * libgccjit.h (enum gcc_jit_types): Add GCC_JIT_TYPE_BFLOAT16. gcc/testsuite/ChangeLog: PR jit/112574 * jit.dg/all-non-failing-tests.h: New test test-bfloat16.c. * jit.dg/test-types.c: Test GCC_JIT_TYPE_BFLOAT16. * jit.dg/test-bfloat16.c: New test. --- gcc/jit/docs/topics/types.rst | 2 ++ gcc/jit/jit-common.h | 2 +- gcc/jit/jit-playback.cc | 6 ++++ gcc/jit/jit-recording.cc | 11 ++++++ gcc/jit/libgccjit.h | 4 ++- gcc/testsuite/jit.dg/all-non-failing-tests.h | 3 ++ gcc/testsuite/jit.dg/test-bfloat16.c | 37 ++++++++++++++++++++ gcc/testsuite/jit.dg/test-types.c | 4 +++ 8 files changed, 67 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/jit.dg/test-bfloat16.c diff --git a/gcc/jit/docs/topics/types.rst b/gcc/jit/docs/topics/types.rst index bb51f037b7e..6a7a35280ed 100644 --- a/gcc/jit/docs/topics/types.rst +++ b/gcc/jit/docs/topics/types.rst @@ -113,6 +113,8 @@ Standard types - C99's ``__int128_t`` * - :c:data:`GCC_JIT_TYPE_FLOAT` - + * - :c:data:`GCC_JIT_TYPE_BFLOAT16` + - C's ``__bfloat16`` * - :c:data:`GCC_JIT_TYPE_DOUBLE` - * - :c:data:`GCC_JIT_TYPE_LONG_DOUBLE` diff --git a/gcc/jit/jit-common.h b/gcc/jit/jit-common.h index 1e335878b56..afb41763e46 100644 --- a/gcc/jit/jit-common.h +++ b/gcc/jit/jit-common.h @@ -36,7 +36,7 @@ along with GCC; see the file COPYING3. If not see #endif #endif -const int NUM_GCC_JIT_TYPES = GCC_JIT_TYPE_INT128_T + 1; +const int NUM_GCC_JIT_TYPES = GCC_JIT_TYPE_BFLOAT16 + 1; /* This comment is included by the docs. diff --git a/gcc/jit/jit-playback.cc b/gcc/jit/jit-playback.cc index 6baa838af10..76764bbe8a3 100644 --- a/gcc/jit/jit-playback.cc +++ b/gcc/jit/jit-playback.cc @@ -281,6 +281,12 @@ get_tree_node_for_type (enum gcc_jit_types type_) case GCC_JIT_TYPE_FLOAT: return float_type_node; + case GCC_JIT_TYPE_BFLOAT16: +#ifndef HAVE_BFmode + add_error (NULL, "gcc_jit_types value unsupported on this target: %i", + type_); +#endif + return bfloat16_type_node; case GCC_JIT_TYPE_DOUBLE: return double_type_node; case GCC_JIT_TYPE_LONG_DOUBLE: diff --git a/gcc/jit/jit-recording.cc b/gcc/jit/jit-recording.cc index 68a2e860c1f..4da2848f04a 100644 --- a/gcc/jit/jit-recording.cc +++ b/gcc/jit/jit-recording.cc @@ -2401,6 +2401,10 @@ recording::memento_of_get_type::get_size () case GCC_JIT_TYPE_FLOAT: size = FLOAT_TYPE_SIZE; break; +#ifdef HAVE_BFmode + case GCC_JIT_TYPE_BFLOAT16: + return GET_MODE_UNIT_SIZE (BFmode); +#endif case GCC_JIT_TYPE_DOUBLE: size = DOUBLE_TYPE_SIZE; break; @@ -2460,6 +2464,7 @@ recording::memento_of_get_type::dereference () case GCC_JIT_TYPE_INT64_T: case GCC_JIT_TYPE_INT128_T: case GCC_JIT_TYPE_FLOAT: + case GCC_JIT_TYPE_BFLOAT16: case GCC_JIT_TYPE_DOUBLE: case GCC_JIT_TYPE_LONG_DOUBLE: case GCC_JIT_TYPE_COMPLEX_FLOAT: @@ -2524,6 +2529,7 @@ recording::memento_of_get_type::is_int () const return true; case GCC_JIT_TYPE_FLOAT: + case GCC_JIT_TYPE_BFLOAT16: case GCC_JIT_TYPE_DOUBLE: case GCC_JIT_TYPE_LONG_DOUBLE: return false; @@ -2582,6 +2588,7 @@ recording::memento_of_get_type::is_signed () const case GCC_JIT_TYPE_UINT128_T: case GCC_JIT_TYPE_FLOAT: + case GCC_JIT_TYPE_BFLOAT16: case GCC_JIT_TYPE_DOUBLE: case GCC_JIT_TYPE_LONG_DOUBLE: @@ -2641,6 +2648,7 @@ recording::memento_of_get_type::is_float () const return false; case GCC_JIT_TYPE_FLOAT: + case GCC_JIT_TYPE_BFLOAT16: case GCC_JIT_TYPE_DOUBLE: case GCC_JIT_TYPE_LONG_DOUBLE: return true; @@ -2704,6 +2712,7 @@ recording::memento_of_get_type::is_bool () const return false; case GCC_JIT_TYPE_FLOAT: + case GCC_JIT_TYPE_BFLOAT16: case GCC_JIT_TYPE_DOUBLE: case GCC_JIT_TYPE_LONG_DOUBLE: return false; @@ -2784,6 +2793,7 @@ static const char * const get_type_strings[] = { "__int64_t", /* GCC_JIT_TYPE_INT64_T */ "__int128_t", /* GCC_JIT_TYPE_INT128_T */ + "bfloat16", /* GCC_JIT_TYPE_BFLOAT16 */ }; /* Implementation of recording::memento::make_debug_string for @@ -2829,6 +2839,7 @@ static const char * const get_type_enum_strings[] = { "GCC_JIT_TYPE_INT32_T", "GCC_JIT_TYPE_INT64_T", "GCC_JIT_TYPE_INT128_T", + "GCC_JIT_TYPE_BFLOAT16", }; void diff --git a/gcc/jit/libgccjit.h b/gcc/jit/libgccjit.h index 74e847b2dec..ede0cfdb99d 100644 --- a/gcc/jit/libgccjit.h +++ b/gcc/jit/libgccjit.h @@ -604,7 +604,9 @@ enum gcc_jit_types GCC_JIT_TYPE_INT16_T, GCC_JIT_TYPE_INT32_T, GCC_JIT_TYPE_INT64_T, - GCC_JIT_TYPE_INT128_T + GCC_JIT_TYPE_INT128_T, + + GCC_JIT_TYPE_BFLOAT16, }; extern gcc_jit_type * diff --git a/gcc/testsuite/jit.dg/all-non-failing-tests.h b/gcc/testsuite/jit.dg/all-non-failing-tests.h index 14a0a321550..d627ac64cb6 100644 --- a/gcc/testsuite/jit.dg/all-non-failing-tests.h +++ b/gcc/testsuite/jit.dg/all-non-failing-tests.h @@ -73,6 +73,9 @@ #undef create_code #undef verify_code +/* test-bfloat16.c: This can't be in the testcases array as it + is target-specific. */ + /* test-builtin-memcpy.c */ #define create_code create_code_builtin_memcpy #define verify_code verify_code_builtin_memcpy diff --git a/gcc/testsuite/jit.dg/test-bfloat16.c b/gcc/testsuite/jit.dg/test-bfloat16.c new file mode 100644 index 00000000000..6aed3920351 --- /dev/null +++ b/gcc/testsuite/jit.dg/test-bfloat16.c @@ -0,0 +1,37 @@ +/* { dg-do compile { target x86_64-*-* } } */ + +#include <stdlib.h> +#include <stdio.h> + +#include "libgccjit.h" + +/* We don't want set_options() in harness.h to set -O3 so our little local + is optimized away. */ +#define TEST_ESCHEWS_SET_OPTIONS +static void set_options (gcc_jit_context *ctxt, const char *argv0) +{ +} + +#define TEST_COMPILING_TO_FILE +#define OUTPUT_KIND GCC_JIT_OUTPUT_KIND_ASSEMBLER +#define OUTPUT_FILENAME "output-of-test-bfloat16.c.s" +#include "harness.h" + +void +create_code (gcc_jit_context *ctxt, void *user_data) +{ + gcc_jit_type *bf16_type = + gcc_jit_context_get_type (ctxt, GCC_JIT_TYPE_BFLOAT16); + + gcc_jit_lvalue *foo = + gcc_jit_context_new_global ( + ctxt, NULL, GCC_JIT_GLOBAL_EXPORTED, bf16_type, "foo"); + + gcc_jit_rvalue *value = + gcc_jit_context_new_rvalue_from_double (ctxt, bf16_type, 3.1415); + gcc_jit_global_set_initializer_rvalue (foo, value); +} + +/* { dg-final { jit-verify-output-file-was-created "" } } */ +/* { dg-final { jit-verify-assembler-output ".value 16457" } } */ +/* { dg-final { jit-verify-assembler-output ".size foo, 2" } } */ diff --git a/gcc/testsuite/jit.dg/test-types.c b/gcc/testsuite/jit.dg/test-types.c index a01944e35fa..f51252e0da0 100644 --- a/gcc/testsuite/jit.dg/test-types.c +++ b/gcc/testsuite/jit.dg/test-types.c @@ -1,3 +1,4 @@ +#include <immintrin.h> #include <stdint.h> #include <stdlib.h> #include <stdio.h> @@ -492,4 +493,7 @@ verify_code (gcc_jit_context *ctxt, gcc_jit_result *result) CHECK_VALUE (gcc_jit_type_get_size (gcc_jit_context_get_type (ctxt, GCC_JIT_TYPE_FLOAT)), sizeof (float)); CHECK_VALUE (gcc_jit_type_get_size (gcc_jit_context_get_type (ctxt, GCC_JIT_TYPE_DOUBLE)), sizeof (double)); +#ifdef HAVE_BFmode + CHECK_VALUE (gcc_jit_type_get_size (gcc_jit_context_get_type (ctxt, GCC_JIT_TYPE_BFLOAT16)), sizeof (__bfloat16)); +#endif } -- 2.43.0 ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] libgccjit: Add support for the type bfloat16 2024-02-21 15:56 ` Antoni Boucher @ 2024-06-26 15:48 ` David Malcolm 0 siblings, 0 replies; 6+ messages in thread From: David Malcolm @ 2024-06-26 15:48 UTC (permalink / raw) To: Antoni Boucher, jit, gcc-patches On Wed, 2024-02-21 at 10:56 -0500, Antoni Boucher wrote: > Thanks for the review. > Here's the updated patch. Thanks for the update patch; sorry for the delay in reviewing. The updated patch looks good for trunk. Dave > > On Fri, 2023-12-01 at 12:45 -0500, David Malcolm wrote: > > On Thu, 2023-11-16 at 17:20 -0500, Antoni Boucher wrote: > > > I forgot to attach the patch. > > > > > > On Thu, 2023-11-16 at 17:19 -0500, Antoni Boucher wrote: > > > > Hi. > > > > This patch adds the support for the type bfloat16 (bug 112574). > > > > > > > > This was asked to be splitted from a another patch sent here: > > > > https://gcc.gnu.org/pipermail/jit/2023q1/001607.html > > > > > > > > Thanks for the review. > > > > > > > Thanks for the patch. > > > > > diff --git a/gcc/jit/jit-playback.cc b/gcc/jit/jit-playback.cc > > > index 18cc4da25b8..7e1c97a4638 100644 > > > --- a/gcc/jit/jit-playback.cc > > > +++ b/gcc/jit/jit-playback.cc > > > @@ -280,6 +280,8 @@ get_tree_node_for_type (enum gcc_jit_types > > > type_) > > > > > > case GCC_JIT_TYPE_FLOAT: > > > return float_type_node; > > > + case GCC_JIT_TYPE_BFLOAT16: > > > + return bfloat16_type_node; > > > > The code to create bfloat16_type_node (in build_common_tree_nodes) > > is > > guarded by #ifdef HAVE_BFmode, so we should probably have a test > > for > > this in case GCC_JIT_TYPE_BFLOAT16 to at least add an error message > > when it's NULL_TREE, rather than silently returning NULL_TREE and > > crashing. > > > > [...] > > > > > diff --git a/gcc/testsuite/jit.dg/test-bfloat16.c > > > b/gcc/testsuite/jit.dg/test-bfloat16.c > > > new file mode 100644 > > > index 00000000000..6aed3920351 > > > --- /dev/null > > > +++ b/gcc/testsuite/jit.dg/test-bfloat16.c > > > @@ -0,0 +1,37 @@ > > > +/* { dg-do compile { target x86_64-*-* } } */ > > > + > > > +#include <stdlib.h> > > > +#include <stdio.h> > > > + > > > +#include "libgccjit.h" > > > + > > > +/* We don't want set_options() in harness.h to set -O3 so our > > > little local > > > + is optimized away. */ > > > +#define TEST_ESCHEWS_SET_OPTIONS > > > +static void set_options (gcc_jit_context *ctxt, const char > > > *argv0) > > > +{ > > > +} > > > > > > Please add a comment to all-non-failing-tests.h noting the > > exclusion > > of > > this test case from the array. > > > > [...] > > > > > diff --git a/gcc/testsuite/jit.dg/test-types.c > > > b/gcc/testsuite/jit.dg/test-types.c > > > index a01944e35fa..9e7c4f3e046 100644 > > > --- a/gcc/testsuite/jit.dg/test-types.c > > > +++ b/gcc/testsuite/jit.dg/test-types.c > > > @@ -1,3 +1,4 @@ > > > +#include <immintrin.h> > > > #include <stdint.h> > > > #include <stdlib.h> > > > #include <stdio.h> > > > @@ -492,4 +493,5 @@ verify_code (gcc_jit_context *ctxt, > > > gcc_jit_result *result) > > > > > > CHECK_VALUE (gcc_jit_type_get_size (gcc_jit_context_get_type > > > (ctxt, GCC_JIT_TYPE_FLOAT)), sizeof (float)); > > > CHECK_VALUE (gcc_jit_type_get_size (gcc_jit_context_get_type > > > (ctxt, GCC_JIT_TYPE_DOUBLE)), sizeof (double)); > > > + CHECK_VALUE (gcc_jit_type_get_size (gcc_jit_context_get_type > > > (ctxt, GCC_JIT_TYPE_BFLOAT16)), sizeof (__bfloat16)); > > > > > > This is only going to work on targets which #ifdef HAVE_BFmode, so > > this > > CHECK_VALUE needs to be conditionalized somehow, to avoid having > > this, > > test-combination, and test-threads from bailing out early on > > targets > > without BFmode. > > > > Dave > > > ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2024-06-26 15:48 UTC | newest] Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2023-11-16 22:19 [PATCH] libgccjit: Add support for the type bfloat16 Antoni Boucher 2023-11-16 22:20 ` Antoni Boucher 2023-12-01 14:52 ` Antoni Boucher 2023-12-01 17:45 ` David Malcolm 2024-02-21 15:56 ` Antoni Boucher 2024-06-26 15:48 ` David Malcolm
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).