87 lines · plain
1; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z14 | FileCheck %s2 3declare fp128 @llvm.experimental.constrained.fma.f128(fp128 %f1, fp128 %f2, fp128 %f3, metadata, metadata)4 5define void @f1(ptr %ptr1, ptr %ptr2, ptr %ptr3, ptr %dst) #0 {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.experimental.constrained.fma.f128 (17 fp128 %f1, fp128 %f2, fp128 %f3,18 metadata !"round.dynamic",19 metadata !"fpexcept.strict") #020 store fp128 %res, ptr %dst21 ret void22}23 24define void @f2(ptr %ptr1, ptr %ptr2, ptr %ptr3, ptr %dst) #0 {25; CHECK-LABEL: f2:26; CHECK-DAG: vl [[REG1:%v[0-9]+]], 0(%r2)27; CHECK-DAG: vl [[REG2:%v[0-9]+]], 0(%r3)28; CHECK-DAG: vl [[REG3:%v[0-9]+]], 0(%r4)29; CHECK: wfmsxb [[RES:%v[0-9]+]], [[REG1]], [[REG2]], [[REG3]]30; CHECK: vst [[RES]], 0(%r5)31; CHECK: br %r1432 %f1 = load fp128, ptr %ptr133 %f2 = load fp128, ptr %ptr234 %f3 = load fp128, ptr %ptr335 %neg = fsub fp128 0xL00000000000000008000000000000000, %f336 %res = call fp128 @llvm.experimental.constrained.fma.f128 (37 fp128 %f1, fp128 %f2, fp128 %neg,38 metadata !"round.dynamic",39 metadata !"fpexcept.strict") #040 store fp128 %res, ptr %dst41 ret void42}43 44define void @f3(ptr %ptr1, ptr %ptr2, ptr %ptr3, ptr %dst) #0 {45; CHECK-LABEL: f3:46; CHECK-DAG: vl [[REG1:%v[0-9]+]], 0(%r2)47; CHECK-DAG: vl [[REG2:%v[0-9]+]], 0(%r3)48; CHECK-DAG: vl [[REG3:%v[0-9]+]], 0(%r4)49; CHECK: wfnmaxb [[RES:%v[0-9]+]], [[REG1]], [[REG2]], [[REG3]]50; CHECK: vst [[RES]], 0(%r5)51; CHECK: br %r1452 %f1 = load fp128, ptr %ptr153 %f2 = load fp128, ptr %ptr254 %f3 = load fp128, ptr %ptr355 %res = call fp128 @llvm.experimental.constrained.fma.f128 (56 fp128 %f1, fp128 %f2, fp128 %f3,57 metadata !"round.dynamic",58 metadata !"fpexcept.strict") #059 %negres = fsub fp128 0xL00000000000000008000000000000000, %res60 store fp128 %negres, ptr %dst61 ret void62}63 64define void @f4(ptr %ptr1, ptr %ptr2, ptr %ptr3, ptr %dst) #0 {65; CHECK-LABEL: f4:66; CHECK-DAG: vl [[REG1:%v[0-9]+]], 0(%r2)67; CHECK-DAG: vl [[REG2:%v[0-9]+]], 0(%r3)68; CHECK-DAG: vl [[REG3:%v[0-9]+]], 0(%r4)69; CHECK: wfnmsxb [[RES:%v[0-9]+]], [[REG1]], [[REG2]], [[REG3]]70; CHECK: vst [[RES]], 0(%r5)71; CHECK: br %r1472 %f1 = load fp128, ptr %ptr173 %f2 = load fp128, ptr %ptr274 %f3 = load fp128, ptr %ptr375 %neg = fsub fp128 0xL00000000000000008000000000000000, %f376 %res = call fp128 @llvm.experimental.constrained.fma.f128 (77 fp128 %f1, fp128 %f2, fp128 %neg,78 metadata !"round.dynamic",79 metadata !"fpexcept.strict") #080 %negres = fsub fp128 0xL00000000000000008000000000000000, %res81 store fp128 %negres, ptr %dst82 ret void83}84 85attributes #0 = { strictfp }86 87