[PGO][PGSO] Let unroll hints take precedence over PGSO.

Differential Revision: https://reviews.llvm.org/D94199
This commit is contained in:
Hiroshi Yamauchi 2021-01-06 14:42:26 -08:00
parent d0154456e6
commit cf5415c727
2 changed files with 38 additions and 2 deletions

View File

@ -218,8 +218,10 @@ TargetTransformInfo::UnrollingPreferences llvm::gatherUnrollingPreferences(
// Apply size attributes
bool OptForSize = L->getHeader()->getParent()->hasOptSize() ||
llvm::shouldOptimizeForSize(L->getHeader(), PSI, BFI,
PGSOQueryType::IRPass);
// Let unroll hints / pragmas take precedence over PGSO.
(hasUnrollTransformation(L) != TM_ForcedByUser &&
llvm::shouldOptimizeForSize(L->getHeader(), PSI, BFI,
PGSOQueryType::IRPass));
if (OptForSize) {
UP.Threshold = UP.OptSizeThreshold;
UP.PartialThreshold = UP.PartialOptSizeThreshold;

View File

@ -158,6 +158,38 @@ for.end: ; preds = %for.body
; NPGSO-NOT: phi
; NPGSO-NOT: icmp
;///////////////////// TEST 6 //////////////////////////////
; This test tests that unroll hints take precedence over PGSO and that this loop
; gets unrolled even though it's cold.
define i32 @Test6() !prof !14 {
entry:
br label %for.body
for.body: ; preds = %for.body, %entry
%i.05 = phi i32 [ 0, %entry ], [ %inc, %for.body ]
%arrayidx = getelementptr inbounds [24 x i32], [24 x i32]* @tab, i32 0, i32 %i.05
store i32 %i.05, i32* %arrayidx, align 4
%inc = add nuw nsw i32 %i.05, 1
%exitcond = icmp eq i32 %inc, 24
br i1 %exitcond, label %for.end, label %for.body, !llvm.loop !15
for.end: ; preds = %for.body
ret i32 42
}
; PGSO-LABEL: @Test6
; PGSO: store
; PGSO: store
; PGSO: store
; PGSO: store
; NPGSO-LABEL: @Test6
; NPGSO: store
; NPGSO: store
; NPGSO: store
; NPGSO: store
!llvm.module.flags = !{!0}
!0 = !{i32 1, !"ProfileSummary", !1}
!1 = !{!2, !3, !4, !5, !6, !7, !8, !9}
@ -174,3 +206,5 @@ for.end: ; preds = %for.body
!12 = !{i32 999000, i64 100, i32 1}
!13 = !{i32 999999, i64 1, i32 2}
!14 = !{!"function_entry_count", i64 0}
!15 = !{!15, !16}
!16 = !{!"llvm.loop.unroll.count", i32 4}