diff options
Diffstat (limited to 'test/CodeGen/SystemZ/fp-sqrt-02.ll')
| -rw-r--r-- | test/CodeGen/SystemZ/fp-sqrt-02.ll | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/test/CodeGen/SystemZ/fp-sqrt-02.ll b/test/CodeGen/SystemZ/fp-sqrt-02.ll index 22a91ad..e90f7a3 100644 --- a/test/CodeGen/SystemZ/fp-sqrt-02.ll +++ b/test/CodeGen/SystemZ/fp-sqrt-02.ll @@ -71,3 +71,84 @@ define double @f6(double *%base, i64 %index) { %res = call double @llvm.sqrt.f64(double %val) ret double %res } + +; Test a case where we spill the source of at least one SQDBR. We want +; to use SQDB if possible. +define void @f7(double *%ptr) { +; CHECK: f7: +; CHECK: sqdb {{%f[0-9]+}}, 160(%r15) +; CHECK: br %r14 + %val0 = load volatile double *%ptr + %val1 = load volatile double *%ptr + %val2 = load volatile double *%ptr + %val3 = load volatile double *%ptr + %val4 = load volatile double *%ptr + %val5 = load volatile double *%ptr + %val6 = load volatile double *%ptr + %val7 = load volatile double *%ptr + %val8 = load volatile double *%ptr + %val9 = load volatile double *%ptr + %val10 = load volatile double *%ptr + %val11 = load volatile double *%ptr + %val12 = load volatile double *%ptr + %val13 = load volatile double *%ptr + %val14 = load volatile double *%ptr + %val15 = load volatile double *%ptr + %val16 = load volatile double *%ptr + + %sqrt0 = call double @llvm.sqrt.f64(double %val0) + %sqrt1 = call double @llvm.sqrt.f64(double %val1) + %sqrt2 = call double @llvm.sqrt.f64(double %val2) + %sqrt3 = call double @llvm.sqrt.f64(double %val3) + %sqrt4 = call double @llvm.sqrt.f64(double %val4) + %sqrt5 = call double @llvm.sqrt.f64(double %val5) + %sqrt6 = call double @llvm.sqrt.f64(double %val6) + %sqrt7 = call double @llvm.sqrt.f64(double %val7) + %sqrt8 = call double @llvm.sqrt.f64(double %val8) + %sqrt9 = call double @llvm.sqrt.f64(double %val9) + %sqrt10 = call double @llvm.sqrt.f64(double %val10) + %sqrt11 = call double @llvm.sqrt.f64(double %val11) + %sqrt12 = call double @llvm.sqrt.f64(double %val12) + %sqrt13 = call double @llvm.sqrt.f64(double %val13) + %sqrt14 = call double @llvm.sqrt.f64(double %val14) + %sqrt15 = call double @llvm.sqrt.f64(double %val15) + %sqrt16 = call double @llvm.sqrt.f64(double %val16) + + store volatile double %val0, double *%ptr + store volatile double %val1, double *%ptr + store volatile double %val2, double *%ptr + store volatile double %val3, double *%ptr + store volatile double %val4, double *%ptr + store volatile double %val5, double *%ptr + store volatile double %val6, double *%ptr + store volatile double %val7, double *%ptr + store volatile double %val8, double *%ptr + store volatile double %val9, double *%ptr + store volatile double %val10, double *%ptr + store volatile double %val11, double *%ptr + store volatile double %val12, double *%ptr + store volatile double %val13, double *%ptr + store volatile double %val14, double *%ptr + store volatile double %val15, double *%ptr + store volatile double %val16, double *%ptr + + store volatile double %sqrt0, double *%ptr + store volatile double %sqrt1, double *%ptr + store volatile double %sqrt2, double *%ptr + store volatile double %sqrt3, double *%ptr + store volatile double %sqrt4, double *%ptr + store volatile double %sqrt5, double *%ptr + store volatile double %sqrt6, double *%ptr + store volatile double %sqrt7, double *%ptr + store volatile double %sqrt8, double *%ptr + store volatile double %sqrt9, double *%ptr + store volatile double %sqrt10, double *%ptr + store volatile double %sqrt11, double *%ptr + store volatile double %sqrt12, double *%ptr + store volatile double %sqrt13, double *%ptr + store volatile double %sqrt14, double *%ptr + store volatile double %sqrt15, double *%ptr + store volatile double %sqrt16, double *%ptr + + ret void +} |
