This patch changes the TYPE_INDIVISBLE flag to 0 to enable SVE ACLE types to be
treated as GNU vectors and have the same semantics with operations that are
defined on GNU vectors.

gcc/ChangeLog:

        * config/aarch64/aarch64-sve-builtins.cc (register_builtin_types): Flip
        TYPE_INDIVISBLE flag for SVE ACLE vector types.
---
 gcc/config/aarch64/aarch64-sve-builtins.cc | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/gcc/config/aarch64/aarch64-sve-builtins.cc 
b/gcc/config/aarch64/aarch64-sve-builtins.cc
index 44b7f6edae5..9532fd39477 100644
--- a/gcc/config/aarch64/aarch64-sve-builtins.cc
+++ b/gcc/config/aarch64/aarch64-sve-builtins.cc
@@ -4498,6 +4498,9 @@ register_builtin_types ()
              vectype = build_truth_vector_type_for_mode (BYTES_PER_SVE_VECTOR,
                                                          VNx16BImode);
              num_pr = 1;
+             /* Leave svbool_t as indivisible for now.  We don't yet support
+                C/C++ operators on predicates.  */
+             TYPE_INDIVISIBLE_P (vectype) = 1;
            }
          else
            {
@@ -4514,12 +4517,12 @@ register_builtin_types ()
                          && TYPE_ALIGN (vectype) == 128
                          && known_eq (size, BITS_PER_SVE_VECTOR));
              num_zr = 1;
+             TYPE_INDIVISIBLE_P (vectype) = 0;
            }
          vectype = build_distinct_type_copy (vectype);
          gcc_assert (vectype == TYPE_MAIN_VARIANT (vectype));
          SET_TYPE_STRUCTURAL_EQUALITY (vectype);
          TYPE_ARTIFICIAL (vectype) = 1;
-         TYPE_INDIVISIBLE_P (vectype) = 1;
          make_type_sizeless (vectype);
        }
       if (num_pr)
-- 
2.25.1

Reply via email to