diff options
Diffstat (limited to 'lib/Target/ARM/ARMSubtarget.cpp')
| -rw-r--r-- | lib/Target/ARM/ARMSubtarget.cpp | 17 | 
1 files changed, 13 insertions, 4 deletions
diff --git a/lib/Target/ARM/ARMSubtarget.cpp b/lib/Target/ARM/ARMSubtarget.cpp index f42cbbda1b71e..b1d0761e32315 100644 --- a/lib/Target/ARM/ARMSubtarget.cpp +++ b/lib/Target/ARM/ARMSubtarget.cpp @@ -188,8 +188,10 @@ void ARMSubtarget::initSubtargetFeatures(StringRef CPU, StringRef FS) {    assert(hasV6T2Ops() || !hasThumb2());    // Execute only support requires movt support -  if (genExecuteOnly()) -    assert(hasV8MBaselineOps() && !NoMovt && "Cannot generate execute-only code for this target"); +  if (genExecuteOnly()) { +    NoMovt = false; +    assert(hasV8MBaselineOps() && "Cannot generate execute-only code for this target"); +  }    // Keep a pointer to static instruction cost data for the specified CPU.    SchedModel = getSchedModelForCPU(CPUString); @@ -287,7 +289,13 @@ void ARMSubtarget::initSubtargetFeatures(StringRef CPU, StringRef FS) {    case CortexR7:    case CortexM3:    case CortexR52: -  case ExynosM1: +    break; +  case Exynos: +    LdStMultipleTiming = SingleIssuePlusExtras; +    MaxInterleaveFactor = 4; +    if (!isThumb()) +      PrefLoopAlignment = 3; +    break;    case Kryo:      break;    case Krait: @@ -370,7 +378,8 @@ bool ARMSubtarget::useStride4VFPs(const MachineFunction &MF) const {    // For general targets, the prologue can grow when VFPs are allocated with    // stride 4 (more vpush instructions). But WatchOS uses a compact unwind    // format which it's more important to get right. -  return isTargetWatchABI() || (isSwift() && !MF.getFunction().optForMinSize()); +  return isTargetWatchABI() || +         (useWideStrideVFP() && !MF.getFunction().optForMinSize());  }  bool ARMSubtarget::useMovt(const MachineFunction &MF) const {  | 
