brintos

brintos / llvm-project-archived public Read only

0
0
Text · 11.7 KiB · b58b852 Raw
337 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 22; RUN: llc < %s -mtriple=ve | FileCheck %s3 4;;; Test ‘llvm.smin.*’ intrinsic5;;;6;;; Syntax:7;;;   This is an overloaded intrinsic. You can use @llvm.smin on any8;;;   integer bit width or any vector of integer elements.9;;;10;;; declare i32 @llvm.smin.i32(i32 %a, i32 %b)11;;; declare <4 x i32> @llvm.smin.v4i32(<4 x i32> %a, <4 x i32> %b)12;;;13;;; Overview:14;;;   Return the smaller of %a and %b comparing the values as signed15;;;   integers. Vector intrinsics operate on a per-element basis.16;;;   The smaller element of %a and %b at a given index is returned17;;;   for that index.18;;;19;;; Arguments:20;;;   The arguments (%a and %b) may be of any integer type or a vector21;;;   with integer element type. The argument types must match each22;;;   other, and the return type must match the argument type.23;;;24;;; Note:25;;;   We test only i8/i16/i32/i64/i128.26 27; Function Attrs: mustprogress nofree nosync nounwind readnone willreturn28define signext i8 @func_smin_var_i8(i8 noundef signext %0, i8 noundef signext %1) {29; CHECK-LABEL: func_smin_var_i8:30; CHECK:       # %bb.0:31; CHECK-NEXT:    mins.w.sx %s0, %s0, %s132; CHECK-NEXT:    adds.w.sx %s0, %s0, (0)133; CHECK-NEXT:    b.l.t (, %s10)34  %3 = tail call i8 @llvm.smin.i8(i8 %0, i8 %1)35  ret i8 %336}37 38; Function Attrs: mustprogress nofree nosync nounwind readnone willreturn39define signext i16 @func_smin_var_i16(i16 noundef signext %0, i16 noundef signext %1) {40; CHECK-LABEL: func_smin_var_i16:41; CHECK:       # %bb.0:42; CHECK-NEXT:    mins.w.sx %s0, %s0, %s143; CHECK-NEXT:    adds.w.sx %s0, %s0, (0)144; CHECK-NEXT:    b.l.t (, %s10)45  %3 = tail call i16 @llvm.smin.i16(i16 %0, i16 %1)46  ret i16 %347}48 49; Function Attrs: mustprogress nofree nosync nounwind readnone willreturn50define signext i32 @func_smin_var_i32(i32 noundef signext %0, i32 noundef signext %1) {51; CHECK-LABEL: func_smin_var_i32:52; CHECK:       # %bb.0:53; CHECK-NEXT:    mins.w.sx %s0, %s0, %s154; CHECK-NEXT:    adds.w.sx %s0, %s0, (0)155; CHECK-NEXT:    b.l.t (, %s10)56  %3 = tail call i32 @llvm.smin.i32(i32 %0, i32 %1)57  ret i32 %358}59 60; Function Attrs: mustprogress nofree nosync nounwind readnone willreturn61define i64 @func_smin_var_i64(i64 noundef %0, i64 noundef %1) {62; CHECK-LABEL: func_smin_var_i64:63; CHECK:       # %bb.0:64; CHECK-NEXT:    mins.l %s0, %s0, %s165; CHECK-NEXT:    b.l.t (, %s10)66  %3 = tail call i64 @llvm.smin.i64(i64 %0, i64 %1)67  ret i64 %368}69 70; Function Attrs: mustprogress nofree nosync nounwind readnone willreturn71define i128 @func_smin_var_i128(i128 noundef %0, i128 noundef %1) {72; CHECK-LABEL: func_smin_var_i128:73; CHECK:       # %bb.0:74; CHECK-NEXT:    cmpu.l %s4, %s1, %s375; CHECK-NEXT:    cmps.l %s5, %s1, %s376; CHECK-NEXT:    or %s6, 0, (0)177; CHECK-NEXT:    or %s7, 0, (0)178; CHECK-NEXT:    cmov.l.lt %s7, (63)0, %s579; CHECK-NEXT:    cmpu.l %s5, %s0, %s280; CHECK-NEXT:    cmov.l.lt %s6, (63)0, %s581; CHECK-NEXT:    cmov.l.eq %s7, %s6, %s482; CHECK-NEXT:    cmov.w.ne %s2, %s0, %s783; CHECK-NEXT:    cmov.w.ne %s3, %s1, %s784; CHECK-NEXT:    or %s0, 0, %s285; CHECK-NEXT:    or %s1, 0, %s386; CHECK-NEXT:    b.l.t (, %s10)87  %3 = tail call i128 @llvm.smin.i128(i128 %0, i128 %1)88  ret i128 %389}90 91; Function Attrs: mustprogress nofree nosync nounwind readnone willreturn92define signext i8 @func_smin_fore_zero_i8(i8 noundef signext %0) {93; CHECK-LABEL: func_smin_fore_zero_i8:94; CHECK:       # %bb.0:95; CHECK-NEXT:    mins.w.sx %s0, 0, %s096; CHECK-NEXT:    adds.w.sx %s0, %s0, (0)197; CHECK-NEXT:    b.l.t (, %s10)98  %2 = tail call i8 @llvm.smin.i8(i8 %0, i8 0)99  ret i8 %2100}101 102; Function Attrs: mustprogress nofree nosync nounwind readnone willreturn103define signext i16 @func_smin_fore_zero_i16(i16 noundef signext %0) {104; CHECK-LABEL: func_smin_fore_zero_i16:105; CHECK:       # %bb.0:106; CHECK-NEXT:    mins.w.sx %s0, 0, %s0107; CHECK-NEXT:    adds.w.sx %s0, %s0, (0)1108; CHECK-NEXT:    b.l.t (, %s10)109  %2 = tail call i16 @llvm.smin.i16(i16 %0, i16 0)110  ret i16 %2111}112 113; Function Attrs: mustprogress nofree nosync nounwind readnone willreturn114define signext i32 @func_smin_fore_zero_i32(i32 noundef signext %0) {115; CHECK-LABEL: func_smin_fore_zero_i32:116; CHECK:       # %bb.0:117; CHECK-NEXT:    mins.w.sx %s0, 0, %s0118; CHECK-NEXT:    adds.w.sx %s0, %s0, (0)1119; CHECK-NEXT:    b.l.t (, %s10)120  %2 = tail call i32 @llvm.smin.i32(i32 %0, i32 0)121  ret i32 %2122}123 124; Function Attrs: mustprogress nofree nosync nounwind readnone willreturn125define i64 @func_smin_fore_zero_i64(i64 noundef %0) {126; CHECK-LABEL: func_smin_fore_zero_i64:127; CHECK:       # %bb.0:128; CHECK-NEXT:    mins.l %s0, 0, %s0129; CHECK-NEXT:    b.l.t (, %s10)130  %2 = tail call i64 @llvm.smin.i64(i64 %0, i64 0)131  ret i64 %2132}133 134; Function Attrs: mustprogress nofree nosync nounwind readnone willreturn135define i128 @func_smin_fore_zero_i128(i128 noundef %0) {136; CHECK-LABEL: func_smin_fore_zero_i128:137; CHECK:       # %bb.0:138; CHECK-NEXT:    sra.l %s2, %s1, 63139; CHECK-NEXT:    and %s0, %s2, %s0140; CHECK-NEXT:    and %s1, %s2, %s1141; CHECK-NEXT:    b.l.t (, %s10)142  %2 = tail call i128 @llvm.smin.i128(i128 %0, i128 0)143  ret i128 %2144}145 146; Function Attrs: mustprogress nofree nosync nounwind readnone willreturn147define signext i8 @func_smin_back_zero_i8(i8 noundef signext %0) {148; CHECK-LABEL: func_smin_back_zero_i8:149; CHECK:       # %bb.0:150; CHECK-NEXT:    mins.w.sx %s0, 0, %s0151; CHECK-NEXT:    adds.w.sx %s0, %s0, (0)1152; CHECK-NEXT:    b.l.t (, %s10)153  %2 = tail call i8 @llvm.smin.i8(i8 %0, i8 0)154  ret i8 %2155}156 157; Function Attrs: mustprogress nofree nosync nounwind readnone willreturn158define signext i16 @func_smin_back_zero_i16(i16 noundef signext %0) {159; CHECK-LABEL: func_smin_back_zero_i16:160; CHECK:       # %bb.0:161; CHECK-NEXT:    mins.w.sx %s0, 0, %s0162; CHECK-NEXT:    adds.w.sx %s0, %s0, (0)1163; CHECK-NEXT:    b.l.t (, %s10)164  %2 = tail call i16 @llvm.smin.i16(i16 %0, i16 0)165  ret i16 %2166}167 168; Function Attrs: mustprogress nofree nosync nounwind readnone willreturn169define signext i32 @func_smin_back_zero_i32(i32 noundef signext %0) {170; CHECK-LABEL: func_smin_back_zero_i32:171; CHECK:       # %bb.0:172; CHECK-NEXT:    mins.w.sx %s0, 0, %s0173; CHECK-NEXT:    adds.w.sx %s0, %s0, (0)1174; CHECK-NEXT:    b.l.t (, %s10)175  %2 = tail call i32 @llvm.smin.i32(i32 %0, i32 0)176  ret i32 %2177}178 179; Function Attrs: mustprogress nofree nosync nounwind readnone willreturn180define i64 @func_smin_back_zero_i64(i64 noundef %0) {181; CHECK-LABEL: func_smin_back_zero_i64:182; CHECK:       # %bb.0:183; CHECK-NEXT:    mins.l %s0, 0, %s0184; CHECK-NEXT:    b.l.t (, %s10)185  %2 = tail call i64 @llvm.smin.i64(i64 %0, i64 0)186  ret i64 %2187}188 189; Function Attrs: mustprogress nofree nosync nounwind readnone willreturn190define i128 @func_smin_back_zero_i128(i128 noundef %0) {191; CHECK-LABEL: func_smin_back_zero_i128:192; CHECK:       # %bb.0:193; CHECK-NEXT:    sra.l %s2, %s1, 63194; CHECK-NEXT:    and %s0, %s2, %s0195; CHECK-NEXT:    and %s1, %s2, %s1196; CHECK-NEXT:    b.l.t (, %s10)197  %2 = tail call i128 @llvm.smin.i128(i128 %0, i128 0)198  ret i128 %2199}200 201; Function Attrs: mustprogress nofree nosync nounwind readnone willreturn202define signext i8 @func_smin_fore_const_i8(i8 noundef signext %0) {203; CHECK-LABEL: func_smin_fore_const_i8:204; CHECK:       # %bb.0:205; CHECK-NEXT:    mins.w.sx %s0, -1, %s0206; CHECK-NEXT:    adds.w.sx %s0, %s0, (0)1207; CHECK-NEXT:    b.l.t (, %s10)208  %2 = tail call i8 @llvm.smin.i8(i8 %0, i8 -1)209  ret i8 %2210}211 212; Function Attrs: mustprogress nofree nosync nounwind readnone willreturn213define signext i16 @func_smin_fore_const_i16(i16 noundef signext %0) {214; CHECK-LABEL: func_smin_fore_const_i16:215; CHECK:       # %bb.0:216; CHECK-NEXT:    mins.w.sx %s0, %s0, (56)0217; CHECK-NEXT:    adds.w.sx %s0, %s0, (0)1218; CHECK-NEXT:    b.l.t (, %s10)219  %2 = tail call i16 @llvm.smin.i16(i16 %0, i16 255)220  ret i16 %2221}222 223; Function Attrs: mustprogress nofree nosync nounwind readnone willreturn224define signext i32 @func_smin_fore_const_i32(i32 noundef signext %0) {225; CHECK-LABEL: func_smin_fore_const_i32:226; CHECK:       # %bb.0:227; CHECK-NEXT:    mins.w.sx %s0, %s0, (56)0228; CHECK-NEXT:    adds.w.sx %s0, %s0, (0)1229; CHECK-NEXT:    b.l.t (, %s10)230  %2 = tail call i32 @llvm.smin.i32(i32 %0, i32 255)231  ret i32 %2232}233 234; Function Attrs: mustprogress nofree nosync nounwind readnone willreturn235define i64 @func_smin_fore_const_i64(i64 noundef %0) {236; CHECK-LABEL: func_smin_fore_const_i64:237; CHECK:       # %bb.0:238; CHECK-NEXT:    mins.l %s0, %s0, (56)0239; CHECK-NEXT:    b.l.t (, %s10)240  %2 = tail call i64 @llvm.smin.i64(i64 %0, i64 255)241  ret i64 %2242}243 244; Function Attrs: mustprogress nofree nosync nounwind readnone willreturn245define i128 @func_smin_fore_const_i128(i128 noundef %0) {246; CHECK-LABEL: func_smin_fore_const_i128:247; CHECK:       # %bb.0:248; CHECK-NEXT:    or %s2, 0, (0)1249; CHECK-NEXT:    cmps.l %s3, %s1, (0)1250; CHECK-NEXT:    or %s4, 0, (0)1251; CHECK-NEXT:    cmov.l.lt %s4, (63)0, %s3252; CHECK-NEXT:    cmpu.l %s3, %s0, (56)0253; CHECK-NEXT:    cmov.l.lt %s2, (63)0, %s3254; CHECK-NEXT:    cmov.l.eq %s4, %s2, %s1255; CHECK-NEXT:    cmov.w.eq %s0, (56)0, %s4256; CHECK-NEXT:    cmov.w.eq %s1, (0)1, %s4257; CHECK-NEXT:    b.l.t (, %s10)258  %2 = tail call i128 @llvm.smin.i128(i128 %0, i128 255)259  ret i128 %2260}261 262; Function Attrs: mustprogress nofree nosync nounwind readnone willreturn263define signext i8 @func_smin_back_const_i8(i8 noundef signext %0) {264; CHECK-LABEL: func_smin_back_const_i8:265; CHECK:       # %bb.0:266; CHECK-NEXT:    mins.w.sx %s0, -1, %s0267; CHECK-NEXT:    adds.w.sx %s0, %s0, (0)1268; CHECK-NEXT:    b.l.t (, %s10)269  %2 = tail call i8 @llvm.smin.i8(i8 %0, i8 -1)270  ret i8 %2271}272 273; Function Attrs: mustprogress nofree nosync nounwind readnone willreturn274define signext i16 @func_smin_back_const_i16(i16 noundef signext %0) {275; CHECK-LABEL: func_smin_back_const_i16:276; CHECK:       # %bb.0:277; CHECK-NEXT:    mins.w.sx %s0, %s0, (56)0278; CHECK-NEXT:    adds.w.sx %s0, %s0, (0)1279; CHECK-NEXT:    b.l.t (, %s10)280  %2 = tail call i16 @llvm.smin.i16(i16 %0, i16 255)281  ret i16 %2282}283 284; Function Attrs: mustprogress nofree nosync nounwind readnone willreturn285define signext i32 @func_smin_back_const_i32(i32 noundef signext %0) {286; CHECK-LABEL: func_smin_back_const_i32:287; CHECK:       # %bb.0:288; CHECK-NEXT:    mins.w.sx %s0, %s0, (56)0289; CHECK-NEXT:    adds.w.sx %s0, %s0, (0)1290; CHECK-NEXT:    b.l.t (, %s10)291  %2 = tail call i32 @llvm.smin.i32(i32 %0, i32 255)292  ret i32 %2293}294 295; Function Attrs: mustprogress nofree nosync nounwind readnone willreturn296define i64 @func_smin_back_const_i64(i64 noundef %0) {297; CHECK-LABEL: func_smin_back_const_i64:298; CHECK:       # %bb.0:299; CHECK-NEXT:    mins.l %s0, %s0, (56)0300; CHECK-NEXT:    b.l.t (, %s10)301  %2 = tail call i64 @llvm.smin.i64(i64 %0, i64 255)302  ret i64 %2303}304 305; Function Attrs: mustprogress nofree nosync nounwind readnone willreturn306define i128 @func_smin_back_const_i128(i128 noundef %0) {307; CHECK-LABEL: func_smin_back_const_i128:308; CHECK:       # %bb.0:309; CHECK-NEXT:    or %s2, 0, (0)1310; CHECK-NEXT:    cmps.l %s3, %s1, (0)1311; CHECK-NEXT:    or %s4, 0, (0)1312; CHECK-NEXT:    cmov.l.lt %s4, (63)0, %s3313; CHECK-NEXT:    cmpu.l %s3, %s0, (56)0314; CHECK-NEXT:    cmov.l.lt %s2, (63)0, %s3315; CHECK-NEXT:    cmov.l.eq %s4, %s2, %s1316; CHECK-NEXT:    cmov.w.eq %s0, (56)0, %s4317; CHECK-NEXT:    cmov.w.eq %s1, (0)1, %s4318; CHECK-NEXT:    b.l.t (, %s10)319  %2 = tail call i128 @llvm.smin.i128(i128 %0, i128 255)320  ret i128 %2321}322 323; Function Attrs: nocallback nofree nosync nounwind readnone speculatable willreturn324declare i32 @llvm.smin.i32(i32, i32)325 326; Function Attrs: nocallback nofree nosync nounwind readnone speculatable willreturn327declare i8 @llvm.smin.i8(i8, i8)328 329; Function Attrs: nocallback nofree nosync nounwind readnone speculatable willreturn330declare i16 @llvm.smin.i16(i16, i16)331 332; Function Attrs: nocallback nofree nosync nounwind readnone speculatable willreturn333declare i64 @llvm.smin.i64(i64, i64)334 335; Function Attrs: nocallback nofree nosync nounwind readnone speculatable willreturn336declare i128 @llvm.smin.i128(i128, i128)337