Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
101 changes: 95 additions & 6 deletions llvm/lib/Target/Hexagon/Hexagon.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,15 +14,104 @@
#ifndef LLVM_LIB_TARGET_HEXAGON_HEXAGON_H
#define LLVM_LIB_TARGET_HEXAGON_HEXAGON_H

#include "llvm/Support/CodeGen.h"

namespace llvm {
class HexagonTargetMachine;
class ImmutablePass;
class PassRegistry;
class HexagonTargetMachine;
class ImmutablePass;
class PassRegistry;
class FunctionPass;
class Pass;

extern char &HexagonCopyHoistingID;
extern char &HexagonExpandCondsetsID;
extern char &HexagonTfrCleanupID;
void initializeHexagonBitSimplifyPass(PassRegistry &);
void initializeHexagonBranchRelaxationPass(PassRegistry &);
void initializeHexagonCFGOptimizerPass(PassRegistry &);
void initializeHexagonCommonGEPPass(PassRegistry &);
void initializeHexagonCopyHoistingPass(PassRegistry &);
void initializeHexagonConstExtendersPass(PassRegistry &);
void initializeHexagonConstPropagationPass(PassRegistry &);
void initializeHexagonCopyToCombinePass(PassRegistry &);
void initializeHexagonDAGToDAGISelLegacyPass(PassRegistry &);
void initializeHexagonEarlyIfConversionPass(PassRegistry &);
void initializeHexagonExpandCondsetsPass(PassRegistry &);
void initializeHexagonGenMemAbsolutePass(PassRegistry &);
void initializeHexagonGenMuxPass(PassRegistry &);
void initializeHexagonHardwareLoopsPass(PassRegistry &);
void initializeHexagonLoopIdiomRecognizeLegacyPassPass(PassRegistry &);
void initializeHexagonLoopAlignPass(PassRegistry &);
void initializeHexagonLoopReschedulingPass(PassRegistry &);
void initializeHexagonMaskPass(PassRegistry &);
void initializeHexagonMergeActivateWeightPass(PassRegistry &);
void initializeHexagonNewValueJumpPass(PassRegistry &);
void initializeHexagonOptAddrModePass(PassRegistry &);
void initializeHexagonPacketizerPass(PassRegistry &);
void initializeHexagonRDFOptPass(PassRegistry &);
void initializeHexagonSplitDoubleRegsPass(PassRegistry &);
void initializeHexagonTfrCleanupPass(PassRegistry &);
void initializeHexagonVExtractPass(PassRegistry &);
void initializeHexagonVectorCombineLegacyPass(PassRegistry &);
void initializeHexagonVectorLoopCarriedReuseLegacyPassPass(PassRegistry &);
void initializeHexagonFixupHwLoopsPass(PassRegistry &);
void initializeHexagonCallFrameInformationPass(PassRegistry &);
void initializeHexagonGenExtractPass(PassRegistry &);
void initializeHexagonGenInsertPass(PassRegistry &);
void initializeHexagonGenPredicatePass(PassRegistry &);
void initializeHexagonLoadWideningPass(PassRegistry &);
void initializeHexagonStoreWideningPass(PassRegistry &);
void initializeHexagonOptimizeSZextendsPass(PassRegistry &);
void initializeHexagonPeepholePass(PassRegistry &);
void initializeHexagonSplitConst32AndConst64Pass(PassRegistry &);
void initializeHexagonVectorPrintPass(PassRegistry &);

Pass *createHexagonLoopIdiomPass();
Pass *createHexagonVectorLoopCarriedReuseLegacyPass();

/// Creates a Hexagon-specific Target Transformation Info pass.
ImmutablePass *
createHexagonTargetTransformInfoPass(const HexagonTargetMachine *TM);

/// Creates a Hexagon-specific Target Transformation Info pass.
ImmutablePass *createHexagonTargetTransformInfoPass(const HexagonTargetMachine *TM);
FunctionPass *createHexagonBitSimplify();
FunctionPass *createHexagonBranchRelaxation();
FunctionPass *createHexagonCallFrameInformation();
FunctionPass *createHexagonCFGOptimizer();
FunctionPass *createHexagonCommonGEP();
FunctionPass *createHexagonConstExtenders();
FunctionPass *createHexagonConstPropagationPass();
FunctionPass *createHexagonCopyHoisting();
FunctionPass *createHexagonCopyToCombine();
FunctionPass *createHexagonEarlyIfConversion();
FunctionPass *createHexagonFixupHwLoops();
FunctionPass *createHexagonGenExtract();
FunctionPass *createHexagonGenInsert();
FunctionPass *createHexagonGenMemAbsolute();
FunctionPass *createHexagonGenMux();
FunctionPass *createHexagonGenPredicate();
FunctionPass *createHexagonHardwareLoops();
FunctionPass *createHexagonISelDag(HexagonTargetMachine &TM,
CodeGenOptLevel OptLevel);
FunctionPass *createHexagonLoopAlign();
FunctionPass *createHexagonLoopRescheduling();
FunctionPass *createHexagonMask();
FunctionPass *createHexagonMergeActivateWeight();
FunctionPass *createHexagonNewValueJump();
FunctionPass *createHexagonOptAddrMode();
FunctionPass *createHexagonOptimizeSZextends();
FunctionPass *createHexagonPacketizer(bool Minimal);
FunctionPass *createHexagonPeephole();
FunctionPass *createHexagonRDFOpt();
FunctionPass *createHexagonSplitConst32AndConst64();
FunctionPass *createHexagonSplitDoubleRegs();
FunctionPass *createHexagonStoreWidening();
FunctionPass *createHexagonLoadWidening();
FunctionPass *createHexagonTfrCleanup();
FunctionPass *createHexagonVectorCombineLegacyPass();
FunctionPass *createHexagonVectorPrint();
FunctionPass *createHexagonVExtract();
FunctionPass *createHexagonExpandCondsets();

void initializeHexagonDAGToDAGISelLegacyPass(PassRegistry &);
} // end namespace llvm;

#endif
23 changes: 4 additions & 19 deletions llvm/lib/Target/Hexagon/HexagonBitSimplify.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
//===----------------------------------------------------------------------===//

#include "BitTracker.h"
#include "Hexagon.h"
#include "HexagonBitTracker.h"
#include "HexagonInstrInfo.h"
#include "HexagonRegisterInfo.h"
Expand Down Expand Up @@ -50,13 +51,6 @@ static unsigned CountBitSplit = 0;
static cl::opt<unsigned> RegisterSetLimit("hexbit-registerset-limit",
cl::Hidden, cl::init(1000));

namespace llvm {

void initializeHexagonBitSimplifyPass(PassRegistry& Registry);
FunctionPass *createHexagonBitSimplify();

} // end namespace llvm

namespace {

// Set of virtual registers, based on BitVector.
Expand Down Expand Up @@ -2897,22 +2891,13 @@ bool HexagonBitSimplify::runOnMachineFunction(MachineFunction &MF) {
// r5:4 = memd(r0++#8)
// }:endloop0

namespace llvm {

FunctionPass *createHexagonLoopRescheduling();
void initializeHexagonLoopReschedulingPass(PassRegistry&);

} // end namespace llvm

namespace {

class HexagonLoopRescheduling : public MachineFunctionPass {
public:
static char ID;

HexagonLoopRescheduling() : MachineFunctionPass(ID) {
initializeHexagonLoopReschedulingPass(*PassRegistry::getPassRegistry());
}
HexagonLoopRescheduling() : MachineFunctionPass(ID) {}

bool runOnMachineFunction(MachineFunction &MF) override;

Expand Down Expand Up @@ -2957,8 +2942,8 @@ namespace {

char HexagonLoopRescheduling::ID = 0;

INITIALIZE_PASS(HexagonLoopRescheduling, "hexagon-loop-resched",
"Hexagon Loop Rescheduling", false, false)
INITIALIZE_PASS(HexagonLoopRescheduling, "hexagon-loop-resched-pass",
Copy link
Contributor Author

@jurahul jurahul Apr 4, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

renaming the pass as it conflicts with a cl option of the same name defined in HexagonTargetMachine.cpp. It seems pass initialization creates a cl opt with the same name as the pass.

This conflict did not happen in earlier code because not all passes where initialized during target init, some were on demand so that ended up hiding the conflict.

"Hexagon Loop Rescheduling", false, false)

HexagonLoopRescheduling::PhiInfo::PhiInfo(MachineInstr &P,
MachineBasicBlock &B) {
Expand Down
11 changes: 1 addition & 10 deletions llvm/lib/Target/Hexagon/HexagonBranchRelaxation.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -37,22 +37,13 @@ static cl::opt<uint32_t>
BranchRelaxSafetyBuffer("branch-relax-safety-buffer", cl::init(200),
cl::Hidden, cl::desc("safety buffer size"));

namespace llvm {

FunctionPass *createHexagonBranchRelaxation();
void initializeHexagonBranchRelaxationPass(PassRegistry&);

} // end namespace llvm

namespace {

struct HexagonBranchRelaxation : public MachineFunctionPass {
public:
static char ID;

HexagonBranchRelaxation() : MachineFunctionPass(ID) {
initializeHexagonBranchRelaxationPass(*PassRegistry::getPassRegistry());
}
HexagonBranchRelaxation() : MachineFunctionPass(ID) {}

bool runOnMachineFunction(MachineFunction &MF) override;

Expand Down
11 changes: 1 addition & 10 deletions llvm/lib/Target/Hexagon/HexagonCFGOptimizer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,13 +24,6 @@ using namespace llvm;

#define DEBUG_TYPE "hexagon_cfg"

namespace llvm {

FunctionPass *createHexagonCFGOptimizer();
void initializeHexagonCFGOptimizerPass(PassRegistry&);

} // end namespace llvm

namespace {

class HexagonCFGOptimizer : public MachineFunctionPass {
Expand All @@ -41,9 +34,7 @@ class HexagonCFGOptimizer : public MachineFunctionPass {
public:
static char ID;

HexagonCFGOptimizer() : MachineFunctionPass(ID) {
initializeHexagonCFGOptimizerPass(*PassRegistry::getPassRegistry());
}
HexagonCFGOptimizer() : MachineFunctionPass(ID) {}

StringRef getPassName() const override { return "Hexagon CFG Optimizer"; }
bool runOnMachineFunction(MachineFunction &Fn) override;
Expand Down
12 changes: 3 additions & 9 deletions llvm/lib/Target/Hexagon/HexagonCommonGEP.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
//
//===----------------------------------------------------------------------===//

#include "Hexagon.h"

#include "llvm/ADT/ArrayRef.h"
#include "llvm/ADT/FoldingSet.h"
#include "llvm/ADT/GraphTraits.h"
Expand Down Expand Up @@ -58,12 +60,6 @@ static cl::opt<bool> OptEnableInv("commgep-inv", cl::init(true), cl::Hidden);
static cl::opt<bool> OptEnableConst("commgep-const", cl::init(true),
cl::Hidden);

namespace llvm {

void initializeHexagonCommonGEPPass(PassRegistry&);

} // end namespace llvm

namespace {

struct GepNode;
Expand Down Expand Up @@ -97,9 +93,7 @@ namespace {
public:
static char ID;

HexagonCommonGEP() : FunctionPass(ID) {
initializeHexagonCommonGEPPass(*PassRegistry::getPassRegistry());
}
HexagonCommonGEP() : FunctionPass(ID) {}

bool runOnFunction(Function &F) override;
StringRef getPassName() const override { return "Hexagon Common GEP"; }
Expand Down
5 changes: 0 additions & 5 deletions llvm/lib/Target/Hexagon/HexagonConstExtenders.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -37,11 +37,6 @@ static cl::opt<unsigned>
ReplaceLimit("hexagon-cext-limit", cl::init(0), cl::Hidden,
cl::desc("Maximum number of replacements"));

namespace llvm {
void initializeHexagonConstExtendersPass(PassRegistry&);
FunctionPass *createHexagonConstExtenders();
}

static int32_t adjustUp(int32_t V, uint8_t A, uint8_t O) {
assert(isPowerOf2_32(A));
int32_t U = (V & -A) + O;
Expand Down
7 changes: 0 additions & 7 deletions llvm/lib/Target/Hexagon/HexagonConstPropagation.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1827,13 +1827,6 @@ bool MachineConstEvaluator::evaluateSplati(const APInt &A1, unsigned Bits,
// ----------------------------------------------------------------------
// Hexagon-specific code.

namespace llvm {

FunctionPass *createHexagonConstPropagationPass();
void initializeHexagonConstPropagationPass(PassRegistry &Registry);

} // end namespace llvm

namespace {

class HexagonConstEvaluator : public MachineConstEvaluator {
Expand Down
9 changes: 1 addition & 8 deletions llvm/lib/Target/Hexagon/HexagonCopyHoisting.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,20 +28,13 @@ using namespace llvm;
static cl::opt<std::string> CPHoistFn("cphoistfn", cl::Hidden, cl::desc(""),
cl::init(""));

namespace llvm {
void initializeHexagonCopyHoistingPass(PassRegistry &Registry);
FunctionPass *createHexagonCopyHoisting();
} // namespace llvm

namespace {

class HexagonCopyHoisting : public MachineFunctionPass {

public:
static char ID;
HexagonCopyHoisting() : MachineFunctionPass(ID), MFN(nullptr), MRI(nullptr) {
initializeHexagonCopyHoistingPass(*PassRegistry::getPassRegistry());
}
HexagonCopyHoisting() : MachineFunctionPass(ID), MFN(nullptr), MRI(nullptr) {}

StringRef getPassName() const override { return "Hexagon Copy Hoisting"; }

Expand Down
6 changes: 0 additions & 6 deletions llvm/lib/Target/Hexagon/HexagonCopyToCombine.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -48,12 +48,6 @@ MaxNumOfInstsBetweenNewValueStoreAndTFR("max-num-inst-between-tfr-and-nv-store",
cl::desc("Maximum distance between a tfr feeding a store we "
"consider the store still to be newifiable"));

namespace llvm {
FunctionPass *createHexagonCopyToCombine();
void initializeHexagonCopyToCombinePass(PassRegistry&);
}


namespace {

class HexagonCopyToCombine : public MachineFunctionPass {
Expand Down
7 changes: 0 additions & 7 deletions llvm/lib/Target/Hexagon/HexagonEarlyIfConv.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -91,13 +91,6 @@

using namespace llvm;

namespace llvm {

FunctionPass *createHexagonEarlyIfConversion();
void initializeHexagonEarlyIfConversionPass(PassRegistry& Registry);

} // end namespace llvm

static cl::opt<bool> EnableHexagonBP("enable-hexagon-br-prob", cl::Hidden,
cl::init(true), cl::desc("Enable branch probability info"));
static cl::opt<unsigned> SizeLimit("eif-limit", cl::init(6), cl::Hidden,
Expand Down
16 changes: 2 additions & 14 deletions llvm/lib/Target/Hexagon/HexagonExpandCondsets.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,7 @@
// however, is that finding the locations where the implicit uses need
// to be added, and updating the live ranges will be more involved.

#include "Hexagon.h"
#include "HexagonInstrInfo.h"
#include "HexagonRegisterInfo.h"
#include "llvm/ADT/DenseMap.h"
Expand Down Expand Up @@ -128,13 +129,6 @@ static cl::opt<unsigned> OptTfrLimit("expand-condsets-tfr-limit",
static cl::opt<unsigned> OptCoaLimit("expand-condsets-coa-limit",
cl::init(~0U), cl::Hidden, cl::desc("Max number of segment coalescings"));

namespace llvm {

void initializeHexagonExpandCondsetsPass(PassRegistry&);
FunctionPass *createHexagonExpandCondsets();

} // end namespace llvm

namespace {

class HexagonExpandCondsets : public MachineFunctionPass {
Expand All @@ -146,7 +140,6 @@ namespace {
CoaLimitActive = true, CoaLimit = OptCoaLimit;
if (OptTfrLimit.getPosition())
TfrLimitActive = true, TfrLimit = OptTfrLimit;
initializeHexagonExpandCondsetsPass(*PassRegistry::getPassRegistry());
}

StringRef getPassName() const override { return "Hexagon Expand Condsets"; }
Expand Down Expand Up @@ -245,12 +238,7 @@ namespace {
} // end anonymous namespace

char HexagonExpandCondsets::ID = 0;

namespace llvm {

char &HexagonExpandCondsetsID = HexagonExpandCondsets::ID;

} // end namespace llvm
char &llvm::HexagonExpandCondsetsID = HexagonExpandCondsets::ID;

INITIALIZE_PASS_BEGIN(HexagonExpandCondsets, "expand-condsets",
"Hexagon Expand Condsets", false, false)
Expand Down
9 changes: 1 addition & 8 deletions llvm/lib/Target/Hexagon/HexagonFixupHwLoops.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,19 +28,12 @@ static cl::opt<unsigned> MaxLoopRange(
"hexagon-loop-range", cl::Hidden, cl::init(200),
cl::desc("Restrict range of loopN instructions (testing only)"));

namespace llvm {
FunctionPass *createHexagonFixupHwLoops();
void initializeHexagonFixupHwLoopsPass(PassRegistry&);
}

namespace {
struct HexagonFixupHwLoops : public MachineFunctionPass {
public:
static char ID;

HexagonFixupHwLoops() : MachineFunctionPass(ID) {
initializeHexagonFixupHwLoopsPass(*PassRegistry::getPassRegistry());
}
HexagonFixupHwLoops() : MachineFunctionPass(ID) {}

bool runOnMachineFunction(MachineFunction &MF) override;

Expand Down
Loading