diff options
74 files changed, 1575 insertions, 2346 deletions
diff --git a/include/llvm/Bytecode/BytecodeHandler.h b/include/llvm/Bytecode/BytecodeHandler.h index a3e5bb7..c3ddc62 100644 --- a/include/llvm/Bytecode/BytecodeHandler.h +++ b/include/llvm/Bytecode/BytecodeHandler.h @@ -181,16 +181,14 @@ public: virtual void handleCompactionTableEnd() {} /// @brief Handle start of a symbol table - virtual void handleSymbolTableBegin( - Function* Func, ///< The function to which the ST belongs - SymbolTable* ST ///< The symbol table being filled + virtual void handleTypeSymbolTableBegin( + TypeSymbolTable* ST ///< The symbol table being filled ) {} - /// @brief Handle start of a symbol table plane - virtual void handleSymbolTablePlane( - unsigned TySlot, ///< The slotnum of the type plane - unsigned NumEntries, ///< Number of entries in the plane - const Type* Typ ///< The type of this type plane + /// @brief Handle start of a symbol table + virtual void handleValueSymbolTableBegin( + Function* Func, ///< The function to which the ST belongs or 0 for Mod + ValueSymbolTable* ST ///< The symbol table being filled ) {} /// @brief Handle a named type in the symbol table @@ -207,8 +205,11 @@ public: const std::string& name ///< Name of the value. ) {} - /// @brief Handle the end of a symbol table - virtual void handleSymbolTableEnd() {} + /// @brief Handle the end of a value symbol table + virtual void handleTypeSymbolTableEnd() {} + + /// @brief Handle the end of a type symbol table + virtual void handleValueSymbolTableEnd() {} /// @brief Handle the beginning of a function body virtual void handleFunctionBegin( @@ -233,6 +234,7 @@ public: unsigned Opcode, ///< Opcode of the instruction const Type* iType, ///< Instruction type std::vector<unsigned>& Operands, ///< Vector of slot # operands + Instruction *Inst, ///< The resulting instruction unsigned Length ///< Length of instruction in bc bytes ) { return false; } diff --git a/include/llvm/Function.h b/include/llvm/Function.h index f2a56ac..4cfb676 100644 --- a/include/llvm/Function.h +++ b/include/llvm/Function.h @@ -63,7 +63,7 @@ private: BasicBlockListType BasicBlocks; // The basic blocks ArgumentListType ArgumentList; // The formal arguments - SymbolTable *SymTab; + ValueSymbolTable *SymTab; unsigned CallingConvention; friend class SymbolTableListTraits<Function, Module, Module>; @@ -156,8 +156,8 @@ public: /// getSymbolTable() - Return the symbol table... /// - inline SymbolTable &getValueSymbolTable() { return *SymTab; } - inline const SymbolTable &getValueSymbolTable() const { return *SymTab; } + inline ValueSymbolTable &getValueSymbolTable() { return *SymTab; } + inline const ValueSymbolTable &getValueSymbolTable() const { return *SymTab; } //===--------------------------------------------------------------------===// diff --git a/include/llvm/LinkAllPasses.h b/include/llvm/LinkAllPasses.h index 01e0499..1b93220 100644 --- a/include/llvm/LinkAllPasses.h +++ b/include/llvm/LinkAllPasses.h @@ -64,7 +64,6 @@ namespace { (void) llvm::createEmitFunctionTablePass(); (void) llvm::createFunctionInliningPass(); (void) llvm::createFunctionProfilerPass(); - (void) llvm::createFunctionResolvingPass(); (void) llvm::createGCSEPass(); (void) llvm::createGlobalDCEPass(); (void) llvm::createGlobalOptimizerPass(); diff --git a/include/llvm/Module.h b/include/llvm/Module.h index 7470deb..6992563 100644 --- a/include/llvm/Module.h +++ b/include/llvm/Module.h @@ -23,8 +23,6 @@ namespace llvm { class GlobalVariable; class GlobalValueRefMap; // Used by ConstantVals.cpp class FunctionType; -class SymbolTable; -class TypeSymbolTable; template<> struct ilist_traits<Function> : public SymbolTableListTraits<Function, Module, Module> { @@ -91,7 +89,7 @@ private: FunctionListType FunctionList; ///< The Functions in the module LibraryListType LibraryList; ///< The Libraries needed by the module std::string GlobalScopeAsm; ///< Inline Asm at global scope. - SymbolTable *ValSymTab; ///< Symbol table for values + ValueSymbolTable *ValSymTab; ///< Symbol table for values TypeSymbolTable *TypeSymTab; ///< Symbol table for types std::string ModuleID; ///< Human readable identifier for the module std::string TargetTriple; ///< Platform target triple Module compiled on @@ -178,17 +176,19 @@ public: /// getFunction - Look up the specified function in the module symbol table. /// If it does not exist, return null. - Function *getFunction(const std::string &Name, const FunctionType *Ty); + Function *getFunction(const std::string &Name) const; /// getMainFunction - This function looks up main efficiently. This is such a /// common case, that it is a method in Module. If main cannot be found, a /// null pointer is returned. - Function *getMainFunction(); + Function *getMainFunction() { return getFunction("main"); } /// getNamedFunction - Return the first function in the module with the /// specified name, of arbitrary type. This method returns null if a function /// with the specified name is not found. - Function *getNamedFunction(const std::string &Name) const; + Function *getNamedFunction(const std::string &Name) const { + return getFunction(Name); + } /// @} /// @name Global Variable Accessors @@ -200,13 +200,15 @@ public: /// the top-level PointerType, which represents the address of the global. /// If AllowInternal is set to true, this function will return types that /// have InternalLinkage. By default, these types are not returned. - GlobalVariable *getGlobalVariable(const std::string &Name, const Type *Ty, - bool AllowInternal = false); + GlobalVariable *getGlobalVariable(const std::string &Name, + bool AllowInternal = false) const; /// getNamedGlobal - Return the first global variable in the module with the /// specified name, of arbitrary type. This method returns null if a global /// with the specified name is not found. - GlobalVariable *getNamedGlobal(const std::string &Name) const; + GlobalVariable *getNamedGlobal(const std::string &Name) const { + return getGlobalVariable(Name, true); + } /// @} /// @name Type Accessors @@ -238,9 +240,9 @@ public: /// Get the Module's list of functions. FunctionListType &getFunctionList() { return FunctionList; } /// Get the symbol table of global variable and function identifiers - const SymbolTable &getValueSymbolTable() const { return *ValSymTab; } + const ValueSymbolTable &getValueSymbolTable() const { return *ValSymTab; } /// Get the Module's symbol table of global variable and function identifiers. - SymbolTable &getValueSymbolTable() { return *ValSymTab; } + ValueSymbolTable &getValueSymbolTable() { return *ValSymTab; } /// Get the symbol table of types const TypeSymbolTable &getTypeSymbolTable() const { return *TypeSymTab; } /// Get the Module's symbol table of types diff --git a/include/llvm/SymbolTable.h b/include/llvm/SymbolTable.h deleted file mode 100644 index 6451f9c..0000000 --- a/include/llvm/SymbolTable.h +++ /dev/null @@ -1,257 +0,0 @@ -//===-- llvm/SymbolTable.h - Implement a type plane'd symtab ----*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file was developed by the LLVM research group and re-written by Reid -// Spencer. It is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file implements the main symbol table for LLVM. -// -//===----------------------------------------------------------------------===// - -#ifndef LLVM_SYMBOL_TABLE_H -#define LLVM_SYMBOL_TABLE_H - -#include "llvm/Value.h" -#include "llvm/Support/DataTypes.h" -#include <map> - -namespace llvm { - -/// This class provides a symbol table of name/value pairs that is broken -/// up by type. For each Type* there is a "plane" of name/value pairs in -/// the symbol table. Identical types may have overlapping symbol names as -/// long as they are distinct. The SymbolTable also tracks, separately, a -/// map of name/type pairs. This allows types to be named. Types are treated -/// distinctly from Values. -/// -/// The SymbolTable provides several utility functions for answering common -/// questions about its contents as well as an iterator interface for -/// directly iterating over the contents. To reduce confusion, the terms -/// "type", "value", and "plane" are used consistently. For example, -/// There is a TypeMap typedef that is the mapping of names to Types. -/// Similarly there is a ValueMap typedef that is the mapping of -/// names to Values. Finally, there is a PlaneMap typedef that is the -/// mapping of types to planes of ValueMap. This is the basic structure -/// of the symbol table. When you call type_begin() you're asking -/// for an iterator at the start of the TypeMap. When you call -/// plane_begin(), you're asking for an iterator at the start of -/// the PlaneMap. Finally, when you call value_begin(), you're asking -/// for an iterator at the start of a ValueMap for a specific type -/// plane. -class SymbolTable : public AbstractTypeUser { - -/// @name Types -/// @{ -public: - /// @brief A mapping of names to values. - typedef std::map<const std::string, Value *> ValueMap; - - /// @brief An iterator over a ValueMap. - typedef ValueMap::iterator value_iterator; - - /// @brief A const_iterator over a ValueMap. - typedef ValueMap::const_iterator value_const_iterator; - - /// @brief A mapping of types to names to values (type planes). - typedef std::map<const Type *, ValueMap> PlaneMap; - - /// @brief An iterator over the type planes. - typedef PlaneMap::iterator plane_iterator; - - /// @brief A const_iterator over the type planes - typedef PlaneMap::const_iterator plane_const_iterator; - -/// @} -/// @name Constructors -/// @{ -public: - - SymbolTable() : LastUnique(0) {} - ~SymbolTable(); - -/// @} -/// @name Accessors -/// @{ -public: - - /// This method finds the value with the given \p name in the - /// type plane \p Ty and returns it. This method will not find any - /// Types, only Values. Use lookupType to find Types by name. - /// @returns null on failure, otherwise the Value associated with - /// the \p name in type plane \p Ty. - /// @brief Lookup a named, typed value. - Value *lookup(const Type *Ty, const std::string &name) const; - - /// @returns true iff the type map and the type plane are both not - /// empty. - /// @brief Determine if the symbol table is empty - inline bool isEmpty() const { return pmap.empty(); } - - /// Given a base name, return a string that is either equal to it or - /// derived from it that does not already occur in the symbol table - /// for the specified type. - /// @brief Get a name unique to this symbol table - std::string getUniqueName(const Type *Ty, - const std::string &BaseName) const; - - /// This function can be used from the debugger to display the - /// content of the symbol table while debugging. - /// @brief Print out symbol table on stderr - void dump() const; - -/// @} -/// @name Iteration -/// @{ -public: - - /// Get an iterator that starts at the beginning of the type planes. - /// The iterator will iterate over the Type/ValueMap pairs in the - /// type planes. - inline plane_iterator plane_begin() { return pmap.begin(); } - - /// Get a const_iterator that starts at the beginning of the type - /// planes. The iterator will iterate over the Type/ValueMap pairs - /// in the type planes. - inline plane_const_iterator plane_begin() const { return pmap.begin(); } - - /// Get an iterator at the end of the type planes. This serves as - /// the marker for end of iteration over the type planes. - inline plane_iterator plane_end() { return pmap.end(); } - - /// Get a const_iterator at the end of the type planes. This serves as - /// the marker for end of iteration over the type planes. - inline plane_const_iterator plane_end() const { return pmap.end(); } - - /// Get an iterator that starts at the beginning of a type plane. - /// The iterator will iterate over the name/value pairs in the type plane. - /// @note The type plane must already exist before using this. - inline value_iterator value_begin(const Type *Typ) { - assert(Typ && "Can't get value iterator with null type!"); - return pmap.find(Typ)->second.begin(); - } - - /// Get a const_iterator that starts at the beginning of a type plane. - /// The iterator will iterate over the name/value pairs in the type plane. - /// @note The type plane must already exist before using this. - inline value_const_iterator value_begin(const Type *Typ) const { - assert(Typ && "Can't get value iterator with null type!"); - return pmap.find(Typ)->second.begin(); - } - - /// Get an iterator to the end of a type plane. This serves as the marker - /// for end of iteration of the type plane. - /// @note The type plane must already exist before using this. - inline value_iterator value_end(const Type *Typ) { - assert(Typ && "Can't get value iterator with null type!"); - return pmap.find(Typ)->second.end(); - } - - /// Get a const_iterator to the end of a type plane. This serves as the - /// marker for end of iteration of the type plane. - /// @note The type plane must already exist before using this. - inline value_const_iterator value_end(const Type *Typ) const { - assert(Typ && "Can't get value iterator with null type!"); - return pmap.find(Typ)->second.end(); - } - - /// This method returns a plane_const_iterator for iteration over - /// the type planes starting at a specific plane, given by \p Ty. - /// @brief Find a type plane. - inline plane_const_iterator find(const Type* Typ) const { - assert(Typ && "Can't find type plane with null type!"); - return pmap.find(Typ); - } - - /// This method returns a plane_iterator for iteration over the - /// type planes starting at a specific plane, given by \p Ty. - /// @brief Find a type plane. - inline plane_iterator find(const Type* Typ) { - assert(Typ && "Can't find type plane with null type!"); - return pmap.find(Typ); - } - - -/// @} -/// @name Mutators -/// @{ -public: - - /// This method will strip the symbol table of its names leaving the type and - /// values. - /// @brief Strip the symbol table. - bool strip(); - -/// @} -/// @name Mutators used by Value::setName and other LLVM internals. -/// @{ -public: - - /// This method adds the provided value \p N to the symbol table. The Value - /// must have both a name and a type which are extracted and used to place the - /// value in the correct type plane under the value's name. - /// @brief Add a named value to the symbol table - inline void insert(Value *Val) { - assert(Val && "Can't insert null type into symbol table!"); - assert(Val->hasName() && "Value must be named to go into symbol table!"); - insertEntry(Val->getName(), Val->getType(), Val); - } - - /// This method removes a named value from the symbol table. The type and name - /// of the Value are extracted from \p N and used to lookup the Value in the - /// correct type plane. If the Value is not in the symbol table, this method - /// silently ignores the request. - /// @brief Remove a named value from the symbol table. - void remove(Value* Val); - - /// changeName - Given a value with a non-empty name, remove its existing - /// entry from the symbol table and insert a new one for Name. This is - /// equivalent to doing "remove(V), V->Name = Name, insert(V)", but is faster, - /// and will not temporarily remove the symbol table plane if V is the last - /// value in the symtab with that name (which could invalidate iterators to - /// that plane). - void changeName(Value *V, const std::string &Name); - -/// @} -/// @name Internal Methods -/// @{ -private: - /// @brief Insert a value into the symbol table with the specified name. - void insertEntry(const std::string &Name, const Type *Ty, Value *V); - - /// This function is called when one of the types in the type plane - /// is refined. - virtual void refineAbstractType(const DerivedType *OldTy, const Type *NewTy); - - /// This function markes a type as being concrete (defined). - virtual void typeBecameConcrete(const DerivedType *AbsTy); - -/// @} -/// @name Internal Data -/// @{ -private: - - /// This is the main content of the symbol table. It provides - /// separate type planes for named values. That is, each named - /// value is organized into a separate dictionary based on - /// Type. This means that the same name can be used for different - /// types without conflict. - /// @brief The mapping of types to names to values. - PlaneMap pmap; - - /// This value is used to retain the last unique value used - /// by getUniqueName to generate unique names. - mutable uint32_t LastUnique; -/// @} - -}; - -} // End llvm namespace - -// vim: sw=2 - -#endif - diff --git a/include/llvm/Transforms/IPO.h b/include/llvm/Transforms/IPO.h index b24857e..6ab6d7b 100644 --- a/include/llvm/Transforms/IPO.h +++ b/include/llvm/Transforms/IPO.h @@ -87,19 +87,6 @@ ModulePass *createFunctionExtractionPass(Function *F, bool deleteFn = false, //===----------------------------------------------------------------------===// -/// FunctionResolvingPass - Go over the functions that are in the module and -/// look for functions that have the same name. More often than not, there will -/// be things like: -/// void "foo"(...) -/// void "foo"(int, int) -/// because of the way things are declared in C. If this is the case, patch -/// things up. -/// -/// This is an interprocedural pass. -/// -ModulePass *createFunctionResolvingPass(); - -//===----------------------------------------------------------------------===// /// createFunctionInliningPass - Return a new pass object that uses a heuristic /// to inline direct function calls to small functions. /// @@ -163,20 +150,24 @@ FunctionPass *createLoopExtractorPass(); /// FunctionPass *createSingleLoopExtractorPass(); -// createBlockExtractorPass - This pass extracts all blocks (except those -// specified in the argument list) from the functions in the module. -// +/// createBlockExtractorPass - This pass extracts all blocks (except those +/// specified in the argument list) from the functions in the module. +/// ModulePass *createBlockExtractorPass(std::vector<BasicBlock*> &BTNE); -// createOptimizeWellKnownCallsPass - This pass optimizes specific calls to -// specific well-known (library) functions. +/// createOptimizeWellKnownCallsPass - This pass optimizes specific calls to +/// specific well-known (library) functions. ModulePass *createSimplifyLibCallsPass(); -// createIndMemRemPass - This pass removes potential indirect calls of -// malloc and free +/// createIndMemRemPass - This pass removes potential indirect calls of +/// malloc and free ModulePass *createIndMemRemPass(); +/// createStripDeadPrototypesPass - This pass removes any function declarations +/// (prototypes) that are not used. +ModulePass *createStripDeadPrototypesPass(); + } // End llvm namespace #endif diff --git a/include/llvm/Value.h b/include/llvm/Value.h index e1d26bb..63af0f7 100644 --- a/include/llvm/Value.h +++ b/include/llvm/Value.h @@ -31,7 +31,8 @@ class GlobalValue; class Function; class GlobalVariable; class InlineAsm; -class SymbolTable; +class ValueSymbolTable; +class TypeSymbolTable; //===----------------------------------------------------------------------===// // Value Class diff --git a/include/llvm/ValueSymbolTable.h b/include/llvm/ValueSymbolTable.h index 515e054..edc4490 100644 --- a/include/llvm/ValueSymbolTable.h +++ b/include/llvm/ValueSymbolTable.h @@ -72,6 +72,12 @@ public: /// @brief Get a name unique to this symbol table std::string getUniqueName(const std::string &BaseName) const; + /// @return 1 if the name is in the symbol table, 0 otherwise + /// @brief Determine if a name is in the symbol table + ValueMap::size_type count(const std::string &name) const { + return vmap.count(name); + } + /// This function can be used from the debugger to display the /// content of the symbol table while debugging. /// @brief Print out symbol table on stderr @@ -111,10 +117,10 @@ public: /// This method removes a value from the symbol table. The name of the /// Value is extracted from \p Val and used to lookup the Value in the /// symbol table. If the Value is not in the symbol table, this method - /// returns false. - /// @returns true if \p Val was successfully erased, false otherwise + /// returns false. \p Val is not deleted, just removed from the symbol table. + /// @returns true if \p Val was successfully removed, false otherwise /// @brief Remove a value from the symbol table. - bool erase(Value* Val); + bool remove(Value* Val); /// Given a value with a non-empty name, remove its existing /// entry from the symbol table and insert a new one for Name. This is diff --git a/lib/AsmParser/Lexer.cpp.cvs b/lib/AsmParser/Lexer.cpp.cvs index f2e3e13..9257cce 100644 --- a/lib/AsmParser/Lexer.cpp.cvs +++ b/lib/AsmParser/Lexer.cpp.cvs @@ -869,7 +869,7 @@ goto find_rule; \ #define YY_MORE_ADJ 0 #define YY_RESTORE_YY_MORE_OFFSET char *yytext; -#line 1 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 1 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" #define INITIAL 0 /*===-- Lexer.l - Scanner for llvm assembly files --------------*- C++ -*--===// // @@ -884,7 +884,7 @@ char *yytext; // //===----------------------------------------------------------------------===*/ #define YY_NEVER_INTERACTIVE 1 -#line 28 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 28 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" #include "ParserInternals.h" #include "llvm/Module.h" #include <list> @@ -1168,7 +1168,7 @@ YY_DECL register char *yy_cp = NULL, *yy_bp = NULL; register int yy_act; -#line 189 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 189 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" #line 1175 "Lexer.cpp" @@ -1264,252 +1264,252 @@ do_action: /* This label is used only to access EOF actions. */ { /* beginning of action switch */ case 1: YY_RULE_SETUP -#line 191 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 191 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { /* Ignore comments for now */ } YY_BREAK case 2: YY_RULE_SETUP -#line 193 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 193 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { return BEGINTOK; } YY_BREAK case 3: YY_RULE_SETUP -#line 194 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 194 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { return ENDTOK; } YY_BREAK case 4: YY_RULE_SETUP -#line 195 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 195 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { return TRUETOK; } YY_BREAK case 5: YY_RULE_SETUP -#line 196 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 196 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { return FALSETOK; } YY_BREAK case 6: YY_RULE_SETUP -#line 197 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 197 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { return DECLARE; } YY_BREAK case 7: YY_RULE_SETUP -#line 198 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 198 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { return DEFINE; } YY_BREAK case 8: YY_RULE_SETUP -#line 199 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 199 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { return GLOBAL; } YY_BREAK case 9: YY_RULE_SETUP -#line 200 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 200 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { return CONSTANT; } YY_BREAK case 10: YY_RULE_SETUP -#line 201 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 201 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { return INTERNAL; } YY_BREAK case 11: YY_RULE_SETUP -#line 202 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 202 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { return LINKONCE; } YY_BREAK case 12: YY_RULE_SETUP -#line 203 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 203 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { return WEAK; } YY_BREAK case 13: YY_RULE_SETUP -#line 204 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 204 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { return APPENDING; } YY_BREAK case 14: YY_RULE_SETUP -#line 205 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 205 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { return DLLIMPORT; } YY_BREAK case 15: YY_RULE_SETUP -#line 206 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 206 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { return DLLEXPORT; } YY_BREAK case 16: YY_RULE_SETUP -#line 207 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 207 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { return HIDDEN; } YY_BREAK case 17: YY_RULE_SETUP -#line 208 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 208 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { return EXTERN_WEAK; } YY_BREAK case 18: YY_RULE_SETUP -#line 209 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 209 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { return EXTERNAL; } YY_BREAK case 19: YY_RULE_SETUP -#line 210 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 210 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { return IMPLEMENTATION; } YY_BREAK case 20: YY_RULE_SETUP -#line 211 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 211 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { return ZEROINITIALIZER; } YY_BREAK case 21: YY_RULE_SETUP -#line 212 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 212 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { return DOTDOTDOT; } YY_BREAK case 22: YY_RULE_SETUP -#line 213 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 213 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { return UNDEF; } YY_BREAK case 23: YY_RULE_SETUP -#line 214 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 214 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { return NULL_TOK; } YY_BREAK case 24: YY_RULE_SETUP -#line 215 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 215 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { return TO; } YY_BREAK case 25: YY_RULE_SETUP -#line 216 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 216 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { return TAIL; } YY_BREAK case 26: YY_RULE_SETUP -#line 217 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 217 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { return TARGET; } YY_BREAK case 27: YY_RULE_SETUP -#line 218 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 218 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { return TRIPLE; } YY_BREAK case 28: YY_RULE_SETUP -#line 219 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 219 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { return DEPLIBS; } YY_BREAK case 29: YY_RULE_SETUP -#line 220 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 220 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { return DATALAYOUT; } YY_BREAK case 30: YY_RULE_SETUP -#line 221 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 221 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { return VOLATILE; } YY_BREAK case 31: YY_RULE_SETUP -#line 222 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 222 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { return ALIGN; } YY_BREAK case 32: YY_RULE_SETUP -#line 223 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 223 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { return SECTION; } YY_BREAK case 33: YY_RULE_SETUP -#line 224 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 224 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { return MODULE; } YY_BREAK case 34: YY_RULE_SETUP -#line 225 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 225 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { return ASM_TOK; } YY_BREAK case 35: YY_RULE_SETUP -#line 226 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 226 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { return SIDEEFFECT; } YY_BREAK case 36: YY_RULE_SETUP -#line 228 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 228 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { return CC_TOK; } YY_BREAK case 37: YY_RULE_SETUP -#line 229 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 229 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { return CCC_TOK; } YY_BREAK case 38: YY_RULE_SETUP -#line 230 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 230 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { return FASTCC_TOK; } YY_BREAK case 39: YY_RULE_SETUP -#line 231 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 231 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { return COLDCC_TOK; } YY_BREAK case 40: YY_RULE_SETUP -#line 232 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 232 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { return X86_STDCALLCC_TOK; } YY_BREAK case 41: YY_RULE_SETUP -#line 233 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 233 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { return X86_FASTCALLCC_TOK; } YY_BREAK case 42: YY_RULE_SETUP -#line 235 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 235 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { return INREG; } YY_BREAK case 43: YY_RULE_SETUP -#line 236 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 236 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { return SRET; } YY_BREAK case 44: YY_RULE_SETUP -#line 238 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 238 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { RET_TY(Type::VoidTy, VOID); } YY_BREAK case 45: YY_RULE_SETUP -#line 239 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 239 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { RET_TY(Type::FloatTy, FLOAT); } YY_BREAK case 46: YY_RULE_SETUP -#line 240 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 240 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { RET_TY(Type::DoubleTy,DOUBLE);} YY_BREAK case 47: YY_RULE_SETUP -#line 241 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 241 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { RET_TY(Type::LabelTy, LABEL); } YY_BREAK case 48: YY_RULE_SETUP -#line 242 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 242 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { return TYPE; } YY_BREAK case 49: YY_RULE_SETUP -#line 243 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 243 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { return OPAQUE; } YY_BREAK case 50: YY_RULE_SETUP -#line 244 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 244 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { uint64_t NumBits = atoull(yytext+1); if (NumBits < IntegerType::MIN_INT_BITS || NumBits > IntegerType::MAX_INT_BITS) @@ -1520,347 +1520,347 @@ YY_RULE_SETUP YY_BREAK case 51: YY_RULE_SETUP -#line 252 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 252 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { RET_TOK(BinaryOpVal, Add, ADD); } YY_BREAK case 52: YY_RULE_SETUP -#line 253 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 253 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { RET_TOK(BinaryOpVal, Sub, SUB); } YY_BREAK case 53: YY_RULE_SETUP -#line 254 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 254 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { RET_TOK(BinaryOpVal, Mul, MUL); } YY_BREAK case 54: YY_RULE_SETUP -#line 255 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 255 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { RET_TOK(BinaryOpVal, UDiv, UDIV); } YY_BREAK case 55: YY_RULE_SETUP -#line 256 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 256 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { RET_TOK(BinaryOpVal, SDiv, SDIV); } YY_BREAK case 56: YY_RULE_SETUP -#line 257 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 257 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { RET_TOK(BinaryOpVal, FDiv, FDIV); } YY_BREAK case 57: YY_RULE_SETUP -#line 258 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 258 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { RET_TOK(BinaryOpVal, URem, UREM); } YY_BREAK case 58: YY_RULE_SETUP -#line 259 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 259 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { RET_TOK(BinaryOpVal, SRem, SREM); } YY_BREAK case 59: YY_RULE_SETUP -#line 260 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 260 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { RET_TOK(BinaryOpVal, FRem, FREM); } YY_BREAK case 60: YY_RULE_SETUP -#line 261 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 261 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { RET_TOK(BinaryOpVal, Shl, SHL); } YY_BREAK case 61: YY_RULE_SETUP -#line 262 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 262 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { RET_TOK(BinaryOpVal, LShr, LSHR); } YY_BREAK case 62: YY_RULE_SETUP -#line 263 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 263 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { RET_TOK(BinaryOpVal, AShr, ASHR); } YY_BREAK case 63: YY_RULE_SETUP -#line 264 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 264 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { RET_TOK(BinaryOpVal, And, AND); } YY_BREAK case 64: YY_RULE_SETUP -#line 265 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 265 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { RET_TOK(BinaryOpVal, Or , OR ); } YY_BREAK case 65: YY_RULE_SETUP -#line 266 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 266 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { RET_TOK(BinaryOpVal, Xor, XOR); } YY_BREAK case 66: YY_RULE_SETUP -#line 267 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 267 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { RET_TOK(OtherOpVal, ICmp, ICMP); } YY_BREAK case 67: YY_RULE_SETUP -#line 268 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 268 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { RET_TOK(OtherOpVal, FCmp, FCMP); } YY_BREAK case 68: YY_RULE_SETUP -#line 270 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 270 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { return EQ; } YY_BREAK case 69: YY_RULE_SETUP -#line 271 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 271 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { return NE; } YY_BREAK case 70: YY_RULE_SETUP -#line 272 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 272 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { return SLT; } YY_BREAK case 71: YY_RULE_SETUP -#line 273 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 273 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { return SGT; } YY_BREAK case 72: YY_RULE_SETUP -#line 274 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 274 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { return SLE; } YY_BREAK case 73: YY_RULE_SETUP -#line 275 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 275 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { return SGE; } YY_BREAK case 74: YY_RULE_SETUP -#line 276 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 276 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { return ULT; } YY_BREAK case 75: YY_RULE_SETUP -#line 277 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 277 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { return UGT; } YY_BREAK case 76: YY_RULE_SETUP -#line 278 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 278 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { return ULE; } YY_BREAK case 77: YY_RULE_SETUP -#line 279 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 279 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { return UGE; } YY_BREAK case 78: YY_RULE_SETUP -#line 280 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 280 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { return OEQ; } YY_BREAK case 79: YY_RULE_SETUP -#line 281 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 281 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { return ONE; } YY_BREAK case 80: YY_RULE_SETUP -#line 282 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 282 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { return OLT; } YY_BREAK case 81: YY_RULE_SETUP -#line 283 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 283 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { return OGT; } YY_BREAK case 82: YY_RULE_SETUP -#line 284 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 284 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { return OLE; } YY_BREAK case 83: YY_RULE_SETUP -#line 285 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 285 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { return OGE; } YY_BREAK case 84: YY_RULE_SETUP -#line 286 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 286 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { return ORD; } YY_BREAK case 85: YY_RULE_SETUP -#line 287 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 287 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { return UNO; } YY_BREAK case 86: YY_RULE_SETUP -#line 288 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 288 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { return UEQ; } YY_BREAK case 87: YY_RULE_SETUP -#line 289 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 289 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { return UNE; } YY_BREAK case 88: YY_RULE_SETUP -#line 291 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 291 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { RET_TOK(OtherOpVal, PHI, PHI_TOK); } YY_BREAK case 89: YY_RULE_SETUP -#line 292 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 292 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { RET_TOK(OtherOpVal, Call, CALL); } YY_BREAK case 90: YY_RULE_SETUP -#line 293 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 293 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { RET_TOK(CastOpVal, Trunc, TRUNC); } YY_BREAK case 91: YY_RULE_SETUP -#line 294 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 294 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { RET_TOK(CastOpVal, ZExt, ZEXT); } YY_BREAK case 92: YY_RULE_SETUP -#line 295 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 295 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { RET_TOK(CastOpVal, SExt, SEXT); } YY_BREAK case 93: YY_RULE_SETUP -#line 296 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 296 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { RET_TOK(CastOpVal, FPTrunc, FPTRUNC); } YY_BREAK case 94: YY_RULE_SETUP -#line 297 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 297 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { RET_TOK(CastOpVal, FPExt, FPEXT); } YY_BREAK case 95: YY_RULE_SETUP -#line 298 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 298 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { RET_TOK(CastOpVal, UIToFP, UITOFP); } YY_BREAK case 96: YY_RULE_SETUP -#line 299 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 299 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { RET_TOK(CastOpVal, SIToFP, SITOFP); } YY_BREAK case 97: YY_RULE_SETUP -#line 300 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 300 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { RET_TOK(CastOpVal, FPToUI, FPTOUI); } YY_BREAK case 98: YY_RULE_SETUP -#line 301 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 301 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { RET_TOK(CastOpVal, FPToSI, FPTOSI); } YY_BREAK case 99: YY_RULE_SETUP -#line 302 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 302 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { RET_TOK(CastOpVal, IntToPtr, INTTOPTR); } YY_BREAK case 100: YY_RULE_SETUP -#line 303 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 303 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { RET_TOK(CastOpVal, PtrToInt, PTRTOINT); } YY_BREAK case 101: YY_RULE_SETUP -#line 304 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 304 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { RET_TOK(CastOpVal, BitCast, BITCAST); } YY_BREAK case 102: YY_RULE_SETUP -#line 305 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 305 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { RET_TOK(OtherOpVal, Select, SELECT); } YY_BREAK case 103: YY_RULE_SETUP -#line 306 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 306 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { RET_TOK(OtherOpVal, VAArg , VAARG); } YY_BREAK case 104: YY_RULE_SETUP -#line 307 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 307 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { RET_TOK(TermOpVal, Ret, RET); } YY_BREAK case 105: YY_RULE_SETUP -#line 308 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 308 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { RET_TOK(TermOpVal, Br, BR); } YY_BREAK case 106: YY_RULE_SETUP -#line 309 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 309 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { RET_TOK(TermOpVal, Switch, SWITCH); } YY_BREAK case 107: YY_RULE_SETUP -#line 310 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 310 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { RET_TOK(TermOpVal, Invoke, INVOKE); } YY_BREAK case 108: YY_RULE_SETUP -#line 311 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 311 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { RET_TOK(TermOpVal, Unwind, UNWIND); } YY_BREAK case 109: YY_RULE_SETUP -#line 312 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 312 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { RET_TOK(TermOpVal, Unreachable, UNREACHABLE); } YY_BREAK case 110: YY_RULE_SETUP -#line 314 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 314 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { RET_TOK(MemOpVal, Malloc, MALLOC); } YY_BREAK case 111: YY_RULE_SETUP -#line 315 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 315 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { RET_TOK(MemOpVal, Alloca, ALLOCA); } YY_BREAK case 112: YY_RULE_SETUP -#line 316 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 316 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { RET_TOK(MemOpVal, Free, FREE); } YY_BREAK case 113: YY_RULE_SETUP -#line 317 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 317 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { RET_TOK(MemOpVal, Load, LOAD); } YY_BREAK case 114: YY_RULE_SETUP -#line 318 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 318 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { RET_TOK(MemOpVal, Store, STORE); } YY_BREAK case 115: YY_RULE_SETUP -#line 319 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 319 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { RET_TOK(MemOpVal, GetElementPtr, GETELEMENTPTR); } YY_BREAK case 116: YY_RULE_SETUP -#line 321 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 321 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { RET_TOK(OtherOpVal, ExtractElement, EXTRACTELEMENT); } YY_BREAK case 117: YY_RULE_SETUP -#line 322 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 322 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { RET_TOK(OtherOpVal, InsertElement, INSERTELEMENT); } YY_BREAK case 118: YY_RULE_SETUP -#line 323 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 323 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { RET_TOK(OtherOpVal, ShuffleVector, SHUFFLEVECTOR); } YY_BREAK case 119: YY_RULE_SETUP -#line 326 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 326 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { UnEscapeLexed(yytext+1); llvmAsmlval.StrVal = strdup(yytext+1); // Skip % @@ -1869,7 +1869,7 @@ YY_RULE_SETUP YY_BREAK case 120: YY_RULE_SETUP -#line 331 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 331 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { UnEscapeLexed(yytext+1); llvmAsmlval.StrVal = strdup(yytext+1); // Skip @ @@ -1878,7 +1878,7 @@ YY_RULE_SETUP YY_BREAK case 121: YY_RULE_SETUP -#line 336 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 336 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { yytext[strlen(yytext)-1] = 0; // nuke colon UnEscapeLexed(yytext); @@ -1888,7 +1888,7 @@ YY_RULE_SETUP YY_BREAK case 122: YY_RULE_SETUP -#line 342 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 342 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { yytext[strlen(yytext)-2] = 0; // nuke colon, end quote UnEscapeLexed(yytext+1); @@ -1898,7 +1898,7 @@ YY_RULE_SETUP YY_BREAK case 123: YY_RULE_SETUP -#line 349 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 349 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { // Note that we cannot unescape a string constant here! The // string constant might contain a \00 which would not be // understood by the string stuff. It is valid to make a @@ -1911,7 +1911,7 @@ YY_RULE_SETUP YY_BREAK case 124: YY_RULE_SETUP -#line 358 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 358 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { yytext[strlen(yytext)-1] = 0; // nuke end quote llvmAsmlval.StrVal = strdup(yytext+2); // Nuke @, quote @@ -1920,12 +1920,12 @@ YY_RULE_SETUP YY_BREAK case 125: YY_RULE_SETUP -#line 366 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 366 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { llvmAsmlval.UInt64Val = atoull(yytext); return EUINT64VAL; } YY_BREAK case 126: YY_RULE_SETUP -#line 367 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 367 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { uint64_t Val = atoull(yytext+1); // +1: we have bigger negative range @@ -1937,7 +1937,7 @@ YY_RULE_SETUP YY_BREAK case 127: YY_RULE_SETUP -#line 375 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 375 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { llvmAsmlval.UInt64Val = HexIntToVal(yytext+3); return yytext[0] == 's' ? ESINT64VAL : EUINT64VAL; @@ -1945,7 +1945,7 @@ YY_RULE_SETUP YY_BREAK case 128: YY_RULE_SETUP -#line 380 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 380 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { uint64_t Val = atoull(yytext+1); if ((unsigned)Val != Val) @@ -1956,7 +1956,7 @@ YY_RULE_SETUP YY_BREAK case 129: YY_RULE_SETUP -#line 387 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 387 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { uint64_t Val = atoull(yytext+1); if ((unsigned)Val != Val) @@ -1967,16 +1967,16 @@ YY_RULE_SETUP YY_BREAK case 130: YY_RULE_SETUP -#line 395 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 395 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { llvmAsmlval.FPVal = atof(yytext); return FPVAL; } YY_BREAK case 131: YY_RULE_SETUP -#line 396 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 396 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { llvmAsmlval.FPVal = HexToFP(yytext); return FPVAL; } YY_BREAK case YY_STATE_EOF(INITIAL): -#line 398 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 398 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { /* Make sure to free the internal buffers for flex when we are * done reading our input! @@ -1987,17 +1987,17 @@ case YY_STATE_EOF(INITIAL): YY_BREAK case 132: YY_RULE_SETUP -#line 406 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 406 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { /* Ignore whitespace */ } YY_BREAK case 133: YY_RULE_SETUP -#line 407 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 407 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" { return yytext[0]; } YY_BREAK case 134: YY_RULE_SETUP -#line 409 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 409 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" YY_FATAL_ERROR( "flex scanner jammed" ); YY_BREAK #line 2004 "Lexer.cpp" @@ -2878,5 +2878,5 @@ int main() return 0; } #endif -#line 409 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l" +#line 409 "/proj/llvm/llvm-3/lib/AsmParser/Lexer.l" diff --git a/lib/AsmParser/llvmAsmParser.cpp.cvs b/lib/AsmParser/llvmAsmParser.cpp.cvs index 02abfbb..b34c534 100644 --- a/lib/AsmParser/llvmAsmParser.cpp.cvs +++ b/lib/AsmParser/llvmAsmParser.cpp.cvs @@ -330,14 +330,14 @@ /* Copy the first part of user declarations. */ -#line 14 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 14 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" #include "ParserInternals.h" #include "llvm/CallingConv.h" #include "llvm/InlineAsm.h" #include "llvm/Instructions.h" #include "llvm/Module.h" -#include "llvm/SymbolTable.h" +#include "llvm/ValueSymbolTable.h" #include "llvm/Support/GetElementPtrTypeIterator.h" #include "llvm/Support/CommandLine.h" #include "llvm/ADT/SmallVector.h" @@ -529,7 +529,7 @@ static struct PerFunctionInfo { std::map<const Type*, ValueList> Values; // Keep track of #'d definitions std::map<const Type*, ValueList> LateResolveValues; - bool isDeclare; // Is this function a forward declararation? + bool isDeclare; // Is this function a forward declararation? GlobalValue::LinkageTypes Linkage; // Linkage for forward declaration. GlobalValue::VisibilityTypes Visibility; @@ -661,24 +661,33 @@ static Value *getValNonImprovising(const Type *Ty, const ValID &D) { // Module constants occupy the lowest numbered slots... std::map<const Type*,ValueList>::iterator VI = CurModule.Values.find(Ty); - if (VI == CurModule.Values.end()) return 0; - if (D.Num >= VI->second.size()) return 0; + if (VI == CurModule.Values.end()) + return 0; + if (D.Num >= VI->second.size()) + return 0; return VI->second[Num]; } case ValID::LocalName: { // Is it a named definition? - if (!inFunctionScope()) return 0; - SymbolTable &SymTab = CurFun.CurrentFunction->getValueSymbolTable(); - Value *N = SymTab.lookup(Ty, D.Name); - if (N == 0) return 0; + if (!inFunctionScope()) + return 0; + ValueSymbolTable &SymTab = CurFun.CurrentFunction->getValueSymbolTable(); + Value *N = SymTab.lookup(D.Name); + if (N == 0) + return 0; + if (N->getType() != Ty) + return 0; D.destroy(); // Free old strdup'd memory... return N; } case ValID::GlobalName: { // Is it a named definition? - SymbolTable &SymTab = CurModule.CurrentModule->getValueSymbolTable(); - Value *N = SymTab.lookup(Ty, D.Name); - if (N == 0) return 0; + ValueSymbolTable &SymTab = CurModule.CurrentModule->getValueSymbolTable(); + Value *N = SymTab.lookup(D.Name); + if (N == 0) + return 0; + if (N->getType() != Ty) + return 0; D.destroy(); // Free old strdup'd memory... return N; @@ -819,8 +828,8 @@ static BasicBlock *getBBVal(const ValID &ID, bool isDefinition = false) { break; case ValID::LocalName: // Is it a named definition? Name = ID.Name; - if (Value *N = CurFun.CurrentFunction-> - getValueSymbolTable().lookup(Type::LabelTy, Name)) + Value *N = CurFun.CurrentFunction->getValueSymbolTable().lookup(Name); + if (N && N->getType()->getTypeID() == Type::LabelTyID) BB = cast<BasicBlock>(N); break; } @@ -960,8 +969,8 @@ static void setValueName(Value *V, char *NameStr) { } assert(inFunctionScope() && "Must be in function scope!"); - SymbolTable &ST = CurFun.CurrentFunction->getValueSymbolTable(); - if (ST.lookup(V->getType(), Name)) { + ValueSymbolTable &ST = CurFun.CurrentFunction->getValueSymbolTable(); + if (ST.lookup(Name)) { GenerateError("Redefinition of value '" + Name + "' of type '" + V->getType()->getDescription() + "'"); return; @@ -1015,16 +1024,21 @@ ParseGlobalVariable(char *NameStr, return GV; } - // If this global has a name, check to see if there is already a definition - // of this global in the module. If so, it is an error. + // If this global has a name if (!Name.empty()) { - // We are a simple redefinition of a value, check to see if it is defined - // the same as the old one. - if (CurModule.CurrentModule->getGlobalVariable(Name, Ty)) { - GenerateError("Redefinition of global variable named '" + Name + - "' of type '" + Ty->getDescription() + "'"); - return 0; - } + // if the global we're parsing has an initializer (is a definition) and + // has external linkage. + if (Initializer && Linkage != GlobalValue::InternalLinkage) + // If there is already a global with external linkage with this name + if (CurModule.CurrentModule->getGlobalVariable(Name, false)) { + // If we allow this GVar to get created, it will be renamed in the + // symbol table because it conflicts with an existing GVar. We can't + // allow redefinition of GVars whose linking indicates that their name + // must stay the same. Issue the error. + GenerateError("Redefinition of global variable named '" + Name + + "' of type '" + Ty->getDescription() + "'"); + return 0; + } } // Otherwise there is no existing GV to use, create one now. @@ -1222,7 +1236,7 @@ Module *llvm::RunVMAsmParser(const char * AsmString, Module * M) { #endif #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED) -#line 886 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 900 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" typedef union YYSTYPE { llvm::Module *ModuleVal; llvm::Function *FunctionVal; @@ -1269,7 +1283,7 @@ typedef union YYSTYPE { llvm::FCmpInst::Predicate FPredicate; } YYSTYPE; /* Line 196 of yacc.c. */ -#line 1273 "llvmAsmParser.tab.c" +#line 1287 "llvmAsmParser.tab.c" # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 # define YYSTYPE_IS_TRIVIAL 1 @@ -1281,7 +1295,7 @@ typedef union YYSTYPE { /* Line 219 of yacc.c. */ -#line 1285 "llvmAsmParser.tab.c" +#line 1299 "llvmAsmParser.tab.c" #if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__) # define YYSIZE_T __SIZE_TYPE__ @@ -1629,35 +1643,35 @@ static const short int yyrhs[] = /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const unsigned short int yyrline[] = { - 0, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, - 1033, 1034, 1034, 1034, 1034, 1034, 1034, 1035, 1035, 1035, - 1035, 1035, 1035, 1036, 1036, 1036, 1036, 1036, 1036, 1039, - 1039, 1040, 1040, 1041, 1041, 1042, 1042, 1043, 1043, 1047, - 1047, 1048, 1048, 1049, 1049, 1050, 1050, 1051, 1051, 1052, - 1052, 1053, 1053, 1054, 1055, 1060, 1061, 1061, 1063, 1063, - 1064, 1064, 1068, 1072, 1077, 1077, 1079, 1083, 1089, 1090, - 1091, 1092, 1093, 1097, 1098, 1099, 1103, 1104, 1108, 1109, - 1110, 1114, 1115, 1116, 1117, 1118, 1121, 1122, 1123, 1124, - 1125, 1126, 1127, 1134, 1135, 1136, 1137, 1140, 1141, 1146, - 1147, 1150, 1151, 1158, 1159, 1165, 1166, 1174, 1182, 1183, - 1188, 1189, 1190, 1195, 1208, 1208, 1208, 1208, 1211, 1215, - 1219, 1226, 1231, 1239, 1257, 1275, 1280, 1292, 1302, 1306, - 1316, 1323, 1330, 1337, 1342, 1347, 1354, 1355, 1362, 1369, - 1377, 1382, 1393, 1421, 1437, 1466, 1494, 1519, 1538, 1563, - 1582, 1594, 1601, 1667, 1677, 1687, 1693, 1699, 1704, 1709, - 1717, 1729, 1750, 1758, 1764, 1775, 1780, 1785, 1791, 1797, - 1806, 1810, 1818, 1818, 1829, 1834, 1842, 1843, 1847, 1847, - 1851, 1851, 1854, 1857, 1869, 1893, 1904, 1904, 1914, 1914, - 1922, 1922, 1932, 1935, 1941, 1954, 1958, 1963, 1965, 1970, - 1975, 1984, 1994, 2005, 2009, 2018, 2027, 2032, 2138, 2138, - 2140, 2149, 2149, 2151, 2156, 2168, 2172, 2177, 2181, 2185, - 2189, 2193, 2197, 2201, 2205, 2209, 2234, 2238, 2252, 2256, - 2260, 2264, 2270, 2270, 2276, 2285, 2289, 2298, 2309, 2318, - 2330, 2343, 2347, 2351, 2356, 2366, 2385, 2394, 2461, 2465, - 2472, 2483, 2496, 2505, 2516, 2526, 2534, 2542, 2545, 2546, - 2553, 2557, 2562, 2583, 2600, 2613, 2626, 2638, 2646, 2653, - 2659, 2665, 2671, 2686, 2750, 2755, 2759, 2766, 2773, 2781, - 2788, 2796, 2804, 2818, 2835 + 0, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, + 1047, 1048, 1048, 1048, 1048, 1048, 1048, 1049, 1049, 1049, + 1049, 1049, 1049, 1050, 1050, 1050, 1050, 1050, 1050, 1053, + 1053, 1054, 1054, 1055, 1055, 1056, 1056, 1057, 1057, 1061, + 1061, 1062, 1062, 1063, 1063, 1064, 1064, 1065, 1065, 1066, + 1066, 1067, 1067, 1068, 1069, 1074, 1075, 1075, 1077, 1077, + 1078, 1078, 1082, 1086, 1091, 1091, 1093, 1097, 1103, 1104, + 1105, 1106, 1107, 1111, 1112, 1113, 1117, 1118, 1122, 1123, + 1124, 1128, 1129, 1130, 1131, 1132, 1135, 1136, 1137, 1138, + 1139, 1140, 1141, 1148, 1149, 1150, 1151, 1154, 1155, 1160, + 1161, 1164, 1165, 1172, 1173, 1179, 1180, 1188, 1196, 1197, + 1202, 1203, 1204, 1209, 1222, 1222, 1222, 1222, 1225, 1229, + 1233, 1240, 1245, 1253, 1271, 1289, 1294, 1306, 1316, 1320, + 1330, 1337, 1344, 1351, 1356, 1361, 1368, 1369, 1376, 1383, + 1391, 1396, 1407, 1435, 1451, 1480, 1508, 1533, 1552, 1577, + 1596, 1608, 1615, 1681, 1691, 1701, 1707, 1713, 1718, 1723, + 1731, 1743, 1764, 1772, 1778, 1789, 1794, 1799, 1805, 1811, + 1820, 1824, 1832, 1832, 1843, 1848, 1856, 1857, 1861, 1861, + 1865, 1865, 1868, 1871, 1883, 1907, 1918, 1918, 1928, 1928, + 1936, 1936, 1946, 1949, 1955, 1968, 1972, 1977, 1979, 1984, + 1989, 1998, 2008, 2019, 2023, 2032, 2041, 2046, 2158, 2158, + 2160, 2169, 2169, 2171, 2176, 2188, 2192, 2197, 2201, 2205, + 2209, 2213, 2217, 2221, 2225, 2229, 2254, 2258, 2272, 2276, + 2280, 2284, 2290, 2290, 2296, 2305, 2309, 2318, 2328, 2337, + 2349, 2362, 2366, 2370, 2375, 2385, 2404, 2413, 2480, 2484, + 2491, 2502, 2515, 2525, 2536, 2546, 2554, 2562, 2565, 2566, + 2573, 2577, 2582, 2603, 2620, 2633, 2646, 2658, 2666, 2673, + 2679, 2685, 2691, 2706, 2770, 2775, 2779, 2786, 2793, 2801, + 2808, 2816, 2824, 2838, 2855 }; #endif @@ -2981,142 +2995,142 @@ yyreduce: switch (yyn) { case 29: -#line 1039 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1053 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.IPredicate) = ICmpInst::ICMP_EQ; ;} break; case 30: -#line 1039 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1053 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.IPredicate) = ICmpInst::ICMP_NE; ;} break; case 31: -#line 1040 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1054 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.IPredicate) = ICmpInst::ICMP_SLT; ;} break; case 32: -#line 1040 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1054 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.IPredicate) = ICmpInst::ICMP_SGT; ;} break; case 33: -#line 1041 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1055 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.IPredicate) = ICmpInst::ICMP_SLE; ;} break; case 34: -#line 1041 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1055 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.IPredicate) = ICmpInst::ICMP_SGE; ;} break; case 35: -#line 1042 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1056 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.IPredicate) = ICmpInst::ICMP_ULT; ;} break; case 36: -#line 1042 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1056 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.IPredicate) = ICmpInst::ICMP_UGT; ;} break; case 37: -#line 1043 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1057 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.IPredicate) = ICmpInst::ICMP_ULE; ;} break; case 38: -#line 1043 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1057 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.IPredicate) = ICmpInst::ICMP_UGE; ;} break; case 39: -#line 1047 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1061 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.FPredicate) = FCmpInst::FCMP_OEQ; ;} break; case 40: -#line 1047 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1061 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.FPredicate) = FCmpInst::FCMP_ONE; ;} break; case 41: -#line 1048 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1062 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.FPredicate) = FCmpInst::FCMP_OLT; ;} break; case 42: -#line 1048 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1062 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.FPredicate) = FCmpInst::FCMP_OGT; ;} break; case 43: -#line 1049 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1063 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.FPredicate) = FCmpInst::FCMP_OLE; ;} break; case 44: -#line 1049 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1063 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.FPredicate) = FCmpInst::FCMP_OGE; ;} break; case 45: -#line 1050 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1064 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.FPredicate) = FCmpInst::FCMP_ORD; ;} break; case 46: -#line 1050 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1064 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.FPredicate) = FCmpInst::FCMP_UNO; ;} break; case 47: -#line 1051 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1065 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.FPredicate) = FCmpInst::FCMP_UEQ; ;} break; case 48: -#line 1051 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1065 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.FPredicate) = FCmpInst::FCMP_UNE; ;} break; case 49: -#line 1052 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1066 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.FPredicate) = FCmpInst::FCMP_ULT; ;} break; case 50: -#line 1052 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1066 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.FPredicate) = FCmpInst::FCMP_UGT; ;} break; case 51: -#line 1053 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1067 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.FPredicate) = FCmpInst::FCMP_ULE; ;} break; case 52: -#line 1053 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1067 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.FPredicate) = FCmpInst::FCMP_UGE; ;} break; case 53: -#line 1054 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1068 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.FPredicate) = FCmpInst::FCMP_TRUE; ;} break; case 54: -#line 1055 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1069 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.FPredicate) = FCmpInst::FCMP_FALSE; ;} break; case 61: -#line 1064 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1078 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.StrVal) = 0; ;} break; case 62: -#line 1068 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1082 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.StrVal) = (yyvsp[-1].StrVal); CHECK_FOR_ERROR @@ -3124,7 +3138,7 @@ yyreduce: break; case 63: -#line 1072 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1086 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.StrVal) = 0; CHECK_FOR_ERROR @@ -3132,7 +3146,7 @@ yyreduce: break; case 66: -#line 1079 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1093 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.StrVal) = (yyvsp[-1].StrVal); CHECK_FOR_ERROR @@ -3140,7 +3154,7 @@ yyreduce: break; case 67: -#line 1083 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1097 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.StrVal) = 0; CHECK_FOR_ERROR @@ -3148,127 +3162,127 @@ yyreduce: break; case 68: -#line 1089 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1103 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.Linkage) = GlobalValue::InternalLinkage; ;} break; case 69: -#line 1090 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1104 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.Linkage) = GlobalValue::WeakLinkage; ;} break; case 70: -#line 1091 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1105 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.Linkage) = GlobalValue::LinkOnceLinkage; ;} break; case 71: -#line 1092 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1106 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.Linkage) = GlobalValue::AppendingLinkage; ;} break; case 72: -#line 1093 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1107 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.Linkage) = GlobalValue::DLLExportLinkage; ;} break; case 73: -#line 1097 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1111 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.Linkage) = GlobalValue::DLLImportLinkage; ;} break; case 74: -#line 1098 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1112 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.Linkage) = GlobalValue::ExternalWeakLinkage; ;} break; case 75: -#line 1099 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1113 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;} break; case 76: -#line 1103 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1117 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.Visibility) = GlobalValue::DefaultVisibility; ;} break; case 77: -#line 1104 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1118 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.Visibility) = GlobalValue::HiddenVisibility; ;} break; case 78: -#line 1108 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1122 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;} break; case 79: -#line 1109 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1123 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.Linkage) = GlobalValue::DLLImportLinkage; ;} break; case 80: -#line 1110 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1124 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.Linkage) = GlobalValue::ExternalWeakLinkage; ;} break; case 81: -#line 1114 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1128 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;} break; case 82: -#line 1115 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1129 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.Linkage) = GlobalValue::InternalLinkage; ;} break; case 83: -#line 1116 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1130 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.Linkage) = GlobalValue::LinkOnceLinkage; ;} break; case 84: -#line 1117 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1131 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.Linkage) = GlobalValue::WeakLinkage; ;} break; case 85: -#line 1118 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1132 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.Linkage) = GlobalValue::DLLExportLinkage; ;} break; case 86: -#line 1121 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1135 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.UIntVal) = CallingConv::C; ;} break; case 87: -#line 1122 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1136 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.UIntVal) = CallingConv::C; ;} break; case 88: -#line 1123 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1137 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.UIntVal) = CallingConv::Fast; ;} break; case 89: -#line 1124 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1138 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.UIntVal) = CallingConv::Cold; ;} break; case 90: -#line 1125 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1139 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.UIntVal) = CallingConv::X86_StdCall; ;} break; case 91: -#line 1126 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1140 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.UIntVal) = CallingConv::X86_FastCall; ;} break; case 92: -#line 1127 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1141 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { if ((unsigned)(yyvsp[0].UInt64Val) != (yyvsp[0].UInt64Val)) GEN_ERROR("Calling conv too large"); @@ -3278,61 +3292,61 @@ yyreduce: break; case 93: -#line 1134 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1148 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.ParamAttrs) = FunctionType::ZExtAttribute; ;} break; case 94: -#line 1135 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1149 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.ParamAttrs) = FunctionType::SExtAttribute; ;} break; case 95: -#line 1136 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1150 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.ParamAttrs) = FunctionType::InRegAttribute; ;} break; case 96: -#line 1137 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1151 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.ParamAttrs) = FunctionType::StructRetAttribute; ;} break; case 97: -#line 1140 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1154 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.ParamAttrs) = FunctionType::NoAttributeSet; ;} break; case 98: -#line 1141 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1155 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.ParamAttrs) = FunctionType::ParameterAttributes((yyvsp[-1].ParamAttrs) | (yyvsp[0].ParamAttrs)); ;} break; case 99: -#line 1146 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1160 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.ParamAttrs) = FunctionType::NoReturnAttribute; ;} break; case 101: -#line 1150 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1164 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.ParamAttrs) = FunctionType::NoAttributeSet; ;} break; case 102: -#line 1151 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1165 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.ParamAttrs) = FunctionType::ParameterAttributes((yyvsp[-1].ParamAttrs) | (yyvsp[0].ParamAttrs)); ;} break; case 103: -#line 1158 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1172 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.UIntVal) = 0; ;} break; case 104: -#line 1159 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1173 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.UIntVal) = (yyvsp[0].UInt64Val); if ((yyval.UIntVal) != 0 && !isPowerOf2_32((yyval.UIntVal))) @@ -3342,12 +3356,12 @@ yyreduce: break; case 105: -#line 1165 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1179 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.UIntVal) = 0; ;} break; case 106: -#line 1166 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1180 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.UIntVal) = (yyvsp[0].UInt64Val); if ((yyval.UIntVal) != 0 && !isPowerOf2_32((yyval.UIntVal))) @@ -3357,7 +3371,7 @@ yyreduce: break; case 107: -#line 1174 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1188 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { for (unsigned i = 0, e = strlen((yyvsp[0].StrVal)); i != e; ++i) if ((yyvsp[0].StrVal)[i] == '"' || (yyvsp[0].StrVal)[i] == '\\') @@ -3368,27 +3382,27 @@ yyreduce: break; case 108: -#line 1182 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1196 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.StrVal) = 0; ;} break; case 109: -#line 1183 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1197 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.StrVal) = (yyvsp[0].StrVal); ;} break; case 110: -#line 1188 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1202 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" {;} break; case 111: -#line 1189 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1203 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" {;} break; case 112: -#line 1190 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1204 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { CurGV->setSection((yyvsp[0].StrVal)); free((yyvsp[0].StrVal)); @@ -3397,7 +3411,7 @@ yyreduce: break; case 113: -#line 1195 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1209 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { if ((yyvsp[0].UInt64Val) != 0 && !isPowerOf2_32((yyvsp[0].UInt64Val))) GEN_ERROR("Alignment must be a power of two"); @@ -3407,7 +3421,7 @@ yyreduce: break; case 118: -#line 1211 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1225 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.TypeVal) = new PATypeHolder(OpaqueType::get()); CHECK_FOR_ERROR @@ -3415,7 +3429,7 @@ yyreduce: break; case 119: -#line 1215 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1229 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.TypeVal) = new PATypeHolder((yyvsp[0].PrimType)); CHECK_FOR_ERROR @@ -3423,7 +3437,7 @@ yyreduce: break; case 120: -#line 1219 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1233 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { // Pointer type? if (*(yyvsp[-1].TypeVal) == Type::LabelTy) GEN_ERROR("Cannot form a pointer to a basic block"); @@ -3434,7 +3448,7 @@ yyreduce: break; case 121: -#line 1226 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1240 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { // Named types are also simple types... const Type* tmp = getTypeVal((yyvsp[0].ValIDVal)); CHECK_FOR_ERROR @@ -3443,7 +3457,7 @@ yyreduce: break; case 122: -#line 1231 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1245 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { // Type UpReference if ((yyvsp[0].UInt64Val) > (uint64_t)~0U) GEN_ERROR("Value out of range"); OpaqueType *OT = OpaqueType::get(); // Use temporary placeholder @@ -3455,7 +3469,7 @@ yyreduce: break; case 123: -#line 1239 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1253 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { std::vector<const Type*> Params; std::vector<FunctionType::ParameterAttributes> Attrs; @@ -3477,7 +3491,7 @@ yyreduce: break; case 124: -#line 1257 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1271 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { std::vector<const Type*> Params; std::vector<FunctionType::ParameterAttributes> Attrs; @@ -3498,7 +3512,7 @@ yyreduce: break; case 125: -#line 1275 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1289 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { // Sized array type? (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(ArrayType::get(*(yyvsp[-1].TypeVal), (unsigned)(yyvsp[-3].UInt64Val)))); delete (yyvsp[-1].TypeVal); @@ -3507,7 +3521,7 @@ yyreduce: break; case 126: -#line 1280 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1294 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { // Packed array type? const llvm::Type* ElemTy = (yyvsp[-1].TypeVal)->get(); if ((unsigned)(yyvsp[-3].UInt64Val) != (yyvsp[-3].UInt64Val)) @@ -3523,7 +3537,7 @@ yyreduce: break; case 127: -#line 1292 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1306 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { // Structure type? std::vector<const Type*> Elements; for (std::list<llvm::PATypeHolder>::iterator I = (yyvsp[-1].TypeList)->begin(), @@ -3537,7 +3551,7 @@ yyreduce: break; case 128: -#line 1302 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1316 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { // Empty structure type? (yyval.TypeVal) = new PATypeHolder(StructType::get(std::vector<const Type*>())); CHECK_FOR_ERROR @@ -3545,7 +3559,7 @@ yyreduce: break; case 129: -#line 1306 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1320 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { std::vector<const Type*> Elements; for (std::list<llvm::PATypeHolder>::iterator I = (yyvsp[-2].TypeList)->begin(), @@ -3559,7 +3573,7 @@ yyreduce: break; case 130: -#line 1316 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1330 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { // Empty structure type? (yyval.TypeVal) = new PATypeHolder(StructType::get(std::vector<const Type*>(), true)); CHECK_FOR_ERROR @@ -3567,7 +3581,7 @@ yyreduce: break; case 131: -#line 1323 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1337 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.TypeWithAttrs).Ty = (yyvsp[-1].TypeVal); (yyval.TypeWithAttrs).Attrs = (yyvsp[0].ParamAttrs); @@ -3575,7 +3589,7 @@ yyreduce: break; case 132: -#line 1330 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1344 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { if (!UpRefs.empty()) GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[0].TypeVal))->getDescription()); @@ -3586,14 +3600,14 @@ yyreduce: break; case 133: -#line 1337 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1351 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.TypeVal) = new PATypeHolder(Type::VoidTy); ;} break; case 134: -#line 1342 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1356 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.TypeWithAttrsList) = new TypeWithAttrsList(); (yyval.TypeWithAttrsList)->push_back((yyvsp[0].TypeWithAttrs)); @@ -3602,7 +3616,7 @@ yyreduce: break; case 135: -#line 1347 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1361 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { ((yyval.TypeWithAttrsList)=(yyvsp[-2].TypeWithAttrsList))->push_back((yyvsp[0].TypeWithAttrs)); CHECK_FOR_ERROR @@ -3610,7 +3624,7 @@ yyreduce: break; case 137: -#line 1355 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1369 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.TypeWithAttrsList)=(yyvsp[-2].TypeWithAttrsList); TypeWithAttrs TWA; TWA.Attrs = FunctionType::NoAttributeSet; @@ -3621,7 +3635,7 @@ yyreduce: break; case 138: -#line 1362 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1376 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.TypeWithAttrsList) = new TypeWithAttrsList; TypeWithAttrs TWA; TWA.Attrs = FunctionType::NoAttributeSet; @@ -3632,7 +3646,7 @@ yyreduce: break; case 139: -#line 1369 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1383 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.TypeWithAttrsList) = new TypeWithAttrsList(); CHECK_FOR_ERROR @@ -3640,7 +3654,7 @@ yyreduce: break; case 140: -#line 1377 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1391 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.TypeList) = new std::list<PATypeHolder>(); (yyval.TypeList)->push_back(*(yyvsp[0].TypeVal)); delete (yyvsp[0].TypeVal); @@ -3649,7 +3663,7 @@ yyreduce: break; case 141: -#line 1382 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1396 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { ((yyval.TypeList)=(yyvsp[-2].TypeList))->push_back(*(yyvsp[0].TypeVal)); delete (yyvsp[0].TypeVal); CHECK_FOR_ERROR @@ -3657,7 +3671,7 @@ yyreduce: break; case 142: -#line 1393 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1407 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { // Nonempty unsized arr if (!UpRefs.empty()) GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-3].TypeVal))->getDescription()); @@ -3689,7 +3703,7 @@ yyreduce: break; case 143: -#line 1421 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1435 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { if (!UpRefs.empty()) GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription()); @@ -3709,7 +3723,7 @@ yyreduce: break; case 144: -#line 1437 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1451 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { if (!UpRefs.empty()) GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription()); @@ -3742,7 +3756,7 @@ yyreduce: break; case 145: -#line 1466 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1480 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { // Nonempty unsized arr if (!UpRefs.empty()) GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-3].TypeVal))->getDescription()); @@ -3774,7 +3788,7 @@ yyreduce: break; case 146: -#line 1494 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1508 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { const StructType *STy = dyn_cast<StructType>((yyvsp[-3].TypeVal)->get()); if (STy == 0) @@ -3803,7 +3817,7 @@ yyreduce: break; case 147: -#line 1519 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1533 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { if (!UpRefs.empty()) GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription()); @@ -3826,7 +3840,7 @@ yyreduce: break; case 148: -#line 1538 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1552 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { const StructType *STy = dyn_cast<StructType>((yyvsp[-5].TypeVal)->get()); if (STy == 0) @@ -3855,7 +3869,7 @@ yyreduce: break; case 149: -#line 1563 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1577 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { if (!UpRefs.empty()) GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-4].TypeVal))->getDescription()); @@ -3878,7 +3892,7 @@ yyreduce: break; case 150: -#line 1582 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1596 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { if (!UpRefs.empty()) GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription()); @@ -3894,7 +3908,7 @@ yyreduce: break; case 151: -#line 1594 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1608 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { if (!UpRefs.empty()) GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription()); @@ -3905,7 +3919,7 @@ yyreduce: break; case 152: -#line 1601 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1615 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { if (!UpRefs.empty()) GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription()); @@ -3975,7 +3989,7 @@ yyreduce: break; case 153: -#line 1667 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1681 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { if (!UpRefs.empty()) GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription()); @@ -3989,7 +4003,7 @@ yyreduce: break; case 154: -#line 1677 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1691 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { if (!UpRefs.empty()) GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription()); @@ -4003,7 +4017,7 @@ yyreduce: break; case 155: -#line 1687 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1701 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { // integral constants if (!ConstantInt::isValueValidForType((yyvsp[-1].PrimType), (yyvsp[0].SInt64Val))) GEN_ERROR("Constant value doesn't fit in type"); @@ -4013,7 +4027,7 @@ yyreduce: break; case 156: -#line 1693 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1707 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { // integral constants if (!ConstantInt::isValueValidForType((yyvsp[-1].PrimType), (yyvsp[0].UInt64Val))) GEN_ERROR("Constant value doesn't fit in type"); @@ -4023,7 +4037,7 @@ yyreduce: break; case 157: -#line 1699 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1713 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { // Boolean constants assert(cast<IntegerType>((yyvsp[-1].PrimType))->getBitWidth() == 1 && "Not Bool?"); (yyval.ConstVal) = ConstantInt::getTrue(); @@ -4032,7 +4046,7 @@ yyreduce: break; case 158: -#line 1704 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1718 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { // Boolean constants assert(cast<IntegerType>((yyvsp[-1].PrimType))->getBitWidth() == 1 && "Not Bool?"); (yyval.ConstVal) = ConstantInt::getFalse(); @@ -4041,7 +4055,7 @@ yyreduce: break; case 159: -#line 1709 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1723 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { // Float & Double constants if (!ConstantFP::isValueValidForType((yyvsp[-1].PrimType), (yyvsp[0].FPVal))) GEN_ERROR("Floating point constant invalid for type"); @@ -4051,7 +4065,7 @@ yyreduce: break; case 160: -#line 1717 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1731 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { if (!UpRefs.empty()) GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription()); @@ -4067,7 +4081,7 @@ yyreduce: break; case 161: -#line 1729 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1743 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { if (!isa<PointerType>((yyvsp[-2].ConstVal)->getType())) GEN_ERROR("GetElementPtr requires a pointer operand"); @@ -4092,7 +4106,7 @@ yyreduce: break; case 162: -#line 1750 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1764 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { if ((yyvsp[-5].ConstVal)->getType() != Type::Int1Ty) GEN_ERROR("Select condition must be of boolean type"); @@ -4104,7 +4118,7 @@ yyreduce: break; case 163: -#line 1758 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1772 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType()) GEN_ERROR("Binary operator types must match"); @@ -4114,7 +4128,7 @@ yyreduce: break; case 164: -#line 1764 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1778 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType()) GEN_ERROR("Logical operator types must match"); @@ -4129,7 +4143,7 @@ yyreduce: break; case 165: -#line 1775 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1789 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType()) GEN_ERROR("icmp operand types must match"); @@ -4138,7 +4152,7 @@ yyreduce: break; case 166: -#line 1780 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1794 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType()) GEN_ERROR("fcmp operand types must match"); @@ -4147,7 +4161,7 @@ yyreduce: break; case 167: -#line 1785 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1799 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { if (!ExtractElementInst::isValidOperands((yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal))) GEN_ERROR("Invalid extractelement operands"); @@ -4157,7 +4171,7 @@ yyreduce: break; case 168: -#line 1791 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1805 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { if (!InsertElementInst::isValidOperands((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal))) GEN_ERROR("Invalid insertelement operands"); @@ -4167,7 +4181,7 @@ yyreduce: break; case 169: -#line 1797 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1811 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { if (!ShuffleVectorInst::isValidOperands((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal))) GEN_ERROR("Invalid shufflevector operands"); @@ -4177,7 +4191,7 @@ yyreduce: break; case 170: -#line 1806 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1820 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { ((yyval.ConstVector) = (yyvsp[-2].ConstVector))->push_back((yyvsp[0].ConstVal)); CHECK_FOR_ERROR @@ -4185,7 +4199,7 @@ yyreduce: break; case 171: -#line 1810 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1824 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.ConstVector) = new std::vector<Constant*>(); (yyval.ConstVector)->push_back((yyvsp[0].ConstVal)); @@ -4194,17 +4208,17 @@ yyreduce: break; case 172: -#line 1818 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1832 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.BoolVal) = false; ;} break; case 173: -#line 1818 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1832 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.BoolVal) = true; ;} break; case 174: -#line 1829 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1843 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.ModuleVal) = ParserResult = CurModule.CurrentModule; CurModule.ModuleDone(); @@ -4213,7 +4227,7 @@ yyreduce: break; case 175: -#line 1834 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1848 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.ModuleVal) = ParserResult = CurModule.CurrentModule; CurModule.ModuleDone(); @@ -4222,12 +4236,12 @@ yyreduce: break; case 178: -#line 1847 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1861 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { CurFun.isDeclare = false; ;} break; case 179: -#line 1847 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1861 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { CurFun.FunctionDone(); CHECK_FOR_ERROR @@ -4235,26 +4249,26 @@ yyreduce: break; case 180: -#line 1851 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1865 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { CurFun.isDeclare = true; ;} break; case 181: -#line 1851 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1865 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { CHECK_FOR_ERROR ;} break; case 182: -#line 1854 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1868 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { CHECK_FOR_ERROR ;} break; case 183: -#line 1857 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1871 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { // Emit an error if there are any unresolved types left. if (!CurModule.LateResolveTypes.empty()) { @@ -4270,7 +4284,7 @@ yyreduce: break; case 184: -#line 1869 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1883 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { if (!UpRefs.empty()) GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[0].TypeVal))->getDescription()); @@ -4298,7 +4312,7 @@ yyreduce: break; case 185: -#line 1893 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1907 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { ResolveTypeTo((yyvsp[-2].StrVal), (yyvsp[0].PrimType)); @@ -4313,7 +4327,7 @@ yyreduce: break; case 186: -#line 1904 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1918 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { /* "Externally Visible" Linkage */ if ((yyvsp[0].ConstVal) == 0) @@ -4325,14 +4339,14 @@ yyreduce: break; case 187: -#line 1911 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1925 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { CurGV = 0; ;} break; case 188: -#line 1914 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1928 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { if ((yyvsp[0].ConstVal) == 0) GEN_ERROR("Global value initializer is not a constant"); @@ -4342,14 +4356,14 @@ yyreduce: break; case 189: -#line 1919 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1933 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { CurGV = 0; ;} break; case 190: -#line 1922 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1936 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { if (!UpRefs.empty()) GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[0].TypeVal))->getDescription()); @@ -4360,7 +4374,7 @@ yyreduce: break; case 191: -#line 1928 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1942 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { CurGV = 0; CHECK_FOR_ERROR @@ -4368,21 +4382,21 @@ yyreduce: break; case 192: -#line 1932 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1946 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { CHECK_FOR_ERROR ;} break; case 193: -#line 1935 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1949 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { CHECK_FOR_ERROR ;} break; case 194: -#line 1941 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1955 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { const std::string &AsmSoFar = CurModule.CurrentModule->getModuleInlineAsm(); char *EndStr = UnEscapeLexed((yyvsp[0].StrVal), true); @@ -4398,7 +4412,7 @@ yyreduce: break; case 195: -#line 1954 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1968 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { CurModule.CurrentModule->setTargetTriple((yyvsp[0].StrVal)); free((yyvsp[0].StrVal)); @@ -4406,7 +4420,7 @@ yyreduce: break; case 196: -#line 1958 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1972 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { CurModule.CurrentModule->setDataLayout((yyvsp[0].StrVal)); free((yyvsp[0].StrVal)); @@ -4414,7 +4428,7 @@ yyreduce: break; case 198: -#line 1965 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1979 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { CurModule.CurrentModule->addLibrary((yyvsp[0].StrVal)); free((yyvsp[0].StrVal)); @@ -4423,7 +4437,7 @@ yyreduce: break; case 199: -#line 1970 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1984 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { CurModule.CurrentModule->addLibrary((yyvsp[0].StrVal)); free((yyvsp[0].StrVal)); @@ -4432,14 +4446,14 @@ yyreduce: break; case 200: -#line 1975 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1989 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { CHECK_FOR_ERROR ;} break; case 201: -#line 1984 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 1998 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { if (!UpRefs.empty()) GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription()); @@ -4453,7 +4467,7 @@ yyreduce: break; case 202: -#line 1994 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 2008 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { if (!UpRefs.empty()) GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription()); @@ -4467,7 +4481,7 @@ yyreduce: break; case 203: -#line 2005 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 2019 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.ArgList) = (yyvsp[0].ArgList); CHECK_FOR_ERROR @@ -4475,7 +4489,7 @@ yyreduce: break; case 204: -#line 2009 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 2023 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.ArgList) = (yyvsp[-2].ArgList); struct ArgListEntry E; @@ -4488,7 +4502,7 @@ yyreduce: break; case 205: -#line 2018 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 2032 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.ArgList) = new ArgListType; struct ArgListEntry E; @@ -4501,7 +4515,7 @@ yyreduce: break; case 206: -#line 2027 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 2041 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.ArgList) = 0; CHECK_FOR_ERROR @@ -4509,7 +4523,7 @@ yyreduce: break; case 207: -#line 2033 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 2047 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { UnEscapeLexed((yyvsp[-6].StrVal)); std::string FunctionName((yyvsp[-6].StrVal)); @@ -4558,17 +4572,21 @@ yyreduce: CurModule.CurrentModule->getFunctionList().remove(Fn); CurModule.CurrentModule->getFunctionList().push_back(Fn); } else if (!FunctionName.empty() && // Merge with an earlier prototype? - (Fn = CurModule.CurrentModule->getFunction(FunctionName, FT))) { - // If this is the case, either we need to be a forward decl, or it needs - // to be. - if (!CurFun.isDeclare && !Fn->isDeclaration()) + (Fn = CurModule.CurrentModule->getFunction(FunctionName))) { + if (Fn->getFunctionType() != FT ) { + // The existing function doesn't have the same type. This is an overload + // error. + GEN_ERROR("Overload of function '" + FunctionName + "' not permitted."); + } else if (!CurFun.isDeclare && !Fn->isDeclaration()) { + // Neither the existing or the current function is a declaration and they + // have the same name and same type. Clearly this is a redefinition. GEN_ERROR("Redefinition of function '" + FunctionName + "'"); - - // Make sure to strip off any argument names so we can't get conflicts. - if (Fn->isDeclaration()) + } if (Fn->isDeclaration()) { + // Make sure to strip off any argument names so we can't get conflicts. for (Function::arg_iterator AI = Fn->arg_begin(), AE = Fn->arg_end(); AI != AE; ++AI) AI->setName(""); + } } else { // Not already defined? Fn = new Function(FT, GlobalValue::ExternalLinkage, FunctionName, CurModule.CurrentModule); @@ -4595,16 +4613,18 @@ yyreduce: // Add all of the arguments we parsed to the function... if ((yyvsp[-4].ArgList)) { // Is null if empty... if (isVarArg) { // Nuke the last entry - assert((yyvsp[-4].ArgList)->back().Ty->get() == Type::VoidTy && (yyvsp[-4].ArgList)->back().Name == 0&& + assert((yyvsp[-4].ArgList)->back().Ty->get() == Type::VoidTy && (yyvsp[-4].ArgList)->back().Name == 0 && "Not a varargs marker!"); delete (yyvsp[-4].ArgList)->back().Ty; (yyvsp[-4].ArgList)->pop_back(); // Delete the last entry } Function::arg_iterator ArgIt = Fn->arg_begin(); + Function::arg_iterator ArgEnd = Fn->arg_end(); unsigned Idx = 1; - for (ArgListType::iterator I = (yyvsp[-4].ArgList)->begin(); I != (yyvsp[-4].ArgList)->end(); ++I, ++ArgIt) { + for (ArgListType::iterator I = (yyvsp[-4].ArgList)->begin(); + I != (yyvsp[-4].ArgList)->end() && ArgIt != ArgEnd; ++I, ++ArgIt) { delete I->Ty; // Delete the typeholder... - setValueName(ArgIt, I->Name); // Insert arg into symtab... + setValueName(ArgIt, I->Name); // Insert arg into symtab... CHECK_FOR_ERROR InsertValue(ArgIt); Idx++; @@ -4617,7 +4637,7 @@ yyreduce: break; case 210: -#line 2140 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 2160 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.FunctionVal) = CurFun.CurrentFunction; @@ -4629,7 +4649,7 @@ yyreduce: break; case 213: -#line 2151 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 2171 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.FunctionVal) = (yyvsp[-1].FunctionVal); CHECK_FOR_ERROR @@ -4637,7 +4657,7 @@ yyreduce: break; case 214: -#line 2156 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 2176 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { CurFun.CurrentFunction->setLinkage((yyvsp[-2].Linkage)); CurFun.CurrentFunction->setVisibility((yyvsp[-1].Visibility)); @@ -4648,7 +4668,7 @@ yyreduce: break; case 215: -#line 2168 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 2188 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.BoolVal) = false; CHECK_FOR_ERROR @@ -4656,7 +4676,7 @@ yyreduce: break; case 216: -#line 2172 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 2192 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.BoolVal) = true; CHECK_FOR_ERROR @@ -4664,7 +4684,7 @@ yyreduce: break; case 217: -#line 2177 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 2197 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { // A reference to a direct constant (yyval.ValIDVal) = ValID::create((yyvsp[0].SInt64Val)); CHECK_FOR_ERROR @@ -4672,7 +4692,7 @@ yyreduce: break; case 218: -#line 2181 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 2201 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.ValIDVal) = ValID::create((yyvsp[0].UInt64Val)); CHECK_FOR_ERROR @@ -4680,7 +4700,7 @@ yyreduce: break; case 219: -#line 2185 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 2205 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { // Perhaps it's an FP constant? (yyval.ValIDVal) = ValID::create((yyvsp[0].FPVal)); CHECK_FOR_ERROR @@ -4688,7 +4708,7 @@ yyreduce: break; case 220: -#line 2189 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 2209 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.ValIDVal) = ValID::create(ConstantInt::getTrue()); CHECK_FOR_ERROR @@ -4696,7 +4716,7 @@ yyreduce: break; case 221: -#line 2193 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 2213 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.ValIDVal) = ValID::create(ConstantInt::getFalse()); CHECK_FOR_ERROR @@ -4704,7 +4724,7 @@ yyreduce: break; case 222: -#line 2197 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 2217 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.ValIDVal) = ValID::createNull(); CHECK_FOR_ERROR @@ -4712,7 +4732,7 @@ yyreduce: break; case 223: -#line 2201 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 2221 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.ValIDVal) = ValID::createUndef(); CHECK_FOR_ERROR @@ -4720,7 +4740,7 @@ yyreduce: break; case 224: -#line 2205 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 2225 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { // A vector zero constant. (yyval.ValIDVal) = ValID::createZeroInit(); CHECK_FOR_ERROR @@ -4728,7 +4748,7 @@ yyreduce: break; case 225: -#line 2209 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 2229 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { // Nonempty unsized packed vector const Type *ETy = (*(yyvsp[-1].ConstVector))[0]->getType(); int NumElements = (yyvsp[-1].ConstVector)->size(); @@ -4757,7 +4777,7 @@ yyreduce: break; case 226: -#line 2234 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 2254 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.ValIDVal) = ValID::create((yyvsp[0].ConstVal)); CHECK_FOR_ERROR @@ -4765,7 +4785,7 @@ yyreduce: break; case 227: -#line 2238 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 2258 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { char *End = UnEscapeLexed((yyvsp[-2].StrVal), true); std::string AsmStr = std::string((yyvsp[-2].StrVal), End); @@ -4779,7 +4799,7 @@ yyreduce: break; case 228: -#line 2252 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 2272 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { // Is it an integer reference...? (yyval.ValIDVal) = ValID::createLocalID((yyvsp[0].UIntVal)); CHECK_FOR_ERROR @@ -4787,7 +4807,7 @@ yyreduce: break; case 229: -#line 2256 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 2276 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.ValIDVal) = ValID::createGlobalID((yyvsp[0].UIntVal)); CHECK_FOR_ERROR @@ -4795,7 +4815,7 @@ yyreduce: break; case 230: -#line 2260 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 2280 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { // Is it a named reference...? (yyval.ValIDVal) = ValID::createLocalName((yyvsp[0].StrVal)); CHECK_FOR_ERROR @@ -4803,7 +4823,7 @@ yyreduce: break; case 231: -#line 2264 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 2284 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { // Is it a named reference...? (yyval.ValIDVal) = ValID::createGlobalName((yyvsp[0].StrVal)); CHECK_FOR_ERROR @@ -4811,7 +4831,7 @@ yyreduce: break; case 234: -#line 2276 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 2296 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { if (!UpRefs.empty()) GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription()); @@ -4822,7 +4842,7 @@ yyreduce: break; case 235: -#line 2285 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 2305 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.FunctionVal) = (yyvsp[-1].FunctionVal); CHECK_FOR_ERROR @@ -4830,7 +4850,7 @@ yyreduce: break; case 236: -#line 2289 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 2309 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { // Do not allow functions with 0 basic blocks (yyval.FunctionVal) = (yyvsp[-1].FunctionVal); CHECK_FOR_ERROR @@ -4838,12 +4858,11 @@ yyreduce: break; case 237: -#line 2298 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 2318 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { setValueName((yyvsp[0].TermInstVal), (yyvsp[-1].StrVal)); CHECK_FOR_ERROR InsertValue((yyvsp[0].TermInstVal)); - (yyvsp[-2].BasicBlockVal)->getInstList().push_back((yyvsp[0].TermInstVal)); InsertValue((yyvsp[-2].BasicBlockVal)); (yyval.BasicBlockVal) = (yyvsp[-2].BasicBlockVal); @@ -4852,7 +4871,7 @@ yyreduce: break; case 238: -#line 2309 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 2328 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { if (CastInst *CI1 = dyn_cast<CastInst>((yyvsp[0].InstVal))) if (CastInst *CI2 = dyn_cast<CastInst>(CI1->getOperand(0))) @@ -4865,7 +4884,7 @@ yyreduce: break; case 239: -#line 2318 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 2337 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.BasicBlockVal) = getBBVal(ValID::createLocalID(CurFun.NextBBNum++), true); CHECK_FOR_ERROR @@ -4881,7 +4900,7 @@ yyreduce: break; case 240: -#line 2330 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 2349 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.BasicBlockVal) = getBBVal(ValID::createLocalName((yyvsp[0].StrVal)), true); CHECK_FOR_ERROR @@ -4897,7 +4916,7 @@ yyreduce: break; case 241: -#line 2343 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 2362 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { // Return with a result... (yyval.TermInstVal) = new ReturnInst((yyvsp[0].ValueVal)); CHECK_FOR_ERROR @@ -4905,7 +4924,7 @@ yyreduce: break; case 242: -#line 2347 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 2366 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { // Return with no result... (yyval.TermInstVal) = new ReturnInst(); CHECK_FOR_ERROR @@ -4913,7 +4932,7 @@ yyreduce: break; case 243: -#line 2351 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 2370 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { // Unconditional Branch... BasicBlock* tmpBB = getBBVal((yyvsp[0].ValIDVal)); CHECK_FOR_ERROR @@ -4922,7 +4941,7 @@ yyreduce: break; case 244: -#line 2356 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 2375 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { assert(cast<IntegerType>((yyvsp[-7].PrimType))->getBitWidth() == 1 && "Not Bool?"); BasicBlock* tmpBBA = getBBVal((yyvsp[-3].ValIDVal)); @@ -4936,7 +4955,7 @@ yyreduce: break; case 245: -#line 2366 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 2385 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { Value* tmpVal = getVal((yyvsp[-7].PrimType), (yyvsp[-6].ValIDVal)); CHECK_FOR_ERROR @@ -4959,7 +4978,7 @@ yyreduce: break; case 246: -#line 2385 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 2404 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { Value* tmpVal = getVal((yyvsp[-6].PrimType), (yyvsp[-5].ValIDVal)); CHECK_FOR_ERROR @@ -4972,7 +4991,7 @@ yyreduce: break; case 247: -#line 2395 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 2414 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { // Handle the short syntax @@ -5042,7 +5061,7 @@ yyreduce: break; case 248: -#line 2461 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 2480 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.TermInstVal) = new UnwindInst(); CHECK_FOR_ERROR @@ -5050,7 +5069,7 @@ yyreduce: break; case 249: -#line 2465 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 2484 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.TermInstVal) = new UnreachableInst(); CHECK_FOR_ERROR @@ -5058,7 +5077,7 @@ yyreduce: break; case 250: -#line 2472 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 2491 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.JumpTable) = (yyvsp[-5].JumpTable); Constant *V = cast<Constant>(getValNonImprovising((yyvsp[-4].PrimType), (yyvsp[-3].ValIDVal))); @@ -5073,7 +5092,7 @@ yyreduce: break; case 251: -#line 2483 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 2502 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.JumpTable) = new std::vector<std::pair<Constant*, BasicBlock*> >(); Constant *V = cast<Constant>(getValNonImprovising((yyvsp[-4].PrimType), (yyvsp[-3].ValIDVal))); @@ -5089,19 +5108,19 @@ yyreduce: break; case 252: -#line 2496 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 2515 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { - // Is this definition named?? if so, assign the name... - setValueName((yyvsp[0].InstVal), (yyvsp[-1].StrVal)); - CHECK_FOR_ERROR - InsertValue((yyvsp[0].InstVal)); - (yyval.InstVal) = (yyvsp[0].InstVal); - CHECK_FOR_ERROR -;} + // Is this definition named?? if so, assign the name... + setValueName((yyvsp[0].InstVal), (yyvsp[-1].StrVal)); + CHECK_FOR_ERROR + InsertValue((yyvsp[0].InstVal)); + (yyval.InstVal) = (yyvsp[0].InstVal); + CHECK_FOR_ERROR + ;} break; case 253: -#line 2505 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 2525 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { // Used for PHI nodes if (!UpRefs.empty()) GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-5].TypeVal))->getDescription()); @@ -5116,7 +5135,7 @@ yyreduce: break; case 254: -#line 2516 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 2536 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.PHIList) = (yyvsp[-6].PHIList); Value* tmpVal = getVal((yyvsp[-6].PHIList)->front().first->getType(), (yyvsp[-3].ValIDVal)); @@ -5128,7 +5147,7 @@ yyreduce: break; case 255: -#line 2526 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 2546 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { if (!UpRefs.empty()) GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription()); @@ -5140,7 +5159,7 @@ yyreduce: break; case 256: -#line 2534 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 2554 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { if (!UpRefs.empty()) GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription()); @@ -5152,17 +5171,17 @@ yyreduce: break; case 257: -#line 2542 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 2562 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.ValueRefList) = new ValueRefList(); ;} break; case 258: -#line 2545 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 2565 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.ValueList) = new std::vector<Value*>(); ;} break; case 259: -#line 2546 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 2566 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.ValueList) = (yyvsp[-2].ValueList); (yyval.ValueList)->push_back((yyvsp[0].ValueVal)); @@ -5171,7 +5190,7 @@ yyreduce: break; case 260: -#line 2553 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 2573 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.BoolVal) = true; CHECK_FOR_ERROR @@ -5179,7 +5198,7 @@ yyreduce: break; case 261: -#line 2557 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 2577 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.BoolVal) = false; CHECK_FOR_ERROR @@ -5187,7 +5206,7 @@ yyreduce: break; case 262: -#line 2562 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 2582 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { if (!UpRefs.empty()) GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-3].TypeVal))->getDescription()); @@ -5199,7 +5218,7 @@ yyreduce: ((yyvsp[-4].BinaryOpVal) == Instruction::URem || (yyvsp[-4].BinaryOpVal) == Instruction::SRem || (yyvsp[-4].BinaryOpVal) == Instruction::FRem)) - GEN_ERROR("U/S/FRem not supported on packed types"); + GEN_ERROR("Remainder not supported on packed types"); Value* val1 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[-2].ValIDVal)); CHECK_FOR_ERROR Value* val2 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[0].ValIDVal)); @@ -5212,7 +5231,7 @@ yyreduce: break; case 263: -#line 2583 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 2603 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { if (!UpRefs.empty()) GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-3].TypeVal))->getDescription()); @@ -5233,7 +5252,7 @@ yyreduce: break; case 264: -#line 2600 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 2620 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { if (!UpRefs.empty()) GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-3].TypeVal))->getDescription()); @@ -5250,7 +5269,7 @@ yyreduce: break; case 265: -#line 2613 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 2633 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { if (!UpRefs.empty()) GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-3].TypeVal))->getDescription()); @@ -5267,7 +5286,7 @@ yyreduce: break; case 266: -#line 2626 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 2646 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { if (!UpRefs.empty()) GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[0].TypeVal))->getDescription()); @@ -5283,7 +5302,7 @@ yyreduce: break; case 267: -#line 2638 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 2658 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { if ((yyvsp[-4].ValueVal)->getType() != Type::Int1Ty) GEN_ERROR("select condition must be boolean"); @@ -5295,7 +5314,7 @@ yyreduce: break; case 268: -#line 2646 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 2666 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { if (!UpRefs.empty()) GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[0].TypeVal))->getDescription()); @@ -5306,7 +5325,7 @@ yyreduce: break; case 269: -#line 2653 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 2673 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { if (!ExtractElementInst::isValidOperands((yyvsp[-2].ValueVal), (yyvsp[0].ValueVal))) GEN_ERROR("Invalid extractelement operands"); @@ -5316,7 +5335,7 @@ yyreduce: break; case 270: -#line 2659 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 2679 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { if (!InsertElementInst::isValidOperands((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal))) GEN_ERROR("Invalid insertelement operands"); @@ -5326,7 +5345,7 @@ yyreduce: break; case 271: -#line 2665 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 2685 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { if (!ShuffleVectorInst::isValidOperands((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal))) GEN_ERROR("Invalid shufflevector operands"); @@ -5336,7 +5355,7 @@ yyreduce: break; case 272: -#line 2671 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 2691 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { const Type *Ty = (yyvsp[0].PHIList)->front().first->getType(); if (!Ty->isFirstClassType()) @@ -5355,7 +5374,7 @@ yyreduce: break; case 273: -#line 2687 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 2707 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { // Handle the short syntax @@ -5422,7 +5441,7 @@ yyreduce: break; case 274: -#line 2750 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 2770 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.InstVal) = (yyvsp[0].InstVal); CHECK_FOR_ERROR @@ -5430,7 +5449,7 @@ yyreduce: break; case 275: -#line 2755 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 2775 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.BoolVal) = true; CHECK_FOR_ERROR @@ -5438,7 +5457,7 @@ yyreduce: break; case 276: -#line 2759 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 2779 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { (yyval.BoolVal) = false; CHECK_FOR_ERROR @@ -5446,7 +5465,7 @@ yyreduce: break; case 277: -#line 2766 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 2786 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { if (!UpRefs.empty()) GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription()); @@ -5457,7 +5476,7 @@ yyreduce: break; case 278: -#line 2773 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 2793 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { if (!UpRefs.empty()) GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-4].TypeVal))->getDescription()); @@ -5469,7 +5488,7 @@ yyreduce: break; case 279: -#line 2781 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 2801 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { if (!UpRefs.empty()) GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription()); @@ -5480,7 +5499,7 @@ yyreduce: break; case 280: -#line 2788 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 2808 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { if (!UpRefs.empty()) GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-4].TypeVal))->getDescription()); @@ -5492,7 +5511,7 @@ yyreduce: break; case 281: -#line 2796 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 2816 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { if (!isa<PointerType>((yyvsp[0].ValueVal)->getType())) GEN_ERROR("Trying to free nonpointer type " + @@ -5503,7 +5522,7 @@ yyreduce: break; case 282: -#line 2804 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 2824 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { if (!UpRefs.empty()) GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription()); @@ -5521,7 +5540,7 @@ yyreduce: break; case 283: -#line 2818 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 2838 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { if (!UpRefs.empty()) GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription()); @@ -5542,7 +5561,7 @@ yyreduce: break; case 284: -#line 2835 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 2855 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" { if (!UpRefs.empty()) GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription()); @@ -5565,7 +5584,7 @@ yyreduce: } /* Line 1126 of yacc.c. */ -#line 5569 "llvmAsmParser.tab.c" +#line 5588 "llvmAsmParser.tab.c" yyvsp -= yylen; yyssp -= yylen; @@ -5833,7 +5852,7 @@ yyreturn: } -#line 2852 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 2872 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" // common code from the two 'RunVMAsmParser' functions @@ -5875,11 +5894,10 @@ int yyerror(const char *ErrorMsg) { std::string where = std::string((CurFilename == "-") ? std::string("<stdin>") : CurFilename) + ":" + utostr((unsigned) llvmAsmlineno) + ": "; - std::string errMsg = std::string(ErrorMsg) + "\n" + where + " while reading "; - if (yychar == YYEMPTY || yychar == 0) - errMsg += "end-of-file."; - else - errMsg += "token: '" + std::string(llvmAsmtext, llvmAsmleng) + "'"; + std::string errMsg = where + "error: " + std::string(ErrorMsg); + if (yychar != YYEMPTY && yychar != 0) + errMsg += " while reading token: '" + std::string(llvmAsmtext, llvmAsmleng)+ + "'"; GenerateError(errMsg); return 0; } diff --git a/lib/AsmParser/llvmAsmParser.h.cvs b/lib/AsmParser/llvmAsmParser.h.cvs index 295a7b8..fa6e8af 100644 --- a/lib/AsmParser/llvmAsmParser.h.cvs +++ b/lib/AsmParser/llvmAsmParser.h.cvs @@ -295,7 +295,7 @@ #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED) -#line 886 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y" +#line 900 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y" typedef union YYSTYPE { llvm::Module *ModuleVal; llvm::Function *FunctionVal; diff --git a/lib/AsmParser/llvmAsmParser.y b/lib/AsmParser/llvmAsmParser.y index 186a93f..24b0abf 100644 --- a/lib/AsmParser/llvmAsmParser.y +++ b/lib/AsmParser/llvmAsmParser.y @@ -17,7 +17,7 @@ #include "llvm/InlineAsm.h" #include "llvm/Instructions.h" #include "llvm/Module.h" -#include "llvm/SymbolTable.h" +#include "llvm/ValueSymbolTable.h" #include "llvm/Support/GetElementPtrTypeIterator.h" #include "llvm/Support/CommandLine.h" #include "llvm/ADT/SmallVector.h" @@ -209,7 +209,7 @@ static struct PerFunctionInfo { std::map<const Type*, ValueList> Values; // Keep track of #'d definitions std::map<const Type*, ValueList> LateResolveValues; - bool isDeclare; // Is this function a forward declararation? + bool isDeclare; // Is this function a forward declararation? GlobalValue::LinkageTypes Linkage; // Linkage for forward declaration. GlobalValue::VisibilityTypes Visibility; @@ -341,24 +341,33 @@ static Value *getValNonImprovising(const Type *Ty, const ValID &D) { // Module constants occupy the lowest numbered slots... std::map<const Type*,ValueList>::iterator VI = CurModule.Values.find(Ty); - if (VI == CurModule.Values.end()) return 0; - if (D.Num >= VI->second.size()) return 0; + if (VI == CurModule.Values.end()) + return 0; + if (D.Num >= VI->second.size()) + return 0; return VI->second[Num]; } case ValID::LocalName: { // Is it a named definition? - if (!inFunctionScope()) return 0; - SymbolTable &SymTab = CurFun.CurrentFunction->getValueSymbolTable(); - Value *N = SymTab.lookup(Ty, D.Name); - if (N == 0) return 0; + if (!inFunctionScope()) + return 0; + ValueSymbolTable &SymTab = CurFun.CurrentFunction->getValueSymbolTable(); + Value *N = SymTab.lookup(D.Name); + if (N == 0) + return 0; + if (N->getType() != Ty) + return 0; D.destroy(); // Free old strdup'd memory... return N; } case ValID::GlobalName: { // Is it a named definition? - SymbolTable &SymTab = CurModule.CurrentModule->getValueSymbolTable(); - Value *N = SymTab.lookup(Ty, D.Name); - if (N == 0) return 0; + ValueSymbolTable &SymTab = CurModule.CurrentModule->getValueSymbolTable(); + Value *N = SymTab.lookup(D.Name); + if (N == 0) + return 0; + if (N->getType() != Ty) + return 0; D.destroy(); // Free old strdup'd memory... return N; @@ -499,8 +508,8 @@ static BasicBlock *getBBVal(const ValID &ID, bool isDefinition = false) { break; case ValID::LocalName: // Is it a named definition? Name = ID.Name; - if (Value *N = CurFun.CurrentFunction-> - getValueSymbolTable().lookup(Type::LabelTy, Name)) + Value *N = CurFun.CurrentFunction->getValueSymbolTable().lookup(Name); + if (N && N->getType()->getTypeID() == Type::LabelTyID) BB = cast<BasicBlock>(N); break; } @@ -640,8 +649,8 @@ static void setValueName(Value *V, char *NameStr) { } assert(inFunctionScope() && "Must be in function scope!"); - SymbolTable &ST = CurFun.CurrentFunction->getValueSymbolTable(); - if (ST.lookup(V->getType(), Name)) { + ValueSymbolTable &ST = CurFun.CurrentFunction->getValueSymbolTable(); + if (ST.lookup(Name)) { GenerateError("Redefinition of value '" + Name + "' of type '" + V->getType()->getDescription() + "'"); return; @@ -695,16 +704,21 @@ ParseGlobalVariable(char *NameStr, return GV; } - // If this global has a name, check to see if there is already a definition - // of this global in the module. If so, it is an error. + // If this global has a name if (!Name.empty()) { - // We are a simple redefinition of a value, check to see if it is defined - // the same as the old one. - if (CurModule.CurrentModule->getGlobalVariable(Name, Ty)) { - GenerateError("Redefinition of global variable named '" + Name + - "' of type '" + Ty->getDescription() + "'"); - return 0; - } + // if the global we're parsing has an initializer (is a definition) and + // has external linkage. + if (Initializer && Linkage != GlobalValue::InternalLinkage) + // If there is already a global with external linkage with this name + if (CurModule.CurrentModule->getGlobalVariable(Name, false)) { + // If we allow this GVar to get created, it will be renamed in the + // symbol table because it conflicts with an existing GVar. We can't + // allow redefinition of GVars whose linking indicates that their name + // must stay the same. Issue the error. + GenerateError("Redefinition of global variable named '" + Name + + "' of type '" + Ty->getDescription() + "'"); + return 0; + } } // Otherwise there is no existing GV to use, create one now. @@ -2078,17 +2092,21 @@ FunctionHeaderH : OptCallingConv ResultTypes GlobalName '(' ArgList ')' CurModule.CurrentModule->getFunctionList().remove(Fn); CurModule.CurrentModule->getFunctionList().push_back(Fn); } else if (!FunctionName.empty() && // Merge with an earlier prototype? - (Fn = CurModule.CurrentModule->getFunction(FunctionName, FT))) { - // If this is the case, either we need to be a forward decl, or it needs - // to be. - if (!CurFun.isDeclare && !Fn->isDeclaration()) + (Fn = CurModule.CurrentModule->getFunction(FunctionName))) { + if (Fn->getFunctionType() != FT ) { + // The existing function doesn't have the same type. This is an overload + // error. + GEN_ERROR("Overload of function '" + FunctionName + "' not permitted."); + } else if (!CurFun.isDeclare && !Fn->isDeclaration()) { + // Neither the existing or the current function is a declaration and they + // have the same name and same type. Clearly this is a redefinition. GEN_ERROR("Redefinition of function '" + FunctionName + "'"); - - // Make sure to strip off any argument names so we can't get conflicts. - if (Fn->isDeclaration()) + } if (Fn->isDeclaration()) { + // Make sure to strip off any argument names so we can't get conflicts. for (Function::arg_iterator AI = Fn->arg_begin(), AE = Fn->arg_end(); AI != AE; ++AI) AI->setName(""); + } } else { // Not already defined? Fn = new Function(FT, GlobalValue::ExternalLinkage, FunctionName, CurModule.CurrentModule); @@ -2115,16 +2133,18 @@ FunctionHeaderH : OptCallingConv ResultTypes GlobalName '(' ArgList ')' // Add all of the arguments we parsed to the function... if ($5) { // Is null if empty... if (isVarArg) { // Nuke the last entry - assert($5->back().Ty->get() == Type::VoidTy && $5->back().Name == 0&& + assert($5->back().Ty->get() == Type::VoidTy && $5->back().Name == 0 && "Not a varargs marker!"); delete $5->back().Ty; $5->pop_back(); // Delete the last entry } Function::arg_iterator ArgIt = Fn->arg_begin(); + Function::arg_iterator ArgEnd = Fn->arg_end(); unsigned Idx = 1; - for (ArgListType::iterator I = $5->begin(); I != $5->end(); ++I, ++ArgIt) { + for (ArgListType::iterator I = $5->begin(); + I != $5->end() && ArgIt != ArgEnd; ++I, ++ArgIt) { delete I->Ty; // Delete the typeholder... - setValueName(ArgIt, I->Name); // Insert arg into symtab... + setValueName(ArgIt, I->Name); // Insert arg into symtab... CHECK_FOR_ERROR InsertValue(ArgIt); Idx++; @@ -2299,7 +2319,6 @@ BasicBlock : InstructionList OptLocalAssign BBTerminatorInst { setValueName($3, $2); CHECK_FOR_ERROR InsertValue($3); - $1->getInstList().push_back($3); InsertValue($1); $$ = $1; @@ -2494,13 +2513,14 @@ JumpTable : JumpTable IntType ConstValueRef ',' LABEL ValueRef { }; Inst : OptLocalAssign InstVal { - // Is this definition named?? if so, assign the name... - setValueName($2, $1); - CHECK_FOR_ERROR - InsertValue($2); - $$ = $2; - CHECK_FOR_ERROR -}; + // Is this definition named?? if so, assign the name... + setValueName($2, $1); + CHECK_FOR_ERROR + InsertValue($2); + $$ = $2; + CHECK_FOR_ERROR + }; + PHIList : Types '[' ValueRef ',' ValueRef ']' { // Used for PHI nodes if (!UpRefs.empty()) @@ -2570,7 +2590,7 @@ InstVal : ArithmeticOps Types ValueRef ',' ValueRef { ($1 == Instruction::URem || $1 == Instruction::SRem || $1 == Instruction::FRem)) - GEN_ERROR("U/S/FRem not supported on packed types"); + GEN_ERROR("Remainder not supported on packed types"); Value* val1 = getVal(*$2, $3); CHECK_FOR_ERROR Value* val2 = getVal(*$2, $5); @@ -2890,11 +2910,10 @@ int yyerror(const char *ErrorMsg) { std::string where = std::string((CurFilename == "-") ? std::string("<stdin>") : CurFilename) + ":" + utostr((unsigned) llvmAsmlineno) + ": "; - std::string errMsg = std::string(ErrorMsg) + "\n" + where + " while reading "; - if (yychar == YYEMPTY || yychar == 0) - errMsg += "end-of-file."; - else - errMsg += "token: '" + std::string(llvmAsmtext, llvmAsmleng) + "'"; + std::string errMsg = where + "error: " + std::string(ErrorMsg); + if (yychar != YYEMPTY && yychar != 0) + errMsg += " while reading token: '" + std::string(llvmAsmtext, llvmAsmleng)+ + "'"; GenerateError(errMsg); return 0; } diff --git a/lib/AsmParser/llvmAsmParser.y.cvs b/lib/AsmParser/llvmAsmParser.y.cvs index 186a93f..24b0abf 100644 --- a/lib/AsmParser/llvmAsmParser.y.cvs +++ b/lib/AsmParser/llvmAsmParser.y.cvs @@ -17,7 +17,7 @@ #include "llvm/InlineAsm.h" #include "llvm/Instructions.h" #include "llvm/Module.h" -#include "llvm/SymbolTable.h" +#include "llvm/ValueSymbolTable.h" #include "llvm/Support/GetElementPtrTypeIterator.h" #include "llvm/Support/CommandLine.h" #include "llvm/ADT/SmallVector.h" @@ -209,7 +209,7 @@ static struct PerFunctionInfo { std::map<const Type*, ValueList> Values; // Keep track of #'d definitions std::map<const Type*, ValueList> LateResolveValues; - bool isDeclare; // Is this function a forward declararation? + bool isDeclare; // Is this function a forward declararation? GlobalValue::LinkageTypes Linkage; // Linkage for forward declaration. GlobalValue::VisibilityTypes Visibility; @@ -341,24 +341,33 @@ static Value *getValNonImprovising(const Type *Ty, const ValID &D) { // Module constants occupy the lowest numbered slots... std::map<const Type*,ValueList>::iterator VI = CurModule.Values.find(Ty); - if (VI == CurModule.Values.end()) return 0; - if (D.Num >= VI->second.size()) return 0; + if (VI == CurModule.Values.end()) + return 0; + if (D.Num >= VI->second.size()) + return 0; return VI->second[Num]; } case ValID::LocalName: { // Is it a named definition? - if (!inFunctionScope()) return 0; - SymbolTable &SymTab = CurFun.CurrentFunction->getValueSymbolTable(); - Value *N = SymTab.lookup(Ty, D.Name); - if (N == 0) return 0; + if (!inFunctionScope()) + return 0; + ValueSymbolTable &SymTab = CurFun.CurrentFunction->getValueSymbolTable(); + Value *N = SymTab.lookup(D.Name); + if (N == 0) + return 0; + if (N->getType() != Ty) + return 0; D.destroy(); // Free old strdup'd memory... return N; } case ValID::GlobalName: { // Is it a named definition? - SymbolTable &SymTab = CurModule.CurrentModule->getValueSymbolTable(); - Value *N = SymTab.lookup(Ty, D.Name); - if (N == 0) return 0; + ValueSymbolTable &SymTab = CurModule.CurrentModule->getValueSymbolTable(); + Value *N = SymTab.lookup(D.Name); + if (N == 0) + return 0; + if (N->getType() != Ty) + return 0; D.destroy(); // Free old strdup'd memory... return N; @@ -499,8 +508,8 @@ static BasicBlock *getBBVal(const ValID &ID, bool isDefinition = false) { break; case ValID::LocalName: // Is it a named definition? Name = ID.Name; - if (Value *N = CurFun.CurrentFunction-> - getValueSymbolTable().lookup(Type::LabelTy, Name)) + Value *N = CurFun.CurrentFunction->getValueSymbolTable().lookup(Name); + if (N && N->getType()->getTypeID() == Type::LabelTyID) BB = cast<BasicBlock>(N); break; } @@ -640,8 +649,8 @@ static void setValueName(Value *V, char *NameStr) { } assert(inFunctionScope() && "Must be in function scope!"); - SymbolTable &ST = CurFun.CurrentFunction->getValueSymbolTable(); - if (ST.lookup(V->getType(), Name)) { + ValueSymbolTable &ST = CurFun.CurrentFunction->getValueSymbolTable(); + if (ST.lookup(Name)) { GenerateError("Redefinition of value '" + Name + "' of type '" + V->getType()->getDescription() + "'"); return; @@ -695,16 +704,21 @@ ParseGlobalVariable(char *NameStr, return GV; } - // If this global has a name, check to see if there is already a definition - // of this global in the module. If so, it is an error. + // If this global has a name if (!Name.empty()) { - // We are a simple redefinition of a value, check to see if it is defined - // the same as the old one. - if (CurModule.CurrentModule->getGlobalVariable(Name, Ty)) { - GenerateError("Redefinition of global variable named '" + Name + - "' of type '" + Ty->getDescription() + "'"); - return 0; - } + // if the global we're parsing has an initializer (is a definition) and + // has external linkage. + if (Initializer && Linkage != GlobalValue::InternalLinkage) + // If there is already a global with external linkage with this name + if (CurModule.CurrentModule->getGlobalVariable(Name, false)) { + // If we allow this GVar to get created, it will be renamed in the + // symbol table because it conflicts with an existing GVar. We can't + // allow redefinition of GVars whose linking indicates that their name + // must stay the same. Issue the error. + GenerateError("Redefinition of global variable named '" + Name + + "' of type '" + Ty->getDescription() + "'"); + return 0; + } } // Otherwise there is no existing GV to use, create one now. @@ -2078,17 +2092,21 @@ FunctionHeaderH : OptCallingConv ResultTypes GlobalName '(' ArgList ')' CurModule.CurrentModule->getFunctionList().remove(Fn); CurModule.CurrentModule->getFunctionList().push_back(Fn); } else if (!FunctionName.empty() && // Merge with an earlier prototype? - (Fn = CurModule.CurrentModule->getFunction(FunctionName, FT))) { - // If this is the case, either we need to be a forward decl, or it needs - // to be. - if (!CurFun.isDeclare && !Fn->isDeclaration()) + (Fn = CurModule.CurrentModule->getFunction(FunctionName))) { + if (Fn->getFunctionType() != FT ) { + // The existing function doesn't have the same type. This is an overload + // error. + GEN_ERROR("Overload of function '" + FunctionName + "' not permitted."); + } else if (!CurFun.isDeclare && !Fn->isDeclaration()) { + // Neither the existing or the current function is a declaration and they + // have the same name and same type. Clearly this is a redefinition. GEN_ERROR("Redefinition of function '" + FunctionName + "'"); - - // Make sure to strip off any argument names so we can't get conflicts. - if (Fn->isDeclaration()) + } if (Fn->isDeclaration()) { + // Make sure to strip off any argument names so we can't get conflicts. for (Function::arg_iterator AI = Fn->arg_begin(), AE = Fn->arg_end(); AI != AE; ++AI) AI->setName(""); + } } else { // Not already defined? Fn = new Function(FT, GlobalValue::ExternalLinkage, FunctionName, CurModule.CurrentModule); @@ -2115,16 +2133,18 @@ FunctionHeaderH : OptCallingConv ResultTypes GlobalName '(' ArgList ')' // Add all of the arguments we parsed to the function... if ($5) { // Is null if empty... if (isVarArg) { // Nuke the last entry - assert($5->back().Ty->get() == Type::VoidTy && $5->back().Name == 0&& + assert($5->back().Ty->get() == Type::VoidTy && $5->back().Name == 0 && "Not a varargs marker!"); delete $5->back().Ty; $5->pop_back(); // Delete the last entry } Function::arg_iterator ArgIt = Fn->arg_begin(); + Function::arg_iterator ArgEnd = Fn->arg_end(); unsigned Idx = 1; - for (ArgListType::iterator I = $5->begin(); I != $5->end(); ++I, ++ArgIt) { + for (ArgListType::iterator I = $5->begin(); + I != $5->end() && ArgIt != ArgEnd; ++I, ++ArgIt) { delete I->Ty; // Delete the typeholder... - setValueName(ArgIt, I->Name); // Insert arg into symtab... + setValueName(ArgIt, I->Name); // Insert arg into symtab... CHECK_FOR_ERROR InsertValue(ArgIt); Idx++; @@ -2299,7 +2319,6 @@ BasicBlock : InstructionList OptLocalAssign BBTerminatorInst { setValueName($3, $2); CHECK_FOR_ERROR InsertValue($3); - $1->getInstList().push_back($3); InsertValue($1); $$ = $1; @@ -2494,13 +2513,14 @@ JumpTable : JumpTable IntType ConstValueRef ',' LABEL ValueRef { }; Inst : OptLocalAssign InstVal { - // Is this definition named?? if so, assign the name... - setValueName($2, $1); - CHECK_FOR_ERROR - InsertValue($2); - $$ = $2; - CHECK_FOR_ERROR -}; + // Is this definition named?? if so, assign the name... + setValueName($2, $1); + CHECK_FOR_ERROR + InsertValue($2); + $$ = $2; + CHECK_FOR_ERROR + }; + PHIList : Types '[' ValueRef ',' ValueRef ']' { // Used for PHI nodes if (!UpRefs.empty()) @@ -2570,7 +2590,7 @@ InstVal : ArithmeticOps Types ValueRef ',' ValueRef { ($1 == Instruction::URem || $1 == Instruction::SRem || $1 == Instruction::FRem)) - GEN_ERROR("U/S/FRem not supported on packed types"); + GEN_ERROR("Remainder not supported on packed types"); Value* val1 = getVal(*$2, $3); CHECK_FOR_ERROR Value* val2 = getVal(*$2, $5); @@ -2890,11 +2910,10 @@ int yyerror(const char *ErrorMsg) { std::string where = std::string((CurFilename == "-") ? std::string("<stdin>") : CurFilename) + ":" + utostr((unsigned) llvmAsmlineno) + ": "; - std::string errMsg = std::string(ErrorMsg) + "\n" + where + " while reading "; - if (yychar == YYEMPTY || yychar == 0) - errMsg += "end-of-file."; - else - errMsg += "token: '" + std::string(llvmAsmtext, llvmAsmleng) + "'"; + std::string errMsg = where + "error: " + std::string(ErrorMsg); + if (yychar != YYEMPTY && yychar != 0) + errMsg += " while reading token: '" + std::string(llvmAsmtext, llvmAsmleng)+ + "'"; GenerateError(errMsg); return 0; } diff --git a/lib/Bytecode/Reader/Analyzer.cpp b/lib/Bytecode/Reader/Analyzer.cpp index 64907a8..71cb4b2 100644 --- a/lib/Bytecode/Reader/Analyzer.cpp +++ b/lib/Bytecode/Reader/Analyzer.cpp @@ -270,19 +270,15 @@ public: *os << " } END BLOCK: CompactionTable\n"; } - virtual void handleSymbolTableBegin(Function* CF, SymbolTable* ST) { + virtual void handleTypeSymbolTableBegin(TypeSymbolTable* ST) { bca.numSymTab++; if (os) - *os << " BLOCK: SymbolTable {\n"; + *os << " BLOCK: TypeSymbolTable {\n"; } - - virtual void handleSymbolTablePlane(unsigned Ty, unsigned NumEntries, - const Type* Typ) { - if (os) { - *os << " Plane: Ty=" << Ty << " Size=" << NumEntries << " Type: "; - WriteTypeSymbolic(*os,Typ,M); - *os << "\n"; - } + virtual void handleValueSymbolTableBegin(Function* CF, ValueSymbolTable* ST) { + bca.numSymTab++; + if (os) + *os << " BLOCK: ValueSymbolTable {\n"; } virtual void handleSymbolTableType(unsigned i, unsigned TypSlot, @@ -292,18 +288,23 @@ public: << " Name: " << name << "\n"; } - virtual void handleSymbolTableValue(unsigned i, unsigned ValSlot, - const std::string& name ) { + virtual void handleSymbolTableValue(unsigned TySlot, unsigned ValSlot, + const std::string& name) { if (os) - *os << " Value " << i << " Slot=" << ValSlot + *os << " Value " << TySlot << " Slot=" << ValSlot << " Name: " << name << "\n"; if (ValSlot > bca.maxValueSlot) bca.maxValueSlot = ValSlot; } - virtual void handleSymbolTableEnd() { + virtual void handleValueSymbolTableEnd() { if (os) - *os << " } END BLOCK: SymbolTable\n"; + *os << " } END BLOCK: ValueSymbolTable\n"; + } + + virtual void handleTypeSymbolTableEnd() { + if (os) + *os << " } END BLOCK: TypeSymbolTable\n"; } virtual void handleFunctionBegin(Function* Func, unsigned Size) { @@ -358,15 +359,15 @@ public: } virtual bool handleInstruction( unsigned Opcode, const Type* iType, - std::vector<unsigned>& Operands, unsigned Size){ + std::vector<unsigned>& Operands, + Instruction *Inst, + unsigned Size){ if (os) { *os << " INST: OpCode=" - << Instruction::getOpcodeName(Opcode) << " Type=\""; - WriteTypeSymbolic(*os,iType,M); - *os << "\""; + << Instruction::getOpcodeName(Opcode); for ( unsigned i = 0; i < Operands.size(); ++i ) - *os << " Op(" << i << ")=Slot(" << Operands[i] << ")"; - *os << "\n"; + *os << " Op(" << Operands[i] << ")"; + *os << *Inst; } bca.numInstructions++; diff --git a/lib/Bytecode/Reader/Reader.cpp b/lib/Bytecode/Reader/Reader.cpp index e2505cc..ff6d8f0 100644 --- a/lib/Bytecode/Reader/Reader.cpp +++ b/lib/Bytecode/Reader/Reader.cpp @@ -23,7 +23,6 @@ #include "llvm/Constants.h" #include "llvm/InlineAsm.h" #include "llvm/Instructions.h" -#include "llvm/SymbolTable.h" #include "llvm/TypeSymbolTable.h" #include "llvm/Bytecode/Format.h" #include "llvm/Config/alloca.h" @@ -55,6 +54,7 @@ namespace { inline void BytecodeReader::error(const std::string& err) { ErrorMsg = err + " (Vers=" + itostr(RevisionNum) + ", Pos=" + itostr(At-MemStart) + ")"; + if (Handler) Handler->handleError(ErrorMsg); longjmp(context,1); } @@ -443,10 +443,6 @@ void BytecodeReader::ParseInstruction(std::vector<unsigned> &Oprnds, // of opcodes. Instruction* Result = 0; - // We have enough info to inform the handler now. - if (Handler) - Handler->handleInstruction(Opcode, InstTy, Oprnds, At-SaveAt); - // First, handle the easy binary operators case if (Opcode >= Instruction::BinaryOpsBegin && Opcode < Instruction::BinaryOpsEnd && Oprnds.size() == 2) { @@ -861,6 +857,10 @@ void BytecodeReader::ParseInstruction(std::vector<unsigned> &Oprnds, else TypeSlot = getTypeSlot(Result->getType()); + // We have enough info to inform the handler now. + if (Handler) + Handler->handleInstruction(Opcode, InstTy, Oprnds, Result, At-SaveAt); + insertValue(Result, TypeSlot, FunctionValues); } @@ -936,9 +936,9 @@ void BytecodeReader::ParseTypeSymbolTable(TypeSymbolTable *TST) { /// CurrentFunction's symbol table. For Module level symbol tables, the /// CurrentFunction argument must be zero. void BytecodeReader::ParseValueSymbolTable(Function *CurrentFunction, - SymbolTable *ST) { + ValueSymbolTable *VST) { - if (Handler) Handler->handleSymbolTableBegin(CurrentFunction,ST); + if (Handler) Handler->handleValueSymbolTableBegin(CurrentFunction,VST); // Allow efficient basic block lookup by number. std::vector<BasicBlock*> BBMap; @@ -963,13 +963,15 @@ void BytecodeReader::ParseValueSymbolTable(Function *CurrentFunction, } else { V = getValue(Typ, slot, false); // Find mapping... } + if (Handler) Handler->handleSymbolTableValue(Typ, slot, Name); if (V == 0) - error("Failed value look-up for name '" + Name + "'"); + error("Failed value look-up for name '" + Name + "', type #" + + utostr(Typ) + " slot #" + utostr(slot)); V->setName(Name); } } checkPastBlockEnd("Symbol Table"); - if (Handler) Handler->handleSymbolTableEnd(); + if (Handler) Handler->handleValueSymbolTableEnd(); } // Parse a single type. The typeid is read in first. If its a primitive type diff --git a/lib/Bytecode/Reader/Reader.h b/lib/Bytecode/Reader/Reader.h index 92c8fa0..b881f9d 100644 --- a/lib/Bytecode/Reader/Reader.h +++ b/lib/Bytecode/Reader/Reader.h @@ -28,8 +28,10 @@ namespace llvm { -class BytecodeHandler; ///< Forward declare the handler interface -class TypeSymbolTable; ///< Forward declare +// Forward declarations +class BytecodeHandler; +class TypeSymbolTable; +class ValueSymbolTable; /// This class defines the interface for parsing a buffer of bytecode. The /// parser itself takes no action except to call the various functions of @@ -204,7 +206,7 @@ protected: void ParseTypeSymbolTable(TypeSymbolTable *ST); /// @brief Parse a value symbol table - void ParseValueSymbolTable(Function* Func, SymbolTable *ST); + void ParseValueSymbolTable(Function* Func, ValueSymbolTable *ST); /// @brief Parse functions lazily. void ParseFunctionLazily(); diff --git a/lib/Bytecode/Writer/SlotCalculator.cpp b/lib/Bytecode/Writer/SlotCalculator.cpp index 9115ddb..197f206 100644 --- a/lib/Bytecode/Writer/SlotCalculator.cpp +++ b/lib/Bytecode/Writer/SlotCalculator.cpp @@ -21,9 +21,9 @@ #include "llvm/InlineAsm.h" #include "llvm/Instructions.h" #include "llvm/Module.h" -#include "llvm/SymbolTable.h" #include "llvm/TypeSymbolTable.h" #include "llvm/Type.h" +#include "llvm/ValueSymbolTable.h" #include "llvm/Analysis/ConstantsScanner.h" #include "llvm/ADT/PostOrderIterator.h" #include "llvm/ADT/STLExtras.h" @@ -218,8 +218,8 @@ void SlotCalculator::processModule() { // processTypeSymbolTable - Insert all of the type sin the specified symbol // table. -void SlotCalculator::processTypeSymbolTable(const TypeSymbolTable *ST) { - for (TypeSymbolTable::const_iterator TI = ST->begin(), TE = ST->end(); +void SlotCalculator::processTypeSymbolTable(const TypeSymbolTable *TST) { + for (TypeSymbolTable::const_iterator TI = TST->begin(), TE = TST->end(); TI != TE; ++TI ) getOrCreateSlot(TI->second); } @@ -227,23 +227,18 @@ void SlotCalculator::processTypeSymbolTable(const TypeSymbolTable *ST) { // processSymbolTable - Insert all of the values in the specified symbol table // into the values table... // -void SlotCalculator::processValueSymbolTable(const SymbolTable *ST) { - for (SymbolTable::plane_const_iterator PI = ST->plane_begin(), - PE = ST->plane_end(); PI != PE; ++PI) - for (SymbolTable::value_const_iterator VI = PI->second.begin(), - VE = PI->second.end(); VI != VE; ++VI) - getOrCreateSlot(VI->second); +void SlotCalculator::processValueSymbolTable(const ValueSymbolTable *VST) { + for (ValueSymbolTable::const_iterator VI = VST->begin(), VE = VST->end(); + VI != VE; ++VI) + getOrCreateSlot(VI->second); } -void SlotCalculator::processSymbolTableConstants(const SymbolTable *ST) { +void SlotCalculator::processSymbolTableConstants(const ValueSymbolTable *VST) { // Now do the constant values in all planes - for (SymbolTable::plane_const_iterator PI = ST->plane_begin(), - PE = ST->plane_end(); PI != PE; ++PI) - for (SymbolTable::value_const_iterator VI = PI->second.begin(), - VE = PI->second.end(); VI != VE; ++VI) - if (isa<Constant>(VI->second) && - !isa<GlobalValue>(VI->second)) - getOrCreateSlot(VI->second); + for (ValueSymbolTable::const_iterator VI = VST->begin(), VE = VST->end(); + VI != VE; ++VI) + if (isa<Constant>(VI->second) && !isa<GlobalValue>(VI->second)) + getOrCreateSlot(VI->second); } diff --git a/lib/Bytecode/Writer/SlotCalculator.h b/lib/Bytecode/Writer/SlotCalculator.h index 8200992..6cddb30 100644 --- a/lib/Bytecode/Writer/SlotCalculator.h +++ b/lib/Bytecode/Writer/SlotCalculator.h @@ -31,6 +31,7 @@ class Module; class Function; class SymbolTable; class TypeSymbolTable; +class ValueSymbolTable; class ConstantArray; class SlotCalculator { @@ -130,8 +131,8 @@ private: // into the values table... // void processTypeSymbolTable(const TypeSymbolTable *ST); - void processValueSymbolTable(const SymbolTable *ST); - void processSymbolTableConstants(const SymbolTable *ST); + void processValueSymbolTable(const ValueSymbolTable *ST); + void processSymbolTableConstants(const ValueSymbolTable *ST); // insertPrimitives - helper for constructors to insert primitive types. void insertPrimitives(); diff --git a/lib/Bytecode/Writer/Writer.cpp b/lib/Bytecode/Writer/Writer.cpp index 0d4ccbd..a2e8fe5 100644 --- a/lib/Bytecode/Writer/Writer.cpp +++ b/lib/Bytecode/Writer/Writer.cpp @@ -26,8 +26,8 @@ #include "llvm/InlineAsm.h" #include "llvm/Instructions.h" #include "llvm/Module.h" -#include "llvm/SymbolTable.h" #include "llvm/TypeSymbolTable.h" +#include "llvm/ValueSymbolTable.h" #include "llvm/Support/GetElementPtrTypeIterator.h" #include "llvm/Support/Compressor.h" #include "llvm/Support/MathExtras.h" @@ -1144,21 +1144,31 @@ void BytecodeWriter::outputTypeSymbolTable(const TypeSymbolTable &TST) { } } -void BytecodeWriter::outputValueSymbolTable(const SymbolTable &MST) { +void BytecodeWriter::outputValueSymbolTable(const ValueSymbolTable &VST) { // Do not output the Bytecode block for an empty symbol table, it just wastes // space! - if (MST.isEmpty()) return; + if (VST.empty()) return; BytecodeBlock SymTabBlock(BytecodeFormat::ValueSymbolTableBlockID, *this, true/*ElideIfEmpty*/); - // Now do each of the type planes in order. - for (SymbolTable::plane_const_iterator PI = MST.plane_begin(), - PE = MST.plane_end(); PI != PE; ++PI) { - SymbolTable::value_const_iterator I = MST.value_begin(PI->first); - SymbolTable::value_const_iterator End = MST.value_end(PI->first); + // Organize the symbol table by type + typedef std::pair<std::string, const Value*> PlaneMapEntry; + typedef std::vector<PlaneMapEntry> PlaneMapVector; + typedef std::map<const Type*, PlaneMapVector > PlaneMap; + PlaneMap Planes; + for (ValueSymbolTable::const_iterator SI = VST.begin(), SE = VST.end(); + SI != SE; ++SI) + Planes[SI->second->getType()].push_back( + std::make_pair(SI->first,SI->second)); + + for (PlaneMap::const_iterator PI = Planes.begin(), PE = Planes.end(); + PI != PE; ++PI) { int Slot; + PlaneMapVector::const_iterator I = PI->second.begin(); + PlaneMapVector::const_iterator End = PI->second.end(); + if (I == End) continue; // Don't mess with an absent type... // Write the number of values in this plane diff --git a/lib/Bytecode/Writer/WriterInternals.h b/lib/Bytecode/Writer/WriterInternals.h index c518c01..f3c59f3 100644 --- a/lib/Bytecode/Writer/WriterInternals.h +++ b/lib/Bytecode/Writer/WriterInternals.h @@ -26,6 +26,7 @@ namespace llvm { class InlineAsm; class TypeSymbolTable; + class ValueSymbolTable; class BytecodeWriter { std::vector<unsigned char> &Out; @@ -66,7 +67,7 @@ private: void outputModuleInfoBlock(const Module *C); void outputTypeSymbolTable(const TypeSymbolTable &TST); - void outputValueSymbolTable(const SymbolTable &ST); + void outputValueSymbolTable(const ValueSymbolTable &ST); void outputTypes(unsigned StartNo); void outputConstantsInPlane(const std::vector<const Value*> &Plane, unsigned StartNo); diff --git a/lib/Linker/LinkModules.cpp b/lib/Linker/LinkModules.cpp index 2d16495..8376534 100644 --- a/lib/Linker/LinkModules.cpp +++ b/lib/Linker/LinkModules.cpp @@ -20,8 +20,8 @@ #include "llvm/Constants.h" #include "llvm/DerivedTypes.h" #include "llvm/Module.h" -#include "llvm/SymbolTable.h" #include "llvm/TypeSymbolTable.h" +#include "llvm/ValueSymbolTable.h" #include "llvm/Instructions.h" #include "llvm/Assembly/Writer.h" #include "llvm/Support/Streams.h" @@ -273,7 +273,8 @@ static void PrintMap(const std::map<const Value*, Value*> &M) { static Value *RemapOperand(const Value *In, std::map<const Value*, Value*> &ValueMap) { std::map<const Value*,Value*>::const_iterator I = ValueMap.find(In); - if (I != ValueMap.end()) return I->second; + if (I != ValueMap.end()) + return I->second; // Check to see if it's a constant that we are interested in transforming. Value *Result = 0; @@ -333,20 +334,34 @@ static Value *RemapOperand(const Value *In, /// through the trouble to force this back. static void ForceRenaming(GlobalValue *GV, const std::string &Name) { assert(GV->getName() != Name && "Can't force rename to self"); - SymbolTable &ST = GV->getParent()->getValueSymbolTable(); + ValueSymbolTable &ST = GV->getParent()->getValueSymbolTable(); // If there is a conflict, rename the conflict. - Value *ConflictVal = ST.lookup(GV->getType(), Name); - assert(ConflictVal&&"Why do we have to force rename if there is no conflic?"); - GlobalValue *ConflictGV = cast<GlobalValue>(ConflictVal); - assert(ConflictGV->hasInternalLinkage() && - "Not conflicting with a static global, should link instead!"); - - ConflictGV->setName(""); // Eliminate the conflict - GV->setName(Name); // Force the name back - ConflictGV->setName(Name); // This will cause ConflictGV to get renamed - assert(GV->getName() == Name && ConflictGV->getName() != Name && - "ForceRenaming didn't work"); + GlobalValue *ConflictGV = cast_or_null<GlobalValue>(ST.lookup(Name)); + if (ConflictGV) { + assert(ConflictGV->hasInternalLinkage() && + "Not conflicting with a static global, should link instead!"); + ConflictGV->setName(""); // Eliminate the conflict + } + GV->setName(Name); // Force the name back + if (ConflictGV) { + ConflictGV->setName(Name); // This will cause ConflictGV to get renamed + assert(ConflictGV->getName() != Name && "ForceRenaming didn't work"); + } + assert(GV->getName() == Name && "ForceRenaming didn't work"); +} + +/// CopyGVAttributes - copy additional attributes (those not needed to construct +/// a GlobalValue) from the SrcGV to the DestGV. +static void CopyGVAttributes(GlobalValue *DestGV, const GlobalValue *SrcGV) { + // Propagate alignment, visibility and section info. + DestGV->setAlignment(std::max(DestGV->getAlignment(), SrcGV->getAlignment())); + DestGV->setSection(SrcGV->getSection()); + DestGV->setVisibility(SrcGV->getVisibility()); + if (const Function *SrcF = dyn_cast<Function>(SrcGV)) { + Function *DestF = cast<Function>(DestGV); + DestF->setCallingConv(SrcF->getCallingConv()); + } } /// GetLinkageResult - This analyzes the two global values and determines what @@ -431,29 +446,20 @@ static bool GetLinkageResult(GlobalValue *Dest, GlobalValue *Src, static bool LinkGlobals(Module *Dest, Module *Src, std::map<const Value*, Value*> &ValueMap, std::multimap<std::string, GlobalVariable *> &AppendingVars, - std::map<std::string, GlobalValue*> &GlobalsByName, std::string *Err) { - // We will need a module level symbol table if the src module has a module - // level symbol table... - TypeSymbolTable *TST = &Dest->getTypeSymbolTable(); - // Loop over all of the globals in the src module, mapping them over as we go for (Module::global_iterator I = Src->global_begin(), E = Src->global_end(); I != E; ++I) { GlobalVariable *SGV = I; GlobalVariable *DGV = 0; // Check to see if may have to link the global. - if (SGV->hasName() && !SGV->hasInternalLinkage()) - if (!(DGV = Dest->getGlobalVariable(SGV->getName(), - SGV->getType()->getElementType()))) { - std::map<std::string, GlobalValue*>::iterator EGV = - GlobalsByName.find(SGV->getName()); - if (EGV != GlobalsByName.end()) - DGV = dyn_cast<GlobalVariable>(EGV->second); - if (DGV) - // If types don't agree due to opaque types, try to resolve them. - RecursiveResolveTypes(SGV->getType(), DGV->getType(), TST, ""); - } + if (SGV->hasName() && !SGV->hasInternalLinkage()) { + DGV = Dest->getGlobalVariable(SGV->getName()); + if (DGV && DGV->getType() != SGV->getType()) + // If types don't agree due to opaque types, try to resolve them. + RecursiveResolveTypes(SGV->getType(), DGV->getType(), + &Dest->getTypeSymbolTable(), ""); + } if (DGV && DGV->hasInternalLinkage()) DGV = 0; @@ -476,9 +482,7 @@ static bool LinkGlobals(Module *Dest, Module *Src, SGV->isConstant(), SGV->getLinkage(), /*init*/0, SGV->getName(), Dest); // Propagate alignment, visibility and section info. - NewDGV->setAlignment(SGV->getAlignment()); - NewDGV->setSection(SGV->getSection()); - NewDGV->setVisibility(SGV->getVisibility()); + CopyGVAttributes(NewDGV, SGV); // If the LLVM runtime renamed the global, but it is an externally visible // symbol, DGV must be an existing global with internal linkage. Rename @@ -502,9 +506,8 @@ static bool LinkGlobals(Module *Dest, Module *Src, "", Dest); // Propagate alignment, section and visibility info. - NewDGV->setAlignment(std::max(DGV->getAlignment(), SGV->getAlignment())); - NewDGV->setSection(SGV->getSection()); - NewDGV->setVisibility(SGV->getVisibility()); + NewDGV->setAlignment(DGV->getAlignment()); + CopyGVAttributes(NewDGV, SGV); // Make sure to remember this mapping... ValueMap.insert(std::make_pair(SGV, NewDGV)); @@ -513,9 +516,7 @@ static bool LinkGlobals(Module *Dest, Module *Src, AppendingVars.insert(std::make_pair(SGV->getName(), NewDGV)); } else { // Propagate alignment, section, and visibility info. - DGV->setAlignment(std::max(DGV->getAlignment(), SGV->getAlignment())); - DGV->setSection(SGV->getSection()); - DGV->setVisibility(SGV->getVisibility()); + CopyGVAttributes(DGV, SGV); // Otherwise, perform the mapping as instructed by GetLinkageResult. If // the types don't match, and if we are to link from the source, nuke DGV @@ -524,9 +525,7 @@ static bool LinkGlobals(Module *Dest, Module *Src, GlobalVariable *NewDGV = new GlobalVariable(SGV->getType()->getElementType(), DGV->isConstant(), DGV->getLinkage()); - NewDGV->setAlignment(DGV->getAlignment()); - NewDGV->setSection(DGV->getSection()); - NewDGV->setVisibility(DGV->getVisibility()); + CopyGVAttributes(NewDGV, DGV); Dest->getGlobalList().insert(DGV, NewDGV); DGV->replaceAllUsesWith( ConstantExpr::getBitCast(NewDGV, DGV->getType())); @@ -607,33 +606,64 @@ static bool LinkGlobalInits(Module *Dest, const Module *Src, // static bool LinkFunctionProtos(Module *Dest, const Module *Src, std::map<const Value*, Value*> &ValueMap, - std::map<std::string, - GlobalValue*> &GlobalsByName, std::string *Err) { - TypeSymbolTable *TST = &Dest->getTypeSymbolTable(); - // Loop over all of the functions in the src module, mapping them over for (Module::const_iterator I = Src->begin(), E = Src->end(); I != E; ++I) { const Function *SF = I; // SrcFunction Function *DF = 0; if (SF->hasName() && !SF->hasInternalLinkage()) { // Check to see if may have to link the function. - if (!(DF = Dest->getFunction(SF->getName(), SF->getFunctionType()))) { - std::map<std::string, GlobalValue*>::iterator EF = - GlobalsByName.find(SF->getName()); - if (EF != GlobalsByName.end()) - DF = dyn_cast<Function>(EF->second); - if (DF && RecursiveResolveTypes(SF->getType(), DF->getType(), TST, "")) - DF = 0; // FIXME: gross. - } + DF = Dest->getFunction(SF->getName()); + if (DF && SF->getType() != DF->getType()) + // If types don't agree because of opaque, try to resolve them + RecursiveResolveTypes(SF->getType(), DF->getType(), + &Dest->getTypeSymbolTable(), ""); } - - if (!DF || SF->hasInternalLinkage() || DF->hasInternalLinkage()) { + + if (DF && DF->getType() != SF->getType()) { + if (DF->isDeclaration() && !SF->isDeclaration()) { + // We have a definition of the same name but different type in the + // source module. Copy the prototype to the destination and replace + // uses of the destination's prototype with the new prototype. + Function *NewDF = new Function(SF->getFunctionType(), SF->getLinkage(), + SF->getName(), Dest); + CopyGVAttributes(NewDF, SF); + + // Any uses of DF need to change to NewDF, with cast + DF->replaceAllUsesWith(ConstantExpr::getBitCast(NewDF, DF->getType())); + + // DF will conflict with NewDF because they both had the same. We must + // erase this now so ForceRenaming doesn't assert because DF might + // not have internal linkage. + DF->eraseFromParent(); + + // If the symbol table renamed the function, but it is an externally + // visible symbol, DF must be an existing function with internal + // linkage. Rename it. + if (NewDF->getName() != SF->getName() && !NewDF->hasInternalLinkage()) + ForceRenaming(NewDF, SF->getName()); + + // Remember this mapping so uses in the source module get remapped + // later by RemapOperand. + ValueMap[SF] = NewDF; + } else if (SF->isDeclaration()) { + // We have two functions of the same name but different type and the + // source is a declaration while the destination is not. Any use of + // the source must be mapped to the destination, with a cast. + ValueMap[SF] = ConstantExpr::getBitCast(DF, SF->getType()); + } else { + // We have two functions of the same name but different types and they + // are both definitions. This is an error. + return Error(Err, "Function '" + DF->getName() + "' defined as both '" + + ToStr(SF->getFunctionType(), Src) + "' and '" + + ToStr(DF->getFunctionType(), Dest) + "'"); + } + } else if (!DF || SF->hasInternalLinkage() || DF->hasInternalLinkage()) { // Function does not already exist, simply insert an function signature // identical to SF into the dest module... Function *NewDF = new Function(SF->getFunctionType(), SF->getLinkage(), SF->getName(), Dest); - NewDF->setCallingConv(SF->getCallingConv()); + CopyGVAttributes(NewDF, SF); // If the LLVM runtime renamed the function, but it is an externally // visible symbol, DF must be an existing function with internal linkage. @@ -644,8 +674,8 @@ static bool LinkFunctionProtos(Module *Dest, const Module *Src, // ... and remember this mapping... ValueMap.insert(std::make_pair(SF, NewDF)); } else if (SF->isDeclaration()) { - // If SF is external or if both SF & DF are external.. Just link the - // external functions, we aren't adding anything. + // If SF is a declaration or if both SF & DF are declarations, just link + // the declarations, we aren't adding anything. if (SF->hasDLLImportLinkage()) { if (DF->isDeclaration()) { ValueMap.insert(std::make_pair(SF, DF)); @@ -668,8 +698,6 @@ static bool LinkFunctionProtos(Module *Dest, const Module *Src, if ((DF->hasLinkOnceLinkage() && SF->hasWeakLinkage()) || DF->hasExternalWeakLinkage()) DF->setLinkage(SF->getLinkage()); - - } else if (DF->hasWeakLinkage() || DF->hasLinkOnceLinkage()) { // At this point we know that SF has LinkOnce or External* linkage. ValueMap.insert(std::make_pair(SF, DF)); @@ -677,10 +705,10 @@ static bool LinkFunctionProtos(Module *Dest, const Module *Src, // Don't inherit linkonce & external weak linkage DF->setLinkage(SF->getLinkage()); } else if (SF->getLinkage() != DF->getLinkage()) { - return Error(Err, "Functions named '" + SF->getName() + - "' have different linkage specifiers!"); + return Error(Err, "Functions named '" + SF->getName() + + "' have different linkage specifiers!"); } else if (SF->hasExternalLinkage()) { - // The function is defined in both modules!! + // The function is defined identically in both modules!! return Error(Err, "Function '" + ToStr(SF->getFunctionType(), Src) + "':\"" + SF->getName() + "\" - Function is already defined!"); @@ -695,7 +723,7 @@ static bool LinkFunctionProtos(Module *Dest, const Module *Src, // fix up references to values. At this point we know that Dest is an external // function, and that Src is not. static bool LinkFunctionBody(Function *Dest, Function *Src, - std::map<const Value*, Value*> &GlobalMap, + std::map<const Value*, Value*> &ValueMap, std::string *Err) { assert(Src && Dest && Dest->isDeclaration() && !Src->isDeclaration()); @@ -706,7 +734,7 @@ static bool LinkFunctionBody(Function *Dest, Function *Src, DI->setName(I->getName()); // Copy the name information over... // Add a mapping to our local map - GlobalMap.insert(std::make_pair(I, DI)); + ValueMap.insert(std::make_pair(I, DI)); } // Splice the body of the source function into the dest function. @@ -722,12 +750,12 @@ static bool LinkFunctionBody(Function *Dest, Function *Src, for (Instruction::op_iterator OI = I->op_begin(), OE = I->op_end(); OI != OE; ++OI) if (!isa<Instruction>(*OI) && !isa<BasicBlock>(*OI)) - *OI = RemapOperand(*OI, GlobalMap); + *OI = RemapOperand(*OI, ValueMap); // There is no need to map the arguments anymore. for (Function::arg_iterator I = Src->arg_begin(), E = Src->arg_end(); I != E; ++I) - GlobalMap.erase(I); + ValueMap.erase(I); return false; } @@ -747,11 +775,10 @@ static bool LinkFunctionBodies(Module *Dest, Module *Src, Function *DF = cast<Function>(ValueMap[SF]); // Destination function // DF not external SF external? - if (DF->isDeclaration()) { + if (DF->isDeclaration()) // Only provide the function body if there isn't one already. if (LinkFunctionBody(DF, SF, ValueMap, Err)) return true; - } } } return false; @@ -919,32 +946,17 @@ Linker::LinkModules(Module *Dest, Module *Src, std::string *ErrorMsg) { // with appending linkage. After the module is linked together, they are // appended and the module is rewritten. std::multimap<std::string, GlobalVariable *> AppendingVars; - - // GlobalsByName - The LLVM SymbolTable class fights our best efforts at - // linking by separating globals by type. Until PR411 is fixed, we replicate - // it's functionality here. - std::map<std::string, GlobalValue*> GlobalsByName; - for (Module::global_iterator I = Dest->global_begin(), E = Dest->global_end(); I != E; ++I) { // Add all of the appending globals already in the Dest module to // AppendingVars. if (I->hasAppendingLinkage()) AppendingVars.insert(std::make_pair(I->getName(), I)); - - // Keep track of all globals by name. - if (!I->hasInternalLinkage() && I->hasName()) - GlobalsByName[I->getName()] = I; } - // Keep track of all globals by name. - for (Module::iterator I = Dest->begin(), E = Dest->end(); I != E; ++I) - if (!I->hasInternalLinkage() && I->hasName()) - GlobalsByName[I->getName()] = I; - // Insert all of the globals in src into the Dest module... without linking // initializers (which could refer to functions not yet mapped over). - if (LinkGlobals(Dest, Src, ValueMap, AppendingVars, GlobalsByName, ErrorMsg)) + if (LinkGlobals(Dest, Src, ValueMap, AppendingVars, ErrorMsg)) return true; // Link the functions together between the two modules, without doing function @@ -952,7 +964,7 @@ Linker::LinkModules(Module *Dest, Module *Src, std::string *ErrorMsg) { // function... We do this so that when we begin processing function bodies, // all of the global values that may be referenced are available in our // ValueMap. - if (LinkFunctionProtos(Dest, Src, ValueMap, GlobalsByName, ErrorMsg)) + if (LinkFunctionProtos(Dest, Src, ValueMap, ErrorMsg)) return true; // Update the initializers in the Dest module now that all globals that may diff --git a/lib/Target/CBackend/CBackend.cpp b/lib/Target/CBackend/CBackend.cpp index 6116bcd..ffa3b1e 100644 --- a/lib/Target/CBackend/CBackend.cpp +++ b/lib/Target/CBackend/CBackend.cpp @@ -20,7 +20,6 @@ #include "llvm/Instructions.h" #include "llvm/Pass.h" #include "llvm/PassManager.h" -#include "llvm/SymbolTable.h" #include "llvm/TypeSymbolTable.h" #include "llvm/Intrinsics.h" #include "llvm/IntrinsicInst.h" diff --git a/lib/Transforms/IPO/LoopExtractor.cpp b/lib/Transforms/IPO/LoopExtractor.cpp index 5a6e767..7169b50 100644 --- a/lib/Transforms/IPO/LoopExtractor.cpp +++ b/lib/Transforms/IPO/LoopExtractor.cpp @@ -167,7 +167,8 @@ bool BlockExtractorPass::runOnModule(Module &M) { Function *F = BB->getParent(); // Map the corresponding function in this module. - Function *MF = M.getFunction(F->getName(), F->getFunctionType()); + Function *MF = M.getFunction(F->getName()); + assert(MF->getFunctionType() == F->getFunctionType() && "Wrong function?"); // Figure out which index the basic block is in its function. Function::iterator BBI = MF->begin(); diff --git a/lib/Transforms/IPO/RaiseAllocations.cpp b/lib/Transforms/IPO/RaiseAllocations.cpp index 6082780..c5a9cbf 100644 --- a/lib/Transforms/IPO/RaiseAllocations.cpp +++ b/lib/Transforms/IPO/RaiseAllocations.cpp @@ -65,47 +65,65 @@ ModulePass *llvm::createRaiseAllocationsPass() { // function into the appropriate instruction. // void RaiseAllocations::doInitialization(Module &M) { - const FunctionType *MallocType = // Get the type for malloc - FunctionType::get(PointerType::get(Type::Int8Ty), - std::vector<const Type*>(1, Type::Int64Ty), false); - - const FunctionType *FreeType = // Get the type for free - FunctionType::get(Type::VoidTy, - std::vector<const Type*>(1, PointerType::get(Type::Int8Ty)), - false); // Get Malloc and free prototypes if they exist! - MallocFunc = M.getFunction("malloc", MallocType); - FreeFunc = M.getFunction("free" , FreeType); - - // Check to see if the prototype is wrong, giving us sbyte*(uint) * malloc - // This handles the common declaration of: 'void *malloc(unsigned);' - if (MallocFunc == 0) { - MallocType = FunctionType::get(PointerType::get(Type::Int8Ty), - std::vector<const Type*>(1, Type::Int32Ty), false); - MallocFunc = M.getFunction("malloc", MallocType); - } - - // Check to see if the prototype is missing, giving us sbyte*(...) * malloc - // This handles the common declaration of: 'void *malloc();' - if (MallocFunc == 0) { - MallocType = FunctionType::get(PointerType::get(Type::Int8Ty), - std::vector<const Type*>(), true); - MallocFunc = M.getFunction("malloc", MallocType); - } - - // Check to see if the prototype was forgotten, giving us void (...) * free - // This handles the common forward declaration of: 'void free();' - if (FreeFunc == 0) { - FreeType = FunctionType::get(Type::VoidTy, std::vector<const Type*>(),true); - FreeFunc = M.getFunction("free", FreeType); + MallocFunc = M.getFunction("malloc"); + if (MallocFunc) { + const FunctionType* TyWeHave = MallocFunc->getFunctionType(); + + // Get the expected prototype for malloc + const FunctionType *Malloc1Type = + FunctionType::get(PointerType::get(Type::Int8Ty), + std::vector<const Type*>(1, Type::Int64Ty), false); + + // Chck to see if we got the expected malloc + if (TyWeHave != Malloc1Type) { + // Check to see if the prototype is wrong, giving us sbyte*(uint) * malloc + // This handles the common declaration of: 'void *malloc(unsigned);' + const FunctionType *Malloc2Type = + FunctionType::get(PointerType::get(Type::Int8Ty), + std::vector<const Type*>(1, Type::Int32Ty), false); + if (TyWeHave != Malloc2Type) { + // Check to see if the prototype is missing, giving us + // sbyte*(...) * malloc + // This handles the common declaration of: 'void *malloc();' + const FunctionType *Malloc3Type = + FunctionType::get(PointerType::get(Type::Int8Ty), + std::vector<const Type*>(), true); + if (TyWeHave != Malloc3Type) + // Give up + MallocFunc = 0; + } + } } - // One last try, check to see if we can find free as 'int (...)* free'. This - // handles the case where NOTHING was declared. - if (FreeFunc == 0) { - FreeType = FunctionType::get(Type::Int32Ty, std::vector<const Type*>(),true); - FreeFunc = M.getFunction("free", FreeType); + FreeFunc = M.getFunction("free"); + if (FreeFunc) { + const FunctionType* TyWeHave = FreeFunc->getFunctionType(); + + // Get the expected prototype for void free(i8*) + const FunctionType *Free1Type = FunctionType::get(Type::VoidTy, + std::vector<const Type*>(1, PointerType::get(Type::Int8Ty)), false); + + if (TyWeHave != Free1Type) { + // Check to see if the prototype was forgotten, giving us + // void (...) * free + // This handles the common forward declaration of: 'void free();' + const FunctionType* Free2Type = FunctionType::get(Type::VoidTy, + std::vector<const Type*>(),true); + + if (TyWeHave != Free2Type) { + // One last try, check to see if we can find free as + // int (...)* free. This handles the case where NOTHING was declared. + const FunctionType* Free3Type = FunctionType::get(Type::Int32Ty, + std::vector<const Type*>(),true); + + if (TyWeHave != Free3Type) { + // Give up. + FreeFunc = 0; + } + } + } } // Don't mess with locally defined versions of these functions... diff --git a/lib/Transforms/IPO/StripSymbols.cpp b/lib/Transforms/IPO/StripSymbols.cpp index 12cd7fe..db4387f 100644 --- a/lib/Transforms/IPO/StripSymbols.cpp +++ b/lib/Transforms/IPO/StripSymbols.cpp @@ -28,7 +28,7 @@ #include "llvm/Instructions.h" #include "llvm/Module.h" #include "llvm/Pass.h" -#include "llvm/SymbolTable.h" +#include "llvm/ValueSymbolTable.h" #include "llvm/TypeSymbolTable.h" using namespace llvm; diff --git a/lib/Transforms/Utils/CloneModule.cpp b/lib/Transforms/Utils/CloneModule.cpp index d481aea..669b4b2 100644 --- a/lib/Transforms/Utils/CloneModule.cpp +++ b/lib/Transforms/Utils/CloneModule.cpp @@ -15,7 +15,6 @@ #include "llvm/Transforms/Utils/Cloning.h" #include "llvm/Module.h" #include "llvm/DerivedTypes.h" -#include "llvm/SymbolTable.h" #include "llvm/TypeSymbolTable.h" #include "llvm/Constant.h" #include "ValueMapper.h" diff --git a/lib/VMCore/AsmWriter.cpp b/lib/VMCore/AsmWriter.cpp index f13a140..e834c53 100644 --- a/lib/VMCore/AsmWriter.cpp +++ b/lib/VMCore/AsmWriter.cpp @@ -24,7 +24,7 @@ #include "llvm/Instruction.h" #include "llvm/Instructions.h" #include "llvm/Module.h" -#include "llvm/SymbolTable.h" +#include "llvm/ValueSymbolTable.h" #include "llvm/TypeSymbolTable.h" #include "llvm/ADT/StringExtras.h" #include "llvm/ADT/STLExtras.h" diff --git a/lib/VMCore/Constants.cpp b/lib/VMCore/Constants.cpp index 79673f0..8a6e11d 100644 --- a/lib/VMCore/Constants.cpp +++ b/lib/VMCore/Constants.cpp @@ -16,7 +16,6 @@ #include "llvm/DerivedTypes.h" #include "llvm/GlobalValue.h" #include "llvm/Instructions.h" -#include "llvm/SymbolTable.h" #include "llvm/Module.h" #include "llvm/ADT/StringExtras.h" #include "llvm/Support/Compiler.h" @@ -24,6 +23,7 @@ #include "llvm/Support/ManagedStatic.h" #include "llvm/Support/MathExtras.h" #include <algorithm> +#include <map> using namespace llvm; //===----------------------------------------------------------------------===// diff --git a/lib/VMCore/Function.cpp b/lib/VMCore/Function.cpp index cf8fcde..cc0cefa 100644 --- a/lib/VMCore/Function.cpp +++ b/lib/VMCore/Function.cpp @@ -7,8 +7,7 @@ // //===----------------------------------------------------------------------===// // -// This file implements the Function & GlobalVariable classes for the VMCore -// library. +// This file implements the Function class for the VMCore library. // //===----------------------------------------------------------------------===// @@ -82,7 +81,7 @@ Function::Function(const FunctionType *Ty, LinkageTypes Linkage, BasicBlocks.setParent(this); ArgumentList.setItemParent(this); ArgumentList.setParent(this); - SymTab = new SymbolTable(); + SymTab = new ValueSymbolTable(); assert((getReturnType()->isFirstClassType() ||getReturnType() == Type::VoidTy) && "LLVM functions cannot return aggregate values!"); @@ -138,7 +137,6 @@ void Function::eraseFromParent() { getParent()->getFunctionList().erase(this); } - // dropAllReferences() - This function causes all the subinstructions to "let // go" of all references that they are maintaining. This allows one to // 'delete' a whole class at a time, even though there may be circular diff --git a/lib/VMCore/Globals.cpp b/lib/VMCore/Globals.cpp index e49f477..327e2ad 100644 --- a/lib/VMCore/Globals.cpp +++ b/lib/VMCore/Globals.cpp @@ -15,7 +15,6 @@ #include "llvm/GlobalVariable.h" #include "llvm/DerivedTypes.h" #include "llvm/Module.h" -#include "llvm/SymbolTable.h" #include "llvm/Support/LeakDetector.h" using namespace llvm; diff --git a/lib/VMCore/Instruction.cpp b/lib/VMCore/Instruction.cpp index b2eb87d..6b2baba 100644 --- a/lib/VMCore/Instruction.cpp +++ b/lib/VMCore/Instruction.cpp @@ -14,7 +14,6 @@ #include "llvm/Type.h" #include "llvm/Instructions.h" #include "llvm/Function.h" -#include "llvm/SymbolTable.h" #include "llvm/Support/LeakDetector.h" using namespace llvm; diff --git a/lib/VMCore/Module.cpp b/lib/VMCore/Module.cpp index efa6e6c..163d8d2 100644 --- a/lib/VMCore/Module.cpp +++ b/lib/VMCore/Module.cpp @@ -69,7 +69,7 @@ Module::Module(const std::string &MID) FunctionList.setParent(this); GlobalList.setItemParent(this); GlobalList.setParent(this); - ValSymTab = new SymbolTable(); + ValSymTab = new ValueSymbolTable(); TypeSymTab = new TypeSymbolTable(); } @@ -132,15 +132,19 @@ Module::PointerSize Module::getPointerSize() const { // Methods for easy access to the functions in the module. // +// getOrInsertFunction - Look up the specified function in the module symbol +// table. If it does not exist, add a prototype for the function and return +// it. This is nice because it allows most passes to get away with not handling +// the symbol table directly for this common task. +// Constant *Module::getOrInsertFunction(const std::string &Name, const FunctionType *Ty) { - SymbolTable &SymTab = getValueSymbolTable(); + ValueSymbolTable &SymTab = getValueSymbolTable(); - // See if we have a definitions for the specified function already. - Function *F = - dyn_cast_or_null<Function>(SymTab.lookup(PointerType::get(Ty), Name)); + // See if we have a definition for the specified function already. + Function *F = dyn_cast_or_null<Function>(SymTab.lookup(Name)); if (F == 0) { - // Nope, add it. + // Nope, add it Function *New = new Function(Ty, GlobalVariable::ExternalLinkage, Name); FunctionList.push_back(New); return New; // Return the new prototype. @@ -149,7 +153,7 @@ Constant *Module::getOrInsertFunction(const std::string &Name, // Okay, the function exists. Does it have externally visible linkage? if (F->hasInternalLinkage()) { // Rename the function. - F->setName(SymTab.getUniqueName(F->getType(), F->getName())); + F->setName(SymTab.getUniqueName(F->getName())); // Retry, now there won't be a conflict. return getOrInsertFunction(Name, Ty); } @@ -188,73 +192,9 @@ Constant *Module::getOrInsertFunction(const std::string &Name, // getFunction - Look up the specified function in the module symbol table. // If it does not exist, return null. // -Function *Module::getFunction(const std::string &Name, const FunctionType *Ty) { - SymbolTable &SymTab = getValueSymbolTable(); - return cast_or_null<Function>(SymTab.lookup(PointerType::get(Ty), Name)); -} - - -/// getMainFunction - This function looks up main efficiently. This is such a -/// common case, that it is a method in Module. If main cannot be found, a -/// null pointer is returned. -/// -Function *Module::getMainFunction() { - std::vector<const Type*> Params; - - // int main(void)... - if (Function *F = getFunction("main", FunctionType::get(Type::Int32Ty, - Params, false))) - return F; - - // void main(void)... - if (Function *F = getFunction("main", FunctionType::get(Type::VoidTy, - Params, false))) - return F; - - Params.push_back(Type::Int32Ty); - - // int main(int argc)... - if (Function *F = getFunction("main", FunctionType::get(Type::Int32Ty, - Params, false))) - return F; - - // void main(int argc)... - if (Function *F = getFunction("main", FunctionType::get(Type::VoidTy, - Params, false))) - return F; - - for (unsigned i = 0; i != 2; ++i) { // Check argv and envp - Params.push_back(PointerType::get(PointerType::get(Type::Int8Ty))); - - // int main(int argc, char **argv)... - if (Function *F = getFunction("main", FunctionType::get(Type::Int32Ty, - Params, false))) - return F; - - // void main(int argc, char **argv)... - if (Function *F = getFunction("main", FunctionType::get(Type::VoidTy, - Params, false))) - return F; - } - - // Ok, try to find main the hard way... - return getNamedFunction("main"); -} - -/// getNamedFunction - Return the first function in the module with the -/// specified name, of arbitrary type. This method returns null if a function -/// with the specified name is not found. -/// -Function *Module::getNamedFunction(const std::string &Name) const { - // Loop over all of the functions, looking for the function desired - const Function *Found = 0; - for (const_iterator I = begin(), E = end(); I != E; ++I) - if (I->getName() == Name) - if (I->isDeclaration()) - Found = I; - else - return const_cast<Function*>(&(*I)); - return const_cast<Function*>(Found); // Non-external function not found... +Function *Module::getFunction(const std::string &Name) const { + const ValueSymbolTable &SymTab = getValueSymbolTable(); + return dyn_cast_or_null<Function>(SymTab.lookup(Name)); } //===----------------------------------------------------------------------===// @@ -269,31 +209,15 @@ Function *Module::getNamedFunction(const std::string &Name) const { /// have InternalLinkage. By default, these types are not returned. /// GlobalVariable *Module::getGlobalVariable(const std::string &Name, - const Type *Ty, bool AllowInternal) { - if (Value *V = getValueSymbolTable().lookup(PointerType::get(Ty), Name)) { - GlobalVariable *Result = cast<GlobalVariable>(V); - if (AllowInternal || !Result->hasInternalLinkage()) + bool AllowInternal) const { + if (Value *V = ValSymTab->lookup(Name)) { + GlobalVariable *Result = dyn_cast<GlobalVariable>(V); + if (Result && (AllowInternal || !Result->hasInternalLinkage())) return Result; } return 0; } -/// getNamedGlobal - Return the first global variable in the module with the -/// specified name, of arbitrary type. This method returns null if a global -/// with the specified name is not found. -/// -GlobalVariable *Module::getNamedGlobal(const std::string &Name) const { - // FIXME: This would be much faster with a symbol table that doesn't - // discriminate based on type! - for (const_global_iterator I = global_begin(), E = global_end(); - I != E; ++I) - if (I->getName() == Name) - return const_cast<GlobalVariable*>(&(*I)); - return 0; -} - - - //===----------------------------------------------------------------------===// // Methods for easy access to the types in the module. // diff --git a/lib/VMCore/SymbolTable.cpp b/lib/VMCore/SymbolTable.cpp deleted file mode 100644 index 2edd3eb..0000000 --- a/lib/VMCore/SymbolTable.cpp +++ /dev/null @@ -1,336 +0,0 @@ -//===-- SymbolTable.cpp - Implement the SymbolTable class -----------------===// -// -// The LLVM Compiler Infrastructure -// -// This file was developed by the LLVM research group and revised by Reid -// Spencer. It is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file implements the SymbolTable class for the VMCore library. -// -//===----------------------------------------------------------------------===// - -#include "llvm/SymbolTable.h" -#include "llvm/DerivedTypes.h" -#include "llvm/Module.h" -#include "llvm/ADT/StringExtras.h" -#include "llvm/Support/Debug.h" -#include <algorithm> -using namespace llvm; - -#define DEBUG_SYMBOL_TABLE 0 -#define DEBUG_ABSTYPE 0 - -SymbolTable::~SymbolTable() { - // TODO: FIXME: BIG ONE: This doesn't unreference abstract types for the - // planes that could still have entries! - -#ifndef NDEBUG // Only do this in -g mode... - bool LeftoverValues = true; - for (plane_iterator PI = pmap.begin(); PI != pmap.end(); ++PI) { - for (value_iterator VI = PI->second.begin(); VI != PI->second.end(); ++VI) - if (!isa<Constant>(VI->second) ) { - DOUT << "Value still in symbol table! Type = '" - << PI->first->getDescription() << "' Name = '" - << VI->first << "'\n"; - LeftoverValues = false; - } - } - - assert(LeftoverValues && "Values remain in symbol table!"); -#endif -} - -// getUniqueName - Given a base name, return a string that is either equal to -// it (or derived from it) that does not already occur in the symbol table for -// the specified type. -// -std::string SymbolTable::getUniqueName(const Type *Ty, - const std::string &BaseName) const { - // Find the plane - plane_const_iterator PI = pmap.find(Ty); - if (PI == pmap.end()) return BaseName; - - std::string TryName = BaseName; - const ValueMap& vmap = PI->second; - value_const_iterator End = vmap.end(); - - // See if the name exists - while (vmap.find(TryName) != End) // Loop until we find a free - TryName = BaseName + utostr(++LastUnique); // name in the symbol table - return TryName; -} - - -// lookup a value - Returns null on failure... -Value *SymbolTable::lookup(const Type *Ty, const std::string &Name) const { - plane_const_iterator PI = pmap.find(Ty); - if (PI != pmap.end()) { // We have symbols in that plane. - value_const_iterator VI = PI->second.find(Name); - if (VI != PI->second.end()) // and the name is in our hash table. - return VI->second; - } - return 0; -} - - -/// changeName - Given a value with a non-empty name, remove its existing entry -/// from the symbol table and insert a new one for Name. This is equivalent to -/// doing "remove(V), V->Name = Name, insert(V)", but is faster, and will not -/// temporarily remove the symbol table plane if V is the last value in the -/// symtab with that name (which could invalidate iterators to that plane). -void SymbolTable::changeName(Value *V, const std::string &name) { - assert(!V->getName().empty() && !name.empty() && V->getName() != name && - "Illegal use of this method!"); - - plane_iterator PI = pmap.find(V->getType()); - assert(PI != pmap.end() && "Value doesn't have an entry in this table?"); - ValueMap &VM = PI->second; - - value_iterator VI = VM.find(V->getName()); - assert(VI != VM.end() && "Value does have an entry in this table?"); - - // Remove the old entry. - VM.erase(VI); - - // See if we can insert the new name. - VI = VM.lower_bound(name); - - // Is there a naming conflict? - if (VI != VM.end() && VI->first == name) { - V->Name = getUniqueName(V->getType(), name); - VM.insert(make_pair(V->Name, V)); - } else { - V->Name = name; - VM.insert(VI, make_pair(name, V)); - } -} - -// Remove a value -void SymbolTable::remove(Value *N) { - assert(N->hasName() && "Value doesn't have name!"); - - plane_iterator PI = pmap.find(N->getType()); - assert(PI != pmap.end() && - "Trying to remove a value that doesn't have a type plane yet!"); - ValueMap &VM = PI->second; - value_iterator Entry = VM.find(N->getName()); - assert(Entry != VM.end() && "Invalid entry to remove!"); - -#if DEBUG_SYMBOL_TABLE - dump(); - DOUT << " Removing Value: " << Entry->second->getName() << "\n"; -#endif - - // Remove the value from the plane... - VM.erase(Entry); - - // If the plane is empty, remove it now! - if (VM.empty()) { - // If the plane represented an abstract type that we were interested in, - // unlink ourselves from this plane. - // - if (N->getType()->isAbstract()) { -#if DEBUG_ABSTYPE - DOUT << "Plane Empty: Removing type: " - << N->getType()->getDescription() << "\n"; -#endif - cast<DerivedType>(N->getType())->removeAbstractTypeUser(this); - } - - pmap.erase(PI); - } -} - - -// insertEntry - Insert a value into the symbol table with the specified name. -void SymbolTable::insertEntry(const std::string &Name, const Type *VTy, - Value *V) { - plane_iterator PI = pmap.find(VTy); // Plane iterator - value_iterator VI; // Actual value iterator - ValueMap *VM; // The plane we care about. - -#if DEBUG_SYMBOL_TABLE - dump(); - DOUT << " Inserting definition: " << Name << ": " - << VTy->getDescription() << "\n"; -#endif - - if (PI == pmap.end()) { // Not in collection yet... insert dummy entry - // Insert a new empty element. I points to the new elements. - VM = &pmap.insert(make_pair(VTy, ValueMap())).first->second; - VI = VM->end(); - - // Check to see if the type is abstract. If so, it might be refined in the - // future, which would cause the plane of the old type to get merged into - // a new type plane. - // - if (VTy->isAbstract()) { - cast<DerivedType>(VTy)->addAbstractTypeUser(this); -#if DEBUG_ABSTYPE - DOUT << "Added abstract type value: " << VTy->getDescription() - << "\n"; -#endif - } - - } else { - // Check to see if there is a naming conflict. If so, rename this value! - VM = &PI->second; - VI = VM->lower_bound(Name); - if (VI != VM->end() && VI->first == Name) { - V->Name = getUniqueName(VTy, Name); - VM->insert(make_pair(V->Name, V)); - return; - } - } - - VM->insert(VI, make_pair(Name, V)); -} - - - -// Strip the symbol table of its names. -bool SymbolTable::strip() { - bool RemovedSymbol = false; - for (plane_iterator I = pmap.begin(); I != pmap.end();) { - // Removing items from the plane can cause the plane itself to get deleted. - // If this happens, make sure we incremented our plane iterator already! - ValueMap &Plane = (I++)->second; - value_iterator B = Plane.begin(), Bend = Plane.end(); - while (B != Bend) { // Found nonempty type plane! - Value *V = B->second; - ++B; - if (!isa<GlobalValue>(V) || cast<GlobalValue>(V)->hasInternalLinkage()) { - // Set name to "", removing from symbol table! - V->setName(""); - RemovedSymbol = true; - } - } - } - - return RemovedSymbol; -} - - -// This function is called when one of the types in the type plane are refined -void SymbolTable::refineAbstractType(const DerivedType *OldType, - const Type *NewType) { - - // Search to see if we have any values of the type Oldtype. If so, we need to - // move them into the newtype plane... - plane_iterator PI = pmap.find(OldType); - if (PI != pmap.end()) { - // Get a handle to the new type plane... - plane_iterator NewTypeIt = pmap.find(NewType); - if (NewTypeIt == pmap.end()) { // If no plane exists, add one - NewTypeIt = pmap.insert(make_pair(NewType, ValueMap())).first; - - if (NewType->isAbstract()) { - cast<DerivedType>(NewType)->addAbstractTypeUser(this); -#if DEBUG_ABSTYPE - DOUT << "[Added] refined to abstype: " << NewType->getDescription() - << "\n"; -#endif - } - } - - ValueMap &NewPlane = NewTypeIt->second; - ValueMap &OldPlane = PI->second; - while (!OldPlane.empty()) { - std::pair<const std::string, Value*> V = *OldPlane.begin(); - - // Check to see if there is already a value in the symbol table that this - // would collide with. - value_iterator VI = NewPlane.find(V.first); - if (VI != NewPlane.end() && VI->second == V.second) { - // No action - - } else if (VI != NewPlane.end()) { - // The only thing we are allowing for now is two external global values - // folded into one. - // - GlobalValue *ExistGV = dyn_cast<GlobalValue>(VI->second); - GlobalValue *NewGV = dyn_cast<GlobalValue>(V.second); - - if (ExistGV && NewGV) { - assert((ExistGV->isDeclaration() || NewGV->isDeclaration()) && - "Two planes folded together with overlapping value names!"); - - // Make sure that ExistGV is the one we want to keep! - if (!NewGV->isDeclaration()) - std::swap(NewGV, ExistGV); - - // Ok we have two external global values. Make all uses of the new - // one use the old one... - NewGV->uncheckedReplaceAllUsesWith(ExistGV); - - // Update NewGV's name, we're about the remove it from the symbol - // table. - NewGV->Name = ""; - - // Now we can remove this global from the module entirely... - Module *M = NewGV->getParent(); - if (Function *F = dyn_cast<Function>(NewGV)) - M->getFunctionList().remove(F); - else - M->getGlobalList().remove(cast<GlobalVariable>(NewGV)); - delete NewGV; - } else { - // If they are not global values, they must be just random values who - // happen to conflict now that types have been resolved. If this is - // the case, reinsert the value into the new plane, allowing it to get - // renamed. - assert(V.second->getType() == NewType &&"Type resolution is broken!"); - insert(V.second); - } - } else { - insertEntry(V.first, NewType, V.second); - } - // Remove the item from the old type plane - OldPlane.erase(OldPlane.begin()); - } - - // Ok, now we are not referencing the type anymore... take me off your user - // list please! -#if DEBUG_ABSTYPE - DOUT << "Removing type " << OldType->getDescription() << "\n"; -#endif - OldType->removeAbstractTypeUser(this); - - // Remove the plane that is no longer used - pmap.erase(PI); - } -} - - -// Handle situation where type becomes Concreate from Abstract -void SymbolTable::typeBecameConcrete(const DerivedType *AbsTy) { - plane_iterator PI = pmap.find(AbsTy); - - // If there are any values in the symbol table of this type, then the type - // plane is a use of the abstract type which must be dropped. - if (PI != pmap.end()) - AbsTy->removeAbstractTypeUser(this); -} - -static void DumpVal(const std::pair<const std::string, Value *> &V) { - DOUT << " '" << V.first << "' = "; - V.second->dump(); - DOUT << "\n"; -} - -static void DumpPlane(const std::pair<const Type *, - std::map<const std::string, Value *> >&P){ - P.first->dump(); - DOUT << "\n"; - for_each(P.second.begin(), P.second.end(), DumpVal); -} - -void SymbolTable::dump() const { - DOUT << "Symbol table dump:\n Plane:"; - for_each(pmap.begin(), pmap.end(), DumpPlane); -} - -// vim: sw=2 ai diff --git a/lib/VMCore/SymbolTableListTraitsImpl.h b/lib/VMCore/SymbolTableListTraitsImpl.h index 81849dd..f4ee13f 100644 --- a/lib/VMCore/SymbolTableListTraitsImpl.h +++ b/lib/VMCore/SymbolTableListTraitsImpl.h @@ -17,7 +17,7 @@ #define LLVM_SYMBOLTABLELISTTRAITS_IMPL_H #include "llvm/SymbolTableListTraits.h" -#include "llvm/SymbolTable.h" +#include "llvm/ValueSymbolTable.h" namespace llvm { @@ -29,7 +29,7 @@ void SymbolTableListTraits<ValueSubClass,ItemParentClass,SymTabClass,SubClass> // Remove all of the items from the old symtab.. if (SymTabObject && !List.empty()) { - SymbolTable &SymTab = SymTabObject->getValueSymbolTable(); + ValueSymbolTable &SymTab = SymTabObject->getValueSymbolTable(); for (typename iplist<ValueSubClass>::iterator I = List.begin(); I != List.end(); ++I) if (I->hasName()) SymTab.remove(I); @@ -39,7 +39,7 @@ void SymbolTableListTraits<ValueSubClass,ItemParentClass,SymTabClass,SubClass> // Add all of the items to the new symtab... if (SymTabObject && !List.empty()) { - SymbolTable &SymTab = SymTabObject->getValueSymbolTable(); + ValueSymbolTable &SymTab = SymTabObject->getValueSymbolTable(); for (typename iplist<ValueSubClass>::iterator I = List.begin(); I != List.end(); ++I) if (I->hasName()) SymTab.insert(I); diff --git a/lib/VMCore/Type.cpp b/lib/VMCore/Type.cpp index 3733d2a..a6e5797 100644 --- a/lib/VMCore/Type.cpp +++ b/lib/VMCore/Type.cpp @@ -13,7 +13,6 @@ #include "llvm/AbstractTypeUser.h" #include "llvm/DerivedTypes.h" -#include "llvm/SymbolTable.h" #include "llvm/Constants.h" #include "llvm/ADT/DepthFirstIterator.h" #include "llvm/ADT/StringExtras.h" diff --git a/lib/VMCore/Value.cpp b/lib/VMCore/Value.cpp index 94c03b8..0218e57 100644 --- a/lib/VMCore/Value.cpp +++ b/lib/VMCore/Value.cpp @@ -15,7 +15,7 @@ #include "llvm/DerivedTypes.h" #include "llvm/InstrTypes.h" #include "llvm/Module.h" -#include "llvm/SymbolTable.h" +#include "llvm/ValueSymbolTable.h" #include "llvm/Support/Debug.h" #include "llvm/Support/LeakDetector.h" #include <algorithm> @@ -97,17 +97,20 @@ void Value::setName(const std::string &name) { if (Name == name) return; // Name is already set. // Get the symbol table to update for this object. - SymbolTable *ST = 0; + ValueSymbolTable *ST = 0; if (Instruction *I = dyn_cast<Instruction>(this)) { if (BasicBlock *P = I->getParent()) if (Function *PP = P->getParent()) ST = &PP->getValueSymbolTable(); } else if (BasicBlock *BB = dyn_cast<BasicBlock>(this)) { - if (Function *P = BB->getParent()) ST = &P->getValueSymbolTable(); + if (Function *P = BB->getParent()) + ST = &P->getValueSymbolTable(); } else if (GlobalValue *GV = dyn_cast<GlobalValue>(this)) { - if (Module *P = GV->getParent()) ST = &P->getValueSymbolTable(); + if (Module *P = GV->getParent()) + ST = &P->getValueSymbolTable(); } else if (Argument *A = dyn_cast<Argument>(this)) { - if (Function *P = A->getParent()) ST = &P->getValueSymbolTable(); + if (Function *P = A->getParent()) + ST = &P->getValueSymbolTable(); } else { assert(isa<Constant>(this) && "Unknown value type!"); return; // no name is setable for this. @@ -117,7 +120,7 @@ void Value::setName(const std::string &name) { Name = name; else if (hasName()) { if (!name.empty()) { // Replacing name. - ST->changeName(this, name); + ST->rename(this, name); } else { // Transitioning from hasName -> noname. ST->remove(this); Name.clear(); diff --git a/lib/VMCore/ValueSymbolTable.cpp b/lib/VMCore/ValueSymbolTable.cpp index 6efb998..51197b6 100644 --- a/lib/VMCore/ValueSymbolTable.cpp +++ b/lib/VMCore/ValueSymbolTable.cpp @@ -11,6 +11,7 @@ // //===----------------------------------------------------------------------===// +#define DEBUG_TYPE "valuesymtab" #include "llvm/GlobalValue.h" #include "llvm/Type.h" #include "llvm/ValueSymbolTable.h" @@ -19,18 +20,15 @@ #include <algorithm> using namespace llvm; -#define DEBUG_SYMBOL_TABLE 0 -#define DEBUG_ABSTYPE 0 - // Class destructor ValueSymbolTable::~ValueSymbolTable() { #ifndef NDEBUG // Only do this in -g mode... bool LeftoverValues = true; for (iterator VI = vmap.begin(), VE = vmap.end(); VI != VE; ++VI) if (!isa<Constant>(VI->second) ) { - DOUT << "Value still in symbol table! Type = '" + DEBUG(DOUT << "Value still in symbol table! Type = '" << VI->second->getType()->getDescription() << "' Name = '" - << VI->first << "'\n"; + << VI->first << "'\n"); LeftoverValues = false; } assert(LeftoverValues && "Values remain in symbol table!"); @@ -83,29 +81,24 @@ void ValueSymbolTable::insert(Value* V) { assert(V && "Can't insert null Value into symbol table!"); assert(V->hasName() && "Can't insert nameless Value into symbol table"); - // Check to see if there is a naming conflict. If so, rename this type! + // Check to see if there is a naming conflict. If so, rename this value std::string UniqueName = getUniqueName(V->getName()); -#if DEBUG_SYMBOL_TABLE - dump(); - DOUT << " Inserting value: " << UniqueName << ": " << V->dump() << "\n"; -#endif + DEBUG(DOUT << " Inserting value: " << UniqueName << ": " << *V << "\n"); // Insert the vmap entry - vmap.insert(make_pair(UniqueName, V)); + V->Name = UniqueName; + vmap.insert(make_pair(V->Name, V)); } // Remove a value -bool ValueSymbolTable::erase(Value *V) { +bool ValueSymbolTable::remove(Value *V) { assert(V->hasName() && "Value doesn't have name!"); iterator Entry = vmap.find(V->getName()); if (Entry == vmap.end()) return false; -#if DEBUG_SYMBOL_TABLE - dump(); - DOUT << " Removing Value: " << Entry->second->getName() << "\n"; -#endif + DEBUG(DOUT << " Removing Value: " << Entry->second->getName() << "\n"); // Remove the value from the plane... vmap.erase(Entry); @@ -143,7 +136,7 @@ bool ValueSymbolTable::rename(Value *V, const std::string &name) { vmap.insert(make_pair(V->Name, V)); } else { V->Name = name; - vmap.insert(VI, make_pair(name, V)); + vmap.insert(VI, make_pair(V->Name, V)); } return true; diff --git a/lib/VMCore/Verifier.cpp b/lib/VMCore/Verifier.cpp index 9dc892e..f5b0550 100644 --- a/lib/VMCore/Verifier.cpp +++ b/lib/VMCore/Verifier.cpp @@ -51,7 +51,7 @@ #include "llvm/Instructions.h" #include "llvm/Intrinsics.h" #include "llvm/PassManager.h" -#include "llvm/SymbolTable.h" +#include "llvm/ValueSymbolTable.h" #include "llvm/Analysis/Dominators.h" #include "llvm/Support/CFG.h" #include "llvm/Support/InstVisitor.h" @@ -175,7 +175,7 @@ namespace { // Anonymous namespace for class // Verification methods... void verifyTypeSymbolTable(TypeSymbolTable &ST); - void verifyValueSymbolTable(SymbolTable &ST); + void verifyValueSymbolTable(ValueSymbolTable &ST); void visitGlobalValue(GlobalValue &GV); void visitGlobalVariable(GlobalVariable &GV); void visitFunction(Function &F); @@ -307,20 +307,18 @@ void Verifier::verifyTypeSymbolTable(TypeSymbolTable &ST) { // verifySymbolTable - Verify that a function or module symbol table is ok // -void Verifier::verifyValueSymbolTable(SymbolTable &ST) { - - // Loop over all of the values in all type planes in the symbol table. - for (SymbolTable::plane_const_iterator PI = ST.plane_begin(), - PE = ST.plane_end(); PI != PE; ++PI) - for (SymbolTable::value_const_iterator VI = PI->second.begin(), - VE = PI->second.end(); VI != VE; ++VI) { - Value *V = VI->second; - // Check that there are no void typed values in the symbol table. Values - // with a void type cannot be put into symbol tables because they cannot - // have names! - Assert1(V->getType() != Type::VoidTy, - "Values with void type are not allowed to have names!", V); - } +void Verifier::verifyValueSymbolTable(ValueSymbolTable &ST) { + + // Loop over all of the values in the symbol table. + for (ValueSymbolTable::const_iterator VI = ST.begin(), VE = ST.end(); + VI != VE; ++VI) { + Value *V = VI->second; + // Check that there are no void typed values in the symbol table. Values + // with a void type cannot be put into symbol tables because they cannot + // have names! + Assert1(V->getType() != Type::VoidTy, + "Values with void type are not allowed to have names!", V); + } } // visitFunction - Verify that a function is ok. diff --git a/test/Integer/calltest_bt.ll b/test/Integer/calltest_bt.ll index c4a7f63..ac0c795 100644 --- a/test/Integer/calltest_bt.ll +++ b/test/Integer/calltest_bt.ll @@ -5,7 +5,6 @@ %FunTy = type i28(i28) declare i28 @"test"(...) ; Test differences of prototype -declare i28 @"test"() ; Differ only by vararg implementation @@ -17,18 +16,18 @@ define void @"invoke"(%FunTy *%x) { define i28 @"main"(i28 %argc) ; TODO: , sbyte **argv, sbyte **envp) begin - %retval = call i28 (i28) *@test(i28 %argc) + %retval = call i28 (i28) *@test2(i28 %argc) %two = add i28 %retval, %retval - %retval2 = invoke i28 @test(i28 %argc) + %retval2 = invoke i28 @test2(i28 %argc) to label %Next unwind label %Error Next: %two2 = add i28 %two, %retval2 - call void @invoke (%FunTy* @test) + call void @invoke (%FunTy* @test2) ret i28 %two2 Error: ret i28 -1 end -define i28 @"test"(i28 %i0) { +define i28 @"test2"(i28 %i0) { ret i28 %i0 } diff --git a/test/Linker/redefinition.ll b/test/Linker/redefinition.ll new file mode 100644 index 0000000..ae2dc62 --- /dev/null +++ b/test/Linker/redefinition.ll @@ -0,0 +1,10 @@ +; Test linking two functions with different prototypes and two globals +; in different modules. +; RUN: llvm-as %s -o %t.foo1.bc -f +; RUN: llvm-as %s -o %t.foo2.bc -f +; RUN: echo "define void @foo(i32 %x) { ret void }" | llvm-as -o %t.foo3.bc -f +; RUN: llvm-link %t.foo1.bc %t.foo2.bc -o %t.bc 2>&1 | \ +; RUN: grep "Function is already defined" +; RUN: llvm-link %t.foo1.bc %t.foo3.bc -o %t.bc 2>&1 | \ +; RUN: grep "Function 'foo' defined as both" +define void @foo() { ret void } diff --git a/test/Transforms/FunctionResolve/.cvsignore b/test/Transforms/FunctionResolve/.cvsignore deleted file mode 100644 index 7f2443f..0000000 --- a/test/Transforms/FunctionResolve/.cvsignore +++ /dev/null @@ -1,3 +0,0 @@ -Output -*.log -*.sum diff --git a/test/Transforms/FunctionResolve/2002-08-19-ResolveGlobalVars.ll b/test/Transforms/FunctionResolve/2002-08-19-ResolveGlobalVars.ll deleted file mode 100644 index 427227a..0000000 --- a/test/Transforms/FunctionResolve/2002-08-19-ResolveGlobalVars.ll +++ /dev/null @@ -1,18 +0,0 @@ -; Test that: extern int X[] and int X[] = { 1, 2, 3, 4 } are resolved -; correctly. -; -; RUN: llvm-as < %s | opt -funcresolve | llvm-dis | not grep external - -@X = external global [0 x int] -@X = global [4 x int] [ int 1, int 2, int 3, int 4 ] - -implementation ; Functions: - -int @foo(int %x) { -bb1: ;[#uses=0] - store int 5, int* getelementptr ([0 x int]* @X, long 0, long 2) - %F = getelementptr [0 x int]* @X, long 0, long 2 - %val = load int* %F - ret int %val -} - diff --git a/test/Transforms/FunctionResolve/2002-08-19-ResolveGlobalVarsEasier.ll b/test/Transforms/FunctionResolve/2002-08-19-ResolveGlobalVarsEasier.ll deleted file mode 100644 index 188fc95..0000000 --- a/test/Transforms/FunctionResolve/2002-08-19-ResolveGlobalVarsEasier.ll +++ /dev/null @@ -1,20 +0,0 @@ -; Test that: extern int X[] and int X[] = { 1, 2, 3, 4 } are resolved -; correctly. This doesn't have constantexprs -; -; RUN: llvm-as < %s | opt -funcresolve | llvm-dis | not grep external -; - -@X = external global [0 x int] -@X = global [4 x int] [ int 1, int 2, int 3, int 4 ] - -implementation ; Functions: - -int %foo(int %x) { -bb1: ;[#uses=0] - %G = getelementptr [0 x int]* @X, long 0, long 1 - store int 5, int* %G - %F = getelementptr [0 x int]* @X, long 0, long 2 - %val = load int* %F - ret int %val -} - diff --git a/test/Transforms/FunctionResolve/2002-11-07-RetMismatch.ll b/test/Transforms/FunctionResolve/2002-11-07-RetMismatch.ll deleted file mode 100644 index 2ca8268..0000000 --- a/test/Transforms/FunctionResolve/2002-11-07-RetMismatch.ll +++ /dev/null @@ -1,12 +0,0 @@ -; RUN: llvm-upgrade < %s | llvm-as | opt -funcresolve -funcresolve | llvm-dis | not grep declare - -declare void %qsortg(sbyte*, int, int) - -void %test() { - call void %qsortg(sbyte* null, int 0, int 0) - ret void -} - -int %qsortg(sbyte* %base, int %n, int %size) { - ret int %n -} diff --git a/test/Transforms/FunctionResolve/2002-11-09-ExternFn.ll b/test/Transforms/FunctionResolve/2002-11-09-ExternFn.ll deleted file mode 100644 index d5eb0ca..0000000 --- a/test/Transforms/FunctionResolve/2002-11-09-ExternFn.ll +++ /dev/null @@ -1,11 +0,0 @@ -; XFAIL: * -; -; RUN: llvm-upgrade < %s | llvm-as | opt -funcresolve -instcombine | llvm-dis | not grep '\.\.\.' - -declare int %foo(...) -declare int %foo(int) - -void %bar() { - call int(...)* %foo(int 7) - ret void -} diff --git a/test/Transforms/FunctionResolve/2003-04-18-ForwardDeclGlobal.ll b/test/Transforms/FunctionResolve/2003-04-18-ForwardDeclGlobal.ll deleted file mode 100644 index 663d3eb..0000000 --- a/test/Transforms/FunctionResolve/2003-04-18-ForwardDeclGlobal.ll +++ /dev/null @@ -1,14 +0,0 @@ -; RUN: llvm-upgrade < %s | llvm-as | opt -funcresolve -disable-output 2>&1 | not grep WARNING - -%__popcount_tab = external constant [0 x ubyte] -%__popcount_tab = constant [4 x ubyte] c"\00\01\01\02" - -declare void %foo(ubyte *) - -void %test() { - getelementptr [0 x ubyte]* %__popcount_tab, long 0, long 2 - getelementptr [4 x ubyte]* %__popcount_tab, long 0, long 2 - call void %foo(ubyte * getelementptr ([0 x ubyte]* %__popcount_tab, long 0, long 2)) - ret void -} - diff --git a/test/Transforms/FunctionResolve/2003-05-21-MissingArguments.ll b/test/Transforms/FunctionResolve/2003-05-21-MissingArguments.ll deleted file mode 100644 index b54d595..0000000 --- a/test/Transforms/FunctionResolve/2003-05-21-MissingArguments.ll +++ /dev/null @@ -1,11 +0,0 @@ -; RUN: llvm-upgrade < %s | llvm-as | opt -funcresolve -disable-output - -void %foo(int, int) { - ret void -} -declare void %foo(...) - -void %test() { - call void(...)* %foo(int 7) - ret void -} diff --git a/test/Transforms/FunctionResolve/2003-05-31-AllInternalDecls.ll b/test/Transforms/FunctionResolve/2003-05-31-AllInternalDecls.ll deleted file mode 100644 index 7abf0c2..0000000 --- a/test/Transforms/FunctionResolve/2003-05-31-AllInternalDecls.ll +++ /dev/null @@ -1,7 +0,0 @@ -; This testcase should not cause a warning! - -; RUN: (as < %s | opt -funcresolve -disable-output) 2>&1 | not grep 'WARNING' - -%X = internal global float 1.0 -%X = internal global int 1 - diff --git a/test/Transforms/FunctionResolve/2003-05-31-FuncPointerResolve.ll b/test/Transforms/FunctionResolve/2003-05-31-FuncPointerResolve.ll deleted file mode 100644 index 51b0001..0000000 --- a/test/Transforms/FunctionResolve/2003-05-31-FuncPointerResolve.ll +++ /dev/null @@ -1,11 +0,0 @@ -; RUN: llvm-upgrade < %s | llvm-as | opt -funcresolve | llvm-dis | not grep declare - -%Table = constant int(...)* %foo - -%Table2 = constant [1 x int(...)* ] [ int(...)* %foo ] - -declare int %foo(...) - -int %foo() { - ret int 0 -} diff --git a/test/Transforms/FunctionResolve/2003-05-31-InternalDecl.ll b/test/Transforms/FunctionResolve/2003-05-31-InternalDecl.ll deleted file mode 100644 index c8d2de6..0000000 --- a/test/Transforms/FunctionResolve/2003-05-31-InternalDecl.ll +++ /dev/null @@ -1,12 +0,0 @@ -; RUN: llvm-upgrade < %s | llvm-as | opt -funcresolve | llvm-dis | grep declare - -declare void %test(...) - -int %callee() { - call void(...)* %test(int 5) - ret int 2 -} - -internal void %test(int) { - ret void -} diff --git a/test/Transforms/FunctionResolve/2003-06-18-TypePromotion.ll b/test/Transforms/FunctionResolve/2003-06-18-TypePromotion.ll deleted file mode 100644 index 9c22cbf..0000000 --- a/test/Transforms/FunctionResolve/2003-06-18-TypePromotion.ll +++ /dev/null @@ -1,12 +0,0 @@ -; RUN: llvm-upgrade < %s | llvm-as | opt -funcresolve | dis | not grep declare - -declare void %test(int) - -int %callee(int %X) { - call void %test(int %X) - ret int 2 -} - -internal void %test(sbyte) { - ret void -} diff --git a/test/Transforms/FunctionResolve/2003-07-23-CPR-Reference.ll b/test/Transforms/FunctionResolve/2003-07-23-CPR-Reference.ll deleted file mode 100644 index e1a29ec..0000000 --- a/test/Transforms/FunctionResolve/2003-07-23-CPR-Reference.ll +++ /dev/null @@ -1,10 +0,0 @@ -; RUN: llvm-upgrade < %s | llvm-as | opt -funcresolve | llvm-dis | not grep foo - -; The funcresolve pass was resolving the two foo's together in this test, -; adding a ConstantPointerRef to one of them. Then because of this -; reference, it wasn't able to delete the dead declaration. :( - -declare int %foo(...) -declare int %foo(int) - - diff --git a/test/Transforms/FunctionResolve/2003-08-23-ArgumentWarning.ll b/test/Transforms/FunctionResolve/2003-08-23-ArgumentWarning.ll deleted file mode 100644 index 4e0a4af..0000000 --- a/test/Transforms/FunctionResolve/2003-08-23-ArgumentWarning.ll +++ /dev/null @@ -1,12 +0,0 @@ -; RUN: llvm-upgrade < %s | llvm-as | opt -funcresolve -disable-output 2>&1 | not grep WARNING - -declare int %foo(int *%X) -declare int %foo(float *%X) - -implementation - -void %test() { - call int %foo(int* null) - call int %foo(float* null) - ret void -} diff --git a/test/Transforms/FunctionResolve/2003-10-21-GlobalResolveHack.ll b/test/Transforms/FunctionResolve/2003-10-21-GlobalResolveHack.ll deleted file mode 100644 index df5340f..0000000 --- a/test/Transforms/FunctionResolve/2003-10-21-GlobalResolveHack.ll +++ /dev/null @@ -1,12 +0,0 @@ -; This tests a hack put into place specifically for the C++ libstdc++ library. -; It uses an ugly hack which is cleaned up by the funcresolve pass. -; -; RUN: llvm-as < %s | opt -funcresolve | llvm-dis | grep @X | grep '{' - -@X = external global { i32 } -@X = global [ 4 x i8 ] zeroinitializer - -define i32* @test() { - %P = getelementptr {i32}* @X, i64 0, i32 0 - ret i32* %P -} diff --git a/test/Transforms/FunctionResolve/2003-11-20-BogusResolveWarning.ll b/test/Transforms/FunctionResolve/2003-11-20-BogusResolveWarning.ll deleted file mode 100644 index cc481f5..0000000 --- a/test/Transforms/FunctionResolve/2003-11-20-BogusResolveWarning.ll +++ /dev/null @@ -1,10 +0,0 @@ -; RUN: llvm-upgrade < %s | llvm-as | opt -funcresolve -disable-output 2>&1 | not grep WARNING - - -void %test() { - call int(...)* %test() - ret void -} - -declare int %test(...) - diff --git a/test/Transforms/FunctionResolve/basictest.ll b/test/Transforms/FunctionResolve/basictest.ll deleted file mode 100644 index 866ae8e..0000000 --- a/test/Transforms/FunctionResolve/basictest.ll +++ /dev/null @@ -1,12 +0,0 @@ -; RUN: llvm-upgrade < %s | llvm-as | opt -funcresolve -instcombine | llvm-dis | grep '\.\.\.' | not grep call - -declare int %foo(...) - -int %foo(int %x, float %y) { - ret int %x -} - -int %bar() { - %x = call int(...)* %foo(double 12.5, int 48) - ret int %x -} diff --git a/test/Transforms/FunctionResolve/dg.exp b/test/Transforms/FunctionResolve/dg.exp deleted file mode 100644 index 142de8a..0000000 --- a/test/Transforms/FunctionResolve/dg.exp +++ /dev/null @@ -1,3 +0,0 @@ -load_lib llvm-dg.exp - -llvm-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.{ll,llx,c,cpp,tr}]] $objdir $srcdir $subdir $target_triplet $llvmgcc $llvmgxx $prcontext $llvmgcc_version diff --git a/test/Transforms/FunctionResolve/retmismatch1.ll b/test/Transforms/FunctionResolve/retmismatch1.ll deleted file mode 100644 index 51aeff8..0000000 --- a/test/Transforms/FunctionResolve/retmismatch1.ll +++ /dev/null @@ -1,14 +0,0 @@ -; This shows where the function is called with the prototype indicating a -; return type exists, but it really doesn't. -; RUN: llvm-upgrade < %s | llvm-as | opt -funcresolve -instcombine | llvm-dis | grep '\.\.\.' | not grep call - -declare int %foo(...) - -void %foo(int %x, float %y) { - ret void -} - -int %bar() { - %x = call int(...)* %foo(double 12.5, int 48) - ret int %x -} diff --git a/test/Transforms/FunctionResolve/retmismatch2.ll b/test/Transforms/FunctionResolve/retmismatch2.ll deleted file mode 100644 index 749ca40..0000000 --- a/test/Transforms/FunctionResolve/retmismatch2.ll +++ /dev/null @@ -1,15 +0,0 @@ -; This shows where the function is called with the prototype indicating a -; return type doesn't exists, but it really does. -; -; RUN: llvm-upgrade < %s | llvm-as | opt -funcresolve -instcombine | llvm-dis | grep '\.\.\.' | not grep call - -declare void %foo(...) - -int %foo(int %x, float %y) { - ret int %x -} - -int %bar() { - call void (...)* %foo(double 12.5, int 48) - ret int 6 -} diff --git a/test/Transforms/FunctionResolve/retmismatch3.ll b/test/Transforms/FunctionResolve/retmismatch3.ll deleted file mode 100644 index f9850d6..0000000 --- a/test/Transforms/FunctionResolve/retmismatch3.ll +++ /dev/null @@ -1,12 +0,0 @@ -; RUN: llvm-upgrade < %s | llvm-as | opt -funcresolve - -declare int %read(...) - -long %read() { - ret long 0 -} - -int %testfunc() { - %X = call int(...)* %read() - ret int %X -} diff --git a/tools/bugpoint/CrashDebugger.cpp b/tools/bugpoint/CrashDebugger.cpp index 66b6511..b597d82 100644 --- a/tools/bugpoint/CrashDebugger.cpp +++ b/tools/bugpoint/CrashDebugger.cpp @@ -20,7 +20,7 @@ #include "llvm/Module.h" #include "llvm/Pass.h" #include "llvm/PassManager.h" -#include "llvm/SymbolTable.h" +#include "llvm/ValueSymbolTable.h" #include "llvm/Analysis/Verifier.h" #include "llvm/Bytecode/Writer.h" #include "llvm/Support/CFG.h" @@ -206,9 +206,9 @@ bool ReduceCrashingFunctions::TestFuncs(std::vector<Function*> &Funcs) { // FIXME: bugpoint should add names to all stripped symbols. assert(!Funcs[i]->getName().empty() && "Bugpoint doesn't work on stripped modules yet PR718!"); - Function *CMF = M->getFunction(Funcs[i]->getName(), - Funcs[i]->getFunctionType()); + Function *CMF = M->getFunction(Funcs[i]->getName()); assert(CMF && "Function not in module?!"); + assert(CMF->getFunctionType() == Funcs[i]->getFunctionType() && "wrong ty"); Functions.insert(CMF); } @@ -271,8 +271,9 @@ bool ReduceCrashingBlocks::TestBlocks(std::vector<const BasicBlock*> &BBs) { for (unsigned i = 0, e = BBs.size(); i != e; ++i) { // Convert the basic block from the original module to the new module... const Function *F = BBs[i]->getParent(); - Function *CMF = M->getFunction(F->getName(), F->getFunctionType()); + Function *CMF = M->getFunction(F->getName()); assert(CMF && "Function not in module?!"); + assert(CMF->getFunctionType() == F->getFunctionType() && "wrong type?"); // Get the mapped basic block... Function::iterator CBI = CMF->begin(); @@ -337,10 +338,10 @@ bool ReduceCrashingBlocks::TestBlocks(std::vector<const BasicBlock*> &BBs) { // module, and that they don't include any deleted blocks. BBs.clear(); for (unsigned i = 0, e = BlockInfo.size(); i != e; ++i) { - SymbolTable &ST = BlockInfo[i].first->getValueSymbolTable(); - SymbolTable::plane_iterator PI = ST.find(Type::LabelTy); - if (PI != ST.plane_end() && PI->second.count(BlockInfo[i].second)) - BBs.push_back(cast<BasicBlock>(PI->second[BlockInfo[i].second])); + ValueSymbolTable &ST = BlockInfo[i].first->getValueSymbolTable(); + Value* V = ST.lookup(BlockInfo[i].second); + if (V && V->getType() == Type::LabelTy) + BBs.push_back(cast<BasicBlock>(V)); } return true; } diff --git a/tools/bugpoint/ExtractFunction.cpp b/tools/bugpoint/ExtractFunction.cpp index b9d43e8..1ff06f8 100644 --- a/tools/bugpoint/ExtractFunction.cpp +++ b/tools/bugpoint/ExtractFunction.cpp @@ -110,7 +110,6 @@ Module *BugDriver::performFinalCleanups(Module *M, bool MayModifySemantics) { I->setLinkage(GlobalValue::ExternalLinkage); std::vector<const PassInfo*> CleanupPasses; - CleanupPasses.push_back(getPI(createFunctionResolvingPass())); CleanupPasses.push_back(getPI(createGlobalDCEPass())); CleanupPasses.push_back(getPI(createDeadTypeEliminationPass())); @@ -221,7 +220,7 @@ static void SplitStaticCtorDtor(const char *GlobalName, Module *M1, Module *M2){ M1Tors.push_back(std::make_pair(F, Priority)); else { // Map to M2's version of the function. - F = M2->getFunction(F->getName(), F->getFunctionType()); + F = M2->getFunction(F->getName()); M2Tors.push_back(std::make_pair(F, Priority)); } } @@ -272,9 +271,10 @@ Module *llvm::SplitFunctionsOutOfModule(Module *M, std::set<std::pair<std::string, const PointerType*> > TestFunctions; for (unsigned i = 0, e = F.size(); i != e; ++i) { TestFunctions.insert(std::make_pair(F[i]->getName(), F[i]->getType())); - Function *TNOF = M->getFunction(F[i]->getName(), F[i]->getFunctionType()); - DEBUG(std::cerr << "Removing function " << F[i]->getName() << "\n"); + Function *TNOF = M->getFunction(F[i]->getName()); assert(TNOF && "Function doesn't exist in module!"); + assert(TNOF->getFunctionType() == F[i]->getFunctionType() && "wrong type?"); + DEBUG(std::cerr << "Removing function " << F[i]->getName() << "\n"); DeleteFunctionBody(TNOF); // Function is now external in this module! } @@ -317,7 +317,7 @@ bool BlockExtractorPass::runOnModule(Module &M) { Function *F = BB->getParent(); // Map the corresponding function in this module. - Function *MF = M.getFunction(F->getName(), F->getFunctionType()); + Function *MF = M.getFunction(F->getName()); // Figure out which index the basic block is in its function. Function::iterator BBI = MF->begin(); diff --git a/tools/bugpoint/Miscompilation.cpp b/tools/bugpoint/Miscompilation.cpp index bdbd11b..38ccf0b 100644 --- a/tools/bugpoint/Miscompilation.cpp +++ b/tools/bugpoint/Miscompilation.cpp @@ -341,9 +341,11 @@ static bool ExtractLoops(BugDriver &BD, // optimized and loop extracted module. MiscompiledFunctions.clear(); for (unsigned i = 0, e = MisCompFunctions.size(); i != e; ++i) { - Function *NewF = ToNotOptimize->getFunction(MisCompFunctions[i].first, - MisCompFunctions[i].second); + Function *NewF = ToNotOptimize->getFunction(MisCompFunctions[i].first); + assert(NewF && "Function not found??"); + assert(NewF->getFunctionType() == MisCompFunctions[i].second && + "found wrong function type?"); MiscompiledFunctions.push_back(NewF); } @@ -479,9 +481,10 @@ static bool ExtractBlocks(BugDriver &BD, MiscompiledFunctions.clear(); for (unsigned i = 0, e = MisCompFunctions.size(); i != e; ++i) { - Function *NewF = ProgClone->getFunction(MisCompFunctions[i].first, - MisCompFunctions[i].second); + Function *NewF = ProgClone->getFunction(MisCompFunctions[i].first); assert(NewF && "Function not found??"); + assert(NewF->getFunctionType() == MisCompFunctions[i].second && + "Function has wrong type??"); MiscompiledFunctions.push_back(NewF); } diff --git a/tools/gccld/GenerateCode.cpp b/tools/gccld/GenerateCode.cpp index e70bda3..3f9923c 100644 --- a/tools/gccld/GenerateCode.cpp +++ b/tools/gccld/GenerateCode.cpp @@ -212,12 +212,6 @@ int llvm::GenerateBytecode(Module *M, int StripLevel, bool Internalize, // Add an appropriate TargetData instance for this module... addPass(Passes, new TargetData(M)); - // Often if the programmer does not specify proper prototypes for the - // functions they are calling, they end up calling a vararg version of the - // function that does not get a body filled in (the real function has typed - // arguments). This pass merges the two functions. - addPass(Passes, createFunctionResolvingPass()); - if (!DisableOptimizations) { // Now that composite has been compiled, scan through the module, looking // for a main function. If main is defined, mark all other functions diff --git a/tools/llvm-extract/llvm-extract.cpp b/tools/llvm-extract/llvm-extract.cpp index 766860f..932f19e 100644 --- a/tools/llvm-extract/llvm-extract.cpp +++ b/tools/llvm-extract/llvm-extract.cpp @@ -79,7 +79,6 @@ int main(int argc, char **argv) { Passes.add(createFunctionExtractionPass(F, DeleteFn, Relink)); if (!DeleteFn) Passes.add(createGlobalDCEPass()); // Delete unreachable globals - Passes.add(createFunctionResolvingPass()); // Delete prototypes Passes.add(createDeadTypeEliminationPass()); // Remove dead types... std::ostream *Out = 0; diff --git a/tools/llvm-ld/Optimize.cpp b/tools/llvm-ld/Optimize.cpp index c0edd43..0f77027 100644 --- a/tools/llvm-ld/Optimize.cpp +++ b/tools/llvm-ld/Optimize.cpp @@ -108,12 +108,6 @@ void Optimize(Module* M) { // Add an appropriate TargetData instance for this module... addPass(Passes, new TargetData(M)); - // Often if the programmer does not specify proper prototypes for the - // functions they are calling, they end up calling a vararg version of the - // function that does not get a body filled in (the real function has typed - // arguments). This pass merges the two functions. - addPass(Passes, createFunctionResolvingPass()); - if (!DisableOptimizations) { // Now that composite has been compiled, scan through the module, looking // for a main function. If main is defined, mark all other functions diff --git a/tools/llvm-upgrade/UpgradeLexer.cpp.cvs b/tools/llvm-upgrade/UpgradeLexer.cpp.cvs index eb32f83..5a5f436 100644 --- a/tools/llvm-upgrade/UpgradeLexer.cpp.cvs +++ b/tools/llvm-upgrade/UpgradeLexer.cpp.cvs @@ -925,7 +925,7 @@ goto find_rule; \ #define YY_MORE_ADJ 0 #define YY_RESTORE_YY_MORE_OFFSET char *yytext; -#line 1 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 1 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" #define INITIAL 0 /*===-- UpgradeLexer.l - Scanner for 1.9 assembly files --------*- C++ -*--===// // @@ -940,7 +940,7 @@ char *yytext; // //===----------------------------------------------------------------------===*/ #define YY_NEVER_INTERACTIVE 1 -#line 28 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 28 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" #include "UpgradeInternals.h" #include "llvm/Module.h" #include <list> @@ -1227,7 +1227,7 @@ YY_DECL register char *yy_cp = NULL, *yy_bp = NULL; register int yy_act; -#line 189 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 189 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" #line 1234 "UpgradeLexer.cpp" @@ -1323,717 +1323,717 @@ do_action: /* This label is used only to access EOF actions. */ { /* beginning of action switch */ case 1: YY_RULE_SETUP -#line 191 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 191 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { /* Ignore comments for now */ } YY_BREAK case 2: YY_RULE_SETUP -#line 193 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 193 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { return BEGINTOK; } YY_BREAK case 3: YY_RULE_SETUP -#line 194 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 194 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { return ENDTOK; } YY_BREAK case 4: YY_RULE_SETUP -#line 195 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 195 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { return TRUETOK; } YY_BREAK case 5: YY_RULE_SETUP -#line 196 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 196 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { return FALSETOK; } YY_BREAK case 6: YY_RULE_SETUP -#line 197 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 197 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { return DECLARE; } YY_BREAK case 7: YY_RULE_SETUP -#line 198 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 198 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { return GLOBAL; } YY_BREAK case 8: YY_RULE_SETUP -#line 199 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 199 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { return CONSTANT; } YY_BREAK case 9: YY_RULE_SETUP -#line 200 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 200 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { return INTERNAL; } YY_BREAK case 10: YY_RULE_SETUP -#line 201 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 201 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { return LINKONCE; } YY_BREAK case 11: YY_RULE_SETUP -#line 202 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 202 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { return WEAK; } YY_BREAK case 12: YY_RULE_SETUP -#line 203 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 203 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { return APPENDING; } YY_BREAK case 13: YY_RULE_SETUP -#line 204 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 204 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { return DLLIMPORT; } YY_BREAK case 14: YY_RULE_SETUP -#line 205 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 205 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { return DLLEXPORT; } YY_BREAK case 15: YY_RULE_SETUP -#line 206 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 206 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { return EXTERN_WEAK; } YY_BREAK case 16: YY_RULE_SETUP -#line 207 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 207 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { return EXTERNAL; } /* Deprecated, turn into external */ YY_BREAK case 17: YY_RULE_SETUP -#line 208 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 208 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { return EXTERNAL; } YY_BREAK case 18: YY_RULE_SETUP -#line 209 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 209 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { return IMPLEMENTATION; } YY_BREAK case 19: YY_RULE_SETUP -#line 210 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 210 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { return ZEROINITIALIZER; } YY_BREAK case 20: YY_RULE_SETUP -#line 211 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 211 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { return DOTDOTDOT; } YY_BREAK case 21: YY_RULE_SETUP -#line 212 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 212 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { return UNDEF; } YY_BREAK case 22: YY_RULE_SETUP -#line 213 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 213 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { return NULL_TOK; } YY_BREAK case 23: YY_RULE_SETUP -#line 214 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 214 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { return TO; } YY_BREAK case 24: YY_RULE_SETUP -#line 215 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 215 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { return EXCEPT; } YY_BREAK case 25: YY_RULE_SETUP -#line 216 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 216 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { return NOT; } /* Deprecated, turned into XOR */ YY_BREAK case 26: YY_RULE_SETUP -#line 217 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 217 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { return TAIL; } YY_BREAK case 27: YY_RULE_SETUP -#line 218 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 218 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { return TARGET; } YY_BREAK case 28: YY_RULE_SETUP -#line 219 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 219 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { return TRIPLE; } YY_BREAK case 29: YY_RULE_SETUP -#line 220 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 220 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { return DEPLIBS; } YY_BREAK case 30: YY_RULE_SETUP -#line 221 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 221 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { return ENDIAN; } YY_BREAK case 31: YY_RULE_SETUP -#line 222 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 222 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { return POINTERSIZE; } YY_BREAK case 32: YY_RULE_SETUP -#line 223 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 223 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { return DATALAYOUT; } YY_BREAK case 33: YY_RULE_SETUP -#line 224 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 224 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { return LITTLE; } YY_BREAK case 34: YY_RULE_SETUP -#line 225 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 225 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { return BIG; } YY_BREAK case 35: YY_RULE_SETUP -#line 226 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 226 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { return VOLATILE; } YY_BREAK case 36: YY_RULE_SETUP -#line 227 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 227 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { return ALIGN; } YY_BREAK case 37: YY_RULE_SETUP -#line 228 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 228 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { return SECTION; } YY_BREAK case 38: YY_RULE_SETUP -#line 229 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 229 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { return MODULE; } YY_BREAK case 39: YY_RULE_SETUP -#line 230 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 230 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { return ASM_TOK; } YY_BREAK case 40: YY_RULE_SETUP -#line 231 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 231 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { return SIDEEFFECT; } YY_BREAK case 41: YY_RULE_SETUP -#line 233 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 233 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { return CC_TOK; } YY_BREAK case 42: YY_RULE_SETUP -#line 234 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 234 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { return CCC_TOK; } YY_BREAK case 43: YY_RULE_SETUP -#line 235 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 235 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { return CSRETCC_TOK; } YY_BREAK case 44: YY_RULE_SETUP -#line 236 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 236 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { return FASTCC_TOK; } YY_BREAK case 45: YY_RULE_SETUP -#line 237 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 237 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { return COLDCC_TOK; } YY_BREAK case 46: YY_RULE_SETUP -#line 238 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 238 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { return X86_STDCALLCC_TOK; } YY_BREAK case 47: YY_RULE_SETUP -#line 239 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 239 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { return X86_FASTCALLCC_TOK; } YY_BREAK case 48: YY_RULE_SETUP -#line 241 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 241 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TY(SBYTE, Type::Int8Ty, Signed); } YY_BREAK case 49: YY_RULE_SETUP -#line 242 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 242 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TY(UBYTE, Type::Int8Ty, Unsigned); } YY_BREAK case 50: YY_RULE_SETUP -#line 243 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 243 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TY(SHORT, Type::Int16Ty, Signed); } YY_BREAK case 51: YY_RULE_SETUP -#line 244 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 244 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TY(USHORT, Type::Int16Ty, Unsigned); } YY_BREAK case 52: YY_RULE_SETUP -#line 245 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 245 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TY(INT, Type::Int32Ty, Signed); } YY_BREAK case 53: YY_RULE_SETUP -#line 246 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 246 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TY(UINT, Type::Int32Ty, Unsigned); } YY_BREAK case 54: YY_RULE_SETUP -#line 247 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 247 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TY(LONG, Type::Int64Ty, Signed); } YY_BREAK case 55: YY_RULE_SETUP -#line 248 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 248 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TY(ULONG, Type::Int64Ty, Unsigned); } YY_BREAK case 56: YY_RULE_SETUP -#line 249 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 249 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TY(VOID, Type::VoidTy, Signless ); } YY_BREAK case 57: YY_RULE_SETUP -#line 250 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 250 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TY(BOOL, Type::Int1Ty, Unsigned ); } YY_BREAK case 58: YY_RULE_SETUP -#line 251 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 251 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TY(FLOAT, Type::FloatTy, Signless ); } YY_BREAK case 59: YY_RULE_SETUP -#line 252 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 252 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TY(DOUBLE, Type::DoubleTy,Signless); } YY_BREAK case 60: YY_RULE_SETUP -#line 253 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 253 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TY(LABEL, Type::LabelTy, Signless ); } YY_BREAK case 61: YY_RULE_SETUP -#line 254 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 254 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { return TYPE; } YY_BREAK case 62: YY_RULE_SETUP -#line 255 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 255 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { return OPAQUE; } YY_BREAK case 63: YY_RULE_SETUP -#line 257 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 257 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, AddOp, ADD); } YY_BREAK case 64: YY_RULE_SETUP -#line 258 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 258 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, SubOp, SUB); } YY_BREAK case 65: YY_RULE_SETUP -#line 259 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 259 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, MulOp, MUL); } YY_BREAK case 66: YY_RULE_SETUP -#line 260 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 260 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, DivOp, DIV); } YY_BREAK case 67: YY_RULE_SETUP -#line 261 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 261 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, UDivOp, UDIV); } YY_BREAK case 68: YY_RULE_SETUP -#line 262 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 262 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, SDivOp, SDIV); } YY_BREAK case 69: YY_RULE_SETUP -#line 263 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 263 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, FDivOp, FDIV); } YY_BREAK case 70: YY_RULE_SETUP -#line 264 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 264 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, RemOp, REM); } YY_BREAK case 71: YY_RULE_SETUP -#line 265 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 265 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, URemOp, UREM); } YY_BREAK case 72: YY_RULE_SETUP -#line 266 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 266 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, SRemOp, SREM); } YY_BREAK case 73: YY_RULE_SETUP -#line 267 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 267 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, FRemOp, FREM); } YY_BREAK case 74: YY_RULE_SETUP -#line 268 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 268 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, AndOp, AND); } YY_BREAK case 75: YY_RULE_SETUP -#line 269 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 269 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, OrOp , OR ); } YY_BREAK case 76: YY_RULE_SETUP -#line 270 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 270 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, XorOp, XOR); } YY_BREAK case 77: YY_RULE_SETUP -#line 271 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 271 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, SetNE, SETNE); } YY_BREAK case 78: YY_RULE_SETUP -#line 272 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 272 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, SetEQ, SETEQ); } YY_BREAK case 79: YY_RULE_SETUP -#line 273 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 273 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, SetLT, SETLT); } YY_BREAK case 80: YY_RULE_SETUP -#line 274 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 274 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, SetGT, SETGT); } YY_BREAK case 81: YY_RULE_SETUP -#line 275 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 275 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, SetLE, SETLE); } YY_BREAK case 82: YY_RULE_SETUP -#line 276 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 276 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, SetGE, SETGE); } YY_BREAK case 83: YY_RULE_SETUP -#line 277 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 277 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, ShlOp, SHL); } YY_BREAK case 84: YY_RULE_SETUP -#line 278 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 278 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, ShrOp, SHR); } YY_BREAK case 85: YY_RULE_SETUP -#line 279 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 279 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, LShrOp, LSHR); } YY_BREAK case 86: YY_RULE_SETUP -#line 280 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 280 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, AShrOp, ASHR); } YY_BREAK case 87: YY_RULE_SETUP -#line 282 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 282 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(OtherOpVal, ICmpOp, ICMP); } YY_BREAK case 88: YY_RULE_SETUP -#line 283 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 283 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(OtherOpVal, FCmpOp, FCMP); } YY_BREAK case 89: YY_RULE_SETUP -#line 285 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 285 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { return EQ; } YY_BREAK case 90: YY_RULE_SETUP -#line 286 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 286 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { return NE; } YY_BREAK case 91: YY_RULE_SETUP -#line 287 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 287 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { return SLT; } YY_BREAK case 92: YY_RULE_SETUP -#line 288 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 288 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { return SGT; } YY_BREAK case 93: YY_RULE_SETUP -#line 289 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 289 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { return SLE; } YY_BREAK case 94: YY_RULE_SETUP -#line 290 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 290 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { return SGE; } YY_BREAK case 95: YY_RULE_SETUP -#line 291 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 291 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { return ULT; } YY_BREAK case 96: YY_RULE_SETUP -#line 292 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 292 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { return UGT; } YY_BREAK case 97: YY_RULE_SETUP -#line 293 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 293 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { return ULE; } YY_BREAK case 98: YY_RULE_SETUP -#line 294 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 294 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { return UGE; } YY_BREAK case 99: YY_RULE_SETUP -#line 295 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 295 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { return OEQ; } YY_BREAK case 100: YY_RULE_SETUP -#line 296 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 296 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { return ONE; } YY_BREAK case 101: YY_RULE_SETUP -#line 297 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 297 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { return OLT; } YY_BREAK case 102: YY_RULE_SETUP -#line 298 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 298 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { return OGT; } YY_BREAK case 103: YY_RULE_SETUP -#line 299 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 299 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { return OLE; } YY_BREAK case 104: YY_RULE_SETUP -#line 300 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 300 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { return OGE; } YY_BREAK case 105: YY_RULE_SETUP -#line 301 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 301 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { return ORD; } YY_BREAK case 106: YY_RULE_SETUP -#line 302 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 302 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { return UNO; } YY_BREAK case 107: YY_RULE_SETUP -#line 303 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 303 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { return UEQ; } YY_BREAK case 108: YY_RULE_SETUP -#line 304 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 304 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { return UNE; } YY_BREAK case 109: YY_RULE_SETUP -#line 306 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 306 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(OtherOpVal, PHIOp, PHI_TOK); } YY_BREAK case 110: YY_RULE_SETUP -#line 307 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 307 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(OtherOpVal, CallOp, CALL); } YY_BREAK case 111: YY_RULE_SETUP -#line 308 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 308 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(CastOpVal, CastOp, CAST); } YY_BREAK case 112: YY_RULE_SETUP -#line 309 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 309 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(CastOpVal, TruncOp, TRUNC); } YY_BREAK case 113: YY_RULE_SETUP -#line 310 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 310 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(CastOpVal, ZExtOp , ZEXT); } YY_BREAK case 114: YY_RULE_SETUP -#line 311 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 311 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(CastOpVal, SExtOp, SEXT); } YY_BREAK case 115: YY_RULE_SETUP -#line 312 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 312 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(CastOpVal, FPTruncOp, FPTRUNC); } YY_BREAK case 116: YY_RULE_SETUP -#line 313 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 313 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(CastOpVal, FPExtOp, FPEXT); } YY_BREAK case 117: YY_RULE_SETUP -#line 314 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 314 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(CastOpVal, FPToUIOp, FPTOUI); } YY_BREAK case 118: YY_RULE_SETUP -#line 315 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 315 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(CastOpVal, FPToSIOp, FPTOSI); } YY_BREAK case 119: YY_RULE_SETUP -#line 316 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 316 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(CastOpVal, UIToFPOp, UITOFP); } YY_BREAK case 120: YY_RULE_SETUP -#line 317 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 317 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(CastOpVal, SIToFPOp, SITOFP); } YY_BREAK case 121: YY_RULE_SETUP -#line 318 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 318 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(CastOpVal, PtrToIntOp, PTRTOINT); } YY_BREAK case 122: YY_RULE_SETUP -#line 319 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 319 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(CastOpVal, IntToPtrOp, INTTOPTR); } YY_BREAK case 123: YY_RULE_SETUP -#line 320 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 320 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(CastOpVal, BitCastOp, BITCAST); } YY_BREAK case 124: YY_RULE_SETUP -#line 321 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 321 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(OtherOpVal, SelectOp, SELECT); } YY_BREAK case 125: YY_RULE_SETUP -#line 322 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 322 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { return VANEXT_old; } YY_BREAK case 126: YY_RULE_SETUP -#line 323 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 323 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { return VAARG_old; } YY_BREAK case 127: YY_RULE_SETUP -#line 324 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 324 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(OtherOpVal, VAArg , VAARG); } YY_BREAK case 128: YY_RULE_SETUP -#line 325 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 325 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(TermOpVal, RetOp, RET); } YY_BREAK case 129: YY_RULE_SETUP -#line 326 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 326 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(TermOpVal, BrOp, BR); } YY_BREAK case 130: YY_RULE_SETUP -#line 327 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 327 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(TermOpVal, SwitchOp, SWITCH); } YY_BREAK case 131: YY_RULE_SETUP -#line 328 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 328 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(TermOpVal, InvokeOp, INVOKE); } YY_BREAK case 132: YY_RULE_SETUP -#line 329 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 329 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { return UNWIND; } YY_BREAK case 133: YY_RULE_SETUP -#line 330 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 330 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(TermOpVal, UnreachableOp, UNREACHABLE); } YY_BREAK case 134: YY_RULE_SETUP -#line 332 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 332 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(MemOpVal, MallocOp, MALLOC); } YY_BREAK case 135: YY_RULE_SETUP -#line 333 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 333 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(MemOpVal, AllocaOp, ALLOCA); } YY_BREAK case 136: YY_RULE_SETUP -#line 334 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 334 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(MemOpVal, FreeOp, FREE); } YY_BREAK case 137: YY_RULE_SETUP -#line 335 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 335 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(MemOpVal, LoadOp, LOAD); } YY_BREAK case 138: YY_RULE_SETUP -#line 336 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 336 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(MemOpVal, StoreOp, STORE); } YY_BREAK case 139: YY_RULE_SETUP -#line 337 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 337 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(MemOpVal, GetElementPtrOp, GETELEMENTPTR); } YY_BREAK case 140: YY_RULE_SETUP -#line 339 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 339 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(OtherOpVal, ExtractElementOp, EXTRACTELEMENT); } YY_BREAK case 141: YY_RULE_SETUP -#line 340 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 340 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(OtherOpVal, InsertElementOp, INSERTELEMENT); } YY_BREAK case 142: YY_RULE_SETUP -#line 341 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 341 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(OtherOpVal, ShuffleVectorOp, SHUFFLEVECTOR); } YY_BREAK case 143: YY_RULE_SETUP -#line 344 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 344 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { UnEscapeLexed(yytext+1); Upgradelval.StrVal = strdup(yytext+1); // Skip % @@ -2042,7 +2042,7 @@ YY_RULE_SETUP YY_BREAK case 144: YY_RULE_SETUP -#line 349 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 349 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { yytext[strlen(yytext)-1] = 0; // nuke colon UnEscapeLexed(yytext); @@ -2052,7 +2052,7 @@ YY_RULE_SETUP YY_BREAK case 145: YY_RULE_SETUP -#line 355 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 355 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { yytext[strlen(yytext)-2] = 0; // nuke colon, end quote UnEscapeLexed(yytext+1); @@ -2062,7 +2062,7 @@ YY_RULE_SETUP YY_BREAK case 146: YY_RULE_SETUP -#line 362 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 362 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { // Note that we cannot unescape a string constant here! The // string constant might contain a \00 which would not be // understood by the string stuff. It is valid to make a @@ -2075,12 +2075,12 @@ YY_RULE_SETUP YY_BREAK case 147: YY_RULE_SETUP -#line 373 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 373 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { Upgradelval.UInt64Val = atoull(yytext); return EUINT64VAL; } YY_BREAK case 148: YY_RULE_SETUP -#line 374 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 374 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { uint64_t Val = atoull(yytext+1); // +1: we have bigger negative range @@ -2092,7 +2092,7 @@ YY_RULE_SETUP YY_BREAK case 149: YY_RULE_SETUP -#line 382 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 382 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { Upgradelval.UInt64Val = HexIntToVal(yytext+3); return yytext[0] == 's' ? ESINT64VAL : EUINT64VAL; @@ -2100,7 +2100,7 @@ YY_RULE_SETUP YY_BREAK case 150: YY_RULE_SETUP -#line 387 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 387 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { uint64_t Val = atoull(yytext+1); if ((unsigned)Val != Val) @@ -2111,7 +2111,7 @@ YY_RULE_SETUP YY_BREAK case 151: YY_RULE_SETUP -#line 394 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 394 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { uint64_t Val = atoull(yytext+2); // +1: we have bigger negative range @@ -2123,16 +2123,16 @@ YY_RULE_SETUP YY_BREAK case 152: YY_RULE_SETUP -#line 403 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 403 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { Upgradelval.FPVal = atof(yytext); return FPVAL; } YY_BREAK case 153: YY_RULE_SETUP -#line 404 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 404 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { Upgradelval.FPVal = HexToFP(yytext); return FPVAL; } YY_BREAK case YY_STATE_EOF(INITIAL): -#line 406 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 406 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { /* Make sure to free the internal buffers for flex when we are * done reading our input! @@ -2143,17 +2143,17 @@ case YY_STATE_EOF(INITIAL): YY_BREAK case 154: YY_RULE_SETUP -#line 414 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 414 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { /* Ignore whitespace */ } YY_BREAK case 155: YY_RULE_SETUP -#line 415 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 415 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { return yytext[0]; } YY_BREAK case 156: YY_RULE_SETUP -#line 417 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 417 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" YY_FATAL_ERROR( "flex scanner jammed" ); YY_BREAK #line 2160 "UpgradeLexer.cpp" @@ -3034,5 +3034,5 @@ int main() return 0; } #endif -#line 417 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l" +#line 417 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" diff --git a/tools/llvm-upgrade/UpgradeParser.cpp.cvs b/tools/llvm-upgrade/UpgradeParser.cpp.cvs index 04649f3..70ff399 100644 --- a/tools/llvm-upgrade/UpgradeParser.cpp.cvs +++ b/tools/llvm-upgrade/UpgradeParser.cpp.cvs @@ -370,14 +370,14 @@ /* Copy the first part of user declarations. */ -#line 14 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 14 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" #include "UpgradeInternals.h" #include "llvm/CallingConv.h" #include "llvm/InlineAsm.h" #include "llvm/Instructions.h" #include "llvm/Module.h" -#include "llvm/SymbolTable.h" +#include "llvm/ValueSymbolTable.h" #include "llvm/Support/GetElementPtrTypeIterator.h" #include "llvm/ADT/STLExtras.h" #include "llvm/Support/MathExtras.h" @@ -672,8 +672,10 @@ static Value *getExistingValue(const Type *Ty, const ValID &D) { LookupName = I->second; else LookupName = Name; - SymbolTable &SymTab = CurFun.CurrentFunction->getValueSymbolTable(); - V = SymTab.lookup(Ty, LookupName); + ValueSymbolTable &SymTab = CurFun.CurrentFunction->getValueSymbolTable(); + V = SymTab.lookup(LookupName); + if (V && V->getType() != Ty) + V = 0; } if (!V) { RenameMapType::const_iterator I = CurModule.RenameMap.find(Key); @@ -682,9 +684,11 @@ static Value *getExistingValue(const Type *Ty, const ValID &D) { LookupName = I->second; else LookupName = Name; - V = CurModule.CurrentModule->getValueSymbolTable().lookup(Ty, LookupName); + V = CurModule.CurrentModule->getValueSymbolTable().lookup(LookupName); + if (V && V->getType() != Ty) + V = 0; } - if (V == 0) + if (!V) return 0; D.destroy(); // Free old strdup'd memory... @@ -776,7 +780,7 @@ static Value *getVal(const Type *Ty, const ValID &ID) { // Remember where this forward reference came from. FIXME, shouldn't we try // to recycle these things?? CurModule.PlaceHolderInfo.insert( - std::make_pair(V, std::make_pair(ID, Upgradelineno-1))); + std::make_pair(V, std::make_pair(ID, Upgradelineno))); if (inFunctionScope()) InsertValue(V, CurFun.LateResolveValues); @@ -808,7 +812,7 @@ static BasicBlock *getBBVal(const ValID &ID, bool isDefinition = false) { case ValID::NameVal: // Is it a named definition? Name = ID.Name; if (Value *N = CurFun.CurrentFunction-> - getValueSymbolTable().lookup(Type::LabelTy, Name)) { + getValueSymbolTable().lookup(Name)) { if (N->getType() != Type::LabelTy) error("Name '" + Name + "' does not refer to a BasicBlock"); BB = cast<BasicBlock>(N); @@ -1042,16 +1046,8 @@ static void setValueName(Value *V, char *NameStr) { assert(inFunctionScope() && "Must be in function scope"); // Search the function's symbol table for an existing value of this name - Value* Existing = 0; - SymbolTable &ST = CurFun.CurrentFunction->getValueSymbolTable(); - SymbolTable::plane_const_iterator PI = ST.plane_begin(), PE =ST.plane_end(); - for ( ; PI != PE; ++PI) { - SymbolTable::value_const_iterator VI = PI->second.find(Name); - if (VI != PI->second.end()) { - Existing = VI->second; - break; - } - } + ValueSymbolTable &ST = CurFun.CurrentFunction->getValueSymbolTable(); + Value* Existing = ST.lookup(Name); if (Existing) { // An existing value of the same name was found. This might have happened // because of the integer type planes collapsing in LLVM 2.0. @@ -1811,7 +1807,7 @@ using namespace llvm; #endif #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED) -#line 1435 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1431 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" typedef union YYSTYPE { llvm::Module *ModuleVal; llvm::Function *FunctionVal; @@ -1854,7 +1850,7 @@ typedef union YYSTYPE { llvm::Module::Endianness Endianness; } YYSTYPE; /* Line 196 of yacc.c. */ -#line 1858 "UpgradeParser.tab.c" +#line 1854 "UpgradeParser.tab.c" # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 # define YYSTYPE_IS_TRIVIAL 1 @@ -1866,7 +1862,7 @@ typedef union YYSTYPE { /* Line 219 of yacc.c. */ -#line 1870 "UpgradeParser.tab.c" +#line 1866 "UpgradeParser.tab.c" #if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__) # define YYSIZE_T __SIZE_TYPE__ @@ -2224,37 +2220,37 @@ static const short int yyrhs[] = /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const unsigned short int yyrline[] = { - 0, 1575, 1575, 1576, 1584, 1585, 1595, 1595, 1595, 1595, - 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1599, 1599, 1599, - 1603, 1603, 1603, 1603, 1603, 1603, 1607, 1607, 1608, 1608, - 1609, 1609, 1610, 1610, 1611, 1611, 1615, 1615, 1616, 1616, - 1617, 1617, 1618, 1618, 1619, 1619, 1620, 1620, 1621, 1621, - 1622, 1623, 1626, 1626, 1626, 1626, 1630, 1630, 1630, 1630, - 1630, 1630, 1630, 1631, 1631, 1631, 1631, 1631, 1631, 1637, - 1637, 1637, 1637, 1641, 1641, 1641, 1641, 1645, 1645, 1649, - 1649, 1654, 1657, 1662, 1663, 1664, 1665, 1666, 1667, 1668, - 1669, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1690, - 1691, 1699, 1700, 1708, 1717, 1718, 1725, 1726, 1730, 1734, - 1750, 1751, 1758, 1759, 1766, 1774, 1774, 1774, 1774, 1774, - 1774, 1774, 1775, 1775, 1775, 1775, 1775, 1780, 1784, 1788, - 1793, 1802, 1822, 1828, 1841, 1850, 1854, 1865, 1869, 1882, - 1886, 1893, 1894, 1900, 1907, 1919, 1949, 1962, 1985, 2013, - 2035, 2046, 2068, 2079, 2088, 2093, 2151, 2158, 2166, 2173, - 2180, 2184, 2188, 2197, 2212, 2225, 2234, 2262, 2275, 2284, - 2290, 2296, 2307, 2313, 2319, 2330, 2331, 2340, 2341, 2353, - 2362, 2363, 2364, 2365, 2366, 2382, 2402, 2404, 2406, 2406, - 2413, 2413, 2420, 2420, 2427, 2427, 2435, 2437, 2439, 2444, - 2458, 2459, 2463, 2466, 2474, 2478, 2485, 2489, 2493, 2497, - 2505, 2505, 2509, 2510, 2514, 2522, 2527, 2535, 2536, 2543, - 2550, 2554, 2669, 2669, 2673, 2683, 2683, 2687, 2691, 2693, - 2694, 2698, 2698, 2710, 2711, 2716, 2717, 2718, 2719, 2720, - 2721, 2722, 2723, 2724, 2745, 2748, 2763, 2764, 2769, 2769, - 2777, 2786, 2789, 2798, 2808, 2813, 2822, 2833, 2833, 2836, - 2839, 2842, 2846, 2852, 2867, 2873, 2929, 2932, 2938, 2948, - 2961, 2990, 2998, 3006, 3010, 3017, 3018, 3022, 3025, 3031, - 3048, 3064, 3078, 3090, 3102, 3113, 3131, 3140, 3149, 3156, - 3177, 3201, 3207, 3213, 3219, 3235, 3313, 3321, 3322, 3326, - 3327, 3331, 3337, 3343, 3349, 3355, 3362, 3374, 3388 + 0, 1571, 1571, 1572, 1580, 1581, 1591, 1591, 1591, 1591, + 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1595, 1595, 1595, + 1599, 1599, 1599, 1599, 1599, 1599, 1603, 1603, 1604, 1604, + 1605, 1605, 1606, 1606, 1607, 1607, 1611, 1611, 1612, 1612, + 1613, 1613, 1614, 1614, 1615, 1615, 1616, 1616, 1617, 1617, + 1618, 1619, 1622, 1622, 1622, 1622, 1626, 1626, 1626, 1626, + 1626, 1626, 1626, 1627, 1627, 1627, 1627, 1627, 1627, 1633, + 1633, 1633, 1633, 1637, 1637, 1637, 1637, 1641, 1641, 1645, + 1645, 1650, 1653, 1658, 1659, 1660, 1661, 1662, 1663, 1664, + 1665, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1686, + 1687, 1695, 1696, 1704, 1713, 1714, 1721, 1722, 1726, 1730, + 1746, 1747, 1754, 1755, 1762, 1770, 1770, 1770, 1770, 1770, + 1770, 1770, 1771, 1771, 1771, 1771, 1771, 1776, 1780, 1784, + 1789, 1798, 1818, 1824, 1837, 1846, 1850, 1861, 1865, 1878, + 1882, 1889, 1890, 1896, 1903, 1915, 1945, 1958, 1981, 2009, + 2031, 2042, 2064, 2075, 2084, 2089, 2147, 2154, 2162, 2169, + 2176, 2180, 2184, 2193, 2208, 2221, 2230, 2258, 2271, 2280, + 2286, 2292, 2303, 2309, 2315, 2326, 2327, 2336, 2337, 2349, + 2358, 2359, 2360, 2361, 2362, 2378, 2398, 2400, 2402, 2402, + 2409, 2409, 2416, 2416, 2423, 2423, 2431, 2433, 2435, 2440, + 2454, 2455, 2459, 2462, 2470, 2474, 2481, 2485, 2489, 2493, + 2501, 2501, 2505, 2506, 2510, 2518, 2523, 2531, 2532, 2539, + 2546, 2550, 2686, 2686, 2690, 2700, 2700, 2704, 2708, 2710, + 2711, 2715, 2715, 2727, 2728, 2733, 2734, 2735, 2736, 2737, + 2738, 2739, 2740, 2741, 2762, 2765, 2780, 2781, 2786, 2786, + 2794, 2803, 2806, 2815, 2825, 2830, 2839, 2850, 2850, 2853, + 2856, 2859, 2863, 2869, 2884, 2890, 2946, 2949, 2955, 2965, + 2978, 3007, 3015, 3023, 3027, 3034, 3035, 3039, 3042, 3048, + 3065, 3081, 3095, 3107, 3119, 3130, 3148, 3157, 3166, 3173, + 3194, 3218, 3224, 3230, 3236, 3252, 3330, 3338, 3339, 3343, + 3344, 3348, 3354, 3360, 3366, 3372, 3379, 3391, 3405 }; #endif @@ -3660,7 +3656,7 @@ yyreduce: switch (yyn) { case 3: -#line 1576 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1572 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { if ((yyvsp[0].UIntVal) > (uint32_t)INT32_MAX) // Outside of my range! error("Value too large for type"); @@ -3669,7 +3665,7 @@ yyreduce: break; case 5: -#line 1585 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1581 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { if ((yyvsp[0].UInt64Val) > (uint64_t)INT64_MAX) // Outside of my range! error("Value too large for type"); @@ -3678,226 +3674,226 @@ yyreduce: break; case 26: -#line 1607 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1603 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.IPred) = ICmpInst::ICMP_EQ; ;} break; case 27: -#line 1607 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1603 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.IPred) = ICmpInst::ICMP_NE; ;} break; case 28: -#line 1608 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1604 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.IPred) = ICmpInst::ICMP_SLT; ;} break; case 29: -#line 1608 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1604 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.IPred) = ICmpInst::ICMP_SGT; ;} break; case 30: -#line 1609 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1605 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.IPred) = ICmpInst::ICMP_SLE; ;} break; case 31: -#line 1609 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1605 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.IPred) = ICmpInst::ICMP_SGE; ;} break; case 32: -#line 1610 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1606 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.IPred) = ICmpInst::ICMP_ULT; ;} break; case 33: -#line 1610 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1606 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.IPred) = ICmpInst::ICMP_UGT; ;} break; case 34: -#line 1611 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1607 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.IPred) = ICmpInst::ICMP_ULE; ;} break; case 35: -#line 1611 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1607 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.IPred) = ICmpInst::ICMP_UGE; ;} break; case 36: -#line 1615 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1611 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.FPred) = FCmpInst::FCMP_OEQ; ;} break; case 37: -#line 1615 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1611 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.FPred) = FCmpInst::FCMP_ONE; ;} break; case 38: -#line 1616 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1612 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.FPred) = FCmpInst::FCMP_OLT; ;} break; case 39: -#line 1616 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1612 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.FPred) = FCmpInst::FCMP_OGT; ;} break; case 40: -#line 1617 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1613 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.FPred) = FCmpInst::FCMP_OLE; ;} break; case 41: -#line 1617 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1613 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.FPred) = FCmpInst::FCMP_OGE; ;} break; case 42: -#line 1618 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1614 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.FPred) = FCmpInst::FCMP_ORD; ;} break; case 43: -#line 1618 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1614 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.FPred) = FCmpInst::FCMP_UNO; ;} break; case 44: -#line 1619 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1615 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.FPred) = FCmpInst::FCMP_UEQ; ;} break; case 45: -#line 1619 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1615 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.FPred) = FCmpInst::FCMP_UNE; ;} break; case 46: -#line 1620 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1616 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.FPred) = FCmpInst::FCMP_ULT; ;} break; case 47: -#line 1620 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1616 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.FPred) = FCmpInst::FCMP_UGT; ;} break; case 48: -#line 1621 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1617 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.FPred) = FCmpInst::FCMP_ULE; ;} break; case 49: -#line 1621 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1617 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.FPred) = FCmpInst::FCMP_UGE; ;} break; case 50: -#line 1622 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1618 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.FPred) = FCmpInst::FCMP_TRUE; ;} break; case 51: -#line 1623 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1619 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.FPred) = FCmpInst::FCMP_FALSE; ;} break; case 81: -#line 1654 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1650 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.StrVal) = (yyvsp[-1].StrVal); ;} break; case 82: -#line 1657 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1653 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.StrVal) = 0; ;} break; case 83: -#line 1662 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1658 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.Linkage) = GlobalValue::InternalLinkage; ;} break; case 84: -#line 1663 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1659 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.Linkage) = GlobalValue::LinkOnceLinkage; ;} break; case 85: -#line 1664 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1660 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.Linkage) = GlobalValue::WeakLinkage; ;} break; case 86: -#line 1665 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1661 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.Linkage) = GlobalValue::AppendingLinkage; ;} break; case 87: -#line 1666 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1662 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.Linkage) = GlobalValue::DLLImportLinkage; ;} break; case 88: -#line 1667 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1663 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.Linkage) = GlobalValue::DLLExportLinkage; ;} break; case 89: -#line 1668 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1664 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.Linkage) = GlobalValue::ExternalWeakLinkage; ;} break; case 90: -#line 1669 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1665 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;} break; case 91: -#line 1673 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1669 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { CurFun.LastCC = (yyval.UIntVal) = OldCallingConv::C; ;} break; case 92: -#line 1674 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1670 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { CurFun.LastCC = (yyval.UIntVal) = OldCallingConv::C; ;} break; case 93: -#line 1675 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1671 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { CurFun.LastCC = (yyval.UIntVal) = OldCallingConv::CSRet; ;} break; case 94: -#line 1676 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1672 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { CurFun.LastCC = (yyval.UIntVal) = OldCallingConv::Fast; ;} break; case 95: -#line 1677 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1673 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { CurFun.LastCC = (yyval.UIntVal) = OldCallingConv::Cold; ;} break; case 96: -#line 1678 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1674 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { CurFun.LastCC = (yyval.UIntVal) = OldCallingConv::X86_StdCall; ;} break; case 97: -#line 1679 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1675 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { CurFun.LastCC = (yyval.UIntVal) = OldCallingConv::X86_FastCall; ;} break; case 98: -#line 1680 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1676 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { if ((unsigned)(yyvsp[0].UInt64Val) != (yyvsp[0].UInt64Val)) error("Calling conv too large"); @@ -3906,12 +3902,12 @@ yyreduce: break; case 99: -#line 1690 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1686 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.UIntVal) = 0; ;} break; case 100: -#line 1691 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1687 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.UIntVal) = (yyvsp[0].UInt64Val); if ((yyval.UIntVal) != 0 && !isPowerOf2_32((yyval.UIntVal))) @@ -3920,12 +3916,12 @@ yyreduce: break; case 101: -#line 1699 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1695 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.UIntVal) = 0; ;} break; case 102: -#line 1700 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1696 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.UIntVal) = (yyvsp[0].UInt64Val); if ((yyval.UIntVal) != 0 && !isPowerOf2_32((yyval.UIntVal))) @@ -3934,7 +3930,7 @@ yyreduce: break; case 103: -#line 1708 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1704 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { for (unsigned i = 0, e = strlen((yyvsp[0].StrVal)); i != e; ++i) if ((yyvsp[0].StrVal)[i] == '"' || (yyvsp[0].StrVal)[i] == '\\') @@ -3944,27 +3940,27 @@ yyreduce: break; case 104: -#line 1717 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1713 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.StrVal) = 0; ;} break; case 105: -#line 1718 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1714 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.StrVal) = (yyvsp[0].StrVal); ;} break; case 106: -#line 1725 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1721 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" {;} break; case 107: -#line 1726 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1722 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" {;} break; case 108: -#line 1730 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1726 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { CurGV->setSection((yyvsp[0].StrVal)); free((yyvsp[0].StrVal)); @@ -3972,7 +3968,7 @@ yyreduce: break; case 109: -#line 1734 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1730 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { if ((yyvsp[0].UInt64Val) != 0 && !isPowerOf2_32((yyvsp[0].UInt64Val))) error("Alignment must be a power of two"); @@ -3982,7 +3978,7 @@ yyreduce: break; case 111: -#line 1751 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1747 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.TypeVal).T = new PATypeHolder((yyvsp[0].PrimType).T); (yyval.TypeVal).S = Signless; @@ -3990,7 +3986,7 @@ yyreduce: break; case 113: -#line 1759 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1755 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.TypeVal).T = new PATypeHolder((yyvsp[0].PrimType).T); (yyval.TypeVal).S = Signless; @@ -3998,7 +3994,7 @@ yyreduce: break; case 114: -#line 1766 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1762 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { if (!UpRefs.empty()) error("Invalid upreference in type: " + (*(yyvsp[0].TypeVal).T)->getDescription()); @@ -4007,7 +4003,7 @@ yyreduce: break; case 127: -#line 1780 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1776 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.TypeVal).T = new PATypeHolder((yyvsp[0].PrimType).T); (yyval.TypeVal).S = (yyvsp[0].PrimType).S; @@ -4015,7 +4011,7 @@ yyreduce: break; case 128: -#line 1784 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1780 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.TypeVal).T = new PATypeHolder(OpaqueType::get()); (yyval.TypeVal).S = Signless; @@ -4023,7 +4019,7 @@ yyreduce: break; case 129: -#line 1788 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1784 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { // Named types are also simple types... const Type* tmp = getType((yyvsp[0].ValIDVal)); (yyval.TypeVal).T = new PATypeHolder(tmp); @@ -4032,7 +4028,7 @@ yyreduce: break; case 130: -#line 1793 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1789 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { // Type UpReference if ((yyvsp[0].UInt64Val) > (uint64_t)~0U) error("Value out of range"); @@ -4045,7 +4041,7 @@ yyreduce: break; case 131: -#line 1802 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1798 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { // Function derived type? std::vector<const Type*> Params; for (std::list<llvm::PATypeInfo>::iterator I = (yyvsp[-1].TypeList)->begin(), @@ -4069,7 +4065,7 @@ yyreduce: break; case 132: -#line 1822 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1818 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { // Sized array type? (yyval.TypeVal).T = new PATypeHolder(HandleUpRefs(ArrayType::get((yyvsp[-1].TypeVal).T->get(), (unsigned)(yyvsp[-3].UInt64Val)))); @@ -4079,7 +4075,7 @@ yyreduce: break; case 133: -#line 1828 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1824 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { // Packed array type? const llvm::Type* ElemTy = (yyvsp[-1].TypeVal).T->get(); if ((unsigned)(yyvsp[-3].UInt64Val) != (yyvsp[-3].UInt64Val)) @@ -4096,7 +4092,7 @@ yyreduce: break; case 134: -#line 1841 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1837 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { // Structure type? std::vector<const Type*> Elements; for (std::list<llvm::PATypeInfo>::iterator I = (yyvsp[-1].TypeList)->begin(), @@ -4109,7 +4105,7 @@ yyreduce: break; case 135: -#line 1850 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1846 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { // Empty structure type? (yyval.TypeVal).T = new PATypeHolder(StructType::get(std::vector<const Type*>())); (yyval.TypeVal).S = Signless; @@ -4117,7 +4113,7 @@ yyreduce: break; case 136: -#line 1854 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1850 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { // Packed Structure type? std::vector<const Type*> Elements; for (std::list<llvm::PATypeInfo>::iterator I = (yyvsp[-2].TypeList)->begin(), @@ -4132,7 +4128,7 @@ yyreduce: break; case 137: -#line 1865 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1861 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { // Empty packed structure type? (yyval.TypeVal).T = new PATypeHolder(StructType::get(std::vector<const Type*>(),true)); (yyval.TypeVal).S = Signless; @@ -4140,7 +4136,7 @@ yyreduce: break; case 138: -#line 1869 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1865 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { // Pointer type? if ((yyvsp[-1].TypeVal).T->get() == Type::LabelTy) error("Cannot form a pointer to a basic block"); @@ -4151,7 +4147,7 @@ yyreduce: break; case 139: -#line 1882 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1878 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.TypeList) = new std::list<PATypeInfo>(); (yyval.TypeList)->push_back((yyvsp[0].TypeVal)); @@ -4159,14 +4155,14 @@ yyreduce: break; case 140: -#line 1886 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1882 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { ((yyval.TypeList)=(yyvsp[-2].TypeList))->push_back((yyvsp[0].TypeVal)); ;} break; case 142: -#line 1894 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1890 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { PATypeInfo VoidTI; VoidTI.T = new PATypeHolder(Type::VoidTy); @@ -4176,7 +4172,7 @@ yyreduce: break; case 143: -#line 1900 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1896 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.TypeList) = new std::list<PATypeInfo>(); PATypeInfo VoidTI; @@ -4187,14 +4183,14 @@ yyreduce: break; case 144: -#line 1907 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1903 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.TypeList) = new std::list<PATypeInfo>(); ;} break; case 145: -#line 1919 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1915 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { // Nonempty unsized arr const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[-3].TypeVal).T->get()); if (ATy == 0) @@ -4228,7 +4224,7 @@ yyreduce: break; case 146: -#line 1949 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1945 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[-2].TypeVal).T->get()); if (ATy == 0) @@ -4245,7 +4241,7 @@ yyreduce: break; case 147: -#line 1962 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1958 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[-2].TypeVal).T->get()); if (ATy == 0) @@ -4272,7 +4268,7 @@ yyreduce: break; case 148: -#line 1985 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1981 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { // Nonempty unsized arr const PackedType *PTy = dyn_cast<PackedType>((yyvsp[-3].TypeVal).T->get()); if (PTy == 0) @@ -4304,7 +4300,7 @@ yyreduce: break; case 149: -#line 2013 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2009 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { const StructType *STy = dyn_cast<StructType>((yyvsp[-3].TypeVal).T->get()); if (STy == 0) @@ -4330,7 +4326,7 @@ yyreduce: break; case 150: -#line 2035 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2031 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { const StructType *STy = dyn_cast<StructType>((yyvsp[-2].TypeVal).T->get()); if (STy == 0) @@ -4345,7 +4341,7 @@ yyreduce: break; case 151: -#line 2046 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2042 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { const StructType *STy = dyn_cast<StructType>((yyvsp[-5].TypeVal).T->get()); if (STy == 0) @@ -4371,7 +4367,7 @@ yyreduce: break; case 152: -#line 2068 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2064 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { const StructType *STy = dyn_cast<StructType>((yyvsp[-4].TypeVal).T->get()); if (STy == 0) @@ -4386,7 +4382,7 @@ yyreduce: break; case 153: -#line 2079 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2075 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { const PointerType *PTy = dyn_cast<PointerType>((yyvsp[-1].TypeVal).T->get()); if (PTy == 0) @@ -4399,7 +4395,7 @@ yyreduce: break; case 154: -#line 2088 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2084 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ConstVal).C = UndefValue::get((yyvsp[-1].TypeVal).T->get()); (yyval.ConstVal).S = (yyvsp[-1].TypeVal).S; @@ -4408,7 +4404,7 @@ yyreduce: break; case 155: -#line 2093 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2089 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { const PointerType *Ty = dyn_cast<PointerType>((yyvsp[-1].TypeVal).T->get()); if (Ty == 0) @@ -4470,7 +4466,7 @@ yyreduce: break; case 156: -#line 2151 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2147 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { if ((yyvsp[-1].TypeVal).T->get() != (yyvsp[0].ConstVal).C->getType()) error("Mismatched types for constant expression"); @@ -4481,7 +4477,7 @@ yyreduce: break; case 157: -#line 2158 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2154 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { const Type *Ty = (yyvsp[-1].TypeVal).T->get(); if (isa<FunctionType>(Ty) || Ty == Type::LabelTy || isa<OpaqueType>(Ty)) @@ -4493,7 +4489,7 @@ yyreduce: break; case 158: -#line 2166 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2162 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { // integral constants const Type *Ty = (yyvsp[-1].PrimType).T; if (!ConstantInt::isValueValidForType(Ty, (yyvsp[0].SInt64Val))) @@ -4504,7 +4500,7 @@ yyreduce: break; case 159: -#line 2173 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2169 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { // integral constants const Type *Ty = (yyvsp[-1].PrimType).T; if (!ConstantInt::isValueValidForType(Ty, (yyvsp[0].UInt64Val))) @@ -4515,7 +4511,7 @@ yyreduce: break; case 160: -#line 2180 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2176 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { // Boolean constants (yyval.ConstVal).C = ConstantInt::get(Type::Int1Ty, true); (yyval.ConstVal).S = Unsigned; @@ -4523,7 +4519,7 @@ yyreduce: break; case 161: -#line 2184 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2180 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { // Boolean constants (yyval.ConstVal).C = ConstantInt::get(Type::Int1Ty, false); (yyval.ConstVal).S = Unsigned; @@ -4531,7 +4527,7 @@ yyreduce: break; case 162: -#line 2188 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2184 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { // Float & Double constants if (!ConstantFP::isValueValidForType((yyvsp[-1].PrimType).T, (yyvsp[0].FPVal))) error("Floating point constant invalid for type"); @@ -4541,7 +4537,7 @@ yyreduce: break; case 163: -#line 2197 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2193 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { const Type* SrcTy = (yyvsp[-3].ConstVal).C->getType(); const Type* DstTy = (yyvsp[-1].TypeVal).T->get(); @@ -4560,7 +4556,7 @@ yyreduce: break; case 164: -#line 2212 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2208 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { const Type *Ty = (yyvsp[-2].ConstVal).C->getType(); if (!isa<PointerType>(Ty)) @@ -4577,7 +4573,7 @@ yyreduce: break; case 165: -#line 2225 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2221 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { if (!(yyvsp[-5].ConstVal).C->getType()->isInteger() || cast<IntegerType>((yyvsp[-5].ConstVal).C->getType())->getBitWidth() != 1) @@ -4590,7 +4586,7 @@ yyreduce: break; case 166: -#line 2234 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2230 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { const Type *Ty = (yyvsp[-3].ConstVal).C->getType(); if (Ty != (yyvsp[-1].ConstVal).C->getType()) @@ -4622,7 +4618,7 @@ yyreduce: break; case 167: -#line 2262 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2258 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { const Type* Ty = (yyvsp[-3].ConstVal).C->getType(); if (Ty != (yyvsp[-1].ConstVal).C->getType()) @@ -4639,7 +4635,7 @@ yyreduce: break; case 168: -#line 2275 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2271 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { const Type* Ty = (yyvsp[-3].ConstVal).C->getType(); if (Ty != (yyvsp[-1].ConstVal).C->getType()) @@ -4652,7 +4648,7 @@ yyreduce: break; case 169: -#line 2284 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2280 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { if ((yyvsp[-3].ConstVal).C->getType() != (yyvsp[-1].ConstVal).C->getType()) error("icmp operand types must match"); @@ -4662,7 +4658,7 @@ yyreduce: break; case 170: -#line 2290 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2286 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { if ((yyvsp[-3].ConstVal).C->getType() != (yyvsp[-1].ConstVal).C->getType()) error("fcmp operand types must match"); @@ -4672,7 +4668,7 @@ yyreduce: break; case 171: -#line 2296 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2292 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { if (!(yyvsp[-1].ConstVal).C->getType()->isInteger() || cast<IntegerType>((yyvsp[-1].ConstVal).C->getType())->getBitWidth() != 8) @@ -4687,7 +4683,7 @@ yyreduce: break; case 172: -#line 2307 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2303 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { if (!ExtractElementInst::isValidOperands((yyvsp[-3].ConstVal).C, (yyvsp[-1].ConstVal).C)) error("Invalid extractelement operands"); @@ -4697,7 +4693,7 @@ yyreduce: break; case 173: -#line 2313 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2309 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { if (!InsertElementInst::isValidOperands((yyvsp[-5].ConstVal).C, (yyvsp[-3].ConstVal).C, (yyvsp[-1].ConstVal).C)) error("Invalid insertelement operands"); @@ -4707,7 +4703,7 @@ yyreduce: break; case 174: -#line 2319 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2315 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { if (!ShuffleVectorInst::isValidOperands((yyvsp[-5].ConstVal).C, (yyvsp[-3].ConstVal).C, (yyvsp[-1].ConstVal).C)) error("Invalid shufflevector operands"); @@ -4717,12 +4713,12 @@ yyreduce: break; case 175: -#line 2330 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2326 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { ((yyval.ConstVector) = (yyvsp[-2].ConstVector))->push_back((yyvsp[0].ConstVal)); ;} break; case 176: -#line 2331 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2327 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ConstVector) = new std::vector<ConstInfo>(); (yyval.ConstVector)->push_back((yyvsp[0].ConstVal)); @@ -4730,17 +4726,17 @@ yyreduce: break; case 177: -#line 2340 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2336 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.BoolVal) = false; ;} break; case 178: -#line 2341 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2337 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.BoolVal) = true; ;} break; case 179: -#line 2353 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2349 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ModuleVal) = ParserResult = (yyvsp[0].ModuleVal); CurModule.ModuleDone(); @@ -4748,27 +4744,27 @@ yyreduce: break; case 180: -#line 2362 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2358 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ModuleVal) = (yyvsp[-1].ModuleVal); CurFun.FunctionDone(); ;} break; case 181: -#line 2363 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2359 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ModuleVal) = (yyvsp[-1].ModuleVal); ;} break; case 182: -#line 2364 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2360 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ModuleVal) = (yyvsp[-3].ModuleVal); ;} break; case 183: -#line 2365 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2361 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ModuleVal) = (yyvsp[-1].ModuleVal); ;} break; case 184: -#line 2366 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2362 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ModuleVal) = CurModule.CurrentModule; // Emit an error if there are any unresolved types left. @@ -4784,7 +4780,7 @@ yyreduce: break; case 185: -#line 2382 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2378 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { // Eagerly resolve types. This is not an optimization, this is a // requirement that is due to the fact that we could have this: @@ -4808,19 +4804,19 @@ yyreduce: break; case 186: -#line 2402 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2398 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { // Function prototypes can be in const pool ;} break; case 187: -#line 2404 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2400 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { // Asm blocks can be in the const pool ;} break; case 188: -#line 2406 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2402 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { if ((yyvsp[0].ConstVal).C == 0) error("Global value initializer is not a constant"); @@ -4829,14 +4825,14 @@ yyreduce: break; case 189: -#line 2410 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2406 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { CurGV = 0; ;} break; case 190: -#line 2413 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2409 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { const Type *Ty = (yyvsp[0].TypeVal).T->get(); CurGV = ParseGlobalVariable((yyvsp[-3].StrVal), GlobalValue::ExternalLinkage, (yyvsp[-1].BoolVal), Ty, 0); @@ -4845,14 +4841,14 @@ yyreduce: break; case 191: -#line 2417 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2413 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { CurGV = 0; ;} break; case 192: -#line 2420 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2416 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { const Type *Ty = (yyvsp[0].TypeVal).T->get(); CurGV = ParseGlobalVariable((yyvsp[-3].StrVal), GlobalValue::DLLImportLinkage, (yyvsp[-1].BoolVal), Ty, 0); @@ -4861,14 +4857,14 @@ yyreduce: break; case 193: -#line 2424 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2420 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { CurGV = 0; ;} break; case 194: -#line 2427 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2423 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { const Type *Ty = (yyvsp[0].TypeVal).T->get(); CurGV = @@ -4878,32 +4874,32 @@ yyreduce: break; case 195: -#line 2432 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2428 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { CurGV = 0; ;} break; case 196: -#line 2435 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2431 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { ;} break; case 197: -#line 2437 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2433 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { ;} break; case 198: -#line 2439 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2435 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { ;} break; case 199: -#line 2444 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2440 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { const std::string &AsmSoFar = CurModule.CurrentModule->getModuleInlineAsm(); char *EndStr = UnEscapeLexed((yyvsp[0].StrVal), true); @@ -4918,24 +4914,24 @@ yyreduce: break; case 200: -#line 2458 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2454 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.Endianness) = Module::BigEndian; ;} break; case 201: -#line 2459 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2455 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.Endianness) = Module::LittleEndian; ;} break; case 202: -#line 2463 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2459 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { CurModule.setEndianness((yyvsp[0].Endianness)); ;} break; case 203: -#line 2466 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2462 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { if ((yyvsp[0].UInt64Val) == 32) CurModule.setPointerSize(Module::Pointer32); @@ -4947,7 +4943,7 @@ yyreduce: break; case 204: -#line 2474 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2470 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { CurModule.CurrentModule->setTargetTriple((yyvsp[0].StrVal)); free((yyvsp[0].StrVal)); @@ -4955,7 +4951,7 @@ yyreduce: break; case 205: -#line 2478 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2474 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { CurModule.CurrentModule->setDataLayout((yyvsp[0].StrVal)); free((yyvsp[0].StrVal)); @@ -4963,7 +4959,7 @@ yyreduce: break; case 207: -#line 2489 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2485 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { CurModule.CurrentModule->addLibrary((yyvsp[0].StrVal)); free((yyvsp[0].StrVal)); @@ -4971,7 +4967,7 @@ yyreduce: break; case 208: -#line 2493 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2489 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { CurModule.CurrentModule->addLibrary((yyvsp[0].StrVal)); free((yyvsp[0].StrVal)); @@ -4979,17 +4975,17 @@ yyreduce: break; case 209: -#line 2497 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2493 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { ;} break; case 213: -#line 2510 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2506 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.StrVal) = 0; ;} break; case 214: -#line 2514 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2510 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { if ((yyvsp[-1].TypeVal).T->get() == Type::VoidTy) error("void typed arguments are invalid"); @@ -4998,7 +4994,7 @@ yyreduce: break; case 215: -#line 2522 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2518 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ArgList) = (yyvsp[-2].ArgList); (yyval.ArgList)->push_back(*(yyvsp[0].ArgVal)); @@ -5007,7 +5003,7 @@ yyreduce: break; case 216: -#line 2527 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2523 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ArgList) = new std::vector<std::pair<PATypeInfo,char*> >(); (yyval.ArgList)->push_back(*(yyvsp[0].ArgVal)); @@ -5016,12 +5012,12 @@ yyreduce: break; case 217: -#line 2535 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2531 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ArgList) = (yyvsp[0].ArgList); ;} break; case 218: -#line 2536 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2532 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ArgList) = (yyvsp[-2].ArgList); PATypeInfo VoidTI; @@ -5032,7 +5028,7 @@ yyreduce: break; case 219: -#line 2543 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2539 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ArgList) = new std::vector<std::pair<PATypeInfo,char*> >(); PATypeInfo VoidTI; @@ -5043,12 +5039,12 @@ yyreduce: break; case 220: -#line 2550 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2546 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ArgList) = 0; ;} break; case 221: -#line 2554 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2550 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { UnEscapeLexed((yyvsp[-5].StrVal)); std::string FunctionName((yyvsp[-5].StrVal)); @@ -5059,27 +5055,27 @@ yyreduce: if (!RetTy->isFirstClassType() && RetTy != Type::VoidTy) error("LLVM functions cannot return aggregate types"); - std::vector<const Type*> ParamTypeList; + std::vector<const Type*> ParamTyList; // In LLVM 2.0 the signatures of three varargs intrinsics changed to take // i8*. We check here for those names and override the parameter list // types to ensure the prototype is correct. if (FunctionName == "llvm.va_start" || FunctionName == "llvm.va_end") { - ParamTypeList.push_back(PointerType::get(Type::Int8Ty)); + ParamTyList.push_back(PointerType::get(Type::Int8Ty)); } else if (FunctionName == "llvm.va_copy") { - ParamTypeList.push_back(PointerType::get(Type::Int8Ty)); - ParamTypeList.push_back(PointerType::get(Type::Int8Ty)); + ParamTyList.push_back(PointerType::get(Type::Int8Ty)); + ParamTyList.push_back(PointerType::get(Type::Int8Ty)); } else if ((yyvsp[-3].ArgList)) { // If there are arguments... for (std::vector<std::pair<PATypeInfo,char*> >::iterator I = (yyvsp[-3].ArgList)->begin(), E = (yyvsp[-3].ArgList)->end(); I != E; ++I) { const Type *Ty = I->first.T->get(); - ParamTypeList.push_back(Ty); + ParamTyList.push_back(Ty); } } - bool isVarArg = - ParamTypeList.size() && ParamTypeList.back() == Type::VoidTy; - if (isVarArg) ParamTypeList.pop_back(); + bool isVarArg = ParamTyList.size() && ParamTyList.back() == Type::VoidTy; + if (isVarArg) + ParamTyList.pop_back(); // Convert the CSRet calling convention into the corresponding parameter // attribute. @@ -5089,7 +5085,7 @@ yyreduce: ParamAttrs.push_back(FunctionType::StructRetAttribute); // first arg } - const FunctionType *FT = FunctionType::get(RetTy, ParamTypeList, isVarArg, + const FunctionType *FT = FunctionType::get(RetTy, ParamTyList, isVarArg, ParamAttrs); const PointerType *PFT = PointerType::get(FT); delete (yyvsp[-6].TypeVal).T; @@ -5110,18 +5106,37 @@ yyreduce: CurModule.CurrentModule->getFunctionList().remove(Fn); CurModule.CurrentModule->getFunctionList().push_back(Fn); } else if (!FunctionName.empty() && // Merge with an earlier prototype? - (Fn = CurModule.CurrentModule->getFunction(FunctionName, FT))) { - // If this is the case, either we need to be a forward decl, or it needs - // to be. - if (!CurFun.isDeclare && !Fn->isDeclaration()) - error("Redefinition of function '" + FunctionName + "'"); + (Fn = CurModule.CurrentModule->getFunction(FunctionName))) { + if (Fn->getFunctionType() != FT ) { + // The existing function doesn't have the same type. Previously this was + // permitted because the symbol tables had "type planes" and names were + // distinct within a type plane. After PR411 was fixed, this is no + // longer the case. To resolve this we must rename this function. + // However, renaming it can cause problems if its linkage is external + // because it could cause a link failure. We warn about this. + std::string NewName = makeNameUnique(FunctionName); + warning("Renaming function '" + FunctionName + "' as '" + NewName + + "' may cause linkage errors"); + + Fn = new Function(FT, GlobalValue::ExternalLinkage, NewName, + CurModule.CurrentModule); + InsertValue(Fn, CurModule.Values); + RenameMapKey Key = std::make_pair(FunctionName,PFT); + CurModule.RenameMap[Key] = NewName; + } else { + // The types are the same. Either the existing or the current function + // needs to be a forward declaration. If not, they're attempting to + // redefine a function. + if (!CurFun.isDeclare && !Fn->isDeclaration()) + error("Redefinition of function '" + FunctionName + "'"); - // Make sure to strip off any argument names so we can't get conflicts. - if (Fn->isDeclaration()) - for (Function::arg_iterator AI = Fn->arg_begin(), AE = Fn->arg_end(); - AI != AE; ++AI) - AI->setName(""); - } else { // Not already defined? + // Make sure to strip off any argument names so we can't get conflicts. + if (Fn->isDeclaration()) + for (Function::arg_iterator AI = Fn->arg_begin(), AE = Fn->arg_end(); + AI != AE; ++AI) + AI->setName(""); + } + } else { // Not already defined? Fn = new Function(FT, GlobalValue::ExternalLinkage, FunctionName, CurModule.CurrentModule); @@ -5152,8 +5167,10 @@ yyreduce: (yyvsp[-3].ArgList)->pop_back(); // Delete the last entry } Function::arg_iterator ArgIt = Fn->arg_begin(); - for (std::vector<std::pair<PATypeInfo,char*> >::iterator - I = (yyvsp[-3].ArgList)->begin(), E = (yyvsp[-3].ArgList)->end(); I != E; ++I, ++ArgIt) { + Function::arg_iterator ArgEnd = Fn->arg_end(); + std::vector<std::pair<PATypeInfo,char*> >::iterator I = (yyvsp[-3].ArgList)->begin(); + std::vector<std::pair<PATypeInfo,char*> >::iterator E = (yyvsp[-3].ArgList)->end(); + for ( ; I != E && ArgIt != ArgEnd; ++I, ++ArgIt) { delete I->first.T; // Delete the typeholder... setValueName(ArgIt, I->second); // Insert arg into symtab... InsertValue(ArgIt); @@ -5164,7 +5181,7 @@ yyreduce: break; case 224: -#line 2673 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2690 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.FunctionVal) = CurFun.CurrentFunction; @@ -5175,29 +5192,29 @@ yyreduce: break; case 227: -#line 2687 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2704 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.FunctionVal) = (yyvsp[-1].FunctionVal); ;} break; case 229: -#line 2693 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2710 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { CurFun.Linkage = GlobalValue::DLLImportLinkage; ;} break; case 230: -#line 2694 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2711 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { CurFun.Linkage = GlobalValue::ExternalWeakLinkage; ;} break; case 231: -#line 2698 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2715 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { CurFun.isDeclare = true; ;} break; case 232: -#line 2698 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2715 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.FunctionVal) = CurFun.CurrentFunction; CurFun.FunctionDone(); @@ -5206,57 +5223,57 @@ yyreduce: break; case 233: -#line 2710 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2727 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.BoolVal) = false; ;} break; case 234: -#line 2711 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2728 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.BoolVal) = true; ;} break; case 235: -#line 2716 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2733 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ValIDVal) = ValID::create((yyvsp[0].SInt64Val)); ;} break; case 236: -#line 2717 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2734 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ValIDVal) = ValID::create((yyvsp[0].UInt64Val)); ;} break; case 237: -#line 2718 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2735 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ValIDVal) = ValID::create((yyvsp[0].FPVal)); ;} break; case 238: -#line 2719 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2736 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ValIDVal) = ValID::create(ConstantInt::get(Type::Int1Ty, true)); ;} break; case 239: -#line 2720 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2737 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ValIDVal) = ValID::create(ConstantInt::get(Type::Int1Ty, false)); ;} break; case 240: -#line 2721 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2738 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ValIDVal) = ValID::createNull(); ;} break; case 241: -#line 2722 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2739 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ValIDVal) = ValID::createUndef(); ;} break; case 242: -#line 2723 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2740 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ValIDVal) = ValID::createZeroInit(); ;} break; case 243: -#line 2724 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2741 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { // Nonempty unsized packed vector const Type *ETy = (*(yyvsp[-1].ConstVector))[0].C->getType(); int NumElements = (yyvsp[-1].ConstVector)->size(); @@ -5281,14 +5298,14 @@ yyreduce: break; case 244: -#line 2745 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2762 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ValIDVal) = ValID::create((yyvsp[0].ConstVal).C); ;} break; case 245: -#line 2748 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2765 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { char *End = UnEscapeLexed((yyvsp[-2].StrVal), true); std::string AsmStr = std::string((yyvsp[-2].StrVal), End); @@ -5301,17 +5318,17 @@ yyreduce: break; case 246: -#line 2763 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2780 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ValIDVal) = ValID::create((yyvsp[0].SIntVal)); ;} break; case 247: -#line 2764 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2781 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ValIDVal) = ValID::create((yyvsp[0].StrVal)); ;} break; case 250: -#line 2777 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2794 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { const Type *Ty = (yyvsp[-1].TypeVal).T->get(); (yyval.ValueVal).S = (yyvsp[-1].TypeVal).S; @@ -5321,21 +5338,21 @@ yyreduce: break; case 251: -#line 2786 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2803 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.FunctionVal) = (yyvsp[-1].FunctionVal); ;} break; case 252: -#line 2789 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2806 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { // Do not allow functions with 0 basic blocks (yyval.FunctionVal) = (yyvsp[-1].FunctionVal); ;} break; case 253: -#line 2798 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2815 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { setValueName((yyvsp[0].TermInstVal), (yyvsp[-1].StrVal)); InsertValue((yyvsp[0].TermInstVal)); @@ -5346,7 +5363,7 @@ yyreduce: break; case 254: -#line 2808 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2825 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { if ((yyvsp[0].InstVal).I) (yyvsp[-1].BasicBlockVal)->getInstList().push_back((yyvsp[0].InstVal).I); @@ -5355,7 +5372,7 @@ yyreduce: break; case 255: -#line 2813 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2830 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.BasicBlockVal) = CurBB = getBBVal(ValID::create((int)CurFun.NextBBNum++), true); // Make sure to move the basic block to the correct location in the @@ -5368,7 +5385,7 @@ yyreduce: break; case 256: -#line 2822 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2839 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.BasicBlockVal) = CurBB = getBBVal(ValID::create((yyvsp[0].StrVal)), true); // Make sure to move the basic block to the correct location in the @@ -5381,21 +5398,21 @@ yyreduce: break; case 259: -#line 2836 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2853 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { // Return with a result... (yyval.TermInstVal) = new ReturnInst((yyvsp[0].ValueVal).V); ;} break; case 260: -#line 2839 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2856 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { // Return with no result... (yyval.TermInstVal) = new ReturnInst(); ;} break; case 261: -#line 2842 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2859 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { // Unconditional Branch... BasicBlock* tmpBB = getBBVal((yyvsp[0].ValIDVal)); (yyval.TermInstVal) = new BranchInst(tmpBB); @@ -5403,7 +5420,7 @@ yyreduce: break; case 262: -#line 2846 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2863 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { BasicBlock* tmpBBA = getBBVal((yyvsp[-3].ValIDVal)); BasicBlock* tmpBBB = getBBVal((yyvsp[0].ValIDVal)); @@ -5413,7 +5430,7 @@ yyreduce: break; case 263: -#line 2852 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2869 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { Value* tmpVal = getVal((yyvsp[-7].PrimType).T, (yyvsp[-6].ValIDVal)); BasicBlock* tmpBB = getBBVal((yyvsp[-3].ValIDVal)); @@ -5432,7 +5449,7 @@ yyreduce: break; case 264: -#line 2867 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2884 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { Value* tmpVal = getVal((yyvsp[-6].PrimType).T, (yyvsp[-5].ValIDVal)); BasicBlock* tmpBB = getBBVal((yyvsp[-2].ValIDVal)); @@ -5442,7 +5459,7 @@ yyreduce: break; case 265: -#line 2874 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2891 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { const PointerType *PFTy; const FunctionType *Ty; @@ -5501,21 +5518,21 @@ yyreduce: break; case 266: -#line 2929 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2946 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.TermInstVal) = new UnwindInst(); ;} break; case 267: -#line 2932 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2949 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.TermInstVal) = new UnreachableInst(); ;} break; case 268: -#line 2938 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2955 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.JumpTable) = (yyvsp[-5].JumpTable); Constant *V = cast<Constant>(getExistingValue((yyvsp[-4].PrimType).T, (yyvsp[-3].ValIDVal))); @@ -5529,7 +5546,7 @@ yyreduce: break; case 269: -#line 2948 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2965 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.JumpTable) = new std::vector<std::pair<Constant*, BasicBlock*> >(); Constant *V = cast<Constant>(getExistingValue((yyvsp[-4].PrimType).T, (yyvsp[-3].ValIDVal))); @@ -5543,7 +5560,7 @@ yyreduce: break; case 270: -#line 2961 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2978 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { bool omit = false; if ((yyvsp[-1].StrVal)) @@ -5575,7 +5592,7 @@ yyreduce: break; case 271: -#line 2990 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3007 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { // Used for PHI nodes (yyval.PHIList).P = new std::list<std::pair<Value*, BasicBlock*> >(); (yyval.PHIList).S = (yyvsp[-5].TypeVal).S; @@ -5587,7 +5604,7 @@ yyreduce: break; case 272: -#line 2998 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3015 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.PHIList) = (yyvsp[-6].PHIList); Value* tmpVal = getVal((yyvsp[-6].PHIList).P->front().first->getType(), (yyvsp[-3].ValIDVal)); @@ -5597,7 +5614,7 @@ yyreduce: break; case 273: -#line 3006 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3023 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { // Used for call statements, and memory insts... (yyval.ValueList) = new std::vector<ValueInfo>(); (yyval.ValueList)->push_back((yyvsp[0].ValueVal)); @@ -5605,7 +5622,7 @@ yyreduce: break; case 274: -#line 3010 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3027 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ValueList) = (yyvsp[-2].ValueList); (yyvsp[-2].ValueList)->push_back((yyvsp[0].ValueVal)); @@ -5613,26 +5630,26 @@ yyreduce: break; case 276: -#line 3018 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3035 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ValueList) = 0; ;} break; case 277: -#line 3022 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3039 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.BoolVal) = true; ;} break; case 278: -#line 3025 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3042 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.BoolVal) = false; ;} break; case 279: -#line 3031 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3048 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { const Type* Ty = (yyvsp[-3].TypeVal).T->get(); if (!Ty->isInteger() && !Ty->isFloatingPoint() && !isa<PackedType>(Ty)) @@ -5653,7 +5670,7 @@ yyreduce: break; case 280: -#line 3048 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3065 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { const Type *Ty = (yyvsp[-3].TypeVal).T->get(); if (!Ty->isInteger()) { @@ -5673,7 +5690,7 @@ yyreduce: break; case 281: -#line 3064 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3081 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { const Type* Ty = (yyvsp[-3].TypeVal).T->get(); if(isa<PackedType>(Ty)) @@ -5691,7 +5708,7 @@ yyreduce: break; case 282: -#line 3078 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3095 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { const Type *Ty = (yyvsp[-3].TypeVal).T->get(); if (isa<PackedType>(Ty)) @@ -5707,7 +5724,7 @@ yyreduce: break; case 283: -#line 3090 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3107 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { const Type *Ty = (yyvsp[-3].TypeVal).T->get(); if (isa<PackedType>(Ty)) @@ -5723,7 +5740,7 @@ yyreduce: break; case 284: -#line 3102 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3119 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { warning("Use of obsolete 'not' instruction: Replacing with 'xor"); const Type *Ty = (yyvsp[0].ValueVal).V->getType(); @@ -5738,7 +5755,7 @@ yyreduce: break; case 285: -#line 3113 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3130 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { if (!(yyvsp[0].ValueVal).V->getType()->isInteger() || cast<IntegerType>((yyvsp[0].ValueVal).V->getType())->getBitWidth() != 8) @@ -5760,7 +5777,7 @@ yyreduce: break; case 286: -#line 3131 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3148 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { const Type *DstTy = (yyvsp[0].TypeVal).T->get(); if (!DstTy->isFirstClassType()) @@ -5773,7 +5790,7 @@ yyreduce: break; case 287: -#line 3140 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3157 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { if (!(yyvsp[-4].ValueVal).V->getType()->isInteger() || cast<IntegerType>((yyvsp[-4].ValueVal).V->getType())->getBitWidth() != 1) @@ -5786,7 +5803,7 @@ yyreduce: break; case 288: -#line 3149 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3166 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { const Type *Ty = (yyvsp[0].TypeVal).T->get(); NewVarArgs = true; @@ -5797,7 +5814,7 @@ yyreduce: break; case 289: -#line 3156 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3173 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { const Type* ArgTy = (yyvsp[-2].ValueVal).V->getType(); const Type* DstTy = (yyvsp[0].TypeVal).T->get(); @@ -5822,7 +5839,7 @@ yyreduce: break; case 290: -#line 3177 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3194 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { const Type* ArgTy = (yyvsp[-2].ValueVal).V->getType(); const Type* DstTy = (yyvsp[0].TypeVal).T->get(); @@ -5850,7 +5867,7 @@ yyreduce: break; case 291: -#line 3201 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3218 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { if (!ExtractElementInst::isValidOperands((yyvsp[-2].ValueVal).V, (yyvsp[0].ValueVal).V)) error("Invalid extractelement operands"); @@ -5860,7 +5877,7 @@ yyreduce: break; case 292: -#line 3207 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3224 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { if (!InsertElementInst::isValidOperands((yyvsp[-4].ValueVal).V, (yyvsp[-2].ValueVal).V, (yyvsp[0].ValueVal).V)) error("Invalid insertelement operands"); @@ -5870,7 +5887,7 @@ yyreduce: break; case 293: -#line 3213 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3230 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { if (!ShuffleVectorInst::isValidOperands((yyvsp[-4].ValueVal).V, (yyvsp[-2].ValueVal).V, (yyvsp[0].ValueVal).V)) error("Invalid shufflevector operands"); @@ -5880,7 +5897,7 @@ yyreduce: break; case 294: -#line 3219 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3236 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { const Type *Ty = (yyvsp[0].PHIList).P->front().first->getType(); if (!Ty->isFirstClassType()) @@ -5900,7 +5917,7 @@ yyreduce: break; case 295: -#line 3235 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3252 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { // Handle the short call syntax @@ -5982,34 +5999,34 @@ yyreduce: break; case 296: -#line 3313 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3330 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.InstVal) = (yyvsp[0].InstVal); ;} break; case 297: -#line 3321 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3338 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ValueList) = (yyvsp[0].ValueList); ;} break; case 298: -#line 3322 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3339 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ValueList) = new std::vector<ValueInfo>(); ;} break; case 299: -#line 3326 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3343 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.BoolVal) = true; ;} break; case 300: -#line 3327 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3344 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.BoolVal) = false; ;} break; case 301: -#line 3331 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3348 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { const Type *Ty = (yyvsp[-1].TypeVal).T->get(); (yyval.InstVal).S = (yyvsp[-1].TypeVal).S; @@ -6019,7 +6036,7 @@ yyreduce: break; case 302: -#line 3337 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3354 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { const Type *Ty = (yyvsp[-4].TypeVal).T->get(); (yyval.InstVal).S = (yyvsp[-4].TypeVal).S; @@ -6029,7 +6046,7 @@ yyreduce: break; case 303: -#line 3343 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3360 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { const Type *Ty = (yyvsp[-1].TypeVal).T->get(); (yyval.InstVal).S = (yyvsp[-1].TypeVal).S; @@ -6039,7 +6056,7 @@ yyreduce: break; case 304: -#line 3349 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3366 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { const Type *Ty = (yyvsp[-4].TypeVal).T->get(); (yyval.InstVal).S = (yyvsp[-4].TypeVal).S; @@ -6049,7 +6066,7 @@ yyreduce: break; case 305: -#line 3355 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3372 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { const Type *PTy = (yyvsp[0].ValueVal).V->getType(); if (!isa<PointerType>(PTy)) @@ -6060,7 +6077,7 @@ yyreduce: break; case 306: -#line 3362 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3379 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { const Type* Ty = (yyvsp[-1].TypeVal).T->get(); (yyval.InstVal).S = (yyvsp[-1].TypeVal).S; @@ -6076,7 +6093,7 @@ yyreduce: break; case 307: -#line 3374 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3391 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { const PointerType *PTy = dyn_cast<PointerType>((yyvsp[-1].TypeVal).T->get()); if (!PTy) @@ -6094,7 +6111,7 @@ yyreduce: break; case 308: -#line 3388 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3405 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { const Type* Ty = (yyvsp[-2].TypeVal).T->get(); if (!isa<PointerType>(Ty)) @@ -6116,7 +6133,7 @@ yyreduce: } /* Line 1126 of yacc.c. */ -#line 6120 "UpgradeParser.tab.c" +#line 6137 "UpgradeParser.tab.c" yyvsp -= yylen; yyssp -= yylen; @@ -6384,7 +6401,7 @@ yyreturn: } -#line 3404 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3421 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" int yyerror(const char *ErrorMsg) { diff --git a/tools/llvm-upgrade/UpgradeParser.h.cvs b/tools/llvm-upgrade/UpgradeParser.h.cvs index 3603225..cf708c6 100644 --- a/tools/llvm-upgrade/UpgradeParser.h.cvs +++ b/tools/llvm-upgrade/UpgradeParser.h.cvs @@ -335,7 +335,7 @@ #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED) -#line 1435 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1431 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" typedef union YYSTYPE { llvm::Module *ModuleVal; llvm::Function *FunctionVal; diff --git a/tools/llvm-upgrade/UpgradeParser.y b/tools/llvm-upgrade/UpgradeParser.y index 34ebd62..0f47b38 100644 --- a/tools/llvm-upgrade/UpgradeParser.y +++ b/tools/llvm-upgrade/UpgradeParser.y @@ -17,7 +17,7 @@ #include "llvm/InlineAsm.h" #include "llvm/Instructions.h" #include "llvm/Module.h" -#include "llvm/SymbolTable.h" +#include "llvm/ValueSymbolTable.h" #include "llvm/Support/GetElementPtrTypeIterator.h" #include "llvm/ADT/STLExtras.h" #include "llvm/Support/MathExtras.h" @@ -312,8 +312,10 @@ static Value *getExistingValue(const Type *Ty, const ValID &D) { LookupName = I->second; else LookupName = Name; - SymbolTable &SymTab = CurFun.CurrentFunction->getValueSymbolTable(); - V = SymTab.lookup(Ty, LookupName); + ValueSymbolTable &SymTab = CurFun.CurrentFunction->getValueSymbolTable(); + V = SymTab.lookup(LookupName); + if (V && V->getType() != Ty) + V = 0; } if (!V) { RenameMapType::const_iterator I = CurModule.RenameMap.find(Key); @@ -322,9 +324,11 @@ static Value *getExistingValue(const Type *Ty, const ValID &D) { LookupName = I->second; else LookupName = Name; - V = CurModule.CurrentModule->getValueSymbolTable().lookup(Ty, LookupName); + V = CurModule.CurrentModule->getValueSymbolTable().lookup(LookupName); + if (V && V->getType() != Ty) + V = 0; } - if (V == 0) + if (!V) return 0; D.destroy(); // Free old strdup'd memory... @@ -416,7 +420,7 @@ static Value *getVal(const Type *Ty, const ValID &ID) { // Remember where this forward reference came from. FIXME, shouldn't we try // to recycle these things?? CurModule.PlaceHolderInfo.insert( - std::make_pair(V, std::make_pair(ID, Upgradelineno-1))); + std::make_pair(V, std::make_pair(ID, Upgradelineno))); if (inFunctionScope()) InsertValue(V, CurFun.LateResolveValues); @@ -448,7 +452,7 @@ static BasicBlock *getBBVal(const ValID &ID, bool isDefinition = false) { case ValID::NameVal: // Is it a named definition? Name = ID.Name; if (Value *N = CurFun.CurrentFunction-> - getValueSymbolTable().lookup(Type::LabelTy, Name)) { + getValueSymbolTable().lookup(Name)) { if (N->getType() != Type::LabelTy) error("Name '" + Name + "' does not refer to a BasicBlock"); BB = cast<BasicBlock>(N); @@ -682,16 +686,8 @@ static void setValueName(Value *V, char *NameStr) { assert(inFunctionScope() && "Must be in function scope"); // Search the function's symbol table for an existing value of this name - Value* Existing = 0; - SymbolTable &ST = CurFun.CurrentFunction->getValueSymbolTable(); - SymbolTable::plane_const_iterator PI = ST.plane_begin(), PE =ST.plane_end(); - for ( ; PI != PE; ++PI) { - SymbolTable::value_const_iterator VI = PI->second.find(Name); - if (VI != PI->second.end()) { - Existing = VI->second; - break; - } - } + ValueSymbolTable &ST = CurFun.CurrentFunction->getValueSymbolTable(); + Value* Existing = ST.lookup(Name); if (Existing) { // An existing value of the same name was found. This might have happened // because of the integer type planes collapsing in LLVM 2.0. @@ -2561,27 +2557,27 @@ FunctionHeaderH if (!RetTy->isFirstClassType() && RetTy != Type::VoidTy) error("LLVM functions cannot return aggregate types"); - std::vector<const Type*> ParamTypeList; + std::vector<const Type*> ParamTyList; // In LLVM 2.0 the signatures of three varargs intrinsics changed to take // i8*. We check here for those names and override the parameter list // types to ensure the prototype is correct. if (FunctionName == "llvm.va_start" || FunctionName == "llvm.va_end") { - ParamTypeList.push_back(PointerType::get(Type::Int8Ty)); + ParamTyList.push_back(PointerType::get(Type::Int8Ty)); } else if (FunctionName == "llvm.va_copy") { - ParamTypeList.push_back(PointerType::get(Type::Int8Ty)); - ParamTypeList.push_back(PointerType::get(Type::Int8Ty)); + ParamTyList.push_back(PointerType::get(Type::Int8Ty)); + ParamTyList.push_back(PointerType::get(Type::Int8Ty)); } else if ($5) { // If there are arguments... for (std::vector<std::pair<PATypeInfo,char*> >::iterator I = $5->begin(), E = $5->end(); I != E; ++I) { const Type *Ty = I->first.T->get(); - ParamTypeList.push_back(Ty); + ParamTyList.push_back(Ty); } } - bool isVarArg = - ParamTypeList.size() && ParamTypeList.back() == Type::VoidTy; - if (isVarArg) ParamTypeList.pop_back(); + bool isVarArg = ParamTyList.size() && ParamTyList.back() == Type::VoidTy; + if (isVarArg) + ParamTyList.pop_back(); // Convert the CSRet calling convention into the corresponding parameter // attribute. @@ -2591,7 +2587,7 @@ FunctionHeaderH ParamAttrs.push_back(FunctionType::StructRetAttribute); // first arg } - const FunctionType *FT = FunctionType::get(RetTy, ParamTypeList, isVarArg, + const FunctionType *FT = FunctionType::get(RetTy, ParamTyList, isVarArg, ParamAttrs); const PointerType *PFT = PointerType::get(FT); delete $2.T; @@ -2612,18 +2608,37 @@ FunctionHeaderH CurModule.CurrentModule->getFunctionList().remove(Fn); CurModule.CurrentModule->getFunctionList().push_back(Fn); } else if (!FunctionName.empty() && // Merge with an earlier prototype? - (Fn = CurModule.CurrentModule->getFunction(FunctionName, FT))) { - // If this is the case, either we need to be a forward decl, or it needs - // to be. - if (!CurFun.isDeclare && !Fn->isDeclaration()) - error("Redefinition of function '" + FunctionName + "'"); + (Fn = CurModule.CurrentModule->getFunction(FunctionName))) { + if (Fn->getFunctionType() != FT ) { + // The existing function doesn't have the same type. Previously this was + // permitted because the symbol tables had "type planes" and names were + // distinct within a type plane. After PR411 was fixed, this is no + // longer the case. To resolve this we must rename this function. + // However, renaming it can cause problems if its linkage is external + // because it could cause a link failure. We warn about this. + std::string NewName = makeNameUnique(FunctionName); + warning("Renaming function '" + FunctionName + "' as '" + NewName + + "' may cause linkage errors"); + + Fn = new Function(FT, GlobalValue::ExternalLinkage, NewName, + CurModule.CurrentModule); + InsertValue(Fn, CurModule.Values); + RenameMapKey Key = std::make_pair(FunctionName,PFT); + CurModule.RenameMap[Key] = NewName; + } else { + // The types are the same. Either the existing or the current function + // needs to be a forward declaration. If not, they're attempting to + // redefine a function. + if (!CurFun.isDeclare && !Fn->isDeclaration()) + error("Redefinition of function '" + FunctionName + "'"); - // Make sure to strip off any argument names so we can't get conflicts. - if (Fn->isDeclaration()) - for (Function::arg_iterator AI = Fn->arg_begin(), AE = Fn->arg_end(); - AI != AE; ++AI) - AI->setName(""); - } else { // Not already defined? + // Make sure to strip off any argument names so we can't get conflicts. + if (Fn->isDeclaration()) + for (Function::arg_iterator AI = Fn->arg_begin(), AE = Fn->arg_end(); + AI != AE; ++AI) + AI->setName(""); + } + } else { // Not already defined? Fn = new Function(FT, GlobalValue::ExternalLinkage, FunctionName, CurModule.CurrentModule); @@ -2654,8 +2669,10 @@ FunctionHeaderH $5->pop_back(); // Delete the last entry } Function::arg_iterator ArgIt = Fn->arg_begin(); - for (std::vector<std::pair<PATypeInfo,char*> >::iterator - I = $5->begin(), E = $5->end(); I != E; ++I, ++ArgIt) { + Function::arg_iterator ArgEnd = Fn->arg_end(); + std::vector<std::pair<PATypeInfo,char*> >::iterator I = $5->begin(); + std::vector<std::pair<PATypeInfo,char*> >::iterator E = $5->end(); + for ( ; I != E && ArgIt != ArgEnd; ++I, ++ArgIt) { delete I->first.T; // Delete the typeholder... setValueName(ArgIt, I->second); // Insert arg into symtab... InsertValue(ArgIt); diff --git a/tools/llvm-upgrade/UpgradeParser.y.cvs b/tools/llvm-upgrade/UpgradeParser.y.cvs index 34ebd62..0f47b38 100644 --- a/tools/llvm-upgrade/UpgradeParser.y.cvs +++ b/tools/llvm-upgrade/UpgradeParser.y.cvs @@ -17,7 +17,7 @@ #include "llvm/InlineAsm.h" #include "llvm/Instructions.h" #include "llvm/Module.h" -#include "llvm/SymbolTable.h" +#include "llvm/ValueSymbolTable.h" #include "llvm/Support/GetElementPtrTypeIterator.h" #include "llvm/ADT/STLExtras.h" #include "llvm/Support/MathExtras.h" @@ -312,8 +312,10 @@ static Value *getExistingValue(const Type *Ty, const ValID &D) { LookupName = I->second; else LookupName = Name; - SymbolTable &SymTab = CurFun.CurrentFunction->getValueSymbolTable(); - V = SymTab.lookup(Ty, LookupName); + ValueSymbolTable &SymTab = CurFun.CurrentFunction->getValueSymbolTable(); + V = SymTab.lookup(LookupName); + if (V && V->getType() != Ty) + V = 0; } if (!V) { RenameMapType::const_iterator I = CurModule.RenameMap.find(Key); @@ -322,9 +324,11 @@ static Value *getExistingValue(const Type *Ty, const ValID &D) { LookupName = I->second; else LookupName = Name; - V = CurModule.CurrentModule->getValueSymbolTable().lookup(Ty, LookupName); + V = CurModule.CurrentModule->getValueSymbolTable().lookup(LookupName); + if (V && V->getType() != Ty) + V = 0; } - if (V == 0) + if (!V) return 0; D.destroy(); // Free old strdup'd memory... @@ -416,7 +420,7 @@ static Value *getVal(const Type *Ty, const ValID &ID) { // Remember where this forward reference came from. FIXME, shouldn't we try // to recycle these things?? CurModule.PlaceHolderInfo.insert( - std::make_pair(V, std::make_pair(ID, Upgradelineno-1))); + std::make_pair(V, std::make_pair(ID, Upgradelineno))); if (inFunctionScope()) InsertValue(V, CurFun.LateResolveValues); @@ -448,7 +452,7 @@ static BasicBlock *getBBVal(const ValID &ID, bool isDefinition = false) { case ValID::NameVal: // Is it a named definition? Name = ID.Name; if (Value *N = CurFun.CurrentFunction-> - getValueSymbolTable().lookup(Type::LabelTy, Name)) { + getValueSymbolTable().lookup(Name)) { if (N->getType() != Type::LabelTy) error("Name '" + Name + "' does not refer to a BasicBlock"); BB = cast<BasicBlock>(N); @@ -682,16 +686,8 @@ static void setValueName(Value *V, char *NameStr) { assert(inFunctionScope() && "Must be in function scope"); // Search the function's symbol table for an existing value of this name - Value* Existing = 0; - SymbolTable &ST = CurFun.CurrentFunction->getValueSymbolTable(); - SymbolTable::plane_const_iterator PI = ST.plane_begin(), PE =ST.plane_end(); - for ( ; PI != PE; ++PI) { - SymbolTable::value_const_iterator VI = PI->second.find(Name); - if (VI != PI->second.end()) { - Existing = VI->second; - break; - } - } + ValueSymbolTable &ST = CurFun.CurrentFunction->getValueSymbolTable(); + Value* Existing = ST.lookup(Name); if (Existing) { // An existing value of the same name was found. This might have happened // because of the integer type planes collapsing in LLVM 2.0. @@ -2561,27 +2557,27 @@ FunctionHeaderH if (!RetTy->isFirstClassType() && RetTy != Type::VoidTy) error("LLVM functions cannot return aggregate types"); - std::vector<const Type*> ParamTypeList; + std::vector<const Type*> ParamTyList; // In LLVM 2.0 the signatures of three varargs intrinsics changed to take // i8*. We check here for those names and override the parameter list // types to ensure the prototype is correct. if (FunctionName == "llvm.va_start" || FunctionName == "llvm.va_end") { - ParamTypeList.push_back(PointerType::get(Type::Int8Ty)); + ParamTyList.push_back(PointerType::get(Type::Int8Ty)); } else if (FunctionName == "llvm.va_copy") { - ParamTypeList.push_back(PointerType::get(Type::Int8Ty)); - ParamTypeList.push_back(PointerType::get(Type::Int8Ty)); + ParamTyList.push_back(PointerType::get(Type::Int8Ty)); + ParamTyList.push_back(PointerType::get(Type::Int8Ty)); } else if ($5) { // If there are arguments... for (std::vector<std::pair<PATypeInfo,char*> >::iterator I = $5->begin(), E = $5->end(); I != E; ++I) { const Type *Ty = I->first.T->get(); - ParamTypeList.push_back(Ty); + ParamTyList.push_back(Ty); } } - bool isVarArg = - ParamTypeList.size() && ParamTypeList.back() == Type::VoidTy; - if (isVarArg) ParamTypeList.pop_back(); + bool isVarArg = ParamTyList.size() && ParamTyList.back() == Type::VoidTy; + if (isVarArg) + ParamTyList.pop_back(); // Convert the CSRet calling convention into the corresponding parameter // attribute. @@ -2591,7 +2587,7 @@ FunctionHeaderH ParamAttrs.push_back(FunctionType::StructRetAttribute); // first arg } - const FunctionType *FT = FunctionType::get(RetTy, ParamTypeList, isVarArg, + const FunctionType *FT = FunctionType::get(RetTy, ParamTyList, isVarArg, ParamAttrs); const PointerType *PFT = PointerType::get(FT); delete $2.T; @@ -2612,18 +2608,37 @@ FunctionHeaderH CurModule.CurrentModule->getFunctionList().remove(Fn); CurModule.CurrentModule->getFunctionList().push_back(Fn); } else if (!FunctionName.empty() && // Merge with an earlier prototype? - (Fn = CurModule.CurrentModule->getFunction(FunctionName, FT))) { - // If this is the case, either we need to be a forward decl, or it needs - // to be. - if (!CurFun.isDeclare && !Fn->isDeclaration()) - error("Redefinition of function '" + FunctionName + "'"); + (Fn = CurModule.CurrentModule->getFunction(FunctionName))) { + if (Fn->getFunctionType() != FT ) { + // The existing function doesn't have the same type. Previously this was + // permitted because the symbol tables had "type planes" and names were + // distinct within a type plane. After PR411 was fixed, this is no + // longer the case. To resolve this we must rename this function. + // However, renaming it can cause problems if its linkage is external + // because it could cause a link failure. We warn about this. + std::string NewName = makeNameUnique(FunctionName); + warning("Renaming function '" + FunctionName + "' as '" + NewName + + "' may cause linkage errors"); + + Fn = new Function(FT, GlobalValue::ExternalLinkage, NewName, + CurModule.CurrentModule); + InsertValue(Fn, CurModule.Values); + RenameMapKey Key = std::make_pair(FunctionName,PFT); + CurModule.RenameMap[Key] = NewName; + } else { + // The types are the same. Either the existing or the current function + // needs to be a forward declaration. If not, they're attempting to + // redefine a function. + if (!CurFun.isDeclare && !Fn->isDeclaration()) + error("Redefinition of function '" + FunctionName + "'"); - // Make sure to strip off any argument names so we can't get conflicts. - if (Fn->isDeclaration()) - for (Function::arg_iterator AI = Fn->arg_begin(), AE = Fn->arg_end(); - AI != AE; ++AI) - AI->setName(""); - } else { // Not already defined? + // Make sure to strip off any argument names so we can't get conflicts. + if (Fn->isDeclaration()) + for (Function::arg_iterator AI = Fn->arg_begin(), AE = Fn->arg_end(); + AI != AE; ++AI) + AI->setName(""); + } + } else { // Not already defined? Fn = new Function(FT, GlobalValue::ExternalLinkage, FunctionName, CurModule.CurrentModule); @@ -2654,8 +2669,10 @@ FunctionHeaderH $5->pop_back(); // Delete the last entry } Function::arg_iterator ArgIt = Fn->arg_begin(); - for (std::vector<std::pair<PATypeInfo,char*> >::iterator - I = $5->begin(), E = $5->end(); I != E; ++I, ++ArgIt) { + Function::arg_iterator ArgEnd = Fn->arg_end(); + std::vector<std::pair<PATypeInfo,char*> >::iterator I = $5->begin(); + std::vector<std::pair<PATypeInfo,char*> >::iterator E = $5->end(); + for ( ; I != E && ArgIt != ArgEnd; ++I, ++ArgIt) { delete I->first.T; // Delete the typeholder... setValueName(ArgIt, I->second); // Insert arg into symtab... InsertValue(ArgIt); diff --git a/tools/llvm2cpp/CppWriter.cpp b/tools/llvm2cpp/CppWriter.cpp index d0a02bf..e7d1185 100644 --- a/tools/llvm2cpp/CppWriter.cpp +++ b/tools/llvm2cpp/CppWriter.cpp @@ -19,7 +19,6 @@ #include "llvm/Instruction.h" #include "llvm/Instructions.h" #include "llvm/Module.h" -#include "llvm/SymbolTable.h" #include "llvm/TypeSymbolTable.h" #include "llvm/ADT/StringExtras.h" #include "llvm/ADT/STLExtras.h" diff --git a/tools/lto/lto.cpp b/tools/lto/lto.cpp index f3688b4..d7dec3f 100644 --- a/tools/lto/lto.cpp +++ b/tools/lto/lto.cpp @@ -17,7 +17,6 @@ #include "llvm/Linker.h" #include "llvm/Constants.h" #include "llvm/DerivedTypes.h" -#include "llvm/SymbolTable.h" #include "llvm/Bytecode/Reader.h" #include "llvm/Bytecode/Writer.h" #include "llvm/Support/CommandLine.h" @@ -248,12 +247,6 @@ LTO::optimize(Module *M, std::ostream &Out, // Add an appropriate TargetData instance for this module... Passes.add(new TargetData(*Target->getTargetData())); - // Often if the programmer does not specify proper prototypes for the - // functions they are calling, they end up calling a vararg version of the - // function that does not get a body filled in (the real function has typed - // arguments). This pass merges the two functions. - Passes.add(createFunctionResolvingPass()); - // Internalize symbols if export list is nonemty if (!exportList.empty()) Passes.add(createInternalizePass(exportList)); diff --git a/tools/opt/opt.cpp b/tools/opt/opt.cpp index 76cede1..5294cac 100644 --- a/tools/opt/opt.cpp +++ b/tools/opt/opt.cpp @@ -178,7 +178,6 @@ void AddStandardCompilePasses(PassManager &PM) { PM.add(createVerifierPass()); // Verify that input is correct addPass(PM, createLowerSetJmpPass()); // Lower llvm.setjmp/.longjmp - addPass(PM, createFunctionResolvingPass()); // Resolve (...) functions // If the -strip-debug command line option was specified, do it. if (StripDebug) |