mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-02-01 05:01:59 +01:00
MC: Only allow changing feature bits in MCSubtargetInfo
Disallow all mutation of `MCSubtargetInfo` expect the feature bits. Besides deleting the assignment operators -- which were dead "code" -- this restricts `InitMCProcessorInfo()` to subclass initialization sequences, and exposes a new more limited function called `setDefaultFeatures()` for use by the ARMAsmParser `.cpu` directive. There's a small functional change here: ARMAsmParser used to adjust `MCSubtargetInfo::CPUSchedModel` as a side effect of calling `InitMCProcessorInfo()`, but I've removed that suspicious behaviour. Since the AsmParser shouldn't be doing any scheduling, there shouldn't be any observable change... llvm-svn: 241961
This commit is contained in:
parent
63c4366935
commit
613aeda5aa
@ -45,8 +45,11 @@ class MCSubtargetInfo {
|
|||||||
FeatureBitset FeatureBits; // Feature bits for current CPU + FS
|
FeatureBitset FeatureBits; // Feature bits for current CPU + FS
|
||||||
|
|
||||||
MCSubtargetInfo() = delete;
|
MCSubtargetInfo() = delete;
|
||||||
|
MCSubtargetInfo &operator=(MCSubtargetInfo &&) = delete;
|
||||||
|
MCSubtargetInfo &operator=(const MCSubtargetInfo &) = delete;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
MCSubtargetInfo(const MCSubtargetInfo &) = default;
|
||||||
MCSubtargetInfo(const Triple &TT, StringRef CPU, StringRef FS,
|
MCSubtargetInfo(const Triple &TT, StringRef CPU, StringRef FS,
|
||||||
ArrayRef<SubtargetFeatureKV> PF,
|
ArrayRef<SubtargetFeatureKV> PF,
|
||||||
ArrayRef<SubtargetFeatureKV> PD,
|
ArrayRef<SubtargetFeatureKV> PD,
|
||||||
@ -75,10 +78,17 @@ public:
|
|||||||
FeatureBits = FeatureBits_;
|
FeatureBits = FeatureBits_;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// InitMCProcessorInfo - Set or change the CPU (optionally supplemented with
|
protected:
|
||||||
/// feature string). Recompute feature bits and scheduling model.
|
/// Initialize the scheduling model and feature bits.
|
||||||
|
///
|
||||||
|
/// FIXME: Find a way to stick this in the constructor, since it should only
|
||||||
|
/// be called during initialization.
|
||||||
void InitMCProcessorInfo(StringRef CPU, StringRef FS);
|
void InitMCProcessorInfo(StringRef CPU, StringRef FS);
|
||||||
|
|
||||||
|
public:
|
||||||
|
/// Set the features to the default for the given CPU.
|
||||||
|
void setDefaultFeatures(StringRef CPU);
|
||||||
|
|
||||||
/// ToggleFeature - Toggle a feature and returns the re-computed feature
|
/// ToggleFeature - Toggle a feature and returns the re-computed feature
|
||||||
/// bits. This version does not change the implied bits.
|
/// bits. This version does not change the implied bits.
|
||||||
FeatureBitset ToggleFeature(uint64_t FB);
|
FeatureBitset ToggleFeature(uint64_t FB);
|
||||||
|
@ -17,18 +17,25 @@
|
|||||||
|
|
||||||
using namespace llvm;
|
using namespace llvm;
|
||||||
|
|
||||||
/// InitMCProcessorInfo - Set or change the CPU (optionally supplemented
|
static FeatureBitset getFeatures(StringRef CPU, StringRef FS,
|
||||||
/// with feature string). Recompute feature bits and scheduling model.
|
ArrayRef<SubtargetFeatureKV> ProcDesc,
|
||||||
void
|
ArrayRef<SubtargetFeatureKV> ProcFeatures) {
|
||||||
MCSubtargetInfo::InitMCProcessorInfo(StringRef CPU, StringRef FS) {
|
|
||||||
SubtargetFeatures Features(FS);
|
SubtargetFeatures Features(FS);
|
||||||
FeatureBits = Features.getFeatureBits(CPU, ProcDesc, ProcFeatures);
|
return Features.getFeatureBits(CPU, ProcDesc, ProcFeatures);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MCSubtargetInfo::InitMCProcessorInfo(StringRef CPU, StringRef FS) {
|
||||||
|
FeatureBits = getFeatures(CPU, FS, ProcDesc, ProcFeatures);
|
||||||
if (!CPU.empty())
|
if (!CPU.empty())
|
||||||
CPUSchedModel = &getSchedModelForCPU(CPU);
|
CPUSchedModel = &getSchedModelForCPU(CPU);
|
||||||
else
|
else
|
||||||
CPUSchedModel = &MCSchedModel::GetDefaultSchedModel();
|
CPUSchedModel = &MCSchedModel::GetDefaultSchedModel();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MCSubtargetInfo::setDefaultFeatures(StringRef CPU) {
|
||||||
|
FeatureBits = getFeatures(CPU, "", ProcDesc, ProcFeatures);
|
||||||
|
}
|
||||||
|
|
||||||
MCSubtargetInfo::MCSubtargetInfo(
|
MCSubtargetInfo::MCSubtargetInfo(
|
||||||
const Triple &TT, StringRef C, StringRef FS,
|
const Triple &TT, StringRef C, StringRef FS,
|
||||||
ArrayRef<SubtargetFeatureKV> PF, ArrayRef<SubtargetFeatureKV> PD,
|
ArrayRef<SubtargetFeatureKV> PF, ArrayRef<SubtargetFeatureKV> PD,
|
||||||
|
@ -9212,7 +9212,7 @@ bool ARMAsmParser::parseDirectiveCPU(SMLoc L) {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
STI.InitMCProcessorInfo(CPU, "");
|
STI.setDefaultFeatures(CPU);
|
||||||
setAvailableFeatures(ComputeAvailableFeatures(STI.getFeatureBits()));
|
setAvailableFeatures(ComputeAvailableFeatures(STI.getFeatureBits()));
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user