LLVM 20.0.0git
Functions | Variables
PPCTargetMachine.cpp File Reference
#include "PPCTargetMachine.h"
#include "MCTargetDesc/PPCMCTargetDesc.h"
#include "PPC.h"
#include "PPCMachineFunctionInfo.h"
#include "PPCMachineScheduler.h"
#include "PPCMacroFusion.h"
#include "PPCSubtarget.h"
#include "PPCTargetObjectFile.h"
#include "PPCTargetTransformInfo.h"
#include "TargetInfo/PowerPCTargetInfo.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/Analysis/TargetTransformInfo.h"
#include "llvm/CodeGen/GlobalISel/IRTranslator.h"
#include "llvm/CodeGen/GlobalISel/InstructionSelect.h"
#include "llvm/CodeGen/GlobalISel/InstructionSelector.h"
#include "llvm/CodeGen/GlobalISel/Legalizer.h"
#include "llvm/CodeGen/GlobalISel/Localizer.h"
#include "llvm/CodeGen/GlobalISel/RegBankSelect.h"
#include "llvm/CodeGen/MachineScheduler.h"
#include "llvm/CodeGen/Passes.h"
#include "llvm/CodeGen/TargetPassConfig.h"
#include "llvm/IR/Attributes.h"
#include "llvm/IR/DataLayout.h"
#include "llvm/IR/Function.h"
#include "llvm/InitializePasses.h"
#include "llvm/MC/TargetRegistry.h"
#include "llvm/Pass.h"
#include "llvm/Support/CodeGen.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Target/TargetLoweringObjectFile.h"
#include "llvm/Target/TargetOptions.h"
#include "llvm/TargetParser/Triple.h"
#include "llvm/Transforms/Scalar.h"
#include <cassert>
#include <memory>
#include <optional>
#include <string>

Go to the source code of this file.

Functions

LLVM_EXTERNAL_VISIBILITY void LLVMInitializePowerPCTarget ()
 
static bool isLittleEndianTriple (const Triple &T)
 
static std::string getDataLayoutString (const Triple &T)
 Return the datalayout string of a subtarget.
 
static std::string computeFSAdditions (StringRef FS, CodeGenOptLevel OL, const Triple &TT)
 
static std::unique_ptr< TargetLoweringObjectFilecreateTLOF (const Triple &TT)
 
static PPCTargetMachine::PPCABI computeTargetABI (const Triple &TT, const TargetOptions &Options)
 
static Reloc::Model getEffectiveRelocModel (const Triple &TT, std::optional< Reloc::Model > RM)
 
static CodeModel::Model getEffectivePPCCodeModel (const Triple &TT, std::optional< CodeModel::Model > CM, bool JIT)
 
static ScheduleDAGInstrscreatePPCMachineScheduler (MachineSchedContext *C)
 
static ScheduleDAGInstrscreatePPCPostMachineScheduler (MachineSchedContext *C)
 

Variables

static cl::opt< boolEnableBranchCoalescing ("enable-ppc-branch-coalesce", cl::Hidden, cl::desc("enable coalescing of duplicate branches for PPC"))
 
static cl::opt< boolDisableCTRLoops ("disable-ppc-ctrloops", cl::Hidden, cl::desc("Disable CTR loops for PPC"))
 
static cl::opt< boolDisableInstrFormPrep ("disable-ppc-instr-form-prep", cl::Hidden, cl::desc("Disable PPC loop instr form prep"))
 
static cl::opt< boolVSXFMAMutateEarly ("schedule-ppc-vsx-fma-mutation-early", cl::Hidden, cl::desc("Schedule VSX FMA instruction mutation early"))
 
static cl::opt< boolDisableVSXSwapRemoval ("disable-ppc-vsx-swap-removal", cl::Hidden, cl::desc("Disable VSX Swap Removal for PPC"))
 
static cl::opt< boolDisableMIPeephole ("disable-ppc-peephole", cl::Hidden, cl::desc("Disable machine peepholes for PPC"))
 
static cl::opt< boolEnableGEPOpt ("ppc-gep-opt", cl::Hidden, cl::desc("Enable optimizations on complex GEPs"), cl::init(true))
 
static cl::opt< boolEnablePrefetch ("enable-ppc-prefetching", cl::desc("enable software prefetching on PPC"), cl::init(false), cl::Hidden)
 
static cl::opt< boolEnableExtraTOCRegDeps ("enable-ppc-extra-toc-reg-deps", cl::desc("Add extra TOC register dependencies"), cl::init(true), cl::Hidden)
 
static cl::opt< boolEnableMachineCombinerPass ("ppc-machine-combiner", cl::desc("Enable the machine combiner pass"), cl::init(true), cl::Hidden)
 
static cl::opt< boolReduceCRLogical ("ppc-reduce-cr-logicals", cl::desc("Expand eligible cr-logical binary ops to branches"), cl::init(true), cl::Hidden)
 
static cl::opt< boolEnablePPCGenScalarMASSEntries ("enable-ppc-gen-scalar-mass", cl::init(false), cl::desc("Enable lowering math functions to their corresponding MASS " "(scalar) entries"), cl::Hidden)
 
static cl::opt< boolEnableGlobalMerge ("ppc-global-merge", cl::Hidden, cl::init(false), cl::desc("Enable the global merge pass"))
 
static cl::opt< unsignedGlobalMergeMaxOffset ("ppc-global-merge-max-offset", cl::Hidden, cl::init(0x7fff), cl::desc("Maximum global merge offset"))
 
static MachineSchedRegistry PPCPreRASchedRegistry ("ppc-prera", "Run PowerPC PreRA specific scheduler", createPPCMachineScheduler)
 
static MachineSchedRegistry PPCPostRASchedRegistry ("ppc-postra", "Run PowerPC PostRA specific scheduler", createPPCPostMachineScheduler)
 

Function Documentation

◆ computeFSAdditions()

static std::string computeFSAdditions ( StringRef  FS,
CodeGenOptLevel  OL,
const Triple TT 
)
static

◆ computeTargetABI()

static PPCTargetMachine::PPCABI computeTargetABI ( const Triple TT,
const TargetOptions Options 
)
static

◆ createPPCMachineScheduler()

static ScheduleDAGInstrs * createPPCMachineScheduler ( MachineSchedContext C)
static

◆ createPPCPostMachineScheduler()

static ScheduleDAGInstrs * createPPCPostMachineScheduler ( MachineSchedContext C)
static

◆ createTLOF()

static std::unique_ptr< TargetLoweringObjectFile > createTLOF ( const Triple TT)
static

Definition at line 237 of file PPCTargetMachine.cpp.

◆ getDataLayoutString()

static std::string getDataLayoutString ( const Triple T)
static

Return the datalayout string of a subtarget.

Definition at line 154 of file PPCTargetMachine.cpp.

References llvm::DataLayout::getManglingComponent(), is64Bit(), isLittleEndianTriple(), llvm::Triple::Lv2, llvm::Triple::ppc64, and llvm::Triple::ppc64le.

◆ getEffectivePPCCodeModel()

static CodeModel::Model getEffectivePPCCodeModel ( const Triple TT,
std::optional< CodeModel::Model CM,
bool  JIT 
)
static

◆ getEffectiveRelocModel()

static Reloc::Model getEffectiveRelocModel ( const Triple TT,
std::optional< Reloc::Model RM 
)
static

◆ isLittleEndianTriple()

static bool isLittleEndianTriple ( const Triple T)
static

Definition at line 149 of file PPCTargetMachine.cpp.

References llvm::Triple::ppc64le, and llvm::Triple::ppcle.

Referenced by getDataLayoutString().

◆ LLVMInitializePowerPCTarget()

LLVM_EXTERNAL_VISIBILITY void LLVMInitializePowerPCTarget ( )

Variable Documentation

◆ DisableCTRLoops

cl::opt< bool > DisableCTRLoops("disable-ppc-ctrloops", cl::Hidden, cl::desc("Disable CTR loops for PPC")) ( "disable-ppc-ctrloops"  ,
cl::Hidden  ,
cl::desc("Disable CTR loops for PPC")   
)
static

◆ DisableInstrFormPrep

cl::opt< bool > DisableInstrFormPrep("disable-ppc-instr-form-prep", cl::Hidden, cl::desc("Disable PPC loop instr form prep")) ( "disable-ppc-instr-form-prep"  ,
cl::Hidden  ,
cl::desc("Disable PPC loop instr form prep")   
)
static

◆ DisableMIPeephole

cl::opt< bool > DisableMIPeephole("disable-ppc-peephole", cl::Hidden, cl::desc("Disable machine peepholes for PPC")) ( "disable-ppc-peephole"  ,
cl::Hidden  ,
cl::desc("Disable machine peepholes for PPC")   
)
static

◆ DisableVSXSwapRemoval

cl::opt< bool > DisableVSXSwapRemoval("disable-ppc-vsx-swap-removal", cl::Hidden, cl::desc("Disable VSX Swap Removal for PPC")) ( "disable-ppc-vsx-swap-removal"  ,
cl::Hidden  ,
cl::desc("Disable VSX Swap Removal for PPC")   
)
static

◆ EnableBranchCoalescing

cl::opt< bool > EnableBranchCoalescing("enable-ppc-branch-coalesce", cl::Hidden, cl::desc("enable coalescing of duplicate branches for PPC")) ( "enable-ppc-branch-coalesce"  ,
cl::Hidden  ,
cl::desc("enable coalescing of duplicate branches for PPC")   
)
static

◆ EnableExtraTOCRegDeps

cl::opt< bool > EnableExtraTOCRegDeps("enable-ppc-extra-toc-reg-deps", cl::desc("Add extra TOC register dependencies"), cl::init(true), cl::Hidden) ( "enable-ppc-extra-toc-reg-deps"  ,
cl::desc("Add extra TOC register dependencies")  ,
cl::init(true ,
cl::Hidden   
)
static

◆ EnableGEPOpt

cl::opt< bool > EnableGEPOpt("ppc-gep-opt", cl::Hidden, cl::desc("Enable optimizations on complex GEPs"), cl::init(true)) ( "ppc-gep-opt"  ,
cl::Hidden  ,
cl::desc("Enable optimizations on complex GEPs")  ,
cl::init(true  
)
static

◆ EnableGlobalMerge

cl::opt< bool > EnableGlobalMerge("ppc-global-merge", cl::Hidden, cl::init(false), cl::desc("Enable the global merge pass")) ( "ppc-global-merge"  ,
cl::Hidden  ,
cl::init(false)  ,
cl::desc("Enable the global merge pass")   
)
static

◆ EnableMachineCombinerPass

cl::opt< bool > EnableMachineCombinerPass("ppc-machine-combiner", cl::desc("Enable the machine combiner pass"), cl::init(true), cl::Hidden) ( "ppc-machine-combiner"  ,
cl::desc("Enable the machine combiner pass")  ,
cl::init(true ,
cl::Hidden   
)
static

◆ EnablePPCGenScalarMASSEntries

cl::opt< bool > EnablePPCGenScalarMASSEntries("enable-ppc-gen-scalar-mass", cl::init(false), cl::desc("Enable lowering math functions to their corresponding MASS " "(scalar) entries"), cl::Hidden) ( "enable-ppc-gen-scalar-mass"  ,
cl::init(false)  ,
cl::desc("Enable lowering math functions to their corresponding MASS " "(scalar) entries")  ,
cl::Hidden   
)
static

◆ EnablePrefetch

cl::opt< bool > EnablePrefetch("enable-ppc-prefetching", cl::desc("enable software prefetching on PPC"), cl::init(false), cl::Hidden) ( "enable-ppc-prefetching"  ,
cl::desc("enable software prefetching on PPC")  ,
cl::init(false)  ,
cl::Hidden   
)
static

◆ GlobalMergeMaxOffset

cl::opt< unsigned > GlobalMergeMaxOffset("ppc-global-merge-max-offset", cl::Hidden, cl::init(0x7fff), cl::desc("Maximum global merge offset")) ( "ppc-global-merge-max-offset"  ,
cl::Hidden  ,
cl::init(0x7fff)  ,
cl::desc("Maximum global merge offset")   
)
static

◆ PPCPostRASchedRegistry

MachineSchedRegistry PPCPostRASchedRegistry("ppc-postra", "Run PowerPC PostRA specific scheduler", createPPCPostMachineScheduler) ( "ppc-postra"  ,
"Run PowerPC PostRA specific scheduler"  ,
createPPCPostMachineScheduler   
)
static

◆ PPCPreRASchedRegistry

MachineSchedRegistry PPCPreRASchedRegistry("ppc-prera", "Run PowerPC PreRA specific scheduler", createPPCMachineScheduler) ( "ppc-prera"  ,
"Run PowerPC PreRA specific scheduler"  ,
createPPCMachineScheduler   
)
static

◆ ReduceCRLogical

cl::opt< bool > ReduceCRLogical("ppc-reduce-cr-logicals", cl::desc("Expand eligible cr-logical binary ops to branches"), cl::init(true), cl::Hidden) ( "ppc-reduce-cr-logicals"  ,
cl::desc("Expand eligible cr-logical binary ops to branches")  ,
cl::init(true ,
cl::Hidden   
)
static

◆ VSXFMAMutateEarly

cl::opt< bool > VSXFMAMutateEarly("schedule-ppc-vsx-fma-mutation-early", cl::Hidden, cl::desc("Schedule VSX FMA instruction mutation early")) ( "schedule-ppc-vsx-fma-mutation-early"  ,
cl::Hidden  ,
cl::desc("Schedule VSX FMA instruction mutation early")   
)
static