forked from OSchip/llvm-project
Process BUNDLE in tail duplication
When tail duplication estimates a size of tail it uses instruction count. Account for a number of instrictions in a bundle too. Differential Revision: https://reviews.llvm.org/D72783
This commit is contained in:
parent
44560762c6
commit
8b417dd3d6
|
@ -625,7 +625,9 @@ bool TailDuplicator::shouldTailDuplicate(bool IsSimple,
|
|||
if (PreRegAlloc && MI.isCall())
|
||||
return false;
|
||||
|
||||
if (!MI.isPHI() && !MI.isMetaInstruction())
|
||||
if (MI.isBundle())
|
||||
InstrCount += MI.getBundleSize();
|
||||
else if (!MI.isPHI() && !MI.isMetaInstruction())
|
||||
InstrCount += 1;
|
||||
|
||||
if (InstrCount > MaxDuplicateCount)
|
||||
|
|
|
@ -0,0 +1,38 @@
|
|||
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
|
||||
# RUN: llc -march=amdgcn -run-pass=block-placement -tail-dup-placement-threshold=2 -verify-machineinstrs -o - %s | FileCheck -check-prefix=GCN %s
|
||||
|
||||
# Check that tail duplication correctly counts instructions in a bundle.
|
||||
# The bundle below shall not be duplicated.
|
||||
|
||||
---
|
||||
name: tail_dup_bundle
|
||||
body: |
|
||||
; GCN-LABEL: name: tail_dup_bundle
|
||||
; GCN: bb.0:
|
||||
; GCN: successors: %bb.2(0x80000000)
|
||||
; GCN: bb.2:
|
||||
; GCN: BUNDLE {
|
||||
; GCN: S_NOP 0
|
||||
; GCN: S_NOP 0
|
||||
; GCN: }
|
||||
; GCN: S_ENDPGM 0
|
||||
; GCN: bb.1:
|
||||
; GCN: successors: %bb.2(0x80000000)
|
||||
; GCN: S_BRANCH %bb.2
|
||||
bb.0:
|
||||
successors: %bb.2(0x80000000)
|
||||
|
||||
S_BRANCH %bb.2
|
||||
|
||||
bb.1:
|
||||
successors: %bb.2(0x80000000)
|
||||
|
||||
bb.2:
|
||||
|
||||
BUNDLE {
|
||||
S_NOP 0
|
||||
S_NOP 0
|
||||
}
|
||||
S_ENDPGM 0
|
||||
|
||||
...
|
Loading…
Reference in New Issue