PPC: Split 64bit target feature into 64bit and 64bit-support (#157206)
This was being used for 2 different purposes.
The TargetMachine constructor prepends +64bit based on isPPC64
triples as a mode switch. The same feature name was also explicitly
added to different processors, making it impossible to perform a pure
feature check for whether 64-bit mode is enabled ir not. i.e.,
checkFeatures("+64bit") would be true even for ppc32 triples.
The comment in tablegen suggests it's relevant to track which processors
support 64-bit mode independently of whether that's the active compile
target, so replace that with a new feature.
This commit is contained in:
parent
f74184ccc9
commit
e5bbaa9c8f
@ -58,8 +58,13 @@ def DirectivePwrFuture
|
||||
|
||||
// Specifies that the selected CPU supports 64-bit instructions, regardless of
|
||||
// whether we are in 32-bit or 64-bit mode.
|
||||
def Feature64Bit : SubtargetFeature<"64bit","Has64BitSupport", "true",
|
||||
"Enable 64-bit instructions">;
|
||||
def Feature64BitSupport : SubtargetFeature<"64bit-support", "Has64BitSupport", "true",
|
||||
"Supports 64-bit instructions">;
|
||||
// 64-bit is enabled.
|
||||
def Feature64Bit : SubtargetFeature<"64bit", "IsPPC64", "true",
|
||||
"Enable 64-bit mode",
|
||||
[Feature64BitSupport]>;
|
||||
|
||||
def AIXOS: SubtargetFeature<"aix", "IsAIX", "true", "AIX OS">;
|
||||
def FeatureModernAIXAs
|
||||
: SubtargetFeature<"modern-aix-as", "HasModernAIXAs", "true",
|
||||
@ -85,7 +90,7 @@ def FeatureAltivec : SubtargetFeature<"altivec","HasAltivec", "true",
|
||||
def FeatureSPE : SubtargetFeature<"spe","HasSPE", "true",
|
||||
"Enable SPE instructions",
|
||||
[FeatureHardFloat]>;
|
||||
def FeatureEFPU2 : SubtargetFeature<"efpu2", "HasEFPU2", "true",
|
||||
def FeatureEFPU2 : SubtargetFeature<"efpu2", "HasEFPU2", "true",
|
||||
"Enable Embedded Floating-Point APU 2 instructions",
|
||||
[FeatureSPE]>;
|
||||
def FeatureMFOCRF : SubtargetFeature<"mfocrf","HasMFOCRF", "true",
|
||||
@ -429,7 +434,7 @@ def ProcessorFeatures {
|
||||
FeaturePOPCNTD,
|
||||
FeatureCMPB,
|
||||
FeatureLDBRX,
|
||||
Feature64Bit,
|
||||
Feature64BitSupport,
|
||||
/* Feature64BitRegs, */
|
||||
FeatureBPERMD,
|
||||
FeatureExtDiv,
|
||||
@ -667,13 +672,13 @@ def : ProcessorModel<"970", G5Model,
|
||||
[Directive970, FeatureAltivec,
|
||||
FeatureMFOCRF, FeatureFSqrt,
|
||||
FeatureFRES, FeatureFRSQRTE, FeatureSTFIWX,
|
||||
Feature64Bit /*, Feature64BitRegs */,
|
||||
Feature64BitSupport /*, Feature64BitRegs */,
|
||||
FeatureMFTB]>;
|
||||
def : ProcessorModel<"g5", G5Model,
|
||||
[Directive970, FeatureAltivec,
|
||||
FeatureMFOCRF, FeatureFSqrt, FeatureSTFIWX,
|
||||
FeatureFRES, FeatureFRSQRTE,
|
||||
Feature64Bit /*, Feature64BitRegs */,
|
||||
Feature64BitSupport /*, Feature64BitRegs */,
|
||||
FeatureMFTB, DeprecatedDST]>;
|
||||
def : ProcessorModel<"e500", PPCE500Model,
|
||||
[DirectiveE500,
|
||||
@ -694,41 +699,41 @@ def : ProcessorModel<"a2", PPCA2Model,
|
||||
FeatureSTFIWX, FeatureLFIWAX,
|
||||
FeatureFPRND, FeatureFPCVT, FeatureISEL,
|
||||
FeatureSlowPOPCNTD, FeatureCMPB, FeatureLDBRX,
|
||||
Feature64Bit /*, Feature64BitRegs */, FeatureMFTB,
|
||||
Feature64BitSupport /*, Feature64BitRegs */, FeatureMFTB,
|
||||
FeatureISA2_06]>;
|
||||
def : ProcessorModel<"pwr3", G5Model,
|
||||
[DirectivePwr3, FeatureAltivec,
|
||||
FeatureFRES, FeatureFRSQRTE, FeatureMFOCRF,
|
||||
FeatureSTFIWX, Feature64Bit]>;
|
||||
FeatureSTFIWX, Feature64BitSupport]>;
|
||||
def : ProcessorModel<"pwr4", G5Model,
|
||||
[DirectivePwr4, FeatureAltivec, FeatureMFOCRF,
|
||||
FeatureFSqrt, FeatureFRES, FeatureFRSQRTE,
|
||||
FeatureSTFIWX, Feature64Bit, FeatureMFTB]>;
|
||||
FeatureSTFIWX, Feature64BitSupport, FeatureMFTB]>;
|
||||
def : ProcessorModel<"pwr5", G5Model,
|
||||
[DirectivePwr5, FeatureAltivec, FeatureMFOCRF,
|
||||
FeatureFSqrt, FeatureFRE, FeatureFRES,
|
||||
FeatureFRSQRTE, FeatureFRSQRTES,
|
||||
FeatureSTFIWX, Feature64Bit,
|
||||
FeatureSTFIWX, Feature64BitSupport,
|
||||
FeatureMFTB, DeprecatedDST]>;
|
||||
def : ProcessorModel<"pwr5x", G5Model,
|
||||
[DirectivePwr5x, FeatureAltivec, FeatureMFOCRF,
|
||||
FeatureFSqrt, FeatureFRE, FeatureFRES,
|
||||
FeatureFRSQRTE, FeatureFRSQRTES,
|
||||
FeatureSTFIWX, FeatureFPRND, Feature64Bit,
|
||||
FeatureSTFIWX, FeatureFPRND, Feature64BitSupport,
|
||||
FeatureMFTB, DeprecatedDST]>;
|
||||
def : ProcessorModel<"pwr6", G5Model,
|
||||
[DirectivePwr6, FeatureAltivec,
|
||||
FeatureMFOCRF, FeatureFCPSGN, FeatureFSqrt, FeatureFRE,
|
||||
FeatureFRES, FeatureFRSQRTE, FeatureFRSQRTES,
|
||||
FeatureRecipPrec, FeatureSTFIWX, FeatureLFIWAX, FeatureCMPB,
|
||||
FeatureFPRND, Feature64Bit /*, Feature64BitRegs */,
|
||||
FeatureFPRND, Feature64BitSupport /*, Feature64BitRegs */,
|
||||
FeatureMFTB, DeprecatedDST]>;
|
||||
def : ProcessorModel<"pwr6x", G5Model,
|
||||
[DirectivePwr5x, FeatureAltivec, FeatureMFOCRF,
|
||||
FeatureFCPSGN, FeatureFSqrt, FeatureFRE, FeatureFRES,
|
||||
FeatureFRSQRTE, FeatureFRSQRTES, FeatureRecipPrec,
|
||||
FeatureSTFIWX, FeatureLFIWAX, FeatureCMPB,
|
||||
FeatureFPRND, Feature64Bit,
|
||||
FeatureFPRND, Feature64BitSupport,
|
||||
FeatureMFTB, DeprecatedDST]>;
|
||||
def : ProcessorModel<"pwr7", P7Model, ProcessorFeatures.P7Features>;
|
||||
def : ProcessorModel<"pwr8", P8Model, ProcessorFeatures.P8Features>;
|
||||
@ -746,7 +751,7 @@ def : ProcessorModel<"ppc64", G5Model,
|
||||
[Directive64, FeatureAltivec,
|
||||
FeatureMFOCRF, FeatureFSqrt, FeatureFRES,
|
||||
FeatureFRSQRTE, FeatureSTFIWX,
|
||||
Feature64Bit /*, Feature64BitRegs */,
|
||||
Feature64BitSupport /*, Feature64BitRegs */,
|
||||
FeatureMFTB]>;
|
||||
def : ProcessorModel<"ppc64le", P8Model, ProcessorFeatures.P8Features>;
|
||||
|
||||
|
||||
@ -54,10 +54,8 @@ PPCSubtarget &PPCSubtarget::initializeSubtargetDependencies(StringRef CPU,
|
||||
|
||||
PPCSubtarget::PPCSubtarget(const Triple &TT, StringRef CPU, StringRef TuneCPU,
|
||||
StringRef FS, const PPCTargetMachine &TM)
|
||||
: PPCGenSubtargetInfo(TT, CPU, TuneCPU, FS),
|
||||
IsPPC64(getTargetTriple().getArch() == Triple::ppc64 ||
|
||||
getTargetTriple().getArch() == Triple::ppc64le),
|
||||
TM(TM), FrameLowering(initializeSubtargetDependencies(CPU, TuneCPU, FS)),
|
||||
: PPCGenSubtargetInfo(TT, CPU, TuneCPU, FS), TM(TM),
|
||||
FrameLowering(initializeSubtargetDependencies(CPU, TuneCPU, FS)),
|
||||
InstrInfo(*this), TLInfo(TM, *this) {
|
||||
TSInfo = std::make_unique<PPCSelectionDAGInfo>();
|
||||
|
||||
@ -247,7 +245,6 @@ CodeModel::Model PPCSubtarget::getCodeModel(const TargetMachine &TM,
|
||||
}
|
||||
|
||||
bool PPCSubtarget::isELFv2ABI() const { return TM.isELFv2ABI(); }
|
||||
bool PPCSubtarget::isPPC64() const { return TM.isPPC64(); }
|
||||
|
||||
bool PPCSubtarget::isUsingPCRelativeCalls() const {
|
||||
return isPPC64() && hasPCRelativeMemops() && isELFv2ABI() &&
|
||||
|
||||
@ -93,7 +93,6 @@ protected:
|
||||
/// Which cpu directive was used.
|
||||
unsigned CPUDirective;
|
||||
|
||||
bool IsPPC64;
|
||||
bool IsLittleEndian;
|
||||
|
||||
POPCNTDKind HasPOPCNTD;
|
||||
@ -167,10 +166,6 @@ private:
|
||||
void initSubtargetFeatures(StringRef CPU, StringRef TuneCPU, StringRef FS);
|
||||
|
||||
public:
|
||||
/// isPPC64 - Return true if we are generating code for 64-bit pointer mode.
|
||||
///
|
||||
bool isPPC64() const;
|
||||
|
||||
// useSoftFloat - Return true if soft-float option is turned on.
|
||||
bool useSoftFloat() const {
|
||||
if (isAIXABI() && !HasHardFloat)
|
||||
|
||||
@ -1,17 +1,17 @@
|
||||
; fcfid and fctid should be generated when the 64bit feature is enabled, but not
|
||||
; otherwise.
|
||||
|
||||
; RUN: llc -verify-machineinstrs < %s -mattr=-vsx -mtriple=ppc32-- -mattr=+64bit | \
|
||||
; RUN: llc -verify-machineinstrs < %s -mattr=-vsx -mtriple=ppc32-- -mattr=+64bit-support | \
|
||||
; RUN: grep fcfid
|
||||
; RUN: llc -verify-machineinstrs < %s -mattr=-vsx -mtriple=ppc32-- -mattr=+64bit | \
|
||||
; RUN: llc -verify-machineinstrs < %s -mattr=-vsx -mtriple=ppc32-- -mattr=+64bit-support | \
|
||||
; RUN: grep fctidz
|
||||
; RUN: llc -verify-machineinstrs < %s -mattr=-vsx -mtriple=ppc32-- -mcpu=g5 | \
|
||||
; RUN: grep fcfid
|
||||
; RUN: llc -verify-machineinstrs < %s -mattr=-vsx -mtriple=ppc32-- -mcpu=g5 | \
|
||||
; RUN: grep fctidz
|
||||
; RUN: llc -verify-machineinstrs < %s -mattr=-vsx -mtriple=ppc32-- -mattr=-64bit | \
|
||||
; RUN: llc -verify-machineinstrs < %s -mattr=-vsx -mtriple=ppc32-- -mattr=-64bit-support | \
|
||||
; RUN: not grep fcfid
|
||||
; RUN: llc -verify-machineinstrs < %s -mattr=-vsx -mtriple=ppc32-- -mattr=-64bit | \
|
||||
; RUN: llc -verify-machineinstrs < %s -mattr=-vsx -mtriple=ppc32-- -mattr=-64bit-support | \
|
||||
; RUN: not grep fctidz
|
||||
; RUN: llc -verify-machineinstrs < %s -mattr=-vsx -mtriple=ppc32-- -mcpu=g4 | \
|
||||
; RUN: not grep fcfid
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user