[PATCH] D40876: AArch64: Fix emergency spillslot being out of reach for large callframes
Matthias Braun via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Dec 6 17:06:25 PST 2017
MatzeB added a comment.
So this works as a testcase, however I wouldn't want to check this in either; as no matter what I do, for huge callframes we always produce a huge number of stores in selectiondag (or fastisel) that take a long time to create and optimize away even when the argument is simply undef...
target triple = "arm64--"
declare void @extfunc([4096 x i64] %p)
define void @func() {
%lvar = alloca i8
%v00 = load volatile i8, i8* %lvar
%v01 = load volatile i8, i8* %lvar
%v02 = load volatile i8, i8* %lvar
%v03 = load volatile i8, i8* %lvar
%v04 = load volatile i8, i8* %lvar
%v05 = load volatile i8, i8* %lvar
%v06 = load volatile i8, i8* %lvar
%v07 = load volatile i8, i8* %lvar
%v08 = load volatile i8, i8* %lvar
%v09 = load volatile i8, i8* %lvar
%v10 = load volatile i8, i8* %lvar
%v11 = load volatile i8, i8* %lvar
%v12 = load volatile i8, i8* %lvar
%v13 = load volatile i8, i8* %lvar
%v14 = load volatile i8, i8* %lvar
%v15 = load volatile i8, i8* %lvar
%v16 = load volatile i8, i8* %lvar
%v17 = load volatile i8, i8* %lvar
%v18 = load volatile i8, i8* %lvar
%v19 = load volatile i8, i8* %lvar
%v20 = load volatile i8, i8* %lvar
%v21 = load volatile i8, i8* %lvar
%v22 = load volatile i8, i8* %lvar
%v23 = load volatile i8, i8* %lvar
%v24 = load volatile i8, i8* %lvar
%v25 = load volatile i8, i8* %lvar
%v26 = load volatile i8, i8* %lvar
%v27 = load volatile i8, i8* %lvar
%v28 = load volatile i8, i8* %lvar
%v29 = load volatile i8, i8* %lvar
%v30 = load volatile i8, i8* %lvar
%v31 = load volatile i8, i8* %lvar
store volatile i8 %v00, i8* %lvar
store volatile i8 %v01, i8* %lvar
store volatile i8 %v02, i8* %lvar
store volatile i8 %v03, i8* %lvar
store volatile i8 %v04, i8* %lvar
store volatile i8 %v05, i8* %lvar
store volatile i8 %v06, i8* %lvar
store volatile i8 %v07, i8* %lvar
store volatile i8 %v08, i8* %lvar
store volatile i8 %v09, i8* %lvar
store volatile i8 %v10, i8* %lvar
store volatile i8 %v11, i8* %lvar
store volatile i8 %v12, i8* %lvar
store volatile i8 %v13, i8* %lvar
store volatile i8 %v14, i8* %lvar
store volatile i8 %v15, i8* %lvar
store volatile i8 %v16, i8* %lvar
store volatile i8 %v17, i8* %lvar
store volatile i8 %v18, i8* %lvar
store volatile i8 %v19, i8* %lvar
store volatile i8 %v20, i8* %lvar
store volatile i8 %v21, i8* %lvar
store volatile i8 %v22, i8* %lvar
store volatile i8 %v23, i8* %lvar
store volatile i8 %v24, i8* %lvar
store volatile i8 %v25, i8* %lvar
store volatile i8 %v26, i8* %lvar
store volatile i8 %v27, i8* %lvar
store volatile i8 %v28, i8* %lvar
store volatile i8 %v29, i8* %lvar
store volatile i8 %v30, i8* %lvar
store volatile i8 %v31, i8* %lvar
call void @extfunc([4096 x i64] undef)
ret void
}
(this takes an embarrassing 50 seconds to run on my machine)
Repository:
rL LLVM
https://reviews.llvm.org/D40876
More information about the llvm-commits
mailing list