1dbbc7c31Sleecheechen; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 4 2dbbc7c31Sleecheechen; RUN: llc --mtriple=loongarch64 --mattr=+lasx < %s | FileCheck %s 3dbbc7c31Sleecheechen 4dbbc7c31Sleecheechendefine void @add_v32i8(ptr %res, ptr %a0, ptr %a1) nounwind { 5dbbc7c31Sleecheechen; CHECK-LABEL: add_v32i8: 6dbbc7c31Sleecheechen; CHECK: # %bb.0: # %entry 7*a5c90e48Swanglei; CHECK-NEXT: xvld $xr0, $a1, 0 8*a5c90e48Swanglei; CHECK-NEXT: xvld $xr1, $a2, 0 9*a5c90e48Swanglei; CHECK-NEXT: xvadd.b $xr0, $xr0, $xr1 10dbbc7c31Sleecheechen; CHECK-NEXT: xvst $xr0, $a0, 0 11dbbc7c31Sleecheechen; CHECK-NEXT: ret 12dbbc7c31Sleecheechenentry: 13dbbc7c31Sleecheechen %v0 = load <32 x i8>, ptr %a0 14dbbc7c31Sleecheechen %v1 = load <32 x i8>, ptr %a1 15dbbc7c31Sleecheechen %v2 = add <32 x i8> %v0, %v1 16dbbc7c31Sleecheechen store <32 x i8> %v2, ptr %res 17dbbc7c31Sleecheechen ret void 18dbbc7c31Sleecheechen} 19dbbc7c31Sleecheechen 20dbbc7c31Sleecheechendefine void @add_v16i16(ptr %res, ptr %a0, ptr %a1) nounwind { 21dbbc7c31Sleecheechen; CHECK-LABEL: add_v16i16: 22dbbc7c31Sleecheechen; CHECK: # %bb.0: # %entry 23*a5c90e48Swanglei; CHECK-NEXT: xvld $xr0, $a1, 0 24*a5c90e48Swanglei; CHECK-NEXT: xvld $xr1, $a2, 0 25*a5c90e48Swanglei; CHECK-NEXT: xvadd.h $xr0, $xr0, $xr1 26dbbc7c31Sleecheechen; CHECK-NEXT: xvst $xr0, $a0, 0 27dbbc7c31Sleecheechen; CHECK-NEXT: ret 28dbbc7c31Sleecheechenentry: 29dbbc7c31Sleecheechen %v0 = load <16 x i16>, ptr %a0 30dbbc7c31Sleecheechen %v1 = load <16 x i16>, ptr %a1 31dbbc7c31Sleecheechen %v2 = add <16 x i16> %v0, %v1 32dbbc7c31Sleecheechen store <16 x i16> %v2, ptr %res 33dbbc7c31Sleecheechen ret void 34dbbc7c31Sleecheechen} 35dbbc7c31Sleecheechen 36dbbc7c31Sleecheechendefine void @add_v8i32(ptr %res, ptr %a0, ptr %a1) nounwind { 37dbbc7c31Sleecheechen; CHECK-LABEL: add_v8i32: 38dbbc7c31Sleecheechen; CHECK: # %bb.0: # %entry 39*a5c90e48Swanglei; CHECK-NEXT: xvld $xr0, $a1, 0 40*a5c90e48Swanglei; CHECK-NEXT: xvld $xr1, $a2, 0 41*a5c90e48Swanglei; CHECK-NEXT: xvadd.w $xr0, $xr0, $xr1 42dbbc7c31Sleecheechen; CHECK-NEXT: xvst $xr0, $a0, 0 43dbbc7c31Sleecheechen; CHECK-NEXT: ret 44dbbc7c31Sleecheechenentry: 45dbbc7c31Sleecheechen %v0 = load <8 x i32>, ptr %a0 46dbbc7c31Sleecheechen %v1 = load <8 x i32>, ptr %a1 47dbbc7c31Sleecheechen %v2 = add <8 x i32> %v0, %v1 48dbbc7c31Sleecheechen store <8 x i32> %v2, ptr %res 49dbbc7c31Sleecheechen ret void 50dbbc7c31Sleecheechen} 51dbbc7c31Sleecheechen 52dbbc7c31Sleecheechendefine void @add_v4i64(ptr %res, ptr %a0, ptr %a1) nounwind { 53dbbc7c31Sleecheechen; CHECK-LABEL: add_v4i64: 54dbbc7c31Sleecheechen; CHECK: # %bb.0: # %entry 55*a5c90e48Swanglei; CHECK-NEXT: xvld $xr0, $a1, 0 56*a5c90e48Swanglei; CHECK-NEXT: xvld $xr1, $a2, 0 57*a5c90e48Swanglei; CHECK-NEXT: xvadd.d $xr0, $xr0, $xr1 58dbbc7c31Sleecheechen; CHECK-NEXT: xvst $xr0, $a0, 0 59dbbc7c31Sleecheechen; CHECK-NEXT: ret 60dbbc7c31Sleecheechenentry: 61dbbc7c31Sleecheechen %v0 = load <4 x i64>, ptr %a0 62dbbc7c31Sleecheechen %v1 = load <4 x i64>, ptr %a1 63dbbc7c31Sleecheechen %v2 = add <4 x i64> %v0, %v1 64dbbc7c31Sleecheechen store <4 x i64> %v2, ptr %res 65dbbc7c31Sleecheechen ret void 66dbbc7c31Sleecheechen} 67dbbc7c31Sleecheechen 68dbbc7c31Sleecheechendefine void @add_v32i8_31(ptr %res, ptr %a0) nounwind { 69dbbc7c31Sleecheechen; CHECK-LABEL: add_v32i8_31: 70dbbc7c31Sleecheechen; CHECK: # %bb.0: # %entry 71dbbc7c31Sleecheechen; CHECK-NEXT: xvld $xr0, $a1, 0 72dbbc7c31Sleecheechen; CHECK-NEXT: xvaddi.bu $xr0, $xr0, 31 73dbbc7c31Sleecheechen; CHECK-NEXT: xvst $xr0, $a0, 0 74dbbc7c31Sleecheechen; CHECK-NEXT: ret 75dbbc7c31Sleecheechenentry: 76dbbc7c31Sleecheechen %v0 = load <32 x i8>, ptr %a0 77dbbc7c31Sleecheechen %v1 = add <32 x i8> %v0, <i8 31, i8 31, i8 31, i8 31, i8 31, i8 31, i8 31, i8 31, i8 31, i8 31, i8 31, i8 31, i8 31, i8 31, i8 31, i8 31, i8 31, i8 31, i8 31, i8 31, i8 31, i8 31, i8 31, i8 31, i8 31, i8 31, i8 31, i8 31, i8 31, i8 31, i8 31, i8 31> 78dbbc7c31Sleecheechen store <32 x i8> %v1, ptr %res 79dbbc7c31Sleecheechen ret void 80dbbc7c31Sleecheechen} 81dbbc7c31Sleecheechen 82dbbc7c31Sleecheechendefine void @add_v16i16_31(ptr %res, ptr %a0) nounwind { 83dbbc7c31Sleecheechen; CHECK-LABEL: add_v16i16_31: 84dbbc7c31Sleecheechen; CHECK: # %bb.0: # %entry 85dbbc7c31Sleecheechen; CHECK-NEXT: xvld $xr0, $a1, 0 86dbbc7c31Sleecheechen; CHECK-NEXT: xvaddi.hu $xr0, $xr0, 31 87dbbc7c31Sleecheechen; CHECK-NEXT: xvst $xr0, $a0, 0 88dbbc7c31Sleecheechen; CHECK-NEXT: ret 89dbbc7c31Sleecheechenentry: 90dbbc7c31Sleecheechen %v0 = load <16 x i16>, ptr %a0 91dbbc7c31Sleecheechen %v1 = add <16 x i16> %v0, <i16 31, i16 31, i16 31, i16 31, i16 31, i16 31, i16 31, i16 31, i16 31, i16 31, i16 31, i16 31, i16 31, i16 31, i16 31, i16 31> 92dbbc7c31Sleecheechen store <16 x i16> %v1, ptr %res 93dbbc7c31Sleecheechen ret void 94dbbc7c31Sleecheechen} 95dbbc7c31Sleecheechen 96dbbc7c31Sleecheechendefine void @add_v8i32_31(ptr %res, ptr %a0) nounwind { 97dbbc7c31Sleecheechen; CHECK-LABEL: add_v8i32_31: 98dbbc7c31Sleecheechen; CHECK: # %bb.0: # %entry 99dbbc7c31Sleecheechen; CHECK-NEXT: xvld $xr0, $a1, 0 100dbbc7c31Sleecheechen; CHECK-NEXT: xvaddi.wu $xr0, $xr0, 31 101dbbc7c31Sleecheechen; CHECK-NEXT: xvst $xr0, $a0, 0 102dbbc7c31Sleecheechen; CHECK-NEXT: ret 103dbbc7c31Sleecheechenentry: 104dbbc7c31Sleecheechen %v0 = load <8 x i32>, ptr %a0 105dbbc7c31Sleecheechen %v1 = add <8 x i32> %v0, <i32 31, i32 31, i32 31, i32 31, i32 31, i32 31, i32 31, i32 31> 106dbbc7c31Sleecheechen store <8 x i32> %v1, ptr %res 107dbbc7c31Sleecheechen ret void 108dbbc7c31Sleecheechen} 109dbbc7c31Sleecheechen 110dbbc7c31Sleecheechendefine void @add_v4i64_31(ptr %res, ptr %a0) nounwind { 111dbbc7c31Sleecheechen; CHECK-LABEL: add_v4i64_31: 112dbbc7c31Sleecheechen; CHECK: # %bb.0: # %entry 113dbbc7c31Sleecheechen; CHECK-NEXT: xvld $xr0, $a1, 0 114dbbc7c31Sleecheechen; CHECK-NEXT: xvaddi.du $xr0, $xr0, 31 115dbbc7c31Sleecheechen; CHECK-NEXT: xvst $xr0, $a0, 0 116dbbc7c31Sleecheechen; CHECK-NEXT: ret 117dbbc7c31Sleecheechenentry: 118dbbc7c31Sleecheechen %v0 = load <4 x i64>, ptr %a0 119dbbc7c31Sleecheechen %v1 = add <4 x i64> %v0, <i64 31, i64 31, i64 31, i64 31> 120dbbc7c31Sleecheechen store <4 x i64> %v1, ptr %res 121dbbc7c31Sleecheechen ret void 122dbbc7c31Sleecheechen} 123