[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_mulosi4
|
2011-06-18 04:17:05 +08:00
|
|
|
|
|
|
|
#include "int_lib.h"
|
|
|
|
#include <stdio.h>
|
|
|
|
|
|
|
|
// Returns: a * b
|
|
|
|
|
|
|
|
// Effects: aborts if a * b overflows
|
|
|
|
|
2015-04-24 23:45:57 +08:00
|
|
|
COMPILER_RT_ABI si_int __mulosi4(si_int a, si_int b, int *overflow);
|
2011-06-18 04:17:05 +08:00
|
|
|
|
|
|
|
int test__mulosi4(si_int a, si_int b, si_int expected, int expected_overflow)
|
|
|
|
{
|
|
|
|
int ov;
|
|
|
|
si_int x = __mulosi4(a, b, &ov);
|
|
|
|
if (ov != expected_overflow)
|
|
|
|
printf("error in __mulosi4: overflow=%d expected=%d\n",
|
|
|
|
ov, expected_overflow);
|
|
|
|
else if (!expected_overflow && x != expected) {
|
|
|
|
printf("error in __mulosi4: 0x%X * 0x%X = 0x%X (overflow=%d), "
|
|
|
|
"expected 0x%X (overflow=%d)\n",
|
|
|
|
a, b, x, ov, expected, expected_overflow);
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
int main()
|
|
|
|
{
|
|
|
|
if (test__mulosi4(0, 0, 0, 0))
|
|
|
|
return 1;
|
|
|
|
if (test__mulosi4(0, 1, 0, 0))
|
|
|
|
return 1;
|
|
|
|
if (test__mulosi4(1, 0, 0, 0))
|
|
|
|
return 1;
|
|
|
|
if (test__mulosi4(0, 10, 0, 0))
|
|
|
|
return 1;
|
|
|
|
if (test__mulosi4(10, 0, 0, 0))
|
|
|
|
return 1;
|
|
|
|
if (test__mulosi4(0, 0x1234567, 0, 0))
|
|
|
|
return 1;
|
|
|
|
if (test__mulosi4(0x1234567, 0, 0, 0))
|
|
|
|
return 1;
|
|
|
|
|
|
|
|
if (test__mulosi4(0, -1, 0, 0))
|
|
|
|
return 1;
|
|
|
|
if (test__mulosi4(-1, 0, 0, 0))
|
|
|
|
return 1;
|
|
|
|
if (test__mulosi4(0, -10, 0, 0))
|
|
|
|
return 1;
|
|
|
|
if (test__mulosi4(-10, 0, 0, 0))
|
|
|
|
return 1;
|
|
|
|
if (test__mulosi4(0, -0x1234567, 0, 0))
|
|
|
|
return 1;
|
|
|
|
if (test__mulosi4(-0x1234567, 0, 0, 0))
|
|
|
|
return 1;
|
|
|
|
|
|
|
|
if (test__mulosi4(1, 1, 1, 0))
|
|
|
|
return 1;
|
|
|
|
if (test__mulosi4(1, 10, 10, 0))
|
|
|
|
return 1;
|
|
|
|
if (test__mulosi4(10, 1, 10, 0))
|
|
|
|
return 1;
|
|
|
|
if (test__mulosi4(1, 0x1234567, 0x1234567, 0))
|
|
|
|
return 1;
|
|
|
|
if (test__mulosi4(0x1234567, 1, 0x1234567, 0))
|
|
|
|
return 1;
|
|
|
|
|
|
|
|
if (test__mulosi4(1, -1, -1, 0))
|
|
|
|
return 1;
|
|
|
|
if (test__mulosi4(1, -10, -10, 0))
|
|
|
|
return 1;
|
|
|
|
if (test__mulosi4(-10, 1, -10, 0))
|
|
|
|
return 1;
|
|
|
|
if (test__mulosi4(1, -0x1234567, -0x1234567, 0))
|
|
|
|
return 1;
|
|
|
|
if (test__mulosi4(-0x1234567, 1, -0x1234567, 0))
|
|
|
|
return 1;
|
|
|
|
|
|
|
|
if (test__mulosi4(0x7FFFFFFF, -2, 0x80000001, 1))
|
|
|
|
return 1;
|
|
|
|
if (test__mulosi4(-2, 0x7FFFFFFF, 0x80000001, 1))
|
|
|
|
return 1;
|
|
|
|
if (test__mulosi4(0x7FFFFFFF, -1, 0x80000001, 0))
|
|
|
|
return 1;
|
|
|
|
if (test__mulosi4(-1, 0x7FFFFFFF, 0x80000001, 0))
|
|
|
|
return 1;
|
|
|
|
if (test__mulosi4(0x7FFFFFFF, 0, 0, 0))
|
|
|
|
return 1;
|
|
|
|
if (test__mulosi4(0, 0x7FFFFFFF, 0, 0))
|
|
|
|
return 1;
|
|
|
|
if (test__mulosi4(0x7FFFFFFF, 1, 0x7FFFFFFF, 0))
|
|
|
|
return 1;
|
|
|
|
if (test__mulosi4(1, 0x7FFFFFFF, 0x7FFFFFFF, 0))
|
|
|
|
return 1;
|
|
|
|
if (test__mulosi4(0x7FFFFFFF, 2, 0x80000001, 1))
|
|
|
|
return 1;
|
|
|
|
if (test__mulosi4(2, 0x7FFFFFFF, 0x80000001, 1))
|
|
|
|
return 1;
|
|
|
|
|
|
|
|
if (test__mulosi4(0x80000000, -2, 0x80000000, 1))
|
|
|
|
return 1;
|
|
|
|
if (test__mulosi4(-2, 0x80000000, 0x80000000, 1))
|
|
|
|
return 1;
|
|
|
|
if (test__mulosi4(0x80000000, -1, 0x80000000, 1))
|
|
|
|
return 1;
|
|
|
|
if (test__mulosi4(-1, 0x80000000, 0x80000000, 1))
|
|
|
|
return 1;
|
|
|
|
if (test__mulosi4(0x80000000, 0, 0, 0))
|
|
|
|
return 1;
|
|
|
|
if (test__mulosi4(0, 0x80000000, 0, 0))
|
|
|
|
return 1;
|
|
|
|
if (test__mulosi4(0x80000000, 1, 0x80000000, 0))
|
|
|
|
return 1;
|
|
|
|
if (test__mulosi4(1, 0x80000000, 0x80000000, 0))
|
|
|
|
return 1;
|
|
|
|
if (test__mulosi4(0x80000000, 2, 0x80000000, 1))
|
|
|
|
return 1;
|
|
|
|
if (test__mulosi4(2, 0x80000000, 0x80000000, 1))
|
|
|
|
return 1;
|
|
|
|
|
|
|
|
if (test__mulosi4(0x80000001, -2, 0x80000001, 1))
|
|
|
|
return 1;
|
|
|
|
if (test__mulosi4(-2, 0x80000001, 0x80000001, 1))
|
|
|
|
return 1;
|
|
|
|
if (test__mulosi4(0x80000001, -1, 0x7FFFFFFF, 0))
|
|
|
|
return 1;
|
|
|
|
if (test__mulosi4(-1, 0x80000001, 0x7FFFFFFF, 0))
|
|
|
|
return 1;
|
|
|
|
if (test__mulosi4(0x80000001, 0, 0, 0))
|
|
|
|
return 1;
|
|
|
|
if (test__mulosi4(0, 0x80000001, 0, 0))
|
|
|
|
return 1;
|
|
|
|
if (test__mulosi4(0x80000001, 1, 0x80000001, 0))
|
|
|
|
return 1;
|
|
|
|
if (test__mulosi4(1, 0x80000001, 0x80000001, 0))
|
|
|
|
return 1;
|
|
|
|
if (test__mulosi4(0x80000001, 2, 0x80000000, 1))
|
|
|
|
return 1;
|
|
|
|
if (test__mulosi4(2, 0x80000001, 0x80000000, 1))
|
|
|
|
return 1;
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|