124 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 42; RUN: llc --mtriple=loongarch32 --mattr=+32s,+lasx < %s | FileCheck %s3; RUN: llc --mtriple=loongarch64 --mattr=+lasx < %s | FileCheck %s4 5define void @udiv_v32i8(ptr %res, ptr %a0, ptr %a1) nounwind {6; CHECK-LABEL: udiv_v32i8:7; CHECK: # %bb.0: # %entry8; CHECK-NEXT: xvld $xr0, $a1, 09; CHECK-NEXT: xvld $xr1, $a2, 010; CHECK-NEXT: xvdiv.bu $xr0, $xr0, $xr111; CHECK-NEXT: xvst $xr0, $a0, 012; CHECK-NEXT: ret13entry:14 %v0 = load <32 x i8>, ptr %a015 %v1 = load <32 x i8>, ptr %a116 %v2 = udiv <32 x i8> %v0, %v117 store <32 x i8> %v2, ptr %res18 ret void19}20 21define void @udiv_v16i16(ptr %res, ptr %a0, ptr %a1) nounwind {22; CHECK-LABEL: udiv_v16i16:23; CHECK: # %bb.0: # %entry24; CHECK-NEXT: xvld $xr0, $a1, 025; CHECK-NEXT: xvld $xr1, $a2, 026; CHECK-NEXT: xvdiv.hu $xr0, $xr0, $xr127; CHECK-NEXT: xvst $xr0, $a0, 028; CHECK-NEXT: ret29entry:30 %v0 = load <16 x i16>, ptr %a031 %v1 = load <16 x i16>, ptr %a132 %v2 = udiv <16 x i16> %v0, %v133 store <16 x i16> %v2, ptr %res34 ret void35}36 37define void @udiv_v8i32(ptr %res, ptr %a0, ptr %a1) nounwind {38; CHECK-LABEL: udiv_v8i32:39; CHECK: # %bb.0: # %entry40; CHECK-NEXT: xvld $xr0, $a1, 041; CHECK-NEXT: xvld $xr1, $a2, 042; CHECK-NEXT: xvdiv.wu $xr0, $xr0, $xr143; CHECK-NEXT: xvst $xr0, $a0, 044; CHECK-NEXT: ret45entry:46 %v0 = load <8 x i32>, ptr %a047 %v1 = load <8 x i32>, ptr %a148 %v2 = udiv <8 x i32> %v0, %v149 store <8 x i32> %v2, ptr %res50 ret void51}52 53define void @udiv_v4i64(ptr %res, ptr %a0, ptr %a1) nounwind {54; CHECK-LABEL: udiv_v4i64:55; CHECK: # %bb.0: # %entry56; CHECK-NEXT: xvld $xr0, $a1, 057; CHECK-NEXT: xvld $xr1, $a2, 058; CHECK-NEXT: xvdiv.du $xr0, $xr0, $xr159; CHECK-NEXT: xvst $xr0, $a0, 060; CHECK-NEXT: ret61entry:62 %v0 = load <4 x i64>, ptr %a063 %v1 = load <4 x i64>, ptr %a164 %v2 = udiv <4 x i64> %v0, %v165 store <4 x i64> %v2, ptr %res66 ret void67}68 69define void @udiv_v32i8_8(ptr %res, ptr %a0) nounwind {70; CHECK-LABEL: udiv_v32i8_8:71; CHECK: # %bb.0: # %entry72; CHECK-NEXT: xvld $xr0, $a1, 073; CHECK-NEXT: xvsrli.b $xr0, $xr0, 374; CHECK-NEXT: xvst $xr0, $a0, 075; CHECK-NEXT: ret76entry:77 %v0 = load <32 x i8>, ptr %a078 %v1 = udiv <32 x i8> %v0, <i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8>79 store <32 x i8> %v1, ptr %res80 ret void81}82 83define void @udiv_v16i16_8(ptr %res, ptr %a0) nounwind {84; CHECK-LABEL: udiv_v16i16_8:85; CHECK: # %bb.0: # %entry86; CHECK-NEXT: xvld $xr0, $a1, 087; CHECK-NEXT: xvsrli.h $xr0, $xr0, 388; CHECK-NEXT: xvst $xr0, $a0, 089; CHECK-NEXT: ret90entry:91 %v0 = load <16 x i16>, ptr %a092 %v1 = udiv <16 x i16> %v0, <i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8>93 store <16 x i16> %v1, ptr %res94 ret void95}96 97define void @udiv_v8i32_8(ptr %res, ptr %a0) nounwind {98; CHECK-LABEL: udiv_v8i32_8:99; CHECK: # %bb.0: # %entry100; CHECK-NEXT: xvld $xr0, $a1, 0101; CHECK-NEXT: xvsrli.w $xr0, $xr0, 3102; CHECK-NEXT: xvst $xr0, $a0, 0103; CHECK-NEXT: ret104entry:105 %v0 = load <8 x i32>, ptr %a0106 %v1 = udiv <8 x i32> %v0, <i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8>107 store <8 x i32> %v1, ptr %res108 ret void109}110 111define void @udiv_v4i64_8(ptr %res, ptr %a0) nounwind {112; CHECK-LABEL: udiv_v4i64_8:113; CHECK: # %bb.0: # %entry114; CHECK-NEXT: xvld $xr0, $a1, 0115; CHECK-NEXT: xvsrli.d $xr0, $xr0, 3116; CHECK-NEXT: xvst $xr0, $a0, 0117; CHECK-NEXT: ret118entry:119 %v0 = load <4 x i64>, ptr %a0120 %v1 = udiv <4 x i64> %v0, <i64 8, i64 8, i64 8, i64 8>121 store <4 x i64> %v1, ptr %res122 ret void123}124