From 8b417dd3d6c6e4c83dee172e9b37cc2ba51c635a Mon Sep 17 00:00:00 2001 From: Stanislav Mekhanoshin Date: Wed, 15 Jan 2020 09:38:08 -0800 Subject: [PATCH] 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 --- llvm/lib/CodeGen/TailDuplicator.cpp | 4 ++- llvm/test/CodeGen/AMDGPU/tail-dup-bundle.mir | 38 ++++++++++++++++++++ 2 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 llvm/test/CodeGen/AMDGPU/tail-dup-bundle.mir diff --git a/llvm/lib/CodeGen/TailDuplicator.cpp b/llvm/lib/CodeGen/TailDuplicator.cpp index cd1278fd4d8d..45eef7d84db6 100644 --- a/llvm/lib/CodeGen/TailDuplicator.cpp +++ b/llvm/lib/CodeGen/TailDuplicator.cpp @@ -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) diff --git a/llvm/test/CodeGen/AMDGPU/tail-dup-bundle.mir b/llvm/test/CodeGen/AMDGPU/tail-dup-bundle.mir new file mode 100644 index 000000000000..491829142997 --- /dev/null +++ b/llvm/test/CodeGen/AMDGPU/tail-dup-bundle.mir @@ -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 + +...