Revision 0d54ad3086b7fc61afa28b512b27668e1ddef2f5 authored by Keno Fischer on 17 April 2024, 23:01:19 UTC, committed by Keno Fischer on 17 April 2024, 23:40:48 UTC
The strategy here is to look at (data, padding) pairs and RLE them into loops, so that repeated adjacent patterns use a loop rather than getting unrolled. On the test case from #54109, this makes compilation essentially instant, while also being faster at runtime (turns out LLVM spends a massive amount of time AND the answer is bad). There's some obvious further enhancements possible here: 1. The `memcmp` constant is small. LLVM has a pass to inline these with better code. However, we don't have it turned on. We should consider vendoring it, though we may want to add some shorcutting to it to avoid having it iterate through each function. 2. This only does one level of sequence matching. It could be recursed to turn things into nested loops. However, this solves the immediate issue, so hopefully it's a useful start. Fixes #54109.
1 parent 7ba1b33
File | Mode | Size |
---|---|---|
checksums | ||
patches | ||
tools | ||
valgrind | ||
.gitignore | -rw-r--r-- | 26 bytes |
JuliaSyntax.mk | -rw-r--r-- | 677 bytes |
JuliaSyntax.version | -rw-r--r-- | 244 bytes |
Makefile | -rw-r--r-- | 6.1 KB |
blastrampoline.mk | -rw-r--r-- | 2.1 KB |
blastrampoline.version | -rw-r--r-- | 196 bytes |
clang.version | -rw-r--r-- | 123 bytes |
csl.mk | -rw-r--r-- | 5.3 KB |
csl.version | -rw-r--r-- | 57 bytes |
curl.mk | -rw-r--r-- | 3.4 KB |
curl.version | -rw-r--r-- | 95 bytes |
dsfmt.mk | -rw-r--r-- | 2.2 KB |
dsfmt.version | -rw-r--r-- | 96 bytes |
gfortblas.alias | -rw-r--r-- | 706 bytes |
gfortblas.c | -rw-r--r-- | 4.4 KB |
gmp.mk | -rw-r--r-- | 2.8 KB |
gmp.version | -rw-r--r-- | 89 bytes |
ittapi.mk | -rw-r--r-- | 1.6 KB |
ittapi.version | -rw-r--r-- | 91 bytes |
libgit2.mk | -rw-r--r-- | 3.8 KB |
libgit2.version | -rw-r--r-- | 491 bytes |
libssh2.mk | -rw-r--r-- | 2.5 KB |
libssh2.version | -rw-r--r-- | 167 bytes |
libsuitesparse.mk | -rw-r--r-- | 4.4 KB |
libsuitesparse.version | -rw-r--r-- | 181 bytes |
libtracyclient.mk | -rw-r--r-- | 3.4 KB |
libtracyclient.version | -rw-r--r-- | 227 bytes |
libuv.mk | -rw-r--r-- | 2.4 KB |
libuv.version | -rw-r--r-- | 154 bytes |
libwhich.mk | -rw-r--r-- | 1.2 KB |
libwhich.version | -rw-r--r-- | 78 bytes |
lld.version | -rw-r--r-- | 60 bytes |
llvm-options.mk | -rw-r--r-- | 564 bytes |
llvm-tools.version | -rw-r--r-- | 182 bytes |
llvm-ver.make | -rw-r--r-- | 664 bytes |
llvm.mk | -rw-r--r-- | 11.9 KB |
llvm.version | -rw-r--r-- | 919 bytes |
llvmunwind.version | -rw-r--r-- | 95 bytes |
mbedtls.mk | -rw-r--r-- | 3.4 KB |
mbedtls.version | -rw-r--r-- | 103 bytes |
mpfr.mk | -rw-r--r-- | 2.4 KB |
mpfr.version | -rw-r--r-- | 73 bytes |
nghttp2.mk | -rw-r--r-- | 2.0 KB |
nghttp2.version | -rw-r--r-- | 102 bytes |
objconv.mk | -rw-r--r-- | 1.0 KB |
objconv.version | -rw-r--r-- | 264 bytes |
openblas.mk | -rw-r--r-- | 8.8 KB |
openblas.version | -rw-r--r-- | 227 bytes |
openlibm.mk | -rw-r--r-- | 1.3 KB |
openlibm.version | -rw-r--r-- | 163 bytes |
p7zip.mk | -rw-r--r-- | 1.6 KB |
p7zip.version | -rw-r--r-- | 76 bytes |
patchelf.mk | -rw-r--r-- | 2.2 KB |
patchelf.version | -rw-r--r-- | 114 bytes |
pcre.mk | -rw-r--r-- | 2.3 KB |
pcre.version | -rw-r--r-- | 74 bytes |
sanitizers.mk | -rw-r--r-- | 1017 bytes |
unwind.mk | -rw-r--r-- | 6.5 KB |
unwind.version | -rw-r--r-- | 106 bytes |
utf8proc.mk | -rw-r--r-- | 1.5 KB |
utf8proc.version | -rw-r--r-- | 78 bytes |
zlib.mk | -rw-r--r-- | 1.4 KB |
zlib.version | -rw-r--r-- | 162 bytes |
Computing file changes ...