Skip to content

Commit 2db3af0

Browse files
committed
[CodeGen][NPM] Port InitUndef to NPM
1 parent fec3016 commit 2db3af0

12 files changed

+73
-20
lines changed

llvm/include/llvm/CodeGen/InitUndef.h

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
//===- llvm/CodeGen/InitUndef.h --------------------*- C++ -*-===//
2+
//
3+
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4+
// See https://llvm.org/LICENSE.txt for license information.
5+
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6+
//
7+
//===----------------------------------------------------------------------===//
8+
9+
#ifndef LLVM_CODEGEN_INITUNDEF_H
10+
#define LLVM_CODEGEN_INITUNDEF_H
11+
12+
#include "llvm/CodeGen/MachinePassManager.h"
13+
14+
namespace llvm {
15+
16+
class InitUndefPass : public PassInfoMixin<InitUndefPass> {
17+
public:
18+
PreservedAnalyses run(MachineFunction &MF,
19+
MachineFunctionAnalysisManager &MFAM);
20+
};
21+
22+
} // namespace llvm
23+
24+
#endif // LLVM_CODEGEN_INITUNDEF_H

llvm/include/llvm/InitializePasses.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -311,7 +311,7 @@ void initializeTargetTransformInfoWrapperPassPass(PassRegistry &);
311311
void initializeTwoAddressInstructionLegacyPassPass(PassRegistry &);
312312
void initializeTypeBasedAAWrapperPassPass(PassRegistry &);
313313
void initializeTypePromotionLegacyPass(PassRegistry &);
314-
void initializeInitUndefPass(PassRegistry &);
314+
void initializeInitUndefLegacyPass(PassRegistry &);
315315
void initializeUniformityInfoWrapperPassPass(PassRegistry &);
316316
void initializeUnifyLoopExitsLegacyPassPass(PassRegistry &);
317317
void initializeUnpackMachineBundlesPass(PassRegistry &);

llvm/include/llvm/Passes/CodeGenPassBuilder.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
#include "llvm/CodeGen/GlobalMerge.h"
4444
#include "llvm/CodeGen/GlobalMergeFunctions.h"
4545
#include "llvm/CodeGen/IndirectBrExpand.h"
46+
#include "llvm/CodeGen/InitUndef.h"
4647
#include "llvm/CodeGen/InterleavedAccess.h"
4748
#include "llvm/CodeGen/InterleavedLoadCombine.h"
4849
#include "llvm/CodeGen/JMCInstrumenter.h"

llvm/include/llvm/Passes/MachinePassRegistry.def

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,7 @@ MACHINE_FUNCTION_PASS("early-tailduplication", EarlyTailDuplicatePass())
148148
MACHINE_FUNCTION_PASS("fentry-insert", FEntryInserterPass())
149149
MACHINE_FUNCTION_PASS("finalize-isel", FinalizeISelPass())
150150
MACHINE_FUNCTION_PASS("fixup-statepoint-caller-saved", FixupStatepointCallerSavedPass())
151+
MACHINE_FUNCTION_PASS("init-undef", InitUndefPass())
151152
MACHINE_FUNCTION_PASS("localstackalloc", LocalStackSlotAllocationPass())
152153
MACHINE_FUNCTION_PASS("machine-cp", MachineCopyPropagationPass())
153154
MACHINE_FUNCTION_PASS("machine-cse", MachineCSEPass())
@@ -304,7 +305,6 @@ DUMMY_MACHINE_FUNCTION_PASS("fs-profile-loader", MIRProfileLoaderNewPass)
304305
DUMMY_MACHINE_FUNCTION_PASS("funclet-layout", FuncletLayoutPass)
305306
DUMMY_MACHINE_FUNCTION_PASS("gc-empty-basic-blocks", GCEmptyBasicBlocksPass)
306307
DUMMY_MACHINE_FUNCTION_PASS("implicit-null-checks", ImplicitNullChecksPass)
307-
DUMMY_MACHINE_FUNCTION_PASS("init-undef-pass", InitUndefPass)
308308
DUMMY_MACHINE_FUNCTION_PASS("instruction-select", InstructionSelectPass)
309309
DUMMY_MACHINE_FUNCTION_PASS("irtranslator", IRTranslatorPass)
310310
DUMMY_MACHINE_FUNCTION_PASS("kcfi", MachineKCFIPass)

llvm/lib/CodeGen/CodeGen.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ void llvm::initializeCodeGen(PassRegistry &Registry) {
5454
initializeIfConverterPass(Registry);
5555
initializeImplicitNullChecksPass(Registry);
5656
initializeIndirectBrExpandLegacyPassPass(Registry);
57-
initializeInitUndefPass(Registry);
57+
initializeInitUndefLegacyPass(Registry);
5858
initializeInterleavedLoadCombinePass(Registry);
5959
initializeInterleavedAccessPass(Registry);
6060
initializeJMCInstrumenterPass(Registry);

llvm/lib/CodeGen/InitUndef.cpp

Lines changed: 35 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
//
3939
//===----------------------------------------------------------------------===//
4040

41+
#include "llvm/CodeGen/InitUndef.h"
4142
#include "llvm/ADT/SmallSet.h"
4243
#include "llvm/ADT/SmallVector.h"
4344
#include "llvm/CodeGen/DetectDeadLanes.h"
@@ -59,20 +60,12 @@ using namespace llvm;
5960

6061
namespace {
6162

62-
class InitUndef : public MachineFunctionPass {
63-
const TargetInstrInfo *TII;
64-
MachineRegisterInfo *MRI;
65-
const TargetSubtargetInfo *ST;
66-
const TargetRegisterInfo *TRI;
67-
68-
// Newly added vregs, assumed to be fully rewritten
69-
SmallSet<Register, 8> NewRegs;
70-
SmallVector<MachineInstr *, 8> DeadInsts;
71-
63+
class InitUndefLegacy : public MachineFunctionPass {
7264
public:
7365
static char ID;
7466

75-
InitUndef() : MachineFunctionPass(ID) {}
67+
InitUndefLegacy() : MachineFunctionPass(ID) {}
68+
7669
bool runOnMachineFunction(MachineFunction &MF) override;
7770

7871
void getAnalysisUsage(AnalysisUsage &AU) const override {
@@ -81,6 +74,20 @@ class InitUndef : public MachineFunctionPass {
8174
}
8275

8376
StringRef getPassName() const override { return INIT_UNDEF_NAME; }
77+
};
78+
79+
class InitUndef {
80+
const TargetInstrInfo *TII;
81+
MachineRegisterInfo *MRI;
82+
const TargetSubtargetInfo *ST;
83+
const TargetRegisterInfo *TRI;
84+
85+
// Newly added vregs, assumed to be fully rewritten
86+
SmallSet<Register, 8> NewRegs;
87+
SmallVector<MachineInstr *, 8> DeadInsts;
88+
89+
public:
90+
bool run(MachineFunction &MF);
8491

8592
private:
8693
bool processBasicBlock(MachineFunction &MF, MachineBasicBlock &MBB,
@@ -93,9 +100,9 @@ class InitUndef : public MachineFunctionPass {
93100

94101
} // end anonymous namespace
95102

96-
char InitUndef::ID = 0;
97-
INITIALIZE_PASS(InitUndef, DEBUG_TYPE, INIT_UNDEF_NAME, false, false)
98-
char &llvm::InitUndefID = InitUndef::ID;
103+
char InitUndefLegacy::ID = 0;
104+
INITIALIZE_PASS(InitUndefLegacy, DEBUG_TYPE, INIT_UNDEF_NAME, false, false)
105+
char &llvm::InitUndefID = InitUndefLegacy::ID;
99106

100107
static bool isEarlyClobberMI(MachineInstr &MI) {
101108
return llvm::any_of(MI.all_defs(), [](const MachineOperand &DefMO) {
@@ -246,7 +253,20 @@ bool InitUndef::processBasicBlock(MachineFunction &MF, MachineBasicBlock &MBB,
246253
return Changed;
247254
}
248255

249-
bool InitUndef::runOnMachineFunction(MachineFunction &MF) {
256+
bool InitUndefLegacy::runOnMachineFunction(MachineFunction &MF) {
257+
return InitUndef().run(MF);
258+
}
259+
260+
PreservedAnalyses InitUndefPass::run(MachineFunction &MF,
261+
MachineFunctionAnalysisManager &MFAM) {
262+
if (!InitUndef().run(MF))
263+
return PreservedAnalyses::all();
264+
auto PA = getMachineFunctionPassPreservedAnalyses();
265+
PA.preserveSet<CFGAnalyses>();
266+
return PA;
267+
}
268+
269+
bool InitUndef::run(MachineFunction &MF) {
250270
ST = &MF.getSubtarget();
251271

252272
// The pass is only needed if early-clobber defs and undef ops cannot be

llvm/lib/Passes/PassBuilder.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@
103103
#include "llvm/CodeGen/GlobalMergeFunctions.h"
104104
#include "llvm/CodeGen/HardwareLoops.h"
105105
#include "llvm/CodeGen/IndirectBrExpand.h"
106+
#include "llvm/CodeGen/InitUndef.h"
106107
#include "llvm/CodeGen/InterleavedAccess.h"
107108
#include "llvm/CodeGen/InterleavedLoadCombine.h"
108109
#include "llvm/CodeGen/JMCInstrumenter.h"

llvm/test/CodeGen/AArch64/init-undef.mir

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22
# RUN: llc -mtriple=aarch64-- -aarch64-enable-subreg-liveness-tracking=false -run-pass=init-undef -o - %s | FileCheck %s
33
# RUN: llc -mtriple=aarch64-- -aarch64-enable-subreg-liveness-tracking=true -run-pass=init-undef -o - %s | FileCheck %s
44

5+
# RUN: llc -mtriple=aarch64-- -aarch64-enable-subreg-liveness-tracking=false -passes=init-undef -o - %s | FileCheck %s
6+
# RUN: llc -mtriple=aarch64-- -aarch64-enable-subreg-liveness-tracking=true -passes=init-undef -o - %s | FileCheck %s
7+
58
---
69
name: test_stxp_undef
710
body: |

0 commit comments

Comments
 (0)