forked from OSchip/llvm-project
[PPC] Give unaligned memory access lower cost on processor that supports it
Newer ppc supports unaligned memory access, it reduces the cost of unaligned memory access significantly. This patch handles this case in PPCTTIImpl::getMemoryOpCost. This patch fixes pr31492. Differential Revision: https://reviews.llvm.org/D28630 llvm-svn: 292680
This commit is contained in:
parent
f39ce99474
commit
a5c6ed5a5c
|
@ -401,6 +401,10 @@ int PPCTTIImpl::getMemoryOpCost(unsigned Opcode, Type *Src, unsigned Alignment,
|
|||
if (IsVSXType || (ST->hasVSX() && IsAltivecType))
|
||||
return Cost;
|
||||
|
||||
// Newer PPC supports unaligned memory access.
|
||||
if (TLI->allowsMisalignedMemoryAccesses(LT.second, 0))
|
||||
return Cost;
|
||||
|
||||
// PPC in general does not support unaligned loads and stores. They'll need
|
||||
// to be decomposed based on the alignment factor.
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
; RUN: opt < %s -cost-model -analyze -mtriple=powerpc64-unknown-linux-gnu -mcpu=g5 | FileCheck %s
|
||||
; RUN: opt < %s -cost-model -analyze -mtriple=powerpc64-unknown-linux-gnu -mcpu=g5 -disable-ppc-unaligned | FileCheck %s
|
||||
target datalayout = "E-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-f128:128:128-v128:128:128-n32:64"
|
||||
target triple = "powerpc64-unknown-linux-gnu"
|
||||
|
||||
|
|
|
@ -0,0 +1,26 @@
|
|||
; RUN: opt < %s -cost-model -analyze -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr8 -mattr=+vsx | FileCheck %s
|
||||
target datalayout = "E-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-f128:128:128-v128:128:128-n32:64"
|
||||
target triple = "powerpc64-unknown-linux-gnu"
|
||||
|
||||
define i32 @test(i32 %arg) {
|
||||
|
||||
; CHECK: cost of 1 {{.*}} load
|
||||
load i8, i8* undef, align 1
|
||||
; CHECK: cost of 1 {{.*}} load
|
||||
load i16, i16* undef, align 1
|
||||
; CHECK: cost of 1 {{.*}} load
|
||||
load i32, i32* undef, align 1
|
||||
; CHECK: cost of 1 {{.*}} load
|
||||
load i64, i64* undef, align 1
|
||||
|
||||
; CHECK: cost of 1 {{.*}} store
|
||||
store i8 undef, i8* undef, align 1
|
||||
; CHECK: cost of 1 {{.*}} store
|
||||
store i16 undef, i16* undef, align 1
|
||||
; CHECK: cost of 1 {{.*}} store
|
||||
store i32 undef, i32* undef, align 1
|
||||
; CHECK: cost of 1 {{.*}} store
|
||||
store i64 undef, i64* undef, align 1
|
||||
|
||||
ret i32 undef
|
||||
}
|
Loading…
Reference in New Issue