https://gcc.gnu.org/g:32cd422ee5c968a4255b6def4270b69f45c9abd0
commit r17-1621-g32cd422ee5c968a4255b6def4270b69f45c9abd0 Author: Robert Zakrzewski <[email protected]> Date: Fri Jun 21 11:08:26 2024 +0200 libgccjit: Fix is_same_type_as for vector type gcc/jit/ChangeLog: * jit-recording.h: Fix type comparison. gcc/testsuite/ChangeLog: * jit.dg/test-types.c: Add vector type comparison in test. Co-authored-by: Antoni Boucher <[email protected]> Diff: --- gcc/jit/jit-recording.h | 3 ++- gcc/testsuite/jit.dg/test-types.c | 28 ++++++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/gcc/jit/jit-recording.h b/gcc/jit/jit-recording.h index e3e96d77a0b1..f5dc500da008 100644 --- a/gcc/jit/jit-recording.h +++ b/gcc/jit/jit-recording.h @@ -1026,7 +1026,8 @@ public: if (other_vec_type == NULL) return false; return get_num_units () == other_vec_type->get_num_units () - && get_element_type () == other_vec_type->get_element_type (); + && get_element_type ()->is_same_type_as ( + other_vec_type->get_element_type ()); } vector_type *is_vector () final override { return this; } diff --git a/gcc/testsuite/jit.dg/test-types.c b/gcc/testsuite/jit.dg/test-types.c index 8573711cf8eb..e5c2b77112c6 100644 --- a/gcc/testsuite/jit.dg/test-types.c +++ b/gcc/testsuite/jit.dg/test-types.c @@ -9,6 +9,8 @@ #include "harness.h" +typedef int v4si __attribute__ ((__vector_size__ (16))); + struct zoo { void *m_void_ptr; @@ -56,6 +58,8 @@ struct zoo size_t m_size_t; + v4si m_vector; + FILE *m_FILE_ptr; }; @@ -78,6 +82,8 @@ create_code (gcc_jit_context *ctxt, void *user_data) */ gcc_jit_type *void_type = gcc_jit_context_get_type (ctxt, GCC_JIT_TYPE_VOID); + gcc_jit_type *int_type = + gcc_jit_context_get_type (ctxt, GCC_JIT_TYPE_INT); #define CREATE_FIELD(TYPE, NAME) \ gcc_jit_context_new_field ( \ @@ -163,6 +169,10 @@ create_code (gcc_jit_context *ctxt, void *user_data) gcc_jit_field *field_m_size_t = CREATE_FIELD (GCC_JIT_TYPE_SIZE_T, "m_size_t"); + gcc_jit_type *vector_type = gcc_jit_type_get_vector (int_type, 4); + gcc_jit_field *field_m_vector = + gcc_jit_context_new_field ( ctxt, NULL, vector_type, "m_vector"); + gcc_jit_field *field_m_FILE_ptr = CREATE_FIELD (GCC_JIT_TYPE_FILE_PTR, "m_FILE_ptr"); @@ -214,6 +224,8 @@ create_code (gcc_jit_context *ctxt, void *user_data) field_m_size_t, + field_m_vector, + field_m_FILE_ptr }; @@ -411,6 +423,22 @@ create_code (gcc_jit_context *ctxt, void *user_data) gcc_jit_context_get_type (ctxt, GCC_JIT_TYPE_SIZE_T), sizeof (struct zoo))) + gcc_jit_type *aligned_int = gcc_jit_type_get_aligned (int_type, 4); + gcc_jit_type *aligned_vector_type = gcc_jit_type_get_vector (aligned_int, 4); + gcc_jit_rvalue *value = gcc_jit_context_new_rvalue_from_int ( + ctxt, + aligned_int, 40); + gcc_jit_rvalue* array[4] = { + value, value, value, value, + }; + ASSIGN(field_m_vector, + gcc_jit_context_new_rvalue_from_vector ( + ctxt, + NULL, + aligned_vector_type, + 4, + array)) + ASSIGN(field_m_FILE_ptr, gcc_jit_context_new_rvalue_from_ptr ( ctxt,
