mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-15 23:31:37 +00:00
Don't assert in BasicTTI::getMemoryOpCost for non-simple types
BasicTTI::getMemoryOpCost must explicitly check for non-simple types; setting AllowUnknown=true with TLI->getSimpleValueType is not sufficient because, for example, non-power-of-two vector types return non-simple EVTs (not MVT::Other). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@206150 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
17f9c2e35b
commit
1aee811d71
@ -424,12 +424,14 @@ unsigned BasicTTI::getMemoryOpCost(unsigned Opcode, Type *Src,
|
||||
// This is a vector load that legalizes to a larger type than the vector
|
||||
// itself. Unless the corresponding extending load or truncating store is
|
||||
// legal, then this will scalarize.
|
||||
TargetLowering::LegalizeAction LA;
|
||||
MVT MemVT = getTLI()->getSimpleValueType(Src, true);
|
||||
if (Opcode == Instruction::Store)
|
||||
LA = getTLI()->getTruncStoreAction(LT.second, MemVT);
|
||||
else
|
||||
LA = getTLI()->getLoadExtAction(ISD::EXTLOAD, MemVT);
|
||||
TargetLowering::LegalizeAction LA = TargetLowering::Expand;
|
||||
EVT MemVT = getTLI()->getValueType(Src, true);
|
||||
if (MemVT.isSimple() && MemVT != MVT::Other) {
|
||||
if (Opcode == Instruction::Store)
|
||||
LA = getTLI()->getTruncStoreAction(LT.second, MemVT.getSimpleVT());
|
||||
else
|
||||
LA = getTLI()->getLoadExtAction(ISD::EXTLOAD, MemVT.getSimpleVT());
|
||||
}
|
||||
|
||||
if (LA != TargetLowering::Legal && LA != TargetLowering::Custom) {
|
||||
// This is a vector load/store for some illegal type that is scalarized.
|
||||
|
@ -37,6 +37,9 @@ define i32 @loads(i32 %arg) {
|
||||
; CHECK: cost of 1 {{.*}} load
|
||||
load <4 x i32>* undef, align 4
|
||||
|
||||
; CHECK: cost of 46 {{.*}} load
|
||||
load <3 x float>* undef, align 1
|
||||
|
||||
ret i32 undef
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user