[llvm-commits] [llvm] r134457 - in /llvm/trunk: lib/Target/X86/InstPrinter/X86ATTInstPrinter.cpp lib/Target/X86/InstPrinter/X86ATTInstPrinter.h utils/TableGen/AsmWriterEmitter.cpp
Bill Wendling
wendling at apple.com
Wed Jul 6 11:29:55 PDT 2011
Hi Evan,
Does this mean that an InstAlias can no longer have a "Requires" clause added to it?
-bw
On Jul 5, 2011, at 7:02 PM, Evan Cheng wrote:
> Author: evancheng
> Date: Tue Jul 5 21:02:33 2011
> New Revision: 134457
>
> URL: http://llvm.org/viewvc/llvm-project?rev=134457&view=rev
> Log:
> Remove the AsmWriterEmitter (unused) feature that rely on TargetSubtargetInfo.
>
> Modified:
> llvm/trunk/lib/Target/X86/InstPrinter/X86ATTInstPrinter.cpp
> llvm/trunk/lib/Target/X86/InstPrinter/X86ATTInstPrinter.h
> llvm/trunk/utils/TableGen/AsmWriterEmitter.cpp
>
> Modified: llvm/trunk/lib/Target/X86/InstPrinter/X86ATTInstPrinter.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/InstPrinter/X86ATTInstPrinter.cpp?rev=134457&r1=134456&r2=134457&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/X86/InstPrinter/X86ATTInstPrinter.cpp (original)
> +++ llvm/trunk/lib/Target/X86/InstPrinter/X86ATTInstPrinter.cpp Tue Jul 5 21:02:33 2011
> @@ -33,9 +33,6 @@
>
> X86ATTInstPrinter::X86ATTInstPrinter(TargetMachine &TM, const MCAsmInfo &MAI)
> : MCInstPrinter(MAI) {
> - // Initialize the set of available features.
> - setAvailableFeatures(ComputeAvailableFeatures(
> - &TM.getSubtarget<X86Subtarget>()));
> }
>
> void X86ATTInstPrinter::printRegName(raw_ostream &OS,
>
> Modified: llvm/trunk/lib/Target/X86/InstPrinter/X86ATTInstPrinter.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/InstPrinter/X86ATTInstPrinter.h?rev=134457&r1=134456&r2=134457&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/X86/InstPrinter/X86ATTInstPrinter.h (original)
> +++ llvm/trunk/lib/Target/X86/InstPrinter/X86ATTInstPrinter.h Tue Jul 5 21:02:33 2011
> @@ -30,8 +30,6 @@
> virtual void printInst(const MCInst *MI, raw_ostream &OS);
> virtual StringRef getOpcodeName(unsigned Opcode) const;
>
> - // Methods used to print the alias of an instruction.
> - unsigned ComputeAvailableFeatures(const X86Subtarget *Subtarget) const;
> // Autogenerated by tblgen, returns true if we successfully printed an
> // alias.
> bool printAliasInstr(const MCInst *MI, raw_ostream &OS);
>
> Modified: llvm/trunk/utils/TableGen/AsmWriterEmitter.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/AsmWriterEmitter.cpp?rev=134457&r1=134456&r2=134457&view=diff
> ==============================================================================
> --- llvm/trunk/utils/TableGen/AsmWriterEmitter.cpp (original)
> +++ llvm/trunk/utils/TableGen/AsmWriterEmitter.cpp Tue Jul 5 21:02:33 2011
> @@ -606,92 +606,29 @@
> }
>
> namespace {
> -
> -/// SubtargetFeatureInfo - Helper class for storing information on a subtarget
> -/// feature which participates in instruction matching.
> -struct SubtargetFeatureInfo {
> - /// \brief The predicate record for this feature.
> - const Record *TheDef;
> -
> - /// \brief An unique index assigned to represent this feature.
> - unsigned Index;
> -
> - SubtargetFeatureInfo(const Record *D, unsigned Idx) : TheDef(D), Index(Idx) {}
> -
> - /// \brief The name of the enumerated constant identifying this feature.
> - std::string getEnumName() const {
> - return "Feature_" + TheDef->getName();
> - }
> -};
> -
> -struct AsmWriterInfo {
> - /// Map of Predicate records to their subtarget information.
> - std::map<const Record*, SubtargetFeatureInfo*> SubtargetFeatures;
> -
> - /// getSubtargetFeature - Lookup or create the subtarget feature info for the
> - /// given operand.
> - SubtargetFeatureInfo *getSubtargetFeature(const Record *Def) const {
> - assert(Def->isSubClassOf("Predicate") && "Invalid predicate type!");
> - std::map<const Record*, SubtargetFeatureInfo*>::const_iterator I =
> - SubtargetFeatures.find(Def);
> - return I == SubtargetFeatures.end() ? 0 : I->second;
> - }
> -
> - void addReqFeatures(const std::vector<Record*> &Features) {
> - for (std::vector<Record*>::const_iterator
> - I = Features.begin(), E = Features.end(); I != E; ++I) {
> - const Record *Pred = *I;
> -
> - // Ignore predicates that are not intended for the assembler.
> - if (!Pred->getValueAsBit("AssemblerMatcherPredicate"))
> - continue;
> -
> - if (Pred->getName().empty())
> - throw TGError(Pred->getLoc(), "Predicate has no name!");
> -
> - // Don't add the predicate again.
> - if (getSubtargetFeature(Pred))
> - continue;
> -
> - unsigned FeatureNo = SubtargetFeatures.size();
> - SubtargetFeatures[Pred] = new SubtargetFeatureInfo(Pred, FeatureNo);
> - assert(FeatureNo < 32 && "Too many subtarget features!");
> - }
> - }
> -
> - const SubtargetFeatureInfo *getFeatureInfo(const Record *R) {
> - return SubtargetFeatures[R];
> - }
> -};
> -
> // IAPrinter - Holds information about an InstAlias. Two InstAliases match if
> // they both have the same conditionals. In which case, we cannot print out the
> // alias for that pattern.
> class IAPrinter {
> - AsmWriterInfo &AWI;
> std::vector<std::string> Conds;
> std::map<StringRef, unsigned> OpMap;
> std::string Result;
> std::string AsmString;
> std::vector<Record*> ReqFeatures;
> public:
> - IAPrinter(AsmWriterInfo &Info, std::string R, std::string AS)
> - : AWI(Info), Result(R), AsmString(AS) {}
> + IAPrinter(std::string R, std::string AS)
> + : Result(R), AsmString(AS) {}
>
> void addCond(const std::string &C) { Conds.push_back(C); }
> - void addReqFeatures(const std::vector<Record*> &Features) {
> - AWI.addReqFeatures(Features);
> - ReqFeatures = Features;
> - }
>
> void addOperand(StringRef Op, unsigned Idx) { OpMap[Op] = Idx; }
> unsigned getOpIndex(StringRef Op) { return OpMap[Op]; }
> bool isOpMapped(StringRef Op) { return OpMap.find(Op) != OpMap.end(); }
>
> - bool print(raw_ostream &O) {
> + void print(raw_ostream &O) {
> if (Conds.empty() && ReqFeatures.empty()) {
> O.indent(6) << "return true;\n";
> - return false;
> + return;
> }
>
> O << "if (";
> @@ -706,27 +643,6 @@
> O << *I;
> }
>
> - if (!ReqFeatures.empty()) {
> - if (Conds.begin() != Conds.end()) {
> - O << " &&\n";
> - O.indent(8);
> - } else {
> - O << "if (";
> - }
> -
> - std::string Req;
> - raw_string_ostream ReqO(Req);
> -
> - for (std::vector<Record*>::iterator
> - I = ReqFeatures.begin(), E = ReqFeatures.end(); I != E; ++I) {
> - if (I != ReqFeatures.begin()) ReqO << " | ";
> - ReqO << AWI.getFeatureInfo(*I)->getEnumName();
> - }
> -
> - O << "(AvailableFeatures & (" << ReqO.str() << ")) == ("
> - << ReqO.str() << ')';
> - }
> -
> O << ") {\n";
> O.indent(6) << "// " << Result << "\n";
> O.indent(6) << "AsmString = \"" << AsmString << "\";\n";
> @@ -738,7 +654,6 @@
>
> O.indent(6) << "break;\n";
> O.indent(4) << '}';
> - return !ReqFeatures.empty();
> }
>
> bool operator==(const IAPrinter &RHS) {
> @@ -770,53 +685,6 @@
>
> } // end anonymous namespace
>
> -/// EmitSubtargetFeatureFlagEnumeration - Emit the subtarget feature flag
> -/// definitions.
> -static void EmitSubtargetFeatureFlagEnumeration(AsmWriterInfo &Info,
> - raw_ostream &O) {
> - O << "namespace {\n\n";
> - O << "// Flags for subtarget features that participate in "
> - << "alias instruction matching.\n";
> - O << "enum SubtargetFeatureFlag {\n";
> -
> - for (std::map<const Record*, SubtargetFeatureInfo*>::const_iterator
> - I = Info.SubtargetFeatures.begin(),
> - E = Info.SubtargetFeatures.end(); I != E; ++I) {
> - SubtargetFeatureInfo &SFI = *I->second;
> - O << " " << SFI.getEnumName() << " = (1 << " << SFI.Index << "),\n";
> - }
> -
> - O << " Feature_None = 0\n";
> - O << "};\n\n";
> - O << "} // end anonymous namespace\n\n";
> -}
> -
> -/// EmitComputeAvailableFeatures - Emit the function to compute the list of
> -/// available features given a subtarget.
> -static void EmitComputeAvailableFeatures(AsmWriterInfo &Info,
> - Record *AsmWriter,
> - CodeGenTarget &Target,
> - raw_ostream &O) {
> - std::string ClassName = AsmWriter->getValueAsString("AsmWriterClassName");
> -
> - O << "unsigned " << Target.getName() << ClassName << "::\n"
> - << "ComputeAvailableFeatures(const " << Target.getName()
> - << "Subtarget *Subtarget) const {\n";
> - O << " unsigned Features = 0;\n";
> -
> - for (std::map<const Record*, SubtargetFeatureInfo*>::const_iterator
> - I = Info.SubtargetFeatures.begin(),
> - E = Info.SubtargetFeatures.end(); I != E; ++I) {
> - SubtargetFeatureInfo &SFI = *I->second;
> - O << " if (" << SFI.TheDef->getValueAsString("CondString")
> - << ")\n";
> - O << " Features |= " << SFI.getEnumName() << ";\n";
> - }
> -
> - O << " return Features;\n";
> - O << "}\n\n";
> -}
> -
> static void EmitGetMapOperandNumber(raw_ostream &O) {
> O << "static unsigned getMapOperandNumber("
> << "const SmallVectorImpl<std::pair<StringRef, unsigned> > &OpMap,\n";
> @@ -960,7 +828,6 @@
> // A map of which conditions need to be met for each instruction operand
> // before it can be matched to the mnemonic.
> std::map<std::string, std::vector<IAPrinter*> > IAPrinterMap;
> - AsmWriterInfo AWI;
>
> for (std::map<std::string, std::vector<CodeGenInstAlias*> >::iterator
> I = AliasMap.begin(), E = AliasMap.end(); I != E; ++I) {
> @@ -977,9 +844,8 @@
> if (NumResultOps < CountNumOperands(CGA->AsmString))
> continue;
>
> - IAPrinter *IAP = new IAPrinter(AWI, CGA->Result->getAsString(),
> + IAPrinter *IAP = new IAPrinter(CGA->Result->getAsString(),
> CGA->AsmString);
> - IAP->addReqFeatures(CGA->TheDef->getValueAsListOfDefs("Predicates"));
>
> std::string Cond;
> Cond = std::string("MI->getNumOperands() == ") + llvm::utostr(LastOpNo);
> @@ -1049,9 +915,6 @@
> }
> }
>
> - EmitSubtargetFeatureFlagEnumeration(AWI, O);
> - EmitComputeAvailableFeatures(AWI, AsmWriter, Target, O);
> -
> std::string Header;
> raw_string_ostream HeaderO(Header);
>
> @@ -1061,7 +924,6 @@
>
> std::string Cases;
> raw_string_ostream CasesO(Cases);
> - bool NeedAvailableFeatures = false;
>
> for (std::map<std::string, std::vector<IAPrinter*> >::iterator
> I = IAPrinterMap.begin(), E = IAPrinterMap.end(); I != E; ++I) {
> @@ -1092,7 +954,7 @@
> II = UniqueIAPs.begin(), IE = UniqueIAPs.end(); II != IE; ++II) {
> IAPrinter *IAP = *II;
> CasesO.indent(4);
> - NeedAvailableFeatures |= IAP->print(CasesO);
> + IAP->print(CasesO);
> CasesO << '\n';
> }
>
> @@ -1112,8 +974,6 @@
> O << HeaderO.str();
> O.indent(2) << "StringRef AsmString;\n";
> O.indent(2) << "SmallVector<std::pair<StringRef, unsigned>, 4> OpMap;\n";
> - if (NeedAvailableFeatures)
> - O.indent(2) << "unsigned AvailableFeatures = getAvailableFeatures();\n\n";
> O.indent(2) << "switch (MI->getOpcode()) {\n";
> O.indent(2) << "default: return false;\n";
> O << CasesO.str();
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list