482 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc --mtriple=loongarch32 --mattr=+32s,+lsx < %s | FileCheck %s3; RUN: llc -mtriple=loongarch64 -mattr=+lsx < %s | FileCheck %s4 5;; 1. trunc(abs(sub(sext(a),sext(b)))) -> abds(a,b) or abdu(a,b)6;; 2. abs(sub_nsw(x, y)) -> abds(a,b)7;; 3. sub(smax(a,b),smin(a,b)) -> abds(a,b) or abdu(a,b)8;; 4. select(icmp(a,b, slt|ult),sub(a,b),sub(b,a)) -> abds(a,b) or abdu(a,b)9;; 5. sub(select(icmp(a,b),a,b),select(icmp(a,b),b,a)) -> abds(a,b) or abdu(a,b)10;;11;; abds / abdu can be lowered to vabsd.{b/h/w/d} / vabsd.{b/h/w/d}u instruction12 13;; trunc(abs(sub(sext(a),sext(b)))) -> abds(a,b)14define <16 x i8> @vabsd_b(<16 x i8> %a, <16 x i8> %b) {15; CHECK-LABEL: vabsd_b:16; CHECK: # %bb.0:17; CHECK-NEXT: vabsd.b $vr0, $vr0, $vr118; CHECK-NEXT: ret19 %a.sext = sext <16 x i8> %a to <16 x i16>20 %b.sext = sext <16 x i8> %b to <16 x i16>21 %sub = sub <16 x i16> %a.sext, %b.sext22 %abs = call <16 x i16> @llvm.abs.v16i16(<16 x i16> %sub, i1 true)23 %trunc = trunc <16 x i16> %abs to <16 x i8>24 ret <16 x i8> %trunc25}26 27define <8 x i16> @vabsd_h(<8 x i16> %a, <8 x i16> %b) {28; CHECK-LABEL: vabsd_h:29; CHECK: # %bb.0:30; CHECK-NEXT: vabsd.h $vr0, $vr0, $vr131; CHECK-NEXT: ret32 %a.sext = sext <8 x i16> %a to <8 x i32>33 %b.sext = sext <8 x i16> %b to <8 x i32>34 %sub = sub <8 x i32> %a.sext, %b.sext35 %abs = call <8 x i32> @llvm.abs.v8i32(<8 x i32> %sub, i1 true)36 %trunc = trunc <8 x i32> %abs to <8 x i16>37 ret <8 x i16> %trunc38}39 40define <4 x i32> @vabsd_w(<4 x i32> %a, <4 x i32> %b) {41; CHECK-LABEL: vabsd_w:42; CHECK: # %bb.0:43; CHECK-NEXT: vabsd.w $vr0, $vr0, $vr144; CHECK-NEXT: ret45 %a.sext = sext <4 x i32> %a to <4 x i64>46 %b.sext = sext <4 x i32> %b to <4 x i64>47 %sub = sub <4 x i64> %a.sext, %b.sext48 %abs = call <4 x i64> @llvm.abs.v4i64(<4 x i64> %sub, i1 true)49 %trunc = trunc <4 x i64> %abs to <4 x i32>50 ret <4 x i32> %trunc51}52 53define <2 x i64> @vabsd_d(<2 x i64> %a, <2 x i64> %b) {54; CHECK-LABEL: vabsd_d:55; CHECK: # %bb.0:56; CHECK-NEXT: vabsd.d $vr0, $vr0, $vr157; CHECK-NEXT: ret58 %a.sext = sext <2 x i64> %a to <2 x i128>59 %b.sext = sext <2 x i64> %b to <2 x i128>60 %sub = sub <2 x i128> %a.sext, %b.sext61 %abs = call <2 x i128> @llvm.abs.v2i128(<2 x i128> %sub, i1 true)62 %trunc = trunc <2 x i128> %abs to <2 x i64>63 ret <2 x i64> %trunc64}65 66define <16 x i8> @vabsd_bu(<16 x i8> %a, <16 x i8> %b) {67; CHECK-LABEL: vabsd_bu:68; CHECK: # %bb.0:69; CHECK-NEXT: vabsd.bu $vr0, $vr0, $vr170; CHECK-NEXT: ret71 %a.zext = zext <16 x i8> %a to <16 x i16>72 %b.zext = zext <16 x i8> %b to <16 x i16>73 %sub = sub <16 x i16> %a.zext, %b.zext74 %abs = call <16 x i16> @llvm.abs.v16i16(<16 x i16> %sub, i1 true)75 %trunc = trunc <16 x i16> %abs to <16 x i8>76 ret <16 x i8> %trunc77}78 79define <8 x i16> @vabsd_hu(<8 x i16> %a, <8 x i16> %b) {80; CHECK-LABEL: vabsd_hu:81; CHECK: # %bb.0:82; CHECK-NEXT: vabsd.hu $vr0, $vr0, $vr183; CHECK-NEXT: ret84 %a.zext = zext <8 x i16> %a to <8 x i32>85 %b.zext = zext <8 x i16> %b to <8 x i32>86 %sub = sub <8 x i32> %a.zext, %b.zext87 %abs = call <8 x i32> @llvm.abs.v8i32(<8 x i32> %sub, i1 true)88 %trunc = trunc <8 x i32> %abs to <8 x i16>89 ret <8 x i16> %trunc90}91 92define <4 x i32> @vabsd_wu(<4 x i32> %a, <4 x i32> %b) {93; CHECK-LABEL: vabsd_wu:94; CHECK: # %bb.0:95; CHECK-NEXT: vabsd.wu $vr0, $vr0, $vr196; CHECK-NEXT: ret97 %a.zext = zext <4 x i32> %a to <4 x i64>98 %b.zext = zext <4 x i32> %b to <4 x i64>99 %sub = sub <4 x i64> %a.zext, %b.zext100 %abs = call <4 x i64> @llvm.abs.v4i64(<4 x i64> %sub, i1 true)101 %trunc = trunc <4 x i64> %abs to <4 x i32>102 ret <4 x i32> %trunc103}104 105define <2 x i64> @vabsd_du(<2 x i64> %a, <2 x i64> %b) {106; CHECK-LABEL: vabsd_du:107; CHECK: # %bb.0:108; CHECK-NEXT: vabsd.du $vr0, $vr0, $vr1109; CHECK-NEXT: ret110 %a.zext = zext <2 x i64> %a to <2 x i128>111 %b.zext = zext <2 x i64> %b to <2 x i128>112 %sub = sub <2 x i128> %a.zext, %b.zext113 %abs = call <2 x i128> @llvm.abs.v2i128(<2 x i128> %sub, i1 true)114 %trunc = trunc <2 x i128> %abs to <2 x i64>115 ret <2 x i64> %trunc116}117 118;; abs(sub_nsw(x, y)) -> abds(a,b)119define <16 x i8> @vabsd_b_nsw(<16 x i8> %a, <16 x i8> %b) {120; CHECK-LABEL: vabsd_b_nsw:121; CHECK: # %bb.0:122; CHECK-NEXT: vabsd.b $vr0, $vr0, $vr1123; CHECK-NEXT: ret124 %sub = sub nsw <16 x i8> %a, %b125 %abs = call <16 x i8> @llvm.abs.v16i8(<16 x i8> %sub, i1 true)126 ret <16 x i8> %abs127}128 129define <8 x i16> @vabsd_h_nsw(<8 x i16> %a, <8 x i16> %b) {130; CHECK-LABEL: vabsd_h_nsw:131; CHECK: # %bb.0:132; CHECK-NEXT: vabsd.h $vr0, $vr0, $vr1133; CHECK-NEXT: ret134 %sub = sub nsw <8 x i16> %a, %b135 %abs = call <8 x i16> @llvm.abs.v8i16(<8 x i16> %sub, i1 true)136 ret <8 x i16> %abs137}138 139define <4 x i32> @vabsd_w_nsw(<4 x i32> %a, <4 x i32> %b) {140; CHECK-LABEL: vabsd_w_nsw:141; CHECK: # %bb.0:142; CHECK-NEXT: vabsd.w $vr0, $vr0, $vr1143; CHECK-NEXT: ret144 %sub = sub nsw <4 x i32> %a, %b145 %abs = call <4 x i32> @llvm.abs.v4i32(<4 x i32> %sub, i1 true)146 ret <4 x i32> %abs147}148 149define <2 x i64> @vabsd_d_nsw(<2 x i64> %a, <2 x i64> %b) {150; CHECK-LABEL: vabsd_d_nsw:151; CHECK: # %bb.0:152; CHECK-NEXT: vabsd.d $vr0, $vr0, $vr1153; CHECK-NEXT: ret154 %sub = sub nsw <2 x i64> %a, %b155 %abs = call <2 x i64> @llvm.abs.v2i64(<2 x i64> %sub, i1 true)156 ret <2 x i64> %abs157}158 159;; sub(smax(a,b),smin(a,b)) -> abds(a,b)160define <16 x i8> @maxmin_b(<16 x i8> %0, <16 x i8> %1) {161; CHECK-LABEL: maxmin_b:162; CHECK: # %bb.0:163; CHECK-NEXT: vabsd.b $vr0, $vr0, $vr1164; CHECK-NEXT: ret165 %a = tail call <16 x i8> @llvm.smax.v16i8(<16 x i8> %0, <16 x i8> %1)166 %b = tail call <16 x i8> @llvm.smin.v16i8(<16 x i8> %0, <16 x i8> %1)167 %sub = sub <16 x i8> %a, %b168 ret <16 x i8> %sub169}170 171define <8 x i16> @maxmin_h(<8 x i16> %0, <8 x i16> %1) {172; CHECK-LABEL: maxmin_h:173; CHECK: # %bb.0:174; CHECK-NEXT: vabsd.h $vr0, $vr0, $vr1175; CHECK-NEXT: ret176 %a = tail call <8 x i16> @llvm.smax.v8i16(<8 x i16> %0, <8 x i16> %1)177 %b = tail call <8 x i16> @llvm.smin.v8i16(<8 x i16> %0, <8 x i16> %1)178 %sub = sub <8 x i16> %a, %b179 ret <8 x i16> %sub180}181 182define <4 x i32> @maxmin_w(<4 x i32> %0, <4 x i32> %1) {183; CHECK-LABEL: maxmin_w:184; CHECK: # %bb.0:185; CHECK-NEXT: vabsd.w $vr0, $vr0, $vr1186; CHECK-NEXT: ret187 %a = tail call <4 x i32> @llvm.smax.v4i32(<4 x i32> %0, <4 x i32> %1)188 %b = tail call <4 x i32> @llvm.smin.v4i32(<4 x i32> %0, <4 x i32> %1)189 %sub = sub <4 x i32> %a, %b190 ret <4 x i32> %sub191}192 193define <2 x i64> @maxmin_d(<2 x i64> %0, <2 x i64> %1) {194; CHECK-LABEL: maxmin_d:195; CHECK: # %bb.0:196; CHECK-NEXT: vabsd.d $vr0, $vr0, $vr1197; CHECK-NEXT: ret198 %a = tail call <2 x i64> @llvm.smax.v2i64(<2 x i64> %0, <2 x i64> %1)199 %b = tail call <2 x i64> @llvm.smin.v2i64(<2 x i64> %0, <2 x i64> %1)200 %sub = sub <2 x i64> %a, %b201 ret <2 x i64> %sub202}203 204define <16 x i8> @maxmin_bu(<16 x i8> %0, <16 x i8> %1) {205; CHECK-LABEL: maxmin_bu:206; CHECK: # %bb.0:207; CHECK-NEXT: vabsd.bu $vr0, $vr0, $vr1208; CHECK-NEXT: ret209 %a = tail call <16 x i8> @llvm.umax.v16i8(<16 x i8> %0, <16 x i8> %1)210 %b = tail call <16 x i8> @llvm.umin.v16i8(<16 x i8> %0, <16 x i8> %1)211 %sub = sub <16 x i8> %a, %b212 ret <16 x i8> %sub213}214 215define <8 x i16> @maxmin_hu(<8 x i16> %0, <8 x i16> %1) {216; CHECK-LABEL: maxmin_hu:217; CHECK: # %bb.0:218; CHECK-NEXT: vabsd.hu $vr0, $vr0, $vr1219; CHECK-NEXT: ret220 %a = tail call <8 x i16> @llvm.umax.v8i16(<8 x i16> %0, <8 x i16> %1)221 %b = tail call <8 x i16> @llvm.umin.v8i16(<8 x i16> %0, <8 x i16> %1)222 %sub = sub <8 x i16> %a, %b223 ret <8 x i16> %sub224}225 226define <4 x i32> @maxmin_wu(<4 x i32> %0, <4 x i32> %1) {227; CHECK-LABEL: maxmin_wu:228; CHECK: # %bb.0:229; CHECK-NEXT: vabsd.wu $vr0, $vr0, $vr1230; CHECK-NEXT: ret231 %a = tail call <4 x i32> @llvm.umax.v4i32(<4 x i32> %0, <4 x i32> %1)232 %b = tail call <4 x i32> @llvm.umin.v4i32(<4 x i32> %0, <4 x i32> %1)233 %sub = sub <4 x i32> %a, %b234 ret <4 x i32> %sub235}236 237define <2 x i64> @maxmin_du(<2 x i64> %0, <2 x i64> %1) {238; CHECK-LABEL: maxmin_du:239; CHECK: # %bb.0:240; CHECK-NEXT: vabsd.du $vr0, $vr0, $vr1241; CHECK-NEXT: ret242 %a = tail call <2 x i64> @llvm.umax.v2i64(<2 x i64> %0, <2 x i64> %1)243 %b = tail call <2 x i64> @llvm.umin.v2i64(<2 x i64> %0, <2 x i64> %1)244 %sub = sub <2 x i64> %a, %b245 ret <2 x i64> %sub246}247 248define <16 x i8> @maxmin_bu_com1(<16 x i8> %0, <16 x i8> %1) {249; CHECK-LABEL: maxmin_bu_com1:250; CHECK: # %bb.0:251; CHECK-NEXT: vabsd.bu $vr0, $vr0, $vr1252; CHECK-NEXT: ret253 %a = tail call <16 x i8> @llvm.umax.v16i8(<16 x i8> %0, <16 x i8> %1)254 %b = tail call <16 x i8> @llvm.umin.v16i8(<16 x i8> %1, <16 x i8> %0)255 %sub = sub <16 x i8> %a, %b256 ret <16 x i8> %sub257}258 259;; select(icmp(a,b, slt),sub(a,b),sub(b,a)) -> abds(a,b)260define <16 x i8> @vabsd_b_cmp(<16 x i8> %a, <16 x i8> %b) nounwind {261; CHECK-LABEL: vabsd_b_cmp:262; CHECK: # %bb.0:263; CHECK-NEXT: vabsd.b $vr0, $vr0, $vr1264; CHECK-NEXT: ret265 %cmp = icmp slt <16 x i8> %a, %b266 %ab = sub <16 x i8> %a, %b267 %ba = sub <16 x i8> %b, %a268 %sel = select <16 x i1> %cmp, <16 x i8> %ba, <16 x i8> %ab269 ret <16 x i8> %sel270}271 272define <8 x i16> @vabsd_h_cmp(<8 x i16> %a, <8 x i16> %b) nounwind {273; CHECK-LABEL: vabsd_h_cmp:274; CHECK: # %bb.0:275; CHECK-NEXT: vabsd.h $vr0, $vr0, $vr1276; CHECK-NEXT: ret277 %cmp = icmp slt <8 x i16> %a, %b278 %ab = sub <8 x i16> %a, %b279 %ba = sub <8 x i16> %b, %a280 %sel = select <8 x i1> %cmp, <8 x i16> %ba, <8 x i16> %ab281 ret <8 x i16> %sel282}283 284define <4 x i32> @vabsd_w_cmp(<4 x i32> %a, <4 x i32> %b) nounwind {285; CHECK-LABEL: vabsd_w_cmp:286; CHECK: # %bb.0:287; CHECK-NEXT: vabsd.w $vr0, $vr0, $vr1288; CHECK-NEXT: ret289 %cmp = icmp slt <4 x i32> %a, %b290 %ab = sub <4 x i32> %a, %b291 %ba = sub <4 x i32> %b, %a292 %sel = select <4 x i1> %cmp, <4 x i32> %ba, <4 x i32> %ab293 ret <4 x i32> %sel294}295 296define <2 x i64> @vabsd_d_cmp(<2 x i64> %a, <2 x i64> %b) nounwind {297; CHECK-LABEL: vabsd_d_cmp:298; CHECK: # %bb.0:299; CHECK-NEXT: vabsd.d $vr0, $vr0, $vr1300; CHECK-NEXT: ret301 %cmp = icmp slt <2 x i64> %a, %b302 %ab = sub <2 x i64> %a, %b303 %ba = sub <2 x i64> %b, %a304 %sel = select <2 x i1> %cmp, <2 x i64> %ba, <2 x i64> %ab305 ret <2 x i64> %sel306}307 308define <16 x i8> @vabsd_bu_cmp(<16 x i8> %a, <16 x i8> %b) nounwind {309; CHECK-LABEL: vabsd_bu_cmp:310; CHECK: # %bb.0:311; CHECK-NEXT: vabsd.bu $vr0, $vr0, $vr1312; CHECK-NEXT: ret313 %cmp = icmp ult <16 x i8> %a, %b314 %ab = sub <16 x i8> %a, %b315 %ba = sub <16 x i8> %b, %a316 %sel = select <16 x i1> %cmp, <16 x i8> %ba, <16 x i8> %ab317 ret <16 x i8> %sel318}319 320define <8 x i16> @vabsd_hu_cmp(<8 x i16> %a, <8 x i16> %b) nounwind {321; CHECK-LABEL: vabsd_hu_cmp:322; CHECK: # %bb.0:323; CHECK-NEXT: vabsd.hu $vr0, $vr0, $vr1324; CHECK-NEXT: ret325 %cmp = icmp ult <8 x i16> %a, %b326 %ab = sub <8 x i16> %a, %b327 %ba = sub <8 x i16> %b, %a328 %sel = select <8 x i1> %cmp, <8 x i16> %ba, <8 x i16> %ab329 ret <8 x i16> %sel330}331 332define <4 x i32> @vabsd_wu_cmp(<4 x i32> %a, <4 x i32> %b) nounwind {333; CHECK-LABEL: vabsd_wu_cmp:334; CHECK: # %bb.0:335; CHECK-NEXT: vabsd.wu $vr0, $vr0, $vr1336; CHECK-NEXT: ret337 %cmp = icmp ult <4 x i32> %a, %b338 %ab = sub <4 x i32> %a, %b339 %ba = sub <4 x i32> %b, %a340 %sel = select <4 x i1> %cmp, <4 x i32> %ba, <4 x i32> %ab341 ret <4 x i32> %sel342}343 344define <2 x i64> @vabsd_du_cmp(<2 x i64> %a, <2 x i64> %b) nounwind {345; CHECK-LABEL: vabsd_du_cmp:346; CHECK: # %bb.0:347; CHECK-NEXT: vabsd.du $vr0, $vr0, $vr1348; CHECK-NEXT: ret349 %cmp = icmp ult <2 x i64> %a, %b350 %ab = sub <2 x i64> %a, %b351 %ba = sub <2 x i64> %b, %a352 %sel = select <2 x i1> %cmp, <2 x i64> %ba, <2 x i64> %ab353 ret <2 x i64> %sel354}355 356;; sub(select(icmp(a,b, slt),a,b),select(icmp(a,b, slt),b,a)) -> abds(a,b)357define <16 x i8> @vabsd_b_select(<16 x i8> %a, <16 x i8> %b) nounwind {358; CHECK-LABEL: vabsd_b_select:359; CHECK: # %bb.0:360; CHECK-NEXT: vabsd.b $vr0, $vr0, $vr1361; CHECK-NEXT: ret362 %cmp = icmp slt <16 x i8> %a, %b363 %ab = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b364 %ba = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a365 %sub = sub <16 x i8> %ba, %ab366 ret <16 x i8> %sub367}368 369define <8 x i16> @vabsd_h_select(<8 x i16> %a, <8 x i16> %b) nounwind {370; CHECK-LABEL: vabsd_h_select:371; CHECK: # %bb.0:372; CHECK-NEXT: vabsd.h $vr0, $vr0, $vr1373; CHECK-NEXT: ret374 %cmp = icmp sle <8 x i16> %a, %b375 %ab = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b376 %ba = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a377 %sub = sub <8 x i16> %ba, %ab378 ret <8 x i16> %sub379}380 381define <4 x i32> @vabsd_w_select(<4 x i32> %a, <4 x i32> %b) nounwind {382; CHECK-LABEL: vabsd_w_select:383; CHECK: # %bb.0:384; CHECK-NEXT: vabsd.w $vr0, $vr0, $vr1385; CHECK-NEXT: ret386 %cmp = icmp sgt <4 x i32> %a, %b387 %ab = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b388 %ba = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a389 %sub = sub <4 x i32> %ab, %ba390 ret <4 x i32> %sub391}392 393define <2 x i64> @vabsd_d_select(<2 x i64> %a, <2 x i64> %b) nounwind {394; CHECK-LABEL: vabsd_d_select:395; CHECK: # %bb.0:396; CHECK-NEXT: vabsd.d $vr0, $vr0, $vr1397; CHECK-NEXT: ret398 %cmp = icmp sge <2 x i64> %a, %b399 %ab = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b400 %ba = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a401 %sub = sub <2 x i64> %ab, %ba402 ret <2 x i64> %sub403}404 405define <16 x i8> @vabsd_bu_select(<16 x i8> %a, <16 x i8> %b) nounwind {406; CHECK-LABEL: vabsd_bu_select:407; CHECK: # %bb.0:408; CHECK-NEXT: vabsd.bu $vr0, $vr0, $vr1409; CHECK-NEXT: ret410 %cmp = icmp ult <16 x i8> %a, %b411 %ab = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b412 %ba = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a413 %sub = sub <16 x i8> %ba, %ab414 ret <16 x i8> %sub415}416 417define <8 x i16> @vabsd_hu_select(<8 x i16> %a, <8 x i16> %b) nounwind {418; CHECK-LABEL: vabsd_hu_select:419; CHECK: # %bb.0:420; CHECK-NEXT: vabsd.hu $vr0, $vr0, $vr1421; CHECK-NEXT: ret422 %cmp = icmp ule <8 x i16> %a, %b423 %ab = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b424 %ba = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a425 %sub = sub <8 x i16> %ba, %ab426 ret <8 x i16> %sub427}428 429define <4 x i32> @vabsd_wu_select(<4 x i32> %a, <4 x i32> %b) nounwind {430; CHECK-LABEL: vabsd_wu_select:431; CHECK: # %bb.0:432; CHECK-NEXT: vabsd.wu $vr0, $vr0, $vr1433; CHECK-NEXT: ret434 %cmp = icmp ugt <4 x i32> %a, %b435 %ab = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b436 %ba = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a437 %sub = sub <4 x i32> %ab, %ba438 ret <4 x i32> %sub439}440 441define <2 x i64> @vabsd_du_select(<2 x i64> %a, <2 x i64> %b) nounwind {442; CHECK-LABEL: vabsd_du_select:443; CHECK: # %bb.0:444; CHECK-NEXT: vabsd.du $vr0, $vr0, $vr1445; CHECK-NEXT: ret446 %cmp = icmp uge <2 x i64> %a, %b447 %ab = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b448 %ba = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a449 %sub = sub <2 x i64> %ab, %ba450 ret <2 x i64> %sub451}452 453declare <16 x i8> @llvm.abs.v16i8(<16 x i8>, i1)454 455declare <8 x i16> @llvm.abs.v8i16(<8 x i16>, i1)456declare <16 x i16> @llvm.abs.v16i16(<16 x i16>, i1)457 458declare <4 x i32> @llvm.abs.v4i32(<4 x i32>, i1)459declare <8 x i32> @llvm.abs.v8i32(<8 x i32>, i1)460 461declare <2 x i64> @llvm.abs.v2i64(<2 x i64>, i1)462declare <4 x i64> @llvm.abs.v4i64(<4 x i64>, i1)463 464declare <2 x i128> @llvm.abs.v2i128(<2 x i128>, i1)465 466declare <16 x i8> @llvm.smax.v16i8(<16 x i8>, <16 x i8>)467declare <8 x i16> @llvm.smax.v8i16(<8 x i16>, <8 x i16>)468declare <4 x i32> @llvm.smax.v4i32(<4 x i32>, <4 x i32>)469declare <2 x i64> @llvm.smax.v2i64(<2 x i64>, <2 x i64>)470declare <16 x i8> @llvm.smin.v16i8(<16 x i8>, <16 x i8>)471declare <8 x i16> @llvm.smin.v8i16(<8 x i16>, <8 x i16>)472declare <4 x i32> @llvm.smin.v4i32(<4 x i32>, <4 x i32>)473declare <2 x i64> @llvm.smin.v2i64(<2 x i64>, <2 x i64>)474declare <16 x i8> @llvm.umax.v16i8(<16 x i8>, <16 x i8>)475declare <8 x i16> @llvm.umax.v8i16(<8 x i16>, <8 x i16>)476declare <4 x i32> @llvm.umax.v4i32(<4 x i32>, <4 x i32>)477declare <2 x i64> @llvm.umax.v2i64(<2 x i64>, <2 x i64>)478declare <16 x i8> @llvm.umin.v16i8(<16 x i8>, <16 x i8>)479declare <8 x i16> @llvm.umin.v8i16(<8 x i16>, <8 x i16>)480declare <4 x i32> @llvm.umin.v4i32(<4 x i32>, <4 x i32>)481declare <2 x i64> @llvm.umin.v2i64(<2 x i64>, <2 x i64>)482