Skip to content

Commit

Permalink
[ARM] Add use-misched feature, to enable the MachineScheduler.
Browse files Browse the repository at this point in the history
Summary:
This change makes it easier to experiment with the MachineScheduler in
the ARM backend and also makes it very explicit which CPUs use the
MachineScheduler (currently only swift and cyclone).



Reviewers: MatzeB, t.p.northover, javed.absar

Reviewed By: MatzeB

Subscribers: aemerson, kristof.beyls, llvm-commits

Differential Revision: https://reviews.llvm.org/D35935

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309316 91177308-0d34-0410-b5e6-96231b3b80d8
  • Loading branch information
fhahn committed Jul 27, 2017
1 parent 9cb09d5 commit c080f03
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 8 deletions.
7 changes: 6 additions & 1 deletion lib/Target/ARM/ARM.td
Original file line number Diff line number Diff line change
Expand Up @@ -312,6 +312,9 @@ def FeatureNoNegativeImmediates
"equivalent when the immediate does "
"not fit in the encoding.">;

// Use the MachineScheduler for instruction scheduling for the subtarget.
def FeatureUseMISched: SubtargetFeature<"use-misched", "UseMISched", "true",
"Use the MachineScheduler">;

//===----------------------------------------------------------------------===//
// ARM architecture class
Expand Down Expand Up @@ -791,7 +794,8 @@ def : ProcessorModel<"swift", SwiftModel, [ARMv7a, ProcSwift,
FeatureSlowOddRegister,
FeatureSlowLoadDSubreg,
FeatureSlowVGETLNi32,
FeatureSlowVDUP32]>;
FeatureSlowVDUP32,
FeatureUseMISched]>;

def : ProcessorModel<"cortex-r4", CortexA8Model, [ARMv7r, ProcR4,
FeatureHasRetAddrStack,
Expand Down Expand Up @@ -915,6 +919,7 @@ def : ProcessorModel<"cyclone", SwiftModel, [ARMv8a, ProcSwift,
FeatureAvoidMOVsShOp,
FeatureHasSlowFPVMLx,
FeatureCrypto,
FeatureUseMISched,
FeatureZCZeroing]>;

def : ProcNoItin<"exynos-m1", [ARMv8a, ProcExynosM1,
Expand Down
13 changes: 6 additions & 7 deletions lib/Target/ARM/ARMSubtarget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -396,17 +396,16 @@ bool ARMSubtarget::hasSinCos() const {
}

bool ARMSubtarget::enableMachineScheduler() const {
// Enable the MachineScheduler before register allocation for out-of-order
// architectures where we do not use the PostRA scheduler anymore (for now
// restricted to swift).
return getSchedModel().isOutOfOrder() && isSwift();
// Enable the MachineScheduler before register allocation for subtargets
// with the use-misched feature.
return useMachineScheduler();
}

// This overrides the PostRAScheduler bit in the SchedModel for any CPU.
bool ARMSubtarget::enablePostRAScheduler() const {
// No need for PostRA scheduling on out of order CPUs (for now restricted to
// swift).
if (getSchedModel().isOutOfOrder() && isSwift())
// No need for PostRA scheduling on subtargets where we use the
// MachineScheduler.
if (useMachineScheduler())
return false;
return (!isThumb() || hasThumb2());
}
Expand Down
4 changes: 4 additions & 0 deletions lib/Target/ARM/ARMSubtarget.h
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,9 @@ class ARMSubtarget : public ARMGenSubtargetInfo {
/// UseSoftFloat - True if we're using software floating point features.
bool UseSoftFloat = false;

/// UseMISched - True if MachineScheduler should be used for this subtarget.
bool UseMISched = false;

/// HasThumb2 - True if Thumb2 instructions are supported.
bool HasThumb2 = false;

Expand Down Expand Up @@ -645,6 +648,7 @@ class ARMSubtarget : public ARMGenSubtargetInfo {
bool isROPI() const;
bool isRWPI() const;

bool useMachineScheduler() const { return UseMISched; }
bool useSoftFloat() const { return UseSoftFloat; }
bool isThumb() const { return InThumbMode; }
bool isThumb1Only() const { return InThumbMode && !HasThumb2; }
Expand Down

0 comments on commit c080f03

Please sign in to comment.