Skip to content

Commit 756ac65

Browse files
authored
[CodeGen] Add a pass for testing finalizeBundle (#149813)
This allows for unit testing of finalizeBundle with standard MIR tests using update_mir_test_checks.py.
1 parent 3345582 commit 756ac65

File tree

5 files changed

+37
-0
lines changed

5 files changed

+37
-0
lines changed

llvm/include/llvm/CodeGen/MachineInstrBundle.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
#define LLVM_CODEGEN_MACHINEINSTRBUNDLE_H
1616

1717
#include "llvm/CodeGen/MachineBasicBlock.h"
18+
#include "llvm/CodeGen/MachinePassManager.h"
1819
#include "llvm/Support/Compiler.h"
1920

2021
namespace llvm {
@@ -294,6 +295,12 @@ LLVM_ABI PhysRegInfo AnalyzePhysRegInBundle(const MachineInstr &MI,
294295
Register Reg,
295296
const TargetRegisterInfo *TRI);
296297

298+
class FinalizeBundleTestPass : public PassInfoMixin<FinalizeBundleTestPass> {
299+
public:
300+
PreservedAnalyses run(MachineFunction &MF,
301+
MachineFunctionAnalysisManager &MFAM);
302+
};
303+
297304
} // End llvm namespace
298305

299306
#endif

llvm/include/llvm/Passes/MachinePassRegistry.def

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@ MACHINE_FUNCTION_PASS("early-machinelicm", EarlyMachineLICMPass())
113113
MACHINE_FUNCTION_PASS("early-tailduplication", EarlyTailDuplicatePass())
114114
MACHINE_FUNCTION_PASS("fentry-insert", FEntryInserterPass())
115115
MACHINE_FUNCTION_PASS("finalize-isel", FinalizeISelPass())
116+
MACHINE_FUNCTION_PASS("finalizebundle-test", FinalizeBundleTestPass())
116117
MACHINE_FUNCTION_PASS("fixup-statepoint-caller-saved", FixupStatepointCallerSavedPass())
117118
MACHINE_FUNCTION_PASS("init-undef", InitUndefPass())
118119
MACHINE_FUNCTION_PASS("localstackalloc", LocalStackSlotAllocationPass())

llvm/lib/CodeGen/MachineInstrBundle.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -359,3 +359,13 @@ PhysRegInfo llvm::AnalyzePhysRegInBundle(const MachineInstr &MI, Register Reg,
359359

360360
return PRI;
361361
}
362+
363+
PreservedAnalyses
364+
llvm::FinalizeBundleTestPass::run(MachineFunction &MF,
365+
MachineFunctionAnalysisManager &) {
366+
// For testing purposes, bundle the entire contents of each basic block
367+
// except for terminators.
368+
for (MachineBasicBlock &MBB : MF)
369+
finalizeBundle(MBB, MBB.instr_begin(), MBB.getFirstInstrTerminator());
370+
return PreservedAnalyses::none();
371+
}

llvm/lib/Passes/PassBuilder.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,7 @@
124124
#include "llvm/CodeGen/MachineCopyPropagation.h"
125125
#include "llvm/CodeGen/MachineDominators.h"
126126
#include "llvm/CodeGen/MachineFunctionAnalysis.h"
127+
#include "llvm/CodeGen/MachineInstrBundle.h"
127128
#include "llvm/CodeGen/MachineLICM.h"
128129
#include "llvm/CodeGen/MachineLateInstrsCleanup.h"
129130
#include "llvm/CodeGen/MachinePassManager.h"
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 5
2+
# RUN: llc -mtriple=amdgcn -mcpu=gfx1200 -passes=finalizebundle-test %s -o - | FileCheck %s
3+
4+
---
5+
name: test_overlap
6+
body: |
7+
bb.0:
8+
liveins: $vgpr0_vgpr1
9+
; CHECK-LABEL: name: test_overlap
10+
; CHECK: liveins: $vgpr0_vgpr1
11+
; CHECK-NEXT: {{ $}}
12+
; CHECK-NEXT: BUNDLE implicit-def $vgpr2_vgpr3, implicit-def $vgpr2, implicit-def $vgpr2_lo16, implicit-def $vgpr2_hi16, implicit-def $vgpr3, implicit-def $vgpr3_lo16, implicit-def $vgpr3_hi16, implicit-def $vgpr3_vgpr4, implicit-def $vgpr4, implicit-def $vgpr4_lo16, implicit-def $vgpr4_hi16, implicit $vgpr0_vgpr1, implicit $exec, implicit $vgpr1_vgpr2 {
13+
; CHECK-NEXT: $vgpr2_vgpr3 = V_LSHLREV_B64_pseudo_e32 1, $vgpr0_vgpr1, implicit $exec
14+
; CHECK-NEXT: $vgpr3_vgpr4 = V_LSHLREV_B64_pseudo_e32 1, $vgpr1_vgpr2, implicit $exec
15+
; CHECK-NEXT: }
16+
$vgpr2_vgpr3 = V_LSHLREV_B64_pseudo_e32 1, $vgpr0_vgpr1, implicit $exec
17+
$vgpr3_vgpr4 = V_LSHLREV_B64_pseudo_e32 1, $vgpr1_vgpr2, implicit $exec
18+
...

0 commit comments

Comments
 (0)