mirror of
https://github.com/RPCSX/llvm.git
synced 2025-03-01 01:15:55 +00:00
[InstCombine] Don't unpack arrays that are too large (part 2).
This is similar to r283599, but for store instructions. Thanks to David for pointing out! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@283612 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
4be86fdee6
commit
6d57e1cce1
@ -1095,6 +1095,13 @@ static bool unpackStoreToAggregate(InstCombiner &IC, StoreInst &SI) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// Bail out if the array is too large. Ideally we would like to optimize
|
||||
// arrays of arbitrary size but this has a terrible impact on compile time.
|
||||
// The threshold here is chosen arbitrarily, maybe needs a little bit of
|
||||
// tuning.
|
||||
if (NumElements > 1024)
|
||||
return false;
|
||||
|
||||
const DataLayout &DL = IC.getDataLayout();
|
||||
auto EltSize = DL.getTypeAllocSize(AT->getElementType());
|
||||
auto Align = SI.getAlignment();
|
||||
|
@ -49,6 +49,15 @@ define void @storeArrayOfA([1 x %A]* %aa.ptr) {
|
||||
ret void
|
||||
}
|
||||
|
||||
define void @storeLargeArrayOfA([2000 x %A]* %aa.ptr) {
|
||||
; CHECK-LABEL: storeLargeArrayOfA
|
||||
; CHECK-NEXT: store [2000 x %A]
|
||||
; CHECK-NEXT: ret void
|
||||
%i1 = insertvalue [2000 x %A] undef, %A { %A__vtbl* @A__vtblZ }, 1
|
||||
store [2000 x %A] %i1, [2000 x %A]* %aa.ptr, align 8
|
||||
ret void
|
||||
}
|
||||
|
||||
define void @storeStructOfArrayOfA({ [1 x %A] }* %saa.ptr) {
|
||||
; CHECK-LABEL: storeStructOfArrayOfA
|
||||
; CHECK-NEXT: [[GEP:%[a-z0-9\.]+]] = getelementptr inbounds { [1 x %A] }, { [1 x %A] }* %saa.ptr, i64 0, i32 0, i64 0, i32 0
|
||||
|
Loading…
x
Reference in New Issue
Block a user