]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
libgccjit: Make is_int return false on vector types
authorAntoni Boucher <bouanto@zoho.com>
Thu, 26 Oct 2023 23:17:55 +0000 (19:17 -0400)
committerAntoni Boucher <bouanto@zoho.com>
Fri, 19 Jan 2024 20:50:58 +0000 (15:50 -0500)
gcc/jit/ChangeLog:

* jit-recording.h (is_numeric_vector, vector_type::new_int): New
functions.
* libgccjit.cc (gcc_jit_context_new_unary_op,
gcc_jit_context_new_binary_op): add checks for
is_numeric_vector.

gcc/testsuite/ChangeLog:

* jit.dg/test-reflection.c: Add check to make sure
gcc_jit_type_is_integral returns 0 on a vector type.

gcc/jit/jit-recording.h
gcc/jit/libgccjit.cc
gcc/testsuite/jit.dg/test-reflection.c

index cd2e0adbe30a6cc42e859384d9a4eda38c433167..ab5ba6c7fbe6b1614f44685b23c28c5edcf3c4ba 100644 (file)
@@ -571,6 +571,7 @@ public:
   virtual bool is_int () const = 0;
   virtual bool is_float () const = 0;
   virtual bool is_bool () const = 0;
+  virtual bool is_numeric_vector () const { return false; }
   virtual type *is_pointer () = 0;
   virtual type *is_volatile () { return NULL; }
   virtual type *is_restrict () { return NULL; }
@@ -705,9 +706,12 @@ public:
 
   size_t get_size () final override { return m_other_type->get_size (); };
 
-  bool is_int () const final override { return m_other_type->is_int (); }
+  bool is_int () const override { return m_other_type->is_int (); }
   bool is_float () const final override { return m_other_type->is_float (); }
   bool is_bool () const final override { return m_other_type->is_bool (); }
+  bool is_numeric_vector () const override {
+      return m_other_type->is_numeric_vector ();
+  }
   type *is_pointer () final override { return m_other_type->is_pointer (); }
   type *is_array () final override { return m_other_type->is_array (); }
   struct_ *is_struct () final override { return m_other_type->is_struct (); }
@@ -830,6 +834,14 @@ public:
   : decorated_type (other_type),
     m_num_units (num_units) {}
 
+  bool is_int () const final override {
+    return false;
+  }
+
+  bool is_numeric_vector () const final override {
+    return true;
+  }
+
   size_t get_num_units () const { return m_num_units; }
 
   vector_type *dyn_cast_vector_type () final override { return this; }
index 9616f3802b83a5dc2f4334522042e0752265ae6e..bf0150f60479cd8636780acd7d949bb470b4cf78 100644 (file)
@@ -2114,7 +2114,7 @@ gcc_jit_context_new_unary_op (gcc_jit_context *ctxt,
     op);
   RETURN_NULL_IF_FAIL (result_type, ctxt, loc, "NULL result_type");
   RETURN_NULL_IF_FAIL_PRINTF3 (
-    result_type->is_numeric (), ctxt, loc,
+    result_type->is_numeric () || result_type->is_numeric_vector (), ctxt, loc,
     "gcc_jit_unary_op %s with operand %s "
     "has non-numeric result_type: %s",
     gcc::jit::unary_op_reproducer_strings[op],
@@ -2171,7 +2171,7 @@ gcc_jit_context_new_binary_op (gcc_jit_context *ctxt,
     b->get_debug_string (),
     b->get_type ()->get_debug_string ());
   RETURN_NULL_IF_FAIL_PRINTF4 (
-    result_type->is_numeric (), ctxt, loc,
+    result_type->is_numeric () || result_type->is_numeric_vector (), ctxt, loc,
     "gcc_jit_binary_op %s with operands a: %s b: %s "
     "has non-numeric result_type: %s",
     gcc::jit::binary_op_reproducer_strings[op],
index 112a2455c072c1ba9ca278d1fb58c78e731dcff0..afa76ff81f6cfb4ea473ebc4458d00824ae32d6e 100644 (file)
@@ -59,6 +59,7 @@ verify_code (gcc_jit_context *ctxt, gcc_jit_result *result)
   CHECK (vec_type != double_type);
   CHECK_VALUE (gcc_jit_vector_type_get_element_type(vector_type), double_type);
   CHECK_VALUE (gcc_jit_vector_type_get_num_units(vector_type), 4);
+  CHECK (!gcc_jit_type_is_integral(vec_type));
 
   CHECK (!gcc_jit_type_is_pointer(double_type));
   CHECK_VALUE (gcc_jit_type_is_pointer(gcc_jit_type_get_pointer(double_type)), double_type);