73 lines · plain
1; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z14 | FileCheck %s2 3declare fp128 @llvm.fma.f128(fp128 %f1, fp128 %f2, fp128 %f3)4 5define void @f1(ptr %ptr1, ptr %ptr2, ptr %ptr3, ptr %dst) {6; CHECK-LABEL: f1:7; CHECK-DAG: vl [[REG1:%v[0-9]+]], 0(%r2)8; CHECK-DAG: vl [[REG2:%v[0-9]+]], 0(%r3)9; CHECK-DAG: vl [[REG3:%v[0-9]+]], 0(%r4)10; CHECK: wfmaxb [[RES:%v[0-9]+]], [[REG1]], [[REG2]], [[REG3]]11; CHECK: vst [[RES]], 0(%r5)12; CHECK: br %r1413 %f1 = load fp128, ptr %ptr114 %f2 = load fp128, ptr %ptr215 %f3 = load fp128, ptr %ptr316 %res = call fp128 @llvm.fma.f128 (fp128 %f1, fp128 %f2, fp128 %f3)17 store fp128 %res, ptr %dst18 ret void19}20 21define void @f2(ptr %ptr1, ptr %ptr2, ptr %ptr3, ptr %dst) {22; CHECK-LABEL: f2:23; CHECK-DAG: vl [[REG1:%v[0-9]+]], 0(%r2)24; CHECK-DAG: vl [[REG2:%v[0-9]+]], 0(%r3)25; CHECK-DAG: vl [[REG3:%v[0-9]+]], 0(%r4)26; CHECK: wfmsxb [[RES:%v[0-9]+]], [[REG1]], [[REG2]], [[REG3]]27; CHECK: vst [[RES]], 0(%r5)28; CHECK: br %r1429 %f1 = load fp128, ptr %ptr130 %f2 = load fp128, ptr %ptr231 %f3 = load fp128, ptr %ptr332 %neg = fsub fp128 0xL00000000000000008000000000000000, %f333 %res = call fp128 @llvm.fma.f128 (fp128 %f1, fp128 %f2, fp128 %neg)34 store fp128 %res, ptr %dst35 ret void36}37 38define void @f3(ptr %ptr1, ptr %ptr2, ptr %ptr3, ptr %dst) {39; CHECK-LABEL: f3:40; CHECK-DAG: vl [[REG1:%v[0-9]+]], 0(%r2)41; CHECK-DAG: vl [[REG2:%v[0-9]+]], 0(%r3)42; CHECK-DAG: vl [[REG3:%v[0-9]+]], 0(%r4)43; CHECK: wfnmaxb [[RES:%v[0-9]+]], [[REG1]], [[REG2]], [[REG3]]44; CHECK: vst [[RES]], 0(%r5)45; CHECK: br %r1446 %f1 = load fp128, ptr %ptr147 %f2 = load fp128, ptr %ptr248 %f3 = load fp128, ptr %ptr349 %res = call fp128 @llvm.fma.f128 (fp128 %f1, fp128 %f2, fp128 %f3)50 %negres = fsub fp128 0xL00000000000000008000000000000000, %res51 store fp128 %negres, ptr %dst52 ret void53}54 55define void @f4(ptr %ptr1, ptr %ptr2, ptr %ptr3, ptr %dst) {56; CHECK-LABEL: f4:57; CHECK-DAG: vl [[REG1:%v[0-9]+]], 0(%r2)58; CHECK-DAG: vl [[REG2:%v[0-9]+]], 0(%r3)59; CHECK-DAG: vl [[REG3:%v[0-9]+]], 0(%r4)60; CHECK: wfnmsxb [[RES:%v[0-9]+]], [[REG1]], [[REG2]], [[REG3]]61; CHECK: vst [[RES]], 0(%r5)62; CHECK: br %r1463 %f1 = load fp128, ptr %ptr164 %f2 = load fp128, ptr %ptr265 %f3 = load fp128, ptr %ptr366 %neg = fsub fp128 0xL00000000000000008000000000000000, %f367 %res = call fp128 @llvm.fma.f128 (fp128 %f1, fp128 %f2, fp128 %neg)68 %negres = fsub fp128 0xL00000000000000008000000000000000, %res69 store fp128 %negres, ptr %dst70 ret void71}72 73