From 7be973129cc75fa8cfed6f458be418a09835d635 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartosz=20Bia=C5=82as?= Date: Wed, 23 Dec 2020 19:22:13 +0100 Subject: [PATCH 01/78] Fix #23646: relpath recognizes Windows drive letters (#38259) (cherry picked from commit 46487aee8a300f0d183074b3978bae378f7c6cbc) --- base/path.jl | 12 ++++++++++-- test/path.jl | 20 ++++++++++++++++++++ 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/base/path.jl b/base/path.jl index d0239dbdd61df..1827346bb2edb 100644 --- a/base/path.jl +++ b/base/path.jl @@ -492,6 +492,9 @@ contractuser(path::AbstractString) Return a relative filepath to `path` either from the current directory or from an optional start directory. This is a path computation: the filesystem is not accessed to confirm the existence or nature of `path` or `startpath`. + +On Windows, case sensitivity is applied to every part of the path except drive letters. If +`path` and `startpath` refer to different drives, the absolute path of `path` is returned. """ function relpath(path::String, startpath::String = ".") isempty(path) && throw(ArgumentError("`path` must be specified")) @@ -499,8 +502,13 @@ function relpath(path::String, startpath::String = ".") curdir = "." pardir = ".." path == startpath && return curdir - path_arr = split(abspath(path), path_separator_re) - start_arr = split(abspath(startpath), path_separator_re) + path_drive, path_without_drive = splitdrive(path) + startpath_drive, startpath_without_drive = splitdrive(startpath) + path_arr = split(abspath(path_without_drive), path_separator_re) + start_arr = split(abspath(startpath_without_drive), path_separator_re) + if Sys.iswindows() + lowercase(path_drive) != lowercase(startpath_drive) && return abspath(path) + end i = 0 while i < min(length(path_arr), length(start_arr)) i += 1 diff --git a/test/path.jl b/test/path.jl index e09a46ef9370e..bbd9159c59295 100644 --- a/test/path.jl +++ b/test/path.jl @@ -262,6 +262,12 @@ res = relpath(filep, startp) idx += 1 @test res == relpath_expected_results[idx] + if Sys.iswindows() + @test relpath("e:$filep", "e:$startp") == relpath_expected_results[idx] + @test relpath("e:$filep", "E:$startp") == relpath_expected_results[idx] + @test relpath("E:$filep", "e:$startp") == relpath_expected_results[idx] + @test relpath("E:$filep", "E:$startp") == relpath_expected_results[idx] + end end end # Additional cases @@ -271,6 +277,20 @@ test_relpath() end + if Sys.iswindows() + @testset "issue #23646" begin + @test lowercase(relpath("E:\\a\\b", "C:\\c")) == "e:\\a\\b" + @test lowercase(relpath("E:\\a\\b", "c:\\c")) == "e:\\a\\b" + @test lowercase(relpath("e:\\a\\b", "C:\\c")) == "e:\\a\\b" + @test lowercase(relpath("e:\\a\\b", "c:\\c")) == "e:\\a\\b" + + @test relpath("C:\\a\\b", "c:\\a\\b") == "." + @test relpath("c:\\a\\b", "C:\\a\\b") == "." + @test lowercase(relpath("C:\\a\\b", "c:\\c\\d")) == "..\\..\\a\\b" + @test lowercase(relpath("c:\\a\\b", "C:\\c\\d")) == "..\\..\\a\\b" + end + end + @testset "type stability" begin @test isa(joinpath(S("a"), S("b")), String) @test isa(joinpath(S(abspath("a")), S("b")), String) From f3eabcd2eb8307b41b5d8247503f213a59cf50ee Mon Sep 17 00:00:00 2001 From: Debaditya Pal Date: Fri, 8 Jan 2021 01:57:24 +0530 Subject: [PATCH 02/78] added automatic keyword assignment support to test macro (#38270) * added automatic keyword assignment support to @test macro * added some tests for test macro using atol keyword * x = a.x syntax support added * Update stdlib/Test/src/Test.jl Co-authored-by: Simeon Schaub Co-authored-by: Simeon Schaub (cherry picked from commit 6c421908c0ea13cdc98f21aa299b03e3f0b09257) --- stdlib/Test/src/Test.jl | 4 ++++ stdlib/Test/test/runtests.jl | 7 +++++++ 2 files changed, 11 insertions(+) diff --git a/stdlib/Test/src/Test.jl b/stdlib/Test/src/Test.jl index 4b59dbf4ddde0..d83b7d591eb19 100644 --- a/stdlib/Test/src/Test.jl +++ b/stdlib/Test/src/Test.jl @@ -486,6 +486,10 @@ function get_test_result(ex, source) push!(escaped_kwargs, Expr(:call, :(=>), QuoteNode(a.args[1]), esc(a.args[2]))) elseif isa(a, Expr) && a.head === :... push!(escaped_kwargs, Expr(:..., esc(a.args[1]))) + elseif isa(a, Expr) && a.head === :. + push!(escaped_kwargs, Expr(:call, :(=>), QuoteNode(a.args[2].value), esc(Expr(:., a.args[1], QuoteNode(a.args[2].value))))) + elseif isa(a, Symbol) + push!(escaped_kwargs, Expr(:call, :(=>), QuoteNode(a), esc(a))) end end end diff --git a/stdlib/Test/test/runtests.jl b/stdlib/Test/test/runtests.jl index bb58168599519..862bfabe808a2 100644 --- a/stdlib/Test/test/runtests.jl +++ b/stdlib/Test/test/runtests.jl @@ -8,6 +8,8 @@ using Distributed: RemoteException import Logging: Debug, Info, Warn @testset "@test" begin + atol = 1 + a = (; atol=2) @test true @test 1 == 1 @test 1 != 2 @@ -20,11 +22,16 @@ import Logging: Debug, Info, Warn @test isapprox(1, 1, atol=0.1) @test isapprox(1, 1; atol=0.1) @test isapprox(1, 1; [(:atol, 0)]...) + @test isapprox(1, 2; atol) + @test isapprox(1, 3; a.atol) end @testset "@test keyword precedence" begin + atol = 2 # post-semicolon keyword, suffix keyword, pre-semicolon keyword @test isapprox(1, 2, atol=0) atol=1 @test isapprox(1, 3, atol=0; atol=2) atol=1 + @test isapprox(1, 2, atol=0; atol) + @test isapprox(1, 3, atol=0; atol) atol=1 end @testset "@test should only evaluate the arguments once" begin g = Int[] From cae992f9a7f900b720eabb5f6d921f873d93cce7 Mon Sep 17 00:00:00 2001 From: Valentin Churavy Date: Wed, 30 Dec 2020 14:45:48 -0500 Subject: [PATCH 03/78] mark integer parameters as sext/zext (cherry picked from commit f46da9e36a06702a95e9a17885d8dec6a2be5c01) --- src/codegen.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/codegen.cpp b/src/codegen.cpp index f1440be540607..6df4786738e7d 100644 --- a/src/codegen.cpp +++ b/src/codegen.cpp @@ -5668,6 +5668,11 @@ static jl_returninfo_t get_specsig_function(jl_codectx_t &ctx, Module *M, String else if (isboxed && jl_is_immutable_datatype(jt)) { attributes = attributes.addParamAttribute(jl_LLVMContext, argno, Attribute::ReadOnly); } + else if (jl_is_primitivetype(jt) && ty->isIntegerTy()) { + bool issigned = jl_signed_type && jl_subtype(jt, (jl_value_t*)jl_signed_type); + Attribute::AttrKind attr = issigned ? Attribute::SExt : Attribute::ZExt; + attributes = attributes.addParamAttribute(jl_LLVMContext, argno, attr); + } fsig.push_back(ty); } From db13dcccd7226fb4ef2c19c38b11413e1f432e30 Mon Sep 17 00:00:00 2001 From: Valentin Churavy Date: Wed, 30 Dec 2020 14:50:22 -0500 Subject: [PATCH 04/78] silence unused variable warning (cherry picked from commit 0949eb27e2b0c14e15b9c8f8ed53a94862afe35e) --- src/codegen.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/codegen.cpp b/src/codegen.cpp index 6df4786738e7d..0327cab5a845d 100644 --- a/src/codegen.cpp +++ b/src/codegen.cpp @@ -5631,6 +5631,7 @@ static jl_returninfo_t get_specsig_function(jl_codectx_t &ctx, Module *M, String unsigned argno = 1; #if JL_LLVM_VERSION < 120000 attributes = attributes.addAttribute(jl_LLVMContext, argno, Attribute::StructRet); + (void)srt; // silence unused variable error #else Attribute sret = Attribute::getWithStructRetType(jl_LLVMContext, srt); attributes = attributes.addAttribute(jl_LLVMContext, argno, sret); From 7657c36a2896af1604628ed5eac4663c35197b4a Mon Sep 17 00:00:00 2001 From: Elliot Saba Date: Tue, 5 Jan 2021 07:59:57 +0000 Subject: [PATCH 05/78] [REPL]: Don't write to the user's home directory Instead of writing out to actual `$HOME`, create a temporary directory and set that as `$HOME`/`$USERPROFILE`. (cherry picked from commit 7a6f423dadbef8c144f376266156b1adce1e79ae) --- stdlib/REPL/test/replcompletions.jl | 30 +++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/stdlib/REPL/test/replcompletions.jl b/stdlib/REPL/test/replcompletions.jl index 2478ca3c77720..d42b2b8012d55 100644 --- a/stdlib/REPL/test/replcompletions.jl +++ b/stdlib/REPL/test/replcompletions.jl @@ -699,20 +699,22 @@ let s, c, r end # Tests homedir expansion - let path, s, c, r - path = homedir() - dir = joinpath(path, "tmpfoobar") - mkdir(dir) - s = "\"" * path * "/tmpfoob" - c,r = test_complete(s) - @test "tmpfoobar/" in c - l = 3 + length(path) - @test r == l:l+6 - @test s[r] == "tmpfoob" - s = "\"~" - @test "tmpfoobar/" in c - c,r = test_complete(s) - rm(dir) + mktempdir() do tmphome + withenv("HOME" => tmphome, "USERPROFILE" => tmphome) do + path = homedir() + dir = joinpath(path, "tmpfoobar") + mkdir(dir) + s = "\"" * path * "/tmpfoob" + c,r = test_complete(s) + @test "tmpfoobar/" in c + l = 3 + length(path) + @test r == l:l+6 + @test s[r] == "tmpfoob" + s = "\"~" + @test "tmpfoobar/" in c + c,r = test_complete(s) + rm(dir) + end end # Tests detecting of files in the env path (in shell mode) From 684156d9a2a23dfd670dd55bc3e6a5b8189b6a11 Mon Sep 17 00:00:00 2001 From: Elliot Saba Date: Tue, 5 Jan 2021 03:35:46 -0500 Subject: [PATCH 06/78] [REPL] Do not require test to run within `/tmp` (cherry picked from commit fd671b33483a82c26a1e5acb6f3e2086d237156a) --- stdlib/REPL/test/replcompletions.jl | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/stdlib/REPL/test/replcompletions.jl b/stdlib/REPL/test/replcompletions.jl index d42b2b8012d55..8a1d2f39a18f4 100644 --- a/stdlib/REPL/test/replcompletions.jl +++ b/stdlib/REPL/test/replcompletions.jl @@ -663,11 +663,14 @@ let s, c, r @test s[r] == "tmp" # This should match things that are inside the tmp directory - if !isdir("/tmp/tmp") - s = "/tmp/" + s = tempdir() + if !endswith(s, "/") + s = string(s, "/") + end + if !isdir(joinpath(s, "tmp")) c,r = test_scomplete(s) @test !("tmp/" in c) - @test r === 6:5 + @test r === length(s) + 1:0 @test s[r] == "" end From 07a3c9e9063962346545734c92c47e7bd1bd9185 Mon Sep 17 00:00:00 2001 From: Jameson Nash Date: Fri, 8 Jan 2021 23:17:39 -0500 Subject: [PATCH 07/78] gf: avoid adding cache entries wider than the original method (#39140) Sometimes we want to widen the compilation signature, but then end up with something which does not fit the original pattern. This then can cause problems later, when we try to use the Method (from the cache), but discover it does not actually match the call. Fixes #38999 (cherry picked from commit 8937f7e522c9b3f96920d2f196f452c9f8a9e248) --- src/gf.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/gf.c b/src/gf.c index a4c98d3ce29ce..3d313e5be4b84 100644 --- a/src/gf.c +++ b/src/gf.c @@ -646,7 +646,7 @@ static void jl_compilation_sig( else if (jl_is_type_type(elt)) { // elt isa Type{T} if (very_general_type(decl_i)) { /* - here's a fairly simple heuristic: if this argument slot's + Here's a fairly simple heuristic: if this argument slot's declared type is general (Type or Any), then don't specialize for every Type that got passed. @@ -661,8 +661,9 @@ static void jl_compilation_sig( x::TypeConstructor matches the first but not the second, while also matching all other TypeConstructors. This means neither Type{TC} nor TypeConstructor is more specific. + + But don't apply this heuristic if the argument is called (issue #36783). */ - // don't apply this heuristic if the argument is called (issue #36783) int iscalled = i_arg > 0 && i_arg <= 8 && (definition->called & (1 << (i_arg - 1))); if (!iscalled) { if (!*newparams) *newparams = jl_svec_copy(tt->parameters); @@ -672,13 +673,13 @@ static void jl_compilation_sig( else if (jl_is_type_type(jl_tparam0(elt)) && // try to give up on specializing type parameters for Type{Type{Type{...}}} (jl_is_type_type(jl_tparam0(jl_tparam0(elt))) || !jl_has_free_typevars(decl_i))) { - // TODO: this is probably solidly unsound and would corrupt the cache in many cases /* actual argument was Type{...}, we computed its type as - Type{Type{...}}. we must avoid unbounded nesting here, so - cache the signature as Type{T}, unless something more - specific like Type{Type{Int32}} was actually declared. - this can be determined using a type intersection. + Type{Type{...}}. we like to avoid unbounded nesting here, so + compile (and hopefully cache) the signature as Type{T}, + unless something more specific like Type{Type{Int32}} was + actually declared. this can be determined using a type + intersection. */ if (!*newparams) *newparams = jl_svec_copy(tt->parameters); if (i < nargs || !definition->isva) { @@ -1017,12 +1018,12 @@ static jl_method_instance_t *cache_method( intptr_t nspec = (mt == NULL || mt == jl_type_type_mt || mt == jl_nonfunction_mt ? definition->nargs + 1 : mt->max_args + 2); jl_compilation_sig(tt, sparams, definition, nspec, &newparams); if (newparams) { - cache_with_orig = 0; compilationsig = jl_apply_tuple_type(newparams); temp2 = (jl_value_t*)compilationsig; // In most cases `!jl_isa_compileable_sig(tt, definition))`, // although for some cases, (notably Varargs) // we might choose a replacement type that's preferable but not strictly better + cache_with_orig = !jl_subtype(compilationsig, definition->sig); } // TODO: maybe assert(jl_isa_compileable_sig(compilationsig, definition)); newmeth = jl_specializations_get_linfo(definition, (jl_value_t*)compilationsig, sparams); @@ -1031,7 +1032,6 @@ static jl_method_instance_t *cache_method( jl_svec_t* guardsigs = jl_emptysvec; if (!cache_with_orig && mt) { // now examine what will happen if we chose to use this sig in the cache - // TODO: should we first check `compilationsig <: definition`? size_t min_valid2 = 1; size_t max_valid2 = ~(size_t)0; temp = ml_matches(mt, 0, compilationsig, MAX_UNSPECIALIZED_CONFLICTS, 1, 1, world, 0, &min_valid2, &max_valid2, NULL); From 56ff37a58365ef5a888c4cbdfebb6a57144f6488 Mon Sep 17 00:00:00 2001 From: Simeon Schaub Date: Fri, 8 Jan 2021 19:34:09 +0100 Subject: [PATCH 08/78] fix count(::BitArray; dims) (#39149) Not sure why this worked before #37461, perhaps #9498? (cherry picked from commit ca075469eb2f09575946e8d122200c6e4d3b0697) --- base/bitarray.jl | 2 +- test/bitarray.jl | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/base/bitarray.jl b/base/bitarray.jl index 94bb94e5a4d03..acc96f7284a54 100644 --- a/base/bitarray.jl +++ b/base/bitarray.jl @@ -1394,7 +1394,7 @@ function bitcount(Bc::Vector{UInt64}; init::T=0) where {T} return n end -count(B::BitArray; init=0) = bitcount(B.chunks; init) +_count(::typeof(identity), B::BitArray, ::Colon, init) = bitcount(B.chunks; init) function unsafe_bitfindnext(Bc::Vector{UInt64}, start::Int) chunk_start = _div64(start-1)+1 diff --git a/test/bitarray.jl b/test/bitarray.jl index ebc99e5fe9568..23cbeae1ffa5c 100644 --- a/test/bitarray.jl +++ b/test/bitarray.jl @@ -1221,6 +1221,7 @@ timesofar("datamove") end @test count(trues(2, 2), init=0x03) === 0x07 + @test count(trues(2, 2, 2), dims=2) == fill(2, 2, 1, 2) end timesofar("find") From 452fd949a32a115864e641158a89d534c88220ec Mon Sep 17 00:00:00 2001 From: Max Horn Date: Wed, 13 Jan 2021 12:19:50 +0100 Subject: [PATCH 09/78] Ensure underscore is applied to trampoline symbols on OSX [#38925] (#39226) Co-authored-by: Ian McInerney --- cli/trampolines/trampolines_x86_64.S | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cli/trampolines/trampolines_x86_64.S b/cli/trampolines/trampolines_x86_64.S index 904d90e0c2511..f80b4bb478c97 100644 --- a/cli/trampolines/trampolines_x86_64.S +++ b/cli/trampolines/trampolines_x86_64.S @@ -34,10 +34,10 @@ #define XX(name) \ DEBUGINFO(name); \ -.global name; \ +.global CNAME(name); \ .cfi_startproc; \ SEH_START1(name); \ -name##:; \ +CNAME(name)##:; \ SEH_START2(); \ CET_START(); \ mov CNAME(name##_addr)(%rip),%r11; \ From 4d96149afd186b16d14700d634851468edecda30 Mon Sep 17 00:00:00 2001 From: Elliot Saba Date: Fri, 15 Jan 2021 08:57:10 -0800 Subject: [PATCH 10/78] Bump `Pkg` to latest tip of `release-1.6` (#39258) Co-authored-by: Dilum Aluthge --- NEWS.md | 1 + .../md5 | 1 + .../sha512 | 1 + .../md5 | 1 - .../sha512 | 1 - doc/src/manual/environment-variables.md | 8 +++----- stdlib/Pkg.version | 2 +- 7 files changed, 7 insertions(+), 8 deletions(-) create mode 100644 deps/checksums/Pkg-537a70350545bfd8f4fe915c6ec9a06708958bb7.tar.gz/md5 create mode 100644 deps/checksums/Pkg-537a70350545bfd8f4fe915c6ec9a06708958bb7.tar.gz/sha512 delete mode 100644 deps/checksums/Pkg-df09a610dad721771243cabcb387324d883ca6c9.tar.gz/md5 delete mode 100644 deps/checksums/Pkg-df09a610dad721771243cabcb387324d883ca6c9.tar.gz/sha512 diff --git a/NEWS.md b/NEWS.md index 0d7017b41690f..423629c7263ab 100644 --- a/NEWS.md +++ b/NEWS.md @@ -75,6 +75,7 @@ Multi-threading changes * Locks now automatically inhibit finalizers from running, to avoid deadlock ([#38487]). * New function `Base.Threads.foreach(f, channel::Channel)` for multithreaded `Channel` consumption ([#34543]). +* There is no longer a restriction on the number of threads ([#36778]). Build system changes -------------------- diff --git a/deps/checksums/Pkg-537a70350545bfd8f4fe915c6ec9a06708958bb7.tar.gz/md5 b/deps/checksums/Pkg-537a70350545bfd8f4fe915c6ec9a06708958bb7.tar.gz/md5 new file mode 100644 index 0000000000000..7bcb96a123043 --- /dev/null +++ b/deps/checksums/Pkg-537a70350545bfd8f4fe915c6ec9a06708958bb7.tar.gz/md5 @@ -0,0 +1 @@ +c09d8e4ba28b2a980982086a7a271367 diff --git a/deps/checksums/Pkg-537a70350545bfd8f4fe915c6ec9a06708958bb7.tar.gz/sha512 b/deps/checksums/Pkg-537a70350545bfd8f4fe915c6ec9a06708958bb7.tar.gz/sha512 new file mode 100644 index 0000000000000..6626a954ebbf2 --- /dev/null +++ b/deps/checksums/Pkg-537a70350545bfd8f4fe915c6ec9a06708958bb7.tar.gz/sha512 @@ -0,0 +1 @@ +a148610b9ab6481243d29bf73e83f8bc9d8f3df3fc533abb69113e46dba695b524d2cc5717ab3d743d7a0e32454c2acb633686652e41b692e7cb7a0c8000a543 diff --git a/deps/checksums/Pkg-df09a610dad721771243cabcb387324d883ca6c9.tar.gz/md5 b/deps/checksums/Pkg-df09a610dad721771243cabcb387324d883ca6c9.tar.gz/md5 deleted file mode 100644 index 0cb757a69c026..0000000000000 --- a/deps/checksums/Pkg-df09a610dad721771243cabcb387324d883ca6c9.tar.gz/md5 +++ /dev/null @@ -1 +0,0 @@ -6f5536ee7d7864ee8ab4aaf200b58204 diff --git a/deps/checksums/Pkg-df09a610dad721771243cabcb387324d883ca6c9.tar.gz/sha512 b/deps/checksums/Pkg-df09a610dad721771243cabcb387324d883ca6c9.tar.gz/sha512 deleted file mode 100644 index 69622ab08c9a0..0000000000000 --- a/deps/checksums/Pkg-df09a610dad721771243cabcb387324d883ca6c9.tar.gz/sha512 +++ /dev/null @@ -1 +0,0 @@ -57942eff7e565adb327e7917fa7386ac4df031592a0ff1ccc135e77027bee61842eb5cff699a18ce1cb2d6e1152726e66277e6878677049734d8caf28a14dc8b diff --git a/doc/src/manual/environment-variables.md b/doc/src/manual/environment-variables.md index 597e65510421a..710ba2e5b09f9 100644 --- a/doc/src/manual/environment-variables.md +++ b/doc/src/manual/environment-variables.md @@ -190,11 +190,9 @@ a master process to establish a connection before dying. ### [`JULIA_NUM_THREADS`](@id JULIA_NUM_THREADS) An unsigned 64-bit integer (`uint64_t`) that sets the maximum number of threads -available to Julia. If `$JULIA_NUM_THREADS` exceeds the number of available -CPU threads (logical cores), then the number of threads is set to the number of CPU threads. If -`$JULIA_NUM_THREADS` is not positive or is not set, or if the number of CPU -threads cannot be determined through system calls, then the number of threads is -set to `1`. +available to Julia. If `$JULIA_NUM_THREADS` is not positive or is not set, or if +the number of CPU threads cannot be determined through system calls, then the number +of threads is set to `1`. !!! note diff --git a/stdlib/Pkg.version b/stdlib/Pkg.version index 0b8f32f752597..c3cef2c09c0c8 100644 --- a/stdlib/Pkg.version +++ b/stdlib/Pkg.version @@ -1,2 +1,2 @@ PKG_BRANCH = release-1.6 -PKG_SHA1 = df09a610dad721771243cabcb387324d883ca6c9 +PKG_SHA1 = 537a70350545bfd8f4fe915c6ec9a06708958bb7 From 8c7e6070976ec4a8d5813512924745ff315c3571 Mon Sep 17 00:00:00 2001 From: Valentin Churavy Date: Mon, 4 Jan 2021 11:12:18 -0500 Subject: [PATCH 11/78] add patches for PPC (cherry picked from commit 2bbd5fb2f0c89d87f13863b6c17a6ca0205291be) --- deps/llvm.mk | 4 +- .../llvm-11-D93092-ppc-knownbits.patch | 51 +- deps/patches/llvm-11-ppc-half-ctr.patch | 96 +++ deps/patches/llvm-11-ppc-sp-from-bp.patch | 621 ++++++++++++++++++ 4 files changed, 750 insertions(+), 22 deletions(-) create mode 100644 deps/patches/llvm-11-ppc-half-ctr.patch create mode 100644 deps/patches/llvm-11-ppc-sp-from-bp.patch diff --git a/deps/llvm.mk b/deps/llvm.mk index f5a4060070320..794e340283d55 100644 --- a/deps/llvm.mk +++ b/deps/llvm.mk @@ -531,8 +531,10 @@ $(eval $(call LLVM_PATCH,llvm-11-D90722-rtdyld-absolute-relocs)) # remove for LL $(eval $(call LLVM_PATCH,llvm-invalid-addrspacecast-sink)) # upstreamed as D92210 $(eval $(call LLVM_PATCH,llvm-11-D92906-ppc-setjmp)) # remove for LLVM 12 $(eval $(call LLVM_PATCH,llvm-11-PR48458-X86ISelDAGToDAG)) # remove for LLVM 12 -$(eval $(call LLVM_PATCH,llvm-11-D93092-ppc-knownbits)) +$(eval $(call LLVM_PATCH,llvm-11-D93092-ppc-knownbits)) # remove for LLVM 12 $(eval $(call LLVM_PATCH,llvm-11-D93154-globalisel-as)) +$(eval $(call LLVM_PATCH,llvm-11-ppc-half-ctr)) # remove for LLVM 12 +$(eval $(call LLVM_PATCH,llvm-11-ppc-sp-from-bp)) # remove for LLVM 12 endif # LLVM_VER 11.0 diff --git a/deps/patches/llvm-11-D93092-ppc-knownbits.patch b/deps/patches/llvm-11-D93092-ppc-knownbits.patch index a4ebecafc82a9..47e6f743ddefd 100644 --- a/deps/patches/llvm-11-D93092-ppc-knownbits.patch +++ b/deps/patches/llvm-11-D93092-ppc-knownbits.patch @@ -1,8 +1,8 @@ -From 8bec64e2c0386934d4e38344907f0f4b0de4d8a3 Mon Sep 17 00:00:00 2001 -From: Valentin Churavy -Date: Tue, 15 Dec 2020 09:59:18 -0500 -Subject: [PATCH] [PowerPC] KnownBits should be constant when performing - non-sign comparison +From b5a0e6ca2b0c6367b082dd9a77b02c26607c8d7d Mon Sep 17 00:00:00 2001 +From: Kai Luo +Date: Tue, 29 Dec 2020 12:11:55 +0000 +Subject: [PATCH 2/4] [PowerPC] Remaining KnownBits should be constant when + performing non-sign comparison In `PPCTargetLowering::DAGCombineTruncBoolExt`, when checking if it's correct to perform the transformation for non-sign comparison, as the comment says ``` @@ -23,20 +23,30 @@ Bit 4, besides bit 0, is still unknown and affects the final result. This patch fixes https://bugs.llvm.org/show_bug.cgi?id=48388. +Reviewed By: nemanjai, #powerpc + Differential Revision: https://reviews.llvm.org/D93092 --- - llvm/lib/Target/PowerPC/PPCISelLowering.cpp | 3 +- - llvm/test/CodeGen/PowerPC/pr48388.ll | 42 +++++++++++++++++++++ - 2 files changed, 44 insertions(+), 1 deletion(-) + llvm/lib/Target/PowerPC/PPCISelLowering.cpp | 10 +++-- + llvm/test/CodeGen/PowerPC/pr48388.ll | 41 +++++++++++++++++++++ + 2 files changed, 47 insertions(+), 4 deletions(-) create mode 100644 llvm/test/CodeGen/PowerPC/pr48388.ll diff --git llvm/lib/Target/PowerPC/PPCISelLowering.cpp llvm/lib/Target/PowerPC/PPCISelLowering.cpp -index f54f1673526d..76b32db44656 100644 +index f54f1673526d..38dbff4197b9 100644 --- llvm/lib/Target/PowerPC/PPCISelLowering.cpp +++ llvm/lib/Target/PowerPC/PPCISelLowering.cpp -@@ -13291,7 +13291,8 @@ SDValue PPCTargetLowering::DAGCombineTruncBoolExt(SDNode *N, - Op1Known.Zero.clearBit(0); Op1Known.One.clearBit(0); - Op2Known.Zero.clearBit(0); Op2Known.One.clearBit(0); +@@ -13287,11 +13287,13 @@ SDValue PPCTargetLowering::DAGCombineTruncBoolExt(SDNode *N, + KnownBits Op2Known = DAG.computeKnownBits(N->getOperand(1)); + + // We don't really care about what is known about the first bit (if +- // anything), so clear it in all masks prior to comparing them. +- Op1Known.Zero.clearBit(0); Op1Known.One.clearBit(0); +- Op2Known.Zero.clearBit(0); Op2Known.One.clearBit(0); ++ // anything), so pretend that it is known zero for both to ensure they can ++ // be compared as constants. ++ Op1Known.Zero.setBit(0); Op1Known.One.clearBit(0); ++ Op2Known.Zero.setBit(0); Op2Known.One.clearBit(0); - if (Op1Known.Zero != Op2Known.Zero || Op1Known.One != Op2Known.One) + if (!Op1Known.isConstant() || !Op2Known.isConstant() || @@ -46,10 +56,10 @@ index f54f1673526d..76b32db44656 100644 } diff --git llvm/test/CodeGen/PowerPC/pr48388.ll llvm/test/CodeGen/PowerPC/pr48388.ll new file mode 100644 -index 000000000000..138fb6147832 +index 000000000000..822e5d852317 --- /dev/null +++ llvm/test/CodeGen/PowerPC/pr48388.ll -@@ -0,0 +1,42 @@ +@@ -0,0 +1,41 @@ +; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py +; RUN: llc -verify-machineinstrs -mtriple=powerpc64le -ppc-asm-full-reg-names \ +; RUN: < %s | FileCheck %s @@ -58,13 +68,12 @@ index 000000000000..138fb6147832 +; CHECK-LABEL: julia_div_i64: +; CHECK: # %bb.0: # %entry +; CHECK-NEXT: divd r6, r3, r4 -+; CHECK-NEXT: li r5, 32767 -+; CHECK-NEXT: sldi r5, r5, 32 -+; CHECK-NEXT: oris r7, r5, 40069 -+; CHECK-NEXT: oris r5, r5, 40079 ++; CHECK-NEXT: lis r5, -1592 ++; CHECK-NEXT: ori r7, r5, 21321 ++; CHECK-NEXT: ori r5, r5, 65519 +; CHECK-NEXT: cmpdi r3, 0 -+; CHECK-NEXT: ori r7, r7, 13456 -+; CHECK-NEXT: ori r5, r5, 65264 ++; CHECK-NEXT: rldic r7, r7, 4, 17 ++; CHECK-NEXT: rldic r5, r5, 4, 17 +; CHECK-NEXT: iselgt r9, r5, r7 +; CHECK-NEXT: cmpdi r4, 0 +; CHECK-NEXT: mulld r8, r6, r4 @@ -93,5 +102,5 @@ index 000000000000..138fb6147832 + ret i64 %12 +} -- -2.29.2 +2.30.0 diff --git a/deps/patches/llvm-11-ppc-half-ctr.patch b/deps/patches/llvm-11-ppc-half-ctr.patch new file mode 100644 index 0000000000000..e9a9b9a4d5f86 --- /dev/null +++ b/deps/patches/llvm-11-ppc-half-ctr.patch @@ -0,0 +1,96 @@ +From 79a73d6388790cfec9bd76b1790f0f5551a9df8c Mon Sep 17 00:00:00 2001 +From: Nemanja Ivanovic +Date: Mon, 28 Dec 2020 22:51:51 -0600 +Subject: [PATCH 1/4] [PowerPC] Disable CTR loops containing operations on + half-precision + +On subtargets prior to Power9, conversions to/from half precision +are lowered to libcalls. This makes loops containing such operations +invalid candidates for HW loops. + +Fixes: https://bugs.llvm.org/show_bug.cgi?id=48519 +--- + .../Target/PowerPC/PPCTargetTransformInfo.cpp | 4 ++ + llvm/test/CodeGen/PowerPC/pr48519.ll | 55 +++++++++++++++++++ + 2 files changed, 59 insertions(+) + create mode 100644 llvm/test/CodeGen/PowerPC/pr48519.ll + +diff --git llvm/lib/Target/PowerPC/PPCTargetTransformInfo.cpp llvm/lib/Target/PowerPC/PPCTargetTransformInfo.cpp +index 53556ffc267d..49c10fdf8898 100644 +--- llvm/lib/Target/PowerPC/PPCTargetTransformInfo.cpp ++++ llvm/lib/Target/PowerPC/PPCTargetTransformInfo.cpp +@@ -441,6 +441,10 @@ bool PPCTTIImpl::mightUseCTR(BasicBlock *BB, TargetLibraryInfo *LibInfo, + isLargeIntegerTy(!TM.isPPC64(), CI->getSrcTy()->getScalarType()) || + isLargeIntegerTy(!TM.isPPC64(), CI->getDestTy()->getScalarType())) + return true; ++ if (!ST->isISA3_0() && ++ (CI->getSrcTy()->getScalarType()->isHalfTy() || ++ CI->getDestTy()->getScalarType()->isHalfTy())) ++ return true; + } else if (isLargeIntegerTy(!TM.isPPC64(), + J->getType()->getScalarType()) && + (J->getOpcode() == Instruction::UDiv || +diff --git llvm/test/CodeGen/PowerPC/pr48519.ll llvm/test/CodeGen/PowerPC/pr48519.ll +new file mode 100644 +index 000000000000..777874e91c26 +--- /dev/null ++++ llvm/test/CodeGen/PowerPC/pr48519.ll +@@ -0,0 +1,55 @@ ++; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py ++; RUN: llc -mcpu=pwr8 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \ ++; RUN: -mtriple=powerpc64le-unknown-unknown < %s | FileCheck %s ++define void @julia__typed_vcat_20() #0 { ++; CHECK-LABEL: julia__typed_vcat_20: ++; CHECK: # %bb.0: # %top ++; CHECK-NEXT: mflr r0 ++; CHECK-NEXT: std r30, -16(r1) # 8-byte Folded Spill ++; CHECK-NEXT: std r0, 16(r1) ++; CHECK-NEXT: stdu r1, -48(r1) ++; CHECK-NEXT: li r3, 1 ++; CHECK-NEXT: li r30, 0 ++; CHECK-NEXT: .p2align 4 ++; CHECK-NEXT: .LBB0_1: # %L139 ++; CHECK-NEXT: # ++; CHECK-NEXT: addi r3, r3, -1 ++; CHECK-NEXT: mtfprd f0, r3 ++; CHECK-NEXT: xscvsxdsp f1, f0 ++; CHECK-NEXT: bl __gnu_f2h_ieee ++; CHECK-NEXT: nop ++; CHECK-NEXT: bl __gnu_h2f_ieee ++; CHECK-NEXT: nop ++; CHECK-NEXT: addi r30, r30, -1 ++; CHECK-NEXT: li r3, 0 ++; CHECK-NEXT: cmpldi r30, 0 ++; CHECK-NEXT: bne+ cr0, .LBB0_1 ++; CHECK-NEXT: # %bb.2: # %pass.1 ++; CHECK-NEXT: bl __gnu_f2h_ieee ++; CHECK-NEXT: nop ++; CHECK-NEXT: sth r3, 0(r3) ++top: ++ %.sroa.6.0.copyload = load i64, i64 addrspace(11)* null, align 8 ++ %0 = call { i64, i1 } @llvm.ssub.with.overflow.i64(i64 %.sroa.6.0.copyload, i64 0) ++ %1 = extractvalue { i64, i1 } %0, 0 ++ br label %L139 ++ ++L139: ; preds = %L139, %top ++ %value_phi21 = phi i64 [ %5, %L139 ], [ 1, %top ] ++ %value_phi23 = phi i64 [ 0, %L139 ], [ 1, %top ] ++ %2 = add nsw i64 %value_phi23, -1 ++ %3 = add i64 %2, 0 ++ %4 = sitofp i64 %3 to half ++ store half %4, half addrspace(13)* undef, align 2 ++ %.not101.not = icmp eq i64 %value_phi21, 0 ++ %5 = add i64 %value_phi21, 1 ++ br i1 %.not101.not, label %pass.1, label %L139 ++ ++pass.1: ; preds = %L139 ++ unreachable ++} ++ ++; Function Attrs: nounwind readnone speculatable willreturn ++declare { i64, i1 } @llvm.ssub.with.overflow.i64(i64, i64) #0 ++ ++attributes #0 = { nounwind } +-- +2.30.0 + diff --git a/deps/patches/llvm-11-ppc-sp-from-bp.patch b/deps/patches/llvm-11-ppc-sp-from-bp.patch new file mode 100644 index 0000000000000..014cfb237a303 --- /dev/null +++ b/deps/patches/llvm-11-ppc-sp-from-bp.patch @@ -0,0 +1,621 @@ +From 646760460fa06f8577d35282cde5faf8f0ed8499 Mon Sep 17 00:00:00 2001 +From: Nemanja Ivanovic +Date: Tue, 22 Dec 2020 05:43:33 -0600 +Subject: [PATCH 4/4] [PowerPC] Restore stack ptr from base ptr when available + +On subtargets that have a red zone, we will copy the stack pointer to the base +pointer in the prologue prior to updating the stack pointer. There are no other +updates to the base pointer after that. This suggests that we should be able to +restore the stack pointer from the base pointer rather than loading it from the +back chain or adding the frame size back to either the stack pointer or the +frame pointer. +This came about because functions that call setjmp need to restore the SP from +the FP because the back chain might have been clobbered +(see https://reviews.llvm.org/D92906). However, if the stack is realigned, the +restored SP might be incorrect (which is what caused the failures in the two +ASan test cases). + +This patch was tested quite extensivelly both with sanitizer runtimes and +general code. + +Differential revision: https://reviews.llvm.org/D93327 +--- + llvm/lib/Target/PowerPC/PPCFrameLowering.cpp | 9 +- + llvm/test/CodeGen/PowerPC/aix-base-pointer.ll | 8 +- + llvm/test/CodeGen/PowerPC/pr46759.ll | 2 +- + .../CodeGen/PowerPC/stack-clash-prologue.ll | 498 ++++++++++++++++++ + llvm/test/CodeGen/PowerPC/stack-realign.ll | 4 +- + 5 files changed, 513 insertions(+), 8 deletions(-) + +diff --git llvm/lib/Target/PowerPC/PPCFrameLowering.cpp llvm/lib/Target/PowerPC/PPCFrameLowering.cpp +index 66db0f199e15..80cbaa475184 100644 +--- llvm/lib/Target/PowerPC/PPCFrameLowering.cpp ++++ llvm/lib/Target/PowerPC/PPCFrameLowering.cpp +@@ -1704,11 +1704,18 @@ void PPCFrameLowering::emitEpilogue(MachineFunction &MF, + // offset by the STDU/STDUX/STWU/STWUX instruction. For targets with red + // zone add this offset back now. + ++ // If the function has a base pointer, the stack pointer has been copied ++ // to it so we can restore it by copying in the other direction. ++ if (HasRedZone && HasBP) { ++ BuildMI(MBB, MBBI, dl, OrInst, RBReg). ++ addReg(BPReg). ++ addReg(BPReg); ++ } + // If this function contained a fastcc call and GuaranteedTailCallOpt is + // enabled (=> hasFastCall()==true) the fastcc call might contain a tail + // call which invalidates the stack pointer value in SP(0). So we use the + // value of R31 in this case. Similar situation exists with setjmp. +- if (FI->hasFastCall() || MF.exposesReturnsTwice()) { ++ else if (FI->hasFastCall() || MF.exposesReturnsTwice()) { + assert(HasFP && "Expecting a valid frame pointer."); + if (!HasRedZone) + RBReg = FPReg; +diff --git llvm/test/CodeGen/PowerPC/aix-base-pointer.ll llvm/test/CodeGen/PowerPC/aix-base-pointer.ll +index 2566e31c025d..5141fd9e4222 100644 +--- llvm/test/CodeGen/PowerPC/aix-base-pointer.ll ++++ llvm/test/CodeGen/PowerPC/aix-base-pointer.ll +@@ -27,8 +27,8 @@ declare void @callee(i32*) + ; 32BIT: stwux 1, 1, 0 + ; 32BIT: addi 3, 1, 64 + ; 32BIT: bl .callee +-; 32BIT: lwz 1, 0(1) +-; 32BIT: lwz 30, -8(1) ++; 32BIT: mr 1, 30 ++; 32BIT: lwz 30, -16(1) + + ; 64BIT-LABEL: .caller: + ; 64BIT: std 30, -16(1) +@@ -38,5 +38,5 @@ declare void @callee(i32*) + ; 64BIT: stdux 1, 1, 0 + ; 64BIT: addi 3, 1, 128 + ; 64BIT: bl .callee +-; 64BIT: ld 1, 0(1) +-; 64BIT: ld 30, -16(1) ++; 64BIT: mr 1, 30 ++; 64BIT: ld 30, -24(1) +diff --git llvm/test/CodeGen/PowerPC/pr46759.ll llvm/test/CodeGen/PowerPC/pr46759.ll +index d1d68a5db7e3..92f2c64bc06a 100644 +--- llvm/test/CodeGen/PowerPC/pr46759.ll ++++ llvm/test/CodeGen/PowerPC/pr46759.ll +@@ -45,7 +45,7 @@ define void @foo(i32 %vla_size) #0 { + ; CHECK-LE-NEXT: .LBB0_2: # %entry + ; CHECK-LE-NEXT: addi r3, r1, 2048 + ; CHECK-LE-NEXT: lbz r3, 0(r3) +-; CHECK-LE-NEXT: ld r1, 0(r1) ++; CHECK-LE-NEXT: mr r1, r30 + ; CHECK-LE-NEXT: ld r31, -8(r1) + ; CHECK-LE-NEXT: ld r30, -16(r1) + ; CHECK-LE-NEXT: blr +diff --git llvm/test/CodeGen/PowerPC/stack-clash-prologue.ll llvm/test/CodeGen/PowerPC/stack-clash-prologue.ll +index cb513be9128c..6443059c9704 100644 +--- llvm/test/CodeGen/PowerPC/stack-clash-prologue.ll ++++ llvm/test/CodeGen/PowerPC/stack-clash-prologue.ll +@@ -528,4 +528,502 @@ entry: + ret i8 %c + } + ++; alloca + align < probe_size ++define i32 @f8(i64 %i) local_unnamed_addr #0 { ++; CHECK-LE-LABEL: f8: ++; CHECK-LE: # %bb.0: ++; CHECK-LE-NEXT: clrldi r0, r1, 58 ++; CHECK-LE-NEXT: std r30, -16(r1) ++; CHECK-LE-NEXT: mr r30, r1 ++; CHECK-LE-NEXT: subfic r0, r0, -896 ++; CHECK-LE-NEXT: stdux r1, r1, r0 ++; CHECK-LE-NEXT: .cfi_def_cfa_register r30 ++; CHECK-LE-NEXT: .cfi_offset r30, -16 ++; CHECK-LE-NEXT: addi r4, r1, 64 ++; CHECK-LE-NEXT: sldi r3, r3, 2 ++; CHECK-LE-NEXT: li r5, 1 ++; CHECK-LE-NEXT: stwx r5, r4, r3 ++; CHECK-LE-NEXT: lwz r3, 64(r1) ++; CHECK-LE-NEXT: mr r1, r30 ++; CHECK-LE-NEXT: ld r30, -16(r1) ++; CHECK-LE-NEXT: blr ++; ++; CHECK-BE-LABEL: f8: ++; CHECK-BE: # %bb.0: ++; CHECK-BE-NEXT: clrldi r0, r1, 58 ++; CHECK-BE-NEXT: std r30, -16(r1) ++; CHECK-BE-NEXT: mr r30, r1 ++; CHECK-BE-NEXT: subfic r0, r0, -896 ++; CHECK-BE-NEXT: stdux r1, r1, r0 ++; CHECK-BE-NEXT: .cfi_def_cfa_register r30 ++; CHECK-BE-NEXT: .cfi_offset r30, -16 ++; CHECK-BE-NEXT: addi r4, r1, 64 ++; CHECK-BE-NEXT: li r5, 1 ++; CHECK-BE-NEXT: sldi r3, r3, 2 ++; CHECK-BE-NEXT: stwx r5, r4, r3 ++; CHECK-BE-NEXT: lwz r3, 64(r1) ++; CHECK-BE-NEXT: mr r1, r30 ++; CHECK-BE-NEXT: ld r30, -16(r1) ++; CHECK-BE-NEXT: blr ++; ++; CHECK-32-LABEL: f8: ++; CHECK-32: # %bb.0: ++; CHECK-32-NEXT: clrlwi r0, r1, 26 ++; CHECK-32-NEXT: subfic r0, r0, -896 ++; CHECK-32-NEXT: stwux r1, r1, r0 ++; CHECK-32-NEXT: sub r0, r1, r0 ++; CHECK-32-NEXT: addic r0, r0, -8 ++; CHECK-32-NEXT: stwx r30, 0, r0 ++; CHECK-32-NEXT: addic r30, r0, 8 ++; CHECK-32-NEXT: .cfi_def_cfa_register r30 ++; CHECK-32-NEXT: .cfi_offset r30, -8 ++; CHECK-32-NEXT: addi r3, r1, 64 ++; CHECK-32-NEXT: li r5, 1 ++; CHECK-32-NEXT: slwi r4, r4, 2 ++; CHECK-32-NEXT: stwx r5, r3, r4 ++; CHECK-32-NEXT: mr r0, r31 ++; CHECK-32-NEXT: lwz r3, 64(r1) ++; CHECK-32-NEXT: lwz r31, 0(r1) ++; CHECK-32-NEXT: lwz r30, -8(r31) ++; CHECK-32-NEXT: mr r1, r31 ++; CHECK-32-NEXT: mr r31, r0 ++; CHECK-32-NEXT: blr ++ %a = alloca i32, i32 200, align 64 ++ %b = getelementptr inbounds i32, i32* %a, i64 %i ++ store volatile i32 1, i32* %b ++ %c = load volatile i32, i32* %a ++ ret i32 %c ++} ++ ++; alloca > probe_size, align > probe_size ++define i32 @f9(i64 %i) local_unnamed_addr #0 { ++; CHECK-LE-LABEL: f9: ++; CHECK-LE: # %bb.0: ++; CHECK-LE-NEXT: std r30, -16(r1) ++; CHECK-LE-NEXT: mr r30, r1 ++; CHECK-LE-NEXT: .cfi_def_cfa r30, 0 ++; CHECK-LE-NEXT: clrldi r0, r30, 53 ++; CHECK-LE-NEXT: subc r12, r30, r0 ++; CHECK-LE-NEXT: clrldi r0, r0, 52 ++; CHECK-LE-NEXT: cmpdi r0, 0 ++; CHECK-LE-NEXT: beq cr0, .LBB9_2 ++; CHECK-LE-NEXT: # %bb.1: ++; CHECK-LE-NEXT: neg r0, r0 ++; CHECK-LE-NEXT: stdux r30, r1, r0 ++; CHECK-LE-NEXT: .LBB9_2: ++; CHECK-LE-NEXT: li r0, -4096 ++; CHECK-LE-NEXT: cmpd r1, r12 ++; CHECK-LE-NEXT: beq cr0, .LBB9_4 ++; CHECK-LE-NEXT: .LBB9_3: ++; CHECK-LE-NEXT: stdux r30, r1, r0 ++; CHECK-LE-NEXT: cmpd r1, r12 ++; CHECK-LE-NEXT: bne cr0, .LBB9_3 ++; CHECK-LE-NEXT: .LBB9_4: ++; CHECK-LE-NEXT: mr r12, r30 ++; CHECK-LE-NEXT: stdu r12, -2048(r1) ++; CHECK-LE-NEXT: stdu r12, -4096(r1) ++; CHECK-LE-NEXT: stdu r12, -4096(r1) ++; CHECK-LE-NEXT: .cfi_def_cfa_register r1 ++; CHECK-LE-NEXT: .cfi_def_cfa_register r30 ++; CHECK-LE-NEXT: .cfi_offset r30, -16 ++; CHECK-LE-NEXT: addi r4, r1, 2048 ++; CHECK-LE-NEXT: sldi r3, r3, 2 ++; CHECK-LE-NEXT: li r5, 1 ++; CHECK-LE-NEXT: stwx r5, r4, r3 ++; CHECK-LE-NEXT: lwz r3, 2048(r1) ++; CHECK-LE-NEXT: mr r1, r30 ++; CHECK-LE-NEXT: ld r30, -16(r1) ++; CHECK-LE-NEXT: blr ++; ++; CHECK-BE-LABEL: f9: ++; CHECK-BE: # %bb.0: ++; CHECK-BE-NEXT: std r30, -16(r1) ++; CHECK-BE-NEXT: mr r30, r1 ++; CHECK-BE-NEXT: .cfi_def_cfa r30, 0 ++; CHECK-BE-NEXT: clrldi r0, r30, 53 ++; CHECK-BE-NEXT: subc r12, r30, r0 ++; CHECK-BE-NEXT: clrldi r0, r0, 52 ++; CHECK-BE-NEXT: cmpdi r0, 0 ++; CHECK-BE-NEXT: beq cr0, .LBB9_2 ++; CHECK-BE-NEXT: # %bb.1: ++; CHECK-BE-NEXT: neg r0, r0 ++; CHECK-BE-NEXT: stdux r30, r1, r0 ++; CHECK-BE-NEXT: .LBB9_2: ++; CHECK-BE-NEXT: li r0, -4096 ++; CHECK-BE-NEXT: cmpd r1, r12 ++; CHECK-BE-NEXT: beq cr0, .LBB9_4 ++; CHECK-BE-NEXT: .LBB9_3: ++; CHECK-BE-NEXT: stdux r30, r1, r0 ++; CHECK-BE-NEXT: cmpd r1, r12 ++; CHECK-BE-NEXT: bne cr0, .LBB9_3 ++; CHECK-BE-NEXT: .LBB9_4: ++; CHECK-BE-NEXT: mr r12, r30 ++; CHECK-BE-NEXT: stdu r12, -2048(r1) ++; CHECK-BE-NEXT: stdu r12, -4096(r1) ++; CHECK-BE-NEXT: stdu r12, -4096(r1) ++; CHECK-BE-NEXT: .cfi_def_cfa_register r1 ++; CHECK-BE-NEXT: .cfi_def_cfa_register r30 ++; CHECK-BE-NEXT: .cfi_offset r30, -16 ++; CHECK-BE-NEXT: addi r4, r1, 2048 ++; CHECK-BE-NEXT: li r5, 1 ++; CHECK-BE-NEXT: sldi r3, r3, 2 ++; CHECK-BE-NEXT: stwx r5, r4, r3 ++; CHECK-BE-NEXT: lwz r3, 2048(r1) ++; CHECK-BE-NEXT: mr r1, r30 ++; CHECK-BE-NEXT: ld r30, -16(r1) ++; CHECK-BE-NEXT: blr ++; ++; CHECK-32-LABEL: f9: ++; CHECK-32: # %bb.0: ++; CHECK-32-NEXT: mr r12, r1 ++; CHECK-32-NEXT: .cfi_def_cfa r12, 0 ++; CHECK-32-NEXT: clrlwi r0, r12, 21 ++; CHECK-32-NEXT: subc r1, r1, r0 ++; CHECK-32-NEXT: stwu r12, -2048(r1) ++; CHECK-32-NEXT: stwu r12, -4096(r1) ++; CHECK-32-NEXT: stwu r12, -4096(r1) ++; CHECK-32-NEXT: .cfi_def_cfa_register r1 ++; CHECK-32-NEXT: sub r0, r1, r12 ++; CHECK-32-NEXT: sub r0, r1, r0 ++; CHECK-32-NEXT: addic r0, r0, -8 ++; CHECK-32-NEXT: stwx r30, 0, r0 ++; CHECK-32-NEXT: addic r30, r0, 8 ++; CHECK-32-NEXT: .cfi_def_cfa_register r30 ++; CHECK-32-NEXT: .cfi_offset r30, -8 ++; CHECK-32-NEXT: addi r3, r1, 2048 ++; CHECK-32-NEXT: li r5, 1 ++; CHECK-32-NEXT: slwi r4, r4, 2 ++; CHECK-32-NEXT: stwx r5, r3, r4 ++; CHECK-32-NEXT: mr r0, r31 ++; CHECK-32-NEXT: lwz r3, 2048(r1) ++; CHECK-32-NEXT: lwz r31, 0(r1) ++; CHECK-32-NEXT: lwz r30, -8(r31) ++; CHECK-32-NEXT: mr r1, r31 ++; CHECK-32-NEXT: mr r31, r0 ++; CHECK-32-NEXT: blr ++ %a = alloca i32, i32 2000, align 2048 ++ %b = getelementptr inbounds i32, i32* %a, i64 %i ++ store volatile i32 1, i32* %b ++ %c = load volatile i32, i32* %a ++ ret i32 %c ++} ++ ++; alloca < probe_size, align < probe_size, alloca + align > probe_size ++define i32 @f10(i64 %i) local_unnamed_addr #0 { ++; CHECK-LE-LABEL: f10: ++; CHECK-LE: # %bb.0: ++; CHECK-LE-NEXT: std r30, -16(r1) ++; CHECK-LE-NEXT: mr r30, r1 ++; CHECK-LE-NEXT: .cfi_def_cfa r30, 0 ++; CHECK-LE-NEXT: clrldi r0, r30, 54 ++; CHECK-LE-NEXT: subc r12, r30, r0 ++; CHECK-LE-NEXT: clrldi r0, r0, 52 ++; CHECK-LE-NEXT: cmpdi r0, 0 ++; CHECK-LE-NEXT: beq cr0, .LBB10_2 ++; CHECK-LE-NEXT: # %bb.1: ++; CHECK-LE-NEXT: neg r0, r0 ++; CHECK-LE-NEXT: stdux r30, r1, r0 ++; CHECK-LE-NEXT: .LBB10_2: ++; CHECK-LE-NEXT: li r0, -4096 ++; CHECK-LE-NEXT: cmpd r1, r12 ++; CHECK-LE-NEXT: beq cr0, .LBB10_4 ++; CHECK-LE-NEXT: .LBB10_3: ++; CHECK-LE-NEXT: stdux r30, r1, r0 ++; CHECK-LE-NEXT: cmpd r1, r12 ++; CHECK-LE-NEXT: bne cr0, .LBB10_3 ++; CHECK-LE-NEXT: .LBB10_4: ++; CHECK-LE-NEXT: mr r12, r30 ++; CHECK-LE-NEXT: stdu r12, -1024(r1) ++; CHECK-LE-NEXT: stdu r12, -4096(r1) ++; CHECK-LE-NEXT: .cfi_def_cfa_register r1 ++; CHECK-LE-NEXT: .cfi_def_cfa_register r30 ++; CHECK-LE-NEXT: .cfi_offset r30, -16 ++; CHECK-LE-NEXT: addi r4, r1, 1024 ++; CHECK-LE-NEXT: sldi r3, r3, 2 ++; CHECK-LE-NEXT: li r5, 1 ++; CHECK-LE-NEXT: stwx r5, r4, r3 ++; CHECK-LE-NEXT: lwz r3, 1024(r1) ++; CHECK-LE-NEXT: mr r1, r30 ++; CHECK-LE-NEXT: ld r30, -16(r1) ++; CHECK-LE-NEXT: blr ++; ++; CHECK-BE-LABEL: f10: ++; CHECK-BE: # %bb.0: ++; CHECK-BE-NEXT: std r30, -16(r1) ++; CHECK-BE-NEXT: mr r30, r1 ++; CHECK-BE-NEXT: .cfi_def_cfa r30, 0 ++; CHECK-BE-NEXT: clrldi r0, r30, 54 ++; CHECK-BE-NEXT: subc r12, r30, r0 ++; CHECK-BE-NEXT: clrldi r0, r0, 52 ++; CHECK-BE-NEXT: cmpdi r0, 0 ++; CHECK-BE-NEXT: beq cr0, .LBB10_2 ++; CHECK-BE-NEXT: # %bb.1: ++; CHECK-BE-NEXT: neg r0, r0 ++; CHECK-BE-NEXT: stdux r30, r1, r0 ++; CHECK-BE-NEXT: .LBB10_2: ++; CHECK-BE-NEXT: li r0, -4096 ++; CHECK-BE-NEXT: cmpd r1, r12 ++; CHECK-BE-NEXT: beq cr0, .LBB10_4 ++; CHECK-BE-NEXT: .LBB10_3: ++; CHECK-BE-NEXT: stdux r30, r1, r0 ++; CHECK-BE-NEXT: cmpd r1, r12 ++; CHECK-BE-NEXT: bne cr0, .LBB10_3 ++; CHECK-BE-NEXT: .LBB10_4: ++; CHECK-BE-NEXT: mr r12, r30 ++; CHECK-BE-NEXT: stdu r12, -1024(r1) ++; CHECK-BE-NEXT: stdu r12, -4096(r1) ++; CHECK-BE-NEXT: .cfi_def_cfa_register r1 ++; CHECK-BE-NEXT: .cfi_def_cfa_register r30 ++; CHECK-BE-NEXT: .cfi_offset r30, -16 ++; CHECK-BE-NEXT: addi r4, r1, 1024 ++; CHECK-BE-NEXT: li r5, 1 ++; CHECK-BE-NEXT: sldi r3, r3, 2 ++; CHECK-BE-NEXT: stwx r5, r4, r3 ++; CHECK-BE-NEXT: lwz r3, 1024(r1) ++; CHECK-BE-NEXT: mr r1, r30 ++; CHECK-BE-NEXT: ld r30, -16(r1) ++; CHECK-BE-NEXT: blr ++; ++; CHECK-32-LABEL: f10: ++; CHECK-32: # %bb.0: ++; CHECK-32-NEXT: mr r12, r1 ++; CHECK-32-NEXT: .cfi_def_cfa r12, 0 ++; CHECK-32-NEXT: clrlwi r0, r12, 22 ++; CHECK-32-NEXT: subc r1, r1, r0 ++; CHECK-32-NEXT: stwu r12, -1024(r1) ++; CHECK-32-NEXT: stwu r12, -4096(r1) ++; CHECK-32-NEXT: .cfi_def_cfa_register r1 ++; CHECK-32-NEXT: sub r0, r1, r12 ++; CHECK-32-NEXT: sub r0, r1, r0 ++; CHECK-32-NEXT: addic r0, r0, -8 ++; CHECK-32-NEXT: stwx r30, 0, r0 ++; CHECK-32-NEXT: addic r30, r0, 8 ++; CHECK-32-NEXT: .cfi_def_cfa_register r30 ++; CHECK-32-NEXT: .cfi_offset r30, -8 ++; CHECK-32-NEXT: addi r3, r1, 1024 ++; CHECK-32-NEXT: li r5, 1 ++; CHECK-32-NEXT: slwi r4, r4, 2 ++; CHECK-32-NEXT: stwx r5, r3, r4 ++; CHECK-32-NEXT: mr r0, r31 ++; CHECK-32-NEXT: lwz r3, 1024(r1) ++; CHECK-32-NEXT: lwz r31, 0(r1) ++; CHECK-32-NEXT: lwz r30, -8(r31) ++; CHECK-32-NEXT: mr r1, r31 ++; CHECK-32-NEXT: mr r31, r0 ++; CHECK-32-NEXT: blr ++ %a = alloca i32, i32 1000, align 1024 ++ %b = getelementptr inbounds i32, i32* %a, i64 %i ++ store volatile i32 1, i32* %b ++ %c = load volatile i32, i32* %a ++ ret i32 %c ++} ++ ++define void @f11(i32 %vla_size, i64 %i) #0 { ++; CHECK-LE-LABEL: f11: ++; CHECK-LE: # %bb.0: ++; CHECK-LE-NEXT: std r31, -8(r1) ++; CHECK-LE-NEXT: std r30, -16(r1) ++; CHECK-LE-NEXT: mr r30, r1 ++; CHECK-LE-NEXT: .cfi_def_cfa r30, 0 ++; CHECK-LE-NEXT: clrldi r0, r30, 49 ++; CHECK-LE-NEXT: subc r12, r30, r0 ++; CHECK-LE-NEXT: clrldi r0, r0, 52 ++; CHECK-LE-NEXT: cmpdi r0, 0 ++; CHECK-LE-NEXT: beq cr0, .LBB11_2 ++; CHECK-LE-NEXT: # %bb.1: ++; CHECK-LE-NEXT: neg r0, r0 ++; CHECK-LE-NEXT: stdux r30, r1, r0 ++; CHECK-LE-NEXT: .LBB11_2: ++; CHECK-LE-NEXT: li r0, -4096 ++; CHECK-LE-NEXT: cmpd r1, r12 ++; CHECK-LE-NEXT: beq cr0, .LBB11_4 ++; CHECK-LE-NEXT: .LBB11_3: ++; CHECK-LE-NEXT: stdux r30, r1, r0 ++; CHECK-LE-NEXT: cmpd r1, r12 ++; CHECK-LE-NEXT: bne cr0, .LBB11_3 ++; CHECK-LE-NEXT: .LBB11_4: ++; CHECK-LE-NEXT: mr r12, r30 ++; CHECK-LE-NEXT: li r0, 24 ++; CHECK-LE-NEXT: mtctr r0 ++; CHECK-LE-NEXT: .LBB11_5: ++; CHECK-LE-NEXT: stdu r12, -4096(r1) ++; CHECK-LE-NEXT: bdnz .LBB11_5 ++; CHECK-LE-NEXT: # %bb.6: ++; CHECK-LE-NEXT: .cfi_def_cfa_register r1 ++; CHECK-LE-NEXT: .cfi_def_cfa_register r30 ++; CHECK-LE-NEXT: .cfi_offset r31, -8 ++; CHECK-LE-NEXT: .cfi_offset r30, -16 ++; CHECK-LE-NEXT: clrldi r3, r3, 32 ++; CHECK-LE-NEXT: lis r5, 1 ++; CHECK-LE-NEXT: mr r31, r1 ++; CHECK-LE-NEXT: li r6, 1 ++; CHECK-LE-NEXT: addi r3, r3, 15 ++; CHECK-LE-NEXT: ori r5, r5, 0 ++; CHECK-LE-NEXT: rldicl r3, r3, 60, 4 ++; CHECK-LE-NEXT: sldi r4, r4, 2 ++; CHECK-LE-NEXT: add r5, r31, r5 ++; CHECK-LE-NEXT: rldicl r3, r3, 4, 31 ++; CHECK-LE-NEXT: stwx r6, r5, r4 ++; CHECK-LE-NEXT: li r4, -32768 ++; CHECK-LE-NEXT: neg r7, r3 ++; CHECK-LE-NEXT: ld r3, 0(r1) ++; CHECK-LE-NEXT: and r4, r7, r4 ++; CHECK-LE-NEXT: mr r7, r4 ++; CHECK-LE-NEXT: li r4, -4096 ++; CHECK-LE-NEXT: divd r5, r7, r4 ++; CHECK-LE-NEXT: mulld r4, r5, r4 ++; CHECK-LE-NEXT: sub r5, r7, r4 ++; CHECK-LE-NEXT: add r4, r1, r7 ++; CHECK-LE-NEXT: stdux r3, r1, r5 ++; CHECK-LE-NEXT: cmpd r1, r4 ++; CHECK-LE-NEXT: beq cr0, .LBB11_8 ++; CHECK-LE-NEXT: .LBB11_7: ++; CHECK-LE-NEXT: stdu r3, -4096(r1) ++; CHECK-LE-NEXT: cmpd r1, r4 ++; CHECK-LE-NEXT: bne cr0, .LBB11_7 ++; CHECK-LE-NEXT: .LBB11_8: ++; CHECK-LE-NEXT: addi r3, r1, -32768 ++; CHECK-LE-NEXT: lbz r3, 0(r3) ++; CHECK-LE-NEXT: mr r1, r30 ++; CHECK-LE-NEXT: ld r31, -8(r1) ++; CHECK-LE-NEXT: ld r30, -16(r1) ++; CHECK-LE-NEXT: blr ++; ++; CHECK-BE-LABEL: f11: ++; CHECK-BE: # %bb.0: ++; CHECK-BE-NEXT: std r31, -8(r1) ++; CHECK-BE-NEXT: std r30, -16(r1) ++; CHECK-BE-NEXT: mr r30, r1 ++; CHECK-BE-NEXT: .cfi_def_cfa r30, 0 ++; CHECK-BE-NEXT: clrldi r0, r30, 49 ++; CHECK-BE-NEXT: subc r12, r30, r0 ++; CHECK-BE-NEXT: clrldi r0, r0, 52 ++; CHECK-BE-NEXT: cmpdi r0, 0 ++; CHECK-BE-NEXT: beq cr0, .LBB11_2 ++; CHECK-BE-NEXT: # %bb.1: ++; CHECK-BE-NEXT: neg r0, r0 ++; CHECK-BE-NEXT: stdux r30, r1, r0 ++; CHECK-BE-NEXT: .LBB11_2: ++; CHECK-BE-NEXT: li r0, -4096 ++; CHECK-BE-NEXT: cmpd r1, r12 ++; CHECK-BE-NEXT: beq cr0, .LBB11_4 ++; CHECK-BE-NEXT: .LBB11_3: ++; CHECK-BE-NEXT: stdux r30, r1, r0 ++; CHECK-BE-NEXT: cmpd r1, r12 ++; CHECK-BE-NEXT: bne cr0, .LBB11_3 ++; CHECK-BE-NEXT: .LBB11_4: ++; CHECK-BE-NEXT: mr r12, r30 ++; CHECK-BE-NEXT: li r0, 24 ++; CHECK-BE-NEXT: mtctr r0 ++; CHECK-BE-NEXT: .LBB11_5: ++; CHECK-BE-NEXT: stdu r12, -4096(r1) ++; CHECK-BE-NEXT: bdnz .LBB11_5 ++; CHECK-BE-NEXT: # %bb.6: ++; CHECK-BE-NEXT: .cfi_def_cfa_register r1 ++; CHECK-BE-NEXT: .cfi_def_cfa_register r30 ++; CHECK-BE-NEXT: .cfi_offset r31, -8 ++; CHECK-BE-NEXT: .cfi_offset r30, -16 ++; CHECK-BE-NEXT: clrldi r3, r3, 32 ++; CHECK-BE-NEXT: lis r5, 1 ++; CHECK-BE-NEXT: addi r3, r3, 15 ++; CHECK-BE-NEXT: mr r31, r1 ++; CHECK-BE-NEXT: ori r5, r5, 0 ++; CHECK-BE-NEXT: rldicl r3, r3, 60, 4 ++; CHECK-BE-NEXT: add r5, r31, r5 ++; CHECK-BE-NEXT: sldi r4, r4, 2 ++; CHECK-BE-NEXT: li r6, 1 ++; CHECK-BE-NEXT: rldicl r3, r3, 4, 31 ++; CHECK-BE-NEXT: stwx r6, r5, r4 ++; CHECK-BE-NEXT: neg r7, r3 ++; CHECK-BE-NEXT: li r4, -32768 ++; CHECK-BE-NEXT: and r4, r7, r4 ++; CHECK-BE-NEXT: ld r3, 0(r1) ++; CHECK-BE-NEXT: mr r7, r4 ++; CHECK-BE-NEXT: li r4, -4096 ++; CHECK-BE-NEXT: divd r5, r7, r4 ++; CHECK-BE-NEXT: mulld r4, r5, r4 ++; CHECK-BE-NEXT: sub r5, r7, r4 ++; CHECK-BE-NEXT: add r4, r1, r7 ++; CHECK-BE-NEXT: stdux r3, r1, r5 ++; CHECK-BE-NEXT: cmpd r1, r4 ++; CHECK-BE-NEXT: beq cr0, .LBB11_8 ++; CHECK-BE-NEXT: .LBB11_7: ++; CHECK-BE-NEXT: stdu r3, -4096(r1) ++; CHECK-BE-NEXT: cmpd r1, r4 ++; CHECK-BE-NEXT: bne cr0, .LBB11_7 ++; CHECK-BE-NEXT: .LBB11_8: ++; CHECK-BE-NEXT: addi r3, r1, -32768 ++; CHECK-BE-NEXT: lbz r3, 0(r3) ++; CHECK-BE-NEXT: mr r1, r30 ++; CHECK-BE-NEXT: ld r31, -8(r1) ++; CHECK-BE-NEXT: ld r30, -16(r1) ++; CHECK-BE-NEXT: blr ++; ++; CHECK-32-LABEL: f11: ++; CHECK-32: # %bb.0: ++; CHECK-32-NEXT: mr r12, r1 ++; CHECK-32-NEXT: .cfi_def_cfa r12, 0 ++; CHECK-32-NEXT: clrlwi r0, r12, 17 ++; CHECK-32-NEXT: subc r1, r1, r0 ++; CHECK-32-NEXT: li r0, 24 ++; CHECK-32-NEXT: mtctr r0 ++; CHECK-32-NEXT: .LBB11_1: ++; CHECK-32-NEXT: stwu r12, -4096(r1) ++; CHECK-32-NEXT: bdnz .LBB11_1 ++; CHECK-32-NEXT: # %bb.2: ++; CHECK-32-NEXT: .cfi_def_cfa_register r1 ++; CHECK-32-NEXT: sub r0, r1, r12 ++; CHECK-32-NEXT: sub r0, r1, r0 ++; CHECK-32-NEXT: addic r0, r0, -4 ++; CHECK-32-NEXT: stwx r31, 0, r0 ++; CHECK-32-NEXT: addic r0, r0, -4 ++; CHECK-32-NEXT: stwx r30, 0, r0 ++; CHECK-32-NEXT: addic r30, r0, 8 ++; CHECK-32-NEXT: .cfi_def_cfa_register r30 ++; CHECK-32-NEXT: .cfi_offset r31, -4 ++; CHECK-32-NEXT: .cfi_offset r30, -8 ++; CHECK-32-NEXT: lis r4, 1 ++; CHECK-32-NEXT: mr r31, r1 ++; CHECK-32-NEXT: ori r4, r4, 0 ++; CHECK-32-NEXT: addi r3, r3, 15 ++; CHECK-32-NEXT: add r4, r31, r4 ++; CHECK-32-NEXT: li r5, 1 ++; CHECK-32-NEXT: slwi r6, r6, 2 ++; CHECK-32-NEXT: rlwinm r3, r3, 0, 0, 27 ++; CHECK-32-NEXT: neg r7, r3 ++; CHECK-32-NEXT: stwx r5, r4, r6 ++; CHECK-32-NEXT: li r4, -32768 ++; CHECK-32-NEXT: and r4, r7, r4 ++; CHECK-32-NEXT: lwz r3, 0(r1) ++; CHECK-32-NEXT: mr r7, r4 ++; CHECK-32-NEXT: li r4, -4096 ++; CHECK-32-NEXT: divw r5, r7, r4 ++; CHECK-32-NEXT: mullw r4, r5, r4 ++; CHECK-32-NEXT: sub r5, r7, r4 ++; CHECK-32-NEXT: add r4, r1, r7 ++; CHECK-32-NEXT: stwux r3, r1, r5 ++; CHECK-32-NEXT: cmpw r1, r4 ++; CHECK-32-NEXT: beq cr0, .LBB11_4 ++; CHECK-32-NEXT: .LBB11_3: ++; CHECK-32-NEXT: stwu r3, -4096(r1) ++; CHECK-32-NEXT: cmpw r1, r4 ++; CHECK-32-NEXT: bne cr0, .LBB11_3 ++; CHECK-32-NEXT: .LBB11_4: ++; CHECK-32-NEXT: addi r3, r1, -32768 ++; CHECK-32-NEXT: lbz r3, 0(r3) ++; CHECK-32-NEXT: lwz r31, 0(r1) ++; CHECK-32-NEXT: lwz r0, -4(r31) ++; CHECK-32-NEXT: lwz r30, -8(r31) ++; CHECK-32-NEXT: mr r1, r31 ++; CHECK-32-NEXT: mr r31, r0 ++; CHECK-32-NEXT: blr ++ %a = alloca i32, i32 4096, align 32768 ++ %b = getelementptr inbounds i32, i32* %a, i64 %i ++ store volatile i32 1, i32* %b ++ %1 = zext i32 %vla_size to i64 ++ %vla = alloca i8, i64 %1, align 2048 ++ %2 = load volatile i8, i8* %vla, align 2048 ++ ret void ++} ++ + attributes #0 = { "probe-stack"="inline-asm" } +diff --git llvm/test/CodeGen/PowerPC/stack-realign.ll llvm/test/CodeGen/PowerPC/stack-realign.ll +index ea3603b9ce20..640bfb81709a 100644 +--- llvm/test/CodeGen/PowerPC/stack-realign.ll ++++ llvm/test/CodeGen/PowerPC/stack-realign.ll +@@ -43,7 +43,7 @@ entry: + + ; CHECK: std 3, 48(30) + +-; CHECK: ld 1, 0(1) ++; CHECK: mr 1, 30 + ; CHECK-DAG: ld [[SR:[0-9]+]], 16(1) + ; CHECK-DAG: ld 30, -16(1) + ; CHECK-DAG: mtlr [[SR]] +@@ -69,7 +69,7 @@ entry: + + ; CHECK-FP: std 3, 48(30) + +-; CHECK-FP: ld 1, 0(1) ++; CHECK-FP: mr 1, 30 + ; CHECK-FP-DAG: ld [[SR:[0-9]+]], 16(1) + ; CHECK-FP-DAG: ld 31, -8(1) + ; CHECK-FP-DAG: ld 30, -16(1) +-- +2.30.0 + From 3a8fc6319e6e75d47849d71fd8f99075c5ec0a33 Mon Sep 17 00:00:00 2001 From: Ian McInerney Date: Tue, 5 Jan 2021 19:10:50 +0000 Subject: [PATCH 12/78] Backport LLVM patch to fix LLVM build on GCC 11 GCC 11 has changed header dependencies again, so the build of LLVM fails because wasn't being included when it should be. This is already fixed upstream in LLVM 12. (cherry picked from commit 4935775fdc43e2b0bb8e88edc98b838bcc296d29) --- deps/llvm.mk | 3 +++ ...llvm-rGb498303066a6-gcc11-header-fix.patch | 21 +++++++++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 deps/patches/llvm-rGb498303066a6-gcc11-header-fix.patch diff --git a/deps/llvm.mk b/deps/llvm.mk index 794e340283d55..854ba44947c3c 100644 --- a/deps/llvm.mk +++ b/deps/llvm.mk @@ -484,6 +484,7 @@ $(eval $(call LLVM_PATCH,llvm-julia-tsan-custom-as)) $(eval $(call LLVM_PATCH,llvm-9.0-D85499)) # landed as D85553 $(eval $(call LLVM_PATCH,llvm-D80101)) # remove for LLVM 12 $(eval $(call LLVM_PATCH,llvm-D84031)) # remove for LLVM 12 +$(eval $(call LLVM_PATCH,llvm-rGb498303066a6-gcc11-header-fix)) # remove for LLVM 12 endif # LLVM_VER 9.0 ifeq ($(LLVM_VER_SHORT),10.0) @@ -508,6 +509,7 @@ $(eval $(call LLVM_PATCH,llvm-10-unique_function_clang-sa)) ifeq ($(BUILD_LLVM_CLANG),1) $(eval $(call LLVM_PATCH,llvm-D88630-clang-cmake)) endif +$(eval $(call LLVM_PATCH,llvm-rGb498303066a6-gcc11-header-fix)) # remove for LLVM 12 endif # LLVM_VER 10.0 ifeq ($(LLVM_VER_SHORT),11.0) @@ -535,6 +537,7 @@ $(eval $(call LLVM_PATCH,llvm-11-D93092-ppc-knownbits)) # remove for LLVM 12 $(eval $(call LLVM_PATCH,llvm-11-D93154-globalisel-as)) $(eval $(call LLVM_PATCH,llvm-11-ppc-half-ctr)) # remove for LLVM 12 $(eval $(call LLVM_PATCH,llvm-11-ppc-sp-from-bp)) # remove for LLVM 12 +$(eval $(call LLVM_PATCH,llvm-rGb498303066a6-gcc11-header-fix)) # remove for LLVM 12 endif # LLVM_VER 11.0 diff --git a/deps/patches/llvm-rGb498303066a6-gcc11-header-fix.patch b/deps/patches/llvm-rGb498303066a6-gcc11-header-fix.patch new file mode 100644 index 0000000000000..a1683c91c5b29 --- /dev/null +++ b/deps/patches/llvm-rGb498303066a6-gcc11-header-fix.patch @@ -0,0 +1,21 @@ +From b498303066a63a203d24f739b2d2e0e56dca70d1 Mon Sep 17 00:00:00 2001 +From: serge-sans-paille +Date: Tue, 10 Nov 2020 14:55:25 +0100 +Subject: [PATCH] [nfc] Fix missing include + +--- + llvm/utils/benchmark/src/benchmark_register.h | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/llvm/utils/benchmark/src/benchmark_register.h b/llvm/utils/benchmark/src/benchmark_register.h +index 0705e219f2fa..4caa5ad4da07 100644 +--- a/utils/benchmark/src/benchmark_register.h ++++ b/utils/benchmark/src/benchmark_register.h +@@ -1,6 +1,7 @@ + #ifndef BENCHMARK_REGISTER_H + #define BENCHMARK_REGISTER_H + ++#include + #include + + #include "check.h" From fbb68c34ff9ebdcfef9f1130db9733e240ef9d9a Mon Sep 17 00:00:00 2001 From: Valentin Churavy Date: Tue, 12 Jan 2021 17:54:31 -0500 Subject: [PATCH 13/78] move LLVM assert subversion to llvm.mk (cherry picked from commit 81701f1fdfc6c4510c10369696779636103340ca) --- deps/Versions.make | 6 +----- deps/llvm.mk | 6 ++++++ 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/deps/Versions.make b/deps/Versions.make index b59bfd70a4f77..885d2b578a074 100644 --- a/deps/Versions.make +++ b/deps/Versions.make @@ -46,12 +46,8 @@ LIBUV_JLL_NAME := LibUV # LLVM LLVM_VER := 11.0.0 +LLVM_ASSERT_JLL_VER := 11.0.0+4 LLVM_JLL_NAME := libLLVM -# We provide a way to subversively swap out which LLVM JLL we pull artifacts from -ifeq ($(BINARYBUILDER_LLVM_ASSERTS), 1) -LLVM_JLL_VER := 11.0.0+4 -LLVM_JLL_DOWNLOAD_NAME := libLLVM_assert -endif # LLVM_tools (downloads LLVM_jll to get things like `lit` and `opt`) LLVM_TOOLS_JLL_NAME := LLVM diff --git a/deps/llvm.mk b/deps/llvm.mk index 854ba44947c3c..f97438dcf847d 100644 --- a/deps/llvm.mk +++ b/deps/llvm.mk @@ -623,6 +623,12 @@ update-llvm: endif else # USE_BINARYBUILDER_LLVM +# We provide a way to subversively swap out which LLVM JLL we pull artifacts from +ifeq ($(BINARYBUILDER_LLVM_ASSERTS), 1) +LLVM_JLL_DOWNLOAD_NAME := libLLVM_assert +LLVM_JLL_VER := $(LLVM_ASSERT_JLL_VER) +endif + $(eval $(call bb-install,llvm,LLVM,false,true)) $(eval $(call bb-install,clang,CLANG,false,true)) $(eval $(call bb-install,llvm-tools,LLVM_TOOLS,false,true)) From 582b1e8e5acb63d8cd0f11dddcbb7cef524cf7b6 Mon Sep 17 00:00:00 2001 From: Valentin Churavy Date: Tue, 12 Jan 2021 17:55:05 -0500 Subject: [PATCH 14/78] update LLVM binaries (cherry picked from commit 918ab6d3632b82be89a7172bb4ef69e450408ba4) --- deps/Versions.make | 6 +- deps/checksums/clang | 118 ++++++----- deps/checksums/llvm | 348 ++++++++++++++++---------------- stdlib/libLLVM_jll/Project.toml | 2 +- 4 files changed, 236 insertions(+), 238 deletions(-) diff --git a/deps/Versions.make b/deps/Versions.make index 885d2b578a074..c46eb8e6c8a71 100644 --- a/deps/Versions.make +++ b/deps/Versions.make @@ -15,7 +15,7 @@ CSL_JLL_NAME := CompilerSupportLibraries # Clang (paired with LLVM, only here as a JLL download) CLANG_JLL_NAME := Clang -CLANG_JLL_VER := 11.0.0+5 +CLANG_JLL_VER := 11.0.0+7 # DSFMT DSFMT_VER := 2.2.4 @@ -46,12 +46,12 @@ LIBUV_JLL_NAME := LibUV # LLVM LLVM_VER := 11.0.0 -LLVM_ASSERT_JLL_VER := 11.0.0+4 +LLVM_ASSERT_JLL_VER := 11.0.0+7 LLVM_JLL_NAME := libLLVM # LLVM_tools (downloads LLVM_jll to get things like `lit` and `opt`) LLVM_TOOLS_JLL_NAME := LLVM -LLVM_TOOLS_JLL_VER := 11.0.0+6 +LLVM_TOOLS_JLL_VER := 11.0.0+7 # MbedTLS MBEDTLS_VER := 2.24.0 diff --git a/deps/checksums/clang b/deps/checksums/clang index 3418bdd2a037d..1ba74208abaf6 100644 --- a/deps/checksums/clang +++ b/deps/checksums/clang @@ -1,60 +1,58 @@ -Clang.v11.0.0+5.aarch64-apple-darwin.tar.gz/md5/ee869cb2099c8f601f6709a606c13675 -Clang.v11.0.0+5.aarch64-apple-darwin.tar.gz/sha512/0013160dff035ef95fb0ac7fc20698502e57d65cb3b6c1d6d7ff0b108027f848339ef6f5df69572bbdf9c71a838f0e36f91d60743fc5457e71a675846b8909c1 -Clang.v11.0.0+5.aarch64-linux-gnu-cxx03.tar.gz/md5/5119ff5fe445989a72d898960bf5f3b7 -Clang.v11.0.0+5.aarch64-linux-gnu-cxx03.tar.gz/sha512/705deae4e76acdf99ebd9d69a12234713e86c1f7f70813fbced373ea1861d55551673f96eb27fb66a24a3e73a015fda5822afa484246de630db4a514a13c744b -Clang.v11.0.0+5.aarch64-linux-gnu-cxx11.tar.gz/md5/50e69755bd6b32c1b412afcfb17de416 -Clang.v11.0.0+5.aarch64-linux-gnu-cxx11.tar.gz/sha512/a3b18fc3542f9a9cb84971c64276b62fb2ad3a9d4a591e567a408ec1f14d5084f9444d768981a0d0557fcadb70bfceef3d0b8309ef95e4a8d3eb4241daeed372 -Clang.v11.0.0+5.aarch64-linux-musl-cxx03.tar.gz/md5/f1b670ad6beedf8d219af395679c95ea -Clang.v11.0.0+5.aarch64-linux-musl-cxx03.tar.gz/sha512/e806c42a33b17570286725b5671100513d30caadcc2ee732a47f114e317627947b754cb0efedc88cb5fb2a24500df83316cc7a34121cf1dce98dcf8bcebe2bd0 -Clang.v11.0.0+5.aarch64-linux-musl-cxx11.tar.gz/md5/b436fb5b0f7a3598439ba0c4459ccc75 -Clang.v11.0.0+5.aarch64-linux-musl-cxx11.tar.gz/sha512/cd6642f5ebfe238bb60c555c36cae39229333be7c4c44b1d963f6a853568c7ed3f82e93bc53ad972bdda5992318a6b8d10daeac44e1a2fb40534cb60b6969162 -Clang.v11.0.0+5.armv6l-linux-gnueabihf-cxx03.tar.gz/md5/7ec7a1f1f0914a2f41001009e64a2011 -Clang.v11.0.0+5.armv6l-linux-gnueabihf-cxx03.tar.gz/sha512/ab4dc2f726c39bdb8c0ca328e61412c1a6838a88d3bd6d8427a49e9b4b48bcc753b90804784d5bfd8f2e1dc475e1bb3f55b9fa414f4d9bcf85ff0e63877fdf45 -Clang.v11.0.0+5.armv6l-linux-gnueabihf-cxx11.tar.gz/md5/82d5c0eaaf002914bc6da3303a648ee5 -Clang.v11.0.0+5.armv6l-linux-gnueabihf-cxx11.tar.gz/sha512/9ecd73513b7631d6633b9fb1892e9af761a408c5918c3c75e3a396f6a5ab8cf3086f7d31c8e2b642769a73c904f9298278967fe98bf4c176ea91a4067558ef10 -Clang.v11.0.0+5.armv6l-linux-musleabihf-cxx03.tar.gz/md5/cbc6c81dfb273214226bf2e9ccf70ca9 -Clang.v11.0.0+5.armv6l-linux-musleabihf-cxx03.tar.gz/sha512/1b6cbff37a97312ffdc8481585bfcaeabb849af7a88cbe4a2f40e23ce4b9eeb92ade5d302f1bd3978f7101bb38109cf09982c47294d8cd71b2a2b828e6ffb20d -Clang.v11.0.0+5.armv6l-linux-musleabihf-cxx11.tar.gz/md5/d9db1b16ae1d2d2e31f3833c667f4281 -Clang.v11.0.0+5.armv6l-linux-musleabihf-cxx11.tar.gz/sha512/a7c43d7cef60df18d9e4dbc6b8cd54002c14a5a06fc4e669bb83a90459c8e79913f7ec29f5f7c1dd70ca6a7633b72dc205174056b4ca513b6522442e2b613ef1 -Clang.v11.0.0+5.armv7l-linux-gnueabihf-cxx03.tar.gz/md5/19269cc26a412d1925a37c8725f17779 -Clang.v11.0.0+5.armv7l-linux-gnueabihf-cxx03.tar.gz/sha512/a7d572766498c6cc052596c2e5d623d903c01b978773e778d36c19495bec458508b0e9150d85547ceebacbe55d66484042e22c33b2e66efad94b13229bb0d4e4 -Clang.v11.0.0+5.armv7l-linux-gnueabihf-cxx11.tar.gz/md5/d2d87790c35a9c47fab7923e875e50a5 -Clang.v11.0.0+5.armv7l-linux-gnueabihf-cxx11.tar.gz/sha512/a7fb3a38545d4f2cdbd8aa18b8fba4bc25167d686ff3ff7f499881aab51fb9b82e637b8885c2f1c9b0371dc9d9a8ea52dec1aecc0d9bc463d08e72ba20bebff3 -Clang.v11.0.0+5.armv7l-linux-musleabihf-cxx03.tar.gz/md5/b9834356f1b5248e7baa9d47ba979573 -Clang.v11.0.0+5.armv7l-linux-musleabihf-cxx03.tar.gz/sha512/e9ddfbde93b75875537c969de68c74a155c282c5de795adf5be39e79f8e9ee45d1e03a0eefe40f611da81794a611acf6139e6894f8dc8140b9e79d5863988ec2 -Clang.v11.0.0+5.armv7l-linux-musleabihf-cxx11.tar.gz/md5/5976a9955e67267810b78b319b31900a -Clang.v11.0.0+5.armv7l-linux-musleabihf-cxx11.tar.gz/sha512/b4ff28cd505fe870b6450c4009881409ec76e8d8f75a1a57c1d7be4e435c78f1b5e0ff66defc2d9e089efaa23421aa8eed7f438e129fed3313569c667a9e41fa -Clang.v11.0.0+5.i686-linux-gnu-cxx03.tar.gz/md5/54e9d0f4ef0527f931464943e419c475 -Clang.v11.0.0+5.i686-linux-gnu-cxx03.tar.gz/sha512/9061e2ff3dbbe68c44c3ee3d2c455bf1ce216bae1aca4f4da56275ed84020b537eeaf510085b585bf27fded6bee2a05fad6bf457d4eb6a87d4ee74dd25788648 -Clang.v11.0.0+5.i686-linux-gnu-cxx11.tar.gz/md5/7bc64cc7b057ea02950a1f9e62658b42 -Clang.v11.0.0+5.i686-linux-gnu-cxx11.tar.gz/sha512/3a5cd8445ef37406d380d250d68727bc37029b679f0529c6efbe05dc3583cd5020a45c1619e7e1b758b966fa64973193e010f20ec80340f4d91e6b6e718c166d -Clang.v11.0.0+5.i686-linux-musl-cxx03.tar.gz/md5/af9793c0bdcecd654f055d127b988f29 -Clang.v11.0.0+5.i686-linux-musl-cxx03.tar.gz/sha512/ceb18e6c1182a79203a3cb292cc1655edd15c92cab394e29c3f7b0fcd07b7c4a9c545dde313fde4e2e00425759ecfaa2294028fe7535ce16dbd18e1495020189 -Clang.v11.0.0+5.i686-linux-musl-cxx11.tar.gz/md5/d557e35ca96715b5afc5d1e94723e858 -Clang.v11.0.0+5.i686-linux-musl-cxx11.tar.gz/sha512/77477ab77b91f2d14e950968b8001be89dc551e258dc1d30165d1f191aee6b58e67c72d8d2d19547b7bbe505eccade35243d6ad0a9126a131fbb73a88d66e6fa -Clang.v11.0.0+5.i686-w64-mingw32-cxx03.tar.gz/md5/2014ef645f4224afddee27dfd4d3debc -Clang.v11.0.0+5.i686-w64-mingw32-cxx03.tar.gz/sha512/e912596d75395b87799daad4e50d0aea1fb92ae4447c59751f3251ae43bd9c7f0d27448cd5b64a38762d95c515660a347f422d38fe5451313149d1e6e6dd7229 -Clang.v11.0.0+5.i686-w64-mingw32-cxx11.tar.gz/md5/5c50168c711e09cf3742263ad6f98f88 -Clang.v11.0.0+5.i686-w64-mingw32-cxx11.tar.gz/sha512/10210f051ed83fbd4e095deb31fcba24f69653a9d76d7074f256f524312a1af2529e94239127c8f6995b4cdb02f5063f7932616b01456c0297ed7d433eae85e2 -Clang.v11.0.0+5.powerpc64le-linux-gnu-cxx03.tar.gz/md5/dae1cfc253daf8225cba968144145985 -Clang.v11.0.0+5.powerpc64le-linux-gnu-cxx03.tar.gz/sha512/d481561e0c28cbc98df2b37f29c05cb6dfe5473a766dbea6c889af0b5fa77081939d4b6c5d2ac7c80047ede33b370b94bfb74d464708999409e1451d0cebd0ea -Clang.v11.0.0+5.powerpc64le-linux-gnu-cxx11.tar.gz/md5/7646c87464295d598e745f3720c07c63 -Clang.v11.0.0+5.powerpc64le-linux-gnu-cxx11.tar.gz/sha512/3d8e602acfacbf03903854cf7be0addd87541edfbc8b8ce54ee4b82634ec1d3f5bb89639fe7b81a58b2ab4d3f70b7837a953f5a564bf6ac6176659804716de69 -Clang.v11.0.0+5.x86_64-apple-darwin.tar.gz/md5/29bd442f1ab0dc93f8134d3206d417c2 -Clang.v11.0.0+5.x86_64-apple-darwin.tar.gz/sha512/814aa5eb0d1363a7e766c2abde8738dfc0c985b900375fafd327bee74827832a2007405d1489675295cf7a99339757d30c9fa879668f53cbf6cc5d222b888f3f -Clang.v11.0.0+5.x86_64-linux-gnu-cxx03.tar.gz/md5/6d895ddeb6d12aa0f9a31d8a5107740e -Clang.v11.0.0+5.x86_64-linux-gnu-cxx03.tar.gz/sha512/32aedd555fdb16b786b4b4236ebc6af2ec2a650ecb075ea69399f7ef0bf231a7a7d5ffe96cb902ade8893eeef70a87ff9e7270eddb86496095df8dfe2cf76781 -Clang.v11.0.0+5.x86_64-linux-gnu-cxx11.tar.gz/md5/a867af44afd3a8db704f16c880ad6fe7 -Clang.v11.0.0+5.x86_64-linux-gnu-cxx11.tar.gz/sha512/5800fdadb932c2919bfb93effd095a9de1a1fad3be22e2ecb40720889aa362688628ac6259a14076b05bf0a5d2b4a71ca23e9e1869fa17a863dd3b48e6abba5a -Clang.v11.0.0+5.x86_64-linux-musl-cxx03.tar.gz/md5/db111e1ccc6ff0f980351718de56df41 -Clang.v11.0.0+5.x86_64-linux-musl-cxx03.tar.gz/sha512/79b0e005eae0fb8bc842f7999fbab95a039fd50cd6a2dc09be61bfbca1ac2756b41ada2a9fffb19389a230de577b8bcfdaf396e785622e1cda7a53eeb1633656 -Clang.v11.0.0+5.x86_64-linux-musl-cxx11.tar.gz/md5/f7722956e75183cfb4660a77fe151204 -Clang.v11.0.0+5.x86_64-linux-musl-cxx11.tar.gz/sha512/e81ac1e6b5ae4aa2ed298ad27a31d3661d29dd1e25fd42618feb843eaf80199782e4fe93737d063f97461c6b0dcdf1fa7a6cf91a2c04278a3b2a9f8ffc70ba6d -Clang.v11.0.0+5.x86_64-unknown-freebsd.tar.gz/md5/36e9bb2651d4e6bd9057eb9f6b460b8d -Clang.v11.0.0+5.x86_64-unknown-freebsd.tar.gz/sha512/eec634359e79a977101a1981576dff86782b4b9cd36d21dfbf0c1900d83f5809fb53170befc80efe7979d5cd3a986f4ba5b517a9c547401ec1824513d01dff70 -Clang.v11.0.0+5.x86_64-w64-mingw32-cxx03.tar.gz/md5/5e09b6fdc8dc8eee91d9e4069d0aa1ce -Clang.v11.0.0+5.x86_64-w64-mingw32-cxx03.tar.gz/sha512/83b5ab18479c9755686771465976fb22e779a280498d95b371c9bf6d4d956f689f15bea1a85eb117fa03ea683edee9b8bcf3b9f1fb49c0ac659326d8d1a84271 -Clang.v11.0.0+5.x86_64-w64-mingw32-cxx11.tar.gz/md5/c77285af89c91830f1a95a6a9377256b -Clang.v11.0.0+5.x86_64-w64-mingw32-cxx11.tar.gz/sha512/20ff223db7309589c612f49c62d75b4c38b4149d8f2db67c0f5b00f8ba83f60b639502c91df99e1c1b3f4a04be491397a6330cb606f469e059dbee978db31f55 -clang-11.0.0.src.tar.xz/md5/d8fbc5b1d27f44922cfbbf199d0bab78 -clang-11.0.0.src.tar.xz/sha512/5874d99d05aa6ac0a7f5131a8522440ca1fc332a63cbfbf92f844ecb03e7f698a1839106fe6d1c8efaa839d03a4547cda5ab40f445d9923b99907d8cf1988276 +Clang.v11.0.0+7.aarch64-apple-darwin.tar.gz/md5/523880d02dd53ff48b6b6097f0abc7cf +Clang.v11.0.0+7.aarch64-apple-darwin.tar.gz/sha512/dd9c418d7c014d45ddd79292cb4d8764eaeda29a7fd2818dad5c31fe8a3eb9fcb672872ec48c2bd8a5d46bdef1b83c95ea518a6ebc71621099e61af95cf6118d +Clang.v11.0.0+7.aarch64-linux-gnu-cxx03.tar.gz/md5/ff239626d87fb287096014d4efbbab11 +Clang.v11.0.0+7.aarch64-linux-gnu-cxx03.tar.gz/sha512/666dc827aecb82c7b44b941805f84cfc68b3bb29a5b4ce7a55ec42ec08e05da3e29c7d894d1d7da01d10344c1303d5bd2609d93498771523d2bdfb6cdcd6f6c9 +Clang.v11.0.0+7.aarch64-linux-gnu-cxx11.tar.gz/md5/2363604f41e5ca6100535c80dc3b80f1 +Clang.v11.0.0+7.aarch64-linux-gnu-cxx11.tar.gz/sha512/e80f5e8d27eeb9202c7e239bc0e8a28ba17d013d2785a1a6a196fe62e1f649a49e77c395e7f95c8c006b4442c89ce9ea6d24e31b764baf8805e9387f369fc2e2 +Clang.v11.0.0+7.aarch64-linux-musl-cxx03.tar.gz/md5/db2dc0ea38e3f7ce34ffbbffb21e09b5 +Clang.v11.0.0+7.aarch64-linux-musl-cxx03.tar.gz/sha512/96e915e59f0dfcdc19d8926549e34c4840aa9e21a9405d66cb031de13cc2f3b77fc628b1fe0d7dda444310cb8e2325ce3054bbbd6797d86046527d65d71a0e8e +Clang.v11.0.0+7.aarch64-linux-musl-cxx11.tar.gz/md5/7e79d95f9bb4f102d2f764feaede6810 +Clang.v11.0.0+7.aarch64-linux-musl-cxx11.tar.gz/sha512/ef84544b2ab136c7ce513e119c2425eda1393046e5fabad17e5eca5347e1f14392a2f91a0ae7ddc67c3bd0f85cf7f9eebcca447d76dbccb0e239e57fea35263d +Clang.v11.0.0+7.armv6l-linux-gnueabihf-cxx03.tar.gz/md5/46ca009704fd5625d8b8f7ff4fbc0e8d +Clang.v11.0.0+7.armv6l-linux-gnueabihf-cxx03.tar.gz/sha512/7a62022d55fe926e09ec25accd0d7e89b9125213b1d8a831d91be325f1f48b806b0075797d8696122750070f012b1bedb1ead297a807739c44670125a7892d1f +Clang.v11.0.0+7.armv6l-linux-gnueabihf-cxx11.tar.gz/md5/01159dd8a103a601f1f3c931ab8c0cf1 +Clang.v11.0.0+7.armv6l-linux-gnueabihf-cxx11.tar.gz/sha512/86ba3017d3d7921b665bf80d0a6b8fb84a5448fcd4dfbe274893d34d5601df06a6c36e4f76bf6afc550e140e96000d0ef8889bca868359b8478aeef12b35cae6 +Clang.v11.0.0+7.armv6l-linux-musleabihf-cxx03.tar.gz/md5/8354574eaa55d53176e811b6a0737357 +Clang.v11.0.0+7.armv6l-linux-musleabihf-cxx03.tar.gz/sha512/546970a1e94a62d498bf1236324274231da8b226d579f46b1e82b3a80ad2f3b16307e26d7f695f799e35dc56998e178452322e5eb4224f6de9824abc975a6d90 +Clang.v11.0.0+7.armv6l-linux-musleabihf-cxx11.tar.gz/md5/7cfdc62a2cd74a11b12535982e24c186 +Clang.v11.0.0+7.armv6l-linux-musleabihf-cxx11.tar.gz/sha512/571d757442c85466d90d340af0b78c263b3aa5b99033c9efb0f8af344b65a1e2bd2e1f76801214804146b93d6c4a48362225e9dcb40633a8167ef78e1873b491 +Clang.v11.0.0+7.armv7l-linux-gnueabihf-cxx03.tar.gz/md5/555fb0382e5717d5a5e38a76a1e1aa9b +Clang.v11.0.0+7.armv7l-linux-gnueabihf-cxx03.tar.gz/sha512/19541d1a3258ca81b1d838f555522d13df09539735c7a865d8f58d8b34e6ed10691a144d9b8b08af56590ed7a880342d16b657a14f65066bfba3ab6f2491d3bd +Clang.v11.0.0+7.armv7l-linux-gnueabihf-cxx11.tar.gz/md5/13938301261315065b1395a414e889a2 +Clang.v11.0.0+7.armv7l-linux-gnueabihf-cxx11.tar.gz/sha512/0f211ac82d2ccfaed7e6f52eee88b740feb7dc3dc99d3ef1727bf409112024f4bee07665d67336c918fb06d6d7db29956f931fb81bb014e6a5ae1261c8d1b397 +Clang.v11.0.0+7.armv7l-linux-musleabihf-cxx03.tar.gz/md5/2a1cbbad08d19b3af00003613b0ee7fa +Clang.v11.0.0+7.armv7l-linux-musleabihf-cxx03.tar.gz/sha512/5136f28a19e8307182f39f35fb7a722f6b8b71761e7276243f35aa010e0d9e3449e332b164bd4d603bdf4e48cb4980c5dd97fb805741d348bd4269343a36cd0f +Clang.v11.0.0+7.armv7l-linux-musleabihf-cxx11.tar.gz/md5/c25d1cc28abe4a559f5e4e89fc459013 +Clang.v11.0.0+7.armv7l-linux-musleabihf-cxx11.tar.gz/sha512/26a4342352e0afef5470e42239a51ee7e5c82d6157a1cca21873f53c0c49c0f47e0a0baa57669f7617fce8d56cce7ad039f79fd0f1c3a57242f9f09f47a3fe51 +Clang.v11.0.0+7.i686-linux-gnu-cxx03.tar.gz/md5/9e48cac26e0cb5a6c703540c781f2f98 +Clang.v11.0.0+7.i686-linux-gnu-cxx03.tar.gz/sha512/c1d9e2edcffc57864a6e1848fdd7e5fc562d905adca18573dcb1d4ecd148438de69286dad7e611f3655ab8380857ad58ea1097c54fd439e4714cac19000addf1 +Clang.v11.0.0+7.i686-linux-gnu-cxx11.tar.gz/md5/e6600376f1b17bb9309cdc79e32ccc72 +Clang.v11.0.0+7.i686-linux-gnu-cxx11.tar.gz/sha512/17553e379ac4ecee37f319f0bd8e439fa69875dbafe455835f2c7a89cf7140b894793789b53d3759f3ab6bf712fb0c9ce0ecf9426f2d86bbcb7df13959faad82 +Clang.v11.0.0+7.i686-linux-musl-cxx03.tar.gz/md5/f9008d7ba18a29fcfef6fcb8bf48bbaa +Clang.v11.0.0+7.i686-linux-musl-cxx03.tar.gz/sha512/41c72c035309aaa6df1a9594d83bf5cf8901948636e54c84aa127021f552a8b86e1a404c3445fe9a06a6120f01169a95fde412dfbd0a7909621ecdccdc653019 +Clang.v11.0.0+7.i686-linux-musl-cxx11.tar.gz/md5/cbafab459452e990975508e33f64752c +Clang.v11.0.0+7.i686-linux-musl-cxx11.tar.gz/sha512/9ffbf81a5b53be8ccb123e3be7fb1f2b9388a6a659a07206808acf5b2dde3036b60d56a015ef338889af35169f49ea32e2a5b8e6da3d140d035ee0f0d5cb033a +Clang.v11.0.0+7.i686-w64-mingw32-cxx03.tar.gz/md5/a0ac9cb46e3646e636c5683b453c3329 +Clang.v11.0.0+7.i686-w64-mingw32-cxx03.tar.gz/sha512/be55a815c8670a2b6590878607bb42a4a7d288a80233df0a293ce0a83880d3b4e3e92597387472aa4abc29bd6713c7abb74cba46d009431f1ea733dfa0af5609 +Clang.v11.0.0+7.i686-w64-mingw32-cxx11.tar.gz/md5/ba3d5a5e5ebf015683f2ab564343b3bb +Clang.v11.0.0+7.i686-w64-mingw32-cxx11.tar.gz/sha512/f8b5f526b10c52b3933a9d8ae138d101e4f085aa910061c88264e18e24d2464c80c30814cf8a5523bac355ff257886aa6252836ebf728fbcafbe00517caff9e1 +Clang.v11.0.0+7.powerpc64le-linux-gnu-cxx03.tar.gz/md5/fa123dfff222c59c0398811fa7e456c7 +Clang.v11.0.0+7.powerpc64le-linux-gnu-cxx03.tar.gz/sha512/2a9362578675c3e4aaca9db4246b07e3e3fe14f001d83f0829e2818032a2e769d85790552fa953838db613f1592e648f59830625d97e634b4b67dcc3ad6218e0 +Clang.v11.0.0+7.powerpc64le-linux-gnu-cxx11.tar.gz/md5/90e3dc34b0f8dfc06a3191e6d1ae8db6 +Clang.v11.0.0+7.powerpc64le-linux-gnu-cxx11.tar.gz/sha512/b298d29f58ed0e90e2cdfec9a3eef31f750901c7ad74d5d8dfaceeb5526ae57ad1f9bea4734e5ea4a00735ad60ad5d54bce5905bbe392a0141d43e1ba1835280 +Clang.v11.0.0+7.x86_64-apple-darwin.tar.gz/md5/8cf8ff4b08b20d011b07e8305542ba93 +Clang.v11.0.0+7.x86_64-apple-darwin.tar.gz/sha512/ea79289ae1ee2c3e55890987d9c797e937cfcf99e2d539c75ef0ed03d58d717cee646ebddc836577e5f7aa027e1e269777e5bc65a57b8ca3e045cedcee98c271 +Clang.v11.0.0+7.x86_64-linux-gnu-cxx03.tar.gz/md5/1b69ca77c58e4902021aca003d9b8aaf +Clang.v11.0.0+7.x86_64-linux-gnu-cxx03.tar.gz/sha512/59bd34bcc503c13629bb34f4caa82cadd231a24b8dcecdc9074c7ef7314df0fadd812043ad009d473c9e4203d0123edd0dcb65f772dffdfdf72f724b7bbb0a98 +Clang.v11.0.0+7.x86_64-linux-gnu-cxx11.tar.gz/md5/827d64ffd271dbb4df2145ad3da088bf +Clang.v11.0.0+7.x86_64-linux-gnu-cxx11.tar.gz/sha512/ea3aa9fa2d6e21f7fbf7911122b1b3058eedc0786d4fac0a42ca830b182fc302e74d28bb8cd90c0bea7040e08c7a222d5af1dfce9447ee1a0203fdd5141f543e +Clang.v11.0.0+7.x86_64-linux-musl-cxx03.tar.gz/md5/e59693783f954d2270fb6efd669a71ef +Clang.v11.0.0+7.x86_64-linux-musl-cxx03.tar.gz/sha512/48d482d698f053201c176c9baaba1ace7e709dbbf1d5b92081e7797ecee8e9ca1ae29612e39430acf157bb83dcdde9c585a6f57734150f0723c9fd55c6bb7d28 +Clang.v11.0.0+7.x86_64-linux-musl-cxx11.tar.gz/md5/1054ef293fb51478dfb24a93cafc0649 +Clang.v11.0.0+7.x86_64-linux-musl-cxx11.tar.gz/sha512/34d2a6da6bf0c0aae04c67cf357d1a3f262077114371330e78bbbdacacdb62034bb2a3a86b19b1ef32d21dc0c4377c843795680b4e3acc43b4ae7e58ded205d7 +Clang.v11.0.0+7.x86_64-unknown-freebsd.tar.gz/md5/dce990d18f508d88bfba165e4b920db1 +Clang.v11.0.0+7.x86_64-unknown-freebsd.tar.gz/sha512/1c66e54443e666e51e78c660035071f764a09e5711c6050b8fa996d655e370ad92c99ecbc092c90e633746c31bf230064ee159d23cb5456d15997284c2fa4708 +Clang.v11.0.0+7.x86_64-w64-mingw32-cxx03.tar.gz/md5/e46ae1de76b9251fb85d048614a90f72 +Clang.v11.0.0+7.x86_64-w64-mingw32-cxx03.tar.gz/sha512/60131aa6851dc8cad5fa2243ec1f39172c714f9ac747b7e197f5c55c8dcde2f2f295912a260f31492a46824ad03664cc919ed78dd9e458d6b7a31f82409cc3cf +Clang.v11.0.0+7.x86_64-w64-mingw32-cxx11.tar.gz/md5/36db61088ea830bf0f8859aecabceb41 +Clang.v11.0.0+7.x86_64-w64-mingw32-cxx11.tar.gz/sha512/4b0df5f10612d5d2e2ab971289038a3800debc729d06c17b0f8ced9a9128919df6ebb76ecfd5d4912b74d56df62bd6c4cd6cc0147105a22d3ee654740ce8c40c diff --git a/deps/checksums/llvm b/deps/checksums/llvm index 510b707335865..5189817e7f691 100644 --- a/deps/checksums/llvm +++ b/deps/checksums/llvm @@ -1,176 +1,176 @@ -LLVM.v11.0.0+6.aarch64-apple-darwin.tar.gz/md5/3e0ff34539a29b704e2b003cdd2a7108 -LLVM.v11.0.0+6.aarch64-apple-darwin.tar.gz/sha512/06a901dd77c61eba56c36479d0ce4bd8b5482e2d3c23802438bc34e3c5520821ada03bb466ac9e99f0bf101981c4c5b1201b9fe644c996dea90eed9f828f609b -LLVM.v11.0.0+6.aarch64-linux-gnu-cxx03.tar.gz/md5/549f263a2ac5faaac2fc72628c3c5b15 -LLVM.v11.0.0+6.aarch64-linux-gnu-cxx03.tar.gz/sha512/75b37cc23b467347f03fd9914ea8b40d13ba90bf0011a071f2d61acad9d33f761270b7cc416938f774efc7403835c85a56a6b302b0ff9a71abd76e78d0e6cba6 -LLVM.v11.0.0+6.aarch64-linux-gnu-cxx11.tar.gz/md5/cb60a5ecb9482a8a88c1cc7f5c5e3344 -LLVM.v11.0.0+6.aarch64-linux-gnu-cxx11.tar.gz/sha512/1b11cf9da5caa257732d9b5a08317cf0468bddfb0a99497c75b3882d1fc8ef76ea49ebecc81d62101ffadad6067fd3b1b79ea4d097b3180e0112813bc3a0c875 -LLVM.v11.0.0+6.aarch64-linux-musl-cxx03.tar.gz/md5/691251e5c3d844f979eb8b9bc39c3f9e -LLVM.v11.0.0+6.aarch64-linux-musl-cxx03.tar.gz/sha512/e6d935bc7143c7633ffc522f0746724f337c02bf2203f2724a0d01611b74d3249a11738e034b224af72dc8cbd0cb997c6455906d70bb41165723de50b567bfc5 -LLVM.v11.0.0+6.aarch64-linux-musl-cxx11.tar.gz/md5/67038d047362f3540e9d066dd16bf849 -LLVM.v11.0.0+6.aarch64-linux-musl-cxx11.tar.gz/sha512/a3b65fe6946425a705827cc7e9317bca32f00509d29410dcd0ff3a5975403f39d8ffb629bf65d0458d94fab7b8ef0466ed7cf895833894ebebc38d03c163901b -LLVM.v11.0.0+6.armv6l-linux-gnueabihf-cxx03.tar.gz/md5/787eead1b671978bf0e8c4530be3bc71 -LLVM.v11.0.0+6.armv6l-linux-gnueabihf-cxx03.tar.gz/sha512/34019249d77aed4a36ce2f04cda2af74778c41c48bb13913ba49d30c28f2a24d8c7c6ed3063465462daeaa644ad99134cfa1c62858b547787cd08a0521a2b3b0 -LLVM.v11.0.0+6.armv6l-linux-gnueabihf-cxx11.tar.gz/md5/c5c0d2d7d7b8823d822a1d49fd5ba172 -LLVM.v11.0.0+6.armv6l-linux-gnueabihf-cxx11.tar.gz/sha512/040047a781e708a1d6849d1293767e06fb917f7cbf1bc4454f4c20bcfc406120a80082e6f03eed8c2fd80f783d375052d6f73a6112988aee0f181698f79568bd -LLVM.v11.0.0+6.armv6l-linux-musleabihf-cxx03.tar.gz/md5/7597a3aeb80562e1a59d06bfc5ad6841 -LLVM.v11.0.0+6.armv6l-linux-musleabihf-cxx03.tar.gz/sha512/88cd3be30f1f75c8be680290a73fef0f49936ec5f6dba80942c302c21ca97d5ad4b9a597806ca8e3b8524b1d4d692ce36da91f42f1d79ec3dea7ddd0714bba47 -LLVM.v11.0.0+6.armv6l-linux-musleabihf-cxx11.tar.gz/md5/b969a695379510a1822b37cff723c21c -LLVM.v11.0.0+6.armv6l-linux-musleabihf-cxx11.tar.gz/sha512/ef485d65da6e402d61820a6dc9fdb3dc6c7008309fc0403f5142a0ba4ebcee03517f134585b2ae287db212c5113db59170c20bd073caf71467b8de4894503ff5 -LLVM.v11.0.0+6.armv7l-linux-gnueabihf-cxx03.tar.gz/md5/d1e5ca62e51421c2f86db4e9fa50cc96 -LLVM.v11.0.0+6.armv7l-linux-gnueabihf-cxx03.tar.gz/sha512/30c258f1cf6e5b0d92e909ea506990ed567ddb82f562e62f49afa4f5fcc54009f30d878b24d61e32c8414ebb7ec4ad1ea2f5e7e3e4460176104a4cac4444d00b -LLVM.v11.0.0+6.armv7l-linux-gnueabihf-cxx11.tar.gz/md5/b899546dab2f8d8a3a4ac321a7603a27 -LLVM.v11.0.0+6.armv7l-linux-gnueabihf-cxx11.tar.gz/sha512/524331371c6c3e963029453066597ef650f327341161e35b667eedf79b8b4d8e20bc4c5f1240e3eb16724751390b32c236e15fba6a0aefa69e09d751ec278212 -LLVM.v11.0.0+6.armv7l-linux-musleabihf-cxx03.tar.gz/md5/0f4b4d02fd8027244e0873427214fec1 -LLVM.v11.0.0+6.armv7l-linux-musleabihf-cxx03.tar.gz/sha512/5f8d1f18b9d0132b4cb5287ed106ebec869ce62c15e3878f7c05cbd44f11515357205522774d56de27d86d086fa995c8390755167e8f4b16a9f9814ab8267b40 -LLVM.v11.0.0+6.armv7l-linux-musleabihf-cxx11.tar.gz/md5/f387b55a71c8d318ca04aeb42091ce7e -LLVM.v11.0.0+6.armv7l-linux-musleabihf-cxx11.tar.gz/sha512/06ec735719f0055e84ba2af4ba187570944cb40805e69f6fa22edcbe72c9e36298fc064ce745106d0a8b72fbe8b710fc5b0619755a0014a3a52fc4073126006e -LLVM.v11.0.0+6.i686-linux-gnu-cxx03.tar.gz/md5/afe179dea20b7105fa2b5ab3cfa961d8 -LLVM.v11.0.0+6.i686-linux-gnu-cxx03.tar.gz/sha512/496e0853060d51fd3a987712fc0019fb85c91dbd380363dda694555467fa12eae2da2155a208b5cbc7d830ae2e395327d898d278d26fe619e9f6f555487aa1b5 -LLVM.v11.0.0+6.i686-linux-gnu-cxx11.tar.gz/md5/232c1e2787c6bbf1876a9c7411bc6a10 -LLVM.v11.0.0+6.i686-linux-gnu-cxx11.tar.gz/sha512/195adac959928eeea08106fa98f6549f15210ff4f0f46cde7584f29be89461419c9a89f5536851f1d9859eb92e3cf2aa13455445b5480ebc317d3d6dc0b42cbb -LLVM.v11.0.0+6.i686-linux-musl-cxx03.tar.gz/md5/7322d77b517871a9571fc21fca2bd065 -LLVM.v11.0.0+6.i686-linux-musl-cxx03.tar.gz/sha512/319ed21dd088335e04811dd504ed1e365c51ad5addc8ff95b80dca75712c011bafa6181ff1bb72e8fb76a026617f871fbfaba39bf7a4311a0e6b8db57dbad7f3 -LLVM.v11.0.0+6.i686-linux-musl-cxx11.tar.gz/md5/a806d0c580246edd8a80eea8abd6b678 -LLVM.v11.0.0+6.i686-linux-musl-cxx11.tar.gz/sha512/11dbec48a79a3e7a70adc77d19f2113a43d43443384b57a5b3be6404249d649a4aeebe340d310b1a450967a3c75ae4167861d9730371a364819275c2c26d4863 -LLVM.v11.0.0+6.i686-w64-mingw32-cxx03.tar.gz/md5/ed5a05c610bd4772f21225a20a9b8586 -LLVM.v11.0.0+6.i686-w64-mingw32-cxx03.tar.gz/sha512/c6bf82cbf1976a7c3794ed0387682bd960e41417a7ee99238583a2f0220995b53a1c02aebbcb3653520bb2d5526aa982db0dd7bb52d4bac91cf00b7d1c97cfc7 -LLVM.v11.0.0+6.i686-w64-mingw32-cxx11.tar.gz/md5/713c04d75a5f5cc2c12b28ed547d8a3c -LLVM.v11.0.0+6.i686-w64-mingw32-cxx11.tar.gz/sha512/5046809e71da67e8081c780b59604b7f13068b8d02437131d7e888a4f66f7fc61566a0e196900610ab72352157742356ae45a4bd681a170282489a61f38385b7 -LLVM.v11.0.0+6.powerpc64le-linux-gnu-cxx03.tar.gz/md5/3134eead7a2107fae23b9daf32770943 -LLVM.v11.0.0+6.powerpc64le-linux-gnu-cxx03.tar.gz/sha512/5de28a4d0750312917cf2449926330ed0c582ba3d969854d7d00cbced3b9e37a27990b0ac0852c73519a53b57b2047beb90f2da9c1397d5c5e5480fcd89e507b -LLVM.v11.0.0+6.powerpc64le-linux-gnu-cxx11.tar.gz/md5/2c5f4d09f5eb67178781442b4ce41aa2 -LLVM.v11.0.0+6.powerpc64le-linux-gnu-cxx11.tar.gz/sha512/c1288af0da46066e39aa5f524d068c8fc27477c5dcdf480b7b0d434b45f4559a68952862e0348861d9022664613874e4ceb0f249cc83871f174c985dcf23695d -LLVM.v11.0.0+6.x86_64-apple-darwin.tar.gz/md5/228475fbd2c4804fddedec0da65adb21 -LLVM.v11.0.0+6.x86_64-apple-darwin.tar.gz/sha512/5ec770de6c44d0a04f36678f39a0f608a62dcea4d1cfd6ffe80afa1d583a238aaa70252aa71c2ce31f4567ebeb989f7757aea72007337676a13a33697fe31ba7 -LLVM.v11.0.0+6.x86_64-linux-gnu-cxx03.tar.gz/md5/fde67e1f15124e0912fef35d99be99e2 -LLVM.v11.0.0+6.x86_64-linux-gnu-cxx03.tar.gz/sha512/78c8f8791b026e5c6b7e5b7c77a4bdc370147c61c243d68f3ad7e1d8f144abc5e9978fc5dc6b7cd96351e9f88ee00670658270841fa115811b3eeccafe22fa91 -LLVM.v11.0.0+6.x86_64-linux-gnu-cxx11.tar.gz/md5/8e848e4624dd4760b75b932c0802f999 -LLVM.v11.0.0+6.x86_64-linux-gnu-cxx11.tar.gz/sha512/922e914ec453a43f7f5cde514b0a68a06ffdb53ae778d89b4374a91d1ba3d5b4612c1e302726efa8fd824fea7e0f2c509696841cd41f9dbfc8c1444d0c582351 -LLVM.v11.0.0+6.x86_64-linux-musl-cxx03.tar.gz/md5/0fba7b176d093b1582299bfbfd1f22c4 -LLVM.v11.0.0+6.x86_64-linux-musl-cxx03.tar.gz/sha512/28aa06364af5d508c77f43fb45c054791b2c01698ce1e3bb348fc83732f6f434dbc9077d31bd7ecd49ed933723fed0b0c88ff407fc20cfa123b100d48babadb8 -LLVM.v11.0.0+6.x86_64-linux-musl-cxx11.tar.gz/md5/34ccced0be355f34db5c1fb57e1f9a6c -LLVM.v11.0.0+6.x86_64-linux-musl-cxx11.tar.gz/sha512/bbac3fc2ead3751446fd2576a37a57f0729ff4545098aa8638a55a4166174351309354a7d3a8c16287f5281ec967f5026f24e858dd3bf08eab735bac38e200c7 -LLVM.v11.0.0+6.x86_64-unknown-freebsd.tar.gz/md5/ba009ee74424f1071812b38669cd941a -LLVM.v11.0.0+6.x86_64-unknown-freebsd.tar.gz/sha512/bd3b27ebaf504778367e2f2d90205626a6c59c94a016d8ea7b1aa97bfe0075900582ebeb34c51506eda67be8092dc566044b3af3fa1fd92800a38d3a18923fda -LLVM.v11.0.0+6.x86_64-w64-mingw32-cxx03.tar.gz/md5/1853967bea81faacbd73c476f2252414 -LLVM.v11.0.0+6.x86_64-w64-mingw32-cxx03.tar.gz/sha512/0a7f81dfae7ecd6ef965fe9d1a11233d88925e29095fecfb1c3366a5c95d193d86bc2b760e0897fd118620232407f042328f870625260b1258cb2522e752904f -LLVM.v11.0.0+6.x86_64-w64-mingw32-cxx11.tar.gz/md5/9cbe2a347d3ceaf2392396ecdda5c907 -LLVM.v11.0.0+6.x86_64-w64-mingw32-cxx11.tar.gz/sha512/ee5d20f94c19e823062353b56bfa48cb5bc537315b4d39a4dcad264e496930e87c8536f1ed3b1eee15c53bdd4fc12e61d3c751dbdc5ddc4471fe70597b76bbfe -libLLVM.v11.0.0+5.aarch64-apple-darwin.tar.gz/md5/6093c33101fcc79379c93ed1198bea45 -libLLVM.v11.0.0+5.aarch64-apple-darwin.tar.gz/sha512/9091d6193589b7a46aa82ec5eebda0be4e394a5d478e3ae4c8b0cb68f295de5ab92707a058742fb04c346fa230348d0b69ff0cb5ce45de6018ac10853cf66ab7 -libLLVM.v11.0.0+5.aarch64-linux-gnu-cxx03.tar.gz/md5/cc137eb7f436df8ab862691a602d7609 -libLLVM.v11.0.0+5.aarch64-linux-gnu-cxx03.tar.gz/sha512/f873e6aa4644422076bb2e74f3d2c46243adb156abd6963407d782bc1d49751393477256c82ab2a38549a81decd95cee48f64229f1274d3fa531de97f23c4d0b -libLLVM.v11.0.0+5.aarch64-linux-gnu-cxx11.tar.gz/md5/c5ef17143ab1103d76eca8c066858cd5 -libLLVM.v11.0.0+5.aarch64-linux-gnu-cxx11.tar.gz/sha512/915da9f1b0a931479156ab7c9b04b355584b1dda74cf2e59d49922ff448980bfea2dd702c82e8fd79748e55744d752bad36f02ff7511722e28b14e25d22cc895 -libLLVM.v11.0.0+5.aarch64-linux-musl-cxx03.tar.gz/md5/d50977717fb2218a20abe4f464a18a44 -libLLVM.v11.0.0+5.aarch64-linux-musl-cxx03.tar.gz/sha512/f67780a963854bc71f99c06dd6b9e49d01208126e7a56e438574cbaa64f684d554f56cf9bbae0c2cb03f5a8d88ca440d0f7d25a4c3bc28fc94837b3f7b78f682 -libLLVM.v11.0.0+5.aarch64-linux-musl-cxx11.tar.gz/md5/42ef1a781c9fbfb1934e5d6bb5e9f003 -libLLVM.v11.0.0+5.aarch64-linux-musl-cxx11.tar.gz/sha512/cfab5718ca64265bc1a900dd8c5f5700940943b901c61416f476299c0b01db0b9d8feeaf2c4ab73e5ab4ca3b3e53f20b8d0cd01d6af0fa3b20c02b24bad83ac8 -libLLVM.v11.0.0+5.armv6l-linux-gnueabihf-cxx03.tar.gz/md5/46164ebf60f61996cc87bbd9f4d8a3f4 -libLLVM.v11.0.0+5.armv6l-linux-gnueabihf-cxx03.tar.gz/sha512/c755ca6140175353e25499cb6e26568c65e83065064e7f94bda44f4135e82e19373f8d254185b21941d3c3998db0d70199ed854e1aba3e6bfda166a038e71dad -libLLVM.v11.0.0+5.armv6l-linux-gnueabihf-cxx11.tar.gz/md5/50e236b476687f13b702c88324f3ba84 -libLLVM.v11.0.0+5.armv6l-linux-gnueabihf-cxx11.tar.gz/sha512/a75cc8cc1dd7efcd04c654dd4647fe45e56ef5c0ea61eb86ab73a3ec62479f9842feedbc9843b6b1e7cd27234ef23c3ccdecac257f9503742d68e466e8ab577c -libLLVM.v11.0.0+5.armv6l-linux-musleabihf-cxx03.tar.gz/md5/1b30fa450e7a36c99a9296d726985ff9 -libLLVM.v11.0.0+5.armv6l-linux-musleabihf-cxx03.tar.gz/sha512/77da6971da255f7b497473a57e615c981684a7d0cbc4e8a50a4021a054fe9b36ff0c4956502e45cfdd0b721693e27a9e5121ec51344f051faf5d542ffb70fd39 -libLLVM.v11.0.0+5.armv6l-linux-musleabihf-cxx11.tar.gz/md5/e9dbaf111bd4820ffdf219d3194851a0 -libLLVM.v11.0.0+5.armv6l-linux-musleabihf-cxx11.tar.gz/sha512/340a8933539f32ded7a6a43ce9545a08cf3fcdce65c081b04fb01d61e02cb34fde7e186d3e6b62b6631a52a5abddb2d2c2b90c6d5a06f56cf0804ff7be7578ba -libLLVM.v11.0.0+5.armv7l-linux-gnueabihf-cxx03.tar.gz/md5/427af130d0f4f40bc861e410046edd55 -libLLVM.v11.0.0+5.armv7l-linux-gnueabihf-cxx03.tar.gz/sha512/33eed570f1c578ea0343082632fc6885dc46c4a9175df13c4c559560b386629a757eb7d17950ae3d34d2f7f513ee59d84636550c5d114800bc1963d6f377ef4c -libLLVM.v11.0.0+5.armv7l-linux-gnueabihf-cxx11.tar.gz/md5/8724eaff65ada8bc7799bfa8cb5a70fe -libLLVM.v11.0.0+5.armv7l-linux-gnueabihf-cxx11.tar.gz/sha512/ea6367325fe2a63725ec544fc0f72bb7110883fa312cc5550bc95e8376ef28d78582af0e4574f7e9835218b48f0fe6cbc2ff452770147c224d6c7108497b715d -libLLVM.v11.0.0+5.armv7l-linux-musleabihf-cxx03.tar.gz/md5/fd3772219994c175c714c046254d6ae0 -libLLVM.v11.0.0+5.armv7l-linux-musleabihf-cxx03.tar.gz/sha512/dd73cc75aff7feaaa84d87eeeb14e2df565d104942af96891f29c2f7da944467b2b1d599649336cba5bf7205c958117a7c6a6213c775f07e7ca86a2016542f8d -libLLVM.v11.0.0+5.armv7l-linux-musleabihf-cxx11.tar.gz/md5/83b869822caa630768c6bd2b7cfe03f4 -libLLVM.v11.0.0+5.armv7l-linux-musleabihf-cxx11.tar.gz/sha512/057602f5388f8b9ec55515ec758edb8477a84d70afe2bde6c56b9001b07753ca7f70bda3d7ed4919df119e4aaa5515c47f967bf5f5cac272694a75477fc644b4 -libLLVM.v11.0.0+5.i686-linux-gnu-cxx03.tar.gz/md5/4e1526f2cd92dc7448b1d24e8aac064c -libLLVM.v11.0.0+5.i686-linux-gnu-cxx03.tar.gz/sha512/93dc0c9964cce8794fc6d41594e8ac5446fae07c9e3a8c185445e0c10976562a2edb738520ce1075b63cda165dfe60e8ecee432cd522d1a8d81cbbe0f1423ad3 -libLLVM.v11.0.0+5.i686-linux-gnu-cxx11.tar.gz/md5/829fa4d0feaec240c91ebce879bee440 -libLLVM.v11.0.0+5.i686-linux-gnu-cxx11.tar.gz/sha512/08c00feac8b9fbdceac2952a85e4c9b9836ed9994be266963fdea566e18981c7e763562fa534746c25381b7c7feed50e1e35b78e6040cefde90de35f61bb347d -libLLVM.v11.0.0+5.i686-linux-musl-cxx03.tar.gz/md5/891ee75595110ab8b85b17decd1598dc -libLLVM.v11.0.0+5.i686-linux-musl-cxx03.tar.gz/sha512/f5bef30a1ac951c50e195638c1931a989528e1ec02316c0bbfe61070a5c1ce6b1d4108ea393aeeebab0ca089f1132bf74ee664d1b0f0b17b9e7c7964d9137050 -libLLVM.v11.0.0+5.i686-linux-musl-cxx11.tar.gz/md5/5ed1de36778f8afc47d7e8b230532bc0 -libLLVM.v11.0.0+5.i686-linux-musl-cxx11.tar.gz/sha512/51fbbff8b227cc5fe9d3c862ad990e395baa7523103a4d6cf6e4a7bd411e0f00c4567e60989269917d7b546103764f21fe212bcf574c74f75b6f4b668c144e69 -libLLVM.v11.0.0+5.i686-w64-mingw32-cxx03.tar.gz/md5/1a649637bec7fbe82e29b32dc70c9c9b -libLLVM.v11.0.0+5.i686-w64-mingw32-cxx03.tar.gz/sha512/61d4203fbffef54b9b251f2319c9224608f3331e974b30895817956ff8fa12b95afd579fe68d9521e37c351194931763a5f74e72a36e62aca3400a3cbca058c6 -libLLVM.v11.0.0+5.i686-w64-mingw32-cxx11.tar.gz/md5/ab780f440cea869cf8f26051e4a99037 -libLLVM.v11.0.0+5.i686-w64-mingw32-cxx11.tar.gz/sha512/ad5c02984cbd6dbb2d3c67e1a0350fdc62a786185aeefc1b7f3f94782a23a12a5525813405c4a2ea829a7fbd71869a9226b9a520817eda0bc9d9508fef130fdc -libLLVM.v11.0.0+5.powerpc64le-linux-gnu-cxx03.tar.gz/md5/5556521e7ef57eabae57979a5bee9513 -libLLVM.v11.0.0+5.powerpc64le-linux-gnu-cxx03.tar.gz/sha512/783ea0396a9d3e435cb85a8c94b842ed3155c16b12d7218c1f1d0525550ab25b91ef1a2bf697154ba036034642f4453d1d9b5d5dfde1a34c6298c5fecce6d344 -libLLVM.v11.0.0+5.powerpc64le-linux-gnu-cxx11.tar.gz/md5/03abedbd8120e81b62645a8e01c7dcfa -libLLVM.v11.0.0+5.powerpc64le-linux-gnu-cxx11.tar.gz/sha512/09896cb94818ef583a1aacea0e207bb502ab779fecd2693f672463864de12bd2b87e57430bff17c2e1ba5a166069031ab5bc6866645b37889f42e403adc2992c -libLLVM.v11.0.0+5.x86_64-apple-darwin.tar.gz/md5/a58cca2dd2ca7251d59b92032aa23453 -libLLVM.v11.0.0+5.x86_64-apple-darwin.tar.gz/sha512/77088da3a569cdaf1f26ef3fc9a4e3abf5b4b3cd686715fa8133efef5206e0e886508bbd1a986e858d0bad6eceb64113e8ec6fd69b38053871df194df3b24559 -libLLVM.v11.0.0+5.x86_64-linux-gnu-cxx03.tar.gz/md5/4d45b86cc2bc673e7447e0400e1444c2 -libLLVM.v11.0.0+5.x86_64-linux-gnu-cxx03.tar.gz/sha512/506b406bde06b46cd0ae49ba35659b37572f6942ff825f5a682a18d7deafc7b38ab9f78ec6f122baec4b851f009091c3d1b89731ba871f67334f1463a6820fed -libLLVM.v11.0.0+5.x86_64-linux-gnu-cxx11.tar.gz/md5/f6221d802cfae827b780906969510aa6 -libLLVM.v11.0.0+5.x86_64-linux-gnu-cxx11.tar.gz/sha512/1913b4766a5032badcff8247b72584ee0f0a6a6c3de73b6051fa65f707b530e2186fe9696f15685257c211a0fd52d0eb52c490801ada775536f38e2dbc656821 -libLLVM.v11.0.0+5.x86_64-linux-musl-cxx03.tar.gz/md5/bfc7dffb58563c23976b391677510afa -libLLVM.v11.0.0+5.x86_64-linux-musl-cxx03.tar.gz/sha512/122067a7d5a64ec67331d30f289ebccd62ee9cce1dec828644ca5e210aacb427b632d9e46939e7753da599693fd8926099768babacad06c57b79fc784c76520e -libLLVM.v11.0.0+5.x86_64-linux-musl-cxx11.tar.gz/md5/1fef97d7b6a66eb5047c23abc740a757 -libLLVM.v11.0.0+5.x86_64-linux-musl-cxx11.tar.gz/sha512/9a0d18d4752b81cd5026392501d725c71d955938a55bf126a6b8d1dc7ec4035147bb86ab44592de1a3e9f8d6505dcb0cd1b3f2f667ed67569188a1347dbd71ea -libLLVM.v11.0.0+5.x86_64-unknown-freebsd.tar.gz/md5/fd1b477fca09cadbdcc7e812b3952245 -libLLVM.v11.0.0+5.x86_64-unknown-freebsd.tar.gz/sha512/89e6a796292c6cb045dc78e2d9c82c31c3507fecc5aa31fca84e79ea3a402318c1c0822fa3a88c329b8731d220550733737df83266036b648d367f50e9f77f4e -libLLVM.v11.0.0+5.x86_64-w64-mingw32-cxx03.tar.gz/md5/6ad1eb4936bf7c181fe6b3bb987ebf31 -libLLVM.v11.0.0+5.x86_64-w64-mingw32-cxx03.tar.gz/sha512/042259fbd70cfdc1f27bba8d692cbf40b046b0df966c8ec8119a08dd63bf32c0da7f6bc541b45dd7606ce67996b1b7ee6ce4900a95b4e6def28bd7061c461ea7 -libLLVM.v11.0.0+5.x86_64-w64-mingw32-cxx11.tar.gz/md5/6f73f4a673025c078505ff14e6608929 -libLLVM.v11.0.0+5.x86_64-w64-mingw32-cxx11.tar.gz/sha512/26c18ecd415faced18116c01a0d491ccb0a9dd957f33bcea17147c7209d00a4092508a66c803fc057ea824f4bb1408526d201cdd1d31d3c2ba20016bc48d9272 -libLLVM_assert.v11.0.0+4.aarch64-apple-darwin.tar.gz/md5/b3f2d92a01d0634dae3cd285ca828034 -libLLVM_assert.v11.0.0+4.aarch64-apple-darwin.tar.gz/sha512/d830858163fdf7686c909faf086db589f5702be227d99cccfab9b5ce255d611937dd304dbf55731e72082c0ea0bca2a9841b4d8b7f57b861de54cf2911a51dfd -libLLVM_assert.v11.0.0+4.aarch64-linux-gnu-cxx03.tar.gz/md5/c44b3954aadb451b0bcd9985555fedd9 -libLLVM_assert.v11.0.0+4.aarch64-linux-gnu-cxx03.tar.gz/sha512/dc25a8cbcc090719c8d62a12a456c285eeaacb5e0329ccb07caa5ad8b7060566e17a78eafab5fe8671808ff450b0d7d5b9184c08e25a5e06be3ccac48d558568 -libLLVM_assert.v11.0.0+4.aarch64-linux-gnu-cxx11.tar.gz/md5/1613b5d7fbd98e8955f8ad2690357e26 -libLLVM_assert.v11.0.0+4.aarch64-linux-gnu-cxx11.tar.gz/sha512/955e7304d1f0ac77d7f3a89d95b9f94da3b5125027343ad3138c14b940e800190f5a1a69482c6bc7ddd688f9a42b246ffb6c2f0966c5726ee8b4ff255f793127 -libLLVM_assert.v11.0.0+4.aarch64-linux-musl-cxx03.tar.gz/md5/a4d5f0ec7394524259309fb1bae109d4 -libLLVM_assert.v11.0.0+4.aarch64-linux-musl-cxx03.tar.gz/sha512/646bc7d60fb66e0fbac4fbfe617b14a0c025d4a08f40dba7cc93ddfc2e5b8fc565b1ce97fe77229fa1409720952d1540a6fdc8a2767ed49ac7b9ad234a1ba726 -libLLVM_assert.v11.0.0+4.aarch64-linux-musl-cxx11.tar.gz/md5/aa6260325bf0c2dc0013b1898feea408 -libLLVM_assert.v11.0.0+4.aarch64-linux-musl-cxx11.tar.gz/sha512/0981de6cd9e59b90dca8f536d79ce38f13b76f21e952ded6dc2ca033e83f79d1851cc90485d8583dd88052d1836ae7b2faf241ada43644fce32ac291dd562f6f -libLLVM_assert.v11.0.0+4.armv6l-linux-gnueabihf-cxx03.tar.gz/md5/d813f8574a389fcff274c56539dac3fe -libLLVM_assert.v11.0.0+4.armv6l-linux-gnueabihf-cxx03.tar.gz/sha512/a5d61fb8ff01db31ae6b654b310f65fed3fc50632bff12a384ceae9e539d24f144899f42aa03fc897732b4e1ab98f522fff1710b17323e73cdfa3bf8659117a3 -libLLVM_assert.v11.0.0+4.armv6l-linux-gnueabihf-cxx11.tar.gz/md5/d7c742feacc6c241ad503c67ec926eb6 -libLLVM_assert.v11.0.0+4.armv6l-linux-gnueabihf-cxx11.tar.gz/sha512/2a858171fed4cf139cfff6797a7765a2ba635e541e7df31819aec926a8de1827bc5d5549f2d1c25fbcdc7da53081b7f02174b279a36bf71d1239ec8bdd6cc6e6 -libLLVM_assert.v11.0.0+4.armv6l-linux-musleabihf-cxx03.tar.gz/md5/c6adb1bdbc4e6de054ddff011e83828d -libLLVM_assert.v11.0.0+4.armv6l-linux-musleabihf-cxx03.tar.gz/sha512/cfab24788c33cbf941e50c9a575c43811879d2c31a053e262589be4dba16660f99ed4d86167a775a8029685bed499867d2e55d303fbe50f07a5e3b4ad3dfd3d4 -libLLVM_assert.v11.0.0+4.armv6l-linux-musleabihf-cxx11.tar.gz/md5/82b9b7fdd60a8b585237221d72a9c197 -libLLVM_assert.v11.0.0+4.armv6l-linux-musleabihf-cxx11.tar.gz/sha512/fe15f9639a34b0796528a99d3a50c5c985d6ada1584a980a18aa9ce5254ffcdfc96d4051928c14de6455c9c4964be07496fa34186e96a3904b21583e1452398e -libLLVM_assert.v11.0.0+4.armv7l-linux-gnueabihf-cxx03.tar.gz/md5/a3a7df2a953df4573e9541bac02c36f5 -libLLVM_assert.v11.0.0+4.armv7l-linux-gnueabihf-cxx03.tar.gz/sha512/19f27571f1b4621ab8dc7ebede362346d9da3ef16a13d35823394f62efacd4d1a45e3372b69c2f0488f5901706fead7e605eccf5f63005fb619bf71e69d9b9c4 -libLLVM_assert.v11.0.0+4.armv7l-linux-gnueabihf-cxx11.tar.gz/md5/97cbcb5a1fe9363a951705aa6b4becdf -libLLVM_assert.v11.0.0+4.armv7l-linux-gnueabihf-cxx11.tar.gz/sha512/42bfe71d8d6b0ade455ca0a820ecb2b5a9efedf3932c1b86f46b2c7143dee45986c3cfd862ff7c02111f8efb49eb8eac8c293a3adf522d5424b2365915b89a6e -libLLVM_assert.v11.0.0+4.armv7l-linux-musleabihf-cxx03.tar.gz/md5/db76a75a4bbcdc27d0a5fbf5d5dcf5f3 -libLLVM_assert.v11.0.0+4.armv7l-linux-musleabihf-cxx03.tar.gz/sha512/27962b2457337b0548a9f121d582c10ab7154b7c99b65f8dc465bd9165dbe67d5719f41047630b7f176fae57f61d28caf93946ea6b63e852585340ee387fffd3 -libLLVM_assert.v11.0.0+4.armv7l-linux-musleabihf-cxx11.tar.gz/md5/860f98bbef0d9b4bbcd22cad5bf655d8 -libLLVM_assert.v11.0.0+4.armv7l-linux-musleabihf-cxx11.tar.gz/sha512/53073a3a886a0ee4a250a27effb26cfa95cf790d6a04a93a01453a5e0db6b3e1dc333da294750dfaeb77de39254c153a93270bb168655d53a69058315bbb4e00 -libLLVM_assert.v11.0.0+4.i686-linux-gnu-cxx03.tar.gz/md5/35a3ed96171881cd54ca185f0811dc8a -libLLVM_assert.v11.0.0+4.i686-linux-gnu-cxx03.tar.gz/sha512/608c19b8b0fce94405b781ac43658f3149f3586a5665420e41dd8d99111b5e22f536ef92d3bc1e266328dca3acb098832aaf8d01ce77c089e2fed9b4328fe9b3 -libLLVM_assert.v11.0.0+4.i686-linux-gnu-cxx11.tar.gz/md5/da1cebec9227f0c027aa21d01dde91ae -libLLVM_assert.v11.0.0+4.i686-linux-gnu-cxx11.tar.gz/sha512/478c380c7e47a15db023d6805baa0553f2fa7eefb084017ff03739862d677d03a2ab233992f74466e15d7c2d1d0f8e74a6f14a59a7ff543169121f8c71e13bd4 -libLLVM_assert.v11.0.0+4.i686-linux-musl-cxx03.tar.gz/md5/b907e624bf517c934f0a72ece354bf11 -libLLVM_assert.v11.0.0+4.i686-linux-musl-cxx03.tar.gz/sha512/7256348daeb5f2e5a582b77c747d813b6d2c814a48c93b5072c2973d59ab5c320deff0fc2cc860092d9dec3042021982219b9b2eece1be43f6b782cebf7808e2 -libLLVM_assert.v11.0.0+4.i686-linux-musl-cxx11.tar.gz/md5/76e47ca276cce508a79822916989b9fc -libLLVM_assert.v11.0.0+4.i686-linux-musl-cxx11.tar.gz/sha512/8f4a276258d24cc07192cf2a4f0063943947dbbd74f2a35b3c89e77a62a087578d913f348c934beb50f70a3fb17217b8011d35a3d4eb7cdaf90e91c7232f7a4c -libLLVM_assert.v11.0.0+4.i686-w64-mingw32-cxx03.tar.gz/md5/d8694a65b6c69ac7d1632372ee59b331 -libLLVM_assert.v11.0.0+4.i686-w64-mingw32-cxx03.tar.gz/sha512/314a1669c428ad518d1b38ea45b177ce4c1ba141efb1a9f7202ca1f531b62400d8964baaff6e16f86abae276fe65bf2b18bd0ad181a8a059be39e05fff3d2ccb -libLLVM_assert.v11.0.0+4.i686-w64-mingw32-cxx11.tar.gz/md5/1a91e6dc0eed69dd78e2e684e5a45c1f -libLLVM_assert.v11.0.0+4.i686-w64-mingw32-cxx11.tar.gz/sha512/37f4fed310a34a414821f04bb5c333825bba06f483a33a6faede3c3f8eaa3d955b8f307398fb8906c44f0e140d4c9bbcc49bab6a6076120f31d5b51716885206 -libLLVM_assert.v11.0.0+4.powerpc64le-linux-gnu-cxx03.tar.gz/md5/dacf4d3b3d1894952662d669b0a6573a -libLLVM_assert.v11.0.0+4.powerpc64le-linux-gnu-cxx03.tar.gz/sha512/e13787342514824d8620cb06741fceb28f22fa2153882d9823a20fe5eeff36db3f950f13e71a4cf80f05e4d55c315b77730b9495689ba3472e40e876018ee868 -libLLVM_assert.v11.0.0+4.powerpc64le-linux-gnu-cxx11.tar.gz/md5/b9361a6158fe52cf757fa3a54232bd4f -libLLVM_assert.v11.0.0+4.powerpc64le-linux-gnu-cxx11.tar.gz/sha512/ed54814963100fc7ff669e7efd6fc9bba8119ee5415a8da7e3a329e5b8646dc4cbd92b4b7ded081e37c4b76dbb9d3d90abbd3c3eaea884b1f165877971882627 -libLLVM_assert.v11.0.0+4.x86_64-apple-darwin.tar.gz/md5/9c3718c0a565d2c63660f21db8f885be -libLLVM_assert.v11.0.0+4.x86_64-apple-darwin.tar.gz/sha512/adc9d0e42eadc1121291c859901adc9d6dcb83ad25b66a2b6845bcb72f27a4c6e457ac248595fd3ebb9641f6c4c8de5a7969043e28c2dc4a31a79c6fc46f1735 -libLLVM_assert.v11.0.0+4.x86_64-linux-gnu-cxx03.tar.gz/md5/c1335b3639dc3f24618c5ef9c73f1e3f -libLLVM_assert.v11.0.0+4.x86_64-linux-gnu-cxx03.tar.gz/sha512/7e05546a25d72a8e90378edb9704bf9d9be1f7757672b3c7a05b670df993718b076598343cbf078b91cf852f6f229bd9b8cb0d1c77cbbb24707a1407feb5c665 -libLLVM_assert.v11.0.0+4.x86_64-linux-gnu-cxx11.tar.gz/md5/91f99a06286db80153289c1b0857a0de -libLLVM_assert.v11.0.0+4.x86_64-linux-gnu-cxx11.tar.gz/sha512/1a3e15dc1ef2c0721425b341929d3aa4cec5070964b4fc0d3330ec14e0babbe7274e6dec262fdfe972712f8bbf577e4918e296d7cdd60e72e5efb53b57e8e304 -libLLVM_assert.v11.0.0+4.x86_64-linux-musl-cxx03.tar.gz/md5/d4252bda895100039b2edd0447c06636 -libLLVM_assert.v11.0.0+4.x86_64-linux-musl-cxx03.tar.gz/sha512/8643543c32494d4a2237d9c22fbb20f7780f7cb64aef89dc43583d83790288832a687a4352462877f6fe5cf48e5a1bad5a20eb3b2e51f082797b0c18a43db82e -libLLVM_assert.v11.0.0+4.x86_64-linux-musl-cxx11.tar.gz/md5/e740aa378f788810814b03b8ca6dbcc0 -libLLVM_assert.v11.0.0+4.x86_64-linux-musl-cxx11.tar.gz/sha512/4ccf31c437a9377f77e216cedb459eb133d9c2b0f4e2878cc3a354069f6f070899c1136829aa2cc4833fd2a75ed91b093e5e701f1bed2acfad08468d8fc3f183 -libLLVM_assert.v11.0.0+4.x86_64-unknown-freebsd.tar.gz/md5/561ce469e0a1da154efd4f25108317c0 -libLLVM_assert.v11.0.0+4.x86_64-unknown-freebsd.tar.gz/sha512/3d0ac0fdd255087db3bcb4d0c1f53350090a611d888bb77c3f422f91a6ab43fddba2b39686f271bae098330be9461657c338171c32f7038c2484a32052d8b05b -libLLVM_assert.v11.0.0+4.x86_64-w64-mingw32-cxx03.tar.gz/md5/702c79a18b1f460cbe7d1c33a4258b4d -libLLVM_assert.v11.0.0+4.x86_64-w64-mingw32-cxx03.tar.gz/sha512/16f7e377ae8a7f443d631906470875ed97a6c4b23b0d74071a21e77f3fc1055fea52e59e74dcc4cb5e5486df0241b54c5398a188d6c75275ca345d14ffe56825 -libLLVM_assert.v11.0.0+4.x86_64-w64-mingw32-cxx11.tar.gz/md5/e40a01d070092c5aaa6dd335d5ba75e9 -libLLVM_assert.v11.0.0+4.x86_64-w64-mingw32-cxx11.tar.gz/sha512/3628b68fc42b95a7817c42987780c22f95a4e80374063a0a748c4bcae979ff8f669ec02f8e69d11f06d2d06db09e1969f54b2d4f53b8b3feafb2669d294bd5a1 +libLLVM_assert.v11.0.0+7.aarch64-apple-darwin.tar.gz/md5/01ce1fa1c844d25592a356960f107083 +libLLVM_assert.v11.0.0+7.aarch64-apple-darwin.tar.gz/sha512/3c4a94b225a0a277f5587dc646d4cfa74c269d4411f1d08e5fec78ecf5adc2766d0382626e47d5ef375a1c817750e9bcc74655f29fcf6dc35e396882f05e43ec +libLLVM_assert.v11.0.0+7.aarch64-linux-gnu-cxx03.tar.gz/md5/801e14ea4683c1aaea7471d3ab6d1cff +libLLVM_assert.v11.0.0+7.aarch64-linux-gnu-cxx03.tar.gz/sha512/5bc5733dbfb328b738c1bc12e0fe5d1beb6d5638ed68db590ac8e6f6904f7f4eeb11749202be34b6cb9edddd8fbabfadd8ee4b9bb7a7267cdf1e111b4910b56c +libLLVM_assert.v11.0.0+7.aarch64-linux-gnu-cxx11.tar.gz/md5/0272cb3351dfb0d9b305c614f95d6b9c +libLLVM_assert.v11.0.0+7.aarch64-linux-gnu-cxx11.tar.gz/sha512/2bc95342c55a137290421837d0cffaa2b5e7c46b1ed02c01c5ae090bdfe67699d46f9e9cebe935b35edd64870c2174b810b175dd26a6c9d37a361feff9b3ab4a +libLLVM_assert.v11.0.0+7.aarch64-linux-musl-cxx03.tar.gz/md5/010c7b4819b3f62507f4d94da323b91b +libLLVM_assert.v11.0.0+7.aarch64-linux-musl-cxx03.tar.gz/sha512/759ca60134f8ae44b4375f1756b9b830262efc2852479cc5dfe7222a7088958e1c34f6122a9bd038d5121a18d9fb5d60611fa7cdbdcd9c77c9a7a6c27bf725a5 +libLLVM_assert.v11.0.0+7.aarch64-linux-musl-cxx11.tar.gz/md5/795e01d60430cc4d94dfa4141fd4a95f +libLLVM_assert.v11.0.0+7.aarch64-linux-musl-cxx11.tar.gz/sha512/da172e81b064dd758609efe3cd48dbc9e9967543cf94cac5f27b775df0ab87b787e2ea247092a16078d33407878bcc9ba2223b548d0fb84285113e92d03a9cd1 +libLLVM_assert.v11.0.0+7.armv6l-linux-gnueabihf-cxx03.tar.gz/md5/99bb6924aa6bf6e04f87fb96f50ea9fb +libLLVM_assert.v11.0.0+7.armv6l-linux-gnueabihf-cxx03.tar.gz/sha512/1d2a5ac479915062bcb13ebad1e9040bc8fecdb54a4fd30aaa97a2ce10463cc2292677000e51dd8b3c2289c695f35f17a9864ebf4adc6c4702842c2cae8e0785 +libLLVM_assert.v11.0.0+7.armv6l-linux-gnueabihf-cxx11.tar.gz/md5/9fdd873c27109adbff52bdeb9774bacd +libLLVM_assert.v11.0.0+7.armv6l-linux-gnueabihf-cxx11.tar.gz/sha512/c7aa34e102eb3941c55b9a207bf5c2af851ddc97e1a575a8f4a1f50102be2cf9e6f2ea4fc88e0d7fd29e440cb74bb9f805d91f813a5c1d91552c337af31af85f +libLLVM_assert.v11.0.0+7.armv6l-linux-musleabihf-cxx03.tar.gz/md5/245d0d63afa7e81b924bb0a909e5ad4c +libLLVM_assert.v11.0.0+7.armv6l-linux-musleabihf-cxx03.tar.gz/sha512/b90259fb9afbc4d4ce7fdbc717d0321e72b8ae6e777d66960bb8754e57f1612438131e2061a0db5de78dc0aabc8a1ef5839e4ff2d80d263c1db2b949f28c5ceb +libLLVM_assert.v11.0.0+7.armv6l-linux-musleabihf-cxx11.tar.gz/md5/8ef34cedadfc87d9bc81b72165fe3ffe +libLLVM_assert.v11.0.0+7.armv6l-linux-musleabihf-cxx11.tar.gz/sha512/1f2e7b12b788405a48eeecd4dc5999cd9ebeb7de2c19068a0809e7804ab6fa27f64307127dab0d5a34c368be967f86e4ec866310a9af30eef0bf4b9c0330a386 +libLLVM_assert.v11.0.0+7.armv7l-linux-gnueabihf-cxx03.tar.gz/md5/29d8daecf3254d31db7a92d069692cab +libLLVM_assert.v11.0.0+7.armv7l-linux-gnueabihf-cxx03.tar.gz/sha512/6d217c278b80dc8f56730508aa6c93104f3bb6cc92d90c763c8403a17b107ce615bf320232d3fd6d439f76f0260da5c7bc34fb13b592f95b4113a6394b0d6ad7 +libLLVM_assert.v11.0.0+7.armv7l-linux-gnueabihf-cxx11.tar.gz/md5/4545a7d06bbeaf1b8061d7728107f222 +libLLVM_assert.v11.0.0+7.armv7l-linux-gnueabihf-cxx11.tar.gz/sha512/8c881b33ea364845bfe85757b70a11f8bd75bc5f79929ccd7b4f6a01ce2582ca0cd353abd8b61ae76202674211b9b8e18492ebd10bd94262536ceac53bfec625 +libLLVM_assert.v11.0.0+7.armv7l-linux-musleabihf-cxx03.tar.gz/md5/7f23b6e002f429ce2805014686e4cbee +libLLVM_assert.v11.0.0+7.armv7l-linux-musleabihf-cxx03.tar.gz/sha512/232176e500d9c086ee2f30e2139f26b26956921bd76007f99433d18fe6007f15cdd6c72981527792e712d82f513cce510b7e0767136534613fa89f76e6e8dfac +libLLVM_assert.v11.0.0+7.armv7l-linux-musleabihf-cxx11.tar.gz/md5/a33428d48938ffeb39568fb116590b09 +libLLVM_assert.v11.0.0+7.armv7l-linux-musleabihf-cxx11.tar.gz/sha512/53926f07da2f712fa75cc76decd8427c868297c5b2a7f82732caa36f406c8e0709adb1f5c5a5f3893bb1daf7dfb710716cb1d9d78ba94d5b2adf603fcc9df453 +libLLVM_assert.v11.0.0+7.i686-linux-gnu-cxx03.tar.gz/md5/516255057a3dd18e010b9994c0fc7df0 +libLLVM_assert.v11.0.0+7.i686-linux-gnu-cxx03.tar.gz/sha512/3031b4655487b11fd65670af8b4362cadfc3240a1ebdd5aa4348b6db95c68e1dc312ccc6d2690ab147601d438b06fdb7283772136ad9f3e23f94df585a7c01fb +libLLVM_assert.v11.0.0+7.i686-linux-gnu-cxx11.tar.gz/md5/c698bad624a1c0d0351a12089d2fab0d +libLLVM_assert.v11.0.0+7.i686-linux-gnu-cxx11.tar.gz/sha512/83d821bdd79b0fb3ff979969f3797aedd77c7fc7e8bc6c28b43584b208d62c2d1c8d655f934c17a52d6af112ca69f455636412132daf7b097d0c8e9034eac9ba +libLLVM_assert.v11.0.0+7.i686-linux-musl-cxx03.tar.gz/md5/c6f07ad0e28e80c8cdc4bb8ee0954e93 +libLLVM_assert.v11.0.0+7.i686-linux-musl-cxx03.tar.gz/sha512/8998823d88f0b31a26b3733d17056f3411c7079b27acdcd19f43b7091368563756243ed796b4c24c9c5540ef9021ea04c874101145d1e22ee90dbecc4df88444 +libLLVM_assert.v11.0.0+7.i686-linux-musl-cxx11.tar.gz/md5/3cac3d493d67c65131e621eb7b5f9642 +libLLVM_assert.v11.0.0+7.i686-linux-musl-cxx11.tar.gz/sha512/addbff3c4bd4f861fe8543b590df1c1e21f932e5fbfc077c998d6ee8aea4057e4ef5b2b3db22ccb35274d667c3e4f4cf93a80b4b25c3db815cd2afe6f1ae9bb7 +libLLVM_assert.v11.0.0+7.i686-w64-mingw32-cxx03.tar.gz/md5/3f28b8c02393b3df8dea1b4a60b5caa0 +libLLVM_assert.v11.0.0+7.i686-w64-mingw32-cxx03.tar.gz/sha512/cdf973c9fc6eb4126b084d94a95328f0c11f5e321439b527afc964e16b9edc157096cdea6fe4cb65ad23b5962c1aff80cdcc865a3bcd7db2ba94f2850e7224bb +libLLVM_assert.v11.0.0+7.i686-w64-mingw32-cxx11.tar.gz/md5/6a50f7c21e1c26bd498e604d9e703218 +libLLVM_assert.v11.0.0+7.i686-w64-mingw32-cxx11.tar.gz/sha512/6458830c94ca914a47ad68d42d4ad7ac36b0f04846e9fb6f8f0d71e1fc72d7e7d72489243b2d669a21a4a90cafc1762da51c6aaaa9bc88fad012f7fe2ae60ee8 +libLLVM_assert.v11.0.0+7.powerpc64le-linux-gnu-cxx03.tar.gz/md5/344bb37464050981120df0c375535bbf +libLLVM_assert.v11.0.0+7.powerpc64le-linux-gnu-cxx03.tar.gz/sha512/ce3705a52d3c59b611d6a37b96cb3185054e99e9731b3792e460eb2844ba52d2c7bef6c83516ee40298cc54f8022e73f933d23d814b7ab4f07ed8ea486ff9eed +libLLVM_assert.v11.0.0+7.powerpc64le-linux-gnu-cxx11.tar.gz/md5/9a380e07b9a85ae2adb9a322b6e4d77e +libLLVM_assert.v11.0.0+7.powerpc64le-linux-gnu-cxx11.tar.gz/sha512/29871da2a92d7ac001f92ff6233ce66fa2a6e61a3f6b6bbd00e0748dfd64ce0d95ef7213681384ca4de81979f573485ac2e22b849551aa60bf301d633b888a4c +libLLVM_assert.v11.0.0+7.x86_64-apple-darwin.tar.gz/md5/c324368a1703af17c6c57746a9453ed6 +libLLVM_assert.v11.0.0+7.x86_64-apple-darwin.tar.gz/sha512/3422886200149d5e958ac75a1f7be4a982c19a8285e256bcc7c9c63e239856bee8d033c9e08695166720d7a9c3766d22d19afa2b8c2b7efb750b18b172a1a730 +libLLVM_assert.v11.0.0+7.x86_64-linux-gnu-cxx03.tar.gz/md5/898b409fbd92540ec7d184b89acd0332 +libLLVM_assert.v11.0.0+7.x86_64-linux-gnu-cxx03.tar.gz/sha512/98898f24ac17486350292f5cc18ecb09059757c5bb18b61903608985cc2105a0172142b9469b27f07a92c1bee6dc22759cdbabc35762f0c1a5411902be76089c +libLLVM_assert.v11.0.0+7.x86_64-linux-gnu-cxx11.tar.gz/md5/5d827bb566640cd95bdf63a0c893b26f +libLLVM_assert.v11.0.0+7.x86_64-linux-gnu-cxx11.tar.gz/sha512/0ab5a7ff7e647277bf1c019c5e3a7c7018cb2d1798c831c443529a0d1b010c730e442148d0ed943920b5592d1718b27f6493d7d3bac250c76d5a733a1f91c150 +libLLVM_assert.v11.0.0+7.x86_64-linux-musl-cxx03.tar.gz/md5/87df505a58117741ac66c3031a25c355 +libLLVM_assert.v11.0.0+7.x86_64-linux-musl-cxx03.tar.gz/sha512/2cd8ab5c7c846ec8c8a1f35bce7cfa4fec12a349418e0cae88ee12262190d73b24926bcd1027dfbf7b961cb417d50edba3d2831949af3738b9c3dc2bb63036e8 +libLLVM_assert.v11.0.0+7.x86_64-linux-musl-cxx11.tar.gz/md5/a6714ae1f6cf77ddccac7fae3095ff16 +libLLVM_assert.v11.0.0+7.x86_64-linux-musl-cxx11.tar.gz/sha512/3de3d48754e9c5f5ea50a005570963c175e87c83202c4924b41422d279194379076c4c42c8c59cd7a8257181fddbf0166658187474f409cc368f76e97994672e +libLLVM_assert.v11.0.0+7.x86_64-unknown-freebsd.tar.gz/md5/f573ad0488fe0560393fe8fb04d18a65 +libLLVM_assert.v11.0.0+7.x86_64-unknown-freebsd.tar.gz/sha512/e8645df8a29f7e2d875839604ab7bd7f23d5118efd61838f3ce2f45aa784c0a6d11bdb0c9010d864c0f071c1fde1a9d5d868a59da8077d036cf3673452506d86 +libLLVM_assert.v11.0.0+7.x86_64-w64-mingw32-cxx03.tar.gz/md5/895c1fced30f8d6608b2741cb6fb6a01 +libLLVM_assert.v11.0.0+7.x86_64-w64-mingw32-cxx03.tar.gz/sha512/1b7aefadaf9ec753f8579def68d0a21e45c53c98b86654f0f6c65612b4b1d6fd4721b852015ca2d8b4783c79cbdfbe11d139cac3fa49424c18499bf6b86fcf68 +libLLVM_assert.v11.0.0+7.x86_64-w64-mingw32-cxx11.tar.gz/md5/ccaeb2297dbc77f3f43b45ba8668e684 +libLLVM_assert.v11.0.0+7.x86_64-w64-mingw32-cxx11.tar.gz/sha512/54691ed3a5169b945428efc3846b09e4e6d9d57fdc2c2cdbfe0f9839aca76471e6d0dd34f7adefa290290d9aabcc9c290808213e380931ba4c0d15c6b6140b62 +libLLVM.v11.0.0+7.aarch64-apple-darwin.tar.gz/md5/3f1040e2f4d169b7218ac0e4029dc598 +libLLVM.v11.0.0+7.aarch64-apple-darwin.tar.gz/sha512/bcf9b831a95139e594a3ffdb07a9d63bcb51a53ab537615dd18c23e6da53dba6c1f60cca02b234ab99714c23b78ac0a2296d4d214347ffb95fabf09ead8f8e11 +libLLVM.v11.0.0+7.aarch64-linux-gnu-cxx03.tar.gz/md5/335c2df4b91c55abf929d063068f66b8 +libLLVM.v11.0.0+7.aarch64-linux-gnu-cxx03.tar.gz/sha512/25bcbf83eb201e9e7e2dd93d2ddee9ca0d9fbcd5bf29b2b0b24ffc93421edaf219657e72fff904aa388d7b29f6e10adf224a17bc0fa4831687b301f238f01dee +libLLVM.v11.0.0+7.aarch64-linux-gnu-cxx11.tar.gz/md5/f90354ebedc8aa28cb0951427701e56b +libLLVM.v11.0.0+7.aarch64-linux-gnu-cxx11.tar.gz/sha512/2bfffacbce7b5dd60313bf538440f9d5f8c7c44318d762a802a620e98da198bf3498b41fb772b519dea17b18efc5fa667a67c4981c91767886c544f62fe41759 +libLLVM.v11.0.0+7.aarch64-linux-musl-cxx03.tar.gz/md5/5950047408876870ccf870800f365a1f +libLLVM.v11.0.0+7.aarch64-linux-musl-cxx03.tar.gz/sha512/871e067c84bf85b83cdbdff4abccb55d9438216332ca80a56c4db12d29e74b53d88de78f5618f64a32d56f7832697c6f3ee38eeabcf706f12fa058e5ce4c6704 +libLLVM.v11.0.0+7.aarch64-linux-musl-cxx11.tar.gz/md5/094b76a377eded3e1b17b43abfde1932 +libLLVM.v11.0.0+7.aarch64-linux-musl-cxx11.tar.gz/sha512/0e632662bf268287cf3907e23ccdf4acb535c5215a188abc729d91feea68bc4e704f2bb083695018332fd5b4e0bdbf443069de0c0935a76a49aa02b94e939056 +libLLVM.v11.0.0+7.armv6l-linux-gnueabihf-cxx03.tar.gz/md5/b562fe4058de0edb2b60facf35781242 +libLLVM.v11.0.0+7.armv6l-linux-gnueabihf-cxx03.tar.gz/sha512/c48a99071cd2ba317e9a1be3c3198eb7e655a072891ab2eed125c940002c7da951dc33bb14ff014b64fcc2eb8fe97caca3bf64bb3701ef3fe8bf2e0f2986a9e4 +libLLVM.v11.0.0+7.armv6l-linux-gnueabihf-cxx11.tar.gz/md5/273b2202f93761ac464641f88fad7059 +libLLVM.v11.0.0+7.armv6l-linux-gnueabihf-cxx11.tar.gz/sha512/2963a2e35874726ebdf246a32814e0f5354eb5d2f62ec3f303924ab67d52b59e9bd73d03530b6a292b93e9bc3421ed9168a02aab4d6e6ff1cf25411cd03c7bb8 +libLLVM.v11.0.0+7.armv6l-linux-musleabihf-cxx03.tar.gz/md5/19e8437b5e99aed82703aeed8bb1755b +libLLVM.v11.0.0+7.armv6l-linux-musleabihf-cxx03.tar.gz/sha512/745c5cbe14f05ebb422853d1d45c841b5bc5664d0199c5a37d677e992d97e3072c0604b337f27a04d6388fbb355b9347eca7a9d642e75121d461823fbceef999 +libLLVM.v11.0.0+7.armv6l-linux-musleabihf-cxx11.tar.gz/md5/576c2646143733f19d558dc05acf3d6a +libLLVM.v11.0.0+7.armv6l-linux-musleabihf-cxx11.tar.gz/sha512/79e2ff48341a8542b4ef017dd4b2566821beff06c95df40701c2f3344a3948b7595cfb2cfc082eca76f7fd77463204590e58073ba87ff59b4b0a8c9df34b637c +libLLVM.v11.0.0+7.armv7l-linux-gnueabihf-cxx03.tar.gz/md5/a14d1d1e6b45fb2cf533417c0b81a8fb +libLLVM.v11.0.0+7.armv7l-linux-gnueabihf-cxx03.tar.gz/sha512/2fe855985bd2b88beb35ecabae424f70781ce61aaf6314cc19da4b7bceea5b1dd1de4df2b893f5b8844bcb3794805bf9dd5e5d1acf61bf29c4d7912150101717 +libLLVM.v11.0.0+7.armv7l-linux-gnueabihf-cxx11.tar.gz/md5/1fe456f1c826dbb0b47d74ad855ef459 +libLLVM.v11.0.0+7.armv7l-linux-gnueabihf-cxx11.tar.gz/sha512/583f794fb40d8216cd21133d0606591e7e2f0497d991dd449aa7101bbfd48608e63934940fb94df751ad782ba189b2549d5be5e1d74b26f90ecc8effc948d123 +libLLVM.v11.0.0+7.armv7l-linux-musleabihf-cxx03.tar.gz/md5/2860de0825c3a5bcfd809f45744562cb +libLLVM.v11.0.0+7.armv7l-linux-musleabihf-cxx03.tar.gz/sha512/e959f793f15b3181bea02cac927caf4ec242cef1a72ea3eb9363dce651549c5faae3f576b1a39980571279719115d89252d703c718a2e73a50125ac82a3a4cc4 +libLLVM.v11.0.0+7.armv7l-linux-musleabihf-cxx11.tar.gz/md5/c5de837cfd59f5baf08f0661cba2f667 +libLLVM.v11.0.0+7.armv7l-linux-musleabihf-cxx11.tar.gz/sha512/68026ea3a3e77f91430e375645b1415c20e2d9b05c0a81b83b859759577295b17883c74eed97dc3df91a167e136f68577af2c978352b990f7f4e517df0b0bc30 +libLLVM.v11.0.0+7.i686-linux-gnu-cxx03.tar.gz/md5/b2348a8a03bc79d8c65689529f7a4516 +libLLVM.v11.0.0+7.i686-linux-gnu-cxx03.tar.gz/sha512/92bb809cf50eda52cb3dd1b37ad221e930be0a05cf91cda567f25936c62f069ee05719fbf959876df45ef0270cb13668ceed983608d897c17dfdd57dab7fef55 +libLLVM.v11.0.0+7.i686-linux-gnu-cxx11.tar.gz/md5/acd3ff22681f11a0a5b254f7a55c6fb3 +libLLVM.v11.0.0+7.i686-linux-gnu-cxx11.tar.gz/sha512/dddf6ae0eca7b1d275582920b115808fc8c22bf29035c0e0d4263c88a45cf7818eb96e8ec2ef482e3d293110a38d790ab0733e469944c5fa4b0441c5c9400c9f +libLLVM.v11.0.0+7.i686-linux-musl-cxx03.tar.gz/md5/2a3921afb578c5fa25c1c6ddab97466f +libLLVM.v11.0.0+7.i686-linux-musl-cxx03.tar.gz/sha512/4ed9bcc03b5a45b9297375fffbaae58052834d278f17a90923d8e296f2d53c88c1c45e37473f53eae99cf3a8f7cdf829a5a98a99d20647db76784acaf44e7a11 +libLLVM.v11.0.0+7.i686-linux-musl-cxx11.tar.gz/md5/97573e2ef4aedf50448e23d442c105de +libLLVM.v11.0.0+7.i686-linux-musl-cxx11.tar.gz/sha512/5654b86df97e7ef03c3543dfd3f5b3b60dc0906e7963bb758825c99eaff0f43a1edb2c6b8c6969f9cedf2f68833d18b20cc708452b628999cf7ae40438f575e5 +libLLVM.v11.0.0+7.i686-w64-mingw32-cxx03.tar.gz/md5/2f57354ddae4d50ec4abce30d71f12fd +libLLVM.v11.0.0+7.i686-w64-mingw32-cxx03.tar.gz/sha512/29b8af9bc5188ec49e61fa413215c84209102137c9ba0325e598abac52c43b3cace43fc80971b96a447ab0393b883e25d8e489e865a1ebbd4913a76ff66b0a80 +libLLVM.v11.0.0+7.i686-w64-mingw32-cxx11.tar.gz/md5/ed9cf691b651ed59e731f57545369086 +libLLVM.v11.0.0+7.i686-w64-mingw32-cxx11.tar.gz/sha512/926f9059283becfeef3fccd319229c09c11dde86f718a9610d204621225a1e09b88a9fb23d9ce2c4186133b1b71eb611f52571e63ae570bb3e55a7803949f202 +libLLVM.v11.0.0+7.powerpc64le-linux-gnu-cxx03.tar.gz/md5/0c9e9ce8bb846fee0e8e8bf5ee7cf3bf +libLLVM.v11.0.0+7.powerpc64le-linux-gnu-cxx03.tar.gz/sha512/d804d538406b9aa0ab1b28993c0239d40dbf73267f68b5b195ddf96ba6477b4040764333c5fa1ce44b8010d9b2ecfc17dd9ac1bc00439e0c6a36488a1d925e9d +libLLVM.v11.0.0+7.powerpc64le-linux-gnu-cxx11.tar.gz/md5/d824e078349d3ae53fa4c6b5c2704dbe +libLLVM.v11.0.0+7.powerpc64le-linux-gnu-cxx11.tar.gz/sha512/f9f22868335ce24c40663df2a87ab98c377b666905238fe15023d5a1e2446ecf5d12f88ad2e7268a858058aa9113f65cd3f02812715e7251f092a1e6767e3775 +libLLVM.v11.0.0+7.x86_64-apple-darwin.tar.gz/md5/6faa07677a8d3b7c38eeadeeca0229e4 +libLLVM.v11.0.0+7.x86_64-apple-darwin.tar.gz/sha512/e93a6ea6ff3221b54014c684134bc35b1aded66775453c5ba0657a6e03e046eabcea435fc7db3a90a59cfbd6167bd27405c9c997fd2993e2faac164042973495 +libLLVM.v11.0.0+7.x86_64-linux-gnu-cxx03.tar.gz/md5/9d8b84a79a020c3b5bd118b340ca6417 +libLLVM.v11.0.0+7.x86_64-linux-gnu-cxx03.tar.gz/sha512/824bd9ee3246cfb08cb065c3e8428ee9a1bd8907df672b3e2a65a23efda0765d9dcfc1cb10d12ac3a118d946dc29dce682f7d4cfdcea7bf4be5b37ab970515fe +libLLVM.v11.0.0+7.x86_64-linux-gnu-cxx11.tar.gz/md5/bb8a73c93efe36baa8fe6537b1dba82c +libLLVM.v11.0.0+7.x86_64-linux-gnu-cxx11.tar.gz/sha512/81e69ffdf73ad6f14d99b496aec236c9e83684862415cc86d07d321716f8da590b27966b6ac28ebf62fe7acaae6fa4fb192ee76171a8b140dfed9e49fce2b21d +libLLVM.v11.0.0+7.x86_64-linux-musl-cxx03.tar.gz/md5/dfb5e7eb0246f10e1a8a49d99c8e9145 +libLLVM.v11.0.0+7.x86_64-linux-musl-cxx03.tar.gz/sha512/645f79be4e7bbc67dc2bdb503e2ad41cf9e135b9e67ad07b8e33df0982917c4103dc0d70bc6305b313e5ba555af8c8f893af1f220720e6a0a1cc4faa545a4157 +libLLVM.v11.0.0+7.x86_64-linux-musl-cxx11.tar.gz/md5/87f3f0707a0a2a2dbbf119000dc2621e +libLLVM.v11.0.0+7.x86_64-linux-musl-cxx11.tar.gz/sha512/9f23e1f7f097beb6066234fb854545754b6e5938c2092ef282cafeea3fae4903dbdc2e39e52030130e8137ea223367b1ed05557f1d08dd026c9e5c0c5db0b0af +libLLVM.v11.0.0+7.x86_64-unknown-freebsd.tar.gz/md5/23d639edb45276d5b705122f180265b7 +libLLVM.v11.0.0+7.x86_64-unknown-freebsd.tar.gz/sha512/7b1d8d70a8718af421f86db049cd6264717dbe9cdd601ac317ae1c93323a790d1e4b7288f558d7e9b4509510132a166210ba1bf8c06652027d685f0ca05cea62 +libLLVM.v11.0.0+7.x86_64-w64-mingw32-cxx03.tar.gz/md5/f61342c9ca2b75f5992680b3c748162d +libLLVM.v11.0.0+7.x86_64-w64-mingw32-cxx03.tar.gz/sha512/aae8a9c5b9d468b3a615e91bd411e2ed044684b10fbec7de5fcf4a469b6f18fb71c62b377c3b941e277a1f492d331ab4577d8814adfb29a12b25e8b7bd073bf0 +libLLVM.v11.0.0+7.x86_64-w64-mingw32-cxx11.tar.gz/md5/173b0fafa2529b8b4f91e4aa731bb579 +libLLVM.v11.0.0+7.x86_64-w64-mingw32-cxx11.tar.gz/sha512/b74876bd713e319762fd02e6b13dac0bae72157329ce928eb8044105ba6b005a24e36d618cbb4fa59725ddef0bcc0dc64b24a4169d1ae76424665d5869ef63d8 llvm-11.0.0.src.tar.xz/md5/85844102335b2e01b3c64b6734fb56f2 llvm-11.0.0.src.tar.xz/sha512/b3e92091ac48772edc0c30801218ce646ef374e1968baab91df9005f58e11c3ce149b2c4c655c7001f8554fd337caa02c08783bc736153bf58f35fe008e624a4 +LLVM.v11.0.0+7.aarch64-apple-darwin.tar.gz/md5/dabe6f51ae4836191c3bffb3c13ac152 +LLVM.v11.0.0+7.aarch64-apple-darwin.tar.gz/sha512/251581327d59efa6a218f6923a1303fa45d71ac192c9602f9fb675b0140356b163319e98728f872616472a72c5edb0f5bbf72e00a440cbb208ee30264d507ed0 +LLVM.v11.0.0+7.aarch64-linux-gnu-cxx03.tar.gz/md5/7914dca0f3d1cdd4ea3ffa684c5da2e2 +LLVM.v11.0.0+7.aarch64-linux-gnu-cxx03.tar.gz/sha512/3fcf719a85b6f6d28c53fa0348099953673499544a421fe60a3424b6bd022c1bea1fe57289a502069c31928eceaf6163ece1843cabeb3d1d4f497b1a37771185 +LLVM.v11.0.0+7.aarch64-linux-gnu-cxx11.tar.gz/md5/6a12e330fca6a5dd6323aa0b2fc79def +LLVM.v11.0.0+7.aarch64-linux-gnu-cxx11.tar.gz/sha512/4ff85dcafcf00a8a903b855cbe1d55b04c56b939e7c7952dbd3c03a38edfe6e1ce97ba4d721e87d97d83c5e23771ddce4a1f21785a3c11acbaebded997a7cc33 +LLVM.v11.0.0+7.aarch64-linux-musl-cxx03.tar.gz/md5/74aff1550da6780325b5b511524bc44b +LLVM.v11.0.0+7.aarch64-linux-musl-cxx03.tar.gz/sha512/f88b785ef394e75b7b0d98c0f590a1966d9d4e13e6db38459af84ac8a99121312e5c649c2a85ed0414ff946c7812919909f79babe6f045fe986b31cb48d7f13b +LLVM.v11.0.0+7.aarch64-linux-musl-cxx11.tar.gz/md5/8109e6d08f4c0e81e301e2efe368ef88 +LLVM.v11.0.0+7.aarch64-linux-musl-cxx11.tar.gz/sha512/e59c42daa2d4fb17fe8036108d34d37f9df890eb0f8e9c0a216602f601edf164a0ee4d74b8bb85773435a3f901b08c9e4563f9fc9fe6104221f97adb40031b0d +LLVM.v11.0.0+7.armv6l-linux-gnueabihf-cxx03.tar.gz/md5/c15c20c86f35252e8f952f268976fada +LLVM.v11.0.0+7.armv6l-linux-gnueabihf-cxx03.tar.gz/sha512/82afc8222a34cde051399ade2c187988c45fdfec86c1052611eec9a0374463e8ce156b336a0b82091b8c1f811fce01d0dcd0ae29a97c4cb5d6a513ffbca54a42 +LLVM.v11.0.0+7.armv6l-linux-gnueabihf-cxx11.tar.gz/md5/d6c1455fd8ac1d9605bc1c48614880ee +LLVM.v11.0.0+7.armv6l-linux-gnueabihf-cxx11.tar.gz/sha512/00a060d3f130fbfcefab34af50f2de72188cdaf54a2bc9dc90ebde2c685054a3763e86de83ae6872a959d1f5a915686a380cf171b2bc8721779ed000b606aa7c +LLVM.v11.0.0+7.armv6l-linux-musleabihf-cxx03.tar.gz/md5/5f841ebbe61e126e1ba1d92faef604d2 +LLVM.v11.0.0+7.armv6l-linux-musleabihf-cxx03.tar.gz/sha512/8b7643ec31aaf8a66c52db6d4489f56496a5cacfc725bcb36ca85b90e6b167e229282b4356c2c9ac7c4a5d5e533144ff7d09f7f653976aba74c8e8144db069e3 +LLVM.v11.0.0+7.armv6l-linux-musleabihf-cxx11.tar.gz/md5/d6b02c3c02ff21705110facf68fb48f6 +LLVM.v11.0.0+7.armv6l-linux-musleabihf-cxx11.tar.gz/sha512/0283271705c46fe6ecf6943b7ef824beb8f34ddcd3c6c395f5ad67043c04119a00fc5ef6ed1ab0b3416ff604b9c2a68f8df48abe3b998233e56d8f17ebc1de45 +LLVM.v11.0.0+7.armv7l-linux-gnueabihf-cxx03.tar.gz/md5/b5e6936d7953b4032cf9b61779d3bffc +LLVM.v11.0.0+7.armv7l-linux-gnueabihf-cxx03.tar.gz/sha512/3e90c7c81580f18a3e9cbc09b384215424c7b4e23cb0d012a6ac445ddfa71bbae725a92d9c11be0c2b332f66449dd8e9fbc0a63b9bedf5904190d32eae8b9d3a +LLVM.v11.0.0+7.armv7l-linux-gnueabihf-cxx11.tar.gz/md5/9bd755b395be340f32f89b9276e5a4c4 +LLVM.v11.0.0+7.armv7l-linux-gnueabihf-cxx11.tar.gz/sha512/f8d3f98cb21a990b317728eefa33b0e0d5407f3bef2000013c6bc2c384d78cf5419f907a62a27b14c60e8b7666b86c1e012297bed9960bb2c0f737e101ca269b +LLVM.v11.0.0+7.armv7l-linux-musleabihf-cxx03.tar.gz/md5/076b24fc6b2777bda89add6239bd47d0 +LLVM.v11.0.0+7.armv7l-linux-musleabihf-cxx03.tar.gz/sha512/fe4df75f654c0847e62a1340a7933c40990151ee2245759936eab996db157cb61457fd90ac57381b01b2044dacb50c4b7502ceb42cd7c176445b020f128be6e7 +LLVM.v11.0.0+7.armv7l-linux-musleabihf-cxx11.tar.gz/md5/8a21cc45168ac7c506a95d4854237be1 +LLVM.v11.0.0+7.armv7l-linux-musleabihf-cxx11.tar.gz/sha512/44c3e7c5e2c3b521f69d99a1d7e3246e45074d66bcd0b4bee5dd4d15a83e9fa602f0ce6c7a76a957df53205f4a7906cc7fa316078b064d4cf02550921dca3147 +LLVM.v11.0.0+7.i686-linux-gnu-cxx03.tar.gz/md5/4c838d5ad65102afa9162a00f888bee6 +LLVM.v11.0.0+7.i686-linux-gnu-cxx03.tar.gz/sha512/cf65126d3d8c399476d84e98e6050d5a5481ffa745e931196c7663a72b40818918e64bc4aac584ab11e1ff15019286345e6e7ae460b0c4455da004d54f97fff2 +LLVM.v11.0.0+7.i686-linux-gnu-cxx11.tar.gz/md5/8f245351d8e4a657752ca5d2f1f4a8d9 +LLVM.v11.0.0+7.i686-linux-gnu-cxx11.tar.gz/sha512/2d9b8c9932c5bd87ca4ab6b2937651e015a03629360a1d7368aa49a073315639e3794428d8986fbcc38a2f04746201032a59d002eb31fce7552458de8418ca20 +LLVM.v11.0.0+7.i686-linux-musl-cxx03.tar.gz/md5/9634c9ec4d8d72fdc89a6690fc3aed6a +LLVM.v11.0.0+7.i686-linux-musl-cxx03.tar.gz/sha512/44f7fe90cc7a158ff2dd63321076223c010343bcda1f773db41deee9a2d12f49efca3fcf00f272cf10249b43ab9dfe302f0c0a897e26176984bbbc3f507304f0 +LLVM.v11.0.0+7.i686-linux-musl-cxx11.tar.gz/md5/f0d4e03fcca7a034db1e60028a54f4ab +LLVM.v11.0.0+7.i686-linux-musl-cxx11.tar.gz/sha512/409cbe1e99caa320c9acfbb948550e058e96589363f7aceae5a17d88ee0d62f0e5e0f4396b7f2b0508f29568ea9c42f49e5df5f024115238651b6fb5709885ec +LLVM.v11.0.0+7.i686-w64-mingw32-cxx03.tar.gz/md5/c3fe268d3bf3bf7ef2afcf9a387f420f +LLVM.v11.0.0+7.i686-w64-mingw32-cxx03.tar.gz/sha512/cfeaf2ed294780eb4e008bae10202e77abcbae564eee2c53566320bce58305c20a6d7bbae63e37ce2b15bb177352e1f623434329319a7a6594110cc8a297c9ec +LLVM.v11.0.0+7.i686-w64-mingw32-cxx11.tar.gz/md5/6ee4ee2ed357585797fb95e6e5dff3b6 +LLVM.v11.0.0+7.i686-w64-mingw32-cxx11.tar.gz/sha512/cf5ce880b930fc2ce0d28597515cfbc203f20555398f5e79341e2be4e643da757a13aaf1b67ca16936a79c7c708194defdbfa8c011213363dadbd49a3f035554 +LLVM.v11.0.0+7.powerpc64le-linux-gnu-cxx03.tar.gz/md5/1b86cd0064df4872f45256702e799b06 +LLVM.v11.0.0+7.powerpc64le-linux-gnu-cxx03.tar.gz/sha512/062f49235357d5c4cda23050e13c5c0f3de643a8c4137f8e9b9cdae7a3a9ab31c7421e44ba5bab5902b92982c6a135c6a069583caf0409bc4960d9e68513d954 +LLVM.v11.0.0+7.powerpc64le-linux-gnu-cxx11.tar.gz/md5/467c91cdb61c35e2f769701393a27a3a +LLVM.v11.0.0+7.powerpc64le-linux-gnu-cxx11.tar.gz/sha512/7bbd1f497b6b8edba056540084f09d367bcb245be8fe9fd6b6455d3847f77a61ca1c66cd9465a84a89d37e832f36a046ec6b9d815f8b511fddf952cdf43ccf96 +LLVM.v11.0.0+7.x86_64-apple-darwin.tar.gz/md5/06ec920a21a49168fe2e6315bf8e05ae +LLVM.v11.0.0+7.x86_64-apple-darwin.tar.gz/sha512/d8138dacc7dcd4e3cfb91bc09ec7cb4d446a94c3b056d685da4e3816d6b77c84937aa2a54417a6646738ea721ff90ad7b79989fc9e79ad55b5944618591d0a23 +LLVM.v11.0.0+7.x86_64-linux-gnu-cxx03.tar.gz/md5/af22cb0dcf36d9a15b9d287dc090b09f +LLVM.v11.0.0+7.x86_64-linux-gnu-cxx03.tar.gz/sha512/befa06d0e2e455dc7b046b083ebf9b4a10771f2916f639ecd135f2c8628f0231a2ffeef5c6f777212363c435aefee05fcf61e93bf4eb0f8603569785121b1557 +LLVM.v11.0.0+7.x86_64-linux-gnu-cxx11.tar.gz/md5/98d1f187020c958dbfc5be7f56810b3d +LLVM.v11.0.0+7.x86_64-linux-gnu-cxx11.tar.gz/sha512/55767a59047ef34832b08aa46765b819d53efc344b64d3096ff37f9d123d78e175c5e2b55cb49367732325a4c3da69b78e322f437f5bbc0eb01eab7b47b9a89d +LLVM.v11.0.0+7.x86_64-linux-musl-cxx03.tar.gz/md5/473515270f060d2f6c457dac599eb979 +LLVM.v11.0.0+7.x86_64-linux-musl-cxx03.tar.gz/sha512/b00071383cf6b7b6e4bfdc24be044b67aafec149dfab537275146b82d6de5fc3eecc2d5c3efc59de51caae83642db48b7694ad2f5ddd2e4c3a40257a56e511d0 +LLVM.v11.0.0+7.x86_64-linux-musl-cxx11.tar.gz/md5/502277dd5f359701e82cda7cc9c2e842 +LLVM.v11.0.0+7.x86_64-linux-musl-cxx11.tar.gz/sha512/58f140aa55946e288cf63bd6872489a5de3aac5a9af49c37e1d1ce451570f2de32a178ce431a948279170a6ad4ef251f78b72608b76fe2b72f6e2c6bc8e92187 +LLVM.v11.0.0+7.x86_64-unknown-freebsd.tar.gz/md5/5b4feb145bc572b52b731bd8c3811e47 +LLVM.v11.0.0+7.x86_64-unknown-freebsd.tar.gz/sha512/7defb7aefca9869926c6c54e5f51c8c8facc24d4aaed6dc27c6d9a8446fd0122ef5117de1b221011569fba033f0e7574de81a573f37277a8ef5235f8eeb539fb +LLVM.v11.0.0+7.x86_64-w64-mingw32-cxx03.tar.gz/md5/f5cfcbcc59a8b053526d4abaf24c41eb +LLVM.v11.0.0+7.x86_64-w64-mingw32-cxx03.tar.gz/sha512/7803b0c745c804b8fe3c66f997da59501bdf64f3ebe4606261807f5636a846e548ea3c3c265643fde4bc02573d40aeb14107a57cebb68976f02f3ad56fcabf92 +LLVM.v11.0.0+7.x86_64-w64-mingw32-cxx11.tar.gz/md5/2634b59f0520f010ffcf51928d7db7c1 +LLVM.v11.0.0+7.x86_64-w64-mingw32-cxx11.tar.gz/sha512/1f16b61e1cbe64892c60597fd938a52d4e239a4b98834fb1e6f27a1d28df8b1278604f057798ef8e6f545bbc23b1c2dc85e3300e6905f2c1bbf2fdd0fe46b0e7 diff --git a/stdlib/libLLVM_jll/Project.toml b/stdlib/libLLVM_jll/Project.toml index bca396b576cce..5d77c213c39b7 100644 --- a/stdlib/libLLVM_jll/Project.toml +++ b/stdlib/libLLVM_jll/Project.toml @@ -1,6 +1,6 @@ name = "libLLVM_jll" uuid = "8f36deef-c2a5-5394-99ed-8e07531fb29a" -version = "11.0.0+5" +version = "11.0.0+7" [deps] Libdl = "8f399da3-3557-5675-b5ff-fb832c97cbdb" From ddcffdea43d6ec4f161935a9255579d67edecf80 Mon Sep 17 00:00:00 2001 From: Valentin Churavy Date: Tue, 12 Jan 2021 18:33:32 -0500 Subject: [PATCH 15/78] use BINARYBUILDER_LLVM_ASSERTS for downloading assert builds (cherry picked from commit 6e9309d02b54a37ca82b6af1a3eb509aae16f185) --- contrib/refresh_checksums.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contrib/refresh_checksums.mk b/contrib/refresh_checksums.mk index 38db1549e13e9..3fddb7a66423f 100644 --- a/contrib/refresh_checksums.mk +++ b/contrib/refresh_checksums.mk @@ -39,7 +39,7 @@ endef # If $(2) == `src`, this will generate a `USE_BINARYBUILDER_FOO=0` make flag # It will also generate a `FOO_BB_TRIPLET=$(2)` make flag. define make_flags -USE_BINARYBUILDER=$(if $(filter src,$(2)),0,1) $(call makevar,$(1))_BB_TRIPLET=$(if $(filter src,$(2)),,$(2)) LLVM_ASSERTIONS=$(if $(filter assert,$(3)),1,0) DEPS_GIT=0 +USE_BINARYBUILDER=$(if $(filter src,$(2)),0,1) $(call makevar,$(1))_BB_TRIPLET=$(if $(filter src,$(2)),,$(2)) BINARYBUILDER_LLVM_ASSERTS=$(if $(filter assert,$(3)),1,0) DEPS_GIT=0 endef # checksum_bb_dep takes in (name, triplet), and generates a `checksum-$(1)-$(2)` target. From 5264d86269c61b6183549ee68129b0d5a42d8dec Mon Sep 17 00:00:00 2001 From: Valentin Churavy Date: Mon, 4 Jan 2021 22:52:10 -0500 Subject: [PATCH 16/78] don't dereference Expected (cherry picked from commit 39305d21d8c0caef7792cb387d2fc6add671bc1c) --- src/jitlayers.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/jitlayers.cpp b/src/jitlayers.cpp index 6269607ae575c..19ff195be4faf 100644 --- a/src/jitlayers.cpp +++ b/src/jitlayers.cpp @@ -726,7 +726,7 @@ JuliaOJIT::JuliaOJIT(TargetMachine &TM, LLVMContext *LLVMCtx) static void *atomic_hdl = jl_load_dynamic_library(libatomic, JL_RTLD_LOCAL, 0); if (atomic_hdl != NULL) { GlobalJD.addGenerator( - std::move(*orc::DynamicLibrarySearchGenerator::Load( + cantFail(orc::DynamicLibrarySearchGenerator::Load( libatomic, DL.getGlobalPrefix(), [&](const orc::SymbolStringPtr &S) { From b20a60f29a434856ce52cd7f81859597262de955 Mon Sep 17 00:00:00 2001 From: Valentin Churavy Date: Tue, 5 Jan 2021 12:32:03 -0500 Subject: [PATCH 17/78] [JITLayers] Consume errors on address lookup (cherry picked from commit b816edc7f060403bbb60bc21975ec631226db885) --- src/jitlayers.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/jitlayers.cpp b/src/jitlayers.cpp index 19ff195be4faf..aada046d46b69 100644 --- a/src/jitlayers.cpp +++ b/src/jitlayers.cpp @@ -814,13 +814,21 @@ JL_JITSymbol JuliaOJIT::findUnmangledSymbol(StringRef Name) uint64_t JuliaOJIT::getGlobalValueAddress(StringRef Name) { auto addr = findSymbol(getMangledName(Name), false); - return addr ? cantFail(addr.getAddress()) : 0; + if (!addr) { + consumeError(addr.takeError()); + return 0; + } + return cantFail(addr.getAddress()); } uint64_t JuliaOJIT::getFunctionAddress(StringRef Name) { auto addr = findSymbol(getMangledName(Name), false); - return addr ? cantFail(addr.getAddress()) : 0; + if (!addr) { + consumeError(addr.takeError()); + return 0; + } + return cantFail(addr.getAddress()); } static int globalUniqueGeneratedNames; From c7b5b47ba98f97cb25b52ec7ba7195bf83b8f82a Mon Sep 17 00:00:00 2001 From: Valentin Churavy Date: Thu, 14 Jan 2021 16:03:03 -0500 Subject: [PATCH 18/78] [LLVM] Adjust patch list for LLVM 11.0.1 (cherry picked from commit 6848da28d505dbd858ec4bcb093cbd8ddb0fd937) --- deps/llvm.mk | 8 ++ deps/patches/llvm-11-D94813-mergeicmps.patch | 111 ++++++++++++++++++ .../llvm-11-D94828-ppc-half-fpconv.patch | 102 ++++++++++++++++ 3 files changed, 221 insertions(+) create mode 100644 deps/patches/llvm-11-D94813-mergeicmps.patch create mode 100644 deps/patches/llvm-11-D94828-ppc-half-fpconv.patch diff --git a/deps/llvm.mk b/deps/llvm.mk index f97438dcf847d..96a9812441ad1 100644 --- a/deps/llvm.mk +++ b/deps/llvm.mk @@ -513,7 +513,9 @@ $(eval $(call LLVM_PATCH,llvm-rGb498303066a6-gcc11-header-fix)) # remove for LLV endif # LLVM_VER 10.0 ifeq ($(LLVM_VER_SHORT),11.0) +ifeq ($(LLVM_VER_PATCH), 0) $(eval $(call LLVM_PATCH,llvm-D27629-AArch64-large_model_6.0.1)) # remove for LLVM 12 +endif # LLVM_VER 11.0.0 $(eval $(call LLVM_PATCH,llvm8-D34078-vectorize-fdiv)) # remove for LLVM 12 $(eval $(call LLVM_PATCH,llvm-7.0-D44650)) # replaced by D90969 for LLVM 12 $(eval $(call LLVM_PATCH,llvm-6.0-DISABLE_ABI_CHECKS)) # Needs upstreaming @@ -523,13 +525,17 @@ $(eval $(call LLVM_PATCH,llvm-11-D75072-SCEV-add-type)) $(eval $(call LLVM_PATCH,llvm-julia-tsan-custom-as)) $(eval $(call LLVM_PATCH,llvm-D80101)) # remove for LLVM 12 $(eval $(call LLVM_PATCH,llvm-D84031)) # remove for LLVM 12 +ifeq ($(LLVM_VER_PATCH), 0) $(eval $(call LLVM_PATCH,llvm-10-D85553)) # remove for LLVM 12 +endif # LLVM_VER 11.0.0 $(eval $(call LLVM_PATCH,llvm-10-unique_function_clang-sa)) # Needs upstreaming ifeq ($(BUILD_LLVM_CLANG),1) $(eval $(call LLVM_PATCH,llvm-D88630-clang-cmake)) endif +ifeq ($(LLVM_VER_PATCH), 0) $(eval $(call LLVM_PATCH,llvm-11-D85313-debuginfo-empty-arange)) # remove for LLVM 12 $(eval $(call LLVM_PATCH,llvm-11-D90722-rtdyld-absolute-relocs)) # remove for LLVM 12 +endif # LLVM_VER 11.0.0 $(eval $(call LLVM_PATCH,llvm-invalid-addrspacecast-sink)) # upstreamed as D92210 $(eval $(call LLVM_PATCH,llvm-11-D92906-ppc-setjmp)) # remove for LLVM 12 $(eval $(call LLVM_PATCH,llvm-11-PR48458-X86ISelDAGToDAG)) # remove for LLVM 12 @@ -538,6 +544,8 @@ $(eval $(call LLVM_PATCH,llvm-11-D93154-globalisel-as)) $(eval $(call LLVM_PATCH,llvm-11-ppc-half-ctr)) # remove for LLVM 12 $(eval $(call LLVM_PATCH,llvm-11-ppc-sp-from-bp)) # remove for LLVM 12 $(eval $(call LLVM_PATCH,llvm-rGb498303066a6-gcc11-header-fix)) # remove for LLVM 12 +$(eval $(call LLVM_PATCH,llvm-11-D94828-ppc-half-fpconv)) +$(eval $(call LLVM_PATCH,llvm-11-D94813-mergeicmps)) endif # LLVM_VER 11.0 diff --git a/deps/patches/llvm-11-D94813-mergeicmps.patch b/deps/patches/llvm-11-D94813-mergeicmps.patch new file mode 100644 index 0000000000000..5eb98be41cbe5 --- /dev/null +++ b/deps/patches/llvm-11-D94813-mergeicmps.patch @@ -0,0 +1,111 @@ +From 5fda6724d697d428136266a61159a46c5da092f0 Mon Sep 17 00:00:00 2001 +From: Valentin Churavy +Date: Sat, 16 Jan 2021 17:36:09 -0500 +Subject: [PATCH] [MergeICmps] Don't merge icmps derived from pointers with + addressspaces + +IIUC we can't emit `memcmp` between pointers in addressspaces, +doing so will trigger an assertion since the signature of the memcmp +will not match it's arguments (https://bugs.llvm.org/show_bug.cgi?id=48661). + +This PR disables the attempt to merge icmps, +when the pointer is in an addressspace. + +Differential Revision: https://reviews.llvm.org/D94813 +--- + llvm/lib/Transforms/Scalar/MergeICmps.cpp | 4 ++ + .../Transforms/MergeICmps/addressspaces.ll | 67 +++++++++++++++++++ + 2 files changed, 71 insertions(+) + create mode 100644 llvm/test/Transforms/MergeICmps/addressspaces.ll + +diff --git llvm/lib/Transforms/Scalar/MergeICmps.cpp llvm/lib/Transforms/Scalar/MergeICmps.cpp +index 1559e7a41a7c..621c9e504398 100644 +--- llvm/lib/Transforms/Scalar/MergeICmps.cpp ++++ llvm/lib/Transforms/Scalar/MergeICmps.cpp +@@ -154,6 +154,10 @@ BCEAtom visitICmpLoadOperand(Value *const Val, BaseIdentifier &BaseId) { + return {}; + } + Value *const Addr = LoadI->getOperand(0); ++ if (Addr->getType()->getPointerAddressSpace() != 0) { ++ LLVM_DEBUG(dbgs() << "from non-zero AddressSpace\n"); ++ return {}; ++ } + auto *const GEP = dyn_cast(Addr); + if (!GEP) + return {}; +diff --git llvm/test/Transforms/MergeICmps/addressspaces.ll llvm/test/Transforms/MergeICmps/addressspaces.ll +new file mode 100644 +index 000000000000..9a74b4a5b2ca +--- /dev/null ++++ llvm/test/Transforms/MergeICmps/addressspaces.ll +@@ -0,0 +1,67 @@ ++; NOTE: Assertions have been autogenerated by utils/update_test_checks.py ++; RUN: opt < %s -mergeicmps -S | FileCheck %s ++ ++source_filename = "==" ++target datalayout = "e-m:e-i64:64-n32:64" ++target triple = "powerpc64le-unknown-linux-gnu" ++ ++define void @juliaAS([2 x [5 x i64]] addrspace(11)* nocapture nonnull readonly align 8 dereferenceable(80) %0, [2 x [5 x i64]] addrspace(11)* nocapture nonnull readonly align 8 dereferenceable(80) %1) { ++; CHECK-LABEL: @juliaAS( ++; CHECK-NEXT: top: ++; CHECK-NEXT: [[TMP2:%.*]] = getelementptr inbounds [2 x [5 x i64]], [2 x [5 x i64]] addrspace(11)* [[TMP0:%.*]], i64 0, i64 1, i64 2 ++; CHECK-NEXT: [[TMP3:%.*]] = getelementptr inbounds [2 x [5 x i64]], [2 x [5 x i64]] addrspace(11)* [[TMP0]], i64 0, i64 1, i64 3 ++; CHECK-NEXT: [[TMP4:%.*]] = getelementptr inbounds [2 x [5 x i64]], [2 x [5 x i64]] addrspace(11)* [[TMP0]], i64 0, i64 1, i64 4 ++; CHECK-NEXT: [[TMP5:%.*]] = getelementptr inbounds [2 x [5 x i64]], [2 x [5 x i64]] addrspace(11)* [[TMP1:%.*]], i64 0, i64 1, i64 2 ++; CHECK-NEXT: [[TMP6:%.*]] = getelementptr inbounds [2 x [5 x i64]], [2 x [5 x i64]] addrspace(11)* [[TMP1]], i64 0, i64 1, i64 3 ++; CHECK-NEXT: [[TMP7:%.*]] = getelementptr inbounds [2 x [5 x i64]], [2 x [5 x i64]] addrspace(11)* [[TMP1]], i64 0, i64 1, i64 4 ++; CHECK-NEXT: [[TMP8:%.*]] = load i64, i64 addrspace(11)* [[TMP2]], align 8 ++; CHECK-NEXT: [[TMP9:%.*]] = load i64, i64 addrspace(11)* [[TMP5]], align 8 ++; CHECK-NEXT: [[DOTNOT17:%.*]] = icmp eq i64 [[TMP8]], [[TMP9]] ++; CHECK-NEXT: br i1 [[DOTNOT17]], label [[L70:%.*]], label [[L90:%.*]] ++; CHECK: L70: ++; CHECK-NEXT: [[TMP10:%.*]] = load i64, i64 addrspace(11)* [[TMP3]], align 8 ++; CHECK-NEXT: [[TMP11:%.*]] = load i64, i64 addrspace(11)* [[TMP6]], align 8 ++; CHECK-NEXT: [[DOTNOT18:%.*]] = icmp eq i64 [[TMP10]], [[TMP11]] ++; CHECK-NEXT: br i1 [[DOTNOT18]], label [[L74:%.*]], label [[L90]] ++; CHECK: L74: ++; CHECK-NEXT: [[TMP12:%.*]] = load i64, i64 addrspace(11)* [[TMP4]], align 8 ++; CHECK-NEXT: [[TMP13:%.*]] = load i64, i64 addrspace(11)* [[TMP7]], align 8 ++; CHECK-NEXT: [[DOTNOT19:%.*]] = icmp eq i64 [[TMP12]], [[TMP13]] ++; CHECK-NEXT: br label [[L90]] ++; CHECK: L90: ++; CHECK-NEXT: [[VALUE_PHI2_OFF0:%.*]] = phi i1 [ false, [[TOP:%.*]] ], [ [[DOTNOT19]], [[L74]] ], [ false, [[L70]] ] ++; CHECK-NEXT: ret void ++; ++top: ++ %2 = getelementptr inbounds [2 x [5 x i64]], [2 x [5 x i64]] addrspace(11)* %0, i64 0, i64 1, i64 2 ++ %3 = getelementptr inbounds [2 x [5 x i64]], [2 x [5 x i64]] addrspace(11)* %0, i64 0, i64 1, i64 3 ++ %4 = getelementptr inbounds [2 x [5 x i64]], [2 x [5 x i64]] addrspace(11)* %0, i64 0, i64 1, i64 4 ++ %5 = getelementptr inbounds [2 x [5 x i64]], [2 x [5 x i64]] addrspace(11)* %1, i64 0, i64 1, i64 2 ++ %6 = getelementptr inbounds [2 x [5 x i64]], [2 x [5 x i64]] addrspace(11)* %1, i64 0, i64 1, i64 3 ++ %7 = getelementptr inbounds [2 x [5 x i64]], [2 x [5 x i64]] addrspace(11)* %1, i64 0, i64 1, i64 4 ++ %8 = load i64, i64 addrspace(11)* %2, align 8 ++ %9 = load i64, i64 addrspace(11)* %5, align 8 ++ %.not17 = icmp eq i64 %8, %9 ++ br i1 %.not17, label %L70, label %L90 ++ ++L70: ; preds = %top ++ %10 = load i64, i64 addrspace(11)* %3, align 8 ++ %11 = load i64, i64 addrspace(11)* %6, align 8 ++ %.not18 = icmp eq i64 %10, %11 ++ br i1 %.not18, label %L74, label %L90 ++ ++L74: ; preds = %L70 ++ %12 = load i64, i64 addrspace(11)* %4, align 8 ++ %13 = load i64, i64 addrspace(11)* %7, align 8 ++ %.not19 = icmp eq i64 %12, %13 ++ br label %L90 ++ ++L90: ; preds = %L74, %L70, %top ++ %value_phi2.off0 = phi i1 [ false, %top ], [ %.not19, %L74 ], [ false, %L70 ] ++ ret void ++} ++ ++!llvm.module.flags = !{!0} ++ ++!0 = !{i32 1, !"Debug Info Version", i32 3} ++ +-- +2.30.0 + diff --git a/deps/patches/llvm-11-D94828-ppc-half-fpconv.patch b/deps/patches/llvm-11-D94828-ppc-half-fpconv.patch new file mode 100644 index 0000000000000..9850d8fc9e68e --- /dev/null +++ b/deps/patches/llvm-11-D94828-ppc-half-fpconv.patch @@ -0,0 +1,102 @@ +From 43b108a71d25d526a51c371cbc867ce5ae49ad8d Mon Sep 17 00:00:00 2001 +From: Valentin Churavy +Date: Fri, 15 Jan 2021 17:30:39 -0500 +Subject: [PATCH] [PowerPC] Disable CTR loops containing floating point + conversion on half-precision + +Follow-up on https://reviews.llvm.org/rG0a19fc3088f5 and fixes https://bugs.llvm.org/show_bug.cgi?id=48519 +for fpext and fptrunc. + +Differential Revision: https://reviews.llvm.org/D94828 +--- + .../Target/PowerPC/PPCTargetTransformInfo.cpp | 12 +++++ + llvm/test/CodeGen/PowerPC/pr48519.ll | 50 +++++++++++++++++++ + 2 files changed, 62 insertions(+) + +diff --git llvm/lib/Target/PowerPC/PPCTargetTransformInfo.cpp llvm/lib/Target/PowerPC/PPCTargetTransformInfo.cpp +index 71f867a617c8..614dc6746289 100644 +--- llvm/lib/Target/PowerPC/PPCTargetTransformInfo.cpp ++++ llvm/lib/Target/PowerPC/PPCTargetTransformInfo.cpp +@@ -677,6 +677,18 @@ bool PPCTTIImpl::mightUseCTR(BasicBlock *BB, TargetLibraryInfo *LibInfo, + } + } + ++ if (!ST->isISA3_0()) { ++ switch (J->getOpcode()) { ++ case Instruction::FPTrunc: ++ case Instruction::FPExt: { ++ CastInst *CI = cast(J); ++ if (CI->getSrcTy()->getScalarType()->isHalfTy() || ++ CI->getDestTy()->getScalarType()->isHalfTy()) ++ return true; ++ } ++ } ++ } ++ + for (Value *Operand : J->operands()) + if (memAddrUsesCTR(Operand, TM, Visited)) + return true; +diff --git llvm/test/CodeGen/PowerPC/pr48519.ll llvm/test/CodeGen/PowerPC/pr48519.ll +index 777874e91c26..85d42a1994e6 100644 +--- llvm/test/CodeGen/PowerPC/pr48519.ll ++++ llvm/test/CodeGen/PowerPC/pr48519.ll +@@ -49,6 +49,56 @@ pass.1: ; preds = %L139 + unreachable + } + ++define void @julia__hypot_17() { ++; CHECK-LABEL: julia__hypot_17: ++; CHECK: # %bb.0: # %top ++; CHECK-NEXT: mflr r0 ++; CHECK-NEXT: .cfi_def_cfa_offset 48 ++; CHECK-NEXT: .cfi_offset lr, 16 ++; CHECK-NEXT: .cfi_offset r30, -16 ++; CHECK-NEXT: std r30, -16(r1) # 8-byte Folded Spill ++; CHECK-NEXT: std r0, 16(r1) ++; CHECK-NEXT: stdu r1, -48(r1) ++; CHECK-NEXT: li r30, 3 ++; CHECK-NEXT: .p2align 5 ++; CHECK-NEXT: .LBB1_1: # %L57 ++; CHECK-NEXT: # ++; CHECK-NEXT: addi r30, r30, -1 ++; CHECK-NEXT: cmpldi r30, 0 ++; CHECK-NEXT: beq cr0, .LBB1_3 ++; CHECK-NEXT: # %bb.2: # %L68 ++; CHECK-NEXT: # ++; CHECK-NEXT: lhz r3, 0(0) ++; CHECK-NEXT: bl __gnu_h2f_ieee ++; CHECK-NEXT: nop ++; CHECK-NEXT: fcmpu cr0, f1, f1 ++; CHECK-NEXT: bun cr0, .LBB1_1 ++; CHECK-NEXT: .LBB1_3: # %L78 ++; CHECK-NEXT: addi r1, r1, 48 ++; CHECK-NEXT: ld r0, 16(r1) ++; CHECK-NEXT: ld r30, -16(r1) # 8-byte Folded Reload ++; CHECK-NEXT: mtlr r0 ++; CHECK-NEXT: blr ++top: ++ br label %L57 ++ ++L57: ; preds = %L68, %top ++ %value_phi117 = phi i64 [ %0, %L68 ], [ 2, %top ] ++ %exitcond = icmp eq i64 %value_phi117, 4 ++ br i1 %exitcond, label %L78, label %L68 ++ ++L68: ; preds = %L57 ++ %0 = add nuw nsw i64 %value_phi117, 1 ++ %1 = load half, half* null, align 2 ++ %2 = fpext half %1 to float ++ %3 = fcmp uno float %2, 0.000000e+00 ++ %4 = or i1 %3, false ++ br i1 %4, label %L57, label %L78 ++ ++L78: ; preds = %L68, %L57 ++ ret void ++} ++ + ; Function Attrs: nounwind readnone speculatable willreturn + declare { i64, i1 } @llvm.ssub.with.overflow.i64(i64, i64) #0 + +-- +2.30.0 + From 1b266d6b12ca66601a918186e9a54f8e31951d70 Mon Sep 17 00:00:00 2001 From: Valentin Churavy Date: Sun, 17 Jan 2021 16:17:14 -0500 Subject: [PATCH 19/78] [LLVM] Upgrade LLVM to 11.0.1 (cherry picked from commit 21068979f19801140b557647860b7dafe6689906) --- deps/Versions.make | 8 +- deps/checksums/clang | 116 +++--- deps/checksums/clang-11.0.1.src.tar.xz/md5 | 1 + deps/checksums/clang-11.0.1.src.tar.xz/sha512 | 1 + .../compiler-rt-11.0.0.src.tar.xz/md5 | 1 - .../compiler-rt-11.0.0.src.tar.xz/sha512 | 1 - .../compiler-rt-11.0.1.src.tar.xz/md5 | 1 + .../compiler-rt-11.0.1.src.tar.xz/sha512 | 1 + deps/checksums/libcxx-11.0.1.src.tar.xz/md5 | 1 + .../checksums/libcxx-11.0.1.src.tar.xz/sha512 | 1 + deps/checksums/lldb-11.0.0.src.tar.xz/md5 | 1 - deps/checksums/lldb-11.0.0.src.tar.xz/sha512 | 1 - deps/checksums/lldb-11.0.1.src.tar.xz/md5 | 1 + deps/checksums/lldb-11.0.1.src.tar.xz/sha512 | 1 + deps/checksums/llvm | 354 +++++++++--------- stdlib/libLLVM_jll/Project.toml | 2 +- 16 files changed, 249 insertions(+), 243 deletions(-) create mode 100644 deps/checksums/clang-11.0.1.src.tar.xz/md5 create mode 100644 deps/checksums/clang-11.0.1.src.tar.xz/sha512 delete mode 100644 deps/checksums/compiler-rt-11.0.0.src.tar.xz/md5 delete mode 100644 deps/checksums/compiler-rt-11.0.0.src.tar.xz/sha512 create mode 100644 deps/checksums/compiler-rt-11.0.1.src.tar.xz/md5 create mode 100644 deps/checksums/compiler-rt-11.0.1.src.tar.xz/sha512 create mode 100644 deps/checksums/libcxx-11.0.1.src.tar.xz/md5 create mode 100644 deps/checksums/libcxx-11.0.1.src.tar.xz/sha512 delete mode 100644 deps/checksums/lldb-11.0.0.src.tar.xz/md5 delete mode 100644 deps/checksums/lldb-11.0.0.src.tar.xz/sha512 create mode 100644 deps/checksums/lldb-11.0.1.src.tar.xz/md5 create mode 100644 deps/checksums/lldb-11.0.1.src.tar.xz/sha512 diff --git a/deps/Versions.make b/deps/Versions.make index c46eb8e6c8a71..9fd9608fc1fa6 100644 --- a/deps/Versions.make +++ b/deps/Versions.make @@ -15,7 +15,7 @@ CSL_JLL_NAME := CompilerSupportLibraries # Clang (paired with LLVM, only here as a JLL download) CLANG_JLL_NAME := Clang -CLANG_JLL_VER := 11.0.0+7 +CLANG_JLL_VER := 11.0.1+0 # DSFMT DSFMT_VER := 2.2.4 @@ -45,13 +45,13 @@ LIBUV_VER := 2 LIBUV_JLL_NAME := LibUV # LLVM -LLVM_VER := 11.0.0 -LLVM_ASSERT_JLL_VER := 11.0.0+7 +LLVM_VER := 11.0.1 +LLVM_ASSERT_JLL_VER := 11.0.1+0 LLVM_JLL_NAME := libLLVM # LLVM_tools (downloads LLVM_jll to get things like `lit` and `opt`) LLVM_TOOLS_JLL_NAME := LLVM -LLVM_TOOLS_JLL_VER := 11.0.0+7 +LLVM_TOOLS_JLL_VER := 11.0.1+0 # MbedTLS MBEDTLS_VER := 2.24.0 diff --git a/deps/checksums/clang b/deps/checksums/clang index 1ba74208abaf6..e8925bc759262 100644 --- a/deps/checksums/clang +++ b/deps/checksums/clang @@ -1,58 +1,58 @@ -Clang.v11.0.0+7.aarch64-apple-darwin.tar.gz/md5/523880d02dd53ff48b6b6097f0abc7cf -Clang.v11.0.0+7.aarch64-apple-darwin.tar.gz/sha512/dd9c418d7c014d45ddd79292cb4d8764eaeda29a7fd2818dad5c31fe8a3eb9fcb672872ec48c2bd8a5d46bdef1b83c95ea518a6ebc71621099e61af95cf6118d -Clang.v11.0.0+7.aarch64-linux-gnu-cxx03.tar.gz/md5/ff239626d87fb287096014d4efbbab11 -Clang.v11.0.0+7.aarch64-linux-gnu-cxx03.tar.gz/sha512/666dc827aecb82c7b44b941805f84cfc68b3bb29a5b4ce7a55ec42ec08e05da3e29c7d894d1d7da01d10344c1303d5bd2609d93498771523d2bdfb6cdcd6f6c9 -Clang.v11.0.0+7.aarch64-linux-gnu-cxx11.tar.gz/md5/2363604f41e5ca6100535c80dc3b80f1 -Clang.v11.0.0+7.aarch64-linux-gnu-cxx11.tar.gz/sha512/e80f5e8d27eeb9202c7e239bc0e8a28ba17d013d2785a1a6a196fe62e1f649a49e77c395e7f95c8c006b4442c89ce9ea6d24e31b764baf8805e9387f369fc2e2 -Clang.v11.0.0+7.aarch64-linux-musl-cxx03.tar.gz/md5/db2dc0ea38e3f7ce34ffbbffb21e09b5 -Clang.v11.0.0+7.aarch64-linux-musl-cxx03.tar.gz/sha512/96e915e59f0dfcdc19d8926549e34c4840aa9e21a9405d66cb031de13cc2f3b77fc628b1fe0d7dda444310cb8e2325ce3054bbbd6797d86046527d65d71a0e8e -Clang.v11.0.0+7.aarch64-linux-musl-cxx11.tar.gz/md5/7e79d95f9bb4f102d2f764feaede6810 -Clang.v11.0.0+7.aarch64-linux-musl-cxx11.tar.gz/sha512/ef84544b2ab136c7ce513e119c2425eda1393046e5fabad17e5eca5347e1f14392a2f91a0ae7ddc67c3bd0f85cf7f9eebcca447d76dbccb0e239e57fea35263d -Clang.v11.0.0+7.armv6l-linux-gnueabihf-cxx03.tar.gz/md5/46ca009704fd5625d8b8f7ff4fbc0e8d -Clang.v11.0.0+7.armv6l-linux-gnueabihf-cxx03.tar.gz/sha512/7a62022d55fe926e09ec25accd0d7e89b9125213b1d8a831d91be325f1f48b806b0075797d8696122750070f012b1bedb1ead297a807739c44670125a7892d1f -Clang.v11.0.0+7.armv6l-linux-gnueabihf-cxx11.tar.gz/md5/01159dd8a103a601f1f3c931ab8c0cf1 -Clang.v11.0.0+7.armv6l-linux-gnueabihf-cxx11.tar.gz/sha512/86ba3017d3d7921b665bf80d0a6b8fb84a5448fcd4dfbe274893d34d5601df06a6c36e4f76bf6afc550e140e96000d0ef8889bca868359b8478aeef12b35cae6 -Clang.v11.0.0+7.armv6l-linux-musleabihf-cxx03.tar.gz/md5/8354574eaa55d53176e811b6a0737357 -Clang.v11.0.0+7.armv6l-linux-musleabihf-cxx03.tar.gz/sha512/546970a1e94a62d498bf1236324274231da8b226d579f46b1e82b3a80ad2f3b16307e26d7f695f799e35dc56998e178452322e5eb4224f6de9824abc975a6d90 -Clang.v11.0.0+7.armv6l-linux-musleabihf-cxx11.tar.gz/md5/7cfdc62a2cd74a11b12535982e24c186 -Clang.v11.0.0+7.armv6l-linux-musleabihf-cxx11.tar.gz/sha512/571d757442c85466d90d340af0b78c263b3aa5b99033c9efb0f8af344b65a1e2bd2e1f76801214804146b93d6c4a48362225e9dcb40633a8167ef78e1873b491 -Clang.v11.0.0+7.armv7l-linux-gnueabihf-cxx03.tar.gz/md5/555fb0382e5717d5a5e38a76a1e1aa9b -Clang.v11.0.0+7.armv7l-linux-gnueabihf-cxx03.tar.gz/sha512/19541d1a3258ca81b1d838f555522d13df09539735c7a865d8f58d8b34e6ed10691a144d9b8b08af56590ed7a880342d16b657a14f65066bfba3ab6f2491d3bd -Clang.v11.0.0+7.armv7l-linux-gnueabihf-cxx11.tar.gz/md5/13938301261315065b1395a414e889a2 -Clang.v11.0.0+7.armv7l-linux-gnueabihf-cxx11.tar.gz/sha512/0f211ac82d2ccfaed7e6f52eee88b740feb7dc3dc99d3ef1727bf409112024f4bee07665d67336c918fb06d6d7db29956f931fb81bb014e6a5ae1261c8d1b397 -Clang.v11.0.0+7.armv7l-linux-musleabihf-cxx03.tar.gz/md5/2a1cbbad08d19b3af00003613b0ee7fa -Clang.v11.0.0+7.armv7l-linux-musleabihf-cxx03.tar.gz/sha512/5136f28a19e8307182f39f35fb7a722f6b8b71761e7276243f35aa010e0d9e3449e332b164bd4d603bdf4e48cb4980c5dd97fb805741d348bd4269343a36cd0f -Clang.v11.0.0+7.armv7l-linux-musleabihf-cxx11.tar.gz/md5/c25d1cc28abe4a559f5e4e89fc459013 -Clang.v11.0.0+7.armv7l-linux-musleabihf-cxx11.tar.gz/sha512/26a4342352e0afef5470e42239a51ee7e5c82d6157a1cca21873f53c0c49c0f47e0a0baa57669f7617fce8d56cce7ad039f79fd0f1c3a57242f9f09f47a3fe51 -Clang.v11.0.0+7.i686-linux-gnu-cxx03.tar.gz/md5/9e48cac26e0cb5a6c703540c781f2f98 -Clang.v11.0.0+7.i686-linux-gnu-cxx03.tar.gz/sha512/c1d9e2edcffc57864a6e1848fdd7e5fc562d905adca18573dcb1d4ecd148438de69286dad7e611f3655ab8380857ad58ea1097c54fd439e4714cac19000addf1 -Clang.v11.0.0+7.i686-linux-gnu-cxx11.tar.gz/md5/e6600376f1b17bb9309cdc79e32ccc72 -Clang.v11.0.0+7.i686-linux-gnu-cxx11.tar.gz/sha512/17553e379ac4ecee37f319f0bd8e439fa69875dbafe455835f2c7a89cf7140b894793789b53d3759f3ab6bf712fb0c9ce0ecf9426f2d86bbcb7df13959faad82 -Clang.v11.0.0+7.i686-linux-musl-cxx03.tar.gz/md5/f9008d7ba18a29fcfef6fcb8bf48bbaa -Clang.v11.0.0+7.i686-linux-musl-cxx03.tar.gz/sha512/41c72c035309aaa6df1a9594d83bf5cf8901948636e54c84aa127021f552a8b86e1a404c3445fe9a06a6120f01169a95fde412dfbd0a7909621ecdccdc653019 -Clang.v11.0.0+7.i686-linux-musl-cxx11.tar.gz/md5/cbafab459452e990975508e33f64752c -Clang.v11.0.0+7.i686-linux-musl-cxx11.tar.gz/sha512/9ffbf81a5b53be8ccb123e3be7fb1f2b9388a6a659a07206808acf5b2dde3036b60d56a015ef338889af35169f49ea32e2a5b8e6da3d140d035ee0f0d5cb033a -Clang.v11.0.0+7.i686-w64-mingw32-cxx03.tar.gz/md5/a0ac9cb46e3646e636c5683b453c3329 -Clang.v11.0.0+7.i686-w64-mingw32-cxx03.tar.gz/sha512/be55a815c8670a2b6590878607bb42a4a7d288a80233df0a293ce0a83880d3b4e3e92597387472aa4abc29bd6713c7abb74cba46d009431f1ea733dfa0af5609 -Clang.v11.0.0+7.i686-w64-mingw32-cxx11.tar.gz/md5/ba3d5a5e5ebf015683f2ab564343b3bb -Clang.v11.0.0+7.i686-w64-mingw32-cxx11.tar.gz/sha512/f8b5f526b10c52b3933a9d8ae138d101e4f085aa910061c88264e18e24d2464c80c30814cf8a5523bac355ff257886aa6252836ebf728fbcafbe00517caff9e1 -Clang.v11.0.0+7.powerpc64le-linux-gnu-cxx03.tar.gz/md5/fa123dfff222c59c0398811fa7e456c7 -Clang.v11.0.0+7.powerpc64le-linux-gnu-cxx03.tar.gz/sha512/2a9362578675c3e4aaca9db4246b07e3e3fe14f001d83f0829e2818032a2e769d85790552fa953838db613f1592e648f59830625d97e634b4b67dcc3ad6218e0 -Clang.v11.0.0+7.powerpc64le-linux-gnu-cxx11.tar.gz/md5/90e3dc34b0f8dfc06a3191e6d1ae8db6 -Clang.v11.0.0+7.powerpc64le-linux-gnu-cxx11.tar.gz/sha512/b298d29f58ed0e90e2cdfec9a3eef31f750901c7ad74d5d8dfaceeb5526ae57ad1f9bea4734e5ea4a00735ad60ad5d54bce5905bbe392a0141d43e1ba1835280 -Clang.v11.0.0+7.x86_64-apple-darwin.tar.gz/md5/8cf8ff4b08b20d011b07e8305542ba93 -Clang.v11.0.0+7.x86_64-apple-darwin.tar.gz/sha512/ea79289ae1ee2c3e55890987d9c797e937cfcf99e2d539c75ef0ed03d58d717cee646ebddc836577e5f7aa027e1e269777e5bc65a57b8ca3e045cedcee98c271 -Clang.v11.0.0+7.x86_64-linux-gnu-cxx03.tar.gz/md5/1b69ca77c58e4902021aca003d9b8aaf -Clang.v11.0.0+7.x86_64-linux-gnu-cxx03.tar.gz/sha512/59bd34bcc503c13629bb34f4caa82cadd231a24b8dcecdc9074c7ef7314df0fadd812043ad009d473c9e4203d0123edd0dcb65f772dffdfdf72f724b7bbb0a98 -Clang.v11.0.0+7.x86_64-linux-gnu-cxx11.tar.gz/md5/827d64ffd271dbb4df2145ad3da088bf -Clang.v11.0.0+7.x86_64-linux-gnu-cxx11.tar.gz/sha512/ea3aa9fa2d6e21f7fbf7911122b1b3058eedc0786d4fac0a42ca830b182fc302e74d28bb8cd90c0bea7040e08c7a222d5af1dfce9447ee1a0203fdd5141f543e -Clang.v11.0.0+7.x86_64-linux-musl-cxx03.tar.gz/md5/e59693783f954d2270fb6efd669a71ef -Clang.v11.0.0+7.x86_64-linux-musl-cxx03.tar.gz/sha512/48d482d698f053201c176c9baaba1ace7e709dbbf1d5b92081e7797ecee8e9ca1ae29612e39430acf157bb83dcdde9c585a6f57734150f0723c9fd55c6bb7d28 -Clang.v11.0.0+7.x86_64-linux-musl-cxx11.tar.gz/md5/1054ef293fb51478dfb24a93cafc0649 -Clang.v11.0.0+7.x86_64-linux-musl-cxx11.tar.gz/sha512/34d2a6da6bf0c0aae04c67cf357d1a3f262077114371330e78bbbdacacdb62034bb2a3a86b19b1ef32d21dc0c4377c843795680b4e3acc43b4ae7e58ded205d7 -Clang.v11.0.0+7.x86_64-unknown-freebsd.tar.gz/md5/dce990d18f508d88bfba165e4b920db1 -Clang.v11.0.0+7.x86_64-unknown-freebsd.tar.gz/sha512/1c66e54443e666e51e78c660035071f764a09e5711c6050b8fa996d655e370ad92c99ecbc092c90e633746c31bf230064ee159d23cb5456d15997284c2fa4708 -Clang.v11.0.0+7.x86_64-w64-mingw32-cxx03.tar.gz/md5/e46ae1de76b9251fb85d048614a90f72 -Clang.v11.0.0+7.x86_64-w64-mingw32-cxx03.tar.gz/sha512/60131aa6851dc8cad5fa2243ec1f39172c714f9ac747b7e197f5c55c8dcde2f2f295912a260f31492a46824ad03664cc919ed78dd9e458d6b7a31f82409cc3cf -Clang.v11.0.0+7.x86_64-w64-mingw32-cxx11.tar.gz/md5/36db61088ea830bf0f8859aecabceb41 -Clang.v11.0.0+7.x86_64-w64-mingw32-cxx11.tar.gz/sha512/4b0df5f10612d5d2e2ab971289038a3800debc729d06c17b0f8ced9a9128919df6ebb76ecfd5d4912b74d56df62bd6c4cd6cc0147105a22d3ee654740ce8c40c +Clang.v11.0.1+0.aarch64-apple-darwin.tar.gz/md5/f01b3fb362068c230bfe65b07a55bd3f +Clang.v11.0.1+0.aarch64-apple-darwin.tar.gz/sha512/5cccc6e042f5c435bd7e25535651c6803b078dc1ebb49a2f653a928870bf686ff2b8963f80d6b2f553da6d23d3e168c24273bee9b6aa4391bbce7a681065a1aa +Clang.v11.0.1+0.aarch64-linux-gnu-cxx03.tar.gz/md5/4e67174cebead479bd89b3390debaf5e +Clang.v11.0.1+0.aarch64-linux-gnu-cxx03.tar.gz/sha512/1449fc2ee161d5d81ec125b9e93089fe0c9cb519fc44738a7867b717ab26d53dcf4dc2ae93cf08df3470f7c3c1209671a4f9540a32ac7525427c12b724898aed +Clang.v11.0.1+0.aarch64-linux-gnu-cxx11.tar.gz/md5/9c8ad928aa8fbb9c27da41dfc9f6355c +Clang.v11.0.1+0.aarch64-linux-gnu-cxx11.tar.gz/sha512/9f32c67064e8a4bccbfce02a9214fafaba9ad7043bfac59edb2ece5ef08864cea4e516179bcb1331178a6aa7449b6d22b556b3a3bc295d819e10a0885102ef72 +Clang.v11.0.1+0.aarch64-linux-musl-cxx03.tar.gz/md5/585a30e5a5a68f92f154574e5f2086e3 +Clang.v11.0.1+0.aarch64-linux-musl-cxx03.tar.gz/sha512/fd8c7131c4e288f092840feda0e7b20feabdbece45abca0fa7ce3161ce6579dbc839097a635686012f26aff0a860bfaa593c296066d062f0bec4ec3872b2126f +Clang.v11.0.1+0.aarch64-linux-musl-cxx11.tar.gz/md5/f1cdb2be71d8c16ab8f7850261890070 +Clang.v11.0.1+0.aarch64-linux-musl-cxx11.tar.gz/sha512/4f44dacc01a3a39cf7c0efcdfa6704bec75ca38b93971d336bcdabfddb7fd39a1d7dd6c4b8574b8190ef03507cd8990352bfb524d6df9af82c5a6083b38321c0 +Clang.v11.0.1+0.armv6l-linux-gnueabihf-cxx03.tar.gz/md5/7f58048db2e5095a5fb797f58f804430 +Clang.v11.0.1+0.armv6l-linux-gnueabihf-cxx03.tar.gz/sha512/2712637e3cb38bf74d1695ec84478e6c76aaa8d52bd000f81a4e4e73771d6c2b008ed17e94154588310cd51378d43a6f158b51645cfc75e665bbe84c488adc3f +Clang.v11.0.1+0.armv6l-linux-gnueabihf-cxx11.tar.gz/md5/1299a67b65ec7a1adc2b327c6e5a4195 +Clang.v11.0.1+0.armv6l-linux-gnueabihf-cxx11.tar.gz/sha512/5d9fe1fa151fc065c38525a880ee1993c53f049717475cf473b67c6a8c44021f1bc6add29fe6c1ab196a66b524647c5dabb1bd336651bea2a2a7910a668fb096 +Clang.v11.0.1+0.armv6l-linux-musleabihf-cxx03.tar.gz/md5/a51f767667e7be8d0ead7c5b4f58656e +Clang.v11.0.1+0.armv6l-linux-musleabihf-cxx03.tar.gz/sha512/2ea5218cbec3e4d1aa61c182451e8717f0295b9be221462fe24bb24dbd503c82051156420d090003b49b2454baf2f171e5e8d5011b3643c4153025474738f043 +Clang.v11.0.1+0.armv6l-linux-musleabihf-cxx11.tar.gz/md5/6ce5593f191da26b58a84844d6834af6 +Clang.v11.0.1+0.armv6l-linux-musleabihf-cxx11.tar.gz/sha512/b07d9546db5105eb60010fcd21476be625e4bf5d5804dddc53a242363ddb93f0dbc1e2de67fb91c545000c38c197eabb0db219acc293e2e175eb95866527b4f8 +Clang.v11.0.1+0.armv7l-linux-gnueabihf-cxx03.tar.gz/md5/5beac00e4c5755c14f66656470a2d91a +Clang.v11.0.1+0.armv7l-linux-gnueabihf-cxx03.tar.gz/sha512/d98d516724d4d6ecf5c7c6f6e4e64ba333af91949a14661a60318ab1f48a50f54923f9e9071578e447a0744b8ffba2e468591f92373c0d5cfc202ada4283e2e1 +Clang.v11.0.1+0.armv7l-linux-gnueabihf-cxx11.tar.gz/md5/1bf95e16121bf4ef7ab7534ec2906e8d +Clang.v11.0.1+0.armv7l-linux-gnueabihf-cxx11.tar.gz/sha512/922b45b33f316d41ba6b089c30ba0606a26a58cac341e32db37c3565b711d74d43b9b6e6e2db64b307300f6f9b1613bdc69e8b85a47605474b34b2eb5132db65 +Clang.v11.0.1+0.armv7l-linux-musleabihf-cxx03.tar.gz/md5/3905ff26b1ba349bfed10036cfadc8b2 +Clang.v11.0.1+0.armv7l-linux-musleabihf-cxx03.tar.gz/sha512/209b8087ba26cdaffe6d5f379f7dda00d32fabaf914139067728fabef7788ecd54b39a298ce9191ec45ff708a109e99add41d7953a1e9c4c0ddadff204df4a80 +Clang.v11.0.1+0.armv7l-linux-musleabihf-cxx11.tar.gz/md5/13c587485207dce3537b3349d4bfa33d +Clang.v11.0.1+0.armv7l-linux-musleabihf-cxx11.tar.gz/sha512/d0bd627a6f6b23833c728ba50dc38f9a8b172202d3a581cb72da3ef8add6ce2a4d3dfdae10f8c4a694f4881c5c08d48e61ab6d426002651f5e9ebaf2c8167c76 +Clang.v11.0.1+0.i686-linux-gnu-cxx03.tar.gz/md5/27d72e0c76e2269daa5db96d66640b10 +Clang.v11.0.1+0.i686-linux-gnu-cxx03.tar.gz/sha512/ab0ba11b03fc97c9b2817bfe43d6871e2eb201b14849ffac284eb49be02c9c5893d50bc89b48411de9d87b7267c1527f60b5995d81b1495afa3af473224cf216 +Clang.v11.0.1+0.i686-linux-gnu-cxx11.tar.gz/md5/200d9bb6dac86649fc671467d2343585 +Clang.v11.0.1+0.i686-linux-gnu-cxx11.tar.gz/sha512/7808084dfe733577932f434cc5107a6f77cdc6f25e830928045f3ab8d9b8a75349aad0bbc337075d06b1492c84e3704dc922cd5006abafe3d10a197420952197 +Clang.v11.0.1+0.i686-linux-musl-cxx03.tar.gz/md5/41c1508f51f157d0df10a7f4ac901a17 +Clang.v11.0.1+0.i686-linux-musl-cxx03.tar.gz/sha512/370202acb230a82a2b9613a984d22d0208aa7458d032b31d90a5cc04ed7afcaef3f704ae37910815ed090c4fec093dec0b90a10a0bbd2539c1dc0c5e564aa85c +Clang.v11.0.1+0.i686-linux-musl-cxx11.tar.gz/md5/d2a5fd3dc0feb4964383f425d6e00477 +Clang.v11.0.1+0.i686-linux-musl-cxx11.tar.gz/sha512/0b7a442b2b87883e3b50996af7e114dee77d46ae898fcaa4e934da0ecfe3efd9603c5af433d61997c2722917937fb04c5c29cdb2ddd0f718375b8915636000e9 +Clang.v11.0.1+0.i686-w64-mingw32-cxx03.tar.gz/md5/a9af99fa1c6e7ab67dbb9f317ebe7431 +Clang.v11.0.1+0.i686-w64-mingw32-cxx03.tar.gz/sha512/1fc204a2c1a6b5668d3e80b4226226f0cc301c70dc794030d32dbb9280b2010fddf3298158750a32c0ce1e40191e8fa2c036c1f4d3532888bcefffd8194bf64e +Clang.v11.0.1+0.i686-w64-mingw32-cxx11.tar.gz/md5/7ea67c2feed4e7227cd9079abb4b39d5 +Clang.v11.0.1+0.i686-w64-mingw32-cxx11.tar.gz/sha512/f3926a8f9a6fce8198a31a5a221954c60cf3df28ded5b3683344b223ba8de769cb543de81f807bf09c3007b421e7c5c06a1aa6c36c4f3dcff5704caffc3c23bf +Clang.v11.0.1+0.powerpc64le-linux-gnu-cxx03.tar.gz/md5/e33c9f7503b25350ea757871b8b6dc92 +Clang.v11.0.1+0.powerpc64le-linux-gnu-cxx03.tar.gz/sha512/6eb506361cd427ab9b7cb60458d26dba453bd2c152246391482028fb94643b4868a77fa34f8c59ef14150f17c32c29ec8ac50fcccb83511e5fe6154f4e172b6e +Clang.v11.0.1+0.powerpc64le-linux-gnu-cxx11.tar.gz/md5/1cce0a376b3b3ae764e153c70d0480b5 +Clang.v11.0.1+0.powerpc64le-linux-gnu-cxx11.tar.gz/sha512/d6685af43b0bffbd141e03ab7613b3a6431496b9734cba92025863cf0cad2d25d2baf4d6eb6aeaf342d0670389d45ccda5bfff6d3e859e65a0dffac17c11240c +Clang.v11.0.1+0.x86_64-apple-darwin.tar.gz/md5/4af3cbcfb1c0d352bc1e8f61ed108017 +Clang.v11.0.1+0.x86_64-apple-darwin.tar.gz/sha512/9d20901febabcb06d87b706aabbc0aa7a0ebb173c4999b8708b590fa5113577bc93a4bce59f9cc0aa9078d3e35f4242424a6d949c21118a146484901297661e3 +Clang.v11.0.1+0.x86_64-linux-gnu-cxx03.tar.gz/md5/e8c701382bf8e2d01ff79e5415a51875 +Clang.v11.0.1+0.x86_64-linux-gnu-cxx03.tar.gz/sha512/72187909227c7bcdb30c60655a53178af9b518c02a5ac5784bcf522ed536365da12054c3d16b7aa7e2a2d21f88b6b4fa1c54a66437ca221122859079409426ed +Clang.v11.0.1+0.x86_64-linux-gnu-cxx11.tar.gz/md5/5d92dda365296697e88abd5996495b38 +Clang.v11.0.1+0.x86_64-linux-gnu-cxx11.tar.gz/sha512/6d2acf3bf2d2ba6e9d9c6351aa1e43d59528e89c5218bdf732ad4e475f4b4787d578055b863401a4573b7c88b76cf6787f76bc06d0a100ddd5908f31538752c6 +Clang.v11.0.1+0.x86_64-linux-musl-cxx03.tar.gz/md5/7b51ff2a6eb55c45bad712318a6aff5f +Clang.v11.0.1+0.x86_64-linux-musl-cxx03.tar.gz/sha512/3d607531beeea0e46b0d2b5f0d6589a11f933fff1ed53b59758375efcce9a3dfe5513f57f242b85983a2b11205a797f9ee1e2033a17efe0ffa77e3286820efba +Clang.v11.0.1+0.x86_64-linux-musl-cxx11.tar.gz/md5/119345ed95b24b84cdbd272e575e3143 +Clang.v11.0.1+0.x86_64-linux-musl-cxx11.tar.gz/sha512/8ea6a61d6275c15d47528a465fac3707159b37dd994c80da70712bc869b860417e26d71a99a8c09f91e7d274ddce4fcb27003c10058319efe75a592de40bad0b +Clang.v11.0.1+0.x86_64-unknown-freebsd.tar.gz/md5/9c1c8559ed4d0bb16194cc09cc2186ba +Clang.v11.0.1+0.x86_64-unknown-freebsd.tar.gz/sha512/91522014a111180f86b7e0e026cce31836481f12136b9e3cfb196c1b769b389571f586d9528fc8834a6282f7eee72513f9f144aa519c5bdb37b4c0ae50627f77 +Clang.v11.0.1+0.x86_64-w64-mingw32-cxx03.tar.gz/md5/c68ddbca935a7edcb698a4a8582fcfd3 +Clang.v11.0.1+0.x86_64-w64-mingw32-cxx03.tar.gz/sha512/892d9f55a4647d5f3b3a458647c2aa642ef931e10af253972ac344acd264c3be9cb0d7fab4e8b0249b606a98f43f9f95601fbf8dbcb7572a01422982d0e66d95 +Clang.v11.0.1+0.x86_64-w64-mingw32-cxx11.tar.gz/md5/16dae3d351001a49378c200f9990d7cb +Clang.v11.0.1+0.x86_64-w64-mingw32-cxx11.tar.gz/sha512/8e29ae0d0d1747ca566f1c79736d2d53dd6b883ecada2561a613378d84d3e733d2946783f48a6ddb462cfe5676f1ee62369ae5e5cd68ba411f9fa43e5b541cc1 diff --git a/deps/checksums/clang-11.0.1.src.tar.xz/md5 b/deps/checksums/clang-11.0.1.src.tar.xz/md5 new file mode 100644 index 0000000000000..4c4b87aa1e2c7 --- /dev/null +++ b/deps/checksums/clang-11.0.1.src.tar.xz/md5 @@ -0,0 +1 @@ +b4cb0b74b1f3292a89c9720f3e1e2934 diff --git a/deps/checksums/clang-11.0.1.src.tar.xz/sha512 b/deps/checksums/clang-11.0.1.src.tar.xz/sha512 new file mode 100644 index 0000000000000..14b91b3162906 --- /dev/null +++ b/deps/checksums/clang-11.0.1.src.tar.xz/sha512 @@ -0,0 +1 @@ +bb98ffb0a992c9907795f7bb7492196f7195fdb5e292e8a764a7a1a8cc078dcf60bebf26ed3db116f78b7022a600c996fd2645e5f6e5d24e4ed99392e1f08df3 diff --git a/deps/checksums/compiler-rt-11.0.0.src.tar.xz/md5 b/deps/checksums/compiler-rt-11.0.0.src.tar.xz/md5 deleted file mode 100644 index a155272bad5a1..0000000000000 --- a/deps/checksums/compiler-rt-11.0.0.src.tar.xz/md5 +++ /dev/null @@ -1 +0,0 @@ -182511f9ba2c83b9d3c934501d48bee9 diff --git a/deps/checksums/compiler-rt-11.0.0.src.tar.xz/sha512 b/deps/checksums/compiler-rt-11.0.0.src.tar.xz/sha512 deleted file mode 100644 index 19cdcef20fcb2..0000000000000 --- a/deps/checksums/compiler-rt-11.0.0.src.tar.xz/sha512 +++ /dev/null @@ -1 +0,0 @@ -e2085753528670d300d49c4b2dd2991f78c36f356c40ba9da8918f141e6dd5dca8d91686466252829af936206e8c1219a69da2448691922a9e6624f6523ab0c7 diff --git a/deps/checksums/compiler-rt-11.0.1.src.tar.xz/md5 b/deps/checksums/compiler-rt-11.0.1.src.tar.xz/md5 new file mode 100644 index 0000000000000..0ad8aad90f820 --- /dev/null +++ b/deps/checksums/compiler-rt-11.0.1.src.tar.xz/md5 @@ -0,0 +1 @@ +29d6186e048936008512b8bbdb3a1b71 diff --git a/deps/checksums/compiler-rt-11.0.1.src.tar.xz/sha512 b/deps/checksums/compiler-rt-11.0.1.src.tar.xz/sha512 new file mode 100644 index 0000000000000..59f76a7d34acd --- /dev/null +++ b/deps/checksums/compiler-rt-11.0.1.src.tar.xz/sha512 @@ -0,0 +1 @@ +869208f0d2c5f0828a317a6006d4ce47a946b03db2692c8557485caddc56fbeb0335a87b4c9663aa0d1397de94337e56ae10f802c4aca443072962f728e2bdf4 diff --git a/deps/checksums/libcxx-11.0.1.src.tar.xz/md5 b/deps/checksums/libcxx-11.0.1.src.tar.xz/md5 new file mode 100644 index 0000000000000..5b905de3304cc --- /dev/null +++ b/deps/checksums/libcxx-11.0.1.src.tar.xz/md5 @@ -0,0 +1 @@ +4b2467eb023c9b4c84335808f811d5fa diff --git a/deps/checksums/libcxx-11.0.1.src.tar.xz/sha512 b/deps/checksums/libcxx-11.0.1.src.tar.xz/sha512 new file mode 100644 index 0000000000000..251c002b1e83d --- /dev/null +++ b/deps/checksums/libcxx-11.0.1.src.tar.xz/sha512 @@ -0,0 +1 @@ +adda227d412bc28a47612cc6580bf85353838792b4816633d8401efb92cd65f6801278941f779d301bd6162b75ef8d54825f9cdfb0f61c6f5f621eca7fb7c004 diff --git a/deps/checksums/lldb-11.0.0.src.tar.xz/md5 b/deps/checksums/lldb-11.0.0.src.tar.xz/md5 deleted file mode 100644 index 6b1dcc9ca61d6..0000000000000 --- a/deps/checksums/lldb-11.0.0.src.tar.xz/md5 +++ /dev/null @@ -1 +0,0 @@ -f36e38d039721555cd41e8687d577094 diff --git a/deps/checksums/lldb-11.0.0.src.tar.xz/sha512 b/deps/checksums/lldb-11.0.0.src.tar.xz/sha512 deleted file mode 100644 index 1c5d8b6b4021d..0000000000000 --- a/deps/checksums/lldb-11.0.0.src.tar.xz/sha512 +++ /dev/null @@ -1 +0,0 @@ -e781d70de2b59142779503df6078ff118e49a0f8053e9296c34251a4c3ddb9676b375a7a6f94de61e472209bba72d719744b143990d4fdaea722fd0997e99920 diff --git a/deps/checksums/lldb-11.0.1.src.tar.xz/md5 b/deps/checksums/lldb-11.0.1.src.tar.xz/md5 new file mode 100644 index 0000000000000..901bdea38188d --- /dev/null +++ b/deps/checksums/lldb-11.0.1.src.tar.xz/md5 @@ -0,0 +1 @@ +e49cde09adb5ed43a651e6d5bcb2aded diff --git a/deps/checksums/lldb-11.0.1.src.tar.xz/sha512 b/deps/checksums/lldb-11.0.1.src.tar.xz/sha512 new file mode 100644 index 0000000000000..16f939fb1007e --- /dev/null +++ b/deps/checksums/lldb-11.0.1.src.tar.xz/sha512 @@ -0,0 +1 @@ +05de84a0606becdabacb46fbc5cd67607ca47c22469da13470b76a96b96e6f34b3045fd1f5bed9c82228c2ce529562ee71667788a5048f079fef450d63a1557c diff --git a/deps/checksums/llvm b/deps/checksums/llvm index 5189817e7f691..43d18317aad5a 100644 --- a/deps/checksums/llvm +++ b/deps/checksums/llvm @@ -1,176 +1,178 @@ -libLLVM_assert.v11.0.0+7.aarch64-apple-darwin.tar.gz/md5/01ce1fa1c844d25592a356960f107083 -libLLVM_assert.v11.0.0+7.aarch64-apple-darwin.tar.gz/sha512/3c4a94b225a0a277f5587dc646d4cfa74c269d4411f1d08e5fec78ecf5adc2766d0382626e47d5ef375a1c817750e9bcc74655f29fcf6dc35e396882f05e43ec -libLLVM_assert.v11.0.0+7.aarch64-linux-gnu-cxx03.tar.gz/md5/801e14ea4683c1aaea7471d3ab6d1cff -libLLVM_assert.v11.0.0+7.aarch64-linux-gnu-cxx03.tar.gz/sha512/5bc5733dbfb328b738c1bc12e0fe5d1beb6d5638ed68db590ac8e6f6904f7f4eeb11749202be34b6cb9edddd8fbabfadd8ee4b9bb7a7267cdf1e111b4910b56c -libLLVM_assert.v11.0.0+7.aarch64-linux-gnu-cxx11.tar.gz/md5/0272cb3351dfb0d9b305c614f95d6b9c -libLLVM_assert.v11.0.0+7.aarch64-linux-gnu-cxx11.tar.gz/sha512/2bc95342c55a137290421837d0cffaa2b5e7c46b1ed02c01c5ae090bdfe67699d46f9e9cebe935b35edd64870c2174b810b175dd26a6c9d37a361feff9b3ab4a -libLLVM_assert.v11.0.0+7.aarch64-linux-musl-cxx03.tar.gz/md5/010c7b4819b3f62507f4d94da323b91b -libLLVM_assert.v11.0.0+7.aarch64-linux-musl-cxx03.tar.gz/sha512/759ca60134f8ae44b4375f1756b9b830262efc2852479cc5dfe7222a7088958e1c34f6122a9bd038d5121a18d9fb5d60611fa7cdbdcd9c77c9a7a6c27bf725a5 -libLLVM_assert.v11.0.0+7.aarch64-linux-musl-cxx11.tar.gz/md5/795e01d60430cc4d94dfa4141fd4a95f -libLLVM_assert.v11.0.0+7.aarch64-linux-musl-cxx11.tar.gz/sha512/da172e81b064dd758609efe3cd48dbc9e9967543cf94cac5f27b775df0ab87b787e2ea247092a16078d33407878bcc9ba2223b548d0fb84285113e92d03a9cd1 -libLLVM_assert.v11.0.0+7.armv6l-linux-gnueabihf-cxx03.tar.gz/md5/99bb6924aa6bf6e04f87fb96f50ea9fb -libLLVM_assert.v11.0.0+7.armv6l-linux-gnueabihf-cxx03.tar.gz/sha512/1d2a5ac479915062bcb13ebad1e9040bc8fecdb54a4fd30aaa97a2ce10463cc2292677000e51dd8b3c2289c695f35f17a9864ebf4adc6c4702842c2cae8e0785 -libLLVM_assert.v11.0.0+7.armv6l-linux-gnueabihf-cxx11.tar.gz/md5/9fdd873c27109adbff52bdeb9774bacd -libLLVM_assert.v11.0.0+7.armv6l-linux-gnueabihf-cxx11.tar.gz/sha512/c7aa34e102eb3941c55b9a207bf5c2af851ddc97e1a575a8f4a1f50102be2cf9e6f2ea4fc88e0d7fd29e440cb74bb9f805d91f813a5c1d91552c337af31af85f -libLLVM_assert.v11.0.0+7.armv6l-linux-musleabihf-cxx03.tar.gz/md5/245d0d63afa7e81b924bb0a909e5ad4c -libLLVM_assert.v11.0.0+7.armv6l-linux-musleabihf-cxx03.tar.gz/sha512/b90259fb9afbc4d4ce7fdbc717d0321e72b8ae6e777d66960bb8754e57f1612438131e2061a0db5de78dc0aabc8a1ef5839e4ff2d80d263c1db2b949f28c5ceb -libLLVM_assert.v11.0.0+7.armv6l-linux-musleabihf-cxx11.tar.gz/md5/8ef34cedadfc87d9bc81b72165fe3ffe -libLLVM_assert.v11.0.0+7.armv6l-linux-musleabihf-cxx11.tar.gz/sha512/1f2e7b12b788405a48eeecd4dc5999cd9ebeb7de2c19068a0809e7804ab6fa27f64307127dab0d5a34c368be967f86e4ec866310a9af30eef0bf4b9c0330a386 -libLLVM_assert.v11.0.0+7.armv7l-linux-gnueabihf-cxx03.tar.gz/md5/29d8daecf3254d31db7a92d069692cab -libLLVM_assert.v11.0.0+7.armv7l-linux-gnueabihf-cxx03.tar.gz/sha512/6d217c278b80dc8f56730508aa6c93104f3bb6cc92d90c763c8403a17b107ce615bf320232d3fd6d439f76f0260da5c7bc34fb13b592f95b4113a6394b0d6ad7 -libLLVM_assert.v11.0.0+7.armv7l-linux-gnueabihf-cxx11.tar.gz/md5/4545a7d06bbeaf1b8061d7728107f222 -libLLVM_assert.v11.0.0+7.armv7l-linux-gnueabihf-cxx11.tar.gz/sha512/8c881b33ea364845bfe85757b70a11f8bd75bc5f79929ccd7b4f6a01ce2582ca0cd353abd8b61ae76202674211b9b8e18492ebd10bd94262536ceac53bfec625 -libLLVM_assert.v11.0.0+7.armv7l-linux-musleabihf-cxx03.tar.gz/md5/7f23b6e002f429ce2805014686e4cbee -libLLVM_assert.v11.0.0+7.armv7l-linux-musleabihf-cxx03.tar.gz/sha512/232176e500d9c086ee2f30e2139f26b26956921bd76007f99433d18fe6007f15cdd6c72981527792e712d82f513cce510b7e0767136534613fa89f76e6e8dfac -libLLVM_assert.v11.0.0+7.armv7l-linux-musleabihf-cxx11.tar.gz/md5/a33428d48938ffeb39568fb116590b09 -libLLVM_assert.v11.0.0+7.armv7l-linux-musleabihf-cxx11.tar.gz/sha512/53926f07da2f712fa75cc76decd8427c868297c5b2a7f82732caa36f406c8e0709adb1f5c5a5f3893bb1daf7dfb710716cb1d9d78ba94d5b2adf603fcc9df453 -libLLVM_assert.v11.0.0+7.i686-linux-gnu-cxx03.tar.gz/md5/516255057a3dd18e010b9994c0fc7df0 -libLLVM_assert.v11.0.0+7.i686-linux-gnu-cxx03.tar.gz/sha512/3031b4655487b11fd65670af8b4362cadfc3240a1ebdd5aa4348b6db95c68e1dc312ccc6d2690ab147601d438b06fdb7283772136ad9f3e23f94df585a7c01fb -libLLVM_assert.v11.0.0+7.i686-linux-gnu-cxx11.tar.gz/md5/c698bad624a1c0d0351a12089d2fab0d -libLLVM_assert.v11.0.0+7.i686-linux-gnu-cxx11.tar.gz/sha512/83d821bdd79b0fb3ff979969f3797aedd77c7fc7e8bc6c28b43584b208d62c2d1c8d655f934c17a52d6af112ca69f455636412132daf7b097d0c8e9034eac9ba -libLLVM_assert.v11.0.0+7.i686-linux-musl-cxx03.tar.gz/md5/c6f07ad0e28e80c8cdc4bb8ee0954e93 -libLLVM_assert.v11.0.0+7.i686-linux-musl-cxx03.tar.gz/sha512/8998823d88f0b31a26b3733d17056f3411c7079b27acdcd19f43b7091368563756243ed796b4c24c9c5540ef9021ea04c874101145d1e22ee90dbecc4df88444 -libLLVM_assert.v11.0.0+7.i686-linux-musl-cxx11.tar.gz/md5/3cac3d493d67c65131e621eb7b5f9642 -libLLVM_assert.v11.0.0+7.i686-linux-musl-cxx11.tar.gz/sha512/addbff3c4bd4f861fe8543b590df1c1e21f932e5fbfc077c998d6ee8aea4057e4ef5b2b3db22ccb35274d667c3e4f4cf93a80b4b25c3db815cd2afe6f1ae9bb7 -libLLVM_assert.v11.0.0+7.i686-w64-mingw32-cxx03.tar.gz/md5/3f28b8c02393b3df8dea1b4a60b5caa0 -libLLVM_assert.v11.0.0+7.i686-w64-mingw32-cxx03.tar.gz/sha512/cdf973c9fc6eb4126b084d94a95328f0c11f5e321439b527afc964e16b9edc157096cdea6fe4cb65ad23b5962c1aff80cdcc865a3bcd7db2ba94f2850e7224bb -libLLVM_assert.v11.0.0+7.i686-w64-mingw32-cxx11.tar.gz/md5/6a50f7c21e1c26bd498e604d9e703218 -libLLVM_assert.v11.0.0+7.i686-w64-mingw32-cxx11.tar.gz/sha512/6458830c94ca914a47ad68d42d4ad7ac36b0f04846e9fb6f8f0d71e1fc72d7e7d72489243b2d669a21a4a90cafc1762da51c6aaaa9bc88fad012f7fe2ae60ee8 -libLLVM_assert.v11.0.0+7.powerpc64le-linux-gnu-cxx03.tar.gz/md5/344bb37464050981120df0c375535bbf -libLLVM_assert.v11.0.0+7.powerpc64le-linux-gnu-cxx03.tar.gz/sha512/ce3705a52d3c59b611d6a37b96cb3185054e99e9731b3792e460eb2844ba52d2c7bef6c83516ee40298cc54f8022e73f933d23d814b7ab4f07ed8ea486ff9eed -libLLVM_assert.v11.0.0+7.powerpc64le-linux-gnu-cxx11.tar.gz/md5/9a380e07b9a85ae2adb9a322b6e4d77e -libLLVM_assert.v11.0.0+7.powerpc64le-linux-gnu-cxx11.tar.gz/sha512/29871da2a92d7ac001f92ff6233ce66fa2a6e61a3f6b6bbd00e0748dfd64ce0d95ef7213681384ca4de81979f573485ac2e22b849551aa60bf301d633b888a4c -libLLVM_assert.v11.0.0+7.x86_64-apple-darwin.tar.gz/md5/c324368a1703af17c6c57746a9453ed6 -libLLVM_assert.v11.0.0+7.x86_64-apple-darwin.tar.gz/sha512/3422886200149d5e958ac75a1f7be4a982c19a8285e256bcc7c9c63e239856bee8d033c9e08695166720d7a9c3766d22d19afa2b8c2b7efb750b18b172a1a730 -libLLVM_assert.v11.0.0+7.x86_64-linux-gnu-cxx03.tar.gz/md5/898b409fbd92540ec7d184b89acd0332 -libLLVM_assert.v11.0.0+7.x86_64-linux-gnu-cxx03.tar.gz/sha512/98898f24ac17486350292f5cc18ecb09059757c5bb18b61903608985cc2105a0172142b9469b27f07a92c1bee6dc22759cdbabc35762f0c1a5411902be76089c -libLLVM_assert.v11.0.0+7.x86_64-linux-gnu-cxx11.tar.gz/md5/5d827bb566640cd95bdf63a0c893b26f -libLLVM_assert.v11.0.0+7.x86_64-linux-gnu-cxx11.tar.gz/sha512/0ab5a7ff7e647277bf1c019c5e3a7c7018cb2d1798c831c443529a0d1b010c730e442148d0ed943920b5592d1718b27f6493d7d3bac250c76d5a733a1f91c150 -libLLVM_assert.v11.0.0+7.x86_64-linux-musl-cxx03.tar.gz/md5/87df505a58117741ac66c3031a25c355 -libLLVM_assert.v11.0.0+7.x86_64-linux-musl-cxx03.tar.gz/sha512/2cd8ab5c7c846ec8c8a1f35bce7cfa4fec12a349418e0cae88ee12262190d73b24926bcd1027dfbf7b961cb417d50edba3d2831949af3738b9c3dc2bb63036e8 -libLLVM_assert.v11.0.0+7.x86_64-linux-musl-cxx11.tar.gz/md5/a6714ae1f6cf77ddccac7fae3095ff16 -libLLVM_assert.v11.0.0+7.x86_64-linux-musl-cxx11.tar.gz/sha512/3de3d48754e9c5f5ea50a005570963c175e87c83202c4924b41422d279194379076c4c42c8c59cd7a8257181fddbf0166658187474f409cc368f76e97994672e -libLLVM_assert.v11.0.0+7.x86_64-unknown-freebsd.tar.gz/md5/f573ad0488fe0560393fe8fb04d18a65 -libLLVM_assert.v11.0.0+7.x86_64-unknown-freebsd.tar.gz/sha512/e8645df8a29f7e2d875839604ab7bd7f23d5118efd61838f3ce2f45aa784c0a6d11bdb0c9010d864c0f071c1fde1a9d5d868a59da8077d036cf3673452506d86 -libLLVM_assert.v11.0.0+7.x86_64-w64-mingw32-cxx03.tar.gz/md5/895c1fced30f8d6608b2741cb6fb6a01 -libLLVM_assert.v11.0.0+7.x86_64-w64-mingw32-cxx03.tar.gz/sha512/1b7aefadaf9ec753f8579def68d0a21e45c53c98b86654f0f6c65612b4b1d6fd4721b852015ca2d8b4783c79cbdfbe11d139cac3fa49424c18499bf6b86fcf68 -libLLVM_assert.v11.0.0+7.x86_64-w64-mingw32-cxx11.tar.gz/md5/ccaeb2297dbc77f3f43b45ba8668e684 -libLLVM_assert.v11.0.0+7.x86_64-w64-mingw32-cxx11.tar.gz/sha512/54691ed3a5169b945428efc3846b09e4e6d9d57fdc2c2cdbfe0f9839aca76471e6d0dd34f7adefa290290d9aabcc9c290808213e380931ba4c0d15c6b6140b62 -libLLVM.v11.0.0+7.aarch64-apple-darwin.tar.gz/md5/3f1040e2f4d169b7218ac0e4029dc598 -libLLVM.v11.0.0+7.aarch64-apple-darwin.tar.gz/sha512/bcf9b831a95139e594a3ffdb07a9d63bcb51a53ab537615dd18c23e6da53dba6c1f60cca02b234ab99714c23b78ac0a2296d4d214347ffb95fabf09ead8f8e11 -libLLVM.v11.0.0+7.aarch64-linux-gnu-cxx03.tar.gz/md5/335c2df4b91c55abf929d063068f66b8 -libLLVM.v11.0.0+7.aarch64-linux-gnu-cxx03.tar.gz/sha512/25bcbf83eb201e9e7e2dd93d2ddee9ca0d9fbcd5bf29b2b0b24ffc93421edaf219657e72fff904aa388d7b29f6e10adf224a17bc0fa4831687b301f238f01dee -libLLVM.v11.0.0+7.aarch64-linux-gnu-cxx11.tar.gz/md5/f90354ebedc8aa28cb0951427701e56b -libLLVM.v11.0.0+7.aarch64-linux-gnu-cxx11.tar.gz/sha512/2bfffacbce7b5dd60313bf538440f9d5f8c7c44318d762a802a620e98da198bf3498b41fb772b519dea17b18efc5fa667a67c4981c91767886c544f62fe41759 -libLLVM.v11.0.0+7.aarch64-linux-musl-cxx03.tar.gz/md5/5950047408876870ccf870800f365a1f -libLLVM.v11.0.0+7.aarch64-linux-musl-cxx03.tar.gz/sha512/871e067c84bf85b83cdbdff4abccb55d9438216332ca80a56c4db12d29e74b53d88de78f5618f64a32d56f7832697c6f3ee38eeabcf706f12fa058e5ce4c6704 -libLLVM.v11.0.0+7.aarch64-linux-musl-cxx11.tar.gz/md5/094b76a377eded3e1b17b43abfde1932 -libLLVM.v11.0.0+7.aarch64-linux-musl-cxx11.tar.gz/sha512/0e632662bf268287cf3907e23ccdf4acb535c5215a188abc729d91feea68bc4e704f2bb083695018332fd5b4e0bdbf443069de0c0935a76a49aa02b94e939056 -libLLVM.v11.0.0+7.armv6l-linux-gnueabihf-cxx03.tar.gz/md5/b562fe4058de0edb2b60facf35781242 -libLLVM.v11.0.0+7.armv6l-linux-gnueabihf-cxx03.tar.gz/sha512/c48a99071cd2ba317e9a1be3c3198eb7e655a072891ab2eed125c940002c7da951dc33bb14ff014b64fcc2eb8fe97caca3bf64bb3701ef3fe8bf2e0f2986a9e4 -libLLVM.v11.0.0+7.armv6l-linux-gnueabihf-cxx11.tar.gz/md5/273b2202f93761ac464641f88fad7059 -libLLVM.v11.0.0+7.armv6l-linux-gnueabihf-cxx11.tar.gz/sha512/2963a2e35874726ebdf246a32814e0f5354eb5d2f62ec3f303924ab67d52b59e9bd73d03530b6a292b93e9bc3421ed9168a02aab4d6e6ff1cf25411cd03c7bb8 -libLLVM.v11.0.0+7.armv6l-linux-musleabihf-cxx03.tar.gz/md5/19e8437b5e99aed82703aeed8bb1755b -libLLVM.v11.0.0+7.armv6l-linux-musleabihf-cxx03.tar.gz/sha512/745c5cbe14f05ebb422853d1d45c841b5bc5664d0199c5a37d677e992d97e3072c0604b337f27a04d6388fbb355b9347eca7a9d642e75121d461823fbceef999 -libLLVM.v11.0.0+7.armv6l-linux-musleabihf-cxx11.tar.gz/md5/576c2646143733f19d558dc05acf3d6a -libLLVM.v11.0.0+7.armv6l-linux-musleabihf-cxx11.tar.gz/sha512/79e2ff48341a8542b4ef017dd4b2566821beff06c95df40701c2f3344a3948b7595cfb2cfc082eca76f7fd77463204590e58073ba87ff59b4b0a8c9df34b637c -libLLVM.v11.0.0+7.armv7l-linux-gnueabihf-cxx03.tar.gz/md5/a14d1d1e6b45fb2cf533417c0b81a8fb -libLLVM.v11.0.0+7.armv7l-linux-gnueabihf-cxx03.tar.gz/sha512/2fe855985bd2b88beb35ecabae424f70781ce61aaf6314cc19da4b7bceea5b1dd1de4df2b893f5b8844bcb3794805bf9dd5e5d1acf61bf29c4d7912150101717 -libLLVM.v11.0.0+7.armv7l-linux-gnueabihf-cxx11.tar.gz/md5/1fe456f1c826dbb0b47d74ad855ef459 -libLLVM.v11.0.0+7.armv7l-linux-gnueabihf-cxx11.tar.gz/sha512/583f794fb40d8216cd21133d0606591e7e2f0497d991dd449aa7101bbfd48608e63934940fb94df751ad782ba189b2549d5be5e1d74b26f90ecc8effc948d123 -libLLVM.v11.0.0+7.armv7l-linux-musleabihf-cxx03.tar.gz/md5/2860de0825c3a5bcfd809f45744562cb -libLLVM.v11.0.0+7.armv7l-linux-musleabihf-cxx03.tar.gz/sha512/e959f793f15b3181bea02cac927caf4ec242cef1a72ea3eb9363dce651549c5faae3f576b1a39980571279719115d89252d703c718a2e73a50125ac82a3a4cc4 -libLLVM.v11.0.0+7.armv7l-linux-musleabihf-cxx11.tar.gz/md5/c5de837cfd59f5baf08f0661cba2f667 -libLLVM.v11.0.0+7.armv7l-linux-musleabihf-cxx11.tar.gz/sha512/68026ea3a3e77f91430e375645b1415c20e2d9b05c0a81b83b859759577295b17883c74eed97dc3df91a167e136f68577af2c978352b990f7f4e517df0b0bc30 -libLLVM.v11.0.0+7.i686-linux-gnu-cxx03.tar.gz/md5/b2348a8a03bc79d8c65689529f7a4516 -libLLVM.v11.0.0+7.i686-linux-gnu-cxx03.tar.gz/sha512/92bb809cf50eda52cb3dd1b37ad221e930be0a05cf91cda567f25936c62f069ee05719fbf959876df45ef0270cb13668ceed983608d897c17dfdd57dab7fef55 -libLLVM.v11.0.0+7.i686-linux-gnu-cxx11.tar.gz/md5/acd3ff22681f11a0a5b254f7a55c6fb3 -libLLVM.v11.0.0+7.i686-linux-gnu-cxx11.tar.gz/sha512/dddf6ae0eca7b1d275582920b115808fc8c22bf29035c0e0d4263c88a45cf7818eb96e8ec2ef482e3d293110a38d790ab0733e469944c5fa4b0441c5c9400c9f -libLLVM.v11.0.0+7.i686-linux-musl-cxx03.tar.gz/md5/2a3921afb578c5fa25c1c6ddab97466f -libLLVM.v11.0.0+7.i686-linux-musl-cxx03.tar.gz/sha512/4ed9bcc03b5a45b9297375fffbaae58052834d278f17a90923d8e296f2d53c88c1c45e37473f53eae99cf3a8f7cdf829a5a98a99d20647db76784acaf44e7a11 -libLLVM.v11.0.0+7.i686-linux-musl-cxx11.tar.gz/md5/97573e2ef4aedf50448e23d442c105de -libLLVM.v11.0.0+7.i686-linux-musl-cxx11.tar.gz/sha512/5654b86df97e7ef03c3543dfd3f5b3b60dc0906e7963bb758825c99eaff0f43a1edb2c6b8c6969f9cedf2f68833d18b20cc708452b628999cf7ae40438f575e5 -libLLVM.v11.0.0+7.i686-w64-mingw32-cxx03.tar.gz/md5/2f57354ddae4d50ec4abce30d71f12fd -libLLVM.v11.0.0+7.i686-w64-mingw32-cxx03.tar.gz/sha512/29b8af9bc5188ec49e61fa413215c84209102137c9ba0325e598abac52c43b3cace43fc80971b96a447ab0393b883e25d8e489e865a1ebbd4913a76ff66b0a80 -libLLVM.v11.0.0+7.i686-w64-mingw32-cxx11.tar.gz/md5/ed9cf691b651ed59e731f57545369086 -libLLVM.v11.0.0+7.i686-w64-mingw32-cxx11.tar.gz/sha512/926f9059283becfeef3fccd319229c09c11dde86f718a9610d204621225a1e09b88a9fb23d9ce2c4186133b1b71eb611f52571e63ae570bb3e55a7803949f202 -libLLVM.v11.0.0+7.powerpc64le-linux-gnu-cxx03.tar.gz/md5/0c9e9ce8bb846fee0e8e8bf5ee7cf3bf -libLLVM.v11.0.0+7.powerpc64le-linux-gnu-cxx03.tar.gz/sha512/d804d538406b9aa0ab1b28993c0239d40dbf73267f68b5b195ddf96ba6477b4040764333c5fa1ce44b8010d9b2ecfc17dd9ac1bc00439e0c6a36488a1d925e9d -libLLVM.v11.0.0+7.powerpc64le-linux-gnu-cxx11.tar.gz/md5/d824e078349d3ae53fa4c6b5c2704dbe -libLLVM.v11.0.0+7.powerpc64le-linux-gnu-cxx11.tar.gz/sha512/f9f22868335ce24c40663df2a87ab98c377b666905238fe15023d5a1e2446ecf5d12f88ad2e7268a858058aa9113f65cd3f02812715e7251f092a1e6767e3775 -libLLVM.v11.0.0+7.x86_64-apple-darwin.tar.gz/md5/6faa07677a8d3b7c38eeadeeca0229e4 -libLLVM.v11.0.0+7.x86_64-apple-darwin.tar.gz/sha512/e93a6ea6ff3221b54014c684134bc35b1aded66775453c5ba0657a6e03e046eabcea435fc7db3a90a59cfbd6167bd27405c9c997fd2993e2faac164042973495 -libLLVM.v11.0.0+7.x86_64-linux-gnu-cxx03.tar.gz/md5/9d8b84a79a020c3b5bd118b340ca6417 -libLLVM.v11.0.0+7.x86_64-linux-gnu-cxx03.tar.gz/sha512/824bd9ee3246cfb08cb065c3e8428ee9a1bd8907df672b3e2a65a23efda0765d9dcfc1cb10d12ac3a118d946dc29dce682f7d4cfdcea7bf4be5b37ab970515fe -libLLVM.v11.0.0+7.x86_64-linux-gnu-cxx11.tar.gz/md5/bb8a73c93efe36baa8fe6537b1dba82c -libLLVM.v11.0.0+7.x86_64-linux-gnu-cxx11.tar.gz/sha512/81e69ffdf73ad6f14d99b496aec236c9e83684862415cc86d07d321716f8da590b27966b6ac28ebf62fe7acaae6fa4fb192ee76171a8b140dfed9e49fce2b21d -libLLVM.v11.0.0+7.x86_64-linux-musl-cxx03.tar.gz/md5/dfb5e7eb0246f10e1a8a49d99c8e9145 -libLLVM.v11.0.0+7.x86_64-linux-musl-cxx03.tar.gz/sha512/645f79be4e7bbc67dc2bdb503e2ad41cf9e135b9e67ad07b8e33df0982917c4103dc0d70bc6305b313e5ba555af8c8f893af1f220720e6a0a1cc4faa545a4157 -libLLVM.v11.0.0+7.x86_64-linux-musl-cxx11.tar.gz/md5/87f3f0707a0a2a2dbbf119000dc2621e -libLLVM.v11.0.0+7.x86_64-linux-musl-cxx11.tar.gz/sha512/9f23e1f7f097beb6066234fb854545754b6e5938c2092ef282cafeea3fae4903dbdc2e39e52030130e8137ea223367b1ed05557f1d08dd026c9e5c0c5db0b0af -libLLVM.v11.0.0+7.x86_64-unknown-freebsd.tar.gz/md5/23d639edb45276d5b705122f180265b7 -libLLVM.v11.0.0+7.x86_64-unknown-freebsd.tar.gz/sha512/7b1d8d70a8718af421f86db049cd6264717dbe9cdd601ac317ae1c93323a790d1e4b7288f558d7e9b4509510132a166210ba1bf8c06652027d685f0ca05cea62 -libLLVM.v11.0.0+7.x86_64-w64-mingw32-cxx03.tar.gz/md5/f61342c9ca2b75f5992680b3c748162d -libLLVM.v11.0.0+7.x86_64-w64-mingw32-cxx03.tar.gz/sha512/aae8a9c5b9d468b3a615e91bd411e2ed044684b10fbec7de5fcf4a469b6f18fb71c62b377c3b941e277a1f492d331ab4577d8814adfb29a12b25e8b7bd073bf0 -libLLVM.v11.0.0+7.x86_64-w64-mingw32-cxx11.tar.gz/md5/173b0fafa2529b8b4f91e4aa731bb579 -libLLVM.v11.0.0+7.x86_64-w64-mingw32-cxx11.tar.gz/sha512/b74876bd713e319762fd02e6b13dac0bae72157329ce928eb8044105ba6b005a24e36d618cbb4fa59725ddef0bcc0dc64b24a4169d1ae76424665d5869ef63d8 -llvm-11.0.0.src.tar.xz/md5/85844102335b2e01b3c64b6734fb56f2 -llvm-11.0.0.src.tar.xz/sha512/b3e92091ac48772edc0c30801218ce646ef374e1968baab91df9005f58e11c3ce149b2c4c655c7001f8554fd337caa02c08783bc736153bf58f35fe008e624a4 -LLVM.v11.0.0+7.aarch64-apple-darwin.tar.gz/md5/dabe6f51ae4836191c3bffb3c13ac152 -LLVM.v11.0.0+7.aarch64-apple-darwin.tar.gz/sha512/251581327d59efa6a218f6923a1303fa45d71ac192c9602f9fb675b0140356b163319e98728f872616472a72c5edb0f5bbf72e00a440cbb208ee30264d507ed0 -LLVM.v11.0.0+7.aarch64-linux-gnu-cxx03.tar.gz/md5/7914dca0f3d1cdd4ea3ffa684c5da2e2 -LLVM.v11.0.0+7.aarch64-linux-gnu-cxx03.tar.gz/sha512/3fcf719a85b6f6d28c53fa0348099953673499544a421fe60a3424b6bd022c1bea1fe57289a502069c31928eceaf6163ece1843cabeb3d1d4f497b1a37771185 -LLVM.v11.0.0+7.aarch64-linux-gnu-cxx11.tar.gz/md5/6a12e330fca6a5dd6323aa0b2fc79def -LLVM.v11.0.0+7.aarch64-linux-gnu-cxx11.tar.gz/sha512/4ff85dcafcf00a8a903b855cbe1d55b04c56b939e7c7952dbd3c03a38edfe6e1ce97ba4d721e87d97d83c5e23771ddce4a1f21785a3c11acbaebded997a7cc33 -LLVM.v11.0.0+7.aarch64-linux-musl-cxx03.tar.gz/md5/74aff1550da6780325b5b511524bc44b -LLVM.v11.0.0+7.aarch64-linux-musl-cxx03.tar.gz/sha512/f88b785ef394e75b7b0d98c0f590a1966d9d4e13e6db38459af84ac8a99121312e5c649c2a85ed0414ff946c7812919909f79babe6f045fe986b31cb48d7f13b -LLVM.v11.0.0+7.aarch64-linux-musl-cxx11.tar.gz/md5/8109e6d08f4c0e81e301e2efe368ef88 -LLVM.v11.0.0+7.aarch64-linux-musl-cxx11.tar.gz/sha512/e59c42daa2d4fb17fe8036108d34d37f9df890eb0f8e9c0a216602f601edf164a0ee4d74b8bb85773435a3f901b08c9e4563f9fc9fe6104221f97adb40031b0d -LLVM.v11.0.0+7.armv6l-linux-gnueabihf-cxx03.tar.gz/md5/c15c20c86f35252e8f952f268976fada -LLVM.v11.0.0+7.armv6l-linux-gnueabihf-cxx03.tar.gz/sha512/82afc8222a34cde051399ade2c187988c45fdfec86c1052611eec9a0374463e8ce156b336a0b82091b8c1f811fce01d0dcd0ae29a97c4cb5d6a513ffbca54a42 -LLVM.v11.0.0+7.armv6l-linux-gnueabihf-cxx11.tar.gz/md5/d6c1455fd8ac1d9605bc1c48614880ee -LLVM.v11.0.0+7.armv6l-linux-gnueabihf-cxx11.tar.gz/sha512/00a060d3f130fbfcefab34af50f2de72188cdaf54a2bc9dc90ebde2c685054a3763e86de83ae6872a959d1f5a915686a380cf171b2bc8721779ed000b606aa7c -LLVM.v11.0.0+7.armv6l-linux-musleabihf-cxx03.tar.gz/md5/5f841ebbe61e126e1ba1d92faef604d2 -LLVM.v11.0.0+7.armv6l-linux-musleabihf-cxx03.tar.gz/sha512/8b7643ec31aaf8a66c52db6d4489f56496a5cacfc725bcb36ca85b90e6b167e229282b4356c2c9ac7c4a5d5e533144ff7d09f7f653976aba74c8e8144db069e3 -LLVM.v11.0.0+7.armv6l-linux-musleabihf-cxx11.tar.gz/md5/d6b02c3c02ff21705110facf68fb48f6 -LLVM.v11.0.0+7.armv6l-linux-musleabihf-cxx11.tar.gz/sha512/0283271705c46fe6ecf6943b7ef824beb8f34ddcd3c6c395f5ad67043c04119a00fc5ef6ed1ab0b3416ff604b9c2a68f8df48abe3b998233e56d8f17ebc1de45 -LLVM.v11.0.0+7.armv7l-linux-gnueabihf-cxx03.tar.gz/md5/b5e6936d7953b4032cf9b61779d3bffc -LLVM.v11.0.0+7.armv7l-linux-gnueabihf-cxx03.tar.gz/sha512/3e90c7c81580f18a3e9cbc09b384215424c7b4e23cb0d012a6ac445ddfa71bbae725a92d9c11be0c2b332f66449dd8e9fbc0a63b9bedf5904190d32eae8b9d3a -LLVM.v11.0.0+7.armv7l-linux-gnueabihf-cxx11.tar.gz/md5/9bd755b395be340f32f89b9276e5a4c4 -LLVM.v11.0.0+7.armv7l-linux-gnueabihf-cxx11.tar.gz/sha512/f8d3f98cb21a990b317728eefa33b0e0d5407f3bef2000013c6bc2c384d78cf5419f907a62a27b14c60e8b7666b86c1e012297bed9960bb2c0f737e101ca269b -LLVM.v11.0.0+7.armv7l-linux-musleabihf-cxx03.tar.gz/md5/076b24fc6b2777bda89add6239bd47d0 -LLVM.v11.0.0+7.armv7l-linux-musleabihf-cxx03.tar.gz/sha512/fe4df75f654c0847e62a1340a7933c40990151ee2245759936eab996db157cb61457fd90ac57381b01b2044dacb50c4b7502ceb42cd7c176445b020f128be6e7 -LLVM.v11.0.0+7.armv7l-linux-musleabihf-cxx11.tar.gz/md5/8a21cc45168ac7c506a95d4854237be1 -LLVM.v11.0.0+7.armv7l-linux-musleabihf-cxx11.tar.gz/sha512/44c3e7c5e2c3b521f69d99a1d7e3246e45074d66bcd0b4bee5dd4d15a83e9fa602f0ce6c7a76a957df53205f4a7906cc7fa316078b064d4cf02550921dca3147 -LLVM.v11.0.0+7.i686-linux-gnu-cxx03.tar.gz/md5/4c838d5ad65102afa9162a00f888bee6 -LLVM.v11.0.0+7.i686-linux-gnu-cxx03.tar.gz/sha512/cf65126d3d8c399476d84e98e6050d5a5481ffa745e931196c7663a72b40818918e64bc4aac584ab11e1ff15019286345e6e7ae460b0c4455da004d54f97fff2 -LLVM.v11.0.0+7.i686-linux-gnu-cxx11.tar.gz/md5/8f245351d8e4a657752ca5d2f1f4a8d9 -LLVM.v11.0.0+7.i686-linux-gnu-cxx11.tar.gz/sha512/2d9b8c9932c5bd87ca4ab6b2937651e015a03629360a1d7368aa49a073315639e3794428d8986fbcc38a2f04746201032a59d002eb31fce7552458de8418ca20 -LLVM.v11.0.0+7.i686-linux-musl-cxx03.tar.gz/md5/9634c9ec4d8d72fdc89a6690fc3aed6a -LLVM.v11.0.0+7.i686-linux-musl-cxx03.tar.gz/sha512/44f7fe90cc7a158ff2dd63321076223c010343bcda1f773db41deee9a2d12f49efca3fcf00f272cf10249b43ab9dfe302f0c0a897e26176984bbbc3f507304f0 -LLVM.v11.0.0+7.i686-linux-musl-cxx11.tar.gz/md5/f0d4e03fcca7a034db1e60028a54f4ab -LLVM.v11.0.0+7.i686-linux-musl-cxx11.tar.gz/sha512/409cbe1e99caa320c9acfbb948550e058e96589363f7aceae5a17d88ee0d62f0e5e0f4396b7f2b0508f29568ea9c42f49e5df5f024115238651b6fb5709885ec -LLVM.v11.0.0+7.i686-w64-mingw32-cxx03.tar.gz/md5/c3fe268d3bf3bf7ef2afcf9a387f420f -LLVM.v11.0.0+7.i686-w64-mingw32-cxx03.tar.gz/sha512/cfeaf2ed294780eb4e008bae10202e77abcbae564eee2c53566320bce58305c20a6d7bbae63e37ce2b15bb177352e1f623434329319a7a6594110cc8a297c9ec -LLVM.v11.0.0+7.i686-w64-mingw32-cxx11.tar.gz/md5/6ee4ee2ed357585797fb95e6e5dff3b6 -LLVM.v11.0.0+7.i686-w64-mingw32-cxx11.tar.gz/sha512/cf5ce880b930fc2ce0d28597515cfbc203f20555398f5e79341e2be4e643da757a13aaf1b67ca16936a79c7c708194defdbfa8c011213363dadbd49a3f035554 -LLVM.v11.0.0+7.powerpc64le-linux-gnu-cxx03.tar.gz/md5/1b86cd0064df4872f45256702e799b06 -LLVM.v11.0.0+7.powerpc64le-linux-gnu-cxx03.tar.gz/sha512/062f49235357d5c4cda23050e13c5c0f3de643a8c4137f8e9b9cdae7a3a9ab31c7421e44ba5bab5902b92982c6a135c6a069583caf0409bc4960d9e68513d954 -LLVM.v11.0.0+7.powerpc64le-linux-gnu-cxx11.tar.gz/md5/467c91cdb61c35e2f769701393a27a3a -LLVM.v11.0.0+7.powerpc64le-linux-gnu-cxx11.tar.gz/sha512/7bbd1f497b6b8edba056540084f09d367bcb245be8fe9fd6b6455d3847f77a61ca1c66cd9465a84a89d37e832f36a046ec6b9d815f8b511fddf952cdf43ccf96 -LLVM.v11.0.0+7.x86_64-apple-darwin.tar.gz/md5/06ec920a21a49168fe2e6315bf8e05ae -LLVM.v11.0.0+7.x86_64-apple-darwin.tar.gz/sha512/d8138dacc7dcd4e3cfb91bc09ec7cb4d446a94c3b056d685da4e3816d6b77c84937aa2a54417a6646738ea721ff90ad7b79989fc9e79ad55b5944618591d0a23 -LLVM.v11.0.0+7.x86_64-linux-gnu-cxx03.tar.gz/md5/af22cb0dcf36d9a15b9d287dc090b09f -LLVM.v11.0.0+7.x86_64-linux-gnu-cxx03.tar.gz/sha512/befa06d0e2e455dc7b046b083ebf9b4a10771f2916f639ecd135f2c8628f0231a2ffeef5c6f777212363c435aefee05fcf61e93bf4eb0f8603569785121b1557 -LLVM.v11.0.0+7.x86_64-linux-gnu-cxx11.tar.gz/md5/98d1f187020c958dbfc5be7f56810b3d -LLVM.v11.0.0+7.x86_64-linux-gnu-cxx11.tar.gz/sha512/55767a59047ef34832b08aa46765b819d53efc344b64d3096ff37f9d123d78e175c5e2b55cb49367732325a4c3da69b78e322f437f5bbc0eb01eab7b47b9a89d -LLVM.v11.0.0+7.x86_64-linux-musl-cxx03.tar.gz/md5/473515270f060d2f6c457dac599eb979 -LLVM.v11.0.0+7.x86_64-linux-musl-cxx03.tar.gz/sha512/b00071383cf6b7b6e4bfdc24be044b67aafec149dfab537275146b82d6de5fc3eecc2d5c3efc59de51caae83642db48b7694ad2f5ddd2e4c3a40257a56e511d0 -LLVM.v11.0.0+7.x86_64-linux-musl-cxx11.tar.gz/md5/502277dd5f359701e82cda7cc9c2e842 -LLVM.v11.0.0+7.x86_64-linux-musl-cxx11.tar.gz/sha512/58f140aa55946e288cf63bd6872489a5de3aac5a9af49c37e1d1ce451570f2de32a178ce431a948279170a6ad4ef251f78b72608b76fe2b72f6e2c6bc8e92187 -LLVM.v11.0.0+7.x86_64-unknown-freebsd.tar.gz/md5/5b4feb145bc572b52b731bd8c3811e47 -LLVM.v11.0.0+7.x86_64-unknown-freebsd.tar.gz/sha512/7defb7aefca9869926c6c54e5f51c8c8facc24d4aaed6dc27c6d9a8446fd0122ef5117de1b221011569fba033f0e7574de81a573f37277a8ef5235f8eeb539fb -LLVM.v11.0.0+7.x86_64-w64-mingw32-cxx03.tar.gz/md5/f5cfcbcc59a8b053526d4abaf24c41eb -LLVM.v11.0.0+7.x86_64-w64-mingw32-cxx03.tar.gz/sha512/7803b0c745c804b8fe3c66f997da59501bdf64f3ebe4606261807f5636a846e548ea3c3c265643fde4bc02573d40aeb14107a57cebb68976f02f3ad56fcabf92 -LLVM.v11.0.0+7.x86_64-w64-mingw32-cxx11.tar.gz/md5/2634b59f0520f010ffcf51928d7db7c1 -LLVM.v11.0.0+7.x86_64-w64-mingw32-cxx11.tar.gz/sha512/1f16b61e1cbe64892c60597fd938a52d4e239a4b98834fb1e6f27a1d28df8b1278604f057798ef8e6f545bbc23b1c2dc85e3300e6905f2c1bbf2fdd0fe46b0e7 +libLLVM_assert.v11.0.1+0.aarch64-apple-darwin.tar.gz/md5/72cb73b4eb0420466ebccc0fea17a324 +libLLVM_assert.v11.0.1+0.aarch64-apple-darwin.tar.gz/sha512/09f443cf3ea3daf81a650822e7277f4da5edfaf5c1f79b9456f503cb7d884855d5c23f7b25fd7674d66e7ae7892a1749ea7ab87893e99c568e718fc4596e4c33 +libLLVM_assert.v11.0.1+0.aarch64-linux-gnu-cxx03.tar.gz/md5/b387f40172a505f48c06b04943e939a8 +libLLVM_assert.v11.0.1+0.aarch64-linux-gnu-cxx03.tar.gz/sha512/ca4b1ea26c6151c72c56f70be2cecea58ab5d9b2b793e0316a15c10ed25e3fafaa392219e508d7a21a33e0b1a7e172e70c1b0b9fc70693fc2409312675af2bbe +libLLVM_assert.v11.0.1+0.aarch64-linux-gnu-cxx11.tar.gz/md5/5b65df008d5b6f824e5cf456cc6112df +libLLVM_assert.v11.0.1+0.aarch64-linux-gnu-cxx11.tar.gz/sha512/b0525756f8099bc44b50392bcce955909a8e784bd55de09a1bad445d9f079e34ea8fafc8c6992522edc8a19fc15b23318cce40ddb9b23191d300ff3554c0ee06 +libLLVM_assert.v11.0.1+0.aarch64-linux-musl-cxx03.tar.gz/md5/eaf292542f6c2f24f98563c7a25cb242 +libLLVM_assert.v11.0.1+0.aarch64-linux-musl-cxx03.tar.gz/sha512/350a5158d6cd79039c45068fe26e5bc73343b184407f12442096a4e5f3549f70468ec7bb72d40bdfd69d945b8d3b75a280367c9fb7fce13012d5fe5d07802b9b +libLLVM_assert.v11.0.1+0.aarch64-linux-musl-cxx11.tar.gz/md5/f25d713fd86eebd93e5ad4cb049b1569 +libLLVM_assert.v11.0.1+0.aarch64-linux-musl-cxx11.tar.gz/sha512/a536a5bb3c23b8f1a76d8eaced4842b711ecae820ce38dbe0e0ac7466773a0b838832465518f2c54e881208a557d88a73bf7120b3263b03e697e38a1914686c8 +libLLVM_assert.v11.0.1+0.armv6l-linux-gnueabihf-cxx03.tar.gz/md5/fe0952b6450241b7b517c166ccea4c88 +libLLVM_assert.v11.0.1+0.armv6l-linux-gnueabihf-cxx03.tar.gz/sha512/49f8b100199f4d9d668be6314b3ae6c1b4044c9520b2a3bd7812813bac469341208df67b5f875c8cec18a6eec93bb287a36a5235fdd289b2e43bdeecb7621e23 +libLLVM_assert.v11.0.1+0.armv6l-linux-gnueabihf-cxx11.tar.gz/md5/9f879b954eccefef125bd3a8a62021c1 +libLLVM_assert.v11.0.1+0.armv6l-linux-gnueabihf-cxx11.tar.gz/sha512/aca699cad540681d1b07845492abb42b96d3662313aa0177b1764616cf281398d3e8e9cfa59b18440be58c8f65f843857e626ba95fa9baca296fc2406f453a34 +libLLVM_assert.v11.0.1+0.armv6l-linux-musleabihf-cxx03.tar.gz/md5/a7b1d9a513d587591aa3308203ce6268 +libLLVM_assert.v11.0.1+0.armv6l-linux-musleabihf-cxx03.tar.gz/sha512/03e1bbc38635e8c65a1e14a173f2920519e2566ac240afaceea669345982459d7d98c6ef82aeb1c9e199b1f1e3e556ee34f5516bd30ff18cf8b683d91169fa0e +libLLVM_assert.v11.0.1+0.armv6l-linux-musleabihf-cxx11.tar.gz/md5/12457a9b3fa21c99a49caf93b373c574 +libLLVM_assert.v11.0.1+0.armv6l-linux-musleabihf-cxx11.tar.gz/sha512/ab193741a31f5452abc295d2a09301eeae0c3b6a03bf92691cac84880b40d6527a4628e468234822991ad55e35598ae5858a2bd00ef9eab9c90c45e18317b851 +libLLVM_assert.v11.0.1+0.armv7l-linux-gnueabihf-cxx03.tar.gz/md5/576f3ec63c7d64491cef6205c359b115 +libLLVM_assert.v11.0.1+0.armv7l-linux-gnueabihf-cxx03.tar.gz/sha512/e48baf95c5812bb3a9c7d37fd78beb961c91fe58beef549d1b4e0e1b66809341c096fae68cc908be3dc94de71b0fe828496ae2febdcc4e09cd308cf697e4c414 +libLLVM_assert.v11.0.1+0.armv7l-linux-gnueabihf-cxx11.tar.gz/md5/6e1b2c07501a17453c039f549ae3a75a +libLLVM_assert.v11.0.1+0.armv7l-linux-gnueabihf-cxx11.tar.gz/sha512/c7f12fefacb420b40ba7283226e1c458ce46e70ce5e5527c81cdbd2fa2cc7debdbfd14aeadb1dada1bf510ac678928432f850e1c3f8f74c8f8c34f078ded30f6 +libLLVM_assert.v11.0.1+0.armv7l-linux-musleabihf-cxx03.tar.gz/md5/4c550be2bb9de498aa9c2a71b42b4980 +libLLVM_assert.v11.0.1+0.armv7l-linux-musleabihf-cxx03.tar.gz/sha512/e5b505476ae796d52549884d2924c5ee4546b1d43b6a6205b9be18badbe1cf842181d4c8e699ef6daeefc12d7741c558f2594ea8bda1661a6a00bb34339191fb +libLLVM_assert.v11.0.1+0.armv7l-linux-musleabihf-cxx11.tar.gz/md5/247a069c1af0d07353ababdd8d0ad534 +libLLVM_assert.v11.0.1+0.armv7l-linux-musleabihf-cxx11.tar.gz/sha512/e7b46803f2dbc9734d824e0464cf1c999d0b4efd2ee7283695a94e9e04ded524b60cc97498e02d3b4330604fff7ce3b59ec74839cd6793657cb064158dfe0f70 +libLLVM_assert.v11.0.1+0.i686-linux-gnu-cxx03.tar.gz/md5/424a59e82d63f0559a4440f97c4fb0a4 +libLLVM_assert.v11.0.1+0.i686-linux-gnu-cxx03.tar.gz/sha512/aef94d142af96419f3749c13fdc89d2f0a9d072d5bb817fdb787718aa04825c28c9187970645d0dc48f79f58e5eb48003267d78d20e09c8bf76155e016f8c2f7 +libLLVM_assert.v11.0.1+0.i686-linux-gnu-cxx11.tar.gz/md5/684d885f70bcd2fed245a6d5e275a86f +libLLVM_assert.v11.0.1+0.i686-linux-gnu-cxx11.tar.gz/sha512/808d932f565a03837bc5a189d58e942ee205e34cc5f985f384aceb83dfb3b721c10507339079dc87edc90db92aacd01e95534754867a6184755580b06699a6f3 +libLLVM_assert.v11.0.1+0.i686-linux-musl-cxx03.tar.gz/md5/087b86f490f1b0032f0b63beedc5d8bf +libLLVM_assert.v11.0.1+0.i686-linux-musl-cxx03.tar.gz/sha512/566bc8c09d9b4e01ad8ea784d1e4ba13c3fe54338d49043251b91f9e3ef2ca718f64369f7b637a45b011eca03940825d2f0a48d306182ed32dc3af6b6ce757ee +libLLVM_assert.v11.0.1+0.i686-linux-musl-cxx11.tar.gz/md5/4e86a5d2a79ec57402a36d05f19ab870 +libLLVM_assert.v11.0.1+0.i686-linux-musl-cxx11.tar.gz/sha512/de36ce76dc6611c12957123aeefccb1be26ef7b63c5aea0967afeddd7f473ac4674365ebfd9e35ea1607567b9701a1d58b55b1100b7e2f830723bf45315c68ca +libLLVM_assert.v11.0.1+0.i686-w64-mingw32-cxx03.tar.gz/md5/7cda46769ad2c27e0ba9e7404e1cd7cb +libLLVM_assert.v11.0.1+0.i686-w64-mingw32-cxx03.tar.gz/sha512/a51eb2d0f4a61947b3449ba3ed60110b5e183fcd09126b9b0bfc63d285e881373e8ae26c0925e42bb3b69176bdb6c9bf9301ebc5d7c9775115af690f728d1476 +libLLVM_assert.v11.0.1+0.i686-w64-mingw32-cxx11.tar.gz/md5/8449c26f913b7b6ce1aff4e0c89d223d +libLLVM_assert.v11.0.1+0.i686-w64-mingw32-cxx11.tar.gz/sha512/4196db36c4fddd2f267b97144ba0469f616952931df757708bdbdb28bd5e7615cdc292456019f5ca5747b708e7b805a2651e56dda74e33b1a8638d3e6197f856 +libLLVM_assert.v11.0.1+0.powerpc64le-linux-gnu-cxx03.tar.gz/md5/73933ef6ac652ab1df761f44054ff926 +libLLVM_assert.v11.0.1+0.powerpc64le-linux-gnu-cxx03.tar.gz/sha512/5267f1bb0fd73bc87f77c5b323b2664fd98c1e92aec67d7dac0ce748c57bf68284585f0474b995cdb7bd25c7b0840a21be55cf00e9a0b12f7bafaa7a4626c04d +libLLVM_assert.v11.0.1+0.powerpc64le-linux-gnu-cxx11.tar.gz/md5/788729c6e58a0e0d1ff06f7a07157e09 +libLLVM_assert.v11.0.1+0.powerpc64le-linux-gnu-cxx11.tar.gz/sha512/e97c0461c88c86f2ef07fbe3e1298d03381b3240fde1ce1e3e49e267eec81bd3a043ddabad90a9014d9eefecb632eeb07597a5e8316ff9c37cc6617800ff5e8a +libLLVM_assert.v11.0.1+0.x86_64-apple-darwin.tar.gz/md5/5fd60a44a572000f2621dee40ea16841 +libLLVM_assert.v11.0.1+0.x86_64-apple-darwin.tar.gz/sha512/c8104fbe347b8984a6c60ce4f26ebc85f2618a225f1b9787b4f7867bbab887ac9b661847e72e0bf8ac703505b9e37aa83aaa1367228d96ff7e52477c5de805ec +libLLVM_assert.v11.0.1+0.x86_64-linux-gnu-cxx03.tar.gz/md5/e97353b1761afd7a24eb9ddcc38f701e +libLLVM_assert.v11.0.1+0.x86_64-linux-gnu-cxx03.tar.gz/sha512/34580edbfb68c7472ec40c14d5aa48458d754b9cab24ae7cfe3c1bd6ab7b383ff021af4963b79495028fc0c94e07e221dfcad8272e7815b1cbf3bf4042bddf70 +libLLVM_assert.v11.0.1+0.x86_64-linux-gnu-cxx11.tar.gz/md5/59c6c59e083c55ac2e2ab2ad25a330f4 +libLLVM_assert.v11.0.1+0.x86_64-linux-gnu-cxx11.tar.gz/sha512/569bd4a55f6cddcfcce250f408cd1f8ea1c1a20ba81076a24acd27fb84242ba9c44c70bb7ec32d544c23679bd9032f378e604d0df30b948e12a0ac4b08afb521 +libLLVM_assert.v11.0.1+0.x86_64-linux-musl-cxx03.tar.gz/md5/ff17494ba9d7ca146d56eaef17ac9d20 +libLLVM_assert.v11.0.1+0.x86_64-linux-musl-cxx03.tar.gz/sha512/10e1eee6d1b0e84aaaaf8424ebd9c07f08315dc0d92d34ea05165673416a1c41aded9ce4f1980b8a06abf301017884756e0835735677e125ee0854f81e90a881 +libLLVM_assert.v11.0.1+0.x86_64-linux-musl-cxx11.tar.gz/md5/3848a194f4dee0f4e0140e31f68e2e8c +libLLVM_assert.v11.0.1+0.x86_64-linux-musl-cxx11.tar.gz/sha512/d0b2423a21de72ebaa76a69e7764f83f87f572f880a36cc6e26582db8f49d054265c4d8c12411b735b623c6ee2ba90b28dd37821e9bbe83120a7babde376a969 +libLLVM_assert.v11.0.1+0.x86_64-unknown-freebsd.tar.gz/md5/cba351ba676be1ae16ae194f1d313a39 +libLLVM_assert.v11.0.1+0.x86_64-unknown-freebsd.tar.gz/sha512/c8dde7849ab528ff0c1fddc5f76d4fff67680fd93e8c44f5241009f4c5a6049e6fcf4ba5c168574f6efabc59ec87d81f1d1382ff55abeb9617addf69aef385cf +libLLVM_assert.v11.0.1+0.x86_64-w64-mingw32-cxx03.tar.gz/md5/6c2b449509d27d65a70549def9566c58 +libLLVM_assert.v11.0.1+0.x86_64-w64-mingw32-cxx03.tar.gz/sha512/bfcf864871c590eef891cf604daf1507f1a9f117e091d88c3730dfb60dc8b49133b388315da8cd75a51683c54d7e7ae1887aee617cb8c704a6eafe7d0b81e948 +libLLVM_assert.v11.0.1+0.x86_64-w64-mingw32-cxx11.tar.gz/md5/7cb9c53aceb48acc4b1ff0bcb2d32073 +libLLVM_assert.v11.0.1+0.x86_64-w64-mingw32-cxx11.tar.gz/sha512/e5b47e3697b695f45117af1d0ac0a37886e9c85d128d8b7d6ae40f3ea957b6ef04dd1539578bdc37a80f52b241ff34f49d75e104bafeaa76790b8a57ed95d1c8 +libLLVM.v11.0.1+0.aarch64-apple-darwin.tar.gz/md5/6bbbe4f8828d965e6bda15ca6ed686d3 +libLLVM.v11.0.1+0.aarch64-apple-darwin.tar.gz/sha512/6f0ba6a0b8cfe9ca00d4a1ca11a0537542ca6b0d108b44148ad558245fc9b9a5849a8c31c98ea78c5cbc781cb264c9fafa4568412030f98ce78d895f88ddb083 +libLLVM.v11.0.1+0.aarch64-linux-gnu-cxx03.tar.gz/md5/ff941c8f9b710d8300eeeb29bf77688b +libLLVM.v11.0.1+0.aarch64-linux-gnu-cxx03.tar.gz/sha512/fc5a41931d5af01452f9a104ffe4434a8842fa6ec4279f7534e8825bab0f7b5395d973a7269643af6e662b4dd8680920cd2879af4208aa6a96f0ec3d9eaa847b +libLLVM.v11.0.1+0.aarch64-linux-gnu-cxx11.tar.gz/md5/b429299c2ea4123b53d352bf15436fb4 +libLLVM.v11.0.1+0.aarch64-linux-gnu-cxx11.tar.gz/sha512/1365e9df2f0c69be190b956e33ae8d89fb468f3475b25a1955ad9ad3a87545c9c433af9bc1a419394afba2ed7d06557a59ae700b19a8ca99b1989fe2c51fc24b +libLLVM.v11.0.1+0.aarch64-linux-musl-cxx03.tar.gz/md5/7d1d63f817c40728881da6d5e5a759f3 +libLLVM.v11.0.1+0.aarch64-linux-musl-cxx03.tar.gz/sha512/c2b81988a6fa95a5186580fefe9ca645a37bd0b1529e77d3b32c60c2cd3201260197997230d43d96f5d94418ca85b641041c13a1a5737b6dc5002be6b410cc47 +libLLVM.v11.0.1+0.aarch64-linux-musl-cxx11.tar.gz/md5/f497572a7ddc42ccccf8588ef1be63ea +libLLVM.v11.0.1+0.aarch64-linux-musl-cxx11.tar.gz/sha512/5646bd76573eec9ee7276a702bdf72681f9271b8ee06903a04fede7057c012dde7fd2a4c297f92b5a13ebdddbb7e82decc9bfbb1e6bf561da16bfe4e91a39615 +libLLVM.v11.0.1+0.armv6l-linux-gnueabihf-cxx03.tar.gz/md5/e2ca9e7ce03d1d5f9a8f926ec43a2f1d +libLLVM.v11.0.1+0.armv6l-linux-gnueabihf-cxx03.tar.gz/sha512/a62343736796c8f38593db6f433bf88652163e440ae597647acd2d03935ce8644c8a73b5759533a126479ff8c1e7aecb80f96683b119b0568432f90b1eb9a616 +libLLVM.v11.0.1+0.armv6l-linux-gnueabihf-cxx11.tar.gz/md5/e21cb8bf3381613346c8e7e0a557f3b0 +libLLVM.v11.0.1+0.armv6l-linux-gnueabihf-cxx11.tar.gz/sha512/ca8c593339b19b514b29dd60e0ddfe8027b74c549915430e63baa94bcbb655640e1cfb5c0671eb02a5a966aa219b1be72a8433f79fd6b1cf35a48663cd0f9903 +libLLVM.v11.0.1+0.armv6l-linux-musleabihf-cxx03.tar.gz/md5/698481903ca0c777c866f7d3df59f665 +libLLVM.v11.0.1+0.armv6l-linux-musleabihf-cxx03.tar.gz/sha512/1f06d2758817cbbc87e17e694b2a28e361579061e713d434a8305e67101b86d403a5032342f032e779c65e5bddc1618139d7dce328210599166d5b89aa6ea53c +libLLVM.v11.0.1+0.armv6l-linux-musleabihf-cxx11.tar.gz/md5/3a0bfd5e1b7f0bccb594d8247b1c3482 +libLLVM.v11.0.1+0.armv6l-linux-musleabihf-cxx11.tar.gz/sha512/ebe41b12be7dd9aeba28305e05cced23a4536af84712f09356071a2f8042f9ba5195bb252b4bf641dd56141bafc04aea8a98ff21249d865ffdd0f4d2e4954285 +libLLVM.v11.0.1+0.armv7l-linux-gnueabihf-cxx03.tar.gz/md5/b6be95080504eed815a14d43ff20ebe9 +libLLVM.v11.0.1+0.armv7l-linux-gnueabihf-cxx03.tar.gz/sha512/a1107732bcab4810a0856e0150be52178b71d527b77f37c9cdc702f371c7cfc16c5b42377752cf403a15584d891a20b7cb73f5c61f4944dd5b7e20272c5e02b5 +libLLVM.v11.0.1+0.armv7l-linux-gnueabihf-cxx11.tar.gz/md5/abbd5e59d90b7207137537782c08c685 +libLLVM.v11.0.1+0.armv7l-linux-gnueabihf-cxx11.tar.gz/sha512/b2386fad803560b3b995b0aee4b8bdebd225953f380f36e327893b6c29ddfd955b2792b02ff580d8656f978d28d7ab4d6ed1d06e585b2a7b2fa05e5e0a8e02b7 +libLLVM.v11.0.1+0.armv7l-linux-musleabihf-cxx03.tar.gz/md5/6eafded818a43bc73d2673d09728f1ad +libLLVM.v11.0.1+0.armv7l-linux-musleabihf-cxx03.tar.gz/sha512/970c3ac986fc57fc0e2326fb55ffc8a32b88771e2527e5407d0e7c70ceb6484b19e906c6e51f2e7f93c92c2fba808e91a7567a07c72b791fb150bd12d9e80716 +libLLVM.v11.0.1+0.armv7l-linux-musleabihf-cxx11.tar.gz/md5/7c8e834845e30584f3980ca02df71a0e +libLLVM.v11.0.1+0.armv7l-linux-musleabihf-cxx11.tar.gz/sha512/21c1adbc367ff56f1873bc27d8e8ddd7e860b52b73a8e7663d93ad7f4c9a5a116975b97298d804821b1af7ec05547936a25586ff989cc52f61901fbf8ed60945 +libLLVM.v11.0.1+0.i686-linux-gnu-cxx03.tar.gz/md5/2dac9d6b8d1bf5ff11c76381aebf23fc +libLLVM.v11.0.1+0.i686-linux-gnu-cxx03.tar.gz/sha512/894a4bb9eeb742f7db103d16c1f55f735afae26419d11791e4dc5cf97f285681b59c91d6f41aafcb59d6a274419fa3cd5e6bd9496577c0c71732c7789b61c839 +libLLVM.v11.0.1+0.i686-linux-gnu-cxx11.tar.gz/md5/1551a6e70daff5c990dbc40cc069a73b +libLLVM.v11.0.1+0.i686-linux-gnu-cxx11.tar.gz/sha512/0c0c36e42323364648844bdb3afc8d0efc4553484924e1fcd74e33c689e0b4076d614e85b29afd989aa007e5c03bb5b117504558d44e0566aaaa616d18c26161 +libLLVM.v11.0.1+0.i686-linux-musl-cxx03.tar.gz/md5/ea235c280d3c76f05842b7630d1a5de6 +libLLVM.v11.0.1+0.i686-linux-musl-cxx03.tar.gz/sha512/cea4aca951683b3ec4cd590dd2d6626267de2a12edafaf07304e2dfdd0ee799f88a9ef2a126cfa32546fa221f724da928397798e1beba0964a80a8a56fbdd1bb +libLLVM.v11.0.1+0.i686-linux-musl-cxx11.tar.gz/md5/e3b21c9a06e8b28be5e727807517d71e +libLLVM.v11.0.1+0.i686-linux-musl-cxx11.tar.gz/sha512/880f67c2c7613ee2c50c834c128770e06d58297bfb1f80b11f05833c231ffb3e1449b5c6069590f697c6fbba58c80719c8fb3fdc2786252176ec7d45db93db8e +libLLVM.v11.0.1+0.i686-w64-mingw32-cxx03.tar.gz/md5/73a6b7a8837aea5b75b3e6a8f721dcef +libLLVM.v11.0.1+0.i686-w64-mingw32-cxx03.tar.gz/sha512/6fb7611a7f9a95123eb706ead1d470c055c517194839feb2c235285ab9c7a11be8fdc774726f64bb51908a9c5ba6838ef2376455f3064a6bffda8e9f8e6a295e +libLLVM.v11.0.1+0.i686-w64-mingw32-cxx11.tar.gz/md5/2d6b5dd1752f9425ab9aad465a6fe691 +libLLVM.v11.0.1+0.i686-w64-mingw32-cxx11.tar.gz/sha512/6d107e0929fd121bf7cd98afc83c5b2da8808d69ed3126b87a9238ac7adbe073de96da0ed211eb226eabb64ad88a0176cad2fd2e86f928f8903995814f47695f +libLLVM.v11.0.1+0.powerpc64le-linux-gnu-cxx03.tar.gz/md5/9c06d611fc1fa0ce4fcc0c12570f8471 +libLLVM.v11.0.1+0.powerpc64le-linux-gnu-cxx03.tar.gz/sha512/25f8ba2faba088dd4a53e25ddbbfff7ae35f23caa05e43c7f8f269ca289820e423255b174451a7f50f3b0631b4b3a1a977a3edfd67132f461774cc5a59178778 +libLLVM.v11.0.1+0.powerpc64le-linux-gnu-cxx11.tar.gz/md5/79838f0f3b33f5808a029f9ad47655a3 +libLLVM.v11.0.1+0.powerpc64le-linux-gnu-cxx11.tar.gz/sha512/2bf5f9bdbf04f15cbcbc31efa5d122f46994bb9070d8421105dde3ffac4379be0b9a1c87e4b1224cff198b75ddeb9edb32313bb6e63e6083d97d039bb1c11e87 +libLLVM.v11.0.1+0.x86_64-apple-darwin.tar.gz/md5/f0e546033f265a397272a69704addc54 +libLLVM.v11.0.1+0.x86_64-apple-darwin.tar.gz/sha512/68c8a2f46f18e70998415c99c4e59241138b455e32f09077633ba8ecf4de90ec4ac76ea0d0dae0cecd4e0a000ff879151b54593bf9aaed076586bf6bb11f23cb +libLLVM.v11.0.1+0.x86_64-linux-gnu-cxx03.tar.gz/md5/39389153062b455b210aedd75c8ee0e7 +libLLVM.v11.0.1+0.x86_64-linux-gnu-cxx03.tar.gz/sha512/4301516630ff4b0ae81c37a94b32d9905cbb180d564692a4ba6baed66813eb7fab9a630fc6a252312af44eee8453eb4758ffef14d01460bec6b9b60a8dc59e54 +libLLVM.v11.0.1+0.x86_64-linux-gnu-cxx11.tar.gz/md5/b57ba068f4a5bf91706d81ebb5951482 +libLLVM.v11.0.1+0.x86_64-linux-gnu-cxx11.tar.gz/sha512/8c931fe67045f2d321e3529e714835fb12d45776e32da3ad88a2180f92e9d28c55c7260af8dbac6273de41a540e18bcc941bc46f733d01b10669ff2620603893 +libLLVM.v11.0.1+0.x86_64-linux-musl-cxx03.tar.gz/md5/1cc16ff9eceeddf92f3dd2d84bf53602 +libLLVM.v11.0.1+0.x86_64-linux-musl-cxx03.tar.gz/sha512/5b076f85ac97141881d165941e7cf5d3b2cb2e7aa8456dc7401c066015443720047887ccb2ced73a730f936770dbce0a8d45c4dabd5743fc3e094a8e6aeb1ea9 +libLLVM.v11.0.1+0.x86_64-linux-musl-cxx11.tar.gz/md5/c4fbdb281f80c19459fdf3b9c8e5df9e +libLLVM.v11.0.1+0.x86_64-linux-musl-cxx11.tar.gz/sha512/b79582daec0842d6975484cc7848c9e6517b6a1c4d71f66ec348b8fb04e671a1231f47eab51425fd08a5e7a1c6e85c6414fce85c9e305eba02949db7ba77c326 +libLLVM.v11.0.1+0.x86_64-unknown-freebsd.tar.gz/md5/34d2e843abb3c3721fec3da9d024b00c +libLLVM.v11.0.1+0.x86_64-unknown-freebsd.tar.gz/sha512/49f2a15d78f4aec7768393490a80c48a88a3fe3c5728b303d9871efc74862bf7a76a6355e7bfc08068aa8b4f6f637f51276cabc9cea75749fbdf5ee373bf9e15 +libLLVM.v11.0.1+0.x86_64-w64-mingw32-cxx03.tar.gz/md5/8e96606a79e4321b38546a15c05bc69d +libLLVM.v11.0.1+0.x86_64-w64-mingw32-cxx03.tar.gz/sha512/6313fd9ede345acd9b228971846208228f67f237380341e3631725a43759f7da804a2b9c57169a08d02d1130bef51f7a7168fcf200c51261cac04f590766bcd2 +libLLVM.v11.0.1+0.x86_64-w64-mingw32-cxx11.tar.gz/md5/fa3c453c5ec7068fdc84bb1ce1575b98 +libLLVM.v11.0.1+0.x86_64-w64-mingw32-cxx11.tar.gz/sha512/576e09913861b3148894bf217c3c411a9e8f8e67c47c2faae1c5cdc01a69b7dd411e9d606822304b4454fec9594e09871e7a2f0e97b88b2d5a6def80b29f0eaf +llvm-11.0.1.src.tar.xz/md5/6ec7ae9fd43da9b87cda15b3ab9cc7af +llvm-11.0.1.src.tar.xz/sha512/b42c67ef88e09dd94171f85cdf49a421a15cfc82ff715c7ce6de22f98cefbe6c7cdf6bf4af7ca017d56ecf6aa3e36df3d823a78cf2dd5312de4301b54b43dbe8 +LLVM.v11.0.1+0.aarch64-apple-darwin.tar.gz/md5/5be4edc31ab210cc82ebf1f54b1265ba +LLVM.v11.0.1+0.aarch64-apple-darwin.tar.gz/sha512/80766e9fbabeb917acd73170a5f1efe4c20e56057cb1ef3949e56af17998b9e0df6be2a49158d9a11178f92449ed6cb849024b8ea598d666c492da249863548b +LLVM.v11.0.1+0.aarch64-linux-gnu-cxx03.tar.gz/md5/a30c59e4203473bccc9101de03a2f397 +LLVM.v11.0.1+0.aarch64-linux-gnu-cxx03.tar.gz/sha512/54b18e13d8ce56ee837031df7066cef80779f2c5b5bb6c95842d3263c86b0ac29e995fb96d91f259b7d97b2a6b716da6e12ed8194ddcd0c9320a6e69150a3057 +LLVM.v11.0.1+0.aarch64-linux-gnu-cxx11.tar.gz/md5/a59800f9b6590831294d42799e47e432 +LLVM.v11.0.1+0.aarch64-linux-gnu-cxx11.tar.gz/sha512/edbd8bf8c5dd0b6150d0f092a043296f2c63a1a5ccdb101c2a953eafcd706c110c4791adfa46cc99332e9c67a2ed366289e704a7279fa760ac8af92efbd5fbd8 +LLVM.v11.0.1+0.aarch64-linux-musl-cxx03.tar.gz/md5/8f0607508601a4c682c8d8dd251f4d2f +LLVM.v11.0.1+0.aarch64-linux-musl-cxx03.tar.gz/sha512/59d5418cc96f14137cb65737e9fbd1846010d724e8af533386fe820a71664992823b772b8dae58258bc911bbfb7e9e3319f7dad3b9fdd527e3f6a1f304578c16 +LLVM.v11.0.1+0.aarch64-linux-musl-cxx11.tar.gz/md5/6c99ea3f1b0a9bbd04bbc919c9c4fad1 +LLVM.v11.0.1+0.aarch64-linux-musl-cxx11.tar.gz/sha512/8bfd91ae7412028d9d25320deff175d86b3e095bf5e7a2781950cea18d1f3e0ec7ad46ad3a3d3bff721d591828aac4b19af8ae10ec324f49ed092026a3490e67 +LLVM.v11.0.1+0.armv6l-linux-gnueabihf-cxx03.tar.gz/md5/6818ad05767ee2a782613125f48dcdf5 +LLVM.v11.0.1+0.armv6l-linux-gnueabihf-cxx03.tar.gz/sha512/ab7e01257e1182f819bea8de889185e1d87eca4b1b2ca8205c9e7b284005aa498d0941856d15411e844f745bf02df096e2740f66e5630b7d280b215fc3883258 +LLVM.v11.0.1+0.armv6l-linux-gnueabihf-cxx11.tar.gz/md5/c58d60a8097b29d9bbbae81331a84683 +LLVM.v11.0.1+0.armv6l-linux-gnueabihf-cxx11.tar.gz/sha512/9258c1ccdd0bc135b3b5922a766fc20e5d9522719e10e648d344ac0817f08bcfe253026e18107d281cbd9a6ee98bcdeed5efdb52142adc024e77546c5d280569 +LLVM.v11.0.1+0.armv6l-linux-musleabihf-cxx03.tar.gz/md5/351e7c8bfb2a925ece5811c6e08516a9 +LLVM.v11.0.1+0.armv6l-linux-musleabihf-cxx03.tar.gz/sha512/ae4ae45d033e263c8e7ae1f7ba24dc43b4f55c150e77d3d9c643ec3a09f702ef0fb28aa9f840e1c32a6fe5c28d8e45533ea9a25b1a767d78429f78b93c898992 +LLVM.v11.0.1+0.armv6l-linux-musleabihf-cxx11.tar.gz/md5/a97853f6cd8046a5b730dda7b800b3cf +LLVM.v11.0.1+0.armv6l-linux-musleabihf-cxx11.tar.gz/sha512/e63f11f157e08f848d3103c0e807fec5dfae8348de4e854d5fe78e72c5c34f3f387b07feadade05437c84582440fd19322f24b03891b46260d28cf3fd33f2782 +LLVM.v11.0.1+0.armv7l-linux-gnueabihf-cxx03.tar.gz/md5/8ca68d4bb2e4076c49da331fea41fdac +LLVM.v11.0.1+0.armv7l-linux-gnueabihf-cxx03.tar.gz/sha512/8fed9e024b3bd3424816588f5b3ee3566631f3bcb3f32501108d3e60391cb03a606d9c757c778c5850502519899ca1ed334e6b2a5762a8bab5cf64310ebf4c29 +LLVM.v11.0.1+0.armv7l-linux-gnueabihf-cxx11.tar.gz/md5/a5ceb1385feb62f5ca3e8a6ad6531ad0 +LLVM.v11.0.1+0.armv7l-linux-gnueabihf-cxx11.tar.gz/sha512/13ee40541029344c6f75a674c15aa0205d00dcbd1eca675e11f2ac1fb15a7f9624cfc9f8e26ab792f146b98362e981e63accb3217791b7260bbdb61aa84ef00c +LLVM.v11.0.1+0.armv7l-linux-musleabihf-cxx03.tar.gz/md5/bbb55319cd6163998b6fe36b2eeef4db +LLVM.v11.0.1+0.armv7l-linux-musleabihf-cxx03.tar.gz/sha512/398c6a1836bd32467edc6572b409656a675c75917b097095c3d8bb33d13f3fc0b2c2331d7f5d150c4744f68a450fa6a5184f4d662a0cc4a7ef7152c81fd444e2 +LLVM.v11.0.1+0.armv7l-linux-musleabihf-cxx11.tar.gz/md5/1ed476e3ebc4db6fb0b9ea218eb11558 +LLVM.v11.0.1+0.armv7l-linux-musleabihf-cxx11.tar.gz/sha512/e736bf84fe6180fa510a070f7f9591e8fad16300bc4e8dd1d982df2806de7061c31f4d152eb1cba9cdd9e41b074a0e65536e2fbd336a93f493bf1e13a0321016 +LLVM.v11.0.1+0.i686-linux-gnu-cxx03.tar.gz/md5/264b00ad61ee082e0ae68243532b9d63 +LLVM.v11.0.1+0.i686-linux-gnu-cxx03.tar.gz/sha512/d5307a36c404d1b8a9164e89eabb220554423960d318c6ccb64feadb9900f1f00a4ba3a3400ea136a5c5b08efab928fbe8e998a896027c1261fcec6fc99ddc1d +LLVM.v11.0.1+0.i686-linux-gnu-cxx11.tar.gz/md5/a774e0bb1d7c94dd4e70cb59845979a3 +LLVM.v11.0.1+0.i686-linux-gnu-cxx11.tar.gz/sha512/ff9fb1d986009df355e6c20472e819183fae939a60afcbbab50fb4a047d107ce946ba32aeb55c84079a8cfef92f85c1e0ced3976a715ae1b4f204aa7d69efd8a +LLVM.v11.0.1+0.i686-linux-musl-cxx03.tar.gz/md5/88a0c5300850fbbb9e2be2fe0bcf377b +LLVM.v11.0.1+0.i686-linux-musl-cxx03.tar.gz/sha512/719e23389c70be70f4401cef07fcf1cdc51e670a3d6ae596088fc0c7994c3bf835c73e544e65cd92ac41fb08999fcbe8fa20d89c3b4242fbd65a127ffed3dd31 +LLVM.v11.0.1+0.i686-linux-musl-cxx11.tar.gz/md5/63bd2a87830c152e58e980c27bb8fc9c +LLVM.v11.0.1+0.i686-linux-musl-cxx11.tar.gz/sha512/d7d50e66ff2176ca400910c03d7ddfc34afb7e9b4c7dc785b55fef8b1a49ccc933a2857a5a0315029e878bd0a8840c6043d6d1220a01ef252218ba14ba9c9b54 +LLVM.v11.0.1+0.i686-w64-mingw32-cxx03.tar.gz/md5/367672d3155efbd4b11aa98ba6ba0c6a +LLVM.v11.0.1+0.i686-w64-mingw32-cxx03.tar.gz/sha512/577ffa7a06fb95b590c4670a02d9e98a3260c407f25e8772b7f8cfb9c9f1cd460535aeab980279145a22b0d8d92eb886ef8229c98fc4b65ca2f665c5cc262391 +LLVM.v11.0.1+0.i686-w64-mingw32-cxx11.tar.gz/md5/0251f63dec58d97ef2413011c1d48400 +LLVM.v11.0.1+0.i686-w64-mingw32-cxx11.tar.gz/sha512/3c0f9da5b60035ce8465113ec543e4d1cf16ddfa6ed288a4480f3df5f324d96b8a1fb6ea96d79dee1c6de2a886853c2e80968ad07e7316ed74ed55d989438420 +LLVM.v11.0.1+0.powerpc64le-linux-gnu-cxx03.tar.gz/md5/a7030f4c9bd9c10400c76da7171393f9 +LLVM.v11.0.1+0.powerpc64le-linux-gnu-cxx03.tar.gz/sha512/26ae774eaed261d8fdce36bf6fe2c6d0ac4e1a4af74b0cf6b26cc474c7c1579746e16a1ce2f0b4e080a9af1ad26bc17bd4e9d87b806d49da58e4947be5cdccf1 +LLVM.v11.0.1+0.powerpc64le-linux-gnu-cxx11.tar.gz/md5/94884b7d1b30a79065e12d096c48f717 +LLVM.v11.0.1+0.powerpc64le-linux-gnu-cxx11.tar.gz/sha512/4bd281cf3a8af6c76436d04dfc3812c3d56d0e69028cffe39111a0389ea7bdb916065d742dfbd7e5268d45591abe3c26682171ee77c254d084167a547c54637b +LLVM.v11.0.1+0.x86_64-apple-darwin.tar.gz/md5/a281080d225f0321aa7b9a924064e67d +LLVM.v11.0.1+0.x86_64-apple-darwin.tar.gz/sha512/9fc77ab5a555b86d256e8fd86031d58aaafd38cdcd3d579cd0d7041b529bd7dfa6538fc459568049545cb7f192f6d89eb1b88aa81e4595799895c4284cedb97c +LLVM.v11.0.1+0.x86_64-linux-gnu-cxx03.tar.gz/md5/2f34a3438aa0cd283cb7ad37cc3983d7 +LLVM.v11.0.1+0.x86_64-linux-gnu-cxx03.tar.gz/sha512/1e1854b654784d9a6691e40e222f53e7647ec81e095d4e4263a2824f8cbd00554826a24557684f84c1807d7614c231387a81600a432e1c7580c9e63b6b956ee8 +LLVM.v11.0.1+0.x86_64-linux-gnu-cxx11.tar.gz/md5/174ee46ac15dc748967e11e5c669213f +LLVM.v11.0.1+0.x86_64-linux-gnu-cxx11.tar.gz/sha512/325f4fea92edb982ce0a705ae5113684bcf5ad5d3a8a323edea3885fa6c84a7a668e660a0e24032fe63a2eb8c504128b17488aa2314e6c4fc898ae5907c34824 +LLVM.v11.0.1+0.x86_64-linux-musl-cxx03.tar.gz/md5/f6a66b26dc73de147ff2f93897250b47 +LLVM.v11.0.1+0.x86_64-linux-musl-cxx03.tar.gz/sha512/403d101e35db30b3afe6f792bc8fd56fe3ca08d2a11b36243afa8f40a3889a8f0428fa0576e35385dc58bc2580163f8fbc00398d1ee82da16028a4c443c2ee2d +LLVM.v11.0.1+0.x86_64-linux-musl-cxx11.tar.gz/md5/3d728c8e73961909b0af13a40d9e359b +LLVM.v11.0.1+0.x86_64-linux-musl-cxx11.tar.gz/sha512/3284e85e7d382ef857ccb6504d50588f679aebebc96da83b4d9cd37cb15d8c525b36b4772a9b9fea7f25453ca6a75e94084194f1167dbf6337c6bc52a0216d60 +LLVM.v11.0.1+0.x86_64-unknown-freebsd.tar.gz/md5/895006761bc396e2bfc29cb2838e34b7 +LLVM.v11.0.1+0.x86_64-unknown-freebsd.tar.gz/sha512/9b10e02d2089fb48f652d3aad003a1ca0a73f89807baafa2de08c2aba886fc98b13b16ae1e4dcc739d5f697a2e09052a082ed1615d5eee62254a524c2348cffc +LLVM.v11.0.1+0.x86_64-w64-mingw32-cxx03.tar.gz/md5/4f043db38279e19cc34a96a4997cb91f +LLVM.v11.0.1+0.x86_64-w64-mingw32-cxx03.tar.gz/md5/4f043db38279e19cc34a96a4997cb91f +LLVM.v11.0.1+0.x86_64-w64-mingw32-cxx03.tar.gz/sha512/cdb8470d8d6100433367f8dec73861a2d9f5bf5570e21ac9fd415a03b9dd8aac33ca8c508dc42a4a36e52f7308370543c06880e80cf3cb33770fe61dbb65a32e +LLVM.v11.0.1+0.x86_64-w64-mingw32-cxx11.tar.gz/md5/9e8c2570ae870165b4febd2cf51077d7 +LLVM.v11.0.1+0.x86_64-w64-mingw32-cxx11.tar.gz/md5/9e8c2570ae870165b4febd2cf51077d7 +LLVM.v11.0.1+0.x86_64-w64-mingw32-cxx11.tar.gz/sha512/56c15ace14d7dceca059ef680873a2fe6a5b889c1d6a0869860d8eddef6f4bc746ffa5996950515717efe2693f3532a95bfbe089b28c0d0edc299bc9dca8a735 diff --git a/stdlib/libLLVM_jll/Project.toml b/stdlib/libLLVM_jll/Project.toml index 5d77c213c39b7..3c1ffe0b35e0f 100644 --- a/stdlib/libLLVM_jll/Project.toml +++ b/stdlib/libLLVM_jll/Project.toml @@ -1,6 +1,6 @@ name = "libLLVM_jll" uuid = "8f36deef-c2a5-5394-99ed-8e07531fb29a" -version = "11.0.0+7" +version = "11.0.1+0" [deps] Libdl = "8f399da3-3557-5675-b5ff-fb832c97cbdb" From 7e2e822c4bed01f6ef43aeb5a32126289051b92f Mon Sep 17 00:00:00 2001 From: Valentin Churavy Date: Tue, 8 Dec 2020 12:31:02 -0500 Subject: [PATCH 20/78] [Make] remove BINARYBUILDER_LLVM_ASSERTS and use LLVM_ASSERTIONS instead (cherry picked from commit 29ff1b71c61af25ea48e7b88f86cb0bfa2765e6e) --- Make.inc | 10 ---------- contrib/refresh_checksums.mk | 2 +- deps/llvm.mk | 2 +- src/debuginfo.cpp | 2 +- 4 files changed, 3 insertions(+), 13 deletions(-) diff --git a/Make.inc b/Make.inc index 0f08ac5e33636..f79a2a12f74b8 100644 --- a/Make.inc +++ b/Make.inc @@ -454,10 +454,6 @@ CXX_DISABLE_ASSERTION := -DJL_NDEBUG DISABLE_ASSERTIONS := -DNDEBUG -DJL_NDEBUG endif -ifeq ($(LLVM_ASSERTIONS),0) -CXX_DISABLE_ASSERTION += -DNDEBUG -endif - # Compiler specific stuff ifeq ($(USEMSVC), 1) @@ -1200,12 +1196,6 @@ endef $(foreach proj,$(BB_PROJECTS),$(eval $(call SET_BB_DEFAULT,$(proj)))) - -# Use the Assertions build -BINARYBUILDER_LLVM_ASSERTS ?= 0 - - - # OS specific stuff # install_name_tool diff --git a/contrib/refresh_checksums.mk b/contrib/refresh_checksums.mk index 3fddb7a66423f..38db1549e13e9 100644 --- a/contrib/refresh_checksums.mk +++ b/contrib/refresh_checksums.mk @@ -39,7 +39,7 @@ endef # If $(2) == `src`, this will generate a `USE_BINARYBUILDER_FOO=0` make flag # It will also generate a `FOO_BB_TRIPLET=$(2)` make flag. define make_flags -USE_BINARYBUILDER=$(if $(filter src,$(2)),0,1) $(call makevar,$(1))_BB_TRIPLET=$(if $(filter src,$(2)),,$(2)) BINARYBUILDER_LLVM_ASSERTS=$(if $(filter assert,$(3)),1,0) DEPS_GIT=0 +USE_BINARYBUILDER=$(if $(filter src,$(2)),0,1) $(call makevar,$(1))_BB_TRIPLET=$(if $(filter src,$(2)),,$(2)) LLVM_ASSERTIONS=$(if $(filter assert,$(3)),1,0) DEPS_GIT=0 endef # checksum_bb_dep takes in (name, triplet), and generates a `checksum-$(1)-$(2)` target. diff --git a/deps/llvm.mk b/deps/llvm.mk index 96a9812441ad1..729e7867565fd 100644 --- a/deps/llvm.mk +++ b/deps/llvm.mk @@ -632,7 +632,7 @@ endif else # USE_BINARYBUILDER_LLVM # We provide a way to subversively swap out which LLVM JLL we pull artifacts from -ifeq ($(BINARYBUILDER_LLVM_ASSERTS), 1) +ifeq ($(LLVM_ASSERTIONS), 1) LLVM_JLL_DOWNLOAD_NAME := libLLVM_assert LLVM_JLL_VER := $(LLVM_ASSERT_JLL_VER) endif diff --git a/src/debuginfo.cpp b/src/debuginfo.cpp index 6e93d85e73ab1..cc7993390e0ee 100644 --- a/src/debuginfo.cpp +++ b/src/debuginfo.cpp @@ -974,10 +974,10 @@ static objfileentry_t &find_object_file(uint64_t fbase, StringRef fname) JL_NOTS DebugInfo(errorCodeToError(std::make_error_code(std::errc::no_such_file_or_directory))); // Can't find a way to construct an empty Expected object // that can be ignored. - ignoreError(DebugInfo); if (fname.substr(sep + 1) != info.filename) { debuginfopath = fname.substr(0, sep + 1).str(); debuginfopath += info.filename; + ignoreError(DebugInfo); DebugInfo = openDebugInfo(debuginfopath, info); } if (!DebugInfo) { From fa6e44bb4031a7d179692c2f500ccc3579633c3d Mon Sep 17 00:00:00 2001 From: Valentin Churavy Date: Fri, 15 Jan 2021 19:30:08 -0500 Subject: [PATCH 21/78] [CCall] Don't ZExt half (cherry picked from commit e762db8ab617e89dd935f9a9aaaa54d2e6ea8f69) --- src/ccall.cpp | 2 +- test/llvmpasses/llvmcall.jl | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ccall.cpp b/src/ccall.cpp index 8ef419d18bf84..ed8f98d96df2c 100644 --- a/src/ccall.cpp +++ b/src/ccall.cpp @@ -1053,7 +1053,7 @@ std::string generate_func_sig(const char *fname) // see pull req #978. need to annotate signext/zeroext for // small integer arguments. jl_datatype_t *bt = (jl_datatype_t*)tti; - if (jl_datatype_size(bt) < 4) { + if (jl_datatype_size(bt) < 4 && bt != jl_float16_type) { if (jl_signed_type && jl_subtype(tti, (jl_value_t*)jl_signed_type)) ab.addAttribute(Attribute::SExt); else diff --git a/test/llvmpasses/llvmcall.jl b/test/llvmpasses/llvmcall.jl index 7da2dbec36a8f..687abe0a8cd46 100644 --- a/test/llvmpasses/llvmcall.jl +++ b/test/llvmpasses/llvmcall.jl @@ -13,7 +13,7 @@ end @generated foo(x)=:(ccall("extern foo", llvmcall, $x, ($x,), x)) bar(x) = ntuple(i -> VecElement{Float16}(x[i]), 2) -# CHECK: call half @foo(half zeroext %{{[0-9]+}}) +# CHECK: call half @foo(half %{{[0-9]+}}) emit(foo, Float16) # CHECK: call [2 x half] @foo([2 x half] %{{[0-9]+}}) From 55cd5ef6d08cccb2b7e42aab8a6df95acbc4975d Mon Sep 17 00:00:00 2001 From: Shuhei Kadowaki <40514306+aviatesk@users.noreply.github.com> Date: Tue, 15 Dec 2020 02:55:37 +0900 Subject: [PATCH 22/78] fix erroneous code path within `show_sym` (#38830) fix erroneous code path within `show_sym` currently, `show_sym` can recur into `show(::IO, String)`, but it's a bit "erroneous" since `is_syntactic_operator(::String)` is not defined. (cherry picked from commit 6322b8c8d5a3d9666a186d9073804f14d13d22d3) --- base/show.jl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/base/show.jl b/base/show.jl index 814184c810af0..4a727acfd7993 100644 --- a/base/show.jl +++ b/base/show.jl @@ -1434,12 +1434,12 @@ end # Print `sym` as it would appear as an identifier name in code # * Print valid identifiers & operators literally; also macros names if allow_macroname=true # * Escape invalid identifiers with var"" syntax -function show_sym(io::IO, sym; allow_macroname=false) +function show_sym(io::IO, sym::Symbol; allow_macroname=false) if is_valid_identifier(sym) print(io, sym) elseif allow_macroname && (sym_str = string(sym); startswith(sym_str, '@')) print(io, '@') - show_sym(io, sym_str[2:end]) + show_sym(io, Symbol(sym_str[2:end])) else print(io, "var", repr(string(sym))) end From 476209e3540819e377146c931ec114aad867918c Mon Sep 17 00:00:00 2001 From: Elliot Saba Date: Mon, 11 Jan 2021 14:32:53 -0800 Subject: [PATCH 23/78] Fix `p7zip_jll` environment setup (#39155) (cherry picked from commit 0f8eaa66ee04ae4198a8dab78976a0875853d83f) --- stdlib/p7zip_jll/src/p7zip_jll.jl | 48 +++++++++++++++++++++++++++++-- 1 file changed, 45 insertions(+), 3 deletions(-) diff --git a/stdlib/p7zip_jll/src/p7zip_jll.jl b/stdlib/p7zip_jll/src/p7zip_jll.jl index cbefc20803c5e..c3b31cee68435 100644 --- a/stdlib/p7zip_jll/src/p7zip_jll.jl +++ b/stdlib/p7zip_jll/src/p7zip_jll.jl @@ -21,9 +21,51 @@ else const p7zip_exe = "7z" end -# These functions look a little strange, but they're mimicking the JLLWrappers signature -p7zip(f::Function; adjust_PATH::Bool = true, adjust_LIBPATH::Bool = true) = f(p7zip_path) -p7zip(; adjust_PATH::Bool = true, adjust_LIBPATH::Bool = true) = Cmd([p7zip_path]) +if Sys.iswindows() + const LIBPATH_env = "PATH" + const LIBPATH_default = "" + const pathsep = ';' +elseif Sys.isapple() + const LIBPATH_env = "DYLD_FALLBACK_LIBRARY_PATH" + const LIBPATH_default = "~/lib:/usr/local/lib:/lib:/usr/lib" + const pathsep = ':' +else + const LIBPATH_env = "LD_LIBRARY_PATH" + const LIBPATH_default = "" + const pathsep = ':' +end + +function adjust_ENV!(env::Dict, PATH::String, LIBPATH::String, adjust_PATH::Bool, adjust_LIBPATH::Bool) + if adjust_LIBPATH + LIBPATH_base = get(env, LIBPATH_env, expanduser(LIBPATH_default)) + if !isempty(LIBPATH_base) + env[LIBPATH_env] = string(LIBPATH, pathsep, LIBPATH_base) + else + env[LIBPATH_env] = LIBPATH + end + end + if adjust_PATH && (LIBPATH_env != "PATH" || !adjust_LIBPATH) + if adjust_PATH + if !isempty(get(env, "PATH", "")) + env["PATH"] = string(PATH, pathsep, env["PATH"]) + else + env["PATH"] = PATH + end + end + end + return env +end + +function p7zip(f::Function; adjust_PATH::Bool = true, adjust_LIBPATH::Bool = true) + env = adjust_ENV!(copy(ENV), PATH[], LIBPATH[], adjust_PATH, adjust_LIBPATH) + withenv(env...) do + return f(p7zip_path) + end +end +function p7zip(; adjust_PATH::Bool = true, adjust_LIBPATH::Bool = true) + env = adjust_ENV!(copy(ENV), PATH[], LIBPATH[], adjust_PATH, adjust_LIBPATH) + return Cmd(Cmd([p7zip_path]); env) +end function init_p7zip_path() # Prefer our own bundled p7zip, but if we don't have one, pick it up off of the PATH From 15008b18ee703244513277ec3408614bf9ad05fc Mon Sep 17 00:00:00 2001 From: Daniel Karrasch Date: Tue, 12 Jan 2021 16:01:16 +0100 Subject: [PATCH 24/78] [WIP] Speed up dense-sparse matmul (#38876) * Speed up dense-sparse matmul * add one at-simd, minor edits * improve A_mul_Bq for dense-sparse * revert ineffective changes * shift at-inbounds annotation (cherry picked from commit a3369df2644b0865b74381869b0f5e50d93d4e44) --- stdlib/SparseArrays/src/linalg.jl | 158 ++++++++++++------------------ 1 file changed, 65 insertions(+), 93 deletions(-) diff --git a/stdlib/SparseArrays/src/linalg.jl b/stdlib/SparseArrays/src/linalg.jl index 37d95b12a8978..25ddb3222f6b2 100644 --- a/stdlib/SparseArrays/src/linalg.jl +++ b/stdlib/SparseArrays/src/linalg.jl @@ -34,10 +34,10 @@ function mul!(C::StridedVecOrMat, A::AbstractSparseMatrixCSC, B::Union{StridedVe if β != 1 β != 0 ? rmul!(C, β) : fill!(C, zero(eltype(C))) end - for k = 1:size(C, 2) - @inbounds for col = 1:size(A, 2) + for k in 1:size(C, 2) + @inbounds for col in 1:size(A, 2) αxj = B[col,k] * α - for j = getcolptr(A)[col]:(getcolptr(A)[col + 1] - 1) + for j in nzrange(A, col) C[rv[j], k] += nzv[j]*αxj end end @@ -49,67 +49,38 @@ end *(A::SparseMatrixCSCUnion{TA}, B::AdjOrTransStridedOrTriangularMatrix{Tx}) where {TA,Tx} = (T = promote_op(matprod, TA, Tx); mul!(similar(B, T, (size(A, 1), size(B, 2))), A, B, true, false)) -function mul!(C::StridedVecOrMat, adjA::Adjoint{<:Any,<:AbstractSparseMatrixCSC}, B::Union{StridedVector,AdjOrTransStridedOrTriangularMatrix}, α::Number, β::Number) - A = adjA.parent - size(A, 2) == size(C, 1) || throw(DimensionMismatch()) - size(A, 1) == size(B, 1) || throw(DimensionMismatch()) - size(B, 2) == size(C, 2) || throw(DimensionMismatch()) - nzv = nonzeros(A) - rv = rowvals(A) - if β != 1 - β != 0 ? rmul!(C, β) : fill!(C, zero(eltype(C))) - end - for k = 1:size(C, 2) - @inbounds for col = 1:size(A, 2) - tmp = zero(eltype(C)) - for j = getcolptr(A)[col]:(getcolptr(A)[col + 1] - 1) - tmp += adjoint(nzv[j])*B[rv[j],k] +for (T, t) in ((Adjoint, adjoint), (Transpose, transpose)) + @eval function mul!(C::StridedVecOrMat, xA::$T{<:Any,<:AbstractSparseMatrixCSC}, B::Union{StridedVector,AdjOrTransStridedOrTriangularMatrix}, α::Number, β::Number) + A = xA.parent + size(A, 2) == size(C, 1) || throw(DimensionMismatch()) + size(A, 1) == size(B, 1) || throw(DimensionMismatch()) + size(B, 2) == size(C, 2) || throw(DimensionMismatch()) + nzv = nonzeros(A) + rv = rowvals(A) + if β != 1 + β != 0 ? rmul!(C, β) : fill!(C, zero(eltype(C))) + end + for k in 1:size(C, 2) + @inbounds for col in 1:size(A, 2) + tmp = zero(eltype(C)) + for j in nzrange(A, col) + tmp += $t(nzv[j])*B[rv[j],k] + end + C[col,k] += tmp * α end - C[col,k] += tmp * α end + C end - C end *(adjA::Adjoint{<:Any,<:AbstractSparseMatrixCSC}, x::StridedVector{Tx}) where {Tx} = (T = promote_op(matprod, eltype(adjA), Tx); mul!(similar(x, T, size(adjA, 1)), adjA, x, true, false)) *(adjA::Adjoint{<:Any,<:AbstractSparseMatrixCSC}, B::AdjOrTransStridedOrTriangularMatrix) = (T = promote_op(matprod, eltype(adjA), eltype(B)); mul!(similar(B, T, (size(adjA, 1), size(B, 2))), adjA, B, true, false)) - -function mul!(C::StridedVecOrMat, transA::Transpose{<:Any,<:AbstractSparseMatrixCSC}, B::Union{StridedVector,AdjOrTransStridedOrTriangularMatrix}, α::Number, β::Number) - A = transA.parent - size(A, 2) == size(C, 1) || throw(DimensionMismatch()) - size(A, 1) == size(B, 1) || throw(DimensionMismatch()) - size(B, 2) == size(C, 2) || throw(DimensionMismatch()) - nzv = nonzeros(A) - rv = rowvals(A) - if β != 1 - β != 0 ? rmul!(C, β) : fill!(C, zero(eltype(C))) - end - for k = 1:size(C, 2) - @inbounds for col = 1:size(A, 2) - tmp = zero(eltype(C)) - for j = getcolptr(A)[col]:(getcolptr(A)[col + 1] - 1) - tmp += transpose(nzv[j])*B[rv[j],k] - end - C[col,k] += tmp * α - end - end - C -end *(transA::Transpose{<:Any,<:AbstractSparseMatrixCSC}, x::StridedVector{Tx}) where {Tx} = (T = promote_op(matprod, eltype(transA), Tx); mul!(similar(x, T, size(transA, 1)), transA, x, true, false)) *(transA::Transpose{<:Any,<:AbstractSparseMatrixCSC}, B::AdjOrTransStridedOrTriangularMatrix) = (T = promote_op(matprod, eltype(transA), eltype(B)); mul!(similar(B, T, (size(transA, 1), size(B, 2))), transA, B, true, false)) -# For compatibility with dense multiplication API. Should be deleted when dense multiplication -# API is updated to follow BLAS API. -mul!(C::StridedVecOrMat, A::AbstractSparseMatrixCSC, B::Union{StridedVector,AdjOrTransStridedOrTriangularMatrix}) = - mul!(C, A, B, true, false) -mul!(C::StridedVecOrMat, adjA::Adjoint{<:Any,<:AbstractSparseMatrixCSC}, B::Union{StridedVector,AdjOrTransStridedOrTriangularMatrix}) = - mul!(C, adjA, B, true, false) -mul!(C::StridedVecOrMat, transA::Transpose{<:Any,<:AbstractSparseMatrixCSC}, B::Union{StridedVector,AdjOrTransStridedOrTriangularMatrix}) = - mul!(C, transA, B, true, false) - function mul!(C::StridedVecOrMat, X::AdjOrTransStridedOrTriangularMatrix, A::AbstractSparseMatrixCSC, α::Number, β::Number) mX, nX = size(X) nX == size(A, 1) || throw(DimensionMismatch()) @@ -120,49 +91,50 @@ function mul!(C::StridedVecOrMat, X::AdjOrTransStridedOrTriangularMatrix, A::Abs if β != 1 β != 0 ? rmul!(C, β) : fill!(C, zero(eltype(C))) end - @inbounds for multivec_row=1:mX, col = 1:size(A, 2), k=getcolptr(A)[col]:(getcolptr(A)[col+1]-1) - C[multivec_row, col] += α * X[multivec_row, rv[k]] * nzv[k] # perhaps suboptimal position of α? + if X isa StridedOrTriangularMatrix + @inbounds for col in 1:size(A, 2), k in nzrange(A, col) + Aiα = nzv[k] * α + rvk = rv[k] + @simd for multivec_row in 1:mX + C[multivec_row, col] += X[multivec_row, rvk] * Aiα + end + end + else # X isa Adjoint or Transpose + for multivec_row in 1:mX, col in 1:size(A, 2) + @inbounds for k in nzrange(A, col) + C[multivec_row, col] += X[multivec_row, rv[k]] * nzv[k] * α + end + end end C end *(X::AdjOrTransStridedOrTriangularMatrix, A::SparseMatrixCSCUnion{TvA}) where {TvA} = (T = promote_op(matprod, eltype(X), TvA); mul!(similar(X, T, (size(X, 1), size(A, 2))), X, A, true, false)) -function mul!(C::StridedVecOrMat, X::AdjOrTransStridedOrTriangularMatrix, adjA::Adjoint{<:Any,<:AbstractSparseMatrixCSC}, α::Number, β::Number) - A = adjA.parent - mX, nX = size(X) - nX == size(A, 2) || throw(DimensionMismatch()) - mX == size(C, 1) || throw(DimensionMismatch()) - size(A, 1) == size(C, 2) || throw(DimensionMismatch()) - rv = rowvals(A) - nzv = nonzeros(A) - if β != 1 - β != 0 ? rmul!(C, β) : fill!(C, zero(eltype(C))) - end - @inbounds for col = 1:size(A, 2), k=getcolptr(A)[col]:(getcolptr(A)[col+1]-1), multivec_col=1:mX - C[multivec_col, rv[k]] += α * X[multivec_col, col] * adjoint(nzv[k]) # perhaps suboptimal position of α? +for (T, t) in ((Adjoint, adjoint), (Transpose, transpose)) + @eval function mul!(C::StridedVecOrMat, X::AdjOrTransStridedOrTriangularMatrix, xA::$T{<:Any,<:AbstractSparseMatrixCSC}, α::Number, β::Number) + A = xA.parent + mX, nX = size(X) + nX == size(A, 2) || throw(DimensionMismatch()) + mX == size(C, 1) || throw(DimensionMismatch()) + size(A, 1) == size(C, 2) || throw(DimensionMismatch()) + rv = rowvals(A) + nzv = nonzeros(A) + if β != 1 + β != 0 ? rmul!(C, β) : fill!(C, zero(eltype(C))) + end + @inbounds for col in 1:size(A, 2), k in nzrange(A, col) + Aiα = $t(nzv[k]) * α + rvk = rv[k] + @simd for multivec_col in 1:mX + C[multivec_col, rvk] += X[multivec_col, col] * Aiα + end + end + C end - C end *(X::AdjOrTransStridedOrTriangularMatrix, adjA::Adjoint{<:Any,<:AbstractSparseMatrixCSC}) = (T = promote_op(matprod, eltype(X), eltype(adjA)); mul!(similar(X, T, (size(X, 1), size(adjA, 2))), X, adjA, true, false)) - -function mul!(C::StridedVecOrMat, X::AdjOrTransStridedOrTriangularMatrix, transA::Transpose{<:Any,<:AbstractSparseMatrixCSC}, α::Number, β::Number) - A = transA.parent - mX, nX = size(X) - nX == size(A, 2) || throw(DimensionMismatch()) - mX == size(C, 1) || throw(DimensionMismatch()) - size(A, 1) == size(C, 2) || throw(DimensionMismatch()) - rv = rowvals(A) - nzv = nonzeros(A) - if β != 1 - β != 0 ? rmul!(C, β) : fill!(C, zero(eltype(C))) - end - @inbounds for col = 1:size(A, 2), k=getcolptr(A)[col]:(getcolptr(A)[col+1]-1), multivec_col=1:mX - C[multivec_col, rv[k]] += α * X[multivec_col, col] * transpose(nzv[k]) # perhaps suboptimal position of α? - end - C -end *(X::AdjOrTransStridedOrTriangularMatrix, transA::Transpose{<:Any,<:AbstractSparseMatrixCSC}) = (T = promote_op(matprod, eltype(X), eltype(transA)); mul!(similar(X, T, (size(X, 1), size(transA, 2))), X, transA, true, false)) @@ -896,7 +868,7 @@ function ldiv!(D::Diagonal{T}, A::AbstractSparseMatrixCSC{T}) where {T} for i=1:length(b) iszero(b[i]) && throw(SingularException(i)) end - @inbounds for col = 1:size(A, 2), p = getcolptr(A)[col]:(getcolptr(A)[col + 1] - 1) + @inbounds for col in 1:size(A, 2), p in nzrange(A, col) nonz[p] = b[Arowval[p]] \ nonz[p] end A @@ -916,7 +888,7 @@ function triu(S::AbstractSparseMatrixCSC{Tv,Ti}, k::Integer=0) where {Tv,Ti} colptr[col] = 1 end for col = max(k+1,1) : n - for c1 = getcolptr(S)[col] : getcolptr(S)[col+1]-1 + for c1 in nzrange(S, col) rowvals(S)[c1] > col - k && break nnz += 1 end @@ -927,7 +899,7 @@ function triu(S::AbstractSparseMatrixCSC{Tv,Ti}, k::Integer=0) where {Tv,Ti} A = SparseMatrixCSC(m, n, colptr, rowval, nzval) for col = max(k+1,1) : n c1 = getcolptr(S)[col] - for c2 = getcolptr(A)[col] : getcolptr(A)[col+1]-1 + for c2 in nzrange(A, col) rowvals(A)[c2] = rowvals(S)[c1] nonzeros(A)[c2] = nonzeros(S)[c1] c1 += 1 @@ -981,7 +953,7 @@ function sparse_diff1(S::AbstractSparseMatrixCSC{Tv,Ti}) where {Tv,Ti} for col = 1 : n last_row = 0 last_val = 0 - for k = getcolptr(S)[col] : getcolptr(S)[col+1]-1 + for k in nzrange(S, col) row = rowvals(S)[k] val = nonzeros(S)[k] if row > 1 @@ -1124,7 +1096,7 @@ function opnorm(A::AbstractSparseMatrixCSC, p::Real=2) nA::Tsum = 0 for j=1:n colSum::Tsum = 0 - for i = getcolptr(A)[j]:getcolptr(A)[j+1]-1 + for i in nzrange(A, j) colSum += abs(nonzeros(A)[i]) end nA = max(nA, colSum) @@ -1469,7 +1441,7 @@ function mul!(C::AbstractSparseMatrixCSC, A::AbstractSparseMatrixCSC, D::Diagona Cnzval = nonzeros(C) Anzval = nonzeros(A) resize!(Cnzval, length(Anzval)) - for col = 1:n, p = getcolptr(A)[col]:(getcolptr(A)[col+1]-1) + for col in 1:n, p in nzrange(A, col) @inbounds Cnzval[p] = Anzval[p] * b[col] end C @@ -1484,7 +1456,7 @@ function mul!(C::AbstractSparseMatrixCSC, D::Diagonal, A::AbstractSparseMatrixCS Anzval = nonzeros(A) Arowval = rowvals(A) resize!(Cnzval, length(Anzval)) - for col = 1:n, p = getcolptr(A)[col]:(getcolptr(A)[col+1]-1) + for col in 1:n, p in nzrange(A, col) @inbounds Cnzval[p] = b[Arowval[p]] * Anzval[p] end C @@ -1520,7 +1492,7 @@ function rmul!(A::AbstractSparseMatrixCSC, D::Diagonal) m, n = size(A) (n == size(D, 1)) || throw(DimensionMismatch()) Anzval = nonzeros(A) - @inbounds for col = 1:n, p = getcolptr(A)[col]:(getcolptr(A)[col + 1] - 1) + @inbounds for col in 1:n, p in nzrange(A, col) Anzval[p] = Anzval[p] * D.diag[col] end return A @@ -1531,7 +1503,7 @@ function lmul!(D::Diagonal, A::AbstractSparseMatrixCSC) (m == size(D, 2)) || throw(DimensionMismatch()) Anzval = nonzeros(A) Arowval = rowvals(A) - @inbounds for col = 1:n, p = getcolptr(A)[col]:(getcolptr(A)[col + 1] - 1) + @inbounds for col in 1:n, p in nzrange(A, col) Anzval[p] = D.diag[Arowval[p]] * Anzval[p] end return A From 8714f1b38832eb133af190c3748eda43973cc94f Mon Sep 17 00:00:00 2001 From: Jeff Bezanson Date: Wed, 13 Jan 2021 16:55:21 -0500 Subject: [PATCH 25/78] fix return type for `jl_uncompress_argnames` (#39215) (cherry picked from commit 748841f1be6d8abee6137d5e8900d60778f40426) --- base/methodshow.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/base/methodshow.jl b/base/methodshow.jl index 2dfab099d9386..a1dc99ec47a08 100644 --- a/base/methodshow.jl +++ b/base/methodshow.jl @@ -51,7 +51,7 @@ function argtype_decl(env, n, @nospecialize(sig::DataType), i::Int, nargs, isva: end function method_argnames(m::Method) - argnames = ccall(:jl_uncompress_argnames, Vector{Any}, (Any,), m.slot_syms) + argnames = ccall(:jl_uncompress_argnames, Vector{Symbol}, (Any,), m.slot_syms) isempty(argnames) && return argnames return argnames[1:m.nargs] end From b004ef31e8e659241acb8b99e4ed62d8b4167121 Mon Sep 17 00:00:00 2001 From: Elliot Saba Date: Thu, 14 Jan 2021 11:35:34 -0800 Subject: [PATCH 26/78] [Artifacts]: Support `using Pkg.Artifacts` with LazyArtifacts (#39210) Just as we wanted to support users that used `using Pkg`, we should support users that use `using Pkg.Artifacts` with their lazy artifacts. This PR merely extends support to those users and adds regression tests. (cherry picked from commit 8fcf21a4a51a7b4e9eb26adc0ec339b8b72a0d1f) --- stdlib/Artifacts/src/Artifacts.jl | 14 ++++++++++---- stdlib/Artifacts/test/runtests.jl | 27 +++++++++++++++++++++------ 2 files changed, 31 insertions(+), 10 deletions(-) diff --git a/stdlib/Artifacts/src/Artifacts.jl b/stdlib/Artifacts/src/Artifacts.jl index fb59b4df82bb7..626e480377bb8 100644 --- a/stdlib/Artifacts/src/Artifacts.jl +++ b/stdlib/Artifacts/src/Artifacts.jl @@ -541,7 +541,9 @@ function _artifact_str(__module__, artifacts_toml, name, path_tail, artifact_dic meta = artifact_meta(name, artifact_dict, artifacts_toml; platform) if meta !== nothing && get(meta, "lazy", false) if lazyartifacts isa Module && isdefined(lazyartifacts, :ensure_artifact_installed) - nameof(lazyartifacts) === :Pkg && Base.depwarn("using Pkg instead of using LazyArtifacts is deprecated", :var"@artifact_str", force=true) + if nameof(lazyartifacts) in (:Pkg, :Artifacts) + Base.depwarn("using Pkg instead of using LazyArtifacts is deprecated", :var"@artifact_str", force=true) + end return jointail(lazyartifacts.ensure_artifact_installed(string(name), artifacts_toml; platform), path_tail) end error("Artifact $(repr(name)) is a lazy artifact; package developers must call `using LazyArtifacts` in $(__module__) before using lazy artifacts.") @@ -659,9 +661,13 @@ macro artifact_str(name, platform=nothing) Base.include_dependency(artifacts_toml) # Check if the user has provided `LazyArtifacts`, and thus supports lazy artifacts - lazyartifacts = isdefined(__module__, :LazyArtifacts) ? GlobalRef(__module__, :LazyArtifacts) : nothing - if lazyartifacts === nothing && isdefined(__module__, :Pkg) - lazyartifacts = GlobalRef(__module__, :Pkg) # deprecated + # If not, check to see if `Pkg` or `Pkg.Artifacts` has been imported. + lazyartifacts = nothing + for module_name in (:LazyArtifacts, :Pkg, :Artifacts) + if isdefined(__module__, module_name) + lazyartifacts = GlobalRef(__module__, module_name) + break + end end # If `name` is a constant, (and we're using the default `Platform`) we can actually load diff --git a/stdlib/Artifacts/test/runtests.jl b/stdlib/Artifacts/test/runtests.jl index 5e89f97bfba35..cd7d6beea32fb 100644 --- a/stdlib/Artifacts/test/runtests.jl +++ b/stdlib/Artifacts/test/runtests.jl @@ -134,12 +134,27 @@ end end @testset "@artifact_str install errors" begin - mktempdir() do tempdir - with_artifacts_directory(tempdir) do - ex = @test_throws ErrorException artifact"c_simple" - @test startswith(ex.value.msg, "Artifact \"c_simple\" was not installed correctly. ") - ex = @test_throws ErrorException artifact"socrates" - @test startswith(ex.value.msg, "Artifact \"socrates\" is a lazy artifact; ") + for imports in ("Artifacts, Pkg", "Pkg, Pkg.Artifacts", "Pkg.Artifacts") + mktempdir() do tempdir + with_artifacts_directory(tempdir) do + ex = @test_throws ErrorException artifact"c_simple" + @test startswith(ex.value.msg, "Artifact \"c_simple\" was not installed correctly. ") + ex = @test_throws ErrorException artifact"socrates" + @test startswith(ex.value.msg, "Artifact \"socrates\" is a lazy artifact; ") + + # Can install if we load `Pkg` or `Pkg.Artifacts` + anon = Module(:__anon__) + Core.eval(anon, Meta.parse("using $(imports), Test")) + # Ensure that we get the expected exception, since this test runs with --depwarn=error + Core.eval(anon, quote + try + artifact"socrates" + @assert false "this @artifact_str macro invocation should have failed!" + catch e + @test startswith("using Pkg instead of using LazyArtifacts is deprecated", e.msg) + end + end) + end end end end From 969cb57a19614cfaf6f7fe2a1390441f998bdd2a Mon Sep 17 00:00:00 2001 From: Tim Holy Date: Thu, 14 Jan 2021 16:51:25 -0600 Subject: [PATCH 27/78] Fix binaryplatforms `union` invalidation (#39251) DataStructures' `union(s::DataStructures.SparseIntSet, ns)` yields a bad invalidation. (cherry picked from commit 77865f2d86afb505b947bfadf44399bf032856e9) --- base/binaryplatforms.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/base/binaryplatforms.jl b/base/binaryplatforms.jl index 493cf446c906c..e93494fac0f7e 100644 --- a/base/binaryplatforms.jl +++ b/base/binaryplatforms.jl @@ -992,7 +992,7 @@ only available in macOS `v"10.11"` and later, or an artifact can state that it r a libstdc++ that is at least `v"3.4.22"`, etc... """ function platforms_match(a::AbstractPlatform, b::AbstractPlatform) - for k in union(keys(tags(a)), keys(tags(b))) + for k in union(keys(tags(a)::Dict{String,String}), keys(tags(b)::Dict{String,String})) ak = get(tags(a), k, nothing) bk = get(tags(b), k, nothing) From 908eea7f58560d34be260f145ca715131340e297 Mon Sep 17 00:00:00 2001 From: Jameson Nash Date: Thu, 14 Jan 2021 18:01:47 -0500 Subject: [PATCH 28/78] staticdata: fix unreferenced data assertion (#39246) Need to sequence operations correctly here. We need to first finish marking referenced data before we start deleting unreferenced data. This otherwise can lead to an assertion failure in some situations. Refs #37650 (cherry picked from commit f91bb749fb5b7498ee34ff2451a76870eeef90d6) --- src/staticdata.c | 49 ++++++++++++++++++++++++++++++++---------------- 1 file changed, 33 insertions(+), 16 deletions(-) diff --git a/src/staticdata.c b/src/staticdata.c index cdd675a5a6f44..96af1e8a114c6 100644 --- a/src/staticdata.c +++ b/src/staticdata.c @@ -1427,22 +1427,25 @@ static void jl_finalize_deserializer(jl_serializer_state *s) JL_GC_DISABLED -// --- helper functions --- - -// remove cached types not referenced in the stream -static int keep_type_cache_entry(jl_value_t *ti) +static void jl_scan_type_cache_gv(jl_serializer_state *s, jl_svec_t *cache) { - if (ptrhash_get(&backref_table, ti) != HT_NOTFOUND || jl_get_llvm_gv(native_functions, ti) != 0) - return 1; - if (jl_is_datatype(ti)) { - jl_value_t *singleton = ((jl_datatype_t*)ti)->instance; - if (singleton && (ptrhash_get(&backref_table, singleton) != HT_NOTFOUND || - jl_get_llvm_gv(native_functions, singleton) != 0)) - return 1; - } - return 0; + size_t l = jl_svec_len(cache), i; + for (i = 0; i < l; i++) { + jl_value_t *ti = jl_svecref(cache, i); + if (ti == NULL || ti == jl_nothing) + continue; + if (jl_get_llvm_gv(native_functions, ti)) { + jl_serialize_value(s, ti); + } + else if (jl_is_datatype(ti)) { + jl_value_t *singleton = ((jl_datatype_t*)ti)->instance; + if (singleton && jl_get_llvm_gv(native_functions, singleton)) + jl_serialize_value(s, ti); + } + } } +// remove cached types not referenced in the stream static void jl_prune_type_cache_hash(jl_svec_t *cache) { size_t l = jl_svec_len(cache), i; @@ -1450,7 +1453,7 @@ static void jl_prune_type_cache_hash(jl_svec_t *cache) jl_value_t *ti = jl_svecref(cache, i); if (ti == NULL || ti == jl_nothing) continue; - if (!keep_type_cache_entry(ti)) + if (ptrhash_get(&backref_table, ti) == HT_NOTFOUND) jl_svecset(cache, i, jl_nothing); } } @@ -1462,7 +1465,7 @@ static void jl_prune_type_cache_linear(jl_svec_t *cache) jl_value_t *ti = jl_svecref(cache, i); if (ti == NULL) break; - if (keep_type_cache_entry(ti)) + if (ptrhash_get(&backref_table, ti) != HT_NOTFOUND) jl_svecset(cache, ins++, ti); } if (i > ins) { @@ -1528,14 +1531,28 @@ static void jl_save_system_image_to_stream(ios_t *f) JL_GC_DISABLED jl_value_t *tag = *tags[i]; jl_serialize_value(&s, tag); } - // prune unused entries from built-in type caches + // step 1.1: check for values only found in the generated code + arraylist_t typenames; + arraylist_new(&typenames, 0); for (i = 0; i < backref_table.size; i += 2) { jl_typename_t *tn = (jl_typename_t*)backref_table.table[i]; if (tn == HT_NOTFOUND || !jl_is_typename(tn)) continue; + arraylist_push(&typenames, tn); + } + for (i = 0; i < typenames.len; i++) { + jl_typename_t *tn = (jl_typename_t*)typenames.items[i]; + jl_scan_type_cache_gv(&s, tn->cache); + jl_scan_type_cache_gv(&s, tn->linearcache); + } + // step 1.2: prune (garbage collect) some special weak references from + // built-in type caches + for (i = 0; i < typenames.len; i++) { + jl_typename_t *tn = (jl_typename_t*)typenames.items[i]; jl_prune_type_cache_hash(tn->cache); jl_prune_type_cache_linear(tn->linearcache); } + arraylist_free(&typenames); } { // step 2: build all the sysimg sections From 51653b4a7cb21ed8224caeea9661e3fa3f46c621 Mon Sep 17 00:00:00 2001 From: Jameson Nash Date: Thu, 14 Jan 2021 18:50:37 -0500 Subject: [PATCH 29/78] codegen: mostly fix uses of undefined PhiNodes (#39236) Unlike the rest of codegen, we permit PhiNodes to legally return undefined values, so we need to carefully skip those. Fixes #39232 (cherry picked from commit 051f47b414687f27c2297c55bc45b4a8edf711fb) --- src/codegen.cpp | 37 ++++++++++++++++++++++++++++--------- test/compiler/codegen.jl | 10 ++++++++++ 2 files changed, 38 insertions(+), 9 deletions(-) diff --git a/src/codegen.cpp b/src/codegen.cpp index 0327cab5a845d..2f565740975f2 100644 --- a/src/codegen.cpp +++ b/src/codegen.cpp @@ -1377,7 +1377,7 @@ static inline jl_cgval_t update_julia_type(jl_codectx_t &ctx, const jl_cgval_t & return jl_cgval_t(v, typ, NULL); } -static jl_cgval_t convert_julia_type(jl_codectx_t &ctx, const jl_cgval_t &v, jl_value_t *typ); +static jl_cgval_t convert_julia_type(jl_codectx_t &ctx, const jl_cgval_t &v, jl_value_t *typ, Value **skip=nullptr); // --- allocating local variables --- @@ -1438,7 +1438,7 @@ static void CreateConditionalAbort(IRBuilder<> &irbuilder, Value *test) #include "cgutils.cpp" -static jl_cgval_t convert_julia_type_union(jl_codectx_t &ctx, const jl_cgval_t &v, jl_value_t *typ) +static jl_cgval_t convert_julia_type_union(jl_codectx_t &ctx, const jl_cgval_t &v, jl_value_t *typ, Value **skip) { // previous value was a split union, compute new index, or box Value *new_tindex = ConstantInt::get(T_int8, 0x80); @@ -1463,6 +1463,10 @@ static jl_cgval_t convert_julia_type_union(jl_codectx_t &ctx, const jl_cgval_t & // new value doesn't need to be boxed // since it isn't part of the new union t = true; + if (skip) { + Value *skip1 = ctx.builder.CreateICmpEQ(tindex, ConstantInt::get(T_int8, idx)); + *skip = *skip ? ctx.builder.CreateOr(*skip, skip1) : skip1; + } } else { // will actually need to box this element @@ -1553,7 +1557,8 @@ static jl_cgval_t convert_julia_type_union(jl_codectx_t &ctx, const jl_cgval_t & if (v.V == NULL) { // v.V might be NULL if it was all ghost objects before return jl_cgval_t(boxv, NULL, false, typ, new_tindex); - } else { + } + else { Value *isboxv = ctx.builder.CreateIsNotNull(boxv); Value *slotv; MDNode *tbaa; @@ -1585,7 +1590,7 @@ static jl_cgval_t convert_julia_type_union(jl_codectx_t &ctx, const jl_cgval_t & // given a value marked with type `v.typ`, compute the mapping and/or boxing to return a value of type `typ` // TODO: should this set TIndex when trivial (such as 0x80 or concrete types) ? -static jl_cgval_t convert_julia_type(jl_codectx_t &ctx, const jl_cgval_t &v, jl_value_t *typ) +static jl_cgval_t convert_julia_type(jl_codectx_t &ctx, const jl_cgval_t &v, jl_value_t *typ, Value **skip) { if (typ == (jl_value_t*)jl_typeofbottom_type) return ghostValue(typ); // normalize TypeofBottom to Type{Union{}} @@ -1596,6 +1601,7 @@ static jl_cgval_t convert_julia_type(jl_codectx_t &ctx, const jl_cgval_t &v, jl_ return ghostValue(typ); Value *new_tindex = NULL; if (jl_is_concrete_type(typ)) { + assert(skip == nullptr && "skip only valid for union type return"); if (v.TIndex && !jl_is_pointerfree(typ)) { // discovered that this union-split type must actually be isboxed if (v.Vboxed) { @@ -1618,7 +1624,7 @@ static jl_cgval_t convert_julia_type(jl_codectx_t &ctx, const jl_cgval_t &v, jl_ else { bool makeboxed = false; if (v.TIndex) { - return convert_julia_type_union(ctx, v, typ); + return convert_julia_type_union(ctx, v, typ, skip); } else if (!v.isboxed && jl_is_uniontype(typ)) { // previous value was unboxed (leaftype), statically compute union tindex @@ -1638,6 +1644,11 @@ static jl_cgval_t convert_julia_type(jl_codectx_t &ctx, const jl_cgval_t &v, jl_ else if (jl_subtype(v.typ, typ)) { makeboxed = true; } + else if (skip) { + // undef + *skip = ConstantInt::get(T_int1, 1); + return jl_cgval_t(); + } else { // unreachable CreateTrap(ctx.builder); @@ -6922,12 +6933,16 @@ static std::pair, jl_llvm_functions_t> V = boxed(ctx, val); } else { + // XXX: must emit undef here (rather than a bitcast or + // load of val) if the runtime type of val isn't phiType V = emit_unbox(ctx, VN->getType(), val, phiType); } VN->addIncoming(V, ctx.builder.GetInsertBlock()); assert(!TindexN); } else if (dest && val.typ != (jl_value_t*)jl_bottom_type) { + // XXX: must emit undef here (rather than a bitcast or + // load of val) if the runtime type of val isn't phiType assert(lty != T_prjlvalue); (void)emit_unbox(ctx, lty, val, phiType, maybe_decay_tracked(ctx, dest)); } @@ -6960,7 +6975,10 @@ static std::pair, jl_llvm_functions_t> } } else { - jl_cgval_t new_union = convert_julia_type(ctx, val, phiType); + Value *skip = NULL; + // must compute skip here, since the runtime type of val might not be in phiType + // caution: only Phi and PhiC are allowed to do this (and maybe sometimes Pi) + jl_cgval_t new_union = convert_julia_type(ctx, val, phiType, &skip); RTindex = new_union.TIndex; if (!RTindex) { assert(new_union.isboxed && new_union.Vboxed && "convert_julia_type failed"); @@ -6975,11 +6993,12 @@ static std::pair, jl_llvm_functions_t> if (VN) V = new_union.Vboxed ? new_union.Vboxed : V_rnull; if (dest) { // basically, if !ghost union - Value *skip = NULL; - if (new_union.Vboxed != nullptr) - skip = ctx.builder.CreateICmpNE( // if 0x80 is set, we won't select this slot anyways + if (new_union.Vboxed != nullptr) { + Value *isboxed = ctx.builder.CreateICmpNE( // if 0x80 is set, we won't select this slot anyways ctx.builder.CreateAnd(RTindex, ConstantInt::get(T_int8, 0x80)), ConstantInt::get(T_int8, 0)); + skip = skip ? ctx.builder.CreateOr(isboxed, skip) : isboxed; + } emit_unionmove(ctx, dest, tbaa_arraybuf, new_union, skip); } } diff --git a/test/compiler/codegen.jl b/test/compiler/codegen.jl index 9b147fd0b571b..18401288a1c4a 100644 --- a/test/compiler/codegen.jl +++ b/test/compiler/codegen.jl @@ -512,3 +512,13 @@ let a = Core.Intrinsics.trunc_int(UInt24, 3), @test sizeof(Union{UInt8,UInt24}) == 3 @test sizeof(Base.RefValue{Union{UInt8,UInt24}}) == 8 end + +# issue #39232 +function f39232(a) + z = Any[] + for (i, ai) in enumerate(a) + push!(z, ai) + end + return z +end +@test f39232((+, -)) == Any[+, -] From 987c521f6e1645834fa2a22d37f2621cf8ca27dc Mon Sep 17 00:00:00 2001 From: Jeff Bezanson Date: Thu, 14 Jan 2021 21:51:03 -0500 Subject: [PATCH 30/78] fix #39259, leave `Main.ARGS` unresolved on startup (#39262) (cherry picked from commit 344f72ee9ca1fa61f3e912d576ee86a38f987465) --- contrib/generate_precompile.jl | 2 +- test/cmdlineargs.jl | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/contrib/generate_precompile.jl b/contrib/generate_precompile.jl index 1e5de2ca83c5a..41e7c16e49e89 100644 --- a/contrib/generate_precompile.jl +++ b/contrib/generate_precompile.jl @@ -1,6 +1,6 @@ # This file is a part of Julia. License is MIT: https://julialang.org/license -if isempty(ARGS) || ARGS[1] !== "0" +if isempty(Base.ARGS) || Base.ARGS[1] !== "0" Sys.__init_build() # Prevent this from being put into the Main namespace @eval Module() begin diff --git a/test/cmdlineargs.jl b/test/cmdlineargs.jl index 46c21f9bd3346..3a331d406d886 100644 --- a/test/cmdlineargs.jl +++ b/test/cmdlineargs.jl @@ -719,3 +719,6 @@ for yn in ("no", "yes") end @test v[2] end + +# issue #39259, shadowing `ARGS` +@test success(`$(Base.julia_cmd()) --startup-file=no -e 'ARGS=1'`) From 9ed54c96121a224020dc2bda661eb55753258dab Mon Sep 17 00:00:00 2001 From: Elliot Saba Date: Fri, 15 Jan 2021 08:57:36 -0800 Subject: [PATCH 31/78] Fix macos codesign workflow (#39152) We changed the permissions on executable files which caused this `find` to not find any of the actual binaries that we need to sign. Change it to instead find anything with any executable permissions set, rather than ones with exactly the permissions `0755` (cherry picked from commit f813257d24b4e6ca6ee94559aae826a6a7aca008) --- contrib/mac/app/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contrib/mac/app/Makefile b/contrib/mac/app/Makefile index a8c0c4d707c5c..edb6f868c9486 100644 --- a/contrib/mac/app/Makefile +++ b/contrib/mac/app/Makefile @@ -52,7 +52,7 @@ dmg/$(APP_NAME): startup.applescript julia.icns find $@/Contents/Resources/julia -type f -exec chmod -w {} \; if [ -n "$$MACOS_CODESIGN_IDENTITY" ]; then \ echo "Codesigning with identity $$MACOS_CODESIGN_IDENTITY"; \ - MACHO_FILES=$$(find "$@" -type f -perm -755 | cut -d: -f1); \ + MACHO_FILES=$$(find "$@" -type f -perm -0111 | cut -d: -f1); \ for f in $${MACHO_FILES}; do \ echo "Codesigning $${f}..."; \ codesign -s "$$MACOS_CODESIGN_IDENTITY" --option=runtime --entitlements Entitlements.plist -vvv --timestamp --deep --force "$${f}"; \ From 7b848f8c7adb1275045561eaceee172a23250460 Mon Sep 17 00:00:00 2001 From: Elliot Saba Date: Fri, 15 Jan 2021 14:52:13 -0800 Subject: [PATCH 32/78] Use arch-independent magic number as start seed for Preferences hash (#39274) `Preferences.jl` is currently broken on 32-bit because hashing natively uses `UInt32`'s instead of `UInt64`'s. We allow `Preferences.jl` to polymorph to whichever it requires here, while eliminating a confusing large constant and simply starting from zero. (cherry picked from commit 7647ab574fba6460877d0c1c571a86fdf18b5d31) --- base/loading.jl | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/base/loading.jl b/base/loading.jl index cc0cd88a4b123..093e14e00e74e 100644 --- a/base/loading.jl +++ b/base/loading.jl @@ -1645,9 +1645,10 @@ function get_preferences(uuid::UUID) end function get_preferences_hash(uuid::Union{UUID, Nothing}, prefs_list::Vector{String}) - # Start from the "null" hash - h = UInt64(0x6e65726566657250) - uuid === nothing && return h + # Start from a predictable hash point to ensure that the same preferences always + # hash to the same value, modulo changes in how Dictionaries are hashed. + h = UInt(0) + uuid === nothing && return UInt64(h) # Load the preferences prefs = get_preferences(uuid) @@ -1659,7 +1660,8 @@ function get_preferences_hash(uuid::Union{UUID, Nothing}, prefs_list::Vector{Str h = hash(prefs_name, h) end end - return h + # We always return a `UInt64` so that our serialization format is stable + return UInt64(h) end get_preferences_hash(m::Module, prefs_list::Vector{String}) = get_preferences_hash(PkgId(m).uuid, prefs_list) From 9b79f5e3b78ecb9d7bf7bdf58184de35404bf4fb Mon Sep 17 00:00:00 2001 From: Jameson Nash Date: Mon, 18 Jan 2021 13:50:49 -0500 Subject: [PATCH 33/78] aotcompile: avoid cache lookup when disallowed (#39265) Fix #38548 (cherry picked from commit 29f2f896363c43a9d01758b75e2b2b5882d8ba80) --- src/codegen.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/codegen.cpp b/src/codegen.cpp index 2f565740975f2..c7f8f4b942c19 100644 --- a/src/codegen.cpp +++ b/src/codegen.cpp @@ -4623,7 +4623,7 @@ static Function *emit_tojlinvoke(jl_code_instance_t *codeinst, Module *M, jl_cod ctx.builder.SetInsertPoint(b0); Function *theFunc; Value *theFarg; - if (codeinst->invoke != NULL) { + if (params.cache && codeinst->invoke != NULL) { StringRef theFptrName = jl_ExecutionEngine->getFunctionAtAddress((uintptr_t)codeinst->invoke, codeinst); theFunc = cast( M->getOrInsertFunction(theFptrName, jlinvoke_func->_type(jl_LLVMContext)).getCallee()); From f873e56b1073527308f2c6b5dc8bc1662de2c65f Mon Sep 17 00:00:00 2001 From: Tim Holy Date: Fri, 15 Jan 2021 00:48:42 -0600 Subject: [PATCH 34/78] Prevent TOML invalidation by pirates of `T[elements...]` (#39252) StaticArrays (perhaps among others) semi-pirates this method, although they've worked hard to make it pretty innocuous. Still, there are times when it invalidates the TOML-reading, so best to protect this. (cherry picked from commit 985dfa54c333e58d40c1b28de7692dc2cce4c965) --- base/toml_parser.jl | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/base/toml_parser.jl b/base/toml_parser.jl index 32e0593c1fdc9..c69096504df0b 100644 --- a/base/toml_parser.jl +++ b/base/toml_parser.jl @@ -657,10 +657,20 @@ end ######### function push!!(v::Vector, el) + # Since these types are typically non-inferrable, they are a big invalidation risk, + # and since it's used by the package-loading infrastructure the cost of invalidation + # is high. Therefore, this is written to reduce the "exposed surface area": e.g., rather + # than writing `T[el]` we write it as `push!(Vector{T}(undef, 1), el)` so that there + # is no ambiguity about what types of objects will be created. T = eltype(v) - if el isa T || typeof(el) === T + t = typeof(el) + if el isa T || t === T push!(v, el::T) return v + elseif T === Union{} + out = Vector{t}(undef, 1) + out[1] = el + return out else if typeof(T) === Union newT = Any From 99069e705191328d58be53e99cb7143e9df3bb76 Mon Sep 17 00:00:00 2001 From: Jeff Bezanson Date: Thu, 14 Jan 2021 13:32:58 -0500 Subject: [PATCH 35/78] fix #39218, bug in subtyping fast path for tuples with repeated elements (#39237) (cherry picked from commit 4e6a3a41404d5ceae05fe717dc0a000f06b5029f) --- src/subtype.c | 2 +- test/subtype.jl | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/subtype.c b/src/subtype.c index baf5a91b11899..8a3300cad8bac 100644 --- a/src/subtype.c +++ b/src/subtype.c @@ -1072,7 +1072,7 @@ static int subtype_tuple_tail(struct subtype_tuple_env *env, int8_t R, jl_stenv_ // an identical type on the left doesn't need to be compared to a Vararg // element type on the right more than twice. } - else if (x_same && + else if (x_same && e->Runions.depth == 0 && ((yi == env->lasty && !jl_has_free_typevars(xi) && !jl_has_free_typevars(yi)) || (yi == env->lasty && !env->vx && env->vy && jl_is_concrete_type(xi)))) { // fast path for repeated elements diff --git a/test/subtype.jl b/test/subtype.jl index 47026df924d3b..c99fc780799e6 100644 --- a/test/subtype.jl +++ b/test/subtype.jl @@ -1847,3 +1847,17 @@ let A = Tuple{T, Ref{T}, T} where {T}, @test_broken I <: A @test_broken I <: B end + +# issue #39218 +let A = Int, B = String, U = Union{A, B} + @test issub_strict(Union{Tuple{A, A}, Tuple{B, B}}, Tuple{U, U}) + @test issub_strict(Union{Tuple{A, A}, Tuple{B, B}}, Tuple{Union{A, B}, Union{A, B}}) +end + +struct A39218 end +struct B39218 end +const AB39218 = Union{A39218,B39218} +f39218(::T, ::T) where {T<:AB39218} = false +g39218(a, b) = (@nospecialize; if a isa AB39218 && b isa AB39218; f39218(a, b); end;) +@test g39218(A39218(), A39218()) === false +@test_throws MethodError g39218(A39218(), B39218()) From a7a9fe5721eb9080380cf13c4404cee1cbecf004 Mon Sep 17 00:00:00 2001 From: Jeff Bezanson Date: Tue, 19 Jan 2021 11:47:11 -0500 Subject: [PATCH 36/78] improve performance of disabling finalizers in locks (#39153) helps #38947 (cherry picked from commit e8f23d7d3e2eb4c4550637af6ace95dab4bae49d) --- base/gcutils.jl | 15 ++++++++++++++- base/lock.jl | 8 ++++---- base/locks-mt.jl | 10 +++++----- src/ccall.cpp | 22 ++++++++++++++++++++++ src/gc.c | 36 ++++++++++++++++++++++++++++++++---- src/julia_threads.h | 4 ++++ src/locks.h | 5 ++--- src/rtutils.c | 6 ++---- 8 files changed, 85 insertions(+), 21 deletions(-) diff --git a/base/gcutils.jl b/base/gcutils.jl index 82bdf74c9a4d4..1280b4ab71afc 100644 --- a/base/gcutils.jl +++ b/base/gcutils.jl @@ -114,7 +114,20 @@ the current Task. Finalizers will only run when the counter is at zero. (Set `true` for enabling, `false` for disabling). They may still run concurrently on another Task or thread. """ -enable_finalizers(on::Bool) = ccall(:jl_gc_enable_finalizers, Cvoid, (Ptr{Cvoid}, Int32,), C_NULL, on) +enable_finalizers(on::Bool) = on ? enable_finalizers() : disable_finalizers() + +function enable_finalizers() + Base.@_inline_meta + ccall(:jl_gc_enable_finalizers_internal, Cvoid, ()) + if unsafe_load(cglobal(:jl_gc_have_pending_finalizers, Cint)) != 0 + ccall(:jl_gc_run_pending_finalizers, Cvoid, (Ptr{Cvoid},), C_NULL) + end +end + +function disable_finalizers() + Base.@_inline_meta + ccall(:jl_gc_disable_finalizers_internal, Cvoid, ()) +end """ GC.@preserve x1 x2 ... xn expr diff --git a/base/lock.jl b/base/lock.jl index 7a8e0eaef878e..b013a593cde84 100644 --- a/base/lock.jl +++ b/base/lock.jl @@ -65,7 +65,7 @@ function trylock(rl::ReentrantLock) if rl.reentrancy_cnt == 0 rl.locked_by = t rl.reentrancy_cnt = 1 - GC.enable_finalizers(false) + GC.disable_finalizers() got = true else got = false @@ -93,7 +93,7 @@ function lock(rl::ReentrantLock) if rl.reentrancy_cnt == 0 rl.locked_by = t rl.reentrancy_cnt = 1 - GC.enable_finalizers(false) + GC.disable_finalizers() break end try @@ -135,7 +135,7 @@ function unlock(rl::ReentrantLock) rethrow() end end - GC.enable_finalizers(true) + GC.enable_finalizers() unlock(rl.cond_wait) end return @@ -157,7 +157,7 @@ function unlockall(rl::ReentrantLock) rethrow() end end - GC.enable_finalizers(true) + GC.enable_finalizers() unlock(rl.cond_wait) return n end diff --git a/base/locks-mt.jl b/base/locks-mt.jl index 6a3b68016cb81..41e1ef33c574c 100644 --- a/base/locks-mt.jl +++ b/base/locks-mt.jl @@ -61,12 +61,12 @@ Base.assert_havelock(l::SpinLock) = islocked(l) ? nothing : Base.concurrency_vio function lock(l::SpinLock) while true if _get(l) == 0 - GC.enable_finalizers(false) + GC.disable_finalizers() p = _xchg!(l, 1) if p == 0 return end - GC.enable_finalizers(true) + GC.enable_finalizers() end ccall(:jl_cpu_pause, Cvoid, ()) # Temporary solution before we have gc transition support in codegen. @@ -76,12 +76,12 @@ end function trylock(l::SpinLock) if _get(l) == 0 - GC.enable_finalizers(false) + GC.disable_finalizers() p = _xchg!(l, 1) if p == 0 return true end - GC.enable_finalizers(true) + GC.enable_finalizers() end return false end @@ -89,7 +89,7 @@ end function unlock(l::SpinLock) _get(l) == 0 && error("unlock count must match lock count") _set!(l, 0) - GC.enable_finalizers(true) + GC.enable_finalizers() ccall(:jl_cpu_wake, Cvoid, ()) return end diff --git a/src/ccall.cpp b/src/ccall.cpp index ed8f98d96df2c..65c0fa74c9ace 100644 --- a/src/ccall.cpp +++ b/src/ccall.cpp @@ -1481,6 +1481,28 @@ static jl_cgval_t emit_ccall(jl_codectx_t &ctx, jl_value_t **args, size_t nargs) tbaa_decorate(tbaa_const, tid); return mark_or_box_ccall_result(ctx, tid, retboxed, rt, unionall, static_rt); } + else if (is_libjulia_func(jl_gc_disable_finalizers_internal) +#ifdef NDEBUG + || is_libjulia_func(jl_gc_enable_finalizers_internal) +#endif + ) { + JL_GC_POP(); + Value *ptls_i32 = emit_bitcast(ctx, ctx.ptlsStates, T_pint32); + const int finh_offset = offsetof(jl_tls_states_t, finalizers_inhibited); + Value *pfinh = ctx.builder.CreateInBoundsGEP(ptls_i32, ConstantInt::get(T_size, finh_offset / 4)); + LoadInst *finh = ctx.builder.CreateAlignedLoad(pfinh, Align(sizeof(int32_t))); + Value *newval; + if (is_libjulia_func(jl_gc_disable_finalizers_internal)) { + newval = ctx.builder.CreateAdd(finh, ConstantInt::get(T_int32, 1)); + } + else { + newval = ctx.builder.CreateSelect(ctx.builder.CreateICmpEQ(finh, ConstantInt::get(T_int32, 0)), + ConstantInt::get(T_int32, 0), + ctx.builder.CreateSub(finh, ConstantInt::get(T_int32, 1))); + } + ctx.builder.CreateStore(newval, pfinh); + return ghostValue(jl_nothing_type); + } else if (is_libjulia_func(jl_get_current_task)) { assert(lrt == T_prjlvalue); assert(!isVa && !llvmcall && nccallargs == 0); diff --git a/src/gc.c b/src/gc.c index ef1ef52da26d4..94f5a80fd0cbe 100644 --- a/src/gc.c +++ b/src/gc.c @@ -181,6 +181,7 @@ bigval_t *big_objects_marked = NULL; // `to_finalize` should not have tagged pointers. arraylist_t finalizer_list_marked; arraylist_t to_finalize; +int jl_gc_have_pending_finalizers = 0; NOINLINE uintptr_t gc_get_stack_ptr(void) { @@ -261,6 +262,7 @@ static void schedule_finalization(void *o, void *f) JL_NOTSAFEPOINT { arraylist_push(&to_finalize, o); arraylist_push(&to_finalize, f); + jl_gc_have_pending_finalizers = 1; } static void run_finalizer(jl_ptls_t ptls, jl_value_t *o, jl_value_t *ff) @@ -386,12 +388,24 @@ static void run_finalizers(jl_ptls_t ptls) if (to_finalize.items == to_finalize._space) { copied_list.items = copied_list._space; } + jl_gc_have_pending_finalizers = 0; arraylist_new(&to_finalize, 0); // This releases the finalizers lock. jl_gc_run_finalizers_in_list(ptls, &copied_list); arraylist_free(&copied_list); } +JL_DLLEXPORT void jl_gc_run_pending_finalizers(jl_ptls_t ptls) +{ + if (ptls == NULL) + ptls = jl_get_ptls_states(); + if (!ptls->in_finalizer && ptls->locks.len == 0 && ptls->finalizers_inhibited == 0) { + ptls->in_finalizer = 1; + run_finalizers(ptls); + ptls->in_finalizer = 0; + } +} + JL_DLLEXPORT int jl_gc_get_finalizers_inhibited(jl_ptls_t ptls) { if (ptls == NULL) @@ -399,6 +413,22 @@ JL_DLLEXPORT int jl_gc_get_finalizers_inhibited(jl_ptls_t ptls) return ptls->finalizers_inhibited; } +JL_DLLEXPORT void jl_gc_disable_finalizers_internal(void) +{ + jl_ptls_t ptls = jl_get_ptls_states(); + ptls->finalizers_inhibited++; +} + +JL_DLLEXPORT void jl_gc_enable_finalizers_internal(void) +{ + jl_ptls_t ptls = jl_get_ptls_states(); +#ifdef NDEBUG + ptls->finalizers_inhibited--; +#else + jl_gc_enable_finalizers(ptls, 1); +#endif +} + JL_DLLEXPORT void jl_gc_enable_finalizers(jl_ptls_t ptls, int on) { if (ptls == NULL) @@ -421,10 +451,8 @@ JL_DLLEXPORT void jl_gc_enable_finalizers(jl_ptls_t ptls, int on) return; } ptls->finalizers_inhibited = new_val; - if (!new_val && old_val && !ptls->in_finalizer && ptls->locks.len == 0) { - ptls->in_finalizer = 1; - run_finalizers(ptls); - ptls->in_finalizer = 0; + if (jl_gc_have_pending_finalizers) { + jl_gc_run_pending_finalizers(ptls); } } diff --git a/src/julia_threads.h b/src/julia_threads.h index 1eaf0e0035f52..f42984130f9a3 100644 --- a/src/julia_threads.h +++ b/src/julia_threads.h @@ -332,6 +332,10 @@ int8_t jl_gc_safe_leave(jl_ptls_t ptls, int8_t state); // Can be a safepoint JL_DLLEXPORT void (jl_gc_safepoint)(void); JL_DLLEXPORT void jl_gc_enable_finalizers(jl_ptls_t ptls, int on); +JL_DLLEXPORT void jl_gc_disable_finalizers_internal(void); +JL_DLLEXPORT void jl_gc_enable_finalizers_internal(void); +JL_DLLEXPORT void jl_gc_run_pending_finalizers(jl_ptls_t ptls); +extern JL_DLLEXPORT int jl_gc_have_pending_finalizers; JL_DLLEXPORT void jl_wakeup_thread(int16_t tid); diff --git a/src/locks.h b/src/locks.h index b02fc8c5011e5..262390bb718f3 100644 --- a/src/locks.h +++ b/src/locks.h @@ -132,9 +132,8 @@ static inline void jl_mutex_unlock(jl_mutex_t *lock) jl_mutex_unlock_nogc(lock); jl_lock_frame_pop(); JL_SIGATOMIC_END(); - if (ptls->locks.len == 0 && ptls->finalizers_inhibited == 0) { - ptls->finalizers_inhibited = 1; - jl_gc_enable_finalizers(ptls, 1); // call run_finalizers (may GC) + if (jl_gc_have_pending_finalizers) { + jl_gc_run_pending_finalizers(ptls); // may GC } } diff --git a/src/rtutils.c b/src/rtutils.c index 5ac68510ae392..ed62021ebcb1e 100644 --- a/src/rtutils.c +++ b/src/rtutils.c @@ -265,10 +265,8 @@ JL_DLLEXPORT void jl_eh_restore_state(jl_handler_t *eh) if (old_defer_signal && !eh->defer_signal) { jl_sigint_safepoint(ptls); } - if (unlocks && eh->locks_len == 0 && ptls->finalizers_inhibited == 0) { - // call run_finalizers - ptls->finalizers_inhibited = 1; - jl_gc_enable_finalizers(ptls, 1); + if (jl_gc_have_pending_finalizers && unlocks && eh->locks_len == 0) { + jl_gc_run_pending_finalizers(ptls); } } From fdf9ea2ac872ea02bc2910020f8b26fab5d37548 Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Tue, 19 Jan 2021 22:37:34 +0100 Subject: [PATCH 37/78] Rebase: Performance regression of scalar randn() between Julia 1.4 and 1.5 (#39319) * definition of randn for scalars reverted to 1.4 * Added comments why this change is done Co-authored-by: Benjamin Lungwitz <52384612+lungben@users.noreply.github.com> (cherry picked from commit 68133407404f3e1221385d495b47eb8585b258af) --- stdlib/Random/src/normal.jl | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/stdlib/Random/src/normal.jl b/stdlib/Random/src/normal.jl index dc5ac5101e39d..8638d3d62c624 100644 --- a/stdlib/Random/src/normal.jl +++ b/stdlib/Random/src/normal.jl @@ -35,7 +35,26 @@ julia> randn(rng, ComplexF32, (2, 3)) 0.611224+1.56403im 0.355204-0.365563im 0.0905552+1.31012im ``` """ -@inline randn(rng::AbstractRNG=default_rng()) = _randn(rng, rand(rng, UInt52Raw())) +@inline function randn(rng::AbstractRNG=default_rng()) + #= + When defining + `@inline randn(rng::AbstractRNG=default_rng()) = _randn(rng, rand(rng, UInt52Raw()))` + the function call to `_randn` is currently not inlined, resulting in slightly worse + performance for scalar random normal numbers than repeating the code of `_randn` + inside the following function. + =# + @inbounds begin + r = rand(rng, UInt52Raw()) + + # the following code is identical to the one in `_randn(rng::AbstractRNG, r::UInt64)` + r &= 0x000fffffffffffff + rabs = Int64(r>>1) # One bit for the sign + idx = rabs & 0xFF + x = ifelse(r % Bool, -rabs, rabs)*wi[idx+1] + rabs < ki[idx+1] && return x # 99.3% of the time we return here 1st try + return randn_unlikely(rng, idx, rabs, x) + end +end @inline function _randn(rng::AbstractRNG, r::UInt64) @inbounds begin From 4904312bff24e8661b4429be0c3d5661e51ac209 Mon Sep 17 00:00:00 2001 From: Tim Holy Date: Tue, 19 Jan 2021 01:48:41 -0600 Subject: [PATCH 38/78] Force-specialize on `T` in `cat_similar` (#39292) These methods are tiny (quick to compile), call methods that force-specialize on `T`, and are called by methods that force-specialize on `T`. Consequently, there does not seem to be any good reason to lose inferrability in these methods. (cherry picked from commit 33573eca1107531b3b33e8d20c08ef6db81c9f41) --- base/abstractarray.jl | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/base/abstractarray.jl b/base/abstractarray.jl index ad32a102fa7aa..30072363a34c3 100644 --- a/base/abstractarray.jl +++ b/base/abstractarray.jl @@ -1481,7 +1481,7 @@ vcat(V::AbstractVector{T}...) where {T} = typed_vcat(T, V...) # but that solution currently fails (see #27188 and #27224) AbstractVecOrTuple{T} = Union{AbstractVector{<:T}, Tuple{Vararg{T}}} -_typed_vcat_similar(V, T, n) = similar(V[1], T, n) +_typed_vcat_similar(V, ::Type{T}, n) where T = similar(V[1], T, n) _typed_vcat(::Type{T}, V::AbstractVecOrTuple{AbstractVector}) where T = _typed_vcat!(_typed_vcat_similar(V, T, mapreduce(length, +, V)), V) @@ -1577,8 +1577,8 @@ cat_size(A::AbstractArray, d) = size(A, d) cat_indices(A, d) = OneTo(1) cat_indices(A::AbstractArray, d) = axes(A, d) -cat_similar(A, T, shape) = Array{T}(undef, shape) -cat_similar(A::AbstractArray, T, shape) = similar(A, T, shape) +cat_similar(A, ::Type{T}, shape) where T = Array{T}(undef, shape) +cat_similar(A::AbstractArray, ::Type{T}, shape) where T = similar(A, T, shape) cat_shape(dims, shape::Tuple{Vararg{Int}}) = shape function cat_shape(dims, shapes::Tuple) From e8d527e15c8a6e60227d6f2c67e656d3ea8f8dfe Mon Sep 17 00:00:00 2001 From: Tim Holy Date: Tue, 19 Jan 2021 13:19:56 -0600 Subject: [PATCH 39/78] Improve inferability of shape::Dims for cat (#39294) `cat` is often called with Varargs or heterogenous inputs, and inference almost always fails. Even when all the arrays are of the same type, if the number of varargs isn't known inference typically fails. The culprit is probably #36454. This reduces the number of failures considerably, by avoiding creation of vararg length tuples in the shape-inference pipeline. (cherry picked from commit 815076b392821609815d5d77077e042ef08d2e14) --- base/abstractarray.jl | 8 +++++++- test/abstractarray.jl | 6 ++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/base/abstractarray.jl b/base/abstractarray.jl index 30072363a34c3..1f1120740e99a 100644 --- a/base/abstractarray.jl +++ b/base/abstractarray.jl @@ -1580,6 +1580,7 @@ cat_indices(A::AbstractArray, d) = axes(A, d) cat_similar(A, ::Type{T}, shape) where T = Array{T}(undef, shape) cat_similar(A::AbstractArray, ::Type{T}, shape) where T = similar(A, T, shape) +# These are for backwards compatibility (even though internal) cat_shape(dims, shape::Tuple{Vararg{Int}}) = shape function cat_shape(dims, shapes::Tuple) out_shape = () @@ -1588,6 +1589,11 @@ function cat_shape(dims, shapes::Tuple) end return out_shape end +# The new way to compute the shape (more inferrable than combining cat_size & cat_shape, due to Varargs + issue#36454) +cat_size_shape(dims) = ntuple(zero, Val(length(dims))) +@inline cat_size_shape(dims, X, tail...) = _cat_size_shape(dims, _cshp(1, dims, (), cat_size(X)), tail...) +_cat_size_shape(dims, shape) = shape +@inline _cat_size_shape(dims, shape, X, tail...) = _cat_size_shape(dims, _cshp(1, dims, shape, cat_size(X)), tail...) _cshp(ndim::Int, ::Tuple{}, ::Tuple{}, ::Tuple{}) = () _cshp(ndim::Int, ::Tuple{}, ::Tuple{}, nshape) = nshape @@ -1631,7 +1637,7 @@ _cat(dims, X...) = cat_t(promote_eltypeof(X...), X...; dims=dims) @inline cat_t(::Type{T}, X...; dims) where {T} = _cat_t(dims, T, X...) @inline function _cat_t(dims, ::Type{T}, X...) where {T} catdims = dims2cat(dims) - shape = cat_shape(catdims, map(cat_size, X)) + shape = cat_size_shape(catdims, X...) A = cat_similar(X[1], T, shape) if count(!iszero, catdims)::Int > 1 fill!(A, zero(T)) diff --git a/test/abstractarray.jl b/test/abstractarray.jl index 804f8ffed468e..bc7c4d646fd8e 100644 --- a/test/abstractarray.jl +++ b/test/abstractarray.jl @@ -678,6 +678,12 @@ function test_cat(::Type{TestAbstractArray}) # 36041 @test_throws MethodError cat(["a"], ["b"], dims=[1, 2]) @test cat([1], [1], dims=[1, 2]) == I(2) + + # inferrability + As = [zeros(2, 2) for _ = 1:2] + @test @inferred(cat(As...; dims=Val(3))) == zeros(2, 2, 2) + cat3v(As) = cat(As...; dims=Val(3)) + @test @inferred(cat3v(As)) == zeros(2, 2, 2) end function test_ind2sub(::Type{TestAbstractArray}) From 4c081891e5fa9ca97a49f7124c68fec6c8a9d054 Mon Sep 17 00:00:00 2001 From: Tim Holy Date: Wed, 20 Jan 2021 00:46:13 -0600 Subject: [PATCH 40/78] Use lispy tuples in cat (fixes #21673) (#39314) The `cat` pipeline has long had poor inferrability. Together with #39292 and #39294, this should basically put an end to that problem. Together, at least in simple cases these make the performance of `cat` essentially equivalent to the manual version. In other words, the `test1` and `test2` of #21673 benchmark very similarly. (cherry picked from commit 78d55e2445e810d34b396920dcdcc30d559c49a9) --- base/abstractarray.jl | 43 ++++++++++++++++++++++--------------------- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/base/abstractarray.jl b/base/abstractarray.jl index 1f1120740e99a..383814ff38ddc 100644 --- a/base/abstractarray.jl +++ b/base/abstractarray.jl @@ -1645,28 +1645,29 @@ _cat(dims, X...) = cat_t(promote_eltypeof(X...), X...; dims=dims) return __cat(A, shape, catdims, X...) end -function __cat(A, shape::NTuple{M}, catdims, X...) where M - N = M::Int - offsets = zeros(Int, N) - inds = Vector{UnitRange{Int}}(undef, N) - concat = copyto!(zeros(Bool, N), catdims) - for x in X - for i = 1:N - if concat[i] - inds[i] = offsets[i] .+ cat_indices(x, i) - offsets[i] += cat_size(x, i) - else - inds[i] = 1:shape[i] - end - end - I::NTuple{N, UnitRange{Int}} = (inds...,) - if x isa AbstractArray - A[I...] = x - else - fill!(view(A, I...), x) - end +# Why isn't this called `__cat!`? +__cat(A, shape, catdims, X...) = __cat_offset!(A, shape, catdims, ntuple(zero, length(shape)), X...) + +function __cat_offset!(A, shape, catdims, offsets, x, X...) + # splitting the "work" on x from X... may reduce latency (fewer costly specializations) + newoffsets = __cat_offset1!(A, shape, catdims, offsets, x) + return __cat_offset!(A, shape, catdims, newoffsets, X...) +end +__cat_offset!(A, shape, catdims, offsets) = A + +function __cat_offset1!(A, shape, catdims, offsets, x) + inds = ntuple(length(offsets)) do i + (i <= length(catdims) && catdims[i]) ? offsets[i] .+ cat_indices(x, i) : 1:shape[i] + end + if x isa AbstractArray + A[inds...] = x + else + fill!(view(A, inds...), x) + end + newoffsets = ntuple(length(offsets)) do i + (i <= length(catdims) && catdims[i]) ? offsets[i] + cat_size(x, i) : offsets[i] end - return A + return newoffsets end """ From 9719e6e523f649832420d38759938573e592911e Mon Sep 17 00:00:00 2001 From: Tim Holy Date: Tue, 19 Jan 2021 13:19:10 -0600 Subject: [PATCH 41/78] Preserve input type for unaliascopy(::ReinterpretArray) (#39316) (cherry picked from commit fb39bdb0e7ad733f118ee520d882063ff89cbd84) --- base/reinterpretarray.jl | 3 ++- test/reinterpretarray.jl | 7 +++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/base/reinterpretarray.jl b/base/reinterpretarray.jl index 34fc5d47e2bf5..decc745caf853 100644 --- a/base/reinterpretarray.jl +++ b/base/reinterpretarray.jl @@ -276,7 +276,8 @@ eachindex(style::IndexSCartesian2, A::AbstractArray) = eachindex(style, parent(A parent(a::ReinterpretArray) = a.parent dataids(a::ReinterpretArray) = dataids(a.parent) -unaliascopy(a::ReinterpretArray{T}) where {T} = reinterpret(T, unaliascopy(a.parent)) +unaliascopy(a::NonReshapedReinterpretArray{T}) where {T} = reinterpret(T, unaliascopy(a.parent)) +unaliascopy(a::ReshapedReinterpretArray{T}) where {T} = reinterpret(reshape, T, unaliascopy(a.parent)) function size(a::NonReshapedReinterpretArray{T,N,S} where {N}) where {T,S} psize = size(a.parent) diff --git a/test/reinterpretarray.jl b/test/reinterpretarray.jl index ce3202868460a..5c7b35f5a5890 100644 --- a/test/reinterpretarray.jl +++ b/test/reinterpretarray.jl @@ -350,3 +350,10 @@ ars = reinterpret(reshape, Int, a) a = [(k,k+1,k+2) for k = 1:3:4000] ars = reinterpret(reshape, Int, a) @test sum(ars) == 8010003 + +@testset "aliasing" begin + a = reinterpret(NTuple{2,Float64}, rand(Float64, 4, 4)) + @test typeof(Base.unaliascopy(a)) === typeof(a) + a = reinterpret(reshape, NTuple{4,Float64}, rand(Float64, 4, 4)) + @test typeof(Base.unaliascopy(a)) === typeof(a) +end From 14ba71b9861e0e01703541910bf63502be3e91dd Mon Sep 17 00:00:00 2001 From: Jeff Bezanson Date: Wed, 20 Jan 2021 03:28:09 -0500 Subject: [PATCH 42/78] make `extrema` with dims inferrable (#39321) fixes #39281 (cherry picked from commit caeaceff8af97565334f35309d812566183ec687) --- base/multidimensional.jl | 4 ++-- test/reduce.jl | 3 +++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/base/multidimensional.jl b/base/multidimensional.jl index 0fcd70b2d2a9e..32d66c4c54cda 100644 --- a/base/multidimensional.jl +++ b/base/multidimensional.jl @@ -1698,9 +1698,9 @@ extrema(f, A::AbstractArray; dims=:) = _extrema_dims(f, A, dims) _extrema_dims(f, A::AbstractArray, ::Colon) = _extrema_itr(f, A) function _extrema_dims(f, A::AbstractArray, dims) - sz = [size(A)...] + sz = size(A) for d in dims - sz[d] = 1 + sz = setindex(sz, 1, d) end T = promote_op(f, eltype(A)) B = Array{Tuple{T,T}}(undef, sz...) diff --git a/test/reduce.jl b/test/reduce.jl index 4f9fc33403282..972a5aeb1aa51 100644 --- a/test/reduce.jl +++ b/test/reduce.jl @@ -608,3 +608,6 @@ x = [j+7 for j in i] Iterators.flatten((1:2, 3:4)), ) == (1, 4) end + +# issue #39281 +@test @inferred(extrema(rand(2), dims=1)) isa Vector{Tuple{Float64,Float64}} From 3c3e2e344b0c922f574f54826f90e589bea0a579 Mon Sep 17 00:00:00 2001 From: Tim Besard Date: Tue, 19 Jan 2021 11:09:36 +0100 Subject: [PATCH 43/78] Only construct legal int types during alloc opt. When promoting heap to stack allocations, make sure we only emit legal integer allocas by checking with the module's datalayout. X86 doesn't seem to care, but back-ends like SPIR-V don't know how to handle arbitrarily-sized integers. Fixes JuliaGPU/oneAPI.jl#55 (cherry picked from commit 27a6038aa07735ae6f75030247f9dfa900e63d06) --- src/llvm-alloc-opt.cpp | 11 +++++++++-- test/llvmpasses/alloc-opt2.jl | 20 +++++++++++++++++++- 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/src/llvm-alloc-opt.cpp b/src/llvm-alloc-opt.cpp index c6d9dce9b8548..381380372db40 100644 --- a/src/llvm-alloc-opt.cpp +++ b/src/llvm-alloc-opt.cpp @@ -936,7 +936,12 @@ void Optimizer::moveToStack(CallInst *orig_inst, size_t sz, bool has_ref) ptr = cast(prolog_builder.CreateBitCast(buff, pass.T_pint8)); } else { - buff = prolog_builder.CreateAlloca(Type::getIntNTy(pass.getLLVMContext(), sz * 8)); + Type *buffty; + if (pass.DL->isLegalInteger(sz * 8)) + buffty = Type::getIntNTy(pass.getLLVMContext(), sz * 8); + else + buffty = ArrayType::get(Type::getInt8Ty(pass.getLLVMContext()), sz); + buff = prolog_builder.CreateAlloca(buffty); buff->setAlignment(Align(align)); ptr = cast(prolog_builder.CreateBitCast(buff, pass.T_pint8)); } @@ -1193,8 +1198,10 @@ void Optimizer::splitOnStack(CallInst *orig_inst) else if (field.elty && !field.multiloc) { allocty = field.elty; } - else { + else if (pass.DL->isLegalInteger(field.size * 8)) { allocty = Type::getIntNTy(pass.getLLVMContext(), field.size * 8); + } else { + allocty = ArrayType::get(Type::getInt8Ty(pass.getLLVMContext()), field.size); } slot.slot = prolog_builder.CreateAlloca(allocty); insertLifetime(prolog_builder.CreateBitCast(slot.slot, pass.T_pint8), diff --git a/test/llvmpasses/alloc-opt2.jl b/test/llvmpasses/alloc-opt2.jl index 00a4394352fbf..8a3f5aa941feb 100644 --- a/test/llvmpasses/alloc-opt2.jl +++ b/test/llvmpasses/alloc-opt2.jl @@ -79,12 +79,30 @@ L3: """) # CHECK-LABEL: }{{$}} +# CHECK-LABEL: @legal_int_types +# CHECK: alloca [12 x i8] +# CHECK-NOT: alloca i96 +# CHECK: ret void +println(""" +define void @legal_int_types() { + %ptls = call {}*** @julia.ptls_states() + %ptls_i8 = bitcast {}*** %ptls to i8* + %var1 = call {} addrspace(10)* @julia.gc_alloc_obj(i8* %ptls_i8, $isz 12, {} addrspace(10)* @tag) + %var2 = addrspacecast {} addrspace(10)* %var1 to {} addrspace(11)* + %var3 = call {}* @julia.pointer_from_objref({} addrspace(11)* %var2) + ret void +} +""") +# CHECK-LABEL: }{{$}} + + + println(""" declare void @external_function() declare {} addrspace(10)* @external_function2() declare {}*** @julia.ptls_states() declare noalias {} addrspace(10)* @julia.gc_alloc_obj(i8*, $isz, {} addrspace(10)*) -declare i64 @julia.pointer_from_objref({} addrspace(11)*) +declare {}* @julia.pointer_from_objref({} addrspace(11)*) declare void @llvm.memcpy.p11i8.p0i8.i64(i8 addrspace(11)* nocapture writeonly, i8* nocapture readonly, i64, i32, i1) declare token @llvm.julia.gc_preserve_begin(...) declare void @llvm.julia.gc_preserve_end(token) From a1c8ec8fa4a61bc95478479c2d9f60486c0c5224 Mon Sep 17 00:00:00 2001 From: Tim Besard Date: Tue, 19 Jan 2021 11:29:24 +0100 Subject: [PATCH 44/78] Adapt the alloc-opt tests. (cherry picked from commit 543ac5ffb480467b01fb2be898df5ce9a97de6a1) --- test/llvmpasses/alloc-opt.jl | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/test/llvmpasses/alloc-opt.jl b/test/llvmpasses/alloc-opt.jl index dd1ff78151f95..e48a85641257b 100644 --- a/test/llvmpasses/alloc-opt.jl +++ b/test/llvmpasses/alloc-opt.jl @@ -5,6 +5,8 @@ isz = sizeof(UInt) == 8 ? "i64" : "i32" println(""" +target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128" + @tag = external addrspace(10) global {} """) @@ -167,7 +169,7 @@ define void @object_field({} addrspace(10)* %field) { # CHECK-LABEL: }{{$}} # CHECK-LABEL: @memcpy_opt -# CHECK: alloca i128, align 16 +# CHECK: alloca [16 x i8], align 16 # CHECK: call {}*** @julia.ptls_states() # CHECK-NOT: @julia.gc_alloc_obj # CHECK-NOT: @jl_gc_pool_alloc From ba1f4cf98d5d20cd08c127bcf08fcf1f99d7f8c9 Mon Sep 17 00:00:00 2001 From: Curtis Vogt Date: Wed, 13 Jan 2021 12:55:10 -0600 Subject: [PATCH 45/78] MbedTLS source build fixes (#39131) (cherry picked from commit 492096f45d688b8e161c4a8478c7c55aa85f0b8c) --- deps/mbedtls.mk | 4 ++-- deps/tools/common.mk | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/deps/mbedtls.mk b/deps/mbedtls.mk index 494771466ad00..83085ed2d2709 100644 --- a/deps/mbedtls.mk +++ b/deps/mbedtls.mk @@ -24,7 +24,7 @@ $(SRCCACHE)/$(MBEDTLS_SRC)/source-extracted: $(SRCCACHE)/$(MBEDTLS_SRC).tar.gz mkdir -p $(dir $@) && \ $(TAR) -C $(dir $@) --strip-components 1 -xf $< # Force-enable MD4 - sed "s|//#define MBEDTLS_MD4_C|#define MBEDTLS_MD4_C|" -i $(SRCCACHE)/$(MBEDTLS_SRC)/include/mbedtls/config.h + sed -i.org "s|//#define MBEDTLS_MD4_C|#define MBEDTLS_MD4_C|" $(SRCCACHE)/$(MBEDTLS_SRC)/include/mbedtls/config.h touch -c $(SRCCACHE)/$(MBEDTLS_SRC)/CMakeLists.txt # old target echo 1 > $@ @@ -37,7 +37,7 @@ $(SRCCACHE)/$(MBEDTLS_SRC)/mbedtls-cmake-findpy.patch-applied: $(SRCCACHE)/$(MBE # are it will be included at least in their next minor release (2.26.0?). cd $(SRCCACHE)/$(MBEDTLS_SRC) && \ patch -p1 -f < $(SRCDIR)/patches/mbedtls-cmake-findpy.patch - echo 1 > @$ + echo 1 > $@ $(BUILDDIR)/$(MBEDTLS_SRC)/build-configured: \ $(SRCCACHE)/$(MBEDTLS_SRC)/mbedtls-cmake-findpy.patch-applied diff --git a/deps/tools/common.mk b/deps/tools/common.mk index 35effcb75bd96..a2a552830c495 100644 --- a/deps/tools/common.mk +++ b/deps/tools/common.mk @@ -23,6 +23,10 @@ CMAKE_CXX_ARG := $(CXX_ARG) CMAKE_COMMON := -DCMAKE_INSTALL_PREFIX:PATH=$(build_prefix) -DCMAKE_PREFIX_PATH=$(build_prefix) CMAKE_COMMON += -DCMAKE_INSTALL_LIBDIR=$(build_libdir) -DCMAKE_INSTALL_BINDIR=$(build_bindir) CMAKE_COMMON += -DLIB_INSTALL_DIR=$(build_shlibdir) +ifeq ($(OS), Darwin) +CMAKE_COMMON += -DCMAKE_MACOSX_RPATH=1 +endif + ifneq ($(VERBOSE), 0) CMAKE_COMMON += -DCMAKE_VERBOSE_MAKEFILE=ON endif From f28385ccd081659a0a1c6d7548f42f435feceabf Mon Sep 17 00:00:00 2001 From: kimikage Date: Thu, 21 Jan 2021 15:46:01 +0900 Subject: [PATCH 46/78] Fix performance regression in broadcasting with CartesianIndices (#39333) * Fix performance regression in broadcasting with CartesianIndices This avoids the boundary check due to a change in the implementation of iteration using `CartecianIndices` in PR #37829. This is a workaround on the caller side and does not change the iteration mechanism itself. Co-authored-by: Matt Bauman Co-authored-by: thofma (cherry picked from commit a4cd68cceb78636fd9968e8464a7e12cd333bec4) --- base/broadcast.jl | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/base/broadcast.jl b/base/broadcast.jl index ca671d67fd365..19d32199e4eb6 100644 --- a/base/broadcast.jl +++ b/base/broadcast.jl @@ -978,8 +978,10 @@ preprocess_args(dest, args::Tuple{}) = () end end bc′ = preprocess(dest, bc) - @simd for I in eachindex(bc′) - @inbounds dest[I] = bc′[I] + # Performance may vary depending on whether `@inbounds` is placed outside the + # for loop or not. (cf. https://github.com/JuliaLang/julia/issues/38086) + @inbounds @simd for I in eachindex(bc′) + dest[I] = bc′[I] end return dest end From 8bcc60f7ab4a9cf7f6b9494a88a84baf953b1e7c Mon Sep 17 00:00:00 2001 From: Jeff Bezanson Date: Wed, 20 Jan 2021 12:51:47 -0500 Subject: [PATCH 47/78] fix failing `enable_finalizers` test (cherry picked from commit 43c7d025c9c7ced598e03c36c22052ba6d28fe34) --- test/misc.jl | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/test/misc.jl b/test/misc.jl index 41b92785fa5b6..db1ba3ee59099 100644 --- a/test/misc.jl +++ b/test/misc.jl @@ -149,7 +149,10 @@ for l in (Threads.SpinLock(), ReentrantLock()) @test get_finalizers_inhibited() == 1 GC.enable_finalizers(true) @test get_finalizers_inhibited() == 0 - @test_warn "WARNING: GC finalizers already enabled on this thread." GC.enable_finalizers(true) + if ccall(:jl_is_debugbuild, Cint, ()) != 0 + # Note this warning only exists in debug builds + @test_warn "WARNING: GC finalizers already enabled on this thread." GC.enable_finalizers(true) + end @test lock(l) === nothing @test try unlock(l) finally end === nothing From d9306d4b9b1afc820278bdd725af62c20c7b19aa Mon Sep 17 00:00:00 2001 From: Jameson Nash Date: Mon, 28 Dec 2020 14:38:39 -0500 Subject: [PATCH 48/78] inference: remove dead check for NOT_FOUND Missed in dcc0696971a100dbc63f90b8789632631dd1bfef cleanup (cherry picked from commit d1fc03da8c93e480964d706cbb63be51f2331c37) --- base/compiler/typelattice.jl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/base/compiler/typelattice.jl b/base/compiler/typelattice.jl index 17a444e840b77..48419ce5e9788 100644 --- a/base/compiler/typelattice.jl +++ b/base/compiler/typelattice.jl @@ -118,8 +118,8 @@ function ⊑(@nospecialize(a), @nospecialize(b)) end isa(a, MaybeUndef) && (a = a.typ) isa(b, MaybeUndef) && (b = b.typ) - (a === NOT_FOUND || b === Any) && return true - (a === Any || b === NOT_FOUND) && return false + b === Any && return true + a === Any && return false a === Union{} && return true b === Union{} && return false if isa(a, Conditional) From 83d77fc325f2a8db63949aed383de41130f15277 Mon Sep 17 00:00:00 2001 From: Shuhei Kadowaki Date: Thu, 7 Jan 2021 12:01:32 +0900 Subject: [PATCH 49/78] inference: minor code quality improvements (cherry picked from commit a229f8660eb6cc87c4a44d3c1436d2156776b346) --- base/compiler/abstractinterpretation.jl | 6 +++--- base/compiler/tfuncs.jl | 2 +- base/compiler/typeinfer.jl | 5 +++-- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/base/compiler/abstractinterpretation.jl b/base/compiler/abstractinterpretation.jl index 84a7e18a59b73..84cca7cbc319e 100644 --- a/base/compiler/abstractinterpretation.jl +++ b/base/compiler/abstractinterpretation.jl @@ -1186,9 +1186,9 @@ function abstract_eval_statement(interp::AbstractInterpreter, @nospecialize(e), if length(e.args) == 2 && isconcretetype(t) && !t.mutable at = abstract_eval_value(interp, e.args[2], vtypes, sv) n = fieldcount(t) - if isa(at, Const) && isa(at.val, Tuple) && n == length(at.val) && - let t = t, at = at; _all(i->at.val[i] isa fieldtype(t, i), 1:n); end - t = Const(ccall(:jl_new_structt, Any, (Any, Any), t, at.val)) + if isa(at, Const) && (val = at.val; isa(val, Tuple)) && n == length(val) && + let t = t, val = val; _all(i->val[i] isa fieldtype(t, i), 1:n); end + t = Const(ccall(:jl_new_structt, Any, (Any, Any), t, val)) elseif isa(at, PartialStruct) && at ⊑ Tuple && n == length(at.fields) && let t = t, at = at; _all(i->at.fields[i] ⊑ fieldtype(t, i), 1:n); end t = PartialStruct(t, at.fields) diff --git a/base/compiler/tfuncs.jl b/base/compiler/tfuncs.jl index 7f5d3e42522d7..5016c90deef13 100644 --- a/base/compiler/tfuncs.jl +++ b/base/compiler/tfuncs.jl @@ -1612,7 +1612,7 @@ function return_type_tfunc(interp::AbstractInterpreter, argtypes::Vector{Any}, s if contains_is(argtypes_vec, Union{}) return Const(Union{}) end - rt = abstract_call(interp, nothing, argtypes_vec, sv, -1).rt + rt = widenconditional(abstract_call(interp, nothing, argtypes_vec, sv, -1).rt) if isa(rt, Const) # output was computed to be constant return Const(typeof(rt.val)) diff --git a/base/compiler/typeinfer.jl b/base/compiler/typeinfer.jl index 6a4027e2c6f4e..db3970c7a8f2b 100644 --- a/base/compiler/typeinfer.jl +++ b/base/compiler/typeinfer.jl @@ -792,7 +792,8 @@ function typeinf_ext(interp::AbstractInterpreter, mi::MethodInstance) if invoke_api(code) == 2 i == 2 && ccall(:jl_typeinf_end, Cvoid, ()) tree = ccall(:jl_new_code_info_uninit, Ref{CodeInfo}, ()) - tree.code = Any[ ReturnNode(quoted(code.rettype_const)) ] + rettype_const = code.rettype_const + tree.code = Any[ ReturnNode(quoted(rettype_const)) ] nargs = Int(method.nargs) tree.slotnames = ccall(:jl_uncompress_argnames, Vector{Symbol}, (Any,), method.slot_syms) tree.slotflags = fill(0x00, nargs) @@ -804,7 +805,7 @@ function typeinf_ext(interp::AbstractInterpreter, mi::MethodInstance) tree.pure = true tree.inlineable = true tree.parent = mi - tree.rettype = Core.Typeof(code.rettype_const) + tree.rettype = Core.Typeof(rettype_const) tree.min_world = code.min_world tree.max_world = code.max_world return tree From 2a2f49795602d15961ffdab0da24bbb46c07c868 Mon Sep 17 00:00:00 2001 From: Jameson Nash Date: Tue, 12 Jan 2021 18:35:20 -0500 Subject: [PATCH 50/78] inference: correction to ifelse Conditional lattice Rename typeassert_type_instance to tjoin (aka typeintersect). Also, since the ifelse value here might not be in the regular type lattice, we need to use the extended lattice for this evaluation. (cherry picked from commit 95d03f9a4c7b062016090d833a29b7824a152ab8) --- base/compiler/abstractinterpretation.jl | 36 +++++++++++++++---------- base/compiler/tfuncs.jl | 33 +---------------------- base/compiler/typelimits.jl | 36 +++++++++++++++++++++++++ 3 files changed, 59 insertions(+), 46 deletions(-) diff --git a/base/compiler/abstractinterpretation.jl b/base/compiler/abstractinterpretation.jl index 84cca7cbc319e..1249e91f885da 100644 --- a/base/compiler/abstractinterpretation.jl +++ b/base/compiler/abstractinterpretation.jl @@ -788,20 +788,28 @@ end function abstract_call_builtin(interp::AbstractInterpreter, f::Builtin, fargs::Union{Nothing,Vector{Any}}, argtypes::Vector{Any}, sv::InferenceState, max_methods::Int) la = length(argtypes) - if f === ifelse && fargs isa Vector{Any} && la == 4 && argtypes[2] isa Conditional - # try to simulate this as a real conditional (`cnd ? x : y`), so that the penalty for using `ifelse` instead isn't too high - cnd = argtypes[2]::Conditional - tx = argtypes[3] - ty = argtypes[4] - a = ssa_def_slot(fargs[3], sv) - b = ssa_def_slot(fargs[4], sv) - if isa(a, Slot) && slot_id(cnd.var) == slot_id(a) - tx = typeintersect(tx, cnd.vtype) - end - if isa(b, Slot) && slot_id(cnd.var) == slot_id(b) - ty = typeintersect(ty, cnd.elsetype) - end - return tmerge(tx, ty) + if f === ifelse && fargs isa Vector{Any} && la == 4 + cnd = argtypes[2] + if isa(cnd, Conditional) + newcnd = widenconditional(cnd) + if isa(newcnd, Const) + # if `cnd` is constant, we should just respect its constantness to keep inference accuracy + return newcnd.val ? tx : ty + else + # try to simulate this as a real conditional (`cnd ? x : y`), so that the penalty for using `ifelse` instead isn't too high + tx = argtypes[3] + ty = argtypes[4] + a = ssa_def_slot(fargs[3], sv) + b = ssa_def_slot(fargs[4], sv) + if isa(a, Slot) && slot_id(cnd.var) == slot_id(a) + tx = (cnd.vtype ⊑ tx ? cnd.vtype : tmeet(tx, widenconst(cnd.vtype))) + end + if isa(b, Slot) && slot_id(cnd.var) == slot_id(b) + ty = (cnd.elsetype ⊑ ty ? cnd.elsetype : tmeet(ty, widenconst(cnd.elsetype))) + end + return tmerge(tx, ty) + end + end end rt = builtin_tfunction(interp, f, argtypes[2:end], sv) if f === getfield && isa(fargs, Vector{Any}) && la == 3 && isa(argtypes[3], Const) && isa(argtypes[3].val, Int) && argtypes[2] ⊑ Tuple diff --git a/base/compiler/tfuncs.jl b/base/compiler/tfuncs.jl index 5016c90deef13..dca508d605cde 100644 --- a/base/compiler/tfuncs.jl +++ b/base/compiler/tfuncs.jl @@ -544,41 +544,10 @@ function typeof_tfunc(@nospecialize(t)) end add_tfunc(typeof, 1, 1, typeof_tfunc, 0) -function typeassert_type_instance(@nospecialize(v), @nospecialize(t)) - if isa(v, Const) - if !has_free_typevars(t) && !isa(v.val, t) - return Bottom - end - return v - elseif isa(v, PartialStruct) - has_free_typevars(t) && return v - widev = widenconst(v) - if widev <: t - return v - elseif typeintersect(widev, t) === Bottom - return Bottom - end - @assert widev <: Tuple - new_fields = Vector{Any}(undef, length(v.fields)) - for i = 1:length(new_fields) - new_fields[i] = typeassert_type_instance(v.fields[i], getfield_tfunc(t, Const(i))) - if new_fields[i] === Bottom - return Bottom - end - end - return tuple_tfunc(new_fields) - elseif isa(v, Conditional) - if !(Bool <: t) - return Bottom - end - return v - end - return typeintersect(widenconst(v), t) -end function typeassert_tfunc(@nospecialize(v), @nospecialize(t)) t = instanceof_tfunc(t)[1] t === Any && return v - return typeassert_type_instance(v, t) + return tmeet(v, t) end add_tfunc(typeassert, 2, 2, typeassert_tfunc, 4) diff --git a/base/compiler/typelimits.jl b/base/compiler/typelimits.jl index 22be265287fa5..a64b5fba1f356 100644 --- a/base/compiler/typelimits.jl +++ b/base/compiler/typelimits.jl @@ -521,3 +521,39 @@ function tuplemerge(a::DataType, b::DataType) end return Tuple{p...} end + +# compute typeintersect over the extended inference lattice +# where v is in the extended lattice, and t is a Type +function tmeet(@nospecialize(v), @nospecialize(t)) + if isa(v, Const) + if !has_free_typevars(t) && !isa(v.val, t) + return Bottom + end + return v + elseif isa(v, PartialStruct) + has_free_typevars(t) && return v + widev = widenconst(v) + if widev <: t + return v + end + ti = typeintersect(widev, t) + if ti === Bottom + return Bottom + end + @assert widev <: Tuple + new_fields = Vector{Any}(undef, length(v.fields)) + for i = 1:length(new_fields) + new_fields[i] = tmeet(v.fields[i], widenconst(getfield_tfunc(t, Const(i)))) + if new_fields[i] === Bottom + return Bottom + end + end + return tuple_tfunc(new_fields) + elseif isa(v, Conditional) + if !(Bool <: t) + return Bottom + end + return v + end + return typeintersect(widenconst(v), t) +end From bc49839ad04b2b300c9a1fece267b44e7dfbe530 Mon Sep 17 00:00:00 2001 From: Shuhei Kadowaki <40514306+aviatesk@users.noreply.github.com> Date: Thu, 14 Jan 2021 23:47:37 +0900 Subject: [PATCH 51/78] inference: yet more fix for `ifelse` lattice (#39247) (cherry picked from commit 5bb065928a4b34124c8fc029145576ce1db34277) --- base/compiler/abstractinterpretation.jl | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/base/compiler/abstractinterpretation.jl b/base/compiler/abstractinterpretation.jl index 1249e91f885da..7163912f6689a 100644 --- a/base/compiler/abstractinterpretation.jl +++ b/base/compiler/abstractinterpretation.jl @@ -792,13 +792,13 @@ function abstract_call_builtin(interp::AbstractInterpreter, f::Builtin, fargs::U cnd = argtypes[2] if isa(cnd, Conditional) newcnd = widenconditional(cnd) + tx = argtypes[3] + ty = argtypes[4] if isa(newcnd, Const) # if `cnd` is constant, we should just respect its constantness to keep inference accuracy - return newcnd.val ? tx : ty + return newcnd.val::Bool ? tx : ty else # try to simulate this as a real conditional (`cnd ? x : y`), so that the penalty for using `ifelse` instead isn't too high - tx = argtypes[3] - ty = argtypes[4] a = ssa_def_slot(fargs[3], sv) b = ssa_def_slot(fargs[4], sv) if isa(a, Slot) && slot_id(cnd.var) == slot_id(a) From 2845d87d0a53676a9ce2fbfd2b4bc86d4671da62 Mon Sep 17 00:00:00 2001 From: Jameson Nash Date: Mon, 14 Dec 2020 14:23:45 -0500 Subject: [PATCH 52/78] inference: stop re-converging worlds after optimization (#38820) The validity did not change, so we should not need to update it. This also ensures we copy over all result information earlier, so we can destroy the InferenceState slightly sooner, and slightly cleaner data flow. (cherry picked from commit 8c014445a7e6ba515286e38fe4585510cc93d300) --- base/compiler/compiler.jl | 3 +- base/compiler/optimize.jl | 11 ++--- base/compiler/typeinfer.jl | 83 ++++++++++++++++++++++---------------- base/compiler/types.jl | 3 +- 4 files changed, 55 insertions(+), 45 deletions(-) diff --git a/base/compiler/compiler.jl b/base/compiler/compiler.jl index 986b8f6497fa3..37e281f2f2724 100644 --- a/base/compiler/compiler.jl +++ b/base/compiler/compiler.jl @@ -103,11 +103,10 @@ using .Sort # compiler # ############ +include("compiler/cicache.jl") include("compiler/types.jl") include("compiler/utilities.jl") include("compiler/validation.jl") - -include("compiler/cicache.jl") include("compiler/methodtable.jl") include("compiler/inferenceresult.jl") diff --git a/base/compiler/optimize.jl b/base/compiler/optimize.jl index 9cdeb94c3c79d..9d9bc45dc1e9f 100644 --- a/base/compiler/optimize.jl +++ b/base/compiler/optimize.jl @@ -44,20 +44,15 @@ mutable struct OptimizationState const_api::Bool inlining::InliningState function OptimizationState(frame::InferenceState, params::OptimizationParams, interp::AbstractInterpreter) - s_edges = frame.stmt_edges[1] - if s_edges === nothing - s_edges = [] - frame.stmt_edges[1] = s_edges - end - src = frame.src + s_edges = frame.stmt_edges[1]::Vector{Any} inlining = InliningState(params, - EdgeTracker(s_edges::Vector{Any}, frame.valid_worlds), + EdgeTracker(s_edges, frame.valid_worlds), InferenceCaches( get_inference_cache(interp), WorldView(code_cache(interp), frame.world)), method_table(interp)) return new(frame.linfo, - src, frame.stmt_info, frame.mod, frame.nargs, + frame.src, frame.stmt_info, frame.mod, frame.nargs, frame.sptypes, frame.slottypes, false, inlining) end diff --git a/base/compiler/typeinfer.jl b/base/compiler/typeinfer.jl index db3970c7a8f2b..c2769bf18c81e 100644 --- a/base/compiler/typeinfer.jl +++ b/base/compiler/typeinfer.jl @@ -217,21 +217,29 @@ function _typeinf(interp::AbstractInterpreter, frame::InferenceState) # with no active ip's, frame is done frames = frame.callers_in_cycle isempty(frames) && push!(frames, frame) + valid_worlds = WorldRange() for caller in frames @assert !(caller.dont_work_on_me) caller.dont_work_on_me = true + # might might not fully intersect these earlier, so do that now + valid_worlds = intersect(caller.valid_worlds, valid_worlds) end for caller in frames + caller.valid_worlds = valid_worlds finish(caller, interp) + # finalize and record the linfo result + caller.inferred = true end # collect results for the new expanded frame - results = Tuple{InferenceResult, Bool}[ ( frames[i].result, - frames[i].cached || frames[i].parent !== nothing ) for i in 1:length(frames) ] - # empty!(frames) - valid_worlds = frame.valid_worlds + results = Tuple{InferenceResult, Vector{Any}, Bool}[ + ( frames[i].result, + frames[i].stmt_edges[1], + frames[i].cached || frames[i].parent !== nothing ) + for i in 1:length(frames) ] + empty!(frames) cached = frame.cached if cached || frame.parent !== nothing - for (caller, doopt) in results + for (caller, _, doopt) in results opt = caller.src if opt isa OptimizationState run_optimizer = doopt && may_optimize(interp) @@ -253,31 +261,24 @@ function _typeinf(interp::AbstractInterpreter, frame::InferenceState) caller.src = nothing end end - # As a hack the et reuses frame_edges[1] to push any optimization - # edges into, so we don't need to handle them specially here - valid_worlds = intersect(valid_worlds, opt.inlining.et.valid_worlds[]) + caller.valid_worlds = opt.inlining.et.valid_worlds[] end end end - if last(valid_worlds) == get_world_counter() - valid_worlds = WorldRange(first(valid_worlds), typemax(UInt)) - end - for caller in frames + for (caller, edges, doopt) in results + valid_worlds = caller.valid_worlds + if last(valid_worlds) == get_world_counter() + valid_worlds = WorldRange(first(valid_worlds), typemax(UInt)) + end caller.valid_worlds = valid_worlds - caller.src.min_world = first(valid_worlds) - caller.src.max_world = last(valid_worlds) if cached - cache_result!(interp, caller.result, valid_worlds) + cache_result!(interp, caller) end - if last(valid_worlds) == typemax(UInt) + if doopt && last(valid_worlds) == typemax(UInt) # if we aren't cached, we don't need this edge # but our caller might, so let's just make it anyways - for caller in frames - store_backedges(caller) - end + store_backedges(caller, edges) end - # finalize and record the linfo result - caller.inferred = true end return true end @@ -343,7 +344,7 @@ function maybe_compress_codeinfo(interp::AbstractInterpreter, linfo::MethodInsta end function transform_result_for_cache(interp::AbstractInterpreter, linfo::MethodInstance, - @nospecialize(inferred_result)) + valid_worlds::WorldRange, @nospecialize(inferred_result)) local const_flags::Int32 # If we decided not to optimize, drop the OptimizationState now. # External interpreters can override as necessary to cache additional information @@ -351,6 +352,8 @@ function transform_result_for_cache(interp::AbstractInterpreter, linfo::MethodIn inferred_result = inferred_result.src end if inferred_result isa CodeInfo + inferred_result.min_world = first(valid_worlds) + inferred_result.max_world = last(valid_worlds) inferred_result = maybe_compress_codeinfo(interp, linfo, inferred_result) end # The global cache can only handle objects that codegen understands @@ -360,7 +363,8 @@ function transform_result_for_cache(interp::AbstractInterpreter, linfo::MethodIn return inferred_result end -function cache_result!(interp::AbstractInterpreter, result::InferenceResult, valid_worlds::WorldRange) +function cache_result!(interp::AbstractInterpreter, result::InferenceResult) + valid_worlds = result.valid_worlds # check if the existing linfo metadata is also sufficient to describe the current inference result # to decide if it is worth caching this already_inferred = already_inferred_quick_test(interp, result.linfo) @@ -370,7 +374,7 @@ function cache_result!(interp::AbstractInterpreter, result::InferenceResult, val # TODO: also don't store inferred code if we've previously decided to interpret this function if !already_inferred - inferred_result = transform_result_for_cache(interp, result.linfo, result.src) + inferred_result = transform_result_for_cache(interp, result.linfo, valid_worlds, result.src) code_cache(interp)[result.linfo] = CodeInstance(result, inferred_result, valid_worlds) end unlock_mi_inference(interp, result.linfo) @@ -381,6 +385,21 @@ end # update the MethodInstance function finish(me::InferenceState, interp::AbstractInterpreter) # prepare to run optimization passes on fulltree + s_edges = me.stmt_edges[1] + if s_edges === nothing + s_edges = [] + me.stmt_edges[1] = s_edges + end + for edges in me.stmt_edges + edges === nothing && continue + edges === s_edges && continue + append!(s_edges, edges) + empty!(edges) + end + if me.src.edges !== nothing + append!(s_edges, me.src.edges) + me.src.edges = nothing + end if me.limited && me.cached && me.parent !== nothing # a top parent will be cached still, but not this intermediate work # we can throw everything else away now @@ -392,6 +411,7 @@ function finish(me::InferenceState, interp::AbstractInterpreter) type_annotate!(me) me.result.src = OptimizationState(me, OptimizationParams(interp), interp) end + me.result.valid_worlds = me.valid_worlds me.result.result = me.bestguess nothing end @@ -404,20 +424,15 @@ function finish(src::CodeInfo, interp::AbstractInterpreter) end # record the backedges -function store_backedges(frame::InferenceState) +function store_backedges(frame::InferenceResult, edges::Vector{Any}) toplevel = !isa(frame.linfo.def, Method) - if !toplevel && (frame.cached || frame.parent !== nothing) - caller = frame.result.linfo - for edges in frame.stmt_edges - store_backedges(caller, edges) - end - store_backedges(caller, frame.src.edges) - frame.src.edges = nothing + if !toplevel + store_backedges(frame.linfo, edges) end + nothing end -store_backedges(caller, edges::Nothing) = nothing -function store_backedges(caller, edges::Vector) +function store_backedges(caller::MethodInstance, edges::Vector) i = 1 while i <= length(edges) to = edges[i] diff --git a/base/compiler/types.jl b/base/compiler/types.jl index 3ca6cff20ccd6..1a1cbb0890e65 100644 --- a/base/compiler/types.jl +++ b/base/compiler/types.jl @@ -28,9 +28,10 @@ mutable struct InferenceResult overridden_by_const::BitVector result # ::Type, or InferenceState if WIP src #::Union{CodeInfo, OptimizationState, Nothing} # if inferred copy is available + valid_worlds::WorldRange # if inference and optimization is finished function InferenceResult(linfo::MethodInstance, given_argtypes = nothing) argtypes, overridden_by_const = matching_cache_argtypes(linfo, given_argtypes) - return new(linfo, argtypes, overridden_by_const, Any, nothing) + return new(linfo, argtypes, overridden_by_const, Any, nothing, WorldRange()) end end From 38b3048f70944de7a2501b0a10d0ec8a706fd1d1 Mon Sep 17 00:00:00 2001 From: Shuhei Kadowaki <40514306+aviatesk@users.noreply.github.com> Date: Wed, 16 Dec 2020 13:14:23 +0900 Subject: [PATCH 53/78] rm unnecessary `widenconst_bestguess` call (#38871) the equivalent widening logic is imposed within `typeinf_local`, and so as far as I understand we don't this need `widenconst_bestguess` in `typeinf_edge` (cherry picked from commit 341d6c905037b9b5b1bde7877274ce11072ea909) --- base/compiler/typeinfer.jl | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/base/compiler/typeinfer.jl b/base/compiler/typeinfer.jl index c2769bf18c81e..7729462575132 100644 --- a/base/compiler/typeinfer.jl +++ b/base/compiler/typeinfer.jl @@ -759,7 +759,7 @@ function typeinf_edge(interp::AbstractInterpreter, method::Method, @nospecialize end typeinf(interp, frame) update_valid_age!(frame, caller) - return widenconst_bestguess(frame.bestguess), frame.inferred ? mi : nothing + return frame.bestguess, frame.inferred ? mi : nothing elseif frame === true # unresolvable cycle return Any, nothing @@ -767,12 +767,7 @@ function typeinf_edge(interp::AbstractInterpreter, method::Method, @nospecialize # return the current knowledge about this cycle frame = frame::InferenceState update_valid_age!(frame, caller) - return widenconst_bestguess(frame.bestguess), nothing -end - -function widenconst_bestguess(bestguess) - !isa(bestguess, Const) && !isa(bestguess, PartialStruct) && !isa(bestguess, Type) && return widenconst(bestguess) - return bestguess + return frame.bestguess, nothing end #### entry points for inferring a MethodInstance given a type signature #### From 7d1533dbf4da2a1b8121180974bc26acd9d1ae9b Mon Sep 17 00:00:00 2001 From: Jameson Nash Date: Wed, 20 Jan 2021 12:04:43 -0500 Subject: [PATCH 54/78] inference: make Limited tracking part of the type lattice (#39116) This helps refine our knowledge of the `[limited]` flag setting, which previously would always exclude a result from the cache when hitting a cycle. However, we really only need to exclude a result if the result might be dependent on that flag setting. That makes this formally part of the lattice, though can be annoying to work with yet another wrapper, so we try to add/remove it late/early to propagate it when necessary. (cherry picked from commit 5f10eb9085fd5a622430d020c8bc9141c7acb7c7) --- base/compiler/abstractinterpretation.jl | 59 ++++++-- base/compiler/inferencestate.jl | 30 +--- base/compiler/tfuncs.jl | 4 + base/compiler/typeinfer.jl | 176 +++++++++++++++--------- base/compiler/typelattice.jl | 50 ++++++- base/compiler/typelimits.jl | 22 ++- 6 files changed, 235 insertions(+), 106 deletions(-) diff --git a/base/compiler/abstractinterpretation.jl b/base/compiler/abstractinterpretation.jl index 7163912f6689a..d68f430972957 100644 --- a/base/compiler/abstractinterpretation.jl +++ b/base/compiler/abstractinterpretation.jl @@ -12,9 +12,11 @@ const _REF_NAME = Ref.body.name # logic # ######### -# see if the inference result might affect the final answer -call_result_unused(frame::InferenceState, pc::LineNum=frame.currpc) = - isexpr(frame.src.code[frame.currpc], :call) && isempty(frame.ssavalue_uses[pc]) +# See if the inference result of the current statement's result value might affect +# the final answer for the method (aside from optimization potential and exceptions). +# To do that, we need to check both for slot assignment and SSA usage. +call_result_unused(frame::InferenceState) = + isexpr(frame.src.code[frame.currpc], :call) && isempty(frame.ssavalue_uses[frame.currpc]) # check if this return type is improvable (i.e. whether it's possible that with # more information, we might get a more precise type) @@ -192,6 +194,16 @@ function abstract_call_gf_by_type(interp::AbstractInterpreter, @nospecialize(f), end end #print("=> ", rettype, "\n") + if rettype isa LimitedAccuracy + union!(sv.pclimitations, rettype.causes) + rettype = rettype.typ + end + if !isempty(sv.pclimitations) # remove self, if present + delete!(sv.pclimitations, sv) + for caller in sv.callers_in_cycle + delete!(sv.pclimitations, caller) + end + end return CallMeta(rettype, info) end @@ -313,7 +325,6 @@ function abstract_call_method_with_const_args(interp::AbstractInterpreter, @nosp inf_result = InferenceResult(mi, argtypes) frame = InferenceState(inf_result, #=cache=#false, interp) frame === nothing && return Any # this is probably a bad generated function (unsound), but just ignore it - frame.limited = true frame.parent = sv push!(inf_cache, inf_result) typeinf(interp, frame) || return Any @@ -394,7 +405,7 @@ function abstract_call_method(interp::AbstractInterpreter, method::Method, @nosp parent = parent::InferenceState parent_method2 = parent.src.method_for_inference_limit_heuristics # limit only if user token match parent_method2 isa Method || (parent_method2 = nothing) # Union{Method, Nothing} - if (parent.cached || parent.limited) && parent.linfo.def === sv.linfo.def && sv_method2 === parent_method2 + if (parent.cached || parent.parent !== nothing) && parent.linfo.def === sv.linfo.def && sv_method2 === parent_method2 topmost = infstate edgecycle = true end @@ -443,7 +454,8 @@ function abstract_call_method(interp::AbstractInterpreter, method::Method, @nosp # (non-typically, this means that we lose the ability to detect a guaranteed StackOverflow in some cases) return Any, true, nothing end - poison_callstack(sv, topmost::InferenceState, true) + topmost = topmost::InferenceState + poison_callstack(sv, topmost.parent === nothing ? topmost : topmost.parent) sig = newsig sparams = svec() end @@ -1129,7 +1141,12 @@ function abstract_eval_value(interp::AbstractInterpreter, @nospecialize(e), vtyp if isa(e, Expr) return abstract_eval_value_expr(interp, e, vtypes, sv) else - return abstract_eval_special_value(interp, e, vtypes, sv) + typ = abstract_eval_special_value(interp, e, vtypes, sv) + if typ isa LimitedAccuracy + union!(sv.pclimitations, typ.causes) + typ = typ.typ + end + return typ end end @@ -1252,13 +1269,21 @@ function abstract_eval_statement(interp::AbstractInterpreter, @nospecialize(e), end end else - return abstract_eval_value_expr(interp, e, vtypes, sv) + t = abstract_eval_value_expr(interp, e, vtypes, sv) end @assert !isa(t, TypeVar) if isa(t, DataType) && isdefined(t, :instance) # replace singleton types with their equivalent Const object t = Const(t.instance) end + if !isempty(sv.pclimitations) + if t isa Const || t === Union{} + empty!(sv.pclimitations) + else + t = LimitedAccuracy(t, sv.pclimitations) + sv.pclimitations = IdSet{InferenceState}() + end + end return t end @@ -1313,10 +1338,18 @@ function typeinf_local(interp::AbstractInterpreter, frame::InferenceState) elseif isa(stmt, GotoIfNot) condt = abstract_eval_value(interp, stmt.cond, s[pc], frame) if condt === Bottom + empty!(frame.pclimitations) break end condval = maybe_extract_const_bool(condt) l = stmt.dest::Int + if !isempty(frame.pclimitations) + # we can't model the possible effect of control + # dependencies on the return value, so we propagate it + # directly to all the return values (unless we error first) + condval isa Bool || union!(frame.limitations, frame.pclimitations) + empty!(frame.pclimitations) + end # constant conditions if condval === true elseif condval === false @@ -1351,6 +1384,14 @@ function typeinf_local(interp::AbstractInterpreter, frame::InferenceState) # and is valid inter-procedurally rt = widenconst(rt) end + # copy limitations to return value + if !isempty(frame.pclimitations) + union!(frame.limitations, frame.pclimitations) + empty!(frame.pclimitations) + end + if !isempty(frame.limitations) + rt = LimitedAccuracy(rt, copy(frame.limitations)) + end if tchanged(rt, frame.bestguess) # new (wider) return type for frame frame.bestguess = tmerge(frame.bestguess, rt) @@ -1425,6 +1466,8 @@ function typeinf_local(interp::AbstractInterpreter, frame::InferenceState) end end + @assert isempty(frame.pclimitations) "unhandled LimitedAccuracy" + if t === nothing # mark other reached expressions as `Any` to indicate they don't throw frame.src.ssavaluetypes[pc] = Any diff --git a/base/compiler/inferencestate.jl b/base/compiler/inferencestate.jl index 2d5fce04c0454..3a25cf753ae82 100644 --- a/base/compiler/inferencestate.jl +++ b/base/compiler/inferencestate.jl @@ -10,6 +10,8 @@ mutable struct InferenceState slottypes::Vector{Any} mod::Module currpc::LineNum + pclimitations::IdSet{InferenceState} # causes of precision restrictions (LimitedAccuracy) on currpc ssavalue + limitations::IdSet{InferenceState} # causes of precision restrictions (LimitedAccuracy) on return # info on the state of inference and the linfo src::CodeInfo @@ -39,7 +41,6 @@ mutable struct InferenceState # TODO: move these to InferenceResult / Params? cached::Bool - limited::Bool inferred::Bool dont_work_on_me::Bool @@ -105,6 +106,7 @@ mutable struct InferenceState frame = new( InferenceParams(interp), result, linfo, sp, slottypes, inmodule, 0, + IdSet{InferenceState}(), IdSet{InferenceState}(), src, get_world_counter(interp), valid_worlds, nargs, s_types, s_edges, stmt_info, Union{}, W, 1, n, @@ -113,7 +115,7 @@ mutable struct InferenceState Vector{Tuple{InferenceState,LineNum}}(), # cycle_backedges Vector{InferenceState}(), # callers_in_cycle #=parent=#nothing, - cached, false, false, false, + cached, false, false, CachedMethodTable(method_table(interp)), interp) result.result = frame @@ -261,37 +263,13 @@ function add_mt_backedge!(mt::Core.MethodTable, @nospecialize(typ), caller::Infe nothing end -function poison_callstack(infstate::InferenceState, topmost::InferenceState, poison_topmost::Bool) - poison_topmost && (topmost = topmost.parent) - while !(infstate === topmost) - if call_result_unused(infstate) - # If we won't propagate the result any further (since it's typically unused), - # it's OK that we keep and cache the "limited" result in the parents - # (non-typically, this means that we lose the ability to detect a guaranteed StackOverflow in some cases) - # TODO: we might be able to halt progress much more strongly here, - # since now we know we won't be able to keep anything much that we learned. - # We were mainly only here to compute the calling convention return type, - # but in most situations now, we are unlikely to be able to use that information. - break - end - infstate.limited = true - for infstate_cycle in infstate.callers_in_cycle - infstate_cycle.limited = true - end - infstate = infstate.parent - infstate === nothing && return - end -end - function print_callstack(sv::InferenceState) while sv !== nothing print(sv.linfo) - sv.limited && print(" [limited]") !sv.cached && print(" [uncached]") println() for cycle in sv.callers_in_cycle print(' ', cycle.linfo) - cycle.limited && print(" [limited]") println() end sv = sv.parent diff --git a/base/compiler/tfuncs.jl b/base/compiler/tfuncs.jl index dca508d605cde..faaee3d9ba0b1 100644 --- a/base/compiler/tfuncs.jl +++ b/base/compiler/tfuncs.jl @@ -1586,10 +1586,14 @@ function return_type_tfunc(interp::AbstractInterpreter, argtypes::Vector{Any}, s # output was computed to be constant return Const(typeof(rt.val)) else + inaccurate = nothing + rt isa LimitedAccuracy && (inaccurate = rt.causes; rt = rt.typ) rt = widenconst(rt) if hasuniquerep(rt) || rt === Bottom # output type was known for certain return Const(rt) + elseif inaccurate !== nothing + return LimitedAccuracy(Type{<:rt}, inaccurate) elseif (isa(tt, Const) || isconstType(tt)) && (isa(aft, Const) || isconstType(aft)) # input arguments were known for certain diff --git a/base/compiler/typeinfer.jl b/base/compiler/typeinfer.jl index 7729462575132..9a456660807da 100644 --- a/base/compiler/typeinfer.jl +++ b/base/compiler/typeinfer.jl @@ -28,7 +28,6 @@ struct InferenceFrameInfo sptypes::Vector{Any} slottypes::Vector{Any} nargs::Int - limited::Bool end function _typeinf_identifier(frame::Core.Compiler.InferenceState) @@ -38,7 +37,6 @@ function _typeinf_identifier(frame::Core.Compiler.InferenceState) copy(frame.sptypes), copy(frame.slottypes), frame.nargs, - frame.limited, ) return mi_info end @@ -85,7 +83,7 @@ function reset_timings() empty!(_timings) push!(_timings, Timing( # The MethodInstance for ROOT(), and default empty values for other fields. - InferenceFrameInfo(ROOTmi, 0x0, Any[], Any[Core.Const(ROOT)], 1, false), + InferenceFrameInfo(ROOTmi, 0x0, Any[], Any[Core.Const(ROOT)], 1), _time_ns())) return nothing end @@ -234,51 +232,45 @@ function _typeinf(interp::AbstractInterpreter, frame::InferenceState) results = Tuple{InferenceResult, Vector{Any}, Bool}[ ( frames[i].result, frames[i].stmt_edges[1], - frames[i].cached || frames[i].parent !== nothing ) + frames[i].cached ) for i in 1:length(frames) ] empty!(frames) - cached = frame.cached - if cached || frame.parent !== nothing - for (caller, _, doopt) in results + if may_optimize(interp) + for (caller, _, _) in results opt = caller.src if opt isa OptimizationState - run_optimizer = doopt && may_optimize(interp) - if run_optimizer - optimize(interp, opt, OptimizationParams(interp), caller.result) - finish(opt.src, interp) - # finish updating the result struct - validate_code_in_debug_mode(opt.linfo, opt.src, "optimized") - if opt.const_api - if caller.result isa Const - caller.src = caller.result - else - @assert isconstType(caller.result) - caller.src = Const(caller.result.parameters[1]) - end - elseif opt.src.inferred - caller.src = opt.src::CodeInfo # stash a copy of the code (for inlining) + result_type = caller.result + @assert !(result_type isa LimitedAccuracy) + optimize(interp, opt, OptimizationParams(interp), result_type) + finish(opt.src, interp) + # finish updating the result struct + validate_code_in_debug_mode(opt.linfo, opt.src, "optimized") + if opt.const_api + if result_type isa Const + caller.src = result_type else - caller.src = nothing + @assert isconstType(result_type) + caller.src = Const(result_type.parameters[1]) end + elseif opt.src.inferred + caller.src = opt.src::CodeInfo # stash a copy of the code (for inlining) + else + caller.src = nothing end caller.valid_worlds = opt.inlining.et.valid_worlds[] end end end - for (caller, edges, doopt) in results + for (caller, edges, cached) in results valid_worlds = caller.valid_worlds - if last(valid_worlds) == get_world_counter() - valid_worlds = WorldRange(first(valid_worlds), typemax(UInt)) - end - caller.valid_worlds = valid_worlds - if cached - cache_result!(interp, caller) - end - if doopt && last(valid_worlds) == typemax(UInt) + if last(valid_worlds) >= get_world_counter() # if we aren't cached, we don't need this edge # but our caller might, so let's just make it anyways store_backedges(caller, edges) end + if cached + cache_result!(interp, caller) + end end return true end @@ -286,20 +278,22 @@ end function CodeInstance(result::InferenceResult, @nospecialize(inferred_result::Any), valid_worlds::WorldRange) local const_flags::Int32 + result_type = result.result + @assert !(result_type isa LimitedAccuracy) if inferred_result isa Const # use constant calling convention rettype_const = (result.src::Const).val const_flags = 0x3 inferred_result = nothing else - if isa(result.result, Const) - rettype_const = (result.result::Const).val + if isa(result_type, Const) + rettype_const = result_type.val const_flags = 0x2 - elseif isconstType(result.result) - rettype_const = result.result.parameters[1] + elseif isconstType(result_type) + rettype_const = result_type.parameters[1] const_flags = 0x2 - elseif isa(result.result, PartialStruct) - rettype_const = (result.result::PartialStruct).fields + elseif isa(result_type, PartialStruct) + rettype_const = result_type.fields const_flags = 0x2 else rettype_const = nothing @@ -307,7 +301,7 @@ function CodeInstance(result::InferenceResult, @nospecialize(inferred_result::An end end return CodeInstance(result.linfo, - widenconst(result.result), rettype_const, inferred_result, + widenconst(result_type), rettype_const, inferred_result, const_flags, first(valid_worlds), last(valid_worlds)) end @@ -365,6 +359,11 @@ end function cache_result!(interp::AbstractInterpreter, result::InferenceResult) valid_worlds = result.valid_worlds + if last(valid_worlds) == get_world_counter() + # if we've successfully recorded all of the backedges in the global reverse-cache, + # we can now widen our applicability in the global cache too + valid_worlds = WorldRange(first(valid_worlds), typemax(UInt)) + end # check if the existing linfo metadata is also sufficient to describe the current inference result # to decide if it is worth caching this already_inferred = already_inferred_quick_test(interp, result.linfo) @@ -381,6 +380,28 @@ function cache_result!(interp::AbstractInterpreter, result::InferenceResult) nothing end +function cycle_fix_limited(@nospecialize(typ), sv::InferenceState) + if typ isa LimitedAccuracy + if sv.parent === nothing + # when part of a cycle, we might have unintentionally introduced a limit marker + @assert !isempty(sv.callers_in_cycle) + return typ.typ + end + causes = copy(typ.causes) + delete!(causes, sv) + for caller in sv.callers_in_cycle + delete!(causes, caller) + end + if isempty(causes) + return typ.typ + end + if length(causes) != length(typ.causes) + return LimitedAccuracy(typ.typ, causes) + end + end + return typ +end + # inference completed on `me` # update the MethodInstance function finish(me::InferenceState, interp::AbstractInterpreter) @@ -400,16 +421,43 @@ function finish(me::InferenceState, interp::AbstractInterpreter) append!(s_edges, me.src.edges) me.src.edges = nothing end - if me.limited && me.cached && me.parent !== nothing - # a top parent will be cached still, but not this intermediate work + # inspect whether our inference had a limited result accuracy, + # else it may be suitable to cache + me.bestguess = cycle_fix_limited(me.bestguess, me) + limited_ret = me.bestguess isa LimitedAccuracy + limited_src = false + if !limited_ret + gt = me.src.ssavaluetypes + for j = 1:length(gt) + gt[j] = gtj = cycle_fix_limited(gt[j], me) + if gtj isa LimitedAccuracy && me.parent !== nothing + limited_src = true + break + end + end + end + if limited_ret + # a parent may be cached still, but not this intermediate work: # we can throw everything else away now + me.result.src = nothing me.cached = false + me.src.inlineable = false unlock_mi_inference(interp, me.linfo) + elseif limited_src + # a type result will be cached still, but not this intermediate work: + # we can throw everything else away now + me.result.src = nothing me.src.inlineable = false else - # annotate fulltree with type information - type_annotate!(me) - me.result.src = OptimizationState(me, OptimizationParams(interp), interp) + # annotate fulltree with type information, + # either because we are the outermost code, or we might use this later + doopt = (me.cached || me.parent !== nothing) + type_annotate!(me, doopt) + if doopt + me.result.src = OptimizationState(me, OptimizationParams(interp), interp) + else + me.result.src = me.src::CodeInfo # stash a convenience copy of the code (e.g. for reflection) + end end me.result.valid_worlds = me.valid_worlds me.result.result = me.bestguess @@ -497,7 +545,7 @@ end function visit_slot_load!(sl::Slot, vtypes::VarTable, sv::InferenceState, undefs::Array{Bool,1}) id = slot_id(sl) s = vtypes[id] - vt = widenconditional(s.typ) + vt = widenconditional(ignorelimited(s.typ)) if s.undef # find used-undef variables undefs[id] = true @@ -542,10 +590,9 @@ function record_slot_assign!(sv::InferenceState) end # annotate types of all symbols in AST -function type_annotate!(sv::InferenceState) - # delete dead statements only if we're building this IR to cache it - # (otherwise, we'll run the optimization passes later, outside of inference) - run_optimizer = (sv.cached || sv.parent !== nothing) +function type_annotate!(sv::InferenceState, run_optimizer::Bool) + # as an optimization, we delete dead statements immediately if we're going to run the optimizer + # (otherwise, we'll perhaps run the optimization passes later, outside of inference) # remove all unused ssa values gt = sv.src.ssavaluetypes @@ -560,6 +607,7 @@ function type_annotate!(sv::InferenceState) # to hold all of the items assigned into it record_slot_assign!(sv) sv.src.slottypes = sv.slottypes + @assert !(sv.bestguess isa LimitedAccuracy) sv.src.rettype = sv.bestguess # annotate variables load types @@ -655,7 +703,7 @@ function union_caller_cycle!(a::InferenceState, b::InferenceState) return end -function merge_call_chain!(parent::InferenceState, ancestor::InferenceState, child::InferenceState, limited::Bool) +function merge_call_chain!(parent::InferenceState, ancestor::InferenceState, child::InferenceState) # add backedge of parent <- child # then add all backedges of parent <- parent.parent # and merge all of the callers into ancestor.callers_in_cycle @@ -667,17 +715,17 @@ function merge_call_chain!(parent::InferenceState, ancestor::InferenceState, chi parent = child.parent child === ancestor && break end - if limited - for caller in ancestor.callers_in_cycle - caller.limited = true - end - end end function is_same_frame(interp::AbstractInterpreter, linfo::MethodInstance, frame::InferenceState) return linfo === frame.linfo end +function poison_callstack(infstate::InferenceState, topmost::InferenceState) + push!(infstate.pclimitations, topmost) + nothing +end + # Walk through `linfo`'s upstream call chain, starting at `parent`. If a parent # frame matching `linfo` is encountered, then there is a cycle in the call graph # (i.e. `linfo` is a descendant callee of itself). Upon encountering this cycle, @@ -688,28 +736,26 @@ end function resolve_call_cycle!(interp::AbstractInterpreter, linfo::MethodInstance, parent::InferenceState) frame = parent uncached = false - limited = false while isa(frame, InferenceState) uncached |= !frame.cached # ensure we never add an uncached frame to a cycle - limited |= frame.limited if is_same_frame(interp, linfo, frame) if uncached # our attempt to speculate into a constant call lead to an undesired self-cycle # that cannot be converged: poison our call-stack (up to the discovered duplicate frame) # with the limited flag and abort (set return type to Any) now - poison_callstack(parent, frame, false) + poison_callstack(parent, frame) return true end - merge_call_chain!(parent, frame, frame, limited) + merge_call_chain!(parent, frame, frame) return frame end for caller in frame.callers_in_cycle if is_same_frame(interp, linfo, caller) if uncached - poison_callstack(parent, frame, false) + poison_callstack(parent, frame) return true end - merge_call_chain!(parent, frame, caller, limited) + merge_call_chain!(parent, frame, caller) return caller end end @@ -754,7 +800,7 @@ function typeinf_edge(interp::AbstractInterpreter, method::Method, @nospecialize unlock_mi_inference(interp, mi) return Any, nothing end - if caller.cached || caller.limited # don't involve uncached functions in cycle resolution + if caller.cached || caller.parent !== nothing # don't involve uncached functions in cycle resolution frame.parent = caller end typeinf(interp, frame) @@ -782,12 +828,12 @@ function typeinf_code(interp::AbstractInterpreter, method::Method, @nospecialize if typeinf(interp, frame) && run_optimizer opt_params = OptimizationParams(interp) opt = OptimizationState(frame, opt_params, interp) - optimize(interp, opt, opt_params, result.result) + optimize(interp, opt, opt_params, ignorelimited(result.result)) opt.src.inferred = true end ccall(:jl_typeinf_end, Cvoid, ()) frame.inferred || return (nothing, Any) - return (frame.src, widenconst(result.result)) + return (frame.src, widenconst(ignorelimited(result.result))) end # compute (and cache) an inferred AST and return type @@ -868,7 +914,7 @@ function typeinf_type(interp::AbstractInterpreter, method::Method, @nospecialize typeinf(interp, frame, true) ccall(:jl_typeinf_end, Cvoid, ()) frame.result isa InferenceState && return nothing - return widenconst(frame.result) + return widenconst(ignorelimited(frame.result)) end # This is a bridge for the C code calling `jl_typeinf_func()` diff --git a/base/compiler/typelattice.jl b/base/compiler/typelattice.jl index 48419ce5e9788..5df8dfd411ba3 100644 --- a/base/compiler/typelattice.jl +++ b/base/compiler/typelattice.jl @@ -56,6 +56,7 @@ end # Wraps a type and represents that the value may also be undef at this point. # (only used in optimize, not abstractinterpret) +# N.B. in the lattice, this is epsilon bigger than `typ` (even Any) struct MaybeUndef typ MaybeUndef(@nospecialize(typ)) = new(typ) @@ -77,6 +78,16 @@ struct StateUpdate state::VarTable end +# Represent that the type estimate has been approximated, due to "causes" +# (only used in abstractinterpret, doesn't appear in optimize) +# N.B. in the lattice, this is epsilon smaller than `typ` (except Union{}) +struct LimitedAccuracy + typ + causes::IdSet{InferenceState} + LimitedAccuracy(@nospecialize(typ), causes::IdSet{InferenceState}) = + new(typ, causes) +end + struct NotFound end const NOT_FOUND = NotFound() @@ -113,6 +124,16 @@ end maybe_extract_const_bool(@nospecialize c) = nothing function ⊑(@nospecialize(a), @nospecialize(b)) + if isa(b, LimitedAccuracy) + if !isa(a, LimitedAccuracy) + return false + end + if b.causes ⊈ a.causes + return false + end + b = b.typ + end + isa(a, LimitedAccuracy) && (a = a.typ) if isa(a, MaybeUndef) && !isa(b, MaybeUndef) return false end @@ -220,6 +241,7 @@ widenconst(c::PartialTypeVar) = TypeVar widenconst(t::PartialStruct) = t.typ widenconst(t::Type) = t widenconst(t::TypeVar) = t +widenconst(t::LimitedAccuracy) = error("unhandled LimitedAccuracy") issubstate(a::VarState, b::VarState) = (a.typ ⊑ b.typ && a.undef <= b.undef) @@ -245,6 +267,10 @@ function widenconditional(typ::Conditional) return Bool end end +widenconditional(t::LimitedAccuracy) = error("unhandled LimitedAccuracy") + +ignorelimited(@nospecialize typ) = typ +ignorelimited(typ::LimitedAccuracy) = typ.typ function stupdate!(state::Nothing, changes::StateUpdate) newst = copy(changes.state) @@ -255,9 +281,13 @@ function stupdate!(state::Nothing, changes::StateUpdate) for i = 1:length(newst) newtype = newst[i] if isa(newtype, VarState) - newtypetyp = newtype.typ + newtypetyp = ignorelimited(newtype.typ) if isa(newtypetyp, Conditional) && slot_id(newtypetyp.var) == changeid - newst[i] = VarState(widenconditional(newtypetyp), newtype.undef) + newtypetyp = widenconditional(newtypetyp) + if newtype.typ isa LimitedAccuracy + newtypetyp = LimitedAccuracy(newtypetyp, newtype.typ.causes) + end + newst[i] = VarState(newtypetyp, newtype.undef) end end end @@ -280,9 +310,13 @@ function stupdate!(state::VarTable, changes::StateUpdate) oldtype = state[i] # remove any Conditional for this Slot from the vtable if isa(newtype, VarState) - newtypetyp = newtype.typ + newtypetyp = ignorelimited(newtype.typ) if isa(newtypetyp, Conditional) && slot_id(newtypetyp.var) == changeid - newtype = VarState(widenconditional(newtypetyp), newtype.undef) + newtypetyp = widenconditional(newtypetyp) + if newtype.typ isa LimitedAccuracy + newtypetyp = LimitedAccuracy(newtypetyp, newtype.typ.causes) + end + newtype = VarState(newtypetyp, newtype.undef) end end if schanged(newtype, oldtype) @@ -319,9 +353,13 @@ function stupdate1!(state::VarTable, change::StateUpdate) for i = 1:length(state) oldtype = state[i] if isa(oldtype, VarState) - oldtypetyp = oldtype.typ + oldtypetyp = ignorelimited(oldtype.typ) if isa(oldtypetyp, Conditional) && slot_id(oldtypetyp.var) == changeid - state[i] = VarState(widenconditional(oldtypetyp), oldtype.undef) + oldtypetyp = widenconditional(oldtypetyp) + if oldtype.typ isa LimitedAccuracy + oldtypetyp = LimitedAccuracy(oldtypetyp, oldtype.typ.causes) + end + state[i] = VarState(oldtypetyp, oldtype.undef) end end end diff --git a/base/compiler/typelimits.jl b/base/compiler/typelimits.jl index a64b5fba1f356..9497bfa874e2a 100644 --- a/base/compiler/typelimits.jl +++ b/base/compiler/typelimits.jl @@ -278,7 +278,9 @@ union_count_abstract(x::Union) = union_count_abstract(x.a) + union_count_abstrac union_count_abstract(@nospecialize(x)) = !isdispatchelem(x) function issimpleenoughtype(@nospecialize t) - return unionlen(t)+union_count_abstract(t) <= MAX_TYPEUNION_LENGTH && unioncomplexity(t) <= MAX_TYPEUNION_COMPLEXITY + t = ignorelimited(t) + return unionlen(t) + union_count_abstract(t) <= MAX_TYPEUNION_LENGTH && + unioncomplexity(t) <= MAX_TYPEUNION_COMPLEXITY end # pick a wider type that contains both typea and typeb, @@ -294,6 +296,24 @@ function tmerge(@nospecialize(typea), @nospecialize(typeb)) suba && subb && return typea subb && issimpleenoughtype(typea) && return typea + # type-lattice for LimitedAccuracy wrapper + # the merge create a slightly narrower type than needed, but we can't + # represent the precise intersection of causes and don't attempt to + # enumerate some of these cases where we could + if isa(typea, LimitedAccuracy) && isa(typeb, LimitedAccuracy) + if typea.causes ⊆ typeb.causes + causes = typeb.causes + elseif typeb.causes ⊆ typea.causes + causes = typea.causes + else + causes = union!(copy(typea.causes), typeb.causes) + end + return LimitedAccuracy(tmerge(typea.typ, typeb.typ), causes) + elseif isa(typea, LimitedAccuracy) + return LimitedAccuracy(tmerge(typea.typ, typeb), typea.causes) + elseif isa(typeb, LimitedAccuracy) + return LimitedAccuracy(tmerge(typea, typeb.typ), typeb.causes) + end # type-lattice for MaybeUndef wrapper if isa(typea, MaybeUndef) || isa(typeb, MaybeUndef) return MaybeUndef(tmerge( From 336ebb7f3211580cf10e406b6f362cc15d017af5 Mon Sep 17 00:00:00 2001 From: Shuhei Kadowaki <40514306+aviatesk@users.noreply.github.com> Date: Thu, 14 Jan 2021 23:52:37 +0900 Subject: [PATCH 55/78] inference: improve code qualities (#39250) (cherry picked from commit 0102a3b462fae54225579ceae4f312d8091a3b59) --- base/compiler/abstractinterpretation.jl | 34 +++++++++++++------------ base/compiler/typeutils.jl | 4 ++- 2 files changed, 21 insertions(+), 17 deletions(-) diff --git a/base/compiler/abstractinterpretation.jl b/base/compiler/abstractinterpretation.jl index d68f430972957..c8b4ff5052e47 100644 --- a/base/compiler/abstractinterpretation.jl +++ b/base/compiler/abstractinterpretation.jl @@ -549,8 +549,8 @@ function precise_container_type(interp::AbstractInterpreter, @nospecialize(itft) if _any(t -> !isa(t, DataType) || !(t <: Tuple) || !isknownlength(t), utis) return Any[Vararg{Any}], nothing end - result = Any[rewrap_unionall(p, tti0) for p in utis[1].parameters] - for t in utis[2:end] + result = Any[rewrap_unionall(p, tti0) for p in (utis[1]::DataType).parameters] + for t::DataType in utis[2:end] if length(t.parameters) != length(result) return Any[Vararg{Any}], nothing end @@ -782,8 +782,9 @@ end function argtype_by_index(argtypes::Vector{Any}, i::Int) n = length(argtypes) - if isvarargtype(argtypes[n]) - return i >= n ? unwrapva(argtypes[n]) : argtypes[i] + na = argtypes[n] + if isvarargtype(na) + return i >= n ? unwrapva(na) : argtypes[i] else return i > n ? Bottom : argtypes[i] end @@ -826,7 +827,7 @@ function abstract_call_builtin(interp::AbstractInterpreter, f::Builtin, fargs::U rt = builtin_tfunction(interp, f, argtypes[2:end], sv) if f === getfield && isa(fargs, Vector{Any}) && la == 3 && isa(argtypes[3], Const) && isa(argtypes[3].val, Int) && argtypes[2] ⊑ Tuple cti, _ = precise_container_type(interp, nothing, argtypes[2], sv) - idx = argtypes[3].val + idx = argtypes[3].val::Int if 1 <= idx <= length(cti) rt = unwrapva(cti[idx]) end @@ -904,10 +905,11 @@ end function abstract_call_unionall(argtypes::Vector{Any}) if length(argtypes) == 3 canconst = true - if isa(argtypes[3], Const) - body = argtypes[3].val - elseif isType(argtypes[3]) - body = argtypes[3].parameters[1] + a3 = argtypes[3] + if isa(a3, Const) + body = a3.val + elseif isType(a3) + body = a3.parameters[1] canconst = false else return Any @@ -916,11 +918,11 @@ function abstract_call_unionall(argtypes::Vector{Any}) return Any end if has_free_typevars(body) - if isa(argtypes[2], Const) - tv = argtypes[2].val - elseif isa(argtypes[2], PartialTypeVar) - ptv = argtypes[2] - tv = ptv.tv + a2 = argtypes[2] + if isa(a2, Const) + tv = a2.val + elseif isa(a2, PartialTypeVar) + tv = a2.tv canconst = false else return Any @@ -1110,7 +1112,7 @@ end function abstract_eval_value_expr(interp::AbstractInterpreter, e::Expr, vtypes::VarTable, sv::InferenceState) if e.head === :static_parameter - n = e.args[1] + n = e.args[1]::Int t = Any if 1 <= n <= length(sv.sptypes) t = sv.sptypes[n] @@ -1129,7 +1131,7 @@ function abstract_eval_special_value(interp::AbstractInterpreter, @nospecialize( elseif isa(e, SSAValue) return abstract_eval_ssavalue(e::SSAValue, sv.src) elseif isa(e, Slot) - return vtypes[slot_id(e)].typ + return (vtypes[slot_id(e)]::VarState).typ elseif isa(e, GlobalRef) return abstract_eval_global(e.mod, e.name) end diff --git a/base/compiler/typeutils.jl b/base/compiler/typeutils.jl index 9ebe759fe87ee..954f14cfbfbbc 100644 --- a/base/compiler/typeutils.jl +++ b/base/compiler/typeutils.jl @@ -34,7 +34,9 @@ end function has_nontrivial_const_info(@nospecialize t) isa(t, PartialStruct) && return true - return isa(t, Const) && !isdefined(typeof(t.val), :instance) && !(isa(t.val, Type) && hasuniquerep(t.val)) + isa(t, Const) || return false + val = t.val + return !isdefined(typeof(val), :instance) && !(isa(val, Type) && hasuniquerep(val)) end # Subtyping currently intentionally answers certain queries incorrectly for kind types. For From 3f30e423912c0f11f5f1c2054ac16dbff3f5c4a8 Mon Sep 17 00:00:00 2001 From: Mark Kittisopikul Date: Sun, 17 Jan 2021 03:18:51 -0500 Subject: [PATCH 56/78] Prepend build_bindir to LLVM_CONFIG_PATH_FIX rather than append (#39275) (cherry picked from commit 26a721b28ad56c006957ee1f2de083befcfe7904) --- Make.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Make.inc b/Make.inc index f79a2a12f74b8..a071fd0c995ba 100644 --- a/Make.inc +++ b/Make.inc @@ -1039,7 +1039,7 @@ endif # SYSTEM_LLVM # Windows builds need a little help finding the LLVM libraries for llvm-config LLVM_CONFIG_PATH_FIX := ifeq ($(OS),WINNT) -LLVM_CONFIG_PATH_FIX := PATH="$(PATH):$(build_bindir)" +LLVM_CONFIG_PATH_FIX := PATH="$(build_bindir):$(PATH)" endif ifeq ($(BUILD_OS),$(OS)) From 2e524c9e90add1bfcfea80a52cd0d2c0ccd2238d Mon Sep 17 00:00:00 2001 From: KristofferC Date: Fri, 22 Jan 2021 09:32:06 +0100 Subject: [PATCH 57/78] bump to latest Pkg release-1.6 --- .../Pkg-537a70350545bfd8f4fe915c6ec9a06708958bb7.tar.gz/md5 | 1 - .../Pkg-537a70350545bfd8f4fe915c6ec9a06708958bb7.tar.gz/sha512 | 1 - .../Pkg-b4a80144ea271e8f4092e52171d659ccd93f7e89.tar.gz/md5 | 1 + .../Pkg-b4a80144ea271e8f4092e52171d659ccd93f7e89.tar.gz/sha512 | 1 + stdlib/Pkg.version | 2 +- 5 files changed, 3 insertions(+), 3 deletions(-) delete mode 100644 deps/checksums/Pkg-537a70350545bfd8f4fe915c6ec9a06708958bb7.tar.gz/md5 delete mode 100644 deps/checksums/Pkg-537a70350545bfd8f4fe915c6ec9a06708958bb7.tar.gz/sha512 create mode 100644 deps/checksums/Pkg-b4a80144ea271e8f4092e52171d659ccd93f7e89.tar.gz/md5 create mode 100644 deps/checksums/Pkg-b4a80144ea271e8f4092e52171d659ccd93f7e89.tar.gz/sha512 diff --git a/deps/checksums/Pkg-537a70350545bfd8f4fe915c6ec9a06708958bb7.tar.gz/md5 b/deps/checksums/Pkg-537a70350545bfd8f4fe915c6ec9a06708958bb7.tar.gz/md5 deleted file mode 100644 index 7bcb96a123043..0000000000000 --- a/deps/checksums/Pkg-537a70350545bfd8f4fe915c6ec9a06708958bb7.tar.gz/md5 +++ /dev/null @@ -1 +0,0 @@ -c09d8e4ba28b2a980982086a7a271367 diff --git a/deps/checksums/Pkg-537a70350545bfd8f4fe915c6ec9a06708958bb7.tar.gz/sha512 b/deps/checksums/Pkg-537a70350545bfd8f4fe915c6ec9a06708958bb7.tar.gz/sha512 deleted file mode 100644 index 6626a954ebbf2..0000000000000 --- a/deps/checksums/Pkg-537a70350545bfd8f4fe915c6ec9a06708958bb7.tar.gz/sha512 +++ /dev/null @@ -1 +0,0 @@ -a148610b9ab6481243d29bf73e83f8bc9d8f3df3fc533abb69113e46dba695b524d2cc5717ab3d743d7a0e32454c2acb633686652e41b692e7cb7a0c8000a543 diff --git a/deps/checksums/Pkg-b4a80144ea271e8f4092e52171d659ccd93f7e89.tar.gz/md5 b/deps/checksums/Pkg-b4a80144ea271e8f4092e52171d659ccd93f7e89.tar.gz/md5 new file mode 100644 index 0000000000000..0feaa1a4ff688 --- /dev/null +++ b/deps/checksums/Pkg-b4a80144ea271e8f4092e52171d659ccd93f7e89.tar.gz/md5 @@ -0,0 +1 @@ +cc0b85144aad9c6950f2cbb7a4a27791 diff --git a/deps/checksums/Pkg-b4a80144ea271e8f4092e52171d659ccd93f7e89.tar.gz/sha512 b/deps/checksums/Pkg-b4a80144ea271e8f4092e52171d659ccd93f7e89.tar.gz/sha512 new file mode 100644 index 0000000000000..13113adf35a42 --- /dev/null +++ b/deps/checksums/Pkg-b4a80144ea271e8f4092e52171d659ccd93f7e89.tar.gz/sha512 @@ -0,0 +1 @@ +ea15ef6c614ad7a172449b2152147ffce850f5839ccb103d50f5e3a5a4ebba2f72a15533a89e16a4d0715e4019e95f478c8bb17fbb642ff8351094a4d5ad483e diff --git a/stdlib/Pkg.version b/stdlib/Pkg.version index c3cef2c09c0c8..474bf851378c9 100644 --- a/stdlib/Pkg.version +++ b/stdlib/Pkg.version @@ -1,2 +1,2 @@ PKG_BRANCH = release-1.6 -PKG_SHA1 = 537a70350545bfd8f4fe915c6ec9a06708958bb7 +PKG_SHA1 = b4a80144ea271e8f4092e52171d659ccd93f7e89 From 0d75f03b4a87e15793c2dbd35a38cba348bfd28d Mon Sep 17 00:00:00 2001 From: Stefan Karpinski Date: Thu, 21 Jan 2021 11:09:34 -0500 Subject: [PATCH 58/78] LibGit2: patch to pass hostkey & port to host verify callback (#39324) It seems that no one actually verifies SSH host identity with libgit2 because the callback doesn't give enough information do so correctly: - It doesn't give the actual host key fingerprint, but rather three different hashes thereof. This means we cannot distinguish a known hosts entry that has a different type (`ssh-rsa`, `ssh-dsa`, etc.) from an entry with a matching type and a fingerprint mismatch: the former should be treated as an unknown host whereas the latter is a host key mismatch; they cannot be distinguished without this patch. - If the user connects on a non-default port (i.e. not 22), this is not passed to the callback in any way. Since there can be different known host entries for different ports and they should be treated as distinct, this also means the current API cannot be used to verify hosts serving SSH on non-standard ports. This patch passes the port. I will try to upstream some version of this patch to libgit2. The same patch has already been applied to the LibGit2 JLL. Fixes #38777. Might fix https://github.com/JuliaLang/Pkg.jl/issues/2334. (cherry picked from commit 2b132342ffd22ee9dabee9e2819584dd085e38f7) --- deps/Versions.make | 2 +- .../md5 | 1 + .../sha512 | 1 + deps/libgit2.mk | 8 +- deps/patches/libgit2-hostkey.patch | 61 ++++++++ stdlib/LibGit2/src/callbacks.jl | 143 +++++++----------- stdlib/LibGit2/src/consts.jl | 10 +- stdlib/LibGit2/test/libgit2.jl | 83 ++++------ 8 files changed, 158 insertions(+), 151 deletions(-) create mode 100644 deps/checksums/LibGit2.v1.2.1+0.x86_64-apple-darwin.tar.gz/md5 create mode 100644 deps/checksums/LibGit2.v1.2.1+0.x86_64-apple-darwin.tar.gz/sha512 create mode 100644 deps/patches/libgit2-hostkey.patch diff --git a/deps/Versions.make b/deps/Versions.make index 9fd9608fc1fa6..22a6c4d744135 100644 --- a/deps/Versions.make +++ b/deps/Versions.make @@ -33,7 +33,7 @@ CURL_JLL_NAME := LibCURL LAPACK_VER := 3.9.0 # LibGit2 -LIBGIT2_VER := 1.1.0 +LIBGIT2_JLL_VER := 1.2.1+0 LIBGIT2_JLL_NAME := LibGit2 # LibSSH2 diff --git a/deps/checksums/LibGit2.v1.2.1+0.x86_64-apple-darwin.tar.gz/md5 b/deps/checksums/LibGit2.v1.2.1+0.x86_64-apple-darwin.tar.gz/md5 new file mode 100644 index 0000000000000..3e66eb33f76f3 --- /dev/null +++ b/deps/checksums/LibGit2.v1.2.1+0.x86_64-apple-darwin.tar.gz/md5 @@ -0,0 +1 @@ +48b3eb5811566f1cc70a9581b8f702f4 diff --git a/deps/checksums/LibGit2.v1.2.1+0.x86_64-apple-darwin.tar.gz/sha512 b/deps/checksums/LibGit2.v1.2.1+0.x86_64-apple-darwin.tar.gz/sha512 new file mode 100644 index 0000000000000..d9a0fef30537c --- /dev/null +++ b/deps/checksums/LibGit2.v1.2.1+0.x86_64-apple-darwin.tar.gz/sha512 @@ -0,0 +1 @@ +46af2fbe9c96a18a97531aefc79e710abd8e12eca64ddcb2a0ddc8bc675dbaed0723ddbd4401d870eddcae04d99c4306cc6bdaa54b063de36d7fc0981ba86587 diff --git a/deps/libgit2.mk b/deps/libgit2.mk index 301e73b454c5e..82e9817134454 100644 --- a/deps/libgit2.mk +++ b/deps/libgit2.mk @@ -46,9 +46,15 @@ $(LIBGIT2_SRC_PATH)/libgit2-mbedtls-incdir.patch-applied: $(LIBGIT2_SRC_PATH)/li patch -p1 -f < $(SRCDIR)/patches/libgit2-mbedtls-incdir.patch echo 1 > $@ +$(LIBGIT2_SRC_PATH)/libgit2-hostkey.patch-applied: $(LIBGIT2_SRC_PATH)/libgit2-mbedtls-incdir.patch-applied + cd $(LIBGIT2_SRC_PATH) && \ + patch -p1 -f < $(SRCDIR)/patches/libgit2-hostkey.patch + echo 1 > $@ + $(BUILDDIR)/$(LIBGIT2_SRC_DIR)/build-configured: \ $(LIBGIT2_SRC_PATH)/libgit2-agent-nonfatal.patch-applied \ - $(LIBGIT2_SRC_PATH)/libgit2-mbedtls-incdir.patch-applied + $(LIBGIT2_SRC_PATH)/libgit2-mbedtls-incdir.patch-applied \ + $(LIBGIT2_SRC_PATH)/libgit2-hostkey.patch-applied $(BUILDDIR)/$(LIBGIT2_SRC_DIR)/build-configured: $(LIBGIT2_SRC_PATH)/source-extracted mkdir -p $(dir $@) diff --git a/deps/patches/libgit2-hostkey.patch b/deps/patches/libgit2-hostkey.patch new file mode 100644 index 0000000000000..16c0f3b13f621 --- /dev/null +++ b/deps/patches/libgit2-hostkey.patch @@ -0,0 +1,61 @@ +diff --git a/include/git2/cert.h b/include/git2/cert.h +index e8cd2d180..54293cd31 100644 +--- a/include/git2/cert.h ++++ b/include/git2/cert.h +@@ -111,6 +111,14 @@ typedef struct { + * have the SHA-256 hash of the hostkey. + */ + unsigned char hash_sha256[32]; ++ ++ /** ++ * Hostkey itself. ++ */ ++ int hostkey_type; ++ size_t hostkey_len; ++ unsigned char hostkey[1024]; ++ + } git_cert_hostkey; + + /** +diff --git a/src/transports/ssh.c b/src/transports/ssh.c +index f4ed05bb1..049697796 100644 +--- a/src/transports/ssh.c ++++ b/src/transports/ssh.c +@@ -523,6 +523,7 @@ static int _git_ssh_setup_conn( + git_credential *cred = NULL; + LIBSSH2_SESSION* session=NULL; + LIBSSH2_CHANNEL* channel=NULL; ++ char *host_and_port; + + t->current_stream = NULL; + +@@ -566,6 +567,12 @@ post_extract: + + cert.parent.cert_type = GIT_CERT_HOSTKEY_LIBSSH2; + ++ key = libssh2_session_hostkey(session, &cert.hostkey_len, &cert.hostkey_type); ++ bzero(&cert.hostkey, sizeof(cert.hostkey)); ++ if (cert.hostkey_len > sizeof(cert.hostkey)) ++ cert.hostkey_len = sizeof(cert.hostkey); ++ memcpy(&cert.hostkey, key, cert.hostkey_len); ++ + #ifdef LIBSSH2_HOSTKEY_HASH_SHA256 + key = libssh2_hostkey_hash(session, LIBSSH2_HOSTKEY_HASH_SHA256); + if (key != NULL) { +@@ -597,7 +604,15 @@ post_extract: + + cert_ptr = &cert; + +- error = t->owner->certificate_check_cb((git_cert *) cert_ptr, 0, urldata.host, t->owner->message_cb_payload); ++ if (git_net_url_is_default_port(&urldata)) { ++ host_and_port = urldata.host; ++ } else { ++ size_t n = strlen(urldata.host) + strlen(urldata.port) + 2; ++ host_and_port = alloca(n); ++ sprintf(host_and_port, "%s:%s", urldata.host, urldata.port); ++ } ++ ++ error = t->owner->certificate_check_cb((git_cert *) cert_ptr, 0, host_and_port, t->owner->message_cb_payload); + + if (error < 0 && error != GIT_PASSTHROUGH) { + if (!git_error_last()) diff --git a/stdlib/LibGit2/src/callbacks.jl b/stdlib/LibGit2/src/callbacks.jl index 604014bbea7b2..8eddb8c864644 100644 --- a/stdlib/LibGit2/src/callbacks.jl +++ b/stdlib/LibGit2/src/callbacks.jl @@ -360,24 +360,14 @@ function fetchhead_foreach_callback(ref_name::Cstring, remote_url::Cstring, end struct CertHostKey - parent :: Cint - mask :: Cint - md5 :: NTuple{16,UInt8} - sha1 :: NTuple{20,UInt8} - sha256 :: NTuple{32,UInt8} -end - -struct KeyHashes - sha1 :: Union{NTuple{20,UInt8}, Nothing} - sha256 :: Union{NTuple{32,UInt8}, Nothing} -end - -function KeyHashes(cert_p::Ptr{CertHostKey}) - cert = unsafe_load(cert_p) - return KeyHashes( - cert.mask & Consts.CERT_SSH_SHA1 != 0 ? cert.sha1 : nothing, - cert.mask & Consts.CERT_SSH_SHA256 != 0 ? cert.sha256 : nothing, - ) + parent :: Cint + mask :: Cint + md5 :: NTuple{16,UInt8} + sha1 :: NTuple{20,UInt8} + sha256 :: NTuple{32,UInt8} + type :: Cint + len :: Csize_t + data :: NTuple{1024,UInt8} end function verify_host_error(message::AbstractString) @@ -406,22 +396,21 @@ function certificate_callback( return Consts.CERT_REJECT elseif transport == "SSH" # SSH verification has to be done here - files = [joinpath(homedir(), ".ssh", "known_hosts")] - check = ssh_knownhost_check(files, host, KeyHashes(cert_p)) + files = NetworkOptions.ssh_known_hosts_files() + cert = unsafe_load(cert_p) + check = ssh_knownhost_check(files, host, cert) valid = false - if check == Consts.SSH_HOST_KNOWN + if check == Consts.LIBSSH2_KNOWNHOST_CHECK_MATCH valid = true - elseif check == Consts.SSH_HOST_UNKNOWN + elseif check == Consts.LIBSSH2_KNOWNHOST_CHECK_NOTFOUND if Sys.which("ssh-keyscan") !== nothing msg = "Please run `ssh-keyscan $host >> $(files[1])` in order to add the server to your known hosts file and then try again." else msg = "Please connect once using `ssh $host` in order to add the server to your known hosts file and then try again. You may not be allowed to log in (wrong user and/or no login allowed), but ssh will prompt you to add a host key for the server which will allow libgit2 to verify the server." end verify_host_error("SSH host verification: the server `$host` is not a known host. $msg") - elseif check == Consts.SSH_HOST_MISMATCH + elseif check == Consts.LIBSSH2_KNOWNHOST_CHECK_MISMATCH verify_host_error("SSH host verification: the identity of the server `$host` does not match its known hosts record. Someone could be trying to man-in-the-middle your connection. It is also possible that the server has changed its key, in which case you should check with the server administrator and if they confirm that the key has been changed, update your known hosts file.") - elseif check == Consts.SSH_HOST_BAD_HASH - verify_host_error("SSH host verification: no secure certificate hash available for `$host`, cannot verify server identity.") else @error("unexpected SSH known host check result", check) end @@ -431,31 +420,6 @@ function certificate_callback( return Consts.CERT_REJECT end -## SSH known host checking -# -# We can't use libssh2_knownhost_check because libgit2, for no good reason, -# doesn't give us a host fingerprint that we can use for that and instead gives -# us multiple hashes of that fingerprint instead. Moreover, since a host can -# have multiple fingerprints in the known hosts file with different encryption -# types (gitlab.com does this, for example), we need to iterate through all the -# known hosts entries and manually check if any of them is a match. -# -# The fact that libgit2 won't give us a fingerprint also means that we cannot, -# even if we wanted to, prompt the user for whether to add the fingerprint to -# the known hosts file, since we don't have the fingerprint that should be -# added. The only option is to instruct the user how to add it themselves. -# -# Check logic: if a host appears in a known hosts file at all then one of the -# keys in that file must match or we declare a mismatch; if the host name -# doesn't appear in the file at all, however, we will continue searching files. -# -# This allows adding a host to the system known hosts file to fully override -# that host appearing in a bundled known hosts file. It is necessary to allow -# any of multiple entries in a single file to match, however, to allow for the -# possiblity that the file contains multiple fingerprints for the same host. If -# libgit2 gave us the fucking fingerprint then we could search for only an entry -# with the correct type, but we can't do that without the actual fingerprint. - struct KnownHost magic :: Cuint node :: Ptr{Cvoid} @@ -465,12 +429,27 @@ struct KnownHost end function ssh_knownhost_check( - files :: AbstractVector{<:AbstractString}, - host :: AbstractString, - hashes :: KeyHashes, + files :: AbstractVector{<:AbstractString}, + host :: AbstractString, + cert :: CertHostKey, +) + key = collect(cert.data)[1:cert.len] + return ssh_knownhost_check(files, host, key) +end + +function ssh_knownhost_check( + files :: AbstractVector{<:AbstractString}, + host :: AbstractString, + key :: String, ) - hashes.sha1 === hashes.sha256 === nothing && - return Consts.SSH_HOST_BAD_HASH + if (m = match(r"^(.+):(\d+)$", host)) !== nothing + host = m.captures[1] + port = parse(Int, m.captures[2]) + else + port = 22 # default SSH port + end + mask = Consts.LIBSSH2_KNOWNHOST_TYPE_PLAIN | + Consts.LIBSSH2_KNOWNHOST_KEYENC_RAW session = @ccall "libssh2".libssh2_session_init_ex( C_NULL :: Ptr{Cvoid}, C_NULL :: Ptr{Cvoid}, @@ -492,46 +471,32 @@ function ssh_knownhost_check( @ccall "libssh2".libssh2_knownhost_free(hosts::Ptr{Cvoid})::Cvoid continue end - name_match = false - prev = Ptr{KnownHost}(0) - store = Ref{Ptr{KnownHost}}() - while true - get = @ccall "libssh2".libssh2_knownhost_get( - hosts :: Ptr{Cvoid}, - store :: Ptr{Ptr{KnownHost}}, - prev :: Ptr{KnownHost}, - ) :: Cint - get < 0 && @warn("Error searching SSH known hosts file `$file`") - get == 0 || break # end of file or error - # got a known hosts record for host, now check its key hash - prev = store[] - known_host = unsafe_load(prev) - known_host.name == C_NULL && continue - host == unsafe_string(known_host.name) || continue - name_match = true # we've found some entry in this file - key_match = true # all available hashes must match - key = base64decode(unsafe_string(known_host.key)) - if hashes.sha1 !== nothing - key_match &= sha1(key) == collect(hashes.sha1) - end - if hashes.sha256 !== nothing - key_match &= sha256(key) == collect(hashes.sha256) - end - key_match || continue - # name and key match found + size = ncodeunits(key) + check = @ccall "libssh2".libssh2_knownhost_checkp( + hosts :: Ptr{Cvoid}, + host :: Cstring, + port :: Cint, + key :: Ptr{UInt8}, + size :: Csize_t, + mask :: Cint, + C_NULL :: Ptr{Ptr{KnownHost}}, + ) :: Cint + if check == Consts.LIBSSH2_KNOWNHOST_CHECK_MATCH || + check == Consts.LIBSSH2_KNOWNHOST_CHECK_MISMATCH @ccall "libssh2".libssh2_knownhost_free(hosts::Ptr{Cvoid})::Cvoid @assert 0 == @ccall "libssh2".libssh2_session_free(session::Ptr{Cvoid})::Cint - return Consts.SSH_HOST_KNOWN + return check + else + @ccall "libssh2".libssh2_knownhost_free(hosts::Ptr{Cvoid})::Cvoid + if check == Consts.LIBSSH2_KNOWNHOST_CHECK_FAILURE + @warn("Error searching SSH known hosts file `$file`") + end + continue end - @ccall "libssh2".libssh2_knownhost_free(hosts::Ptr{Cvoid})::Cvoid - name_match || continue # no name match, search more files - # name match but no key match => host mismatch - @assert 0 == @ccall "libssh2".libssh2_session_free(session::Ptr{Cvoid})::Cint - return Consts.SSH_HOST_MISMATCH end # name not found in any known hosts files @assert 0 == @ccall "libssh2".libssh2_session_free(session::Ptr{Cvoid})::Cint - return Consts.SSH_HOST_UNKNOWN + return Consts.LIBSSH2_KNOWNHOST_CHECK_NOTFOUND end "C function pointer for `mirror_callback`" diff --git a/stdlib/LibGit2/src/consts.jl b/stdlib/LibGit2/src/consts.jl index 7658b2d47d779..2bc9edaf8950b 100644 --- a/stdlib/LibGit2/src/consts.jl +++ b/stdlib/LibGit2/src/consts.jl @@ -330,11 +330,11 @@ const LIBSSH2_KNOWNHOST_TYPE_CUSTOM = 3 const LIBSSH2_KNOWNHOST_KEYENC_RAW = 1 << 16 const LIBSSH2_KNOWNHOST_KEYENC_BASE64 = 2 << 16 -# internal constants for SSH host verification outcomes -const SSH_HOST_KNOWN = 0 -const SSH_HOST_UNKNOWN = 1 -const SSH_HOST_MISMATCH = 2 -const SSH_HOST_BAD_HASH = 3 +# libssh2 host check return values +const LIBSSH2_KNOWNHOST_CHECK_MATCH = 0 +const LIBSSH2_KNOWNHOST_CHECK_MISMATCH = 1 +const LIBSSH2_KNOWNHOST_CHECK_NOTFOUND = 2 +const LIBSSH2_KNOWNHOST_CHECK_FAILURE = 3 @enum(GIT_SUBMODULE_IGNORE, SUBMODULE_IGNORE_UNSPECIFIED = -1, # use the submodule's configuration SUBMODULE_IGNORE_NONE = 1, # any change or untracked == dirty diff --git a/stdlib/LibGit2/test/libgit2.jl b/stdlib/LibGit2/test/libgit2.jl index 2bf4182841874..0433e51f89780 100644 --- a/stdlib/LibGit2/test/libgit2.jl +++ b/stdlib/LibGit2/test/libgit2.jl @@ -2394,35 +2394,17 @@ mktempdir() do dir end @testset "SSH known host checking" begin - key_hashes(sha1::String, sha256::String) = LibGit2.KeyHashes( - Tuple(hex2bytes(sha1)), - Tuple(hex2bytes(sha256)), - ) + CHECK_MATCH = LibGit2.Consts.LIBSSH2_KNOWNHOST_CHECK_MATCH + CHECK_MISMATCH = LibGit2.Consts.LIBSSH2_KNOWNHOST_CHECK_MISMATCH + CHECK_NOTFOUND = LibGit2.Consts.LIBSSH2_KNOWNHOST_CHECK_NOTFOUND + CHECK_FAILURE = LibGit2.Consts.LIBSSH2_KNOWNHOST_CHECK_FAILURE + # randomly generated hashes matching no hosts - random_key_hashes = key_hashes( - "a9971372d02a67bdfea82e2b4808b4cf478b49c0", - "45aac5c20d5c7f8b998fee12fa9b75086c0d3ed6e33063f7ce940409ff4efbbc" - ) + random_key = "\0\0\0\assh-rsa\0\0\0\x01#\0\0\0\x81\0¿\x95\xbe9\xfc9g\n:\xcf&\x06YA\xb5`\x97\xc13A\xbf;T+C\xc9Ut J>\xc5ҍ\xc4_S\x8a \xc1S\xeb\x15FH\xd2a\x04.D\xeeb\xac\x8f\xdb\xcc\xef\xc4l G\x9bR\xafp\x17s<=\x12\xab\x04ڳif\\A\x9ba0\xde%\xdei\x04\xc3\r\xb3\x81w\x88\xec\xc0f\x15A;AÝ\xc0r\xa1\u5fe\xd3\xf6)8\x8e\xa3\xcbc\xee\xdd\$\x04\x0f\xc1\xb4\x1f\xcc\xecK\xe0\x99" # hashes of the unique github.com fingerprint - github_key_hashes = key_hashes( - "bf6b6825d2977c511a475bbefb88aad54a92ac73", - "9d385b83a9175292561a5ec4d4818e0aca51a264f17420112ef88ac3a139498f" - ) + github_key = "\0\0\0\assh-rsa\0\0\0\x01#\0\0\x01\x01\0\xab`;\x85\x11\xa6vy\xbd\xb5@\xdb;\xd2\x03K\0J\xe96\xd0k\xe3\xd7`\xf0\x8f˪\xdbN\xb4\xedóǑ\xc7\n\xae\x9at\xc9Xi\xe4wD!«\xea\x92\xe5T0_8\xb5\xfdAK2\b\xe5t\xc37\xe3 \x93e\x18F,vRɋ1\xe1n}\xa6R;\xd2\0t*dD\xd8?\xcd^\x172\xd06sǷ\x81\x15UH{U\xf0\xc4IO8)\xec\xe6\x0f\x94%Z\x95˚\xf57\xd7\xfc\x8c\x7f\xe4\x9e\xf3\x18GN\xf2\x92\t\x92\x05\"e\xb0\xa0n\xa6mJ\x16\x7f\xd9\xf3\xa4\x8a\x1aJ0~\xc1\xea\xaaQI\xa9i\xa6\xac]V\xa5\xefb~Q}\x81\xfbdO[t\\OG\x8e\xcd\b*\x94\x92\xf7D\xaa\xd3&\xf7l\x8cM\xc9\x10\vƫyF\x1d&W\xcbo\x06\xde\xc9.kd\xa6V/\xf0\xe3 \x84\xea\x06\xce\x0e\xa9\xd3ZX;\xfb\0\xbaӌ\x9d\x19p github_hashes, - "gitlab.com" => gitlab_hashes, - ], hash in hashes + for (host, key) in [ + "github.com" => github_key, + "gitlab.com" => gitlab_key, + ] for files in [[no_file], [empty_file]] - check = LibGit2.ssh_knownhost_check(files, host, hash) - @test check == LibGit2.Consts.SSH_HOST_UNKNOWN + check = LibGit2.ssh_knownhost_check(files, host, key) + @test check == CHECK_NOTFOUND end for files in [ [known_hosts], - [empty_file; known_hosts], - [known_hosts; empty_file], - [known_hosts; wrong_hosts], + [empty_file, known_hosts], + [known_hosts, empty_file], + [known_hosts, wrong_hosts], ] - check = LibGit2.ssh_knownhost_check(files, host, hash) - @test check == LibGit2.Consts.SSH_HOST_KNOWN + check = LibGit2.ssh_knownhost_check(files, host, key) + @test check == CHECK_MATCH end for files in [ [wrong_hosts], - [empty_file; wrong_hosts], - [wrong_hosts; empty_file], - [wrong_hosts; known_hosts], + [empty_file, wrong_hosts], + [wrong_hosts, empty_file], + [wrong_hosts, known_hosts], ] - check = LibGit2.ssh_knownhost_check(files, host, hash) - @test check == LibGit2.Consts.SSH_HOST_MISMATCH + check = LibGit2.ssh_knownhost_check(files, host, key) + @test check == CHECK_MISMATCH end end end From f5be2e5570f2fcfb8f7712d9d1fe2da6b0e81df9 Mon Sep 17 00:00:00 2001 From: Curtis Vogt Date: Wed, 13 Jan 2021 09:45:18 -0600 Subject: [PATCH 59/78] Add libldl to SuiteSparse libs (#39211) (cherry picked from commit 491d9255c94eadc137d5840b2acd1d8bfaee97d1) --- deps/suitesparse.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deps/suitesparse.mk b/deps/suitesparse.mk index f4515f6b0a884..eda7a1c21c12d 100644 --- a/deps/suitesparse.mk +++ b/deps/suitesparse.mk @@ -17,7 +17,7 @@ CHOLMOD_CONFIG += -DNPARTITION ifneq ($(USE_BINARYBUILDER_SUITESPARSE), 1) SUITESPARSE_PROJECTS := AMD BTF CAMD CCOLAMD COLAMD CHOLMOD LDL KLU UMFPACK RBio SPQR -SUITESPARSE_LIBS := $(addsuffix .*$(SHLIB_EXT)*,suitesparseconfig amd btf camd ccolamd colamd cholmod klu umfpack rbio spqr) +SUITESPARSE_LIBS := $(addsuffix .*$(SHLIB_EXT)*,suitesparseconfig amd btf camd ccolamd colamd cholmod klu ldl umfpack rbio spqr) SUITE_SPARSE_LIB := $(LDFLAGS) -L"$(abspath $(BUILDDIR))/SuiteSparse-$(SUITESPARSE_VER)/lib" ifeq ($(OS), Darwin) From ba575cade32dc52e5976869f36c7a35cc7f6180b Mon Sep 17 00:00:00 2001 From: Curtis Vogt Date: Wed, 13 Jan 2021 09:46:18 -0600 Subject: [PATCH 60/78] Copy libgomp as part of CSL build (#39212) (cherry picked from commit 7e854054b1a758cb7dcc4a8663131780933386ca) --- deps/csl.mk | 2 ++ 1 file changed, 2 insertions(+) diff --git a/deps/csl.mk b/deps/csl.mk index b25957b9019c5..2858d9919a454 100644 --- a/deps/csl.mk +++ b/deps/csl.mk @@ -44,6 +44,7 @@ $(eval $(call copy_csl,$(call gen_libname,quadmath,0))) $(eval $(call copy_csl,$(call gen_libname,stdc++,6))) $(eval $(call copy_csl,$(call gen_libname,ssp,0))) $(eval $(call copy_csl,$(call gen_libname,atomic,1))) +$(eval $(call copy_csl,$(call gen_libname,gomp,1))) ifeq ($(OS),WINNT) # Windwos has special gcc_s names @@ -73,6 +74,7 @@ clean-csl: -rm -f $(build_shlibdir)/libpthread*$(SHLIB_EXT)* -rm -f $(build_shlibdir)/libwinpthread*$(SHLIB_EXT)* -rm -f $(build_shlibdir)/libatomic*$(SHLIB_EXT)* + -rm -f $(build_shlibdir)/libgomp*$(SHLIB_EXT)* else $(eval $(call bb-install,csl,CSL,true)) From d5d50f3cdf08902307b92d63ed52dc57f3079e0d Mon Sep 17 00:00:00 2001 From: Sacha Verweij Date: Fri, 15 Jan 2021 19:05:44 -0500 Subject: [PATCH 61/78] Correct mbedtls-cmake-findpy.patch whitespace. mbedtls-cmake-findpy.patch lacks some whitespace that exists in the target file, which causes patch application failure when the patch tool is strict about whitespace. This teensy diff makes the patch's whitespace strictly match that in the target file. (cherry picked from commit 6416a3e9196a5aac351fbd7ab997e67c28010b7a) --- deps/patches/mbedtls-cmake-findpy.patch | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deps/patches/mbedtls-cmake-findpy.patch b/deps/patches/mbedtls-cmake-findpy.patch index 0b66a8b2ac1d7..ddbb1fc2f4aa7 100644 --- a/deps/patches/mbedtls-cmake-findpy.patch +++ b/deps/patches/mbedtls-cmake-findpy.patch @@ -19,5 +19,5 @@ index 8833246..2ed55ed 100644 +cmake_policy(SET CMP0012 NEW) + if(TEST_CPP) - project("mbed TLS" C CXX) + project("mbed TLS" C CXX) else() From 5ba2d9c4679bf82ee5ffab2e0fd851fc4b4f2f87 Mon Sep 17 00:00:00 2001 From: Stefan Karpinski Date: Sun, 24 Jan 2021 21:28:36 -0500 Subject: [PATCH 62/78] libgit2: fix for broken SSH host callback (#39364) (cherry picked from commit dbaca8ba16d406004c53cb211b9eaf8028f6b6be) --- deps/Versions.make | 2 +- .../LibGit2.v1.2.2+0.x86_64-apple-darwin.tar.gz/md5 | 1 + .../LibGit2.v1.2.2+0.x86_64-apple-darwin.tar.gz/sha512 | 1 + deps/patches/libgit2-hostkey.patch | 4 ++-- stdlib/LibGit2/src/callbacks.jl | 6 +++--- stdlib/LibGit2/test/libgit2.jl | 6 +++--- 6 files changed, 11 insertions(+), 9 deletions(-) create mode 100644 deps/checksums/LibGit2.v1.2.2+0.x86_64-apple-darwin.tar.gz/md5 create mode 100644 deps/checksums/LibGit2.v1.2.2+0.x86_64-apple-darwin.tar.gz/sha512 diff --git a/deps/Versions.make b/deps/Versions.make index 22a6c4d744135..b0b2e72f63f2e 100644 --- a/deps/Versions.make +++ b/deps/Versions.make @@ -33,7 +33,7 @@ CURL_JLL_NAME := LibCURL LAPACK_VER := 3.9.0 # LibGit2 -LIBGIT2_JLL_VER := 1.2.1+0 +LIBGIT2_JLL_VER := 1.2.2+0 LIBGIT2_JLL_NAME := LibGit2 # LibSSH2 diff --git a/deps/checksums/LibGit2.v1.2.2+0.x86_64-apple-darwin.tar.gz/md5 b/deps/checksums/LibGit2.v1.2.2+0.x86_64-apple-darwin.tar.gz/md5 new file mode 100644 index 0000000000000..fc98d12c46b63 --- /dev/null +++ b/deps/checksums/LibGit2.v1.2.2+0.x86_64-apple-darwin.tar.gz/md5 @@ -0,0 +1 @@ +693080c66702c9ff106b0935f01d1f96 diff --git a/deps/checksums/LibGit2.v1.2.2+0.x86_64-apple-darwin.tar.gz/sha512 b/deps/checksums/LibGit2.v1.2.2+0.x86_64-apple-darwin.tar.gz/sha512 new file mode 100644 index 0000000000000..bf56d1c06d292 --- /dev/null +++ b/deps/checksums/LibGit2.v1.2.2+0.x86_64-apple-darwin.tar.gz/sha512 @@ -0,0 +1 @@ +f21d5846b443188a0c604255dce77603ea861db8d4c6fc55cebd5db6da07e94ae40f0a165221c95e13db9df8777fddb05f55c865f554f45e56cd442332a95336 diff --git a/deps/patches/libgit2-hostkey.patch b/deps/patches/libgit2-hostkey.patch index 16c0f3b13f621..f07d4d1e0a116 100644 --- a/deps/patches/libgit2-hostkey.patch +++ b/deps/patches/libgit2-hostkey.patch @@ -18,7 +18,7 @@ index e8cd2d180..54293cd31 100644 /** diff --git a/src/transports/ssh.c b/src/transports/ssh.c -index f4ed05bb1..049697796 100644 +index f4ed05bb1..ec6366a5f 100644 --- a/src/transports/ssh.c +++ b/src/transports/ssh.c @@ -523,6 +523,7 @@ static int _git_ssh_setup_conn( @@ -47,7 +47,7 @@ index f4ed05bb1..049697796 100644 cert_ptr = &cert; - error = t->owner->certificate_check_cb((git_cert *) cert_ptr, 0, urldata.host, t->owner->message_cb_payload); -+ if (git_net_url_is_default_port(&urldata)) { ++ if (atoi(urldata.port) == SSH_DEFAULT_PORT) { + host_and_port = urldata.host; + } else { + size_t n = strlen(urldata.host) + strlen(urldata.port) + 2; diff --git a/stdlib/LibGit2/src/callbacks.jl b/stdlib/LibGit2/src/callbacks.jl index 8eddb8c864644..18de45a994420 100644 --- a/stdlib/LibGit2/src/callbacks.jl +++ b/stdlib/LibGit2/src/callbacks.jl @@ -440,7 +440,7 @@ end function ssh_knownhost_check( files :: AbstractVector{<:AbstractString}, host :: AbstractString, - key :: String, + key :: Vector{UInt8}, ) if (m = match(r"^(.+):(\d+)$", host)) !== nothing host = m.captures[1] @@ -448,6 +448,7 @@ function ssh_knownhost_check( else port = 22 # default SSH port end + len = length(key) mask = Consts.LIBSSH2_KNOWNHOST_TYPE_PLAIN | Consts.LIBSSH2_KNOWNHOST_KEYENC_RAW session = @ccall "libssh2".libssh2_session_init_ex( @@ -471,13 +472,12 @@ function ssh_knownhost_check( @ccall "libssh2".libssh2_knownhost_free(hosts::Ptr{Cvoid})::Cvoid continue end - size = ncodeunits(key) check = @ccall "libssh2".libssh2_knownhost_checkp( hosts :: Ptr{Cvoid}, host :: Cstring, port :: Cint, key :: Ptr{UInt8}, - size :: Csize_t, + len :: Csize_t, mask :: Cint, C_NULL :: Ptr{Ptr{KnownHost}}, ) :: Cint diff --git a/stdlib/LibGit2/test/libgit2.jl b/stdlib/LibGit2/test/libgit2.jl index 0433e51f89780..bc678b2dc7160 100644 --- a/stdlib/LibGit2/test/libgit2.jl +++ b/stdlib/LibGit2/test/libgit2.jl @@ -2400,11 +2400,11 @@ mktempdir() do dir CHECK_FAILURE = LibGit2.Consts.LIBSSH2_KNOWNHOST_CHECK_FAILURE # randomly generated hashes matching no hosts - random_key = "\0\0\0\assh-rsa\0\0\0\x01#\0\0\0\x81\0¿\x95\xbe9\xfc9g\n:\xcf&\x06YA\xb5`\x97\xc13A\xbf;T+C\xc9Ut J>\xc5ҍ\xc4_S\x8a \xc1S\xeb\x15FH\xd2a\x04.D\xeeb\xac\x8f\xdb\xcc\xef\xc4l G\x9bR\xafp\x17s<=\x12\xab\x04ڳif\\A\x9ba0\xde%\xdei\x04\xc3\r\xb3\x81w\x88\xec\xc0f\x15A;AÝ\xc0r\xa1\u5fe\xd3\xf6)8\x8e\xa3\xcbc\xee\xdd\$\x04\x0f\xc1\xb4\x1f\xcc\xecK\xe0\x99" + random_key = "\0\0\0\assh-rsa\0\0\0\x01#\0\0\0\x81\0¿\x95\xbe9\xfc9g\n:\xcf&\x06YA\xb5`\x97\xc13A\xbf;T+C\xc9Ut J>\xc5ҍ\xc4_S\x8a \xc1S\xeb\x15FH\xd2a\x04.D\xeeb\xac\x8f\xdb\xcc\xef\xc4l G\x9bR\xafp\x17s<=\x12\xab\x04ڳif\\A\x9ba0\xde%\xdei\x04\xc3\r\xb3\x81w\x88\xec\xc0f\x15A;AÝ\xc0r\xa1\u5fe\xd3\xf6)8\x8e\xa3\xcbc\xee\xdd\$\x04\x0f\xc1\xb4\x1f\xcc\xecK\xe0\x99" |> codeunits |> collect # hashes of the unique github.com fingerprint - github_key = "\0\0\0\assh-rsa\0\0\0\x01#\0\0\x01\x01\0\xab`;\x85\x11\xa6vy\xbd\xb5@\xdb;\xd2\x03K\0J\xe96\xd0k\xe3\xd7`\xf0\x8f˪\xdbN\xb4\xedóǑ\xc7\n\xae\x9at\xc9Xi\xe4wD!«\xea\x92\xe5T0_8\xb5\xfdAK2\b\xe5t\xc37\xe3 \x93e\x18F,vRɋ1\xe1n}\xa6R;\xd2\0t*dD\xd8?\xcd^\x172\xd06sǷ\x81\x15UH{U\xf0\xc4IO8)\xec\xe6\x0f\x94%Z\x95˚\xf57\xd7\xfc\x8c\x7f\xe4\x9e\xf3\x18GN\xf2\x92\t\x92\x05\"e\xb0\xa0n\xa6mJ\x16\x7f\xd9\xf3\xa4\x8a\x1aJ0~\xc1\xea\xaaQI\xa9i\xa6\xac]V\xa5\xefb~Q}\x81\xfbdO[t\\OG\x8e\xcd\b*\x94\x92\xf7D\xaa\xd3&\xf7l\x8cM\xc9\x10\vƫyF\x1d&W\xcbo\x06\xde\xc9.kd\xa6V/\xf0\xe3 \x84\xea\x06\xce\x0e\xa9\xd3ZX;\xfb\0\xbaӌ\x9d\x19p codeunits |> collect # hashes of the middle github.com fingerprint - gitlab_key = "\0\0\0\vssh-ed25519\0\0\0 \a\xee\br\x95N:\xae\xc6\xfbz\bέtn\x12.\x9dA\xb6\x7f\xe79\xe1\xc7\x13\x95\x0e\xcd\x17_" + gitlab_key = "\0\0\0\vssh-ed25519\0\0\0 \a\xee\br\x95N:\xae\xc6\xfbz\bέtn\x12.\x9dA\xb6\x7f\xe79\xe1\xc7\x13\x95\x0e\xcd\x17_" |> codeunits |> collect # various known hosts files no_file = tempname() From e8e1765967fc5906147d251cc44ef94fce8c5cc1 Mon Sep 17 00:00:00 2001 From: Jameson Nash Date: Mon, 25 Jan 2021 11:55:28 -0500 Subject: [PATCH 63/78] inference: SCC handling missing for return_type_tfunc (#39375) This has actually been broken for a long time, so it only got noticed when it caused a regression. Fixes #39361 (cherry picked from commit fd8f97e98c93796a2913bb5e6be4c6637659b615) --- base/compiler/tfuncs.jl | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/base/compiler/tfuncs.jl b/base/compiler/tfuncs.jl index faaee3d9ba0b1..3d5ad1768e5a4 100644 --- a/base/compiler/tfuncs.jl +++ b/base/compiler/tfuncs.jl @@ -1585,25 +1585,25 @@ function return_type_tfunc(interp::AbstractInterpreter, argtypes::Vector{Any}, s if isa(rt, Const) # output was computed to be constant return Const(typeof(rt.val)) + end + rt = widenconst(rt) + if rt === Bottom || (isconcretetype(rt) && !iskindtype(rt)) + # output cannot be improved so it is known for certain + return Const(rt) + elseif !isempty(sv.pclimitations) + # conservatively express uncertainty of this result + # in two ways: both as being a subtype of this, and + # because of LimitedAccuracy causes + return Type{<:rt} + elseif (isa(tt, Const) || isconstType(tt)) && + (isa(aft, Const) || isconstType(aft)) + # input arguments were known for certain + # XXX: this doesn't imply we know anything about rt + return Const(rt) + elseif isType(rt) + return Type{rt} else - inaccurate = nothing - rt isa LimitedAccuracy && (inaccurate = rt.causes; rt = rt.typ) - rt = widenconst(rt) - if hasuniquerep(rt) || rt === Bottom - # output type was known for certain - return Const(rt) - elseif inaccurate !== nothing - return LimitedAccuracy(Type{<:rt}, inaccurate) - elseif (isa(tt, Const) || isconstType(tt)) && - (isa(aft, Const) || isconstType(aft)) - # input arguments were known for certain - # XXX: this doesn't imply we know anything about rt - return Const(rt) - elseif isType(rt) - return Type{rt} - else - return Type{<:rt} - end + return Type{<:rt} end end end From a5d3675e1e4ffe923e4879cbebf8130c44143b96 Mon Sep 17 00:00:00 2001 From: Jameson Nash Date: Mon, 25 Jan 2021 11:56:43 -0500 Subject: [PATCH 64/78] gf: invalidate when adding new methods (#39343) Error introduced by #36733 Fixes #38435 (cherry picked from commit cdaf7405349c3d5389c36da47e0b9386b74db11a) --- src/gf.c | 34 +++++++++++++++++++++++----------- test/worlds.jl | 8 ++++++++ 2 files changed, 31 insertions(+), 11 deletions(-) diff --git a/src/gf.c b/src/gf.c index 3d313e5be4b84..9e37d1c518954 100644 --- a/src/gf.c +++ b/src/gf.c @@ -1659,21 +1659,33 @@ JL_DLLEXPORT void jl_method_table_insert(jl_methtable_t *mt, jl_method_t *method size_t ins = 0; for (i = 1; i < na; i += 2) { jl_value_t *backedgetyp = backedges[i - 1]; + int missing = 0; if (jl_type_intersection2(backedgetyp, (jl_value_t*)type, &isect, &isect2)) { - // see if the intersection was actually already fully - // covered by anything (method or ambiguity is okay) + // See if the intersection was actually already fully + // covered, but that the new method is ambiguous. + // -> no previous method: now there is one, need to update the missing edge + // -> one+ previously matching method(s): + // -> more specific then all of them: need to update the missing edge + // -> some may have been ambiguous: now there is a replacement + // -> some may have been called: now there is a replacement (also will be detected in the loop later) + // -> less specific or ambiguous with any one of them: can ignore the missing edge (not missing) + // -> some may have been ambiguous: still are + // -> some may have been called: they may be partly replaced (will be detected in the loop later) + missing = 1; size_t j; for (j = 0; j < n; j++) { jl_method_t *m = d[j]; - if (jl_subtype(isect, m->sig)) - break; - if (isect2 && jl_subtype(isect2, m->sig)) - break; + if (jl_subtype(isect, m->sig) || (isect2 && jl_subtype(isect2, m->sig))) { + // We now know that there actually was a previous + // method for this part of the type intersection. + if (!jl_type_morespecific(type, m->sig)) { + missing = 0; + break; + } + } } - if (j != n) - isect = jl_bottom_type; } - if (isect != jl_bottom_type) { + if (missing) { jl_method_instance_t *backedge = (jl_method_instance_t*)backedges[i]; invalidate_external(backedge, max_world); invalidate_method_instance(backedge, max_world, 0); @@ -1715,7 +1727,7 @@ JL_DLLEXPORT void jl_method_table_insert(jl_methtable_t *mt, jl_method_t *method isect3 = jl_type_intersection(m->sig, (jl_value_t*)mi->specTypes); if (jl_type_intersection2(type, isect3, &isect, &isect2)) { if (morespec[j] == (char)morespec_unknown) - morespec[j] = (char)jl_type_morespecific(m->sig, type) ? morespec_is : morespec_isnot; + morespec[j] = (char)(jl_type_morespecific(m->sig, type) ? morespec_is : morespec_isnot); if (morespec[j] == (char)morespec_is) // not actually shadowing--the existing method is still better break; @@ -1730,7 +1742,7 @@ JL_DLLEXPORT void jl_method_table_insert(jl_methtable_t *mt, jl_method_t *method if (m == m2 || !(jl_subtype(isect, m2->sig) || (isect && jl_subtype(isect, m2->sig)))) continue; if (morespec[k] == (char)morespec_unknown) - morespec[k] = (char)jl_type_morespecific(m2->sig, type) ? morespec_is : morespec_isnot; + morespec[k] = (char)(jl_type_morespecific(m2->sig, type) ? morespec_is : morespec_isnot); if (morespec[k] == (char)morespec_is) // not actually shadowing this--m2 will still be better break; diff --git a/test/worlds.jl b/test/worlds.jl index a6aae68da2ca7..d1072ce6ba918 100644 --- a/test/worlds.jl +++ b/test/worlds.jl @@ -200,6 +200,14 @@ notify(c26506_1) wait(c26506_2) @test result26506[1] == 3 +# issue #38435 +f38435(::Int, ::Any) = 1 +f38435(::Any, ::Int) = 2 +g38435(x) = f38435(x, x) +@test_throws MethodError(f38435, (1, 1), Base.get_world_counter()) g38435(1) +f38435(::Int, ::Int) = 3.0 +@test g38435(1) === 3.0 + ## Invalidation tests From bfae07c8448d7252d7ad3c64a6cc7a15a5a6582d Mon Sep 17 00:00:00 2001 From: Max Horn Date: Tue, 26 Jan 2021 01:44:45 +0100 Subject: [PATCH 65/78] Add basic docs for (Lazy)Artifacts stdlibs (#39073) (cherry picked from commit debf26e33ee249a3c9105a09644be6cb1d140977) --- stdlib/Artifacts/docs/src/index.md | 21 +++++++++++++++++++++ stdlib/Artifacts/src/Artifacts.jl | 4 ++-- stdlib/LazyArtifacts/docs/src/index.md | 10 ++++++++++ 3 files changed, 33 insertions(+), 2 deletions(-) create mode 100644 stdlib/Artifacts/docs/src/index.md create mode 100644 stdlib/LazyArtifacts/docs/src/index.md diff --git a/stdlib/Artifacts/docs/src/index.md b/stdlib/Artifacts/docs/src/index.md new file mode 100644 index 0000000000000..80f4c62cbf77f --- /dev/null +++ b/stdlib/Artifacts/docs/src/index.md @@ -0,0 +1,21 @@ +# Artifacts + +```@meta +DocTestSetup = :(using Artifacts) +``` + +Starting with Julia 1.6, the artifacts support has moved from `Pkg.jl` to Julia itself. +Until proper documentation can be added here, you can learn more about artifacts in the +`Pkg.jl` manual at . + +!!! compat "Julia 1.6" + Julia's artifacts API requires at least Julia 1.6. In Julia + versions 1.3 to 1.5, you can use `Pkg.Artifacts` instead. + + +```@docs +Artifacts.artifact_meta +Artifacts.artifact_hash +Artifacts.find_artifacts_toml +Artifacts.@artifact_str +``` diff --git a/stdlib/Artifacts/src/Artifacts.jl b/stdlib/Artifacts/src/Artifacts.jl index 626e480377bb8..fd65494782d92 100644 --- a/stdlib/Artifacts/src/Artifacts.jl +++ b/stdlib/Artifacts/src/Artifacts.jl @@ -551,7 +551,7 @@ function _artifact_str(__module__, artifacts_toml, name, path_tail, artifact_dic error("Artifact $(repr(name)) was not installed correctly. Try `using Pkg; Pkg.instantiate()` to re-install all missing resources.") end -""" +raw""" split_artifact_slash(name::String) Splits an artifact indexing string by path deliminters, isolates the first path element, @@ -559,7 +559,7 @@ returning that and the `joinpath()` of the remaining arguments. This normalizes separators to the native path separator for the current platform. Examples: # Examples -```jldoctest +```jldoctest; setup = :(using Artifacts: split_artifact_slash) julia> split_artifact_slash("Foo") ("Foo", "") diff --git a/stdlib/LazyArtifacts/docs/src/index.md b/stdlib/LazyArtifacts/docs/src/index.md new file mode 100644 index 0000000000000..9de6b219c6988 --- /dev/null +++ b/stdlib/LazyArtifacts/docs/src/index.md @@ -0,0 +1,10 @@ +# Lazy Artifacts + +```@meta +DocTestSetup = :(using LazyArtifacts) +``` + +In order for a package to download artifacts lazily, `LazyArtifacts` must be +explicitly listed as a dependency of that package. + +For further information on artifacts, see [Artifacts](@ref). From d0b97ea75ce9b7b00415e20fd02e2dfb7847d1e2 Mon Sep 17 00:00:00 2001 From: Tim Besard Date: Mon, 25 Jan 2021 12:03:58 +0100 Subject: [PATCH 66/78] Don't touch gvars when compiling for an external back-end. (cherry picked from commit df2a1c5fb307c0d2d4d9493c1831a38cf8a24843) --- src/aotcompile.cpp | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/aotcompile.cpp b/src/aotcompile.cpp index c95d6430e04dd..5f2d159db2cc0 100644 --- a/src/aotcompile.cpp +++ b/src/aotcompile.cpp @@ -279,7 +279,7 @@ static void jl_ci_cache_lookup(const jl_cgparams_t &cgparams, jl_method_instance // takes the running content that has collected in the shadow module and dump it to disk // this builds the object file portion of the sysimage files for fast startup, and can // also be used be extern consumers like GPUCompiler.jl to obtain a module containing -// all reachable & inferrrable functions. The `policy` flag switches between the defaul +// all reachable & inferrrable functions. The `policy` flag switches between the default // mode `0` and the extern mode `1`. extern "C" JL_DLLEXPORT void *jl_create_native(jl_array_t *methods, const jl_cgparams_t cgparams, int _policy) @@ -404,16 +404,18 @@ void *jl_create_native(jl_array_t *methods, const jl_cgparams_t cgparams, int _p // move everything inside, now that we've merged everything // (before adding the exported headers) - for (GlobalObject &G : clone->global_objects()) { - if (!G.isDeclaration()) { - G.setLinkage(Function::InternalLinkage); - makeSafeName(G); - addComdat(&G); + if (policy != CompilationPolicy::Extern) { + for (GlobalObject &G : clone->global_objects()) { + if (!G.isDeclaration()) { + G.setLinkage(Function::InternalLinkage); + makeSafeName(G); + addComdat(&G); #if defined(_OS_WINDOWS_) && defined(_CPU_X86_64_) - // Add unwind exception personalities to functions to handle async exceptions - if (Function *F = dyn_cast(&G)) - F->setPersonalityFn(juliapersonality_func); + // Add unwind exception personalities to functions to handle async exceptions + if (Function *F = dyn_cast(&G)) + F->setPersonalityFn(juliapersonality_func); #endif + } } } From fa66cb34bd95b8f46603d06bee0b3a51a306c40c Mon Sep 17 00:00:00 2001 From: Tim Besard Date: Mon, 25 Jan 2021 17:20:54 +0100 Subject: [PATCH 67/78] Update src/aotcompile.cpp Co-authored-by: Julian Samaroo (cherry picked from commit 0fe05cbd1046b040800a10c4b440ed0e67091da2) --- src/aotcompile.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/aotcompile.cpp b/src/aotcompile.cpp index 5f2d159db2cc0..b7bdac7923c2e 100644 --- a/src/aotcompile.cpp +++ b/src/aotcompile.cpp @@ -404,7 +404,7 @@ void *jl_create_native(jl_array_t *methods, const jl_cgparams_t cgparams, int _p // move everything inside, now that we've merged everything // (before adding the exported headers) - if (policy != CompilationPolicy::Extern) { + if (policy == CompilationPolicy::Default) { for (GlobalObject &G : clone->global_objects()) { if (!G.isDeclaration()) { G.setLinkage(Function::InternalLinkage); From aeca6f18a6f74bae6a9d4828cf313fe71f073ba2 Mon Sep 17 00:00:00 2001 From: Jameson Nash Date: Fri, 22 Jan 2021 16:10:12 -0500 Subject: [PATCH 68/78] show: fix duplicate typealias printing bug If you had 2 aliases that both matched, we might print ```S{T} where T (alias for S{T} where T)``` which is clearly unnecessary. (cherry picked from commit 48ad01d89508f878ce27d76800c77dba6ac501e4) --- base/show.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/base/show.jl b/base/show.jl index 4a727acfd7993..de83de4124ddd 100644 --- a/base/show.jl +++ b/base/show.jl @@ -751,7 +751,7 @@ function show(io::IO, ::MIME"text/plain", @nospecialize(x::Type)) show(io, x) if !print_without_params(x) && get(io, :compact, true) properx = makeproper(io, x) - if make_typealias(properx) !== nothing || x <: make_typealiases(properx)[2] + if make_typealias(properx) !== nothing || (unwrap_unionall(x) isa Union && x <: make_typealiases(properx)[2]) print(io, " (alias for ") show(IOContext(io, :compact => false), x) print(io, ")") From 52fbe7fe0c04ed6d5a22084ce6f2fdcf21e20c8f Mon Sep 17 00:00:00 2001 From: Jameson Nash Date: Fri, 22 Jan 2021 15:39:19 -0500 Subject: [PATCH 69/78] show: fix some bugs in typealias printing (cherry picked from commit b6df6c260f01ae23b5bdbff49b2693c6d6433510) --- base/show.jl | 85 ++++++++++++++++++++++++++++++++++++++-------------- test/show.jl | 6 ++++ 2 files changed, 69 insertions(+), 22 deletions(-) diff --git a/base/show.jl b/base/show.jl index de83de4124ddd..5653ba8b5128e 100644 --- a/base/show.jl +++ b/base/show.jl @@ -532,8 +532,9 @@ function makeproper(io::IO, x::Type) push!(y, typ) end end - normal || (x = Union{y...}) - properx = rewrap_unionall(x, properx) + if !normal + properx = rewrap_unionall(Union{y...}, properx) + end end has_free_typevars(properx) && return Any return properx @@ -580,8 +581,8 @@ function make_typealias(@nospecialize(x::Type)) applied = rewrap_unionall(applied, p) end has_free_typevars(applied) && continue - applied == x || continue # it couldn't figure out the parameter matching - elseif alias <: x + applied === x || continue # it couldn't figure out the parameter matching + elseif alias === x env = Core.svec() else continue # not a complete match @@ -596,7 +597,7 @@ function make_typealias(@nospecialize(x::Type)) end end -function show_typealias(io::IO, name::GlobalRef, x::Type, env::SimpleVector) +function show_typealias(io::IO, name::GlobalRef, x::Type, env::SimpleVector, wheres::Vector) if !(get(io, :compact, false)::Bool) # Print module prefix unless alias is visible from module passed to # IOContext. If :module is not set, default to Main. nothing can be used @@ -612,34 +613,70 @@ function show_typealias(io::IO, name::GlobalRef, x::Type, env::SimpleVector) n == 0 && return print(io, "{") - let io = IOContext(io) - for i = n:-1:1 - p = env[i] - if p isa TypeVar - io = IOContext(io, :unionall_env => p) + param_io = IOContext(io) + for i = 1:length(wheres) + p = wheres[i]::TypeVar + param_io = IOContext(param_io, :unionall_env => p) + end + for i = 1:n + p = env[i] + show(param_io, p) + i < n && print(io, ", ") + end + print(io, "}") +end + +function make_wheres(io::IO, env::SimpleVector, @nospecialize(x::Type)) + seen = IdSet() + wheres = [] + # record things printed by the context + if io isa IOContext + for (key, val) in io.dict + if key === :unionall_env && val isa TypeVar && has_typevar(x, val) + push!(seen, val) end end - for i = 1:n - p = env[i] - show(io, p) - i < n && print(io, ", ") + end + # record things in x to print outermost + while x isa UnionAll + if !(x.var in seen) + push!(seen, x.var) + push!(wheres, x.var) end + x = x.body end - print(io, "}") - for i = n:-1:1 + # record remaining things in env to print innermost + for i = length(env):-1:1 p = env[i] - if p isa TypeVar && !io_has_tvar_name(io, p.name, x) - print(io, " where ") - show(io, p) + if p isa TypeVar && !(p in seen) + push!(seen, p) + pushfirst!(wheres, p) end end + return wheres +end + +function show_wheres(io::IO, env::Vector) + isempty(env) && return + io = IOContext(io) + n = length(env) + for i = 1:n + p = env[i]::TypeVar + print(io, n == 1 ? " where " : i == 1 ? " where {" : ", ") + show(io, p) + io = IOContext(io, :unionall_env => p) + end + n > 1 && print(io, "}") + nothing end function show_typealias(io::IO, x::Type) properx = makeproper(io, x) alias = make_typealias(properx) alias === nothing && return false - show_typealias(io, alias[1], x, alias[2]) + wheres = make_wheres(io, alias[2], x) + show_typealias(io, alias[1], x, alias[2], wheres) + show_wheres(io, wheres) return true end @@ -735,13 +772,17 @@ function show_unionaliases(io::IO, x::Union) end if first && length(aliases) == 1 alias = aliases[1] - show_typealias(io, alias[1], x, alias[2]) + wheres = make_wheres(io, alias[2], x) + show_typealias(io, alias[1], x, alias[2], wheres) + show_wheres(io, wheres) else for alias in aliases print(io, first ? "Union{" : ", ") first = false env = alias[2] - show_typealias(io, alias[1], x, alias[2]) + wheres = make_wheres(io, alias[2], x) + show_typealias(io, alias[1], x, alias[2], wheres) + show_wheres(io, wheres) end print(io, "}") end diff --git a/test/show.jl b/test/show.jl index ff8946acb1662..7d63e099daa95 100644 --- a/test/show.jl +++ b/test/show.jl @@ -2070,15 +2070,21 @@ end end module M37012 +export AValue, B2 struct AnInteger{S<:Integer} end struct AStruct{N} end const AValue{S} = Union{AStruct{S}, AnInteger{S}} +struct BStruct{T,S} end +const B2{S,T} = BStruct{T,S} end @test Base.make_typealias(M37012.AStruct{1}) === nothing @test isempty(Base.make_typealiases(M37012.AStruct{1})[1]) @test string(M37012.AStruct{1}) == "$(curmod_prefix)M37012.AStruct{1}" @test string(Union{Nothing, Number, Vector}) == "Union{Nothing, Number, Vector{T} where T}" @test string(Union{Nothing, AbstractVecOrMat}) == "Union{Nothing, AbstractVecOrMat{T} where T}" +@test string(M37012.BStruct{T, T} where T) == "$(curmod_prefix)M37012.B2{T, T} where T" +@test string(M37012.BStruct{T, S} where {T<:Unsigned, S<:Signed}) == "$(curmod_prefix)M37012.B2{S, T} where {T<:Unsigned, S<:Signed}" +@test string(M37012.BStruct{T, S} where {T<:Signed, S<:T}) == "$(curmod_prefix)M37012.B2{S, T} where {T<:Signed, S<:T}" @test sprint(show, :(./)) == ":((./))" @test sprint(show, :((.|).(.&, b))) == ":((.|).((.&), b))" From 5d0a7dc06608e34c3c77dab81eec746aff07b97b Mon Sep 17 00:00:00 2001 From: Jameson Nash Date: Fri, 22 Jan 2021 16:07:39 -0500 Subject: [PATCH 70/78] show: consolidate wheres with {} in printing Always a bit more compact in this form, and somewhat easier to implement too (thus keeping this consistent with the corrected typealias printing). (cherry picked from commit ee816ef4f27c7e1eb531083fcb57933d1e5af1e5) --- base/show.jl | 36 ++++++++++++++++++++++-------------- test/show.jl | 6 +++--- 2 files changed, 25 insertions(+), 17 deletions(-) diff --git a/base/show.jl b/base/show.jl index 5653ba8b5128e..2fbc8f50ee737 100644 --- a/base/show.jl +++ b/base/show.jl @@ -628,7 +628,7 @@ end function make_wheres(io::IO, env::SimpleVector, @nospecialize(x::Type)) seen = IdSet() - wheres = [] + wheres = TypeVar[] # record things printed by the context if io isa IOContext for (key, val) in io.dict @@ -827,22 +827,30 @@ function show(io::IO, @nospecialize(x::Type)) end x = x::UnionAll - if x.var.name === :_ || io_has_tvar_name(io, x.var.name, x) - counter = 1 - while true - newname = Symbol(x.var.name, counter) - if !io_has_tvar_name(io, newname, x) - newtv = TypeVar(newname, x.var.lb, x.var.ub) - x = UnionAll(newtv, x{newtv}) - break + wheres = TypeVar[] + let io = IOContext(io) + while x isa UnionAll + var = x.var + if var.name === :_ || io_has_tvar_name(io, var.name, x) + counter = 1 + while true + newname = Symbol(var.name, counter) + if !io_has_tvar_name(io, newname, x) + var = TypeVar(newname, var.lb, var.ub) + x = x{var} + break + end + counter += 1 + end + else + x = x.body end - counter += 1 + push!(wheres, var) + io = IOContext(io, :unionall_env => var) end + show(io, x) end - - show(IOContext(io, :unionall_env => x.var), x.body) - print(io, " where ") - show(io, x.var) + show_wheres(io, wheres) end # Check whether 'sym' (defined in module 'parent') is visible from module 'from' diff --git a/test/show.jl b/test/show.jl index 7d63e099daa95..b0bc4455d990a 100644 --- a/test/show.jl +++ b/test/show.jl @@ -634,7 +634,7 @@ end # `where` syntax @test_repr "A where T<:B" @test_repr "A where T<:(Array{T} where T<:Real)" -@test_repr "Array{T} where T<:Array{S} where S<:Real" +@test_repr "Array{T} where {S<:Real, T<:Array{S}}" @test_repr "x::Array{T} where T" @test_repr "(a::b) where T" @test_repr "a::b where T" @@ -1568,12 +1568,12 @@ end end let x = TypeVar(:_), y = TypeVar(:_) - @test repr(UnionAll(x, UnionAll(y, Pair{x,y}))) == "Pair{_1, _2} where _2 where _1" + @test repr(UnionAll(x, UnionAll(y, Pair{x,y}))) == "Pair{_1, _2} where {_1, _2}" @test repr(UnionAll(x, UnionAll(y, Pair{UnionAll(x,Ref{x}),y}))) == "Pair{Ref{_1} where _1, _1} where _1" x = TypeVar(:a) y = TypeVar(:a) z = TypeVar(:a) - @test repr(UnionAll(z, UnionAll(x, UnionAll(y, Tuple{x,y,z})))) == "Tuple{a1, a2, a} where a2 where a1 where a" + @test repr(UnionAll(z, UnionAll(x, UnionAll(y, Tuple{x,y,z})))) == "Tuple{a1, a2, a} where {a, a1, a2}" end @testset "showarg" begin From 0fa7ab9c6e1d9993bee834f1b76cfd454cff31be Mon Sep 17 00:00:00 2001 From: Martin Holters Date: Wed, 27 Jan 2021 15:48:38 +0100 Subject: [PATCH 71/78] Fix `tmeet` for vararg `PartialStruct`s (cherry picked from commit 80ace52b03d9476f3d3e6ff6da42f04a8df1cf7b) --- base/compiler/typelimits.jl | 10 +++++++--- test/compiler/inference.jl | 4 ++++ 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/base/compiler/typelimits.jl b/base/compiler/typelimits.jl index 9497bfa874e2a..c3bf35d35b1a6 100644 --- a/base/compiler/typelimits.jl +++ b/base/compiler/typelimits.jl @@ -563,9 +563,13 @@ function tmeet(@nospecialize(v), @nospecialize(t)) @assert widev <: Tuple new_fields = Vector{Any}(undef, length(v.fields)) for i = 1:length(new_fields) - new_fields[i] = tmeet(v.fields[i], widenconst(getfield_tfunc(t, Const(i)))) - if new_fields[i] === Bottom - return Bottom + if isvarargtype(v.fields[i]) + new_fields[i] = v.fields[i] + else + new_fields[i] = tmeet(v.fields[i], widenconst(getfield_tfunc(t, Const(i)))) + if new_fields[i] === Bottom + return Bottom + end end end return tuple_tfunc(new_fields) diff --git a/test/compiler/inference.jl b/test/compiler/inference.jl index 06aca0584a1a3..8d5f9a2feba4b 100644 --- a/test/compiler/inference.jl +++ b/test/compiler/inference.jl @@ -2980,3 +2980,7 @@ f38888() = S38888(Base.inferencebarrier(3)) @test f38888() isa S38888 g38888() = S38888(Base.inferencebarrier(3), nothing) @test g38888() isa S38888 + +# issue #38971 +f28971() = (1, [2,3]...)::Tuple{Int,Int,Int} +@test @inferred(Tuple{Int,Vararg{Int}}, f28971()) == (1, 2, 3) From 8a2dc271767f1dff4203d6c3677056b348f43fad Mon Sep 17 00:00:00 2001 From: Valentin Churavy Date: Tue, 19 Jan 2021 19:56:19 -0500 Subject: [PATCH 72/78] replace PPC half patch (cherry picked from commit 8631089e5dc0d82b1247c9ef6bbc5073adca713e) --- deps/llvm.mk | 3 +- .../llvm-11-D94058-sext-atomic-ops.patch | 1201 +++++++++++++++++ .../llvm-11-D94828-ppc-half-fpconv.patch | 102 -- deps/patches/llvm-11-D94980-CTR-half.patch | 398 ++++++ 4 files changed, 1601 insertions(+), 103 deletions(-) create mode 100644 deps/patches/llvm-11-D94058-sext-atomic-ops.patch delete mode 100644 deps/patches/llvm-11-D94828-ppc-half-fpconv.patch create mode 100644 deps/patches/llvm-11-D94980-CTR-half.patch diff --git a/deps/llvm.mk b/deps/llvm.mk index 729e7867565fd..c3a3c0b4208c1 100644 --- a/deps/llvm.mk +++ b/deps/llvm.mk @@ -544,8 +544,9 @@ $(eval $(call LLVM_PATCH,llvm-11-D93154-globalisel-as)) $(eval $(call LLVM_PATCH,llvm-11-ppc-half-ctr)) # remove for LLVM 12 $(eval $(call LLVM_PATCH,llvm-11-ppc-sp-from-bp)) # remove for LLVM 12 $(eval $(call LLVM_PATCH,llvm-rGb498303066a6-gcc11-header-fix)) # remove for LLVM 12 -$(eval $(call LLVM_PATCH,llvm-11-D94828-ppc-half-fpconv)) $(eval $(call LLVM_PATCH,llvm-11-D94813-mergeicmps)) +$(eval $(call LLVM_PATCH,llvm-11-D94980-CTR-half)) +$(eval $(call LLVM_PATCH,llvm-11-D94058-sext-atomic-ops)) # remove for LLVM 12 endif # LLVM_VER 11.0 diff --git a/deps/patches/llvm-11-D94058-sext-atomic-ops.patch b/deps/patches/llvm-11-D94058-sext-atomic-ops.patch new file mode 100644 index 0000000000000..732ae2b2b143a --- /dev/null +++ b/deps/patches/llvm-11-D94058-sext-atomic-ops.patch @@ -0,0 +1,1201 @@ +From b46706e1d5307d98a5a4895380f91380a0987ded Mon Sep 17 00:00:00 2001 +From: Nemanja Ivanovic +Date: Mon, 18 Jan 2021 21:19:11 -0600 +Subject: [PATCH] [PowerPC] Sign extend comparison operand for signed atomic + comparisons + +As of 8dacca943af8a53a23b1caf3142d10fb4a77b645, we sign extend the atomic loaded +operand for signed subword comparisons. However, the assumption that the other +operand is correctly sign extended doesn't always hold. This patch sign extends +the other operand if it needs to be sign extended. + +This is a second fix for https://bugs.llvm.org/show_bug.cgi?id=30451 + +Differential revision: https://reviews.llvm.org/D94058 +--- + llvm/lib/Target/PowerPC/PPCISelLowering.cpp | 79 +++- + .../CodeGen/PowerPC/atomics-regression.ll | 440 ++++++++++-------- + llvm/test/CodeGen/PowerPC/sign-ext-atomics.ll | 105 +++++ + 3 files changed, 418 insertions(+), 206 deletions(-) + create mode 100644 llvm/test/CodeGen/PowerPC/sign-ext-atomics.ll + +diff --git llvm/lib/Target/PowerPC/PPCISelLowering.cpp llvm/lib/Target/PowerPC/PPCISelLowering.cpp +index f54f1673526d..867ef24ea53b 100644 +--- llvm/lib/Target/PowerPC/PPCISelLowering.cpp ++++ llvm/lib/Target/PowerPC/PPCISelLowering.cpp +@@ -11444,17 +11444,88 @@ PPCTargetLowering::EmitAtomicBinary(MachineInstr &MI, MachineBasicBlock *BB, + return BB; + } + ++static bool isSignExtended(MachineInstr &MI, const PPCInstrInfo *TII) { ++ switch(MI.getOpcode()) { ++ default: ++ return false; ++ case PPC::COPY: ++ return TII->isSignExtended(MI); ++ case PPC::LHA: ++ case PPC::LHA8: ++ case PPC::LHAU: ++ case PPC::LHAU8: ++ case PPC::LHAUX: ++ case PPC::LHAUX8: ++ case PPC::LHAX: ++ case PPC::LHAX8: ++ case PPC::LWA: ++ case PPC::LWAUX: ++ case PPC::LWAX: ++ case PPC::LWAX_32: ++ case PPC::LWA_32: ++ case PPC::PLHA: ++ case PPC::PLHA8: ++ case PPC::PLHA8pc: ++ case PPC::PLHApc: ++ case PPC::PLWA: ++ case PPC::PLWA8: ++ case PPC::PLWA8pc: ++ case PPC::PLWApc: ++ case PPC::EXTSB: ++ case PPC::EXTSB8: ++ case PPC::EXTSB8_32_64: ++ case PPC::EXTSB8_rec: ++ case PPC::EXTSB_rec: ++ case PPC::EXTSH: ++ case PPC::EXTSH8: ++ case PPC::EXTSH8_32_64: ++ case PPC::EXTSH8_rec: ++ case PPC::EXTSH_rec: ++ case PPC::EXTSW: ++ case PPC::EXTSWSLI: ++ case PPC::EXTSWSLI_32_64: ++ case PPC::EXTSWSLI_32_64_rec: ++ case PPC::EXTSWSLI_rec: ++ case PPC::EXTSW_32: ++ case PPC::EXTSW_32_64: ++ case PPC::EXTSW_32_64_rec: ++ case PPC::EXTSW_rec: ++ case PPC::SRAW: ++ case PPC::SRAWI: ++ case PPC::SRAWI_rec: ++ case PPC::SRAW_rec: ++ return true; ++ } ++ return false; ++} ++ + MachineBasicBlock *PPCTargetLowering::EmitPartwordAtomicBinary( + MachineInstr &MI, MachineBasicBlock *BB, + bool is8bit, // operation + unsigned BinOpcode, unsigned CmpOpcode, unsigned CmpPred) const { ++ // This also handles ATOMIC_SWAP, indicated by BinOpcode==0. ++ const PPCInstrInfo *TII = Subtarget.getInstrInfo(); ++ ++ // If this is a signed comparison and the value being compared is not known ++ // to be sign extended, sign extend it here. ++ DebugLoc dl = MI.getDebugLoc(); ++ MachineFunction *F = BB->getParent(); ++ MachineRegisterInfo &RegInfo = F->getRegInfo(); ++ Register incr = MI.getOperand(3).getReg(); ++ bool IsSignExtended = Register::isVirtualRegister(incr) && ++ isSignExtended(*RegInfo.getVRegDef(incr), TII); ++ ++ if (CmpOpcode == PPC::CMPW && !IsSignExtended) { ++ Register ValueReg = RegInfo.createVirtualRegister(&PPC::GPRCRegClass); ++ BuildMI(*BB, MI, dl, TII->get(is8bit ? PPC::EXTSB : PPC::EXTSH), ValueReg) ++ .addReg(MI.getOperand(3).getReg()); ++ MI.getOperand(3).setReg(ValueReg); ++ } + // If we support part-word atomic mnemonics, just use them + if (Subtarget.hasPartwordAtomics()) + return EmitAtomicBinary(MI, BB, is8bit ? 1 : 2, BinOpcode, CmpOpcode, + CmpPred); + +- // This also handles ATOMIC_SWAP, indicated by BinOpcode==0. +- const TargetInstrInfo *TII = Subtarget.getInstrInfo(); + // In 64 bit mode we have to use 64 bits for addresses, even though the + // lwarx/stwcx are 32 bits. With the 32-bit atomics we can use address + // registers without caring whether they're 32 or 64, but here we're +@@ -11464,14 +11535,11 @@ MachineBasicBlock *PPCTargetLowering::EmitPartwordAtomicBinary( + unsigned ZeroReg = is64bit ? PPC::ZERO8 : PPC::ZERO; + + const BasicBlock *LLVM_BB = BB->getBasicBlock(); +- MachineFunction *F = BB->getParent(); + MachineFunction::iterator It = ++BB->getIterator(); + + Register dest = MI.getOperand(0).getReg(); + Register ptrA = MI.getOperand(1).getReg(); + Register ptrB = MI.getOperand(2).getReg(); +- Register incr = MI.getOperand(3).getReg(); +- DebugLoc dl = MI.getDebugLoc(); + + MachineBasicBlock *loopMBB = F->CreateMachineBasicBlock(LLVM_BB); + MachineBasicBlock *loop2MBB = +@@ -11485,7 +11553,6 @@ MachineBasicBlock *PPCTargetLowering::EmitPartwordAtomicBinary( + std::next(MachineBasicBlock::iterator(MI)), BB->end()); + exitMBB->transferSuccessorsAndUpdatePHIs(BB); + +- MachineRegisterInfo &RegInfo = F->getRegInfo(); + const TargetRegisterClass *RC = + is64bit ? &PPC::G8RCRegClass : &PPC::GPRCRegClass; + const TargetRegisterClass *GPRC = &PPC::GPRCRegClass; +diff --git llvm/test/CodeGen/PowerPC/atomics-regression.ll llvm/test/CodeGen/PowerPC/atomics-regression.ll +index ae79f82e1e06..3b7caeee91e4 100644 +--- llvm/test/CodeGen/PowerPC/atomics-regression.ll ++++ llvm/test/CodeGen/PowerPC/atomics-regression.ll +@@ -4352,16 +4352,17 @@ define i64 @test259(i64* %ptr, i64 %val) { + define i8 @test260(i8* %ptr, i8 %val) { + ; PPC64LE-LABEL: test260: + ; PPC64LE: # %bb.0: ++; PPC64LE-NEXT: extsb 5, 4 + ; PPC64LE-NEXT: .LBB260_1: +-; PPC64LE-NEXT: lbarx 5, 0, 3 +-; PPC64LE-NEXT: extsb 6, 5 +-; PPC64LE-NEXT: cmpw 4, 6 ++; PPC64LE-NEXT: lbarx 4, 0, 3 ++; PPC64LE-NEXT: extsb 6, 4 ++; PPC64LE-NEXT: cmpw 5, 6 + ; PPC64LE-NEXT: ble 0, .LBB260_3 + ; PPC64LE-NEXT: # %bb.2: +-; PPC64LE-NEXT: stbcx. 4, 0, 3 ++; PPC64LE-NEXT: stbcx. 5, 0, 3 + ; PPC64LE-NEXT: bne 0, .LBB260_1 + ; PPC64LE-NEXT: .LBB260_3: +-; PPC64LE-NEXT: mr 3, 5 ++; PPC64LE-NEXT: mr 3, 4 + ; PPC64LE-NEXT: blr + %ret = atomicrmw max i8* %ptr, i8 %val monotonic + ret i8 %ret +@@ -4370,16 +4371,17 @@ define i8 @test260(i8* %ptr, i8 %val) { + define i8 @test261(i8* %ptr, i8 %val) { + ; PPC64LE-LABEL: test261: + ; PPC64LE: # %bb.0: +-; PPC64LE-NEXT: mr 5, 3 ++; PPC64LE-NEXT: extsb 5, 4 + ; PPC64LE-NEXT: .LBB261_1: +-; PPC64LE-NEXT: lbarx 3, 0, 5 +-; PPC64LE-NEXT: extsb 6, 3 +-; PPC64LE-NEXT: cmpw 4, 6 ++; PPC64LE-NEXT: lbarx 4, 0, 3 ++; PPC64LE-NEXT: extsb 6, 4 ++; PPC64LE-NEXT: cmpw 5, 6 + ; PPC64LE-NEXT: ble 0, .LBB261_3 + ; PPC64LE-NEXT: # %bb.2: +-; PPC64LE-NEXT: stbcx. 4, 0, 5 ++; PPC64LE-NEXT: stbcx. 5, 0, 3 + ; PPC64LE-NEXT: bne 0, .LBB261_1 + ; PPC64LE-NEXT: .LBB261_3: ++; PPC64LE-NEXT: mr 3, 4 + ; PPC64LE-NEXT: lwsync + ; PPC64LE-NEXT: blr + %ret = atomicrmw max i8* %ptr, i8 %val acquire +@@ -4389,17 +4391,18 @@ define i8 @test261(i8* %ptr, i8 %val) { + define i8 @test262(i8* %ptr, i8 %val) { + ; PPC64LE-LABEL: test262: + ; PPC64LE: # %bb.0: ++; PPC64LE-NEXT: extsb 5, 4 + ; PPC64LE-NEXT: lwsync + ; PPC64LE-NEXT: .LBB262_1: +-; PPC64LE-NEXT: lbarx 5, 0, 3 +-; PPC64LE-NEXT: extsb 6, 5 +-; PPC64LE-NEXT: cmpw 4, 6 ++; PPC64LE-NEXT: lbarx 4, 0, 3 ++; PPC64LE-NEXT: extsb 6, 4 ++; PPC64LE-NEXT: cmpw 5, 6 + ; PPC64LE-NEXT: ble 0, .LBB262_3 + ; PPC64LE-NEXT: # %bb.2: +-; PPC64LE-NEXT: stbcx. 4, 0, 3 ++; PPC64LE-NEXT: stbcx. 5, 0, 3 + ; PPC64LE-NEXT: bne 0, .LBB262_1 + ; PPC64LE-NEXT: .LBB262_3: +-; PPC64LE-NEXT: mr 3, 5 ++; PPC64LE-NEXT: mr 3, 4 + ; PPC64LE-NEXT: blr + %ret = atomicrmw max i8* %ptr, i8 %val release + ret i8 %ret +@@ -4408,17 +4411,18 @@ define i8 @test262(i8* %ptr, i8 %val) { + define i8 @test263(i8* %ptr, i8 %val) { + ; PPC64LE-LABEL: test263: + ; PPC64LE: # %bb.0: ++; PPC64LE-NEXT: extsb 5, 4 + ; PPC64LE-NEXT: lwsync + ; PPC64LE-NEXT: .LBB263_1: +-; PPC64LE-NEXT: lbarx 5, 0, 3 +-; PPC64LE-NEXT: extsb 6, 5 +-; PPC64LE-NEXT: cmpw 4, 6 ++; PPC64LE-NEXT: lbarx 4, 0, 3 ++; PPC64LE-NEXT: extsb 6, 4 ++; PPC64LE-NEXT: cmpw 5, 6 + ; PPC64LE-NEXT: ble 0, .LBB263_3 + ; PPC64LE-NEXT: # %bb.2: +-; PPC64LE-NEXT: stbcx. 4, 0, 3 ++; PPC64LE-NEXT: stbcx. 5, 0, 3 + ; PPC64LE-NEXT: bne 0, .LBB263_1 + ; PPC64LE-NEXT: .LBB263_3: +-; PPC64LE-NEXT: mr 3, 5 ++; PPC64LE-NEXT: mr 3, 4 + ; PPC64LE-NEXT: lwsync + ; PPC64LE-NEXT: blr + %ret = atomicrmw max i8* %ptr, i8 %val acq_rel +@@ -4428,17 +4432,18 @@ define i8 @test263(i8* %ptr, i8 %val) { + define i8 @test264(i8* %ptr, i8 %val) { + ; PPC64LE-LABEL: test264: + ; PPC64LE: # %bb.0: ++; PPC64LE-NEXT: extsb 5, 4 + ; PPC64LE-NEXT: sync + ; PPC64LE-NEXT: .LBB264_1: +-; PPC64LE-NEXT: lbarx 5, 0, 3 +-; PPC64LE-NEXT: extsb 6, 5 +-; PPC64LE-NEXT: cmpw 4, 6 ++; PPC64LE-NEXT: lbarx 4, 0, 3 ++; PPC64LE-NEXT: extsb 6, 4 ++; PPC64LE-NEXT: cmpw 5, 6 + ; PPC64LE-NEXT: ble 0, .LBB264_3 + ; PPC64LE-NEXT: # %bb.2: +-; PPC64LE-NEXT: stbcx. 4, 0, 3 ++; PPC64LE-NEXT: stbcx. 5, 0, 3 + ; PPC64LE-NEXT: bne 0, .LBB264_1 + ; PPC64LE-NEXT: .LBB264_3: +-; PPC64LE-NEXT: mr 3, 5 ++; PPC64LE-NEXT: mr 3, 4 + ; PPC64LE-NEXT: lwsync + ; PPC64LE-NEXT: blr + %ret = atomicrmw max i8* %ptr, i8 %val seq_cst +@@ -4448,16 +4453,17 @@ define i8 @test264(i8* %ptr, i8 %val) { + define i16 @test265(i16* %ptr, i16 %val) { + ; PPC64LE-LABEL: test265: + ; PPC64LE: # %bb.0: ++; PPC64LE-NEXT: extsh 5, 4 + ; PPC64LE-NEXT: .LBB265_1: +-; PPC64LE-NEXT: lharx 5, 0, 3 +-; PPC64LE-NEXT: extsh 6, 5 +-; PPC64LE-NEXT: cmpw 4, 6 ++; PPC64LE-NEXT: lharx 4, 0, 3 ++; PPC64LE-NEXT: extsh 6, 4 ++; PPC64LE-NEXT: cmpw 5, 6 + ; PPC64LE-NEXT: ble 0, .LBB265_3 + ; PPC64LE-NEXT: # %bb.2: +-; PPC64LE-NEXT: sthcx. 4, 0, 3 ++; PPC64LE-NEXT: sthcx. 5, 0, 3 + ; PPC64LE-NEXT: bne 0, .LBB265_1 + ; PPC64LE-NEXT: .LBB265_3: +-; PPC64LE-NEXT: mr 3, 5 ++; PPC64LE-NEXT: mr 3, 4 + ; PPC64LE-NEXT: blr + %ret = atomicrmw max i16* %ptr, i16 %val monotonic + ret i16 %ret +@@ -4466,16 +4472,17 @@ define i16 @test265(i16* %ptr, i16 %val) { + define i16 @test266(i16* %ptr, i16 %val) { + ; PPC64LE-LABEL: test266: + ; PPC64LE: # %bb.0: +-; PPC64LE-NEXT: mr 5, 3 ++; PPC64LE-NEXT: extsh 5, 4 + ; PPC64LE-NEXT: .LBB266_1: +-; PPC64LE-NEXT: lharx 3, 0, 5 +-; PPC64LE-NEXT: extsh 6, 3 +-; PPC64LE-NEXT: cmpw 4, 6 ++; PPC64LE-NEXT: lharx 4, 0, 3 ++; PPC64LE-NEXT: extsh 6, 4 ++; PPC64LE-NEXT: cmpw 5, 6 + ; PPC64LE-NEXT: ble 0, .LBB266_3 + ; PPC64LE-NEXT: # %bb.2: +-; PPC64LE-NEXT: sthcx. 4, 0, 5 ++; PPC64LE-NEXT: sthcx. 5, 0, 3 + ; PPC64LE-NEXT: bne 0, .LBB266_1 + ; PPC64LE-NEXT: .LBB266_3: ++; PPC64LE-NEXT: mr 3, 4 + ; PPC64LE-NEXT: lwsync + ; PPC64LE-NEXT: blr + %ret = atomicrmw max i16* %ptr, i16 %val acquire +@@ -4485,17 +4492,18 @@ define i16 @test266(i16* %ptr, i16 %val) { + define i16 @test267(i16* %ptr, i16 %val) { + ; PPC64LE-LABEL: test267: + ; PPC64LE: # %bb.0: ++; PPC64LE-NEXT: extsh 5, 4 + ; PPC64LE-NEXT: lwsync + ; PPC64LE-NEXT: .LBB267_1: +-; PPC64LE-NEXT: lharx 5, 0, 3 +-; PPC64LE-NEXT: extsh 6, 5 +-; PPC64LE-NEXT: cmpw 4, 6 ++; PPC64LE-NEXT: lharx 4, 0, 3 ++; PPC64LE-NEXT: extsh 6, 4 ++; PPC64LE-NEXT: cmpw 5, 6 + ; PPC64LE-NEXT: ble 0, .LBB267_3 + ; PPC64LE-NEXT: # %bb.2: +-; PPC64LE-NEXT: sthcx. 4, 0, 3 ++; PPC64LE-NEXT: sthcx. 5, 0, 3 + ; PPC64LE-NEXT: bne 0, .LBB267_1 + ; PPC64LE-NEXT: .LBB267_3: +-; PPC64LE-NEXT: mr 3, 5 ++; PPC64LE-NEXT: mr 3, 4 + ; PPC64LE-NEXT: blr + %ret = atomicrmw max i16* %ptr, i16 %val release + ret i16 %ret +@@ -4504,17 +4512,18 @@ define i16 @test267(i16* %ptr, i16 %val) { + define i16 @test268(i16* %ptr, i16 %val) { + ; PPC64LE-LABEL: test268: + ; PPC64LE: # %bb.0: ++; PPC64LE-NEXT: extsh 5, 4 + ; PPC64LE-NEXT: lwsync + ; PPC64LE-NEXT: .LBB268_1: +-; PPC64LE-NEXT: lharx 5, 0, 3 +-; PPC64LE-NEXT: extsh 6, 5 +-; PPC64LE-NEXT: cmpw 4, 6 ++; PPC64LE-NEXT: lharx 4, 0, 3 ++; PPC64LE-NEXT: extsh 6, 4 ++; PPC64LE-NEXT: cmpw 5, 6 + ; PPC64LE-NEXT: ble 0, .LBB268_3 + ; PPC64LE-NEXT: # %bb.2: +-; PPC64LE-NEXT: sthcx. 4, 0, 3 ++; PPC64LE-NEXT: sthcx. 5, 0, 3 + ; PPC64LE-NEXT: bne 0, .LBB268_1 + ; PPC64LE-NEXT: .LBB268_3: +-; PPC64LE-NEXT: mr 3, 5 ++; PPC64LE-NEXT: mr 3, 4 + ; PPC64LE-NEXT: lwsync + ; PPC64LE-NEXT: blr + %ret = atomicrmw max i16* %ptr, i16 %val acq_rel +@@ -4524,17 +4533,18 @@ define i16 @test268(i16* %ptr, i16 %val) { + define i16 @test269(i16* %ptr, i16 %val) { + ; PPC64LE-LABEL: test269: + ; PPC64LE: # %bb.0: ++; PPC64LE-NEXT: extsh 5, 4 + ; PPC64LE-NEXT: sync + ; PPC64LE-NEXT: .LBB269_1: +-; PPC64LE-NEXT: lharx 5, 0, 3 +-; PPC64LE-NEXT: extsh 6, 5 +-; PPC64LE-NEXT: cmpw 4, 6 ++; PPC64LE-NEXT: lharx 4, 0, 3 ++; PPC64LE-NEXT: extsh 6, 4 ++; PPC64LE-NEXT: cmpw 5, 6 + ; PPC64LE-NEXT: ble 0, .LBB269_3 + ; PPC64LE-NEXT: # %bb.2: +-; PPC64LE-NEXT: sthcx. 4, 0, 3 ++; PPC64LE-NEXT: sthcx. 5, 0, 3 + ; PPC64LE-NEXT: bne 0, .LBB269_1 + ; PPC64LE-NEXT: .LBB269_3: +-; PPC64LE-NEXT: mr 3, 5 ++; PPC64LE-NEXT: mr 3, 4 + ; PPC64LE-NEXT: lwsync + ; PPC64LE-NEXT: blr + %ret = atomicrmw max i16* %ptr, i16 %val seq_cst +@@ -4726,16 +4736,17 @@ define i64 @test279(i64* %ptr, i64 %val) { + define i8 @test280(i8* %ptr, i8 %val) { + ; PPC64LE-LABEL: test280: + ; PPC64LE: # %bb.0: ++; PPC64LE-NEXT: extsb 5, 4 + ; PPC64LE-NEXT: .LBB280_1: +-; PPC64LE-NEXT: lbarx 5, 0, 3 +-; PPC64LE-NEXT: extsb 6, 5 +-; PPC64LE-NEXT: cmpw 4, 6 ++; PPC64LE-NEXT: lbarx 4, 0, 3 ++; PPC64LE-NEXT: extsb 6, 4 ++; PPC64LE-NEXT: cmpw 5, 6 + ; PPC64LE-NEXT: bge 0, .LBB280_3 + ; PPC64LE-NEXT: # %bb.2: +-; PPC64LE-NEXT: stbcx. 4, 0, 3 ++; PPC64LE-NEXT: stbcx. 5, 0, 3 + ; PPC64LE-NEXT: bne 0, .LBB280_1 + ; PPC64LE-NEXT: .LBB280_3: +-; PPC64LE-NEXT: mr 3, 5 ++; PPC64LE-NEXT: mr 3, 4 + ; PPC64LE-NEXT: blr + %ret = atomicrmw min i8* %ptr, i8 %val monotonic + ret i8 %ret +@@ -4744,16 +4755,17 @@ define i8 @test280(i8* %ptr, i8 %val) { + define i8 @test281(i8* %ptr, i8 %val) { + ; PPC64LE-LABEL: test281: + ; PPC64LE: # %bb.0: +-; PPC64LE-NEXT: mr 5, 3 ++; PPC64LE-NEXT: extsb 5, 4 + ; PPC64LE-NEXT: .LBB281_1: +-; PPC64LE-NEXT: lbarx 3, 0, 5 +-; PPC64LE-NEXT: extsb 6, 3 +-; PPC64LE-NEXT: cmpw 4, 6 ++; PPC64LE-NEXT: lbarx 4, 0, 3 ++; PPC64LE-NEXT: extsb 6, 4 ++; PPC64LE-NEXT: cmpw 5, 6 + ; PPC64LE-NEXT: bge 0, .LBB281_3 + ; PPC64LE-NEXT: # %bb.2: +-; PPC64LE-NEXT: stbcx. 4, 0, 5 ++; PPC64LE-NEXT: stbcx. 5, 0, 3 + ; PPC64LE-NEXT: bne 0, .LBB281_1 + ; PPC64LE-NEXT: .LBB281_3: ++; PPC64LE-NEXT: mr 3, 4 + ; PPC64LE-NEXT: lwsync + ; PPC64LE-NEXT: blr + %ret = atomicrmw min i8* %ptr, i8 %val acquire +@@ -4763,17 +4775,18 @@ define i8 @test281(i8* %ptr, i8 %val) { + define i8 @test282(i8* %ptr, i8 %val) { + ; PPC64LE-LABEL: test282: + ; PPC64LE: # %bb.0: ++; PPC64LE-NEXT: extsb 5, 4 + ; PPC64LE-NEXT: lwsync + ; PPC64LE-NEXT: .LBB282_1: +-; PPC64LE-NEXT: lbarx 5, 0, 3 +-; PPC64LE-NEXT: extsb 6, 5 +-; PPC64LE-NEXT: cmpw 4, 6 ++; PPC64LE-NEXT: lbarx 4, 0, 3 ++; PPC64LE-NEXT: extsb 6, 4 ++; PPC64LE-NEXT: cmpw 5, 6 + ; PPC64LE-NEXT: bge 0, .LBB282_3 + ; PPC64LE-NEXT: # %bb.2: +-; PPC64LE-NEXT: stbcx. 4, 0, 3 ++; PPC64LE-NEXT: stbcx. 5, 0, 3 + ; PPC64LE-NEXT: bne 0, .LBB282_1 + ; PPC64LE-NEXT: .LBB282_3: +-; PPC64LE-NEXT: mr 3, 5 ++; PPC64LE-NEXT: mr 3, 4 + ; PPC64LE-NEXT: blr + %ret = atomicrmw min i8* %ptr, i8 %val release + ret i8 %ret +@@ -4782,17 +4795,18 @@ define i8 @test282(i8* %ptr, i8 %val) { + define i8 @test283(i8* %ptr, i8 %val) { + ; PPC64LE-LABEL: test283: + ; PPC64LE: # %bb.0: ++; PPC64LE-NEXT: extsb 5, 4 + ; PPC64LE-NEXT: lwsync + ; PPC64LE-NEXT: .LBB283_1: +-; PPC64LE-NEXT: lbarx 5, 0, 3 +-; PPC64LE-NEXT: extsb 6, 5 +-; PPC64LE-NEXT: cmpw 4, 6 ++; PPC64LE-NEXT: lbarx 4, 0, 3 ++; PPC64LE-NEXT: extsb 6, 4 ++; PPC64LE-NEXT: cmpw 5, 6 + ; PPC64LE-NEXT: bge 0, .LBB283_3 + ; PPC64LE-NEXT: # %bb.2: +-; PPC64LE-NEXT: stbcx. 4, 0, 3 ++; PPC64LE-NEXT: stbcx. 5, 0, 3 + ; PPC64LE-NEXT: bne 0, .LBB283_1 + ; PPC64LE-NEXT: .LBB283_3: +-; PPC64LE-NEXT: mr 3, 5 ++; PPC64LE-NEXT: mr 3, 4 + ; PPC64LE-NEXT: lwsync + ; PPC64LE-NEXT: blr + %ret = atomicrmw min i8* %ptr, i8 %val acq_rel +@@ -4802,17 +4816,18 @@ define i8 @test283(i8* %ptr, i8 %val) { + define i8 @test284(i8* %ptr, i8 %val) { + ; PPC64LE-LABEL: test284: + ; PPC64LE: # %bb.0: ++; PPC64LE-NEXT: extsb 5, 4 + ; PPC64LE-NEXT: sync + ; PPC64LE-NEXT: .LBB284_1: +-; PPC64LE-NEXT: lbarx 5, 0, 3 +-; PPC64LE-NEXT: extsb 6, 5 +-; PPC64LE-NEXT: cmpw 4, 6 ++; PPC64LE-NEXT: lbarx 4, 0, 3 ++; PPC64LE-NEXT: extsb 6, 4 ++; PPC64LE-NEXT: cmpw 5, 6 + ; PPC64LE-NEXT: bge 0, .LBB284_3 + ; PPC64LE-NEXT: # %bb.2: +-; PPC64LE-NEXT: stbcx. 4, 0, 3 ++; PPC64LE-NEXT: stbcx. 5, 0, 3 + ; PPC64LE-NEXT: bne 0, .LBB284_1 + ; PPC64LE-NEXT: .LBB284_3: +-; PPC64LE-NEXT: mr 3, 5 ++; PPC64LE-NEXT: mr 3, 4 + ; PPC64LE-NEXT: lwsync + ; PPC64LE-NEXT: blr + %ret = atomicrmw min i8* %ptr, i8 %val seq_cst +@@ -4822,16 +4837,17 @@ define i8 @test284(i8* %ptr, i8 %val) { + define i16 @test285(i16* %ptr, i16 %val) { + ; PPC64LE-LABEL: test285: + ; PPC64LE: # %bb.0: ++; PPC64LE-NEXT: extsh 5, 4 + ; PPC64LE-NEXT: .LBB285_1: +-; PPC64LE-NEXT: lharx 5, 0, 3 +-; PPC64LE-NEXT: extsh 6, 5 +-; PPC64LE-NEXT: cmpw 4, 6 ++; PPC64LE-NEXT: lharx 4, 0, 3 ++; PPC64LE-NEXT: extsh 6, 4 ++; PPC64LE-NEXT: cmpw 5, 6 + ; PPC64LE-NEXT: bge 0, .LBB285_3 + ; PPC64LE-NEXT: # %bb.2: +-; PPC64LE-NEXT: sthcx. 4, 0, 3 ++; PPC64LE-NEXT: sthcx. 5, 0, 3 + ; PPC64LE-NEXT: bne 0, .LBB285_1 + ; PPC64LE-NEXT: .LBB285_3: +-; PPC64LE-NEXT: mr 3, 5 ++; PPC64LE-NEXT: mr 3, 4 + ; PPC64LE-NEXT: blr + %ret = atomicrmw min i16* %ptr, i16 %val monotonic + ret i16 %ret +@@ -4840,16 +4856,17 @@ define i16 @test285(i16* %ptr, i16 %val) { + define i16 @test286(i16* %ptr, i16 %val) { + ; PPC64LE-LABEL: test286: + ; PPC64LE: # %bb.0: +-; PPC64LE-NEXT: mr 5, 3 ++; PPC64LE-NEXT: extsh 5, 4 + ; PPC64LE-NEXT: .LBB286_1: +-; PPC64LE-NEXT: lharx 3, 0, 5 +-; PPC64LE-NEXT: extsh 6, 3 +-; PPC64LE-NEXT: cmpw 4, 6 ++; PPC64LE-NEXT: lharx 4, 0, 3 ++; PPC64LE-NEXT: extsh 6, 4 ++; PPC64LE-NEXT: cmpw 5, 6 + ; PPC64LE-NEXT: bge 0, .LBB286_3 + ; PPC64LE-NEXT: # %bb.2: +-; PPC64LE-NEXT: sthcx. 4, 0, 5 ++; PPC64LE-NEXT: sthcx. 5, 0, 3 + ; PPC64LE-NEXT: bne 0, .LBB286_1 + ; PPC64LE-NEXT: .LBB286_3: ++; PPC64LE-NEXT: mr 3, 4 + ; PPC64LE-NEXT: lwsync + ; PPC64LE-NEXT: blr + %ret = atomicrmw min i16* %ptr, i16 %val acquire +@@ -4859,17 +4876,18 @@ define i16 @test286(i16* %ptr, i16 %val) { + define i16 @test287(i16* %ptr, i16 %val) { + ; PPC64LE-LABEL: test287: + ; PPC64LE: # %bb.0: ++; PPC64LE-NEXT: extsh 5, 4 + ; PPC64LE-NEXT: lwsync + ; PPC64LE-NEXT: .LBB287_1: +-; PPC64LE-NEXT: lharx 5, 0, 3 +-; PPC64LE-NEXT: extsh 6, 5 +-; PPC64LE-NEXT: cmpw 4, 6 ++; PPC64LE-NEXT: lharx 4, 0, 3 ++; PPC64LE-NEXT: extsh 6, 4 ++; PPC64LE-NEXT: cmpw 5, 6 + ; PPC64LE-NEXT: bge 0, .LBB287_3 + ; PPC64LE-NEXT: # %bb.2: +-; PPC64LE-NEXT: sthcx. 4, 0, 3 ++; PPC64LE-NEXT: sthcx. 5, 0, 3 + ; PPC64LE-NEXT: bne 0, .LBB287_1 + ; PPC64LE-NEXT: .LBB287_3: +-; PPC64LE-NEXT: mr 3, 5 ++; PPC64LE-NEXT: mr 3, 4 + ; PPC64LE-NEXT: blr + %ret = atomicrmw min i16* %ptr, i16 %val release + ret i16 %ret +@@ -4878,17 +4896,18 @@ define i16 @test287(i16* %ptr, i16 %val) { + define i16 @test288(i16* %ptr, i16 %val) { + ; PPC64LE-LABEL: test288: + ; PPC64LE: # %bb.0: ++; PPC64LE-NEXT: extsh 5, 4 + ; PPC64LE-NEXT: lwsync + ; PPC64LE-NEXT: .LBB288_1: +-; PPC64LE-NEXT: lharx 5, 0, 3 +-; PPC64LE-NEXT: extsh 6, 5 +-; PPC64LE-NEXT: cmpw 4, 6 ++; PPC64LE-NEXT: lharx 4, 0, 3 ++; PPC64LE-NEXT: extsh 6, 4 ++; PPC64LE-NEXT: cmpw 5, 6 + ; PPC64LE-NEXT: bge 0, .LBB288_3 + ; PPC64LE-NEXT: # %bb.2: +-; PPC64LE-NEXT: sthcx. 4, 0, 3 ++; PPC64LE-NEXT: sthcx. 5, 0, 3 + ; PPC64LE-NEXT: bne 0, .LBB288_1 + ; PPC64LE-NEXT: .LBB288_3: +-; PPC64LE-NEXT: mr 3, 5 ++; PPC64LE-NEXT: mr 3, 4 + ; PPC64LE-NEXT: lwsync + ; PPC64LE-NEXT: blr + %ret = atomicrmw min i16* %ptr, i16 %val acq_rel +@@ -4898,17 +4917,18 @@ define i16 @test288(i16* %ptr, i16 %val) { + define i16 @test289(i16* %ptr, i16 %val) { + ; PPC64LE-LABEL: test289: + ; PPC64LE: # %bb.0: ++; PPC64LE-NEXT: extsh 5, 4 + ; PPC64LE-NEXT: sync + ; PPC64LE-NEXT: .LBB289_1: +-; PPC64LE-NEXT: lharx 5, 0, 3 +-; PPC64LE-NEXT: extsh 6, 5 +-; PPC64LE-NEXT: cmpw 4, 6 ++; PPC64LE-NEXT: lharx 4, 0, 3 ++; PPC64LE-NEXT: extsh 6, 4 ++; PPC64LE-NEXT: cmpw 5, 6 + ; PPC64LE-NEXT: bge 0, .LBB289_3 + ; PPC64LE-NEXT: # %bb.2: +-; PPC64LE-NEXT: sthcx. 4, 0, 3 ++; PPC64LE-NEXT: sthcx. 5, 0, 3 + ; PPC64LE-NEXT: bne 0, .LBB289_1 + ; PPC64LE-NEXT: .LBB289_3: +-; PPC64LE-NEXT: mr 3, 5 ++; PPC64LE-NEXT: mr 3, 4 + ; PPC64LE-NEXT: lwsync + ; PPC64LE-NEXT: blr + %ret = atomicrmw min i16* %ptr, i16 %val seq_cst +@@ -8076,16 +8096,17 @@ define i64 @test479(i64* %ptr, i64 %val) { + define i8 @test480(i8* %ptr, i8 %val) { + ; PPC64LE-LABEL: test480: + ; PPC64LE: # %bb.0: ++; PPC64LE-NEXT: extsb 5, 4 + ; PPC64LE-NEXT: .LBB480_1: +-; PPC64LE-NEXT: lbarx 5, 0, 3 +-; PPC64LE-NEXT: extsb 6, 5 +-; PPC64LE-NEXT: cmpw 4, 6 ++; PPC64LE-NEXT: lbarx 4, 0, 3 ++; PPC64LE-NEXT: extsb 6, 4 ++; PPC64LE-NEXT: cmpw 5, 6 + ; PPC64LE-NEXT: ble 0, .LBB480_3 + ; PPC64LE-NEXT: # %bb.2: +-; PPC64LE-NEXT: stbcx. 4, 0, 3 ++; PPC64LE-NEXT: stbcx. 5, 0, 3 + ; PPC64LE-NEXT: bne 0, .LBB480_1 + ; PPC64LE-NEXT: .LBB480_3: +-; PPC64LE-NEXT: mr 3, 5 ++; PPC64LE-NEXT: mr 3, 4 + ; PPC64LE-NEXT: blr + %ret = atomicrmw max i8* %ptr, i8 %val syncscope("singlethread") monotonic + ret i8 %ret +@@ -8094,16 +8115,17 @@ define i8 @test480(i8* %ptr, i8 %val) { + define i8 @test481(i8* %ptr, i8 %val) { + ; PPC64LE-LABEL: test481: + ; PPC64LE: # %bb.0: +-; PPC64LE-NEXT: mr 5, 3 ++; PPC64LE-NEXT: extsb 5, 4 + ; PPC64LE-NEXT: .LBB481_1: +-; PPC64LE-NEXT: lbarx 3, 0, 5 +-; PPC64LE-NEXT: extsb 6, 3 +-; PPC64LE-NEXT: cmpw 4, 6 ++; PPC64LE-NEXT: lbarx 4, 0, 3 ++; PPC64LE-NEXT: extsb 6, 4 ++; PPC64LE-NEXT: cmpw 5, 6 + ; PPC64LE-NEXT: ble 0, .LBB481_3 + ; PPC64LE-NEXT: # %bb.2: +-; PPC64LE-NEXT: stbcx. 4, 0, 5 ++; PPC64LE-NEXT: stbcx. 5, 0, 3 + ; PPC64LE-NEXT: bne 0, .LBB481_1 + ; PPC64LE-NEXT: .LBB481_3: ++; PPC64LE-NEXT: mr 3, 4 + ; PPC64LE-NEXT: lwsync + ; PPC64LE-NEXT: blr + %ret = atomicrmw max i8* %ptr, i8 %val syncscope("singlethread") acquire +@@ -8113,17 +8135,18 @@ define i8 @test481(i8* %ptr, i8 %val) { + define i8 @test482(i8* %ptr, i8 %val) { + ; PPC64LE-LABEL: test482: + ; PPC64LE: # %bb.0: ++; PPC64LE-NEXT: extsb 5, 4 + ; PPC64LE-NEXT: lwsync + ; PPC64LE-NEXT: .LBB482_1: +-; PPC64LE-NEXT: lbarx 5, 0, 3 +-; PPC64LE-NEXT: extsb 6, 5 +-; PPC64LE-NEXT: cmpw 4, 6 ++; PPC64LE-NEXT: lbarx 4, 0, 3 ++; PPC64LE-NEXT: extsb 6, 4 ++; PPC64LE-NEXT: cmpw 5, 6 + ; PPC64LE-NEXT: ble 0, .LBB482_3 + ; PPC64LE-NEXT: # %bb.2: +-; PPC64LE-NEXT: stbcx. 4, 0, 3 ++; PPC64LE-NEXT: stbcx. 5, 0, 3 + ; PPC64LE-NEXT: bne 0, .LBB482_1 + ; PPC64LE-NEXT: .LBB482_3: +-; PPC64LE-NEXT: mr 3, 5 ++; PPC64LE-NEXT: mr 3, 4 + ; PPC64LE-NEXT: blr + %ret = atomicrmw max i8* %ptr, i8 %val syncscope("singlethread") release + ret i8 %ret +@@ -8132,17 +8155,18 @@ define i8 @test482(i8* %ptr, i8 %val) { + define i8 @test483(i8* %ptr, i8 %val) { + ; PPC64LE-LABEL: test483: + ; PPC64LE: # %bb.0: ++; PPC64LE-NEXT: extsb 5, 4 + ; PPC64LE-NEXT: lwsync + ; PPC64LE-NEXT: .LBB483_1: +-; PPC64LE-NEXT: lbarx 5, 0, 3 +-; PPC64LE-NEXT: extsb 6, 5 +-; PPC64LE-NEXT: cmpw 4, 6 ++; PPC64LE-NEXT: lbarx 4, 0, 3 ++; PPC64LE-NEXT: extsb 6, 4 ++; PPC64LE-NEXT: cmpw 5, 6 + ; PPC64LE-NEXT: ble 0, .LBB483_3 + ; PPC64LE-NEXT: # %bb.2: +-; PPC64LE-NEXT: stbcx. 4, 0, 3 ++; PPC64LE-NEXT: stbcx. 5, 0, 3 + ; PPC64LE-NEXT: bne 0, .LBB483_1 + ; PPC64LE-NEXT: .LBB483_3: +-; PPC64LE-NEXT: mr 3, 5 ++; PPC64LE-NEXT: mr 3, 4 + ; PPC64LE-NEXT: lwsync + ; PPC64LE-NEXT: blr + %ret = atomicrmw max i8* %ptr, i8 %val syncscope("singlethread") acq_rel +@@ -8152,17 +8176,18 @@ define i8 @test483(i8* %ptr, i8 %val) { + define i8 @test484(i8* %ptr, i8 %val) { + ; PPC64LE-LABEL: test484: + ; PPC64LE: # %bb.0: ++; PPC64LE-NEXT: extsb 5, 4 + ; PPC64LE-NEXT: sync + ; PPC64LE-NEXT: .LBB484_1: +-; PPC64LE-NEXT: lbarx 5, 0, 3 +-; PPC64LE-NEXT: extsb 6, 5 +-; PPC64LE-NEXT: cmpw 4, 6 ++; PPC64LE-NEXT: lbarx 4, 0, 3 ++; PPC64LE-NEXT: extsb 6, 4 ++; PPC64LE-NEXT: cmpw 5, 6 + ; PPC64LE-NEXT: ble 0, .LBB484_3 + ; PPC64LE-NEXT: # %bb.2: +-; PPC64LE-NEXT: stbcx. 4, 0, 3 ++; PPC64LE-NEXT: stbcx. 5, 0, 3 + ; PPC64LE-NEXT: bne 0, .LBB484_1 + ; PPC64LE-NEXT: .LBB484_3: +-; PPC64LE-NEXT: mr 3, 5 ++; PPC64LE-NEXT: mr 3, 4 + ; PPC64LE-NEXT: lwsync + ; PPC64LE-NEXT: blr + %ret = atomicrmw max i8* %ptr, i8 %val syncscope("singlethread") seq_cst +@@ -8172,16 +8197,17 @@ define i8 @test484(i8* %ptr, i8 %val) { + define i16 @test485(i16* %ptr, i16 %val) { + ; PPC64LE-LABEL: test485: + ; PPC64LE: # %bb.0: ++; PPC64LE-NEXT: extsh 5, 4 + ; PPC64LE-NEXT: .LBB485_1: +-; PPC64LE-NEXT: lharx 5, 0, 3 +-; PPC64LE-NEXT: extsh 6, 5 +-; PPC64LE-NEXT: cmpw 4, 6 ++; PPC64LE-NEXT: lharx 4, 0, 3 ++; PPC64LE-NEXT: extsh 6, 4 ++; PPC64LE-NEXT: cmpw 5, 6 + ; PPC64LE-NEXT: ble 0, .LBB485_3 + ; PPC64LE-NEXT: # %bb.2: +-; PPC64LE-NEXT: sthcx. 4, 0, 3 ++; PPC64LE-NEXT: sthcx. 5, 0, 3 + ; PPC64LE-NEXT: bne 0, .LBB485_1 + ; PPC64LE-NEXT: .LBB485_3: +-; PPC64LE-NEXT: mr 3, 5 ++; PPC64LE-NEXT: mr 3, 4 + ; PPC64LE-NEXT: blr + %ret = atomicrmw max i16* %ptr, i16 %val syncscope("singlethread") monotonic + ret i16 %ret +@@ -8190,16 +8216,17 @@ define i16 @test485(i16* %ptr, i16 %val) { + define i16 @test486(i16* %ptr, i16 %val) { + ; PPC64LE-LABEL: test486: + ; PPC64LE: # %bb.0: +-; PPC64LE-NEXT: mr 5, 3 ++; PPC64LE-NEXT: extsh 5, 4 + ; PPC64LE-NEXT: .LBB486_1: +-; PPC64LE-NEXT: lharx 3, 0, 5 +-; PPC64LE-NEXT: extsh 6, 3 +-; PPC64LE-NEXT: cmpw 4, 6 ++; PPC64LE-NEXT: lharx 4, 0, 3 ++; PPC64LE-NEXT: extsh 6, 4 ++; PPC64LE-NEXT: cmpw 5, 6 + ; PPC64LE-NEXT: ble 0, .LBB486_3 + ; PPC64LE-NEXT: # %bb.2: +-; PPC64LE-NEXT: sthcx. 4, 0, 5 ++; PPC64LE-NEXT: sthcx. 5, 0, 3 + ; PPC64LE-NEXT: bne 0, .LBB486_1 + ; PPC64LE-NEXT: .LBB486_3: ++; PPC64LE-NEXT: mr 3, 4 + ; PPC64LE-NEXT: lwsync + ; PPC64LE-NEXT: blr + %ret = atomicrmw max i16* %ptr, i16 %val syncscope("singlethread") acquire +@@ -8209,17 +8236,18 @@ define i16 @test486(i16* %ptr, i16 %val) { + define i16 @test487(i16* %ptr, i16 %val) { + ; PPC64LE-LABEL: test487: + ; PPC64LE: # %bb.0: ++; PPC64LE-NEXT: extsh 5, 4 + ; PPC64LE-NEXT: lwsync + ; PPC64LE-NEXT: .LBB487_1: +-; PPC64LE-NEXT: lharx 5, 0, 3 +-; PPC64LE-NEXT: extsh 6, 5 +-; PPC64LE-NEXT: cmpw 4, 6 ++; PPC64LE-NEXT: lharx 4, 0, 3 ++; PPC64LE-NEXT: extsh 6, 4 ++; PPC64LE-NEXT: cmpw 5, 6 + ; PPC64LE-NEXT: ble 0, .LBB487_3 + ; PPC64LE-NEXT: # %bb.2: +-; PPC64LE-NEXT: sthcx. 4, 0, 3 ++; PPC64LE-NEXT: sthcx. 5, 0, 3 + ; PPC64LE-NEXT: bne 0, .LBB487_1 + ; PPC64LE-NEXT: .LBB487_3: +-; PPC64LE-NEXT: mr 3, 5 ++; PPC64LE-NEXT: mr 3, 4 + ; PPC64LE-NEXT: blr + %ret = atomicrmw max i16* %ptr, i16 %val syncscope("singlethread") release + ret i16 %ret +@@ -8228,17 +8256,18 @@ define i16 @test487(i16* %ptr, i16 %val) { + define i16 @test488(i16* %ptr, i16 %val) { + ; PPC64LE-LABEL: test488: + ; PPC64LE: # %bb.0: ++; PPC64LE-NEXT: extsh 5, 4 + ; PPC64LE-NEXT: lwsync + ; PPC64LE-NEXT: .LBB488_1: +-; PPC64LE-NEXT: lharx 5, 0, 3 +-; PPC64LE-NEXT: extsh 6, 5 +-; PPC64LE-NEXT: cmpw 4, 6 ++; PPC64LE-NEXT: lharx 4, 0, 3 ++; PPC64LE-NEXT: extsh 6, 4 ++; PPC64LE-NEXT: cmpw 5, 6 + ; PPC64LE-NEXT: ble 0, .LBB488_3 + ; PPC64LE-NEXT: # %bb.2: +-; PPC64LE-NEXT: sthcx. 4, 0, 3 ++; PPC64LE-NEXT: sthcx. 5, 0, 3 + ; PPC64LE-NEXT: bne 0, .LBB488_1 + ; PPC64LE-NEXT: .LBB488_3: +-; PPC64LE-NEXT: mr 3, 5 ++; PPC64LE-NEXT: mr 3, 4 + ; PPC64LE-NEXT: lwsync + ; PPC64LE-NEXT: blr + %ret = atomicrmw max i16* %ptr, i16 %val syncscope("singlethread") acq_rel +@@ -8248,17 +8277,18 @@ define i16 @test488(i16* %ptr, i16 %val) { + define i16 @test489(i16* %ptr, i16 %val) { + ; PPC64LE-LABEL: test489: + ; PPC64LE: # %bb.0: ++; PPC64LE-NEXT: extsh 5, 4 + ; PPC64LE-NEXT: sync + ; PPC64LE-NEXT: .LBB489_1: +-; PPC64LE-NEXT: lharx 5, 0, 3 +-; PPC64LE-NEXT: extsh 6, 5 +-; PPC64LE-NEXT: cmpw 4, 6 ++; PPC64LE-NEXT: lharx 4, 0, 3 ++; PPC64LE-NEXT: extsh 6, 4 ++; PPC64LE-NEXT: cmpw 5, 6 + ; PPC64LE-NEXT: ble 0, .LBB489_3 + ; PPC64LE-NEXT: # %bb.2: +-; PPC64LE-NEXT: sthcx. 4, 0, 3 ++; PPC64LE-NEXT: sthcx. 5, 0, 3 + ; PPC64LE-NEXT: bne 0, .LBB489_1 + ; PPC64LE-NEXT: .LBB489_3: +-; PPC64LE-NEXT: mr 3, 5 ++; PPC64LE-NEXT: mr 3, 4 + ; PPC64LE-NEXT: lwsync + ; PPC64LE-NEXT: blr + %ret = atomicrmw max i16* %ptr, i16 %val syncscope("singlethread") seq_cst +@@ -8450,16 +8480,17 @@ define i64 @test499(i64* %ptr, i64 %val) { + define i8 @test500(i8* %ptr, i8 %val) { + ; PPC64LE-LABEL: test500: + ; PPC64LE: # %bb.0: ++; PPC64LE-NEXT: extsb 5, 4 + ; PPC64LE-NEXT: .LBB500_1: +-; PPC64LE-NEXT: lbarx 5, 0, 3 +-; PPC64LE-NEXT: extsb 6, 5 +-; PPC64LE-NEXT: cmpw 4, 6 ++; PPC64LE-NEXT: lbarx 4, 0, 3 ++; PPC64LE-NEXT: extsb 6, 4 ++; PPC64LE-NEXT: cmpw 5, 6 + ; PPC64LE-NEXT: bge 0, .LBB500_3 + ; PPC64LE-NEXT: # %bb.2: +-; PPC64LE-NEXT: stbcx. 4, 0, 3 ++; PPC64LE-NEXT: stbcx. 5, 0, 3 + ; PPC64LE-NEXT: bne 0, .LBB500_1 + ; PPC64LE-NEXT: .LBB500_3: +-; PPC64LE-NEXT: mr 3, 5 ++; PPC64LE-NEXT: mr 3, 4 + ; PPC64LE-NEXT: blr + %ret = atomicrmw min i8* %ptr, i8 %val syncscope("singlethread") monotonic + ret i8 %ret +@@ -8468,16 +8499,17 @@ define i8 @test500(i8* %ptr, i8 %val) { + define i8 @test501(i8* %ptr, i8 %val) { + ; PPC64LE-LABEL: test501: + ; PPC64LE: # %bb.0: +-; PPC64LE-NEXT: mr 5, 3 ++; PPC64LE-NEXT: extsb 5, 4 + ; PPC64LE-NEXT: .LBB501_1: +-; PPC64LE-NEXT: lbarx 3, 0, 5 +-; PPC64LE-NEXT: extsb 6, 3 +-; PPC64LE-NEXT: cmpw 4, 6 ++; PPC64LE-NEXT: lbarx 4, 0, 3 ++; PPC64LE-NEXT: extsb 6, 4 ++; PPC64LE-NEXT: cmpw 5, 6 + ; PPC64LE-NEXT: bge 0, .LBB501_3 + ; PPC64LE-NEXT: # %bb.2: +-; PPC64LE-NEXT: stbcx. 4, 0, 5 ++; PPC64LE-NEXT: stbcx. 5, 0, 3 + ; PPC64LE-NEXT: bne 0, .LBB501_1 + ; PPC64LE-NEXT: .LBB501_3: ++; PPC64LE-NEXT: mr 3, 4 + ; PPC64LE-NEXT: lwsync + ; PPC64LE-NEXT: blr + %ret = atomicrmw min i8* %ptr, i8 %val syncscope("singlethread") acquire +@@ -8487,17 +8519,18 @@ define i8 @test501(i8* %ptr, i8 %val) { + define i8 @test502(i8* %ptr, i8 %val) { + ; PPC64LE-LABEL: test502: + ; PPC64LE: # %bb.0: ++; PPC64LE-NEXT: extsb 5, 4 + ; PPC64LE-NEXT: lwsync + ; PPC64LE-NEXT: .LBB502_1: +-; PPC64LE-NEXT: lbarx 5, 0, 3 +-; PPC64LE-NEXT: extsb 6, 5 +-; PPC64LE-NEXT: cmpw 4, 6 ++; PPC64LE-NEXT: lbarx 4, 0, 3 ++; PPC64LE-NEXT: extsb 6, 4 ++; PPC64LE-NEXT: cmpw 5, 6 + ; PPC64LE-NEXT: bge 0, .LBB502_3 + ; PPC64LE-NEXT: # %bb.2: +-; PPC64LE-NEXT: stbcx. 4, 0, 3 ++; PPC64LE-NEXT: stbcx. 5, 0, 3 + ; PPC64LE-NEXT: bne 0, .LBB502_1 + ; PPC64LE-NEXT: .LBB502_3: +-; PPC64LE-NEXT: mr 3, 5 ++; PPC64LE-NEXT: mr 3, 4 + ; PPC64LE-NEXT: blr + %ret = atomicrmw min i8* %ptr, i8 %val syncscope("singlethread") release + ret i8 %ret +@@ -8506,17 +8539,18 @@ define i8 @test502(i8* %ptr, i8 %val) { + define i8 @test503(i8* %ptr, i8 %val) { + ; PPC64LE-LABEL: test503: + ; PPC64LE: # %bb.0: ++; PPC64LE-NEXT: extsb 5, 4 + ; PPC64LE-NEXT: lwsync + ; PPC64LE-NEXT: .LBB503_1: +-; PPC64LE-NEXT: lbarx 5, 0, 3 +-; PPC64LE-NEXT: extsb 6, 5 +-; PPC64LE-NEXT: cmpw 4, 6 ++; PPC64LE-NEXT: lbarx 4, 0, 3 ++; PPC64LE-NEXT: extsb 6, 4 ++; PPC64LE-NEXT: cmpw 5, 6 + ; PPC64LE-NEXT: bge 0, .LBB503_3 + ; PPC64LE-NEXT: # %bb.2: +-; PPC64LE-NEXT: stbcx. 4, 0, 3 ++; PPC64LE-NEXT: stbcx. 5, 0, 3 + ; PPC64LE-NEXT: bne 0, .LBB503_1 + ; PPC64LE-NEXT: .LBB503_3: +-; PPC64LE-NEXT: mr 3, 5 ++; PPC64LE-NEXT: mr 3, 4 + ; PPC64LE-NEXT: lwsync + ; PPC64LE-NEXT: blr + %ret = atomicrmw min i8* %ptr, i8 %val syncscope("singlethread") acq_rel +@@ -8526,17 +8560,18 @@ define i8 @test503(i8* %ptr, i8 %val) { + define i8 @test504(i8* %ptr, i8 %val) { + ; PPC64LE-LABEL: test504: + ; PPC64LE: # %bb.0: ++; PPC64LE-NEXT: extsb 5, 4 + ; PPC64LE-NEXT: sync + ; PPC64LE-NEXT: .LBB504_1: +-; PPC64LE-NEXT: lbarx 5, 0, 3 +-; PPC64LE-NEXT: extsb 6, 5 +-; PPC64LE-NEXT: cmpw 4, 6 ++; PPC64LE-NEXT: lbarx 4, 0, 3 ++; PPC64LE-NEXT: extsb 6, 4 ++; PPC64LE-NEXT: cmpw 5, 6 + ; PPC64LE-NEXT: bge 0, .LBB504_3 + ; PPC64LE-NEXT: # %bb.2: +-; PPC64LE-NEXT: stbcx. 4, 0, 3 ++; PPC64LE-NEXT: stbcx. 5, 0, 3 + ; PPC64LE-NEXT: bne 0, .LBB504_1 + ; PPC64LE-NEXT: .LBB504_3: +-; PPC64LE-NEXT: mr 3, 5 ++; PPC64LE-NEXT: mr 3, 4 + ; PPC64LE-NEXT: lwsync + ; PPC64LE-NEXT: blr + %ret = atomicrmw min i8* %ptr, i8 %val syncscope("singlethread") seq_cst +@@ -8546,16 +8581,17 @@ define i8 @test504(i8* %ptr, i8 %val) { + define i16 @test505(i16* %ptr, i16 %val) { + ; PPC64LE-LABEL: test505: + ; PPC64LE: # %bb.0: ++; PPC64LE-NEXT: extsh 5, 4 + ; PPC64LE-NEXT: .LBB505_1: +-; PPC64LE-NEXT: lharx 5, 0, 3 +-; PPC64LE-NEXT: extsh 6, 5 +-; PPC64LE-NEXT: cmpw 4, 6 ++; PPC64LE-NEXT: lharx 4, 0, 3 ++; PPC64LE-NEXT: extsh 6, 4 ++; PPC64LE-NEXT: cmpw 5, 6 + ; PPC64LE-NEXT: bge 0, .LBB505_3 + ; PPC64LE-NEXT: # %bb.2: +-; PPC64LE-NEXT: sthcx. 4, 0, 3 ++; PPC64LE-NEXT: sthcx. 5, 0, 3 + ; PPC64LE-NEXT: bne 0, .LBB505_1 + ; PPC64LE-NEXT: .LBB505_3: +-; PPC64LE-NEXT: mr 3, 5 ++; PPC64LE-NEXT: mr 3, 4 + ; PPC64LE-NEXT: blr + %ret = atomicrmw min i16* %ptr, i16 %val syncscope("singlethread") monotonic + ret i16 %ret +@@ -8564,16 +8600,17 @@ define i16 @test505(i16* %ptr, i16 %val) { + define i16 @test506(i16* %ptr, i16 %val) { + ; PPC64LE-LABEL: test506: + ; PPC64LE: # %bb.0: +-; PPC64LE-NEXT: mr 5, 3 ++; PPC64LE-NEXT: extsh 5, 4 + ; PPC64LE-NEXT: .LBB506_1: +-; PPC64LE-NEXT: lharx 3, 0, 5 +-; PPC64LE-NEXT: extsh 6, 3 +-; PPC64LE-NEXT: cmpw 4, 6 ++; PPC64LE-NEXT: lharx 4, 0, 3 ++; PPC64LE-NEXT: extsh 6, 4 ++; PPC64LE-NEXT: cmpw 5, 6 + ; PPC64LE-NEXT: bge 0, .LBB506_3 + ; PPC64LE-NEXT: # %bb.2: +-; PPC64LE-NEXT: sthcx. 4, 0, 5 ++; PPC64LE-NEXT: sthcx. 5, 0, 3 + ; PPC64LE-NEXT: bne 0, .LBB506_1 + ; PPC64LE-NEXT: .LBB506_3: ++; PPC64LE-NEXT: mr 3, 4 + ; PPC64LE-NEXT: lwsync + ; PPC64LE-NEXT: blr + %ret = atomicrmw min i16* %ptr, i16 %val syncscope("singlethread") acquire +@@ -8583,17 +8620,18 @@ define i16 @test506(i16* %ptr, i16 %val) { + define i16 @test507(i16* %ptr, i16 %val) { + ; PPC64LE-LABEL: test507: + ; PPC64LE: # %bb.0: ++; PPC64LE-NEXT: extsh 5, 4 + ; PPC64LE-NEXT: lwsync + ; PPC64LE-NEXT: .LBB507_1: +-; PPC64LE-NEXT: lharx 5, 0, 3 +-; PPC64LE-NEXT: extsh 6, 5 +-; PPC64LE-NEXT: cmpw 4, 6 ++; PPC64LE-NEXT: lharx 4, 0, 3 ++; PPC64LE-NEXT: extsh 6, 4 ++; PPC64LE-NEXT: cmpw 5, 6 + ; PPC64LE-NEXT: bge 0, .LBB507_3 + ; PPC64LE-NEXT: # %bb.2: +-; PPC64LE-NEXT: sthcx. 4, 0, 3 ++; PPC64LE-NEXT: sthcx. 5, 0, 3 + ; PPC64LE-NEXT: bne 0, .LBB507_1 + ; PPC64LE-NEXT: .LBB507_3: +-; PPC64LE-NEXT: mr 3, 5 ++; PPC64LE-NEXT: mr 3, 4 + ; PPC64LE-NEXT: blr + %ret = atomicrmw min i16* %ptr, i16 %val syncscope("singlethread") release + ret i16 %ret +@@ -8602,17 +8640,18 @@ define i16 @test507(i16* %ptr, i16 %val) { + define i16 @test508(i16* %ptr, i16 %val) { + ; PPC64LE-LABEL: test508: + ; PPC64LE: # %bb.0: ++; PPC64LE-NEXT: extsh 5, 4 + ; PPC64LE-NEXT: lwsync + ; PPC64LE-NEXT: .LBB508_1: +-; PPC64LE-NEXT: lharx 5, 0, 3 +-; PPC64LE-NEXT: extsh 6, 5 +-; PPC64LE-NEXT: cmpw 4, 6 ++; PPC64LE-NEXT: lharx 4, 0, 3 ++; PPC64LE-NEXT: extsh 6, 4 ++; PPC64LE-NEXT: cmpw 5, 6 + ; PPC64LE-NEXT: bge 0, .LBB508_3 + ; PPC64LE-NEXT: # %bb.2: +-; PPC64LE-NEXT: sthcx. 4, 0, 3 ++; PPC64LE-NEXT: sthcx. 5, 0, 3 + ; PPC64LE-NEXT: bne 0, .LBB508_1 + ; PPC64LE-NEXT: .LBB508_3: +-; PPC64LE-NEXT: mr 3, 5 ++; PPC64LE-NEXT: mr 3, 4 + ; PPC64LE-NEXT: lwsync + ; PPC64LE-NEXT: blr + %ret = atomicrmw min i16* %ptr, i16 %val syncscope("singlethread") acq_rel +@@ -8622,17 +8661,18 @@ define i16 @test508(i16* %ptr, i16 %val) { + define i16 @test509(i16* %ptr, i16 %val) { + ; PPC64LE-LABEL: test509: + ; PPC64LE: # %bb.0: ++; PPC64LE-NEXT: extsh 5, 4 + ; PPC64LE-NEXT: sync + ; PPC64LE-NEXT: .LBB509_1: +-; PPC64LE-NEXT: lharx 5, 0, 3 +-; PPC64LE-NEXT: extsh 6, 5 +-; PPC64LE-NEXT: cmpw 4, 6 ++; PPC64LE-NEXT: lharx 4, 0, 3 ++; PPC64LE-NEXT: extsh 6, 4 ++; PPC64LE-NEXT: cmpw 5, 6 + ; PPC64LE-NEXT: bge 0, .LBB509_3 + ; PPC64LE-NEXT: # %bb.2: +-; PPC64LE-NEXT: sthcx. 4, 0, 3 ++; PPC64LE-NEXT: sthcx. 5, 0, 3 + ; PPC64LE-NEXT: bne 0, .LBB509_1 + ; PPC64LE-NEXT: .LBB509_3: +-; PPC64LE-NEXT: mr 3, 5 ++; PPC64LE-NEXT: mr 3, 4 + ; PPC64LE-NEXT: lwsync + ; PPC64LE-NEXT: blr + %ret = atomicrmw min i16* %ptr, i16 %val syncscope("singlethread") seq_cst +diff --git llvm/test/CodeGen/PowerPC/sign-ext-atomics.ll llvm/test/CodeGen/PowerPC/sign-ext-atomics.ll +new file mode 100644 +index 000000000000..7716dc0cedcc +--- /dev/null ++++ llvm/test/CodeGen/PowerPC/sign-ext-atomics.ll +@@ -0,0 +1,105 @@ ++; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py ++; RUN: llc -mtriple=powerpc64le-linux-gnu < %s | FileCheck %s ++define i16 @SEXTParam(i16 signext %0) #0 { ++; CHECK-LABEL: SEXTParam: ++; CHECK: # %bb.0: # %top ++; CHECK-NEXT: li 4, 0 ++; CHECK-NEXT: sth 4, -4(1) ++; CHECK-NEXT: addi 4, 1, -4 ++; CHECK-NEXT: lwsync ++; CHECK-NEXT: .LBB0_1: # %top ++; CHECK-NEXT: # ++; CHECK-NEXT: lharx 5, 0, 4 ++; CHECK-NEXT: extsh 5, 5 ++; CHECK-NEXT: cmpw 3, 5 ++; CHECK-NEXT: bge 0, .LBB0_3 ++; CHECK-NEXT: # %bb.2: # %top ++; CHECK-NEXT: # ++; CHECK-NEXT: sthcx. 3, 0, 4 ++; CHECK-NEXT: bne 0, .LBB0_1 ++; CHECK-NEXT: .LBB0_3: # %top ++; CHECK-NEXT: lwsync ++; CHECK-NEXT: lhz 3, -4(1) ++; CHECK-NEXT: cmpd 7, 3, 3 ++; CHECK-NEXT: bne- 7, .+4 ++; CHECK-NEXT: isync ++; CHECK-NEXT: blr ++top: ++ %1 = alloca i16, align 4 ++ %2 = bitcast i16* %1 to i8* ++ store i16 0, i16* %1, align 4 ++ %rv.i = atomicrmw min i16* %1, i16 %0 acq_rel ++ %rv.i2 = load atomic i16, i16* %1 acquire, align 16 ++ ret i16 %rv.i2 ++} ++ ++define i16 @noSEXTParam(i16 %0) #0 { ++; CHECK-LABEL: noSEXTParam: ++; CHECK: # %bb.0: # %top ++; CHECK-NEXT: li 4, 0 ++; CHECK-NEXT: extsh 3, 3 ++; CHECK-NEXT: sth 4, -4(1) ++; CHECK-NEXT: addi 4, 1, -4 ++; CHECK-NEXT: lwsync ++; CHECK-NEXT: .LBB1_1: # %top ++; CHECK-NEXT: # ++; CHECK-NEXT: lharx 5, 0, 4 ++; CHECK-NEXT: extsh 5, 5 ++; CHECK-NEXT: cmpw 3, 5 ++; CHECK-NEXT: bge 0, .LBB1_3 ++; CHECK-NEXT: # %bb.2: # %top ++; CHECK-NEXT: # ++; CHECK-NEXT: sthcx. 3, 0, 4 ++; CHECK-NEXT: bne 0, .LBB1_1 ++; CHECK-NEXT: .LBB1_3: # %top ++; CHECK-NEXT: lwsync ++; CHECK-NEXT: lhz 3, -4(1) ++; CHECK-NEXT: cmpd 7, 3, 3 ++; CHECK-NEXT: bne- 7, .+4 ++; CHECK-NEXT: isync ++; CHECK-NEXT: blr ++top: ++ %1 = alloca i16, align 4 ++ %2 = bitcast i16* %1 to i8* ++ store i16 0, i16* %1, align 4 ++ %rv.i = atomicrmw min i16* %1, i16 %0 acq_rel ++ %rv.i2 = load atomic i16, i16* %1 acquire, align 16 ++ ret i16 %rv.i2 ++} ++ ++define i16 @noSEXTLoad(i16 *%p) #0 { ++; CHECK-LABEL: noSEXTLoad: ++; CHECK: # %bb.0: # %top ++; CHECK-NEXT: lhz 5, 0(3) ++; CHECK-NEXT: li 4, 0 ++; CHECK-NEXT: addi 3, 1, -4 ++; CHECK-NEXT: sth 4, -4(1) ++; CHECK-NEXT: extsh 4, 5 ++; CHECK-NEXT: lwsync ++; CHECK-NEXT: .LBB2_1: # %top ++; CHECK-NEXT: # ++; CHECK-NEXT: lharx 5, 0, 3 ++; CHECK-NEXT: extsh 5, 5 ++; CHECK-NEXT: cmpw 4, 5 ++; CHECK-NEXT: bge 0, .LBB2_3 ++; CHECK-NEXT: # %bb.2: # %top ++; CHECK-NEXT: # ++; CHECK-NEXT: sthcx. 4, 0, 3 ++; CHECK-NEXT: bne 0, .LBB2_1 ++; CHECK-NEXT: .LBB2_3: # %top ++; CHECK-NEXT: lwsync ++; CHECK-NEXT: lhz 3, -4(1) ++; CHECK-NEXT: cmpd 7, 3, 3 ++; CHECK-NEXT: bne- 7, .+4 ++; CHECK-NEXT: isync ++; CHECK-NEXT: blr ++top: ++ %0 = load i16, i16* %p, align 2 ++ %1 = alloca i16, align 4 ++ %2 = bitcast i16* %1 to i8* ++ store i16 0, i16* %1, align 4 ++ %rv.i = atomicrmw min i16* %1, i16 %0 acq_rel ++ %rv.i2 = load atomic i16, i16* %1 acquire, align 16 ++ ret i16 %rv.i2 ++} ++attributes #0 = { nounwind } +-- +2.30.0 + diff --git a/deps/patches/llvm-11-D94828-ppc-half-fpconv.patch b/deps/patches/llvm-11-D94828-ppc-half-fpconv.patch deleted file mode 100644 index 9850d8fc9e68e..0000000000000 --- a/deps/patches/llvm-11-D94828-ppc-half-fpconv.patch +++ /dev/null @@ -1,102 +0,0 @@ -From 43b108a71d25d526a51c371cbc867ce5ae49ad8d Mon Sep 17 00:00:00 2001 -From: Valentin Churavy -Date: Fri, 15 Jan 2021 17:30:39 -0500 -Subject: [PATCH] [PowerPC] Disable CTR loops containing floating point - conversion on half-precision - -Follow-up on https://reviews.llvm.org/rG0a19fc3088f5 and fixes https://bugs.llvm.org/show_bug.cgi?id=48519 -for fpext and fptrunc. - -Differential Revision: https://reviews.llvm.org/D94828 ---- - .../Target/PowerPC/PPCTargetTransformInfo.cpp | 12 +++++ - llvm/test/CodeGen/PowerPC/pr48519.ll | 50 +++++++++++++++++++ - 2 files changed, 62 insertions(+) - -diff --git llvm/lib/Target/PowerPC/PPCTargetTransformInfo.cpp llvm/lib/Target/PowerPC/PPCTargetTransformInfo.cpp -index 71f867a617c8..614dc6746289 100644 ---- llvm/lib/Target/PowerPC/PPCTargetTransformInfo.cpp -+++ llvm/lib/Target/PowerPC/PPCTargetTransformInfo.cpp -@@ -677,6 +677,18 @@ bool PPCTTIImpl::mightUseCTR(BasicBlock *BB, TargetLibraryInfo *LibInfo, - } - } - -+ if (!ST->isISA3_0()) { -+ switch (J->getOpcode()) { -+ case Instruction::FPTrunc: -+ case Instruction::FPExt: { -+ CastInst *CI = cast(J); -+ if (CI->getSrcTy()->getScalarType()->isHalfTy() || -+ CI->getDestTy()->getScalarType()->isHalfTy()) -+ return true; -+ } -+ } -+ } -+ - for (Value *Operand : J->operands()) - if (memAddrUsesCTR(Operand, TM, Visited)) - return true; -diff --git llvm/test/CodeGen/PowerPC/pr48519.ll llvm/test/CodeGen/PowerPC/pr48519.ll -index 777874e91c26..85d42a1994e6 100644 ---- llvm/test/CodeGen/PowerPC/pr48519.ll -+++ llvm/test/CodeGen/PowerPC/pr48519.ll -@@ -49,6 +49,56 @@ pass.1: ; preds = %L139 - unreachable - } - -+define void @julia__hypot_17() { -+; CHECK-LABEL: julia__hypot_17: -+; CHECK: # %bb.0: # %top -+; CHECK-NEXT: mflr r0 -+; CHECK-NEXT: .cfi_def_cfa_offset 48 -+; CHECK-NEXT: .cfi_offset lr, 16 -+; CHECK-NEXT: .cfi_offset r30, -16 -+; CHECK-NEXT: std r30, -16(r1) # 8-byte Folded Spill -+; CHECK-NEXT: std r0, 16(r1) -+; CHECK-NEXT: stdu r1, -48(r1) -+; CHECK-NEXT: li r30, 3 -+; CHECK-NEXT: .p2align 5 -+; CHECK-NEXT: .LBB1_1: # %L57 -+; CHECK-NEXT: # -+; CHECK-NEXT: addi r30, r30, -1 -+; CHECK-NEXT: cmpldi r30, 0 -+; CHECK-NEXT: beq cr0, .LBB1_3 -+; CHECK-NEXT: # %bb.2: # %L68 -+; CHECK-NEXT: # -+; CHECK-NEXT: lhz r3, 0(0) -+; CHECK-NEXT: bl __gnu_h2f_ieee -+; CHECK-NEXT: nop -+; CHECK-NEXT: fcmpu cr0, f1, f1 -+; CHECK-NEXT: bun cr0, .LBB1_1 -+; CHECK-NEXT: .LBB1_3: # %L78 -+; CHECK-NEXT: addi r1, r1, 48 -+; CHECK-NEXT: ld r0, 16(r1) -+; CHECK-NEXT: ld r30, -16(r1) # 8-byte Folded Reload -+; CHECK-NEXT: mtlr r0 -+; CHECK-NEXT: blr -+top: -+ br label %L57 -+ -+L57: ; preds = %L68, %top -+ %value_phi117 = phi i64 [ %0, %L68 ], [ 2, %top ] -+ %exitcond = icmp eq i64 %value_phi117, 4 -+ br i1 %exitcond, label %L78, label %L68 -+ -+L68: ; preds = %L57 -+ %0 = add nuw nsw i64 %value_phi117, 1 -+ %1 = load half, half* null, align 2 -+ %2 = fpext half %1 to float -+ %3 = fcmp uno float %2, 0.000000e+00 -+ %4 = or i1 %3, false -+ br i1 %4, label %L57, label %L78 -+ -+L78: ; preds = %L68, %L57 -+ ret void -+} -+ - ; Function Attrs: nounwind readnone speculatable willreturn - declare { i64, i1 } @llvm.ssub.with.overflow.i64(i64, i64) #0 - --- -2.30.0 - diff --git a/deps/patches/llvm-11-D94980-CTR-half.patch b/deps/patches/llvm-11-D94980-CTR-half.patch new file mode 100644 index 0000000000000..64debc43a9e92 --- /dev/null +++ b/deps/patches/llvm-11-D94980-CTR-half.patch @@ -0,0 +1,398 @@ +From 8a3be8c0ff83f2b9d2db4fd581ec014bd3217505 Mon Sep 17 00:00:00 2001 +From: Nemanja Ivanovic +Date: Tue, 19 Jan 2021 19:52:31 -0500 +Subject: [PATCH] [PowerPC] Do not emit HW loop with half precision operations + +If a loop has any operations on half precision values, there will be calls to library functions on Power8. Even on Power9, there is a small subset of instructions that are actually supported for the type. + +This patch disables HW loops whenever any operations on the type are found (other than the handfull of supported ones when compiling for Power9). Fixes a few PR's opened by Julia: + +https://bugs.llvm.org/show_bug.cgi?id=48785 +https://bugs.llvm.org/show_bug.cgi?id=48786 +https://bugs.llvm.org/show_bug.cgi?id=48519 +--- + .../Target/PowerPC/PPCTargetTransformInfo.cpp | 29 +- + llvm/test/CodeGen/PowerPC/pr48519.ll | 296 ++++++++++++++++-- + 2 files changed, 299 insertions(+), 26 deletions(-) + +diff --git llvm/lib/Target/PowerPC/PPCTargetTransformInfo.cpp llvm/lib/Target/PowerPC/PPCTargetTransformInfo.cpp +index 49c10fdf8898..adf9f0df82f8 100644 +--- llvm/lib/Target/PowerPC/PPCTargetTransformInfo.cpp ++++ llvm/lib/Target/PowerPC/PPCTargetTransformInfo.cpp +@@ -276,8 +276,33 @@ bool PPCTTIImpl::mightUseCTR(BasicBlock *BB, TargetLibraryInfo *LibInfo, + return false; + }; + ++ auto supportedHalfPrecisionOp = [](Instruction *Inst) { ++ switch (Inst->getOpcode()) { ++ default: return false; ++ case Instruction::FPTrunc: ++ case Instruction::FPExt: ++ case Instruction::Load: ++ case Instruction::Store: ++ case Instruction::FPToUI: ++ case Instruction::UIToFP: ++ case Instruction::FPToSI: ++ case Instruction::SIToFP: ++ return true; ++ } ++ }; ++ + for (BasicBlock::iterator J = BB->begin(), JE = BB->end(); + J != JE; ++J) { ++ // There are no direct operations on half precision so assume that ++ // anything with that type requires a call except for a few select ++ // operations with Power9. ++ if (Instruction *CurrInst = dyn_cast(J)) { ++ for (const auto &Op : CurrInst->operands()) { ++ if (Op->getType()->getScalarType()->isHalfTy() || ++ CurrInst->getType()->getScalarType()->isHalfTy()) ++ return !(ST->isISA3_0() && supportedHalfPrecisionOp(CurrInst)); ++ } ++ } + if (CallInst *CI = dyn_cast(J)) { + // Inline ASM is okay, unless it clobbers the ctr register. + if (InlineAsm *IA = dyn_cast(CI->getCalledOperand())) { +@@ -441,10 +466,6 @@ bool PPCTTIImpl::mightUseCTR(BasicBlock *BB, TargetLibraryInfo *LibInfo, + isLargeIntegerTy(!TM.isPPC64(), CI->getSrcTy()->getScalarType()) || + isLargeIntegerTy(!TM.isPPC64(), CI->getDestTy()->getScalarType())) + return true; +- if (!ST->isISA3_0() && +- (CI->getSrcTy()->getScalarType()->isHalfTy() || +- CI->getDestTy()->getScalarType()->isHalfTy())) +- return true; + } else if (isLargeIntegerTy(!TM.isPPC64(), + J->getType()->getScalarType()) && + (J->getOpcode() == Instruction::UDiv || +diff --git llvm/test/CodeGen/PowerPC/pr48519.ll llvm/test/CodeGen/PowerPC/pr48519.ll +index 777874e91c26..50970cb185d8 100644 +--- llvm/test/CodeGen/PowerPC/pr48519.ll ++++ llvm/test/CodeGen/PowerPC/pr48519.ll +@@ -1,9 +1,13 @@ + ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py + ; RUN: llc -mcpu=pwr8 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \ + ; RUN: -mtriple=powerpc64le-unknown-unknown < %s | FileCheck %s ++; RUN: llc -mcpu=pwr9 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \ ++; RUN: -mtriple=powerpc64le-unknown-unknown < %s | FileCheck %s \ ++; RUN: -check-prefix=CHECK-P9 ++ + define void @julia__typed_vcat_20() #0 { + ; CHECK-LABEL: julia__typed_vcat_20: +-; CHECK: # %bb.0: # %top ++; CHECK: # %bb.0: # %bb + ; CHECK-NEXT: mflr r0 + ; CHECK-NEXT: std r30, -16(r1) # 8-byte Folded Spill + ; CHECK-NEXT: std r0, 16(r1) +@@ -11,7 +15,7 @@ define void @julia__typed_vcat_20() #0 { + ; CHECK-NEXT: li r3, 1 + ; CHECK-NEXT: li r30, 0 + ; CHECK-NEXT: .p2align 4 +-; CHECK-NEXT: .LBB0_1: # %L139 ++; CHECK-NEXT: .LBB0_1: # %bb3 + ; CHECK-NEXT: # + ; CHECK-NEXT: addi r3, r3, -1 + ; CHECK-NEXT: mtfprd f0, r3 +@@ -24,32 +28,280 @@ define void @julia__typed_vcat_20() #0 { + ; CHECK-NEXT: li r3, 0 + ; CHECK-NEXT: cmpldi r30, 0 + ; CHECK-NEXT: bne+ cr0, .LBB0_1 +-; CHECK-NEXT: # %bb.2: # %pass.1 ++; CHECK-NEXT: # %bb.2: # %bb11 + ; CHECK-NEXT: bl __gnu_f2h_ieee + ; CHECK-NEXT: nop + ; CHECK-NEXT: sth r3, 0(r3) +-top: +- %.sroa.6.0.copyload = load i64, i64 addrspace(11)* null, align 8 +- %0 = call { i64, i1 } @llvm.ssub.with.overflow.i64(i64 %.sroa.6.0.copyload, i64 0) +- %1 = extractvalue { i64, i1 } %0, 0 +- br label %L139 +- +-L139: ; preds = %L139, %top +- %value_phi21 = phi i64 [ %5, %L139 ], [ 1, %top ] +- %value_phi23 = phi i64 [ 0, %L139 ], [ 1, %top ] +- %2 = add nsw i64 %value_phi23, -1 +- %3 = add i64 %2, 0 +- %4 = sitofp i64 %3 to half +- store half %4, half addrspace(13)* undef, align 2 +- %.not101.not = icmp eq i64 %value_phi21, 0 +- %5 = add i64 %value_phi21, 1 +- br i1 %.not101.not, label %pass.1, label %L139 +- +-pass.1: ; preds = %L139 ++; ++; CHECK-P9-LABEL: julia__typed_vcat_20: ++; CHECK-P9: # %bb.0: # %bb ++; CHECK-P9-NEXT: li r3, 0 ++; CHECK-P9-NEXT: mtctr r3 ++; CHECK-P9-NEXT: li r3, 1 ++; CHECK-P9-NEXT: .p2align 4 ++; CHECK-P9-NEXT: .LBB0_1: # %bb3 ++; CHECK-P9-NEXT: # ++; CHECK-P9-NEXT: addi r3, r3, -1 ++; CHECK-P9-NEXT: mtfprd f0, r3 ++; CHECK-P9-NEXT: xscvsxdsp f0, f0 ++; CHECK-P9-NEXT: xscvdphp f0, f0 ++; CHECK-P9-NEXT: mffprwz r3, f0 ++; CHECK-P9-NEXT: mtfprwz f0, r3 ++; CHECK-P9-NEXT: li r3, 0 ++; CHECK-P9-NEXT: xscvhpdp f0, f0 ++; CHECK-P9-NEXT: bdnz .LBB0_1 ++; CHECK-P9-NEXT: # %bb.2: # %bb11 ++; CHECK-P9-NEXT: xscvdphp f0, f0 ++; CHECK-P9-NEXT: stxsihx f0, 0, r3 ++bb: ++ %i = load i64, i64 addrspace(11)* null, align 8 ++ %i1 = call { i64, i1 } @llvm.ssub.with.overflow.i64(i64 %i, i64 0) ++ %i2 = extractvalue { i64, i1 } %i1, 0 ++ br label %bb3 ++ ++bb3: ; preds = %bb3, %bb ++ %i4 = phi i64 [ %i10, %bb3 ], [ 1, %bb ] ++ %i5 = phi i64 [ 0, %bb3 ], [ 1, %bb ] ++ %i6 = add nsw i64 %i5, -1 ++ %i7 = add i64 %i6, 0 ++ %i8 = sitofp i64 %i7 to half ++ store half %i8, half addrspace(13)* undef, align 2 ++ %i9 = icmp eq i64 %i4, 0 ++ %i10 = add i64 %i4, 1 ++ br i1 %i9, label %bb11, label %bb3 ++ ++bb11: ; preds = %bb3 + unreachable + } + +-; Function Attrs: nounwind readnone speculatable willreturn + declare { i64, i1 } @llvm.ssub.with.overflow.i64(i64, i64) #0 + ++define void @julia__hypot_17() #0 { ++; CHECK-LABEL: julia__hypot_17: ++; CHECK: # %bb.0: # %bb ++; CHECK-NEXT: mflr r0 ++; CHECK-NEXT: std r30, -16(r1) # 8-byte Folded Spill ++; CHECK-NEXT: std r0, 16(r1) ++; CHECK-NEXT: stdu r1, -48(r1) ++; CHECK-NEXT: li r30, 3 ++; CHECK-NEXT: .p2align 5 ++; CHECK-NEXT: .LBB1_1: # %bb1 ++; CHECK-NEXT: # ++; CHECK-NEXT: addi r30, r30, -1 ++; CHECK-NEXT: cmpldi r30, 0 ++; CHECK-NEXT: beq cr0, .LBB1_3 ++; CHECK-NEXT: # %bb.2: # %bb3 ++; CHECK-NEXT: # ++; CHECK-NEXT: lhz r3, 0(0) ++; CHECK-NEXT: bl __gnu_h2f_ieee ++; CHECK-NEXT: nop ++; CHECK-NEXT: fcmpu cr0, f1, f1 ++; CHECK-NEXT: bun cr0, .LBB1_1 ++; CHECK-NEXT: .LBB1_3: # %bb9 ++; CHECK-NEXT: addi r1, r1, 48 ++; CHECK-NEXT: ld r0, 16(r1) ++; CHECK-NEXT: ld r30, -16(r1) # 8-byte Folded Reload ++; CHECK-NEXT: mtlr r0 ++; CHECK-NEXT: blr ++; ++; CHECK-P9-LABEL: julia__hypot_17: ++; CHECK-P9: # %bb.0: # %bb ++; CHECK-P9-NEXT: li r3, 3 ++; CHECK-P9-NEXT: mtctr r3 ++; CHECK-P9-NEXT: li r3, 0 ++; CHECK-P9-NEXT: .p2align 5 ++; CHECK-P9-NEXT: .LBB1_1: # %bb1 ++; CHECK-P9-NEXT: # ++; CHECK-P9-NEXT: bdzlr ++; CHECK-P9-NEXT: # %bb.2: # %bb3 ++; CHECK-P9-NEXT: # ++; CHECK-P9-NEXT: lxsihzx f0, 0, r3 ++; CHECK-P9-NEXT: xscvhpdp f0, f0 ++; CHECK-P9-NEXT: fcmpu cr0, f0, f0 ++; CHECK-P9-NEXT: bun cr0, .LBB1_1 ++; CHECK-P9-NEXT: # %bb.3: # %bb9 ++; CHECK-P9-NEXT: blr ++bb: ++ br label %bb1 ++ ++bb1: ; preds = %bb3, %bb ++ %i = phi i64 [ %i4, %bb3 ], [ 2, %bb ] ++ %i2 = icmp eq i64 %i, 4 ++ br i1 %i2, label %bb9, label %bb3 ++ ++bb3: ; preds = %bb1 ++ %i4 = add nuw nsw i64 %i, 1 ++ %i5 = load half, half* null, align 2 ++ %i6 = fpext half %i5 to float ++ %i7 = fcmp uno float %i6, 0.000000e+00 ++ %i8 = or i1 %i7, false ++ br i1 %i8, label %bb1, label %bb9 ++ ++bb9: ; preds = %bb3, %bb1 ++ ret void ++} ++ ++define void @func_48786() #0 { ++; CHECK-LABEL: func_48786: ++; CHECK: # %bb.0: # %bb ++; CHECK-NEXT: mfocrf r12, 32 ++; CHECK-NEXT: mflr r0 ++; CHECK-NEXT: std r0, 16(r1) ++; CHECK-NEXT: stw r12, 8(r1) ++; CHECK-NEXT: stdu r1, -48(r1) ++; CHECK-NEXT: ld r3, 0(r3) ++; CHECK-NEXT: std r30, 32(r1) # 8-byte Folded Spill ++; CHECK-NEXT: # implicit-def: $x30 ++; CHECK-NEXT: cmpdi r3, 0 ++; CHECK-NEXT: crnot 4*cr2+lt, eq ++; CHECK-NEXT: bc 12, 4*cr5+lt, .LBB2_3 ++; CHECK-NEXT: .p2align 4 ++; CHECK-NEXT: .LBB2_1: # %bb4 ++; CHECK-NEXT: lhz r3, 0(r3) ++; CHECK-NEXT: bl __gnu_h2f_ieee ++; CHECK-NEXT: nop ++; CHECK-NEXT: bc 4, 4*cr2+lt, .LBB2_6 ++; CHECK-NEXT: # %bb.2: # %bb8 ++; CHECK-NEXT: bl __gnu_f2h_ieee ++; CHECK-NEXT: nop ++; CHECK-NEXT: sth r3, 0(0) ++; CHECK-NEXT: .LBB2_3: # %bb10 ++; CHECK-NEXT: # ++; CHECK-NEXT: cmpldi r30, 0 ++; CHECK-NEXT: beq cr0, .LBB2_5 ++; CHECK-NEXT: # %bb.4: # %bb12 ++; CHECK-NEXT: # ++; CHECK-NEXT: addi r30, r30, 1 ++; CHECK-NEXT: bc 4, 4*cr5+lt, .LBB2_1 ++; CHECK-NEXT: b .LBB2_3 ++; CHECK-NEXT: .LBB2_5: # %bb14 ++; CHECK-NEXT: ld r30, 32(r1) # 8-byte Folded Reload ++; CHECK-NEXT: addi r1, r1, 48 ++; CHECK-NEXT: ld r0, 16(r1) ++; CHECK-NEXT: lwz r12, 8(r1) ++; CHECK-NEXT: mtocrf 32, r12 ++; CHECK-NEXT: mtlr r0 ++; CHECK-NEXT: blr ++; CHECK-NEXT: .LBB2_6: # %bb15 ++; ++; CHECK-P9-LABEL: func_48786: ++; CHECK-P9: # %bb.0: # %bb ++; CHECK-P9-NEXT: ld r3, 0(r3) ++; CHECK-P9-NEXT: cmpdi r3, 0 ++; CHECK-P9-NEXT: mtctr r3 ++; CHECK-P9-NEXT: li r3, 0 ++; CHECK-P9-NEXT: crnot 4*cr5+lt, eq ++; CHECK-P9-NEXT: b .LBB2_2 ++; CHECK-P9-NEXT: .p2align 5 ++; CHECK-P9-NEXT: .LBB2_1: # %bb10 ++; CHECK-P9-NEXT: # ++; CHECK-P9-NEXT: bdzlr ++; CHECK-P9-NEXT: .LBB2_2: # %bb2 ++; CHECK-P9-NEXT: # ++; CHECK-P9-NEXT: bc 12, 4*cr5+lt, .LBB2_1 ++; CHECK-P9-NEXT: # %bb.3: # %bb4 ++; CHECK-P9-NEXT: # ++; CHECK-P9-NEXT: lxsihzx f0, 0, r3 ++; CHECK-P9-NEXT: xscvhpdp f0, f0 ++; CHECK-P9-NEXT: bc 4, 4*cr5+lt, .LBB2_5 ++; CHECK-P9-NEXT: # %bb.4: # %bb8 ++; CHECK-P9-NEXT: # ++; CHECK-P9-NEXT: xscvdphp f0, f0 ++; CHECK-P9-NEXT: stxsihx f0, 0, r3 ++; CHECK-P9-NEXT: b .LBB2_1 ++; CHECK-P9-NEXT: .LBB2_5: # %bb15 ++bb: ++ %i = load i64, i64 addrspace(11)* undef, align 8 ++ %i1 = load i64, i64 addrspace(11)* undef, align 8 ++ br label %bb2 ++ ++bb2: ; preds = %bb12, %bb ++ %i3 = phi i64 [ undef, %bb ], [ %i13, %bb12 ] ++ br i1 undef, label %bb10, label %bb4 ++ ++bb4: ; preds = %bb2 ++ switch i32 undef, label %bb9 [ ++ i32 1426063360, label %bb5 ++ i32 1275068416, label %bb5 ++ ] ++ ++bb5: ; preds = %bb4, %bb4 ++ %i6 = load half, half addrspace(13)* undef, align 2 ++ %i7 = icmp ult i64 0, %i1 ++ br i1 %i7, label %bb8, label %bb15 ++ ++bb8: ; preds = %bb5 ++ store half %i6, half addrspace(13)* null, align 2 ++ br label %bb10 ++ ++bb9: ; preds = %bb4 ++ unreachable ++ ++bb10: ; preds = %bb8, %bb2 ++ %i11 = icmp eq i64 %i3, 0 ++ br i1 %i11, label %bb14, label %bb12 ++ ++bb12: ; preds = %bb10 ++ %i13 = add i64 %i3, 1 ++ br label %bb2 ++ ++bb14: ; preds = %bb10 ++ ret void ++ ++bb15: ; preds = %bb5 ++ unreachable ++} ++ ++define void @func_48785(half %arg) #0 { ++; CHECK-LABEL: func_48785: ++; CHECK: # %bb.0: # %bb ++; CHECK-NEXT: mflr r0 ++; CHECK-NEXT: std r29, -32(r1) # 8-byte Folded Spill ++; CHECK-NEXT: std r30, -24(r1) # 8-byte Folded Spill ++; CHECK-NEXT: stfd f31, -8(r1) # 8-byte Folded Spill ++; CHECK-NEXT: std r0, 16(r1) ++; CHECK-NEXT: stdu r1, -64(r1) ++; CHECK-NEXT: fmr f31, f1 ++; CHECK-NEXT: li r30, 0 ++; CHECK-NEXT: .p2align 5 ++; CHECK-NEXT: .LBB3_1: # %bb1 ++; CHECK-NEXT: # ++; CHECK-NEXT: fmr f1, f31 ++; CHECK-NEXT: sldi r29, r30, 1 ++; CHECK-NEXT: bl __gnu_f2h_ieee ++; CHECK-NEXT: nop ++; CHECK-NEXT: addi r30, r30, 12 ++; CHECK-NEXT: sth r3, 0(r29) ++; CHECK-NEXT: cmpldi r30, 0 ++; CHECK-NEXT: bne+ cr0, .LBB3_1 ++; CHECK-NEXT: # %bb.2: # %bb5 ++; ++; CHECK-P9-LABEL: func_48785: ++; CHECK-P9: # %bb.0: # %bb ++; CHECK-P9-NEXT: li r3, 1 ++; CHECK-P9-NEXT: rldic r3, r3, 62, 1 ++; CHECK-P9-NEXT: mtctr r3 ++; CHECK-P9-NEXT: li r3, 0 ++; CHECK-P9-NEXT: .p2align 4 ++; CHECK-P9-NEXT: .LBB3_1: # %bb1 ++; CHECK-P9-NEXT: # ++; CHECK-P9-NEXT: xscvdphp f0, f1 ++; CHECK-P9-NEXT: stxsihx f0, 0, r3 ++; CHECK-P9-NEXT: addi r3, r3, 24 ++; CHECK-P9-NEXT: bdnz .LBB3_1 ++; CHECK-P9-NEXT: # %bb.2: # %bb5 ++bb: ++ br label %bb1 ++ ++bb1: ; preds = %bb1, %bb ++ %i = phi i64 [ 0, %bb ], [ %i3, %bb1 ] ++ %i2 = getelementptr inbounds half, half addrspace(13)* null, i64 %i ++ store half %arg, half addrspace(13)* %i2, align 2 ++ %i3 = add i64 %i, 12 ++ %i4 = icmp eq i64 %i3, 0 ++ br i1 %i4, label %bb5, label %bb1 ++ ++bb5: ; preds = %bb1 ++ unreachable ++} + attributes #0 = { nounwind } +-- +2.30.0 + From 84ee166f1379211f5796d3e2f1c52f1b701fe066 Mon Sep 17 00:00:00 2001 From: Jeff Bezanson Date: Wed, 27 Jan 2021 09:54:09 -0500 Subject: [PATCH 73/78] fix #39405, saving modules with renamed imports (#39408) (cherry picked from commit dd1fcf3b07f02a8c1adb370d9b084e05882d9830) --- src/dump.c | 15 ++++++++------- src/staticdata.c | 18 +++++++++++------- test/precompile.jl | 13 +++++++++++++ 3 files changed, 32 insertions(+), 14 deletions(-) diff --git a/src/dump.c b/src/dump.c index 0daad95c03b5c..44ed6b0604479 100644 --- a/src/dump.c +++ b/src/dump.c @@ -348,9 +348,10 @@ static void jl_serialize_module(jl_serializer_state *s, jl_module_t *m) write_int8(s->s, 0); jl_serialize_value(s, m->parent); void **table = m->bindings.table; - for (i = 1; i < m->bindings.size; i += 2) { - if (table[i] != HT_NOTFOUND) { - jl_binding_t *b = (jl_binding_t*)table[i]; + for (i = 0; i < m->bindings.size; i += 2) { + if (table[i+1] != HT_NOTFOUND) { + jl_serialize_value(s, (jl_value_t*)table[i]); + jl_binding_t *b = (jl_binding_t*)table[i+1]; jl_serialize_value(s, b->name); jl_value_t *e = b->value; if (!b->constp && e && jl_is_cpointer(e) && jl_unbox_voidpointer(e) != (void*)-1 && jl_unbox_voidpointer(e) != NULL) @@ -1551,12 +1552,12 @@ static jl_value_t *jl_deserialize_value_module(jl_serializer_state *s) JL_GC_DIS jl_gc_wb(m, m->parent); while (1) { - jl_sym_t *name = (jl_sym_t*)jl_deserialize_value(s, NULL); - if (name == NULL) + jl_sym_t *asname = (jl_sym_t*)jl_deserialize_value(s, NULL); + if (asname == NULL) break; - jl_binding_t *b = jl_get_binding_wr(m, name, 1); + jl_binding_t *b = jl_get_binding_wr(m, asname, 1); + b->name = (jl_sym_t*)jl_deserialize_value(s, (jl_value_t**)&b->name); b->value = jl_deserialize_value(s, &b->value); - jl_gc_wb_buf(m, b, sizeof(jl_binding_t)); if (b->value != NULL) jl_gc_wb(m, b->value); b->globalref = jl_deserialize_value(s, &b->globalref); if (b->globalref != NULL) jl_gc_wb(m, b->globalref); diff --git a/src/staticdata.c b/src/staticdata.c index 96af1e8a114c6..625cc6c197309 100644 --- a/src/staticdata.c +++ b/src/staticdata.c @@ -387,9 +387,10 @@ static void jl_serialize_module(jl_serializer_state *s, jl_module_t *m) jl_serialize_value(s, m->parent); size_t i; void **table = m->bindings.table; - for (i = 1; i < m->bindings.size; i += 2) { - if (table[i] != HT_NOTFOUND) { - jl_binding_t *b = (jl_binding_t*)table[i]; + for (i = 0; i < m->bindings.size; i += 2) { + if (table[i+1] != HT_NOTFOUND) { + jl_serialize_value(s, (jl_value_t*)table[i]); + jl_binding_t *b = (jl_binding_t*)table[i+1]; jl_serialize_value(s, b->name); jl_serialize_value(s, b->value); jl_serialize_value(s, b->globalref); @@ -629,9 +630,11 @@ static void jl_write_module(jl_serializer_state *s, uintptr_t item, jl_module_t size_t count = 0; size_t i; void **table = m->bindings.table; - for (i = 1; i < m->bindings.size; i += 2) { - if (table[i] != HT_NOTFOUND) { - jl_binding_t *b = (jl_binding_t*)table[i]; + for (i = 0; i < m->bindings.size; i += 2) { + if (table[i+1] != HT_NOTFOUND) { + jl_binding_t *b = (jl_binding_t*)table[i+1]; + write_pointerfield(s, (jl_value_t*)table[i]); + tot += sizeof(void*); write_gctaggedfield(s, (uintptr_t)BindingRef << RELOC_TAG_OFFSET); tot += sizeof(void*); size_t binding_reloc_offset = ios_pos(s->s); @@ -1383,12 +1386,13 @@ static void jl_reinit_item(jl_value_t *v, int how) JL_GC_DISABLED size_t nbindings = mod->bindings.size; htable_new(&mod->bindings, nbindings); struct binding { + jl_sym_t *asname; uintptr_t tag; jl_binding_t b; } *b; b = (struct binding*)&mod[1]; while (nbindings > 0) { - ptrhash_put(&mod->bindings, (char*)b->b.name, &b->b); + ptrhash_put(&mod->bindings, b->asname, &b->b); b += 1; nbindings -= 1; } diff --git a/test/precompile.jl b/test/precompile.jl index 3358fda58f0e3..22cc2d31db8a0 100644 --- a/test/precompile.jl +++ b/test/precompile.jl @@ -846,3 +846,16 @@ precompile_test_harness("Issue #38312") do load_path pointer_from_objref(eval(Meta.parse(TheType))) === pointer_from_objref((@eval (using Bar38312; Bar38312)).TheType) end + +# issue #39405 +precompile_test_harness("Renamed Imports") do load_path + write(joinpath(load_path, "RenameImports.jl"), + """ + module RenameImports + import Base.Experimental as ex + test() = ex + end + """) + Base.compilecache(Base.PkgId("RenameImports")) + @test (@eval (using RenameImports; RenameImports.test())) isa Module +end From afa7544b10468bd2389097a2b764f275645196bd Mon Sep 17 00:00:00 2001 From: KristofferC Date: Fri, 29 Jan 2021 08:22:55 +0100 Subject: [PATCH 74/78] bump Pkg version --- .../Pkg-9adb32bb8027815dadc266b94201d772ac4c48b1.tar.gz/md5 | 1 + .../Pkg-9adb32bb8027815dadc266b94201d772ac4c48b1.tar.gz/sha512 | 1 + .../Pkg-b4a80144ea271e8f4092e52171d659ccd93f7e89.tar.gz/md5 | 1 - .../Pkg-b4a80144ea271e8f4092e52171d659ccd93f7e89.tar.gz/sha512 | 1 - stdlib/Pkg.version | 2 +- 5 files changed, 3 insertions(+), 3 deletions(-) create mode 100644 deps/checksums/Pkg-9adb32bb8027815dadc266b94201d772ac4c48b1.tar.gz/md5 create mode 100644 deps/checksums/Pkg-9adb32bb8027815dadc266b94201d772ac4c48b1.tar.gz/sha512 delete mode 100644 deps/checksums/Pkg-b4a80144ea271e8f4092e52171d659ccd93f7e89.tar.gz/md5 delete mode 100644 deps/checksums/Pkg-b4a80144ea271e8f4092e52171d659ccd93f7e89.tar.gz/sha512 diff --git a/deps/checksums/Pkg-9adb32bb8027815dadc266b94201d772ac4c48b1.tar.gz/md5 b/deps/checksums/Pkg-9adb32bb8027815dadc266b94201d772ac4c48b1.tar.gz/md5 new file mode 100644 index 0000000000000..773576eef8348 --- /dev/null +++ b/deps/checksums/Pkg-9adb32bb8027815dadc266b94201d772ac4c48b1.tar.gz/md5 @@ -0,0 +1 @@ +85308d0346e6e7c773b5618a088d93e4 diff --git a/deps/checksums/Pkg-9adb32bb8027815dadc266b94201d772ac4c48b1.tar.gz/sha512 b/deps/checksums/Pkg-9adb32bb8027815dadc266b94201d772ac4c48b1.tar.gz/sha512 new file mode 100644 index 0000000000000..d615e3301cd81 --- /dev/null +++ b/deps/checksums/Pkg-9adb32bb8027815dadc266b94201d772ac4c48b1.tar.gz/sha512 @@ -0,0 +1 @@ +16f366f671ad2b7431dcd0cd1ebd2fd87310c3f3048584d063e6c73006466ce0da0a8e72f48c238fbf614f33306e72d217c19160e5bd3892ff3a5263ff99f0bb diff --git a/deps/checksums/Pkg-b4a80144ea271e8f4092e52171d659ccd93f7e89.tar.gz/md5 b/deps/checksums/Pkg-b4a80144ea271e8f4092e52171d659ccd93f7e89.tar.gz/md5 deleted file mode 100644 index 0feaa1a4ff688..0000000000000 --- a/deps/checksums/Pkg-b4a80144ea271e8f4092e52171d659ccd93f7e89.tar.gz/md5 +++ /dev/null @@ -1 +0,0 @@ -cc0b85144aad9c6950f2cbb7a4a27791 diff --git a/deps/checksums/Pkg-b4a80144ea271e8f4092e52171d659ccd93f7e89.tar.gz/sha512 b/deps/checksums/Pkg-b4a80144ea271e8f4092e52171d659ccd93f7e89.tar.gz/sha512 deleted file mode 100644 index 13113adf35a42..0000000000000 --- a/deps/checksums/Pkg-b4a80144ea271e8f4092e52171d659ccd93f7e89.tar.gz/sha512 +++ /dev/null @@ -1 +0,0 @@ -ea15ef6c614ad7a172449b2152147ffce850f5839ccb103d50f5e3a5a4ebba2f72a15533a89e16a4d0715e4019e95f478c8bb17fbb642ff8351094a4d5ad483e diff --git a/stdlib/Pkg.version b/stdlib/Pkg.version index 474bf851378c9..8aaf812e816af 100644 --- a/stdlib/Pkg.version +++ b/stdlib/Pkg.version @@ -1,2 +1,2 @@ PKG_BRANCH = release-1.6 -PKG_SHA1 = b4a80144ea271e8f4092e52171d659ccd93f7e89 +PKG_SHA1 = 9adb32bb8027815dadc266b94201d772ac4c48b1 From 0348505dc57c34cb12ff87a7542ce5c2dfe07e13 Mon Sep 17 00:00:00 2001 From: Jameson Nash Date: Wed, 27 Jan 2021 17:13:57 -0500 Subject: [PATCH 75/78] implement with fewer afoldl methods (#39414) With constant-propagation, inference (and Varargs runtime) is likely better able to handle this version now (and it removes the n^2 behavior definitions for semi-low argument counts). Now we also need to force Vararg specialization up to 16 arguments manually, so we do that explicitly (and slightly hack-y). Fixes regression in #39175 (cherry picked from commit 5cd1e3e1f2e6d79bdeeb2b1bfbdbe9081074bd23) --- base/operators.jl | 38 +++++++++++++++++++++++++++++--------- test/operators.jl | 2 ++ 2 files changed, 31 insertions(+), 9 deletions(-) diff --git a/base/operators.jl b/base/operators.jl index c2645910bf039..45690a25a2a04 100644 --- a/base/operators.jl +++ b/base/operators.jl @@ -520,17 +520,37 @@ xor(x::Integer) = x const ⊻ = xor -# foldl for argument lists. expand recursively up to a point, then -# switch to a loop. this allows small cases like `a+b+c+d` to be inlined +# foldl for argument lists. expand fully up to a point, then +# switch to a loop. this allows small cases like `a+b+c+d` to be managed # efficiently, without a major slowdown for `+(x...)` when `x` is big. -afoldl(op,a) = a -afoldl(op,a,b) = op(a,b) -afoldl(op,a,b,c...) = afoldl(op, op(a,b), c...) -function afoldl(op,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,qs...) - y = op(op(op(op(op(op(op(op(op(op(op(op(op(op(op(a,b),c),d),e),f),g),h),i),j),k),l),m),n),o),p) - for x in qs; y = op(y,x); end - y +# n.b.: keep this method count small, so it can be inferred without hitting the +# method count limit in inference +afoldl(op, a) = a +function afoldl(op, a, bs...) + l = length(bs) + i = 0; y = a; l == i && return y + #@nexprs 15 i -> (y = op(y, bs[i]); l == i && return y) + i = 1; y = op(y, bs[i]); l == i && return y + i = 2; y = op(y, bs[i]); l == i && return y + i = 3; y = op(y, bs[i]); l == i && return y + i = 4; y = op(y, bs[i]); l == i && return y + i = 5; y = op(y, bs[i]); l == i && return y + i = 6; y = op(y, bs[i]); l == i && return y + i = 7; y = op(y, bs[i]); l == i && return y + i = 8; y = op(y, bs[i]); l == i && return y + i = 9; y = op(y, bs[i]); l == i && return y + i = 10; y = op(y, bs[i]); l == i && return y + i = 11; y = op(y, bs[i]); l == i && return y + i = 12; y = op(y, bs[i]); l == i && return y + i = 13; y = op(y, bs[i]); l == i && return y + i = 14; y = op(y, bs[i]); l == i && return y + i = 15; y = op(y, bs[i]); l == i && return y + for i in (i + 1):l + y = op(y, bs[i]) + end + return y end +typeof(afoldl).name.mt.max_args = 18 for op in (:+, :*, :&, :|, :xor, :min, :max, :kron) @eval begin diff --git a/test/operators.jl b/test/operators.jl index 08f0b0179c81c..fb884d52cbf98 100644 --- a/test/operators.jl +++ b/test/operators.jl @@ -255,3 +255,5 @@ end a = rand(3, 3) @test transpose(a) === a'ᵀ + +@test [Base.afoldl(+, 1:i...) for i = 1:40] == [i * (i + 1) ÷ 2 for i = 1:40] From 8b7c13310ee40302fe4a479cf6c338c53e84b2bd Mon Sep 17 00:00:00 2001 From: Matt Bauman Date: Thu, 28 Jan 2021 14:51:35 -0500 Subject: [PATCH 76/78] =?UTF-8?q?fix=20#39379,=20use=20first=E2=88=98Linea?= =?UTF-8?q?rIndices=20instead=20of=201=20(#39393)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit (cherry picked from commit 9de107a63a56f9ca922497991a7eb9dcd027dc06) --- base/abstractarray.jl | 2 +- test/offsetarray.jl | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/base/abstractarray.jl b/base/abstractarray.jl index 383814ff38ddc..a880b4eecfd3f 100644 --- a/base/abstractarray.jl +++ b/base/abstractarray.jl @@ -1193,7 +1193,7 @@ function _getindex(::IndexLinear, A::AbstractArray, I::Vararg{Int,M}) where M end _to_linear_index(A::AbstractArray, i::Integer) = i _to_linear_index(A::AbstractVector, i::Integer, I::Integer...) = i -_to_linear_index(A::AbstractArray) = 1 +_to_linear_index(A::AbstractArray) = first(LinearIndices(A)) _to_linear_index(A::AbstractArray, I::Integer...) = (@_inline_meta; _sub2ind(A, I...)) ## IndexCartesian Scalar indexing: Canonical method is full dimensionality of Ints diff --git a/test/offsetarray.jl b/test/offsetarray.jl index bb0b4b13b8da4..07f2e12999f90 100644 --- a/test/offsetarray.jl +++ b/test/offsetarray.jl @@ -715,6 +715,15 @@ end @test axes(S) == (OffsetArrays.IdOffsetRange(0:1), Base.OneTo(2), OffsetArrays.IdOffsetRange(2:5)) end +@testset "Zero-index indexing" begin + @test OffsetArray([6], 2:2)[] == 6 + @test OffsetArray(fill(6, 1, 1), 2:2, 3:3)[] == 6 + @test OffsetArray(fill(6))[] == 6 + @test_throws BoundsError OffsetArray([6,7], 2:3)[] + @test_throws BoundsError OffsetArray([6 7], 2:2, 2:3)[] + @test_throws BoundsError OffsetArray([], 2:1)[] +end + @testset "IdentityUnitRange indexing" begin a = OffsetVector(3:4, 2:3) ax = IdentityUnitRange(2:3) From 4aaeaf727b92eb255edc8f2def6065503b8cb00e Mon Sep 17 00:00:00 2001 From: DilumAluthgeBot <43731525+DilumAluthgeBot@users.noreply.github.com> Date: Fri, 29 Jan 2021 07:17:54 +0000 Subject: [PATCH 77/78] [automated] Bump the Downloads stdlib from 9d841d9 to 4e55241 (#39445) Co-authored-by: Dilum Aluthge (cherry picked from commit f0e8ee6281372c91c0cb08bae0435f5529a800a8) --- .../md5 | 1 + .../sha512 | 1 + stdlib/Downloads.version | 2 +- 3 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 deps/checksums/Downloads-4e55241413c95551c54fc5c9bfdf5f48cb02fc4c.tar.gz/md5 create mode 100644 deps/checksums/Downloads-4e55241413c95551c54fc5c9bfdf5f48cb02fc4c.tar.gz/sha512 diff --git a/deps/checksums/Downloads-4e55241413c95551c54fc5c9bfdf5f48cb02fc4c.tar.gz/md5 b/deps/checksums/Downloads-4e55241413c95551c54fc5c9bfdf5f48cb02fc4c.tar.gz/md5 new file mode 100644 index 0000000000000..fe7ca5582969c --- /dev/null +++ b/deps/checksums/Downloads-4e55241413c95551c54fc5c9bfdf5f48cb02fc4c.tar.gz/md5 @@ -0,0 +1 @@ +7e7a92138a053f4f65265821714d0919 diff --git a/deps/checksums/Downloads-4e55241413c95551c54fc5c9bfdf5f48cb02fc4c.tar.gz/sha512 b/deps/checksums/Downloads-4e55241413c95551c54fc5c9bfdf5f48cb02fc4c.tar.gz/sha512 new file mode 100644 index 0000000000000..e16064534e7ef --- /dev/null +++ b/deps/checksums/Downloads-4e55241413c95551c54fc5c9bfdf5f48cb02fc4c.tar.gz/sha512 @@ -0,0 +1 @@ +31628f766030e5ab46de78d4da458944f37fbe460a60a9f8969a9eab6be105373f7a57230e70b22ac66a72a85a46b0f7e215d084f9e5141b215a5271b26c6162 diff --git a/stdlib/Downloads.version b/stdlib/Downloads.version index 1435d8d4e655e..b6dd897b63dd3 100644 --- a/stdlib/Downloads.version +++ b/stdlib/Downloads.version @@ -1,2 +1,2 @@ DOWNLOADS_BRANCH = master -DOWNLOADS_SHA1 = a6e4926ca3e9cdb72487026c0b57394e71a68a07 +DOWNLOADS_SHA1 = 4e55241413c95551c54fc5c9bfdf5f48cb02fc4c From 0e90f6c210c08a9b64593fefb8cb8da933016068 Mon Sep 17 00:00:00 2001 From: Jameson Nash Date: Fri, 29 Jan 2021 02:33:07 -0500 Subject: [PATCH 78/78] remove bad method specialization from cache (#39429) This was inserting a method with signature [Int, Int], rather than Tuple{typeof(+), Int, Int}. Fix that and add a test for it so it doesn't happen again. (cherry picked from commit b9f8b8b864717bf766ef08da57642fc42a30fb30) --- base/Base.jl | 61 ++++++++++++++++++++++++++-------------------------- src/gf.c | 4 +++- 2 files changed, 33 insertions(+), 32 deletions(-) diff --git a/base/Base.jl b/base/Base.jl index 878448c3e3964..d1a549f897d4f 100644 --- a/base/Base.jl +++ b/base/Base.jl @@ -394,37 +394,36 @@ in_sysimage(pkgid::PkgId) = pkgid in _sysimage_modules # Precompiles for Revise # TODO: move these to contrib/generate_precompile.jl # The problem is they don't work there -let m = which(+, (Int, Int)) - while true # defeat interpreter heuristic to force compilation - delete!(push!(Set{Method}(), m), m) - copy(Core.Compiler.retrieve_code_info(Core.Compiler.specialize_method(m, [Int, Int], Core.svec()))) - - empty!(Set()) - push!(push!(Set{Union{GlobalRef,Symbol}}(), :two), GlobalRef(Base, :two)) - (setindex!(Dict{String,Base.PkgId}(), Base.PkgId(Base), "file.jl"))["file.jl"] - (setindex!(Dict{Symbol,Vector{Int}}(), [1], :two))[:two] - (setindex!(Dict{Base.PkgId,String}(), "file.jl", Base.PkgId(Base)))[Base.PkgId(Base)] - (setindex!(Dict{Union{GlobalRef,Symbol}, Vector{Int}}(), [1], :two))[:two] - (setindex!(IdDict{Type, Union{Missing, Vector{Tuple{LineNumberNode, Expr}}}}(), missing, Int))[Int] - Dict{Symbol, Union{Nothing, Bool, Symbol}}(:one => false)[:one] - Dict(Base => [:(1+1)])[Base] - Dict(:one => [1])[:one] - Dict("abc" => Set())["abc"] - pushfirst!([], sum) - get(Base.pkgorigins, Base.PkgId(Base), nothing) - sort!([1,2,3]) - unique!([1,2,3]) - cumsum([1,2,3]) - append!(Int[], BitSet()) - isempty(BitSet()) - delete!(BitSet([1,2]), 3) - deleteat!(Int32[1,2,3], [1,3]) - deleteat!(Any[1,2,3], [1,3]) - Core.svec(1, 2) == Core.svec(3, 4) - any(t->t[1].line > 1, [(LineNumberNode(2,:none), :(1+1))]) - - break # end defeat interpreter heuristic - end +for match = _methods(+, (Int, Int), -1, get_world_counter()) + m = match.method + delete!(push!(Set{Method}(), m), m) + copy(Core.Compiler.retrieve_code_info(Core.Compiler.specialize_method(match))) + + empty!(Set()) + push!(push!(Set{Union{GlobalRef,Symbol}}(), :two), GlobalRef(Base, :two)) + (setindex!(Dict{String,Base.PkgId}(), Base.PkgId(Base), "file.jl"))["file.jl"] + (setindex!(Dict{Symbol,Vector{Int}}(), [1], :two))[:two] + (setindex!(Dict{Base.PkgId,String}(), "file.jl", Base.PkgId(Base)))[Base.PkgId(Base)] + (setindex!(Dict{Union{GlobalRef,Symbol}, Vector{Int}}(), [1], :two))[:two] + (setindex!(IdDict{Type, Union{Missing, Vector{Tuple{LineNumberNode, Expr}}}}(), missing, Int))[Int] + Dict{Symbol, Union{Nothing, Bool, Symbol}}(:one => false)[:one] + Dict(Base => [:(1+1)])[Base] + Dict(:one => [1])[:one] + Dict("abc" => Set())["abc"] + pushfirst!([], sum) + get(Base.pkgorigins, Base.PkgId(Base), nothing) + sort!([1,2,3]) + unique!([1,2,3]) + cumsum([1,2,3]) + append!(Int[], BitSet()) + isempty(BitSet()) + delete!(BitSet([1,2]), 3) + deleteat!(Int32[1,2,3], [1,3]) + deleteat!(Any[1,2,3], [1,3]) + Core.svec(1, 2) == Core.svec(3, 4) + any(t->t[1].line > 1, [(LineNumberNode(2,:none), :(1+1))]) + + break # only actually need to do this once end if is_primary_base_module diff --git a/src/gf.c b/src/gf.c index 9e37d1c518954..4b07e35e2edba 100644 --- a/src/gf.c +++ b/src/gf.c @@ -104,7 +104,9 @@ static int speccache_eq(size_t idx, const void *ty, jl_svec_t *data, uint_t hv) // get or create the MethodInstance for a specialization JL_DLLEXPORT jl_method_instance_t *jl_specializations_get_linfo(jl_method_t *m JL_PROPAGATES_ROOT, jl_value_t *type, jl_svec_t *sparams) { - uint_t hv = ((jl_datatype_t*)(jl_is_unionall(type) ? jl_unwrap_unionall(type) : type))->hash; + jl_value_t *ut = jl_is_unionall(type) ? jl_unwrap_unionall(type) : type; + JL_TYPECHK(specializations, datatype, ut); + uint_t hv = ((jl_datatype_t*)ut)->hash; for (int locked = 0; ; locked++) { jl_array_t *speckeyset = jl_atomic_load_acquire(&m->speckeyset); jl_svec_t *specializations = jl_atomic_load_acquire(&m->specializations);