[PowerPC] Rename DarwinDirective to CPUDirective (NFC)

Summary:
This patch renames the DarwinDirective (used to identify which CPU was defined)
to CPUDirective. It also adds the getCPUDirective() method and replaces all uses
of getDarwinDirective() with getCPUDirective().

Once this patch lands and downstream users of the getDarwinDirective() method
have switched to the getCPUDirective() method, the old getDarwinDirective()
method will be removed.

Reviewers: nemanjai, hfinkel, power-llvm-team, jsji, echristo, #powerpc, jhibbits

Reviewed By: hfinkel, jsji, jhibbits

Subscribers: hiraditya, shchenz, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D70352
This commit is contained in:
Kit Barton 2019-11-15 15:48:34 -06:00
parent 4d5c8caf9b
commit 85e4f5bcf6
8 changed files with 50 additions and 47 deletions

View File

@ -22,35 +22,35 @@ include "llvm/Target/Target.td"
// CPU Directives // // CPU Directives //
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
def Directive440 : SubtargetFeature<"", "DarwinDirective", "PPC::DIR_440", "">; def Directive440 : SubtargetFeature<"", "CPUDirective", "PPC::DIR_440", "">;
def Directive601 : SubtargetFeature<"", "DarwinDirective", "PPC::DIR_601", "">; def Directive601 : SubtargetFeature<"", "CPUDirective", "PPC::DIR_601", "">;
def Directive602 : SubtargetFeature<"", "DarwinDirective", "PPC::DIR_602", "">; def Directive602 : SubtargetFeature<"", "CPUDirective", "PPC::DIR_602", "">;
def Directive603 : SubtargetFeature<"", "DarwinDirective", "PPC::DIR_603", "">; def Directive603 : SubtargetFeature<"", "CPUDirective", "PPC::DIR_603", "">;
def Directive604 : SubtargetFeature<"", "DarwinDirective", "PPC::DIR_603", "">; def Directive604 : SubtargetFeature<"", "CPUDirective", "PPC::DIR_603", "">;
def Directive620 : SubtargetFeature<"", "DarwinDirective", "PPC::DIR_603", "">; def Directive620 : SubtargetFeature<"", "CPUDirective", "PPC::DIR_603", "">;
def Directive7400: SubtargetFeature<"", "DarwinDirective", "PPC::DIR_7400", "">; def Directive7400: SubtargetFeature<"", "CPUDirective", "PPC::DIR_7400", "">;
def Directive750 : SubtargetFeature<"", "DarwinDirective", "PPC::DIR_750", "">; def Directive750 : SubtargetFeature<"", "CPUDirective", "PPC::DIR_750", "">;
def Directive970 : SubtargetFeature<"", "DarwinDirective", "PPC::DIR_970", "">; def Directive970 : SubtargetFeature<"", "CPUDirective", "PPC::DIR_970", "">;
def Directive32 : SubtargetFeature<"", "DarwinDirective", "PPC::DIR_32", "">; def Directive32 : SubtargetFeature<"", "CPUDirective", "PPC::DIR_32", "">;
def Directive64 : SubtargetFeature<"", "DarwinDirective", "PPC::DIR_64", "">; def Directive64 : SubtargetFeature<"", "CPUDirective", "PPC::DIR_64", "">;
def DirectiveA2 : SubtargetFeature<"", "DarwinDirective", "PPC::DIR_A2", "">; def DirectiveA2 : SubtargetFeature<"", "CPUDirective", "PPC::DIR_A2", "">;
def DirectiveE500 : SubtargetFeature<"", "DarwinDirective", def DirectiveE500 : SubtargetFeature<"", "CPUDirective",
"PPC::DIR_E500", "">; "PPC::DIR_E500", "">;
def DirectiveE500mc : SubtargetFeature<"", "DarwinDirective", def DirectiveE500mc : SubtargetFeature<"", "CPUDirective",
"PPC::DIR_E500mc", "">; "PPC::DIR_E500mc", "">;
def DirectiveE5500 : SubtargetFeature<"", "DarwinDirective", def DirectiveE5500 : SubtargetFeature<"", "CPUDirective",
"PPC::DIR_E5500", "">; "PPC::DIR_E5500", "">;
def DirectivePwr3: SubtargetFeature<"", "DarwinDirective", "PPC::DIR_PWR3", "">; def DirectivePwr3: SubtargetFeature<"", "CPUDirective", "PPC::DIR_PWR3", "">;
def DirectivePwr4: SubtargetFeature<"", "DarwinDirective", "PPC::DIR_PWR4", "">; def DirectivePwr4: SubtargetFeature<"", "CPUDirective", "PPC::DIR_PWR4", "">;
def DirectivePwr5: SubtargetFeature<"", "DarwinDirective", "PPC::DIR_PWR5", "">; def DirectivePwr5: SubtargetFeature<"", "CPUDirective", "PPC::DIR_PWR5", "">;
def DirectivePwr5x def DirectivePwr5x
: SubtargetFeature<"", "DarwinDirective", "PPC::DIR_PWR5X", "">; : SubtargetFeature<"", "CPUDirective", "PPC::DIR_PWR5X", "">;
def DirectivePwr6: SubtargetFeature<"", "DarwinDirective", "PPC::DIR_PWR6", "">; def DirectivePwr6: SubtargetFeature<"", "CPUDirective", "PPC::DIR_PWR6", "">;
def DirectivePwr6x def DirectivePwr6x
: SubtargetFeature<"", "DarwinDirective", "PPC::DIR_PWR6X", "">; : SubtargetFeature<"", "CPUDirective", "PPC::DIR_PWR6X", "">;
def DirectivePwr7: SubtargetFeature<"", "DarwinDirective", "PPC::DIR_PWR7", "">; def DirectivePwr7: SubtargetFeature<"", "CPUDirective", "PPC::DIR_PWR7", "">;
def DirectivePwr8: SubtargetFeature<"", "DarwinDirective", "PPC::DIR_PWR8", "">; def DirectivePwr8: SubtargetFeature<"", "CPUDirective", "PPC::DIR_PWR8", "">;
def DirectivePwr9: SubtargetFeature<"", "DarwinDirective", "PPC::DIR_PWR9", "">; def DirectivePwr9: SubtargetFeature<"", "CPUDirective", "PPC::DIR_PWR9", "">;
def Feature64Bit : SubtargetFeature<"64bit","Has64BitSupport", "true", def Feature64Bit : SubtargetFeature<"64bit","Has64BitSupport", "true",
"Enable 64-bit instructions">; "Enable 64-bit instructions">;

View File

@ -1611,8 +1611,8 @@ void PPCDarwinAsmPrinter::EmitStartOfAsmFile(Module &M) {
unsigned Directive = PPC::DIR_NONE; unsigned Directive = PPC::DIR_NONE;
for (const Function &F : M) { for (const Function &F : M) {
const PPCSubtarget &STI = TM.getSubtarget<PPCSubtarget>(F); const PPCSubtarget &STI = TM.getSubtarget<PPCSubtarget>(F);
unsigned FDir = STI.getDarwinDirective(); unsigned FDir = STI.getCPUDirective();
Directive = Directive > FDir ? FDir : STI.getDarwinDirective(); Directive = Directive > FDir ? FDir : STI.getCPUDirective();
if (STI.hasMFOCRF() && Directive < PPC::DIR_970) if (STI.hasMFOCRF() && Directive < PPC::DIR_970)
Directive = PPC::DIR_970; Directive = PPC::DIR_970;
if (STI.hasAltivec() && Directive < PPC::DIR_7400) if (STI.hasAltivec() && Directive < PPC::DIR_7400)

View File

@ -158,7 +158,7 @@ unsigned PPCDispatchGroupSBHazardRecognizer::PreEmitNoops(SUnit *SU) {
// new group. // new group.
if (isLoadAfterStore(SU) && CurSlots < 6) { if (isLoadAfterStore(SU) && CurSlots < 6) {
unsigned Directive = unsigned Directive =
DAG->MF.getSubtarget<PPCSubtarget>().getDarwinDirective(); DAG->MF.getSubtarget<PPCSubtarget>().getCPUDirective();
// If we're using a special group-terminating nop, then we need only one. // If we're using a special group-terminating nop, then we need only one.
// FIXME: the same for P9 as previous gen until POWER9 scheduling is ready // FIXME: the same for P9 as previous gen until POWER9 scheduling is ready
if (Directive == PPC::DIR_PWR6 || Directive == PPC::DIR_PWR7 || if (Directive == PPC::DIR_PWR6 || Directive == PPC::DIR_PWR7 ||
@ -218,7 +218,7 @@ void PPCDispatchGroupSBHazardRecognizer::Reset() {
void PPCDispatchGroupSBHazardRecognizer::EmitNoop() { void PPCDispatchGroupSBHazardRecognizer::EmitNoop() {
unsigned Directive = unsigned Directive =
DAG->MF.getSubtarget<PPCSubtarget>().getDarwinDirective(); DAG->MF.getSubtarget<PPCSubtarget>().getCPUDirective();
// If the group has now filled all of its slots, or if we're using a special // If the group has now filled all of its slots, or if we're using a special
// group-terminating nop, the group is complete. // group-terminating nop, the group is complete.
// FIXME: the same for P9 as previous gen until POWER9 scheduling is ready // FIXME: the same for P9 as previous gen until POWER9 scheduling is ready

View File

@ -1201,7 +1201,7 @@ PPCTargetLowering::PPCTargetLowering(const PPCTargetMachine &TM,
if (Subtarget.isDarwin()) if (Subtarget.isDarwin())
setPrefFunctionAlignment(Align(16)); setPrefFunctionAlignment(Align(16));
switch (Subtarget.getDarwinDirective()) { switch (Subtarget.getCPUDirective()) {
default: break; default: break;
case PPC::DIR_970: case PPC::DIR_970:
case PPC::DIR_A2: case PPC::DIR_A2:
@ -1230,15 +1230,15 @@ PPCTargetLowering::PPCTargetLowering(const PPCTargetMachine &TM,
// The Freescale cores do better with aggressive inlining of memcpy and // The Freescale cores do better with aggressive inlining of memcpy and
// friends. GCC uses same threshold of 128 bytes (= 32 word stores). // friends. GCC uses same threshold of 128 bytes (= 32 word stores).
if (Subtarget.getDarwinDirective() == PPC::DIR_E500mc || if (Subtarget.getCPUDirective() == PPC::DIR_E500mc ||
Subtarget.getDarwinDirective() == PPC::DIR_E5500) { Subtarget.getCPUDirective() == PPC::DIR_E5500) {
MaxStoresPerMemset = 32; MaxStoresPerMemset = 32;
MaxStoresPerMemsetOptSize = 16; MaxStoresPerMemsetOptSize = 16;
MaxStoresPerMemcpy = 32; MaxStoresPerMemcpy = 32;
MaxStoresPerMemcpyOptSize = 8; MaxStoresPerMemcpyOptSize = 8;
MaxStoresPerMemmove = 32; MaxStoresPerMemmove = 32;
MaxStoresPerMemmoveOptSize = 8; MaxStoresPerMemmoveOptSize = 8;
} else if (Subtarget.getDarwinDirective() == PPC::DIR_A2) { } else if (Subtarget.getCPUDirective() == PPC::DIR_A2) {
// The A2 also benefits from (very) aggressive inlining of memcpy and // The A2 also benefits from (very) aggressive inlining of memcpy and
// friends. The overhead of a the function call, even when warm, can be // friends. The overhead of a the function call, even when warm, can be
// over one hundred cycles. // over one hundred cycles.
@ -11717,7 +11717,7 @@ unsigned PPCTargetLowering::combineRepeatedFPDivisors() const {
// Combine multiple FDIVs with the same divisor into multiple FMULs by the // Combine multiple FDIVs with the same divisor into multiple FMULs by the
// reciprocal if there are two or more FDIVs (for embedded cores with only // reciprocal if there are two or more FDIVs (for embedded cores with only
// one FP pipeline) for three or more FDIVs (for generic OOO cores). // one FP pipeline) for three or more FDIVs (for generic OOO cores).
switch (Subtarget.getDarwinDirective()) { switch (Subtarget.getCPUDirective()) {
default: default:
return 3; return 3;
case PPC::DIR_440: case PPC::DIR_440:
@ -14190,7 +14190,7 @@ void PPCTargetLowering::computeKnownBitsForTargetNode(const SDValue Op,
} }
Align PPCTargetLowering::getPrefLoopAlignment(MachineLoop *ML) const { Align PPCTargetLowering::getPrefLoopAlignment(MachineLoop *ML) const {
switch (Subtarget.getDarwinDirective()) { switch (Subtarget.getCPUDirective()) {
default: break; default: break;
case PPC::DIR_970: case PPC::DIR_970:
case PPC::DIR_PWR4: case PPC::DIR_PWR4:
@ -15369,7 +15369,7 @@ SDValue PPCTargetLowering::combineMUL(SDNode *N, DAGCombinerInfo &DCI) const {
return SDValue(); return SDValue();
auto IsProfitable = [this](bool IsNeg, bool IsAddOne, EVT VT) -> bool { auto IsProfitable = [this](bool IsNeg, bool IsAddOne, EVT VT) -> bool {
switch (this->Subtarget.getDarwinDirective()) { switch (this->Subtarget.getCPUDirective()) {
default: default:
// TODO: enhance the condition for subtarget before pwr8 // TODO: enhance the condition for subtarget before pwr8
return false; return false;

View File

@ -108,7 +108,7 @@ ScheduleHazardRecognizer *
PPCInstrInfo::CreateTargetHazardRecognizer(const TargetSubtargetInfo *STI, PPCInstrInfo::CreateTargetHazardRecognizer(const TargetSubtargetInfo *STI,
const ScheduleDAG *DAG) const { const ScheduleDAG *DAG) const {
unsigned Directive = unsigned Directive =
static_cast<const PPCSubtarget *>(STI)->getDarwinDirective(); static_cast<const PPCSubtarget *>(STI)->getCPUDirective();
if (Directive == PPC::DIR_440 || Directive == PPC::DIR_A2 || if (Directive == PPC::DIR_440 || Directive == PPC::DIR_A2 ||
Directive == PPC::DIR_E500mc || Directive == PPC::DIR_E5500) { Directive == PPC::DIR_E500mc || Directive == PPC::DIR_E5500) {
const InstrItineraryData *II = const InstrItineraryData *II =
@ -125,7 +125,7 @@ ScheduleHazardRecognizer *
PPCInstrInfo::CreateTargetPostRAHazardRecognizer(const InstrItineraryData *II, PPCInstrInfo::CreateTargetPostRAHazardRecognizer(const InstrItineraryData *II,
const ScheduleDAG *DAG) const { const ScheduleDAG *DAG) const {
unsigned Directive = unsigned Directive =
DAG->MF.getSubtarget<PPCSubtarget>().getDarwinDirective(); DAG->MF.getSubtarget<PPCSubtarget>().getCPUDirective();
// FIXME: Leaving this as-is until we have POWER9 scheduling info // FIXME: Leaving this as-is until we have POWER9 scheduling info
if (Directive == PPC::DIR_PWR7 || Directive == PPC::DIR_PWR8) if (Directive == PPC::DIR_PWR7 || Directive == PPC::DIR_PWR8)
@ -202,7 +202,7 @@ int PPCInstrInfo::getOperandLatency(const InstrItineraryData *ItinData,
// On some cores, there is an additional delay between writing to a condition // On some cores, there is an additional delay between writing to a condition
// register, and using it from a branch. // register, and using it from a branch.
unsigned Directive = Subtarget.getDarwinDirective(); unsigned Directive = Subtarget.getCPUDirective();
switch (Directive) { switch (Directive) {
default: break; default: break;
case PPC::DIR_7400: case PPC::DIR_7400:
@ -469,7 +469,7 @@ void PPCInstrInfo::insertNoop(MachineBasicBlock &MBB,
MachineBasicBlock::iterator MI) const { MachineBasicBlock::iterator MI) const {
// This function is used for scheduling, and the nop wanted here is the type // This function is used for scheduling, and the nop wanted here is the type
// that terminates dispatch groups on the POWER cores. // that terminates dispatch groups on the POWER cores.
unsigned Directive = Subtarget.getDarwinDirective(); unsigned Directive = Subtarget.getCPUDirective();
unsigned Opcode; unsigned Opcode;
switch (Directive) { switch (Directive) {
default: Opcode = PPC::NOP; break; default: Opcode = PPC::NOP; break;

View File

@ -61,7 +61,7 @@ PPCSubtarget::PPCSubtarget(const Triple &TT, const std::string &CPU,
void PPCSubtarget::initializeEnvironment() { void PPCSubtarget::initializeEnvironment() {
StackAlignment = Align(16); StackAlignment = Align(16);
DarwinDirective = PPC::DIR_NONE; CPUDirective = PPC::DIR_NONE;
HasMFOCRF = false; HasMFOCRF = false;
Has64BitSupport = false; Has64BitSupport = false;
Use64BitRegs = false; Use64BitRegs = false;
@ -190,7 +190,7 @@ bool PPCSubtarget::hasLazyResolverStub(const GlobalValue *GV) const {
bool PPCSubtarget::enableMachineScheduler() const { return true; } bool PPCSubtarget::enableMachineScheduler() const { return true; }
bool PPCSubtarget::enableMachinePipeliner() const { bool PPCSubtarget::enableMachinePipeliner() const {
return (DarwinDirective == PPC::DIR_PWR9) && EnableMachinePipeliner; return (CPUDirective == PPC::DIR_PWR9) && EnableMachinePipeliner;
} }
bool PPCSubtarget::useDFAforSMS() const { return false; } bool PPCSubtarget::useDFAforSMS() const { return false; }

View File

@ -84,7 +84,7 @@ protected:
InstrItineraryData InstrItins; InstrItineraryData InstrItins;
/// Which cpu directive was used. /// Which cpu directive was used.
unsigned DarwinDirective; unsigned CPUDirective;
/// Used by the ISel to turn in optimizations for POWER4-derived architectures /// Used by the ISel to turn in optimizations for POWER4-derived architectures
bool HasMFOCRF; bool HasMFOCRF;
@ -169,8 +169,11 @@ public:
Align getStackAlignment() const { return StackAlignment; } Align getStackAlignment() const { return StackAlignment; }
/// getDarwinDirective - Returns the -m directive specified for the cpu. /// getDarwinDirective - Returns the -m directive specified for the cpu.
unsigned getDarwinDirective() const { return CPUDirective; }
/// getCPUDirective - Returns the -m directive specified for the cpu.
/// ///
unsigned getDarwinDirective() const { return DarwinDirective; } unsigned getCPUDirective() const { return CPUDirective; }
/// getInstrItins - Return the instruction itineraries based on subtarget /// getInstrItins - Return the instruction itineraries based on subtarget
/// selection. /// selection.

View File

@ -554,7 +554,7 @@ bool PPCTTIImpl::isHardwareLoopProfitable(Loop *L, ScalarEvolution &SE,
void PPCTTIImpl::getUnrollingPreferences(Loop *L, ScalarEvolution &SE, void PPCTTIImpl::getUnrollingPreferences(Loop *L, ScalarEvolution &SE,
TTI::UnrollingPreferences &UP) { TTI::UnrollingPreferences &UP) {
if (ST->getDarwinDirective() == PPC::DIR_A2) { if (ST->getCPUDirective() == PPC::DIR_A2) {
// The A2 is in-order with a deep pipeline, and concatenation unrolling // The A2 is in-order with a deep pipeline, and concatenation unrolling
// helps expose latency-hiding opportunities to the instruction scheduler. // helps expose latency-hiding opportunities to the instruction scheduler.
UP.Partial = UP.Runtime = true; UP.Partial = UP.Runtime = true;
@ -580,7 +580,7 @@ bool PPCTTIImpl::enableAggressiveInterleaving(bool LoopHasReductions) {
// on combining the loads generated for consecutive accesses, and failure to // on combining the loads generated for consecutive accesses, and failure to
// do so is particularly expensive. This makes it much more likely (compared // do so is particularly expensive. This makes it much more likely (compared
// to only using concatenation unrolling). // to only using concatenation unrolling).
if (ST->getDarwinDirective() == PPC::DIR_A2) if (ST->getCPUDirective() == PPC::DIR_A2)
return true; return true;
return LoopHasReductions; return LoopHasReductions;
@ -650,7 +650,7 @@ unsigned PPCTTIImpl::getCacheLineSize() const {
return CacheLineSize; return CacheLineSize;
// On P7, P8 or P9 we have a cache line size of 128. // On P7, P8 or P9 we have a cache line size of 128.
unsigned Directive = ST->getDarwinDirective(); unsigned Directive = ST->getCPUDirective();
if (Directive == PPC::DIR_PWR7 || Directive == PPC::DIR_PWR8 || if (Directive == PPC::DIR_PWR7 || Directive == PPC::DIR_PWR8 ||
Directive == PPC::DIR_PWR9) Directive == PPC::DIR_PWR9)
return 128; return 128;
@ -666,7 +666,7 @@ unsigned PPCTTIImpl::getPrefetchDistance() const {
} }
unsigned PPCTTIImpl::getMaxInterleaveFactor(unsigned VF) { unsigned PPCTTIImpl::getMaxInterleaveFactor(unsigned VF) {
unsigned Directive = ST->getDarwinDirective(); unsigned Directive = ST->getCPUDirective();
// The 440 has no SIMD support, but floating-point instructions // The 440 has no SIMD support, but floating-point instructions
// have a 5-cycle latency, so unroll by 5x for latency hiding. // have a 5-cycle latency, so unroll by 5x for latency hiding.
if (Directive == PPC::DIR_440) if (Directive == PPC::DIR_440)