; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 2 ; RUN: opt -S -passes=instcombine < %s | FileCheck %s target triple = "aarch64-unknown-linux-gnu" ; Replace SVE merging intrinsics with their first operand when they take an all false predicate. declare @llvm.aarch64.sve.abs.nxv4i32(, , ) define @simplify_abs_intrinsic( %a, %b) { ; CHECK-LABEL: define @simplify_abs_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) { ; CHECK-NEXT: [[R:%.*]] = tail call @llvm.aarch64.sve.abs.nxv4i32( [[A]], zeroinitializer, [[B]]) ; CHECK-NEXT: ret [[R]] ; %r = tail call @llvm.aarch64.sve.abs.nxv4i32( %a, zeroinitializer, %b) ret %r } declare @llvm.aarch64.sve.add.nxv4i32(, , ) define @simplify_add_intrinsic( %a, %b) #0 { ; CHECK-LABEL: define @simplify_add_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1:[0-9]+]] { ; CHECK-NEXT: ret [[A]] ; %r = tail call @llvm.aarch64.sve.add.nxv4i32( zeroinitializer, %a, %b) ret %r } declare @llvm.aarch64.sve.addp.nxv4i32(, , ) define @simplify_addp_intrinsic( %a, %b) #0 { ; CHECK-LABEL: define @simplify_addp_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { ; CHECK-NEXT: [[R:%.*]] = tail call @llvm.aarch64.sve.addp.nxv4i32( zeroinitializer, [[A]], [[B]]) ; CHECK-NEXT: ret [[R]] ; %r = tail call @llvm.aarch64.sve.addp.nxv4i32( zeroinitializer, %a, %b) ret %r } declare @llvm.aarch64.sve.and.nxv4i32(, , ) define @simplify_and_intrinsic( %a, %b) #0 { ; CHECK-LABEL: define @simplify_and_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { ; CHECK-NEXT: ret [[A]] ; %r = tail call @llvm.aarch64.sve.and.nxv4i32( zeroinitializer, %a, %b) ret %r } declare @llvm.aarch64.sve.asr.nxv4i32(, , ) define @simplify_asr_intrinsic( %a, %b) #0 { ; CHECK-LABEL: define @simplify_asr_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { ; CHECK-NEXT: ret [[A]] ; %r = tail call @llvm.aarch64.sve.asr.nxv4i32( zeroinitializer, %a, %b) ret %r } declare @llvm.aarch64.sve.bic.nxv4i32(, , ) define @simplify_bic_intrinsic( %a, %b) #0 { ; CHECK-LABEL: define @simplify_bic_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { ; CHECK-NEXT: ret [[A]] ; %r = tail call @llvm.aarch64.sve.bic.nxv4i32( zeroinitializer, %a, %b) ret %r } declare @llvm.aarch64.sve.cls.nxv4i32(, , ) define @simplify_cls_intrinsic( %a, %b) { ; CHECK-LABEL: define @simplify_cls_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) { ; CHECK-NEXT: [[R:%.*]] = tail call @llvm.aarch64.sve.cls.nxv4i32( [[A]], zeroinitializer, [[B]]) ; CHECK-NEXT: ret [[R]] ; %r = tail call @llvm.aarch64.sve.cls.nxv4i32( %a, zeroinitializer, %b) ret %r } declare @llvm.aarch64.sve.clz.nxv4i32(, , ) define @simplify_clz_intrinsic( %a, %b) { ; CHECK-LABEL: define @simplify_clz_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) { ; CHECK-NEXT: [[R:%.*]] = tail call @llvm.aarch64.sve.clz.nxv4i32( [[A]], zeroinitializer, [[B]]) ; CHECK-NEXT: ret [[R]] ; %r = tail call @llvm.aarch64.sve.clz.nxv4i32( %a, zeroinitializer, %b) ret %r } declare @llvm.aarch64.sve.cnot.nxv4i32(, , ) define @simplify_cnot_intrinsic( %a, %b) { ; CHECK-LABEL: define @simplify_cnot_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) { ; CHECK-NEXT: [[R:%.*]] = tail call @llvm.aarch64.sve.cnot.nxv4i32( [[A]], zeroinitializer, [[B]]) ; CHECK-NEXT: ret [[R]] ; %r = tail call @llvm.aarch64.sve.cnot.nxv4i32( %a, zeroinitializer, %b) ret %r } declare @llvm.aarch64.sve.cnt.nxv4i32(, , ) define @simplify_cnt_intrinsic( %a, %b) { ; CHECK-LABEL: define @simplify_cnt_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) { ; CHECK-NEXT: [[R:%.*]] = tail call @llvm.aarch64.sve.cnt.nxv4i32( [[A]], zeroinitializer, [[B]]) ; CHECK-NEXT: ret [[R]] ; %r = tail call @llvm.aarch64.sve.cnt.nxv4i32( %a, zeroinitializer, %b) ret %r } declare @llvm.aarch64.sve.eor.nxv4i32(, , ) define @simplify_eor_intrinsic( %a, %b) #0 { ; CHECK-LABEL: define @simplify_eor_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { ; CHECK-NEXT: ret [[A]] ; %r = tail call @llvm.aarch64.sve.eor.nxv4i32( zeroinitializer, %a, %b) ret %r } declare @llvm.aarch64.sve.fabd.nxv4f32(, , ) define @simplify_fabd_intrinsic( %a, %b) #0 { ; CHECK-LABEL: define @simplify_fabd_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { ; CHECK-NEXT: ret [[A]] ; %r = tail call fast @llvm.aarch64.sve.fabd.nxv4f32( zeroinitializer, %a, %b) ret %r } declare @llvm.aarch64.sve.fabs.nxv4f32(, , ) define @simplify_fabs_intrinsic( %a, %b) { ; CHECK-LABEL: define @simplify_fabs_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) { ; CHECK-NEXT: [[R:%.*]] = tail call @llvm.aarch64.sve.fabs.nxv4f32( [[A]], zeroinitializer, [[B]]) ; CHECK-NEXT: ret [[R]] ; %r = tail call @llvm.aarch64.sve.fabs.nxv4f32( %a, zeroinitializer, %b) ret %r } declare @llvm.aarch64.sve.fadd.nxv4f32(, , ) define @simplify_fadd_intrinsic( %a, %b) #0 { ; CHECK-LABEL: define @simplify_fadd_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { ; CHECK-NEXT: ret [[A]] ; %r = tail call fast @llvm.aarch64.sve.fadd.nxv4f32( zeroinitializer, %a, %b) ret %r } declare @llvm.aarch64.sve.faddp.nxv4f32(, , ) define @simplify_faddp_intrinsic( %a, %b) #0 { ; CHECK-LABEL: define @simplify_faddp_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { ; CHECK-NEXT: [[R:%.*]] = tail call fast @llvm.aarch64.sve.faddp.nxv4f32( zeroinitializer, [[A]], [[B]]) ; CHECK-NEXT: ret [[R]] ; %r = tail call fast @llvm.aarch64.sve.faddp.nxv4f32( zeroinitializer, %a, %b) ret %r } declare @llvm.aarch64.sve.famax.nxv4f32(, , ) define @simplify_famax_intrinsic( %a, %b) #0 { ; CHECK-LABEL: define @simplify_famax_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { ; CHECK-NEXT: [[R:%.*]] = tail call fast @llvm.aarch64.sve.famax.nxv4f32( zeroinitializer, [[A]], [[B]]) ; CHECK-NEXT: ret [[R]] ; %r = tail call fast @llvm.aarch64.sve.famax.nxv4f32( zeroinitializer, %a, %b) ret %r } declare @llvm.aarch64.sve.famin.nxv4f32(, , ) define @simplify_famin_intrinsic( %a, %b) #0 { ; CHECK-LABEL: define @simplify_famin_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { ; CHECK-NEXT: [[R:%.*]] = tail call fast @llvm.aarch64.sve.famin.nxv4f32( zeroinitializer, [[A]], [[B]]) ; CHECK-NEXT: ret [[R]] ; %r = tail call fast @llvm.aarch64.sve.famin.nxv4f32( zeroinitializer, %a, %b) ret %r } declare @llvm.aarch64.sve.fdiv.nxv4f32(, , ) define @simplify_fdiv_intrinsic( %a, %b) #0 { ; CHECK-LABEL: define @simplify_fdiv_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { ; CHECK-NEXT: ret [[A]] ; %r = tail call fast @llvm.aarch64.sve.fdiv.nxv4f32( zeroinitializer, %a, %b) ret %r } declare @llvm.aarch64.sve.fdivr.nxv4f32(, , ) define @simplify_fdivr_intrinsic( %a, %b) #0 { ; CHECK-LABEL: define @simplify_fdivr_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { ; CHECK-NEXT: [[R:%.*]] = tail call fast @llvm.aarch64.sve.fdivr.nxv4f32( zeroinitializer, [[A]], [[B]]) ; CHECK-NEXT: ret [[R]] ; %r = tail call fast @llvm.aarch64.sve.fdivr.nxv4f32( zeroinitializer, %a, %b) ret %r } declare @llvm.aarch64.sve.flogb.nxv4f32(, , ) define @simplify_flogb_intrinsic( %a, %b) { ; CHECK-LABEL: define @simplify_flogb_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) { ; CHECK-NEXT: [[R:%.*]] = tail call @llvm.aarch64.sve.flogb.nxv4f32( [[A]], zeroinitializer, [[B]]) ; CHECK-NEXT: ret [[R]] ; %r = tail call @llvm.aarch64.sve.flogb.nxv4f32( %a, zeroinitializer, %b) ret %r } declare @llvm.aarch64.sve.fmad.nxv4f32(, , , ) define @simplify_fmad_intrinsic( %a, %b, %c) #0 { ; CHECK-LABEL: define @simplify_fmad_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]], [[C:%.*]]) #[[ATTR1]] { ; CHECK-NEXT: [[R:%.*]] = tail call fast @llvm.aarch64.sve.fmad.nxv4f32( zeroinitializer, [[A]], [[B]], [[C]]) ; CHECK-NEXT: ret [[R]] ; %r = tail call fast @llvm.aarch64.sve.fmad.nxv4f32( zeroinitializer, %a, %b, %c) ret %r } declare @llvm.aarch64.sve.fmax.nxv4f32(, , ) define @simplify_fmax_intrinsic( %a, %b) #0 { ; CHECK-LABEL: define @simplify_fmax_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { ; CHECK-NEXT: ret [[A]] ; %r = tail call fast @llvm.aarch64.sve.fmax.nxv4f32( zeroinitializer, %a, %b) ret %r } declare @llvm.aarch64.sve.fmaxp.nxv4f32(, , ) define @simplify_fmaxp_intrinsic( %a, %b) #0 { ; CHECK-LABEL: define @simplify_fmaxp_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { ; CHECK-NEXT: [[R:%.*]] = tail call fast @llvm.aarch64.sve.fmaxp.nxv4f32( zeroinitializer, [[A]], [[B]]) ; CHECK-NEXT: ret [[R]] ; %r = tail call fast @llvm.aarch64.sve.fmaxp.nxv4f32( zeroinitializer, %a, %b) ret %r } declare @llvm.aarch64.sve.fmaxnm.nxv4f32(, , ) define @simplify_fmaxnm_intrinsic( %a, %b) #0 { ; CHECK-LABEL: define @simplify_fmaxnm_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { ; CHECK-NEXT: ret [[A]] ; %r = tail call fast @llvm.aarch64.sve.fmaxnm.nxv4f32( zeroinitializer, %a, %b) ret %r } declare @llvm.aarch64.sve.fmaxnmp.nxv4f32(, , ) define @simplify_fmaxnmp_intrinsic( %a, %b) #0 { ; CHECK-LABEL: define @simplify_fmaxnmp_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { ; CHECK-NEXT: [[R:%.*]] = tail call fast @llvm.aarch64.sve.fmaxnmp.nxv4f32( zeroinitializer, [[A]], [[B]]) ; CHECK-NEXT: ret [[R]] ; %r = tail call fast @llvm.aarch64.sve.fmaxnmp.nxv4f32( zeroinitializer, %a, %b) ret %r } declare @llvm.aarch64.sve.fmin.nxv4f32(, , ) define @simplify_fmin_intrinsic( %a, %b) #0 { ; CHECK-LABEL: define @simplify_fmin_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { ; CHECK-NEXT: ret [[A]] ; %r = tail call fast @llvm.aarch64.sve.fmin.nxv4f32( zeroinitializer, %a, %b) ret %r } declare @llvm.aarch64.sve.fminp.nxv4f32(, , ) define @simplify_fminp_intrinsic( %a, %b) #0 { ; CHECK-LABEL: define @simplify_fminp_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { ; CHECK-NEXT: [[R:%.*]] = tail call fast @llvm.aarch64.sve.fminp.nxv4f32( zeroinitializer, [[A]], [[B]]) ; CHECK-NEXT: ret [[R]] ; %r = tail call fast @llvm.aarch64.sve.fminp.nxv4f32( zeroinitializer, %a, %b) ret %r } declare @llvm.aarch64.sve.fminnm.nxv4f32(, , ) define @simplify_fminnm_intrinsic( %a, %b) #0 { ; CHECK-LABEL: define @simplify_fminnm_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { ; CHECK-NEXT: ret [[A]] ; %r = tail call fast @llvm.aarch64.sve.fminnm.nxv4f32( zeroinitializer, %a, %b) ret %r } declare @llvm.aarch64.sve.fminnmp.nxv4f32(, , ) define @simplify_fminnmp_intrinsic( %a, %b) #0 { ; CHECK-LABEL: define @simplify_fminnmp_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { ; CHECK-NEXT: [[R:%.*]] = tail call fast @llvm.aarch64.sve.fminnmp.nxv4f32( zeroinitializer, [[A]], [[B]]) ; CHECK-NEXT: ret [[R]] ; %r = tail call fast @llvm.aarch64.sve.fminnmp.nxv4f32( zeroinitializer, %a, %b) ret %r } declare @llvm.aarch64.sve.fmla.nxv4f32(, , , ) define @simplify_fmla_intrinsic( %a, %b, %c) #0 { ; CHECK-LABEL: define @simplify_fmla_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]], [[C:%.*]]) #[[ATTR1]] { ; CHECK-NEXT: ret [[A]] ; %r = tail call fast @llvm.aarch64.sve.fmla.nxv4f32( zeroinitializer, %a, %b, %c) ret %r } declare @llvm.aarch64.sve.fmls.nxv4f32(, , , ) define @simplify_fmls_intrinsic( %a, %b, %c) #0 { ; CHECK-LABEL: define @simplify_fmls_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]], [[C:%.*]]) #[[ATTR1]] { ; CHECK-NEXT: ret [[A]] ; %r = tail call fast @llvm.aarch64.sve.fmls.nxv4f32( zeroinitializer, %a, %b, %c) ret %r } declare @llvm.aarch64.sve.fmsb.nxv4f32(, , , ) define @simplify_fmsb_intrinsic( %a, %b, %c) #0 { ; CHECK-LABEL: define @simplify_fmsb_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]], [[C:%.*]]) #[[ATTR1]] { ; CHECK-NEXT: [[R:%.*]] = tail call fast @llvm.aarch64.sve.fmsb.nxv4f32( zeroinitializer, [[A]], [[B]], [[C]]) ; CHECK-NEXT: ret [[R]] ; %r = tail call fast @llvm.aarch64.sve.fmsb.nxv4f32( zeroinitializer, %a, %b, %c) ret %r } declare @llvm.aarch64.sve.fmul.nxv4f32(, , ) define @simplify_fmul_intrinsic( %a, %b) #0 { ; CHECK-LABEL: define @simplify_fmul_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { ; CHECK-NEXT: ret [[A]] ; %r = tail call fast @llvm.aarch64.sve.fmul.nxv4f32( zeroinitializer, %a, %b) ret %r } declare @llvm.aarch64.sve.fmulx.nxv4f32(, , ) define @simplify_fmulx_intrinsic( %a, %b) #0 { ; CHECK-LABEL: define @simplify_fmulx_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { ; CHECK-NEXT: ret [[A]] ; %r = tail call fast @llvm.aarch64.sve.fmulx.nxv4f32( zeroinitializer, %a, %b) ret %r } declare @llvm.aarch64.sve.fneg.nxv4f32(, , ) define @simplify_fneg_intrinsic( %a, %b) { ; CHECK-LABEL: define @simplify_fneg_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) { ; CHECK-NEXT: [[R:%.*]] = tail call @llvm.aarch64.sve.fneg.nxv4f32( [[A]], zeroinitializer, [[B]]) ; CHECK-NEXT: ret [[R]] ; %r = tail call @llvm.aarch64.sve.fneg.nxv4f32( %a, zeroinitializer, %b) ret %r } declare @llvm.aarch64.sve.fnmad.nxv4f32(, , , ) define @simplify_fnmad_intrinsic( %a, %b, %c) #0 { ; CHECK-LABEL: define @simplify_fnmad_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]], [[C:%.*]]) #[[ATTR1]] { ; CHECK-NEXT: [[R:%.*]] = tail call fast @llvm.aarch64.sve.fnmad.nxv4f32( zeroinitializer, [[A]], [[B]], [[C]]) ; CHECK-NEXT: ret [[R]] ; %r = tail call fast @llvm.aarch64.sve.fnmad.nxv4f32( zeroinitializer, %a, %b, %c) ret %r } declare @llvm.aarch64.sve.fnmla.nxv4f32(, , , ) define @simplify_fnmla_intrinsic( %a, %b, %c) #0 { ; CHECK-LABEL: define @simplify_fnmla_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]], [[C:%.*]]) #[[ATTR1]] { ; CHECK-NEXT: ret [[A]] ; %r = tail call fast @llvm.aarch64.sve.fnmla.nxv4f32( zeroinitializer, %a, %b, %c) ret %r } declare @llvm.aarch64.sve.fnmls.nxv4f32(, , , ) define @simplify_fnmls_intrinsic( %a, %b, %c) #0 { ; CHECK-LABEL: define @simplify_fnmls_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]], [[C:%.*]]) #[[ATTR1]] { ; CHECK-NEXT: ret [[A]] ; %r = tail call fast @llvm.aarch64.sve.fnmls.nxv4f32( zeroinitializer, %a, %b, %c) ret %r } declare @llvm.aarch64.sve.fnmsb.nxv4f32(, , , ) define @simplify_fnmsb_intrinsic( %a, %b, %c) #0 { ; CHECK-LABEL: define @simplify_fnmsb_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]], [[C:%.*]]) #[[ATTR1]] { ; CHECK-NEXT: [[R:%.*]] = tail call fast @llvm.aarch64.sve.fnmsb.nxv4f32( zeroinitializer, [[A]], [[B]], [[C]]) ; CHECK-NEXT: ret [[R]] ; %r = tail call fast @llvm.aarch64.sve.fnmsb.nxv4f32( zeroinitializer, %a, %b, %c) ret %r } declare @llvm.aarch64.sve.frecpx.nxv4f32(, , ) define @simplify_frecpx_intrinsic( %a, %b) { ; CHECK-LABEL: define @simplify_frecpx_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) { ; CHECK-NEXT: [[R:%.*]] = tail call @llvm.aarch64.sve.frecpx.nxv4f32( [[A]], zeroinitializer, [[B]]) ; CHECK-NEXT: ret [[R]] ; %r = tail call @llvm.aarch64.sve.frecpx.nxv4f32( %a, zeroinitializer, %b) ret %r } declare @llvm.aarch64.sve.frinta.nxv4f32(, , ) define @simplify_frinta_intrinsic( %a, %b) { ; CHECK-LABEL: define @simplify_frinta_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) { ; CHECK-NEXT: [[R:%.*]] = tail call @llvm.aarch64.sve.frinta.nxv4f32( [[A]], zeroinitializer, [[B]]) ; CHECK-NEXT: ret [[R]] ; %r = tail call @llvm.aarch64.sve.frinta.nxv4f32( %a, zeroinitializer, %b) ret %r } declare @llvm.aarch64.sve.frinti.nxv4f32(, , ) define @simplify_frinti_intrinsic( %a, %b) { ; CHECK-LABEL: define @simplify_frinti_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) { ; CHECK-NEXT: [[R:%.*]] = tail call @llvm.aarch64.sve.frinti.nxv4f32( [[A]], zeroinitializer, [[B]]) ; CHECK-NEXT: ret [[R]] ; %r = tail call @llvm.aarch64.sve.frinti.nxv4f32( %a, zeroinitializer, %b) ret %r } declare @llvm.aarch64.sve.frintm.nxv4f32(, , ) define @simplify_frintm_intrinsic( %a, %b) { ; CHECK-LABEL: define @simplify_frintm_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) { ; CHECK-NEXT: [[R:%.*]] = tail call @llvm.aarch64.sve.frintm.nxv4f32( [[A]], zeroinitializer, [[B]]) ; CHECK-NEXT: ret [[R]] ; %r = tail call @llvm.aarch64.sve.frintm.nxv4f32( %a, zeroinitializer, %b) ret %r } declare @llvm.aarch64.sve.frintn.nxv4f32(, , ) define @simplify_frintn_intrinsic( %a, %b) { ; CHECK-LABEL: define @simplify_frintn_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) { ; CHECK-NEXT: [[R:%.*]] = tail call @llvm.aarch64.sve.frintn.nxv4f32( [[A]], zeroinitializer, [[B]]) ; CHECK-NEXT: ret [[R]] ; %r = tail call @llvm.aarch64.sve.frintn.nxv4f32( %a, zeroinitializer, %b) ret %r } declare @llvm.aarch64.sve.frintp.nxv4f32(, , ) define @simplify_frintp_intrinsic( %a, %b) { ; CHECK-LABEL: define @simplify_frintp_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) { ; CHECK-NEXT: [[R:%.*]] = tail call @llvm.aarch64.sve.frintp.nxv4f32( [[A]], zeroinitializer, [[B]]) ; CHECK-NEXT: ret [[R]] ; %r = tail call @llvm.aarch64.sve.frintp.nxv4f32( %a, zeroinitializer, %b) ret %r } declare @llvm.aarch64.sve.frintx.nxv4f32(, , ) define @simplify_frintx_intrinsic( %a, %b) { ; CHECK-LABEL: define @simplify_frintx_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) { ; CHECK-NEXT: [[R:%.*]] = tail call @llvm.aarch64.sve.frintx.nxv4f32( [[A]], zeroinitializer, [[B]]) ; CHECK-NEXT: ret [[R]] ; %r = tail call @llvm.aarch64.sve.frintx.nxv4f32( %a, zeroinitializer, %b) ret %r } declare @llvm.aarch64.sve.frintz.nxv4f32(, , ) define @simplify_frintz_intrinsic( %a, %b) { ; CHECK-LABEL: define @simplify_frintz_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) { ; CHECK-NEXT: [[R:%.*]] = tail call @llvm.aarch64.sve.frintz.nxv4f32( [[A]], zeroinitializer, [[B]]) ; CHECK-NEXT: ret [[R]] ; %r = tail call @llvm.aarch64.sve.frintz.nxv4f32( %a, zeroinitializer, %b) ret %r } declare @llvm.aarch64.sve.fsqrt.nxv4f32(, , ) define @simplify_fsqrt_intrinsic( %a, %b) { ; CHECK-LABEL: define @simplify_fsqrt_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) { ; CHECK-NEXT: [[R:%.*]] = tail call @llvm.aarch64.sve.fsqrt.nxv4f32( [[A]], zeroinitializer, [[B]]) ; CHECK-NEXT: ret [[R]] ; %r = tail call @llvm.aarch64.sve.fsqrt.nxv4f32( %a, zeroinitializer, %b) ret %r } declare @llvm.aarch64.sve.fsub.nxv4f32(, , ) define @simplify_fsub_intrinsic( %a, %b) #0 { ; CHECK-LABEL: define @simplify_fsub_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { ; CHECK-NEXT: ret [[A]] ; %r = tail call fast @llvm.aarch64.sve.fsub.nxv4f32( zeroinitializer, %a, %b) ret %r } declare @llvm.aarch64.sve.fsubr.nxv4f32(, , ) define @simplify_fsubr_intrinsic( %a, %b) #0 { ; CHECK-LABEL: define @simplify_fsubr_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { ; CHECK-NEXT: [[R:%.*]] = tail call fast @llvm.aarch64.sve.fsubr.nxv4f32( zeroinitializer, [[A]], [[B]]) ; CHECK-NEXT: ret [[R]] ; %r = tail call fast @llvm.aarch64.sve.fsubr.nxv4f32( zeroinitializer, %a, %b) ret %r } declare @llvm.aarch64.sve.lsl.nxv4i32(, , ) define @simplify_lsl_intrinsic( %a, %b) #0 { ; CHECK-LABEL: define @simplify_lsl_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { ; CHECK-NEXT: ret [[A]] ; %r = tail call @llvm.aarch64.sve.lsl.nxv4i32( zeroinitializer, %a, %b) ret %r } declare @llvm.aarch64.sve.lsr.nxv4i32(, , ) define @simplify_lsr_intrinsic( %a, %b) #0 { ; CHECK-LABEL: define @simplify_lsr_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { ; CHECK-NEXT: ret [[A]] ; %r = tail call @llvm.aarch64.sve.lsr.nxv4i32( zeroinitializer, %a, %b) ret %r } declare @llvm.aarch64.sve.mad.nxv4i32(, , , ) define @simplify_mad_intrinsic( %a, %b, %c) #0 { ; CHECK-LABEL: define @simplify_mad_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]], [[C:%.*]]) #[[ATTR1]] { ; CHECK-NEXT: [[R:%.*]] = tail call @llvm.aarch64.sve.mad.nxv4i32( zeroinitializer, [[A]], [[B]], [[C]]) ; CHECK-NEXT: ret [[R]] ; %r = tail call @llvm.aarch64.sve.mad.nxv4i32( zeroinitializer, %a, %b, %c) ret %r } declare @llvm.aarch64.sve.mla.nxv4i32(, , , ) define @simplify_mla_intrinsic( %a, %b, %c) #0 { ; CHECK-LABEL: define @simplify_mla_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]], [[C:%.*]]) #[[ATTR1]] { ; CHECK-NEXT: ret [[A]] ; %r = tail call @llvm.aarch64.sve.mla.nxv4i32( zeroinitializer, %a, %b, %c) ret %r } declare @llvm.aarch64.sve.mls.nxv4i32(, , , ) define @simplify_mls_intrinsic( %a, %b, %c) #0 { ; CHECK-LABEL: define @simplify_mls_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]], [[C:%.*]]) #[[ATTR1]] { ; CHECK-NEXT: ret [[A]] ; %r = tail call @llvm.aarch64.sve.mls.nxv4i32( zeroinitializer, %a, %b, %c) ret %r } declare @llvm.aarch64.sve.msb.nxv4i32(, , , ) define @simplify_msb_intrinsic( %a, %b, %c) #0 { ; CHECK-LABEL: define @simplify_msb_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]], [[C:%.*]]) #[[ATTR1]] { ; CHECK-NEXT: [[R:%.*]] = tail call @llvm.aarch64.sve.msb.nxv4i32( zeroinitializer, [[A]], [[B]], [[C]]) ; CHECK-NEXT: ret [[R]] ; %r = tail call @llvm.aarch64.sve.msb.nxv4i32( zeroinitializer, %a, %b, %c) ret %r } declare @llvm.aarch64.sve.mul.nxv4i32(, , ) define @simplify_mul_intrinsic( %a, %b) #0 { ; CHECK-LABEL: define @simplify_mul_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { ; CHECK-NEXT: ret [[A]] ; %r = tail call @llvm.aarch64.sve.mul.nxv4i32( zeroinitializer, %a, %b) ret %r } declare @llvm.aarch64.sve.neg.nxv4i32(, , ) define @simplify_neg_intrinsic( %a, %b) { ; CHECK-LABEL: define @simplify_neg_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) { ; CHECK-NEXT: [[R:%.*]] = tail call @llvm.aarch64.sve.neg.nxv4i32( [[A]], zeroinitializer, [[B]]) ; CHECK-NEXT: ret [[R]] ; %r = tail call @llvm.aarch64.sve.neg.nxv4i32( %a, zeroinitializer, %b) ret %r } declare @llvm.aarch64.sve.not.nxv4i32(, , ) define @simplify_not_intrinsic( %a, %b) { ; CHECK-LABEL: define @simplify_not_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) { ; CHECK-NEXT: [[R:%.*]] = tail call @llvm.aarch64.sve.not.nxv4i32( [[A]], zeroinitializer, [[B]]) ; CHECK-NEXT: ret [[R]] ; %r = tail call @llvm.aarch64.sve.not.nxv4i32( %a, zeroinitializer, %b) ret %r } declare @llvm.aarch64.sve.orr.nxv4i32(, , ) define @simplify_orr_intrinsic( %a, %b) #0 { ; CHECK-LABEL: define @simplify_orr_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { ; CHECK-NEXT: ret [[A]] ; %r = tail call @llvm.aarch64.sve.orr.nxv4i32( zeroinitializer, %a, %b) ret %r } declare @llvm.aarch64.sve.rbit.nxv4i32(, , ) define @simplify_rbit_intrinsic( %a, %b) { ; CHECK-LABEL: define @simplify_rbit_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) { ; CHECK-NEXT: [[R:%.*]] = tail call @llvm.aarch64.sve.rbit.nxv4i32( [[A]], zeroinitializer, [[B]]) ; CHECK-NEXT: ret [[R]] ; %r = tail call @llvm.aarch64.sve.rbit.nxv4i32( %a, zeroinitializer, %b) ret %r } declare @llvm.aarch64.sve.revb.nxv4i32(, , ) define @simplify_revb_intrinsic( %a, %b) { ; CHECK-LABEL: define @simplify_revb_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) { ; CHECK-NEXT: ret [[A]] ; %r = tail call @llvm.aarch64.sve.revb.nxv4i32( %a, zeroinitializer, %b) ret %r } declare @llvm.aarch64.sve.revh.nxv4i32(, , ) define @simplify_revh_intrinsic( %a, %b) { ; CHECK-LABEL: define @simplify_revh_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) { ; CHECK-NEXT: ret [[A]] ; %r = tail call @llvm.aarch64.sve.revh.nxv4i32( %a, zeroinitializer, %b) ret %r } declare @llvm.aarch64.sve.revw.nxv2i64(, , ) define @simplify_revw_intrinsic( %a, %b) { ; CHECK-LABEL: define @simplify_revw_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) { ; CHECK-NEXT: ret [[A]] ; %r = tail call @llvm.aarch64.sve.revw.nxv2i64( %a, zeroinitializer, %b) ret %r } declare @llvm.aarch64.sve.revd.nxv4i32(, , ) define @simplify_revd_intrinsic( %a, %b) { ; CHECK-LABEL: define @simplify_revd_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) { ; CHECK-NEXT: ret [[A]] ; %r = tail call @llvm.aarch64.sve.revd.nxv4i32( %a, zeroinitializer, %b) ret %r } declare @llvm.aarch64.sve.sabd.nxv4i32(, , ) define @simplify_sabd_intrinsic( %a, %b) #0 { ; CHECK-LABEL: define @simplify_sabd_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { ; CHECK-NEXT: ret [[A]] ; %r = tail call @llvm.aarch64.sve.sabd.nxv4i32( zeroinitializer, %a, %b) ret %r } declare @llvm.aarch64.sve.sdiv.nxv4i32(, , ) define @simplify_sdiv_intrinsic( %a, %b) #0 { ; CHECK-LABEL: define @simplify_sdiv_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { ; CHECK-NEXT: ret [[A]] ; %r = tail call @llvm.aarch64.sve.sdiv.nxv4i32( zeroinitializer, %a, %b) ret %r } declare @llvm.aarch64.sve.sdivr.nxv4i32(, , ) define @simplify_sdivr_intrinsic( %a, %b) #0 { ; CHECK-LABEL: define @simplify_sdivr_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { ; CHECK-NEXT: [[R:%.*]] = tail call @llvm.aarch64.sve.sdivr.nxv4i32( zeroinitializer, [[A]], [[B]]) ; CHECK-NEXT: ret [[R]] ; %r = tail call @llvm.aarch64.sve.sdivr.nxv4i32( zeroinitializer, %a, %b) ret %r } declare @llvm.aarch64.sve.shadd.nxv4i32(, , ) define @simplify_shadd_intrinsic( %a, %b) #0 { ; CHECK-LABEL: define @simplify_shadd_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { ; CHECK-NEXT: [[R:%.*]] = tail call @llvm.aarch64.sve.shadd.nxv4i32( zeroinitializer, [[A]], [[B]]) ; CHECK-NEXT: ret [[R]] ; %r = tail call @llvm.aarch64.sve.shadd.nxv4i32( zeroinitializer, %a, %b) ret %r } declare @llvm.aarch64.sve.shsub.nxv4i32(, , ) define @simplify_shsub_intrinsic( %a, %b) #0 { ; CHECK-LABEL: define @simplify_shsub_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { ; CHECK-NEXT: ret [[A]] ; %r = tail call @llvm.aarch64.sve.shsub.nxv4i32( zeroinitializer, %a, %b) ret %r } declare @llvm.aarch64.sve.shsubr.nxv4i32(, , ) define @simplify_shsubr_intrinsic( %a, %b) #0 { ; CHECK-LABEL: define @simplify_shsubr_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { ; CHECK-NEXT: ret [[A]] ; %r = tail call @llvm.aarch64.sve.shsubr.nxv4i32( zeroinitializer, %a, %b) ret %r } declare @llvm.aarch64.sve.smax.nxv4i32(, , ) define @simplify_smax_intrinsic( %a, %b) #0 { ; CHECK-LABEL: define @simplify_smax_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { ; CHECK-NEXT: ret [[A]] ; %r = tail call @llvm.aarch64.sve.smax.nxv4i32( zeroinitializer, %a, %b) ret %r } declare @llvm.aarch64.sve.smaxp.nxv4i32(, , ) define @simplify_smaxp_intrinsic( %a, %b) #0 { ; CHECK-LABEL: define @simplify_smaxp_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { ; CHECK-NEXT: [[R:%.*]] = tail call @llvm.aarch64.sve.smaxp.nxv4i32( zeroinitializer, [[A]], [[B]]) ; CHECK-NEXT: ret [[R]] ; %r = tail call @llvm.aarch64.sve.smaxp.nxv4i32( zeroinitializer, %a, %b) ret %r } declare @llvm.aarch64.sve.smin.nxv4i32(, , ) define @simplify_smin_intrinsic( %a, %b) #0 { ; CHECK-LABEL: define @simplify_smin_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { ; CHECK-NEXT: ret [[A]] ; %r = tail call @llvm.aarch64.sve.smin.nxv4i32( zeroinitializer, %a, %b) ret %r } declare @llvm.aarch64.sve.sminp.nxv4i32(, , ) define @simplify_sminp_intrinsic( %a, %b) #0 { ; CHECK-LABEL: define @simplify_sminp_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { ; CHECK-NEXT: [[R:%.*]] = tail call @llvm.aarch64.sve.sminp.nxv4i32( zeroinitializer, [[A]], [[B]]) ; CHECK-NEXT: ret [[R]] ; %r = tail call @llvm.aarch64.sve.sminp.nxv4i32( zeroinitializer, %a, %b) ret %r } declare @llvm.aarch64.sve.smulh.nxv4i32(, , ) define @simplify_smulh_intrinsic( %a, %b) #0 { ; CHECK-LABEL: define @simplify_smulh_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { ; CHECK-NEXT: ret [[A]] ; %r = tail call @llvm.aarch64.sve.smulh.nxv4i32( zeroinitializer, %a, %b) ret %r } declare @llvm.aarch64.sve.sqabs.nxv4i32(, , ) define @simplify_sqabs_intrinsic( %a, %b) { ; CHECK-LABEL: define @simplify_sqabs_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) { ; CHECK-NEXT: [[R:%.*]] = tail call @llvm.aarch64.sve.sqabs.nxv4i32( [[A]], zeroinitializer, [[B]]) ; CHECK-NEXT: ret [[R]] ; %r = tail call @llvm.aarch64.sve.sqabs.nxv4i32( %a, zeroinitializer, %b) ret %r } declare @llvm.aarch64.sve.sqadd.nxv4i32(, , ) define @simplify_sqadd_intrinsic( %a, %b) #0 { ; CHECK-LABEL: define @simplify_sqadd_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { ; CHECK-NEXT: [[R:%.*]] = tail call @llvm.aarch64.sve.sqadd.nxv4i32( zeroinitializer, [[A]], [[B]]) ; CHECK-NEXT: ret [[R]] ; %r = tail call @llvm.aarch64.sve.sqadd.nxv4i32( zeroinitializer, %a, %b) ret %r } declare @llvm.aarch64.sve.sqneg.nxv4i32(, , ) define @simplify_sqneg_intrinsic( %a, %b) { ; CHECK-LABEL: define @simplify_sqneg_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) { ; CHECK-NEXT: [[R:%.*]] = tail call @llvm.aarch64.sve.sqneg.nxv4i32( [[A]], zeroinitializer, [[B]]) ; CHECK-NEXT: ret [[R]] ; %r = tail call @llvm.aarch64.sve.sqneg.nxv4i32( %a, zeroinitializer, %b) ret %r } declare @llvm.aarch64.sve.sqrshl.nxv4i32(, , ) define @simplify_sqrshl_intrinsic( %a, %b) #0 { ; CHECK-LABEL: define @simplify_sqrshl_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { ; CHECK-NEXT: ret [[A]] ; %r = tail call @llvm.aarch64.sve.sqrshl.nxv4i32( zeroinitializer, %a, %b) ret %r } declare @llvm.aarch64.sve.sqshl.nxv4i32(, , ) define @simplify_sqshl_intrinsic( %a, %b) #0 { ; CHECK-LABEL: define @simplify_sqshl_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { ; CHECK-NEXT: ret [[A]] ; %r = tail call @llvm.aarch64.sve.sqshl.nxv4i32( zeroinitializer, %a, %b) ret %r } declare @llvm.aarch64.sve.sqsub.nxv4i32(, , ) define @simplify_sqsub_intrinsic( %a, %b) #0 { ; CHECK-LABEL: define @simplify_sqsub_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { ; CHECK-NEXT: ret [[A]] ; %r = tail call @llvm.aarch64.sve.sqsub.nxv4i32( zeroinitializer, %a, %b) ret %r } declare @llvm.aarch64.sve.sqsubr.nxv4i32(, , ) define @simplify_sqsubr_intrinsic( %a, %b) #0 { ; CHECK-LABEL: define @simplify_sqsubr_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { ; CHECK-NEXT: [[R:%.*]] = tail call @llvm.aarch64.sve.sqsubr.nxv4i32( zeroinitializer, [[A]], [[B]]) ; CHECK-NEXT: ret [[R]] ; %r = tail call @llvm.aarch64.sve.sqsubr.nxv4i32( zeroinitializer, %a, %b) ret %r } declare @llvm.aarch64.sve.srhadd.nxv4i32(, , ) define @simplify_srhadd_intrinsic( %a, %b) #0 { ; CHECK-LABEL: define @simplify_srhadd_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { ; CHECK-NEXT: [[R:%.*]] = tail call @llvm.aarch64.sve.srhadd.nxv4i32( zeroinitializer, [[A]], [[B]]) ; CHECK-NEXT: ret [[R]] ; %r = tail call @llvm.aarch64.sve.srhadd.nxv4i32( zeroinitializer, %a, %b) ret %r } declare @llvm.aarch64.sve.srshl.nxv4i32(, , ) define @simplify_srshl_intrinsic( %a, %b) #0 { ; CHECK-LABEL: define @simplify_srshl_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { ; CHECK-NEXT: ret [[A]] ; %r = tail call @llvm.aarch64.sve.srshl.nxv4i32( zeroinitializer, %a, %b) ret %r } declare @llvm.aarch64.sve.sub.nxv4i32(, , ) define @simplify_sub_intrinsic( %a, %b) #0 { ; CHECK-LABEL: define @simplify_sub_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { ; CHECK-NEXT: ret [[A]] ; %r = tail call @llvm.aarch64.sve.sub.nxv4i32( zeroinitializer, %a, %b) ret %r } declare @llvm.aarch64.sve.subr.nxv4i32(, , ) define @simplify_subr_intrinsic( %a, %b) #0 { ; CHECK-LABEL: define @simplify_subr_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { ; CHECK-NEXT: [[R:%.*]] = tail call @llvm.aarch64.sve.subr.nxv4i32( zeroinitializer, [[A]], [[B]]) ; CHECK-NEXT: ret [[R]] ; %r = tail call @llvm.aarch64.sve.subr.nxv4i32( zeroinitializer, %a, %b) ret %r } declare @llvm.aarch64.sve.suqadd.nxv4i32(, , ) define @simplify_suqadd_intrinsic( %a, %b) #0 { ; CHECK-LABEL: define @simplify_suqadd_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { ; CHECK-NEXT: [[R:%.*]] = tail call @llvm.aarch64.sve.suqadd.nxv4i32( zeroinitializer, [[A]], [[B]]) ; CHECK-NEXT: ret [[R]] ; %r = tail call @llvm.aarch64.sve.suqadd.nxv4i32( zeroinitializer, %a, %b) ret %r } declare @llvm.aarch64.sve.sxtb.nxv4i32(, , ) define @simplify_sxtb_intrinsic( %a, %b) { ; CHECK-LABEL: define @simplify_sxtb_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) { ; CHECK-NEXT: [[R:%.*]] = tail call @llvm.aarch64.sve.sxtb.nxv4i32( [[A]], zeroinitializer, [[B]]) ; CHECK-NEXT: ret [[R]] ; %r = tail call @llvm.aarch64.sve.sxtb.nxv4i32( %a, zeroinitializer, %b) ret %r } declare @llvm.aarch64.sve.sxth.nxv4i32(, , ) define @simplify_sxth_intrinsic( %a, %b) { ; CHECK-LABEL: define @simplify_sxth_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) { ; CHECK-NEXT: [[R:%.*]] = tail call @llvm.aarch64.sve.sxth.nxv4i32( [[A]], zeroinitializer, [[B]]) ; CHECK-NEXT: ret [[R]] ; %r = tail call @llvm.aarch64.sve.sxth.nxv4i32( %a, zeroinitializer, %b) ret %r } declare @llvm.aarch64.sve.sxtw.nxv2i64(, , ) define @simplify_sxtw_intrinsic( %a, %b) { ; CHECK-LABEL: define @simplify_sxtw_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) { ; CHECK-NEXT: [[R:%.*]] = tail call @llvm.aarch64.sve.sxtw.nxv2i64( [[A]], zeroinitializer, [[B]]) ; CHECK-NEXT: ret [[R]] ; %r = tail call @llvm.aarch64.sve.sxtw.nxv2i64( %a, zeroinitializer, %b) ret %r } declare @llvm.aarch64.sve.uabd.nxv4i32(, , ) define @simplify_uabd_intrinsic( %a, %b) #0 { ; CHECK-LABEL: define @simplify_uabd_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { ; CHECK-NEXT: ret [[A]] ; %r = tail call @llvm.aarch64.sve.uabd.nxv4i32( zeroinitializer, %a, %b) ret %r } declare @llvm.aarch64.sve.udiv.nxv4i32(, , ) define @simplify_udiv_intrinsic( %a, %b) #0 { ; CHECK-LABEL: define @simplify_udiv_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { ; CHECK-NEXT: ret [[A]] ; %r = tail call @llvm.aarch64.sve.udiv.nxv4i32( zeroinitializer, %a, %b) ret %r } declare @llvm.aarch64.sve.udivr.nxv4i32(, , ) define @simplify_udivr_intrinsic( %a, %b) #0 { ; CHECK-LABEL: define @simplify_udivr_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { ; CHECK-NEXT: [[R:%.*]] = tail call @llvm.aarch64.sve.udivr.nxv4i32( zeroinitializer, [[A]], [[B]]) ; CHECK-NEXT: ret [[R]] ; %r = tail call @llvm.aarch64.sve.udivr.nxv4i32( zeroinitializer, %a, %b) ret %r } declare @llvm.aarch64.sve.uhadd.nxv4i32(, , ) define @simplify_uhadd_intrinsic( %a, %b) #0 { ; CHECK-LABEL: define @simplify_uhadd_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { ; CHECK-NEXT: [[R:%.*]] = tail call @llvm.aarch64.sve.uhadd.nxv4i32( zeroinitializer, [[A]], [[B]]) ; CHECK-NEXT: ret [[R]] ; %r = tail call @llvm.aarch64.sve.uhadd.nxv4i32( zeroinitializer, %a, %b) ret %r } declare @llvm.aarch64.sve.uhsub.nxv4i32(, , ) define @simplify_uhsub_intrinsic( %a, %b) #0 { ; CHECK-LABEL: define @simplify_uhsub_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { ; CHECK-NEXT: ret [[A]] ; %r = tail call @llvm.aarch64.sve.uhsub.nxv4i32( zeroinitializer, %a, %b) ret %r } declare @llvm.aarch64.sve.uhsubr.nxv4i32(, , ) define @simplify_uhsubr_intrinsic( %a, %b) #0 { ; CHECK-LABEL: define @simplify_uhsubr_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { ; CHECK-NEXT: ret [[A]] ; %r = tail call @llvm.aarch64.sve.uhsubr.nxv4i32( zeroinitializer, %a, %b) ret %r } declare @llvm.aarch64.sve.umax.nxv4i32(, , ) define @simplify_umax_intrinsic( %a, %b) #0 { ; CHECK-LABEL: define @simplify_umax_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { ; CHECK-NEXT: ret [[A]] ; %r = tail call @llvm.aarch64.sve.umax.nxv4i32( zeroinitializer, %a, %b) ret %r } declare @llvm.aarch64.sve.umaxp.nxv4i32(, , ) define @simplify_umaxp_intrinsic( %a, %b) #0 { ; CHECK-LABEL: define @simplify_umaxp_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { ; CHECK-NEXT: [[R:%.*]] = tail call @llvm.aarch64.sve.umaxp.nxv4i32( zeroinitializer, [[A]], [[B]]) ; CHECK-NEXT: ret [[R]] ; %r = tail call @llvm.aarch64.sve.umaxp.nxv4i32( zeroinitializer, %a, %b) ret %r } declare @llvm.aarch64.sve.umin.nxv4i32(, , ) define @simplify_umin_intrinsic( %a, %b) #0 { ; CHECK-LABEL: define @simplify_umin_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { ; CHECK-NEXT: ret [[A]] ; %r = tail call @llvm.aarch64.sve.umin.nxv4i32( zeroinitializer, %a, %b) ret %r } declare @llvm.aarch64.sve.uminp.nxv4i32(, , ) define @simplify_uminp_intrinsic( %a, %b) #0 { ; CHECK-LABEL: define @simplify_uminp_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { ; CHECK-NEXT: [[R:%.*]] = tail call @llvm.aarch64.sve.uminp.nxv4i32( zeroinitializer, [[A]], [[B]]) ; CHECK-NEXT: ret [[R]] ; %r = tail call @llvm.aarch64.sve.uminp.nxv4i32( zeroinitializer, %a, %b) ret %r } declare @llvm.aarch64.sve.umulh.nxv4i32(, , ) define @simplify_umulh_intrinsic( %a, %b) #0 { ; CHECK-LABEL: define @simplify_umulh_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { ; CHECK-NEXT: ret [[A]] ; %r = tail call @llvm.aarch64.sve.umulh.nxv4i32( zeroinitializer, %a, %b) ret %r } declare @llvm.aarch64.sve.uqadd.nxv4i32(, , ) define @simplify_uqadd_intrinsic( %a, %b) #0 { ; CHECK-LABEL: define @simplify_uqadd_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { ; CHECK-NEXT: [[R:%.*]] = tail call @llvm.aarch64.sve.uqadd.nxv4i32( zeroinitializer, [[A]], [[B]]) ; CHECK-NEXT: ret [[R]] ; %r = tail call @llvm.aarch64.sve.uqadd.nxv4i32( zeroinitializer, %a, %b) ret %r } declare @llvm.aarch64.sve.uqrshl.nxv4i32(, , ) define @simplify_uqrshl_intrinsic( %a, %b) #0 { ; CHECK-LABEL: define @simplify_uqrshl_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { ; CHECK-NEXT: ret [[A]] ; %r = tail call @llvm.aarch64.sve.uqrshl.nxv4i32( zeroinitializer, %a, %b) ret %r } declare @llvm.aarch64.sve.uqshl.nxv4i32(, , ) define @simplify_uqshl_intrinsic( %a, %b) #0 { ; CHECK-LABEL: define @simplify_uqshl_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { ; CHECK-NEXT: ret [[A]] ; %r = tail call @llvm.aarch64.sve.uqshl.nxv4i32( zeroinitializer, %a, %b) ret %r } declare @llvm.aarch64.sve.uqsub.nxv4i32(, , ) define @simplify_uqsub_intrinsic( %a, %b) #0 { ; CHECK-LABEL: define @simplify_uqsub_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { ; CHECK-NEXT: ret [[A]] ; %r = tail call @llvm.aarch64.sve.uqsub.nxv4i32( zeroinitializer, %a, %b) ret %r } declare @llvm.aarch64.sve.uqsubr.nxv4i32(, , ) define @simplify_uqsubr_intrinsic( %a, %b) #0 { ; CHECK-LABEL: define @simplify_uqsubr_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { ; CHECK-NEXT: [[R:%.*]] = tail call @llvm.aarch64.sve.uqsubr.nxv4i32( zeroinitializer, [[A]], [[B]]) ; CHECK-NEXT: ret [[R]] ; %r = tail call @llvm.aarch64.sve.uqsubr.nxv4i32( zeroinitializer, %a, %b) ret %r } declare @llvm.aarch64.sve.urecpe.nxv4i32(, , ) define @simplify_urecpe_intrinsic( %a, %b) { ; CHECK-LABEL: define @simplify_urecpe_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) { ; CHECK-NEXT: [[R:%.*]] = tail call @llvm.aarch64.sve.urecpe.nxv4i32( [[A]], zeroinitializer, [[B]]) ; CHECK-NEXT: ret [[R]] ; %r = tail call @llvm.aarch64.sve.urecpe.nxv4i32( %a, zeroinitializer, %b) ret %r } declare @llvm.aarch64.sve.urhadd.nxv4i32(, , ) define @simplify_urhadd_intrinsic( %a, %b) #0 { ; CHECK-LABEL: define @simplify_urhadd_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { ; CHECK-NEXT: [[R:%.*]] = tail call @llvm.aarch64.sve.urhadd.nxv4i32( zeroinitializer, [[A]], [[B]]) ; CHECK-NEXT: ret [[R]] ; %r = tail call @llvm.aarch64.sve.urhadd.nxv4i32( zeroinitializer, %a, %b) ret %r } declare @llvm.aarch64.sve.urshl.nxv4i32(, , ) define @simplify_urshl_intrinsic( %a, %b) #0 { ; CHECK-LABEL: define @simplify_urshl_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { ; CHECK-NEXT: ret [[A]] ; %r = tail call @llvm.aarch64.sve.urshl.nxv4i32( zeroinitializer, %a, %b) ret %r } declare @llvm.aarch64.sve.ursqrte.nxv4i32(, , ) define @simplify_ursqrte_intrinsic( %a, %b) { ; CHECK-LABEL: define @simplify_ursqrte_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) { ; CHECK-NEXT: [[R:%.*]] = tail call @llvm.aarch64.sve.ursqrte.nxv4i32( [[A]], zeroinitializer, [[B]]) ; CHECK-NEXT: ret [[R]] ; %r = tail call @llvm.aarch64.sve.ursqrte.nxv4i32( %a, zeroinitializer, %b) ret %r } declare @llvm.aarch64.sve.usqadd.nxv4i32(, , ) define @simplify_usqadd_intrinsic( %a, %b) #0 { ; CHECK-LABEL: define @simplify_usqadd_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { ; CHECK-NEXT: [[R:%.*]] = tail call @llvm.aarch64.sve.usqadd.nxv4i32( zeroinitializer, [[A]], [[B]]) ; CHECK-NEXT: ret [[R]] ; %r = tail call @llvm.aarch64.sve.usqadd.nxv4i32( zeroinitializer, %a, %b) ret %r } declare @llvm.aarch64.sve.uxtb.nxv4i32(, , ) define @simplify_uxtb_intrinsic( %a, %b) { ; CHECK-LABEL: define @simplify_uxtb_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) { ; CHECK-NEXT: [[R:%.*]] = tail call @llvm.aarch64.sve.uxtb.nxv4i32( [[A]], zeroinitializer, [[B]]) ; CHECK-NEXT: ret [[R]] ; %r = tail call @llvm.aarch64.sve.uxtb.nxv4i32( %a, zeroinitializer, %b) ret %r } declare @llvm.aarch64.sve.uxth.nxv4i32(, , ) define @simplify_uxth_intrinsic( %a, %b) { ; CHECK-LABEL: define @simplify_uxth_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) { ; CHECK-NEXT: [[R:%.*]] = tail call @llvm.aarch64.sve.uxth.nxv4i32( [[A]], zeroinitializer, [[B]]) ; CHECK-NEXT: ret [[R]] ; %r = tail call @llvm.aarch64.sve.uxth.nxv4i32( %a, zeroinitializer, %b) ret %r } declare @llvm.aarch64.sve.uxtw.nxv2i64(, , ) define @simplify_uxtw_intrinsic( %a, %b) { ; CHECK-LABEL: define @simplify_uxtw_intrinsic ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) { ; CHECK-NEXT: [[R:%.*]] = tail call @llvm.aarch64.sve.uxtw.nxv2i64( [[A]], zeroinitializer, [[B]]) ; CHECK-NEXT: ret [[R]] ; %r = tail call @llvm.aarch64.sve.uxtw.nxv2i64( %a, zeroinitializer, %b) ret %r } attributes #0 = { "target-features"="+sve" }