mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-25 03:30:37 +00:00
[InstCombine] Canonicalize single element array store
Use the element type instead of the aggregate type. Differential Revision: http://reviews.llvm.org/D9591 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@236969 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
3101b1a432
commit
c88eae46da
@ -880,6 +880,15 @@ static bool unpackStoreToAggregate(InstCombiner &IC, StoreInst &SI) {
|
||||
}
|
||||
}
|
||||
|
||||
if (auto *AT = dyn_cast<ArrayType>(T)) {
|
||||
// If the array only have one element, we unpack.
|
||||
if (AT->getNumElements() == 1) {
|
||||
V = IC.Builder->CreateExtractValue(V, 0);
|
||||
combineStoreToNewValue(IC, SI, V);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -32,6 +32,26 @@ body:
|
||||
ret void
|
||||
}
|
||||
|
||||
define void @storeArrayOfA() {
|
||||
body:
|
||||
%0 = tail call i8* @allocmemory(i64 32)
|
||||
%1 = bitcast i8* %0 to [1 x %A]*
|
||||
; CHECK-LABEL: storeStructOfA
|
||||
; CHECK: store %A__vtbl* @A__vtblZ
|
||||
store [1 x %A] [%A { %A__vtbl* @A__vtblZ }], [1 x %A]* %1, align 8
|
||||
ret void
|
||||
}
|
||||
|
||||
define void @storeStructOfArrayOfA() {
|
||||
body:
|
||||
%0 = tail call i8* @allocmemory(i64 32)
|
||||
%1 = bitcast i8* %0 to { [1 x %A] }*
|
||||
; CHECK-LABEL: storeStructOfArrayOfA
|
||||
; CHECK: store %A__vtbl* @A__vtblZ
|
||||
store { [1 x %A] } { [1 x %A] [%A { %A__vtbl* @A__vtblZ }] }, { [1 x %A] }* %1, align 8
|
||||
ret void
|
||||
}
|
||||
|
||||
define %A @loadA() {
|
||||
body:
|
||||
%0 = tail call i8* @allocmemory(i64 32)
|
||||
|
Loading…
x
Reference in New Issue
Block a user