[PATCH][gcc] libgccjit: add bitfield support
David Malcolm
dmalcolm@redhat.com
Wed Jun 26 13:17:00 GMT 2019
On Wed, 2019-06-26 at 11:07 +0000, Andrea Corallo wrote:
> Hi David,
> thanks for the suggestions.
> Updated version for the bitfield libgccjit support patch here
> addressing comments.
>
> test-error-gcc_jit_context_new_bitfield-invalid-width.c is reworked
> and now assume that the long of the compiler compiling the test is of
> the same size of the libgccjit long.
> I'm not sure this assumption is sufficent, in case is not we have to
> find another way around this.
>
> Checked with make check-jit runs clean.
>
> Bests
>
> Andrea
>
>
> 2019-06-20 Andrea Corallo andrea.corallo@arm.com
>
> * docs/topics/compatibility.rst (LIBGCCJIT_ABI_12): New ABI tag.
> * docs/topics/types.rst: Add gcc_jit_context_new_bitfield.
> * jit-common.h (namespace recording): Add class bitfield.
> * jit-playback.c:
> (DECL_C_BIT_FIELD, SET_DECL_C_BIT_FIELD): Add macros.
> (playback::context::new_bitfield): New method.
> (playback::compound_type::set_fields): Add bitfield support.
> (playback::lvalue::mark_addressable): Was jit_mark_addressable make
> this
> a method of lvalue plus return a bool to communicate success.
> (playback::lvalue::get_address): Check for jit_mark_addressable
> return
> value.
> * jit-playback.h (new_bitfield): New method.
> (class bitfield): New class.
> (class lvalue): Add jit_mark_addressable method.
> * jit-recording.c (recording::context::new_bitfield): New method.
> (recording::bitfield::replay_into): New method.
> (recording::bitfield::write_to_dump): Likewise.
> (recording::bitfield::make_debug_string): Likewise.
> (recording::bitfield::write_reproducer): Likewise.
> * jit-recording.h (class context): Add new_bitfield method.
> (class field): Make it derivable by class bitfield.
> (class bitfield): Add new class.
> * libgccjit++.h (class context): Add new_bitfield method.
> * libgccjit.c (struct gcc_jit_bitfield): New structure.
> (gcc_jit_context_new_bitfield): New function.
> * libgccjit.h
> (LIBGCCJIT_HAVE_gcc_jit_context_new_bitfield) New macro.
> (gcc_jit_context_new_bitfield): New function.
> * libgccjit.map (LIBGCCJIT_ABI_12) New ABI tag.
>
>
> 2019-06-20 Andrea Corallo andrea.corallo@arm.com
>
> * jit.dg/all-non-failing-tests.h: Add test-accessing-bitfield.c.
> * jit.dg/test-accessing-bitfield.c: New testcase.
> * jit.dg/test-error-gcc_jit_context_new_bitfield-invalid-type.c:
> Likewise.
> * jit.dg/test-error-gcc_jit_context_new_bitfield-invalid-width.c:
> Likewise.
> * jit.dg/test-error-gcc_jit_lvalue_get_address-bitfield.c:
> Likewise.
Thanks for the updated patch.
One last nit:
[...]
> diff --git a/gcc/jit/jit-playback.c b/gcc/jit/jit-playback.c
> index b74495c..ae8a732 100644
> --- a/gcc/jit/jit-playback.c
> +++ b/gcc/jit/jit-playback.c
> @@ -47,6 +47,12 @@ along with GCC; see the file COPYING3. If not see
> #include "jit-builtins.h"
> #include "jit-tempdir.h"
>
> +/* Compare with gcc/c-family/c-common.h
We should say what to compare it against:
Compare with "DECL_C_BIT_FIELD" etc in gcc/c-family/c-common.h
> + This is redefined here to avoid depending from the C
frontend. */
s/from/on/ also, FWIW
> +#define DECL_JIT_BIT_FIELD(NODE) \
> + (DECL_LANG_FLAG_4 (FIELD_DECL_CHECK (NODE)) == 1)
> +#define SET_DECL_JIT_BIT_FIELD(NODE) \
> + (DECL_LANG_FLAG_4 (FIELD_DECL_CHECK (NODE)) = 1)
With that change, the patch is good for trunk - thanks for all your
work on this.
Are you working on getting SVN commit access, or do you want me to
commit your two patches on your behalf?
Dave
More information about the Gcc-patches
mailing list