brintos

brintos / llvm-project-archived public Read only

0
0
Text · 59.5 KiB · ed4d7c5 Raw
1793 lines · c
1// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py2// RUN: %clang_cc1 -triple aarch64-none-linux-gnu -target-feature +sve \3// RUN: -disable-O0-optnone \4// RUN:  -emit-llvm -o - %s | opt -S -passes=sroa | FileCheck %s5 6// REQUIRES: aarch64-registered-target7 8#include <arm_sve.h>9 10// ADDITION11 12// CHECK-LABEL: @add_i8(13// CHECK-NEXT:  entry:14// CHECK-NEXT:    [[ADD:%.*]] = add <vscale x 16 x i8> [[A:%.*]], [[B:%.*]]15// CHECK-NEXT:    ret <vscale x 16 x i8> [[ADD]]16//17svint8_t add_i8(svint8_t a, svint8_t b) {18  return a + b;19}20 21// CHECK-LABEL: @add_i16(22// CHECK-NEXT:  entry:23// CHECK-NEXT:    [[ADD:%.*]] = add <vscale x 8 x i16> [[A:%.*]], [[B:%.*]]24// CHECK-NEXT:    ret <vscale x 8 x i16> [[ADD]]25//26svint16_t add_i16(svint16_t a, svint16_t b) {27  return a + b;28}29 30// CHECK-LABEL: @add_i32(31// CHECK-NEXT:  entry:32// CHECK-NEXT:    [[ADD:%.*]] = add <vscale x 4 x i32> [[A:%.*]], [[B:%.*]]33// CHECK-NEXT:    ret <vscale x 4 x i32> [[ADD]]34//35svint32_t add_i32(svint32_t a, svint32_t b) {36  return a + b;37}38 39// CHECK-LABEL: @add_i64(40// CHECK-NEXT:  entry:41// CHECK-NEXT:    [[ADD:%.*]] = add <vscale x 2 x i64> [[A:%.*]], [[B:%.*]]42// CHECK-NEXT:    ret <vscale x 2 x i64> [[ADD]]43//44svint64_t add_i64(svint64_t a, svint64_t b) {45  return a + b;46}47 48// CHECK-LABEL: @add_u8(49// CHECK-NEXT:  entry:50// CHECK-NEXT:    [[ADD:%.*]] = add <vscale x 16 x i8> [[A:%.*]], [[B:%.*]]51// CHECK-NEXT:    ret <vscale x 16 x i8> [[ADD]]52//53svuint8_t add_u8(svuint8_t a, svuint8_t b) {54  return a + b;55}56 57// CHECK-LABEL: @add_u16(58// CHECK-NEXT:  entry:59// CHECK-NEXT:    [[ADD:%.*]] = add <vscale x 8 x i16> [[A:%.*]], [[B:%.*]]60// CHECK-NEXT:    ret <vscale x 8 x i16> [[ADD]]61//62svuint16_t add_u16(svuint16_t a, svuint16_t b) {63  return a + b;64}65 66// CHECK-LABEL: @add_u32(67// CHECK-NEXT:  entry:68// CHECK-NEXT:    [[ADD:%.*]] = add <vscale x 4 x i32> [[A:%.*]], [[B:%.*]]69// CHECK-NEXT:    ret <vscale x 4 x i32> [[ADD]]70//71svuint32_t add_u32(svuint32_t a, svuint32_t b) {72  return a + b;73}74 75// CHECK-LABEL: @add_u64(76// CHECK-NEXT:  entry:77// CHECK-NEXT:    [[ADD:%.*]] = add <vscale x 2 x i64> [[A:%.*]], [[B:%.*]]78// CHECK-NEXT:    ret <vscale x 2 x i64> [[ADD]]79//80svuint64_t add_u64(svuint64_t a, svuint64_t b) {81  return a + b;82}83 84// CHECK-LABEL: @add_f16(85// CHECK-NEXT:  entry:86// CHECK-NEXT:    [[ADD:%.*]] = fadd <vscale x 8 x half> [[A:%.*]], [[B:%.*]]87// CHECK-NEXT:    ret <vscale x 8 x half> [[ADD]]88//89svfloat16_t add_f16(svfloat16_t a, svfloat16_t b) {90  return a + b;91}92 93// CHECK-LABEL: @add_f32(94// CHECK-NEXT:  entry:95// CHECK-NEXT:    [[ADD:%.*]] = fadd <vscale x 4 x float> [[A:%.*]], [[B:%.*]]96// CHECK-NEXT:    ret <vscale x 4 x float> [[ADD]]97//98svfloat32_t add_f32(svfloat32_t a, svfloat32_t b) {99  return a + b;100}101 102// CHECK-LABEL: @add_f64(103// CHECK-NEXT:  entry:104// CHECK-NEXT:    [[ADD:%.*]] = fadd <vscale x 2 x double> [[A:%.*]], [[B:%.*]]105// CHECK-NEXT:    ret <vscale x 2 x double> [[ADD]]106//107svfloat64_t add_f64(svfloat64_t a, svfloat64_t b) {108  return a + b;109}110 111// CHECK-LABEL: @add_inplace_i8(112// CHECK-NEXT:  entry:113// CHECK-NEXT:    [[ADD:%.*]] = add <vscale x 16 x i8> [[A:%.*]], [[B:%.*]]114// CHECK-NEXT:    ret <vscale x 16 x i8> [[ADD]]115//116svint8_t add_inplace_i8(svint8_t a, svint8_t b) {117  return a += b;118}119 120// CHECK-LABEL: @add_inplace_i16(121// CHECK-NEXT:  entry:122// CHECK-NEXT:    [[ADD:%.*]] = add <vscale x 8 x i16> [[A:%.*]], [[B:%.*]]123// CHECK-NEXT:    ret <vscale x 8 x i16> [[ADD]]124//125svint16_t add_inplace_i16(svint16_t a, svint16_t b) {126  return a += b;127}128 129// CHECK-LABEL: @add_inplace_i32(130// CHECK-NEXT:  entry:131// CHECK-NEXT:    [[ADD:%.*]] = add <vscale x 4 x i32> [[A:%.*]], [[B:%.*]]132// CHECK-NEXT:    ret <vscale x 4 x i32> [[ADD]]133//134svint32_t add_inplace_i32(svint32_t a, svint32_t b) {135  return a += b;136}137 138// CHECK-LABEL: @add_inplace_i64(139// CHECK-NEXT:  entry:140// CHECK-NEXT:    [[ADD:%.*]] = add <vscale x 2 x i64> [[A:%.*]], [[B:%.*]]141// CHECK-NEXT:    ret <vscale x 2 x i64> [[ADD]]142//143svint64_t add_inplace_i64(svint64_t a, svint64_t b) {144  return a += b;145}146 147// CHECK-LABEL: @add_inplace_u8(148// CHECK-NEXT:  entry:149// CHECK-NEXT:    [[ADD:%.*]] = add <vscale x 16 x i8> [[A:%.*]], [[B:%.*]]150// CHECK-NEXT:    ret <vscale x 16 x i8> [[ADD]]151//152svuint8_t add_inplace_u8(svuint8_t a, svuint8_t b) {153  return a += b;154}155 156// CHECK-LABEL: @add_inplace_u16(157// CHECK-NEXT:  entry:158// CHECK-NEXT:    [[ADD:%.*]] = add <vscale x 8 x i16> [[A:%.*]], [[B:%.*]]159// CHECK-NEXT:    ret <vscale x 8 x i16> [[ADD]]160//161svuint16_t add_inplace_u16(svuint16_t a, svuint16_t b) {162  return a += b;163}164 165// CHECK-LABEL: @add_inplace_u32(166// CHECK-NEXT:  entry:167// CHECK-NEXT:    [[ADD:%.*]] = add <vscale x 4 x i32> [[A:%.*]], [[B:%.*]]168// CHECK-NEXT:    ret <vscale x 4 x i32> [[ADD]]169//170svuint32_t add_inplace_u32(svuint32_t a, svuint32_t b) {171  return a += b;172}173 174// CHECK-LABEL: @add_inplace_u64(175// CHECK-NEXT:  entry:176// CHECK-NEXT:    [[ADD:%.*]] = add <vscale x 2 x i64> [[A:%.*]], [[B:%.*]]177// CHECK-NEXT:    ret <vscale x 2 x i64> [[ADD]]178//179svuint64_t add_inplace_u64(svuint64_t a, svuint64_t b) {180  return a += b;181}182 183// CHECK-LABEL: @add_inplace_f16(184// CHECK-NEXT:  entry:185// CHECK-NEXT:    [[ADD:%.*]] = fadd <vscale x 8 x half> [[A:%.*]], [[B:%.*]]186// CHECK-NEXT:    ret <vscale x 8 x half> [[ADD]]187//188svfloat16_t add_inplace_f16(svfloat16_t a, svfloat16_t b) {189  return a += b;190}191 192// CHECK-LABEL: @add_inplace_f32(193// CHECK-NEXT:  entry:194// CHECK-NEXT:    [[ADD:%.*]] = fadd <vscale x 4 x float> [[A:%.*]], [[B:%.*]]195// CHECK-NEXT:    ret <vscale x 4 x float> [[ADD]]196//197svfloat32_t add_inplace_f32(svfloat32_t a, svfloat32_t b) {198  return a += b;199}200 201// CHECK-LABEL: @add_inplace_f64(202// CHECK-NEXT:  entry:203// CHECK-NEXT:    [[ADD:%.*]] = fadd <vscale x 2 x double> [[A:%.*]], [[B:%.*]]204// CHECK-NEXT:    ret <vscale x 2 x double> [[ADD]]205//206svfloat64_t add_inplace_f64(svfloat64_t a, svfloat64_t b) {207  return a += b;208}209 210// CHECK-LABEL: @add_scalar_i8(211// CHECK-NEXT:  entry:212// CHECK-NEXT:    [[SPLAT_SPLATINSERT:%.*]] = insertelement <vscale x 16 x i8> poison, i8 [[B:%.*]], i64 0213// CHECK-NEXT:    [[SPLAT_SPLAT:%.*]] = shufflevector <vscale x 16 x i8> [[SPLAT_SPLATINSERT]], <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer214// CHECK-NEXT:    [[ADD:%.*]] = add <vscale x 16 x i8> [[A:%.*]], [[SPLAT_SPLAT]]215// CHECK-NEXT:    ret <vscale x 16 x i8> [[ADD]]216//217svint8_t add_scalar_i8(svint8_t a, int8_t b) {218  return a + b;219}220 221// CHECK-LABEL: @add_scalar_i16(222// CHECK-NEXT:  entry:223// CHECK-NEXT:    [[SPLAT_SPLATINSERT:%.*]] = insertelement <vscale x 8 x i16> poison, i16 [[B:%.*]], i64 0224// CHECK-NEXT:    [[SPLAT_SPLAT:%.*]] = shufflevector <vscale x 8 x i16> [[SPLAT_SPLATINSERT]], <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer225// CHECK-NEXT:    [[ADD:%.*]] = add <vscale x 8 x i16> [[A:%.*]], [[SPLAT_SPLAT]]226// CHECK-NEXT:    ret <vscale x 8 x i16> [[ADD]]227//228svint16_t add_scalar_i16(svint16_t a, int16_t b) {229  return a + b;230}231 232// CHECK-LABEL: @add_scalar_i32(233// CHECK-NEXT:  entry:234// CHECK-NEXT:    [[SPLAT_SPLATINSERT:%.*]] = insertelement <vscale x 4 x i32> poison, i32 [[B:%.*]], i64 0235// CHECK-NEXT:    [[SPLAT_SPLAT:%.*]] = shufflevector <vscale x 4 x i32> [[SPLAT_SPLATINSERT]], <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer236// CHECK-NEXT:    [[ADD:%.*]] = add <vscale x 4 x i32> [[A:%.*]], [[SPLAT_SPLAT]]237// CHECK-NEXT:    ret <vscale x 4 x i32> [[ADD]]238//239svint32_t add_scalar_i32(svint32_t a, int32_t b) {240  return a + b;241}242 243// CHECK-LABEL: @add_scalar_i64(244// CHECK-NEXT:  entry:245// CHECK-NEXT:    [[SPLAT_SPLATINSERT:%.*]] = insertelement <vscale x 2 x i64> poison, i64 [[B:%.*]], i64 0246// CHECK-NEXT:    [[SPLAT_SPLAT:%.*]] = shufflevector <vscale x 2 x i64> [[SPLAT_SPLATINSERT]], <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer247// CHECK-NEXT:    [[ADD:%.*]] = add <vscale x 2 x i64> [[A:%.*]], [[SPLAT_SPLAT]]248// CHECK-NEXT:    ret <vscale x 2 x i64> [[ADD]]249//250svint64_t add_scalar_i64(svint64_t a, int64_t b) {251  return a + b;252}253 254// CHECK-LABEL: @add_scalar_u8(255// CHECK-NEXT:  entry:256// CHECK-NEXT:    [[SPLAT_SPLATINSERT:%.*]] = insertelement <vscale x 16 x i8> poison, i8 [[B:%.*]], i64 0257// CHECK-NEXT:    [[SPLAT_SPLAT:%.*]] = shufflevector <vscale x 16 x i8> [[SPLAT_SPLATINSERT]], <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer258// CHECK-NEXT:    [[ADD:%.*]] = add <vscale x 16 x i8> [[A:%.*]], [[SPLAT_SPLAT]]259// CHECK-NEXT:    ret <vscale x 16 x i8> [[ADD]]260//261svuint8_t add_scalar_u8(svuint8_t a, uint8_t b) {262  return a + b;263}264 265// CHECK-LABEL: @add_scalar_u16(266// CHECK-NEXT:  entry:267// CHECK-NEXT:    [[SPLAT_SPLATINSERT:%.*]] = insertelement <vscale x 8 x i16> poison, i16 [[B:%.*]], i64 0268// CHECK-NEXT:    [[SPLAT_SPLAT:%.*]] = shufflevector <vscale x 8 x i16> [[SPLAT_SPLATINSERT]], <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer269// CHECK-NEXT:    [[ADD:%.*]] = add <vscale x 8 x i16> [[A:%.*]], [[SPLAT_SPLAT]]270// CHECK-NEXT:    ret <vscale x 8 x i16> [[ADD]]271//272svuint16_t add_scalar_u16(svuint16_t a, uint16_t b) {273  return a + b;274}275 276// CHECK-LABEL: @add_scalar_u32(277// CHECK-NEXT:  entry:278// CHECK-NEXT:    [[SPLAT_SPLATINSERT:%.*]] = insertelement <vscale x 4 x i32> poison, i32 [[B:%.*]], i64 0279// CHECK-NEXT:    [[SPLAT_SPLAT:%.*]] = shufflevector <vscale x 4 x i32> [[SPLAT_SPLATINSERT]], <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer280// CHECK-NEXT:    [[ADD:%.*]] = add <vscale x 4 x i32> [[A:%.*]], [[SPLAT_SPLAT]]281// CHECK-NEXT:    ret <vscale x 4 x i32> [[ADD]]282//283svuint32_t add_scalar_u32(svuint32_t a, uint32_t b) {284  return a + b;285}286 287// CHECK-LABEL: @add_scalar_u64(288// CHECK-NEXT:  entry:289// CHECK-NEXT:    [[SPLAT_SPLATINSERT:%.*]] = insertelement <vscale x 2 x i64> poison, i64 [[B:%.*]], i64 0290// CHECK-NEXT:    [[SPLAT_SPLAT:%.*]] = shufflevector <vscale x 2 x i64> [[SPLAT_SPLATINSERT]], <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer291// CHECK-NEXT:    [[ADD:%.*]] = add <vscale x 2 x i64> [[A:%.*]], [[SPLAT_SPLAT]]292// CHECK-NEXT:    ret <vscale x 2 x i64> [[ADD]]293//294svuint64_t add_scalar_u64(svuint64_t a, uint64_t b) {295  return a + b;296}297 298// CHECK-LABEL: @add_scalar_f16(299// CHECK-NEXT:  entry:300// CHECK-NEXT:    [[SPLAT_SPLATINSERT:%.*]] = insertelement <vscale x 8 x half> poison, half [[B:%.*]], i64 0301// CHECK-NEXT:    [[SPLAT_SPLAT:%.*]] = shufflevector <vscale x 8 x half> [[SPLAT_SPLATINSERT]], <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer302// CHECK-NEXT:    [[ADD:%.*]] = fadd <vscale x 8 x half> [[A:%.*]], [[SPLAT_SPLAT]]303// CHECK-NEXT:    ret <vscale x 8 x half> [[ADD]]304//305svfloat16_t add_scalar_f16(svfloat16_t a, __fp16 b) {306  return a + b;307}308 309// CHECK-LABEL: @add_scalar_f32(310// CHECK-NEXT:  entry:311// CHECK-NEXT:    [[SPLAT_SPLATINSERT:%.*]] = insertelement <vscale x 4 x float> poison, float [[B:%.*]], i64 0312// CHECK-NEXT:    [[SPLAT_SPLAT:%.*]] = shufflevector <vscale x 4 x float> [[SPLAT_SPLATINSERT]], <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer313// CHECK-NEXT:    [[ADD:%.*]] = fadd <vscale x 4 x float> [[A:%.*]], [[SPLAT_SPLAT]]314// CHECK-NEXT:    ret <vscale x 4 x float> [[ADD]]315//316svfloat32_t add_scalar_f32(svfloat32_t a, float b) {317  return a + b;318}319 320// CHECK-LABEL: @add_scalar_f64(321// CHECK-NEXT:  entry:322// CHECK-NEXT:    [[SPLAT_SPLATINSERT:%.*]] = insertelement <vscale x 2 x double> poison, double [[B:%.*]], i64 0323// CHECK-NEXT:    [[SPLAT_SPLAT:%.*]] = shufflevector <vscale x 2 x double> [[SPLAT_SPLATINSERT]], <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer324// CHECK-NEXT:    [[ADD:%.*]] = fadd <vscale x 2 x double> [[A:%.*]], [[SPLAT_SPLAT]]325// CHECK-NEXT:    ret <vscale x 2 x double> [[ADD]]326//327svfloat64_t add_scalar_f64(svfloat64_t a, double b) {328  return a + b;329}330 331// CHECK-LABEL: @add_i8_i_lit(332// CHECK-NEXT:  entry:333// CHECK-NEXT:    [[ADD:%.*]] = add <vscale x 16 x i8> [[A:%.*]], zeroinitializer334// CHECK-NEXT:    ret <vscale x 16 x i8> [[ADD]]335//336svint8_t add_i8_i_lit(svint8_t a) {337  return a + 0;338}339 340// CHECK-LABEL: @add_i8_il_lit(341// CHECK-NEXT:  entry:342// CHECK-NEXT:    [[ADD:%.*]] = add <vscale x 16 x i8> [[A:%.*]], zeroinitializer343// CHECK-NEXT:    ret <vscale x 16 x i8> [[ADD]]344//345svint8_t add_i8_il_lit(svint8_t a) {346  return a + 0l;347}348 349// CHECK-LABEL: @add_i8_ill_lit(350// CHECK-NEXT:  entry:351// CHECK-NEXT:    [[ADD:%.*]] = add <vscale x 16 x i8> [[A:%.*]], zeroinitializer352// CHECK-NEXT:    ret <vscale x 16 x i8> [[ADD]]353//354svint8_t add_i8_ill_lit(svint8_t a) {355  return a + 0ll;356}357 358// CHECK-LABEL: @add_i8_u_lit(359// CHECK-NEXT:  entry:360// CHECK-NEXT:    [[ADD:%.*]] = add <vscale x 16 x i8> [[A:%.*]], zeroinitializer361// CHECK-NEXT:    ret <vscale x 16 x i8> [[ADD]]362//363svint8_t add_i8_u_lit(svint8_t a) {364  return a + 0u;365}366 367// CHECK-LABEL: @add_i8_ul_lit(368// CHECK-NEXT:  entry:369// CHECK-NEXT:    [[ADD:%.*]] = add <vscale x 16 x i8> [[A:%.*]], zeroinitializer370// CHECK-NEXT:    ret <vscale x 16 x i8> [[ADD]]371//372svint8_t add_i8_ul_lit(svint8_t a) {373  return a + 0ul;374}375 376// CHECK-LABEL: @add_i8_ull_lit(377// CHECK-NEXT:  entry:378// CHECK-NEXT:    [[ADD:%.*]] = add <vscale x 16 x i8> [[A:%.*]], zeroinitializer379// CHECK-NEXT:    ret <vscale x 16 x i8> [[ADD]]380//381svint8_t add_i8_ull_lit(svint8_t a) {382  return a + 0ull;383}384 385// CHECK-LABEL: @add_f64_i_lit(386// CHECK-NEXT:  entry:387// CHECK-NEXT:    [[ADD:%.*]] = fadd <vscale x 2 x double> [[A:%.*]], zeroinitializer388// CHECK-NEXT:    ret <vscale x 2 x double> [[ADD]]389//390svfloat64_t add_f64_i_lit(svfloat64_t a) {391  return a + 0;392}393 394// CHECK-LABEL: @add_f64_il_lit(395// CHECK-NEXT:  entry:396// CHECK-NEXT:    [[ADD:%.*]] = fadd <vscale x 2 x double> [[A:%.*]], zeroinitializer397// CHECK-NEXT:    ret <vscale x 2 x double> [[ADD]]398//399svfloat64_t add_f64_il_lit(svfloat64_t a) {400  return a + 0l;401}402 403// CHECK-LABEL: @add_f64_ill_lit(404// CHECK-NEXT:  entry:405// CHECK-NEXT:    [[ADD:%.*]] = fadd <vscale x 2 x double> [[A:%.*]], zeroinitializer406// CHECK-NEXT:    ret <vscale x 2 x double> [[ADD]]407//408svfloat64_t add_f64_ill_lit(svfloat64_t a) {409  return a + 0ll;410}411 412// CHECK-LABEL: @add_f64_u_lit(413// CHECK-NEXT:  entry:414// CHECK-NEXT:    [[ADD:%.*]] = fadd <vscale x 2 x double> [[A:%.*]], zeroinitializer415// CHECK-NEXT:    ret <vscale x 2 x double> [[ADD]]416//417svfloat64_t add_f64_u_lit(svfloat64_t a) {418  return a + 0u;419}420 421// CHECK-LABEL: @add_f64_ul_lit(422// CHECK-NEXT:  entry:423// CHECK-NEXT:    [[ADD:%.*]] = fadd <vscale x 2 x double> [[A:%.*]], zeroinitializer424// CHECK-NEXT:    ret <vscale x 2 x double> [[ADD]]425//426svfloat64_t add_f64_ul_lit(svfloat64_t a) {427  return a + 0ul;428}429 430// CHECK-LABEL: @add_f64_ull_lit(431// CHECK-NEXT:  entry:432// CHECK-NEXT:    [[ADD:%.*]] = fadd <vscale x 2 x double> [[A:%.*]], zeroinitializer433// CHECK-NEXT:    ret <vscale x 2 x double> [[ADD]]434//435svfloat64_t add_f64_ull_lit(svfloat64_t a) {436  return a + 0ull;437}438 439// CHECK-LABEL: @add_f64_f_lit(440// CHECK-NEXT:  entry:441// CHECK-NEXT:    [[ADD:%.*]] = fadd <vscale x 2 x double> [[A:%.*]], zeroinitializer442// CHECK-NEXT:    ret <vscale x 2 x double> [[ADD]]443//444svfloat64_t add_f64_f_lit(svfloat64_t a) {445  return a + 0.f;446}447 448// CHECK-LABEL: @add_f64_d_lit(449// CHECK-NEXT:  entry:450// CHECK-NEXT:    [[ADD:%.*]] = fadd <vscale x 2 x double> [[A:%.*]], zeroinitializer451// CHECK-NEXT:    ret <vscale x 2 x double> [[ADD]]452//453svfloat64_t add_f64_d_lit(svfloat64_t a) {454  return a + 0.;455}456 457// SUBTRACTION458 459// CHECK-LABEL: @sub_i8(460// CHECK-NEXT:  entry:461// CHECK-NEXT:    [[SUB:%.*]] = sub <vscale x 16 x i8> [[A:%.*]], [[B:%.*]]462// CHECK-NEXT:    ret <vscale x 16 x i8> [[SUB]]463//464svint8_t sub_i8(svint8_t a, svint8_t b) {465  return a - b;466}467 468// CHECK-LABEL: @sub_i16(469// CHECK-NEXT:  entry:470// CHECK-NEXT:    [[SUB:%.*]] = sub <vscale x 8 x i16> [[A:%.*]], [[B:%.*]]471// CHECK-NEXT:    ret <vscale x 8 x i16> [[SUB]]472//473svint16_t sub_i16(svint16_t a, svint16_t b) {474  return a - b;475}476 477// CHECK-LABEL: @sub_i32(478// CHECK-NEXT:  entry:479// CHECK-NEXT:    [[SUB:%.*]] = sub <vscale x 4 x i32> [[A:%.*]], [[B:%.*]]480// CHECK-NEXT:    ret <vscale x 4 x i32> [[SUB]]481//482svint32_t sub_i32(svint32_t a, svint32_t b) {483  return a - b;484}485 486// CHECK-LABEL: @sub_i64(487// CHECK-NEXT:  entry:488// CHECK-NEXT:    [[SUB:%.*]] = sub <vscale x 2 x i64> [[A:%.*]], [[B:%.*]]489// CHECK-NEXT:    ret <vscale x 2 x i64> [[SUB]]490//491svint64_t sub_i64(svint64_t a, svint64_t b) {492  return a - b;493}494 495// CHECK-LABEL: @sub_u8(496// CHECK-NEXT:  entry:497// CHECK-NEXT:    [[SUB:%.*]] = sub <vscale x 16 x i8> [[A:%.*]], [[B:%.*]]498// CHECK-NEXT:    ret <vscale x 16 x i8> [[SUB]]499//500svuint8_t sub_u8(svuint8_t a, svuint8_t b) {501  return a - b;502}503 504// CHECK-LABEL: @sub_u16(505// CHECK-NEXT:  entry:506// CHECK-NEXT:    [[SUB:%.*]] = sub <vscale x 8 x i16> [[A:%.*]], [[B:%.*]]507// CHECK-NEXT:    ret <vscale x 8 x i16> [[SUB]]508//509svuint16_t sub_u16(svuint16_t a, svuint16_t b) {510  return a - b;511}512 513// CHECK-LABEL: @sub_u32(514// CHECK-NEXT:  entry:515// CHECK-NEXT:    [[SUB:%.*]] = sub <vscale x 4 x i32> [[A:%.*]], [[B:%.*]]516// CHECK-NEXT:    ret <vscale x 4 x i32> [[SUB]]517//518svuint32_t sub_u32(svuint32_t a, svuint32_t b) {519  return a - b;520}521 522// CHECK-LABEL: @sub_u64(523// CHECK-NEXT:  entry:524// CHECK-NEXT:    [[SUB:%.*]] = sub <vscale x 2 x i64> [[A:%.*]], [[B:%.*]]525// CHECK-NEXT:    ret <vscale x 2 x i64> [[SUB]]526//527svuint64_t sub_u64(svuint64_t a, svuint64_t b) {528  return a - b;529}530 531// CHECK-LABEL: @sub_f16(532// CHECK-NEXT:  entry:533// CHECK-NEXT:    [[SUB:%.*]] = fsub <vscale x 8 x half> [[A:%.*]], [[B:%.*]]534// CHECK-NEXT:    ret <vscale x 8 x half> [[SUB]]535//536svfloat16_t sub_f16(svfloat16_t a, svfloat16_t b) {537  return a - b;538}539 540// CHECK-LABEL: @sub_f32(541// CHECK-NEXT:  entry:542// CHECK-NEXT:    [[SUB:%.*]] = fsub <vscale x 4 x float> [[A:%.*]], [[B:%.*]]543// CHECK-NEXT:    ret <vscale x 4 x float> [[SUB]]544//545svfloat32_t sub_f32(svfloat32_t a, svfloat32_t b) {546  return a - b;547}548 549// CHECK-LABEL: @sub_f64(550// CHECK-NEXT:  entry:551// CHECK-NEXT:    [[SUB:%.*]] = fsub <vscale x 2 x double> [[A:%.*]], [[B:%.*]]552// CHECK-NEXT:    ret <vscale x 2 x double> [[SUB]]553//554svfloat64_t sub_f64(svfloat64_t a, svfloat64_t b) {555  return a - b;556}557 558// CHECK-LABEL: @sub_inplace_i8(559// CHECK-NEXT:  entry:560// CHECK-NEXT:    [[SUB:%.*]] = sub <vscale x 16 x i8> [[A:%.*]], [[B:%.*]]561// CHECK-NEXT:    ret <vscale x 16 x i8> [[SUB]]562//563svint8_t sub_inplace_i8(svint8_t a, svint8_t b) {564  return a - b;565}566 567// CHECK-LABEL: @sub_inplace_i16(568// CHECK-NEXT:  entry:569// CHECK-NEXT:    [[SUB:%.*]] = sub <vscale x 8 x i16> [[A:%.*]], [[B:%.*]]570// CHECK-NEXT:    ret <vscale x 8 x i16> [[SUB]]571//572svint16_t sub_inplace_i16(svint16_t a, svint16_t b) {573  return a - b;574}575 576// CHECK-LABEL: @sub_inplace_i32(577// CHECK-NEXT:  entry:578// CHECK-NEXT:    [[SUB:%.*]] = sub <vscale x 4 x i32> [[A:%.*]], [[B:%.*]]579// CHECK-NEXT:    ret <vscale x 4 x i32> [[SUB]]580//581svint32_t sub_inplace_i32(svint32_t a, svint32_t b) {582  return a - b;583}584 585// CHECK-LABEL: @sub_inplace_i64(586// CHECK-NEXT:  entry:587// CHECK-NEXT:    [[SUB:%.*]] = sub <vscale x 2 x i64> [[A:%.*]], [[B:%.*]]588// CHECK-NEXT:    ret <vscale x 2 x i64> [[SUB]]589//590svint64_t sub_inplace_i64(svint64_t a, svint64_t b) {591  return a - b;592}593 594// CHECK-LABEL: @sub_inplace_u8(595// CHECK-NEXT:  entry:596// CHECK-NEXT:    [[SUB:%.*]] = sub <vscale x 16 x i8> [[A:%.*]], [[B:%.*]]597// CHECK-NEXT:    ret <vscale x 16 x i8> [[SUB]]598//599svuint8_t sub_inplace_u8(svuint8_t a, svuint8_t b) {600  return a - b;601}602 603// CHECK-LABEL: @sub_inplace_u16(604// CHECK-NEXT:  entry:605// CHECK-NEXT:    [[SUB:%.*]] = sub <vscale x 8 x i16> [[A:%.*]], [[B:%.*]]606// CHECK-NEXT:    ret <vscale x 8 x i16> [[SUB]]607//608svuint16_t sub_inplace_u16(svuint16_t a, svuint16_t b) {609  return a - b;610}611 612// CHECK-LABEL: @sub_inplace_u32(613// CHECK-NEXT:  entry:614// CHECK-NEXT:    [[SUB:%.*]] = sub <vscale x 4 x i32> [[A:%.*]], [[B:%.*]]615// CHECK-NEXT:    ret <vscale x 4 x i32> [[SUB]]616//617svuint32_t sub_inplace_u32(svuint32_t a, svuint32_t b) {618  return a - b;619}620 621// CHECK-LABEL: @sub_inplace_u64(622// CHECK-NEXT:  entry:623// CHECK-NEXT:    [[SUB:%.*]] = sub <vscale x 2 x i64> [[A:%.*]], [[B:%.*]]624// CHECK-NEXT:    ret <vscale x 2 x i64> [[SUB]]625//626svuint64_t sub_inplace_u64(svuint64_t a, svuint64_t b) {627  return a - b;628}629 630// CHECK-LABEL: @sub_inplace_f16(631// CHECK-NEXT:  entry:632// CHECK-NEXT:    [[SUB:%.*]] = fsub <vscale x 8 x half> [[A:%.*]], [[B:%.*]]633// CHECK-NEXT:    ret <vscale x 8 x half> [[SUB]]634//635svfloat16_t sub_inplace_f16(svfloat16_t a, svfloat16_t b) {636  return a - b;637}638 639// CHECK-LABEL: @sub_inplace_f32(640// CHECK-NEXT:  entry:641// CHECK-NEXT:    [[SUB:%.*]] = fsub <vscale x 4 x float> [[A:%.*]], [[B:%.*]]642// CHECK-NEXT:    ret <vscale x 4 x float> [[SUB]]643//644svfloat32_t sub_inplace_f32(svfloat32_t a, svfloat32_t b) {645  return a - b;646}647 648// CHECK-LABEL: @sub_inplace_f64(649// CHECK-NEXT:  entry:650// CHECK-NEXT:    [[SUB:%.*]] = fsub <vscale x 2 x double> [[A:%.*]], [[B:%.*]]651// CHECK-NEXT:    ret <vscale x 2 x double> [[SUB]]652//653svfloat64_t sub_inplace_f64(svfloat64_t a, svfloat64_t b) {654  return a - b;655}656 657// CHECK-LABEL: @sub_scalar_i8(658// CHECK-NEXT:  entry:659// CHECK-NEXT:    [[SPLAT_SPLATINSERT:%.*]] = insertelement <vscale x 16 x i8> poison, i8 [[B:%.*]], i64 0660// CHECK-NEXT:    [[SPLAT_SPLAT:%.*]] = shufflevector <vscale x 16 x i8> [[SPLAT_SPLATINSERT]], <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer661// CHECK-NEXT:    [[SUB:%.*]] = sub <vscale x 16 x i8> [[A:%.*]], [[SPLAT_SPLAT]]662// CHECK-NEXT:    ret <vscale x 16 x i8> [[SUB]]663//664svint8_t sub_scalar_i8(svint8_t a, int8_t b) {665  return a - b;666}667 668// CHECK-LABEL: @sub_scalar_i16(669// CHECK-NEXT:  entry:670// CHECK-NEXT:    [[SPLAT_SPLATINSERT:%.*]] = insertelement <vscale x 8 x i16> poison, i16 [[B:%.*]], i64 0671// CHECK-NEXT:    [[SPLAT_SPLAT:%.*]] = shufflevector <vscale x 8 x i16> [[SPLAT_SPLATINSERT]], <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer672// CHECK-NEXT:    [[SUB:%.*]] = sub <vscale x 8 x i16> [[A:%.*]], [[SPLAT_SPLAT]]673// CHECK-NEXT:    ret <vscale x 8 x i16> [[SUB]]674//675svint16_t sub_scalar_i16(svint16_t a, int16_t b) {676  return a - b;677}678 679// CHECK-LABEL: @sub_scalar_i32(680// CHECK-NEXT:  entry:681// CHECK-NEXT:    [[SPLAT_SPLATINSERT:%.*]] = insertelement <vscale x 4 x i32> poison, i32 [[B:%.*]], i64 0682// CHECK-NEXT:    [[SPLAT_SPLAT:%.*]] = shufflevector <vscale x 4 x i32> [[SPLAT_SPLATINSERT]], <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer683// CHECK-NEXT:    [[SUB:%.*]] = sub <vscale x 4 x i32> [[A:%.*]], [[SPLAT_SPLAT]]684// CHECK-NEXT:    ret <vscale x 4 x i32> [[SUB]]685//686svint32_t sub_scalar_i32(svint32_t a, int32_t b) {687  return a - b;688}689 690// CHECK-LABEL: @sub_scalar_i64(691// CHECK-NEXT:  entry:692// CHECK-NEXT:    [[SPLAT_SPLATINSERT:%.*]] = insertelement <vscale x 2 x i64> poison, i64 [[B:%.*]], i64 0693// CHECK-NEXT:    [[SPLAT_SPLAT:%.*]] = shufflevector <vscale x 2 x i64> [[SPLAT_SPLATINSERT]], <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer694// CHECK-NEXT:    [[SUB:%.*]] = sub <vscale x 2 x i64> [[A:%.*]], [[SPLAT_SPLAT]]695// CHECK-NEXT:    ret <vscale x 2 x i64> [[SUB]]696//697svint64_t sub_scalar_i64(svint64_t a, int64_t b) {698  return a - b;699}700 701// CHECK-LABEL: @sub_scalar_u8(702// CHECK-NEXT:  entry:703// CHECK-NEXT:    [[SPLAT_SPLATINSERT:%.*]] = insertelement <vscale x 16 x i8> poison, i8 [[B:%.*]], i64 0704// CHECK-NEXT:    [[SPLAT_SPLAT:%.*]] = shufflevector <vscale x 16 x i8> [[SPLAT_SPLATINSERT]], <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer705// CHECK-NEXT:    [[SUB:%.*]] = sub <vscale x 16 x i8> [[A:%.*]], [[SPLAT_SPLAT]]706// CHECK-NEXT:    ret <vscale x 16 x i8> [[SUB]]707//708svuint8_t sub_scalar_u8(svuint8_t a, uint8_t b) {709  return a - b;710}711 712// CHECK-LABEL: @sub_scalar_u16(713// CHECK-NEXT:  entry:714// CHECK-NEXT:    [[SPLAT_SPLATINSERT:%.*]] = insertelement <vscale x 8 x i16> poison, i16 [[B:%.*]], i64 0715// CHECK-NEXT:    [[SPLAT_SPLAT:%.*]] = shufflevector <vscale x 8 x i16> [[SPLAT_SPLATINSERT]], <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer716// CHECK-NEXT:    [[SUB:%.*]] = sub <vscale x 8 x i16> [[A:%.*]], [[SPLAT_SPLAT]]717// CHECK-NEXT:    ret <vscale x 8 x i16> [[SUB]]718//719svuint16_t sub_scalar_u16(svuint16_t a, uint16_t b) {720  return a - b;721}722 723// CHECK-LABEL: @sub_scalar_u32(724// CHECK-NEXT:  entry:725// CHECK-NEXT:    [[SPLAT_SPLATINSERT:%.*]] = insertelement <vscale x 4 x i32> poison, i32 [[B:%.*]], i64 0726// CHECK-NEXT:    [[SPLAT_SPLAT:%.*]] = shufflevector <vscale x 4 x i32> [[SPLAT_SPLATINSERT]], <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer727// CHECK-NEXT:    [[SUB:%.*]] = sub <vscale x 4 x i32> [[A:%.*]], [[SPLAT_SPLAT]]728// CHECK-NEXT:    ret <vscale x 4 x i32> [[SUB]]729//730svuint32_t sub_scalar_u32(svuint32_t a, uint32_t b) {731  return a - b;732}733 734// CHECK-LABEL: @sub_scalar_u64(735// CHECK-NEXT:  entry:736// CHECK-NEXT:    [[SPLAT_SPLATINSERT:%.*]] = insertelement <vscale x 2 x i64> poison, i64 [[B:%.*]], i64 0737// CHECK-NEXT:    [[SPLAT_SPLAT:%.*]] = shufflevector <vscale x 2 x i64> [[SPLAT_SPLATINSERT]], <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer738// CHECK-NEXT:    [[SUB:%.*]] = sub <vscale x 2 x i64> [[A:%.*]], [[SPLAT_SPLAT]]739// CHECK-NEXT:    ret <vscale x 2 x i64> [[SUB]]740//741svuint64_t sub_scalar_u64(svuint64_t a, uint64_t b) {742  return a - b;743}744 745// CHECK-LABEL: @sub_scalar_f16(746// CHECK-NEXT:  entry:747// CHECK-NEXT:    [[SPLAT_SPLATINSERT:%.*]] = insertelement <vscale x 8 x half> poison, half [[B:%.*]], i64 0748// CHECK-NEXT:    [[SPLAT_SPLAT:%.*]] = shufflevector <vscale x 8 x half> [[SPLAT_SPLATINSERT]], <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer749// CHECK-NEXT:    [[SUB:%.*]] = fsub <vscale x 8 x half> [[A:%.*]], [[SPLAT_SPLAT]]750// CHECK-NEXT:    ret <vscale x 8 x half> [[SUB]]751//752svfloat16_t sub_scalar_f16(svfloat16_t a, __fp16 b) {753  return a - b;754}755 756// CHECK-LABEL: @sub_scalar_f32(757// CHECK-NEXT:  entry:758// CHECK-NEXT:    [[SPLAT_SPLATINSERT:%.*]] = insertelement <vscale x 4 x float> poison, float [[B:%.*]], i64 0759// CHECK-NEXT:    [[SPLAT_SPLAT:%.*]] = shufflevector <vscale x 4 x float> [[SPLAT_SPLATINSERT]], <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer760// CHECK-NEXT:    [[SUB:%.*]] = fsub <vscale x 4 x float> [[A:%.*]], [[SPLAT_SPLAT]]761// CHECK-NEXT:    ret <vscale x 4 x float> [[SUB]]762//763svfloat32_t sub_scalar_f32(svfloat32_t a, float b) {764  return a - b;765}766 767// CHECK-LABEL: @sub_scalar_f64(768// CHECK-NEXT:  entry:769// CHECK-NEXT:    [[SPLAT_SPLATINSERT:%.*]] = insertelement <vscale x 2 x double> poison, double [[B:%.*]], i64 0770// CHECK-NEXT:    [[SPLAT_SPLAT:%.*]] = shufflevector <vscale x 2 x double> [[SPLAT_SPLATINSERT]], <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer771// CHECK-NEXT:    [[SUB:%.*]] = fsub <vscale x 2 x double> [[A:%.*]], [[SPLAT_SPLAT]]772// CHECK-NEXT:    ret <vscale x 2 x double> [[SUB]]773//774svfloat64_t sub_scalar_f64(svfloat64_t a, double b) {775  return a - b;776}777 778// MULTIPLICATION779 780// CHECK-LABEL: @mul_i8(781// CHECK-NEXT:  entry:782// CHECK-NEXT:    [[MUL:%.*]] = mul <vscale x 16 x i8> [[A:%.*]], [[B:%.*]]783// CHECK-NEXT:    ret <vscale x 16 x i8> [[MUL]]784//785svint8_t mul_i8(svint8_t a, svint8_t b) {786  return a * b;787}788 789// CHECK-LABEL: @mul_i16(790// CHECK-NEXT:  entry:791// CHECK-NEXT:    [[MUL:%.*]] = mul <vscale x 8 x i16> [[A:%.*]], [[B:%.*]]792// CHECK-NEXT:    ret <vscale x 8 x i16> [[MUL]]793//794svint16_t mul_i16(svint16_t a, svint16_t b) {795  return a * b;796}797 798// CHECK-LABEL: @mul_i32(799// CHECK-NEXT:  entry:800// CHECK-NEXT:    [[MUL:%.*]] = mul <vscale x 4 x i32> [[A:%.*]], [[B:%.*]]801// CHECK-NEXT:    ret <vscale x 4 x i32> [[MUL]]802//803svint32_t mul_i32(svint32_t a, svint32_t b) {804  return a * b;805}806 807// CHECK-LABEL: @mul_i64(808// CHECK-NEXT:  entry:809// CHECK-NEXT:    [[MUL:%.*]] = mul <vscale x 2 x i64> [[A:%.*]], [[B:%.*]]810// CHECK-NEXT:    ret <vscale x 2 x i64> [[MUL]]811//812svint64_t mul_i64(svint64_t a, svint64_t b) {813  return a * b;814}815 816// CHECK-LABEL: @mul_u8(817// CHECK-NEXT:  entry:818// CHECK-NEXT:    [[MUL:%.*]] = mul <vscale x 16 x i8> [[A:%.*]], [[B:%.*]]819// CHECK-NEXT:    ret <vscale x 16 x i8> [[MUL]]820//821svuint8_t mul_u8(svuint8_t a, svuint8_t b) {822  return a * b;823}824 825// CHECK-LABEL: @mul_u16(826// CHECK-NEXT:  entry:827// CHECK-NEXT:    [[MUL:%.*]] = mul <vscale x 8 x i16> [[A:%.*]], [[B:%.*]]828// CHECK-NEXT:    ret <vscale x 8 x i16> [[MUL]]829//830svuint16_t mul_u16(svuint16_t a, svuint16_t b) {831  return a * b;832}833 834// CHECK-LABEL: @mul_u32(835// CHECK-NEXT:  entry:836// CHECK-NEXT:    [[MUL:%.*]] = mul <vscale x 4 x i32> [[A:%.*]], [[B:%.*]]837// CHECK-NEXT:    ret <vscale x 4 x i32> [[MUL]]838//839svuint32_t mul_u32(svuint32_t a, svuint32_t b) {840  return a * b;841}842 843// CHECK-LABEL: @mul_u64(844// CHECK-NEXT:  entry:845// CHECK-NEXT:    [[MUL:%.*]] = mul <vscale x 2 x i64> [[A:%.*]], [[B:%.*]]846// CHECK-NEXT:    ret <vscale x 2 x i64> [[MUL]]847//848svuint64_t mul_u64(svuint64_t a, svuint64_t b) {849  return a * b;850}851 852// CHECK-LABEL: @mul_f16(853// CHECK-NEXT:  entry:854// CHECK-NEXT:    [[MUL:%.*]] = fmul <vscale x 8 x half> [[A:%.*]], [[B:%.*]]855// CHECK-NEXT:    ret <vscale x 8 x half> [[MUL]]856//857svfloat16_t mul_f16(svfloat16_t a, svfloat16_t b) {858  return a * b;859}860 861// CHECK-LABEL: @mul_f32(862// CHECK-NEXT:  entry:863// CHECK-NEXT:    [[MUL:%.*]] = fmul <vscale x 4 x float> [[A:%.*]], [[B:%.*]]864// CHECK-NEXT:    ret <vscale x 4 x float> [[MUL]]865//866svfloat32_t mul_f32(svfloat32_t a, svfloat32_t b) {867  return a * b;868}869 870// CHECK-LABEL: @mul_f64(871// CHECK-NEXT:  entry:872// CHECK-NEXT:    [[MUL:%.*]] = fmul <vscale x 2 x double> [[A:%.*]], [[B:%.*]]873// CHECK-NEXT:    ret <vscale x 2 x double> [[MUL]]874//875svfloat64_t mul_f64(svfloat64_t a, svfloat64_t b) {876  return a * b;877}878 879// CHECK-LABEL: @mul_inplace_i8(880// CHECK-NEXT:  entry:881// CHECK-NEXT:    [[MUL:%.*]] = mul <vscale x 16 x i8> [[A:%.*]], [[B:%.*]]882// CHECK-NEXT:    ret <vscale x 16 x i8> [[MUL]]883//884svint8_t mul_inplace_i8(svint8_t a, svint8_t b) {885  return a * b;886}887 888// CHECK-LABEL: @mul_inplace_i16(889// CHECK-NEXT:  entry:890// CHECK-NEXT:    [[MUL:%.*]] = mul <vscale x 8 x i16> [[A:%.*]], [[B:%.*]]891// CHECK-NEXT:    ret <vscale x 8 x i16> [[MUL]]892//893svint16_t mul_inplace_i16(svint16_t a, svint16_t b) {894  return a * b;895}896 897// CHECK-LABEL: @mul_inplace_i32(898// CHECK-NEXT:  entry:899// CHECK-NEXT:    [[MUL:%.*]] = mul <vscale x 4 x i32> [[A:%.*]], [[B:%.*]]900// CHECK-NEXT:    ret <vscale x 4 x i32> [[MUL]]901//902svint32_t mul_inplace_i32(svint32_t a, svint32_t b) {903  return a * b;904}905 906// CHECK-LABEL: @mul_inplace_i64(907// CHECK-NEXT:  entry:908// CHECK-NEXT:    [[MUL:%.*]] = mul <vscale x 2 x i64> [[A:%.*]], [[B:%.*]]909// CHECK-NEXT:    ret <vscale x 2 x i64> [[MUL]]910//911svint64_t mul_inplace_i64(svint64_t a, svint64_t b) {912  return a * b;913}914 915// CHECK-LABEL: @mul_inplace_u8(916// CHECK-NEXT:  entry:917// CHECK-NEXT:    [[MUL:%.*]] = mul <vscale x 16 x i8> [[A:%.*]], [[B:%.*]]918// CHECK-NEXT:    ret <vscale x 16 x i8> [[MUL]]919//920svuint8_t mul_inplace_u8(svuint8_t a, svuint8_t b) {921  return a * b;922}923 924// CHECK-LABEL: @mul_inplace_u16(925// CHECK-NEXT:  entry:926// CHECK-NEXT:    [[MUL:%.*]] = mul <vscale x 8 x i16> [[A:%.*]], [[B:%.*]]927// CHECK-NEXT:    ret <vscale x 8 x i16> [[MUL]]928//929svuint16_t mul_inplace_u16(svuint16_t a, svuint16_t b) {930  return a * b;931}932 933// CHECK-LABEL: @mul_inplace_u32(934// CHECK-NEXT:  entry:935// CHECK-NEXT:    [[MUL:%.*]] = mul <vscale x 4 x i32> [[A:%.*]], [[B:%.*]]936// CHECK-NEXT:    ret <vscale x 4 x i32> [[MUL]]937//938svuint32_t mul_inplace_u32(svuint32_t a, svuint32_t b) {939  return a * b;940}941 942// CHECK-LABEL: @mul_inplace_u64(943// CHECK-NEXT:  entry:944// CHECK-NEXT:    [[MUL:%.*]] = mul <vscale x 2 x i64> [[A:%.*]], [[B:%.*]]945// CHECK-NEXT:    ret <vscale x 2 x i64> [[MUL]]946//947svuint64_t mul_inplace_u64(svuint64_t a, svuint64_t b) {948  return a * b;949}950 951// CHECK-LABEL: @mul_inplace_f16(952// CHECK-NEXT:  entry:953// CHECK-NEXT:    [[MUL:%.*]] = fmul <vscale x 8 x half> [[A:%.*]], [[B:%.*]]954// CHECK-NEXT:    ret <vscale x 8 x half> [[MUL]]955//956svfloat16_t mul_inplace_f16(svfloat16_t a, svfloat16_t b) {957  return a * b;958}959 960// CHECK-LABEL: @mul_inplace_f32(961// CHECK-NEXT:  entry:962// CHECK-NEXT:    [[MUL:%.*]] = fmul <vscale x 4 x float> [[A:%.*]], [[B:%.*]]963// CHECK-NEXT:    ret <vscale x 4 x float> [[MUL]]964//965svfloat32_t mul_inplace_f32(svfloat32_t a, svfloat32_t b) {966  return a * b;967}968 969// CHECK-LABEL: @mul_inplace_f64(970// CHECK-NEXT:  entry:971// CHECK-NEXT:    [[MUL:%.*]] = fmul <vscale x 2 x double> [[A:%.*]], [[B:%.*]]972// CHECK-NEXT:    ret <vscale x 2 x double> [[MUL]]973//974svfloat64_t mul_inplace_f64(svfloat64_t a, svfloat64_t b) {975  return a * b;976}977 978// CHECK-LABEL: @mul_scalar_i8(979// CHECK-NEXT:  entry:980// CHECK-NEXT:    [[SPLAT_SPLATINSERT:%.*]] = insertelement <vscale x 16 x i8> poison, i8 [[B:%.*]], i64 0981// CHECK-NEXT:    [[SPLAT_SPLAT:%.*]] = shufflevector <vscale x 16 x i8> [[SPLAT_SPLATINSERT]], <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer982// CHECK-NEXT:    [[MUL:%.*]] = mul <vscale x 16 x i8> [[A:%.*]], [[SPLAT_SPLAT]]983// CHECK-NEXT:    ret <vscale x 16 x i8> [[MUL]]984//985svint8_t mul_scalar_i8(svint8_t a, int8_t b) {986  return a * b;987}988 989// CHECK-LABEL: @mul_scalar_i16(990// CHECK-NEXT:  entry:991// CHECK-NEXT:    [[SPLAT_SPLATINSERT:%.*]] = insertelement <vscale x 8 x i16> poison, i16 [[B:%.*]], i64 0992// CHECK-NEXT:    [[SPLAT_SPLAT:%.*]] = shufflevector <vscale x 8 x i16> [[SPLAT_SPLATINSERT]], <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer993// CHECK-NEXT:    [[MUL:%.*]] = mul <vscale x 8 x i16> [[A:%.*]], [[SPLAT_SPLAT]]994// CHECK-NEXT:    ret <vscale x 8 x i16> [[MUL]]995//996svint16_t mul_scalar_i16(svint16_t a, int16_t b) {997  return a * b;998}999 1000// CHECK-LABEL: @mul_scalar_i32(1001// CHECK-NEXT:  entry:1002// CHECK-NEXT:    [[SPLAT_SPLATINSERT:%.*]] = insertelement <vscale x 4 x i32> poison, i32 [[B:%.*]], i64 01003// CHECK-NEXT:    [[SPLAT_SPLAT:%.*]] = shufflevector <vscale x 4 x i32> [[SPLAT_SPLATINSERT]], <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer1004// CHECK-NEXT:    [[MUL:%.*]] = mul <vscale x 4 x i32> [[A:%.*]], [[SPLAT_SPLAT]]1005// CHECK-NEXT:    ret <vscale x 4 x i32> [[MUL]]1006//1007svint32_t mul_scalar_i32(svint32_t a, int32_t b) {1008  return a * b;1009}1010 1011// CHECK-LABEL: @mul_scalar_i64(1012// CHECK-NEXT:  entry:1013// CHECK-NEXT:    [[SPLAT_SPLATINSERT:%.*]] = insertelement <vscale x 2 x i64> poison, i64 [[B:%.*]], i64 01014// CHECK-NEXT:    [[SPLAT_SPLAT:%.*]] = shufflevector <vscale x 2 x i64> [[SPLAT_SPLATINSERT]], <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer1015// CHECK-NEXT:    [[MUL:%.*]] = mul <vscale x 2 x i64> [[A:%.*]], [[SPLAT_SPLAT]]1016// CHECK-NEXT:    ret <vscale x 2 x i64> [[MUL]]1017//1018svint64_t mul_scalar_i64(svint64_t a, int64_t b) {1019  return a * b;1020}1021 1022// CHECK-LABEL: @mul_scalar_u8(1023// CHECK-NEXT:  entry:1024// CHECK-NEXT:    [[SPLAT_SPLATINSERT:%.*]] = insertelement <vscale x 16 x i8> poison, i8 [[B:%.*]], i64 01025// CHECK-NEXT:    [[SPLAT_SPLAT:%.*]] = shufflevector <vscale x 16 x i8> [[SPLAT_SPLATINSERT]], <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer1026// CHECK-NEXT:    [[MUL:%.*]] = mul <vscale x 16 x i8> [[A:%.*]], [[SPLAT_SPLAT]]1027// CHECK-NEXT:    ret <vscale x 16 x i8> [[MUL]]1028//1029svuint8_t mul_scalar_u8(svuint8_t a, uint8_t b) {1030  return a * b;1031}1032 1033// CHECK-LABEL: @mul_scalar_u16(1034// CHECK-NEXT:  entry:1035// CHECK-NEXT:    [[SPLAT_SPLATINSERT:%.*]] = insertelement <vscale x 8 x i16> poison, i16 [[B:%.*]], i64 01036// CHECK-NEXT:    [[SPLAT_SPLAT:%.*]] = shufflevector <vscale x 8 x i16> [[SPLAT_SPLATINSERT]], <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer1037// CHECK-NEXT:    [[MUL:%.*]] = mul <vscale x 8 x i16> [[A:%.*]], [[SPLAT_SPLAT]]1038// CHECK-NEXT:    ret <vscale x 8 x i16> [[MUL]]1039//1040svuint16_t mul_scalar_u16(svuint16_t a, uint16_t b) {1041  return a * b;1042}1043 1044// CHECK-LABEL: @mul_scalar_u32(1045// CHECK-NEXT:  entry:1046// CHECK-NEXT:    [[SPLAT_SPLATINSERT:%.*]] = insertelement <vscale x 4 x i32> poison, i32 [[B:%.*]], i64 01047// CHECK-NEXT:    [[SPLAT_SPLAT:%.*]] = shufflevector <vscale x 4 x i32> [[SPLAT_SPLATINSERT]], <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer1048// CHECK-NEXT:    [[MUL:%.*]] = mul <vscale x 4 x i32> [[A:%.*]], [[SPLAT_SPLAT]]1049// CHECK-NEXT:    ret <vscale x 4 x i32> [[MUL]]1050//1051svuint32_t mul_scalar_u32(svuint32_t a, uint32_t b) {1052  return a * b;1053}1054 1055// CHECK-LABEL: @mul_scalar_u64(1056// CHECK-NEXT:  entry:1057// CHECK-NEXT:    [[SPLAT_SPLATINSERT:%.*]] = insertelement <vscale x 2 x i64> poison, i64 [[B:%.*]], i64 01058// CHECK-NEXT:    [[SPLAT_SPLAT:%.*]] = shufflevector <vscale x 2 x i64> [[SPLAT_SPLATINSERT]], <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer1059// CHECK-NEXT:    [[MUL:%.*]] = mul <vscale x 2 x i64> [[A:%.*]], [[SPLAT_SPLAT]]1060// CHECK-NEXT:    ret <vscale x 2 x i64> [[MUL]]1061//1062svuint64_t mul_scalar_u64(svuint64_t a, uint64_t b) {1063  return a * b;1064}1065 1066// CHECK-LABEL: @mul_scalar_f16(1067// CHECK-NEXT:  entry:1068// CHECK-NEXT:    [[SPLAT_SPLATINSERT:%.*]] = insertelement <vscale x 8 x half> poison, half [[B:%.*]], i64 01069// CHECK-NEXT:    [[SPLAT_SPLAT:%.*]] = shufflevector <vscale x 8 x half> [[SPLAT_SPLATINSERT]], <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer1070// CHECK-NEXT:    [[MUL:%.*]] = fmul <vscale x 8 x half> [[A:%.*]], [[SPLAT_SPLAT]]1071// CHECK-NEXT:    ret <vscale x 8 x half> [[MUL]]1072//1073svfloat16_t mul_scalar_f16(svfloat16_t a, __fp16 b) {1074  return a * b;1075}1076 1077// CHECK-LABEL: @mul_scalar_f32(1078// CHECK-NEXT:  entry:1079// CHECK-NEXT:    [[SPLAT_SPLATINSERT:%.*]] = insertelement <vscale x 4 x float> poison, float [[B:%.*]], i64 01080// CHECK-NEXT:    [[SPLAT_SPLAT:%.*]] = shufflevector <vscale x 4 x float> [[SPLAT_SPLATINSERT]], <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer1081// CHECK-NEXT:    [[MUL:%.*]] = fmul <vscale x 4 x float> [[A:%.*]], [[SPLAT_SPLAT]]1082// CHECK-NEXT:    ret <vscale x 4 x float> [[MUL]]1083//1084svfloat32_t mul_scalar_f32(svfloat32_t a, float b) {1085  return a * b;1086}1087 1088// CHECK-LABEL: @mul_scalar_f64(1089// CHECK-NEXT:  entry:1090// CHECK-NEXT:    [[SPLAT_SPLATINSERT:%.*]] = insertelement <vscale x 2 x double> poison, double [[B:%.*]], i64 01091// CHECK-NEXT:    [[SPLAT_SPLAT:%.*]] = shufflevector <vscale x 2 x double> [[SPLAT_SPLATINSERT]], <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer1092// CHECK-NEXT:    [[MUL:%.*]] = fmul <vscale x 2 x double> [[A:%.*]], [[SPLAT_SPLAT]]1093// CHECK-NEXT:    ret <vscale x 2 x double> [[MUL]]1094//1095svfloat64_t mul_scalar_f64(svfloat64_t a, double b) {1096  return a * b;1097}1098 1099// DIVISION1100 1101// CHECK-LABEL: @div_i8(1102// CHECK-NEXT:  entry:1103// CHECK-NEXT:    [[DIV:%.*]] = sdiv <vscale x 16 x i8> [[A:%.*]], [[B:%.*]]1104// CHECK-NEXT:    ret <vscale x 16 x i8> [[DIV]]1105//1106svint8_t div_i8(svint8_t a, svint8_t b) {1107  return a / b;1108}1109 1110// CHECK-LABEL: @div_i16(1111// CHECK-NEXT:  entry:1112// CHECK-NEXT:    [[DIV:%.*]] = sdiv <vscale x 8 x i16> [[A:%.*]], [[B:%.*]]1113// CHECK-NEXT:    ret <vscale x 8 x i16> [[DIV]]1114//1115svint16_t div_i16(svint16_t a, svint16_t b) {1116  return a / b;1117}1118 1119// CHECK-LABEL: @div_i32(1120// CHECK-NEXT:  entry:1121// CHECK-NEXT:    [[DIV:%.*]] = sdiv <vscale x 4 x i32> [[A:%.*]], [[B:%.*]]1122// CHECK-NEXT:    ret <vscale x 4 x i32> [[DIV]]1123//1124svint32_t div_i32(svint32_t a, svint32_t b) {1125  return a / b;1126}1127 1128// CHECK-LABEL: @div_i64(1129// CHECK-NEXT:  entry:1130// CHECK-NEXT:    [[DIV:%.*]] = sdiv <vscale x 2 x i64> [[A:%.*]], [[B:%.*]]1131// CHECK-NEXT:    ret <vscale x 2 x i64> [[DIV]]1132//1133svint64_t div_i64(svint64_t a, svint64_t b) {1134  return a / b;1135}1136 1137// CHECK-LABEL: @div_u8(1138// CHECK-NEXT:  entry:1139// CHECK-NEXT:    [[DIV:%.*]] = udiv <vscale x 16 x i8> [[A:%.*]], [[B:%.*]]1140// CHECK-NEXT:    ret <vscale x 16 x i8> [[DIV]]1141//1142svuint8_t div_u8(svuint8_t a, svuint8_t b) {1143  return a / b;1144}1145 1146// CHECK-LABEL: @div_u16(1147// CHECK-NEXT:  entry:1148// CHECK-NEXT:    [[DIV:%.*]] = udiv <vscale x 8 x i16> [[A:%.*]], [[B:%.*]]1149// CHECK-NEXT:    ret <vscale x 8 x i16> [[DIV]]1150//1151svuint16_t div_u16(svuint16_t a, svuint16_t b) {1152  return a / b;1153}1154 1155// CHECK-LABEL: @div_u32(1156// CHECK-NEXT:  entry:1157// CHECK-NEXT:    [[DIV:%.*]] = udiv <vscale x 4 x i32> [[A:%.*]], [[B:%.*]]1158// CHECK-NEXT:    ret <vscale x 4 x i32> [[DIV]]1159//1160svuint32_t div_u32(svuint32_t a, svuint32_t b) {1161  return a / b;1162}1163 1164// CHECK-LABEL: @div_u64(1165// CHECK-NEXT:  entry:1166// CHECK-NEXT:    [[DIV:%.*]] = udiv <vscale x 2 x i64> [[A:%.*]], [[B:%.*]]1167// CHECK-NEXT:    ret <vscale x 2 x i64> [[DIV]]1168//1169svuint64_t div_u64(svuint64_t a, svuint64_t b) {1170  return a / b;1171}1172 1173// CHECK-LABEL: @div_f16(1174// CHECK-NEXT:  entry:1175// CHECK-NEXT:    [[DIV:%.*]] = fdiv <vscale x 8 x half> [[A:%.*]], [[B:%.*]]1176// CHECK-NEXT:    ret <vscale x 8 x half> [[DIV]]1177//1178svfloat16_t div_f16(svfloat16_t a, svfloat16_t b) {1179  return a / b;1180}1181 1182// CHECK-LABEL: @div_f32(1183// CHECK-NEXT:  entry:1184// CHECK-NEXT:    [[DIV:%.*]] = fdiv <vscale x 4 x float> [[A:%.*]], [[B:%.*]]1185// CHECK-NEXT:    ret <vscale x 4 x float> [[DIV]]1186//1187svfloat32_t div_f32(svfloat32_t a, svfloat32_t b) {1188  return a / b;1189}1190 1191// CHECK-LABEL: @div_f64(1192// CHECK-NEXT:  entry:1193// CHECK-NEXT:    [[DIV:%.*]] = fdiv <vscale x 2 x double> [[A:%.*]], [[B:%.*]]1194// CHECK-NEXT:    ret <vscale x 2 x double> [[DIV]]1195//1196svfloat64_t div_f64(svfloat64_t a, svfloat64_t b) {1197  return a / b;1198}1199 1200// CHECK-LABEL: @div_inplace_i8(1201// CHECK-NEXT:  entry:1202// CHECK-NEXT:    [[DIV:%.*]] = sdiv <vscale x 16 x i8> [[A:%.*]], [[B:%.*]]1203// CHECK-NEXT:    ret <vscale x 16 x i8> [[DIV]]1204//1205svint8_t div_inplace_i8(svint8_t a, svint8_t b) {1206  return a / b;1207}1208 1209// CHECK-LABEL: @div_inplace_i16(1210// CHECK-NEXT:  entry:1211// CHECK-NEXT:    [[DIV:%.*]] = sdiv <vscale x 8 x i16> [[A:%.*]], [[B:%.*]]1212// CHECK-NEXT:    ret <vscale x 8 x i16> [[DIV]]1213//1214svint16_t div_inplace_i16(svint16_t a, svint16_t b) {1215  return a / b;1216}1217 1218// CHECK-LABEL: @div_inplace_i32(1219// CHECK-NEXT:  entry:1220// CHECK-NEXT:    [[DIV:%.*]] = sdiv <vscale x 4 x i32> [[A:%.*]], [[B:%.*]]1221// CHECK-NEXT:    ret <vscale x 4 x i32> [[DIV]]1222//1223svint32_t div_inplace_i32(svint32_t a, svint32_t b) {1224  return a / b;1225}1226 1227// CHECK-LABEL: @div_inplace_i64(1228// CHECK-NEXT:  entry:1229// CHECK-NEXT:    [[DIV:%.*]] = sdiv <vscale x 2 x i64> [[A:%.*]], [[B:%.*]]1230// CHECK-NEXT:    ret <vscale x 2 x i64> [[DIV]]1231//1232svint64_t div_inplace_i64(svint64_t a, svint64_t b) {1233  return a / b;1234}1235 1236// CHECK-LABEL: @div_inplace_u8(1237// CHECK-NEXT:  entry:1238// CHECK-NEXT:    [[DIV:%.*]] = udiv <vscale x 16 x i8> [[A:%.*]], [[B:%.*]]1239// CHECK-NEXT:    ret <vscale x 16 x i8> [[DIV]]1240//1241svuint8_t div_inplace_u8(svuint8_t a, svuint8_t b) {1242  return a / b;1243}1244 1245// CHECK-LABEL: @div_inplace_u16(1246// CHECK-NEXT:  entry:1247// CHECK-NEXT:    [[DIV:%.*]] = udiv <vscale x 8 x i16> [[A:%.*]], [[B:%.*]]1248// CHECK-NEXT:    ret <vscale x 8 x i16> [[DIV]]1249//1250svuint16_t div_inplace_u16(svuint16_t a, svuint16_t b) {1251  return a / b;1252}1253 1254// CHECK-LABEL: @div_inplace_u32(1255// CHECK-NEXT:  entry:1256// CHECK-NEXT:    [[DIV:%.*]] = udiv <vscale x 4 x i32> [[A:%.*]], [[B:%.*]]1257// CHECK-NEXT:    ret <vscale x 4 x i32> [[DIV]]1258//1259svuint32_t div_inplace_u32(svuint32_t a, svuint32_t b) {1260  return a / b;1261}1262 1263// CHECK-LABEL: @div_inplace_u64(1264// CHECK-NEXT:  entry:1265// CHECK-NEXT:    [[DIV:%.*]] = udiv <vscale x 2 x i64> [[A:%.*]], [[B:%.*]]1266// CHECK-NEXT:    ret <vscale x 2 x i64> [[DIV]]1267//1268svuint64_t div_inplace_u64(svuint64_t a, svuint64_t b) {1269  return a / b;1270}1271 1272// CHECK-LABEL: @div_inplace_f16(1273// CHECK-NEXT:  entry:1274// CHECK-NEXT:    [[DIV:%.*]] = fdiv <vscale x 8 x half> [[A:%.*]], [[B:%.*]]1275// CHECK-NEXT:    ret <vscale x 8 x half> [[DIV]]1276//1277svfloat16_t div_inplace_f16(svfloat16_t a, svfloat16_t b) {1278  return a / b;1279}1280 1281// CHECK-LABEL: @div_inplace_f32(1282// CHECK-NEXT:  entry:1283// CHECK-NEXT:    [[DIV:%.*]] = fdiv <vscale x 4 x float> [[A:%.*]], [[B:%.*]]1284// CHECK-NEXT:    ret <vscale x 4 x float> [[DIV]]1285//1286svfloat32_t div_inplace_f32(svfloat32_t a, svfloat32_t b) {1287  return a / b;1288}1289 1290// CHECK-LABEL: @div_inplace_f64(1291// CHECK-NEXT:  entry:1292// CHECK-NEXT:    [[DIV:%.*]] = fdiv <vscale x 2 x double> [[A:%.*]], [[B:%.*]]1293// CHECK-NEXT:    ret <vscale x 2 x double> [[DIV]]1294//1295svfloat64_t div_inplace_f64(svfloat64_t a, svfloat64_t b) {1296  return a / b;1297}1298 1299// CHECK-LABEL: @div_scalar_i8(1300// CHECK-NEXT:  entry:1301// CHECK-NEXT:    [[SPLAT_SPLATINSERT:%.*]] = insertelement <vscale x 16 x i8> poison, i8 [[B:%.*]], i64 01302// CHECK-NEXT:    [[SPLAT_SPLAT:%.*]] = shufflevector <vscale x 16 x i8> [[SPLAT_SPLATINSERT]], <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer1303// CHECK-NEXT:    [[DIV:%.*]] = sdiv <vscale x 16 x i8> [[A:%.*]], [[SPLAT_SPLAT]]1304// CHECK-NEXT:    ret <vscale x 16 x i8> [[DIV]]1305//1306svint8_t div_scalar_i8(svint8_t a, int8_t b) {1307  return a / b;1308}1309 1310// CHECK-LABEL: @div_scalar_i16(1311// CHECK-NEXT:  entry:1312// CHECK-NEXT:    [[SPLAT_SPLATINSERT:%.*]] = insertelement <vscale x 8 x i16> poison, i16 [[B:%.*]], i64 01313// CHECK-NEXT:    [[SPLAT_SPLAT:%.*]] = shufflevector <vscale x 8 x i16> [[SPLAT_SPLATINSERT]], <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer1314// CHECK-NEXT:    [[DIV:%.*]] = sdiv <vscale x 8 x i16> [[A:%.*]], [[SPLAT_SPLAT]]1315// CHECK-NEXT:    ret <vscale x 8 x i16> [[DIV]]1316//1317svint16_t div_scalar_i16(svint16_t a, int16_t b) {1318  return a / b;1319}1320 1321// CHECK-LABEL: @div_scalar_i32(1322// CHECK-NEXT:  entry:1323// CHECK-NEXT:    [[SPLAT_SPLATINSERT:%.*]] = insertelement <vscale x 4 x i32> poison, i32 [[B:%.*]], i64 01324// CHECK-NEXT:    [[SPLAT_SPLAT:%.*]] = shufflevector <vscale x 4 x i32> [[SPLAT_SPLATINSERT]], <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer1325// CHECK-NEXT:    [[DIV:%.*]] = sdiv <vscale x 4 x i32> [[A:%.*]], [[SPLAT_SPLAT]]1326// CHECK-NEXT:    ret <vscale x 4 x i32> [[DIV]]1327//1328svint32_t div_scalar_i32(svint32_t a, int32_t b) {1329  return a / b;1330}1331 1332// CHECK-LABEL: @div_scalar_i64(1333// CHECK-NEXT:  entry:1334// CHECK-NEXT:    [[SPLAT_SPLATINSERT:%.*]] = insertelement <vscale x 2 x i64> poison, i64 [[B:%.*]], i64 01335// CHECK-NEXT:    [[SPLAT_SPLAT:%.*]] = shufflevector <vscale x 2 x i64> [[SPLAT_SPLATINSERT]], <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer1336// CHECK-NEXT:    [[DIV:%.*]] = sdiv <vscale x 2 x i64> [[A:%.*]], [[SPLAT_SPLAT]]1337// CHECK-NEXT:    ret <vscale x 2 x i64> [[DIV]]1338//1339svint64_t div_scalar_i64(svint64_t a, int64_t b) {1340  return a / b;1341}1342 1343// CHECK-LABEL: @div_scalar_u8(1344// CHECK-NEXT:  entry:1345// CHECK-NEXT:    [[SPLAT_SPLATINSERT:%.*]] = insertelement <vscale x 16 x i8> poison, i8 [[B:%.*]], i64 01346// CHECK-NEXT:    [[SPLAT_SPLAT:%.*]] = shufflevector <vscale x 16 x i8> [[SPLAT_SPLATINSERT]], <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer1347// CHECK-NEXT:    [[DIV:%.*]] = udiv <vscale x 16 x i8> [[A:%.*]], [[SPLAT_SPLAT]]1348// CHECK-NEXT:    ret <vscale x 16 x i8> [[DIV]]1349//1350svuint8_t div_scalar_u8(svuint8_t a, uint8_t b) {1351  return a / b;1352}1353 1354// CHECK-LABEL: @div_scalar_u16(1355// CHECK-NEXT:  entry:1356// CHECK-NEXT:    [[SPLAT_SPLATINSERT:%.*]] = insertelement <vscale x 8 x i16> poison, i16 [[B:%.*]], i64 01357// CHECK-NEXT:    [[SPLAT_SPLAT:%.*]] = shufflevector <vscale x 8 x i16> [[SPLAT_SPLATINSERT]], <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer1358// CHECK-NEXT:    [[DIV:%.*]] = udiv <vscale x 8 x i16> [[A:%.*]], [[SPLAT_SPLAT]]1359// CHECK-NEXT:    ret <vscale x 8 x i16> [[DIV]]1360//1361svuint16_t div_scalar_u16(svuint16_t a, uint16_t b) {1362  return a / b;1363}1364 1365// CHECK-LABEL: @div_scalar_u32(1366// CHECK-NEXT:  entry:1367// CHECK-NEXT:    [[SPLAT_SPLATINSERT:%.*]] = insertelement <vscale x 4 x i32> poison, i32 [[B:%.*]], i64 01368// CHECK-NEXT:    [[SPLAT_SPLAT:%.*]] = shufflevector <vscale x 4 x i32> [[SPLAT_SPLATINSERT]], <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer1369// CHECK-NEXT:    [[DIV:%.*]] = udiv <vscale x 4 x i32> [[A:%.*]], [[SPLAT_SPLAT]]1370// CHECK-NEXT:    ret <vscale x 4 x i32> [[DIV]]1371//1372svuint32_t div_scalar_u32(svuint32_t a, uint32_t b) {1373  return a / b;1374}1375 1376// CHECK-LABEL: @div_scalar_u64(1377// CHECK-NEXT:  entry:1378// CHECK-NEXT:    [[SPLAT_SPLATINSERT:%.*]] = insertelement <vscale x 2 x i64> poison, i64 [[B:%.*]], i64 01379// CHECK-NEXT:    [[SPLAT_SPLAT:%.*]] = shufflevector <vscale x 2 x i64> [[SPLAT_SPLATINSERT]], <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer1380// CHECK-NEXT:    [[DIV:%.*]] = udiv <vscale x 2 x i64> [[A:%.*]], [[SPLAT_SPLAT]]1381// CHECK-NEXT:    ret <vscale x 2 x i64> [[DIV]]1382//1383svuint64_t div_scalar_u64(svuint64_t a, uint64_t b) {1384  return a / b;1385}1386 1387// CHECK-LABEL: @div_scalar_f16(1388// CHECK-NEXT:  entry:1389// CHECK-NEXT:    [[SPLAT_SPLATINSERT:%.*]] = insertelement <vscale x 8 x half> poison, half [[B:%.*]], i64 01390// CHECK-NEXT:    [[SPLAT_SPLAT:%.*]] = shufflevector <vscale x 8 x half> [[SPLAT_SPLATINSERT]], <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer1391// CHECK-NEXT:    [[DIV:%.*]] = fdiv <vscale x 8 x half> [[A:%.*]], [[SPLAT_SPLAT]]1392// CHECK-NEXT:    ret <vscale x 8 x half> [[DIV]]1393//1394svfloat16_t div_scalar_f16(svfloat16_t a, __fp16 b) {1395  return a / b;1396}1397 1398// CHECK-LABEL: @div_scalar_f32(1399// CHECK-NEXT:  entry:1400// CHECK-NEXT:    [[SPLAT_SPLATINSERT:%.*]] = insertelement <vscale x 4 x float> poison, float [[B:%.*]], i64 01401// CHECK-NEXT:    [[SPLAT_SPLAT:%.*]] = shufflevector <vscale x 4 x float> [[SPLAT_SPLATINSERT]], <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer1402// CHECK-NEXT:    [[DIV:%.*]] = fdiv <vscale x 4 x float> [[A:%.*]], [[SPLAT_SPLAT]]1403// CHECK-NEXT:    ret <vscale x 4 x float> [[DIV]]1404//1405svfloat32_t div_scalar_f32(svfloat32_t a, float b) {1406  return a / b;1407}1408 1409// CHECK-LABEL: @div_scalar_f64(1410// CHECK-NEXT:  entry:1411// CHECK-NEXT:    [[SPLAT_SPLATINSERT:%.*]] = insertelement <vscale x 2 x double> poison, double [[B:%.*]], i64 01412// CHECK-NEXT:    [[SPLAT_SPLAT:%.*]] = shufflevector <vscale x 2 x double> [[SPLAT_SPLATINSERT]], <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer1413// CHECK-NEXT:    [[DIV:%.*]] = fdiv <vscale x 2 x double> [[A:%.*]], [[SPLAT_SPLAT]]1414// CHECK-NEXT:    ret <vscale x 2 x double> [[DIV]]1415//1416svfloat64_t div_scalar_f64(svfloat64_t a, double b) {1417  return a / b;1418}1419 1420// REMAINDER1421 1422// CHECK-LABEL: @rem_i8(1423// CHECK-NEXT:  entry:1424// CHECK-NEXT:    [[REM:%.*]] = srem <vscale x 16 x i8> [[A:%.*]], [[B:%.*]]1425// CHECK-NEXT:    ret <vscale x 16 x i8> [[REM]]1426//1427svint8_t rem_i8(svint8_t a, svint8_t b) {1428  return a % b;1429}1430 1431// CHECK-LABEL: @rem_i16(1432// CHECK-NEXT:  entry:1433// CHECK-NEXT:    [[REM:%.*]] = srem <vscale x 8 x i16> [[A:%.*]], [[B:%.*]]1434// CHECK-NEXT:    ret <vscale x 8 x i16> [[REM]]1435//1436svint16_t rem_i16(svint16_t a, svint16_t b) {1437  return a % b;1438}1439 1440// CHECK-LABEL: @rem_i32(1441// CHECK-NEXT:  entry:1442// CHECK-NEXT:    [[REM:%.*]] = srem <vscale x 4 x i32> [[A:%.*]], [[B:%.*]]1443// CHECK-NEXT:    ret <vscale x 4 x i32> [[REM]]1444//1445svint32_t rem_i32(svint32_t a, svint32_t b) {1446  return a % b;1447}1448 1449// CHECK-LABEL: @rem_i64(1450// CHECK-NEXT:  entry:1451// CHECK-NEXT:    [[REM:%.*]] = srem <vscale x 2 x i64> [[A:%.*]], [[B:%.*]]1452// CHECK-NEXT:    ret <vscale x 2 x i64> [[REM]]1453//1454svint64_t rem_i64(svint64_t a, svint64_t b) {1455  return a % b;1456}1457 1458// CHECK-LABEL: @rem_u8(1459// CHECK-NEXT:  entry:1460// CHECK-NEXT:    [[REM:%.*]] = urem <vscale x 16 x i8> [[A:%.*]], [[B:%.*]]1461// CHECK-NEXT:    ret <vscale x 16 x i8> [[REM]]1462//1463svuint8_t rem_u8(svuint8_t a, svuint8_t b) {1464  return a % b;1465}1466 1467// CHECK-LABEL: @rem_u16(1468// CHECK-NEXT:  entry:1469// CHECK-NEXT:    [[REM:%.*]] = urem <vscale x 8 x i16> [[A:%.*]], [[B:%.*]]1470// CHECK-NEXT:    ret <vscale x 8 x i16> [[REM]]1471//1472svuint16_t rem_u16(svuint16_t a, svuint16_t b) {1473  return a % b;1474}1475 1476// CHECK-LABEL: @rem_u32(1477// CHECK-NEXT:  entry:1478// CHECK-NEXT:    [[REM:%.*]] = urem <vscale x 4 x i32> [[A:%.*]], [[B:%.*]]1479// CHECK-NEXT:    ret <vscale x 4 x i32> [[REM]]1480//1481svuint32_t rem_u32(svuint32_t a, svuint32_t b) {1482  return a % b;1483}1484 1485// CHECK-LABEL: @rem_u64(1486// CHECK-NEXT:  entry:1487// CHECK-NEXT:    [[REM:%.*]] = urem <vscale x 2 x i64> [[A:%.*]], [[B:%.*]]1488// CHECK-NEXT:    ret <vscale x 2 x i64> [[REM]]1489//1490svuint64_t rem_u64(svuint64_t a, svuint64_t b) {1491  return a % b;1492}1493 1494// CHECK-LABEL: @rem_inplace_i8(1495// CHECK-NEXT:  entry:1496// CHECK-NEXT:    [[REM:%.*]] = srem <vscale x 16 x i8> [[A:%.*]], [[B:%.*]]1497// CHECK-NEXT:    ret <vscale x 16 x i8> [[REM]]1498//1499svint8_t rem_inplace_i8(svint8_t a, svint8_t b) {1500  return a % b;1501}1502 1503// CHECK-LABEL: @rem_inplace_i16(1504// CHECK-NEXT:  entry:1505// CHECK-NEXT:    [[REM:%.*]] = srem <vscale x 8 x i16> [[A:%.*]], [[B:%.*]]1506// CHECK-NEXT:    ret <vscale x 8 x i16> [[REM]]1507//1508svint16_t rem_inplace_i16(svint16_t a, svint16_t b) {1509  return a % b;1510}1511 1512// CHECK-LABEL: @rem_inplace_i32(1513// CHECK-NEXT:  entry:1514// CHECK-NEXT:    [[REM:%.*]] = srem <vscale x 4 x i32> [[A:%.*]], [[B:%.*]]1515// CHECK-NEXT:    ret <vscale x 4 x i32> [[REM]]1516//1517svint32_t rem_inplace_i32(svint32_t a, svint32_t b) {1518  return a % b;1519}1520 1521// CHECK-LABEL: @rem_inplace_i64(1522// CHECK-NEXT:  entry:1523// CHECK-NEXT:    [[REM:%.*]] = srem <vscale x 2 x i64> [[A:%.*]], [[B:%.*]]1524// CHECK-NEXT:    ret <vscale x 2 x i64> [[REM]]1525//1526svint64_t rem_inplace_i64(svint64_t a, svint64_t b) {1527  return a % b;1528}1529 1530// CHECK-LABEL: @rem_inplace_u8(1531// CHECK-NEXT:  entry:1532// CHECK-NEXT:    [[REM:%.*]] = urem <vscale x 16 x i8> [[A:%.*]], [[B:%.*]]1533// CHECK-NEXT:    ret <vscale x 16 x i8> [[REM]]1534//1535svuint8_t rem_inplace_u8(svuint8_t a, svuint8_t b) {1536  return a % b;1537}1538 1539// CHECK-LABEL: @rem_inplace_u16(1540// CHECK-NEXT:  entry:1541// CHECK-NEXT:    [[REM:%.*]] = urem <vscale x 8 x i16> [[A:%.*]], [[B:%.*]]1542// CHECK-NEXT:    ret <vscale x 8 x i16> [[REM]]1543//1544svuint16_t rem_inplace_u16(svuint16_t a, svuint16_t b) {1545  return a % b;1546}1547 1548// CHECK-LABEL: @rem_inplace_u32(1549// CHECK-NEXT:  entry:1550// CHECK-NEXT:    [[REM:%.*]] = urem <vscale x 4 x i32> [[A:%.*]], [[B:%.*]]1551// CHECK-NEXT:    ret <vscale x 4 x i32> [[REM]]1552//1553svuint32_t rem_inplace_u32(svuint32_t a, svuint32_t b) {1554  return a % b;1555}1556 1557// CHECK-LABEL: @rem_inplace_u64(1558// CHECK-NEXT:  entry:1559// CHECK-NEXT:    [[REM:%.*]] = urem <vscale x 2 x i64> [[A:%.*]], [[B:%.*]]1560// CHECK-NEXT:    ret <vscale x 2 x i64> [[REM]]1561//1562svuint64_t rem_inplace_u64(svuint64_t a, svuint64_t b) {1563  return a % b;1564}1565 1566// CHECK-LABEL: @rem_scalar_i8(1567// CHECK-NEXT:  entry:1568// CHECK-NEXT:    [[SPLAT_SPLATINSERT:%.*]] = insertelement <vscale x 16 x i8> poison, i8 [[B:%.*]], i64 01569// CHECK-NEXT:    [[SPLAT_SPLAT:%.*]] = shufflevector <vscale x 16 x i8> [[SPLAT_SPLATINSERT]], <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer1570// CHECK-NEXT:    [[REM:%.*]] = srem <vscale x 16 x i8> [[A:%.*]], [[SPLAT_SPLAT]]1571// CHECK-NEXT:    ret <vscale x 16 x i8> [[REM]]1572//1573svint8_t rem_scalar_i8(svint8_t a, int8_t b) {1574  return a % b;1575}1576 1577// CHECK-LABEL: @rem_scalar_i16(1578// CHECK-NEXT:  entry:1579// CHECK-NEXT:    [[SPLAT_SPLATINSERT:%.*]] = insertelement <vscale x 8 x i16> poison, i16 [[B:%.*]], i64 01580// CHECK-NEXT:    [[SPLAT_SPLAT:%.*]] = shufflevector <vscale x 8 x i16> [[SPLAT_SPLATINSERT]], <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer1581// CHECK-NEXT:    [[REM:%.*]] = srem <vscale x 8 x i16> [[A:%.*]], [[SPLAT_SPLAT]]1582// CHECK-NEXT:    ret <vscale x 8 x i16> [[REM]]1583//1584svint16_t rem_scalar_i16(svint16_t a, int16_t b) {1585  return a % b;1586}1587 1588// CHECK-LABEL: @rem_scalar_i32(1589// CHECK-NEXT:  entry:1590// CHECK-NEXT:    [[SPLAT_SPLATINSERT:%.*]] = insertelement <vscale x 4 x i32> poison, i32 [[B:%.*]], i64 01591// CHECK-NEXT:    [[SPLAT_SPLAT:%.*]] = shufflevector <vscale x 4 x i32> [[SPLAT_SPLATINSERT]], <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer1592// CHECK-NEXT:    [[REM:%.*]] = srem <vscale x 4 x i32> [[A:%.*]], [[SPLAT_SPLAT]]1593// CHECK-NEXT:    ret <vscale x 4 x i32> [[REM]]1594//1595svint32_t rem_scalar_i32(svint32_t a, int32_t b) {1596  return a % b;1597}1598 1599// CHECK-LABEL: @rem_scalar_i64(1600// CHECK-NEXT:  entry:1601// CHECK-NEXT:    [[SPLAT_SPLATINSERT:%.*]] = insertelement <vscale x 2 x i64> poison, i64 [[B:%.*]], i64 01602// CHECK-NEXT:    [[SPLAT_SPLAT:%.*]] = shufflevector <vscale x 2 x i64> [[SPLAT_SPLATINSERT]], <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer1603// CHECK-NEXT:    [[REM:%.*]] = srem <vscale x 2 x i64> [[A:%.*]], [[SPLAT_SPLAT]]1604// CHECK-NEXT:    ret <vscale x 2 x i64> [[REM]]1605//1606svint64_t rem_scalar_i64(svint64_t a, int64_t b) {1607  return a % b;1608}1609 1610// CHECK-LABEL: @rem_scalar_u8(1611// CHECK-NEXT:  entry:1612// CHECK-NEXT:    [[SPLAT_SPLATINSERT:%.*]] = insertelement <vscale x 16 x i8> poison, i8 [[B:%.*]], i64 01613// CHECK-NEXT:    [[SPLAT_SPLAT:%.*]] = shufflevector <vscale x 16 x i8> [[SPLAT_SPLATINSERT]], <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer1614// CHECK-NEXT:    [[REM:%.*]] = urem <vscale x 16 x i8> [[A:%.*]], [[SPLAT_SPLAT]]1615// CHECK-NEXT:    ret <vscale x 16 x i8> [[REM]]1616//1617svuint8_t rem_scalar_u8(svuint8_t a, uint8_t b) {1618  return a % b;1619}1620 1621// CHECK-LABEL: @rem_scalar_u16(1622// CHECK-NEXT:  entry:1623// CHECK-NEXT:    [[SPLAT_SPLATINSERT:%.*]] = insertelement <vscale x 8 x i16> poison, i16 [[B:%.*]], i64 01624// CHECK-NEXT:    [[SPLAT_SPLAT:%.*]] = shufflevector <vscale x 8 x i16> [[SPLAT_SPLATINSERT]], <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer1625// CHECK-NEXT:    [[REM:%.*]] = urem <vscale x 8 x i16> [[A:%.*]], [[SPLAT_SPLAT]]1626// CHECK-NEXT:    ret <vscale x 8 x i16> [[REM]]1627//1628svuint16_t rem_scalar_u16(svuint16_t a, uint16_t b) {1629  return a % b;1630}1631 1632// CHECK-LABEL: @rem_scalar_u32(1633// CHECK-NEXT:  entry:1634// CHECK-NEXT:    [[SPLAT_SPLATINSERT:%.*]] = insertelement <vscale x 4 x i32> poison, i32 [[B:%.*]], i64 01635// CHECK-NEXT:    [[SPLAT_SPLAT:%.*]] = shufflevector <vscale x 4 x i32> [[SPLAT_SPLATINSERT]], <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer1636// CHECK-NEXT:    [[REM:%.*]] = urem <vscale x 4 x i32> [[A:%.*]], [[SPLAT_SPLAT]]1637// CHECK-NEXT:    ret <vscale x 4 x i32> [[REM]]1638//1639svuint32_t rem_scalar_u32(svuint32_t a, uint32_t b) {1640  return a % b;1641}1642 1643// CHECK-LABEL: @rem_scalar_u64(1644// CHECK-NEXT:  entry:1645// CHECK-NEXT:    [[SPLAT_SPLATINSERT:%.*]] = insertelement <vscale x 2 x i64> poison, i64 [[B:%.*]], i64 01646// CHECK-NEXT:    [[SPLAT_SPLAT:%.*]] = shufflevector <vscale x 2 x i64> [[SPLAT_SPLATINSERT]], <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer1647// CHECK-NEXT:    [[REM:%.*]] = urem <vscale x 2 x i64> [[A:%.*]], [[SPLAT_SPLAT]]1648// CHECK-NEXT:    ret <vscale x 2 x i64> [[REM]]1649//1650svuint64_t rem_scalar_u64(svuint64_t a, uint64_t b) {1651  return a % b;1652}1653 1654// UNARY PROMOTION1655 1656// CHECK-LABEL: @prom_i8(1657// CHECK-NEXT:  entry:1658// CHECK-NEXT:    ret <vscale x 16 x i8> [[A:%.*]]1659//1660svint8_t prom_i8(svint8_t a) {1661  return +a;1662}1663 1664// CHECK-LABEL: @prom_i16(1665// CHECK-NEXT:  entry:1666// CHECK-NEXT:    ret <vscale x 8 x i16> [[A:%.*]]1667//1668svint16_t prom_i16(svint16_t a) {1669  return +a;1670}1671 1672// CHECK-LABEL: @prom_i32(1673// CHECK-NEXT:  entry:1674// CHECK-NEXT:    ret <vscale x 4 x i32> [[A:%.*]]1675//1676svint32_t prom_i32(svint32_t a) {1677  return +a;1678}1679 1680// CHECK-LABEL: @prom_i64(1681// CHECK-NEXT:  entry:1682// CHECK-NEXT:    ret <vscale x 2 x i64> [[A:%.*]]1683//1684svint64_t prom_i64(svint64_t a) {1685  return +a;1686}1687 1688// CHECK-LABEL: @prom_u8(1689// CHECK-NEXT:  entry:1690// CHECK-NEXT:    ret <vscale x 16 x i8> [[A:%.*]]1691//1692svuint8_t prom_u8(svuint8_t a) {1693  return +a;1694}1695 1696// CHECK-LABEL: @prom_u16(1697// CHECK-NEXT:  entry:1698// CHECK-NEXT:    ret <vscale x 8 x i16> [[A:%.*]]1699//1700svuint16_t prom_u16(svuint16_t a) {1701  return +a;1702}1703 1704// CHECK-LABEL: @prom_u32(1705// CHECK-NEXT:  entry:1706// CHECK-NEXT:    ret <vscale x 4 x i32> [[A:%.*]]1707//1708svuint32_t prom_u32(svuint32_t a) {1709  return +a;1710}1711 1712// CHECK-LABEL: @prom_u64(1713// CHECK-NEXT:  entry:1714// CHECK-NEXT:    ret <vscale x 2 x i64> [[A:%.*]]1715//1716svuint64_t prom_u64(svuint64_t a) {1717  return +a;1718}1719 1720// UNARY NEGATION1721 1722// CHECK-LABEL: @neg_i8(1723// CHECK-NEXT:  entry:1724// CHECK-NEXT:    [[SUB:%.*]] = sub <vscale x 16 x i8> zeroinitializer, [[A:%.*]]1725// CHECK-NEXT:    ret <vscale x 16 x i8> [[SUB]]1726//1727svint8_t neg_i8(svint8_t a) {1728  return -a;1729}1730 1731// CHECK-LABEL: @neg_i16(1732// CHECK-NEXT:  entry:1733// CHECK-NEXT:    [[SUB:%.*]] = sub <vscale x 8 x i16> zeroinitializer, [[A:%.*]]1734// CHECK-NEXT:    ret <vscale x 8 x i16> [[SUB]]1735//1736svint16_t neg_i16(svint16_t a) {1737  return -a;1738}1739 1740// CHECK-LABEL: @neg_i32(1741// CHECK-NEXT:  entry:1742// CHECK-NEXT:    [[SUB:%.*]] = sub <vscale x 4 x i32> zeroinitializer, [[A:%.*]]1743// CHECK-NEXT:    ret <vscale x 4 x i32> [[SUB]]1744//1745svint32_t neg_i32(svint32_t a) {1746  return -a;1747}1748 1749// CHECK-LABEL: @neg_i64(1750// CHECK-NEXT:  entry:1751// CHECK-NEXT:    [[SUB:%.*]] = sub <vscale x 2 x i64> zeroinitializer, [[A:%.*]]1752// CHECK-NEXT:    ret <vscale x 2 x i64> [[SUB]]1753//1754svint64_t neg_i64(svint64_t a) {1755  return -a;1756}1757 1758// CHECK-LABEL: @neg_u8(1759// CHECK-NEXT:  entry:1760// CHECK-NEXT:    [[SUB:%.*]] = sub <vscale x 16 x i8> zeroinitializer, [[A:%.*]]1761// CHECK-NEXT:    ret <vscale x 16 x i8> [[SUB]]1762//1763svuint8_t neg_u8(svuint8_t a) {1764  return -a;1765}1766 1767// CHECK-LABEL: @neg_u16(1768// CHECK-NEXT:  entry:1769// CHECK-NEXT:    [[SUB:%.*]] = sub <vscale x 8 x i16> zeroinitializer, [[A:%.*]]1770// CHECK-NEXT:    ret <vscale x 8 x i16> [[SUB]]1771//1772svuint16_t neg_u16(svuint16_t a) {1773  return -a;1774}1775 1776// CHECK-LABEL: @neg_u32(1777// CHECK-NEXT:  entry:1778// CHECK-NEXT:    [[SUB:%.*]] = sub <vscale x 4 x i32> zeroinitializer, [[A:%.*]]1779// CHECK-NEXT:    ret <vscale x 4 x i32> [[SUB]]1780//1781svuint32_t neg_u32(svuint32_t a) {1782  return -a;1783}1784 1785// CHECK-LABEL: @neg_u64(1786// CHECK-NEXT:  entry:1787// CHECK-NEXT:    [[SUB:%.*]] = sub <vscale x 2 x i64> zeroinitializer, [[A:%.*]]1788// CHECK-NEXT:    ret <vscale x 2 x i64> [[SUB]]1789//1790svuint64_t neg_u64(svuint64_t a) {1791  return -a;1792}1793