[AArch64] Enable partial & runtime unrolling on cortex-a57.
authorKevin Qin <Kevin.Qin@arm.com>
Thu, 9 Oct 2014 10:13:27 +0000 (10:13 +0000)
committerKevin Qin <Kevin.Qin@arm.com>
Thu, 9 Oct 2014 10:13:27 +0000 (10:13 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@219401 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/AArch64/AArch64SchedA57.td
lib/Target/AArch64/AArch64TargetTransformInfo.cpp

index 4066db084d10bdc104f6160336b70ea737d1b488..3ec41578a94ce3f5feb7d95493424a550caee7df 100644 (file)
@@ -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;
 }
 
 //===----------------------------------------------------------------------===//
index dbdf199a25cc4fb452adc95eee566f87a052530b..b1a2914236babcdfc55e6addd6dcee31938f7bdb 100644 (file)
@@ -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::getMaxInterleaveFactor() const {
     return 4;
   return 2;
 }
+
+void AArch64TTI::getUnrollingPreferences(const Function *F, Loop *L,
+                                         UnrollingPreferences &UP) const {
+  // Disable partial & runtime unrolling on -Os.
+  UP.PartialOptSizeThreshold = 0;
+}