98 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=aarch64-none-linux-gnu -mattr=+sve | FileCheck %s3 4define <2 x i64> @test_mul_add_2x64(<2 x i64> %a, <2 x i64> %b, <2 x i64> %c) {5; CHECK-LABEL: test_mul_add_2x64:6; CHECK: // %bb.0:7; CHECK-NEXT: ptrue p0.d, vl28; CHECK-NEXT: // kill: def $q0 killed $q0 def $z09; CHECK-NEXT: // kill: def $q2 killed $q2 def $z210; CHECK-NEXT: // kill: def $q1 killed $q1 def $z111; CHECK-NEXT: mla z0.d, p0/m, z1.d, z2.d12; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z013; CHECK-NEXT: ret14 %mul = mul <2 x i64> %b, %c15 %add = add <2 x i64> %a, %mul16 ret <2 x i64> %add17}18 19define <1 x i64> @test_mul_add_1x64(<1 x i64> %a, <1 x i64> %b, <1 x i64> %c) {20; CHECK-LABEL: test_mul_add_1x64:21; CHECK: // %bb.0:22; CHECK-NEXT: ptrue p0.d, vl123; CHECK-NEXT: // kill: def $d0 killed $d0 def $z024; CHECK-NEXT: // kill: def $d2 killed $d2 def $z225; CHECK-NEXT: // kill: def $d1 killed $d1 def $z126; CHECK-NEXT: mla z0.d, p0/m, z1.d, z2.d27; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z028; CHECK-NEXT: ret29 %mul = mul <1 x i64> %b, %c30 %add = add <1 x i64> %mul, %a31 ret <1 x i64> %add32}33 34define <2 x i64> @test_mul_sub_2x64(<2 x i64> %a, <2 x i64> %b, <2 x i64> %c) {35; CHECK-LABEL: test_mul_sub_2x64:36; CHECK: // %bb.0:37; CHECK-NEXT: ptrue p0.d, vl238; CHECK-NEXT: // kill: def $q0 killed $q0 def $z039; CHECK-NEXT: // kill: def $q2 killed $q2 def $z240; CHECK-NEXT: // kill: def $q1 killed $q1 def $z141; CHECK-NEXT: mls z0.d, p0/m, z1.d, z2.d42; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z043; CHECK-NEXT: ret44 %mul = mul <2 x i64> %b, %c45 %sub = sub <2 x i64> %a, %mul46 ret <2 x i64> %sub47}48 49define <2 x i64> @test_mul_sub_2x64_2(<2 x i64> %a, <2 x i64> %b, <2 x i64> %c, <2 x i64> %d) {50; CHECK-LABEL: test_mul_sub_2x64_2:51; CHECK: // %bb.0:52; CHECK-NEXT: ptrue p0.d, vl253; CHECK-NEXT: // kill: def $q0 killed $q0 def $z054; CHECK-NEXT: // kill: def $q1 killed $q1 def $z155; CHECK-NEXT: // kill: def $q2 killed $q2 def $z256; CHECK-NEXT: // kill: def $q3 killed $q3 def $z357; CHECK-NEXT: sdiv z0.d, p0/m, z0.d, z1.d58; CHECK-NEXT: mul z2.d, p0/m, z2.d, z3.d59; CHECK-NEXT: sub v0.2d, v2.2d, v0.2d60; CHECK-NEXT: ret61 %div = sdiv <2 x i64> %a, %b62 %mul = mul <2 x i64> %c, %d63 %sub = sub <2 x i64> %mul, %div64 ret <2 x i64> %sub65}66 67define <2 x i64> @test_mul_sub_2x64_3(<2 x i64> %a, <2 x i64> %b, <2 x i64> %c, <2 x i64> %d) {68; CHECK-LABEL: test_mul_sub_2x64_3:69; CHECK: // %bb.0:70; CHECK-NEXT: ptrue p0.d, vl271; CHECK-NEXT: // kill: def $q0 killed $q0 def $z072; CHECK-NEXT: // kill: def $q1 killed $q1 def $z173; CHECK-NEXT: // kill: def $q3 killed $q3 def $z374; CHECK-NEXT: // kill: def $q2 killed $q2 def $z275; CHECK-NEXT: sdiv z0.d, p0/m, z0.d, z1.d76; CHECK-NEXT: mls z0.d, p0/m, z2.d, z3.d77; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z078; CHECK-NEXT: ret79 %div = sdiv <2 x i64> %a, %b80 %mul = mul <2 x i64> %c, %d81 %sub = sub <2 x i64> %div, %mul82 ret <2 x i64> %sub83}84 85define <1 x i64> @test_mul_sub_1x64(<1 x i64> %a, <1 x i64> %b, <1 x i64> %c) {86; CHECK-LABEL: test_mul_sub_1x64:87; CHECK: // %bb.0:88; CHECK-NEXT: ptrue p0.d, vl189; CHECK-NEXT: // kill: def $d1 killed $d1 def $z190; CHECK-NEXT: // kill: def $d2 killed $d2 def $z291; CHECK-NEXT: mul z1.d, p0/m, z1.d, z2.d92; CHECK-NEXT: sub d0, d1, d093; CHECK-NEXT: ret94 %mul = mul <1 x i64> %b, %c95 %sub = sub <1 x i64> %mul, %a96 ret <1 x i64> %sub97}98