brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.0 KiB · 6696f94 Raw
120 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 62; RUN: llc < %s -mtriple=aarch64 -mattr=+neon | FileCheck %s3; RUN: llc < %s -mtriple=aarch64 -mattr=+neon,+sve | FileCheck %s --check-prefix=CHECK-SVE4 5define <2 x i64> @smax_v2i64(<2 x i64> %a, <2 x i64> %b){6; CHECK-LABEL: smax_v2i64:7; CHECK:       // %bb.0: // %entry8; CHECK-NEXT:    cmgt v2.2d, v0.2d, v1.2d9; CHECK-NEXT:    bif v0.16b, v1.16b, v2.16b10; CHECK-NEXT:    ret11;12; CHECK-SVE-LABEL: smax_v2i64:13; CHECK-SVE:       // %bb.0: // %entry14; CHECK-SVE-NEXT:    ptrue p0.d, vl215; CHECK-SVE-NEXT:    // kill: def $q0 killed $q0 def $z016; CHECK-SVE-NEXT:    // kill: def $q1 killed $q1 def $z117; CHECK-SVE-NEXT:    smax z0.d, p0/m, z0.d, z1.d18; CHECK-SVE-NEXT:    // kill: def $q0 killed $q0 killed $z019; CHECK-SVE-NEXT:    ret20entry:21  %0 = call <2 x i64> @llvm.smax.v2i64(<2 x i64> %a, <2 x i64> %b)22  ret <2 x i64> %023}24 25define <2 x i64> @smin_v2i64(<2 x i64> %a, <2 x i64> %b) {26; CHECK-LABEL: smin_v2i64:27; CHECK:       // %bb.0: // %entry28; CHECK-NEXT:    cmgt v2.2d, v1.2d, v0.2d29; CHECK-NEXT:    bif v0.16b, v1.16b, v2.16b30; CHECK-NEXT:    ret31;32; CHECK-SVE-LABEL: smin_v2i64:33; CHECK-SVE:       // %bb.0: // %entry34; CHECK-SVE-NEXT:    ptrue p0.d, vl235; CHECK-SVE-NEXT:    // kill: def $q0 killed $q0 def $z036; CHECK-SVE-NEXT:    // kill: def $q1 killed $q1 def $z137; CHECK-SVE-NEXT:    smin z0.d, p0/m, z0.d, z1.d38; CHECK-SVE-NEXT:    // kill: def $q0 killed $q0 killed $z039; CHECK-SVE-NEXT:    ret40entry:41  %0 = call <2 x i64> @llvm.smin.v2i64(<2 x i64> %a, <2 x i64> %b)42  ret <2 x i64> %043}44 45define <2 x i64> @umax_v2i64(<2 x i64> %a, <2 x i64> %b){46; CHECK-LABEL: umax_v2i64:47; CHECK:       // %bb.0: // %entry48; CHECK-NEXT:    cmhi v2.2d, v0.2d, v1.2d49; CHECK-NEXT:    bif v0.16b, v1.16b, v2.16b50; CHECK-NEXT:    ret51;52; CHECK-SVE-LABEL: umax_v2i64:53; CHECK-SVE:       // %bb.0: // %entry54; CHECK-SVE-NEXT:    ptrue p0.d, vl255; CHECK-SVE-NEXT:    // kill: def $q0 killed $q0 def $z056; CHECK-SVE-NEXT:    // kill: def $q1 killed $q1 def $z157; CHECK-SVE-NEXT:    umax z0.d, p0/m, z0.d, z1.d58; CHECK-SVE-NEXT:    // kill: def $q0 killed $q0 killed $z059; CHECK-SVE-NEXT:    ret60entry:61  %0 = call <2 x i64> @llvm.umax.v2i64(<2 x i64> %a, <2 x i64> %b)62  ret <2 x i64> %063}64 65define <2 x i64> @umin_v2i64(<2 x i64> %a, <2 x i64> %b) {66; CHECK-LABEL: umin_v2i64:67; CHECK:       // %bb.0: // %entry68; CHECK-NEXT:    cmhi v2.2d, v1.2d, v0.2d69; CHECK-NEXT:    bif v0.16b, v1.16b, v2.16b70; CHECK-NEXT:    ret71;72; CHECK-SVE-LABEL: umin_v2i64:73; CHECK-SVE:       // %bb.0: // %entry74; CHECK-SVE-NEXT:    ptrue p0.d, vl275; CHECK-SVE-NEXT:    // kill: def $q0 killed $q0 def $z076; CHECK-SVE-NEXT:    // kill: def $q1 killed $q1 def $z177; CHECK-SVE-NEXT:    umin z0.d, p0/m, z0.d, z1.d78; CHECK-SVE-NEXT:    // kill: def $q0 killed $q0 killed $z079; CHECK-SVE-NEXT:    ret80entry:81  %0 = call <2 x i64> @llvm.umin.v2i64(<2 x i64> %a, <2 x i64> %b)82  ret <2 x i64> %083}84 85define <1 x i64> @smax_v1i64(<1 x i64> %a, <1 x i64> %b){86; CHECK-LABEL: smax_v1i64:87; CHECK:       // %bb.0: // %entry88; CHECK-NEXT:    cmgt d2, d0, d189; CHECK-NEXT:    bif v0.8b, v1.8b, v2.8b90; CHECK-NEXT:    ret91;92; CHECK-SVE-LABEL: smax_v1i64:93; CHECK-SVE:       // %bb.0: // %entry94; CHECK-SVE-NEXT:    ptrue p0.d, vl195; CHECK-SVE-NEXT:    // kill: def $d0 killed $d0 def $z096; CHECK-SVE-NEXT:    // kill: def $d1 killed $d1 def $z197; CHECK-SVE-NEXT:    smax z0.d, p0/m, z0.d, z1.d98; CHECK-SVE-NEXT:    // kill: def $d0 killed $d0 killed $z099; CHECK-SVE-NEXT:    ret100entry:101  %0 = call <1 x i64> @llvm.smax.v2i64(<1 x i64> %a, <1 x i64> %b)102  ret <1 x i64> %0103}104 105; This is legal for Neon, so this should use the Neon smax.106define <4 x i32> @smax_v4i32(<4 x i32> %a, <4 x i32> %b){107; CHECK-LABEL: smax_v4i32:108; CHECK:       // %bb.0: // %entry109; CHECK-NEXT:    smax v0.4s, v0.4s, v1.4s110; CHECK-NEXT:    ret111;112; CHECK-SVE-LABEL: smax_v4i32:113; CHECK-SVE:       // %bb.0: // %entry114; CHECK-SVE-NEXT:    smax v0.4s, v0.4s, v1.4s115; CHECK-SVE-NEXT:    ret116entry:117  %0 = call <4 x i32> @llvm.smax.v4i32(<4 x i32> %a, <4 x i32> %b)118  ret <4 x i32> %0119}120