[llvm] r219401 - [AArch64] Enable partial & runtime unrolling on cortex-a57.

Kevin Qin Kevin.Qin at arm.com
Thu Oct 9 03:13:28 PDT 2014


Author: kevinqin
Date: Thu Oct  9 05:13:27 2014
New Revision: 219401

URL: http://llvm.org/viewvc/llvm-project?rev=219401&view=rev
Log:
[AArch64] Enable partial & runtime unrolling on cortex-a57.

Modified:
    llvm/trunk/lib/Target/AArch64/AArch64SchedA57.td
    llvm/trunk/lib/Target/AArch64/AArch64TargetTransformInfo.cpp

Modified: llvm/trunk/lib/Target/AArch64/AArch64SchedA57.td
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AArch64/AArch64SchedA57.td?rev=219401&r1=219400&r2=219401&view=diff
==============================================================================
--- llvm/trunk/lib/Target/AArch64/AArch64SchedA57.td (original)
+++ llvm/trunk/lib/Target/AArch64/AArch64SchedA57.td Thu Oct  9 05:13:27 2014
@@ -26,6 +26,10 @@ def CortexA57Model : SchedMachineModel {
   let MicroOpBufferSize = 128; // 128 micro-op re-order buffer
   let LoadLatency       =   4; // Optimistic load latency
   let MispredictPenalty =  14; // Fetch + Decode/Rename/Dispatch + Branch
+
+  // Enable partial & runtime unrolling. The magic number is chosen based on
+  // experiments and benchmarking data.
+  let LoopMicroOpBufferSize = 16;
 }
 
 //===----------------------------------------------------------------------===//

Modified: llvm/trunk/lib/Target/AArch64/AArch64TargetTransformInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AArch64/AArch64TargetTransformInfo.cpp?rev=219401&r1=219400&r2=219401&view=diff
==============================================================================
--- llvm/trunk/lib/Target/AArch64/AArch64TargetTransformInfo.cpp (original)
+++ llvm/trunk/lib/Target/AArch64/AArch64TargetTransformInfo.cpp Thu Oct  9 05:13:27 2014
@@ -128,6 +128,10 @@ public:
 
   unsigned getCostOfKeepingLiveOverCall(ArrayRef<Type*> Tys) const override;
 
+  void getUnrollingPreferences(const Function *F, Loop *L,
+                               UnrollingPreferences &UP) const override;
+
+
   /// @}
 };
 
@@ -544,3 +548,9 @@ unsigned AArch64TTI::getMaxInterleaveFac
     return 4;
   return 2;
 }
+
+void AArch64TTI::getUnrollingPreferences(const Function *F, Loop *L,
+                                         UnrollingPreferences &UP) const {
+  // Disable partial & runtime unrolling on -Os.
+  UP.PartialOptSizeThreshold = 0;
+}





More information about the llvm-commits mailing list