diff --git a/include/llvm/MC/MCSubtargetInfo.h b/include/llvm/MC/MCSubtargetInfo.h index d25f5d92a8c..1778a6d13fb 100644 --- a/include/llvm/MC/MCSubtargetInfo.h +++ b/include/llvm/MC/MCSubtargetInfo.h @@ -73,9 +73,7 @@ public: /// setFeatureBits - Set the feature bits. /// - void setFeatureBits(const FeatureBitset &FeatureBits_) { - FeatureBits = FeatureBits_; - } + void setFeatureBits(FeatureBitset& FeatureBits_) { FeatureBits = FeatureBits_; } /// InitMCProcessorInfo - Set or change the CPU (optionally supplemented with /// feature string). Recompute feature bits and scheduling model. diff --git a/lib/Target/Mips/AsmParser/MipsAsmParser.cpp b/lib/Target/Mips/AsmParser/MipsAsmParser.cpp index 98d413ca4fe..0d08138f8a9 100644 --- a/lib/Target/Mips/AsmParser/MipsAsmParser.cpp +++ b/lib/Target/Mips/AsmParser/MipsAsmParser.cpp @@ -43,7 +43,7 @@ class MCInstrInfo; namespace { class MipsAssemblerOptions { public: - MipsAssemblerOptions(const FeatureBitset &Features_) : + MipsAssemblerOptions(uint64_t Features_) : ATReg(1), Reorder(true), Macro(true), Features(Features_) {} MipsAssemblerOptions(const MipsAssemblerOptions *Opts) { @@ -70,8 +70,8 @@ public: void setMacro() { Macro = true; } void setNoMacro() { Macro = false; } - const FeatureBitset &getFeatures() const { return Features; } - void setFeatures(const FeatureBitset &Features_) { Features = Features_; } + uint64_t getFeatures() const { return Features; } + void setFeatures(uint64_t Features_) { Features = Features_; } // Set of features that are either architecture features or referenced // by them (e.g.: FeatureNaN2008 implied by FeatureMips32r6). @@ -84,7 +84,7 @@ private: unsigned ATReg; bool Reorder; bool Macro; - FeatureBitset Features; + uint64_t Features; }; } @@ -327,23 +327,23 @@ class MipsAsmParser : public MCTargetAsmParser { STI.setFeatureBits(FeatureBits); setAvailableFeatures( ComputeAvailableFeatures(STI.ToggleFeature(ArchFeature))); - AssemblerOptions.back()->setFeatures(STI.getFeatureBits()); + AssemblerOptions.back()->setFeatures(getAvailableFeatures()); } void setFeatureBits(uint64_t Feature, StringRef FeatureString) { if (!(STI.getFeatureBits()[Feature])) { setAvailableFeatures( ComputeAvailableFeatures(STI.ToggleFeature(FeatureString))); - AssemblerOptions.back()->setFeatures(STI.getFeatureBits()); } + AssemblerOptions.back()->setFeatures(getAvailableFeatures()); } void clearFeatureBits(uint64_t Feature, StringRef FeatureString) { if (STI.getFeatureBits()[Feature]) { setAvailableFeatures( ComputeAvailableFeatures(STI.ToggleFeature(FeatureString))); - AssemblerOptions.back()->setFeatures(STI.getFeatureBits()); } + AssemblerOptions.back()->setFeatures(getAvailableFeatures()); } public: @@ -369,11 +369,11 @@ public: // Remember the initial assembler options. The user can not modify these. AssemblerOptions.push_back( - make_unique(STI.getFeatureBits())); + make_unique(getAvailableFeatures())); // Create an assembler options environment for the user to modify. AssemblerOptions.push_back( - make_unique(STI.getFeatureBits())); + make_unique(getAvailableFeatures())); getTargetStreamer().updateABIInfo(*this); @@ -3603,9 +3603,7 @@ bool MipsAsmParser::parseSetPopDirective() { return reportParseError(Loc, ".set pop with no .set push"); AssemblerOptions.pop_back(); - setAvailableFeatures( - ComputeAvailableFeatures(AssemblerOptions.back()->getFeatures())); - STI.setFeatureBits(AssemblerOptions.back()->getFeatures()); + setAvailableFeatures(AssemblerOptions.back()->getFeatures()); getTargetStreamer().emitDirectiveSetPop(); return false; @@ -3675,9 +3673,7 @@ bool MipsAsmParser::parseSetMips0Directive() { return reportParseError("unexpected token, expected end of statement"); // Reset assembler options to their initial values. - setAvailableFeatures( - ComputeAvailableFeatures(AssemblerOptions.front()->getFeatures())); - STI.setFeatureBits(AssemblerOptions.front()->getFeatures()); + setAvailableFeatures(AssemblerOptions.front()->getFeatures()); AssemblerOptions.back()->setFeatures(AssemblerOptions.front()->getFeatures()); getTargetStreamer().emitDirectiveSetMips0(); diff --git a/test/MC/Mips/set-push-pop-directives-bad.s b/test/MC/Mips/set-push-pop-directives-bad.s index 8994eea1c8b..53d8b230815 100644 --- a/test/MC/Mips/set-push-pop-directives-bad.s +++ b/test/MC/Mips/set-push-pop-directives-bad.s @@ -12,12 +12,3 @@ # CHECK: :[[@LINE-1]]:19: error: unexpected token, expected end of statement .set pop bar # CHECK: :[[@LINE-1]]:18: error: unexpected token, expected end of statement - - .set hardfloat - .set push - .set softfloat - add.s $f2, $f2, $f2 -# CHECK: :[[@LINE-1]]:9: error: instruction requires a CPU feature not currently enabled - .set pop - add.s $f2, $f2, $f2 -# CHECK-NOT: :[[@LINE-1]]:9: error: instruction requires a CPU feature not currently enabled diff --git a/test/MC/Mips/set-push-pop-directives.s b/test/MC/Mips/set-push-pop-directives.s index 3a0b2aecc58..5f55b7c7e4d 100644 --- a/test/MC/Mips/set-push-pop-directives.s +++ b/test/MC/Mips/set-push-pop-directives.s @@ -51,20 +51,3 @@ # CHECK: b 1336 # CHECK: nop # CHECK: addvi.b $w15, $w13, 18 - - .set push - .set dsp - lbux $7, $10($11) - .set pop - - .set push - .set dsp - lbux $7, $10($11) -# CHECK-NOT: :[[@LINE-1]]:5: error: instruction requires a CPU feature not currently enabled - .set pop - - .set push - .set dsp - lbux $7, $10($11) -# CHECK-NOT: :[[@LINE-1]]:5: error: instruction requires a CPU feature not currently enabled - .set pop