Leverage the method OpenCL uses that adds C intrinsics when the lookup
failed. There is no need to define C intrinsics in the header file any
more. It could help to avoid the large header file to speed up the
compilation of RVV source code. Besides that, only the C intrinsics used
by the users will be added into the declaration table.
This patch is based on https://reviews.llvm.org/D103228 and inspired by
OpenCL implementation.
Experimental Results
TL;DR:
- Binary size of clang increase ~200k, which is +0.07% for debug build and +0.13% for release build.
- Single file compilation speed up ~33x for debug build and ~8.5x for release build
- Regression time reduce ~10% (ninja check-all, enable all targets)
Header size change
| size | LoC | ------------------------------ Before | 4,434,725 | 69,749 | After | 6,140 | 162 |
Single File Compilation Time
Testcase:
#include <riscv_vector.h> vint32m1_t test_vadd_vv_vfloat32m1_t(vint32m1_t op1, vint32m1_t op2, size_t vl) { return vadd(op1, op2, vl); }
Debug build:
Before:
real 0m19.352s user 0m19.252s sys 0m0.092s
After:
real 0m0.576s user 0m0.552s sys 0m0.024s
~33x speed up for debug build
Release build:
Before:
real 0m0.773s user 0m0.741s sys 0m0.032s
After:
real 0m0.092s user 0m0.080s sys 0m0.012s
~8.5x speed up for release build
Regression time
Note: the failed case is tools/llvm-debuginfod-find/debuginfod.test which is unrelated to this patch.
Debug build
Before:
Testing Time: 1358.38s Skipped : 11 Unsupported : 446 Passed : 75767 Expectedly Failed: 190 Failed : 1
After
Testing Time: 1220.29s Skipped : 11 Unsupported : 446 Passed : 75767 Expectedly Failed: 190 Failed : 1
Release build
Before:
Testing Time: 381.98s Skipped : 12 Unsupported : 1407 Passed : 74765 Expectedly Failed: 176 Failed : 1
After:
Testing Time: 346.25s Skipped : 12 Unsupported : 1407 Passed : 74765 Expectedly Failed: 176 Failed : 1
Binary size of clang
Debug build
Before
text data bss dec hex filename 335261851 12726004 552812 348540667 14c64efb bin/clang
After
text data bss dec hex filename 335442803 12798708 552940 348794451 14ca2e53 bin/clang
+253K, +0.07% code size
Release build
Before
text data bss dec hex filename 144123975 8374648 483140 152981763 91e5103 bin/clang
After
text data bss dec hex filename 144255762 8447296 483268 153186326 9217016 bin/clang
+204K, +0.13%
Authored-by: Kito Cheng <kito.cheng@sifive.com>
Co-Authored-by: Hsiangkai Wang <kai.wang@sifive.com>
Why only 2 periods at the end. Should be 3 like on like 908 or in the middle of line 903