DavidTruby created this revision.
Herald added subscribers: ctetreau, psnobl, kristof.beyls, tschuett.
Herald added a reviewer: efriedma.
Herald added a project: All.
DavidTruby requested review of this revision.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.

This patch allows the same implicit conversions for vector-scalar
operations in SVE that are allowed for NEON.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D124860

Files:
  clang/lib/Sema/SemaExpr.cpp
  clang/test/CodeGen/aarch64-sve-vector-arith-ops.c
  clang/test/Sema/aarch64-sve-vector-arith-ops.c
  clang/test/Sema/sizeless-1.c
  clang/test/SemaCXX/sizeless-1.cpp

Index: clang/test/SemaCXX/sizeless-1.cpp
===================================================================
--- clang/test/SemaCXX/sizeless-1.cpp
+++ clang/test/SemaCXX/sizeless-1.cpp
@@ -213,23 +213,6 @@
   local_int8 &&init_int8;  // expected-error {{invalid operands to binary expression}} expected-error {{not contextually convertible}}
   local_int8 || init_int8; // expected-error {{invalid operands to binary expression}} expected-error {{not contextually convertible}}
 
-  local_int8 + 0;  // expected-error {{invalid operands to binary expression}}
-  local_int8 - 0;  // expected-error {{invalid operands to binary expression}}
-  local_int8 * 0;  // expected-error {{invalid operands to binary expression}}
-  local_int8 / 0;  // expected-error {{invalid operands to binary expression}}
-  local_int8 % 0;  // expected-error {{invalid operands to binary expression}}
-  local_int8 & 0;  // expected-error {{invalid operands to binary expression}}
-  local_int8 | 0;  // expected-error {{invalid operands to binary expression}}
-  local_int8 ^ 0;  // expected-error {{invalid operands to binary expression}}
-  local_int8 < 0;  // expected-error {{invalid operands to binary expression}}
-  local_int8 <= 0; // expected-error {{invalid operands to binary expression}}
-  local_int8 == 0; // expected-error {{invalid operands to binary expression}}
-  local_int8 != 0; // expected-error {{invalid operands to binary expression}}
-  local_int8 >= 0; // expected-error {{invalid operands to binary expression}}
-  local_int8 > 0;  // expected-error {{invalid operands to binary expression}}
-  local_int8 && 0; // expected-error {{invalid operands to binary expression}} expected-error {{not contextually convertible}}
-  local_int8 || 0; // expected-error {{invalid operands to binary expression}} expected-error {{not contextually convertible}}
-
   if (local_int8) { // expected-error {{not contextually convertible to 'bool'}}
   }
   while (local_int8) { // expected-error {{not contextually convertible to 'bool'}}
Index: clang/test/Sema/sizeless-1.c
===================================================================
--- clang/test/Sema/sizeless-1.c
+++ clang/test/Sema/sizeless-1.c
@@ -201,23 +201,6 @@
   local_int8 &&init_int8;  // expected-error {{invalid operands to binary expression}}
   local_int8 || init_int8; // expected-error {{invalid operands to binary expression}}
 
-  local_int8 + 0;  // expected-error {{invalid operands to binary expression}}
-  local_int8 - 0;  // expected-error {{invalid operands to binary expression}}
-  local_int8 * 0;  // expected-error {{invalid operands to binary expression}}
-  local_int8 / 0;  // expected-error {{invalid operands to binary expression}}
-  local_int8 % 0;  // expected-error {{invalid operands to binary expression}}
-  local_int8 & 0;  // expected-error {{invalid operands to binary expression}}
-  local_int8 | 0;  // expected-error {{invalid operands to binary expression}}
-  local_int8 ^ 0;  // expected-error {{invalid operands to binary expression}}
-  local_int8 < 0;  // expected-error {{invalid operands to binary expression}}
-  local_int8 <= 0; // expected-error {{invalid operands to binary expression}}
-  local_int8 == 0; // expected-error {{invalid operands to binary expression}}
-  local_int8 != 0; // expected-error {{invalid operands to binary expression}}
-  local_int8 >= 0; // expected-error {{invalid operands to binary expression}}
-  local_int8 > 0;  // expected-error {{invalid operands to binary expression}}
-  local_int8 && 0; // expected-error {{invalid operands to binary expression}}
-  local_int8 || 0; // expected-error {{invalid operands to binary expression}}
-
   if (local_int8) { // expected-error {{statement requires expression of scalar type}}
   }
   while (local_int8) { // expected-error {{statement requires expression of scalar type}}
Index: clang/test/Sema/aarch64-sve-vector-arith-ops.c
===================================================================
--- clang/test/Sema/aarch64-sve-vector-arith-ops.c
+++ clang/test/Sema/aarch64-sve-vector-arith-ops.c
@@ -20,12 +20,6 @@
   (void)(i8 + f16); // expected-error{{invalid operands to binary expression}}
   (void)(i8 + f32); // expected-error{{invalid operands to binary expression}}
   (void)(i8 + f64); // expected-error{{invalid operands to binary expression}}
-  (void)(i8 + 0);   // expected-error{{invalid operands to binary expression}}
-  (void)(i8 + 0l);  // expected-error{{invalid operands to binary expression}}
-  (void)(i8 + 0u);  // expected-error{{invalid operands to binary expression}}
-  (void)(i8 + 0ul); // expected-error{{invalid operands to binary expression}}
-  (void)(i8 + 0.f); // expected-error{{invalid operands to binary expression}}
-  (void)(i8 + 0.);  // expected-error{{invalid operands to binary expression}}
 
   (void)(u8 + b);   // expected-error{{invalid operands to binary expression}}
   (void)(u8 + i16); // expected-error{{invalid operands to binary expression}}
@@ -37,12 +31,6 @@
   (void)(u8 + f16); // expected-error{{invalid operands to binary expression}}
   (void)(u8 + f32); // expected-error{{invalid operands to binary expression}}
   (void)(u8 + f64); // expected-error{{invalid operands to binary expression}}
-  (void)(u8 + 0);   // expected-error{{invalid operands to binary expression}}
-  (void)(u8 + 0l);  // expected-error{{invalid operands to binary expression}}
-  (void)(u8 + 0u);  // expected-error{{invalid operands to binary expression}}
-  (void)(u8 + 0ul); // expected-error{{invalid operands to binary expression}}
-  (void)(u8 + 0.f); // expected-error{{invalid operands to binary expression}}
-  (void)(u8 + 0.);  // expected-error{{invalid operands to binary expression}}
 
   (void)(i16 + b);   // expected-error{{invalid operands to binary expression}}
   (void)(i16 + i8);  // expected-error{{invalid operands to binary expression}}
@@ -54,12 +42,6 @@
   (void)(i16 + f16); // expected-error{{invalid operands to binary expression}}
   (void)(i16 + f32); // expected-error{{invalid operands to binary expression}}
   (void)(i16 + f64); // expected-error{{invalid operands to binary expression}}
-  (void)(i16 + 0);   // expected-error{{invalid operands to binary expression}}
-  (void)(i16 + 0l);  // expected-error{{invalid operands to binary expression}}
-  (void)(i16 + 0u);  // expected-error{{invalid operands to binary expression}}
-  (void)(i16 + 0ul); // expected-error{{invalid operands to binary expression}}
-  (void)(i16 + 0.f); // expected-error{{invalid operands to binary expression}}
-  (void)(i16 + 0.);  // expected-error{{invalid operands to binary expression}}
 
   (void)(u16 + b);   // expected-error{{invalid operands to binary expression}}
   (void)(u16 + i8);  // expected-error{{invalid operands to binary expression}}
@@ -71,12 +53,6 @@
   (void)(u16 + f16); // expected-error{{invalid operands to binary expression}}
   (void)(u16 + f32); // expected-error{{invalid operands to binary expression}}
   (void)(u16 + f64); // expected-error{{invalid operands to binary expression}}
-  (void)(u16 + 0);   // expected-error{{invalid operands to binary expression}}
-  (void)(u16 + 0l);  // expected-error{{invalid operands to binary expression}}
-  (void)(u16 + 0u);  // expected-error{{invalid operands to binary expression}}
-  (void)(u16 + 0ul); // expected-error{{invalid operands to binary expression}}
-  (void)(u16 + 0.f); // expected-error{{invalid operands to binary expression}}
-  (void)(u16 + 0.);  // expected-error{{invalid operands to binary expression}}
 
   (void)(i32 + b);   // expected-error{{invalid operands to binary expression}}
   (void)(i32 + i8);  // expected-error{{invalid operands to binary expression}}
@@ -88,11 +64,6 @@
   (void)(i32 + f16); // expected-error{{invalid operands to binary expression}}
   (void)(i32 + f32); // expected-error{{invalid operands to binary expression}}
   (void)(i32 + f64); // expected-error{{invalid operands to binary expression}}
-  (void)(i32 + 0l);  // expected-error{{invalid operands to binary expression}}
-  (void)(i32 + 0u);  // expected-error{{invalid operands to binary expression}}
-  (void)(i32 + 0ul); // expected-error{{invalid operands to binary expression}}
-  (void)(i32 + 0.f); // expected-error{{invalid operands to binary expression}}
-  (void)(i32 + 0.);  // expected-error{{invalid operands to binary expression}}
 
   (void)(u32 + b);   // expected-error{{invalid operands to binary expression}}
   (void)(u32 + i8);  // expected-error{{invalid operands to binary expression}}
@@ -104,11 +75,6 @@
   (void)(u32 + f16); // expected-error{{invalid operands to binary expression}}
   (void)(u32 + f32); // expected-error{{invalid operands to binary expression}}
   (void)(u32 + f64); // expected-error{{invalid operands to binary expression}}
-  (void)(u32 + 0);   // expected-error{{invalid operands to binary expression}}
-  (void)(u32 + 0l);  // expected-error{{invalid operands to binary expression}}
-  (void)(u32 + 0ul); // expected-error{{invalid operands to binary expression}}
-  (void)(u32 + 0.f); // expected-error{{invalid operands to binary expression}}
-  (void)(u32 + 0.);  // expected-error{{invalid operands to binary expression}}
 
   (void)(i64 + b);   // expected-error{{invalid operands to binary expression}}
   (void)(i64 + i8);  // expected-error{{invalid operands to binary expression}}
@@ -120,11 +86,6 @@
   (void)(i64 + f16); // expected-error{{invalid operands to binary expression}}
   (void)(i64 + f32); // expected-error{{invalid operands to binary expression}}
   (void)(i64 + f64); // expected-error{{invalid operands to binary expression}}
-  (void)(i64 + 0);   // expected-error{{invalid operands to binary expression}}
-  (void)(i64 + 0u);  // expected-error{{invalid operands to binary expression}}
-  (void)(i64 + 0ul); // expected-error{{invalid operands to binary expression}}
-  (void)(i64 + 0.f); // expected-error{{invalid operands to binary expression}}
-  (void)(i64 + 0.);  // expected-error{{invalid operands to binary expression}}
 
   (void)(u64 + b);   // expected-error{{invalid operands to binary expression}}
   (void)(u64 + i8);  // expected-error{{invalid operands to binary expression}}
@@ -136,11 +97,6 @@
   (void)(u64 + f16); // expected-error{{invalid operands to binary expression}}
   (void)(u64 + f32); // expected-error{{invalid operands to binary expression}}
   (void)(u64 + f64); // expected-error{{invalid operands to binary expression}}
-  (void)(u64 + 0);   // expected-error{{invalid operands to binary expression}}
-  (void)(u64 + 0l);  // expected-error{{invalid operands to binary expression}}
-  (void)(u64 + 0u);  // expected-error{{invalid operands to binary expression}}
-  (void)(u64 + 0.f); // expected-error{{invalid operands to binary expression}}
-  (void)(u64 + 0.);  // expected-error{{invalid operands to binary expression}}
 
   (void)(f16 + b);   // expected-error{{invalid operands to binary expression}}
   (void)(f16 + i8);  // expected-error{{invalid operands to binary expression}}
@@ -152,12 +108,6 @@
   (void)(f16 + u64); // expected-error{{invalid operands to binary expression}}
   (void)(f16 + f32); // expected-error{{invalid operands to binary expression}}
   (void)(f16 + f64); // expected-error{{invalid operands to binary expression}}
-  (void)(f16 + 0);   // expected-error{{invalid operands to binary expression}}
-  (void)(f16 + 0l);  // expected-error{{invalid operands to binary expression}}
-  (void)(f16 + 0u);  // expected-error{{invalid operands to binary expression}}
-  (void)(f16 + 0ul); // expected-error{{invalid operands to binary expression}}
-  (void)(f16 + 0.f); // expected-error{{invalid operands to binary expression}}
-  (void)(f16 + 0.);  // expected-error{{invalid operands to binary expression}}
 
   (void)(f32 + b);   // expected-error{{invalid operands to binary expression}}
   (void)(f32 + i8);  // expected-error{{invalid operands to binary expression}}
@@ -169,11 +119,6 @@
   (void)(f32 + u64); // expected-error{{invalid operands to binary expression}}
   (void)(f32 + f16); // expected-error{{invalid operands to binary expression}}
   (void)(f32 + f64); // expected-error{{invalid operands to binary expression}}
-  (void)(f32 + 0);   // expected-error{{invalid operands to binary expression}}
-  (void)(f32 + 0l);  // expected-error{{invalid operands to binary expression}}
-  (void)(f32 + 0u);  // expected-error{{invalid operands to binary expression}}
-  (void)(f32 + 0ul); // expected-error{{invalid operands to binary expression}}
-  (void)(f32 + 0.);  // expected-error{{invalid operands to binary expression}}
 
   (void)(f64 + b);   // expected-error{{invalid operands to binary expression}}
   (void)(f64 + i8);  // expected-error{{invalid operands to binary expression}}
@@ -185,11 +130,6 @@
   (void)(f64 + u32); // expected-error{{invalid operands to binary expression}}
   (void)(f64 + f16); // expected-error{{invalid operands to binary expression}}
   (void)(f64 + f32); // expected-error{{invalid operands to binary expression}}
-  (void)(f64 + 0);   // expected-error{{invalid operands to binary expression}}
-  (void)(f64 + 0l);  // expected-error{{invalid operands to binary expression}}
-  (void)(f64 + 0u);  // expected-error{{invalid operands to binary expression}}
-  (void)(f64 + 0ul); // expected-error{{invalid operands to binary expression}}
-  (void)(f64 + 0.f); // expected-error{{invalid operands to binary expression}}
 }
 
 void sub(svint8_t i8, svint16_t i16, svint32_t i32, svint64_t i64,
@@ -208,12 +148,6 @@
   (void)(i8 - f16); // expected-error{{invalid operands to binary expression}}
   (void)(i8 - f32); // expected-error{{invalid operands to binary expression}}
   (void)(i8 - f64); // expected-error{{invalid operands to binary expression}}
-  (void)(i8 - 0);   // expected-error{{invalid operands to binary expression}}
-  (void)(i8 - 0l);  // expected-error{{invalid operands to binary expression}}
-  (void)(i8 - 0u);  // expected-error{{invalid operands to binary expression}}
-  (void)(i8 - 0ul); // expected-error{{invalid operands to binary expression}}
-  (void)(i8 - 0.f); // expected-error{{invalid operands to binary expression}}
-  (void)(i8 - 0.);  // expected-error{{invalid operands to binary expression}}
 
   (void)(u8 - b);   // expected-error{{invalid operands to binary expression}}
   (void)(u8 - i16); // expected-error{{invalid operands to binary expression}}
@@ -225,12 +159,6 @@
   (void)(u8 - f16); // expected-error{{invalid operands to binary expression}}
   (void)(u8 - f32); // expected-error{{invalid operands to binary expression}}
   (void)(u8 - f64); // expected-error{{invalid operands to binary expression}}
-  (void)(u8 - 0);   // expected-error{{invalid operands to binary expression}}
-  (void)(u8 - 0l);  // expected-error{{invalid operands to binary expression}}
-  (void)(u8 - 0u);  // expected-error{{invalid operands to binary expression}}
-  (void)(u8 - 0ul); // expected-error{{invalid operands to binary expression}}
-  (void)(u8 - 0.f); // expected-error{{invalid operands to binary expression}}
-  (void)(u8 - 0.);  // expected-error{{invalid operands to binary expression}}
 
   (void)(i16 - b);   // expected-error{{invalid operands to binary expression}}
   (void)(i16 - i8);  // expected-error{{invalid operands to binary expression}}
@@ -242,12 +170,6 @@
   (void)(i16 - f16); // expected-error{{invalid operands to binary expression}}
   (void)(i16 - f32); // expected-error{{invalid operands to binary expression}}
   (void)(i16 - f64); // expected-error{{invalid operands to binary expression}}
-  (void)(i16 - 0);   // expected-error{{invalid operands to binary expression}}
-  (void)(i16 - 0l);  // expected-error{{invalid operands to binary expression}}
-  (void)(i16 - 0u);  // expected-error{{invalid operands to binary expression}}
-  (void)(i16 - 0ul); // expected-error{{invalid operands to binary expression}}
-  (void)(i16 - 0.f); // expected-error{{invalid operands to binary expression}}
-  (void)(i16 - 0.);  // expected-error{{invalid operands to binary expression}}
 
   (void)(u16 - b);   // expected-error{{invalid operands to binary expression}}
   (void)(u16 - i8);  // expected-error{{invalid operands to binary expression}}
@@ -259,12 +181,6 @@
   (void)(u16 - f16); // expected-error{{invalid operands to binary expression}}
   (void)(u16 - f32); // expected-error{{invalid operands to binary expression}}
   (void)(u16 - f64); // expected-error{{invalid operands to binary expression}}
-  (void)(u16 - 0);   // expected-error{{invalid operands to binary expression}}
-  (void)(u16 - 0l);  // expected-error{{invalid operands to binary expression}}
-  (void)(u16 - 0u);  // expected-error{{invalid operands to binary expression}}
-  (void)(u16 - 0ul); // expected-error{{invalid operands to binary expression}}
-  (void)(u16 - 0.f); // expected-error{{invalid operands to binary expression}}
-  (void)(u16 - 0.);  // expected-error{{invalid operands to binary expression}}
 
   (void)(i32 - b);   // expected-error{{invalid operands to binary expression}}
   (void)(i32 - i8);  // expected-error{{invalid operands to binary expression}}
@@ -276,11 +192,6 @@
   (void)(i32 - f16); // expected-error{{invalid operands to binary expression}}
   (void)(i32 - f32); // expected-error{{invalid operands to binary expression}}
   (void)(i32 - f64); // expected-error{{invalid operands to binary expression}}
-  (void)(i32 - 0l);  // expected-error{{invalid operands to binary expression}}
-  (void)(i32 - 0u);  // expected-error{{invalid operands to binary expression}}
-  (void)(i32 - 0ul); // expected-error{{invalid operands to binary expression}}
-  (void)(i32 - 0.f); // expected-error{{invalid operands to binary expression}}
-  (void)(i32 - 0.);  // expected-error{{invalid operands to binary expression}}
 
   (void)(u32 - b);   // expected-error{{invalid operands to binary expression}}
   (void)(u32 - i8);  // expected-error{{invalid operands to binary expression}}
@@ -292,11 +203,6 @@
   (void)(u32 - f16); // expected-error{{invalid operands to binary expression}}
   (void)(u32 - f32); // expected-error{{invalid operands to binary expression}}
   (void)(u32 - f64); // expected-error{{invalid operands to binary expression}}
-  (void)(u32 - 0);   // expected-error{{invalid operands to binary expression}}
-  (void)(u32 - 0l);  // expected-error{{invalid operands to binary expression}}
-  (void)(u32 - 0ul); // expected-error{{invalid operands to binary expression}}
-  (void)(u32 - 0.f); // expected-error{{invalid operands to binary expression}}
-  (void)(u32 - 0.);  // expected-error{{invalid operands to binary expression}}
 
   (void)(i64 - b);   // expected-error{{invalid operands to binary expression}}
   (void)(i64 - i8);  // expected-error{{invalid operands to binary expression}}
@@ -308,11 +214,6 @@
   (void)(i64 - f16); // expected-error{{invalid operands to binary expression}}
   (void)(i64 - f32); // expected-error{{invalid operands to binary expression}}
   (void)(i64 - f64); // expected-error{{invalid operands to binary expression}}
-  (void)(i64 - 0);   // expected-error{{invalid operands to binary expression}}
-  (void)(i64 - 0u);  // expected-error{{invalid operands to binary expression}}
-  (void)(i64 - 0ul); // expected-error{{invalid operands to binary expression}}
-  (void)(i64 - 0.f); // expected-error{{invalid operands to binary expression}}
-  (void)(i64 - 0.);  // expected-error{{invalid operands to binary expression}}
 
   (void)(u64 - b);   // expected-error{{invalid operands to binary expression}}
   (void)(u64 - i8);  // expected-error{{invalid operands to binary expression}}
@@ -324,11 +225,6 @@
   (void)(u64 - f16); // expected-error{{invalid operands to binary expression}}
   (void)(u64 - f32); // expected-error{{invalid operands to binary expression}}
   (void)(u64 - f64); // expected-error{{invalid operands to binary expression}}
-  (void)(u64 - 0);   // expected-error{{invalid operands to binary expression}}
-  (void)(u64 - 0l);  // expected-error{{invalid operands to binary expression}}
-  (void)(u64 - 0u);  // expected-error{{invalid operands to binary expression}}
-  (void)(u64 - 0.f); // expected-error{{invalid operands to binary expression}}
-  (void)(u64 - 0.);  // expected-error{{invalid operands to binary expression}}
 
   (void)(f16 - b);   // expected-error{{invalid operands to binary expression}}
   (void)(f16 - i8);  // expected-error{{invalid operands to binary expression}}
@@ -340,12 +236,6 @@
   (void)(f16 - u64); // expected-error{{invalid operands to binary expression}}
   (void)(f16 - f32); // expected-error{{invalid operands to binary expression}}
   (void)(f16 - f64); // expected-error{{invalid operands to binary expression}}
-  (void)(f16 - 0);   // expected-error{{invalid operands to binary expression}}
-  (void)(f16 - 0l);  // expected-error{{invalid operands to binary expression}}
-  (void)(f16 - 0u);  // expected-error{{invalid operands to binary expression}}
-  (void)(f16 - 0ul); // expected-error{{invalid operands to binary expression}}
-  (void)(f16 - 0.f); // expected-error{{invalid operands to binary expression}}
-  (void)(f16 - 0.);  // expected-error{{invalid operands to binary expression}}
 
   (void)(f32 - b);   // expected-error{{invalid operands to binary expression}}
   (void)(f32 - i8);  // expected-error{{invalid operands to binary expression}}
@@ -357,11 +247,6 @@
   (void)(f32 - u64); // expected-error{{invalid operands to binary expression}}
   (void)(f32 - f16); // expected-error{{invalid operands to binary expression}}
   (void)(f32 - f64); // expected-error{{invalid operands to binary expression}}
-  (void)(f32 - 0);   // expected-error{{invalid operands to binary expression}}
-  (void)(f32 - 0l);  // expected-error{{invalid operands to binary expression}}
-  (void)(f32 - 0u);  // expected-error{{invalid operands to binary expression}}
-  (void)(f32 - 0ul); // expected-error{{invalid operands to binary expression}}
-  (void)(f32 - 0.);  // expected-error{{invalid operands to binary expression}}
 
   (void)(f64 - b);   // expected-error{{invalid operands to binary expression}}
   (void)(f64 - i8);  // expected-error{{invalid operands to binary expression}}
@@ -373,11 +258,6 @@
   (void)(f64 - u32); // expected-error{{invalid operands to binary expression}}
   (void)(f64 - f16); // expected-error{{invalid operands to binary expression}}
   (void)(f64 - f32); // expected-error{{invalid operands to binary expression}}
-  (void)(f64 - 0);   // expected-error{{invalid operands to binary expression}}
-  (void)(f64 - 0l);  // expected-error{{invalid operands to binary expression}}
-  (void)(f64 - 0u);  // expected-error{{invalid operands to binary expression}}
-  (void)(f64 - 0ul); // expected-error{{invalid operands to binary expression}}
-  (void)(f64 - 0.f); // expected-error{{invalid operands to binary expression}}
 }
 
 void mul(svint8_t i8, svint16_t i16, svint32_t i32, svint64_t i64,
@@ -396,12 +276,6 @@
   (void)(i8 * f16); // expected-error{{invalid operands to binary expression}}
   (void)(i8 * f32); // expected-error{{invalid operands to binary expression}}
   (void)(i8 * f64); // expected-error{{invalid operands to binary expression}}
-  (void)(i8 * 0);   // expected-error{{invalid operands to binary expression}}
-  (void)(i8 * 0l);  // expected-error{{invalid operands to binary expression}}
-  (void)(i8 * 0u);  // expected-error{{invalid operands to binary expression}}
-  (void)(i8 * 0ul); // expected-error{{invalid operands to binary expression}}
-  (void)(i8 * 0.f); // expected-error{{invalid operands to binary expression}}
-  (void)(i8 * 0.);  // expected-error{{invalid operands to binary expression}}
 
   (void)(u8 * b);   // expected-error{{invalid operands to binary expression}}
   (void)(u8 * i16); // expected-error{{invalid operands to binary expression}}
@@ -413,12 +287,6 @@
   (void)(u8 * f16); // expected-error{{invalid operands to binary expression}}
   (void)(u8 * f32); // expected-error{{invalid operands to binary expression}}
   (void)(u8 * f64); // expected-error{{invalid operands to binary expression}}
-  (void)(u8 * 0);   // expected-error{{invalid operands to binary expression}}
-  (void)(u8 * 0l);  // expected-error{{invalid operands to binary expression}}
-  (void)(u8 * 0u);  // expected-error{{invalid operands to binary expression}}
-  (void)(u8 * 0ul); // expected-error{{invalid operands to binary expression}}
-  (void)(u8 * 0.f); // expected-error{{invalid operands to binary expression}}
-  (void)(u8 * 0.);  // expected-error{{invalid operands to binary expression}}
 
   (void)(i16 * b);   // expected-error{{invalid operands to binary expression}}
   (void)(i16 * i8);  // expected-error{{invalid operands to binary expression}}
@@ -430,12 +298,6 @@
   (void)(i16 * f16); // expected-error{{invalid operands to binary expression}}
   (void)(i16 * f32); // expected-error{{invalid operands to binary expression}}
   (void)(i16 * f64); // expected-error{{invalid operands to binary expression}}
-  (void)(i16 * 0);   // expected-error{{invalid operands to binary expression}}
-  (void)(i16 * 0l);  // expected-error{{invalid operands to binary expression}}
-  (void)(i16 * 0u);  // expected-error{{invalid operands to binary expression}}
-  (void)(i16 * 0ul); // expected-error{{invalid operands to binary expression}}
-  (void)(i16 * 0.f); // expected-error{{invalid operands to binary expression}}
-  (void)(i16 * 0.);  // expected-error{{invalid operands to binary expression}}
 
   (void)(u16 * b);   // expected-error{{invalid operands to binary expression}}
   (void)(u16 * i8);  // expected-error{{invalid operands to binary expression}}
@@ -447,12 +309,6 @@
   (void)(u16 * f16); // expected-error{{invalid operands to binary expression}}
   (void)(u16 * f32); // expected-error{{invalid operands to binary expression}}
   (void)(u16 * f64); // expected-error{{invalid operands to binary expression}}
-  (void)(u16 * 0);   // expected-error{{invalid operands to binary expression}}
-  (void)(u16 * 0l);  // expected-error{{invalid operands to binary expression}}
-  (void)(u16 * 0u);  // expected-error{{invalid operands to binary expression}}
-  (void)(u16 * 0ul); // expected-error{{invalid operands to binary expression}}
-  (void)(u16 * 0.f); // expected-error{{invalid operands to binary expression}}
-  (void)(u16 * 0.);  // expected-error{{invalid operands to binary expression}}
 
   (void)(i32 * b);   // expected-error{{invalid operands to binary expression}}
   (void)(i32 * i8);  // expected-error{{invalid operands to binary expression}}
@@ -464,11 +320,6 @@
   (void)(i32 * f16); // expected-error{{invalid operands to binary expression}}
   (void)(i32 * f32); // expected-error{{invalid operands to binary expression}}
   (void)(i32 * f64); // expected-error{{invalid operands to binary expression}}
-  (void)(i32 * 0l);  // expected-error{{invalid operands to binary expression}}
-  (void)(i32 * 0u);  // expected-error{{invalid operands to binary expression}}
-  (void)(i32 * 0ul); // expected-error{{invalid operands to binary expression}}
-  (void)(i32 * 0.f); // expected-error{{invalid operands to binary expression}}
-  (void)(i32 * 0.);  // expected-error{{invalid operands to binary expression}}
 
   (void)(u32 * b);   // expected-error{{invalid operands to binary expression}}
   (void)(u32 * i8);  // expected-error{{invalid operands to binary expression}}
@@ -480,11 +331,6 @@
   (void)(u32 * f16); // expected-error{{invalid operands to binary expression}}
   (void)(u32 * f32); // expected-error{{invalid operands to binary expression}}
   (void)(u32 * f64); // expected-error{{invalid operands to binary expression}}
-  (void)(u32 * 0);   // expected-error{{invalid operands to binary expression}}
-  (void)(u32 * 0l);  // expected-error{{invalid operands to binary expression}}
-  (void)(u32 * 0ul); // expected-error{{invalid operands to binary expression}}
-  (void)(u32 * 0.f); // expected-error{{invalid operands to binary expression}}
-  (void)(u32 * 0.);  // expected-error{{invalid operands to binary expression}}
 
   (void)(i64 * b);   // expected-error{{invalid operands to binary expression}}
   (void)(i64 * i8);  // expected-error{{invalid operands to binary expression}}
@@ -496,11 +342,6 @@
   (void)(i64 * f16); // expected-error{{invalid operands to binary expression}}
   (void)(i64 * f32); // expected-error{{invalid operands to binary expression}}
   (void)(i64 * f64); // expected-error{{invalid operands to binary expression}}
-  (void)(i64 * 0);   // expected-error{{invalid operands to binary expression}}
-  (void)(i64 * 0u);  // expected-error{{invalid operands to binary expression}}
-  (void)(i64 * 0ul); // expected-error{{invalid operands to binary expression}}
-  (void)(i64 * 0.f); // expected-error{{invalid operands to binary expression}}
-  (void)(i64 * 0.);  // expected-error{{invalid operands to binary expression}}
 
   (void)(u64 * b);   // expected-error{{invalid operands to binary expression}}
   (void)(u64 * i8);  // expected-error{{invalid operands to binary expression}}
@@ -512,11 +353,6 @@
   (void)(u64 * f16); // expected-error{{invalid operands to binary expression}}
   (void)(u64 * f32); // expected-error{{invalid operands to binary expression}}
   (void)(u64 * f64); // expected-error{{invalid operands to binary expression}}
-  (void)(u64 * 0);   // expected-error{{invalid operands to binary expression}}
-  (void)(u64 * 0l);  // expected-error{{invalid operands to binary expression}}
-  (void)(u64 * 0u);  // expected-error{{invalid operands to binary expression}}
-  (void)(u64 * 0.f); // expected-error{{invalid operands to binary expression}}
-  (void)(u64 * 0.);  // expected-error{{invalid operands to binary expression}}
 
   (void)(f16 * b);   // expected-error{{invalid operands to binary expression}}
   (void)(f16 * i8);  // expected-error{{invalid operands to binary expression}}
@@ -528,12 +364,6 @@
   (void)(f16 * u64); // expected-error{{invalid operands to binary expression}}
   (void)(f16 * f32); // expected-error{{invalid operands to binary expression}}
   (void)(f16 * f64); // expected-error{{invalid operands to binary expression}}
-  (void)(f16 * 0);   // expected-error{{invalid operands to binary expression}}
-  (void)(f16 * 0l);  // expected-error{{invalid operands to binary expression}}
-  (void)(f16 * 0u);  // expected-error{{invalid operands to binary expression}}
-  (void)(f16 * 0ul); // expected-error{{invalid operands to binary expression}}
-  (void)(f16 * 0.f); // expected-error{{invalid operands to binary expression}}
-  (void)(f16 * 0.);  // expected-error{{invalid operands to binary expression}}
 
   (void)(f32 * b);   // expected-error{{invalid operands to binary expression}}
   (void)(f32 * i8);  // expected-error{{invalid operands to binary expression}}
@@ -545,11 +375,6 @@
   (void)(f32 * u64); // expected-error{{invalid operands to binary expression}}
   (void)(f32 * f16); // expected-error{{invalid operands to binary expression}}
   (void)(f32 * f64); // expected-error{{invalid operands to binary expression}}
-  (void)(f32 * 0);   // expected-error{{invalid operands to binary expression}}
-  (void)(f32 * 0l);  // expected-error{{invalid operands to binary expression}}
-  (void)(f32 * 0u);  // expected-error{{invalid operands to binary expression}}
-  (void)(f32 * 0ul); // expected-error{{invalid operands to binary expression}}
-  (void)(f32 * 0.);  // expected-error{{invalid operands to binary expression}}
 
   (void)(f64 * b);   // expected-error{{invalid operands to binary expression}}
   (void)(f64 * i8);  // expected-error{{invalid operands to binary expression}}
@@ -561,11 +386,6 @@
   (void)(f64 * u32); // expected-error{{invalid operands to binary expression}}
   (void)(f64 * f16); // expected-error{{invalid operands to binary expression}}
   (void)(f64 * f32); // expected-error{{invalid operands to binary expression}}
-  (void)(f64 * 0);   // expected-error{{invalid operands to binary expression}}
-  (void)(f64 * 0l);  // expected-error{{invalid operands to binary expression}}
-  (void)(f64 * 0u);  // expected-error{{invalid operands to binary expression}}
-  (void)(f64 * 0ul); // expected-error{{invalid operands to binary expression}}
-  (void)(f64 * 0.f); // expected-error{{invalid operands to binary expression}}
 }
 
 void div(svint8_t i8, svint16_t i16, svint32_t i32, svint64_t i64,
@@ -584,12 +404,6 @@
   (void)(i8 / f16); // expected-error{{invalid operands to binary expression}}
   (void)(i8 / f32); // expected-error{{invalid operands to binary expression}}
   (void)(i8 / f64); // expected-error{{invalid operands to binary expression}}
-  (void)(i8 / 0);   // expected-error{{invalid operands to binary expression}}
-  (void)(i8 / 0l);  // expected-error{{invalid operands to binary expression}}
-  (void)(i8 / 0u);  // expected-error{{invalid operands to binary expression}}
-  (void)(i8 / 0ul); // expected-error{{invalid operands to binary expression}}
-  (void)(i8 / 0.f); // expected-error{{invalid operands to binary expression}}
-  (void)(i8 / 0.);  // expected-error{{invalid operands to binary expression}}
 
   (void)(u8 / b);   // expected-error{{invalid operands to binary expression}}
   (void)(u8 / i16); // expected-error{{invalid operands to binary expression}}
@@ -601,12 +415,6 @@
   (void)(u8 / f16); // expected-error{{invalid operands to binary expression}}
   (void)(u8 / f32); // expected-error{{invalid operands to binary expression}}
   (void)(u8 / f64); // expected-error{{invalid operands to binary expression}}
-  (void)(u8 / 0);   // expected-error{{invalid operands to binary expression}}
-  (void)(u8 / 0l);  // expected-error{{invalid operands to binary expression}}
-  (void)(u8 / 0u);  // expected-error{{invalid operands to binary expression}}
-  (void)(u8 / 0ul); // expected-error{{invalid operands to binary expression}}
-  (void)(u8 / 0.f); // expected-error{{invalid operands to binary expression}}
-  (void)(u8 / 0.);  // expected-error{{invalid operands to binary expression}}
 
   (void)(i16 / b);   // expected-error{{invalid operands to binary expression}}
   (void)(i16 / i8);  // expected-error{{invalid operands to binary expression}}
@@ -618,12 +426,6 @@
   (void)(i16 / f16); // expected-error{{invalid operands to binary expression}}
   (void)(i16 / f32); // expected-error{{invalid operands to binary expression}}
   (void)(i16 / f64); // expected-error{{invalid operands to binary expression}}
-  (void)(i16 / 0);   // expected-error{{invalid operands to binary expression}}
-  (void)(i16 / 0l);  // expected-error{{invalid operands to binary expression}}
-  (void)(i16 / 0u);  // expected-error{{invalid operands to binary expression}}
-  (void)(i16 / 0ul); // expected-error{{invalid operands to binary expression}}
-  (void)(i16 / 0.f); // expected-error{{invalid operands to binary expression}}
-  (void)(i16 / 0.);  // expected-error{{invalid operands to binary expression}}
 
   (void)(u16 / b);   // expected-error{{invalid operands to binary expression}}
   (void)(u16 / i8);  // expected-error{{invalid operands to binary expression}}
@@ -635,12 +437,6 @@
   (void)(u16 / f16); // expected-error{{invalid operands to binary expression}}
   (void)(u16 / f32); // expected-error{{invalid operands to binary expression}}
   (void)(u16 / f64); // expected-error{{invalid operands to binary expression}}
-  (void)(u16 / 0);   // expected-error{{invalid operands to binary expression}}
-  (void)(u16 / 0l);  // expected-error{{invalid operands to binary expression}}
-  (void)(u16 / 0u);  // expected-error{{invalid operands to binary expression}}
-  (void)(u16 / 0ul); // expected-error{{invalid operands to binary expression}}
-  (void)(u16 / 0.f); // expected-error{{invalid operands to binary expression}}
-  (void)(u16 / 0.);  // expected-error{{invalid operands to binary expression}}
 
   (void)(i32 / b);   // expected-error{{invalid operands to binary expression}}
   (void)(i32 / i8);  // expected-error{{invalid operands to binary expression}}
@@ -652,11 +448,6 @@
   (void)(i32 / f16); // expected-error{{invalid operands to binary expression}}
   (void)(i32 / f32); // expected-error{{invalid operands to binary expression}}
   (void)(i32 / f64); // expected-error{{invalid operands to binary expression}}
-  (void)(i32 / 0l);  // expected-error{{invalid operands to binary expression}}
-  (void)(i32 / 0u);  // expected-error{{invalid operands to binary expression}}
-  (void)(i32 / 0ul); // expected-error{{invalid operands to binary expression}}
-  (void)(i32 / 0.f); // expected-error{{invalid operands to binary expression}}
-  (void)(i32 / 0.);  // expected-error{{invalid operands to binary expression}}
 
   (void)(u32 / b);   // expected-error{{invalid operands to binary expression}}
   (void)(u32 / i8);  // expected-error{{invalid operands to binary expression}}
@@ -668,11 +459,6 @@
   (void)(u32 / f16); // expected-error{{invalid operands to binary expression}}
   (void)(u32 / f32); // expected-error{{invalid operands to binary expression}}
   (void)(u32 / f64); // expected-error{{invalid operands to binary expression}}
-  (void)(u32 / 0);   // expected-error{{invalid operands to binary expression}}
-  (void)(u32 / 0l);  // expected-error{{invalid operands to binary expression}}
-  (void)(u32 / 0ul); // expected-error{{invalid operands to binary expression}}
-  (void)(u32 / 0.f); // expected-error{{invalid operands to binary expression}}
-  (void)(u32 / 0.);  // expected-error{{invalid operands to binary expression}}
 
   (void)(i64 / b);   // expected-error{{invalid operands to binary expression}}
   (void)(i64 / i8);  // expected-error{{invalid operands to binary expression}}
@@ -684,11 +470,6 @@
   (void)(i64 / f16); // expected-error{{invalid operands to binary expression}}
   (void)(i64 / f32); // expected-error{{invalid operands to binary expression}}
   (void)(i64 / f64); // expected-error{{invalid operands to binary expression}}
-  (void)(i64 / 0);   // expected-error{{invalid operands to binary expression}}
-  (void)(i64 / 0u);  // expected-error{{invalid operands to binary expression}}
-  (void)(i64 / 0ul); // expected-error{{invalid operands to binary expression}}
-  (void)(i64 / 0.f); // expected-error{{invalid operands to binary expression}}
-  (void)(i64 / 0.);  // expected-error{{invalid operands to binary expression}}
 
   (void)(u64 / b);   // expected-error{{invalid operands to binary expression}}
   (void)(u64 / i8);  // expected-error{{invalid operands to binary expression}}
@@ -700,11 +481,6 @@
   (void)(u64 / f16); // expected-error{{invalid operands to binary expression}}
   (void)(u64 / f32); // expected-error{{invalid operands to binary expression}}
   (void)(u64 / f64); // expected-error{{invalid operands to binary expression}}
-  (void)(u64 / 0);   // expected-error{{invalid operands to binary expression}}
-  (void)(u64 / 0l);  // expected-error{{invalid operands to binary expression}}
-  (void)(u64 / 0u);  // expected-error{{invalid operands to binary expression}}
-  (void)(u64 / 0.f); // expected-error{{invalid operands to binary expression}}
-  (void)(u64 / 0.);  // expected-error{{invalid operands to binary expression}}
 
   (void)(f16 / b);   // expected-error{{invalid operands to binary expression}}
   (void)(f16 / i8);  // expected-error{{invalid operands to binary expression}}
@@ -716,12 +492,6 @@
   (void)(f16 / u64); // expected-error{{invalid operands to binary expression}}
   (void)(f16 / f32); // expected-error{{invalid operands to binary expression}}
   (void)(f16 / f64); // expected-error{{invalid operands to binary expression}}
-  (void)(f16 / 0);   // expected-error{{invalid operands to binary expression}}
-  (void)(f16 / 0l);  // expected-error{{invalid operands to binary expression}}
-  (void)(f16 / 0u);  // expected-error{{invalid operands to binary expression}}
-  (void)(f16 / 0ul); // expected-error{{invalid operands to binary expression}}
-  (void)(f16 / 0.f); // expected-error{{invalid operands to binary expression}}
-  (void)(f16 / 0.);  // expected-error{{invalid operands to binary expression}}
 
   (void)(f32 / b);   // expected-error{{invalid operands to binary expression}}
   (void)(f32 / i8);  // expected-error{{invalid operands to binary expression}}
@@ -733,11 +503,6 @@
   (void)(f32 / u64); // expected-error{{invalid operands to binary expression}}
   (void)(f32 / f16); // expected-error{{invalid operands to binary expression}}
   (void)(f32 / f64); // expected-error{{invalid operands to binary expression}}
-  (void)(f32 / 0);   // expected-error{{invalid operands to binary expression}}
-  (void)(f32 / 0l);  // expected-error{{invalid operands to binary expression}}
-  (void)(f32 / 0u);  // expected-error{{invalid operands to binary expression}}
-  (void)(f32 / 0ul); // expected-error{{invalid operands to binary expression}}
-  (void)(f32 / 0.);  // expected-error{{invalid operands to binary expression}}
 
   (void)(f64 / b);   // expected-error{{invalid operands to binary expression}}
   (void)(f64 / i8);  // expected-error{{invalid operands to binary expression}}
@@ -749,11 +514,6 @@
   (void)(f64 / u32); // expected-error{{invalid operands to binary expression}}
   (void)(f64 / f16); // expected-error{{invalid operands to binary expression}}
   (void)(f64 / f32); // expected-error{{invalid operands to binary expression}}
-  (void)(f64 / 0);   // expected-error{{invalid operands to binary expression}}
-  (void)(f64 / 0l);  // expected-error{{invalid operands to binary expression}}
-  (void)(f64 / 0u);  // expected-error{{invalid operands to binary expression}}
-  (void)(f64 / 0ul); // expected-error{{invalid operands to binary expression}}
-  (void)(f64 / 0.f); // expected-error{{invalid operands to binary expression}}
 }
 
 void mod(svint8_t i8, svint16_t i16, svint32_t i32, svint64_t i64,
@@ -772,12 +532,6 @@
   (void)(i8 % f16); // expected-error{{invalid operands to binary expression}}
   (void)(i8 % f32); // expected-error{{invalid operands to binary expression}}
   (void)(i8 % f64); // expected-error{{invalid operands to binary expression}}
-  (void)(i8 % 0);   // expected-error{{invalid operands to binary expression}}
-  (void)(i8 % 0l);  // expected-error{{invalid operands to binary expression}}
-  (void)(i8 % 0u);  // expected-error{{invalid operands to binary expression}}
-  (void)(i8 % 0ul); // expected-error{{invalid operands to binary expression}}
-  (void)(i8 % 0.f); // expected-error{{invalid operands to binary expression}}
-  (void)(i8 % 0.);  // expected-error{{invalid operands to binary expression}}
 
   (void)(u8 % b);   // expected-error{{invalid operands to binary expression}}
   (void)(u8 % i16); // expected-error{{invalid operands to binary expression}}
@@ -789,12 +543,6 @@
   (void)(u8 % f16); // expected-error{{invalid operands to binary expression}}
   (void)(u8 % f32); // expected-error{{invalid operands to binary expression}}
   (void)(u8 % f64); // expected-error{{invalid operands to binary expression}}
-  (void)(u8 % 0);   // expected-error{{invalid operands to binary expression}}
-  (void)(u8 % 0l);  // expected-error{{invalid operands to binary expression}}
-  (void)(u8 % 0u);  // expected-error{{invalid operands to binary expression}}
-  (void)(u8 % 0ul); // expected-error{{invalid operands to binary expression}}
-  (void)(u8 % 0.f); // expected-error{{invalid operands to binary expression}}
-  (void)(u8 % 0.);  // expected-error{{invalid operands to binary expression}}
 
   (void)(i16 % b);   // expected-error{{invalid operands to binary expression}}
   (void)(i16 % i8);  // expected-error{{invalid operands to binary expression}}
@@ -806,12 +554,6 @@
   (void)(i16 % f16); // expected-error{{invalid operands to binary expression}}
   (void)(i16 % f32); // expected-error{{invalid operands to binary expression}}
   (void)(i16 % f64); // expected-error{{invalid operands to binary expression}}
-  (void)(i16 % 0);   // expected-error{{invalid operands to binary expression}}
-  (void)(i16 % 0l);  // expected-error{{invalid operands to binary expression}}
-  (void)(i16 % 0u);  // expected-error{{invalid operands to binary expression}}
-  (void)(i16 % 0ul); // expected-error{{invalid operands to binary expression}}
-  (void)(i16 % 0.f); // expected-error{{invalid operands to binary expression}}
-  (void)(i16 % 0.);  // expected-error{{invalid operands to binary expression}}
 
   (void)(u16 % b);   // expected-error{{invalid operands to binary expression}}
   (void)(u16 % i8);  // expected-error{{invalid operands to binary expression}}
@@ -823,12 +565,6 @@
   (void)(u16 % f16); // expected-error{{invalid operands to binary expression}}
   (void)(u16 % f32); // expected-error{{invalid operands to binary expression}}
   (void)(u16 % f64); // expected-error{{invalid operands to binary expression}}
-  (void)(u16 % 0);   // expected-error{{invalid operands to binary expression}}
-  (void)(u16 % 0l);  // expected-error{{invalid operands to binary expression}}
-  (void)(u16 % 0u);  // expected-error{{invalid operands to binary expression}}
-  (void)(u16 % 0ul); // expected-error{{invalid operands to binary expression}}
-  (void)(u16 % 0.f); // expected-error{{invalid operands to binary expression}}
-  (void)(u16 % 0.);  // expected-error{{invalid operands to binary expression}}
 
   (void)(i32 % b);   // expected-error{{invalid operands to binary expression}}
   (void)(i32 % i8);  // expected-error{{invalid operands to binary expression}}
@@ -840,11 +576,6 @@
   (void)(i32 % f16); // expected-error{{invalid operands to binary expression}}
   (void)(i32 % f32); // expected-error{{invalid operands to binary expression}}
   (void)(i32 % f64); // expected-error{{invalid operands to binary expression}}
-  (void)(i32 % 0l);  // expected-error{{invalid operands to binary expression}}
-  (void)(i32 % 0u);  // expected-error{{invalid operands to binary expression}}
-  (void)(i32 % 0ul); // expected-error{{invalid operands to binary expression}}
-  (void)(i32 % 0.f); // expected-error{{invalid operands to binary expression}}
-  (void)(i32 % 0.);  // expected-error{{invalid operands to binary expression}}
 
   (void)(u32 % b);   // expected-error{{invalid operands to binary expression}}
   (void)(u32 % i8);  // expected-error{{invalid operands to binary expression}}
@@ -856,11 +587,6 @@
   (void)(u32 % f16); // expected-error{{invalid operands to binary expression}}
   (void)(u32 % f32); // expected-error{{invalid operands to binary expression}}
   (void)(u32 % f64); // expected-error{{invalid operands to binary expression}}
-  (void)(u32 % 0);   // expected-error{{invalid operands to binary expression}}
-  (void)(u32 % 0l);  // expected-error{{invalid operands to binary expression}}
-  (void)(u32 % 0ul); // expected-error{{invalid operands to binary expression}}
-  (void)(u32 % 0.f); // expected-error{{invalid operands to binary expression}}
-  (void)(u32 % 0.);  // expected-error{{invalid operands to binary expression}}
 
   (void)(i64 % b);   // expected-error{{invalid operands to binary expression}}
   (void)(i64 % i8);  // expected-error{{invalid operands to binary expression}}
@@ -872,11 +598,6 @@
   (void)(i64 % f16); // expected-error{{invalid operands to binary expression}}
   (void)(i64 % f32); // expected-error{{invalid operands to binary expression}}
   (void)(i64 % f64); // expected-error{{invalid operands to binary expression}}
-  (void)(i64 % 0);   // expected-error{{invalid operands to binary expression}}
-  (void)(i64 % 0u);  // expected-error{{invalid operands to binary expression}}
-  (void)(i64 % 0ul); // expected-error{{invalid operands to binary expression}}
-  (void)(i64 % 0.f); // expected-error{{invalid operands to binary expression}}
-  (void)(i64 % 0.);  // expected-error{{invalid operands to binary expression}}
 
   (void)(u64 % b);   // expected-error{{invalid operands to binary expression}}
   (void)(u64 % i8);  // expected-error{{invalid operands to binary expression}}
@@ -888,11 +609,6 @@
   (void)(u64 % f16); // expected-error{{invalid operands to binary expression}}
   (void)(u64 % f32); // expected-error{{invalid operands to binary expression}}
   (void)(u64 % f64); // expected-error{{invalid operands to binary expression}}
-  (void)(u64 % 0);   // expected-error{{invalid operands to binary expression}}
-  (void)(u64 % 0l);  // expected-error{{invalid operands to binary expression}}
-  (void)(u64 % 0u);  // expected-error{{invalid operands to binary expression}}
-  (void)(u64 % 0.f); // expected-error{{invalid operands to binary expression}}
-  (void)(u64 % 0.);  // expected-error{{invalid operands to binary expression}}
 
   (void)(f16 % b);   // expected-error{{invalid operands to binary expression}}
   (void)(f16 % i8);  // expected-error{{invalid operands to binary expression}}
@@ -904,12 +620,6 @@
   (void)(f16 % u64); // expected-error{{invalid operands to binary expression}}
   (void)(f16 % f32); // expected-error{{invalid operands to binary expression}}
   (void)(f16 % f64); // expected-error{{invalid operands to binary expression}}
-  (void)(f16 % 0);   // expected-error{{invalid operands to binary expression}}
-  (void)(f16 % 0l);  // expected-error{{invalid operands to binary expression}}
-  (void)(f16 % 0u);  // expected-error{{invalid operands to binary expression}}
-  (void)(f16 % 0ul); // expected-error{{invalid operands to binary expression}}
-  (void)(f16 % 0.f); // expected-error{{invalid operands to binary expression}}
-  (void)(f16 % 0.);  // expected-error{{invalid operands to binary expression}}
 
   (void)(f32 % b);   // expected-error{{invalid operands to binary expression}}
   (void)(f32 % i8);  // expected-error{{invalid operands to binary expression}}
@@ -921,12 +631,6 @@
   (void)(f32 % u64); // expected-error{{invalid operands to binary expression}}
   (void)(f32 % f16); // expected-error{{invalid operands to binary expression}}
   (void)(f32 % f64); // expected-error{{invalid operands to binary expression}}
-  (void)(f32 % 0);   // expected-error{{invalid operands to binary expression}}
-  (void)(f32 % 0l);  // expected-error{{invalid operands to binary expression}}
-  (void)(f32 % 0u);  // expected-error{{invalid operands to binary expression}}
-  (void)(f32 % 0ul); // expected-error{{invalid operands to binary expression}}
-  (void)(f32 % 0.f); // expected-error{{invalid operands to binary expression}}
-  (void)(f32 % 0.);  // expected-error{{invalid operands to binary expression}}
 
   (void)(f64 % b);   // expected-error{{invalid operands to binary expression}}
   (void)(f64 % i8);  // expected-error{{invalid operands to binary expression}}
@@ -938,10 +642,4 @@
   (void)(f64 % u32); // expected-error{{invalid operands to binary expression}}
   (void)(f64 % f16); // expected-error{{invalid operands to binary expression}}
   (void)(f64 % f32); // expected-error{{invalid operands to binary expression}}
-  (void)(f64 % 0);   // expected-error{{invalid operands to binary expression}}
-  (void)(f64 % 0l);  // expected-error{{invalid operands to binary expression}}
-  (void)(f64 % 0u);  // expected-error{{invalid operands to binary expression}}
-  (void)(f64 % 0ul); // expected-error{{invalid operands to binary expression}}
-  (void)(f64 % 0.f); // expected-error{{invalid operands to binary expression}}
-  (void)(f64 % 0.);  // expected-error{{invalid operands to binary expression}}
 }
Index: clang/test/CodeGen/aarch64-sve-vector-arith-ops.c
===================================================================
--- clang/test/CodeGen/aarch64-sve-vector-arith-ops.c
+++ clang/test/CodeGen/aarch64-sve-vector-arith-ops.c
@@ -328,6 +328,132 @@
   return a + b;
 }
 
+// CHECK-LABEL: @add_i8_ilit(
+// CHECK-NEXT:  entry:
+// CHECK-NEXT:    [[ADD:%.*]] = add <vscale x 16 x i8> [[A:%.*]], zeroinitializer
+// CHECK-NEXT:    ret <vscale x 16 x i8> [[ADD]]
+//
+svint8_t add_i8_ilit(svint8_t a) {
+  return a + 0;
+}
+
+// CHECK-LABEL: @add_i8_illit(
+// CHECK-NEXT:  entry:
+// CHECK-NEXT:    [[ADD:%.*]] = add <vscale x 16 x i8> [[A:%.*]], zeroinitializer
+// CHECK-NEXT:    ret <vscale x 16 x i8> [[ADD]]
+//
+svint8_t add_i8_illit(svint8_t a) {
+  return a + 0l;
+}
+
+// CHECK-LABEL: @add_i8_illlit(
+// CHECK-NEXT:  entry:
+// CHECK-NEXT:    [[ADD:%.*]] = add <vscale x 16 x i8> [[A:%.*]], zeroinitializer
+// CHECK-NEXT:    ret <vscale x 16 x i8> [[ADD]]
+//
+svint8_t add_i8_illlit(svint8_t a) {
+  return a + 0ll;
+}
+
+// CHECK-LABEL: @add_i8_ulit(
+// CHECK-NEXT:  entry:
+// CHECK-NEXT:    [[ADD:%.*]] = add <vscale x 16 x i8> [[A:%.*]], zeroinitializer
+// CHECK-NEXT:    ret <vscale x 16 x i8> [[ADD]]
+//
+svint8_t add_i8_ulit(svint8_t a) {
+  return a + 0u;
+}
+
+// CHECK-LABEL: @add_i8_ullit(
+// CHECK-NEXT:  entry:
+// CHECK-NEXT:    [[ADD:%.*]] = add <vscale x 16 x i8> [[A:%.*]], zeroinitializer
+// CHECK-NEXT:    ret <vscale x 16 x i8> [[ADD]]
+//
+svint8_t add_i8_ullit(svint8_t a) {
+  return a + 0ul;
+}
+
+// CHECK-LABEL: @add_i8_ulllit(
+// CHECK-NEXT:  entry:
+// CHECK-NEXT:    [[ADD:%.*]] = add <vscale x 16 x i8> [[A:%.*]], zeroinitializer
+// CHECK-NEXT:    ret <vscale x 16 x i8> [[ADD]]
+//
+svint8_t add_i8_ulllit(svint8_t a) {
+  return a + 0ull;
+}
+
+// CHECK-LABEL: @add_f64_ilit(
+// CHECK-NEXT:  entry:
+// CHECK-NEXT:    [[ADD:%.*]] = fadd <vscale x 2 x double> [[A:%.*]], zeroinitializer
+// CHECK-NEXT:    ret <vscale x 2 x double> [[ADD]]
+//
+svfloat64_t add_f64_ilit(svfloat64_t a) {
+  return a + 0;
+}
+
+// CHECK-LABEL: @add_f64_illit(
+// CHECK-NEXT:  entry:
+// CHECK-NEXT:    [[ADD:%.*]] = fadd <vscale x 2 x double> [[A:%.*]], zeroinitializer
+// CHECK-NEXT:    ret <vscale x 2 x double> [[ADD]]
+//
+svfloat64_t add_f64_illit(svfloat64_t a) {
+  return a + 0l;
+}
+
+// CHECK-LABEL: @add_f64_illlit(
+// CHECK-NEXT:  entry:
+// CHECK-NEXT:    [[ADD:%.*]] = fadd <vscale x 2 x double> [[A:%.*]], zeroinitializer
+// CHECK-NEXT:    ret <vscale x 2 x double> [[ADD]]
+//
+svfloat64_t add_f64_illlit(svfloat64_t a) {
+  return a + 0ll;
+}
+
+// CHECK-LABEL: @add_f64_ulit(
+// CHECK-NEXT:  entry:
+// CHECK-NEXT:    [[ADD:%.*]] = fadd <vscale x 2 x double> [[A:%.*]], zeroinitializer
+// CHECK-NEXT:    ret <vscale x 2 x double> [[ADD]]
+//
+svfloat64_t add_f64_ulit(svfloat64_t a) {
+  return a + 0u;
+}
+
+// CHECK-LABEL: @add_f64_ullit(
+// CHECK-NEXT:  entry:
+// CHECK-NEXT:    [[ADD:%.*]] = fadd <vscale x 2 x double> [[A:%.*]], zeroinitializer
+// CHECK-NEXT:    ret <vscale x 2 x double> [[ADD]]
+//
+svfloat64_t add_f64_ullit(svfloat64_t a) {
+  return a + 0ul;
+}
+
+// CHECK-LABEL: @add_f64_ulllit(
+// CHECK-NEXT:  entry:
+// CHECK-NEXT:    [[ADD:%.*]] = fadd <vscale x 2 x double> [[A:%.*]], zeroinitializer
+// CHECK-NEXT:    ret <vscale x 2 x double> [[ADD]]
+//
+svfloat64_t add_f64_ulllit(svfloat64_t a) {
+  return a + 0ull;
+}
+
+// CHECK-LABEL: @add_f64_flit(
+// CHECK-NEXT:  entry:
+// CHECK-NEXT:    [[ADD:%.*]] = fadd <vscale x 2 x double> [[A:%.*]], zeroinitializer
+// CHECK-NEXT:    ret <vscale x 2 x double> [[ADD]]
+//
+svfloat64_t add_f64_flit(svfloat64_t a) {
+  return a + 0.f;
+}
+
+// CHECK-LABEL: @add_f64_dlit(
+// CHECK-NEXT:  entry:
+// CHECK-NEXT:    [[ADD:%.*]] = fadd <vscale x 2 x double> [[A:%.*]], zeroinitializer
+// CHECK-NEXT:    ret <vscale x 2 x double> [[ADD]]
+//
+svfloat64_t add_f64_dlit(svfloat64_t a) {
+  return a + 0.;
+}
+
 // SUBTRACTION
 
 // CHECK-LABEL: @sub_i8(
Index: clang/lib/Sema/SemaExpr.cpp
===================================================================
--- clang/lib/Sema/SemaExpr.cpp
+++ clang/lib/Sema/SemaExpr.cpp
@@ -52,8 +52,10 @@
 #include "clang/Sema/Template.h"
 #include "llvm/ADT/STLExtras.h"
 #include "llvm/ADT/StringExtras.h"
+#include "llvm/Config/llvm-config.h"
 #include "llvm/Support/Casting.h"
 #include "llvm/Support/ConvertUTF.h"
+#include "llvm/Support/ErrorHandling.h"
 #include "llvm/Support/SaveAndRestore.h"
 #include "llvm/Support/TypeSize.h"
 
@@ -10228,12 +10230,21 @@
                                         ExprResult *Vector) {
   QualType ScalarTy = Scalar->get()->getType().getUnqualifiedType();
   QualType VectorTy = Vector->get()->getType().getUnqualifiedType();
-  const auto *VT = VectorTy->castAs<VectorType>();
+  const auto *VT = VectorTy->getAs<VectorType>();
 
-  assert(!isa<ExtVectorType>(VT) &&
-         "ExtVectorTypes should not be handled here!");
+  assert(!VT || !isa<ExtVectorType>(VT) &&
+                    "ExtVectorTypes should not be handled here!");
 
-  QualType VectorEltTy = VT->getElementType();
+  QualType VectorEltTy;
+
+  if (VT) {
+    VectorEltTy = VT->getElementType();
+  } else if (VectorTy->isVLSTBuiltinType()) {
+    const auto *BuiltinTy = VectorTy->castAs<BuiltinType>();
+    VectorEltTy = BuiltinTy->getSveEltType(S.getASTContext());
+  } else {
+    llvm_unreachable("Only Fixed-Length and SVE Vector types are handled here");
+  }
 
   // Reject cases where the vector element type or the scalar element type are
   // not integral or floating point types.
@@ -10557,32 +10568,14 @@
   if (Context.hasSameType(LHSType, RHSType))
     return LHSType;
 
-  auto tryScalableVectorConvert = [this](ExprResult *Src, QualType SrcType,
-                                         QualType DestType) {
-    const QualType DestBaseType = DestType->getSveEltType(Context);
-    if (DestBaseType->getUnqualifiedDesugaredType() ==
-        SrcType->getUnqualifiedDesugaredType()) {
-      unsigned DiagID = diag::err_typecheck_invalid_operands;
-      if (!tryVectorConvertAndSplat(*this, Src, SrcType, DestBaseType, DestType,
-                                    DiagID))
-        return DestType;
-    }
-    return QualType();
-  };
-
   if (LHSType->isVLSTBuiltinType() && !RHSType->isVLSTBuiltinType()) {
-    auto DestType = tryScalableVectorConvert(&RHS, RHSType, LHSType);
-    if (DestType == QualType())
-      return InvalidOperands(Loc, LHS, RHS);
-    return DestType;
+    if (!tryGCCVectorConvertAndSplat(*this, &RHS, &LHS))
+      return LHSType;
   }
-
   if (RHSType->isVLSTBuiltinType() && !LHSType->isVLSTBuiltinType()) {
-    auto DestType = tryScalableVectorConvert((IsCompAssign ? nullptr : &LHS),
-                                             LHSType, RHSType);
-    if (DestType == QualType())
-      return InvalidOperands(Loc, LHS, RHS);
-    return DestType;
+    if (LHS.get()->isLValue() ||
+        !tryGCCVectorConvertAndSplat(*this, &LHS, &RHS))
+      return RHSType;
   }
 
   Diag(Loc, DiagID) << LHSType << RHSType << LHS.get()->getSourceRange()
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to