From 3aca0ffd5092e37590bbee7e0fcd2b1b5780024c Mon Sep 17 00:00:00 2001 From: David Truby Date: Mon, 28 Feb 2022 11:45:49 +0000 Subject: [PATCH] [clang][SVE] Add support for arithmetic operators on SVE types This patch implements support for the +, -, *, / and % operators on sizeless SVE types. Support for these operators on svbool_t is excluded. Differential Revision: https://reviews.llvm.org/D120323 --- clang/include/clang/AST/Type.h | 2 + clang/include/clang/Sema/Sema.h | 4 + clang/lib/AST/Type.cpp | 5 + clang/lib/Sema/SemaExpr.cpp | 60 ++- clang/test/CodeGen/aarch64-sve-vector-ops.c | 743 ++++++++++++++++++++++++++++ clang/test/Sema/aarch64-sve-vector-ops.c | 645 ++++++++++++++++++++++++ clang/test/Sema/sizeless-1.c | 10 - clang/test/SemaCXX/sizeless-1.cpp | 10 - 8 files changed, 1457 insertions(+), 22 deletions(-) create mode 100644 clang/test/CodeGen/aarch64-sve-vector-ops.c create mode 100644 clang/test/Sema/aarch64-sve-vector-ops.c diff --git a/clang/include/clang/AST/Type.h b/clang/include/clang/AST/Type.h index 3c71cbb..76e4474 100644 --- a/clang/include/clang/AST/Type.h +++ b/clang/include/clang/AST/Type.h @@ -2557,6 +2557,8 @@ public: return getKind() >= Half && getKind() <= Ibm128; } + bool isSVEBool() const { return getKind() == Kind::SveBool; } + /// Determines whether the given kind corresponds to a placeholder type. static bool isPlaceholderTypeKind(Kind K) { return K >= Overload; diff --git a/clang/include/clang/Sema/Sema.h b/clang/include/clang/Sema/Sema.h index d072cf9..4c5666f 100644 --- a/clang/include/clang/Sema/Sema.h +++ b/clang/include/clang/Sema/Sema.h @@ -11940,6 +11940,10 @@ public: QualType CheckVectorLogicalOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc); + // type checking for sizeless vector binary operators. + QualType CheckSizelessVectorOperands(ExprResult &LHS, ExprResult &RHS, + SourceLocation Loc); + /// Type checking for matrix binary operators. QualType CheckMatrixElementwiseOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, diff --git a/clang/lib/AST/Type.cpp b/clang/lib/AST/Type.cpp index 1c7499c..8579d69 100644 --- a/clang/lib/AST/Type.cpp +++ b/clang/lib/AST/Type.cpp @@ -2105,6 +2105,11 @@ bool Type::hasUnsignedIntegerRepresentation() const { return VT->getElementType()->isUnsignedIntegerOrEnumerationType(); if (const auto *VT = dyn_cast(CanonicalType)) return VT->getElementType()->isUnsignedIntegerOrEnumerationType(); + if (CanonicalType->isVLSTBuiltinType()) { + const auto *VT = cast(CanonicalType); + return VT->getKind() >= BuiltinType::SveUint8 && + VT->getKind() <= BuiltinType::SveUint64; + } return isUnsignedIntegerOrEnumerationType(); } diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp index ca5e206..96471f6 100644 --- a/clang/lib/Sema/SemaExpr.cpp +++ b/clang/lib/Sema/SemaExpr.cpp @@ -10403,6 +10403,29 @@ QualType Sema::CheckVectorOperands(ExprResult &LHS, ExprResult &RHS, return QualType(); } +QualType Sema::CheckSizelessVectorOperands(ExprResult &LHS, ExprResult &RHS, + SourceLocation Loc) { + QualType LHSType = LHS.get()->getType().getUnqualifiedType(); + QualType RHSType = RHS.get()->getType().getUnqualifiedType(); + + const BuiltinType *LHSVecType = LHSType->getAs(); + const BuiltinType *RHSVecType = RHSType->getAs(); + + unsigned DiagID = diag::err_typecheck_invalid_operands; + if (LHSVecType->isSVEBool() || RHSVecType->isSVEBool()) { + Diag(Loc, DiagID) << LHSType << RHSType << LHS.get()->getSourceRange() + << RHS.get()->getSourceRange(); + return QualType(); + } + + if (Context.hasSameType(LHSType, RHSType)) + return LHSType; + + Diag(Loc, DiagID) << LHSType << RHSType << LHS.get()->getSourceRange() + << RHS.get()->getSourceRange(); + return QualType(); +} + // checkArithmeticNull - Detect when a NULL constant is used improperly in an // expression. These are mainly cases where the null pointer is used as an // integer instead of a pointer. @@ -10512,8 +10535,10 @@ QualType Sema::CheckMultiplyDivideOperands(ExprResult &LHS, ExprResult &RHS, QualType RHSTy = RHS.get()->getType(); if (LHSTy->isVectorType() || RHSTy->isVectorType()) return CheckVectorOperands(LHS, RHS, Loc, IsCompAssign, - /*AllowBothBool*/getLangOpts().AltiVec, - /*AllowBoolConversions*/false); + /*AllowBothBool*/ getLangOpts().AltiVec, + /*AllowBoolConversions*/ false); + if (LHSTy->isVLSTBuiltinType() || RHSTy->isVLSTBuiltinType()) + return CheckSizelessVectorOperands(LHS, RHS, Loc); if (!IsDiv && (LHSTy->isConstantMatrixType() || RHSTy->isConstantMatrixType())) return CheckMatrixMultiplyOperands(LHS, RHS, Loc, IsCompAssign); @@ -10551,6 +10576,21 @@ QualType Sema::CheckRemainderOperands( return InvalidOperands(Loc, LHS, RHS); } + if (LHS.get()->getType()->isVLSTBuiltinType() && + RHS.get()->getType()->isVLSTBuiltinType()) { + if (LHS.get() + ->getType() + ->getSveEltType(Context) + ->hasIntegerRepresentation() && + RHS.get() + ->getType() + ->getSveEltType(Context) + ->hasIntegerRepresentation()) + return CheckSizelessVectorOperands(LHS, RHS, Loc); + + return InvalidOperands(Loc, LHS, RHS); + } + QualType compType = UsualArithmeticConversions( LHS, RHS, Loc, IsCompAssign ? ACK_CompAssign : ACK_Arithmetic); if (LHS.isInvalid() || RHS.isInvalid()) @@ -10856,6 +10896,14 @@ QualType Sema::CheckAdditionOperands(ExprResult &LHS, ExprResult &RHS, return compType; } + if (LHS.get()->getType()->isVLSTBuiltinType() || + RHS.get()->getType()->isVLSTBuiltinType()) { + QualType compType = CheckSizelessVectorOperands(LHS, RHS, Loc); + if (CompLHSTy) + *CompLHSTy = compType; + return compType; + } + if (LHS.get()->getType()->isConstantMatrixType() || RHS.get()->getType()->isConstantMatrixType()) { QualType compType = @@ -10960,6 +11008,14 @@ QualType Sema::CheckSubtractionOperands(ExprResult &LHS, ExprResult &RHS, return compType; } + if (LHS.get()->getType()->isVLSTBuiltinType() || + RHS.get()->getType()->isVLSTBuiltinType()) { + QualType compType = CheckSizelessVectorOperands(LHS, RHS, Loc); + if (CompLHSTy) + *CompLHSTy = compType; + return compType; + } + if (LHS.get()->getType()->isConstantMatrixType() || RHS.get()->getType()->isConstantMatrixType()) { QualType compType = diff --git a/clang/test/CodeGen/aarch64-sve-vector-ops.c b/clang/test/CodeGen/aarch64-sve-vector-ops.c new file mode 100644 index 0000000..15a05e9 --- /dev/null +++ b/clang/test/CodeGen/aarch64-sve-vector-ops.c @@ -0,0 +1,743 @@ +// RUN: %clang_cc1 -triple aarch64-none-linux-gnu -target-feature +sve \ +// RUN: -fallow-half-arguments-and-returns \ +// RUN: -O1 -emit-llvm -o - %s 2>&1 | FileCheck %s + +#include + +// ADDITION + +svint8_t add_i8(svint8_t a, svint8_t b) { + // CHECK-LABEL: add_i8 + // CHECK: %add = add %b, %a + // CHECK-NEXT: ret %add + return a + b; +} + +svint16_t add_i16(svint16_t a, svint16_t b) { + // CHECK-LABEL: add_i16 + // CHECK: %add = add %b, %a + // CHECK-NEXT: ret %add + return a + b; +} + +svint32_t add_i32(svint32_t a, svint32_t b) { + // CHECK-LABEL: add_i32 + // CHECK: %add = add %b, %a + // CHECK-NEXT: ret %add + return a + b; +} + +svint64_t add_i64(svint64_t a, svint64_t b) { + // CHECK-LABEL: add_i64 + // CHECK: %add = add %b, %a + // CHECK-NEXT: ret %add + return a + b; +} + +svuint8_t add_u8(svuint8_t a, svuint8_t b) { + // CHECK-LABEL: add_u8 + // CHECK: %add = add %b, %a + // CHECK-NEXT: ret %add + return a + b; +} + +svuint16_t add_u16(svuint16_t a, svuint16_t b) { + // CHECK-LABEL: add_u16 + // CHECK: %add = add %b, %a + // CHECK-NEXT: ret %add + return a + b; +} + +svuint32_t add_u32(svuint32_t a, svuint32_t b) { + // CHECK-LABEL: add_u32 + // CHECK: %add = add %b, %a + // CHECK-NEXT: ret %add + return a + b; +} + +svuint64_t add_u64(svuint64_t a, svuint64_t b) { + // CHECK-LABEL: add_u64 + // CHECK: %add = add %b, %a + // CHECK-NEXT: ret %add + return a + b; +} + +svfloat16_t add_f16(svfloat16_t a, svfloat16_t b) { + // CHECK-LABEL: add_f16 + // CHECK: %add = fadd %a, %b + // CHECK-NEXT: ret %add + return a + b; +} + +svfloat32_t add_f32(svfloat32_t a, svfloat32_t b) { + // CHECK-LABEL: add_f32 + // CHECK: %add = fadd %a, %b + // CHECK-NEXT: ret %add + return a + b; +} + +svfloat64_t add_f64(svfloat64_t a, svfloat64_t b) { + // CHECK-LABEL: add_f64 + // CHECK: %add = fadd %a, %b + // CHECK-NEXT: ret %add + return a + b; +} + +svint8_t add_inplace_i8(svint8_t a, svint8_t b) { + // CHECK-LABEL: add_inplace_i8 + // CHECK: %add = add %b, %a + // CHECK-NEXT: ret %add + return a += b; +} + +svint16_t add_inplace_i16(svint16_t a, svint16_t b) { + // CHECK-LABEL: add_inplace_i16 + // CHECK: %add = add %b, %a + // CHECK-NEXT: ret %add + return a += b; +} + +svint32_t add_inplace_i32(svint32_t a, svint32_t b) { + // CHECK-LABEL: add_inplace_i32 + // CHECK: %add = add %b, %a + // CHECK-NEXT: ret %add + return a += b; +} + +svint64_t add_inplace_i64(svint64_t a, svint64_t b) { + // CHECK-LABEL: add_inplace_i64 + // CHECK: %add = add %b, %a + // CHECK-NEXT: ret %add + return a += b; +} + +svuint8_t add_inplace_u8(svuint8_t a, svuint8_t b) { + // CHECK-LABEL: add_inplace_u8 + // CHECK: %add = add %b, %a + // CHECK-NEXT: ret %add + return a += b; +} + +svuint16_t add_inplace_u16(svuint16_t a, svuint16_t b) { + // CHECK-LABEL: add_inplace_u16 + // CHECK: %add = add %b, %a + // CHECK-NEXT: ret %add + return a += b; +} + +svuint32_t add_inplace_u32(svuint32_t a, svuint32_t b) { + // CHECK-LABEL: add_inplace_u32 + // CHECK: %add = add %b, %a + // CHECK-NEXT: ret %add + return a += b; +} + +svuint64_t add_inplace_u64(svuint64_t a, svuint64_t b) { + // CHECK-LABEL: add_inplace_u64 + // CHECK: %add = add %b, %a + // CHECK-NEXT: ret %add + return a += b; +} + +svfloat16_t add_inplace_f16(svfloat16_t a, svfloat16_t b) { + // CHECK-LABEL: add_inplace_f16 + // CHECK: %add = fadd %a, %b + // CHECK-NEXT: ret %add + return a += b; +} + +svfloat32_t add_inplace_f32(svfloat32_t a, svfloat32_t b) { + // CHECK-LABEL: add_inplace_f32 + // CHECK: %add = fadd %a, %b + // CHECK-NEXT: ret %add + return a += b; +} + +svfloat64_t add_inplace_f64(svfloat64_t a, svfloat64_t b) { + // CHECK-LABEL: add_inplace_f64 + // CHECK: %add = fadd %a, %b + // CHECK-NEXT: ret %add + return a += b; +} + +// SUBTRACTION + +svint8_t sub_i8(svint8_t a, svint8_t b) { + // CHECK-LABEL: sub_i8 + // CHECK: %sub = sub %a, %b + // CHECK-NEXT: ret %sub + return a - b; +} + +svint16_t sub_i16(svint16_t a, svint16_t b) { + // CHECK-LABEL: sub_i16 + // CHECK: %sub = sub %a, %b + // CHECK-NEXT: ret %sub + return a - b; +} + +svint32_t sub_i32(svint32_t a, svint32_t b) { + // CHECK-LABEL: sub_i32 + // CHECK: %sub = sub %a, %b + // CHECK-NEXT: ret %sub + return a - b; +} + +svint64_t sub_i64(svint64_t a, svint64_t b) { + // CHECK-LABEL: sub_i64 + // CHECK: %sub = sub %a, %b + // CHECK-NEXT: ret %sub + return a - b; +} + +svuint8_t sub_u8(svuint8_t a, svuint8_t b) { + // CHECK-LABEL: sub_u8 + // CHECK: %sub = sub %a, %b + // CHECK-NEXT: ret %sub + return a - b; +} + +svuint16_t sub_u16(svuint16_t a, svuint16_t b) { + // CHECK-LABEL: sub_u16 + // CHECK: %sub = sub %a, %b + // CHECK-NEXT: ret %sub + return a - b; +} + +svuint32_t sub_u32(svuint32_t a, svuint32_t b) { + // CHECK-LABEL: sub_u32 + // CHECK: %sub = sub %a, %b + // CHECK-NEXT: ret %sub + return a - b; +} + +svuint64_t sub_u64(svuint64_t a, svuint64_t b) { + // CHECK-LABEL: sub_u64 + // CHECK: %sub = sub %a, %b + // CHECK-NEXT: ret %sub + return a - b; +} + +svfloat16_t sub_f16(svfloat16_t a, svfloat16_t b) { + // CHECK-LABEL: sub_f16 + // CHECK: %sub = fsub %a, %b + // CHECK-NEXT: ret %sub + return a - b; +} + +svfloat32_t sub_f32(svfloat32_t a, svfloat32_t b) { + // CHECK-LABEL: sub_f32 + // CHECK: %sub = fsub %a, %b + // CHECK-NEXT: ret %sub + return a - b; +} + +svfloat64_t sub_f64(svfloat64_t a, svfloat64_t b) { + // CHECK-LABEL: sub_f64 + // CHECK: %sub = fsub %a, %b + // CHECK-NEXT: ret %sub + return a - b; +} + +svint8_t sub_inplace_i8(svint8_t a, svint8_t b) { + // CHECK-LABEL: sub_inplace_i8 + // CHECK: %sub = sub %a, %b + // CHECK-NEXT: ret %sub + return a - b; +} + +svint16_t sub_inplace_i16(svint16_t a, svint16_t b) { + // CHECK-LABEL: sub_inplace_i16 + // CHECK: %sub = sub %a, %b + // CHECK-NEXT: ret %sub + return a - b; +} + +svint32_t sub_inplace_i32(svint32_t a, svint32_t b) { + // CHECK-LABEL: sub_inplace_i32 + // CHECK: %sub = sub %a, %b + // CHECK-NEXT: ret %sub + return a - b; +} + +svint64_t sub_inplace_i64(svint64_t a, svint64_t b) { + // CHECK-LABEL: sub_inplace_i64 + // CHECK: %sub = sub %a, %b + // CHECK-NEXT: ret %sub + return a - b; +} + +svuint8_t sub_inplace_u8(svuint8_t a, svuint8_t b) { + // CHECK-LABEL: sub_inplace_u8 + // CHECK: %sub = sub %a, %b + // CHECK-NEXT: ret %sub + return a - b; +} + +svuint16_t sub_inplace_u16(svuint16_t a, svuint16_t b) { + // CHECK-LABEL: sub_inplace_u16 + // CHECK: %sub = sub %a, %b + // CHECK-NEXT: ret %sub + return a - b; +} + +svuint32_t sub_inplace_u32(svuint32_t a, svuint32_t b) { + // CHECK-LABEL: sub_inplace_u32 + // CHECK: %sub = sub %a, %b + // CHECK-NEXT: ret %sub + return a - b; +} + +svuint64_t sub_inplace_u64(svuint64_t a, svuint64_t b) { + // CHECK-LABEL: sub_inplace_u64 + // CHECK: %sub = sub %a, %b + // CHECK-NEXT: ret %sub + return a - b; +} + +svfloat16_t sub_inplace_f16(svfloat16_t a, svfloat16_t b) { + // CHECK-LABEL: sub_inplace_f16 + // CHECK: %sub = fsub %a, %b + // CHECK-NEXT: ret %sub + return a - b; +} + +svfloat32_t sub_inplace_f32(svfloat32_t a, svfloat32_t b) { + // CHECK-LABEL: sub_inplace_f32 + // CHECK: %sub = fsub %a, %b + // CHECK-NEXT: ret %sub + return a - b; +} + +svfloat64_t sub_inplace_f64(svfloat64_t a, svfloat64_t b) { + // CHECK-LABEL: sub_inplace_f64 + // CHECK: %sub = fsub %a, %b + // CHECK-NEXT: ret %sub + return a - b; +} + +// MULTIPLICATION + +svint8_t mul_i8(svint8_t a, svint8_t b) { + // CHECK-LABEL: mul_i8 + // CHECK: %mul = mul %b, %a + // CHECK-NEXT: ret %mul + return a * b; +} + +svint16_t mul_i16(svint16_t a, svint16_t b) { + // CHECK-LABEL: mul_i16 + // CHECK: %mul = mul %b, %a + // CHECK-NEXT: ret %mul + return a * b; +} + +svint32_t mul_i32(svint32_t a, svint32_t b) { + // CHECK-LABEL: mul_i32 + // CHECK: %mul = mul %b, %a + // CHECK-NEXT: ret %mul + return a * b; +} + +svint64_t mul_i64(svint64_t a, svint64_t b) { + // CHECK-LABEL: mul_i64 + // CHECK: %mul = mul %b, %a + // CHECK-NEXT: ret %mul + return a * b; +} + +svuint8_t mul_u8(svuint8_t a, svuint8_t b) { + // CHECK-LABEL: mul_u8 + // CHECK: %mul = mul %b, %a + // CHECK-NEXT: ret %mul + return a * b; +} + +svuint16_t mul_u16(svuint16_t a, svuint16_t b) { + // CHECK-LABEL: mul_u16 + // CHECK: %mul = mul %b, %a + // CHECK-NEXT: ret %mul + return a * b; +} + +svuint32_t mul_u32(svuint32_t a, svuint32_t b) { + // CHECK-LABEL: mul_u32 + // CHECK: %mul = mul %b, %a + // CHECK-NEXT: ret %mul + return a * b; +} + +svuint64_t mul_u64(svuint64_t a, svuint64_t b) { + // CHECK-LABEL: mul_u64 + // CHECK: %mul = mul %b, %a + // CHECK-NEXT: ret %mul + return a * b; +} + +svfloat16_t mul_f16(svfloat16_t a, svfloat16_t b) { + // CHECK-LABEL: mul_f16 + // CHECK: %mul = fmul %a, %b + // CHECK-NEXT: ret %mul + return a * b; +} + +svfloat32_t mul_f32(svfloat32_t a, svfloat32_t b) { + // CHECK-LABEL: mul_f32 + // CHECK: %mul = fmul %a, %b + // CHECK-NEXT: ret %mul + return a * b; +} + +svfloat64_t mul_f64(svfloat64_t a, svfloat64_t b) { + // CHECK-LABEL: mul_f64 + // CHECK: %mul = fmul %a, %b + // CHECK-NEXT: ret %mul + return a * b; +} + +svint8_t mul_inplace_i8(svint8_t a, svint8_t b) { + // CHECK-LABEL: mul_inplace_i8 + // CHECK: %mul = mul %b, %a + // CHECK-NEXT: ret %mul + return a * b; +} + +svint16_t mul_inplace_i16(svint16_t a, svint16_t b) { + // CHECK-LABEL: mul_inplace_i16 + // CHECK: %mul = mul %b, %a + // CHECK-NEXT: ret %mul + return a * b; +} + +svint32_t mul_inplace_i32(svint32_t a, svint32_t b) { + // CHECK-LABEL: mul_inplace_i32 + // CHECK: %mul = mul %b, %a + // CHECK-NEXT: ret %mul + return a * b; +} + +svint64_t mul_inplace_i64(svint64_t a, svint64_t b) { + // CHECK-LABEL: mul_inplace_i64 + // CHECK: %mul = mul %b, %a + // CHECK-NEXT: ret %mul + return a * b; +} + +svuint8_t mul_inplace_u8(svuint8_t a, svuint8_t b) { + // CHECK-LABEL: mul_inplace_u8 + // CHECK: %mul = mul %b, %a + // CHECK-NEXT: ret %mul + return a * b; +} + +svuint16_t mul_inplace_u16(svuint16_t a, svuint16_t b) { + // CHECK-LABEL: mul_inplace_u16 + // CHECK: %mul = mul %b, %a + // CHECK-NEXT: ret %mul + return a * b; +} + +svuint32_t mul_inplace_u32(svuint32_t a, svuint32_t b) { + // CHECK-LABEL: mul_inplace_u32 + // CHECK: %mul = mul %b, %a + // CHECK-NEXT: ret %mul + return a * b; +} + +svuint64_t mul_inplace_u64(svuint64_t a, svuint64_t b) { + // CHECK-LABEL: mul_inplace_u64 + // CHECK: %mul = mul %b, %a + // CHECK-NEXT: ret %mul + return a * b; +} + +svfloat16_t mul_inplace_f16(svfloat16_t a, svfloat16_t b) { + // CHECK-LABEL: mul_inplace_f16 + // CHECK: %mul = fmul %a, %b + // CHECK-NEXT: ret %mul + return a * b; +} + +svfloat32_t mul_inplace_f32(svfloat32_t a, svfloat32_t b) { + // CHECK-LABEL: mul_inplace_f32 + // CHECK: %mul = fmul %a, %b + // CHECK-NEXT: ret %mul + return a * b; +} + +svfloat64_t mul_inplace_f64(svfloat64_t a, svfloat64_t b) { + // CHECK-LABEL: mul_inplace_f64 + // CHECK: %mul = fmul %a, %b + // CHECK-NEXT: ret %mul + return a * b; +} + +// DIVISION + +svint8_t div_i8(svint8_t a, svint8_t b) { + // CHECK-LABEL: div_i8 + // CHECK: %div = sdiv %a, %b + // CHECK-NEXT: ret %div + return a / b; +} + +svint16_t div_i16(svint16_t a, svint16_t b) { + // CHECK-LABEL: div_i16 + // CHECK: %div = sdiv %a, %b + // CHECK-NEXT: ret %div + return a / b; +} + +svint32_t div_i32(svint32_t a, svint32_t b) { + // CHECK-LABEL: div_i32 + // CHECK: %div = sdiv %a, %b + // CHECK-NEXT: ret %div + return a / b; +} + +svint64_t div_i64(svint64_t a, svint64_t b) { + // CHECK-LABEL: div_i64 + // CHECK: %div = sdiv %a, %b + // CHECK-NEXT: ret %div + return a / b; +} + +svuint8_t div_u8(svuint8_t a, svuint8_t b) { + // CHECK-LABEL: div_u8 + // CHECK: %div = udiv %a, %b + // CHECK-NEXT: ret %div + return a / b; +} + +svuint16_t div_u16(svuint16_t a, svuint16_t b) { + // CHECK-LABEL: div_u16 + // CHECK: %div = udiv %a, %b + // CHECK-NEXT: ret %div + return a / b; +} + +svuint32_t div_u32(svuint32_t a, svuint32_t b) { + // CHECK-LABEL: div_u32 + // CHECK: %div = udiv %a, %b + // CHECK-NEXT: ret %div + return a / b; +} + +svuint64_t div_u64(svuint64_t a, svuint64_t b) { + // CHECK-LABEL: div_u64 + // CHECK: %div = udiv %a, %b + // CHECK-NEXT: ret %div + return a / b; +} + +svfloat16_t div_f16(svfloat16_t a, svfloat16_t b) { + // CHECK-LABEL: div_f16 + // CHECK: %div = fdiv %a, %b + // CHECK-NEXT: ret %div + return a / b; +} + +svfloat32_t div_f32(svfloat32_t a, svfloat32_t b) { + // CHECK-LABEL: div_f32 + // CHECK: %div = fdiv %a, %b + // CHECK-NEXT: ret %div + return a / b; +} + +svfloat64_t div_f64(svfloat64_t a, svfloat64_t b) { + // CHECK-LABEL: div_f64 + // CHECK: %div = fdiv %a, %b + // CHECK-NEXT: ret %div + return a / b; +} + +svint8_t div_inplace_i8(svint8_t a, svint8_t b) { + // CHECK-LABEL: div_inplace_i8 + // CHECK: %div = sdiv %a, %b + // CHECK-NEXT: ret %div + return a / b; +} + +svint16_t div_inplace_i16(svint16_t a, svint16_t b) { + // CHECK-LABEL: div_inplace_i16 + // CHECK: %div = sdiv %a, %b + // CHECK-NEXT: ret %div + return a / b; +} + +svint32_t div_inplace_i32(svint32_t a, svint32_t b) { + // CHECK-LABEL: div_inplace_i32 + // CHECK: %div = sdiv %a, %b + // CHECK-NEXT: ret %div + return a / b; +} + +svint64_t div_inplace_i64(svint64_t a, svint64_t b) { + // CHECK-LABEL: div_inplace_i64 + // CHECK: %div = sdiv %a, %b + // CHECK-NEXT: ret %div + return a / b; +} + +svuint8_t div_inplace_u8(svuint8_t a, svuint8_t b) { + // CHECK-LABEL: div_inplace_u8 + // CHECK: %div = udiv %a, %b + // CHECK-NEXT: ret %div + return a / b; +} + +svuint16_t div_inplace_u16(svuint16_t a, svuint16_t b) { + // CHECK-LABEL: div_inplace_u16 + // CHECK: %div = udiv %a, %b + // CHECK-NEXT: ret %div + return a / b; +} + +svuint32_t div_inplace_u32(svuint32_t a, svuint32_t b) { + // CHECK-LABEL: div_inplace_u32 + // CHECK: %div = udiv %a, %b + // CHECK-NEXT: ret %div + return a / b; +} + +svuint64_t div_inplace_u64(svuint64_t a, svuint64_t b) { + // CHECK-LABEL: div_inplace_u64 + // CHECK: %div = udiv %a, %b + // CHECK-NEXT: ret %div + return a / b; +} + +svfloat16_t div_inplace_f16(svfloat16_t a, svfloat16_t b) { + // CHECK-LABEL: div_inplace_f16 + // CHECK: %div = fdiv %a, %b + // CHECK-NEXT: ret %div + return a / b; +} + +svfloat32_t div_inplace_f32(svfloat32_t a, svfloat32_t b) { + // CHECK-LABEL: div_inplace_f32 + // CHECK: %div = fdiv %a, %b + // CHECK-NEXT: ret %div + return a / b; +} + +svfloat64_t div_inplace_f64(svfloat64_t a, svfloat64_t b) { + // CHECK-LABEL: div_inplace_f64 + // CHECK: %div = fdiv %a, %b + // CHECK-NEXT: ret %div + return a / b; +} + +// REMAINDER + +svint8_t rem_i8(svint8_t a, svint8_t b) { + // CHECK-LABEL: rem_i8 + // CHECK: %rem = srem %a, %b + // CHECK-NEXT: ret %rem + return a % b; +} + +svint16_t rem_i16(svint16_t a, svint16_t b) { + // CHECK-LABEL: rem_i16 + // CHECK: %rem = srem %a, %b + // CHECK-NEXT: ret %rem + return a % b; +} + +svint32_t rem_i32(svint32_t a, svint32_t b) { + // CHECK-LABEL: rem_i32 + // CHECK: %rem = srem %a, %b + // CHECK-NEXT: ret %rem + return a % b; +} + +svint64_t rem_i64(svint64_t a, svint64_t b) { + // CHECK-LABEL: rem_i64 + // CHECK: %rem = srem %a, %b + // CHECK-NEXT: ret %rem + return a % b; +} + +svuint8_t rem_u8(svuint8_t a, svuint8_t b) { + // CHECK-LABEL: rem_u8 + // CHECK: %rem = urem %a, %b + // CHECK-NEXT: ret %rem + return a % b; +} + +svuint16_t rem_u16(svuint16_t a, svuint16_t b) { + // CHECK-LABEL: rem_u16 + // CHECK: %rem = urem %a, %b + // CHECK-NEXT: ret %rem + return a % b; +} + +svuint32_t rem_u32(svuint32_t a, svuint32_t b) { + // CHECK-LABEL: rem_u32 + // CHECK: %rem = urem %a, %b + // CHECK-NEXT: ret %rem + return a % b; +} + +svuint64_t rem_u64(svuint64_t a, svuint64_t b) { + // CHECK-LABEL: rem_u64 + // CHECK: %rem = urem %a, %b + // CHECK-NEXT: ret %rem + return a % b; +} + +svint8_t rem_inplace_i8(svint8_t a, svint8_t b) { + // CHECK-LABEL: rem_inplace_i8 + // CHECK: %rem = srem %a, %b + // CHECK-NEXT: ret %rem + return a % b; +} + +svint16_t rem_inplace_i16(svint16_t a, svint16_t b) { + // CHECK-LABEL: rem_inplace_i16 + // CHECK: %rem = srem %a, %b + // CHECK-NEXT: ret %rem + return a % b; +} + +svint32_t rem_inplace_i32(svint32_t a, svint32_t b) { + // CHECK-LABEL: rem_inplace_i32 + // CHECK: %rem = srem %a, %b + // CHECK-NEXT: ret %rem + return a % b; +} + +svint64_t rem_inplace_i64(svint64_t a, svint64_t b) { + // CHECK-LABEL: rem_inplace_i64 + // CHECK: %rem = srem %a, %b + // CHECK-NEXT: ret %rem + return a % b; +} + +svuint8_t rem_inplace_u8(svuint8_t a, svuint8_t b) { + // CHECK-LABEL: rem_inplace_u8 + // CHECK: %rem = urem %a, %b + // CHECK-NEXT: ret %rem + return a % b; +} + +svuint16_t rem_inplace_u16(svuint16_t a, svuint16_t b) { + // CHECK-LABEL: rem_inplace_u16 + // CHECK: %rem = urem %a, %b + // CHECK-NEXT: ret %rem + return a % b; +} + +svuint32_t rem_inplace_u32(svuint32_t a, svuint32_t b) { + // CHECK-LABEL: rem_inplace_u32 + // CHECK: %rem = urem %a, %b + // CHECK-NEXT: ret %rem + return a % b; +} + +svuint64_t rem_inplace_u64(svuint64_t a, svuint64_t b) { + // CHECK-LABEL: rem_inplace_u64 + // CHECK: %rem = urem %a, %b + // CHECK-NEXT: ret %rem + return a % b; +} diff --git a/clang/test/Sema/aarch64-sve-vector-ops.c b/clang/test/Sema/aarch64-sve-vector-ops.c new file mode 100644 index 0000000..e18f194 --- /dev/null +++ b/clang/test/Sema/aarch64-sve-vector-ops.c @@ -0,0 +1,645 @@ +// RUN: %clang_cc1 -verify -triple aarch64-none-linux-gnu -target-feature +sve -fallow-half-arguments-and-returns -fsyntax-only %s + +// REQUIRES: aarch64-registered-target + +#include + +void add(svint8_t i8, svint16_t i16, svint32_t i32, svint64_t i64, + svuint8_t u8, svuint16_t u16, svuint32_t u32, svuint64_t u64, + svfloat16_t f16, svfloat32_t f32, svfloat64_t f64, + svbool_t b) { + (void)(b + b); // expected-error{{invalid operands to binary expression}} + + (void)(i8 + b); // expected-error{{invalid operands to binary expression}} + (void)(i8 + i16); // expected-error{{invalid operands to binary expression}} + (void)(i8 + i32); // expected-error{{invalid operands to binary expression}} + (void)(i8 + i64); // expected-error{{invalid operands to binary expression}} + (void)(i8 + u16); // expected-error{{invalid operands to binary expression}} + (void)(i8 + u32); // expected-error{{invalid operands to binary expression}} + (void)(i8 + u64); // expected-error{{invalid operands to binary expression}} + (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)(u8 + b); // expected-error{{invalid operands to binary expression}} + (void)(u8 + i16); // expected-error{{invalid operands to binary expression}} + (void)(u8 + i32); // expected-error{{invalid operands to binary expression}} + (void)(u8 + i64); // expected-error{{invalid operands to binary expression}} + (void)(u8 + u16); // expected-error{{invalid operands to binary expression}} + (void)(u8 + u32); // expected-error{{invalid operands to binary expression}} + (void)(u8 + u64); // expected-error{{invalid operands to binary expression}} + (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)(i16 + b); // expected-error{{invalid operands to binary expression}} + (void)(i16 + i8); // expected-error{{invalid operands to binary expression}} + (void)(i16 + i32); // expected-error{{invalid operands to binary expression}} + (void)(i16 + i64); // expected-error{{invalid operands to binary expression}} + (void)(i16 + u8); // expected-error{{invalid operands to binary expression}} + (void)(i16 + u32); // expected-error{{invalid operands to binary expression}} + (void)(i16 + u64); // expected-error{{invalid operands to binary expression}} + (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)(u16 + b); // expected-error{{invalid operands to binary expression}} + (void)(u16 + i8); // expected-error{{invalid operands to binary expression}} + (void)(u16 + i32); // expected-error{{invalid operands to binary expression}} + (void)(u16 + i64); // expected-error{{invalid operands to binary expression}} + (void)(u16 + u8); // expected-error{{invalid operands to binary expression}} + (void)(u16 + u32); // expected-error{{invalid operands to binary expression}} + (void)(u16 + u64); // expected-error{{invalid operands to binary expression}} + (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)(i32 + b); // expected-error{{invalid operands to binary expression}} + (void)(i32 + i8); // expected-error{{invalid operands to binary expression}} + (void)(i32 + i16); // expected-error{{invalid operands to binary expression}} + (void)(i32 + i64); // expected-error{{invalid operands to binary expression}} + (void)(i32 + u8); // expected-error{{invalid operands to binary expression}} + (void)(i32 + u16); // expected-error{{invalid operands to binary expression}} + (void)(i32 + u64); // expected-error{{invalid operands to binary expression}} + (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)(u32 + b); // expected-error{{invalid operands to binary expression}} + (void)(u32 + i8); // expected-error{{invalid operands to binary expression}} + (void)(u32 + i16); // expected-error{{invalid operands to binary expression}} + (void)(u32 + i64); // expected-error{{invalid operands to binary expression}} + (void)(u32 + u8); // expected-error{{invalid operands to binary expression}} + (void)(u32 + u16); // expected-error{{invalid operands to binary expression}} + (void)(u32 + u64); // expected-error{{invalid operands to binary expression}} + (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)(i64 + b); // expected-error{{invalid operands to binary expression}} + (void)(i64 + i8); // expected-error{{invalid operands to binary expression}} + (void)(i64 + i16); // expected-error{{invalid operands to binary expression}} + (void)(i64 + i32); // expected-error{{invalid operands to binary expression}} + (void)(i64 + u8); // expected-error{{invalid operands to binary expression}} + (void)(i64 + u16); // expected-error{{invalid operands to binary expression}} + (void)(i64 + u32); // expected-error{{invalid operands to binary expression}} + (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)(u64 + b); // expected-error{{invalid operands to binary expression}} + (void)(u64 + i8); // expected-error{{invalid operands to binary expression}} + (void)(u64 + i16); // expected-error{{invalid operands to binary expression}} + (void)(u64 + i32); // expected-error{{invalid operands to binary expression}} + (void)(u64 + u8); // expected-error{{invalid operands to binary expression}} + (void)(u64 + u16); // expected-error{{invalid operands to binary expression}} + (void)(u64 + u32); // expected-error{{invalid operands to binary expression}} + (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)(f16 + b); // expected-error{{invalid operands to binary expression}} + (void)(f16 + i8); // expected-error{{invalid operands to binary expression}} + (void)(f16 + i16); // expected-error{{invalid operands to binary expression}} + (void)(f16 + i32); // expected-error{{invalid operands to binary expression}} + (void)(f16 + i64); // expected-error{{invalid operands to binary expression}} + (void)(f16 + u8); // expected-error{{invalid operands to binary expression}} + (void)(f16 + u32); // expected-error{{invalid operands to binary expression}} + (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)(f32 + b); // expected-error{{invalid operands to binary expression}} + (void)(f32 + i8); // expected-error{{invalid operands to binary expression}} + (void)(f32 + i16); // expected-error{{invalid operands to binary expression}} + (void)(f32 + i32); // expected-error{{invalid operands to binary expression}} + (void)(f32 + i64); // expected-error{{invalid operands to binary expression}} + (void)(f32 + u8); // expected-error{{invalid operands to binary expression}} + (void)(f32 + u16); // expected-error{{invalid operands to binary expression}} + (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)(f64 + b); // expected-error{{invalid operands to binary expression}} + (void)(f64 + i8); // expected-error{{invalid operands to binary expression}} + (void)(f64 + i16); // expected-error{{invalid operands to binary expression}} + (void)(f64 + i32); // expected-error{{invalid operands to binary expression}} + (void)(f64 + i64); // expected-error{{invalid operands to binary expression}} + (void)(f64 + u8); // expected-error{{invalid operands to binary expression}} + (void)(f64 + u16); // expected-error{{invalid operands to binary expression}} + (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 sub(svint8_t i8, svint16_t i16, svint32_t i32, svint64_t i64, + svuint8_t u8, svuint16_t u16, svuint32_t u32, svuint64_t u64, + svfloat16_t f16, svfloat32_t f32, svfloat64_t f64, + svbool_t b) { + (void)(b - b); // expected-error{{invalid operands to binary expression}} + + (void)(i8 - b); // expected-error{{invalid operands to binary expression}} + (void)(i8 - i16); // expected-error{{invalid operands to binary expression}} + (void)(i8 - i32); // expected-error{{invalid operands to binary expression}} + (void)(i8 - i64); // expected-error{{invalid operands to binary expression}} + (void)(i8 - u16); // expected-error{{invalid operands to binary expression}} + (void)(i8 - u32); // expected-error{{invalid operands to binary expression}} + (void)(i8 - u64); // expected-error{{invalid operands to binary expression}} + (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)(u8 - b); // expected-error{{invalid operands to binary expression}} + (void)(u8 - i16); // expected-error{{invalid operands to binary expression}} + (void)(u8 - i32); // expected-error{{invalid operands to binary expression}} + (void)(u8 - i64); // expected-error{{invalid operands to binary expression}} + (void)(u8 - u16); // expected-error{{invalid operands to binary expression}} + (void)(u8 - u32); // expected-error{{invalid operands to binary expression}} + (void)(u8 - u64); // expected-error{{invalid operands to binary expression}} + (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)(i16 - b); // expected-error{{invalid operands to binary expression}} + (void)(i16 - i8); // expected-error{{invalid operands to binary expression}} + (void)(i16 - i32); // expected-error{{invalid operands to binary expression}} + (void)(i16 - i64); // expected-error{{invalid operands to binary expression}} + (void)(i16 - u8); // expected-error{{invalid operands to binary expression}} + (void)(i16 - u32); // expected-error{{invalid operands to binary expression}} + (void)(i16 - u64); // expected-error{{invalid operands to binary expression}} + (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)(u16 - b); // expected-error{{invalid operands to binary expression}} + (void)(u16 - i8); // expected-error{{invalid operands to binary expression}} + (void)(u16 - i32); // expected-error{{invalid operands to binary expression}} + (void)(u16 - i64); // expected-error{{invalid operands to binary expression}} + (void)(u16 - u8); // expected-error{{invalid operands to binary expression}} + (void)(u16 - u32); // expected-error{{invalid operands to binary expression}} + (void)(u16 - u64); // expected-error{{invalid operands to binary expression}} + (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)(i32 - b); // expected-error{{invalid operands to binary expression}} + (void)(i32 - i8); // expected-error{{invalid operands to binary expression}} + (void)(i32 - i16); // expected-error{{invalid operands to binary expression}} + (void)(i32 - i64); // expected-error{{invalid operands to binary expression}} + (void)(i32 - u8); // expected-error{{invalid operands to binary expression}} + (void)(i32 - u16); // expected-error{{invalid operands to binary expression}} + (void)(i32 - u64); // expected-error{{invalid operands to binary expression}} + (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)(u32 - b); // expected-error{{invalid operands to binary expression}} + (void)(u32 - i8); // expected-error{{invalid operands to binary expression}} + (void)(u32 - i16); // expected-error{{invalid operands to binary expression}} + (void)(u32 - i64); // expected-error{{invalid operands to binary expression}} + (void)(u32 - u8); // expected-error{{invalid operands to binary expression}} + (void)(u32 - u16); // expected-error{{invalid operands to binary expression}} + (void)(u32 - u64); // expected-error{{invalid operands to binary expression}} + (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)(i64 - b); // expected-error{{invalid operands to binary expression}} + (void)(i64 - i8); // expected-error{{invalid operands to binary expression}} + (void)(i64 - i16); // expected-error{{invalid operands to binary expression}} + (void)(i64 - i32); // expected-error{{invalid operands to binary expression}} + (void)(i64 - u8); // expected-error{{invalid operands to binary expression}} + (void)(i64 - u16); // expected-error{{invalid operands to binary expression}} + (void)(i64 - u32); // expected-error{{invalid operands to binary expression}} + (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)(u64 - b); // expected-error{{invalid operands to binary expression}} + (void)(u64 - i8); // expected-error{{invalid operands to binary expression}} + (void)(u64 - i16); // expected-error{{invalid operands to binary expression}} + (void)(u64 - i32); // expected-error{{invalid operands to binary expression}} + (void)(u64 - u8); // expected-error{{invalid operands to binary expression}} + (void)(u64 - u16); // expected-error{{invalid operands to binary expression}} + (void)(u64 - u32); // expected-error{{invalid operands to binary expression}} + (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)(f16 - b); // expected-error{{invalid operands to binary expression}} + (void)(f16 - i8); // expected-error{{invalid operands to binary expression}} + (void)(f16 - i16); // expected-error{{invalid operands to binary expression}} + (void)(f16 - i32); // expected-error{{invalid operands to binary expression}} + (void)(f16 - i64); // expected-error{{invalid operands to binary expression}} + (void)(f16 - u8); // expected-error{{invalid operands to binary expression}} + (void)(f16 - u32); // expected-error{{invalid operands to binary expression}} + (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)(f32 - b); // expected-error{{invalid operands to binary expression}} + (void)(f32 - i8); // expected-error{{invalid operands to binary expression}} + (void)(f32 - i16); // expected-error{{invalid operands to binary expression}} + (void)(f32 - i32); // expected-error{{invalid operands to binary expression}} + (void)(f32 - i64); // expected-error{{invalid operands to binary expression}} + (void)(f32 - u8); // expected-error{{invalid operands to binary expression}} + (void)(f32 - u16); // expected-error{{invalid operands to binary expression}} + (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)(f64 - b); // expected-error{{invalid operands to binary expression}} + (void)(f64 - i8); // expected-error{{invalid operands to binary expression}} + (void)(f64 - i16); // expected-error{{invalid operands to binary expression}} + (void)(f64 - i32); // expected-error{{invalid operands to binary expression}} + (void)(f64 - i64); // expected-error{{invalid operands to binary expression}} + (void)(f64 - u8); // expected-error{{invalid operands to binary expression}} + (void)(f64 - u16); // expected-error{{invalid operands to binary expression}} + (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 mul(svint8_t i8, svint16_t i16, svint32_t i32, svint64_t i64, + svuint8_t u8, svuint16_t u16, svuint32_t u32, svuint64_t u64, + svfloat16_t f16, svfloat32_t f32, svfloat64_t f64, + svbool_t b) { + (void)(b * b); // expected-error{{invalid operands to binary expression}} + + (void)(i8 * b); // expected-error{{invalid operands to binary expression}} + (void)(i8 * i16); // expected-error{{invalid operands to binary expression}} + (void)(i8 * i32); // expected-error{{invalid operands to binary expression}} + (void)(i8 * i64); // expected-error{{invalid operands to binary expression}} + (void)(i8 * u16); // expected-error{{invalid operands to binary expression}} + (void)(i8 * u32); // expected-error{{invalid operands to binary expression}} + (void)(i8 * u64); // expected-error{{invalid operands to binary expression}} + (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)(u8 * b); // expected-error{{invalid operands to binary expression}} + (void)(u8 * i16); // expected-error{{invalid operands to binary expression}} + (void)(u8 * i32); // expected-error{{invalid operands to binary expression}} + (void)(u8 * i64); // expected-error{{invalid operands to binary expression}} + (void)(u8 * u16); // expected-error{{invalid operands to binary expression}} + (void)(u8 * u32); // expected-error{{invalid operands to binary expression}} + (void)(u8 * u64); // expected-error{{invalid operands to binary expression}} + (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)(i16 * b); // expected-error{{invalid operands to binary expression}} + (void)(i16 * i8); // expected-error{{invalid operands to binary expression}} + (void)(i16 * i32); // expected-error{{invalid operands to binary expression}} + (void)(i16 * i64); // expected-error{{invalid operands to binary expression}} + (void)(i16 * u8); // expected-error{{invalid operands to binary expression}} + (void)(i16 * u32); // expected-error{{invalid operands to binary expression}} + (void)(i16 * u64); // expected-error{{invalid operands to binary expression}} + (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)(u16 * b); // expected-error{{invalid operands to binary expression}} + (void)(u16 * i8); // expected-error{{invalid operands to binary expression}} + (void)(u16 * i32); // expected-error{{invalid operands to binary expression}} + (void)(u16 * i64); // expected-error{{invalid operands to binary expression}} + (void)(u16 * u8); // expected-error{{invalid operands to binary expression}} + (void)(u16 * u32); // expected-error{{invalid operands to binary expression}} + (void)(u16 * u64); // expected-error{{invalid operands to binary expression}} + (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)(i32 * b); // expected-error{{invalid operands to binary expression}} + (void)(i32 * i8); // expected-error{{invalid operands to binary expression}} + (void)(i32 * i16); // expected-error{{invalid operands to binary expression}} + (void)(i32 * i64); // expected-error{{invalid operands to binary expression}} + (void)(i32 * u8); // expected-error{{invalid operands to binary expression}} + (void)(i32 * u16); // expected-error{{invalid operands to binary expression}} + (void)(i32 * u64); // expected-error{{invalid operands to binary expression}} + (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)(u32 * b); // expected-error{{invalid operands to binary expression}} + (void)(u32 * i8); // expected-error{{invalid operands to binary expression}} + (void)(u32 * i16); // expected-error{{invalid operands to binary expression}} + (void)(u32 * i64); // expected-error{{invalid operands to binary expression}} + (void)(u32 * u8); // expected-error{{invalid operands to binary expression}} + (void)(u32 * u16); // expected-error{{invalid operands to binary expression}} + (void)(u32 * u64); // expected-error{{invalid operands to binary expression}} + (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)(i64 * b); // expected-error{{invalid operands to binary expression}} + (void)(i64 * i8); // expected-error{{invalid operands to binary expression}} + (void)(i64 * i16); // expected-error{{invalid operands to binary expression}} + (void)(i64 * i32); // expected-error{{invalid operands to binary expression}} + (void)(i64 * u8); // expected-error{{invalid operands to binary expression}} + (void)(i64 * u16); // expected-error{{invalid operands to binary expression}} + (void)(i64 * u32); // expected-error{{invalid operands to binary expression}} + (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)(u64 * b); // expected-error{{invalid operands to binary expression}} + (void)(u64 * i8); // expected-error{{invalid operands to binary expression}} + (void)(u64 * i16); // expected-error{{invalid operands to binary expression}} + (void)(u64 * i32); // expected-error{{invalid operands to binary expression}} + (void)(u64 * u8); // expected-error{{invalid operands to binary expression}} + (void)(u64 * u16); // expected-error{{invalid operands to binary expression}} + (void)(u64 * u32); // expected-error{{invalid operands to binary expression}} + (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)(f16 * b); // expected-error{{invalid operands to binary expression}} + (void)(f16 * i8); // expected-error{{invalid operands to binary expression}} + (void)(f16 * i16); // expected-error{{invalid operands to binary expression}} + (void)(f16 * i32); // expected-error{{invalid operands to binary expression}} + (void)(f16 * i64); // expected-error{{invalid operands to binary expression}} + (void)(f16 * u8); // expected-error{{invalid operands to binary expression}} + (void)(f16 * u32); // expected-error{{invalid operands to binary expression}} + (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)(f32 * b); // expected-error{{invalid operands to binary expression}} + (void)(f32 * i8); // expected-error{{invalid operands to binary expression}} + (void)(f32 * i16); // expected-error{{invalid operands to binary expression}} + (void)(f32 * i32); // expected-error{{invalid operands to binary expression}} + (void)(f32 * i64); // expected-error{{invalid operands to binary expression}} + (void)(f32 * u8); // expected-error{{invalid operands to binary expression}} + (void)(f32 * u16); // expected-error{{invalid operands to binary expression}} + (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)(f64 * b); // expected-error{{invalid operands to binary expression}} + (void)(f64 * i8); // expected-error{{invalid operands to binary expression}} + (void)(f64 * i16); // expected-error{{invalid operands to binary expression}} + (void)(f64 * i32); // expected-error{{invalid operands to binary expression}} + (void)(f64 * i64); // expected-error{{invalid operands to binary expression}} + (void)(f64 * u8); // expected-error{{invalid operands to binary expression}} + (void)(f64 * u16); // expected-error{{invalid operands to binary expression}} + (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 div(svint8_t i8, svint16_t i16, svint32_t i32, svint64_t i64, + svuint8_t u8, svuint16_t u16, svuint32_t u32, svuint64_t u64, + svfloat16_t f16, svfloat32_t f32, svfloat64_t f64, + svbool_t b) { + (void)(b / b); // expected-error{{invalid operands to binary expression}} + + (void)(i8 / b); // expected-error{{invalid operands to binary expression}} + (void)(i8 / i16); // expected-error{{invalid operands to binary expression}} + (void)(i8 / i32); // expected-error{{invalid operands to binary expression}} + (void)(i8 / i64); // expected-error{{invalid operands to binary expression}} + (void)(i8 / u16); // expected-error{{invalid operands to binary expression}} + (void)(i8 / u32); // expected-error{{invalid operands to binary expression}} + (void)(i8 / u64); // expected-error{{invalid operands to binary expression}} + (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)(u8 / b); // expected-error{{invalid operands to binary expression}} + (void)(u8 / i16); // expected-error{{invalid operands to binary expression}} + (void)(u8 / i32); // expected-error{{invalid operands to binary expression}} + (void)(u8 / i64); // expected-error{{invalid operands to binary expression}} + (void)(u8 / u16); // expected-error{{invalid operands to binary expression}} + (void)(u8 / u32); // expected-error{{invalid operands to binary expression}} + (void)(u8 / u64); // expected-error{{invalid operands to binary expression}} + (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)(i16 / b); // expected-error{{invalid operands to binary expression}} + (void)(i16 / i8); // expected-error{{invalid operands to binary expression}} + (void)(i16 / i32); // expected-error{{invalid operands to binary expression}} + (void)(i16 / i64); // expected-error{{invalid operands to binary expression}} + (void)(i16 / u8); // expected-error{{invalid operands to binary expression}} + (void)(i16 / u32); // expected-error{{invalid operands to binary expression}} + (void)(i16 / u64); // expected-error{{invalid operands to binary expression}} + (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)(u16 / b); // expected-error{{invalid operands to binary expression}} + (void)(u16 / i8); // expected-error{{invalid operands to binary expression}} + (void)(u16 / i32); // expected-error{{invalid operands to binary expression}} + (void)(u16 / i64); // expected-error{{invalid operands to binary expression}} + (void)(u16 / u8); // expected-error{{invalid operands to binary expression}} + (void)(u16 / u32); // expected-error{{invalid operands to binary expression}} + (void)(u16 / u64); // expected-error{{invalid operands to binary expression}} + (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)(i32 / b); // expected-error{{invalid operands to binary expression}} + (void)(i32 / i8); // expected-error{{invalid operands to binary expression}} + (void)(i32 / i16); // expected-error{{invalid operands to binary expression}} + (void)(i32 / i64); // expected-error{{invalid operands to binary expression}} + (void)(i32 / u8); // expected-error{{invalid operands to binary expression}} + (void)(i32 / u16); // expected-error{{invalid operands to binary expression}} + (void)(i32 / u64); // expected-error{{invalid operands to binary expression}} + (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)(u32 / b); // expected-error{{invalid operands to binary expression}} + (void)(u32 / i8); // expected-error{{invalid operands to binary expression}} + (void)(u32 / i16); // expected-error{{invalid operands to binary expression}} + (void)(u32 / i64); // expected-error{{invalid operands to binary expression}} + (void)(u32 / u8); // expected-error{{invalid operands to binary expression}} + (void)(u32 / u16); // expected-error{{invalid operands to binary expression}} + (void)(u32 / u64); // expected-error{{invalid operands to binary expression}} + (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)(i64 / b); // expected-error{{invalid operands to binary expression}} + (void)(i64 / i8); // expected-error{{invalid operands to binary expression}} + (void)(i64 / i16); // expected-error{{invalid operands to binary expression}} + (void)(i64 / i32); // expected-error{{invalid operands to binary expression}} + (void)(i64 / u8); // expected-error{{invalid operands to binary expression}} + (void)(i64 / u16); // expected-error{{invalid operands to binary expression}} + (void)(i64 / u32); // expected-error{{invalid operands to binary expression}} + (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)(u64 / b); // expected-error{{invalid operands to binary expression}} + (void)(u64 / i8); // expected-error{{invalid operands to binary expression}} + (void)(u64 / i16); // expected-error{{invalid operands to binary expression}} + (void)(u64 / i32); // expected-error{{invalid operands to binary expression}} + (void)(u64 / u8); // expected-error{{invalid operands to binary expression}} + (void)(u64 / u16); // expected-error{{invalid operands to binary expression}} + (void)(u64 / u32); // expected-error{{invalid operands to binary expression}} + (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)(f16 / b); // expected-error{{invalid operands to binary expression}} + (void)(f16 / i8); // expected-error{{invalid operands to binary expression}} + (void)(f16 / i16); // expected-error{{invalid operands to binary expression}} + (void)(f16 / i32); // expected-error{{invalid operands to binary expression}} + (void)(f16 / i64); // expected-error{{invalid operands to binary expression}} + (void)(f16 / u8); // expected-error{{invalid operands to binary expression}} + (void)(f16 / u32); // expected-error{{invalid operands to binary expression}} + (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)(f32 / b); // expected-error{{invalid operands to binary expression}} + (void)(f32 / i8); // expected-error{{invalid operands to binary expression}} + (void)(f32 / i16); // expected-error{{invalid operands to binary expression}} + (void)(f32 / i32); // expected-error{{invalid operands to binary expression}} + (void)(f32 / i64); // expected-error{{invalid operands to binary expression}} + (void)(f32 / u8); // expected-error{{invalid operands to binary expression}} + (void)(f32 / u16); // expected-error{{invalid operands to binary expression}} + (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)(f64 / b); // expected-error{{invalid operands to binary expression}} + (void)(f64 / i8); // expected-error{{invalid operands to binary expression}} + (void)(f64 / i16); // expected-error{{invalid operands to binary expression}} + (void)(f64 / i32); // expected-error{{invalid operands to binary expression}} + (void)(f64 / i64); // expected-error{{invalid operands to binary expression}} + (void)(f64 / u8); // expected-error{{invalid operands to binary expression}} + (void)(f64 / u16); // expected-error{{invalid operands to binary expression}} + (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 mod(svint8_t i8, svint16_t i16, svint32_t i32, svint64_t i64, + svuint8_t u8, svuint16_t u16, svuint32_t u32, svuint64_t u64, + svfloat16_t f16, svfloat32_t f32, svfloat64_t f64, + svbool_t b) { + (void)(b % b); // expected-error{{invalid operands to binary expression}} + + (void)(i8 % b); // expected-error{{invalid operands to binary expression}} + (void)(i8 % i16); // expected-error{{invalid operands to binary expression}} + (void)(i8 % i32); // expected-error{{invalid operands to binary expression}} + (void)(i8 % i64); // expected-error{{invalid operands to binary expression}} + (void)(i8 % u16); // expected-error{{invalid operands to binary expression}} + (void)(i8 % u32); // expected-error{{invalid operands to binary expression}} + (void)(i8 % u64); // expected-error{{invalid operands to binary expression}} + (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)(u8 % b); // expected-error{{invalid operands to binary expression}} + (void)(u8 % i16); // expected-error{{invalid operands to binary expression}} + (void)(u8 % i32); // expected-error{{invalid operands to binary expression}} + (void)(u8 % i64); // expected-error{{invalid operands to binary expression}} + (void)(u8 % u16); // expected-error{{invalid operands to binary expression}} + (void)(u8 % u32); // expected-error{{invalid operands to binary expression}} + (void)(u8 % u64); // expected-error{{invalid operands to binary expression}} + (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)(i16 % b); // expected-error{{invalid operands to binary expression}} + (void)(i16 % i8); // expected-error{{invalid operands to binary expression}} + (void)(i16 % i32); // expected-error{{invalid operands to binary expression}} + (void)(i16 % i64); // expected-error{{invalid operands to binary expression}} + (void)(i16 % u8); // expected-error{{invalid operands to binary expression}} + (void)(i16 % u32); // expected-error{{invalid operands to binary expression}} + (void)(i16 % u64); // expected-error{{invalid operands to binary expression}} + (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)(u16 % b); // expected-error{{invalid operands to binary expression}} + (void)(u16 % i8); // expected-error{{invalid operands to binary expression}} + (void)(u16 % i32); // expected-error{{invalid operands to binary expression}} + (void)(u16 % i64); // expected-error{{invalid operands to binary expression}} + (void)(u16 % u8); // expected-error{{invalid operands to binary expression}} + (void)(u16 % u32); // expected-error{{invalid operands to binary expression}} + (void)(u16 % u64); // expected-error{{invalid operands to binary expression}} + (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)(i32 % b); // expected-error{{invalid operands to binary expression}} + (void)(i32 % i8); // expected-error{{invalid operands to binary expression}} + (void)(i32 % i16); // expected-error{{invalid operands to binary expression}} + (void)(i32 % i64); // expected-error{{invalid operands to binary expression}} + (void)(i32 % u8); // expected-error{{invalid operands to binary expression}} + (void)(i32 % u16); // expected-error{{invalid operands to binary expression}} + (void)(i32 % u64); // expected-error{{invalid operands to binary expression}} + (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)(u32 % b); // expected-error{{invalid operands to binary expression}} + (void)(u32 % i8); // expected-error{{invalid operands to binary expression}} + (void)(u32 % i16); // expected-error{{invalid operands to binary expression}} + (void)(u32 % i64); // expected-error{{invalid operands to binary expression}} + (void)(u32 % u8); // expected-error{{invalid operands to binary expression}} + (void)(u32 % u16); // expected-error{{invalid operands to binary expression}} + (void)(u32 % u64); // expected-error{{invalid operands to binary expression}} + (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)(i64 % b); // expected-error{{invalid operands to binary expression}} + (void)(i64 % i8); // expected-error{{invalid operands to binary expression}} + (void)(i64 % i16); // expected-error{{invalid operands to binary expression}} + (void)(i64 % i32); // expected-error{{invalid operands to binary expression}} + (void)(i64 % u8); // expected-error{{invalid operands to binary expression}} + (void)(i64 % u16); // expected-error{{invalid operands to binary expression}} + (void)(i64 % u32); // expected-error{{invalid operands to binary expression}} + (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)(u64 % b); // expected-error{{invalid operands to binary expression}} + (void)(u64 % i8); // expected-error{{invalid operands to binary expression}} + (void)(u64 % i16); // expected-error{{invalid operands to binary expression}} + (void)(u64 % i32); // expected-error{{invalid operands to binary expression}} + (void)(u64 % u8); // expected-error{{invalid operands to binary expression}} + (void)(u64 % u16); // expected-error{{invalid operands to binary expression}} + (void)(u64 % u32); // expected-error{{invalid operands to binary expression}} + (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)(f16 % b); // expected-error{{invalid operands to binary expression}} + (void)(f16 % i8); // expected-error{{invalid operands to binary expression}} + (void)(f16 % i16); // expected-error{{invalid operands to binary expression}} + (void)(f16 % i32); // expected-error{{invalid operands to binary expression}} + (void)(f16 % i64); // expected-error{{invalid operands to binary expression}} + (void)(f16 % u8); // expected-error{{invalid operands to binary expression}} + (void)(f16 % u32); // expected-error{{invalid operands to binary expression}} + (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)(f32 % b); // expected-error{{invalid operands to binary expression}} + (void)(f32 % i8); // expected-error{{invalid operands to binary expression}} + (void)(f32 % i16); // expected-error{{invalid operands to binary expression}} + (void)(f32 % i32); // expected-error{{invalid operands to binary expression}} + (void)(f32 % i64); // expected-error{{invalid operands to binary expression}} + (void)(f32 % u8); // expected-error{{invalid operands to binary expression}} + (void)(f32 % u16); // expected-error{{invalid operands to binary expression}} + (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)(f64 % b); // expected-error{{invalid operands to binary expression}} + (void)(f64 % i8); // expected-error{{invalid operands to binary expression}} + (void)(f64 % i16); // expected-error{{invalid operands to binary expression}} + (void)(f64 % i32); // expected-error{{invalid operands to binary expression}} + (void)(f64 % i64); // expected-error{{invalid operands to binary expression}} + (void)(f64 % u8); // expected-error{{invalid operands to binary expression}} + (void)(f64 % u16); // expected-error{{invalid operands to binary expression}} + (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}} +} diff --git a/clang/test/Sema/sizeless-1.c b/clang/test/Sema/sizeless-1.c index 8018a07..e7e374d 100644 --- a/clang/test/Sema/sizeless-1.c +++ b/clang/test/Sema/sizeless-1.c @@ -199,11 +199,6 @@ void func(int sel) { __real init_int8; // expected-error {{invalid type 'svint8_t'}} __imag init_int8; // expected-error {{invalid type 'svint8_t'}} - local_int8 + init_int8; // expected-error {{invalid operands to binary expression}} - local_int8 - init_int8; // expected-error {{invalid operands to binary expression}} - local_int8 *init_int8; // expected-error {{invalid operands to binary expression}} - local_int8 / init_int8; // expected-error {{invalid operands to binary expression}} - local_int8 % init_int8; // expected-error {{invalid operands to binary expression}} local_int8 &init_int8; // expected-error {{invalid operands to binary expression}} local_int8 | init_int8; // expected-error {{invalid operands to binary expression}} local_int8 ^ init_int8; // expected-error {{invalid operands to binary expression}} @@ -218,11 +213,6 @@ void func(int sel) { local_int8 &&init_int8; // expected-error {{invalid operands to binary expression}} local_int8 || init_int8; // expected-error {{invalid operands to binary expression}} - local_int8 += init_int8; // expected-error {{invalid operands to binary expression}} - local_int8 -= init_int8; // expected-error {{invalid operands to binary expression}} - local_int8 *= init_int8; // expected-error {{invalid operands to binary expression}} - local_int8 /= init_int8; // expected-error {{invalid operands to binary expression}} - local_int8 %= init_int8; // expected-error {{invalid operands to binary expression}} local_int8 &= init_int8; // expected-error {{invalid operands to binary expression}} local_int8 |= init_int8; // expected-error {{invalid operands to binary expression}} local_int8 ^= init_int8; // expected-error {{invalid operands to binary expression}} diff --git a/clang/test/SemaCXX/sizeless-1.cpp b/clang/test/SemaCXX/sizeless-1.cpp index 026c610..f4d020b 100644 --- a/clang/test/SemaCXX/sizeless-1.cpp +++ b/clang/test/SemaCXX/sizeless-1.cpp @@ -211,11 +211,6 @@ void func(int sel) { __real init_int8; // expected-error {{invalid type 'svint8_t'}} __imag init_int8; // expected-error {{invalid type 'svint8_t'}} - local_int8 + init_int8; // expected-error {{invalid operands to binary expression}} - local_int8 - init_int8; // expected-error {{invalid operands to binary expression}} - local_int8 *init_int8; // expected-error {{invalid operands to binary expression}} - local_int8 / init_int8; // expected-error {{invalid operands to binary expression}} - local_int8 % init_int8; // expected-error {{invalid operands to binary expression}} local_int8 &init_int8; // expected-error {{invalid operands to binary expression}} local_int8 | init_int8; // expected-error {{invalid operands to binary expression}} local_int8 ^ init_int8; // expected-error {{invalid operands to binary expression}} @@ -230,11 +225,6 @@ void func(int sel) { 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 += init_int8; // expected-error {{invalid operands to binary expression}} - local_int8 -= init_int8; // expected-error {{invalid operands to binary expression}} - local_int8 *= init_int8; // expected-error {{invalid operands to binary expression}} - local_int8 /= init_int8; // expected-error {{invalid operands to binary expression}} - local_int8 %= init_int8; // expected-error {{invalid operands to binary expression}} local_int8 &= init_int8; // expected-error {{invalid operands to binary expression}} local_int8 |= init_int8; // expected-error {{invalid operands to binary expression}} local_int8 ^= init_int8; // expected-error {{invalid operands to binary expression}} -- 2.7.4