brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.9 KiB · 8d1caa1 Raw
141 lines · plain
1; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z10 \2; RUN:   | FileCheck -check-prefix=CHECK -check-prefix=CHECK-SCALAR %s3; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z13 \4; RUN:   | FileCheck -check-prefix=CHECK -check-prefix=CHECK-VECTOR %s5 6declare double @llvm.experimental.constrained.fma.f64(double %f1, double %f2, double %f3, metadata, metadata)7 8define double @f1(double %f1, double %f2, double %acc) #0 {9; CHECK-LABEL: f1:10; CHECK-SCALAR: msdbr %f4, %f0, %f211; CHECK-SCALAR: ldr %f0, %f412; CHECK-VECTOR: wfmsdb %f0, %f0, %f2, %f413; CHECK: br %r1414  %negacc = fneg double %acc15  %res = call double @llvm.experimental.constrained.fma.f64 (16                        double %f1, double %f2, double %negacc,17                        metadata !"round.dynamic",18                        metadata !"fpexcept.strict") #019  ret double %res20}21 22define double @f2(double %f1, ptr %ptr, double %acc) #0 {23; CHECK-LABEL: f2:24; CHECK: msdb %f2, %f0, 0(%r2)25; CHECK: ldr %f0, %f226; CHECK: br %r1427  %f2 = load double, ptr %ptr28  %negacc = fneg double %acc29  %res = call double @llvm.experimental.constrained.fma.f64 (30                        double %f1, double %f2, double %negacc,31                        metadata !"round.dynamic",32                        metadata !"fpexcept.strict") #033  ret double %res34}35 36define double @f3(double %f1, ptr %base, double %acc) #0 {37; CHECK-LABEL: f3:38; CHECK: msdb %f2, %f0, 4088(%r2)39; CHECK: ldr %f0, %f240; CHECK: br %r1441  %ptr = getelementptr double, ptr %base, i64 51142  %f2 = load double, ptr %ptr43  %negacc = fneg double %acc44  %res = call double @llvm.experimental.constrained.fma.f64 (45                        double %f1, double %f2, double %negacc,46                        metadata !"round.dynamic",47                        metadata !"fpexcept.strict") #048  ret double %res49}50 51define double @f4(double %f1, ptr %base, double %acc) #0 {52; The important thing here is that we don't generate an out-of-range53; displacement.  Other sequences besides this one would be OK.54;55; CHECK-LABEL: f4:56; CHECK: aghi %r2, 409657; CHECK: msdb %f2, %f0, 0(%r2)58; CHECK: ldr %f0, %f259; CHECK: br %r1460  %ptr = getelementptr double, ptr %base, i64 51261  %f2 = load double, ptr %ptr62  %negacc = fneg double %acc63  %res = call double @llvm.experimental.constrained.fma.f64 (64                        double %f1, double %f2, double %negacc,65                        metadata !"round.dynamic",66                        metadata !"fpexcept.strict") #067  ret double %res68}69 70define double @f5(double %f1, ptr %base, double %acc) #0 {71; Here too the important thing is that we don't generate an out-of-range72; displacement.  Other sequences besides this one would be OK.73;74; CHECK-LABEL: f5:75; CHECK: aghi %r2, -876; CHECK: msdb %f2, %f0, 0(%r2)77; CHECK: ldr %f0, %f278; CHECK: br %r1479  %ptr = getelementptr double, ptr %base, i64 -180  %f2 = load double, ptr %ptr81  %negacc = fneg double %acc82  %res = call double @llvm.experimental.constrained.fma.f64 (83                        double %f1, double %f2, double %negacc,84                        metadata !"round.dynamic",85                        metadata !"fpexcept.strict") #086  ret double %res87}88 89define double @f6(double %f1, ptr %base, i64 %index, double %acc) #0 {90; CHECK-LABEL: f6:91; CHECK: sllg %r1, %r3, 392; CHECK: msdb %f2, %f0, 0(%r1,%r2)93; CHECK: ldr %f0, %f294; CHECK: br %r1495  %ptr = getelementptr double, ptr %base, i64 %index96  %f2 = load double, ptr %ptr97  %negacc = fneg double %acc98  %res = call double @llvm.experimental.constrained.fma.f64 (99                        double %f1, double %f2, double %negacc,100                        metadata !"round.dynamic",101                        metadata !"fpexcept.strict") #0102  ret double %res103}104 105define double @f7(double %f1, ptr %base, i64 %index, double %acc) #0 {106; CHECK-LABEL: f7:107; CHECK: sllg %r1, %r3, 3108; CHECK: msdb %f2, %f0, 4088({{%r1,%r2|%r2,%r1}})109; CHECK: ldr %f0, %f2110; CHECK: br %r14111  %index2 = add i64 %index, 511112  %ptr = getelementptr double, ptr %base, i64 %index2113  %f2 = load double, ptr %ptr114  %negacc = fneg double %acc115  %res = call double @llvm.experimental.constrained.fma.f64 (116                        double %f1, double %f2, double %negacc,117                        metadata !"round.dynamic",118                        metadata !"fpexcept.strict") #0119  ret double %res120}121 122define double @f8(double %f1, ptr %base, i64 %index, double %acc) #0 {123; CHECK-LABEL: f8:124; CHECK: sllg %r1, %r3, 3125; CHECK: lay %r1, 4096({{%r1,%r2|%r2,%r1}})126; CHECK: msdb %f2, %f0, 0(%r1)127; CHECK: ldr %f0, %f2128; CHECK: br %r14129  %index2 = add i64 %index, 512130  %ptr = getelementptr double, ptr %base, i64 %index2131  %f2 = load double, ptr %ptr132  %negacc = fneg double %acc133  %res = call double @llvm.experimental.constrained.fma.f64 (134                        double %f1, double %f2, double %negacc,135                        metadata !"round.dynamic",136                        metadata !"fpexcept.strict") #0137  ret double %res138}139 140attributes #0 = { strictfp }141