brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.6 KiB · c781e63 Raw
133 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: madbr %f4, %f0, %f211; CHECK-SCALAR: ldr %f0, %f412; CHECK-VECTOR: wfmadb %f0, %f0, %f2, %f413; CHECK: br %r1414  %res = call double @llvm.experimental.constrained.fma.f64 (15                        double %f1, double %f2, double %acc,16                        metadata !"round.dynamic",17                        metadata !"fpexcept.strict") #018  ret double %res19}20 21define double @f2(double %f1, ptr %ptr, double %acc) #0 {22; CHECK-LABEL: f2:23; CHECK: madb %f2, %f0, 0(%r2)24; CHECK: ldr %f0, %f225; CHECK: br %r1426  %f2 = load double, ptr %ptr27  %res = call double @llvm.experimental.constrained.fma.f64 (28                        double %f1, double %f2, double %acc,29                        metadata !"round.dynamic",30                        metadata !"fpexcept.strict") #031  ret double %res32}33 34define double @f3(double %f1, ptr %base, double %acc) #0 {35; CHECK-LABEL: f3:36; CHECK: madb %f2, %f0, 4088(%r2)37; CHECK: ldr %f0, %f238; CHECK: br %r1439  %ptr = getelementptr double, ptr %base, i64 51140  %f2 = load double, ptr %ptr41  %res = call double @llvm.experimental.constrained.fma.f64 (42                        double %f1, double %f2, double %acc,43                        metadata !"round.dynamic",44                        metadata !"fpexcept.strict") #045  ret double %res46}47 48define double @f4(double %f1, ptr %base, double %acc) #0 {49; The important thing here is that we don't generate an out-of-range50; displacement.  Other sequences besides this one would be OK.51;52; CHECK-LABEL: f4:53; CHECK: aghi %r2, 409654; CHECK: madb %f2, %f0, 0(%r2)55; CHECK: ldr %f0, %f256; CHECK: br %r1457  %ptr = getelementptr double, ptr %base, i64 51258  %f2 = load double, ptr %ptr59  %res = call double @llvm.experimental.constrained.fma.f64 (60                        double %f1, double %f2, double %acc,61                        metadata !"round.dynamic",62                        metadata !"fpexcept.strict") #063  ret double %res64}65 66define double @f5(double %f1, ptr %base, double %acc) #0 {67; Here too the important thing is that we don't generate an out-of-range68; displacement.  Other sequences besides this one would be OK.69;70; CHECK-LABEL: f5:71; CHECK: aghi %r2, -872; CHECK: madb %f2, %f0, 0(%r2)73; CHECK: ldr %f0, %f274; CHECK: br %r1475  %ptr = getelementptr double, ptr %base, i64 -176  %f2 = load double, ptr %ptr77  %res = call double @llvm.experimental.constrained.fma.f64 (78                        double %f1, double %f2, double %acc,79                        metadata !"round.dynamic",80                        metadata !"fpexcept.strict") #081  ret double %res82}83 84define double @f6(double %f1, ptr %base, i64 %index, double %acc) #0 {85; CHECK-LABEL: f6:86; CHECK: sllg %r1, %r3, 387; CHECK: madb %f2, %f0, 0(%r1,%r2)88; CHECK: ldr %f0, %f289; CHECK: br %r1490  %ptr = getelementptr double, ptr %base, i64 %index91  %f2 = load double, ptr %ptr92  %res = call double @llvm.experimental.constrained.fma.f64 (93                        double %f1, double %f2, double %acc,94                        metadata !"round.dynamic",95                        metadata !"fpexcept.strict") #096  ret double %res97}98 99define double @f7(double %f1, ptr %base, i64 %index, double %acc) #0 {100; CHECK-LABEL: f7:101; CHECK: sllg %r1, %r3, 3102; CHECK: madb %f2, %f0, 4088({{%r1,%r2|%r2,%r1}})103; CHECK: ldr %f0, %f2104; CHECK: br %r14105  %index2 = add i64 %index, 511106  %ptr = getelementptr double, ptr %base, i64 %index2107  %f2 = load double, ptr %ptr108  %res = call double @llvm.experimental.constrained.fma.f64 (109                        double %f1, double %f2, double %acc,110                        metadata !"round.dynamic",111                        metadata !"fpexcept.strict") #0112  ret double %res113}114 115define double @f8(double %f1, ptr %base, i64 %index, double %acc) #0 {116; CHECK-LABEL: f8:117; CHECK: sllg %r1, %r3, 3118; CHECK: lay %r1, 4096({{%r1,%r2|%r2,%r1}})119; CHECK: madb %f2, %f0, 0(%r1)120; CHECK: ldr %f0, %f2121; CHECK: br %r14122  %index2 = add i64 %index, 512123  %ptr = getelementptr double, ptr %base, i64 %index2124  %f2 = load double, ptr %ptr125  %res = call double @llvm.experimental.constrained.fma.f64 (126                        double %f1, double %f2, double %acc,127                        metadata !"round.dynamic",128                        metadata !"fpexcept.strict") #0129  ret double %res130}131 132attributes #0 = { strictfp }133