[compiler-rt] 7661d3b - Speculatively fix build bots
Aaron Ballman via llvm-commits
llvm-commits at lists.llvm.org
Wed Apr 20 09:02:43 PDT 2022
Author: Aaron Ballman
Date: 2022-04-20T12:02:16-04:00
New Revision: 7661d3bc9d57e70bab7d81e91ec8e69df92ecff5
URL: https://github.com/llvm/llvm-project/commit/7661d3bc9d57e70bab7d81e91ec8e69df92ecff5
DIFF: https://github.com/llvm/llvm-project/commit/7661d3bc9d57e70bab7d81e91ec8e69df92ecff5.diff
LOG: Speculatively fix build bots
This should address the issues found by:
https://lab.llvm.org/buildbot/#/builders/105/builds/24292
Added:
Modified:
compiler-rt/test/builtins/Unit/ppc/qadd_test.c
compiler-rt/test/builtins/Unit/ppc/qdiv_test.c
compiler-rt/test/builtins/Unit/ppc/qmul_test.c
compiler-rt/test/builtins/Unit/ppc/qsub_test.c
Removed:
################################################################################
diff --git a/compiler-rt/test/builtins/Unit/ppc/qadd_test.c b/compiler-rt/test/builtins/Unit/ppc/qadd_test.c
index 242850fff377b..3261be9d22350 100644
--- a/compiler-rt/test/builtins/Unit/ppc/qadd_test.c
+++ b/compiler-rt/test/builtins/Unit/ppc/qadd_test.c
@@ -4,6 +4,7 @@
#include "DD.h"
long double __gcc_qadd(long double x, long double y);
+int memcmp(const void *, const void *, __typeof__(sizeof(0)));
double testAccuracy();
int testEdgeCases();
@@ -11,10 +12,10 @@ int testEdgeCases();
int main(int argc, char *argv[]) {
if (testEdgeCases())
return 1;
-
+
if (testAccuracy() > 1.0)
return 1;
-
+
return 0;
}
@@ -114,11 +115,11 @@ int testEdgeCases() {
b.lo = edgeCases[i].ylo;
r.hi = edgeCases[i].rhi;
r.lo = edgeCases[i].rlo;
-
+
int error;
-
+
DD c = { .ld = __gcc_qadd(a.ld, b.ld) };
-
+
if (r.hi != r.hi) {
if (c.hi == c.hi)
error = 1;
@@ -130,16 +131,16 @@ int testEdgeCases() {
else if (r.hi == 0.0)
error = memcmp(&c, &r, sizeof(DD));
-
+
else
error = ((c.hi != r.hi) || (c.lo != r.lo));
-
+
if (error) {
printf("Error on edge case %a + %a: expected (%a, %a), got (%a, %a).\n", a.hi, b.hi, r.hi, r.lo, c.hi, c.lo);
return 1;
}
}
-
+
return 0;
}
@@ -147,117 +148,117 @@ int testEdgeCases() {
/*
Code for generating the test cases, requires the mpfr package to run.
-
+
#include <stdio.h>
#include <stdlib.h>
#include <mpfr.h>
-
+
#ifdef __x86_64__
#define randlength 2
#else
#define randlength 4
#endif
-
-
+
+
int main(int argc, char *argv[]) {
-
+
MPFR_DECL_INIT(a, 106);
MPFR_DECL_INIT(b, 106);
MPFR_DECL_INIT(c, 106);
-
+
MPFR_DECL_INIT(tmp, 53);
-
+
int exponent_range = atoi(argv[1]);
-
+
int i;
for (i=0; i<128; ++i) {
mpfr_random2(a, randlength, exponent_range);
mpfr_random2(b, randlength, exponent_range);
mpfr_add(c, a, b, GMP_RNDN);
-
+
double ahi = mpfr_get_d(a, GMP_RNDN);
mpfr_set_d(tmp, ahi, GMP_RNDN);
mpfr_sub(tmp, a, tmp, GMP_RNDN);
double alo = mpfr_get_d(tmp, GMP_RNDN);
printf("{%0.13a, %0.13a, ", ahi, alo);
-
+
double bhi = mpfr_get_d(b, GMP_RNDN);
mpfr_set_d(tmp, bhi, GMP_RNDN);
mpfr_sub(tmp, b, tmp, GMP_RNDN);
double blo = mpfr_get_d(tmp, GMP_RNDN);
printf("%0.13a, %0.13a, ", bhi, blo);
-
+
double chi = mpfr_get_d(c, GMP_RNDN);
mpfr_set_d(tmp, chi, GMP_RNDN);
mpfr_sub(tmp, c, tmp, GMP_RNDN);
double clo = mpfr_get_d(tmp, GMP_RNDN);
printf("%0.13a, %0.13a},\n", chi, clo);
-
+
mpfr_neg(b, b, GMP_RNDN);
mpfr_add(c, a, b, GMP_RNDN);
-
+
ahi = mpfr_get_d(a, GMP_RNDN);
mpfr_set_d(tmp, ahi, GMP_RNDN);
mpfr_sub(tmp, a, tmp, GMP_RNDN);
alo = mpfr_get_d(tmp, GMP_RNDN);
printf("{%0.13a, %0.13a, ", ahi, alo);
-
+
bhi = mpfr_get_d(b, GMP_RNDN);
mpfr_set_d(tmp, bhi, GMP_RNDN);
mpfr_sub(tmp, b, tmp, GMP_RNDN);
blo = mpfr_get_d(tmp, GMP_RNDN);
printf("%0.13a, %0.13a, ", bhi, blo);
-
+
chi = mpfr_get_d(c, GMP_RNDN);
mpfr_set_d(tmp, chi, GMP_RNDN);
mpfr_sub(tmp, c, tmp, GMP_RNDN);
clo = mpfr_get_d(tmp, GMP_RNDN);
printf("%0.13a, %0.13a},\n", chi, clo);
-
+
mpfr_neg(a, a, GMP_RNDN);
mpfr_neg(b, b, GMP_RNDN);
mpfr_add(c, a, b, GMP_RNDN);
-
+
ahi = mpfr_get_d(a, GMP_RNDN);
mpfr_set_d(tmp, ahi, GMP_RNDN);
mpfr_sub(tmp, a, tmp, GMP_RNDN);
alo = mpfr_get_d(tmp, GMP_RNDN);
printf("{%0.13a, %0.13a, ", ahi, alo);
-
+
bhi = mpfr_get_d(b, GMP_RNDN);
mpfr_set_d(tmp, bhi, GMP_RNDN);
mpfr_sub(tmp, b, tmp, GMP_RNDN);
blo = mpfr_get_d(tmp, GMP_RNDN);
printf("%0.13a, %0.13a, ", bhi, blo);
-
+
chi = mpfr_get_d(c, GMP_RNDN);
mpfr_set_d(tmp, chi, GMP_RNDN);
mpfr_sub(tmp, c, tmp, GMP_RNDN);
clo = mpfr_get_d(tmp, GMP_RNDN);
printf("%0.13a, %0.13a},\n", chi, clo);
-
+
mpfr_neg(b, b, GMP_RNDN);
mpfr_add(c, a, b, GMP_RNDN);
-
+
ahi = mpfr_get_d(a, GMP_RNDN);
mpfr_set_d(tmp, ahi, GMP_RNDN);
mpfr_sub(tmp, a, tmp, GMP_RNDN);
alo = mpfr_get_d(tmp, GMP_RNDN);
printf("{%0.13a, %0.13a, ", ahi, alo);
-
+
bhi = mpfr_get_d(b, GMP_RNDN);
mpfr_set_d(tmp, bhi, GMP_RNDN);
mpfr_sub(tmp, b, tmp, GMP_RNDN);
blo = mpfr_get_d(tmp, GMP_RNDN);
printf("%0.13a, %0.13a, ", bhi, blo);
-
+
chi = mpfr_get_d(c, GMP_RNDN);
mpfr_set_d(tmp, chi, GMP_RNDN);
mpfr_sub(tmp, c, tmp, GMP_RNDN);
clo = mpfr_get_d(tmp, GMP_RNDN);
printf("%0.13a, %0.13a},\n", chi, clo);
}
-
+
return 0;
}
@@ -1813,9 +1814,9 @@ const int numAccuracyTests = sizeof(accuracyTests) / sizeof(struct testVector);
double testAccuracy() {
int i;
DD a, b, c, r;
-
+
double worstUlps = 0.5;
-
+
for (i=0; i<numAccuracyTests; ++i) {
a.hi = accuracyTests[i].xhi;
a.lo = accuracyTests[i].xlo;
@@ -1823,17 +1824,17 @@ double testAccuracy() {
b.lo = accuracyTests[i].ylo;
r.hi = accuracyTests[i].rhi;
r.lo = accuracyTests[i].rlo;
-
+
DD c = { .ld = __gcc_qadd(a.ld, b.ld) };
-
+
double error = __builtin_fabs(((r.hi - c.hi) + r.lo) - c.lo);
-
+
if (error != 0.0) {
-
+
int exponent = ilogb(r.hi);
exponent = (exponent < -1022 ? -1022 : exponent);
double ulpError = scalbn(error, 106 - exponent);
-
+
if (ulpError > worstUlps) {
#ifdef PRINT_ACCURACY_INFORMATION
printf("New worst rounding error for (%a,%a) + (%a,%a):\n", a.hi, a.lo, b.hi, b.lo);
@@ -1845,7 +1846,7 @@ double testAccuracy() {
}
}
}
-
+
return worstUlps;
}
diff --git a/compiler-rt/test/builtins/Unit/ppc/qdiv_test.c b/compiler-rt/test/builtins/Unit/ppc/qdiv_test.c
index 15990f0c36fbd..6b6b5c5665914 100644
--- a/compiler-rt/test/builtins/Unit/ppc/qdiv_test.c
+++ b/compiler-rt/test/builtins/Unit/ppc/qdiv_test.c
@@ -4,6 +4,7 @@
#include "DD.h"
long double __gcc_qdiv(long double x, long double y);
+int memcmp(const void *, const void *, __typeof__(sizeof(0)));
double testAccuracy();
int testEdgeCases();
@@ -11,10 +12,10 @@ int testEdgeCases();
int main(int argc, char *argv[]) {
if (testEdgeCases())
return 1;
-
+
if (testAccuracy() > 4.0)
return 1;
-
+
return 0;
}
@@ -114,11 +115,11 @@ int testEdgeCases() {
b.lo = edgeCases[i].ylo;
r.hi = edgeCases[i].rhi;
r.lo = edgeCases[i].rlo;
-
+
int error;
-
+
DD c = { .ld = __gcc_qdiv(a.ld, b.ld) };
-
+
if (r.hi != r.hi) {
if (c.hi == c.hi)
error = 1;
@@ -130,16 +131,16 @@ int testEdgeCases() {
else if (r.hi == 0.0)
error = memcmp(&c, &r, sizeof(DD));
-
+
else
error = ((c.hi != r.hi) || (c.lo != r.lo));
-
+
if (error) {
printf("Error on edge case %a / %a: expected (%a, %a), got (%a, %a).\n", a.hi, b.hi, r.hi, r.lo, c.hi, c.lo);
return 1;
}
}
-
+
return 0;
}
@@ -150,68 +151,68 @@ int testEdgeCases() {
#include <stdlib.h>
#include <mpfr.h>
#include <math.h>
-
+
#ifdef __x86_64__
#define randlength 2
#else
#define randlength 4
#endif
-
+
void printTest(mpfr_t a, mpfr_t b, mpfr_t c) {
static const double infinityD = __builtin_inf();
-
+
MPFR_DECL_INIT(tmp, 53);
-
+
double ahi = mpfr_get_d(a, GMP_RNDN);
mpfr_set_d(tmp, ahi, GMP_RNDN);
mpfr_sub(tmp, a, tmp, GMP_RNDN);
double alo = mpfr_get_d(tmp, GMP_RNDN);
printf("{%0.13a, %0.13a, ", ahi, alo);
-
+
double bhi = mpfr_get_d(b, GMP_RNDN);
mpfr_set_d(tmp, bhi, GMP_RNDN);
mpfr_sub(tmp, b, tmp, GMP_RNDN);
double blo = mpfr_get_d(tmp, GMP_RNDN);
printf("%0.13a, %0.13a, ", bhi, blo);
-
+
double chi = mpfr_get_d(c, GMP_RNDN);
mpfr_set_d(tmp, chi, GMP_RNDN);
mpfr_sub(tmp, c, tmp, GMP_RNDN);
double clo = isinf(chi) ? 0.0 : mpfr_get_d(tmp, GMP_RNDN);
printf("%0.13a, %0.13a},\n", chi, clo);
}
-
+
int main(int argc, char *argv[]) {
-
+
MPFR_DECL_INIT(a, 106);
MPFR_DECL_INIT(b, 106);
MPFR_DECL_INIT(c, 106);
-
+
int exponent_range = atoi(argv[1]);
-
+
int i;
for (i=0; i<128; ++i) {
mpfr_random2(a, randlength, exponent_range);
mpfr_random2(b, randlength, exponent_range);
mpfr_div(c, a, b, GMP_RNDN);
printTest(a, b, c);
-
+
mpfr_neg(b, b, GMP_RNDN);
mpfr_div(c, a, b, GMP_RNDN);
printTest(a, b, c);
-
+
mpfr_neg(a, a, GMP_RNDN);
mpfr_neg(b, b, GMP_RNDN);
mpfr_div(c, a, b, GMP_RNDN);
printTest(a, b, c);
-
+
mpfr_neg(b, b, GMP_RNDN);
mpfr_div(c, a, b, GMP_RNDN);
printTest(a, b, c);
}
return 0;
- }
-
+ }
+
*/
const struct testVector accuracyTests[] = {
@@ -736,9 +737,9 @@ const int numAccuracyTests = sizeof(accuracyTests) / sizeof(struct testVector);
double testAccuracy() {
int i;
DD a, b, c, r;
-
+
double worstUlps = 0.5;
-
+
for (i=0; i<numAccuracyTests; ++i) {
a.hi = accuracyTests[i].xhi;
a.lo = accuracyTests[i].xlo;
@@ -746,17 +747,17 @@ double testAccuracy() {
b.lo = accuracyTests[i].ylo;
r.hi = accuracyTests[i].rhi;
r.lo = accuracyTests[i].rlo;
-
+
DD c = { .ld = __gcc_qdiv(a.ld, b.ld) };
-
+
double error = __builtin_fabs(((r.hi - c.hi) + r.lo) - c.lo);
-
+
if (error != 0.0) {
-
+
int exponent = ilogb(r.hi);
exponent = (exponent < -1022 ? -1022 : exponent);
double ulpError = scalbn(error, 106 - exponent);
-
+
if (ulpError > worstUlps) {
#ifdef PRINT_ACCURACY_INFORMATION
printf("New worst rounding error for (%a,%a) / (%a,%a):\n", a.hi, a.lo, b.hi, b.lo);
@@ -768,7 +769,7 @@ double testAccuracy() {
}
}
}
-
+
return worstUlps;
}
diff --git a/compiler-rt/test/builtins/Unit/ppc/qmul_test.c b/compiler-rt/test/builtins/Unit/ppc/qmul_test.c
index c8e5bb096a25e..05941130f9afb 100644
--- a/compiler-rt/test/builtins/Unit/ppc/qmul_test.c
+++ b/compiler-rt/test/builtins/Unit/ppc/qmul_test.c
@@ -4,6 +4,7 @@
#include "DD.h"
long double __gcc_qmul(long double x, long double y);
+int memcmp(const void *, const void *, __typeof__(sizeof(0)));
double testAccuracy();
int testEdgeCases();
@@ -11,10 +12,10 @@ int testEdgeCases();
int main(int argc, char *argv[]) {
if (testEdgeCases())
return 1;
-
+
if (testAccuracy() > 2.0)
return 1;
-
+
return 0;
}
@@ -114,11 +115,11 @@ int testEdgeCases() {
b.lo = edgeCases[i].ylo;
r.hi = edgeCases[i].rhi;
r.lo = edgeCases[i].rlo;
-
+
int error;
-
+
DD c = { .ld = __gcc_qmul(a.ld, b.ld) };
-
+
if (r.hi != r.hi) {
if (c.hi == c.hi)
error = 1;
@@ -130,16 +131,16 @@ int testEdgeCases() {
else if (r.hi == 0.0)
error = memcmp(&c, &r, sizeof(DD));
-
+
else
error = ((c.hi != r.hi) || (c.lo != r.lo));
-
+
if (error) {
printf("Error on edge case %a x %a: expected (%a, %a), got (%a, %a).\n", a.hi, b.hi, r.hi, r.lo, c.hi, c.lo);
return 1;
}
}
-
+
return 0;
}
@@ -147,72 +148,72 @@ int testEdgeCases() {
/*
Code for generating the test cases, requires the mpfr package to run.
-
+
#include <stdio.h>
#include <stdlib.h>
#include <mpfr.h>
#include <math.h>
-
+
#ifdef __x86_64__
#define randlength 2
#else
#define randlength 4
#endif
-
+
void printTest(mpfr_t a, mpfr_t b, mpfr_t c) {
static const double INFINITYD = __builtin_INFINITY();
-
+
MPFR_DECL_INIT(tmp, 53);
-
+
double ahi = mpfr_get_d(a, GMP_RNDN);
mpfr_set_d(tmp, ahi, GMP_RNDN);
mpfr_sub(tmp, a, tmp, GMP_RNDN);
double alo = mpfr_get_d(tmp, GMP_RNDN);
printf("{%0.13a, %0.13a, ", ahi, alo);
-
+
double bhi = mpfr_get_d(b, GMP_RNDN);
mpfr_set_d(tmp, bhi, GMP_RNDN);
mpfr_sub(tmp, b, tmp, GMP_RNDN);
double blo = mpfr_get_d(tmp, GMP_RNDN);
printf("%0.13a, %0.13a, ", bhi, blo);
-
+
double chi = mpfr_get_d(c, GMP_RNDN);
mpfr_set_d(tmp, chi, GMP_RNDN);
mpfr_sub(tmp, c, tmp, GMP_RNDN);
double clo = isINFINITY(chi) ? 0.0 : mpfr_get_d(tmp, GMP_RNDN);
printf("%0.13a, %0.13a},\n", chi, clo);
}
-
+
int main(int argc, char *argv[]) {
-
+
MPFR_DECL_INIT(a, 106);
MPFR_DECL_INIT(b, 106);
MPFR_DECL_INIT(c, 106);
-
+
int exponent_range = atoi(argv[1]);
-
+
int i;
for (i=0; i<128; ++i) {
mpfr_random2(a, randlength, exponent_range);
mpfr_random2(b, randlength, exponent_range);
mpfr_mul(c, a, b, GMP_RNDN);
printTest(a, b, c);
-
+
mpfr_neg(b, b, GMP_RNDN);
mpfr_mul(c, a, b, GMP_RNDN);
printTest(a, b, c);
-
+
mpfr_neg(a, a, GMP_RNDN);
mpfr_neg(b, b, GMP_RNDN);
mpfr_mul(c, a, b, GMP_RNDN);
printTest(a, b, c);
-
+
mpfr_neg(b, b, GMP_RNDN);
mpfr_mul(c, a, b, GMP_RNDN);
printTest(a, b, c);
}
return 0;
- }
+ }
*/
@@ -734,9 +735,9 @@ const int numAccuracyTests = sizeof(accuracyTests) / sizeof(struct testVector);
double testAccuracy() {
int i;
DD a, b, c, r;
-
+
double worstUlps = 0.5;
-
+
for (i=0; i<numAccuracyTests; ++i) {
a.hi = accuracyTests[i].xhi;
a.lo = accuracyTests[i].xlo;
@@ -744,17 +745,17 @@ double testAccuracy() {
b.lo = accuracyTests[i].ylo;
r.hi = accuracyTests[i].rhi;
r.lo = accuracyTests[i].rlo;
-
+
DD c = { .ld = __gcc_qmul(a.ld, b.ld) };
-
+
double error = __builtin_fabs(((r.hi - c.hi) + r.lo) - c.lo);
-
+
if (error != 0.0) {
-
+
int exponent = ilogb(r.hi);
exponent = (exponent < -1022 ? -1022 : exponent);
double ulpError = scalbn(error, 106 - exponent);
-
+
if (ulpError > worstUlps) {
#ifdef PRINT_ACCURACY_INFORMATION
printf("New worst rounding error for (%a,%a) x (%a,%a):\n", a.hi, a.lo, b.hi, b.lo);
@@ -766,7 +767,7 @@ double testAccuracy() {
}
}
}
-
+
return worstUlps;
}
diff --git a/compiler-rt/test/builtins/Unit/ppc/qsub_test.c b/compiler-rt/test/builtins/Unit/ppc/qsub_test.c
index 1e456f83aea36..0e00a5c820b20 100644
--- a/compiler-rt/test/builtins/Unit/ppc/qsub_test.c
+++ b/compiler-rt/test/builtins/Unit/ppc/qsub_test.c
@@ -4,6 +4,7 @@
#include "DD.h"
long double __gcc_qsub(long double x, long double y);
+int memcmp(const void *, const void *, __typeof__(sizeof(0)));
double testAccuracy();
int testEdgeCases();
@@ -11,10 +12,10 @@ int testEdgeCases();
int main(int argc, char *argv[]) {
if (testEdgeCases())
return 1;
-
+
if (testAccuracy() > 1.0)
return 1;
-
+
return 0;
}
@@ -114,13 +115,13 @@ int testEdgeCases() {
b.lo = edgeCases[i].ylo;
r.hi = edgeCases[i].rhi;
r.lo = edgeCases[i].rlo;
-
+
int error;
-
+
long double computed = __gcc_qsub(a.ld, b.ld);
-
+
DD c = { .ld = computed };
-
+
if (r.hi != r.hi) {
if (c.hi == c.hi)
error = 1;
@@ -132,16 +133,16 @@ int testEdgeCases() {
else if (r.hi == 0.0)
error = memcmp(&c, &r, sizeof(DD));
-
+
else
error = ((c.hi != r.hi) || (c.lo != r.lo));
-
+
if (error) {
printf("Error on edge case %a - %a: expected (%a, %a), got (%a, %a).\n", a.hi, b.hi, r.hi, r.lo, c.hi, c.lo);
return 1;
}
}
-
+
return 0;
}
@@ -149,117 +150,117 @@ int testEdgeCases() {
/*
Code for generating the test cases, requires the mpfr package to run.
-
+
#include <stdio.h>
#include <stdlib.h>
#include <mpfr.h>
-
+
#ifdef __x86_64__
#define randlength 2
#else
#define randlength 4
#endif
-
-
+
+
int main(int argc, char *argv[]) {
-
+
MPFR_DECL_INIT(a, 106);
MPFR_DECL_INIT(b, 106);
MPFR_DECL_INIT(c, 106);
-
+
MPFR_DECL_INIT(tmp, 53);
-
+
int exponent_range = atoi(argv[1]);
-
+
int i;
for (i=0; i<128; ++i) {
mpfr_random2(a, randlength, exponent_range);
mpfr_random2(b, randlength, exponent_range);
mpfr_add(c, a, b, GMP_RNDN);
-
+
double ahi = mpfr_get_d(a, GMP_RNDN);
mpfr_set_d(tmp, ahi, GMP_RNDN);
mpfr_sub(tmp, a, tmp, GMP_RNDN);
double alo = mpfr_get_d(tmp, GMP_RNDN);
printf("{%0.13a, %0.13a, ", ahi, alo);
-
+
double bhi = mpfr_get_d(b, GMP_RNDN);
mpfr_set_d(tmp, bhi, GMP_RNDN);
mpfr_sub(tmp, b, tmp, GMP_RNDN);
double blo = mpfr_get_d(tmp, GMP_RNDN);
printf("%0.13a, %0.13a, ", bhi, blo);
-
+
double chi = mpfr_get_d(c, GMP_RNDN);
mpfr_set_d(tmp, chi, GMP_RNDN);
mpfr_sub(tmp, c, tmp, GMP_RNDN);
double clo = mpfr_get_d(tmp, GMP_RNDN);
printf("%0.13a, %0.13a},\n", chi, clo);
-
+
mpfr_neg(b, b, GMP_RNDN);
mpfr_add(c, a, b, GMP_RNDN);
-
+
ahi = mpfr_get_d(a, GMP_RNDN);
mpfr_set_d(tmp, ahi, GMP_RNDN);
mpfr_sub(tmp, a, tmp, GMP_RNDN);
alo = mpfr_get_d(tmp, GMP_RNDN);
printf("{%0.13a, %0.13a, ", ahi, alo);
-
+
bhi = mpfr_get_d(b, GMP_RNDN);
mpfr_set_d(tmp, bhi, GMP_RNDN);
mpfr_sub(tmp, b, tmp, GMP_RNDN);
blo = mpfr_get_d(tmp, GMP_RNDN);
printf("%0.13a, %0.13a, ", bhi, blo);
-
+
chi = mpfr_get_d(c, GMP_RNDN);
mpfr_set_d(tmp, chi, GMP_RNDN);
mpfr_sub(tmp, c, tmp, GMP_RNDN);
clo = mpfr_get_d(tmp, GMP_RNDN);
printf("%0.13a, %0.13a},\n", chi, clo);
-
+
mpfr_neg(a, a, GMP_RNDN);
mpfr_neg(b, b, GMP_RNDN);
mpfr_add(c, a, b, GMP_RNDN);
-
+
ahi = mpfr_get_d(a, GMP_RNDN);
mpfr_set_d(tmp, ahi, GMP_RNDN);
mpfr_sub(tmp, a, tmp, GMP_RNDN);
alo = mpfr_get_d(tmp, GMP_RNDN);
printf("{%0.13a, %0.13a, ", ahi, alo);
-
+
bhi = mpfr_get_d(b, GMP_RNDN);
mpfr_set_d(tmp, bhi, GMP_RNDN);
mpfr_sub(tmp, b, tmp, GMP_RNDN);
blo = mpfr_get_d(tmp, GMP_RNDN);
printf("%0.13a, %0.13a, ", bhi, blo);
-
+
chi = mpfr_get_d(c, GMP_RNDN);
mpfr_set_d(tmp, chi, GMP_RNDN);
mpfr_sub(tmp, c, tmp, GMP_RNDN);
clo = mpfr_get_d(tmp, GMP_RNDN);
printf("%0.13a, %0.13a},\n", chi, clo);
-
+
mpfr_neg(b, b, GMP_RNDN);
mpfr_add(c, a, b, GMP_RNDN);
-
+
ahi = mpfr_get_d(a, GMP_RNDN);
mpfr_set_d(tmp, ahi, GMP_RNDN);
mpfr_sub(tmp, a, tmp, GMP_RNDN);
alo = mpfr_get_d(tmp, GMP_RNDN);
printf("{%0.13a, %0.13a, ", ahi, alo);
-
+
bhi = mpfr_get_d(b, GMP_RNDN);
mpfr_set_d(tmp, bhi, GMP_RNDN);
mpfr_sub(tmp, b, tmp, GMP_RNDN);
blo = mpfr_get_d(tmp, GMP_RNDN);
printf("%0.13a, %0.13a, ", bhi, blo);
-
+
chi = mpfr_get_d(c, GMP_RNDN);
mpfr_set_d(tmp, chi, GMP_RNDN);
mpfr_sub(tmp, c, tmp, GMP_RNDN);
clo = mpfr_get_d(tmp, GMP_RNDN);
printf("%0.13a, %0.13a},\n", chi, clo);
}
-
+
return 0;
}
@@ -1815,9 +1816,9 @@ const int numAccuracyTests = sizeof(accuracyTests) / sizeof(struct testVector);
double testAccuracy() {
int i;
DD a, b, c, r;
-
+
double worstUlps = 0.5;
-
+
for (i=0; i<numAccuracyTests; ++i) {
a.hi = accuracyTests[i].xhi;
a.lo = accuracyTests[i].xlo;
@@ -1825,17 +1826,17 @@ double testAccuracy() {
b.lo = -accuracyTests[i].ylo;
r.hi = accuracyTests[i].rhi;
r.lo = accuracyTests[i].rlo;
-
+
DD c = { .ld = __gcc_qsub(a.ld, b.ld) };
-
+
double error = __builtin_fabs(((r.hi - c.hi) + r.lo) - c.lo);
-
+
if (error != 0.0) {
-
+
int exponent = ilogb(r.hi);
exponent = (exponent < -1022 ? -1022 : exponent);
double ulpError = scalbn(error, 106 - exponent);
-
+
if (ulpError > worstUlps) {
#ifdef PRINT_ACCURACY_INFORMATION
printf("New worst rounding error for (%a,%a) + (%a,%a):\n", a.hi, a.lo, b.hi, b.lo);
@@ -1847,7 +1848,7 @@ double testAccuracy() {
}
}
}
-
+
return worstUlps;
}
More information about the llvm-commits
mailing list