In review of bbde6b, I had originally proposed that we support the legacy text format. As review evolved, it bacame clear this had been a bad idea (too much complexity), but in order to let that patch finally move forward, I approved the change with the variant. This change undoes the variant, and updates all the tests to just use the array form.
267 lines
10 KiB
YAML
267 lines
10 KiB
YAML
# NOTE: This test verifies disable/enable instruction hoisting to hot blocks
|
|
# based on profile data
|
|
# RUN: llc -run-pass early-machinelicm -verify-machineinstrs \
|
|
# RUN: -mtriple=powerpc64le-unknown-linux-gnu \
|
|
# RUN: -disable-hoisting-to-hotter-blocks=pgo \
|
|
# RUN: -block-freq-ratio-threshold=100 %s -o - | FileCheck %s \
|
|
# RUN: --check-prefix=CHECK-NO-HOIST
|
|
# RUN: llc -run-pass early-machinelicm -verify-machineinstrs \
|
|
# RUN: -mtriple=powerpc64le-unknown-linux-gnu \
|
|
# RUN: -disable-hoisting-to-hotter-blocks=pgo \
|
|
# RUN: -block-freq-ratio-threshold=100000000 %s -o - | FileCheck %s \
|
|
# RUN: --check-prefix=CHECK-HOIST
|
|
# RUN: llc -run-pass early-machinelicm -verify-machineinstrs \
|
|
# RUN: -mtriple=powerpc64le-unknown-linux-gnu \
|
|
# RUN: -disable-hoisting-to-hotter-blocks=none \
|
|
# RUN: -block-freq-ratio-threshold=100 %s -o - | FileCheck %s \
|
|
# RUN: --check-prefix=CHECK-HOIST
|
|
# Tests for the new pass manager
|
|
# RUN: llc -passes early-machinelicm \
|
|
# RUN: -mtriple=powerpc64le-unknown-linux-gnu \
|
|
# RUN: -disable-hoisting-to-hotter-blocks=pgo \
|
|
# RUN: -block-freq-ratio-threshold=100 %s -o - | FileCheck %s \
|
|
# RUN: --check-prefix=CHECK-NO-HOIST
|
|
# RUN: llc -passes early-machinelicm \
|
|
# RUN: -mtriple=powerpc64le-unknown-linux-gnu \
|
|
# RUN: -disable-hoisting-to-hotter-blocks=pgo \
|
|
# RUN: -block-freq-ratio-threshold=100000000 %s -o - | FileCheck %s \
|
|
# RUN: --check-prefix=CHECK-HOIST
|
|
# RUN: llc -passes early-machinelicm \
|
|
# RUN: -mtriple=powerpc64le-unknown-linux-gnu \
|
|
# RUN: -disable-hoisting-to-hotter-blocks=none \
|
|
# RUN: -block-freq-ratio-threshold=100 %s -o - | FileCheck %s \
|
|
# RUN: --check-prefix=CHECK-HOIST
|
|
--- |
|
|
target datalayout = "e-m:e-i64:64-n32:64"
|
|
target triple = "powerpc64le-unknown-linux-gnu"
|
|
|
|
; Function Attrs: nounwind
|
|
define dso_local void @test(ptr nocapture %fp, i32 signext %Arg, i32 signext %Len, ptr nocapture %Ptr) local_unnamed_addr #0 !prof !29 !section_prefix !30 {
|
|
entry:
|
|
tail call void asm sideeffect "#NOTHING", "~{r2}"() #1, !srcloc !31
|
|
%cmp6 = icmp sgt i32 %Len, 0
|
|
br i1 %cmp6, label %for.body.lr.ph, label %for.cond.cleanup, !prof !32
|
|
|
|
for.body.lr.ph: ; preds = %entry
|
|
%cmp1 = icmp sgt i32 %Arg, 10
|
|
br label %for.body
|
|
|
|
for.cond.cleanup: ; preds = %for.inc, %entry
|
|
ret void
|
|
|
|
for.body: ; preds = %for.inc, %for.body.lr.ph
|
|
%i.07 = phi i32 [ 0, %for.body.lr.ph ], [ %inc, %for.inc ]
|
|
%0 = load i32, ptr %Ptr, align 4, !tbaa !33
|
|
%1 = add i32 %i.07, %0
|
|
store i32 %1, ptr %Ptr, align 4, !tbaa !33
|
|
br i1 %cmp1, label %if.then, label %for.inc, !prof !37
|
|
|
|
if.then: ; preds = %for.body
|
|
tail call void asm sideeffect "#NOTHING", "~{r2}"() #1, !srcloc !31
|
|
tail call void %fp(i32 signext %Arg) #1, !prof !38
|
|
br label %for.inc
|
|
|
|
for.inc: ; preds = %if.then, %for.body
|
|
%inc = add nuw nsw i32 %i.07, 1
|
|
%exitcond = icmp eq i32 %Len, %inc
|
|
br i1 %exitcond, label %for.cond.cleanup, label %for.body, !prof !39
|
|
}
|
|
|
|
; Function Attrs: nounwind
|
|
declare void @llvm.stackprotector(ptr, ptr) #1
|
|
|
|
attributes #0 = { nounwind "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "min-legal-vector-width"="0" "frame-pointer"="none" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="ppc64le" "target-features"="+altivec,+bpermd,+crypto,+direct-move,+extdiv,+htm,+power8-vector,+vsx,-power9-vector" "unsafe-fp-math"="false" "use-soft-float"="false" }
|
|
attributes #1 = { nounwind }
|
|
|
|
!llvm.module.flags = !{!0, !1}
|
|
!llvm.ident = !{!28}
|
|
|
|
!0 = !{i32 1, !"wchar_size", i32 4}
|
|
!1 = !{i32 1, !"ProfileSummary", !2}
|
|
!2 = !{!3, !4, !5, !6, !7, !8, !9, !10}
|
|
!3 = !{!"ProfileFormat", !"InstrProf"}
|
|
!4 = !{!"TotalCount", i64 25405000087}
|
|
!5 = !{!"MaxCount", i64 21000000020}
|
|
!6 = !{!"MaxInternalCount", i64 200000003}
|
|
!7 = !{!"MaxFunctionCount", i64 21000000020}
|
|
!8 = !{!"NumCounts", i64 15}
|
|
!9 = !{!"NumFunctions", i64 7}
|
|
!10 = !{!"DetailedSummary", !11}
|
|
!11 = !{!12, !13, !14, !15, !16, !17, !18, !19, !20, !21, !22, !23, !24, !25, !26, !27}
|
|
!12 = !{i32 10000, i64 21000000020, i32 1}
|
|
!13 = !{i32 100000, i64 21000000020, i32 1}
|
|
!14 = !{i32 200000, i64 21000000020, i32 1}
|
|
!15 = !{i32 300000, i64 21000000020, i32 1}
|
|
!16 = !{i32 400000, i64 21000000020, i32 1}
|
|
!17 = !{i32 500000, i64 21000000020, i32 1}
|
|
!18 = !{i32 600000, i64 21000000020, i32 1}
|
|
!19 = !{i32 700000, i64 21000000020, i32 1}
|
|
!20 = !{i32 800000, i64 21000000020, i32 1}
|
|
!21 = !{i32 900000, i64 4203000000, i32 2}
|
|
!22 = !{i32 950000, i64 4203000000, i32 2}
|
|
!23 = !{i32 990000, i64 4203000000, i32 2}
|
|
!24 = !{i32 999000, i64 200000003, i32 3}
|
|
!25 = !{i32 999900, i64 200000003, i32 3}
|
|
!26 = !{i32 999990, i64 2000000, i32 4}
|
|
!27 = !{i32 999999, i64 2000000, i32 4}
|
|
!28 = !{!"clang version 9.0.0 (git@github.ibm.com:compiler/llvm-project.git 01fc2fc8e690ee427cab149cb0bfd63568bed89b)"}
|
|
!29 = !{!"function_entry_count", i64 200000003}
|
|
!30 = !{!"function_section_prefix", !".hot"}
|
|
!31 = !{i32 65}
|
|
!32 = !{!"branch_weights", i32 -94967292, i32 40000000}
|
|
!33 = !{!34, !34, i64 0}
|
|
!34 = !{!"int", !35, i64 0}
|
|
!35 = !{!"omnipotent char", !36, i64 0}
|
|
!36 = !{!"Simple C/C++ TBAA"}
|
|
!37 = !{!"branch_weights", i32 4, i32 -94967296}
|
|
!38 = !{!"VP", i32 0, i64 20, i64 -3706093650706652785, i64 20}
|
|
!39 = !{!"branch_weights", i32 40000000, i32 -94967292}
|
|
|
|
...
|
|
---
|
|
name: test
|
|
alignment: 4
|
|
exposesReturnsTwice: false
|
|
legalized: false
|
|
regBankSelected: false
|
|
selected: false
|
|
failedISel: false
|
|
tracksRegLiveness: true
|
|
hasWinCFI: false
|
|
registers:
|
|
- { id: 0, class: crbitrc, preferred-register: '' }
|
|
- { id: 1, class: gprc_and_gprc_nor0, preferred-register: '' }
|
|
- { id: 2, class: gprc, preferred-register: '' }
|
|
- { id: 3, class: g8rc, preferred-register: '' }
|
|
- { id: 4, class: g8rc, preferred-register: '' }
|
|
- { id: 5, class: g8rc, preferred-register: '' }
|
|
- { id: 6, class: g8rc_and_g8rc_nox0, preferred-register: '' }
|
|
- { id: 7, class: gprc, preferred-register: '' }
|
|
- { id: 8, class: gprc, preferred-register: '' }
|
|
- { id: 9, class: crrc, preferred-register: '' }
|
|
- { id: 10, class: gprc, preferred-register: '' }
|
|
- { id: 11, class: crrc, preferred-register: '' }
|
|
- { id: 12, class: gprc, preferred-register: '' }
|
|
- { id: 13, class: gprc, preferred-register: '' }
|
|
- { id: 14, class: g8rc, preferred-register: '' }
|
|
- { id: 15, class: g8rc, preferred-register: '' }
|
|
- { id: 16, class: crrc, preferred-register: '' }
|
|
liveins:
|
|
- { reg: '$x3', virtual-reg: '%3' }
|
|
- { reg: '$x4', virtual-reg: '%4' }
|
|
- { reg: '$x5', virtual-reg: '%5' }
|
|
- { reg: '$x6', virtual-reg: '%6' }
|
|
frameInfo:
|
|
isFrameAddressTaken: false
|
|
isReturnAddressTaken: false
|
|
hasStackMap: false
|
|
hasPatchPoint: false
|
|
stackSize: 0
|
|
offsetAdjustment: 0
|
|
maxAlignment: 0
|
|
adjustsStack: false
|
|
hasCalls: true
|
|
stackProtector: ''
|
|
maxCallFrameSize: 4294967295
|
|
cvBytesOfCalleeSavedRegisters: 0
|
|
hasOpaqueSPAdjustment: false
|
|
hasVAStart: false
|
|
hasMustTailInVarArgFunc: false
|
|
localFrameSize: 0
|
|
savePoint: []
|
|
restorePoint: []
|
|
fixedStack: []
|
|
stack: []
|
|
constants: []
|
|
machineFunctionInfo: {}
|
|
body: |
|
|
bb.0.entry:
|
|
successors: %bb.1(0x7ecade30), %bb.2(0x013521d0)
|
|
liveins: $x3, $x4, $x5, $x6
|
|
|
|
%6:g8rc_and_g8rc_nox0 = COPY $x6
|
|
%5:g8rc = COPY $x5
|
|
%4:g8rc = COPY $x4
|
|
%3:g8rc = COPY $x3
|
|
%7:gprc = COPY %4.sub_32
|
|
%8:gprc = COPY %5.sub_32
|
|
INLINEASM &"#NOTHING", 1, 12, implicit-def early-clobber $r2, !31
|
|
%9:crrc = CMPWI %8, 1
|
|
BCC 12, killed %9, %bb.2
|
|
B %bb.1
|
|
|
|
bb.1.for.body.lr.ph:
|
|
successors: %bb.3(0x80000000)
|
|
|
|
INLINEASM &"#NOTHING", 1, 12, implicit-def early-clobber $r2, !31
|
|
%11:crrc = CMPWI %7, 10
|
|
%0:crbitrc = COPY %11.sub_gt
|
|
%10:gprc = LI 0
|
|
B %bb.3
|
|
|
|
bb.2.for.cond.cleanup:
|
|
BLR8 implicit $lr8, implicit $rm
|
|
|
|
bb.3.for.body:
|
|
successors: %bb.4(0x00000002), %bb.5(0x7ffffffe)
|
|
|
|
%1:gprc_and_gprc_nor0 = PHI %10, %bb.1, %2, %bb.5
|
|
%12:gprc = LWZ 0, %6 :: (load (s32) from %ir.Ptr, !tbaa !33)
|
|
%13:gprc = ADD4 %1, killed %12
|
|
STW killed %13, 0, %6 :: (store (s32) into %ir.Ptr, !tbaa !33)
|
|
BCn %0, %bb.5
|
|
B %bb.4
|
|
|
|
bb.4.if.then:
|
|
successors: %bb.5(0x80000000)
|
|
|
|
INLINEASM &"#NOTHING", 1, 12, implicit-def early-clobber $r2, !31
|
|
ADJCALLSTACKDOWN 32, 0, implicit-def dead $r1, implicit $r1
|
|
%14:g8rc = COPY $x2
|
|
STD %14, 24, $x1 :: (store (s64) into stack + 24)
|
|
%15:g8rc = EXTSW_32_64 %7
|
|
$x3 = COPY %15
|
|
$x12 = COPY %3
|
|
MTCTR8 %3, implicit-def $ctr8
|
|
BCTRL8_LDinto_toc 24, $x1, csr_ppc64_altivec, implicit-def dead $lr8, implicit-def dead $x2, implicit $ctr8, implicit $rm, implicit $x3, implicit $x12, implicit $x2, implicit-def $r1
|
|
ADJCALLSTACKUP 32, 0, implicit-def dead $r1, implicit $r1
|
|
|
|
bb.5.for.inc:
|
|
successors: %bb.2(0x013521d0), %bb.3(0x7ecade30)
|
|
|
|
%2:gprc = nuw nsw ADDI %1, 1
|
|
%16:crrc = CMPLW %8, %2
|
|
BCC 76, killed %16, %bb.2
|
|
B %bb.3
|
|
|
|
...
|
|
|
|
# CHECK for enabling instruction hoisting
|
|
#CHECK-LABEL: test
|
|
#CHECK-HOIST: bb.1.for.body.lr.ph:
|
|
#CHECK-HOIST: %14:g8rc = COPY $x2
|
|
#CHECK-HOIST: STD %14, 24, $x1 :: (store (s64) into stack + 24)
|
|
#CHECK-HOIST: %15:g8rc = EXTSW_32_64 %7
|
|
#CHECK-HOIST: B %bb.3
|
|
|
|
#CHECK-HOIST: bb.4.if.then:
|
|
#CHECK-HOIST-NOT: %14:g8rc = COPY $x2
|
|
#CHECK-HOIST-NOT: STD %14, 24, $x1 :: (store (s64) into stack + 24)
|
|
#CHECK-HOIST-NOT: %15:g8rc = EXTSW_32_64 %7
|
|
#CHECK-HOIST: bb.5.for.inc:
|
|
|
|
# CHECK for disabling instruction hoisting due to block hotness
|
|
#CHECK-LABEL: test
|
|
#CHECK-NO-HOIST: bb.1.for.body.lr.ph:
|
|
#CHECK-NO-HOIST-NOT: %14:g8rc = COPY $x2
|
|
#CHECK-NO-HOIST-NOT: STD %14, 24, $x1 :: (store (s64) into stack + 24)
|
|
#CHECK-NO-HOIST-NOT: %15:g8rc = EXTSW_32_64 %7
|
|
#CHECK-NO-HOIST: B %bb.3
|
|
|
|
#CHECK-NO-HOIST: bb.4.if.then:
|
|
#CHECK-NO-HOIST: %14:g8rc = COPY $x2
|
|
#CHECK-NO-HOIST: STD %14, 24, $x1 :: (store (s64) into stack + 24)
|
|
#CHECK-NO-HOIST: %15:g8rc = EXTSW_32_64 %7
|
|
#CHECK-NO-HOIST: bb.5.for.inc:
|
|
|