; NOTE: Assertions have been autogenerated by utils/update_test_checks.py ; RUN: opt -S -passes=instcombine < %s | FileCheck %s target triple = "aarch64-unknown-linux-gnu" define @insr_val_into_splatted_val_int(i8 %a) #0 { ; CHECK-LABEL: @insr_val_into_splatted_val_int( ; CHECK-NEXT: [[T0:%.*]] = insertelement poison, i8 [[A:%.*]], i64 0 ; CHECK-NEXT: [[T1:%.*]] = shufflevector [[T0]], poison, zeroinitializer ; CHECK-NEXT: ret [[T1]] ; %t0 = insertelement poison, i8 %a, i64 0 %t1 = shufflevector %t0, poison, zeroinitializer %t2 = tail call @llvm.aarch64.sve.insr.nxv16i8( %t1, i8 %a) ret %t2 } define @insr_five_into_fives() #0 { ; CHECK-LABEL: @insr_five_into_fives( ; CHECK-NEXT: ret splat (i16 5) ; %t1 = tail call @llvm.aarch64.sve.insr.nxv8i16( splat (i16 5), i16 5) ret %t1 } define @insr_val_into_splatted_val_fp(float %a) #0 { ; CHECK-LABEL: @insr_val_into_splatted_val_fp( ; CHECK-NEXT: [[T0:%.*]] = insertelement poison, float [[A:%.*]], i64 0 ; CHECK-NEXT: [[T1:%.*]] = shufflevector [[T0]], poison, zeroinitializer ; CHECK-NEXT: ret [[T1]] ; %t0 = insertelement poison, float %a, i64 0 %t1 = shufflevector %t0, poison, zeroinitializer %t2 = tail call @llvm.aarch64.sve.insr.nxv4f32( %t1, float %a) ret %t2 } define @insr_zero_into_zero() #0 { ; CHECK-LABEL: @insr_zero_into_zero( ; CHECK-NEXT: ret zeroinitializer ; %t1 = tail call @llvm.aarch64.sve.insr.nxv2f64( zeroinitializer, double zeroinitializer) ret %t1 } define @insr_val_into_splatted_other(i8 %a, i8 %b) #0 { ; CHECK-LABEL: @insr_val_into_splatted_other( ; CHECK-NEXT: [[T0:%.*]] = insertelement poison, i8 [[B:%.*]], i64 0 ; CHECK-NEXT: [[T1:%.*]] = shufflevector [[T0]], poison, zeroinitializer ; CHECK-NEXT: [[T2:%.*]] = tail call @llvm.aarch64.sve.insr.nxv16i8( [[T1]], i8 [[A:%.*]]) ; CHECK-NEXT: ret [[T2]] ; %t0 = insertelement poison, i8 %b, i64 0 %t1 = shufflevector %t0, poison, zeroinitializer %t2 = tail call @llvm.aarch64.sve.insr.nxv16i8( %t1, i8 %a) ret %t2 } define @insr_three_into_fives() #0 { ; CHECK-LABEL: @insr_three_into_fives( ; CHECK-NEXT: [[T1:%.*]] = tail call @llvm.aarch64.sve.insr.nxv8i16( splat (i16 5), i16 3) ; CHECK-NEXT: ret [[T1]] ; %t1 = tail call @llvm.aarch64.sve.insr.nxv8i16( splat (i16 5), i16 3) ret %t1 } declare @llvm.aarch64.sve.insr.nxv16i8(, i8) declare @llvm.aarch64.sve.insr.nxv8i16(, i16) declare @llvm.aarch64.sve.insr.nxv4f32(, float) declare @llvm.aarch64.sve.insr.nxv2f64(, double) attributes #0 = { "target-features"="+sve" }