[Builtin] Implement lit-test support (part 1 of 2: test cases update)
Original r297566 is splitted into two parts.
This is part one, which adds "RUN" command for test cases.
Unit/arm/call_apsr.S is updated to support thumb1.
It also fixes a bug in arm/aeabi_uldivmod_test.c
gcc_personality_test is XFAILED as the framework cannot handle it so far.
cpu_model_test is also XFAILED for now as it is expected to return non-zero.
TODO: A few tests are XFAILed for armhf and aarch64.
We need further investigating. [1,2] Tracks the issue.
[1] https://bugs.llvm.org//show_bug.cgi?id=32260
[2] https://bugs.llvm.org//show_bug.cgi?id=32261
Reviewers: rengolin, compnerd, jroelofs, erik.pilkington, arphaman
Reviewed By: jroelofs
Subscribers: jroelofs, aemerson, srhines, nemanjai, llvm-commits, mgorny
Differential Revision: https://reviews.llvm.org/D30802
llvm-svn: 298339
2017-03-21 13:32:51 +08:00
|
|
|
// RUN: %clang_builtins %s %librt -o %t && %run %t
|
[Builtins] Provide a mechanism to selectively disable tests based on whether an implementation is provided by a builtin library.
Summary:
If a platform removes some builtin implementations (e.g. via the
Darwin-excludes mechanism) then this can lead to test failures because
the test expects an implementation to be available.
To solve this lit features are added for each configuration based
on which sources are included in the builtin library. The features
are of the form `librt_has_<name>` where `<name>` is the name of the
source file with the file extension removed. This handles C and
assembly sources.
With the lit features in place it is possible to make certain tests
require them.
Example:
```
REQUIRES: librt_has_comparedf2
```
All top-level tests in `test/builtins/Unit` (i.e. not under
`arm`, `ppc`, and `riscv`) have been annotated with the appropriate
`REQUIRES: librt_has_*` statement.
rdar://problem/55520987
Reviewers: beanz, steven_wu, arphaman, dexonsmith, phosek, thakis
Subscribers: mgorny, #sanitizers, llvm-commits
Tags: #llvm, #sanitizers
Differential Revision: https://reviews.llvm.org/D68064
llvm-svn: 375150
2019-10-18 02:12:49 +08:00
|
|
|
// REQUIRES: librt_has_fixtfti
|
[compiler-rt][aarch64] New tests for 128-bit floating-point builtins, fixes of tests and __fixuint
Summary:
The following tests for 128-bit floating-point type behaved in a strange way, thought it were bugs, but seem to be mistakes in tests:
* `fixtfsi` test checked for `0x80000001` as a value returned for number less than can be represented, while `LONG_MIN` should be returned on saturation;
* `fixunstfdi` wasn't enabled for AArch64, only for PPC, but there is nothing PPC specific in that test;
* `multf3` tried to underflow multiplication by producing result with 16383 exponent, while there are still 112 bits of fraction plus implicit bit, so resultant exponent should be 16497.
Tests for some other builtins didn't exist:
* `fixtfdi`
* `fixtfti`
* `fixunstfti`
They were made by copying similar files and adjusting for wider types and adding/removing some reasonable/extra checks.
Also `__fixuint` seems to have off by one error, updated tests to catch this case.
Reviewers: rengolin, zatrazz, howard.hinnant, t.p.northover, jmolloy, enefaim
Subscribers: aemerson, llvm-commits, rengolin
Differential Revision: http://reviews.llvm.org/D14187
llvm-svn: 252180
2015-11-06 02:36:42 +08:00
|
|
|
|
|
|
|
#include "int_lib.h"
|
|
|
|
#include <stdio.h>
|
|
|
|
|
|
|
|
#if __LDBL_MANT_DIG__ == 113
|
|
|
|
|
|
|
|
#include "fp_test.h"
|
|
|
|
|
|
|
|
ti_int __fixtfti(long double a);
|
|
|
|
|
|
|
|
int test__fixtfti(long double a, ti_int expected)
|
|
|
|
{
|
|
|
|
ti_int x = __fixtfti(a);
|
|
|
|
int ret = (x != expected);
|
|
|
|
|
|
|
|
if (ret)
|
|
|
|
{
|
|
|
|
twords xt;
|
|
|
|
xt.all = x;
|
|
|
|
|
|
|
|
twords expectedt;
|
|
|
|
expectedt.all = expected;
|
|
|
|
|
|
|
|
printf("error in test__fixtfti(%.20Lf) = 0x%.16llX%.16llX, "
|
|
|
|
"expected 0x%.16llX%.16llX\n",
|
|
|
|
a, xt.s.high, xt.s.low, expectedt.s.high, expectedt.s.low);
|
|
|
|
}
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
char assumption_1[sizeof(long double) * CHAR_BIT == 128] = {0};
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
int main()
|
|
|
|
{
|
|
|
|
#if __LDBL_MANT_DIG__ == 113
|
|
|
|
if (test__fixtfti(makeInf128(), make_ti(0x7fffffffffffffffLL,
|
|
|
|
0xffffffffffffffffLL)))
|
|
|
|
return 1;
|
|
|
|
if (test__fixtfti(0, make_ti(0x0LL, 0x0LL)))
|
|
|
|
return 1;
|
|
|
|
if (test__fixtfti(0x1.23456789abcdefp+5L, make_ti(0x0LL, 0x24LL)))
|
|
|
|
return 1;
|
|
|
|
if (test__fixtfti(0x1.23456789abcdefp-3L, make_ti(0x0LL, 0x0LL)))
|
|
|
|
return 1;
|
|
|
|
if (test__fixtfti(0x1.23456789abcdef12345678p+20L,
|
|
|
|
make_ti(0x0LL, 0x123456LL)))
|
|
|
|
return 1;
|
|
|
|
if (test__fixtfti(0x1.23456789abcdef123456789abcdep+112L,
|
|
|
|
make_ti(0x123456789abcdLL, 0xef123456789abcdeLL)))
|
|
|
|
return 1;
|
|
|
|
if (test__fixtfti(-0x1.23456789abcdef123456789abcdep+112L,
|
|
|
|
make_ti(0xFFFEDCBA98765432LL, 0x10EDCBA987654322LL)))
|
|
|
|
return 1;
|
|
|
|
if (test__fixtfti(0x1.23456789abcdefp+256L, make_ti(0x7fffffffffffffffLL,
|
|
|
|
0xffffffffffffffffLL)))
|
|
|
|
return 1;
|
|
|
|
if (test__fixtfti(-0x1.23456789abcdefp+20L, make_ti(0xffffffffffffffffLL,
|
|
|
|
0xffffffffffedcbaaLL)))
|
|
|
|
return 1;
|
|
|
|
if (test__fixtfti(-0x1.23456789abcdefp+256L, make_ti(0x8000000000000000LL,
|
|
|
|
0x0)))
|
|
|
|
return 1;
|
|
|
|
|
|
|
|
#else
|
|
|
|
printf("skipped\n");
|
|
|
|
|
|
|
|
#endif
|
|
|
|
return 0;
|
|
|
|
}
|