1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-18 18:42:46 +02:00

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:
Stanislav Mekhanoshin 2020-01-15 09:38:08 -08:00
parent e7370b6a19
commit 33946d17b3
2 changed files with 41 additions and 1 deletions

View File

@ -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)

View File

@ -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
...