Skip to content

Commit 4c9931d

Browse files
committed
[CodeGen] Add a pass for testing finalizeBundle
This allows for unit testing of finalizeBundle with standard MIR tests using update_mir_test_checks.py.
1 parent 3b8adcf commit 4c9931d

File tree

5 files changed

+46
-0
lines changed

5 files changed

+46
-0
lines changed

llvm/include/llvm/CodeGen/Passes.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -623,6 +623,9 @@ LLVM_ABI ModulePass *createWindowsSecureHotPatchingPass();
623623

624624
/// Lowers KCFI operand bundles for indirect calls.
625625
LLVM_ABI FunctionPass *createKCFIPass();
626+
627+
/// A pass for testing finalizeBundle.
628+
LLVM_ABI extern char &FinalizeBundleTestID;
626629
} // namespace llvm
627630

628631
#endif

llvm/include/llvm/InitializePasses.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -340,6 +340,7 @@ LLVM_ABI void initializeWindowsSecureHotPatchingPass(PassRegistry &);
340340
LLVM_ABI void initializeWinEHPreparePass(PassRegistry &);
341341
LLVM_ABI void initializeWriteBitcodePassPass(PassRegistry &);
342342
LLVM_ABI void initializeXRayInstrumentationLegacyPass(PassRegistry &);
343+
LLVM_ABI void initializeFinalizeBundleTestPass(PassRegistry &);
343344

344345
} // end namespace llvm
345346

llvm/lib/CodeGen/CodeGen.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,4 +146,5 @@ void llvm::initializeCodeGen(PassRegistry &Registry) {
146146
initializeWasmEHPreparePass(Registry);
147147
initializeWinEHPreparePass(Registry);
148148
initializeXRayInstrumentationLegacyPass(Registry);
149+
initializeFinalizeBundleTestPass(Registry);
149150
}

llvm/lib/CodeGen/MachineInstrBundle.cpp

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

360360
return PRI;
361361
}
362+
363+
namespace {
364+
class FinalizeBundleTest : public MachineFunctionPass {
365+
public:
366+
static char ID;
367+
368+
FinalizeBundleTest() : MachineFunctionPass(ID) {
369+
initializeFinalizeBundleTestPass(*PassRegistry::getPassRegistry());
370+
}
371+
372+
bool runOnMachineFunction(MachineFunction &MF) override {
373+
// For testing purposes, bundle the entire contents of each basic block
374+
// except for terminators.
375+
for (MachineBasicBlock &MBB : MF)
376+
finalizeBundle(MBB, MBB.instr_begin(), MBB.getFirstInstrTerminator());
377+
return true;
378+
}
379+
};
380+
} // namespace
381+
382+
char FinalizeBundleTest::ID = 0;
383+
INITIALIZE_PASS(FinalizeBundleTest, "finalizebundle-test",
384+
"finalizeBundle test", false, false)
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 -run-pass 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)