[llvm] r295506 - [PPC] Give unaligned memory access lower cost on processor that supports it

Guozhi Wei via llvm-commits llvm-commits at lists.llvm.org
Fri Feb 17 14:29:39 PST 2017


Author: carrot
Date: Fri Feb 17 16:29:39 2017
New Revision: 295506

URL: http://llvm.org/viewvc/llvm-project?rev=295506&view=rev
Log:
[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

This is resubmit of r292680, which was reverted by r293092. The internal application failures were actually caused by a source code bug.


Added:
    llvm/trunk/test/Analysis/CostModel/PowerPC/unaligned_ld_st.ll
Modified:
    llvm/trunk/lib/Target/PowerPC/PPCTargetTransformInfo.cpp
    llvm/trunk/test/Analysis/CostModel/PowerPC/load_store.ll

Modified: llvm/trunk/lib/Target/PowerPC/PPCTargetTransformInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/PPCTargetTransformInfo.cpp?rev=295506&r1=295505&r2=295506&view=diff
==============================================================================
--- llvm/trunk/lib/Target/PowerPC/PPCTargetTransformInfo.cpp (original)
+++ llvm/trunk/lib/Target/PowerPC/PPCTargetTransformInfo.cpp Fri Feb 17 16:29:39 2017
@@ -401,6 +401,10 @@ int PPCTTIImpl::getMemoryOpCost(unsigned
   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.
 

Modified: llvm/trunk/test/Analysis/CostModel/PowerPC/load_store.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/CostModel/PowerPC/load_store.ll?rev=295506&r1=295505&r2=295506&view=diff
==============================================================================
--- llvm/trunk/test/Analysis/CostModel/PowerPC/load_store.ll (original)
+++ llvm/trunk/test/Analysis/CostModel/PowerPC/load_store.ll Fri Feb 17 16:29:39 2017
@@ -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"
 

Added: llvm/trunk/test/Analysis/CostModel/PowerPC/unaligned_ld_st.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/CostModel/PowerPC/unaligned_ld_st.ll?rev=295506&view=auto
==============================================================================
--- llvm/trunk/test/Analysis/CostModel/PowerPC/unaligned_ld_st.ll (added)
+++ llvm/trunk/test/Analysis/CostModel/PowerPC/unaligned_ld_st.ll Fri Feb 17 16:29:39 2017
@@ -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
+}




More information about the llvm-commits mailing list