diff --git a/llvm/lib/Target/RISCV/RISCVProcessors.td b/llvm/lib/Target/RISCV/RISCVProcessors.td index 32f4ab607a34c..64d15a78f2508 100644 --- a/llvm/lib/Target/RISCV/RISCVProcessors.td +++ b/llvm/lib/Target/RISCV/RISCVProcessors.td @@ -86,7 +86,8 @@ class RISCVTuneProcessorModel f = []> : ProcessorModel; -defvar GenericTuneFeatures = [TuneOptimizedNF2SegmentLoadStore]; +defvar GenericTuneFeatures = [TuneOptimizedNF2SegmentLoadStore, + TuneNoDefaultUnroll]; def GENERIC_RV32 : RISCVProcessorModel<"generic-rv32", NoSchedModel, diff --git a/llvm/lib/Target/RISCV/RISCVTargetTransformInfo.cpp b/llvm/lib/Target/RISCV/RISCVTargetTransformInfo.cpp index 0093c92ea5ef0..51029a3592d64 100644 --- a/llvm/lib/Target/RISCV/RISCVTargetTransformInfo.cpp +++ b/llvm/lib/Target/RISCV/RISCVTargetTransformInfo.cpp @@ -2652,6 +2652,10 @@ void RISCVTTIImpl::getUnrollingPreferences( // taken cost of the backedge. if (Cost < 12) UP.Force = true; + + // Set a lower runtime unrolling count for in-order models. + if (!ST->getSchedModel().isOutOfOrder()) + UP.DefaultUnrollRuntimeCount = 4; } void RISCVTTIImpl::getPeelingPreferences(Loop *L, ScalarEvolution &SE,