1 /* A Bison parser, made by GNU Bison 2.1. */
3 /* Skeleton parser for Yacc-like parsing with Bison,
4 Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2, or (at your option)
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 51 Franklin Street, Fifth Floor,
19 Boston, MA 02110-1301, USA. */
21 /* As a special exception, when this file is copied by Bison into a
22 Bison output file, you may use that output file without restriction.
23 This special exception was added by the Free Software Foundation
24 in version 1.24 of Bison. */
26 /* Written by Richard Stallman by simplifying the original so called
27 ``semantic'' parser. */
29 /* All symbols defined below should begin with yy or YY, to avoid
30 infringing on user name space. This should be done even for local
31 variables, as they might otherwise be expanded by user macros.
32 There are some unavoidable exceptions within include files to
33 define necessary library symbols; they are noted "INFRINGES ON
34 USER NAME SPACE" below. */
36 /* Identify Bison output. */
40 #define YYBISON_VERSION "2.1"
43 #define YYSKELETON_NAME "yacc.c"
48 /* Using locations. */
49 #define YYLSP_NEEDED 0
51 /* Substitute the variable and function names. */
52 #define yyparse Upgradeparse
53 #define yylex Upgradelex
54 #define yyerror Upgradeerror
55 #define yylval Upgradelval
56 #define yychar Upgradechar
57 #define yydebug Upgradedebug
58 #define yynerrs Upgradenerrs
64 /* Put the tokens into the symbol table, so that GDB and other debuggers
90 ZEROINITIALIZER = 281,
133 X86_STDCALLCC_TOK = 324,
134 X86_FASTCALLCC_TOK = 325,
178 EXTRACTELEMENT = 369,
219 #define ESINT64VAL 258
220 #define EUINT64VAL 259
240 #define STRINGCONSTANT 279
241 #define IMPLEMENTATION 280
242 #define ZEROINITIALIZER 281
253 #define DOTDOTDOT 292
260 #define APPENDING 299
261 #define DLLIMPORT 300
262 #define DLLEXPORT 301
263 #define EXTERN_WEAK 302
270 #define POINTERSIZE 309
279 #define SIDEEFFECT 318
282 #define CSRETCC_TOK 321
283 #define FASTCC_TOK 322
284 #define COLDCC_TOK 323
285 #define X86_STDCALLCC_TOK 324
286 #define X86_FASTCALLCC_TOK 325
287 #define DATALAYOUT 326
292 #define UNREACHABLE 331
322 #define GETELEMENTPTR 361
330 #define EXTRACTELEMENT 369
331 #define INSERTELEMENT 370
332 #define SHUFFLEVECTOR 371
333 #define VAARG_old 372
334 #define VANEXT_old 373
372 /* Copy the first part of user declarations. */
373 #line 14 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
375 #include "UpgradeInternals.h"
376 #include "llvm/CallingConv.h"
377 #include "llvm/InlineAsm.h"
378 #include "llvm/Instructions.h"
379 #include "llvm/Module.h"
380 #include "llvm/SymbolTable.h"
381 #include "llvm/Support/GetElementPtrTypeIterator.h"
382 #include "llvm/ADT/STLExtras.h"
383 #include "llvm/Support/MathExtras.h"
389 // DEBUG_UPREFS - Define this symbol if you want to enable debugging output
390 // relating to upreferences in the input stream.
392 //#define DEBUG_UPREFS 1
394 #define UR_OUT(X) std::cerr << X
399 #define YYERROR_VERBOSE 1
400 #define YYINCLUDED_STDLIB_H
406 int yyerror(const char*);
407 static void warning(const std::string& WarningMsg);
411 std::istream* LexInput;
412 static std::string CurFilename;
414 // This bool controls whether attributes are ever added to function declarations
415 // definitions and calls.
416 static bool AddAttributes = false;
418 static Module *ParserResult;
419 static bool ObsoleteVarArgs;
420 static bool NewVarArgs;
421 static BasicBlock *CurBB;
422 static GlobalVariable *CurGV;
424 // This contains info used when building the body of a function. It is
425 // destroyed when the function is completed.
427 typedef std::vector<Value *> ValueList; // Numbered defs
429 typedef std::pair<std::string,const Type*> RenameMapKey;
430 typedef std::map<RenameMapKey,std::string> RenameMapType;
433 ResolveDefinitions(std::map<const Type *,ValueList> &LateResolvers,
434 std::map<const Type *,ValueList> *FutureLateResolvers = 0);
436 static struct PerModuleInfo {
437 Module *CurrentModule;
438 std::map<const Type *, ValueList> Values; // Module level numbered definitions
439 std::map<const Type *,ValueList> LateResolveValues;
440 std::vector<PATypeHolder> Types;
441 std::map<ValID, PATypeHolder> LateResolveTypes;
442 static Module::Endianness Endian;
443 static Module::PointerSize PointerSize;
444 RenameMapType RenameMap;
446 /// PlaceHolderInfo - When temporary placeholder objects are created, remember
447 /// how they were referenced and on which line of the input they came from so
448 /// that we can resolve them later and print error messages as appropriate.
449 std::map<Value*, std::pair<ValID, int> > PlaceHolderInfo;
451 // GlobalRefs - This maintains a mapping between <Type, ValID>'s and forward
452 // references to global values. Global values may be referenced before they
453 // are defined, and if so, the temporary object that they represent is held
454 // here. This is used for forward references of GlobalValues.
456 typedef std::map<std::pair<const PointerType *, ValID>, GlobalValue*>
458 GlobalRefsType GlobalRefs;
461 // If we could not resolve some functions at function compilation time
462 // (calls to functions before they are defined), resolve them now... Types
463 // are resolved when the constant pool has been completely parsed.
465 ResolveDefinitions(LateResolveValues);
467 // Check to make sure that all global value forward references have been
470 if (!GlobalRefs.empty()) {
471 std::string UndefinedReferences = "Unresolved global references exist:\n";
473 for (GlobalRefsType::iterator I = GlobalRefs.begin(), E =GlobalRefs.end();
475 UndefinedReferences += " " + I->first.first->getDescription() + " " +
476 I->first.second.getName() + "\n";
478 error(UndefinedReferences);
482 if (CurrentModule->getDataLayout().empty()) {
483 std::string dataLayout;
484 if (Endian != Module::AnyEndianness)
485 dataLayout.append(Endian == Module::BigEndian ? "E" : "e");
486 if (PointerSize != Module::AnyPointerSize) {
487 if (!dataLayout.empty())
489 dataLayout.append(PointerSize == Module::Pointer64 ?
490 "p:64:64" : "p:32:32");
492 CurrentModule->setDataLayout(dataLayout);
495 Values.clear(); // Clear out function local definitions
500 // GetForwardRefForGlobal - Check to see if there is a forward reference
501 // for this global. If so, remove it from the GlobalRefs map and return it.
502 // If not, just return null.
503 GlobalValue *GetForwardRefForGlobal(const PointerType *PTy, ValID ID) {
504 // Check to see if there is a forward reference to this global variable...
505 // if there is, eliminate it and patch the reference to use the new def'n.
506 GlobalRefsType::iterator I = GlobalRefs.find(std::make_pair(PTy, ID));
507 GlobalValue *Ret = 0;
508 if (I != GlobalRefs.end()) {
514 void setEndianness(Module::Endianness E) { Endian = E; }
515 void setPointerSize(Module::PointerSize sz) { PointerSize = sz; }
518 Module::Endianness PerModuleInfo::Endian = Module::AnyEndianness;
519 Module::PointerSize PerModuleInfo::PointerSize = Module::AnyPointerSize;
521 static struct PerFunctionInfo {
522 Function *CurrentFunction; // Pointer to current function being created
524 std::map<const Type*, ValueList> Values; // Keep track of #'d definitions
525 std::map<const Type*, ValueList> LateResolveValues;
526 bool isDeclare; // Is this function a forward declararation?
527 GlobalValue::LinkageTypes Linkage;// Linkage for forward declaration.
529 /// BBForwardRefs - When we see forward references to basic blocks, keep
530 /// track of them here.
531 std::map<BasicBlock*, std::pair<ValID, int> > BBForwardRefs;
532 std::vector<BasicBlock*> NumberedBlocks;
533 RenameMapType RenameMap;
536 inline PerFunctionInfo() {
539 Linkage = GlobalValue::ExternalLinkage;
542 inline void FunctionStart(Function *M) {
547 void FunctionDone() {
548 NumberedBlocks.clear();
550 // Any forward referenced blocks left?
551 if (!BBForwardRefs.empty()) {
552 error("Undefined reference to label " +
553 BBForwardRefs.begin()->first->getName());
557 // Resolve all forward references now.
558 ResolveDefinitions(LateResolveValues, &CurModule.LateResolveValues);
560 Values.clear(); // Clear out function local definitions
564 Linkage = GlobalValue::ExternalLinkage;
566 } CurFun; // Info for the current function...
568 static bool inFunctionScope() { return CurFun.CurrentFunction != 0; }
571 //===----------------------------------------------------------------------===//
572 // Code to handle definitions of all the types
573 //===----------------------------------------------------------------------===//
575 static int InsertValue(Value *V,
576 std::map<const Type*,ValueList> &ValueTab = CurFun.Values) {
577 if (V->hasName()) return -1; // Is this a numbered definition?
579 // Yes, insert the value into the value table...
580 ValueList &List = ValueTab[V->getType()];
582 return List.size()-1;
585 static const Type *getType(const ValID &D, bool DoNotImprovise = false) {
587 case ValID::NumberVal: // Is it a numbered definition?
588 // Module constants occupy the lowest numbered slots...
589 if ((unsigned)D.Num < CurModule.Types.size()) {
590 return CurModule.Types[(unsigned)D.Num];
593 case ValID::NameVal: // Is it a named definition?
594 if (const Type *N = CurModule.CurrentModule->getTypeByName(D.Name)) {
595 D.destroy(); // Free old strdup'd memory...
600 error("Internal parser error: Invalid symbol type reference");
604 // If we reached here, we referenced either a symbol that we don't know about
605 // or an id number that hasn't been read yet. We may be referencing something
606 // forward, so just create an entry to be resolved later and get to it...
608 if (DoNotImprovise) return 0; // Do we just want a null to be returned?
611 if (inFunctionScope()) {
612 if (D.Type == ValID::NameVal) {
613 error("Reference to an undefined type: '" + D.getName() + "'");
616 error("Reference to an undefined type: #" + itostr(D.Num));
621 std::map<ValID, PATypeHolder>::iterator I =CurModule.LateResolveTypes.find(D);
622 if (I != CurModule.LateResolveTypes.end())
625 Type *Typ = OpaqueType::get();
626 CurModule.LateResolveTypes.insert(std::make_pair(D, Typ));
630 // getExistingValue - Look up the value specified by the provided type and
631 // the provided ValID. If the value exists and has already been defined, return
632 // it. Otherwise return null.
634 static Value *getExistingValue(const Type *Ty, const ValID &D) {
635 if (isa<FunctionType>(Ty)) {
636 error("Functions are not values and must be referenced as pointers");
640 case ValID::NumberVal: { // Is it a numbered definition?
641 unsigned Num = (unsigned)D.Num;
643 // Module constants occupy the lowest numbered slots...
644 std::map<const Type*,ValueList>::iterator VI = CurModule.Values.find(Ty);
645 if (VI != CurModule.Values.end()) {
646 if (Num < VI->second.size())
647 return VI->second[Num];
648 Num -= VI->second.size();
651 // Make sure that our type is within bounds
652 VI = CurFun.Values.find(Ty);
653 if (VI == CurFun.Values.end()) return 0;
655 // Check that the number is within bounds...
656 if (VI->second.size() <= Num) return 0;
658 return VI->second[Num];
661 case ValID::NameVal: { // Is it a named definition?
662 // Get the name out of the ID
663 std::string Name(D.Name);
665 RenameMapKey Key = std::make_pair(Name, Ty);
666 if (inFunctionScope()) {
667 // See if the name was renamed
668 RenameMapType::const_iterator I = CurFun.RenameMap.find(Key);
669 std::string LookupName;
670 if (I != CurFun.RenameMap.end())
671 LookupName = I->second;
674 SymbolTable &SymTab = CurFun.CurrentFunction->getValueSymbolTable();
675 V = SymTab.lookup(Ty, LookupName);
678 RenameMapType::const_iterator I = CurModule.RenameMap.find(Key);
679 std::string LookupName;
680 if (I != CurModule.RenameMap.end())
681 LookupName = I->second;
684 V = CurModule.CurrentModule->getValueSymbolTable().lookup(Ty, LookupName);
689 D.destroy(); // Free old strdup'd memory...
693 // Check to make sure that "Ty" is an integral type, and that our
694 // value will fit into the specified type...
695 case ValID::ConstSIntVal: // Is it a constant pool reference??
696 if (!ConstantInt::isValueValidForType(Ty, D.ConstPool64)) {
697 error("Signed integral constant '" + itostr(D.ConstPool64) +
698 "' is invalid for type '" + Ty->getDescription() + "'");
700 return ConstantInt::get(Ty, D.ConstPool64);
702 case ValID::ConstUIntVal: // Is it an unsigned const pool reference?
703 if (!ConstantInt::isValueValidForType(Ty, D.UConstPool64)) {
704 if (!ConstantInt::isValueValidForType(Ty, D.ConstPool64))
705 error("Integral constant '" + utostr(D.UConstPool64) +
706 "' is invalid or out of range");
707 else // This is really a signed reference. Transmogrify.
708 return ConstantInt::get(Ty, D.ConstPool64);
710 return ConstantInt::get(Ty, D.UConstPool64);
712 case ValID::ConstFPVal: // Is it a floating point const pool reference?
713 if (!ConstantFP::isValueValidForType(Ty, D.ConstPoolFP))
714 error("FP constant invalid for type");
715 return ConstantFP::get(Ty, D.ConstPoolFP);
717 case ValID::ConstNullVal: // Is it a null value?
718 if (!isa<PointerType>(Ty))
719 error("Cannot create a a non pointer null");
720 return ConstantPointerNull::get(cast<PointerType>(Ty));
722 case ValID::ConstUndefVal: // Is it an undef value?
723 return UndefValue::get(Ty);
725 case ValID::ConstZeroVal: // Is it a zero value?
726 return Constant::getNullValue(Ty);
728 case ValID::ConstantVal: // Fully resolved constant?
729 if (D.ConstantValue->getType() != Ty)
730 error("Constant expression type different from required type");
731 return D.ConstantValue;
733 case ValID::InlineAsmVal: { // Inline asm expression
734 const PointerType *PTy = dyn_cast<PointerType>(Ty);
735 const FunctionType *FTy =
736 PTy ? dyn_cast<FunctionType>(PTy->getElementType()) : 0;
737 if (!FTy || !InlineAsm::Verify(FTy, D.IAD->Constraints))
738 error("Invalid type for asm constraint string");
739 InlineAsm *IA = InlineAsm::get(FTy, D.IAD->AsmString, D.IAD->Constraints,
740 D.IAD->HasSideEffects);
741 D.destroy(); // Free InlineAsmDescriptor.
745 assert(0 && "Unhandled case");
749 assert(0 && "Unhandled case");
753 // getVal - This function is identical to getExistingValue, except that if a
754 // value is not already defined, it "improvises" by creating a placeholder var
755 // that looks and acts just like the requested variable. When the value is
756 // defined later, all uses of the placeholder variable are replaced with the
759 static Value *getVal(const Type *Ty, const ValID &ID) {
760 if (Ty == Type::LabelTy)
761 error("Cannot use a basic block here");
763 // See if the value has already been defined.
764 Value *V = getExistingValue(Ty, ID);
767 if (!Ty->isFirstClassType() && !isa<OpaqueType>(Ty))
768 error("Invalid use of a composite type");
770 // If we reached here, we referenced either a symbol that we don't know about
771 // or an id number that hasn't been read yet. We may be referencing something
772 // forward, so just create an entry to be resolved later and get to it...
773 V = new Argument(Ty);
775 // Remember where this forward reference came from. FIXME, shouldn't we try
776 // to recycle these things??
777 CurModule.PlaceHolderInfo.insert(
778 std::make_pair(V, std::make_pair(ID, Upgradelineno-1)));
780 if (inFunctionScope())
781 InsertValue(V, CurFun.LateResolveValues);
783 InsertValue(V, CurModule.LateResolveValues);
787 /// getBBVal - This is used for two purposes:
788 /// * If isDefinition is true, a new basic block with the specified ID is being
790 /// * If isDefinition is true, this is a reference to a basic block, which may
791 /// or may not be a forward reference.
793 static BasicBlock *getBBVal(const ValID &ID, bool isDefinition = false) {
794 assert(inFunctionScope() && "Can't get basic block at global scope");
800 error("Illegal label reference " + ID.getName());
802 case ValID::NumberVal: // Is it a numbered definition?
803 if (unsigned(ID.Num) >= CurFun.NumberedBlocks.size())
804 CurFun.NumberedBlocks.resize(ID.Num+1);
805 BB = CurFun.NumberedBlocks[ID.Num];
807 case ValID::NameVal: // Is it a named definition?
809 if (Value *N = CurFun.CurrentFunction->
810 getValueSymbolTable().lookup(Type::LabelTy, Name)) {
811 if (N->getType() != Type::LabelTy)
812 error("Name '" + Name + "' does not refer to a BasicBlock");
813 BB = cast<BasicBlock>(N);
818 // See if the block has already been defined.
820 // If this is the definition of the block, make sure the existing value was
821 // just a forward reference. If it was a forward reference, there will be
822 // an entry for it in the PlaceHolderInfo map.
823 if (isDefinition && !CurFun.BBForwardRefs.erase(BB))
824 // The existing value was a definition, not a forward reference.
825 error("Redefinition of label " + ID.getName());
827 ID.destroy(); // Free strdup'd memory.
831 // Otherwise this block has not been seen before.
832 BB = new BasicBlock("", CurFun.CurrentFunction);
833 if (ID.Type == ValID::NameVal) {
834 BB->setName(ID.Name);
836 CurFun.NumberedBlocks[ID.Num] = BB;
839 // If this is not a definition, keep track of it so we can use it as a forward
842 // Remember where this forward reference came from.
843 CurFun.BBForwardRefs[BB] = std::make_pair(ID, Upgradelineno);
845 // The forward declaration could have been inserted anywhere in the
846 // function: insert it into the correct place now.
847 CurFun.CurrentFunction->getBasicBlockList().remove(BB);
848 CurFun.CurrentFunction->getBasicBlockList().push_back(BB);
855 //===----------------------------------------------------------------------===//
856 // Code to handle forward references in instructions
857 //===----------------------------------------------------------------------===//
859 // This code handles the late binding needed with statements that reference
860 // values not defined yet... for example, a forward branch, or the PHI node for
863 // This keeps a table (CurFun.LateResolveValues) of all such forward references
864 // and back patchs after we are done.
867 // ResolveDefinitions - If we could not resolve some defs at parsing
868 // time (forward branches, phi functions for loops, etc...) resolve the
872 ResolveDefinitions(std::map<const Type*,ValueList> &LateResolvers,
873 std::map<const Type*,ValueList> *FutureLateResolvers) {
874 // Loop over LateResolveDefs fixing up stuff that couldn't be resolved
875 for (std::map<const Type*,ValueList>::iterator LRI = LateResolvers.begin(),
876 E = LateResolvers.end(); LRI != E; ++LRI) {
877 ValueList &List = LRI->second;
878 while (!List.empty()) {
879 Value *V = List.back();
882 std::map<Value*, std::pair<ValID, int> >::iterator PHI =
883 CurModule.PlaceHolderInfo.find(V);
884 assert(PHI != CurModule.PlaceHolderInfo.end() && "Placeholder error");
886 ValID &DID = PHI->second.first;
888 Value *TheRealValue = getExistingValue(LRI->first, DID);
890 V->replaceAllUsesWith(TheRealValue);
892 CurModule.PlaceHolderInfo.erase(PHI);
893 } else if (FutureLateResolvers) {
894 // Functions have their unresolved items forwarded to the module late
896 InsertValue(V, *FutureLateResolvers);
898 if (DID.Type == ValID::NameVal) {
899 error("Reference to an invalid definition: '" +DID.getName()+
900 "' of type '" + V->getType()->getDescription() + "'",
904 error("Reference to an invalid definition: #" +
905 itostr(DID.Num) + " of type '" +
906 V->getType()->getDescription() + "'", PHI->second.second);
913 LateResolvers.clear();
916 // ResolveTypeTo - A brand new type was just declared. This means that (if
917 // name is not null) things referencing Name can be resolved. Otherwise, things
918 // refering to the number can be resolved. Do this now.
920 static void ResolveTypeTo(char *Name, const Type *ToTy) {
922 if (Name) D = ValID::create(Name);
923 else D = ValID::create((int)CurModule.Types.size());
925 std::map<ValID, PATypeHolder>::iterator I =
926 CurModule.LateResolveTypes.find(D);
927 if (I != CurModule.LateResolveTypes.end()) {
928 ((DerivedType*)I->second.get())->refineAbstractTypeTo(ToTy);
929 CurModule.LateResolveTypes.erase(I);
933 /// @brief This just makes any name given to it unique, up to MAX_UINT times.
934 static std::string makeNameUnique(const std::string& Name) {
935 static unsigned UniqueNameCounter = 1;
936 std::string Result(Name);
937 Result += ".upgrd." + llvm::utostr(UniqueNameCounter++);
941 /// This is the implementation portion of TypeHasInteger. It traverses the
942 /// type given, avoiding recursive types, and returns true as soon as it finds
943 /// an integer type. If no integer type is found, it returns false.
944 static bool TypeHasIntegerI(const Type *Ty, std::vector<const Type*> Stack) {
945 // Handle some easy cases
946 if (Ty->isPrimitiveType() || (Ty->getTypeID() == Type::OpaqueTyID))
950 if (const SequentialType *STy = dyn_cast<SequentialType>(Ty))
951 return STy->getElementType()->isInteger();
953 // Avoid type structure recursion
954 for (std::vector<const Type*>::iterator I = Stack.begin(), E = Stack.end();
959 // Push us on the type stack
962 if (const FunctionType *FTy = dyn_cast<FunctionType>(Ty)) {
963 if (TypeHasIntegerI(FTy->getReturnType(), Stack))
965 FunctionType::param_iterator I = FTy->param_begin();
966 FunctionType::param_iterator E = FTy->param_end();
968 if (TypeHasIntegerI(*I, Stack))
971 } else if (const StructType *STy = dyn_cast<StructType>(Ty)) {
972 StructType::element_iterator I = STy->element_begin();
973 StructType::element_iterator E = STy->element_end();
974 for (; I != E; ++I) {
975 if (TypeHasIntegerI(*I, Stack))
980 // There shouldn't be anything else, but its definitely not integer
981 assert(0 && "What type is this?");
985 /// This is the interface to TypeHasIntegerI. It just provides the type stack,
986 /// to avoid recursion, and then calls TypeHasIntegerI.
987 static inline bool TypeHasInteger(const Type *Ty) {
988 std::vector<const Type*> TyStack;
989 return TypeHasIntegerI(Ty, TyStack);
992 // setValueName - Set the specified value to the name given. The name may be
993 // null potentially, in which case this is a noop. The string passed in is
994 // assumed to be a malloc'd string buffer, and is free'd by this function.
996 static void setValueName(Value *V, char *NameStr) {
998 std::string Name(NameStr); // Copy string
999 free(NameStr); // Free old string
1001 if (V->getType() == Type::VoidTy) {
1002 error("Can't assign name '" + Name + "' to value with void type");
1006 assert(inFunctionScope() && "Must be in function scope");
1008 // Search the function's symbol table for an existing value of this name
1009 Value* Existing = 0;
1010 SymbolTable &ST = CurFun.CurrentFunction->getValueSymbolTable();
1011 SymbolTable::plane_const_iterator PI = ST.plane_begin(), PE =ST.plane_end();
1012 for ( ; PI != PE; ++PI) {
1013 SymbolTable::value_const_iterator VI = PI->second.find(Name);
1014 if (VI != PI->second.end()) {
1015 Existing = VI->second;
1020 // An existing value of the same name was found. This might have happened
1021 // because of the integer type planes collapsing in LLVM 2.0.
1022 if (Existing->getType() == V->getType() &&
1023 !TypeHasInteger(Existing->getType())) {
1024 // If the type does not contain any integers in them then this can't be
1025 // a type plane collapsing issue. It truly is a redefinition and we
1026 // should error out as the assembly is invalid.
1027 error("Redefinition of value named '" + Name + "' of type '" +
1028 V->getType()->getDescription() + "'");
1031 // In LLVM 2.0 we don't allow names to be re-used for any values in a
1032 // function, regardless of Type. Previously re-use of names was okay as
1033 // long as they were distinct types. With type planes collapsing because
1034 // of the signedness change and because of PR411, this can no longer be
1035 // supported. We must search the entire symbol table for a conflicting
1036 // name and make the name unique. No warning is needed as this can't
1038 std::string NewName = makeNameUnique(Name);
1039 // We're changing the name but it will probably be used by other
1040 // instructions as operands later on. Consequently we have to retain
1041 // a mapping of the renaming that we're doing.
1042 RenameMapKey Key = std::make_pair(Name,V->getType());
1043 CurFun.RenameMap[Key] = NewName;
1052 /// ParseGlobalVariable - Handle parsing of a global. If Initializer is null,
1053 /// this is a declaration, otherwise it is a definition.
1054 static GlobalVariable *
1055 ParseGlobalVariable(char *NameStr,GlobalValue::LinkageTypes Linkage,
1056 bool isConstantGlobal, const Type *Ty,
1057 Constant *Initializer) {
1058 if (isa<FunctionType>(Ty))
1059 error("Cannot declare global vars of function type");
1061 const PointerType *PTy = PointerType::get(Ty);
1065 Name = NameStr; // Copy string
1066 free(NameStr); // Free old string
1069 // See if this global value was forward referenced. If so, recycle the
1072 if (!Name.empty()) {
1073 ID = ValID::create((char*)Name.c_str());
1075 ID = ValID::create((int)CurModule.Values[PTy].size());
1078 if (GlobalValue *FWGV = CurModule.GetForwardRefForGlobal(PTy, ID)) {
1079 // Move the global to the end of the list, from whereever it was
1080 // previously inserted.
1081 GlobalVariable *GV = cast<GlobalVariable>(FWGV);
1082 CurModule.CurrentModule->getGlobalList().remove(GV);
1083 CurModule.CurrentModule->getGlobalList().push_back(GV);
1084 GV->setInitializer(Initializer);
1085 GV->setLinkage(Linkage);
1086 GV->setConstant(isConstantGlobal);
1087 InsertValue(GV, CurModule.Values);
1091 // If this global has a name, check to see if there is already a definition
1092 // of this global in the module and emit warnings if there are conflicts.
1093 if (!Name.empty()) {
1094 // The global has a name. See if there's an existing one of the same name.
1095 if (CurModule.CurrentModule->getNamedGlobal(Name)) {
1096 // We found an existing global ov the same name. This isn't allowed
1097 // in LLVM 2.0. Consequently, we must alter the name of the global so it
1098 // can at least compile. This can happen because of type planes
1099 // There is alread a global of the same name which means there is a
1100 // conflict. Let's see what we can do about it.
1101 std::string NewName(makeNameUnique(Name));
1102 if (Linkage == GlobalValue::InternalLinkage) {
1103 // The linkage type is internal so just warn about the rename without
1104 // invoking "scarey language" about linkage failures. GVars with
1105 // InternalLinkage can be renamed at will.
1106 warning("Global variable '" + Name + "' was renamed to '"+
1109 // The linkage of this gval is external so we can't reliably rename
1110 // it because it could potentially create a linking problem.
1111 // However, we can't leave the name conflict in the output either or
1112 // it won't assemble with LLVM 2.0. So, all we can do is rename
1113 // this one to something unique and emit a warning about the problem.
1114 warning("Renaming global variable '" + Name + "' to '" + NewName +
1115 "' may cause linkage errors");
1118 // Put the renaming in the global rename map
1119 RenameMapKey Key = std::make_pair(Name,PointerType::get(Ty));
1120 CurModule.RenameMap[Key] = NewName;
1127 // Otherwise there is no existing GV to use, create one now.
1128 GlobalVariable *GV =
1129 new GlobalVariable(Ty, isConstantGlobal, Linkage, Initializer, Name,
1130 CurModule.CurrentModule);
1131 InsertValue(GV, CurModule.Values);
1135 // setTypeName - Set the specified type to the name given. The name may be
1136 // null potentially, in which case this is a noop. The string passed in is
1137 // assumed to be a malloc'd string buffer, and is freed by this function.
1139 // This function returns true if the type has already been defined, but is
1140 // allowed to be redefined in the specified context. If the name is a new name
1141 // for the type plane, it is inserted and false is returned.
1142 static bool setTypeName(const Type *T, char *NameStr) {
1143 assert(!inFunctionScope() && "Can't give types function-local names");
1144 if (NameStr == 0) return false;
1146 std::string Name(NameStr); // Copy string
1147 free(NameStr); // Free old string
1149 // We don't allow assigning names to void type
1150 if (T == Type::VoidTy) {
1151 error("Can't assign name '" + Name + "' to the void type");
1155 // Set the type name, checking for conflicts as we do so.
1156 bool AlreadyExists = CurModule.CurrentModule->addTypeName(Name, T);
1158 if (AlreadyExists) { // Inserting a name that is already defined???
1159 const Type *Existing = CurModule.CurrentModule->getTypeByName(Name);
1160 assert(Existing && "Conflict but no matching type?");
1162 // There is only one case where this is allowed: when we are refining an
1163 // opaque type. In this case, Existing will be an opaque type.
1164 if (const OpaqueType *OpTy = dyn_cast<OpaqueType>(Existing)) {
1165 // We ARE replacing an opaque type!
1166 const_cast<OpaqueType*>(OpTy)->refineAbstractTypeTo(T);
1170 // Otherwise, this is an attempt to redefine a type. That's okay if
1171 // the redefinition is identical to the original. This will be so if
1172 // Existing and T point to the same Type object. In this one case we
1173 // allow the equivalent redefinition.
1174 if (Existing == T) return true; // Yes, it's equal.
1176 // Any other kind of (non-equivalent) redefinition is an error.
1177 error("Redefinition of type named '" + Name + "' in the '" +
1178 T->getDescription() + "' type plane");
1184 //===----------------------------------------------------------------------===//
1185 // Code for handling upreferences in type names...
1188 // TypeContains - Returns true if Ty directly contains E in it.
1190 static bool TypeContains(const Type *Ty, const Type *E) {
1191 return std::find(Ty->subtype_begin(), Ty->subtype_end(),
1192 E) != Ty->subtype_end();
1196 struct UpRefRecord {
1197 // NestingLevel - The number of nesting levels that need to be popped before
1198 // this type is resolved.
1199 unsigned NestingLevel;
1201 // LastContainedTy - This is the type at the current binding level for the
1202 // type. Every time we reduce the nesting level, this gets updated.
1203 const Type *LastContainedTy;
1205 // UpRefTy - This is the actual opaque type that the upreference is
1206 // represented with.
1207 OpaqueType *UpRefTy;
1209 UpRefRecord(unsigned NL, OpaqueType *URTy)
1210 : NestingLevel(NL), LastContainedTy(URTy), UpRefTy(URTy) {}
1214 // UpRefs - A list of the outstanding upreferences that need to be resolved.
1215 static std::vector<UpRefRecord> UpRefs;
1217 /// HandleUpRefs - Every time we finish a new layer of types, this function is
1218 /// called. It loops through the UpRefs vector, which is a list of the
1219 /// currently active types. For each type, if the up reference is contained in
1220 /// the newly completed type, we decrement the level count. When the level
1221 /// count reaches zero, the upreferenced type is the type that is passed in:
1222 /// thus we can complete the cycle.
1224 static PATypeHolder HandleUpRefs(const Type *ty) {
1225 // If Ty isn't abstract, or if there are no up-references in it, then there is
1226 // nothing to resolve here.
1227 if (!ty->isAbstract() || UpRefs.empty()) return ty;
1229 PATypeHolder Ty(ty);
1230 UR_OUT("Type '" << Ty->getDescription() <<
1231 "' newly formed. Resolving upreferences.\n" <<
1232 UpRefs.size() << " upreferences active!\n");
1234 // If we find any resolvable upreferences (i.e., those whose NestingLevel goes
1235 // to zero), we resolve them all together before we resolve them to Ty. At
1236 // the end of the loop, if there is anything to resolve to Ty, it will be in
1238 OpaqueType *TypeToResolve = 0;
1240 for (unsigned i = 0; i != UpRefs.size(); ++i) {
1241 UR_OUT(" UR#" << i << " - TypeContains(" << Ty->getDescription() << ", "
1242 << UpRefs[i].second->getDescription() << ") = "
1243 << (TypeContains(Ty, UpRefs[i].second) ? "true" : "false") << "\n");
1244 if (TypeContains(Ty, UpRefs[i].LastContainedTy)) {
1245 // Decrement level of upreference
1246 unsigned Level = --UpRefs[i].NestingLevel;
1247 UpRefs[i].LastContainedTy = Ty;
1248 UR_OUT(" Uplevel Ref Level = " << Level << "\n");
1249 if (Level == 0) { // Upreference should be resolved!
1250 if (!TypeToResolve) {
1251 TypeToResolve = UpRefs[i].UpRefTy;
1253 UR_OUT(" * Resolving upreference for "
1254 << UpRefs[i].second->getDescription() << "\n";
1255 std::string OldName = UpRefs[i].UpRefTy->getDescription());
1256 UpRefs[i].UpRefTy->refineAbstractTypeTo(TypeToResolve);
1257 UR_OUT(" * Type '" << OldName << "' refined upreference to: "
1258 << (const void*)Ty << ", " << Ty->getDescription() << "\n");
1260 UpRefs.erase(UpRefs.begin()+i); // Remove from upreference list...
1261 --i; // Do not skip the next element...
1266 if (TypeToResolve) {
1267 UR_OUT(" * Resolving upreference for "
1268 << UpRefs[i].second->getDescription() << "\n";
1269 std::string OldName = TypeToResolve->getDescription());
1270 TypeToResolve->refineAbstractTypeTo(Ty);
1276 static inline Instruction::TermOps
1277 getTermOp(TermOps op) {
1279 default : assert(0 && "Invalid OldTermOp");
1280 case RetOp : return Instruction::Ret;
1281 case BrOp : return Instruction::Br;
1282 case SwitchOp : return Instruction::Switch;
1283 case InvokeOp : return Instruction::Invoke;
1284 case UnwindOp : return Instruction::Unwind;
1285 case UnreachableOp: return Instruction::Unreachable;
1289 static inline Instruction::BinaryOps
1290 getBinaryOp(BinaryOps op, const Type *Ty, Signedness Sign) {
1292 default : assert(0 && "Invalid OldBinaryOps");
1298 case SetGT : assert(0 && "Should use getCompareOp");
1299 case AddOp : return Instruction::Add;
1300 case SubOp : return Instruction::Sub;
1301 case MulOp : return Instruction::Mul;
1303 // This is an obsolete instruction so we must upgrade it based on the
1304 // types of its operands.
1305 bool isFP = Ty->isFloatingPoint();
1306 if (const PackedType* PTy = dyn_cast<PackedType>(Ty))
1307 // If its a packed type we want to use the element type
1308 isFP = PTy->getElementType()->isFloatingPoint();
1310 return Instruction::FDiv;
1311 else if (Sign == Signed)
1312 return Instruction::SDiv;
1313 return Instruction::UDiv;
1315 case UDivOp : return Instruction::UDiv;
1316 case SDivOp : return Instruction::SDiv;
1317 case FDivOp : return Instruction::FDiv;
1319 // This is an obsolete instruction so we must upgrade it based on the
1320 // types of its operands.
1321 bool isFP = Ty->isFloatingPoint();
1322 if (const PackedType* PTy = dyn_cast<PackedType>(Ty))
1323 // If its a packed type we want to use the element type
1324 isFP = PTy->getElementType()->isFloatingPoint();
1325 // Select correct opcode
1327 return Instruction::FRem;
1328 else if (Sign == Signed)
1329 return Instruction::SRem;
1330 return Instruction::URem;
1332 case URemOp : return Instruction::URem;
1333 case SRemOp : return Instruction::SRem;
1334 case FRemOp : return Instruction::FRem;
1335 case AndOp : return Instruction::And;
1336 case OrOp : return Instruction::Or;
1337 case XorOp : return Instruction::Xor;
1341 static inline Instruction::OtherOps
1342 getCompareOp(BinaryOps op, unsigned short &predicate, const Type* &Ty,
1344 bool isSigned = Sign == Signed;
1345 bool isFP = Ty->isFloatingPoint();
1347 default : assert(0 && "Invalid OldSetCC");
1350 predicate = FCmpInst::FCMP_OEQ;
1351 return Instruction::FCmp;
1353 predicate = ICmpInst::ICMP_EQ;
1354 return Instruction::ICmp;
1358 predicate = FCmpInst::FCMP_UNE;
1359 return Instruction::FCmp;
1361 predicate = ICmpInst::ICMP_NE;
1362 return Instruction::ICmp;
1366 predicate = FCmpInst::FCMP_OLE;
1367 return Instruction::FCmp;
1370 predicate = ICmpInst::ICMP_SLE;
1372 predicate = ICmpInst::ICMP_ULE;
1373 return Instruction::ICmp;
1377 predicate = FCmpInst::FCMP_OGE;
1378 return Instruction::FCmp;
1381 predicate = ICmpInst::ICMP_SGE;
1383 predicate = ICmpInst::ICMP_UGE;
1384 return Instruction::ICmp;
1388 predicate = FCmpInst::FCMP_OLT;
1389 return Instruction::FCmp;
1392 predicate = ICmpInst::ICMP_SLT;
1394 predicate = ICmpInst::ICMP_ULT;
1395 return Instruction::ICmp;
1399 predicate = FCmpInst::FCMP_OGT;
1400 return Instruction::FCmp;
1403 predicate = ICmpInst::ICMP_SGT;
1405 predicate = ICmpInst::ICMP_UGT;
1406 return Instruction::ICmp;
1411 static inline Instruction::MemoryOps getMemoryOp(MemoryOps op) {
1413 default : assert(0 && "Invalid OldMemoryOps");
1414 case MallocOp : return Instruction::Malloc;
1415 case FreeOp : return Instruction::Free;
1416 case AllocaOp : return Instruction::Alloca;
1417 case LoadOp : return Instruction::Load;
1418 case StoreOp : return Instruction::Store;
1419 case GetElementPtrOp : return Instruction::GetElementPtr;
1423 static inline Instruction::OtherOps
1424 getOtherOp(OtherOps op, Signedness Sign) {
1426 default : assert(0 && "Invalid OldOtherOps");
1427 case PHIOp : return Instruction::PHI;
1428 case CallOp : return Instruction::Call;
1429 case ShlOp : return Instruction::Shl;
1432 return Instruction::AShr;
1433 return Instruction::LShr;
1434 case SelectOp : return Instruction::Select;
1435 case UserOp1 : return Instruction::UserOp1;
1436 case UserOp2 : return Instruction::UserOp2;
1437 case VAArg : return Instruction::VAArg;
1438 case ExtractElementOp : return Instruction::ExtractElement;
1439 case InsertElementOp : return Instruction::InsertElement;
1440 case ShuffleVectorOp : return Instruction::ShuffleVector;
1441 case ICmpOp : return Instruction::ICmp;
1442 case FCmpOp : return Instruction::FCmp;
1443 case LShrOp : return Instruction::LShr;
1444 case AShrOp : return Instruction::AShr;
1448 static inline Value*
1449 getCast(CastOps op, Value *Src, Signedness SrcSign, const Type *DstTy,
1450 Signedness DstSign, bool ForceInstruction = false) {
1451 Instruction::CastOps Opcode;
1452 const Type* SrcTy = Src->getType();
1454 if (SrcTy->isFloatingPoint() && isa<PointerType>(DstTy)) {
1455 // fp -> ptr cast is no longer supported but we must upgrade this
1456 // by doing a double cast: fp -> int -> ptr
1457 SrcTy = Type::Int64Ty;
1458 Opcode = Instruction::IntToPtr;
1459 if (isa<Constant>(Src)) {
1460 Src = ConstantExpr::getCast(Instruction::FPToUI,
1461 cast<Constant>(Src), SrcTy);
1463 std::string NewName(makeNameUnique(Src->getName()));
1464 Src = new FPToUIInst(Src, SrcTy, NewName, CurBB);
1466 } else if (isa<IntegerType>(DstTy) &&
1467 cast<IntegerType>(DstTy)->getBitWidth() == 1) {
1468 // cast type %x to bool was previously defined as setne type %x, null
1469 // The cast semantic is now to truncate, not compare so we must retain
1470 // the original intent by replacing the cast with a setne
1471 Constant* Null = Constant::getNullValue(SrcTy);
1472 Instruction::OtherOps Opcode = Instruction::ICmp;
1473 unsigned short predicate = ICmpInst::ICMP_NE;
1474 if (SrcTy->isFloatingPoint()) {
1475 Opcode = Instruction::FCmp;
1476 predicate = FCmpInst::FCMP_ONE;
1477 } else if (!SrcTy->isInteger() && !isa<PointerType>(SrcTy)) {
1478 error("Invalid cast to bool");
1480 if (isa<Constant>(Src) && !ForceInstruction)
1481 return ConstantExpr::getCompare(predicate, cast<Constant>(Src), Null);
1483 return CmpInst::create(Opcode, predicate, Src, Null);
1485 // Determine the opcode to use by calling CastInst::getCastOpcode
1487 CastInst::getCastOpcode(Src, SrcSign == Signed, DstTy, DstSign == Signed);
1489 } else switch (op) {
1490 default: assert(0 && "Invalid cast token");
1491 case TruncOp: Opcode = Instruction::Trunc; break;
1492 case ZExtOp: Opcode = Instruction::ZExt; break;
1493 case SExtOp: Opcode = Instruction::SExt; break;
1494 case FPTruncOp: Opcode = Instruction::FPTrunc; break;
1495 case FPExtOp: Opcode = Instruction::FPExt; break;
1496 case FPToUIOp: Opcode = Instruction::FPToUI; break;
1497 case FPToSIOp: Opcode = Instruction::FPToSI; break;
1498 case UIToFPOp: Opcode = Instruction::UIToFP; break;
1499 case SIToFPOp: Opcode = Instruction::SIToFP; break;
1500 case PtrToIntOp: Opcode = Instruction::PtrToInt; break;
1501 case IntToPtrOp: Opcode = Instruction::IntToPtr; break;
1502 case BitCastOp: Opcode = Instruction::BitCast; break;
1505 if (isa<Constant>(Src) && !ForceInstruction)
1506 return ConstantExpr::getCast(Opcode, cast<Constant>(Src), DstTy);
1507 return CastInst::create(Opcode, Src, DstTy);
1510 static Instruction *
1511 upgradeIntrinsicCall(const Type* RetTy, const ValID &ID,
1512 std::vector<Value*>& Args) {
1514 std::string Name = ID.Type == ValID::NameVal ? ID.Name : "";
1515 if (Name == "llvm.isunordered.f32" || Name == "llvm.isunordered.f64") {
1516 if (Args.size() != 2)
1517 error("Invalid prototype for " + Name + " prototype");
1518 return new FCmpInst(FCmpInst::FCMP_UNO, Args[0], Args[1]);
1520 static unsigned upgradeCount = 1;
1521 const Type* PtrTy = PointerType::get(Type::Int8Ty);
1522 std::vector<const Type*> Params;
1523 if (Name == "llvm.va_start" || Name == "llvm.va_end") {
1524 if (Args.size() != 1)
1525 error("Invalid prototype for " + Name + " prototype");
1526 Params.push_back(PtrTy);
1527 const FunctionType *FTy = FunctionType::get(Type::VoidTy, Params, false);
1528 const PointerType *PFTy = PointerType::get(FTy);
1529 Value* Func = getVal(PFTy, ID);
1530 std::string InstName("va_upgrade");
1531 InstName += llvm::utostr(upgradeCount++);
1532 Args[0] = new BitCastInst(Args[0], PtrTy, InstName, CurBB);
1533 return new CallInst(Func, Args);
1534 } else if (Name == "llvm.va_copy") {
1535 if (Args.size() != 2)
1536 error("Invalid prototype for " + Name + " prototype");
1537 Params.push_back(PtrTy);
1538 Params.push_back(PtrTy);
1539 const FunctionType *FTy = FunctionType::get(Type::VoidTy, Params, false);
1540 const PointerType *PFTy = PointerType::get(FTy);
1541 Value* Func = getVal(PFTy, ID);
1542 std::string InstName0("va_upgrade");
1543 InstName0 += llvm::utostr(upgradeCount++);
1544 std::string InstName1("va_upgrade");
1545 InstName1 += llvm::utostr(upgradeCount++);
1546 Args[0] = new BitCastInst(Args[0], PtrTy, InstName0, CurBB);
1547 Args[1] = new BitCastInst(Args[1], PtrTy, InstName1, CurBB);
1548 return new CallInst(Func, Args);
1554 const Type* upgradeGEPIndices(const Type* PTy,
1555 std::vector<ValueInfo> *Indices,
1556 std::vector<Value*> &VIndices,
1557 std::vector<Constant*> *CIndices = 0) {
1558 // Traverse the indices with a gep_type_iterator so we can build the list
1559 // of constant and value indices for use later. Also perform upgrades
1561 if (CIndices) CIndices->clear();
1562 for (unsigned i = 0, e = Indices->size(); i != e; ++i)
1563 VIndices.push_back((*Indices)[i].V);
1564 generic_gep_type_iterator<std::vector<Value*>::iterator>
1565 GTI = gep_type_begin(PTy, VIndices.begin(), VIndices.end()),
1566 GTE = gep_type_end(PTy, VIndices.begin(), VIndices.end());
1567 for (unsigned i = 0, e = Indices->size(); i != e && GTI != GTE; ++i, ++GTI) {
1568 Value *Index = VIndices[i];
1569 if (CIndices && !isa<Constant>(Index))
1570 error("Indices to constant getelementptr must be constants");
1571 // LLVM 1.2 and earlier used ubyte struct indices. Convert any ubyte
1572 // struct indices to i32 struct indices with ZExt for compatibility.
1573 else if (isa<StructType>(*GTI)) { // Only change struct indices
1574 if (ConstantInt *CUI = dyn_cast<ConstantInt>(Index))
1575 if (CUI->getType()->getBitWidth() == 8)
1577 ConstantExpr::getCast(Instruction::ZExt, CUI, Type::Int32Ty);
1579 // Make sure that unsigned SequentialType indices are zext'd to
1580 // 64-bits if they were smaller than that because LLVM 2.0 will sext
1581 // all indices for SequentialType elements. We must retain the same
1582 // semantic (zext) for unsigned types.
1583 if (const IntegerType *Ity = dyn_cast<IntegerType>(Index->getType()))
1584 if (Ity->getBitWidth() < 64 && (*Indices)[i].S == Unsigned) {
1586 Index = ConstantExpr::getCast(Instruction::ZExt,
1587 cast<Constant>(Index), Type::Int64Ty);
1589 Index = CastInst::create(Instruction::ZExt, Index, Type::Int64Ty,
1590 makeNameUnique("gep_upgrade"), CurBB);
1591 VIndices[i] = Index;
1594 // Add to the CIndices list, if requested.
1596 CIndices->push_back(cast<Constant>(Index));
1600 GetElementPtrInst::getIndexedType(PTy, VIndices, true);
1602 error("Index list invalid for constant getelementptr");
1606 Module* UpgradeAssembly(const std::string &infile, std::istream& in,
1607 bool debug, bool addAttrs)
1610 CurFilename = infile;
1613 AddAttributes = addAttrs;
1614 ObsoleteVarArgs = false;
1617 CurModule.CurrentModule = new Module(CurFilename);
1619 // Check to make sure the parser succeeded
1622 delete ParserResult;
1623 std::cerr << "llvm-upgrade: parse failed.\n";
1627 // Check to make sure that parsing produced a result
1628 if (!ParserResult) {
1629 std::cerr << "llvm-upgrade: no parse result.\n";
1633 // Reset ParserResult variable while saving its value for the result.
1634 Module *Result = ParserResult;
1637 //Not all functions use vaarg, so make a second check for ObsoleteVarArgs
1640 if ((F = Result->getNamedFunction("llvm.va_start"))
1641 && F->getFunctionType()->getNumParams() == 0)
1642 ObsoleteVarArgs = true;
1643 if((F = Result->getNamedFunction("llvm.va_copy"))
1644 && F->getFunctionType()->getNumParams() == 1)
1645 ObsoleteVarArgs = true;
1648 if (ObsoleteVarArgs && NewVarArgs) {
1649 error("This file is corrupt: it uses both new and old style varargs");
1653 if(ObsoleteVarArgs) {
1654 if(Function* F = Result->getNamedFunction("llvm.va_start")) {
1655 if (F->arg_size() != 0) {
1656 error("Obsolete va_start takes 0 argument");
1662 //bar = alloca typeof(foo)
1666 const Type* RetTy = Type::getPrimitiveType(Type::VoidTyID);
1667 const Type* ArgTy = F->getFunctionType()->getReturnType();
1668 const Type* ArgTyPtr = PointerType::get(ArgTy);
1669 Function* NF = cast<Function>(Result->getOrInsertFunction(
1670 "llvm.va_start", RetTy, ArgTyPtr, (Type *)0));
1672 while (!F->use_empty()) {
1673 CallInst* CI = cast<CallInst>(F->use_back());
1674 AllocaInst* bar = new AllocaInst(ArgTy, 0, "vastart.fix.1", CI);
1675 new CallInst(NF, bar, "", CI);
1676 Value* foo = new LoadInst(bar, "vastart.fix.2", CI);
1677 CI->replaceAllUsesWith(foo);
1678 CI->getParent()->getInstList().erase(CI);
1680 Result->getFunctionList().erase(F);
1683 if(Function* F = Result->getNamedFunction("llvm.va_end")) {
1684 if(F->arg_size() != 1) {
1685 error("Obsolete va_end takes 1 argument");
1691 //bar = alloca 1 of typeof(foo)
1693 const Type* RetTy = Type::getPrimitiveType(Type::VoidTyID);
1694 const Type* ArgTy = F->getFunctionType()->getParamType(0);
1695 const Type* ArgTyPtr = PointerType::get(ArgTy);
1696 Function* NF = cast<Function>(Result->getOrInsertFunction(
1697 "llvm.va_end", RetTy, ArgTyPtr, (Type *)0));
1699 while (!F->use_empty()) {
1700 CallInst* CI = cast<CallInst>(F->use_back());
1701 AllocaInst* bar = new AllocaInst(ArgTy, 0, "vaend.fix.1", CI);
1702 new StoreInst(CI->getOperand(1), bar, CI);
1703 new CallInst(NF, bar, "", CI);
1704 CI->getParent()->getInstList().erase(CI);
1706 Result->getFunctionList().erase(F);
1709 if(Function* F = Result->getNamedFunction("llvm.va_copy")) {
1710 if(F->arg_size() != 1) {
1711 error("Obsolete va_copy takes 1 argument");
1716 //a = alloca 1 of typeof(foo)
1717 //b = alloca 1 of typeof(foo)
1722 const Type* RetTy = Type::getPrimitiveType(Type::VoidTyID);
1723 const Type* ArgTy = F->getFunctionType()->getReturnType();
1724 const Type* ArgTyPtr = PointerType::get(ArgTy);
1725 Function* NF = cast<Function>(Result->getOrInsertFunction(
1726 "llvm.va_copy", RetTy, ArgTyPtr, ArgTyPtr, (Type *)0));
1728 while (!F->use_empty()) {
1729 CallInst* CI = cast<CallInst>(F->use_back());
1730 AllocaInst* a = new AllocaInst(ArgTy, 0, "vacopy.fix.1", CI);
1731 AllocaInst* b = new AllocaInst(ArgTy, 0, "vacopy.fix.2", CI);
1732 new StoreInst(CI->getOperand(1), b, CI);
1733 new CallInst(NF, a, b, "", CI);
1734 Value* foo = new LoadInst(a, "vacopy.fix.3", CI);
1735 CI->replaceAllUsesWith(foo);
1736 CI->getParent()->getInstList().erase(CI);
1738 Result->getFunctionList().erase(F);
1745 } // end llvm namespace
1747 using namespace llvm;
1751 /* Enabling traces. */
1756 /* Enabling verbose error messages. */
1757 #ifdef YYERROR_VERBOSE
1758 # undef YYERROR_VERBOSE
1759 # define YYERROR_VERBOSE 1
1761 # define YYERROR_VERBOSE 0
1764 /* Enabling the token table. */
1765 #ifndef YYTOKEN_TABLE
1766 # define YYTOKEN_TABLE 0
1769 #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
1770 #line 1391 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
1771 typedef union YYSTYPE {
1772 llvm::Module *ModuleVal;
1773 llvm::Function *FunctionVal;
1774 std::pair<llvm::PATypeInfo, char*> *ArgVal;
1775 llvm::BasicBlock *BasicBlockVal;
1776 llvm::TerminatorInst *TermInstVal;
1777 llvm::InstrInfo InstVal;
1778 llvm::ConstInfo ConstVal;
1779 llvm::ValueInfo ValueVal;
1780 llvm::PATypeInfo TypeVal;
1781 llvm::TypeInfo PrimType;
1782 llvm::PHIListInfo PHIList;
1783 std::list<llvm::PATypeInfo> *TypeList;
1784 std::vector<llvm::ValueInfo> *ValueList;
1785 std::vector<llvm::ConstInfo> *ConstVector;
1788 std::vector<std::pair<llvm::PATypeInfo,char*> > *ArgList;
1789 // Represent the RHS of PHI node
1790 std::vector<std::pair<llvm::Constant*, llvm::BasicBlock*> > *JumpTable;
1792 llvm::GlobalValue::LinkageTypes Linkage;
1800 char *StrVal; // This memory is strdup'd!
1801 llvm::ValID ValIDVal; // strdup'd memory maybe!
1803 llvm::BinaryOps BinaryOpVal;
1804 llvm::TermOps TermOpVal;
1805 llvm::MemoryOps MemOpVal;
1806 llvm::OtherOps OtherOpVal;
1807 llvm::CastOps CastOpVal;
1808 llvm::ICmpInst::Predicate IPred;
1809 llvm::FCmpInst::Predicate FPred;
1810 llvm::Module::Endianness Endianness;
1812 /* Line 196 of yacc.c. */
1813 #line 1814 "UpgradeParser.tab.c"
1814 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
1815 # define YYSTYPE_IS_DECLARED 1
1816 # define YYSTYPE_IS_TRIVIAL 1
1821 /* Copy the second part of user declarations. */
1824 /* Line 219 of yacc.c. */
1825 #line 1826 "UpgradeParser.tab.c"
1827 #if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
1828 # define YYSIZE_T __SIZE_TYPE__
1830 #if ! defined (YYSIZE_T) && defined (size_t)
1831 # define YYSIZE_T size_t
1833 #if ! defined (YYSIZE_T) && (defined (__STDC__) || defined (__cplusplus))
1834 # include <stddef.h> /* INFRINGES ON USER NAME SPACE */
1835 # define YYSIZE_T size_t
1837 #if ! defined (YYSIZE_T)
1838 # define YYSIZE_T unsigned int
1844 # include <libintl.h> /* INFRINGES ON USER NAME SPACE */
1845 # define YY_(msgid) dgettext ("bison-runtime", msgid)
1849 # define YY_(msgid) msgid
1853 #if ! defined (yyoverflow) || YYERROR_VERBOSE
1855 /* The parser invokes alloca or malloc; define the necessary symbols. */
1857 # ifdef YYSTACK_USE_ALLOCA
1858 # if YYSTACK_USE_ALLOCA
1860 # define YYSTACK_ALLOC __builtin_alloca
1862 # define YYSTACK_ALLOC alloca
1863 # if defined (__STDC__) || defined (__cplusplus)
1864 # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
1865 # define YYINCLUDED_STDLIB_H
1871 # ifdef YYSTACK_ALLOC
1872 /* Pacify GCC's `empty if-body' warning. */
1873 # define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
1874 # ifndef YYSTACK_ALLOC_MAXIMUM
1875 /* The OS might guarantee only one guard page at the bottom of the stack,
1876 and a page size can be as small as 4096 bytes. So we cannot safely
1877 invoke alloca (N) if N exceeds 4096. Use a slightly smaller number
1878 to allow for a few compiler-allocated temporary stack slots. */
1879 # define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2005 */
1882 # define YYSTACK_ALLOC YYMALLOC
1883 # define YYSTACK_FREE YYFREE
1884 # ifndef YYSTACK_ALLOC_MAXIMUM
1885 # define YYSTACK_ALLOC_MAXIMUM ((YYSIZE_T) -1)
1891 # define YYMALLOC malloc
1892 # if (! defined (malloc) && ! defined (YYINCLUDED_STDLIB_H) \
1893 && (defined (__STDC__) || defined (__cplusplus)))
1894 void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
1898 # define YYFREE free
1899 # if (! defined (free) && ! defined (YYINCLUDED_STDLIB_H) \
1900 && (defined (__STDC__) || defined (__cplusplus)))
1901 void free (void *); /* INFRINGES ON USER NAME SPACE */
1908 #endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */
1911 #if (! defined (yyoverflow) \
1912 && (! defined (__cplusplus) \
1913 || (defined (YYSTYPE_IS_TRIVIAL) && YYSTYPE_IS_TRIVIAL)))
1915 /* A type that is properly aligned for any stack member. */
1922 /* The size of the maximum gap between one aligned stack and the next. */
1923 # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
1925 /* The size of an array large to enough to hold all stacks, each with
1927 # define YYSTACK_BYTES(N) \
1928 ((N) * (sizeof (short int) + sizeof (YYSTYPE)) \
1929 + YYSTACK_GAP_MAXIMUM)
1931 /* Copy COUNT objects from FROM to TO. The source and destination do
1934 # if defined (__GNUC__) && 1 < __GNUC__
1935 # define YYCOPY(To, From, Count) \
1936 __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
1938 # define YYCOPY(To, From, Count) \
1942 for (yyi = 0; yyi < (Count); yyi++) \
1943 (To)[yyi] = (From)[yyi]; \
1949 /* Relocate STACK from its old location to the new one. The
1950 local variables YYSIZE and YYSTACKSIZE give the old and new number of
1951 elements in the stack, and YYPTR gives the new location of the
1952 stack. Advance YYPTR to a properly aligned location for the next
1954 # define YYSTACK_RELOCATE(Stack) \
1957 YYSIZE_T yynewbytes; \
1958 YYCOPY (&yyptr->Stack, Stack, yysize); \
1959 Stack = &yyptr->Stack; \
1960 yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
1961 yyptr += yynewbytes / sizeof (*yyptr); \
1967 #if defined (__STDC__) || defined (__cplusplus)
1968 typedef signed char yysigned_char;
1970 typedef short int yysigned_char;
1973 /* YYFINAL -- State number of the termination state. */
1975 /* YYLAST -- Last index in YYTABLE. */
1978 /* YYNTOKENS -- Number of terminals. */
1979 #define YYNTOKENS 166
1980 /* YYNNTS -- Number of nonterminals. */
1982 /* YYNRULES -- Number of rules. */
1983 #define YYNRULES 308
1984 /* YYNRULES -- Number of states. */
1985 #define YYNSTATES 604
1987 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
1988 #define YYUNDEFTOK 2
1989 #define YYMAXUTOK 406
1991 #define YYTRANSLATE(YYX) \
1992 ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
1994 /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
1995 static const unsigned char yytranslate[] =
1997 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1998 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1999 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2000 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2001 155, 156, 164, 2, 153, 2, 2, 2, 2, 2,
2002 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2003 160, 152, 161, 2, 2, 2, 2, 2, 2, 2,
2004 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2005 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2006 2, 157, 154, 159, 2, 2, 2, 2, 2, 165,
2007 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2008 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2009 158, 2, 2, 162, 2, 163, 2, 2, 2, 2,
2010 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2011 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2012 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2013 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2014 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2015 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2016 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2017 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2018 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2019 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2020 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2021 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2022 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
2023 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
2024 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
2025 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
2026 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
2027 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
2028 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
2029 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
2030 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
2031 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
2032 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
2033 105, 106, 107, 108, 109, 110, 111, 112, 113, 114,
2034 115, 116, 117, 118, 119, 120, 121, 122, 123, 124,
2035 125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
2036 135, 136, 137, 138, 139, 140, 141, 142, 143, 144,
2037 145, 146, 147, 148, 149, 150, 151
2041 /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
2043 static const unsigned short int yyprhs[] =
2045 0, 0, 3, 5, 7, 9, 11, 13, 15, 17,
2046 19, 21, 23, 25, 27, 29, 31, 33, 35, 37,
2047 39, 41, 43, 45, 47, 49, 51, 53, 55, 57,
2048 59, 61, 63, 65, 67, 69, 71, 73, 75, 77,
2049 79, 81, 83, 85, 87, 89, 91, 93, 95, 97,
2050 99, 101, 103, 105, 107, 109, 111, 113, 115, 117,
2051 119, 121, 123, 125, 127, 129, 131, 133, 135, 137,
2052 139, 141, 143, 145, 147, 149, 151, 153, 155, 157,
2053 159, 161, 164, 165, 167, 169, 171, 173, 175, 177,
2054 179, 180, 181, 183, 185, 187, 189, 191, 193, 196,
2055 197, 200, 201, 205, 208, 209, 211, 212, 216, 218,
2056 221, 223, 225, 227, 229, 231, 233, 235, 237, 239,
2057 241, 243, 245, 247, 249, 251, 253, 255, 257, 259,
2058 261, 264, 269, 275, 281, 285, 288, 294, 299, 302,
2059 304, 308, 310, 314, 316, 317, 322, 326, 330, 335,
2060 340, 344, 351, 357, 360, 363, 366, 369, 372, 375,
2061 378, 381, 384, 387, 394, 400, 409, 416, 423, 430,
2062 438, 446, 453, 460, 469, 478, 482, 484, 486, 488,
2063 490, 493, 496, 501, 504, 506, 511, 514, 519, 520,
2064 528, 529, 537, 538, 546, 547, 555, 559, 564, 565,
2065 567, 569, 571, 575, 579, 583, 587, 591, 595, 597,
2066 598, 600, 602, 604, 605, 608, 612, 614, 616, 620,
2067 622, 623, 632, 634, 636, 640, 642, 644, 647, 648,
2068 650, 652, 653, 658, 659, 661, 663, 665, 667, 669,
2069 671, 673, 675, 677, 681, 683, 689, 691, 693, 695,
2070 697, 700, 703, 706, 710, 713, 714, 716, 718, 720,
2071 723, 726, 730, 740, 750, 759, 773, 775, 777, 784,
2072 790, 793, 800, 808, 810, 814, 816, 817, 820, 822,
2073 828, 834, 840, 847, 854, 857, 862, 867, 874, 879,
2074 884, 889, 894, 901, 908, 911, 919, 921, 924, 925,
2075 927, 928, 932, 939, 943, 950, 953, 958, 965
2078 /* YYRHS -- A `-1'-separated list of the rules' RHS. */
2079 static const short int yyrhs[] =
2081 200, 0, -1, 5, -1, 6, -1, 3, -1, 4,
2082 -1, 79, -1, 80, -1, 81, -1, 82, -1, 83,
2083 -1, 84, -1, 85, -1, 86, -1, 87, -1, 88,
2084 -1, 89, -1, 90, -1, 91, -1, 92, -1, 93,
2085 -1, 94, -1, 95, -1, 96, -1, 97, -1, 98,
2086 -1, 119, -1, 120, -1, 121, -1, 122, -1, 123,
2087 -1, 124, -1, 125, -1, 126, -1, 127, -1, 128,
2088 -1, 129, -1, 130, -1, 131, -1, 132, -1, 133,
2089 -1, 134, -1, 135, -1, 136, -1, 137, -1, 138,
2090 -1, 125, -1, 126, -1, 127, -1, 128, -1, 27,
2091 -1, 28, -1, 109, -1, 110, -1, 111, -1, 112,
2092 -1, 140, -1, 141, -1, 142, -1, 143, -1, 144,
2093 -1, 145, -1, 146, -1, 147, -1, 148, -1, 149,
2094 -1, 150, -1, 151, -1, 139, -1, 16, -1, 14,
2095 -1, 12, -1, 10, -1, 17, -1, 15, -1, 13,
2096 -1, 11, -1, 176, -1, 177, -1, 18, -1, 19,
2097 -1, 212, 152, -1, -1, 41, -1, 42, -1, 43,
2098 -1, 44, -1, 45, -1, 46, -1, 47, -1, -1,
2099 -1, 65, -1, 66, -1, 67, -1, 68, -1, 69,
2100 -1, 70, -1, 64, 4, -1, -1, 57, 4, -1,
2101 -1, 153, 57, 4, -1, 34, 24, -1, -1, 185,
2102 -1, -1, 153, 188, 187, -1, 185, -1, 57, 4,
2103 -1, 191, -1, 8, -1, 193, -1, 8, -1, 193,
2104 -1, 9, -1, 10, -1, 11, -1, 12, -1, 13,
2105 -1, 14, -1, 15, -1, 16, -1, 17, -1, 18,
2106 -1, 19, -1, 21, -1, 192, -1, 48, -1, 227,
2107 -1, 154, 4, -1, 190, 155, 195, 156, -1, 157,
2108 4, 158, 193, 159, -1, 160, 4, 158, 193, 161,
2109 -1, 162, 194, 163, -1, 162, 163, -1, 160, 162,
2110 194, 163, 161, -1, 160, 162, 163, 161, -1, 193,
2111 164, -1, 193, -1, 194, 153, 193, -1, 194, -1,
2112 194, 153, 37, -1, 37, -1, -1, 191, 157, 198,
2113 159, -1, 191, 157, 159, -1, 191, 165, 24, -1,
2114 191, 160, 198, 161, -1, 191, 162, 198, 163, -1,
2115 191, 162, 163, -1, 191, 160, 162, 198, 163, 161,
2116 -1, 191, 160, 162, 163, 161, -1, 191, 38, -1,
2117 191, 39, -1, 191, 227, -1, 191, 197, -1, 191,
2118 26, -1, 176, 168, -1, 177, 4, -1, 9, 27,
2119 -1, 9, 28, -1, 179, 7, -1, 175, 155, 196,
2120 36, 191, 156, -1, 106, 155, 196, 242, 156, -1,
2121 108, 155, 196, 153, 196, 153, 196, 156, -1, 169,
2122 155, 196, 153, 196, 156, -1, 170, 155, 196, 153,
2123 196, 156, -1, 171, 155, 196, 153, 196, 156, -1,
2124 99, 172, 155, 196, 153, 196, 156, -1, 100, 173,
2125 155, 196, 153, 196, 156, -1, 174, 155, 196, 153,
2126 196, 156, -1, 114, 155, 196, 153, 196, 156, -1,
2127 115, 155, 196, 153, 196, 153, 196, 156, -1, 116,
2128 155, 196, 153, 196, 153, 196, 156, -1, 198, 153,
2129 196, -1, 196, -1, 32, -1, 33, -1, 201, -1,
2130 201, 221, -1, 201, 223, -1, 201, 62, 61, 207,
2131 -1, 201, 25, -1, 202, -1, 202, 180, 20, 189,
2132 -1, 202, 223, -1, 202, 62, 61, 207, -1, -1,
2133 202, 180, 181, 199, 196, 203, 187, -1, -1, 202,
2134 180, 50, 199, 191, 204, 187, -1, -1, 202, 180,
2135 45, 199, 191, 205, 187, -1, -1, 202, 180, 47,
2136 199, 191, 206, 187, -1, 202, 51, 209, -1, 202,
2137 58, 152, 210, -1, -1, 24, -1, 56, -1, 55,
2138 -1, 53, 152, 208, -1, 54, 152, 4, -1, 52,
2139 152, 24, -1, 71, 152, 24, -1, 157, 211, 159,
2140 -1, 211, 153, 24, -1, 24, -1, -1, 22, -1,
2141 24, -1, 212, -1, -1, 191, 213, -1, 215, 153,
2142 214, -1, 214, -1, 215, -1, 215, 153, 37, -1,
2143 37, -1, -1, 182, 189, 212, 155, 216, 156, 186,
2144 183, -1, 29, -1, 162, -1, 181, 217, 218, -1,
2145 30, -1, 163, -1, 230, 220, -1, -1, 45, -1,
2146 47, -1, -1, 31, 224, 222, 217, -1, -1, 63,
2147 -1, 3, -1, 4, -1, 7, -1, 27, -1, 28,
2148 -1, 38, -1, 39, -1, 26, -1, 160, 198, 161,
2149 -1, 197, -1, 61, 225, 24, 153, 24, -1, 167,
2150 -1, 212, -1, 227, -1, 226, -1, 191, 228, -1,
2151 230, 231, -1, 219, 231, -1, 232, 180, 234, -1,
2152 232, 236, -1, -1, 23, -1, 77, -1, 78, -1,
2153 72, 229, -1, 72, 8, -1, 73, 21, 228, -1,
2154 73, 9, 228, 153, 21, 228, 153, 21, 228, -1,
2155 74, 178, 228, 153, 21, 228, 157, 235, 159, -1,
2156 74, 178, 228, 153, 21, 228, 157, 159, -1, 75,
2157 182, 189, 228, 155, 239, 156, 36, 21, 228, 233,
2158 21, 228, -1, 233, -1, 76, -1, 235, 178, 226,
2159 153, 21, 228, -1, 178, 226, 153, 21, 228, -1,
2160 180, 241, -1, 191, 157, 228, 153, 228, 159, -1,
2161 237, 153, 157, 228, 153, 228, 159, -1, 229, -1,
2162 238, 153, 229, -1, 238, -1, -1, 60, 59, -1,
2163 59, -1, 169, 191, 228, 153, 228, -1, 170, 191,
2164 228, 153, 228, -1, 171, 191, 228, 153, 228, -1,
2165 99, 172, 191, 228, 153, 228, -1, 100, 173, 191,
2166 228, 153, 228, -1, 49, 229, -1, 174, 229, 153,
2167 229, -1, 175, 229, 36, 191, -1, 108, 229, 153,
2168 229, 153, 229, -1, 113, 229, 153, 191, -1, 117,
2169 229, 153, 191, -1, 118, 229, 153, 191, -1, 114,
2170 229, 153, 229, -1, 115, 229, 153, 229, 153, 229,
2171 -1, 116, 229, 153, 229, 153, 229, -1, 107, 237,
2172 -1, 240, 182, 189, 228, 155, 239, 156, -1, 244,
2173 -1, 153, 238, -1, -1, 35, -1, -1, 101, 191,
2174 184, -1, 101, 191, 153, 15, 228, 184, -1, 102,
2175 191, 184, -1, 102, 191, 153, 15, 228, 184, -1,
2176 103, 229, -1, 243, 104, 191, 228, -1, 243, 105,
2177 229, 153, 191, 228, -1, 106, 191, 228, 242, -1
2180 /* YYRLINE[YYN] -- source line where rule number YYN was defined. */
2181 static const unsigned short int yyrline[] =
2183 0, 1531, 1531, 1532, 1540, 1541, 1551, 1551, 1551, 1551,
2184 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1555, 1555, 1555,
2185 1559, 1559, 1559, 1559, 1559, 1559, 1563, 1563, 1564, 1564,
2186 1565, 1565, 1566, 1566, 1567, 1567, 1571, 1571, 1572, 1572,
2187 1573, 1573, 1574, 1574, 1575, 1575, 1576, 1576, 1577, 1577,
2188 1578, 1579, 1582, 1582, 1582, 1582, 1586, 1586, 1586, 1586,
2189 1586, 1586, 1586, 1587, 1587, 1587, 1587, 1587, 1587, 1593,
2190 1593, 1593, 1593, 1597, 1597, 1597, 1597, 1601, 1601, 1605,
2191 1605, 1610, 1613, 1618, 1619, 1620, 1621, 1622, 1623, 1624,
2192 1625, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1646,
2193 1647, 1655, 1656, 1664, 1673, 1674, 1681, 1682, 1686, 1690,
2194 1706, 1707, 1714, 1715, 1722, 1730, 1730, 1730, 1730, 1730,
2195 1730, 1730, 1731, 1731, 1731, 1731, 1731, 1736, 1740, 1744,
2196 1749, 1758, 1774, 1780, 1793, 1802, 1806, 1817, 1821, 1834,
2197 1838, 1845, 1846, 1852, 1859, 1871, 1901, 1914, 1937, 1965,
2198 1987, 1998, 2020, 2031, 2040, 2045, 2103, 2110, 2118, 2125,
2199 2132, 2136, 2140, 2149, 2164, 2177, 2186, 2214, 2227, 2236,
2200 2242, 2248, 2257, 2263, 2269, 2280, 2281, 2290, 2291, 2303,
2201 2312, 2313, 2314, 2315, 2316, 2332, 2352, 2354, 2356, 2356,
2202 2363, 2363, 2370, 2370, 2377, 2377, 2385, 2387, 2389, 2394,
2203 2408, 2409, 2413, 2416, 2424, 2428, 2435, 2439, 2443, 2447,
2204 2455, 2455, 2459, 2460, 2464, 2472, 2477, 2485, 2486, 2493,
2205 2500, 2504, 2610, 2610, 2614, 2624, 2624, 2628, 2632, 2634,
2206 2635, 2639, 2639, 2651, 2652, 2657, 2658, 2659, 2660, 2661,
2207 2662, 2663, 2664, 2665, 2686, 2689, 2704, 2705, 2710, 2710,
2208 2718, 2727, 2730, 2739, 2749, 2754, 2763, 2774, 2774, 2777,
2209 2780, 2783, 2787, 2793, 2808, 2814, 2865, 2868, 2874, 2884,
2210 2897, 2926, 2934, 2942, 2946, 2953, 2954, 2958, 2961, 2967,
2211 2984, 3000, 3014, 3026, 3038, 3049, 3058, 3067, 3076, 3083,
2212 3104, 3128, 3134, 3140, 3146, 3162, 3235, 3243, 3244, 3248,
2213 3249, 3253, 3259, 3265, 3271, 3277, 3284, 3296, 3310
2217 #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
2218 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
2219 First, the terminals, then, starting at YYNTOKENS, nonterminals. */
2220 static const char *const yytname[] =
2222 "$end", "error", "$undefined", "ESINT64VAL", "EUINT64VAL", "SINTVAL",
2223 "UINTVAL", "FPVAL", "VOID", "BOOL", "SBYTE", "UBYTE", "SHORT", "USHORT",
2224 "INT", "UINT", "LONG", "ULONG", "FLOAT", "DOUBLE", "TYPE", "LABEL",
2225 "VAR_ID", "LABELSTR", "STRINGCONSTANT", "IMPLEMENTATION",
2226 "ZEROINITIALIZER", "TRUETOK", "FALSETOK", "BEGINTOK", "ENDTOK",
2227 "DECLARE", "GLOBAL", "CONSTANT", "SECTION", "VOLATILE", "TO",
2228 "DOTDOTDOT", "NULL_TOK", "UNDEF", "CONST", "INTERNAL", "LINKONCE",
2229 "WEAK", "APPENDING", "DLLIMPORT", "DLLEXPORT", "EXTERN_WEAK", "OPAQUE",
2230 "NOT", "EXTERNAL", "TARGET", "TRIPLE", "ENDIAN", "POINTERSIZE", "LITTLE",
2231 "BIG", "ALIGN", "DEPLIBS", "CALL", "TAIL", "ASM_TOK", "MODULE",
2232 "SIDEEFFECT", "CC_TOK", "CCC_TOK", "CSRETCC_TOK", "FASTCC_TOK",
2233 "COLDCC_TOK", "X86_STDCALLCC_TOK", "X86_FASTCALLCC_TOK", "DATALAYOUT",
2234 "RET", "BR", "SWITCH", "INVOKE", "UNREACHABLE", "UNWIND", "EXCEPT",
2235 "ADD", "SUB", "MUL", "DIV", "UDIV", "SDIV", "FDIV", "REM", "UREM",
2236 "SREM", "FREM", "AND", "OR", "XOR", "SETLE", "SETGE", "SETLT", "SETGT",
2237 "SETEQ", "SETNE", "ICMP", "FCMP", "MALLOC", "ALLOCA", "FREE", "LOAD",
2238 "STORE", "GETELEMENTPTR", "PHI_TOK", "SELECT", "SHL", "SHR", "ASHR",
2239 "LSHR", "VAARG", "EXTRACTELEMENT", "INSERTELEMENT", "SHUFFLEVECTOR",
2240 "VAARG_old", "VANEXT_old", "EQ", "NE", "SLT", "SGT", "SLE", "SGE", "ULT",
2241 "UGT", "ULE", "UGE", "OEQ", "ONE", "OLT", "OGT", "OLE", "OGE", "ORD",
2242 "UNO", "UEQ", "UNE", "CAST", "TRUNC", "ZEXT", "SEXT", "FPTRUNC", "FPEXT",
2243 "FPTOUI", "FPTOSI", "UITOFP", "SITOFP", "PTRTOINT", "INTTOPTR",
2244 "BITCAST", "'='", "','", "'\\\\'", "'('", "')'", "'['", "'x'", "']'",
2245 "'<'", "'>'", "'{'", "'}'", "'*'", "'c'", "$accept", "INTVAL",
2246 "EINT64VAL", "ArithmeticOps", "LogicalOps", "SetCondOps", "IPredicates",
2247 "FPredicates", "ShiftOps", "CastOps", "SIntType", "UIntType", "IntType",
2248 "FPType", "OptAssign", "OptLinkage", "OptCallingConv", "OptAlign",
2249 "OptCAlign", "SectionString", "OptSection", "GlobalVarAttributes",
2250 "GlobalVarAttribute", "TypesV", "UpRTypesV", "Types", "PrimType",
2251 "UpRTypes", "TypeListI", "ArgTypeListI", "ConstVal", "ConstExpr",
2252 "ConstVector", "GlobalType", "Module", "FunctionList", "ConstPool", "@1",
2253 "@2", "@3", "@4", "AsmBlock", "BigOrLittle", "TargetDefinition",
2254 "LibrariesDefinition", "LibList", "Name", "OptName", "ArgVal",
2255 "ArgListH", "ArgList", "FunctionHeaderH", "BEGIN", "FunctionHeader",
2256 "END", "Function", "FnDeclareLinkage", "FunctionProto", "@5",
2257 "OptSideEffect", "ConstValueRef", "SymbolicValueRef", "ValueRef",
2258 "ResolvedVal", "BasicBlockList", "BasicBlock", "InstructionList",
2259 "Unwind", "BBTerminatorInst", "JumpTable", "Inst", "PHIList",
2260 "ValueRefList", "ValueRefListE", "OptTailCall", "InstVal", "IndexList",
2261 "OptVolatile", "MemoryInst", 0
2266 /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
2268 static const unsigned short int yytoknum[] =
2270 0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
2271 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
2272 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
2273 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
2274 295, 296, 297, 298, 299, 300, 301, 302, 303, 304,
2275 305, 306, 307, 308, 309, 310, 311, 312, 313, 314,
2276 315, 316, 317, 318, 319, 320, 321, 322, 323, 324,
2277 325, 326, 327, 328, 329, 330, 331, 332, 333, 334,
2278 335, 336, 337, 338, 339, 340, 341, 342, 343, 344,
2279 345, 346, 347, 348, 349, 350, 351, 352, 353, 354,
2280 355, 356, 357, 358, 359, 360, 361, 362, 363, 364,
2281 365, 366, 367, 368, 369, 370, 371, 372, 373, 374,
2282 375, 376, 377, 378, 379, 380, 381, 382, 383, 384,
2283 385, 386, 387, 388, 389, 390, 391, 392, 393, 394,
2284 395, 396, 397, 398, 399, 400, 401, 402, 403, 404,
2285 405, 406, 61, 44, 92, 40, 41, 91, 120, 93,
2286 60, 62, 123, 125, 42, 99
2290 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
2291 static const unsigned char yyr1[] =
2293 0, 166, 167, 167, 168, 168, 169, 169, 169, 169,
2294 169, 169, 169, 169, 169, 169, 169, 170, 170, 170,
2295 171, 171, 171, 171, 171, 171, 172, 172, 172, 172,
2296 172, 172, 172, 172, 172, 172, 173, 173, 173, 173,
2297 173, 173, 173, 173, 173, 173, 173, 173, 173, 173,
2298 173, 173, 174, 174, 174, 174, 175, 175, 175, 175,
2299 175, 175, 175, 175, 175, 175, 175, 175, 175, 176,
2300 176, 176, 176, 177, 177, 177, 177, 178, 178, 179,
2301 179, 180, 180, 181, 181, 181, 181, 181, 181, 181,
2302 181, 182, 182, 182, 182, 182, 182, 182, 182, 183,
2303 183, 184, 184, 185, 186, 186, 187, 187, 188, 188,
2304 189, 189, 190, 190, 191, 192, 192, 192, 192, 192,
2305 192, 192, 192, 192, 192, 192, 192, 193, 193, 193,
2306 193, 193, 193, 193, 193, 193, 193, 193, 193, 194,
2307 194, 195, 195, 195, 195, 196, 196, 196, 196, 196,
2308 196, 196, 196, 196, 196, 196, 196, 196, 196, 196,
2309 196, 196, 196, 197, 197, 197, 197, 197, 197, 197,
2310 197, 197, 197, 197, 197, 198, 198, 199, 199, 200,
2311 201, 201, 201, 201, 201, 202, 202, 202, 203, 202,
2312 204, 202, 205, 202, 206, 202, 202, 202, 202, 207,
2313 208, 208, 209, 209, 209, 209, 210, 211, 211, 211,
2314 212, 212, 213, 213, 214, 215, 215, 216, 216, 216,
2315 216, 217, 218, 218, 219, 220, 220, 221, 222, 222,
2316 222, 224, 223, 225, 225, 226, 226, 226, 226, 226,
2317 226, 226, 226, 226, 226, 226, 227, 227, 228, 228,
2318 229, 230, 230, 231, 232, 232, 232, 233, 233, 234,
2319 234, 234, 234, 234, 234, 234, 234, 234, 235, 235,
2320 236, 237, 237, 238, 238, 239, 239, 240, 240, 241,
2321 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
2322 241, 241, 241, 241, 241, 241, 241, 242, 242, 243,
2323 243, 244, 244, 244, 244, 244, 244, 244, 244
2326 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
2327 static const unsigned char yyr2[] =
2329 0, 2, 1, 1, 1, 1, 1, 1, 1, 1,
2330 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2331 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2332 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2333 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2334 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2335 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2336 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2337 1, 2, 0, 1, 1, 1, 1, 1, 1, 1,
2338 0, 0, 1, 1, 1, 1, 1, 1, 2, 0,
2339 2, 0, 3, 2, 0, 1, 0, 3, 1, 2,
2340 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2341 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2342 2, 4, 5, 5, 3, 2, 5, 4, 2, 1,
2343 3, 1, 3, 1, 0, 4, 3, 3, 4, 4,
2344 3, 6, 5, 2, 2, 2, 2, 2, 2, 2,
2345 2, 2, 2, 6, 5, 8, 6, 6, 6, 7,
2346 7, 6, 6, 8, 8, 3, 1, 1, 1, 1,
2347 2, 2, 4, 2, 1, 4, 2, 4, 0, 7,
2348 0, 7, 0, 7, 0, 7, 3, 4, 0, 1,
2349 1, 1, 3, 3, 3, 3, 3, 3, 1, 0,
2350 1, 1, 1, 0, 2, 3, 1, 1, 3, 1,
2351 0, 8, 1, 1, 3, 1, 1, 2, 0, 1,
2352 1, 0, 4, 0, 1, 1, 1, 1, 1, 1,
2353 1, 1, 1, 3, 1, 5, 1, 1, 1, 1,
2354 2, 2, 2, 3, 2, 0, 1, 1, 1, 2,
2355 2, 3, 9, 9, 8, 13, 1, 1, 6, 5,
2356 2, 6, 7, 1, 3, 1, 0, 2, 1, 5,
2357 5, 5, 6, 6, 2, 4, 4, 6, 4, 4,
2358 4, 4, 6, 6, 2, 7, 1, 2, 0, 1,
2359 0, 3, 6, 3, 6, 2, 4, 6, 4
2362 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
2363 STATE-NUM when YYTABLE doesn't specify something else to do. Zero
2364 means the default is an error. */
2365 static const unsigned short int yydefact[] =
2367 198, 0, 90, 184, 1, 183, 231, 83, 84, 85,
2368 86, 87, 88, 89, 0, 91, 255, 180, 181, 255,
2369 210, 211, 0, 0, 0, 90, 0, 186, 228, 0,
2370 0, 92, 93, 94, 95, 96, 97, 0, 0, 256,
2371 252, 82, 225, 226, 227, 251, 0, 0, 0, 0,
2372 196, 0, 0, 0, 0, 0, 0, 0, 81, 229,
2373 230, 91, 199, 182, 98, 2, 3, 111, 115, 116,
2374 117, 118, 119, 120, 121, 122, 123, 124, 125, 126,
2375 128, 0, 0, 0, 0, 246, 0, 0, 110, 127,
2376 114, 247, 129, 222, 223, 224, 300, 254, 0, 0,
2377 0, 0, 209, 197, 187, 185, 177, 178, 0, 0,
2378 0, 0, 232, 130, 0, 0, 0, 113, 135, 139,
2379 0, 0, 144, 138, 299, 0, 278, 0, 0, 0,
2380 0, 91, 267, 257, 258, 6, 7, 8, 9, 10,
2381 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
2382 21, 22, 23, 24, 25, 0, 0, 0, 0, 0,
2383 0, 0, 0, 52, 53, 54, 55, 0, 0, 0,
2384 0, 0, 0, 68, 56, 57, 58, 59, 60, 61,
2385 62, 63, 64, 65, 66, 67, 0, 0, 0, 0,
2386 0, 266, 253, 91, 270, 0, 296, 204, 201, 200,
2387 202, 203, 205, 208, 0, 192, 194, 190, 115, 116,
2388 117, 118, 119, 120, 121, 122, 123, 124, 125, 0,
2389 0, 0, 0, 188, 0, 0, 0, 0, 0, 134,
2390 220, 143, 141, 0, 0, 284, 277, 260, 259, 0,
2391 0, 72, 76, 71, 75, 70, 74, 69, 73, 77,
2392 78, 0, 0, 26, 27, 28, 29, 30, 31, 32,
2393 33, 34, 35, 0, 50, 51, 46, 47, 48, 49,
2394 36, 37, 38, 39, 40, 41, 42, 43, 44, 45,
2395 0, 101, 101, 305, 0, 0, 294, 0, 0, 0,
2396 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2397 0, 0, 0, 206, 106, 106, 106, 160, 161, 4,
2398 5, 158, 159, 162, 157, 153, 154, 0, 0, 0,
2399 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2400 0, 0, 0, 156, 155, 106, 112, 112, 137, 0,
2401 140, 219, 213, 216, 217, 0, 0, 131, 235, 236,
2402 237, 242, 238, 239, 240, 241, 233, 0, 244, 249,
2403 248, 250, 0, 261, 0, 0, 0, 0, 0, 301,
2404 0, 303, 298, 0, 0, 0, 0, 0, 0, 0,
2405 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2406 207, 0, 193, 195, 191, 0, 0, 0, 0, 0,
2407 0, 0, 146, 176, 0, 0, 0, 150, 0, 147,
2408 0, 0, 0, 0, 0, 189, 132, 133, 136, 212,
2409 214, 0, 104, 142, 234, 0, 0, 0, 0, 0,
2410 0, 0, 0, 0, 0, 0, 308, 0, 0, 0,
2411 288, 291, 0, 0, 289, 290, 0, 0, 0, 285,
2412 286, 0, 306, 0, 0, 0, 108, 106, 0, 0,
2413 298, 0, 0, 0, 0, 0, 145, 135, 114, 0,
2414 148, 149, 0, 0, 0, 0, 0, 218, 215, 105,
2415 99, 0, 243, 0, 0, 276, 0, 0, 101, 102,
2416 101, 273, 297, 0, 0, 0, 0, 0, 279, 280,
2417 281, 276, 0, 103, 109, 107, 0, 0, 0, 0,
2418 0, 0, 0, 175, 152, 0, 0, 0, 0, 0,
2419 0, 0, 221, 0, 0, 0, 275, 0, 282, 283,
2420 0, 302, 304, 0, 0, 0, 287, 292, 293, 0,
2421 307, 0, 0, 164, 0, 0, 0, 0, 151, 0,
2422 0, 0, 0, 0, 100, 245, 0, 0, 0, 274,
2423 271, 0, 295, 0, 0, 0, 172, 0, 0, 166,
2424 167, 168, 171, 163, 0, 264, 0, 0, 0, 272,
2425 169, 170, 0, 0, 0, 262, 0, 263, 0, 0,
2426 165, 173, 174, 0, 0, 0, 0, 0, 0, 269,
2430 /* YYDEFGOTO[NTERM-NUM]. */
2431 static const short int yydefgoto[] =
2433 -1, 85, 311, 328, 329, 330, 263, 280, 331, 332,
2434 219, 220, 251, 221, 25, 15, 37, 522, 369, 456,
2435 480, 392, 457, 86, 87, 222, 89, 90, 120, 233,
2436 403, 358, 404, 108, 1, 2, 3, 335, 306, 304,
2437 305, 63, 200, 50, 103, 204, 91, 420, 343, 344,
2438 345, 38, 95, 16, 44, 17, 61, 18, 28, 425,
2439 359, 92, 361, 491, 19, 40, 41, 191, 192, 577,
2440 97, 286, 526, 527, 193, 194, 436, 195, 196
2443 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
2445 #define YYPACT_NINF -508
2446 static const short int yypact[] =
2448 -508, 18, 144, 546, -508, -508, -508, -508, -508, -508,
2449 -508, -508, -508, -508, 2, 152, 47, -508, -508, -15,
2450 -508, -508, -30, -75, 29, 69, -10, -508, 98, 104,
2451 151, -508, -508, -508, -508, -508, -508, 1307, -8, -508,
2452 -508, 149, -508, -508, -508, -508, 11, 20, 22, 24,
2453 -508, 27, 104, 1307, 0, 0, 0, 0, -508, -508,
2454 -508, 152, -508, -508, -508, -508, -508, 37, -508, -508,
2455 -508, -508, -508, -508, -508, -508, -508, -508, -508, -508,
2456 -508, 194, 200, 3, 695, -508, 149, 54, -508, -508,
2457 -81, -508, -508, -508, -508, -508, 1561, -508, 186, -19,
2458 210, 188, 203, -508, -508, -508, -508, -508, 1368, 1368,
2459 1368, 1409, -508, -508, 66, 70, 715, -508, -508, -81,
2460 -85, 75, 781, -508, -508, 1368, -508, 172, 1429, 58,
2461 255, 152, -508, -508, -508, -508, -508, -508, -508, -508,
2462 -508, -508, -508, -508, -508, -508, -508, -508, -508, -508,
2463 -508, -508, -508, -508, -508, 208, 394, 1368, 1368, 1368,
2464 1368, 1368, 1368, -508, -508, -508, -508, 1368, 1368, 1368,
2465 1368, 1368, 1368, -508, -508, -508, -508, -508, -508, -508,
2466 -508, -508, -508, -508, -508, -508, 1368, 1368, 1368, 1368,
2467 1368, -508, -508, 152, -508, 55, -508, -508, -508, -508,
2468 -508, -508, -508, -508, -50, -508, -508, -508, 153, 179,
2469 228, 191, 229, 193, 230, 197, 231, 233, 234, 199,
2470 232, 235, 537, -508, 1368, 1368, 84, -45, 1368, -508,
2471 1149, -508, 93, 91, 898, -508, -508, 37, -508, 898,
2472 898, -508, -508, -508, -508, -508, -508, -508, -508, -508,
2473 -508, 898, 1307, -508, -508, -508, -508, -508, -508, -508,
2474 -508, -508, -508, 1368, -508, -508, -508, -508, -508, -508,
2475 -508, -508, -508, -508, -508, -508, -508, -508, -508, -508,
2476 1368, 95, 96, -508, 898, 99, 97, 105, 106, 107,
2477 120, 123, 126, 127, 898, 898, 898, 128, 221, 1307,
2478 1368, 1368, 258, -508, 132, 132, 132, -508, -508, -508,
2479 -508, -508, -508, -508, -508, -508, -508, 208, 394, 131,
2480 134, 135, 136, 137, 1190, 1470, 736, 259, 139, 140,
2481 141, 142, 148, -508, -508, 132, -130, -23, -508, 143,
2482 -81, -508, 149, -508, 155, 154, 1210, -508, -508, -508,
2483 -508, -508, -508, -508, -508, -508, 224, 1409, -508, -508,
2484 -508, -508, 156, -508, 163, 898, 898, 898, 4, -508,
2485 5, -508, 164, 898, 162, 1368, 1368, 1368, 1368, 1368,
2486 1368, 1368, 167, 168, 169, 1368, 1368, 898, 898, 170,
2487 -508, -17, -508, -508, -508, 150, 182, 1409, 1409, 1409,
2488 1409, 1409, -508, -508, -13, 756, -24, -508, -36, -508,
2489 1409, 1409, 1409, 1409, 1409, -508, -508, -508, -508, -508,
2490 -508, 1251, 290, -508, -508, 301, -14, 324, 325, 198,
2491 201, 202, 898, 348, 898, 1368, -508, 204, 898, 205,
2492 -508, -508, 211, 214, -508, -508, 898, 898, 898, -508,
2493 -508, 213, -508, 1368, 332, 365, -508, 132, 1409, 1409,
2494 164, 217, 222, 223, 225, 1409, -508, 216, -71, -27,
2495 -508, -508, 226, 236, 237, 240, 338, -508, -508, -508,
2496 326, 241, -508, 898, 898, 1368, 898, 898, 242, -508,
2497 242, -508, 243, 898, 244, 1368, 1368, 1368, -508, -508,
2498 -508, 1368, 898, -508, -508, -508, 246, 247, 245, 1409,
2499 1409, 1409, 1409, -508, -508, 220, 1409, 1409, 1409, 1409,
2500 1368, 378, -508, 361, 249, 248, 243, 250, -508, -508,
2501 329, -508, -508, 1368, 256, 898, -508, -508, -508, 251,
2502 -508, 1409, 1409, -508, 261, 252, 270, 271, -508, 269,
2503 272, 275, 279, 280, -508, -508, 367, 40, 368, -508,
2504 -508, 267, -508, 281, 282, 1409, -508, 1409, 1409, -508,
2505 -508, -508, -508, -508, 898, -508, 996, 85, 382, -508,
2506 -508, -508, 283, 285, 288, -508, 274, -508, 996, 898,
2507 -508, -508, -508, 424, 293, 130, 898, 426, 430, -508,
2508 898, 898, -508, -508
2511 /* YYPGOTO[NTERM-NUM]. */
2512 static const short int yypgoto[] =
2514 -508, -508, -508, 356, 357, 360, 145, 147, 371, 374,
2515 -128, -127, -497, -508, 416, 436, -117, -508, -277, 41,
2516 -508, -296, -508, -47, -508, -37, -508, -58, 46, -508,
2517 -99, 253, -298, 49, -508, -508, -508, -508, -508, -508,
2518 -508, 419, -508, -508, -508, -508, 8, -508, 51, -508,
2519 -508, 412, -508, -508, -508, -508, -508, 471, -508, -508,
2520 -507, -209, 67, -124, -508, 457, -508, -118, -508, -508,
2521 -508, -508, 43, -22, -508, -508, 21, -508, -508
2524 /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
2525 positive, shift that token. If negative, reduce the rule which
2526 number is the opposite. If zero, do what YYDEFACT says.
2527 If YYTABLE_NINF, syntax error. */
2528 #define YYTABLE_NINF -180
2529 static const short int yytable[] =
2531 88, 235, 249, 250, 238, 371, 105, 115, 39, 393,
2532 394, 26, 223, 334, 252, 42, 88, 454, 4, 432,
2533 434, 93, 46, 47, 48, 360, 119, 406, 408, 416,
2534 360, 360, 106, 107, 123, 283, 198, 199, 287, 415,
2535 455, 49, 360, 288, 289, 290, 291, 292, 293, 26,
2536 241, 242, 243, 244, 245, 246, 247, 248, 119, 426,
2537 576, 433, 433, 29, 119, 297, 298, 239, 228, 586,
2538 39, 205, 206, 207, -112, 360, 299, 51, 229, 240,
2539 588, 594, -139, 123, -112, 360, 360, 360, 234, 53,
2540 52, 234, -139, 123, 121, 241, 242, 243, 244, 245,
2541 246, 247, 248, 302, 109, 110, 111, 469, 228, 303,
2542 7, 8, 9, 10, 54, 12, 55, 465, 339, 56,
2543 281, 282, 234, 284, 285, 234, 465, 471, 62, 465,
2544 234, 234, 234, 234, 234, 234, 515, 470, 417, 465,
2545 465, 123, 58, 59, -179, 60, 466, 482, 43, 294,
2546 295, 296, 234, 234, 94, 64, 360, 360, 360, 300,
2547 301, 505, 227, 98, 360, 116, 336, 337, 232, 5,
2548 340, 20, 99, 21, 100, 6, 101, 389, 360, 360,
2549 307, 308, -72, -72, 102, 7, 8, 9, 10, 11,
2550 12, 13, -113, 342, -71, -71, -70, -70, 113, 575,
2551 -69, -69, 309, 310, 114, 365, 14, 133, 134, 122,
2552 197, 531, 202, 532, 201, 88, 30, 31, 32, 33,
2553 34, 35, 36, 360, 224, 360, 366, 203, 225, 360,
2554 230, 236, -76, -75, -74, -73, 312, 360, 360, 360,
2555 -79, -80, 313, 367, 587, 338, 346, 347, 368, 370,
2556 374, 439, 387, 441, 442, 443, 373, 386, 375, 376,
2557 377, 449, 88, 388, 234, 241, 242, 243, 244, 245,
2558 246, 247, 248, 378, 360, 360, 379, 360, 360, 380,
2559 381, 385, 390, 409, 360, 391, 397, 424, 340, 398,
2560 399, 400, 401, 360, 410, 411, 412, 413, 460, 461,
2561 462, 463, 464, 414, 418, 458, 362, 363, 421, 427,
2562 422, 472, 473, 474, 475, 476, 428, 435, 364, 438,
2563 446, 447, 448, 453, 454, 481, 360, 253, 254, 255,
2564 256, 257, 258, 259, 260, 261, 262, 459, 234, 440,
2565 234, 234, 234, 444, 445, 483, 484, 468, 234, 450,
2566 419, 372, 489, 485, 486, 487, 503, 493, 495, 506,
2567 507, 382, 383, 384, 496, 360, 513, 497, 501, 504,
2568 509, 536, 537, 538, 520, 510, 511, 514, 512, 516,
2569 360, 548, 554, 521, 342, 555, 433, 360, 574, 517,
2570 518, 360, 360, 519, 523, 530, 533, 535, 234, 541,
2571 542, 543, 556, 589, 578, 557, 558, 562, 566, 559,
2572 544, 545, 546, 547, 565, 560, 502, 549, 550, 551,
2573 552, 264, 265, 567, 568, 569, 579, 593, 570, 249,
2574 250, 571, 429, 430, 431, 572, 573, 580, 581, 590,
2575 437, 591, 563, 564, 592, 596, 597, 600, 234, 249,
2576 250, 601, 186, 187, 451, 452, 188, 96, 234, 234,
2577 234, 57, 395, 479, 234, 396, 582, 189, 583, 584,
2578 190, 104, 478, 112, 27, 333, 45, 598, 492, 539,
2579 0, 508, 0, 553, 0, 0, 0, 0, 0, 0,
2580 0, 0, 0, 0, 0, 0, 234, 0, 0, 488,
2581 0, 490, 0, 0, 0, 494, 0, 0, 0, 0,
2582 0, 0, 0, 498, 499, 500, 0, 0, 0, 266,
2583 267, 268, 269, 270, 271, 272, 273, 274, 275, 276,
2584 277, 278, 279, 0, 0, 0, 0, 0, 0, 0,
2585 0, 0, 65, 66, 0, 0, 0, 0, 0, 0,
2586 524, 525, 0, 528, 529, 0, 0, 0, 0, 20,
2587 534, 21, 0, 314, 0, 0, -82, 0, 20, 540,
2588 21, 0, 0, 0, 0, 315, 316, 6, -82, -82,
2589 0, 0, 0, 0, 0, 0, 0, -82, -82, -82,
2590 -82, -82, -82, -82, 0, 0, -82, 22, 0, 0,
2591 0, 0, 561, 0, 23, 0, 0, 0, 24, 0,
2592 0, 0, 0, 0, 0, 0, 135, 136, 137, 138,
2593 139, 140, 141, 142, 143, 144, 145, 146, 147, 148,
2594 149, 150, 151, 152, 153, 154, 317, 318, 0, 0,
2595 0, 585, 0, 319, 0, 320, 163, 164, 165, 166,
2596 0, 321, 322, 323, 0, 0, 595, 0, 0, 0,
2597 0, 0, 0, 599, 0, 0, 0, 602, 603, 0,
2598 0, 0, 0, 0, 0, 0, 173, 174, 175, 176,
2599 177, 178, 179, 180, 181, 182, 183, 184, 185, 0,
2600 0, 0, 0, 0, 324, 0, 0, 325, 0, 326,
2601 65, 66, 327, 117, 68, 69, 70, 71, 72, 73,
2602 74, 75, 76, 77, 78, 0, 79, 20, 0, 21,
2603 65, 66, 0, 117, 68, 69, 70, 71, 72, 73,
2604 74, 75, 76, 77, 78, 0, 79, 20, 0, 21,
2605 0, 65, 66, 80, 117, 208, 209, 210, 211, 212,
2606 213, 214, 215, 216, 217, 218, 0, 79, 20, 0,
2607 21, 65, 66, 80, 117, 208, 209, 210, 211, 212,
2608 213, 214, 215, 216, 217, 218, 0, 79, 20, 0,
2609 21, 0, 0, 0, 80, 0, 65, 66, 0, 117,
2610 68, 69, 70, 71, 72, 73, 74, 75, 76, 77,
2611 78, 0, 79, 20, 80, 21, 0, 0, 0, 0,
2612 0, 0, 0, 0, 0, 0, 0, 0, 231, 0,
2613 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,
2614 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2615 0, 0, 0, 0, 0, 0, 0, 0, 0, 81,
2616 0, 0, 82, 0, 0, 83, 0, 84, 118, 0,
2617 0, 0, 0, 0, 0, 0, 0, 0, 0, 81,
2618 0, 0, 82, 0, 0, 83, 0, 84, 226, 0,
2619 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2620 81, 0, 0, 82, 0, 0, 83, 0, 84, 407,
2621 0, 348, 349, 65, 66, 350, 0, 0, 0, 0,
2622 81, 0, 0, 82, 0, 0, 83, 0, 84, 467,
2623 20, 0, 21, 0, 351, 352, 353, 0, 0, 0,
2624 0, 0, 0, 0, 0, 81, 354, 355, 82, 0,
2625 0, 83, 0, 84, 0, 0, 0, 0, 0, 0,
2626 0, 0, 0, 0, 0, 0, 0, 0, 0, 356,
2627 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2628 0, 0, 0, 0, 0, 0, 0, 135, 136, 137,
2629 138, 139, 140, 141, 142, 143, 144, 145, 146, 147,
2630 148, 149, 150, 151, 152, 153, 154, 317, 318, 348,
2631 349, 0, 0, 350, 319, 0, 320, 163, 164, 165,
2632 166, 0, 321, 322, 323, 0, 0, 0, 0, 0,
2633 0, 0, 351, 352, 353, 0, 0, 0, 0, 0,
2634 0, 0, 0, 0, 354, 355, 0, 173, 174, 175,
2635 176, 177, 178, 179, 180, 181, 182, 183, 184, 185,
2636 0, 0, 0, 0, 0, 0, 0, 356, 357, 0,
2637 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2638 0, 0, 0, 0, 0, 135, 136, 137, 138, 139,
2639 140, 141, 142, 143, 144, 145, 146, 147, 148, 149,
2640 150, 151, 152, 153, 154, 317, 318, 0, 0, 0,
2641 0, 0, 319, 0, 320, 163, 164, 165, 166, 0,
2642 321, 322, 323, 0, 0, 0, 0, 0, 0, 0,
2643 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2644 0, 0, 0, 0, 0, 173, 174, 175, 176, 177,
2645 178, 179, 180, 181, 182, 183, 184, 185, 0, 0,
2646 0, 0, 0, 0, 65, 66, 357, 117, 68, 69,
2647 70, 71, 72, 73, 74, 75, 76, 77, 78, 0,
2648 79, 20, 0, 21, 0, 0, 0, 0, 0, 0,
2649 0, 0, 0, 0, 0, 0, 341, 0, 0, 0,
2650 0, 0, 0, 0, 0, 65, 66, 80, 117, 208,
2651 209, 210, 211, 212, 213, 214, 215, 216, 217, 218,
2652 0, 79, 20, 0, 21, 65, 66, 0, 117, 68,
2653 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
2654 0, 79, 20, 0, 21, 0, 0, 0, 80, 0,
2655 0, 0, 0, 0, 0, 0, 0, 423, 0, 0,
2656 0, 0, 0, 0, 0, 0, 65, 66, 80, 117,
2657 68, 69, 70, 71, 72, 73, 74, 75, 76, 77,
2658 78, 0, 79, 20, 0, 21, 0, 0, 0, 0,
2659 0, 0, 0, 0, 0, 0, 0, 0, 477, 0,
2660 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,
2661 0, 0, 0, 81, 0, 0, 82, 0, 0, 83,
2662 0, 84, 65, 66, 0, 67, 68, 69, 70, 71,
2663 72, 73, 74, 75, 76, 77, 78, 0, 79, 20,
2664 0, 21, 0, 0, 0, 0, 0, 0, 0, 0,
2665 0, 0, 0, 0, 81, 0, 0, 82, 0, 402,
2666 83, 0, 84, 0, 0, 80, 0, 0, 0, 0,
2667 0, 0, 0, 0, 81, 0, 0, 82, 0, 0,
2668 83, 0, 84, 65, 66, 0, 117, 68, 69, 70,
2669 71, 72, 73, 74, 75, 76, 77, 78, 0, 79,
2670 20, 0, 21, 0, 0, 0, 0, 0, 0, 0,
2671 0, 0, 0, 0, 0, 81, 0, 0, 82, 0,
2672 0, 83, 0, 84, 65, 66, 80, 117, 208, 209,
2673 210, 211, 212, 213, 214, 215, 216, 217, 218, 0,
2674 79, 20, 0, 21, 65, 66, 0, 237, 68, 69,
2675 70, 71, 72, 73, 74, 75, 76, 77, 78, 0,
2676 79, 20, 0, 21, 0, 0, 0, 80, 0, 0,
2677 0, 81, 0, 0, 82, 0, 0, 83, 0, 84,
2678 0, 0, 0, 0, 0, 65, 66, 80, 117, 208,
2679 209, 210, 211, 212, 213, 214, 215, 216, 217, 218,
2680 0, 79, 20, 0, 21, 0, 0, 0, 0, 0,
2681 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2682 0, 0, 0, 0, 0, 0, 0, 0, 80, 0,
2683 0, 0, 81, 0, 0, 82, 0, 0, 83, 0,
2684 84, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2685 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2686 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2687 0, 0, 0, 81, 0, 0, 82, 0, 0, 83,
2688 0, 84, 0, 0, 0, 0, 0, 0, 0, 0,
2689 0, 0, 0, 81, 0, 0, 82, 0, 0, 83,
2690 0, 84, 0, 0, 0, 0, 124, 0, 0, 0,
2691 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2692 125, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2693 126, 127, 0, 0, 81, 0, 0, 82, 0, 0,
2694 83, 0, 405, 128, 129, 130, 131, 132, 133, 134,
2695 135, 136, 137, 138, 139, 140, 141, 142, 143, 144,
2696 145, 146, 147, 148, 149, 150, 151, 152, 153, 154,
2697 155, 156, 157, 158, 159, 0, 0, 160, 161, 162,
2698 163, 164, 165, 166, 167, 168, 169, 170, 171, 172,
2699 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2700 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2701 173, 174, 175, 176, 177, 178, 179, 180, 181, 182,
2705 static const short int yycheck[] =
2707 37, 125, 130, 130, 128, 282, 53, 4, 23, 305,
2708 306, 3, 111, 222, 131, 30, 53, 34, 0, 15,
2709 15, 29, 52, 53, 54, 234, 84, 325, 326, 159,
2710 239, 240, 32, 33, 164, 159, 55, 56, 162, 335,
2711 57, 71, 251, 167, 168, 169, 170, 171, 172, 41,
2712 10, 11, 12, 13, 14, 15, 16, 17, 116, 357,
2713 557, 57, 57, 61, 122, 189, 190, 9, 153, 576,
2714 23, 108, 109, 110, 155, 284, 193, 152, 163, 21,
2715 577, 588, 153, 164, 155, 294, 295, 296, 125, 20,
2716 61, 128, 163, 164, 86, 10, 11, 12, 13, 14,
2717 15, 16, 17, 153, 55, 56, 57, 405, 153, 159,
2718 41, 42, 43, 44, 45, 46, 47, 153, 163, 50,
2719 157, 158, 159, 160, 161, 162, 153, 163, 24, 153,
2720 167, 168, 169, 170, 171, 172, 163, 161, 161, 153,
2721 153, 164, 152, 45, 0, 47, 159, 161, 163, 186,
2722 187, 188, 189, 190, 162, 4, 365, 366, 367, 104,
2723 105, 457, 116, 152, 373, 162, 224, 225, 122, 25,
2724 228, 22, 152, 24, 152, 31, 152, 301, 387, 388,
2725 27, 28, 3, 4, 157, 41, 42, 43, 44, 45,
2726 46, 47, 155, 230, 3, 4, 3, 4, 4, 159,
2727 3, 4, 3, 4, 4, 252, 62, 77, 78, 155,
2728 24, 488, 24, 490, 4, 252, 64, 65, 66, 67,
2729 68, 69, 70, 432, 158, 434, 263, 24, 158, 438,
2730 155, 59, 4, 4, 4, 4, 4, 446, 447, 448,
2731 7, 7, 7, 280, 159, 161, 153, 156, 153, 153,
2732 153, 375, 299, 377, 378, 379, 157, 36, 153, 153,
2733 153, 385, 299, 300, 301, 10, 11, 12, 13, 14,
2734 15, 16, 17, 153, 483, 484, 153, 486, 487, 153,
2735 153, 153, 24, 24, 493, 153, 155, 63, 346, 155,
2736 155, 155, 155, 502, 155, 155, 155, 155, 397, 398,
2737 399, 400, 401, 155, 161, 155, 239, 240, 153, 153,
2738 156, 410, 411, 412, 413, 414, 153, 153, 251, 157,
2739 153, 153, 153, 153, 34, 24, 535, 119, 120, 121,
2740 122, 123, 124, 125, 126, 127, 128, 155, 375, 376,
2741 377, 378, 379, 380, 381, 21, 21, 405, 385, 386,
2742 342, 284, 4, 155, 153, 153, 24, 153, 153, 458,
2743 459, 294, 295, 296, 153, 574, 465, 153, 155, 4,
2744 153, 495, 496, 497, 36, 153, 153, 161, 153, 153,
2745 589, 161, 4, 57, 421, 24, 57, 596, 21, 153,
2746 153, 600, 601, 153, 153, 153, 153, 153, 435, 153,
2747 153, 156, 153, 21, 36, 157, 156, 156, 156, 533,
2748 509, 510, 511, 512, 153, 159, 453, 516, 517, 518,
2749 519, 27, 28, 153, 153, 156, 159, 153, 156, 557,
2750 557, 156, 365, 366, 367, 156, 156, 156, 156, 156,
2751 373, 156, 541, 542, 156, 21, 153, 21, 485, 577,
2752 577, 21, 96, 96, 387, 388, 96, 41, 495, 496,
2753 497, 25, 317, 422, 501, 318, 565, 96, 567, 568,
2754 96, 52, 421, 61, 3, 222, 19, 595, 435, 501,
2755 -1, 460, -1, 520, -1, -1, -1, -1, -1, -1,
2756 -1, -1, -1, -1, -1, -1, 533, -1, -1, 432,
2757 -1, 434, -1, -1, -1, 438, -1, -1, -1, -1,
2758 -1, -1, -1, 446, 447, 448, -1, -1, -1, 125,
2759 126, 127, 128, 129, 130, 131, 132, 133, 134, 135,
2760 136, 137, 138, -1, -1, -1, -1, -1, -1, -1,
2761 -1, -1, 5, 6, -1, -1, -1, -1, -1, -1,
2762 483, 484, -1, 486, 487, -1, -1, -1, -1, 22,
2763 493, 24, -1, 26, -1, -1, 20, -1, 22, 502,
2764 24, -1, -1, -1, -1, 38, 39, 31, 32, 33,
2765 -1, -1, -1, -1, -1, -1, -1, 41, 42, 43,
2766 44, 45, 46, 47, -1, -1, 50, 51, -1, -1,
2767 -1, -1, 535, -1, 58, -1, -1, -1, 62, -1,
2768 -1, -1, -1, -1, -1, -1, 79, 80, 81, 82,
2769 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
2770 93, 94, 95, 96, 97, 98, 99, 100, -1, -1,
2771 -1, 574, -1, 106, -1, 108, 109, 110, 111, 112,
2772 -1, 114, 115, 116, -1, -1, 589, -1, -1, -1,
2773 -1, -1, -1, 596, -1, -1, -1, 600, 601, -1,
2774 -1, -1, -1, -1, -1, -1, 139, 140, 141, 142,
2775 143, 144, 145, 146, 147, 148, 149, 150, 151, -1,
2776 -1, -1, -1, -1, 157, -1, -1, 160, -1, 162,
2777 5, 6, 165, 8, 9, 10, 11, 12, 13, 14,
2778 15, 16, 17, 18, 19, -1, 21, 22, -1, 24,
2779 5, 6, -1, 8, 9, 10, 11, 12, 13, 14,
2780 15, 16, 17, 18, 19, -1, 21, 22, -1, 24,
2781 -1, 5, 6, 48, 8, 9, 10, 11, 12, 13,
2782 14, 15, 16, 17, 18, 19, -1, 21, 22, -1,
2783 24, 5, 6, 48, 8, 9, 10, 11, 12, 13,
2784 14, 15, 16, 17, 18, 19, -1, 21, 22, -1,
2785 24, -1, -1, -1, 48, -1, 5, 6, -1, 8,
2786 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
2787 19, -1, 21, 22, 48, 24, -1, -1, -1, -1,
2788 -1, -1, -1, -1, -1, -1, -1, -1, 37, -1,
2789 -1, -1, -1, -1, -1, -1, -1, -1, -1, 48,
2790 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2791 -1, -1, -1, -1, -1, -1, -1, -1, -1, 154,
2792 -1, -1, 157, -1, -1, 160, -1, 162, 163, -1,
2793 -1, -1, -1, -1, -1, -1, -1, -1, -1, 154,
2794 -1, -1, 157, -1, -1, 160, -1, 162, 163, -1,
2795 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2796 154, -1, -1, 157, -1, -1, 160, -1, 162, 163,
2797 -1, 3, 4, 5, 6, 7, -1, -1, -1, -1,
2798 154, -1, -1, 157, -1, -1, 160, -1, 162, 163,
2799 22, -1, 24, -1, 26, 27, 28, -1, -1, -1,
2800 -1, -1, -1, -1, -1, 154, 38, 39, 157, -1,
2801 -1, 160, -1, 162, -1, -1, -1, -1, -1, -1,
2802 -1, -1, -1, -1, -1, -1, -1, -1, -1, 61,
2803 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2804 -1, -1, -1, -1, -1, -1, -1, 79, 80, 81,
2805 82, 83, 84, 85, 86, 87, 88, 89, 90, 91,
2806 92, 93, 94, 95, 96, 97, 98, 99, 100, 3,
2807 4, -1, -1, 7, 106, -1, 108, 109, 110, 111,
2808 112, -1, 114, 115, 116, -1, -1, -1, -1, -1,
2809 -1, -1, 26, 27, 28, -1, -1, -1, -1, -1,
2810 -1, -1, -1, -1, 38, 39, -1, 139, 140, 141,
2811 142, 143, 144, 145, 146, 147, 148, 149, 150, 151,
2812 -1, -1, -1, -1, -1, -1, -1, 61, 160, -1,
2813 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2814 -1, -1, -1, -1, -1, 79, 80, 81, 82, 83,
2815 84, 85, 86, 87, 88, 89, 90, 91, 92, 93,
2816 94, 95, 96, 97, 98, 99, 100, -1, -1, -1,
2817 -1, -1, 106, -1, 108, 109, 110, 111, 112, -1,
2818 114, 115, 116, -1, -1, -1, -1, -1, -1, -1,
2819 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2820 -1, -1, -1, -1, -1, 139, 140, 141, 142, 143,
2821 144, 145, 146, 147, 148, 149, 150, 151, -1, -1,
2822 -1, -1, -1, -1, 5, 6, 160, 8, 9, 10,
2823 11, 12, 13, 14, 15, 16, 17, 18, 19, -1,
2824 21, 22, -1, 24, -1, -1, -1, -1, -1, -1,
2825 -1, -1, -1, -1, -1, -1, 37, -1, -1, -1,
2826 -1, -1, -1, -1, -1, 5, 6, 48, 8, 9,
2827 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
2828 -1, 21, 22, -1, 24, 5, 6, -1, 8, 9,
2829 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
2830 -1, 21, 22, -1, 24, -1, -1, -1, 48, -1,
2831 -1, -1, -1, -1, -1, -1, -1, 37, -1, -1,
2832 -1, -1, -1, -1, -1, -1, 5, 6, 48, 8,
2833 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
2834 19, -1, 21, 22, -1, 24, -1, -1, -1, -1,
2835 -1, -1, -1, -1, -1, -1, -1, -1, 37, -1,
2836 -1, -1, -1, -1, -1, -1, -1, -1, -1, 48,
2837 -1, -1, -1, 154, -1, -1, 157, -1, -1, 160,
2838 -1, 162, 5, 6, -1, 8, 9, 10, 11, 12,
2839 13, 14, 15, 16, 17, 18, 19, -1, 21, 22,
2840 -1, 24, -1, -1, -1, -1, -1, -1, -1, -1,
2841 -1, -1, -1, -1, 154, -1, -1, 157, -1, 159,
2842 160, -1, 162, -1, -1, 48, -1, -1, -1, -1,
2843 -1, -1, -1, -1, 154, -1, -1, 157, -1, -1,
2844 160, -1, 162, 5, 6, -1, 8, 9, 10, 11,
2845 12, 13, 14, 15, 16, 17, 18, 19, -1, 21,
2846 22, -1, 24, -1, -1, -1, -1, -1, -1, -1,
2847 -1, -1, -1, -1, -1, 154, -1, -1, 157, -1,
2848 -1, 160, -1, 162, 5, 6, 48, 8, 9, 10,
2849 11, 12, 13, 14, 15, 16, 17, 18, 19, -1,
2850 21, 22, -1, 24, 5, 6, -1, 8, 9, 10,
2851 11, 12, 13, 14, 15, 16, 17, 18, 19, -1,
2852 21, 22, -1, 24, -1, -1, -1, 48, -1, -1,
2853 -1, 154, -1, -1, 157, -1, -1, 160, -1, 162,
2854 -1, -1, -1, -1, -1, 5, 6, 48, 8, 9,
2855 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
2856 -1, 21, 22, -1, 24, -1, -1, -1, -1, -1,
2857 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2858 -1, -1, -1, -1, -1, -1, -1, -1, 48, -1,
2859 -1, -1, 154, -1, -1, 157, -1, -1, 160, -1,
2860 162, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2861 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2862 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2863 -1, -1, -1, 154, -1, -1, 157, -1, -1, 160,
2864 -1, 162, -1, -1, -1, -1, -1, -1, -1, -1,
2865 -1, -1, -1, 154, -1, -1, 157, -1, -1, 160,
2866 -1, 162, -1, -1, -1, -1, 35, -1, -1, -1,
2867 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2868 49, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2869 59, 60, -1, -1, 154, -1, -1, 157, -1, -1,
2870 160, -1, 162, 72, 73, 74, 75, 76, 77, 78,
2871 79, 80, 81, 82, 83, 84, 85, 86, 87, 88,
2872 89, 90, 91, 92, 93, 94, 95, 96, 97, 98,
2873 99, 100, 101, 102, 103, -1, -1, 106, 107, 108,
2874 109, 110, 111, 112, 113, 114, 115, 116, 117, 118,
2875 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2876 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2877 139, 140, 141, 142, 143, 144, 145, 146, 147, 148,
2881 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
2882 symbol of state STATE-NUM. */
2883 static const unsigned char yystos[] =
2885 0, 200, 201, 202, 0, 25, 31, 41, 42, 43,
2886 44, 45, 46, 47, 62, 181, 219, 221, 223, 230,
2887 22, 24, 51, 58, 62, 180, 212, 223, 224, 61,
2888 64, 65, 66, 67, 68, 69, 70, 182, 217, 23,
2889 231, 232, 30, 163, 220, 231, 52, 53, 54, 71,
2890 209, 152, 61, 20, 45, 47, 50, 181, 152, 45,
2891 47, 222, 24, 207, 4, 5, 6, 8, 9, 10,
2892 11, 12, 13, 14, 15, 16, 17, 18, 19, 21,
2893 48, 154, 157, 160, 162, 167, 189, 190, 191, 192,
2894 193, 212, 227, 29, 162, 218, 180, 236, 152, 152,
2895 152, 152, 157, 210, 207, 189, 32, 33, 199, 199,
2896 199, 199, 217, 4, 4, 4, 162, 8, 163, 193,
2897 194, 212, 155, 164, 35, 49, 59, 60, 72, 73,
2898 74, 75, 76, 77, 78, 79, 80, 81, 82, 83,
2899 84, 85, 86, 87, 88, 89, 90, 91, 92, 93,
2900 94, 95, 96, 97, 98, 99, 100, 101, 102, 103,
2901 106, 107, 108, 109, 110, 111, 112, 113, 114, 115,
2902 116, 117, 118, 139, 140, 141, 142, 143, 144, 145,
2903 146, 147, 148, 149, 150, 151, 169, 170, 171, 174,
2904 175, 233, 234, 240, 241, 243, 244, 24, 55, 56,
2905 208, 4, 24, 24, 211, 191, 191, 191, 9, 10,
2906 11, 12, 13, 14, 15, 16, 17, 18, 19, 176,
2907 177, 179, 191, 196, 158, 158, 163, 194, 153, 163,
2908 155, 37, 194, 195, 191, 229, 59, 8, 229, 9,
2909 21, 10, 11, 12, 13, 14, 15, 16, 17, 176,
2910 177, 178, 182, 119, 120, 121, 122, 123, 124, 125,
2911 126, 127, 128, 172, 27, 28, 125, 126, 127, 128,
2912 129, 130, 131, 132, 133, 134, 135, 136, 137, 138,
2913 173, 191, 191, 229, 191, 191, 237, 229, 229, 229,
2914 229, 229, 229, 229, 191, 191, 191, 229, 229, 182,
2915 104, 105, 153, 159, 205, 206, 204, 27, 28, 3,
2916 4, 168, 4, 7, 26, 38, 39, 99, 100, 106,
2917 108, 114, 115, 116, 157, 160, 162, 165, 169, 170,
2918 171, 174, 175, 197, 227, 203, 193, 193, 161, 163,
2919 193, 37, 191, 214, 215, 216, 153, 156, 3, 4,
2920 7, 26, 27, 28, 38, 39, 61, 160, 197, 226,
2921 227, 228, 228, 228, 228, 189, 191, 191, 153, 184,
2922 153, 184, 228, 157, 153, 153, 153, 153, 153, 153,
2923 153, 153, 228, 228, 228, 153, 36, 189, 191, 229,
2924 24, 153, 187, 187, 187, 172, 173, 155, 155, 155,
2925 155, 155, 159, 196, 198, 162, 198, 163, 198, 24,
2926 155, 155, 155, 155, 155, 187, 159, 161, 161, 212,
2927 213, 153, 156, 37, 63, 225, 198, 153, 153, 228,
2928 228, 228, 15, 57, 15, 153, 242, 228, 157, 229,
2929 191, 229, 229, 229, 191, 191, 153, 153, 153, 229,
2930 191, 228, 228, 153, 34, 57, 185, 188, 155, 155,
2931 196, 196, 196, 196, 196, 153, 159, 163, 193, 198,
2932 161, 163, 196, 196, 196, 196, 196, 37, 214, 185,
2933 186, 24, 161, 21, 21, 155, 153, 153, 228, 4,
2934 228, 229, 238, 153, 228, 153, 153, 153, 228, 228,
2935 228, 155, 191, 24, 4, 187, 196, 196, 242, 153,
2936 153, 153, 153, 196, 161, 163, 153, 153, 153, 153,
2937 36, 57, 183, 153, 228, 228, 238, 239, 228, 228,
2938 153, 184, 184, 153, 228, 153, 229, 229, 229, 239,
2939 228, 153, 153, 156, 196, 196, 196, 196, 161, 196,
2940 196, 196, 196, 191, 4, 24, 153, 157, 156, 229,
2941 159, 228, 156, 196, 196, 153, 156, 153, 153, 156,
2942 156, 156, 156, 156, 21, 159, 178, 235, 36, 159,
2943 156, 156, 196, 196, 196, 228, 226, 159, 178, 21,
2944 156, 156, 156, 153, 226, 228, 21, 153, 233, 228,
2948 #define yyerrok (yyerrstatus = 0)
2949 #define yyclearin (yychar = YYEMPTY)
2950 #define YYEMPTY (-2)
2953 #define YYACCEPT goto yyacceptlab
2954 #define YYABORT goto yyabortlab
2955 #define YYERROR goto yyerrorlab
2958 /* Like YYERROR except do call yyerror. This remains here temporarily
2959 to ease the transition to the new meaning of YYERROR, for GCC.
2960 Once GCC version 2 has supplanted version 1, this can go. */
2962 #define YYFAIL goto yyerrlab
2964 #define YYRECOVERING() (!!yyerrstatus)
2966 #define YYBACKUP(Token, Value) \
2968 if (yychar == YYEMPTY && yylen == 1) \
2972 yytoken = YYTRANSLATE (yychar); \
2978 yyerror (YY_("syntax error: cannot back up")); \
2985 #define YYERRCODE 256
2988 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
2989 If N is 0, then set CURRENT to the empty location which ends
2990 the previous symbol: RHS[0] (always defined). */
2992 #define YYRHSLOC(Rhs, K) ((Rhs)[K])
2993 #ifndef YYLLOC_DEFAULT
2994 # define YYLLOC_DEFAULT(Current, Rhs, N) \
2998 (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \
2999 (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \
3000 (Current).last_line = YYRHSLOC (Rhs, N).last_line; \
3001 (Current).last_column = YYRHSLOC (Rhs, N).last_column; \
3005 (Current).first_line = (Current).last_line = \
3006 YYRHSLOC (Rhs, 0).last_line; \
3007 (Current).first_column = (Current).last_column = \
3008 YYRHSLOC (Rhs, 0).last_column; \
3014 /* YY_LOCATION_PRINT -- Print the location on the stream.
3015 This macro was not mandated originally: define only if we know
3016 we won't break user code: when these are the locations we know. */
3018 #ifndef YY_LOCATION_PRINT
3019 # if YYLTYPE_IS_TRIVIAL
3020 # define YY_LOCATION_PRINT(File, Loc) \
3021 fprintf (File, "%d.%d-%d.%d", \
3022 (Loc).first_line, (Loc).first_column, \
3023 (Loc).last_line, (Loc).last_column)
3025 # define YY_LOCATION_PRINT(File, Loc) ((void) 0)
3030 /* YYLEX -- calling `yylex' with the right arguments. */
3033 # define YYLEX yylex (YYLEX_PARAM)
3035 # define YYLEX yylex ()
3038 /* Enable debugging if requested. */
3042 # include <stdio.h> /* INFRINGES ON USER NAME SPACE */
3043 # define YYFPRINTF fprintf
3046 # define YYDPRINTF(Args) \
3052 # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
3056 YYFPRINTF (stderr, "%s ", Title); \
3057 yysymprint (stderr, \
3059 YYFPRINTF (stderr, "\n"); \
3063 /*------------------------------------------------------------------.
3064 | yy_stack_print -- Print the state stack from its BOTTOM up to its |
3066 `------------------------------------------------------------------*/
3068 #if defined (__STDC__) || defined (__cplusplus)
3070 yy_stack_print (short int *bottom, short int *top)
3073 yy_stack_print (bottom, top)
3078 YYFPRINTF (stderr, "Stack now");
3079 for (/* Nothing. */; bottom <= top; ++bottom)
3080 YYFPRINTF (stderr, " %d", *bottom);
3081 YYFPRINTF (stderr, "\n");
3084 # define YY_STACK_PRINT(Bottom, Top) \
3087 yy_stack_print ((Bottom), (Top)); \
3091 /*------------------------------------------------.
3092 | Report that the YYRULE is going to be reduced. |
3093 `------------------------------------------------*/
3095 #if defined (__STDC__) || defined (__cplusplus)
3097 yy_reduce_print (int yyrule)
3100 yy_reduce_print (yyrule)
3105 unsigned long int yylno = yyrline[yyrule];
3106 YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu), ",
3108 /* Print the symbols being reduced, and their result. */
3109 for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++)
3110 YYFPRINTF (stderr, "%s ", yytname[yyrhs[yyi]]);
3111 YYFPRINTF (stderr, "-> %s\n", yytname[yyr1[yyrule]]);
3114 # define YY_REDUCE_PRINT(Rule) \
3117 yy_reduce_print (Rule); \
3120 /* Nonzero means print parse trace. It is left uninitialized so that
3121 multiple parsers can coexist. */
3123 #else /* !YYDEBUG */
3124 # define YYDPRINTF(Args)
3125 # define YY_SYMBOL_PRINT(Title, Type, Value, Location)
3126 # define YY_STACK_PRINT(Bottom, Top)
3127 # define YY_REDUCE_PRINT(Rule)
3128 #endif /* !YYDEBUG */
3131 /* YYINITDEPTH -- initial size of the parser's stacks. */
3133 # define YYINITDEPTH 200
3136 /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
3137 if the built-in stack extension method is used).
3139 Do not make this value too large; the results are undefined if
3140 YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
3141 evaluated with infinite-precision integer arithmetic. */
3144 # define YYMAXDEPTH 10000
3152 # if defined (__GLIBC__) && defined (_STRING_H)
3153 # define yystrlen strlen
3155 /* Return the length of YYSTR. */
3157 # if defined (__STDC__) || defined (__cplusplus)
3158 yystrlen (const char *yystr)
3164 const char *yys = yystr;
3166 while (*yys++ != '\0')
3169 return yys - yystr - 1;
3175 # if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
3176 # define yystpcpy stpcpy
3178 /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
3181 # if defined (__STDC__) || defined (__cplusplus)
3182 yystpcpy (char *yydest, const char *yysrc)
3184 yystpcpy (yydest, yysrc)
3190 const char *yys = yysrc;
3192 while ((*yyd++ = *yys++) != '\0')
3201 /* Copy to YYRES the contents of YYSTR after stripping away unnecessary
3202 quotes and backslashes, so that it's suitable for yyerror. The
3203 heuristic is that double-quoting is unnecessary unless the string
3204 contains an apostrophe, a comma, or backslash (other than
3205 backslash-backslash). YYSTR is taken from yytname. If YYRES is
3206 null, do not copy; instead, return the length of what the result
3209 yytnamerr (char *yyres, const char *yystr)
3214 char const *yyp = yystr;
3221 goto do_not_strip_quotes;
3225 goto do_not_strip_quotes;
3238 do_not_strip_quotes: ;
3242 return yystrlen (yystr);
3244 return yystpcpy (yyres, yystr) - yyres;
3248 #endif /* YYERROR_VERBOSE */
3253 /*--------------------------------.
3254 | Print this symbol on YYOUTPUT. |
3255 `--------------------------------*/
3257 #if defined (__STDC__) || defined (__cplusplus)
3259 yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep)
3262 yysymprint (yyoutput, yytype, yyvaluep)
3268 /* Pacify ``unused variable'' warnings. */
3271 if (yytype < YYNTOKENS)
3272 YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
3274 YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
3278 if (yytype < YYNTOKENS)
3279 YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
3286 YYFPRINTF (yyoutput, ")");
3289 #endif /* ! YYDEBUG */
3290 /*-----------------------------------------------.
3291 | Release the memory associated to this symbol. |
3292 `-----------------------------------------------*/
3294 #if defined (__STDC__) || defined (__cplusplus)
3296 yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
3299 yydestruct (yymsg, yytype, yyvaluep)
3305 /* Pacify ``unused variable'' warnings. */
3310 YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
3321 /* Prevent warnings from -Wmissing-prototypes. */
3323 #ifdef YYPARSE_PARAM
3324 # if defined (__STDC__) || defined (__cplusplus)
3325 int yyparse (void *YYPARSE_PARAM);
3329 #else /* ! YYPARSE_PARAM */
3330 #if defined (__STDC__) || defined (__cplusplus)
3335 #endif /* ! YYPARSE_PARAM */
3339 /* The look-ahead symbol. */
3342 /* The semantic value of the look-ahead symbol. */
3345 /* Number of syntax errors so far. */
3354 #ifdef YYPARSE_PARAM
3355 # if defined (__STDC__) || defined (__cplusplus)
3356 int yyparse (void *YYPARSE_PARAM)
3358 int yyparse (YYPARSE_PARAM)
3359 void *YYPARSE_PARAM;
3361 #else /* ! YYPARSE_PARAM */
3362 #if defined (__STDC__) || defined (__cplusplus)
3376 /* Number of tokens to shift before error messages enabled. */
3378 /* Look-ahead token as an internal (translated) token number. */
3381 /* Three stacks and their tools:
3382 `yyss': related to states,
3383 `yyvs': related to semantic values,
3384 `yyls': related to locations.
3386 Refer to the stacks thru separate pointers, to allow yyoverflow
3387 to reallocate them elsewhere. */
3389 /* The state stack. */
3390 short int yyssa[YYINITDEPTH];
3391 short int *yyss = yyssa;
3394 /* The semantic value stack. */
3395 YYSTYPE yyvsa[YYINITDEPTH];
3396 YYSTYPE *yyvs = yyvsa;
3401 #define YYPOPSTACK (yyvsp--, yyssp--)
3403 YYSIZE_T yystacksize = YYINITDEPTH;
3405 /* The variables used to return semantic value and location from the
3410 /* When reducing, the number of symbols on the RHS of the reduced
3414 YYDPRINTF ((stderr, "Starting parse\n"));
3419 yychar = YYEMPTY; /* Cause a token to be read. */
3421 /* Initialize stack pointers.
3422 Waste one element of value and location stack
3423 so that they stay on the same level as the state stack.
3424 The wasted elements are never initialized. */
3431 /*------------------------------------------------------------.
3432 | yynewstate -- Push a new state, which is found in yystate. |
3433 `------------------------------------------------------------*/
3435 /* In all cases, when you get here, the value and location stacks
3436 have just been pushed. so pushing a state here evens the stacks.
3443 if (yyss + yystacksize - 1 <= yyssp)
3445 /* Get the current used size of the three stacks, in elements. */
3446 YYSIZE_T yysize = yyssp - yyss + 1;
3450 /* Give user a chance to reallocate the stack. Use copies of
3451 these so that the &'s don't force the real ones into
3453 YYSTYPE *yyvs1 = yyvs;
3454 short int *yyss1 = yyss;
3457 /* Each stack pointer address is followed by the size of the
3458 data in use in that stack, in bytes. This used to be a
3459 conditional around just the two extra args, but that might
3460 be undefined if yyoverflow is a macro. */
3461 yyoverflow (YY_("memory exhausted"),
3462 &yyss1, yysize * sizeof (*yyssp),
3463 &yyvs1, yysize * sizeof (*yyvsp),
3470 #else /* no yyoverflow */
3471 # ifndef YYSTACK_RELOCATE
3472 goto yyexhaustedlab;
3474 /* Extend the stack our own way. */
3475 if (YYMAXDEPTH <= yystacksize)
3476 goto yyexhaustedlab;
3478 if (YYMAXDEPTH < yystacksize)
3479 yystacksize = YYMAXDEPTH;
3482 short int *yyss1 = yyss;
3483 union yyalloc *yyptr =
3484 (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
3486 goto yyexhaustedlab;
3487 YYSTACK_RELOCATE (yyss);
3488 YYSTACK_RELOCATE (yyvs);
3490 # undef YYSTACK_RELOCATE
3492 YYSTACK_FREE (yyss1);
3495 #endif /* no yyoverflow */
3497 yyssp = yyss + yysize - 1;
3498 yyvsp = yyvs + yysize - 1;
3501 YYDPRINTF ((stderr, "Stack size increased to %lu\n",
3502 (unsigned long int) yystacksize));
3504 if (yyss + yystacksize - 1 <= yyssp)
3508 YYDPRINTF ((stderr, "Entering state %d\n", yystate));
3517 /* Do appropriate processing given the current state. */
3518 /* Read a look-ahead token if we need one and don't already have one. */
3521 /* First try to decide what to do without reference to look-ahead token. */
3523 yyn = yypact[yystate];
3524 if (yyn == YYPACT_NINF)
3527 /* Not known => get a look-ahead token if don't already have one. */
3529 /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */
3530 if (yychar == YYEMPTY)
3532 YYDPRINTF ((stderr, "Reading a token: "));
3536 if (yychar <= YYEOF)
3538 yychar = yytoken = YYEOF;
3539 YYDPRINTF ((stderr, "Now at end of input.\n"));
3543 yytoken = YYTRANSLATE (yychar);
3544 YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
3547 /* If the proper action on seeing token YYTOKEN is to reduce or to
3548 detect an error, take that action. */
3550 if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
3555 if (yyn == 0 || yyn == YYTABLE_NINF)
3564 /* Shift the look-ahead token. */
3565 YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
3567 /* Discard the token being shifted unless it is eof. */
3568 if (yychar != YYEOF)
3574 /* Count tokens shifted since error; after three, turn off error
3583 /*-----------------------------------------------------------.
3584 | yydefault -- do the default action for the current state. |
3585 `-----------------------------------------------------------*/
3587 yyn = yydefact[yystate];
3593 /*-----------------------------.
3594 | yyreduce -- Do a reduction. |
3595 `-----------------------------*/
3597 /* yyn is the number of a rule to reduce with. */
3600 /* If YYLEN is nonzero, implement the default value of the action:
3603 Otherwise, the following line sets YYVAL to garbage.
3604 This behavior is undocumented and Bison
3605 users should not rely upon it. Assigning to YYVAL
3606 unconditionally makes the parser a bit smaller, and it avoids a
3607 GCC warning that YYVAL may be used uninitialized. */
3608 yyval = yyvsp[1-yylen];
3611 YY_REDUCE_PRINT (yyn);
3615 #line 1532 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
3617 if ((yyvsp[0].UIntVal) > (uint32_t)INT32_MAX) // Outside of my range!
3618 error("Value too large for type");
3619 (yyval.SIntVal) = (int32_t)(yyvsp[0].UIntVal);
3624 #line 1541 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
3626 if ((yyvsp[0].UInt64Val) > (uint64_t)INT64_MAX) // Outside of my range!
3627 error("Value too large for type");
3628 (yyval.SInt64Val) = (int64_t)(yyvsp[0].UInt64Val);
3633 #line 1563 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
3634 { (yyval.IPred) = ICmpInst::ICMP_EQ; ;}
3638 #line 1563 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
3639 { (yyval.IPred) = ICmpInst::ICMP_NE; ;}
3643 #line 1564 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
3644 { (yyval.IPred) = ICmpInst::ICMP_SLT; ;}
3648 #line 1564 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
3649 { (yyval.IPred) = ICmpInst::ICMP_SGT; ;}
3653 #line 1565 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
3654 { (yyval.IPred) = ICmpInst::ICMP_SLE; ;}
3658 #line 1565 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
3659 { (yyval.IPred) = ICmpInst::ICMP_SGE; ;}
3663 #line 1566 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
3664 { (yyval.IPred) = ICmpInst::ICMP_ULT; ;}
3668 #line 1566 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
3669 { (yyval.IPred) = ICmpInst::ICMP_UGT; ;}
3673 #line 1567 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
3674 { (yyval.IPred) = ICmpInst::ICMP_ULE; ;}
3678 #line 1567 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
3679 { (yyval.IPred) = ICmpInst::ICMP_UGE; ;}
3683 #line 1571 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
3684 { (yyval.FPred) = FCmpInst::FCMP_OEQ; ;}
3688 #line 1571 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
3689 { (yyval.FPred) = FCmpInst::FCMP_ONE; ;}
3693 #line 1572 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
3694 { (yyval.FPred) = FCmpInst::FCMP_OLT; ;}
3698 #line 1572 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
3699 { (yyval.FPred) = FCmpInst::FCMP_OGT; ;}
3703 #line 1573 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
3704 { (yyval.FPred) = FCmpInst::FCMP_OLE; ;}
3708 #line 1573 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
3709 { (yyval.FPred) = FCmpInst::FCMP_OGE; ;}
3713 #line 1574 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
3714 { (yyval.FPred) = FCmpInst::FCMP_ORD; ;}
3718 #line 1574 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
3719 { (yyval.FPred) = FCmpInst::FCMP_UNO; ;}
3723 #line 1575 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
3724 { (yyval.FPred) = FCmpInst::FCMP_UEQ; ;}
3728 #line 1575 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
3729 { (yyval.FPred) = FCmpInst::FCMP_UNE; ;}
3733 #line 1576 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
3734 { (yyval.FPred) = FCmpInst::FCMP_ULT; ;}
3738 #line 1576 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
3739 { (yyval.FPred) = FCmpInst::FCMP_UGT; ;}
3743 #line 1577 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
3744 { (yyval.FPred) = FCmpInst::FCMP_ULE; ;}
3748 #line 1577 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
3749 { (yyval.FPred) = FCmpInst::FCMP_UGE; ;}
3753 #line 1578 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
3754 { (yyval.FPred) = FCmpInst::FCMP_TRUE; ;}
3758 #line 1579 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
3759 { (yyval.FPred) = FCmpInst::FCMP_FALSE; ;}
3763 #line 1610 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
3765 (yyval.StrVal) = (yyvsp[-1].StrVal);
3770 #line 1613 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
3777 #line 1618 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
3778 { (yyval.Linkage) = GlobalValue::InternalLinkage; ;}
3782 #line 1619 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
3783 { (yyval.Linkage) = GlobalValue::LinkOnceLinkage; ;}
3787 #line 1620 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
3788 { (yyval.Linkage) = GlobalValue::WeakLinkage; ;}
3792 #line 1621 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
3793 { (yyval.Linkage) = GlobalValue::AppendingLinkage; ;}
3797 #line 1622 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
3798 { (yyval.Linkage) = GlobalValue::DLLImportLinkage; ;}
3802 #line 1623 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
3803 { (yyval.Linkage) = GlobalValue::DLLExportLinkage; ;}
3807 #line 1624 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
3808 { (yyval.Linkage) = GlobalValue::ExternalWeakLinkage; ;}
3812 #line 1625 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
3813 { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;}
3817 #line 1629 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
3818 { (yyval.UIntVal) = CallingConv::C; ;}
3822 #line 1630 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
3823 { (yyval.UIntVal) = CallingConv::C; ;}
3827 #line 1631 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
3828 { (yyval.UIntVal) = CallingConv::CSRet; ;}
3832 #line 1632 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
3833 { (yyval.UIntVal) = CallingConv::Fast; ;}
3837 #line 1633 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
3838 { (yyval.UIntVal) = CallingConv::Cold; ;}
3842 #line 1634 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
3843 { (yyval.UIntVal) = CallingConv::X86_StdCall; ;}
3847 #line 1635 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
3848 { (yyval.UIntVal) = CallingConv::X86_FastCall; ;}
3852 #line 1636 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
3854 if ((unsigned)(yyvsp[0].UInt64Val) != (yyvsp[0].UInt64Val))
3855 error("Calling conv too large");
3856 (yyval.UIntVal) = (yyvsp[0].UInt64Val);
3861 #line 1646 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
3862 { (yyval.UIntVal) = 0; ;}
3866 #line 1647 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
3868 (yyval.UIntVal) = (yyvsp[0].UInt64Val);
3869 if ((yyval.UIntVal) != 0 && !isPowerOf2_32((yyval.UIntVal)))
3870 error("Alignment must be a power of two");
3875 #line 1655 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
3876 { (yyval.UIntVal) = 0; ;}
3880 #line 1656 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
3882 (yyval.UIntVal) = (yyvsp[0].UInt64Val);
3883 if ((yyval.UIntVal) != 0 && !isPowerOf2_32((yyval.UIntVal)))
3884 error("Alignment must be a power of two");
3889 #line 1664 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
3891 for (unsigned i = 0, e = strlen((yyvsp[0].StrVal)); i != e; ++i)
3892 if ((yyvsp[0].StrVal)[i] == '"' || (yyvsp[0].StrVal)[i] == '\\')
3893 error("Invalid character in section name");
3894 (yyval.StrVal) = (yyvsp[0].StrVal);
3899 #line 1673 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
3900 { (yyval.StrVal) = 0; ;}
3904 #line 1674 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
3905 { (yyval.StrVal) = (yyvsp[0].StrVal); ;}
3909 #line 1681 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
3914 #line 1682 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
3919 #line 1686 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
3921 CurGV->setSection((yyvsp[0].StrVal));
3922 free((yyvsp[0].StrVal));
3927 #line 1690 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
3929 if ((yyvsp[0].UInt64Val) != 0 && !isPowerOf2_32((yyvsp[0].UInt64Val)))
3930 error("Alignment must be a power of two");
3931 CurGV->setAlignment((yyvsp[0].UInt64Val));
3937 #line 1707 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
3939 (yyval.TypeVal).T = new PATypeHolder((yyvsp[0].PrimType).T);
3940 (yyval.TypeVal).S = Signless;
3945 #line 1715 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
3947 (yyval.TypeVal).T = new PATypeHolder((yyvsp[0].PrimType).T);
3948 (yyval.TypeVal).S = Signless;
3953 #line 1722 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
3955 if (!UpRefs.empty())
3956 error("Invalid upreference in type: " + (*(yyvsp[0].TypeVal).T)->getDescription());
3957 (yyval.TypeVal) = (yyvsp[0].TypeVal);
3962 #line 1736 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
3964 (yyval.TypeVal).T = new PATypeHolder((yyvsp[0].PrimType).T);
3965 (yyval.TypeVal).S = (yyvsp[0].PrimType).S;
3970 #line 1740 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
3972 (yyval.TypeVal).T = new PATypeHolder(OpaqueType::get());
3973 (yyval.TypeVal).S = Signless;
3978 #line 1744 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
3979 { // Named types are also simple types...
3980 const Type* tmp = getType((yyvsp[0].ValIDVal));
3981 (yyval.TypeVal).T = new PATypeHolder(tmp);
3982 (yyval.TypeVal).S = Signless; // FIXME: what if its signed?
3987 #line 1749 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
3988 { // Type UpReference
3989 if ((yyvsp[0].UInt64Val) > (uint64_t)~0U)
3990 error("Value out of range");
3991 OpaqueType *OT = OpaqueType::get(); // Use temporary placeholder
3992 UpRefs.push_back(UpRefRecord((unsigned)(yyvsp[0].UInt64Val), OT)); // Add to vector...
3993 (yyval.TypeVal).T = new PATypeHolder(OT);
3994 (yyval.TypeVal).S = Signless;
3995 UR_OUT("New Upreference!\n");
4000 #line 1758 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4001 { // Function derived type?
4002 std::vector<const Type*> Params;
4003 for (std::list<llvm::PATypeInfo>::iterator I = (yyvsp[-1].TypeList)->begin(),
4004 E = (yyvsp[-1].TypeList)->end(); I != E; ++I) {
4005 Params.push_back(I->T->get());
4008 bool isVarArg = Params.size() && Params.back() == Type::VoidTy;
4009 if (isVarArg) Params.pop_back();
4011 (yyval.TypeVal).T = new PATypeHolder(HandleUpRefs(
4012 FunctionType::get((yyvsp[-3].TypeVal).T->get(),Params,isVarArg)));
4013 (yyval.TypeVal).S = (yyvsp[-3].TypeVal).S;
4014 delete (yyvsp[-3].TypeVal).T; // Delete the return type handle
4015 delete (yyvsp[-1].TypeList); // Delete the argument list
4020 #line 1774 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4021 { // Sized array type?
4022 (yyval.TypeVal).T = new PATypeHolder(HandleUpRefs(ArrayType::get((yyvsp[-1].TypeVal).T->get(),
4023 (unsigned)(yyvsp[-3].UInt64Val))));
4024 (yyval.TypeVal).S = (yyvsp[-1].TypeVal).S;
4025 delete (yyvsp[-1].TypeVal).T;
4030 #line 1780 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4031 { // Packed array type?
4032 const llvm::Type* ElemTy = (yyvsp[-1].TypeVal).T->get();
4033 if ((unsigned)(yyvsp[-3].UInt64Val) != (yyvsp[-3].UInt64Val))
4034 error("Unsigned result not equal to signed result");
4035 if (!(ElemTy->isInteger() || ElemTy->isFloatingPoint()))
4036 error("Elements of a PackedType must be integer or floating point");
4037 if (!isPowerOf2_32((yyvsp[-3].UInt64Val)))
4038 error("PackedType length should be a power of 2");
4039 (yyval.TypeVal).T = new PATypeHolder(HandleUpRefs(PackedType::get(ElemTy,
4040 (unsigned)(yyvsp[-3].UInt64Val))));
4041 (yyval.TypeVal).S = (yyvsp[-1].TypeVal).S;
4042 delete (yyvsp[-1].TypeVal).T;
4047 #line 1793 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4048 { // Structure type?
4049 std::vector<const Type*> Elements;
4050 for (std::list<llvm::PATypeInfo>::iterator I = (yyvsp[-1].TypeList)->begin(),
4051 E = (yyvsp[-1].TypeList)->end(); I != E; ++I)
4052 Elements.push_back(I->T->get());
4053 (yyval.TypeVal).T = new PATypeHolder(HandleUpRefs(StructType::get(Elements)));
4054 (yyval.TypeVal).S = Signless;
4055 delete (yyvsp[-1].TypeList);
4060 #line 1802 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4061 { // Empty structure type?
4062 (yyval.TypeVal).T = new PATypeHolder(StructType::get(std::vector<const Type*>()));
4063 (yyval.TypeVal).S = Signless;
4068 #line 1806 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4069 { // Packed Structure type?
4070 std::vector<const Type*> Elements;
4071 for (std::list<llvm::PATypeInfo>::iterator I = (yyvsp[-2].TypeList)->begin(),
4072 E = (yyvsp[-2].TypeList)->end(); I != E; ++I) {
4073 Elements.push_back(I->T->get());
4076 (yyval.TypeVal).T = new PATypeHolder(HandleUpRefs(StructType::get(Elements, true)));
4077 (yyval.TypeVal).S = Signless;
4078 delete (yyvsp[-2].TypeList);
4083 #line 1817 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4084 { // Empty packed structure type?
4085 (yyval.TypeVal).T = new PATypeHolder(StructType::get(std::vector<const Type*>(),true));
4086 (yyval.TypeVal).S = Signless;
4091 #line 1821 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4093 if ((yyvsp[-1].TypeVal).T->get() == Type::LabelTy)
4094 error("Cannot form a pointer to a basic block");
4095 (yyval.TypeVal).T = new PATypeHolder(HandleUpRefs(PointerType::get((yyvsp[-1].TypeVal).T->get())));
4096 (yyval.TypeVal).S = (yyvsp[-1].TypeVal).S;
4097 delete (yyvsp[-1].TypeVal).T;
4102 #line 1834 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4104 (yyval.TypeList) = new std::list<PATypeInfo>();
4105 (yyval.TypeList)->push_back((yyvsp[0].TypeVal));
4110 #line 1838 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4112 ((yyval.TypeList)=(yyvsp[-2].TypeList))->push_back((yyvsp[0].TypeVal));
4117 #line 1846 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4120 VoidTI.T = new PATypeHolder(Type::VoidTy);
4121 VoidTI.S = Signless;
4122 ((yyval.TypeList)=(yyvsp[-2].TypeList))->push_back(VoidTI);
4127 #line 1852 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4129 (yyval.TypeList) = new std::list<PATypeInfo>();
4131 VoidTI.T = new PATypeHolder(Type::VoidTy);
4132 VoidTI.S = Signless;
4133 (yyval.TypeList)->push_back(VoidTI);
4138 #line 1859 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4140 (yyval.TypeList) = new std::list<PATypeInfo>();
4145 #line 1871 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4146 { // Nonempty unsized arr
4147 const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[-3].TypeVal).T->get());
4149 error("Cannot make array constant with type: '" +
4150 (yyvsp[-3].TypeVal).T->get()->getDescription() + "'");
4151 const Type *ETy = ATy->getElementType();
4152 int NumElements = ATy->getNumElements();
4154 // Verify that we have the correct size...
4155 if (NumElements != -1 && NumElements != (int)(yyvsp[-1].ConstVector)->size())
4156 error("Type mismatch: constant sized array initialized with " +
4157 utostr((yyvsp[-1].ConstVector)->size()) + " arguments, but has size of " +
4158 itostr(NumElements) + "");
4160 // Verify all elements are correct type!
4161 std::vector<Constant*> Elems;
4162 for (unsigned i = 0; i < (yyvsp[-1].ConstVector)->size(); i++) {
4163 Constant *C = (*(yyvsp[-1].ConstVector))[i].C;
4164 const Type* ValTy = C->getType();
4166 error("Element #" + utostr(i) + " is not of type '" +
4167 ETy->getDescription() +"' as required!\nIt is of type '"+
4168 ValTy->getDescription() + "'");
4171 (yyval.ConstVal).C = ConstantArray::get(ATy, Elems);
4172 (yyval.ConstVal).S = (yyvsp[-3].TypeVal).S;
4173 delete (yyvsp[-3].TypeVal).T;
4174 delete (yyvsp[-1].ConstVector);
4179 #line 1901 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4181 const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[-2].TypeVal).T->get());
4183 error("Cannot make array constant with type: '" +
4184 (yyvsp[-2].TypeVal).T->get()->getDescription() + "'");
4185 int NumElements = ATy->getNumElements();
4186 if (NumElements != -1 && NumElements != 0)
4187 error("Type mismatch: constant sized array initialized with 0"
4188 " arguments, but has size of " + itostr(NumElements) +"");
4189 (yyval.ConstVal).C = ConstantArray::get(ATy, std::vector<Constant*>());
4190 (yyval.ConstVal).S = (yyvsp[-2].TypeVal).S;
4191 delete (yyvsp[-2].TypeVal).T;
4196 #line 1914 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4198 const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[-2].TypeVal).T->get());
4200 error("Cannot make array constant with type: '" +
4201 (yyvsp[-2].TypeVal).T->get()->getDescription() + "'");
4202 int NumElements = ATy->getNumElements();
4203 const Type *ETy = dyn_cast<IntegerType>(ATy->getElementType());
4204 if (!ETy || cast<IntegerType>(ETy)->getBitWidth() != 8)
4205 error("String arrays require type i8, not '" + ETy->getDescription() +
4207 char *EndStr = UnEscapeLexed((yyvsp[0].StrVal), true);
4208 if (NumElements != -1 && NumElements != (EndStr-(yyvsp[0].StrVal)))
4209 error("Can't build string constant of size " +
4210 itostr((int)(EndStr-(yyvsp[0].StrVal))) + " when array has size " +
4211 itostr(NumElements) + "");
4212 std::vector<Constant*> Vals;
4213 for (char *C = (char *)(yyvsp[0].StrVal); C != (char *)EndStr; ++C)
4214 Vals.push_back(ConstantInt::get(ETy, *C));
4215 free((yyvsp[0].StrVal));
4216 (yyval.ConstVal).C = ConstantArray::get(ATy, Vals);
4217 (yyval.ConstVal).S = (yyvsp[-2].TypeVal).S;
4218 delete (yyvsp[-2].TypeVal).T;
4223 #line 1937 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4224 { // Nonempty unsized arr
4225 const PackedType *PTy = dyn_cast<PackedType>((yyvsp[-3].TypeVal).T->get());
4227 error("Cannot make packed constant with type: '" +
4228 (yyvsp[-3].TypeVal).T->get()->getDescription() + "'");
4229 const Type *ETy = PTy->getElementType();
4230 int NumElements = PTy->getNumElements();
4231 // Verify that we have the correct size...
4232 if (NumElements != -1 && NumElements != (int)(yyvsp[-1].ConstVector)->size())
4233 error("Type mismatch: constant sized packed initialized with " +
4234 utostr((yyvsp[-1].ConstVector)->size()) + " arguments, but has size of " +
4235 itostr(NumElements) + "");
4236 // Verify all elements are correct type!
4237 std::vector<Constant*> Elems;
4238 for (unsigned i = 0; i < (yyvsp[-1].ConstVector)->size(); i++) {
4239 Constant *C = (*(yyvsp[-1].ConstVector))[i].C;
4240 const Type* ValTy = C->getType();
4242 error("Element #" + utostr(i) + " is not of type '" +
4243 ETy->getDescription() +"' as required!\nIt is of type '"+
4244 ValTy->getDescription() + "'");
4247 (yyval.ConstVal).C = ConstantPacked::get(PTy, Elems);
4248 (yyval.ConstVal).S = (yyvsp[-3].TypeVal).S;
4249 delete (yyvsp[-3].TypeVal).T;
4250 delete (yyvsp[-1].ConstVector);
4255 #line 1965 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4257 const StructType *STy = dyn_cast<StructType>((yyvsp[-3].TypeVal).T->get());
4259 error("Cannot make struct constant with type: '" +
4260 (yyvsp[-3].TypeVal).T->get()->getDescription() + "'");
4261 if ((yyvsp[-1].ConstVector)->size() != STy->getNumContainedTypes())
4262 error("Illegal number of initializers for structure type");
4264 // Check to ensure that constants are compatible with the type initializer!
4265 std::vector<Constant*> Fields;
4266 for (unsigned i = 0, e = (yyvsp[-1].ConstVector)->size(); i != e; ++i) {
4267 Constant *C = (*(yyvsp[-1].ConstVector))[i].C;
4268 if (C->getType() != STy->getElementType(i))
4269 error("Expected type '" + STy->getElementType(i)->getDescription() +
4270 "' for element #" + utostr(i) + " of structure initializer");
4271 Fields.push_back(C);
4273 (yyval.ConstVal).C = ConstantStruct::get(STy, Fields);
4274 (yyval.ConstVal).S = (yyvsp[-3].TypeVal).S;
4275 delete (yyvsp[-3].TypeVal).T;
4276 delete (yyvsp[-1].ConstVector);
4281 #line 1987 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4283 const StructType *STy = dyn_cast<StructType>((yyvsp[-2].TypeVal).T->get());
4285 error("Cannot make struct constant with type: '" +
4286 (yyvsp[-2].TypeVal).T->get()->getDescription() + "'");
4287 if (STy->getNumContainedTypes() != 0)
4288 error("Illegal number of initializers for structure type");
4289 (yyval.ConstVal).C = ConstantStruct::get(STy, std::vector<Constant*>());
4290 (yyval.ConstVal).S = (yyvsp[-2].TypeVal).S;
4291 delete (yyvsp[-2].TypeVal).T;
4296 #line 1998 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4298 const StructType *STy = dyn_cast<StructType>((yyvsp[-5].TypeVal).T->get());
4300 error("Cannot make packed struct constant with type: '" +
4301 (yyvsp[-5].TypeVal).T->get()->getDescription() + "'");
4302 if ((yyvsp[-2].ConstVector)->size() != STy->getNumContainedTypes())
4303 error("Illegal number of initializers for packed structure type");
4305 // Check to ensure that constants are compatible with the type initializer!
4306 std::vector<Constant*> Fields;
4307 for (unsigned i = 0, e = (yyvsp[-2].ConstVector)->size(); i != e; ++i) {
4308 Constant *C = (*(yyvsp[-2].ConstVector))[i].C;
4309 if (C->getType() != STy->getElementType(i))
4310 error("Expected type '" + STy->getElementType(i)->getDescription() +
4311 "' for element #" + utostr(i) + " of packed struct initializer");
4312 Fields.push_back(C);
4314 (yyval.ConstVal).C = ConstantStruct::get(STy, Fields);
4315 (yyval.ConstVal).S = (yyvsp[-5].TypeVal).S;
4316 delete (yyvsp[-5].TypeVal).T;
4317 delete (yyvsp[-2].ConstVector);
4322 #line 2020 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4324 const StructType *STy = dyn_cast<StructType>((yyvsp[-4].TypeVal).T->get());
4326 error("Cannot make packed struct constant with type: '" +
4327 (yyvsp[-4].TypeVal).T->get()->getDescription() + "'");
4328 if (STy->getNumContainedTypes() != 0)
4329 error("Illegal number of initializers for packed structure type");
4330 (yyval.ConstVal).C = ConstantStruct::get(STy, std::vector<Constant*>());
4331 (yyval.ConstVal).S = (yyvsp[-4].TypeVal).S;
4332 delete (yyvsp[-4].TypeVal).T;
4337 #line 2031 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4339 const PointerType *PTy = dyn_cast<PointerType>((yyvsp[-1].TypeVal).T->get());
4341 error("Cannot make null pointer constant with type: '" +
4342 (yyvsp[-1].TypeVal).T->get()->getDescription() + "'");
4343 (yyval.ConstVal).C = ConstantPointerNull::get(PTy);
4344 (yyval.ConstVal).S = (yyvsp[-1].TypeVal).S;
4345 delete (yyvsp[-1].TypeVal).T;
4350 #line 2040 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4352 (yyval.ConstVal).C = UndefValue::get((yyvsp[-1].TypeVal).T->get());
4353 (yyval.ConstVal).S = (yyvsp[-1].TypeVal).S;
4354 delete (yyvsp[-1].TypeVal).T;
4359 #line 2045 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4361 const PointerType *Ty = dyn_cast<PointerType>((yyvsp[-1].TypeVal).T->get());
4363 error("Global const reference must be a pointer type, not" +
4364 (yyvsp[-1].TypeVal).T->get()->getDescription());
4366 // ConstExprs can exist in the body of a function, thus creating
4367 // GlobalValues whenever they refer to a variable. Because we are in
4368 // the context of a function, getExistingValue will search the functions
4369 // symbol table instead of the module symbol table for the global symbol,
4370 // which throws things all off. To get around this, we just tell
4371 // getExistingValue that we are at global scope here.
4373 Function *SavedCurFn = CurFun.CurrentFunction;
4374 CurFun.CurrentFunction = 0;
4375 Value *V = getExistingValue(Ty, (yyvsp[0].ValIDVal));
4376 CurFun.CurrentFunction = SavedCurFn;
4378 // If this is an initializer for a constant pointer, which is referencing a
4379 // (currently) undefined variable, create a stub now that shall be replaced
4380 // in the future with the right type of variable.
4383 assert(isa<PointerType>(Ty) && "Globals may only be used as pointers");
4384 const PointerType *PT = cast<PointerType>(Ty);
4386 // First check to see if the forward references value is already created!
4387 PerModuleInfo::GlobalRefsType::iterator I =
4388 CurModule.GlobalRefs.find(std::make_pair(PT, (yyvsp[0].ValIDVal)));
4390 if (I != CurModule.GlobalRefs.end()) {
4391 V = I->second; // Placeholder already exists, use it...
4392 (yyvsp[0].ValIDVal).destroy();
4395 if ((yyvsp[0].ValIDVal).Type == ValID::NameVal) Name = (yyvsp[0].ValIDVal).Name;
4397 // Create the forward referenced global.
4399 if (const FunctionType *FTy =
4400 dyn_cast<FunctionType>(PT->getElementType())) {
4401 GV = new Function(FTy, GlobalValue::ExternalLinkage, Name,
4402 CurModule.CurrentModule);
4404 GV = new GlobalVariable(PT->getElementType(), false,
4405 GlobalValue::ExternalLinkage, 0,
4406 Name, CurModule.CurrentModule);
4409 // Keep track of the fact that we have a forward ref to recycle it
4410 CurModule.GlobalRefs.insert(std::make_pair(std::make_pair(PT, (yyvsp[0].ValIDVal)), GV));
4414 (yyval.ConstVal).C = cast<GlobalValue>(V);
4415 (yyval.ConstVal).S = (yyvsp[-1].TypeVal).S;
4416 delete (yyvsp[-1].TypeVal).T; // Free the type handle
4421 #line 2103 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4423 if ((yyvsp[-1].TypeVal).T->get() != (yyvsp[0].ConstVal).C->getType())
4424 error("Mismatched types for constant expression");
4425 (yyval.ConstVal) = (yyvsp[0].ConstVal);
4426 (yyval.ConstVal).S = (yyvsp[-1].TypeVal).S;
4427 delete (yyvsp[-1].TypeVal).T;
4432 #line 2110 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4434 const Type *Ty = (yyvsp[-1].TypeVal).T->get();
4435 if (isa<FunctionType>(Ty) || Ty == Type::LabelTy || isa<OpaqueType>(Ty))
4436 error("Cannot create a null initialized value of this type");
4437 (yyval.ConstVal).C = Constant::getNullValue(Ty);
4438 (yyval.ConstVal).S = (yyvsp[-1].TypeVal).S;
4439 delete (yyvsp[-1].TypeVal).T;
4444 #line 2118 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4445 { // integral constants
4446 const Type *Ty = (yyvsp[-1].PrimType).T;
4447 if (!ConstantInt::isValueValidForType(Ty, (yyvsp[0].SInt64Val)))
4448 error("Constant value doesn't fit in type");
4449 (yyval.ConstVal).C = ConstantInt::get(Ty, (yyvsp[0].SInt64Val));
4450 (yyval.ConstVal).S = Signed;
4455 #line 2125 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4456 { // integral constants
4457 const Type *Ty = (yyvsp[-1].PrimType).T;
4458 if (!ConstantInt::isValueValidForType(Ty, (yyvsp[0].UInt64Val)))
4459 error("Constant value doesn't fit in type");
4460 (yyval.ConstVal).C = ConstantInt::get(Ty, (yyvsp[0].UInt64Val));
4461 (yyval.ConstVal).S = Unsigned;
4466 #line 2132 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4467 { // Boolean constants
4468 (yyval.ConstVal).C = ConstantInt::get(Type::Int1Ty, true);
4469 (yyval.ConstVal).S = Unsigned;
4474 #line 2136 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4475 { // Boolean constants
4476 (yyval.ConstVal).C = ConstantInt::get(Type::Int1Ty, false);
4477 (yyval.ConstVal).S = Unsigned;
4482 #line 2140 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4483 { // Float & Double constants
4484 if (!ConstantFP::isValueValidForType((yyvsp[-1].PrimType).T, (yyvsp[0].FPVal)))
4485 error("Floating point constant invalid for type");
4486 (yyval.ConstVal).C = ConstantFP::get((yyvsp[-1].PrimType).T, (yyvsp[0].FPVal));
4487 (yyval.ConstVal).S = Signless;
4492 #line 2149 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4494 const Type* SrcTy = (yyvsp[-3].ConstVal).C->getType();
4495 const Type* DstTy = (yyvsp[-1].TypeVal).T->get();
4496 Signedness SrcSign = (yyvsp[-3].ConstVal).S;
4497 Signedness DstSign = (yyvsp[-1].TypeVal).S;
4498 if (!SrcTy->isFirstClassType())
4499 error("cast constant expression from a non-primitive type: '" +
4500 SrcTy->getDescription() + "'");
4501 if (!DstTy->isFirstClassType())
4502 error("cast constant expression to a non-primitive type: '" +
4503 DstTy->getDescription() + "'");
4504 (yyval.ConstVal).C = cast<Constant>(getCast((yyvsp[-5].CastOpVal), (yyvsp[-3].ConstVal).C, SrcSign, DstTy, DstSign));
4505 (yyval.ConstVal).S = DstSign;
4506 delete (yyvsp[-1].TypeVal).T;
4511 #line 2164 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4513 const Type *Ty = (yyvsp[-2].ConstVal).C->getType();
4514 if (!isa<PointerType>(Ty))
4515 error("GetElementPtr requires a pointer operand");
4517 std::vector<Value*> VIndices;
4518 std::vector<Constant*> CIndices;
4519 upgradeGEPIndices((yyvsp[-2].ConstVal).C->getType(), (yyvsp[-1].ValueList), VIndices, &CIndices);
4521 delete (yyvsp[-1].ValueList);
4522 (yyval.ConstVal).C = ConstantExpr::getGetElementPtr((yyvsp[-2].ConstVal).C, CIndices);
4523 (yyval.ConstVal).S = Signless;
4528 #line 2177 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4530 if (!(yyvsp[-5].ConstVal).C->getType()->isInteger() ||
4531 cast<IntegerType>((yyvsp[-5].ConstVal).C->getType())->getBitWidth() != 1)
4532 error("Select condition must be bool type");
4533 if ((yyvsp[-3].ConstVal).C->getType() != (yyvsp[-1].ConstVal).C->getType())
4534 error("Select operand types must match");
4535 (yyval.ConstVal).C = ConstantExpr::getSelect((yyvsp[-5].ConstVal).C, (yyvsp[-3].ConstVal).C, (yyvsp[-1].ConstVal).C);
4536 (yyval.ConstVal).S = Unsigned;
4541 #line 2186 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4543 const Type *Ty = (yyvsp[-3].ConstVal).C->getType();
4544 if (Ty != (yyvsp[-1].ConstVal).C->getType())
4545 error("Binary operator types must match");
4546 // First, make sure we're dealing with the right opcode by upgrading from
4547 // obsolete versions.
4548 Instruction::BinaryOps Opcode = getBinaryOp((yyvsp[-5].BinaryOpVal), Ty, (yyvsp[-3].ConstVal).S);
4550 // HACK: llvm 1.3 and earlier used to emit invalid pointer constant exprs.
4551 // To retain backward compatibility with these early compilers, we emit a
4552 // cast to the appropriate integer type automatically if we are in the
4553 // broken case. See PR424 for more information.
4554 if (!isa<PointerType>(Ty)) {
4555 (yyval.ConstVal).C = ConstantExpr::get(Opcode, (yyvsp[-3].ConstVal).C, (yyvsp[-1].ConstVal).C);
4557 const Type *IntPtrTy = 0;
4558 switch (CurModule.CurrentModule->getPointerSize()) {
4559 case Module::Pointer32: IntPtrTy = Type::Int32Ty; break;
4560 case Module::Pointer64: IntPtrTy = Type::Int64Ty; break;
4561 default: error("invalid pointer binary constant expr");
4563 (yyval.ConstVal).C = ConstantExpr::get(Opcode,
4564 ConstantExpr::getCast(Instruction::PtrToInt, (yyvsp[-3].ConstVal).C, IntPtrTy),
4565 ConstantExpr::getCast(Instruction::PtrToInt, (yyvsp[-1].ConstVal).C, IntPtrTy));
4566 (yyval.ConstVal).C = ConstantExpr::getCast(Instruction::IntToPtr, (yyval.ConstVal).C, Ty);
4568 (yyval.ConstVal).S = (yyvsp[-3].ConstVal).S;
4573 #line 2214 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4575 const Type* Ty = (yyvsp[-3].ConstVal).C->getType();
4576 if (Ty != (yyvsp[-1].ConstVal).C->getType())
4577 error("Logical operator types must match");
4578 if (!Ty->isInteger()) {
4579 if (!isa<PackedType>(Ty) ||
4580 !cast<PackedType>(Ty)->getElementType()->isInteger())
4581 error("Logical operator requires integer operands");
4583 Instruction::BinaryOps Opcode = getBinaryOp((yyvsp[-5].BinaryOpVal), Ty, (yyvsp[-3].ConstVal).S);
4584 (yyval.ConstVal).C = ConstantExpr::get(Opcode, (yyvsp[-3].ConstVal).C, (yyvsp[-1].ConstVal).C);
4585 (yyval.ConstVal).S = (yyvsp[-3].ConstVal).S;
4590 #line 2227 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4592 const Type* Ty = (yyvsp[-3].ConstVal).C->getType();
4593 if (Ty != (yyvsp[-1].ConstVal).C->getType())
4594 error("setcc operand types must match");
4595 unsigned short pred;
4596 Instruction::OtherOps Opcode = getCompareOp((yyvsp[-5].BinaryOpVal), pred, Ty, (yyvsp[-3].ConstVal).S);
4597 (yyval.ConstVal).C = ConstantExpr::getCompare(Opcode, (yyvsp[-3].ConstVal).C, (yyvsp[-1].ConstVal).C);
4598 (yyval.ConstVal).S = Unsigned;
4603 #line 2236 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4605 if ((yyvsp[-3].ConstVal).C->getType() != (yyvsp[-1].ConstVal).C->getType())
4606 error("icmp operand types must match");
4607 (yyval.ConstVal).C = ConstantExpr::getCompare((yyvsp[-5].IPred), (yyvsp[-3].ConstVal).C, (yyvsp[-1].ConstVal).C);
4608 (yyval.ConstVal).S = Unsigned;
4613 #line 2242 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4615 if ((yyvsp[-3].ConstVal).C->getType() != (yyvsp[-1].ConstVal).C->getType())
4616 error("fcmp operand types must match");
4617 (yyval.ConstVal).C = ConstantExpr::getCompare((yyvsp[-5].FPred), (yyvsp[-3].ConstVal).C, (yyvsp[-1].ConstVal).C);
4618 (yyval.ConstVal).S = Unsigned;
4623 #line 2248 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4625 if (!(yyvsp[-1].ConstVal).C->getType()->isInteger() ||
4626 cast<IntegerType>((yyvsp[-1].ConstVal).C->getType())->getBitWidth() != 8)
4627 error("Shift count for shift constant must be unsigned byte");
4628 if (!(yyvsp[-3].ConstVal).C->getType()->isInteger())
4629 error("Shift constant expression requires integer operand");
4630 (yyval.ConstVal).C = ConstantExpr::get(getOtherOp((yyvsp[-5].OtherOpVal), (yyvsp[-3].ConstVal).S), (yyvsp[-3].ConstVal).C, (yyvsp[-1].ConstVal).C);
4631 (yyval.ConstVal).S = (yyvsp[-3].ConstVal).S;
4636 #line 2257 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4638 if (!ExtractElementInst::isValidOperands((yyvsp[-3].ConstVal).C, (yyvsp[-1].ConstVal).C))
4639 error("Invalid extractelement operands");
4640 (yyval.ConstVal).C = ConstantExpr::getExtractElement((yyvsp[-3].ConstVal).C, (yyvsp[-1].ConstVal).C);
4641 (yyval.ConstVal).S = (yyvsp[-3].ConstVal).S;
4646 #line 2263 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4648 if (!InsertElementInst::isValidOperands((yyvsp[-5].ConstVal).C, (yyvsp[-3].ConstVal).C, (yyvsp[-1].ConstVal).C))
4649 error("Invalid insertelement operands");
4650 (yyval.ConstVal).C = ConstantExpr::getInsertElement((yyvsp[-5].ConstVal).C, (yyvsp[-3].ConstVal).C, (yyvsp[-1].ConstVal).C);
4651 (yyval.ConstVal).S = (yyvsp[-5].ConstVal).S;
4656 #line 2269 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4658 if (!ShuffleVectorInst::isValidOperands((yyvsp[-5].ConstVal).C, (yyvsp[-3].ConstVal).C, (yyvsp[-1].ConstVal).C))
4659 error("Invalid shufflevector operands");
4660 (yyval.ConstVal).C = ConstantExpr::getShuffleVector((yyvsp[-5].ConstVal).C, (yyvsp[-3].ConstVal).C, (yyvsp[-1].ConstVal).C);
4661 (yyval.ConstVal).S = (yyvsp[-5].ConstVal).S;
4666 #line 2280 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4667 { ((yyval.ConstVector) = (yyvsp[-2].ConstVector))->push_back((yyvsp[0].ConstVal)); ;}
4671 #line 2281 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4673 (yyval.ConstVector) = new std::vector<ConstInfo>();
4674 (yyval.ConstVector)->push_back((yyvsp[0].ConstVal));
4679 #line 2290 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4680 { (yyval.BoolVal) = false; ;}
4684 #line 2291 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4685 { (yyval.BoolVal) = true; ;}
4689 #line 2303 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4691 (yyval.ModuleVal) = ParserResult = (yyvsp[0].ModuleVal);
4692 CurModule.ModuleDone();
4697 #line 2312 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4698 { (yyval.ModuleVal) = (yyvsp[-1].ModuleVal); CurFun.FunctionDone(); ;}
4702 #line 2313 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4703 { (yyval.ModuleVal) = (yyvsp[-1].ModuleVal); ;}
4707 #line 2314 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4708 { (yyval.ModuleVal) = (yyvsp[-3].ModuleVal); ;}
4712 #line 2315 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4713 { (yyval.ModuleVal) = (yyvsp[-1].ModuleVal); ;}
4717 #line 2316 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4719 (yyval.ModuleVal) = CurModule.CurrentModule;
4720 // Emit an error if there are any unresolved types left.
4721 if (!CurModule.LateResolveTypes.empty()) {
4722 const ValID &DID = CurModule.LateResolveTypes.begin()->first;
4723 if (DID.Type == ValID::NameVal) {
4724 error("Reference to an undefined type: '"+DID.getName() + "'");
4726 error("Reference to an undefined type: #" + itostr(DID.Num));
4733 #line 2332 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4735 // Eagerly resolve types. This is not an optimization, this is a
4736 // requirement that is due to the fact that we could have this:
4738 // %list = type { %list * }
4739 // %list = type { %list * } ; repeated type decl
4741 // If types are not resolved eagerly, then the two types will not be
4742 // determined to be the same type!
4744 const Type* Ty = (yyvsp[0].TypeVal).T->get();
4745 ResolveTypeTo((yyvsp[-2].StrVal), Ty);
4747 if (!setTypeName(Ty, (yyvsp[-2].StrVal)) && !(yyvsp[-2].StrVal)) {
4748 // If this is a named type that is not a redefinition, add it to the slot
4750 CurModule.Types.push_back(Ty);
4752 delete (yyvsp[0].TypeVal).T;
4757 #line 2352 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4758 { // Function prototypes can be in const pool
4763 #line 2354 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4764 { // Asm blocks can be in the const pool
4769 #line 2356 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4771 if ((yyvsp[0].ConstVal).C == 0)
4772 error("Global value initializer is not a constant");
4773 CurGV = ParseGlobalVariable((yyvsp[-3].StrVal), (yyvsp[-2].Linkage), (yyvsp[-1].BoolVal), (yyvsp[0].ConstVal).C->getType(), (yyvsp[0].ConstVal).C);
4778 #line 2360 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4785 #line 2363 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4787 const Type *Ty = (yyvsp[0].TypeVal).T->get();
4788 CurGV = ParseGlobalVariable((yyvsp[-3].StrVal), GlobalValue::ExternalLinkage, (yyvsp[-1].BoolVal), Ty, 0);
4789 delete (yyvsp[0].TypeVal).T;
4794 #line 2367 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4801 #line 2370 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4803 const Type *Ty = (yyvsp[0].TypeVal).T->get();
4804 CurGV = ParseGlobalVariable((yyvsp[-3].StrVal), GlobalValue::DLLImportLinkage, (yyvsp[-1].BoolVal), Ty, 0);
4805 delete (yyvsp[0].TypeVal).T;
4810 #line 2374 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4817 #line 2377 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4819 const Type *Ty = (yyvsp[0].TypeVal).T->get();
4821 ParseGlobalVariable((yyvsp[-3].StrVal), GlobalValue::ExternalWeakLinkage, (yyvsp[-1].BoolVal), Ty, 0);
4822 delete (yyvsp[0].TypeVal).T;
4827 #line 2382 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4834 #line 2385 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4840 #line 2387 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4846 #line 2389 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4852 #line 2394 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4854 const std::string &AsmSoFar = CurModule.CurrentModule->getModuleInlineAsm();
4855 char *EndStr = UnEscapeLexed((yyvsp[0].StrVal), true);
4856 std::string NewAsm((yyvsp[0].StrVal), EndStr);
4857 free((yyvsp[0].StrVal));
4859 if (AsmSoFar.empty())
4860 CurModule.CurrentModule->setModuleInlineAsm(NewAsm);
4862 CurModule.CurrentModule->setModuleInlineAsm(AsmSoFar+"\n"+NewAsm);
4867 #line 2408 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4868 { (yyval.Endianness) = Module::BigEndian; ;}
4872 #line 2409 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4873 { (yyval.Endianness) = Module::LittleEndian; ;}
4877 #line 2413 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4879 CurModule.setEndianness((yyvsp[0].Endianness));
4884 #line 2416 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4886 if ((yyvsp[0].UInt64Val) == 32)
4887 CurModule.setPointerSize(Module::Pointer32);
4888 else if ((yyvsp[0].UInt64Val) == 64)
4889 CurModule.setPointerSize(Module::Pointer64);
4891 error("Invalid pointer size: '" + utostr((yyvsp[0].UInt64Val)) + "'");
4896 #line 2424 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4898 CurModule.CurrentModule->setTargetTriple((yyvsp[0].StrVal));
4899 free((yyvsp[0].StrVal));
4904 #line 2428 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4906 CurModule.CurrentModule->setDataLayout((yyvsp[0].StrVal));
4907 free((yyvsp[0].StrVal));
4912 #line 2439 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4914 CurModule.CurrentModule->addLibrary((yyvsp[0].StrVal));
4915 free((yyvsp[0].StrVal));
4920 #line 2443 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4922 CurModule.CurrentModule->addLibrary((yyvsp[0].StrVal));
4923 free((yyvsp[0].StrVal));
4928 #line 2447 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4933 #line 2460 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4934 { (yyval.StrVal) = 0; ;}
4938 #line 2464 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4940 if ((yyvsp[-1].TypeVal).T->get() == Type::VoidTy)
4941 error("void typed arguments are invalid");
4942 (yyval.ArgVal) = new std::pair<PATypeInfo, char*>((yyvsp[-1].TypeVal), (yyvsp[0].StrVal));
4947 #line 2472 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4949 (yyval.ArgList) = (yyvsp[-2].ArgList);
4950 (yyval.ArgList)->push_back(*(yyvsp[0].ArgVal));
4951 delete (yyvsp[0].ArgVal);
4956 #line 2477 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4958 (yyval.ArgList) = new std::vector<std::pair<PATypeInfo,char*> >();
4959 (yyval.ArgList)->push_back(*(yyvsp[0].ArgVal));
4960 delete (yyvsp[0].ArgVal);
4965 #line 2485 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4966 { (yyval.ArgList) = (yyvsp[0].ArgList); ;}
4970 #line 2486 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4972 (yyval.ArgList) = (yyvsp[-2].ArgList);
4974 VoidTI.T = new PATypeHolder(Type::VoidTy);
4975 VoidTI.S = Signless;
4976 (yyval.ArgList)->push_back(std::pair<PATypeInfo, char*>(VoidTI, 0));
4981 #line 2493 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4983 (yyval.ArgList) = new std::vector<std::pair<PATypeInfo,char*> >();
4985 VoidTI.T = new PATypeHolder(Type::VoidTy);
4986 VoidTI.S = Signless;
4987 (yyval.ArgList)->push_back(std::pair<PATypeInfo, char*>(VoidTI, 0));
4992 #line 2500 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4993 { (yyval.ArgList) = 0; ;}
4997 #line 2504 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
4999 UnEscapeLexed((yyvsp[-5].StrVal));
5000 std::string FunctionName((yyvsp[-5].StrVal));
5001 free((yyvsp[-5].StrVal)); // Free strdup'd memory!
5003 const Type* RetTy = (yyvsp[-6].TypeVal).T->get();
5005 if (!RetTy->isFirstClassType() && RetTy != Type::VoidTy)
5006 error("LLVM functions cannot return aggregate types");
5008 std::vector<const Type*> ParamTypeList;
5010 // In LLVM 2.0 the signatures of three varargs intrinsics changed to take
5011 // i8*. We check here for those names and override the parameter list
5012 // types to ensure the prototype is correct.
5013 if (FunctionName == "llvm.va_start" || FunctionName == "llvm.va_end") {
5014 ParamTypeList.push_back(PointerType::get(Type::Int8Ty));
5015 } else if (FunctionName == "llvm.va_copy") {
5016 ParamTypeList.push_back(PointerType::get(Type::Int8Ty));
5017 ParamTypeList.push_back(PointerType::get(Type::Int8Ty));
5018 } else if ((yyvsp[-3].ArgList)) { // If there are arguments...
5019 for (std::vector<std::pair<PATypeInfo,char*> >::iterator
5020 I = (yyvsp[-3].ArgList)->begin(), E = (yyvsp[-3].ArgList)->end(); I != E; ++I) {
5021 const Type *Ty = I->first.T->get();
5022 ParamTypeList.push_back(Ty);
5027 ParamTypeList.size() && ParamTypeList.back() == Type::VoidTy;
5028 if (isVarArg) ParamTypeList.pop_back();
5030 const FunctionType *FT = FunctionType::get(RetTy, ParamTypeList, isVarArg);
5031 const PointerType *PFT = PointerType::get(FT);
5032 delete (yyvsp[-6].TypeVal).T;
5035 if (!FunctionName.empty()) {
5036 ID = ValID::create((char*)FunctionName.c_str());
5038 ID = ValID::create((int)CurModule.Values[PFT].size());
5042 // See if this function was forward referenced. If so, recycle the object.
5043 if (GlobalValue *FWRef = CurModule.GetForwardRefForGlobal(PFT, ID)) {
5044 // Move the function to the end of the list, from whereever it was
5045 // previously inserted.
5046 Fn = cast<Function>(FWRef);
5047 CurModule.CurrentModule->getFunctionList().remove(Fn);
5048 CurModule.CurrentModule->getFunctionList().push_back(Fn);
5049 } else if (!FunctionName.empty() && // Merge with an earlier prototype?
5050 (Fn = CurModule.CurrentModule->getFunction(FunctionName, FT))) {
5051 // If this is the case, either we need to be a forward decl, or it needs
5053 if (!CurFun.isDeclare && !Fn->isExternal())
5054 error("Redefinition of function '" + FunctionName + "'");
5056 // Make sure to strip off any argument names so we can't get conflicts.
5057 if (Fn->isExternal())
5058 for (Function::arg_iterator AI = Fn->arg_begin(), AE = Fn->arg_end();
5061 } else { // Not already defined?
5062 Fn = new Function(FT, GlobalValue::ExternalLinkage, FunctionName,
5063 CurModule.CurrentModule);
5065 InsertValue(Fn, CurModule.Values);
5068 CurFun.FunctionStart(Fn);
5070 if (CurFun.isDeclare) {
5071 // If we have declaration, always overwrite linkage. This will allow us
5072 // to correctly handle cases, when pointer to function is passed as
5073 // argument to another function.
5074 Fn->setLinkage(CurFun.Linkage);
5076 Fn->setCallingConv((yyvsp[-7].UIntVal));
5077 Fn->setAlignment((yyvsp[0].UIntVal));
5078 if ((yyvsp[-1].StrVal)) {
5079 Fn->setSection((yyvsp[-1].StrVal));
5080 free((yyvsp[-1].StrVal));
5083 // Add all of the arguments we parsed to the function...
5084 if ((yyvsp[-3].ArgList)) { // Is null if empty...
5085 if (isVarArg) { // Nuke the last entry
5086 assert((yyvsp[-3].ArgList)->back().first.T->get() == Type::VoidTy &&
5087 (yyvsp[-3].ArgList)->back().second == 0 && "Not a varargs marker");
5088 delete (yyvsp[-3].ArgList)->back().first.T;
5089 (yyvsp[-3].ArgList)->pop_back(); // Delete the last entry
5091 Function::arg_iterator ArgIt = Fn->arg_begin();
5092 for (std::vector<std::pair<PATypeInfo,char*> >::iterator
5093 I = (yyvsp[-3].ArgList)->begin(), E = (yyvsp[-3].ArgList)->end(); I != E; ++I, ++ArgIt) {
5094 delete I->first.T; // Delete the typeholder...
5095 setValueName(ArgIt, I->second); // Insert arg into symtab...
5098 delete (yyvsp[-3].ArgList); // We're now done with the argument list
5104 #line 2614 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
5106 (yyval.FunctionVal) = CurFun.CurrentFunction;
5108 // Make sure that we keep track of the linkage type even if there was a
5109 // previous "declare".
5110 (yyval.FunctionVal)->setLinkage((yyvsp[-2].Linkage));
5115 #line 2628 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
5117 (yyval.FunctionVal) = (yyvsp[-1].FunctionVal);
5122 #line 2634 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
5123 { CurFun.Linkage = GlobalValue::DLLImportLinkage; ;}
5127 #line 2635 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
5128 { CurFun.Linkage = GlobalValue::ExternalWeakLinkage; ;}
5132 #line 2639 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
5133 { CurFun.isDeclare = true; ;}
5137 #line 2639 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
5139 (yyval.FunctionVal) = CurFun.CurrentFunction;
5140 CurFun.FunctionDone();
5146 #line 2651 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
5147 { (yyval.BoolVal) = false; ;}
5151 #line 2652 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
5152 { (yyval.BoolVal) = true; ;}
5156 #line 2657 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
5157 { (yyval.ValIDVal) = ValID::create((yyvsp[0].SInt64Val)); ;}
5161 #line 2658 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
5162 { (yyval.ValIDVal) = ValID::create((yyvsp[0].UInt64Val)); ;}
5166 #line 2659 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
5167 { (yyval.ValIDVal) = ValID::create((yyvsp[0].FPVal)); ;}
5171 #line 2660 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
5172 { (yyval.ValIDVal) = ValID::create(ConstantInt::get(Type::Int1Ty, true)); ;}
5176 #line 2661 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
5177 { (yyval.ValIDVal) = ValID::create(ConstantInt::get(Type::Int1Ty, false)); ;}
5181 #line 2662 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
5182 { (yyval.ValIDVal) = ValID::createNull(); ;}
5186 #line 2663 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
5187 { (yyval.ValIDVal) = ValID::createUndef(); ;}
5191 #line 2664 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
5192 { (yyval.ValIDVal) = ValID::createZeroInit(); ;}
5196 #line 2665 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
5197 { // Nonempty unsized packed vector
5198 const Type *ETy = (*(yyvsp[-1].ConstVector))[0].C->getType();
5199 int NumElements = (yyvsp[-1].ConstVector)->size();
5200 PackedType* pt = PackedType::get(ETy, NumElements);
5201 PATypeHolder* PTy = new PATypeHolder(
5202 HandleUpRefs(PackedType::get(ETy, NumElements)));
5204 // Verify all elements are correct type!
5205 std::vector<Constant*> Elems;
5206 for (unsigned i = 0; i < (yyvsp[-1].ConstVector)->size(); i++) {
5207 Constant *C = (*(yyvsp[-1].ConstVector))[i].C;
5208 const Type *CTy = C->getType();
5210 error("Element #" + utostr(i) + " is not of type '" +
5211 ETy->getDescription() +"' as required!\nIt is of type '" +
5212 CTy->getDescription() + "'");
5215 (yyval.ValIDVal) = ValID::create(ConstantPacked::get(pt, Elems));
5216 delete PTy; delete (yyvsp[-1].ConstVector);
5221 #line 2686 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
5223 (yyval.ValIDVal) = ValID::create((yyvsp[0].ConstVal).C);
5228 #line 2689 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
5230 char *End = UnEscapeLexed((yyvsp[-2].StrVal), true);
5231 std::string AsmStr = std::string((yyvsp[-2].StrVal), End);
5232 End = UnEscapeLexed((yyvsp[0].StrVal), true);
5233 std::string Constraints = std::string((yyvsp[0].StrVal), End);
5234 (yyval.ValIDVal) = ValID::createInlineAsm(AsmStr, Constraints, (yyvsp[-3].BoolVal));
5235 free((yyvsp[-2].StrVal));
5236 free((yyvsp[0].StrVal));
5241 #line 2704 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
5242 { (yyval.ValIDVal) = ValID::create((yyvsp[0].SIntVal)); ;}
5246 #line 2705 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
5247 { (yyval.ValIDVal) = ValID::create((yyvsp[0].StrVal)); ;}
5251 #line 2718 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
5253 const Type *Ty = (yyvsp[-1].TypeVal).T->get();
5254 (yyval.ValueVal).S = (yyvsp[-1].TypeVal).S;
5255 (yyval.ValueVal).V = getVal(Ty, (yyvsp[0].ValIDVal));
5256 delete (yyvsp[-1].TypeVal).T;
5261 #line 2727 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
5263 (yyval.FunctionVal) = (yyvsp[-1].FunctionVal);
5268 #line 2730 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
5269 { // Do not allow functions with 0 basic blocks
5270 (yyval.FunctionVal) = (yyvsp[-1].FunctionVal);
5275 #line 2739 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
5277 setValueName((yyvsp[0].TermInstVal), (yyvsp[-1].StrVal));
5278 InsertValue((yyvsp[0].TermInstVal));
5279 (yyvsp[-2].BasicBlockVal)->getInstList().push_back((yyvsp[0].TermInstVal));
5280 InsertValue((yyvsp[-2].BasicBlockVal));
5281 (yyval.BasicBlockVal) = (yyvsp[-2].BasicBlockVal);
5286 #line 2749 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
5288 if ((yyvsp[0].InstVal).I)
5289 (yyvsp[-1].BasicBlockVal)->getInstList().push_back((yyvsp[0].InstVal).I);
5290 (yyval.BasicBlockVal) = (yyvsp[-1].BasicBlockVal);
5295 #line 2754 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
5297 (yyval.BasicBlockVal) = CurBB = getBBVal(ValID::create((int)CurFun.NextBBNum++), true);
5298 // Make sure to move the basic block to the correct location in the
5299 // function, instead of leaving it inserted wherever it was first
5301 Function::BasicBlockListType &BBL =
5302 CurFun.CurrentFunction->getBasicBlockList();
5303 BBL.splice(BBL.end(), BBL, (yyval.BasicBlockVal));
5308 #line 2763 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
5310 (yyval.BasicBlockVal) = CurBB = getBBVal(ValID::create((yyvsp[0].StrVal)), true);
5311 // Make sure to move the basic block to the correct location in the
5312 // function, instead of leaving it inserted wherever it was first
5314 Function::BasicBlockListType &BBL =
5315 CurFun.CurrentFunction->getBasicBlockList();
5316 BBL.splice(BBL.end(), BBL, (yyval.BasicBlockVal));
5321 #line 2777 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
5322 { // Return with a result...
5323 (yyval.TermInstVal) = new ReturnInst((yyvsp[0].ValueVal).V);
5328 #line 2780 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
5329 { // Return with no result...
5330 (yyval.TermInstVal) = new ReturnInst();
5335 #line 2783 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
5336 { // Unconditional Branch...
5337 BasicBlock* tmpBB = getBBVal((yyvsp[0].ValIDVal));
5338 (yyval.TermInstVal) = new BranchInst(tmpBB);
5343 #line 2787 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
5345 BasicBlock* tmpBBA = getBBVal((yyvsp[-3].ValIDVal));
5346 BasicBlock* tmpBBB = getBBVal((yyvsp[0].ValIDVal));
5347 Value* tmpVal = getVal(Type::Int1Ty, (yyvsp[-6].ValIDVal));
5348 (yyval.TermInstVal) = new BranchInst(tmpBBA, tmpBBB, tmpVal);
5353 #line 2793 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
5355 Value* tmpVal = getVal((yyvsp[-7].PrimType).T, (yyvsp[-6].ValIDVal));
5356 BasicBlock* tmpBB = getBBVal((yyvsp[-3].ValIDVal));
5357 SwitchInst *S = new SwitchInst(tmpVal, tmpBB, (yyvsp[-1].JumpTable)->size());
5358 (yyval.TermInstVal) = S;
5359 std::vector<std::pair<Constant*,BasicBlock*> >::iterator I = (yyvsp[-1].JumpTable)->begin(),
5360 E = (yyvsp[-1].JumpTable)->end();
5361 for (; I != E; ++I) {
5362 if (ConstantInt *CI = dyn_cast<ConstantInt>(I->first))
5363 S->addCase(CI, I->second);
5365 error("Switch case is constant, but not a simple integer");
5367 delete (yyvsp[-1].JumpTable);
5372 #line 2808 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
5374 Value* tmpVal = getVal((yyvsp[-6].PrimType).T, (yyvsp[-5].ValIDVal));
5375 BasicBlock* tmpBB = getBBVal((yyvsp[-2].ValIDVal));
5376 SwitchInst *S = new SwitchInst(tmpVal, tmpBB, 0);
5377 (yyval.TermInstVal) = S;
5382 #line 2815 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
5384 const PointerType *PFTy;
5385 const FunctionType *Ty;
5387 if (!(PFTy = dyn_cast<PointerType>((yyvsp[-10].TypeVal).T->get())) ||
5388 !(Ty = dyn_cast<FunctionType>(PFTy->getElementType()))) {
5389 // Pull out the types of all of the arguments...
5390 std::vector<const Type*> ParamTypes;
5391 if ((yyvsp[-7].ValueList)) {
5392 for (std::vector<ValueInfo>::iterator I = (yyvsp[-7].ValueList)->begin(), E = (yyvsp[-7].ValueList)->end();
5394 ParamTypes.push_back((*I).V->getType());
5396 bool isVarArg = ParamTypes.size() && ParamTypes.back() == Type::VoidTy;
5397 if (isVarArg) ParamTypes.pop_back();
5398 Ty = FunctionType::get((yyvsp[-10].TypeVal).T->get(), ParamTypes, isVarArg);
5399 PFTy = PointerType::get(Ty);
5401 Value *V = getVal(PFTy, (yyvsp[-9].ValIDVal)); // Get the function we're calling...
5402 BasicBlock *Normal = getBBVal((yyvsp[-3].ValIDVal));
5403 BasicBlock *Except = getBBVal((yyvsp[0].ValIDVal));
5405 // Create the call node...
5406 if (!(yyvsp[-7].ValueList)) { // Has no arguments?
5407 (yyval.TermInstVal) = new InvokeInst(V, Normal, Except, std::vector<Value*>());
5408 } else { // Has arguments?
5409 // Loop through FunctionType's arguments and ensure they are specified
5412 FunctionType::param_iterator I = Ty->param_begin();
5413 FunctionType::param_iterator E = Ty->param_end();
5414 std::vector<ValueInfo>::iterator ArgI = (yyvsp[-7].ValueList)->begin(), ArgE = (yyvsp[-7].ValueList)->end();
5416 std::vector<Value*> Args;
5417 for (; ArgI != ArgE && I != E; ++ArgI, ++I) {
5418 if ((*ArgI).V->getType() != *I)
5419 error("Parameter " +(*ArgI).V->getName()+ " is not of type '" +
5420 (*I)->getDescription() + "'");
5421 Args.push_back((*ArgI).V);
5424 if (I != E || (ArgI != ArgE && !Ty->isVarArg()))
5425 error("Invalid number of parameters detected");
5427 (yyval.TermInstVal) = new InvokeInst(V, Normal, Except, Args);
5429 cast<InvokeInst>((yyval.TermInstVal))->setCallingConv((yyvsp[-11].UIntVal));
5430 delete (yyvsp[-10].TypeVal).T;
5431 delete (yyvsp[-7].ValueList);
5436 #line 2865 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
5438 (yyval.TermInstVal) = new UnwindInst();
5443 #line 2868 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
5445 (yyval.TermInstVal) = new UnreachableInst();
5450 #line 2874 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
5452 (yyval.JumpTable) = (yyvsp[-5].JumpTable);
5453 Constant *V = cast<Constant>(getExistingValue((yyvsp[-4].PrimType).T, (yyvsp[-3].ValIDVal)));
5456 error("May only switch on a constant pool value");
5458 BasicBlock* tmpBB = getBBVal((yyvsp[0].ValIDVal));
5459 (yyval.JumpTable)->push_back(std::make_pair(V, tmpBB));
5464 #line 2884 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
5466 (yyval.JumpTable) = new std::vector<std::pair<Constant*, BasicBlock*> >();
5467 Constant *V = cast<Constant>(getExistingValue((yyvsp[-4].PrimType).T, (yyvsp[-3].ValIDVal)));
5470 error("May only switch on a constant pool value");
5472 BasicBlock* tmpBB = getBBVal((yyvsp[0].ValIDVal));
5473 (yyval.JumpTable)->push_back(std::make_pair(V, tmpBB));
5478 #line 2897 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
5481 if ((yyvsp[-1].StrVal))
5482 if (BitCastInst *BCI = dyn_cast<BitCastInst>((yyvsp[0].InstVal).I))
5483 if (BCI->getSrcTy() == BCI->getDestTy() &&
5484 BCI->getOperand(0)->getName() == (yyvsp[-1].StrVal))
5485 // This is a useless bit cast causing a name redefinition. It is
5486 // a bit cast from a type to the same type of an operand with the
5487 // same name as the name we would give this instruction. Since this
5488 // instruction results in no code generation, it is safe to omit
5489 // the instruction. This situation can occur because of collapsed
5490 // type planes. For example:
5491 // %X = add int %Y, %Z
5492 // %X = cast int %Y to uint
5493 // After upgrade, this looks like:
5494 // %X = add i32 %Y, %Z
5495 // %X = bitcast i32 to i32
5496 // The bitcast is clearly useless so we omit it.
5499 (yyval.InstVal).I = 0;
5500 (yyval.InstVal).S = Signless;
5502 setValueName((yyvsp[0].InstVal).I, (yyvsp[-1].StrVal));
5503 InsertValue((yyvsp[0].InstVal).I);
5504 (yyval.InstVal) = (yyvsp[0].InstVal);
5510 #line 2926 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
5511 { // Used for PHI nodes
5512 (yyval.PHIList).P = new std::list<std::pair<Value*, BasicBlock*> >();
5513 (yyval.PHIList).S = (yyvsp[-5].TypeVal).S;
5514 Value* tmpVal = getVal((yyvsp[-5].TypeVal).T->get(), (yyvsp[-3].ValIDVal));
5515 BasicBlock* tmpBB = getBBVal((yyvsp[-1].ValIDVal));
5516 (yyval.PHIList).P->push_back(std::make_pair(tmpVal, tmpBB));
5517 delete (yyvsp[-5].TypeVal).T;
5522 #line 2934 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
5524 (yyval.PHIList) = (yyvsp[-6].PHIList);
5525 Value* tmpVal = getVal((yyvsp[-6].PHIList).P->front().first->getType(), (yyvsp[-3].ValIDVal));
5526 BasicBlock* tmpBB = getBBVal((yyvsp[-1].ValIDVal));
5527 (yyvsp[-6].PHIList).P->push_back(std::make_pair(tmpVal, tmpBB));
5532 #line 2942 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
5533 { // Used for call statements, and memory insts...
5534 (yyval.ValueList) = new std::vector<ValueInfo>();
5535 (yyval.ValueList)->push_back((yyvsp[0].ValueVal));
5540 #line 2946 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
5542 (yyval.ValueList) = (yyvsp[-2].ValueList);
5543 (yyvsp[-2].ValueList)->push_back((yyvsp[0].ValueVal));
5548 #line 2954 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
5549 { (yyval.ValueList) = 0; ;}
5553 #line 2958 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
5555 (yyval.BoolVal) = true;
5560 #line 2961 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
5562 (yyval.BoolVal) = false;
5567 #line 2967 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
5569 const Type* Ty = (yyvsp[-3].TypeVal).T->get();
5570 if (!Ty->isInteger() && !Ty->isFloatingPoint() && !isa<PackedType>(Ty))
5571 error("Arithmetic operator requires integer, FP, or packed operands");
5572 if (isa<PackedType>(Ty) &&
5573 ((yyvsp[-4].BinaryOpVal) == URemOp || (yyvsp[-4].BinaryOpVal) == SRemOp || (yyvsp[-4].BinaryOpVal) == FRemOp || (yyvsp[-4].BinaryOpVal) == RemOp))
5574 error("Remainder not supported on packed types");
5575 // Upgrade the opcode from obsolete versions before we do anything with it.
5576 Instruction::BinaryOps Opcode = getBinaryOp((yyvsp[-4].BinaryOpVal), Ty, (yyvsp[-3].TypeVal).S);
5577 Value* val1 = getVal(Ty, (yyvsp[-2].ValIDVal));
5578 Value* val2 = getVal(Ty, (yyvsp[0].ValIDVal));
5579 (yyval.InstVal).I = BinaryOperator::create(Opcode, val1, val2);
5580 if ((yyval.InstVal).I == 0)
5581 error("binary operator returned null");
5582 (yyval.InstVal).S = (yyvsp[-3].TypeVal).S;
5583 delete (yyvsp[-3].TypeVal).T;
5588 #line 2984 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
5590 const Type *Ty = (yyvsp[-3].TypeVal).T->get();
5591 if (!Ty->isInteger()) {
5592 if (!isa<PackedType>(Ty) ||
5593 !cast<PackedType>(Ty)->getElementType()->isInteger())
5594 error("Logical operator requires integral operands");
5596 Instruction::BinaryOps Opcode = getBinaryOp((yyvsp[-4].BinaryOpVal), Ty, (yyvsp[-3].TypeVal).S);
5597 Value* tmpVal1 = getVal(Ty, (yyvsp[-2].ValIDVal));
5598 Value* tmpVal2 = getVal(Ty, (yyvsp[0].ValIDVal));
5599 (yyval.InstVal).I = BinaryOperator::create(Opcode, tmpVal1, tmpVal2);
5600 if ((yyval.InstVal).I == 0)
5601 error("binary operator returned null");
5602 (yyval.InstVal).S = (yyvsp[-3].TypeVal).S;
5603 delete (yyvsp[-3].TypeVal).T;
5608 #line 3000 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
5610 const Type* Ty = (yyvsp[-3].TypeVal).T->get();
5611 if(isa<PackedType>(Ty))
5612 error("PackedTypes currently not supported in setcc instructions");
5613 unsigned short pred;
5614 Instruction::OtherOps Opcode = getCompareOp((yyvsp[-4].BinaryOpVal), pred, Ty, (yyvsp[-3].TypeVal).S);
5615 Value* tmpVal1 = getVal(Ty, (yyvsp[-2].ValIDVal));
5616 Value* tmpVal2 = getVal(Ty, (yyvsp[0].ValIDVal));
5617 (yyval.InstVal).I = CmpInst::create(Opcode, pred, tmpVal1, tmpVal2);
5618 if ((yyval.InstVal).I == 0)
5619 error("binary operator returned null");
5620 (yyval.InstVal).S = Unsigned;
5621 delete (yyvsp[-3].TypeVal).T;
5626 #line 3014 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
5628 const Type *Ty = (yyvsp[-3].TypeVal).T->get();
5629 if (isa<PackedType>(Ty))
5630 error("PackedTypes currently not supported in icmp instructions");
5631 else if (!Ty->isInteger() && !isa<PointerType>(Ty))
5632 error("icmp requires integer or pointer typed operands");
5633 Value* tmpVal1 = getVal(Ty, (yyvsp[-2].ValIDVal));
5634 Value* tmpVal2 = getVal(Ty, (yyvsp[0].ValIDVal));
5635 (yyval.InstVal).I = new ICmpInst((yyvsp[-4].IPred), tmpVal1, tmpVal2);
5636 (yyval.InstVal).S = Unsigned;
5637 delete (yyvsp[-3].TypeVal).T;
5642 #line 3026 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
5644 const Type *Ty = (yyvsp[-3].TypeVal).T->get();
5645 if (isa<PackedType>(Ty))
5646 error("PackedTypes currently not supported in fcmp instructions");
5647 else if (!Ty->isFloatingPoint())
5648 error("fcmp instruction requires floating point operands");
5649 Value* tmpVal1 = getVal(Ty, (yyvsp[-2].ValIDVal));
5650 Value* tmpVal2 = getVal(Ty, (yyvsp[0].ValIDVal));
5651 (yyval.InstVal).I = new FCmpInst((yyvsp[-4].FPred), tmpVal1, tmpVal2);
5652 (yyval.InstVal).S = Unsigned;
5653 delete (yyvsp[-3].TypeVal).T;
5658 #line 3038 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
5660 warning("Use of obsolete 'not' instruction: Replacing with 'xor");
5661 const Type *Ty = (yyvsp[0].ValueVal).V->getType();
5662 Value *Ones = ConstantInt::getAllOnesValue(Ty);
5664 error("Expected integral type for not instruction");
5665 (yyval.InstVal).I = BinaryOperator::create(Instruction::Xor, (yyvsp[0].ValueVal).V, Ones);
5666 if ((yyval.InstVal).I == 0)
5667 error("Could not create a xor instruction");
5668 (yyval.InstVal).S = (yyvsp[0].ValueVal).S
5673 #line 3049 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
5675 if (!(yyvsp[0].ValueVal).V->getType()->isInteger() ||
5676 cast<IntegerType>((yyvsp[0].ValueVal).V->getType())->getBitWidth() != 8)
5677 error("Shift amount must be int8");
5678 if (!(yyvsp[-2].ValueVal).V->getType()->isInteger())
5679 error("Shift constant expression requires integer operand");
5680 (yyval.InstVal).I = new ShiftInst(getOtherOp((yyvsp[-3].OtherOpVal), (yyvsp[-2].ValueVal).S), (yyvsp[-2].ValueVal).V, (yyvsp[0].ValueVal).V);
5681 (yyval.InstVal).S = (yyvsp[-2].ValueVal).S;
5686 #line 3058 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
5688 const Type *DstTy = (yyvsp[0].TypeVal).T->get();
5689 if (!DstTy->isFirstClassType())
5690 error("cast instruction to a non-primitive type: '" +
5691 DstTy->getDescription() + "'");
5692 (yyval.InstVal).I = cast<Instruction>(getCast((yyvsp[-3].CastOpVal), (yyvsp[-2].ValueVal).V, (yyvsp[-2].ValueVal).S, DstTy, (yyvsp[0].TypeVal).S, true));
5693 (yyval.InstVal).S = (yyvsp[0].TypeVal).S;
5694 delete (yyvsp[0].TypeVal).T;
5699 #line 3067 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
5701 if (!(yyvsp[-4].ValueVal).V->getType()->isInteger() ||
5702 cast<IntegerType>((yyvsp[-4].ValueVal).V->getType())->getBitWidth() != 1)
5703 error("select condition must be bool");
5704 if ((yyvsp[-2].ValueVal).V->getType() != (yyvsp[0].ValueVal).V->getType())
5705 error("select value types should match");
5706 (yyval.InstVal).I = new SelectInst((yyvsp[-4].ValueVal).V, (yyvsp[-2].ValueVal).V, (yyvsp[0].ValueVal).V);
5707 (yyval.InstVal).S = (yyvsp[-4].ValueVal).S;
5712 #line 3076 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
5714 const Type *Ty = (yyvsp[0].TypeVal).T->get();
5716 (yyval.InstVal).I = new VAArgInst((yyvsp[-2].ValueVal).V, Ty);
5717 (yyval.InstVal).S = (yyvsp[0].TypeVal).S;
5718 delete (yyvsp[0].TypeVal).T;
5723 #line 3083 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
5725 const Type* ArgTy = (yyvsp[-2].ValueVal).V->getType();
5726 const Type* DstTy = (yyvsp[0].TypeVal).T->get();
5727 ObsoleteVarArgs = true;
5728 Function* NF = cast<Function>(CurModule.CurrentModule->
5729 getOrInsertFunction("llvm.va_copy", ArgTy, ArgTy, (Type *)0));
5732 //foo = alloca 1 of t
5736 AllocaInst* foo = new AllocaInst(ArgTy, 0, "vaarg.fix");
5737 CurBB->getInstList().push_back(foo);
5738 CallInst* bar = new CallInst(NF, (yyvsp[-2].ValueVal).V);
5739 CurBB->getInstList().push_back(bar);
5740 CurBB->getInstList().push_back(new StoreInst(bar, foo));
5741 (yyval.InstVal).I = new VAArgInst(foo, DstTy);
5742 (yyval.InstVal).S = (yyvsp[0].TypeVal).S;
5743 delete (yyvsp[0].TypeVal).T;
5748 #line 3104 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
5750 const Type* ArgTy = (yyvsp[-2].ValueVal).V->getType();
5751 const Type* DstTy = (yyvsp[0].TypeVal).T->get();
5752 ObsoleteVarArgs = true;
5753 Function* NF = cast<Function>(CurModule.CurrentModule->
5754 getOrInsertFunction("llvm.va_copy", ArgTy, ArgTy, (Type *)0));
5756 //b = vanext a, t ->
5757 //foo = alloca 1 of t
5760 //tmp = vaarg foo, t
5762 AllocaInst* foo = new AllocaInst(ArgTy, 0, "vanext.fix");
5763 CurBB->getInstList().push_back(foo);
5764 CallInst* bar = new CallInst(NF, (yyvsp[-2].ValueVal).V);
5765 CurBB->getInstList().push_back(bar);
5766 CurBB->getInstList().push_back(new StoreInst(bar, foo));
5767 Instruction* tmp = new VAArgInst(foo, DstTy);
5768 CurBB->getInstList().push_back(tmp);
5769 (yyval.InstVal).I = new LoadInst(foo);
5770 (yyval.InstVal).S = (yyvsp[0].TypeVal).S;
5771 delete (yyvsp[0].TypeVal).T;
5776 #line 3128 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
5778 if (!ExtractElementInst::isValidOperands((yyvsp[-2].ValueVal).V, (yyvsp[0].ValueVal).V))
5779 error("Invalid extractelement operands");
5780 (yyval.InstVal).I = new ExtractElementInst((yyvsp[-2].ValueVal).V, (yyvsp[0].ValueVal).V);
5781 (yyval.InstVal).S = (yyvsp[-2].ValueVal).S;
5786 #line 3134 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
5788 if (!InsertElementInst::isValidOperands((yyvsp[-4].ValueVal).V, (yyvsp[-2].ValueVal).V, (yyvsp[0].ValueVal).V))
5789 error("Invalid insertelement operands");
5790 (yyval.InstVal).I = new InsertElementInst((yyvsp[-4].ValueVal).V, (yyvsp[-2].ValueVal).V, (yyvsp[0].ValueVal).V);
5791 (yyval.InstVal).S = (yyvsp[-4].ValueVal).S;
5796 #line 3140 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
5798 if (!ShuffleVectorInst::isValidOperands((yyvsp[-4].ValueVal).V, (yyvsp[-2].ValueVal).V, (yyvsp[0].ValueVal).V))
5799 error("Invalid shufflevector operands");
5800 (yyval.InstVal).I = new ShuffleVectorInst((yyvsp[-4].ValueVal).V, (yyvsp[-2].ValueVal).V, (yyvsp[0].ValueVal).V);
5801 (yyval.InstVal).S = (yyvsp[-4].ValueVal).S;
5806 #line 3146 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
5808 const Type *Ty = (yyvsp[0].PHIList).P->front().first->getType();
5809 if (!Ty->isFirstClassType())
5810 error("PHI node operands must be of first class type");
5811 PHINode *PHI = new PHINode(Ty);
5812 PHI->reserveOperandSpace((yyvsp[0].PHIList).P->size());
5813 while ((yyvsp[0].PHIList).P->begin() != (yyvsp[0].PHIList).P->end()) {
5814 if ((yyvsp[0].PHIList).P->front().first->getType() != Ty)
5815 error("All elements of a PHI node must be of the same type");
5816 PHI->addIncoming((yyvsp[0].PHIList).P->front().first, (yyvsp[0].PHIList).P->front().second);
5817 (yyvsp[0].PHIList).P->pop_front();
5819 (yyval.InstVal).I = PHI;
5820 (yyval.InstVal).S = (yyvsp[0].PHIList).S;
5821 delete (yyvsp[0].PHIList).P; // Free the list...
5826 #line 3162 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
5829 // Handle the short call syntax
5830 const PointerType *PFTy;
5831 const FunctionType *FTy;
5832 if (!(PFTy = dyn_cast<PointerType>((yyvsp[-4].TypeVal).T->get())) ||
5833 !(FTy = dyn_cast<FunctionType>(PFTy->getElementType()))) {
5834 // Pull out the types of all of the arguments...
5835 std::vector<const Type*> ParamTypes;
5836 if ((yyvsp[-1].ValueList)) {
5837 for (std::vector<ValueInfo>::iterator I = (yyvsp[-1].ValueList)->begin(), E = (yyvsp[-1].ValueList)->end();
5839 ParamTypes.push_back((*I).V->getType());
5842 bool isVarArg = ParamTypes.size() && ParamTypes.back() == Type::VoidTy;
5843 if (isVarArg) ParamTypes.pop_back();
5845 const Type *RetTy = (yyvsp[-4].TypeVal).T->get();
5846 if (!RetTy->isFirstClassType() && RetTy != Type::VoidTy)
5847 error("Functions cannot return aggregate types");
5849 FTy = FunctionType::get(RetTy, ParamTypes, isVarArg);
5850 PFTy = PointerType::get(FTy);
5853 // First upgrade any intrinsic calls.
5854 std::vector<Value*> Args;
5855 if ((yyvsp[-1].ValueList))
5856 for (unsigned i = 0, e = (yyvsp[-1].ValueList)->size(); i < e; ++i)
5857 Args.push_back((*(yyvsp[-1].ValueList))[i].V);
5858 Instruction *Inst = upgradeIntrinsicCall(FTy, (yyvsp[-3].ValIDVal), Args);
5860 // If we got an upgraded intrinsic
5862 (yyval.InstVal).I = Inst;
5863 (yyval.InstVal).S = Signless;
5865 // Get the function we're calling
5866 Value *V = getVal(PFTy, (yyvsp[-3].ValIDVal));
5868 // Check the argument values match
5869 if (!(yyvsp[-1].ValueList)) { // Has no arguments?
5870 // Make sure no arguments is a good thing!
5871 if (FTy->getNumParams() != 0)
5872 error("No arguments passed to a function that expects arguments");
5873 } else { // Has arguments?
5874 // Loop through FunctionType's arguments and ensure they are specified
5877 FunctionType::param_iterator I = FTy->param_begin();
5878 FunctionType::param_iterator E = FTy->param_end();
5879 std::vector<ValueInfo>::iterator ArgI = (yyvsp[-1].ValueList)->begin(), ArgE = (yyvsp[-1].ValueList)->end();
5881 for (; ArgI != ArgE && I != E; ++ArgI, ++I)
5882 if ((*ArgI).V->getType() != *I)
5883 error("Parameter " +(*ArgI).V->getName()+ " is not of type '" +
5884 (*I)->getDescription() + "'");
5886 if (I != E || (ArgI != ArgE && !FTy->isVarArg()))
5887 error("Invalid number of parameters detected");
5890 // Create the call instruction
5891 CallInst *CI = new CallInst(V, Args);
5892 CI->setTailCall((yyvsp[-6].BoolVal));
5893 CI->setCallingConv((yyvsp[-5].UIntVal));
5894 (yyval.InstVal).I = CI;
5895 (yyval.InstVal).S = (yyvsp[-4].TypeVal).S;
5897 delete (yyvsp[-4].TypeVal).T;
5898 delete (yyvsp[-1].ValueList);
5903 #line 3235 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
5905 (yyval.InstVal) = (yyvsp[0].InstVal);
5910 #line 3243 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
5911 { (yyval.ValueList) = (yyvsp[0].ValueList); ;}
5915 #line 3244 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
5916 { (yyval.ValueList) = new std::vector<ValueInfo>(); ;}
5920 #line 3248 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
5921 { (yyval.BoolVal) = true; ;}
5925 #line 3249 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
5926 { (yyval.BoolVal) = false; ;}
5930 #line 3253 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
5932 const Type *Ty = (yyvsp[-1].TypeVal).T->get();
5933 (yyval.InstVal).S = (yyvsp[-1].TypeVal).S;
5934 (yyval.InstVal).I = new MallocInst(Ty, 0, (yyvsp[0].UIntVal));
5935 delete (yyvsp[-1].TypeVal).T;
5940 #line 3259 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
5942 const Type *Ty = (yyvsp[-4].TypeVal).T->get();
5943 (yyval.InstVal).S = (yyvsp[-4].TypeVal).S;
5944 (yyval.InstVal).I = new MallocInst(Ty, getVal((yyvsp[-2].PrimType).T, (yyvsp[-1].ValIDVal)), (yyvsp[0].UIntVal));
5945 delete (yyvsp[-4].TypeVal).T;
5950 #line 3265 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
5952 const Type *Ty = (yyvsp[-1].TypeVal).T->get();
5953 (yyval.InstVal).S = (yyvsp[-1].TypeVal).S;
5954 (yyval.InstVal).I = new AllocaInst(Ty, 0, (yyvsp[0].UIntVal));
5955 delete (yyvsp[-1].TypeVal).T;
5960 #line 3271 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
5962 const Type *Ty = (yyvsp[-4].TypeVal).T->get();
5963 (yyval.InstVal).S = (yyvsp[-4].TypeVal).S;
5964 (yyval.InstVal).I = new AllocaInst(Ty, getVal((yyvsp[-2].PrimType).T, (yyvsp[-1].ValIDVal)), (yyvsp[0].UIntVal));
5965 delete (yyvsp[-4].TypeVal).T;
5970 #line 3277 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
5972 const Type *PTy = (yyvsp[0].ValueVal).V->getType();
5973 if (!isa<PointerType>(PTy))
5974 error("Trying to free nonpointer type '" + PTy->getDescription() + "'");
5975 (yyval.InstVal).I = new FreeInst((yyvsp[0].ValueVal).V);
5976 (yyval.InstVal).S = Signless;
5981 #line 3284 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
5983 const Type* Ty = (yyvsp[-1].TypeVal).T->get();
5984 (yyval.InstVal).S = (yyvsp[-1].TypeVal).S;
5985 if (!isa<PointerType>(Ty))
5986 error("Can't load from nonpointer type: " + Ty->getDescription());
5987 if (!cast<PointerType>(Ty)->getElementType()->isFirstClassType())
5988 error("Can't load from pointer of non-first-class type: " +
5989 Ty->getDescription());
5990 Value* tmpVal = getVal(Ty, (yyvsp[0].ValIDVal));
5991 (yyval.InstVal).I = new LoadInst(tmpVal, "", (yyvsp[-3].BoolVal));
5992 delete (yyvsp[-1].TypeVal).T;
5997 #line 3296 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
5999 const PointerType *PTy = dyn_cast<PointerType>((yyvsp[-1].TypeVal).T->get());
6001 error("Can't store to a nonpointer type: " +
6002 (yyvsp[-1].TypeVal).T->get()->getDescription());
6003 const Type *ElTy = PTy->getElementType();
6004 if (ElTy != (yyvsp[-3].ValueVal).V->getType())
6005 error("Can't store '" + (yyvsp[-3].ValueVal).V->getType()->getDescription() +
6006 "' into space of type '" + ElTy->getDescription() + "'");
6007 Value* tmpVal = getVal(PTy, (yyvsp[0].ValIDVal));
6008 (yyval.InstVal).I = new StoreInst((yyvsp[-3].ValueVal).V, tmpVal, (yyvsp[-5].BoolVal));
6009 (yyval.InstVal).S = Signless;
6010 delete (yyvsp[-1].TypeVal).T;
6015 #line 3310 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
6017 const Type* Ty = (yyvsp[-2].TypeVal).T->get();
6018 if (!isa<PointerType>(Ty))
6019 error("getelementptr insn requires pointer operand");
6021 std::vector<Value*> VIndices;
6022 upgradeGEPIndices(Ty, (yyvsp[0].ValueList), VIndices);
6024 Value* tmpVal = getVal(Ty, (yyvsp[-1].ValIDVal));
6025 (yyval.InstVal).I = new GetElementPtrInst(tmpVal, VIndices);
6026 (yyval.InstVal).S = Signless;
6027 delete (yyvsp[-2].TypeVal).T;
6028 delete (yyvsp[0].ValueList);
6036 /* Line 1126 of yacc.c. */
6037 #line 6038 "UpgradeParser.tab.c"
6043 YY_STACK_PRINT (yyss, yyssp);
6048 /* Now `shift' the result of the reduction. Determine what state
6049 that goes to, based on the state we popped back to and the rule
6050 number reduced by. */
6054 yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
6055 if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
6056 yystate = yytable[yystate];
6058 yystate = yydefgoto[yyn - YYNTOKENS];
6063 /*------------------------------------.
6064 | yyerrlab -- here on detecting error |
6065 `------------------------------------*/
6067 /* If not already recovering from an error, report this error. */
6072 yyn = yypact[yystate];
6074 if (YYPACT_NINF < yyn && yyn < YYLAST)
6076 int yytype = YYTRANSLATE (yychar);
6077 YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
6078 YYSIZE_T yysize = yysize0;
6080 int yysize_overflow = 0;
6082 # define YYERROR_VERBOSE_ARGS_MAXIMUM 5
6083 char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
6087 /* This is so xgettext sees the translatable formats that are
6088 constructed on the fly. */
6089 YY_("syntax error, unexpected %s");
6090 YY_("syntax error, unexpected %s, expecting %s");
6091 YY_("syntax error, unexpected %s, expecting %s or %s");
6092 YY_("syntax error, unexpected %s, expecting %s or %s or %s");
6093 YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
6097 static char const yyunexpected[] = "syntax error, unexpected %s";
6098 static char const yyexpecting[] = ", expecting %s";
6099 static char const yyor[] = " or %s";
6100 char yyformat[sizeof yyunexpected
6101 + sizeof yyexpecting - 1
6102 + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
6103 * (sizeof yyor - 1))];
6104 char const *yyprefix = yyexpecting;
6106 /* Start YYX at -YYN if negative to avoid negative indexes in
6108 int yyxbegin = yyn < 0 ? -yyn : 0;
6110 /* Stay within bounds of both yycheck and yytname. */
6111 int yychecklim = YYLAST - yyn;
6112 int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
6115 yyarg[0] = yytname[yytype];
6116 yyfmt = yystpcpy (yyformat, yyunexpected);
6118 for (yyx = yyxbegin; yyx < yyxend; ++yyx)
6119 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
6121 if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
6125 yyformat[sizeof yyunexpected - 1] = '\0';
6128 yyarg[yycount++] = yytname[yyx];
6129 yysize1 = yysize + yytnamerr (0, yytname[yyx]);
6130 yysize_overflow |= yysize1 < yysize;
6132 yyfmt = yystpcpy (yyfmt, yyprefix);
6136 yyf = YY_(yyformat);
6137 yysize1 = yysize + yystrlen (yyf);
6138 yysize_overflow |= yysize1 < yysize;
6141 if (!yysize_overflow && yysize <= YYSTACK_ALLOC_MAXIMUM)
6142 yymsg = (char *) YYSTACK_ALLOC (yysize);
6145 /* Avoid sprintf, as that infringes on the user's name space.
6146 Don't have undefined behavior even if the translation
6147 produced a string with the wrong number of "%s"s. */
6150 while ((*yyp = *yyf))
6152 if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
6154 yyp += yytnamerr (yyp, yyarg[yyi++]);
6164 YYSTACK_FREE (yymsg);
6168 yyerror (YY_("syntax error"));
6169 goto yyexhaustedlab;
6173 #endif /* YYERROR_VERBOSE */
6174 yyerror (YY_("syntax error"));
6179 if (yyerrstatus == 3)
6181 /* If just tried and failed to reuse look-ahead token after an
6182 error, discard it. */
6184 if (yychar <= YYEOF)
6186 /* Return failure if at end of input. */
6187 if (yychar == YYEOF)
6192 yydestruct ("Error: discarding", yytoken, &yylval);
6197 /* Else will try to reuse look-ahead token after shifting the error
6202 /*---------------------------------------------------.
6203 | yyerrorlab -- error raised explicitly by YYERROR. |
6204 `---------------------------------------------------*/
6207 /* Pacify compilers like GCC when the user code never invokes
6208 YYERROR and the label yyerrorlab therefore never appears in user
6219 /*-------------------------------------------------------------.
6220 | yyerrlab1 -- common code for both syntax error and YYERROR. |
6221 `-------------------------------------------------------------*/
6223 yyerrstatus = 3; /* Each real token shifted decrements this. */
6227 yyn = yypact[yystate];
6228 if (yyn != YYPACT_NINF)
6231 if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
6239 /* Pop the current state because it cannot handle the error token. */
6244 yydestruct ("Error: popping", yystos[yystate], yyvsp);
6247 YY_STACK_PRINT (yyss, yyssp);
6256 /* Shift the error token. */
6257 YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
6263 /*-------------------------------------.
6264 | yyacceptlab -- YYACCEPT comes here. |
6265 `-------------------------------------*/
6270 /*-----------------------------------.
6271 | yyabortlab -- YYABORT comes here. |
6272 `-----------------------------------*/
6278 /*-------------------------------------------------.
6279 | yyexhaustedlab -- memory exhaustion comes here. |
6280 `-------------------------------------------------*/
6282 yyerror (YY_("memory exhausted"));
6288 if (yychar != YYEOF && yychar != YYEMPTY)
6289 yydestruct ("Cleanup: discarding lookahead",
6291 while (yyssp != yyss)
6293 yydestruct ("Cleanup: popping",
6294 yystos[*yyssp], yyvsp);
6299 YYSTACK_FREE (yyss);
6305 #line 3326 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
6308 int yyerror(const char *ErrorMsg) {
6310 = std::string((CurFilename == "-") ? std::string("<stdin>") : CurFilename)
6311 + ":" + llvm::utostr((unsigned) Upgradelineno-1) + ": ";
6312 std::string errMsg = where + "error: " + std::string(ErrorMsg);
6313 if (yychar != YYEMPTY && yychar != 0)
6314 errMsg += " while reading token '" + std::string(Upgradetext, Upgradeleng) +
6316 std::cerr << "llvm-upgrade: " << errMsg << '\n';
6317 std::cout << "llvm-upgrade: parse failed.\n";
6321 void warning(const std::string& ErrorMsg) {
6323 = std::string((CurFilename == "-") ? std::string("<stdin>") : CurFilename)
6324 + ":" + llvm::utostr((unsigned) Upgradelineno-1) + ": ";
6325 std::string errMsg = where + "warning: " + std::string(ErrorMsg);
6326 if (yychar != YYEMPTY && yychar != 0)
6327 errMsg += " while reading token '" + std::string(Upgradetext, Upgradeleng) +
6329 std::cerr << "llvm-upgrade: " << errMsg << '\n';
6332 void error(const std::string& ErrorMsg, int LineNo) {
6333 if (LineNo == -1) LineNo = Upgradelineno;
6334 Upgradelineno = LineNo;
6335 yyerror(ErrorMsg.c_str());