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
326 #define GETELEMENTPTR 365
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-4/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/ParameterAttributes.h"
381 #include "llvm/ValueSymbolTable.h"
382 #include "llvm/Support/GetElementPtrTypeIterator.h"
383 #include "llvm/ADT/STLExtras.h"
384 #include "llvm/Support/MathExtras.h"
391 // DEBUG_UPREFS - Define this symbol if you want to enable debugging output
392 // relating to upreferences in the input stream.
394 //#define DEBUG_UPREFS 1
396 #define UR_OUT(X) std::cerr << X
401 #define YYERROR_VERBOSE 1
402 #define YYINCLUDED_STDLIB_H
408 int yyerror(const char*);
409 static void warning(const std::string& WarningMsg);
413 std::istream* LexInput;
414 static std::string CurFilename;
416 // This bool controls whether attributes are ever added to function declarations
417 // definitions and calls.
418 static bool AddAttributes = false;
420 static Module *ParserResult;
421 static bool ObsoleteVarArgs;
422 static bool NewVarArgs;
423 static BasicBlock *CurBB;
424 static GlobalVariable *CurGV;
425 static unsigned lastCallingConv;
427 // This contains info used when building the body of a function. It is
428 // destroyed when the function is completed.
430 typedef std::vector<Value *> ValueList; // Numbered defs
432 typedef std::pair<std::string,TypeInfo> RenameMapKey;
433 typedef std::map<RenameMapKey,std::string> RenameMapType;
436 ResolveDefinitions(std::map<const Type *,ValueList> &LateResolvers,
437 std::map<const Type *,ValueList> *FutureLateResolvers = 0);
439 static struct PerModuleInfo {
440 Module *CurrentModule;
441 std::map<const Type *, ValueList> Values; // Module level numbered definitions
442 std::map<const Type *,ValueList> LateResolveValues;
443 std::vector<PATypeHolder> Types;
444 std::vector<Signedness> TypeSigns;
445 std::map<std::string,Signedness> NamedTypeSigns;
446 std::map<std::string,Signedness> NamedValueSigns;
447 std::map<ValID, PATypeHolder> LateResolveTypes;
448 static Module::Endianness Endian;
449 static Module::PointerSize PointerSize;
450 RenameMapType RenameMap;
452 /// PlaceHolderInfo - When temporary placeholder objects are created, remember
453 /// how they were referenced and on which line of the input they came from so
454 /// that we can resolve them later and print error messages as appropriate.
455 std::map<Value*, std::pair<ValID, int> > PlaceHolderInfo;
457 // GlobalRefs - This maintains a mapping between <Type, ValID>'s and forward
458 // references to global values. Global values may be referenced before they
459 // are defined, and if so, the temporary object that they represent is held
460 // here. This is used for forward references of GlobalValues.
462 typedef std::map<std::pair<const PointerType *, ValID>, GlobalValue*>
464 GlobalRefsType GlobalRefs;
467 // If we could not resolve some functions at function compilation time
468 // (calls to functions before they are defined), resolve them now... Types
469 // are resolved when the constant pool has been completely parsed.
471 ResolveDefinitions(LateResolveValues);
473 // Check to make sure that all global value forward references have been
476 if (!GlobalRefs.empty()) {
477 std::string UndefinedReferences = "Unresolved global references exist:\n";
479 for (GlobalRefsType::iterator I = GlobalRefs.begin(), E =GlobalRefs.end();
481 UndefinedReferences += " " + I->first.first->getDescription() + " " +
482 I->first.second.getName() + "\n";
484 error(UndefinedReferences);
488 if (CurrentModule->getDataLayout().empty()) {
489 std::string dataLayout;
490 if (Endian != Module::AnyEndianness)
491 dataLayout.append(Endian == Module::BigEndian ? "E" : "e");
492 if (PointerSize != Module::AnyPointerSize) {
493 if (!dataLayout.empty())
495 dataLayout.append(PointerSize == Module::Pointer64 ?
496 "p:64:64" : "p:32:32");
498 CurrentModule->setDataLayout(dataLayout);
501 Values.clear(); // Clear out function local definitions
504 NamedTypeSigns.clear();
505 NamedValueSigns.clear();
509 // GetForwardRefForGlobal - Check to see if there is a forward reference
510 // for this global. If so, remove it from the GlobalRefs map and return it.
511 // If not, just return null.
512 GlobalValue *GetForwardRefForGlobal(const PointerType *PTy, ValID ID) {
513 // Check to see if there is a forward reference to this global variable...
514 // if there is, eliminate it and patch the reference to use the new def'n.
515 GlobalRefsType::iterator I = GlobalRefs.find(std::make_pair(PTy, ID));
516 GlobalValue *Ret = 0;
517 if (I != GlobalRefs.end()) {
523 void setEndianness(Module::Endianness E) { Endian = E; }
524 void setPointerSize(Module::PointerSize sz) { PointerSize = sz; }
527 Module::Endianness PerModuleInfo::Endian = Module::AnyEndianness;
528 Module::PointerSize PerModuleInfo::PointerSize = Module::AnyPointerSize;
530 static struct PerFunctionInfo {
531 Function *CurrentFunction; // Pointer to current function being created
533 std::map<const Type*, ValueList> Values; // Keep track of #'d definitions
534 std::map<const Type*, ValueList> LateResolveValues;
535 bool isDeclare; // Is this function a forward declararation?
536 GlobalValue::LinkageTypes Linkage;// Linkage for forward declaration.
538 /// BBForwardRefs - When we see forward references to basic blocks, keep
539 /// track of them here.
540 std::map<BasicBlock*, std::pair<ValID, int> > BBForwardRefs;
541 std::vector<BasicBlock*> NumberedBlocks;
542 RenameMapType RenameMap;
545 inline PerFunctionInfo() {
548 Linkage = GlobalValue::ExternalLinkage;
551 inline void FunctionStart(Function *M) {
556 void FunctionDone() {
557 NumberedBlocks.clear();
559 // Any forward referenced blocks left?
560 if (!BBForwardRefs.empty()) {
561 error("Undefined reference to label " +
562 BBForwardRefs.begin()->first->getName());
566 // Resolve all forward references now.
567 ResolveDefinitions(LateResolveValues, &CurModule.LateResolveValues);
569 Values.clear(); // Clear out function local definitions
573 Linkage = GlobalValue::ExternalLinkage;
575 } CurFun; // Info for the current function...
577 static bool inFunctionScope() { return CurFun.CurrentFunction != 0; }
579 /// This function is just a utility to make a Key value for the rename map.
580 /// The Key is a combination of the name, type, Signedness of the original
581 /// value (global/function). This just constructs the key and ensures that
582 /// named Signedness values are resolved to the actual Signedness.
583 /// @brief Make a key for the RenameMaps
584 static RenameMapKey makeRenameMapKey(const std::string &Name, const Type* Ty,
585 const Signedness &Sign) {
589 // Don't allow Named Signedness nodes because they won't match. The actual
590 // Signedness must be looked up in the NamedTypeSigns map.
591 TI.S.copy(CurModule.NamedTypeSigns[Sign.getName()]);
594 return std::make_pair(Name, TI);
598 //===----------------------------------------------------------------------===//
599 // Code to handle definitions of all the types
600 //===----------------------------------------------------------------------===//
602 static int InsertValue(Value *V,
603 std::map<const Type*,ValueList> &ValueTab = CurFun.Values) {
604 if (V->hasName()) return -1; // Is this a numbered definition?
606 // Yes, insert the value into the value table...
607 ValueList &List = ValueTab[V->getType()];
609 return List.size()-1;
612 static const Type *getType(const ValID &D, bool DoNotImprovise = false) {
614 case ValID::NumberVal: // Is it a numbered definition?
615 // Module constants occupy the lowest numbered slots...
616 if ((unsigned)D.Num < CurModule.Types.size()) {
617 return CurModule.Types[(unsigned)D.Num];
620 case ValID::NameVal: // Is it a named definition?
621 if (const Type *N = CurModule.CurrentModule->getTypeByName(D.Name)) {
626 error("Internal parser error: Invalid symbol type reference");
630 // If we reached here, we referenced either a symbol that we don't know about
631 // or an id number that hasn't been read yet. We may be referencing something
632 // forward, so just create an entry to be resolved later and get to it...
634 if (DoNotImprovise) return 0; // Do we just want a null to be returned?
636 if (inFunctionScope()) {
637 if (D.Type == ValID::NameVal) {
638 error("Reference to an undefined type: '" + D.getName() + "'");
641 error("Reference to an undefined type: #" + itostr(D.Num));
646 std::map<ValID, PATypeHolder>::iterator I =CurModule.LateResolveTypes.find(D);
647 if (I != CurModule.LateResolveTypes.end())
650 Type *Typ = OpaqueType::get();
651 CurModule.LateResolveTypes.insert(std::make_pair(D, Typ));
655 /// This is like the getType method except that instead of looking up the type
656 /// for a given ID, it looks up that type's sign.
657 /// @brief Get the signedness of a referenced type
658 static Signedness getTypeSign(const ValID &D) {
660 case ValID::NumberVal: // Is it a numbered definition?
661 // Module constants occupy the lowest numbered slots...
662 if ((unsigned)D.Num < CurModule.TypeSigns.size()) {
663 return CurModule.TypeSigns[(unsigned)D.Num];
666 case ValID::NameVal: { // Is it a named definition?
667 std::map<std::string,Signedness>::const_iterator I =
668 CurModule.NamedTypeSigns.find(D.Name);
669 if (I != CurModule.NamedTypeSigns.end())
671 // Perhaps its a named forward .. just cache the name
679 // If we don't find it, its signless
685 /// This function is analagous to getElementType in LLVM. It provides the same
686 /// function except that it looks up the Signedness instead of the type. This is
687 /// used when processing GEP instructions that need to extract the type of an
688 /// indexed struct/array/ptr member.
689 /// @brief Look up an element's sign.
690 static Signedness getElementSign(const ValueInfo& VI,
691 const std::vector<Value*> &Indices) {
692 const Type *Ptr = VI.V->getType();
693 assert(isa<PointerType>(Ptr) && "Need pointer type");
697 while (const CompositeType *CT = dyn_cast<CompositeType>(Ptr)) {
698 if (CurIdx == Indices.size())
701 Value *Index = Indices[CurIdx++];
702 assert(!isa<PointerType>(CT) || CurIdx == 1 && "Invalid type");
703 Ptr = CT->getTypeAtIndex(Index);
704 if (const Type* Ty = Ptr->getForwardedType())
706 assert(S.isComposite() && "Bad Signedness type");
707 if (isa<StructType>(CT)) {
708 S = S.get(cast<ConstantInt>(Index)->getZExtValue());
713 S = CurModule.NamedTypeSigns[S.getName()];
716 Result.makeComposite(S);
720 /// This function just translates a ConstantInfo into a ValueInfo and calls
721 /// getElementSign(ValueInfo,...). Its just a convenience.
722 /// @brief ConstantInfo version of getElementSign.
723 static Signedness getElementSign(const ConstInfo& CI,
724 const std::vector<Constant*> &Indices) {
728 std::vector<Value*> Idx;
729 for (unsigned i = 0; i < Indices.size(); ++i)
730 Idx.push_back(Indices[i]);
731 Signedness result = getElementSign(VI, Idx);
736 /// This function determines if two function types differ only in their use of
737 /// the sret parameter attribute in the first argument. If they are identical
738 /// in all other respects, it returns true. Otherwise, it returns false.
739 static bool FuncTysDifferOnlyBySRet(const FunctionType *F1,
740 const FunctionType *F2) {
741 if (F1->getReturnType() != F2->getReturnType() ||
742 F1->getNumParams() != F2->getNumParams())
744 const ParamAttrsList *PAL1 = F1->getParamAttrs();
745 const ParamAttrsList *PAL2 = F2->getParamAttrs();
746 if (PAL1 && !PAL2 || PAL2 && !PAL1)
748 if (PAL1 && PAL2 && ((PAL1->size() != PAL2->size()) ||
749 (PAL1->getParamAttrs(0) != PAL2->getParamAttrs(0))))
751 unsigned SRetMask = ~unsigned(ParamAttr::StructRet);
752 for (unsigned i = 0; i < F1->getNumParams(); ++i) {
753 if (F1->getParamType(i) != F2->getParamType(i) || (PAL1 && PAL2 &&
754 (unsigned(PAL1->getParamAttrs(i+1)) & SRetMask !=
755 unsigned(PAL2->getParamAttrs(i+1)) & SRetMask)))
761 /// This function determines if the type of V and Ty differ only by the SRet
762 /// parameter attribute. This is a more generalized case of
763 /// FuncTysDIfferOnlyBySRet since it doesn't require FunctionType arguments.
764 static bool TypesDifferOnlyBySRet(Value *V, const Type* Ty) {
765 if (V->getType() == Ty)
767 const PointerType *PF1 = dyn_cast<PointerType>(Ty);
768 const PointerType *PF2 = dyn_cast<PointerType>(V->getType());
770 const FunctionType* FT1 = dyn_cast<FunctionType>(PF1->getElementType());
771 const FunctionType* FT2 = dyn_cast<FunctionType>(PF2->getElementType());
773 return FuncTysDifferOnlyBySRet(FT1, FT2);
778 // The upgrade of csretcc to sret param attribute may have caused a function
779 // to not be found because the param attribute changed the type of the called
780 // function. This helper function, used in getExistingValue, detects that
781 // situation and bitcasts the function to the correct type.
782 static Value* handleSRetFuncTypeMerge(Value *V, const Type* Ty) {
783 // Handle degenerate cases
786 if (V->getType() == Ty)
789 const PointerType *PF1 = dyn_cast<PointerType>(Ty);
790 const PointerType *PF2 = dyn_cast<PointerType>(V->getType());
792 const FunctionType *FT1 = dyn_cast<FunctionType>(PF1->getElementType());
793 const FunctionType *FT2 = dyn_cast<FunctionType>(PF2->getElementType());
794 if (FT1 && FT2 && FuncTysDifferOnlyBySRet(FT1, FT2)) {
795 const ParamAttrsList *PAL2 = FT2->getParamAttrs();
796 if (PAL2 && PAL2->paramHasAttr(1, ParamAttr::StructRet))
798 else if (Constant *C = dyn_cast<Constant>(V))
799 return ConstantExpr::getBitCast(C, PF1);
801 return new BitCastInst(V, PF1, "upgrd.cast", CurBB);
808 // getExistingValue - Look up the value specified by the provided type and
809 // the provided ValID. If the value exists and has already been defined, return
810 // it. Otherwise return null.
812 static Value *getExistingValue(const Type *Ty, const ValID &D) {
813 if (isa<FunctionType>(Ty)) {
814 error("Functions are not values and must be referenced as pointers");
818 case ValID::NumberVal: { // Is it a numbered definition?
819 unsigned Num = (unsigned)D.Num;
821 // Module constants occupy the lowest numbered slots...
822 std::map<const Type*,ValueList>::iterator VI = CurModule.Values.find(Ty);
823 if (VI != CurModule.Values.end()) {
824 if (Num < VI->second.size())
825 return VI->second[Num];
826 Num -= VI->second.size();
829 // Make sure that our type is within bounds
830 VI = CurFun.Values.find(Ty);
831 if (VI == CurFun.Values.end()) return 0;
833 // Check that the number is within bounds...
834 if (VI->second.size() <= Num) return 0;
836 return VI->second[Num];
839 case ValID::NameVal: { // Is it a named definition?
840 // Get the name out of the ID
841 RenameMapKey Key = makeRenameMapKey(D.Name, Ty, D.S);
843 if (inFunctionScope()) {
844 // See if the name was renamed
845 RenameMapType::const_iterator I = CurFun.RenameMap.find(Key);
846 std::string LookupName;
847 if (I != CurFun.RenameMap.end())
848 LookupName = I->second;
851 ValueSymbolTable &SymTab = CurFun.CurrentFunction->getValueSymbolTable();
852 V = SymTab.lookup(LookupName);
853 if (V && V->getType() != Ty)
854 V = handleSRetFuncTypeMerge(V, Ty);
855 assert((!V || TypesDifferOnlyBySRet(V, Ty)) && "Found wrong type");
858 RenameMapType::const_iterator I = CurModule.RenameMap.find(Key);
859 std::string LookupName;
860 if (I != CurModule.RenameMap.end())
861 LookupName = I->second;
864 V = CurModule.CurrentModule->getValueSymbolTable().lookup(LookupName);
865 if (V && V->getType() != Ty)
866 V = handleSRetFuncTypeMerge(V, Ty);
867 assert((!V || TypesDifferOnlyBySRet(V, Ty)) && "Found wrong type");
872 D.destroy(); // Free old strdup'd memory...
876 // Check to make sure that "Ty" is an integral type, and that our
877 // value will fit into the specified type...
878 case ValID::ConstSIntVal: // Is it a constant pool reference??
879 if (!ConstantInt::isValueValidForType(Ty, D.ConstPool64)) {
880 error("Signed integral constant '" + itostr(D.ConstPool64) +
881 "' is invalid for type '" + Ty->getDescription() + "'");
883 return ConstantInt::get(Ty, D.ConstPool64);
885 case ValID::ConstUIntVal: // Is it an unsigned const pool reference?
886 if (!ConstantInt::isValueValidForType(Ty, D.UConstPool64)) {
887 if (!ConstantInt::isValueValidForType(Ty, D.ConstPool64))
888 error("Integral constant '" + utostr(D.UConstPool64) +
889 "' is invalid or out of range");
890 else // This is really a signed reference. Transmogrify.
891 return ConstantInt::get(Ty, D.ConstPool64);
893 return ConstantInt::get(Ty, D.UConstPool64);
895 case ValID::ConstFPVal: // Is it a floating point const pool reference?
896 if (!ConstantFP::isValueValidForType(Ty, D.ConstPoolFP))
897 error("FP constant invalid for type");
898 return ConstantFP::get(Ty, D.ConstPoolFP);
900 case ValID::ConstNullVal: // Is it a null value?
901 if (!isa<PointerType>(Ty))
902 error("Cannot create a a non pointer null");
903 return ConstantPointerNull::get(cast<PointerType>(Ty));
905 case ValID::ConstUndefVal: // Is it an undef value?
906 return UndefValue::get(Ty);
908 case ValID::ConstZeroVal: // Is it a zero value?
909 return Constant::getNullValue(Ty);
911 case ValID::ConstantVal: // Fully resolved constant?
912 if (D.ConstantValue->getType() != Ty)
913 error("Constant expression type different from required type");
914 return D.ConstantValue;
916 case ValID::InlineAsmVal: { // Inline asm expression
917 const PointerType *PTy = dyn_cast<PointerType>(Ty);
918 const FunctionType *FTy =
919 PTy ? dyn_cast<FunctionType>(PTy->getElementType()) : 0;
920 if (!FTy || !InlineAsm::Verify(FTy, D.IAD->Constraints))
921 error("Invalid type for asm constraint string");
922 InlineAsm *IA = InlineAsm::get(FTy, D.IAD->AsmString, D.IAD->Constraints,
923 D.IAD->HasSideEffects);
924 D.destroy(); // Free InlineAsmDescriptor.
928 assert(0 && "Unhandled case");
932 assert(0 && "Unhandled case");
936 // getVal - This function is identical to getExistingValue, except that if a
937 // value is not already defined, it "improvises" by creating a placeholder var
938 // that looks and acts just like the requested variable. When the value is
939 // defined later, all uses of the placeholder variable are replaced with the
942 static Value *getVal(const Type *Ty, const ValID &ID) {
943 if (Ty == Type::LabelTy)
944 error("Cannot use a basic block here");
946 // See if the value has already been defined.
947 Value *V = getExistingValue(Ty, ID);
950 if (!Ty->isFirstClassType() && !isa<OpaqueType>(Ty))
951 error("Invalid use of a composite type");
953 // If we reached here, we referenced either a symbol that we don't know about
954 // or an id number that hasn't been read yet. We may be referencing something
955 // forward, so just create an entry to be resolved later and get to it...
956 V = new Argument(Ty);
958 // Remember where this forward reference came from. FIXME, shouldn't we try
959 // to recycle these things??
960 CurModule.PlaceHolderInfo.insert(
961 std::make_pair(V, std::make_pair(ID, Upgradelineno)));
963 if (inFunctionScope())
964 InsertValue(V, CurFun.LateResolveValues);
966 InsertValue(V, CurModule.LateResolveValues);
970 /// @brief This just makes any name given to it unique, up to MAX_UINT times.
971 static std::string makeNameUnique(const std::string& Name) {
972 static unsigned UniqueNameCounter = 1;
973 std::string Result(Name);
974 Result += ".upgrd." + llvm::utostr(UniqueNameCounter++);
978 /// getBBVal - This is used for two purposes:
979 /// * If isDefinition is true, a new basic block with the specified ID is being
981 /// * If isDefinition is true, this is a reference to a basic block, which may
982 /// or may not be a forward reference.
984 static BasicBlock *getBBVal(const ValID &ID, bool isDefinition = false) {
985 assert(inFunctionScope() && "Can't get basic block at global scope");
991 error("Illegal label reference " + ID.getName());
993 case ValID::NumberVal: // Is it a numbered definition?
994 if (unsigned(ID.Num) >= CurFun.NumberedBlocks.size())
995 CurFun.NumberedBlocks.resize(ID.Num+1);
996 BB = CurFun.NumberedBlocks[ID.Num];
998 case ValID::NameVal: // Is it a named definition?
1000 if (Value *N = CurFun.CurrentFunction->getValueSymbolTable().lookup(Name)) {
1001 if (N->getType() != Type::LabelTy) {
1002 // Register names didn't use to conflict with basic block names
1003 // because of type planes. Now they all have to be unique. So, we just
1004 // rename the register and treat this name as if no basic block
1006 RenameMapKey Key = makeRenameMapKey(ID.Name, N->getType(), ID.S);
1007 N->setName(makeNameUnique(N->getName()));
1008 CurModule.RenameMap[Key] = N->getName();
1011 BB = cast<BasicBlock>(N);
1017 // See if the block has already been defined.
1019 // If this is the definition of the block, make sure the existing value was
1020 // just a forward reference. If it was a forward reference, there will be
1021 // an entry for it in the PlaceHolderInfo map.
1022 if (isDefinition && !CurFun.BBForwardRefs.erase(BB))
1023 // The existing value was a definition, not a forward reference.
1024 error("Redefinition of label " + ID.getName());
1026 ID.destroy(); // Free strdup'd memory.
1030 // Otherwise this block has not been seen before.
1031 BB = new BasicBlock("", CurFun.CurrentFunction);
1032 if (ID.Type == ValID::NameVal) {
1033 BB->setName(ID.Name);
1035 CurFun.NumberedBlocks[ID.Num] = BB;
1038 // If this is not a definition, keep track of it so we can use it as a forward
1040 if (!isDefinition) {
1041 // Remember where this forward reference came from.
1042 CurFun.BBForwardRefs[BB] = std::make_pair(ID, Upgradelineno);
1044 // The forward declaration could have been inserted anywhere in the
1045 // function: insert it into the correct place now.
1046 CurFun.CurrentFunction->getBasicBlockList().remove(BB);
1047 CurFun.CurrentFunction->getBasicBlockList().push_back(BB);
1054 //===----------------------------------------------------------------------===//
1055 // Code to handle forward references in instructions
1056 //===----------------------------------------------------------------------===//
1058 // This code handles the late binding needed with statements that reference
1059 // values not defined yet... for example, a forward branch, or the PHI node for
1062 // This keeps a table (CurFun.LateResolveValues) of all such forward references
1063 // and back patchs after we are done.
1066 // ResolveDefinitions - If we could not resolve some defs at parsing
1067 // time (forward branches, phi functions for loops, etc...) resolve the
1071 ResolveDefinitions(std::map<const Type*,ValueList> &LateResolvers,
1072 std::map<const Type*,ValueList> *FutureLateResolvers) {
1074 // Loop over LateResolveDefs fixing up stuff that couldn't be resolved
1075 for (std::map<const Type*,ValueList>::iterator LRI = LateResolvers.begin(),
1076 E = LateResolvers.end(); LRI != E; ++LRI) {
1077 const Type* Ty = LRI->first;
1078 ValueList &List = LRI->second;
1079 while (!List.empty()) {
1080 Value *V = List.back();
1083 std::map<Value*, std::pair<ValID, int> >::iterator PHI =
1084 CurModule.PlaceHolderInfo.find(V);
1085 assert(PHI != CurModule.PlaceHolderInfo.end() && "Placeholder error");
1087 ValID &DID = PHI->second.first;
1089 Value *TheRealValue = getExistingValue(Ty, DID);
1091 V->replaceAllUsesWith(TheRealValue);
1093 CurModule.PlaceHolderInfo.erase(PHI);
1094 } else if (FutureLateResolvers) {
1095 // Functions have their unresolved items forwarded to the module late
1097 InsertValue(V, *FutureLateResolvers);
1099 if (DID.Type == ValID::NameVal) {
1100 error("Reference to an invalid definition: '" + DID.getName() +
1101 "' of type '" + V->getType()->getDescription() + "'",
1102 PHI->second.second);
1105 error("Reference to an invalid definition: #" +
1106 itostr(DID.Num) + " of type '" +
1107 V->getType()->getDescription() + "'", PHI->second.second);
1114 LateResolvers.clear();
1117 /// This function is used for type resolution and upref handling. When a type
1118 /// becomes concrete, this function is called to adjust the signedness for the
1120 static void ResolveTypeSign(const Type* oldTy, const Signedness &Sign) {
1121 std::string TyName = CurModule.CurrentModule->getTypeName(oldTy);
1122 if (!TyName.empty())
1123 CurModule.NamedTypeSigns[TyName] = Sign;
1126 /// ResolveTypeTo - A brand new type was just declared. This means that (if
1127 /// name is not null) things referencing Name can be resolved. Otherwise,
1128 /// things refering to the number can be resolved. Do this now.
1129 static void ResolveTypeTo(char *Name, const Type *ToTy, const Signedness& Sign){
1132 D = ValID::create(Name);
1134 D = ValID::create((int)CurModule.Types.size());
1138 CurModule.NamedTypeSigns[Name] = Sign;
1140 std::map<ValID, PATypeHolder>::iterator I =
1141 CurModule.LateResolveTypes.find(D);
1142 if (I != CurModule.LateResolveTypes.end()) {
1143 const Type *OldTy = I->second.get();
1144 ((DerivedType*)OldTy)->refineAbstractTypeTo(ToTy);
1145 CurModule.LateResolveTypes.erase(I);
1149 /// This is the implementation portion of TypeHasInteger. It traverses the
1150 /// type given, avoiding recursive types, and returns true as soon as it finds
1151 /// an integer type. If no integer type is found, it returns false.
1152 static bool TypeHasIntegerI(const Type *Ty, std::vector<const Type*> Stack) {
1153 // Handle some easy cases
1154 if (Ty->isPrimitiveType() || (Ty->getTypeID() == Type::OpaqueTyID))
1156 if (Ty->isInteger())
1158 if (const SequentialType *STy = dyn_cast<SequentialType>(Ty))
1159 return STy->getElementType()->isInteger();
1161 // Avoid type structure recursion
1162 for (std::vector<const Type*>::iterator I = Stack.begin(), E = Stack.end();
1167 // Push us on the type stack
1168 Stack.push_back(Ty);
1170 if (const FunctionType *FTy = dyn_cast<FunctionType>(Ty)) {
1171 if (TypeHasIntegerI(FTy->getReturnType(), Stack))
1173 FunctionType::param_iterator I = FTy->param_begin();
1174 FunctionType::param_iterator E = FTy->param_end();
1176 if (TypeHasIntegerI(*I, Stack))
1179 } else if (const StructType *STy = dyn_cast<StructType>(Ty)) {
1180 StructType::element_iterator I = STy->element_begin();
1181 StructType::element_iterator E = STy->element_end();
1182 for (; I != E; ++I) {
1183 if (TypeHasIntegerI(*I, Stack))
1188 // There shouldn't be anything else, but its definitely not integer
1189 assert(0 && "What type is this?");
1193 /// This is the interface to TypeHasIntegerI. It just provides the type stack,
1194 /// to avoid recursion, and then calls TypeHasIntegerI.
1195 static inline bool TypeHasInteger(const Type *Ty) {
1196 std::vector<const Type*> TyStack;
1197 return TypeHasIntegerI(Ty, TyStack);
1200 // setValueName - Set the specified value to the name given. The name may be
1201 // null potentially, in which case this is a noop. The string passed in is
1202 // assumed to be a malloc'd string buffer, and is free'd by this function.
1204 static void setValueName(const ValueInfo &V, char *NameStr) {
1206 std::string Name(NameStr); // Copy string
1207 free(NameStr); // Free old string
1209 if (V.V->getType() == Type::VoidTy) {
1210 error("Can't assign name '" + Name + "' to value with void type");
1214 assert(inFunctionScope() && "Must be in function scope");
1216 // Search the function's symbol table for an existing value of this name
1217 ValueSymbolTable &ST = CurFun.CurrentFunction->getValueSymbolTable();
1218 Value* Existing = ST.lookup(Name);
1220 // An existing value of the same name was found. This might have happened
1221 // because of the integer type planes collapsing in LLVM 2.0.
1222 if (Existing->getType() == V.V->getType() &&
1223 !TypeHasInteger(Existing->getType())) {
1224 // If the type does not contain any integers in them then this can't be
1225 // a type plane collapsing issue. It truly is a redefinition and we
1226 // should error out as the assembly is invalid.
1227 error("Redefinition of value named '" + Name + "' of type '" +
1228 V.V->getType()->getDescription() + "'");
1231 // In LLVM 2.0 we don't allow names to be re-used for any values in a
1232 // function, regardless of Type. Previously re-use of names was okay as
1233 // long as they were distinct types. With type planes collapsing because
1234 // of the signedness change and because of PR411, this can no longer be
1235 // supported. We must search the entire symbol table for a conflicting
1236 // name and make the name unique. No warning is needed as this can't
1238 std::string NewName = makeNameUnique(Name);
1239 // We're changing the name but it will probably be used by other
1240 // instructions as operands later on. Consequently we have to retain
1241 // a mapping of the renaming that we're doing.
1242 RenameMapKey Key = makeRenameMapKey(Name, V.V->getType(), V.S);
1243 CurFun.RenameMap[Key] = NewName;
1252 /// ParseGlobalVariable - Handle parsing of a global. If Initializer is null,
1253 /// this is a declaration, otherwise it is a definition.
1254 static GlobalVariable *
1255 ParseGlobalVariable(char *NameStr,GlobalValue::LinkageTypes Linkage,
1256 bool isConstantGlobal, const Type *Ty,
1257 Constant *Initializer,
1258 const Signedness &Sign) {
1259 if (isa<FunctionType>(Ty))
1260 error("Cannot declare global vars of function type");
1262 const PointerType *PTy = PointerType::get(Ty);
1266 Name = NameStr; // Copy string
1267 free(NameStr); // Free old string
1270 // See if this global value was forward referenced. If so, recycle the
1273 if (!Name.empty()) {
1274 ID = ValID::create((char*)Name.c_str());
1276 ID = ValID::create((int)CurModule.Values[PTy].size());
1278 ID.S.makeComposite(Sign);
1280 if (GlobalValue *FWGV = CurModule.GetForwardRefForGlobal(PTy, ID)) {
1281 // Move the global to the end of the list, from whereever it was
1282 // previously inserted.
1283 GlobalVariable *GV = cast<GlobalVariable>(FWGV);
1284 CurModule.CurrentModule->getGlobalList().remove(GV);
1285 CurModule.CurrentModule->getGlobalList().push_back(GV);
1286 GV->setInitializer(Initializer);
1287 GV->setLinkage(Linkage);
1288 GV->setConstant(isConstantGlobal);
1289 InsertValue(GV, CurModule.Values);
1293 // If this global has a name, check to see if there is already a definition
1294 // of this global in the module and emit warnings if there are conflicts.
1295 if (!Name.empty()) {
1296 // The global has a name. See if there's an existing one of the same name.
1297 if (CurModule.CurrentModule->getNamedGlobal(Name) ||
1298 CurModule.CurrentModule->getFunction(Name)) {
1299 // We found an existing global of the same name. This isn't allowed
1300 // in LLVM 2.0. Consequently, we must alter the name of the global so it
1301 // can at least compile. This can happen because of type planes
1302 // There is alread a global of the same name which means there is a
1303 // conflict. Let's see what we can do about it.
1304 std::string NewName(makeNameUnique(Name));
1305 if (Linkage != GlobalValue::InternalLinkage) {
1306 // The linkage of this gval is external so we can't reliably rename
1307 // it because it could potentially create a linking problem.
1308 // However, we can't leave the name conflict in the output either or
1309 // it won't assemble with LLVM 2.0. So, all we can do is rename
1310 // this one to something unique and emit a warning about the problem.
1311 warning("Renaming global variable '" + Name + "' to '" + NewName +
1312 "' may cause linkage errors");
1315 // Put the renaming in the global rename map
1316 RenameMapKey Key = makeRenameMapKey(Name, PointerType::get(Ty), ID.S);
1317 CurModule.RenameMap[Key] = NewName;
1324 // Otherwise there is no existing GV to use, create one now.
1325 GlobalVariable *GV =
1326 new GlobalVariable(Ty, isConstantGlobal, Linkage, Initializer, Name,
1327 CurModule.CurrentModule);
1328 InsertValue(GV, CurModule.Values);
1329 // Remember the sign of this global.
1330 CurModule.NamedValueSigns[Name] = ID.S;
1334 // setTypeName - Set the specified type to the name given. The name may be
1335 // null potentially, in which case this is a noop. The string passed in is
1336 // assumed to be a malloc'd string buffer, and is freed by this function.
1338 // This function returns true if the type has already been defined, but is
1339 // allowed to be redefined in the specified context. If the name is a new name
1340 // for the type plane, it is inserted and false is returned.
1341 static bool setTypeName(const PATypeInfo& TI, char *NameStr) {
1342 assert(!inFunctionScope() && "Can't give types function-local names");
1343 if (NameStr == 0) return false;
1345 std::string Name(NameStr); // Copy string
1346 free(NameStr); // Free old string
1348 const Type* Ty = TI.PAT->get();
1350 // We don't allow assigning names to void type
1351 if (Ty == Type::VoidTy) {
1352 error("Can't assign name '" + Name + "' to the void type");
1356 // Set the type name, checking for conflicts as we do so.
1357 bool AlreadyExists = CurModule.CurrentModule->addTypeName(Name, Ty);
1359 // Save the sign information for later use
1360 CurModule.NamedTypeSigns[Name] = TI.S;
1362 if (AlreadyExists) { // Inserting a name that is already defined???
1363 const Type *Existing = CurModule.CurrentModule->getTypeByName(Name);
1364 assert(Existing && "Conflict but no matching type?");
1366 // There is only one case where this is allowed: when we are refining an
1367 // opaque type. In this case, Existing will be an opaque type.
1368 if (const OpaqueType *OpTy = dyn_cast<OpaqueType>(Existing)) {
1369 // We ARE replacing an opaque type!
1370 const_cast<OpaqueType*>(OpTy)->refineAbstractTypeTo(Ty);
1374 // Otherwise, this is an attempt to redefine a type. That's okay if
1375 // the redefinition is identical to the original. This will be so if
1376 // Existing and T point to the same Type object. In this one case we
1377 // allow the equivalent redefinition.
1378 if (Existing == Ty) return true; // Yes, it's equal.
1380 // Any other kind of (non-equivalent) redefinition is an error.
1381 error("Redefinition of type named '" + Name + "' in the '" +
1382 Ty->getDescription() + "' type plane");
1388 //===----------------------------------------------------------------------===//
1389 // Code for handling upreferences in type names...
1392 // TypeContains - Returns true if Ty directly contains E in it.
1394 static bool TypeContains(const Type *Ty, const Type *E) {
1395 return std::find(Ty->subtype_begin(), Ty->subtype_end(),
1396 E) != Ty->subtype_end();
1400 struct UpRefRecord {
1401 // NestingLevel - The number of nesting levels that need to be popped before
1402 // this type is resolved.
1403 unsigned NestingLevel;
1405 // LastContainedTy - This is the type at the current binding level for the
1406 // type. Every time we reduce the nesting level, this gets updated.
1407 const Type *LastContainedTy;
1409 // UpRefTy - This is the actual opaque type that the upreference is
1410 // represented with.
1411 OpaqueType *UpRefTy;
1413 UpRefRecord(unsigned NL, OpaqueType *URTy)
1414 : NestingLevel(NL), LastContainedTy(URTy), UpRefTy(URTy) { }
1418 // UpRefs - A list of the outstanding upreferences that need to be resolved.
1419 static std::vector<UpRefRecord> UpRefs;
1421 /// HandleUpRefs - Every time we finish a new layer of types, this function is
1422 /// called. It loops through the UpRefs vector, which is a list of the
1423 /// currently active types. For each type, if the up reference is contained in
1424 /// the newly completed type, we decrement the level count. When the level
1425 /// count reaches zero, the upreferenced type is the type that is passed in:
1426 /// thus we can complete the cycle.
1428 static PATypeHolder HandleUpRefs(const Type *ty, const Signedness& Sign) {
1429 // If Ty isn't abstract, or if there are no up-references in it, then there is
1430 // nothing to resolve here.
1431 if (!ty->isAbstract() || UpRefs.empty()) return ty;
1433 PATypeHolder Ty(ty);
1434 UR_OUT("Type '" << Ty->getDescription() <<
1435 "' newly formed. Resolving upreferences.\n" <<
1436 UpRefs.size() << " upreferences active!\n");
1438 // If we find any resolvable upreferences (i.e., those whose NestingLevel goes
1439 // to zero), we resolve them all together before we resolve them to Ty. At
1440 // the end of the loop, if there is anything to resolve to Ty, it will be in
1442 OpaqueType *TypeToResolve = 0;
1445 for (; i != UpRefs.size(); ++i) {
1446 UR_OUT(" UR#" << i << " - TypeContains(" << Ty->getDescription() << ", "
1447 << UpRefs[i].UpRefTy->getDescription() << ") = "
1448 << (TypeContains(Ty, UpRefs[i].UpRefTy) ? "true" : "false") << "\n");
1449 if (TypeContains(Ty, UpRefs[i].LastContainedTy)) {
1450 // Decrement level of upreference
1451 unsigned Level = --UpRefs[i].NestingLevel;
1452 UpRefs[i].LastContainedTy = Ty;
1453 UR_OUT(" Uplevel Ref Level = " << Level << "\n");
1454 if (Level == 0) { // Upreference should be resolved!
1455 if (!TypeToResolve) {
1456 TypeToResolve = UpRefs[i].UpRefTy;
1458 UR_OUT(" * Resolving upreference for "
1459 << UpRefs[i].UpRefTy->getDescription() << "\n";
1460 std::string OldName = UpRefs[i].UpRefTy->getDescription());
1461 ResolveTypeSign(UpRefs[i].UpRefTy, Sign);
1462 UpRefs[i].UpRefTy->refineAbstractTypeTo(TypeToResolve);
1463 UR_OUT(" * Type '" << OldName << "' refined upreference to: "
1464 << (const void*)Ty << ", " << Ty->getDescription() << "\n");
1466 UpRefs.erase(UpRefs.begin()+i); // Remove from upreference list...
1467 --i; // Do not skip the next element...
1472 if (TypeToResolve) {
1473 UR_OUT(" * Resolving upreference for "
1474 << UpRefs[i].UpRefTy->getDescription() << "\n";
1475 std::string OldName = TypeToResolve->getDescription());
1476 ResolveTypeSign(TypeToResolve, Sign);
1477 TypeToResolve->refineAbstractTypeTo(Ty);
1483 bool Signedness::operator<(const Signedness &that) const {
1486 return *(this->name) < *(that.name);
1488 return CurModule.NamedTypeSigns[*name] < that;
1489 } else if (that.isNamed()) {
1490 return *this < CurModule.NamedTypeSigns[*that.name];
1493 if (isComposite() && that.isComposite()) {
1494 if (sv->size() == that.sv->size()) {
1495 SignVector::const_iterator thisI = sv->begin(), thisE = sv->end();
1496 SignVector::const_iterator thatI = that.sv->begin(),
1497 thatE = that.sv->end();
1498 for (; thisI != thisE; ++thisI, ++thatI) {
1499 if (*thisI < *thatI)
1501 else if (!(*thisI == *thatI))
1506 return sv->size() < that.sv->size();
1508 return kind < that.kind;
1511 bool Signedness::operator==(const Signedness &that) const {
1514 return *(this->name) == *(that.name);
1516 return CurModule.NamedTypeSigns[*(this->name)] == that;
1517 else if (that.isNamed())
1518 return *this == CurModule.NamedTypeSigns[*(that.name)];
1519 if (isComposite() && that.isComposite()) {
1520 if (sv->size() == that.sv->size()) {
1521 SignVector::const_iterator thisI = sv->begin(), thisE = sv->end();
1522 SignVector::const_iterator thatI = that.sv->begin(),
1523 thatE = that.sv->end();
1524 for (; thisI != thisE; ++thisI, ++thatI) {
1525 if (!(*thisI == *thatI))
1532 return kind == that.kind;
1535 void Signedness::copy(const Signedness &that) {
1536 if (that.isNamed()) {
1538 name = new std::string(*that.name);
1539 } else if (that.isComposite()) {
1541 sv = new SignVector();
1549 void Signedness::destroy() {
1552 } else if (isComposite()) {
1558 void Signedness::dump() const {
1559 if (isComposite()) {
1560 if (sv->size() == 1) {
1565 for (unsigned i = 0; i < sv->size(); ++i) {
1572 } else if (isNamed()) {
1574 } else if (isSigned()) {
1576 } else if (isUnsigned()) {
1583 static inline Instruction::TermOps
1584 getTermOp(TermOps op) {
1586 default : assert(0 && "Invalid OldTermOp");
1587 case RetOp : return Instruction::Ret;
1588 case BrOp : return Instruction::Br;
1589 case SwitchOp : return Instruction::Switch;
1590 case InvokeOp : return Instruction::Invoke;
1591 case UnwindOp : return Instruction::Unwind;
1592 case UnreachableOp: return Instruction::Unreachable;
1596 static inline Instruction::BinaryOps
1597 getBinaryOp(BinaryOps op, const Type *Ty, const Signedness& Sign) {
1599 default : assert(0 && "Invalid OldBinaryOps");
1605 case SetGT : assert(0 && "Should use getCompareOp");
1606 case AddOp : return Instruction::Add;
1607 case SubOp : return Instruction::Sub;
1608 case MulOp : return Instruction::Mul;
1610 // This is an obsolete instruction so we must upgrade it based on the
1611 // types of its operands.
1612 bool isFP = Ty->isFloatingPoint();
1613 if (const VectorType* PTy = dyn_cast<VectorType>(Ty))
1614 // If its a vector type we want to use the element type
1615 isFP = PTy->getElementType()->isFloatingPoint();
1617 return Instruction::FDiv;
1618 else if (Sign.isSigned())
1619 return Instruction::SDiv;
1620 return Instruction::UDiv;
1622 case UDivOp : return Instruction::UDiv;
1623 case SDivOp : return Instruction::SDiv;
1624 case FDivOp : return Instruction::FDiv;
1626 // This is an obsolete instruction so we must upgrade it based on the
1627 // types of its operands.
1628 bool isFP = Ty->isFloatingPoint();
1629 if (const VectorType* PTy = dyn_cast<VectorType>(Ty))
1630 // If its a vector type we want to use the element type
1631 isFP = PTy->getElementType()->isFloatingPoint();
1632 // Select correct opcode
1634 return Instruction::FRem;
1635 else if (Sign.isSigned())
1636 return Instruction::SRem;
1637 return Instruction::URem;
1639 case URemOp : return Instruction::URem;
1640 case SRemOp : return Instruction::SRem;
1641 case FRemOp : return Instruction::FRem;
1642 case LShrOp : return Instruction::LShr;
1643 case AShrOp : return Instruction::AShr;
1644 case ShlOp : return Instruction::Shl;
1646 if (Sign.isSigned())
1647 return Instruction::AShr;
1648 return Instruction::LShr;
1649 case AndOp : return Instruction::And;
1650 case OrOp : return Instruction::Or;
1651 case XorOp : return Instruction::Xor;
1655 static inline Instruction::OtherOps
1656 getCompareOp(BinaryOps op, unsigned short &predicate, const Type* &Ty,
1657 const Signedness &Sign) {
1658 bool isSigned = Sign.isSigned();
1659 bool isFP = Ty->isFloatingPoint();
1661 default : assert(0 && "Invalid OldSetCC");
1664 predicate = FCmpInst::FCMP_OEQ;
1665 return Instruction::FCmp;
1667 predicate = ICmpInst::ICMP_EQ;
1668 return Instruction::ICmp;
1672 predicate = FCmpInst::FCMP_UNE;
1673 return Instruction::FCmp;
1675 predicate = ICmpInst::ICMP_NE;
1676 return Instruction::ICmp;
1680 predicate = FCmpInst::FCMP_OLE;
1681 return Instruction::FCmp;
1684 predicate = ICmpInst::ICMP_SLE;
1686 predicate = ICmpInst::ICMP_ULE;
1687 return Instruction::ICmp;
1691 predicate = FCmpInst::FCMP_OGE;
1692 return Instruction::FCmp;
1695 predicate = ICmpInst::ICMP_SGE;
1697 predicate = ICmpInst::ICMP_UGE;
1698 return Instruction::ICmp;
1702 predicate = FCmpInst::FCMP_OLT;
1703 return Instruction::FCmp;
1706 predicate = ICmpInst::ICMP_SLT;
1708 predicate = ICmpInst::ICMP_ULT;
1709 return Instruction::ICmp;
1713 predicate = FCmpInst::FCMP_OGT;
1714 return Instruction::FCmp;
1717 predicate = ICmpInst::ICMP_SGT;
1719 predicate = ICmpInst::ICMP_UGT;
1720 return Instruction::ICmp;
1725 static inline Instruction::MemoryOps getMemoryOp(MemoryOps op) {
1727 default : assert(0 && "Invalid OldMemoryOps");
1728 case MallocOp : return Instruction::Malloc;
1729 case FreeOp : return Instruction::Free;
1730 case AllocaOp : return Instruction::Alloca;
1731 case LoadOp : return Instruction::Load;
1732 case StoreOp : return Instruction::Store;
1733 case GetElementPtrOp : return Instruction::GetElementPtr;
1737 static inline Instruction::OtherOps
1738 getOtherOp(OtherOps op, const Signedness &Sign) {
1740 default : assert(0 && "Invalid OldOtherOps");
1741 case PHIOp : return Instruction::PHI;
1742 case CallOp : return Instruction::Call;
1743 case SelectOp : return Instruction::Select;
1744 case UserOp1 : return Instruction::UserOp1;
1745 case UserOp2 : return Instruction::UserOp2;
1746 case VAArg : return Instruction::VAArg;
1747 case ExtractElementOp : return Instruction::ExtractElement;
1748 case InsertElementOp : return Instruction::InsertElement;
1749 case ShuffleVectorOp : return Instruction::ShuffleVector;
1750 case ICmpOp : return Instruction::ICmp;
1751 case FCmpOp : return Instruction::FCmp;
1755 static inline Value*
1756 getCast(CastOps op, Value *Src, const Signedness &SrcSign, const Type *DstTy,
1757 const Signedness &DstSign, bool ForceInstruction = false) {
1758 Instruction::CastOps Opcode;
1759 const Type* SrcTy = Src->getType();
1761 if (SrcTy->isFloatingPoint() && isa<PointerType>(DstTy)) {
1762 // fp -> ptr cast is no longer supported but we must upgrade this
1763 // by doing a double cast: fp -> int -> ptr
1764 SrcTy = Type::Int64Ty;
1765 Opcode = Instruction::IntToPtr;
1766 if (isa<Constant>(Src)) {
1767 Src = ConstantExpr::getCast(Instruction::FPToUI,
1768 cast<Constant>(Src), SrcTy);
1770 std::string NewName(makeNameUnique(Src->getName()));
1771 Src = new FPToUIInst(Src, SrcTy, NewName, CurBB);
1773 } else if (isa<IntegerType>(DstTy) &&
1774 cast<IntegerType>(DstTy)->getBitWidth() == 1) {
1775 // cast type %x to bool was previously defined as setne type %x, null
1776 // The cast semantic is now to truncate, not compare so we must retain
1777 // the original intent by replacing the cast with a setne
1778 Constant* Null = Constant::getNullValue(SrcTy);
1779 Instruction::OtherOps Opcode = Instruction::ICmp;
1780 unsigned short predicate = ICmpInst::ICMP_NE;
1781 if (SrcTy->isFloatingPoint()) {
1782 Opcode = Instruction::FCmp;
1783 predicate = FCmpInst::FCMP_ONE;
1784 } else if (!SrcTy->isInteger() && !isa<PointerType>(SrcTy)) {
1785 error("Invalid cast to bool");
1787 if (isa<Constant>(Src) && !ForceInstruction)
1788 return ConstantExpr::getCompare(predicate, cast<Constant>(Src), Null);
1790 return CmpInst::create(Opcode, predicate, Src, Null);
1792 // Determine the opcode to use by calling CastInst::getCastOpcode
1794 CastInst::getCastOpcode(Src, SrcSign.isSigned(), DstTy,
1795 DstSign.isSigned());
1797 } else switch (op) {
1798 default: assert(0 && "Invalid cast token");
1799 case TruncOp: Opcode = Instruction::Trunc; break;
1800 case ZExtOp: Opcode = Instruction::ZExt; break;
1801 case SExtOp: Opcode = Instruction::SExt; break;
1802 case FPTruncOp: Opcode = Instruction::FPTrunc; break;
1803 case FPExtOp: Opcode = Instruction::FPExt; break;
1804 case FPToUIOp: Opcode = Instruction::FPToUI; break;
1805 case FPToSIOp: Opcode = Instruction::FPToSI; break;
1806 case UIToFPOp: Opcode = Instruction::UIToFP; break;
1807 case SIToFPOp: Opcode = Instruction::SIToFP; break;
1808 case PtrToIntOp: Opcode = Instruction::PtrToInt; break;
1809 case IntToPtrOp: Opcode = Instruction::IntToPtr; break;
1810 case BitCastOp: Opcode = Instruction::BitCast; break;
1813 if (isa<Constant>(Src) && !ForceInstruction)
1814 return ConstantExpr::getCast(Opcode, cast<Constant>(Src), DstTy);
1815 return CastInst::create(Opcode, Src, DstTy);
1818 static Instruction *
1819 upgradeIntrinsicCall(const Type* RetTy, const ValID &ID,
1820 std::vector<Value*>& Args) {
1822 std::string Name = ID.Type == ValID::NameVal ? ID.Name : "";
1823 if (Name.length() <= 5 || Name[0] != 'l' || Name[1] != 'l' ||
1824 Name[2] != 'v' || Name[3] != 'm' || Name[4] != '.')
1829 if (Name == "llvm.isunordered.f32" || Name == "llvm.isunordered.f64") {
1830 if (Args.size() != 2)
1831 error("Invalid prototype for " + Name);
1832 return new FCmpInst(FCmpInst::FCMP_UNO, Args[0], Args[1]);
1836 if (Name.length() == 14 && !memcmp(&Name[5], "bswap.i", 7)) {
1837 const Type* ArgTy = Args[0]->getType();
1838 Name += ".i" + utostr(cast<IntegerType>(ArgTy)->getBitWidth());
1839 Function *F = cast<Function>(
1840 CurModule.CurrentModule->getOrInsertFunction(Name, RetTy, ArgTy,
1842 return new CallInst(F, Args[0]);
1846 if ((Name.length() <= 14 && !memcmp(&Name[5], "ctpop.i", 7)) ||
1847 (Name.length() <= 13 && !memcmp(&Name[5], "ctlz.i", 6)) ||
1848 (Name.length() <= 13 && !memcmp(&Name[5], "cttz.i", 6))) {
1849 // These intrinsics changed their result type.
1850 const Type* ArgTy = Args[0]->getType();
1851 Function *OldF = CurModule.CurrentModule->getFunction(Name);
1853 OldF->setName("upgrd.rm." + Name);
1855 Function *NewF = cast<Function>(
1856 CurModule.CurrentModule->getOrInsertFunction(Name, Type::Int32Ty,
1859 Instruction *Call = new CallInst(NewF, Args[0], "", CurBB);
1860 return CastInst::createIntegerCast(Call, RetTy, false);
1865 const Type* PtrTy = PointerType::get(Type::Int8Ty);
1866 std::vector<const Type*> Params;
1867 if (Name == "llvm.va_start" || Name == "llvm.va_end") {
1868 if (Args.size() != 1)
1869 error("Invalid prototype for " + Name + " prototype");
1870 Params.push_back(PtrTy);
1871 const FunctionType *FTy =
1872 FunctionType::get(Type::VoidTy, Params, false);
1873 const PointerType *PFTy = PointerType::get(FTy);
1874 Value* Func = getVal(PFTy, ID);
1875 Args[0] = new BitCastInst(Args[0], PtrTy, makeNameUnique("va"), CurBB);
1876 return new CallInst(Func, &Args[0], Args.size());
1877 } else if (Name == "llvm.va_copy") {
1878 if (Args.size() != 2)
1879 error("Invalid prototype for " + Name + " prototype");
1880 Params.push_back(PtrTy);
1881 Params.push_back(PtrTy);
1882 const FunctionType *FTy =
1883 FunctionType::get(Type::VoidTy, Params, false);
1884 const PointerType *PFTy = PointerType::get(FTy);
1885 Value* Func = getVal(PFTy, ID);
1886 std::string InstName0(makeNameUnique("va0"));
1887 std::string InstName1(makeNameUnique("va1"));
1888 Args[0] = new BitCastInst(Args[0], PtrTy, InstName0, CurBB);
1889 Args[1] = new BitCastInst(Args[1], PtrTy, InstName1, CurBB);
1890 return new CallInst(Func, &Args[0], Args.size());
1897 const Type* upgradeGEPCEIndices(const Type* PTy,
1898 std::vector<ValueInfo> *Indices,
1899 std::vector<Constant*> &Result) {
1900 const Type *Ty = PTy;
1902 for (unsigned i = 0, e = Indices->size(); i != e ; ++i) {
1903 Constant *Index = cast<Constant>((*Indices)[i].V);
1905 if (ConstantInt *CI = dyn_cast<ConstantInt>(Index)) {
1906 // LLVM 1.2 and earlier used ubyte struct indices. Convert any ubyte
1907 // struct indices to i32 struct indices with ZExt for compatibility.
1908 if (CI->getBitWidth() < 32)
1909 Index = ConstantExpr::getCast(Instruction::ZExt, CI, Type::Int32Ty);
1912 if (isa<SequentialType>(Ty)) {
1913 // Make sure that unsigned SequentialType indices are zext'd to
1914 // 64-bits if they were smaller than that because LLVM 2.0 will sext
1915 // all indices for SequentialType elements. We must retain the same
1916 // semantic (zext) for unsigned types.
1917 if (const IntegerType *Ity = dyn_cast<IntegerType>(Index->getType())) {
1918 if (Ity->getBitWidth() < 64 && (*Indices)[i].S.isUnsigned()) {
1919 Index = ConstantExpr::getCast(Instruction::ZExt, Index,Type::Int64Ty);
1923 Result.push_back(Index);
1924 Ty = GetElementPtrInst::getIndexedType(PTy, (Value**)&Result[0],
1925 Result.size(),true);
1927 error("Index list invalid for constant getelementptr");
1932 const Type* upgradeGEPInstIndices(const Type* PTy,
1933 std::vector<ValueInfo> *Indices,
1934 std::vector<Value*> &Result) {
1935 const Type *Ty = PTy;
1937 for (unsigned i = 0, e = Indices->size(); i != e ; ++i) {
1938 Value *Index = (*Indices)[i].V;
1940 if (ConstantInt *CI = dyn_cast<ConstantInt>(Index)) {
1941 // LLVM 1.2 and earlier used ubyte struct indices. Convert any ubyte
1942 // struct indices to i32 struct indices with ZExt for compatibility.
1943 if (CI->getBitWidth() < 32)
1944 Index = ConstantExpr::getCast(Instruction::ZExt, CI, Type::Int32Ty);
1948 if (isa<StructType>(Ty)) { // Only change struct indices
1949 if (!isa<Constant>(Index)) {
1950 error("Invalid non-constant structure index");
1954 // Make sure that unsigned SequentialType indices are zext'd to
1955 // 64-bits if they were smaller than that because LLVM 2.0 will sext
1956 // all indices for SequentialType elements. We must retain the same
1957 // semantic (zext) for unsigned types.
1958 if (const IntegerType *Ity = dyn_cast<IntegerType>(Index->getType())) {
1959 if (Ity->getBitWidth() < 64 && (*Indices)[i].S.isUnsigned()) {
1960 if (isa<Constant>(Index))
1961 Index = ConstantExpr::getCast(Instruction::ZExt,
1962 cast<Constant>(Index), Type::Int64Ty);
1964 Index = CastInst::create(Instruction::ZExt, Index, Type::Int64Ty,
1965 makeNameUnique("gep"), CurBB);
1969 Result.push_back(Index);
1970 Ty = GetElementPtrInst::getIndexedType(PTy, &Result[0], Result.size(),true);
1972 error("Index list invalid for constant getelementptr");
1977 unsigned upgradeCallingConv(unsigned CC) {
1979 case OldCallingConv::C : return CallingConv::C;
1980 case OldCallingConv::CSRet : return CallingConv::C;
1981 case OldCallingConv::Fast : return CallingConv::Fast;
1982 case OldCallingConv::Cold : return CallingConv::Cold;
1983 case OldCallingConv::X86_StdCall : return CallingConv::X86_StdCall;
1984 case OldCallingConv::X86_FastCall: return CallingConv::X86_FastCall;
1990 Module* UpgradeAssembly(const std::string &infile, std::istream& in,
1991 bool debug, bool addAttrs)
1994 CurFilename = infile;
1997 AddAttributes = addAttrs;
1998 ObsoleteVarArgs = false;
2001 CurModule.CurrentModule = new Module(CurFilename);
2003 // Check to make sure the parser succeeded
2006 delete ParserResult;
2007 std::cerr << "llvm-upgrade: parse failed.\n";
2011 // Check to make sure that parsing produced a result
2012 if (!ParserResult) {
2013 std::cerr << "llvm-upgrade: no parse result.\n";
2017 // Reset ParserResult variable while saving its value for the result.
2018 Module *Result = ParserResult;
2021 //Not all functions use vaarg, so make a second check for ObsoleteVarArgs
2024 if ((F = Result->getFunction("llvm.va_start"))
2025 && F->getFunctionType()->getNumParams() == 0)
2026 ObsoleteVarArgs = true;
2027 if((F = Result->getFunction("llvm.va_copy"))
2028 && F->getFunctionType()->getNumParams() == 1)
2029 ObsoleteVarArgs = true;
2032 if (ObsoleteVarArgs && NewVarArgs) {
2033 error("This file is corrupt: it uses both new and old style varargs");
2037 if(ObsoleteVarArgs) {
2038 if(Function* F = Result->getFunction("llvm.va_start")) {
2039 if (F->arg_size() != 0) {
2040 error("Obsolete va_start takes 0 argument");
2046 //bar = alloca typeof(foo)
2050 const Type* RetTy = Type::getPrimitiveType(Type::VoidTyID);
2051 const Type* ArgTy = F->getFunctionType()->getReturnType();
2052 const Type* ArgTyPtr = PointerType::get(ArgTy);
2053 Function* NF = cast<Function>(Result->getOrInsertFunction(
2054 "llvm.va_start", RetTy, ArgTyPtr, (Type *)0));
2056 while (!F->use_empty()) {
2057 CallInst* CI = cast<CallInst>(F->use_back());
2058 AllocaInst* bar = new AllocaInst(ArgTy, 0, "vastart.fix.1", CI);
2059 new CallInst(NF, bar, "", CI);
2060 Value* foo = new LoadInst(bar, "vastart.fix.2", CI);
2061 CI->replaceAllUsesWith(foo);
2062 CI->getParent()->getInstList().erase(CI);
2064 Result->getFunctionList().erase(F);
2067 if(Function* F = Result->getFunction("llvm.va_end")) {
2068 if(F->arg_size() != 1) {
2069 error("Obsolete va_end takes 1 argument");
2075 //bar = alloca 1 of typeof(foo)
2077 const Type* RetTy = Type::getPrimitiveType(Type::VoidTyID);
2078 const Type* ArgTy = F->getFunctionType()->getParamType(0);
2079 const Type* ArgTyPtr = PointerType::get(ArgTy);
2080 Function* NF = cast<Function>(Result->getOrInsertFunction(
2081 "llvm.va_end", RetTy, ArgTyPtr, (Type *)0));
2083 while (!F->use_empty()) {
2084 CallInst* CI = cast<CallInst>(F->use_back());
2085 AllocaInst* bar = new AllocaInst(ArgTy, 0, "vaend.fix.1", CI);
2086 new StoreInst(CI->getOperand(1), bar, CI);
2087 new CallInst(NF, bar, "", CI);
2088 CI->getParent()->getInstList().erase(CI);
2090 Result->getFunctionList().erase(F);
2093 if(Function* F = Result->getFunction("llvm.va_copy")) {
2094 if(F->arg_size() != 1) {
2095 error("Obsolete va_copy takes 1 argument");
2100 //a = alloca 1 of typeof(foo)
2101 //b = alloca 1 of typeof(foo)
2106 const Type* RetTy = Type::getPrimitiveType(Type::VoidTyID);
2107 const Type* ArgTy = F->getFunctionType()->getReturnType();
2108 const Type* ArgTyPtr = PointerType::get(ArgTy);
2109 Function* NF = cast<Function>(Result->getOrInsertFunction(
2110 "llvm.va_copy", RetTy, ArgTyPtr, ArgTyPtr, (Type *)0));
2112 while (!F->use_empty()) {
2113 CallInst* CI = cast<CallInst>(F->use_back());
2114 AllocaInst* a = new AllocaInst(ArgTy, 0, "vacopy.fix.1", CI);
2115 AllocaInst* b = new AllocaInst(ArgTy, 0, "vacopy.fix.2", CI);
2116 new StoreInst(CI->getOperand(1), b, CI);
2117 new CallInst(NF, a, b, "", CI);
2118 Value* foo = new LoadInst(a, "vacopy.fix.3", CI);
2119 CI->replaceAllUsesWith(foo);
2120 CI->getParent()->getInstList().erase(CI);
2122 Result->getFunctionList().erase(F);
2129 } // end llvm namespace
2131 using namespace llvm;
2135 /* Enabling traces. */
2140 /* Enabling verbose error messages. */
2141 #ifdef YYERROR_VERBOSE
2142 # undef YYERROR_VERBOSE
2143 # define YYERROR_VERBOSE 1
2145 # define YYERROR_VERBOSE 0
2148 /* Enabling the token table. */
2149 #ifndef YYTOKEN_TABLE
2150 # define YYTOKEN_TABLE 0
2153 #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
2154 #line 1775 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
2155 typedef union YYSTYPE {
2156 llvm::Module *ModuleVal;
2157 llvm::Function *FunctionVal;
2158 std::pair<llvm::PATypeInfo, char*> *ArgVal;
2159 llvm::BasicBlock *BasicBlockVal;
2160 llvm::TermInstInfo TermInstVal;
2161 llvm::InstrInfo InstVal;
2162 llvm::ConstInfo ConstVal;
2163 llvm::ValueInfo ValueVal;
2164 llvm::PATypeInfo TypeVal;
2165 llvm::TypeInfo PrimType;
2166 llvm::PHIListInfo PHIList;
2167 std::list<llvm::PATypeInfo> *TypeList;
2168 std::vector<llvm::ValueInfo> *ValueList;
2169 std::vector<llvm::ConstInfo> *ConstVector;
2172 std::vector<std::pair<llvm::PATypeInfo,char*> > *ArgList;
2173 // Represent the RHS of PHI node
2174 std::vector<std::pair<llvm::Constant*, llvm::BasicBlock*> > *JumpTable;
2176 llvm::GlobalValue::LinkageTypes Linkage;
2184 char *StrVal; // This memory is strdup'd!
2185 llvm::ValID ValIDVal; // strdup'd memory maybe!
2187 llvm::BinaryOps BinaryOpVal;
2188 llvm::TermOps TermOpVal;
2189 llvm::MemoryOps MemOpVal;
2190 llvm::OtherOps OtherOpVal;
2191 llvm::CastOps CastOpVal;
2192 llvm::ICmpInst::Predicate IPred;
2193 llvm::FCmpInst::Predicate FPred;
2194 llvm::Module::Endianness Endianness;
2196 /* Line 196 of yacc.c. */
2197 #line 2198 "UpgradeParser.tab.c"
2198 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
2199 # define YYSTYPE_IS_DECLARED 1
2200 # define YYSTYPE_IS_TRIVIAL 1
2205 /* Copy the second part of user declarations. */
2208 /* Line 219 of yacc.c. */
2209 #line 2210 "UpgradeParser.tab.c"
2211 #if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
2212 # define YYSIZE_T __SIZE_TYPE__
2214 #if ! defined (YYSIZE_T) && defined (size_t)
2215 # define YYSIZE_T size_t
2217 #if ! defined (YYSIZE_T) && (defined (__STDC__) || defined (__cplusplus))
2218 # include <stddef.h> /* INFRINGES ON USER NAME SPACE */
2219 # define YYSIZE_T size_t
2221 #if ! defined (YYSIZE_T)
2222 # define YYSIZE_T unsigned int
2228 # include <libintl.h> /* INFRINGES ON USER NAME SPACE */
2229 # define YY_(msgid) dgettext ("bison-runtime", msgid)
2233 # define YY_(msgid) msgid
2237 #if ! defined (yyoverflow) || YYERROR_VERBOSE
2239 /* The parser invokes alloca or malloc; define the necessary symbols. */
2241 # ifdef YYSTACK_USE_ALLOCA
2242 # if YYSTACK_USE_ALLOCA
2244 # define YYSTACK_ALLOC __builtin_alloca
2246 # define YYSTACK_ALLOC alloca
2247 # if defined (__STDC__) || defined (__cplusplus)
2248 # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
2249 # define YYINCLUDED_STDLIB_H
2255 # ifdef YYSTACK_ALLOC
2256 /* Pacify GCC's `empty if-body' warning. */
2257 # define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
2258 # ifndef YYSTACK_ALLOC_MAXIMUM
2259 /* The OS might guarantee only one guard page at the bottom of the stack,
2260 and a page size can be as small as 4096 bytes. So we cannot safely
2261 invoke alloca (N) if N exceeds 4096. Use a slightly smaller number
2262 to allow for a few compiler-allocated temporary stack slots. */
2263 # define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2005 */
2266 # define YYSTACK_ALLOC YYMALLOC
2267 # define YYSTACK_FREE YYFREE
2268 # ifndef YYSTACK_ALLOC_MAXIMUM
2269 # define YYSTACK_ALLOC_MAXIMUM ((YYSIZE_T) -1)
2275 # define YYMALLOC malloc
2276 # if (! defined (malloc) && ! defined (YYINCLUDED_STDLIB_H) \
2277 && (defined (__STDC__) || defined (__cplusplus)))
2278 void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
2282 # define YYFREE free
2283 # if (! defined (free) && ! defined (YYINCLUDED_STDLIB_H) \
2284 && (defined (__STDC__) || defined (__cplusplus)))
2285 void free (void *); /* INFRINGES ON USER NAME SPACE */
2292 #endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */
2295 #if (! defined (yyoverflow) \
2296 && (! defined (__cplusplus) \
2297 || (defined (YYSTYPE_IS_TRIVIAL) && YYSTYPE_IS_TRIVIAL)))
2299 /* A type that is properly aligned for any stack member. */
2306 /* The size of the maximum gap between one aligned stack and the next. */
2307 # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
2309 /* The size of an array large to enough to hold all stacks, each with
2311 # define YYSTACK_BYTES(N) \
2312 ((N) * (sizeof (short int) + sizeof (YYSTYPE)) \
2313 + YYSTACK_GAP_MAXIMUM)
2315 /* Copy COUNT objects from FROM to TO. The source and destination do
2318 # if defined (__GNUC__) && 1 < __GNUC__
2319 # define YYCOPY(To, From, Count) \
2320 __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
2322 # define YYCOPY(To, From, Count) \
2326 for (yyi = 0; yyi < (Count); yyi++) \
2327 (To)[yyi] = (From)[yyi]; \
2333 /* Relocate STACK from its old location to the new one. The
2334 local variables YYSIZE and YYSTACKSIZE give the old and new number of
2335 elements in the stack, and YYPTR gives the new location of the
2336 stack. Advance YYPTR to a properly aligned location for the next
2338 # define YYSTACK_RELOCATE(Stack) \
2341 YYSIZE_T yynewbytes; \
2342 YYCOPY (&yyptr->Stack, Stack, yysize); \
2343 Stack = &yyptr->Stack; \
2344 yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
2345 yyptr += yynewbytes / sizeof (*yyptr); \
2351 #if defined (__STDC__) || defined (__cplusplus)
2352 typedef signed char yysigned_char;
2354 typedef short int yysigned_char;
2357 /* YYFINAL -- State number of the termination state. */
2359 /* YYLAST -- Last index in YYTABLE. */
2362 /* YYNTOKENS -- Number of terminals. */
2363 #define YYNTOKENS 166
2364 /* YYNNTS -- Number of nonterminals. */
2366 /* YYNRULES -- Number of rules. */
2367 #define YYNRULES 310
2368 /* YYNRULES -- Number of states. */
2369 #define YYNSTATES 606
2371 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
2372 #define YYUNDEFTOK 2
2373 #define YYMAXUTOK 406
2375 #define YYTRANSLATE(YYX) \
2376 ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
2378 /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
2379 static const unsigned char yytranslate[] =
2381 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2382 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2383 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2384 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2385 155, 156, 164, 2, 153, 2, 2, 2, 2, 2,
2386 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2387 160, 152, 161, 2, 2, 2, 2, 2, 2, 2,
2388 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2389 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2390 2, 157, 154, 159, 2, 2, 2, 2, 2, 165,
2391 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2392 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2393 158, 2, 2, 162, 2, 163, 2, 2, 2, 2,
2394 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2395 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2396 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2397 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2398 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2399 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2400 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2401 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2402 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2403 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2404 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2405 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2406 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
2407 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
2408 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
2409 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
2410 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
2411 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
2412 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
2413 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
2414 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
2415 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
2416 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
2417 105, 106, 107, 108, 109, 110, 111, 112, 113, 114,
2418 115, 116, 117, 118, 119, 120, 121, 122, 123, 124,
2419 125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
2420 135, 136, 137, 138, 139, 140, 141, 142, 143, 144,
2421 145, 146, 147, 148, 149, 150, 151
2425 /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
2427 static const unsigned short int yyprhs[] =
2429 0, 0, 3, 5, 7, 9, 11, 13, 15, 17,
2430 19, 21, 23, 25, 27, 29, 31, 33, 35, 37,
2431 39, 41, 43, 45, 47, 49, 51, 53, 55, 57,
2432 59, 61, 63, 65, 67, 69, 71, 73, 75, 77,
2433 79, 81, 83, 85, 87, 89, 91, 93, 95, 97,
2434 99, 101, 103, 105, 107, 109, 111, 113, 115, 117,
2435 119, 121, 123, 125, 127, 129, 131, 133, 135, 137,
2436 139, 141, 143, 145, 147, 149, 151, 153, 155, 157,
2437 159, 161, 164, 165, 167, 169, 171, 173, 175, 177,
2438 179, 180, 181, 183, 185, 187, 189, 191, 193, 196,
2439 197, 200, 201, 205, 208, 209, 211, 212, 216, 218,
2440 221, 223, 225, 227, 229, 231, 233, 235, 237, 239,
2441 241, 243, 245, 247, 249, 251, 253, 255, 257, 259,
2442 261, 264, 269, 275, 281, 285, 288, 294, 299, 302,
2443 304, 308, 310, 314, 316, 317, 322, 326, 330, 335,
2444 340, 344, 351, 357, 360, 363, 366, 369, 372, 375,
2445 378, 381, 384, 387, 394, 400, 409, 416, 423, 430,
2446 438, 446, 453, 460, 469, 478, 482, 484, 486, 488,
2447 490, 493, 496, 501, 504, 506, 511, 514, 519, 520,
2448 528, 529, 537, 538, 546, 547, 555, 559, 564, 565,
2449 567, 569, 571, 575, 579, 583, 587, 591, 595, 597,
2450 598, 600, 602, 604, 605, 608, 612, 614, 616, 620,
2451 622, 623, 632, 634, 636, 637, 642, 644, 646, 649,
2452 650, 652, 654, 655, 656, 662, 663, 665, 667, 669,
2453 671, 673, 675, 677, 679, 681, 685, 687, 693, 695,
2454 697, 699, 701, 704, 707, 710, 714, 717, 718, 720,
2455 722, 724, 727, 730, 734, 744, 754, 763, 777, 779,
2456 781, 788, 794, 797, 804, 812, 814, 818, 820, 821,
2457 824, 826, 832, 838, 844, 851, 858, 861, 866, 871,
2458 878, 883, 888, 893, 898, 905, 912, 915, 923, 925,
2459 928, 929, 931, 932, 936, 943, 947, 954, 957, 962,
2463 /* YYRHS -- A `-1'-separated list of the rules' RHS. */
2464 static const short int yyrhs[] =
2466 200, 0, -1, 5, -1, 6, -1, 3, -1, 4,
2467 -1, 79, -1, 80, -1, 81, -1, 82, -1, 83,
2468 -1, 84, -1, 85, -1, 86, -1, 87, -1, 88,
2469 -1, 89, -1, 90, -1, 91, -1, 92, -1, 97,
2470 -1, 98, -1, 99, -1, 100, -1, 101, -1, 102,
2471 -1, 119, -1, 120, -1, 121, -1, 122, -1, 123,
2472 -1, 124, -1, 125, -1, 126, -1, 127, -1, 128,
2473 -1, 129, -1, 130, -1, 131, -1, 132, -1, 133,
2474 -1, 134, -1, 135, -1, 136, -1, 137, -1, 138,
2475 -1, 125, -1, 126, -1, 127, -1, 128, -1, 27,
2476 -1, 28, -1, 93, -1, 94, -1, 95, -1, 96,
2477 -1, 140, -1, 141, -1, 142, -1, 143, -1, 144,
2478 -1, 145, -1, 146, -1, 147, -1, 148, -1, 149,
2479 -1, 150, -1, 151, -1, 139, -1, 16, -1, 14,
2480 -1, 12, -1, 10, -1, 17, -1, 15, -1, 13,
2481 -1, 11, -1, 176, -1, 177, -1, 18, -1, 19,
2482 -1, 212, 152, -1, -1, 41, -1, 42, -1, 43,
2483 -1, 44, -1, 45, -1, 46, -1, 47, -1, -1,
2484 -1, 65, -1, 66, -1, 67, -1, 68, -1, 69,
2485 -1, 70, -1, 64, 4, -1, -1, 57, 4, -1,
2486 -1, 153, 57, 4, -1, 34, 24, -1, -1, 185,
2487 -1, -1, 153, 188, 187, -1, 185, -1, 57, 4,
2488 -1, 191, -1, 8, -1, 193, -1, 8, -1, 193,
2489 -1, 9, -1, 10, -1, 11, -1, 12, -1, 13,
2490 -1, 14, -1, 15, -1, 16, -1, 17, -1, 18,
2491 -1, 19, -1, 21, -1, 192, -1, 48, -1, 229,
2492 -1, 154, 4, -1, 190, 155, 195, 156, -1, 157,
2493 4, 158, 193, 159, -1, 160, 4, 158, 193, 161,
2494 -1, 162, 194, 163, -1, 162, 163, -1, 160, 162,
2495 194, 163, 161, -1, 160, 162, 163, 161, -1, 193,
2496 164, -1, 193, -1, 194, 153, 193, -1, 194, -1,
2497 194, 153, 37, -1, 37, -1, -1, 191, 157, 198,
2498 159, -1, 191, 157, 159, -1, 191, 165, 24, -1,
2499 191, 160, 198, 161, -1, 191, 162, 198, 163, -1,
2500 191, 162, 163, -1, 191, 160, 162, 198, 163, 161,
2501 -1, 191, 160, 162, 163, 161, -1, 191, 38, -1,
2502 191, 39, -1, 191, 229, -1, 191, 197, -1, 191,
2503 26, -1, 176, 168, -1, 177, 4, -1, 9, 27,
2504 -1, 9, 28, -1, 179, 7, -1, 175, 155, 196,
2505 36, 191, 156, -1, 110, 155, 196, 244, 156, -1,
2506 112, 155, 196, 153, 196, 153, 196, 156, -1, 169,
2507 155, 196, 153, 196, 156, -1, 170, 155, 196, 153,
2508 196, 156, -1, 171, 155, 196, 153, 196, 156, -1,
2509 103, 172, 155, 196, 153, 196, 156, -1, 104, 173,
2510 155, 196, 153, 196, 156, -1, 174, 155, 196, 153,
2511 196, 156, -1, 114, 155, 196, 153, 196, 156, -1,
2512 115, 155, 196, 153, 196, 153, 196, 156, -1, 116,
2513 155, 196, 153, 196, 153, 196, 156, -1, 198, 153,
2514 196, -1, 196, -1, 32, -1, 33, -1, 201, -1,
2515 201, 222, -1, 201, 224, -1, 201, 62, 61, 207,
2516 -1, 201, 25, -1, 202, -1, 202, 180, 20, 189,
2517 -1, 202, 224, -1, 202, 62, 61, 207, -1, -1,
2518 202, 180, 181, 199, 196, 203, 187, -1, -1, 202,
2519 180, 50, 199, 191, 204, 187, -1, -1, 202, 180,
2520 45, 199, 191, 205, 187, -1, -1, 202, 180, 47,
2521 199, 191, 206, 187, -1, 202, 51, 209, -1, 202,
2522 58, 152, 210, -1, -1, 24, -1, 56, -1, 55,
2523 -1, 53, 152, 208, -1, 54, 152, 4, -1, 52,
2524 152, 24, -1, 71, 152, 24, -1, 157, 211, 159,
2525 -1, 211, 153, 24, -1, 24, -1, -1, 22, -1,
2526 24, -1, 212, -1, -1, 191, 213, -1, 215, 153,
2527 214, -1, 214, -1, 215, -1, 215, 153, 37, -1,
2528 37, -1, -1, 182, 189, 212, 155, 216, 156, 186,
2529 183, -1, 29, -1, 162, -1, -1, 181, 220, 217,
2530 218, -1, 30, -1, 163, -1, 232, 221, -1, -1,
2531 45, -1, 47, -1, -1, -1, 31, 225, 223, 226,
2532 217, -1, -1, 63, -1, 3, -1, 4, -1, 7,
2533 -1, 27, -1, 28, -1, 38, -1, 39, -1, 26,
2534 -1, 160, 198, 161, -1, 197, -1, 61, 227, 24,
2535 153, 24, -1, 167, -1, 212, -1, 229, -1, 228,
2536 -1, 191, 230, -1, 232, 233, -1, 219, 233, -1,
2537 234, 180, 236, -1, 234, 238, -1, -1, 23, -1,
2538 77, -1, 78, -1, 72, 231, -1, 72, 8, -1,
2539 73, 21, 230, -1, 73, 9, 230, 153, 21, 230,
2540 153, 21, 230, -1, 74, 178, 230, 153, 21, 230,
2541 157, 237, 159, -1, 74, 178, 230, 153, 21, 230,
2542 157, 159, -1, 75, 182, 189, 230, 155, 241, 156,
2543 36, 21, 230, 235, 21, 230, -1, 235, -1, 76,
2544 -1, 237, 178, 228, 153, 21, 230, -1, 178, 228,
2545 153, 21, 230, -1, 180, 243, -1, 191, 157, 230,
2546 153, 230, 159, -1, 239, 153, 157, 230, 153, 230,
2547 159, -1, 231, -1, 240, 153, 231, -1, 240, -1,
2548 -1, 60, 59, -1, 59, -1, 169, 191, 230, 153,
2549 230, -1, 170, 191, 230, 153, 230, -1, 171, 191,
2550 230, 153, 230, -1, 103, 172, 191, 230, 153, 230,
2551 -1, 104, 173, 191, 230, 153, 230, -1, 49, 231,
2552 -1, 174, 231, 153, 231, -1, 175, 231, 36, 191,
2553 -1, 112, 231, 153, 231, 153, 231, -1, 113, 231,
2554 153, 191, -1, 117, 231, 153, 191, -1, 118, 231,
2555 153, 191, -1, 114, 231, 153, 231, -1, 115, 231,
2556 153, 231, 153, 231, -1, 116, 231, 153, 231, 153,
2557 231, -1, 111, 239, -1, 242, 182, 189, 230, 155,
2558 241, 156, -1, 246, -1, 153, 240, -1, -1, 35,
2559 -1, -1, 105, 191, 184, -1, 105, 191, 153, 15,
2560 230, 184, -1, 106, 191, 184, -1, 106, 191, 153,
2561 15, 230, 184, -1, 107, 231, -1, 245, 108, 191,
2562 230, -1, 245, 109, 231, 153, 191, 230, -1, 110,
2566 /* YYRLINE[YYN] -- source line where rule number YYN was defined. */
2567 static const unsigned short int yyrline[] =
2569 0, 1915, 1915, 1916, 1924, 1925, 1935, 1935, 1935, 1935,
2570 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1939, 1939, 1939,
2571 1943, 1943, 1943, 1943, 1943, 1943, 1947, 1947, 1948, 1948,
2572 1949, 1949, 1950, 1950, 1951, 1951, 1955, 1955, 1956, 1956,
2573 1957, 1957, 1958, 1958, 1959, 1959, 1960, 1960, 1961, 1961,
2574 1962, 1963, 1966, 1966, 1966, 1966, 1970, 1970, 1970, 1970,
2575 1970, 1970, 1970, 1971, 1971, 1971, 1971, 1971, 1971, 1977,
2576 1977, 1977, 1977, 1981, 1981, 1981, 1981, 1985, 1985, 1989,
2577 1989, 1994, 1997, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
2578 2009, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2030,
2579 2031, 2039, 2040, 2048, 2057, 2058, 2065, 2066, 2070, 2074,
2580 2090, 2091, 2098, 2099, 2106, 2114, 2114, 2114, 2114, 2114,
2581 2114, 2114, 2115, 2115, 2115, 2115, 2115, 2120, 2124, 2128,
2582 2133, 2142, 2169, 2175, 2188, 2199, 2203, 2216, 2220, 2234,
2583 2238, 2245, 2246, 2252, 2259, 2271, 2301, 2314, 2337, 2365,
2584 2387, 2398, 2420, 2431, 2440, 2445, 2504, 2511, 2519, 2526,
2585 2533, 2537, 2541, 2550, 2565, 2577, 2586, 2614, 2627, 2636,
2586 2642, 2648, 2659, 2665, 2671, 2682, 2683, 2692, 2693, 2705,
2587 2714, 2715, 2716, 2717, 2718, 2734, 2754, 2756, 2758, 2758,
2588 2765, 2765, 2773, 2773, 2781, 2781, 2790, 2792, 2794, 2799,
2589 2813, 2814, 2818, 2821, 2829, 2833, 2840, 2844, 2848, 2852,
2590 2860, 2860, 2864, 2865, 2869, 2877, 2882, 2890, 2891, 2898,
2591 2905, 2909, 3099, 3099, 3103, 3103, 3113, 3113, 3117, 3122,
2592 3123, 3124, 3128, 3129, 3128, 3141, 3142, 3147, 3148, 3149,
2593 3150, 3154, 3158, 3159, 3160, 3161, 3182, 3186, 3200, 3201,
2594 3206, 3206, 3214, 3224, 3227, 3236, 3247, 3252, 3261, 3272,
2595 3272, 3275, 3279, 3283, 3288, 3298, 3316, 3325, 3398, 3402,
2596 3409, 3421, 3436, 3466, 3476, 3486, 3490, 3497, 3498, 3502,
2597 3505, 3511, 3530, 3548, 3564, 3578, 3592, 3603, 3621, 3630,
2598 3639, 3646, 3667, 3691, 3697, 3703, 3709, 3725, 3818, 3826,
2599 3827, 3831, 3832, 3836, 3842, 3849, 3855, 3862, 3869, 3882,
2604 #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
2605 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
2606 First, the terminals, then, starting at YYNTOKENS, nonterminals. */
2607 static const char *const yytname[] =
2609 "$end", "error", "$undefined", "ESINT64VAL", "EUINT64VAL", "SINTVAL",
2610 "UINTVAL", "FPVAL", "VOID", "BOOL", "SBYTE", "UBYTE", "SHORT", "USHORT",
2611 "INT", "UINT", "LONG", "ULONG", "FLOAT", "DOUBLE", "TYPE", "LABEL",
2612 "VAR_ID", "LABELSTR", "STRINGCONSTANT", "IMPLEMENTATION",
2613 "ZEROINITIALIZER", "TRUETOK", "FALSETOK", "BEGINTOK", "ENDTOK",
2614 "DECLARE", "GLOBAL", "CONSTANT", "SECTION", "VOLATILE", "TO",
2615 "DOTDOTDOT", "NULL_TOK", "UNDEF", "CONST", "INTERNAL", "LINKONCE",
2616 "WEAK", "APPENDING", "DLLIMPORT", "DLLEXPORT", "EXTERN_WEAK", "OPAQUE",
2617 "NOT", "EXTERNAL", "TARGET", "TRIPLE", "ENDIAN", "POINTERSIZE", "LITTLE",
2618 "BIG", "ALIGN", "DEPLIBS", "CALL", "TAIL", "ASM_TOK", "MODULE",
2619 "SIDEEFFECT", "CC_TOK", "CCC_TOK", "CSRETCC_TOK", "FASTCC_TOK",
2620 "COLDCC_TOK", "X86_STDCALLCC_TOK", "X86_FASTCALLCC_TOK", "DATALAYOUT",
2621 "RET", "BR", "SWITCH", "INVOKE", "UNREACHABLE", "UNWIND", "EXCEPT",
2622 "ADD", "SUB", "MUL", "DIV", "UDIV", "SDIV", "FDIV", "REM", "UREM",
2623 "SREM", "FREM", "AND", "OR", "XOR", "SHL", "SHR", "ASHR", "LSHR",
2624 "SETLE", "SETGE", "SETLT", "SETGT", "SETEQ", "SETNE", "ICMP", "FCMP",
2625 "MALLOC", "ALLOCA", "FREE", "LOAD", "STORE", "GETELEMENTPTR", "PHI_TOK",
2626 "SELECT", "VAARG", "EXTRACTELEMENT", "INSERTELEMENT", "SHUFFLEVECTOR",
2627 "VAARG_old", "VANEXT_old", "EQ", "NE", "SLT", "SGT", "SLE", "SGE", "ULT",
2628 "UGT", "ULE", "UGE", "OEQ", "ONE", "OLT", "OGT", "OLE", "OGE", "ORD",
2629 "UNO", "UEQ", "UNE", "CAST", "TRUNC", "ZEXT", "SEXT", "FPTRUNC", "FPEXT",
2630 "FPTOUI", "FPTOSI", "UITOFP", "SITOFP", "PTRTOINT", "INTTOPTR",
2631 "BITCAST", "'='", "','", "'\\\\'", "'('", "')'", "'['", "'x'", "']'",
2632 "'<'", "'>'", "'{'", "'}'", "'*'", "'c'", "$accept", "INTVAL",
2633 "EINT64VAL", "ArithmeticOps", "LogicalOps", "SetCondOps", "IPredicates",
2634 "FPredicates", "ShiftOps", "CastOps", "SIntType", "UIntType", "IntType",
2635 "FPType", "OptAssign", "OptLinkage", "OptCallingConv", "OptAlign",
2636 "OptCAlign", "SectionString", "OptSection", "GlobalVarAttributes",
2637 "GlobalVarAttribute", "TypesV", "UpRTypesV", "Types", "PrimType",
2638 "UpRTypes", "TypeListI", "ArgTypeListI", "ConstVal", "ConstExpr",
2639 "ConstVector", "GlobalType", "Module", "FunctionList", "ConstPool", "@1",
2640 "@2", "@3", "@4", "AsmBlock", "BigOrLittle", "TargetDefinition",
2641 "LibrariesDefinition", "LibList", "Name", "OptName", "ArgVal",
2642 "ArgListH", "ArgList", "FunctionHeaderH", "BEGIN", "FunctionHeader",
2643 "@5", "END", "Function", "FnDeclareLinkage", "FunctionProto", "@6", "@7",
2644 "OptSideEffect", "ConstValueRef", "SymbolicValueRef", "ValueRef",
2645 "ResolvedVal", "BasicBlockList", "BasicBlock", "InstructionList",
2646 "Unwind", "BBTerminatorInst", "JumpTable", "Inst", "PHIList",
2647 "ValueRefList", "ValueRefListE", "OptTailCall", "InstVal", "IndexList",
2648 "OptVolatile", "MemoryInst", 0
2653 /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
2655 static const unsigned short int yytoknum[] =
2657 0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
2658 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
2659 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
2660 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
2661 295, 296, 297, 298, 299, 300, 301, 302, 303, 304,
2662 305, 306, 307, 308, 309, 310, 311, 312, 313, 314,
2663 315, 316, 317, 318, 319, 320, 321, 322, 323, 324,
2664 325, 326, 327, 328, 329, 330, 331, 332, 333, 334,
2665 335, 336, 337, 338, 339, 340, 341, 342, 343, 344,
2666 345, 346, 347, 348, 349, 350, 351, 352, 353, 354,
2667 355, 356, 357, 358, 359, 360, 361, 362, 363, 364,
2668 365, 366, 367, 368, 369, 370, 371, 372, 373, 374,
2669 375, 376, 377, 378, 379, 380, 381, 382, 383, 384,
2670 385, 386, 387, 388, 389, 390, 391, 392, 393, 394,
2671 395, 396, 397, 398, 399, 400, 401, 402, 403, 404,
2672 405, 406, 61, 44, 92, 40, 41, 91, 120, 93,
2673 60, 62, 123, 125, 42, 99
2677 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
2678 static const unsigned char yyr1[] =
2680 0, 166, 167, 167, 168, 168, 169, 169, 169, 169,
2681 169, 169, 169, 169, 169, 169, 169, 170, 170, 170,
2682 171, 171, 171, 171, 171, 171, 172, 172, 172, 172,
2683 172, 172, 172, 172, 172, 172, 173, 173, 173, 173,
2684 173, 173, 173, 173, 173, 173, 173, 173, 173, 173,
2685 173, 173, 174, 174, 174, 174, 175, 175, 175, 175,
2686 175, 175, 175, 175, 175, 175, 175, 175, 175, 176,
2687 176, 176, 176, 177, 177, 177, 177, 178, 178, 179,
2688 179, 180, 180, 181, 181, 181, 181, 181, 181, 181,
2689 181, 182, 182, 182, 182, 182, 182, 182, 182, 183,
2690 183, 184, 184, 185, 186, 186, 187, 187, 188, 188,
2691 189, 189, 190, 190, 191, 192, 192, 192, 192, 192,
2692 192, 192, 192, 192, 192, 192, 192, 193, 193, 193,
2693 193, 193, 193, 193, 193, 193, 193, 193, 193, 194,
2694 194, 195, 195, 195, 195, 196, 196, 196, 196, 196,
2695 196, 196, 196, 196, 196, 196, 196, 196, 196, 196,
2696 196, 196, 196, 197, 197, 197, 197, 197, 197, 197,
2697 197, 197, 197, 197, 197, 198, 198, 199, 199, 200,
2698 201, 201, 201, 201, 201, 202, 202, 202, 203, 202,
2699 204, 202, 205, 202, 206, 202, 202, 202, 202, 207,
2700 208, 208, 209, 209, 209, 209, 210, 211, 211, 211,
2701 212, 212, 213, 213, 214, 215, 215, 216, 216, 216,
2702 216, 217, 218, 218, 220, 219, 221, 221, 222, 223,
2703 223, 223, 225, 226, 224, 227, 227, 228, 228, 228,
2704 228, 228, 228, 228, 228, 228, 228, 228, 229, 229,
2705 230, 230, 231, 232, 232, 233, 234, 234, 234, 235,
2706 235, 236, 236, 236, 236, 236, 236, 236, 236, 236,
2707 237, 237, 238, 239, 239, 240, 240, 241, 241, 242,
2708 242, 243, 243, 243, 243, 243, 243, 243, 243, 243,
2709 243, 243, 243, 243, 243, 243, 243, 243, 243, 244,
2710 244, 245, 245, 246, 246, 246, 246, 246, 246, 246,
2714 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
2715 static const unsigned char yyr2[] =
2717 0, 2, 1, 1, 1, 1, 1, 1, 1, 1,
2718 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2719 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2720 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2721 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2722 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2723 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2724 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2725 1, 2, 0, 1, 1, 1, 1, 1, 1, 1,
2726 0, 0, 1, 1, 1, 1, 1, 1, 2, 0,
2727 2, 0, 3, 2, 0, 1, 0, 3, 1, 2,
2728 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2729 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2730 2, 4, 5, 5, 3, 2, 5, 4, 2, 1,
2731 3, 1, 3, 1, 0, 4, 3, 3, 4, 4,
2732 3, 6, 5, 2, 2, 2, 2, 2, 2, 2,
2733 2, 2, 2, 6, 5, 8, 6, 6, 6, 7,
2734 7, 6, 6, 8, 8, 3, 1, 1, 1, 1,
2735 2, 2, 4, 2, 1, 4, 2, 4, 0, 7,
2736 0, 7, 0, 7, 0, 7, 3, 4, 0, 1,
2737 1, 1, 3, 3, 3, 3, 3, 3, 1, 0,
2738 1, 1, 1, 0, 2, 3, 1, 1, 3, 1,
2739 0, 8, 1, 1, 0, 4, 1, 1, 2, 0,
2740 1, 1, 0, 0, 5, 0, 1, 1, 1, 1,
2741 1, 1, 1, 1, 1, 3, 1, 5, 1, 1,
2742 1, 1, 2, 2, 2, 3, 2, 0, 1, 1,
2743 1, 2, 2, 3, 9, 9, 8, 13, 1, 1,
2744 6, 5, 2, 6, 7, 1, 3, 1, 0, 2,
2745 1, 5, 5, 5, 6, 6, 2, 4, 4, 6,
2746 4, 4, 4, 4, 6, 6, 2, 7, 1, 2,
2747 0, 1, 0, 3, 6, 3, 6, 2, 4, 6,
2751 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
2752 STATE-NUM when YYTABLE doesn't specify something else to do. Zero
2753 means the default is an error. */
2754 static const unsigned short int yydefact[] =
2756 198, 0, 90, 184, 1, 183, 232, 83, 84, 85,
2757 86, 87, 88, 89, 0, 224, 257, 180, 181, 257,
2758 210, 211, 0, 0, 0, 90, 0, 186, 229, 0,
2759 91, 258, 254, 82, 226, 227, 228, 253, 0, 0,
2760 0, 0, 196, 0, 0, 0, 0, 0, 0, 0,
2761 81, 230, 231, 233, 199, 182, 0, 92, 93, 94,
2762 95, 96, 97, 0, 0, 302, 256, 0, 0, 0,
2763 0, 209, 197, 187, 2, 3, 111, 115, 116, 117,
2764 118, 119, 120, 121, 122, 123, 124, 125, 126, 128,
2765 0, 0, 0, 0, 248, 185, 0, 110, 127, 114,
2766 249, 129, 177, 178, 0, 0, 0, 0, 91, 98,
2767 0, 222, 223, 225, 301, 0, 280, 0, 0, 0,
2768 0, 91, 269, 259, 260, 6, 7, 8, 9, 10,
2769 11, 12, 13, 14, 15, 16, 17, 18, 19, 52,
2770 53, 54, 55, 20, 21, 22, 23, 24, 25, 0,
2771 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2772 0, 0, 0, 68, 56, 57, 58, 59, 60, 61,
2773 62, 63, 64, 65, 66, 67, 0, 0, 0, 0,
2774 0, 268, 255, 91, 272, 0, 298, 204, 201, 200,
2775 202, 203, 205, 208, 0, 130, 0, 0, 0, 113,
2776 135, 139, 0, 144, 138, 192, 194, 190, 115, 116,
2777 117, 118, 119, 120, 121, 122, 123, 124, 125, 0,
2778 0, 0, 0, 188, 234, 0, 0, 286, 279, 262,
2779 261, 0, 0, 72, 76, 71, 75, 70, 74, 69,
2780 73, 77, 78, 0, 0, 26, 27, 28, 29, 30,
2781 31, 32, 33, 34, 35, 0, 50, 51, 46, 47,
2782 48, 49, 36, 37, 38, 39, 40, 41, 42, 43,
2783 44, 45, 0, 101, 101, 307, 0, 0, 296, 0,
2784 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2785 0, 0, 0, 0, 0, 206, 0, 0, 0, 0,
2786 0, 134, 143, 141, 0, 106, 106, 106, 160, 161,
2787 4, 5, 158, 159, 162, 157, 153, 154, 0, 0,
2788 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2789 0, 0, 0, 0, 156, 155, 106, 220, 237, 238,
2790 239, 244, 240, 241, 242, 243, 235, 0, 246, 251,
2791 250, 252, 0, 263, 0, 0, 0, 0, 0, 303,
2792 0, 305, 300, 0, 0, 0, 0, 0, 0, 0,
2793 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2794 207, 112, 112, 137, 0, 140, 0, 131, 0, 193,
2795 195, 191, 0, 0, 0, 0, 0, 0, 0, 146,
2796 176, 0, 0, 0, 150, 0, 147, 0, 0, 0,
2797 0, 0, 189, 219, 213, 216, 217, 0, 236, 0,
2798 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2799 310, 0, 0, 0, 290, 293, 0, 0, 291, 292,
2800 0, 0, 0, 287, 288, 0, 308, 0, 132, 133,
2801 136, 142, 0, 0, 108, 106, 0, 0, 300, 0,
2802 0, 0, 0, 0, 145, 135, 114, 0, 148, 149,
2803 0, 0, 0, 0, 0, 212, 214, 0, 104, 0,
2804 245, 0, 0, 278, 0, 0, 101, 102, 101, 275,
2805 299, 0, 0, 0, 0, 0, 281, 282, 283, 278,
2806 0, 103, 109, 107, 0, 0, 0, 0, 0, 0,
2807 0, 175, 152, 0, 0, 0, 0, 0, 0, 218,
2808 215, 105, 99, 0, 0, 0, 277, 0, 284, 285,
2809 0, 304, 306, 0, 0, 0, 289, 294, 295, 0,
2810 309, 0, 0, 164, 0, 0, 0, 0, 151, 0,
2811 0, 0, 0, 0, 0, 221, 247, 0, 0, 0,
2812 276, 273, 0, 297, 0, 0, 0, 172, 0, 0,
2813 166, 167, 168, 171, 163, 100, 0, 266, 0, 0,
2814 0, 274, 169, 170, 0, 0, 0, 264, 0, 265,
2815 0, 0, 165, 173, 174, 0, 0, 0, 0, 0,
2816 0, 271, 0, 0, 270, 267
2819 /* YYDEFGOTO[NTERM-NUM]. */
2820 static const short int yydefgoto[] =
2822 -1, 94, 312, 329, 330, 331, 255, 272, 332, 333,
2823 219, 220, 243, 221, 25, 15, 63, 555, 359, 454,
2824 522, 389, 455, 95, 96, 222, 98, 99, 202, 304,
2825 400, 348, 401, 104, 1, 2, 3, 336, 307, 305,
2826 306, 55, 190, 42, 72, 194, 100, 476, 415, 416,
2827 417, 64, 113, 16, 30, 36, 17, 53, 18, 28,
2828 108, 419, 349, 101, 351, 489, 19, 32, 33, 181,
2829 182, 579, 66, 278, 526, 527, 183, 184, 430, 185,
2833 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
2835 #define YYPACT_NINF -542
2836 static const short int yypact[] =
2838 -542, 13, 162, 567, -542, -542, -542, -542, -542, -542,
2839 -542, -542, -542, -542, 83, -542, 19, -542, -542, -14,
2840 -542, -542, 50, -87, 87, 233, 27, -542, 123, 141,
2841 175, -542, -542, 98, -542, -542, -542, -542, 33, 40,
2842 66, 68, -542, 14, 141, 1265, 156, 156, 156, 156,
2843 -542, -542, -542, -542, -542, -542, 221, -542, -542, -542,
2844 -542, -542, -542, 1265, -19, 1479, -542, 204, 135, 226,
2845 227, 235, -542, -542, -542, -542, 81, -542, -542, -542,
2846 -542, -542, -542, -542, -542, -542, -542, -542, -542, -542,
2847 256, 257, 4, 15, -542, -542, 108, -542, -542, 12,
2848 -542, -542, -542, -542, 1306, 1306, 1306, 1326, 175, -542,
2849 98, -542, -542, -542, -542, 1306, -542, 205, 1367, 116,
2850 479, 175, -542, -542, -542, -542, -542, -542, -542, -542,
2851 -542, -542, -542, -542, -542, -542, -542, -542, -542, -542,
2852 -542, -542, -542, -542, -542, -542, -542, -542, -542, 355,
2853 429, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306,
2854 1306, 1306, 1306, -542, -542, -542, -542, -542, -542, -542,
2855 -542, -542, -542, -542, -542, -542, 1306, 1306, 1306, 1306,
2856 1306, -542, -542, 175, -542, 86, -542, -542, -542, -542,
2857 -542, -542, -542, -542, -13, -542, 110, 111, 75, -542,
2858 -542, 12, -81, 1046, -542, -542, -542, -542, 174, 208,
2859 266, 210, 267, 212, 268, 230, 277, 275, 278, 246,
2860 280, 279, 566, -542, -542, 136, 766, -542, -542, 81,
2861 -542, 766, 766, -542, -542, -542, -542, -542, -542, -542,
2862 -542, -542, -542, 766, 1265, -542, -542, -542, -542, -542,
2863 -542, -542, -542, -542, -542, 1306, -542, -542, -542, -542,
2864 -542, -542, -542, -542, -542, -542, -542, -542, -542, -542,
2865 -542, -542, 1306, 137, 145, -542, 766, 132, 146, 147,
2866 148, 149, 151, 152, 158, 160, 766, 766, 766, 161,
2867 281, 1265, 1306, 1306, 291, -542, 1306, 1306, 155, -27,
2868 1306, -542, -542, 165, 163, 176, 176, 176, -542, -542,
2869 -542, -542, -542, -542, -542, -542, -542, -542, 355, 429,
2870 172, 177, 178, 179, 182, 1087, 1387, 529, 311, 184,
2871 185, 186, 188, 189, -542, -542, 176, 1107, -542, -542,
2872 -542, -542, -542, -542, -542, -542, 282, 1326, -542, -542,
2873 -542, -542, 193, -542, 194, 766, 766, 766, 7, -542,
2874 20, -542, 195, 766, 192, 1306, 1306, 1306, 1306, 1306,
2875 1306, 1306, 200, 201, 206, 1306, 1306, 766, 766, 207,
2876 -542, -59, -149, -542, 196, 12, 1148, -542, 44, -542,
2877 -542, -542, 203, 211, 1326, 1326, 1326, 1326, 1326, -542,
2878 -542, -8, 741, -82, -542, 10, -542, 1326, 1326, 1326,
2879 1326, 1326, -542, -542, 98, -542, 214, 209, -542, 337,
2880 -34, 342, 348, 215, 218, 219, 766, 371, 766, 1306,
2881 -542, 223, 766, 224, -542, -542, 225, 234, -542, -542,
2882 766, 766, 766, -542, -542, 228, -542, 1306, -542, -542,
2883 -542, -542, 362, 375, -542, 176, 1326, 1326, 195, 236,
2884 237, 240, 243, 1326, -542, 238, -25, 11, -542, -542,
2885 244, 245, 247, 250, 352, -542, -542, 1205, 370, 252,
2886 -542, 766, 766, 1306, 766, 766, 258, -542, 258, -542,
2887 259, 766, 264, 1306, 1306, 1306, -542, -542, -542, 1306,
2888 766, -542, -542, -542, 270, 271, 263, 1326, 1326, 1326,
2889 1326, -542, -542, 260, 1326, 1326, 1326, 1326, 1306, -542,
2890 -542, -542, 368, 402, 274, 276, 259, 287, -542, -542,
2891 374, -542, -542, 1306, 285, 766, -542, -542, -542, 290,
2892 -542, 1326, 1326, -542, 283, 295, 284, 294, -542, 296,
2893 297, 299, 302, 303, 430, -542, -542, 414, 41, 425,
2894 -542, -542, 305, -542, 306, 310, 1326, -542, 1326, 1326,
2895 -542, -542, -542, -542, -542, -542, 766, -542, 893, 144,
2896 448, -542, -542, -542, 314, 315, 316, -542, 331, -542,
2897 893, 766, -542, -542, -542, 464, 334, 180, 766, 481,
2898 482, -542, 766, 766, -542, -542
2901 /* YYPGOTO[NTERM-NUM]. */
2902 static const short int yypgoto[] =
2904 -542, -542, -542, 435, 439, 441, 191, 197, 442, 445,
2905 -119, -116, -541, -542, 478, 489, -107, -542, -267, 37,
2906 -542, -238, -542, -60, -542, -45, -542, -74, -51, -542,
2907 -101, 300, -252, 134, -542, -542, -542, -542, -542, -542,
2908 -542, 473, -542, -542, -542, -542, 8, -542, 46, -542,
2909 -542, 410, -542, -542, -542, -542, -542, -542, 518, -542,
2910 -542, -542, -528, 142, -90, -113, -542, 505, -542, -72,
2911 -542, -542, -542, -542, 97, 28, -542, -542, 70, -542,
2915 /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
2916 positive, shift that token. If negative, reduce the rule which
2917 number is the opposite. If zero, do what YYDEFACT says.
2918 If YYTABLE_NINF, syntax error. */
2919 #define YYTABLE_NINF -180
2920 static const short int yytable[] =
2922 97, 241, 227, 110, 242, 230, 223, 361, 197, 31,
2923 111, 26, 449, 4, 244, 204, 34, 578, 97, 201,
2924 74, 75, 426, 199, 77, 78, 79, 80, 81, 82,
2925 83, 84, 85, 86, 87, 428, 88, 20, 590, 21,
2926 275, 26, 31, 279, 280, 281, 282, 283, 284, 285,
2927 588, 233, 234, 235, 236, 237, 238, 239, 240, 205,
2928 206, 207, 596, 89, 427, 43, 289, 290, 390, 391,
2929 226, 463, 300, 226, 403, 405, 291, 427, 452, 468,
2930 74, 75, 301, 199, 77, 78, 79, 80, 81, 82,
2931 83, 84, 85, 86, 87, 420, 88, 20, 412, 21,
2932 448, 453, 38, 39, 40, 204, 273, 274, 226, 276,
2933 277, 226, 226, 226, 226, 226, 226, 226, 225, 463,
2934 20, 41, 21, 89, 201, 231, 300, 480, -139, 201,
2935 -112, 286, 287, 288, 226, 226, 384, 232, -139, 204,
2936 294, 352, 353, 112, 29, 463, 295, 299, 44, 35,
2937 467, 464, 303, 354, 233, 234, 235, 236, 237, 238,
2938 239, 240, -179, 463, 463, 54, 198, -112, 51, 90,
2939 52, 71, 91, 469, 513, 92, 204, 93, 200, 50,
2940 379, 105, 106, 107, 355, 67, 362, 5, 102, 103,
2941 188, 189, 68, 6, 292, 293, 372, 373, 374, 97,
2942 577, 308, 309, 7, 8, 9, 10, 11, 12, 13,
2943 356, -72, -72, -71, -71, -70, -70, 503, 69, 531,
2944 70, 532, 381, 382, 14, 109, 385, 357, 187, 90,
2945 191, 377, 91, -69, -69, 92, -113, 93, 298, 56,
2946 57, 58, 59, 60, 61, 62, 97, 378, 226, 310,
2947 311, 192, 433, 45, 435, 436, 437, 123, 124, 193,
2948 195, 196, 443, 203, 228, 423, 424, 425, 296, 297,
2949 -76, -75, -74, 431, 7, 8, 9, 10, 46, 12,
2950 47, -73, -79, 48, 313, -80, 314, 445, 446, 363,
2951 358, 337, 414, 458, 459, 460, 461, 462, 360, 364,
2952 365, 366, 367, 589, 368, 369, 470, 471, 472, 473,
2953 474, 370, 385, 371, 375, 380, 383, 376, 386, 387,
2954 226, 434, 226, 226, 226, 438, 439, 394, 466, 388,
2955 226, 444, 395, 396, 397, 406, 486, 398, 488, 407,
2956 408, 409, 492, 410, 411, 418, 421, 422, 429, 432,
2957 496, 497, 498, 440, 441, 504, 505, 450, 456, 442,
2958 447, 479, 511, 481, 335, 478, 457, 477, 350, 482,
2959 483, 484, 485, 350, 350, 487, 491, 493, 494, 502,
2960 536, 537, 538, 499, 226, 350, 501, 495, 518, 507,
2961 508, 524, 525, 509, 528, 529, 510, 514, 515, 512,
2962 516, 534, 500, 517, 452, 523, 544, 545, 546, 547,
2963 540, 530, 533, 549, 550, 551, 552, 535, 350, 543,
2964 560, 548, 475, 541, 542, 554, 556, 557, 350, 350,
2965 350, 427, 414, 558, 575, 576, 566, 568, 226, 241,
2966 564, 565, 242, 559, 561, 562, 563, 569, 226, 226,
2967 226, 567, 570, 571, 226, 572, 256, 257, 573, 574,
2968 241, 580, 582, 242, 581, 584, 583, 585, 586, 591,
2969 592, 593, 594, 553, 245, 246, 247, 248, 249, 250,
2970 251, 252, 253, 254, 595, 598, 587, 599, 226, 233,
2971 234, 235, 236, 237, 238, 239, 240, 350, 350, 350,
2972 176, 597, 602, 603, 177, 350, 178, 179, 601, 392,
2973 180, 65, 604, 605, 49, 521, 393, 73, 224, 350,
2974 350, 27, 334, 520, 37, 600, 490, 539, 506, 0,
2975 0, 0, 0, 0, 74, 75, 0, 199, 208, 209,
2976 210, 211, 212, 213, 214, 215, 216, 217, 218, 0,
2977 88, 20, 0, 21, 258, 259, 260, 261, 262, 263,
2978 264, 265, 266, 267, 268, 269, 270, 271, 350, 0,
2979 350, 74, 75, 0, 350, 0, 0, 89, 0, 0,
2980 0, 0, 350, 350, 350, 0, 0, -82, 20, 20,
2981 21, 21, 315, 0, 0, 0, 0, 0, 6, -82,
2982 -82, 0, 0, 0, 316, 317, 0, 0, -82, -82,
2983 -82, -82, -82, -82, -82, 0, 0, -82, 22, 0,
2984 0, 0, 0, 350, 350, 23, 350, 350, 0, 24,
2985 0, 0, 0, 350, 0, 0, 0, 0, 0, 0,
2986 0, 0, 350, 0, 0, 125, 126, 127, 128, 129,
2987 130, 131, 132, 133, 134, 135, 136, 137, 138, 139,
2988 140, 141, 142, 143, 144, 145, 146, 147, 148, 318,
2989 319, 0, 0, 0, 0, 0, 320, 350, 321, 0,
2990 322, 323, 324, 90, 0, 0, 91, 0, 0, 92,
2991 0, 93, 404, 0, 0, 0, 0, 0, 0, 0,
2992 0, 0, 0, 0, 0, 163, 164, 165, 166, 167,
2993 168, 169, 170, 171, 172, 173, 174, 175, 350, 0,
2994 0, 0, 0, 325, 0, 0, 326, 0, 327, 0,
2995 0, 328, 0, 350, 0, 0, 0, 0, 0, 0,
2996 350, 0, 0, 0, 350, 350, 74, 75, 0, 199,
2997 208, 209, 210, 211, 212, 213, 214, 215, 216, 217,
2998 218, 0, 88, 20, 0, 21, 0, 0, 0, 338,
2999 339, 74, 75, 340, 0, 0, 0, 0, 0, 0,
3000 0, 0, 0, 0, 0, 0, 0, 0, 20, 89,
3001 21, 0, 341, 342, 343, 0, 0, 0, 0, 0,
3002 0, 0, 0, 0, 344, 345, 0, 0, 0, 0,
3003 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3004 0, 0, 0, 0, 0, 0, 0, 346, 0, 0,
3005 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3006 0, 0, 0, 0, 0, 125, 126, 127, 128, 129,
3007 130, 131, 132, 133, 134, 135, 136, 137, 138, 139,
3008 140, 141, 142, 143, 144, 145, 146, 147, 148, 318,
3009 319, 0, 0, 0, 0, 0, 320, 0, 321, 0,
3010 322, 323, 324, 0, 0, 0, 0, 0, 0, 0,
3011 0, 0, 0, 0, 0, 90, 338, 339, 91, 0,
3012 340, 92, 0, 93, 465, 163, 164, 165, 166, 167,
3013 168, 169, 170, 171, 172, 173, 174, 175, 0, 341,
3014 342, 343, 0, 0, 0, 0, 347, 0, 0, 0,
3015 0, 344, 345, 0, 0, 0, 0, 0, 0, 0,
3016 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3017 0, 0, 0, 0, 346, 0, 0, 0, 0, 0,
3018 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3019 0, 0, 125, 126, 127, 128, 129, 130, 131, 132,
3020 133, 134, 135, 136, 137, 138, 139, 140, 141, 142,
3021 143, 144, 145, 146, 147, 148, 318, 319, 0, 0,
3022 0, 0, 0, 320, 0, 321, 0, 322, 323, 324,
3023 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3024 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3025 0, 0, 163, 164, 165, 166, 167, 168, 169, 170,
3026 171, 172, 173, 174, 175, 0, 0, 0, 0, 0,
3027 0, 74, 75, 347, 199, 77, 78, 79, 80, 81,
3028 82, 83, 84, 85, 86, 87, 0, 88, 20, 0,
3029 21, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3030 0, 0, 0, 302, 0, 0, 0, 0, 0, 0,
3031 0, 0, 74, 75, 89, 199, 208, 209, 210, 211,
3032 212, 213, 214, 215, 216, 217, 218, 0, 88, 20,
3033 0, 21, 74, 75, 0, 199, 77, 78, 79, 80,
3034 81, 82, 83, 84, 85, 86, 87, 0, 88, 20,
3035 0, 21, 0, 0, 0, 89, 0, 0, 0, 0,
3036 0, 0, 0, 0, 413, 0, 0, 0, 0, 0,
3037 0, 0, 0, 74, 75, 89, 199, 77, 78, 79,
3038 80, 81, 82, 83, 84, 85, 86, 87, 0, 88,
3039 20, 0, 21, 0, 0, 0, 0, 0, 0, 0,
3040 0, 0, 0, 0, 0, 451, 0, 0, 0, 0,
3041 0, 0, 0, 0, 0, 0, 89, 0, 0, 0,
3042 90, 0, 0, 91, 0, 0, 92, 0, 93, 0,
3043 74, 75, 0, 199, 77, 78, 79, 80, 81, 82,
3044 83, 84, 85, 86, 87, 0, 88, 20, 0, 21,
3045 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3046 0, 90, 519, 0, 91, 0, 399, 92, 0, 93,
3047 0, 0, 0, 89, 0, 0, 0, 0, 0, 0,
3048 0, 90, 0, 0, 91, 0, 0, 92, 0, 93,
3049 74, 75, 0, 76, 77, 78, 79, 80, 81, 82,
3050 83, 84, 85, 86, 87, 0, 88, 20, 0, 21,
3051 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3052 0, 0, 90, 0, 0, 91, 0, 0, 92, 0,
3053 93, 74, 75, 89, 199, 77, 78, 79, 80, 81,
3054 82, 83, 84, 85, 86, 87, 0, 88, 20, 0,
3055 21, 74, 75, 0, 199, 208, 209, 210, 211, 212,
3056 213, 214, 215, 216, 217, 218, 0, 88, 20, 0,
3057 21, 0, 0, 0, 89, 0, 0, 0, 0, 90,
3058 0, 0, 91, 0, 0, 92, 0, 93, 0, 0,
3059 0, 0, 74, 75, 89, 229, 77, 78, 79, 80,
3060 81, 82, 83, 84, 85, 86, 87, 0, 88, 20,
3061 0, 21, 74, 75, 0, 199, 208, 209, 210, 211,
3062 212, 213, 214, 215, 216, 217, 218, 0, 88, 20,
3063 0, 21, 0, 0, 0, 89, 0, 0, 0, 90,
3064 0, 0, 91, 0, 0, 92, 0, 93, 0, 0,
3065 0, 0, 0, 0, 0, 89, 0, 0, 0, 0,
3066 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3067 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3068 90, 0, 0, 91, 0, 0, 92, 0, 93, 0,
3069 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3070 90, 0, 0, 91, 0, 0, 92, 0, 93, 0,
3071 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3072 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3073 0, 0, 0, 0, 114, 0, 0, 0, 0, 0,
3074 0, 90, 0, 0, 91, 0, 0, 92, 115, 93,
3075 0, 0, 0, 0, 0, 0, 0, 0, 116, 117,
3076 0, 90, 0, 0, 91, 0, 0, 92, 0, 402,
3077 0, 118, 119, 120, 121, 122, 123, 124, 125, 126,
3078 127, 128, 129, 130, 131, 132, 133, 134, 135, 136,
3079 137, 138, 139, 140, 141, 142, 143, 144, 145, 146,
3080 147, 148, 149, 150, 151, 152, 153, 0, 0, 154,
3081 155, 156, 157, 158, 159, 160, 161, 162, 0, 0,
3082 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3083 0, 0, 0, 0, 0, 0, 0, 0, 163, 164,
3084 165, 166, 167, 168, 169, 170, 171, 172, 173, 174,
3088 static const short int yycheck[] =
3090 45, 120, 115, 63, 120, 118, 107, 274, 4, 23,
3091 29, 3, 161, 0, 121, 164, 30, 558, 63, 93,
3092 5, 6, 15, 8, 9, 10, 11, 12, 13, 14,
3093 15, 16, 17, 18, 19, 15, 21, 22, 579, 24,
3094 153, 33, 23, 156, 157, 158, 159, 160, 161, 162,
3095 578, 10, 11, 12, 13, 14, 15, 16, 17, 104,
3096 105, 106, 590, 48, 57, 152, 179, 180, 306, 307,
3097 115, 153, 153, 118, 326, 327, 183, 57, 34, 161,
3098 5, 6, 163, 8, 9, 10, 11, 12, 13, 14,
3099 15, 16, 17, 18, 19, 347, 21, 22, 336, 24,
3100 159, 57, 52, 53, 54, 164, 151, 152, 153, 154,
3101 155, 156, 157, 158, 159, 160, 161, 162, 110, 153,
3102 22, 71, 24, 48, 198, 9, 153, 161, 153, 203,
3103 155, 176, 177, 178, 179, 180, 163, 21, 163, 164,
3104 153, 231, 232, 162, 61, 153, 159, 198, 61, 163,
3105 402, 159, 203, 243, 10, 11, 12, 13, 14, 15,
3106 16, 17, 0, 153, 153, 24, 162, 155, 45, 154,
3107 47, 157, 157, 163, 163, 160, 164, 162, 163, 152,
3108 293, 47, 48, 49, 244, 152, 276, 25, 32, 33,
3109 55, 56, 152, 31, 108, 109, 286, 287, 288, 244,
3110 159, 27, 28, 41, 42, 43, 44, 45, 46, 47,
3111 255, 3, 4, 3, 4, 3, 4, 455, 152, 486,
3112 152, 488, 296, 297, 62, 4, 300, 272, 24, 154,
3113 4, 291, 157, 3, 4, 160, 155, 162, 163, 64,
3114 65, 66, 67, 68, 69, 70, 291, 292, 293, 3,
3115 4, 24, 365, 20, 367, 368, 369, 77, 78, 24,
3116 4, 4, 375, 155, 59, 355, 356, 357, 158, 158,
3117 4, 4, 4, 363, 41, 42, 43, 44, 45, 46,
3118 47, 4, 7, 50, 4, 7, 7, 377, 378, 157,
3119 153, 155, 337, 394, 395, 396, 397, 398, 153, 153,
3120 153, 153, 153, 159, 153, 153, 407, 408, 409, 410,
3121 411, 153, 386, 153, 153, 24, 161, 36, 153, 156,
3122 365, 366, 367, 368, 369, 370, 371, 155, 402, 153,
3123 375, 376, 155, 155, 155, 24, 426, 155, 428, 155,
3124 155, 155, 432, 155, 155, 63, 153, 153, 153, 157,
3125 440, 441, 442, 153, 153, 456, 457, 161, 155, 153,
3126 153, 24, 463, 21, 222, 156, 155, 153, 226, 21,
3127 155, 153, 153, 231, 232, 4, 153, 153, 153, 4,
3128 493, 494, 495, 155, 429, 243, 24, 153, 36, 153,
3129 153, 481, 482, 153, 484, 485, 153, 153, 153, 161,
3130 153, 491, 447, 153, 34, 153, 507, 508, 509, 510,
3131 500, 153, 153, 514, 515, 516, 517, 153, 276, 156,
3132 533, 161, 414, 153, 153, 57, 24, 153, 286, 287,
3133 288, 57, 477, 157, 4, 21, 153, 153, 483, 558,
3134 541, 542, 558, 156, 159, 535, 156, 153, 493, 494,
3135 495, 156, 156, 156, 499, 156, 27, 28, 156, 156,
3136 579, 36, 156, 579, 159, 566, 156, 568, 569, 21,
3137 156, 156, 156, 518, 119, 120, 121, 122, 123, 124,
3138 125, 126, 127, 128, 153, 21, 576, 153, 533, 10,
3139 11, 12, 13, 14, 15, 16, 17, 355, 356, 357,
3140 65, 591, 21, 21, 65, 363, 65, 65, 598, 318,
3141 65, 33, 602, 603, 25, 478, 319, 44, 108, 377,
3142 378, 3, 222, 477, 19, 597, 429, 499, 458, -1,
3143 -1, -1, -1, -1, 5, 6, -1, 8, 9, 10,
3144 11, 12, 13, 14, 15, 16, 17, 18, 19, -1,
3145 21, 22, -1, 24, 125, 126, 127, 128, 129, 130,
3146 131, 132, 133, 134, 135, 136, 137, 138, 426, -1,
3147 428, 5, 6, -1, 432, -1, -1, 48, -1, -1,
3148 -1, -1, 440, 441, 442, -1, -1, 20, 22, 22,
3149 24, 24, 26, -1, -1, -1, -1, -1, 31, 32,
3150 33, -1, -1, -1, 38, 39, -1, -1, 41, 42,
3151 43, 44, 45, 46, 47, -1, -1, 50, 51, -1,
3152 -1, -1, -1, 481, 482, 58, 484, 485, -1, 62,
3153 -1, -1, -1, 491, -1, -1, -1, -1, -1, -1,
3154 -1, -1, 500, -1, -1, 79, 80, 81, 82, 83,
3155 84, 85, 86, 87, 88, 89, 90, 91, 92, 93,
3156 94, 95, 96, 97, 98, 99, 100, 101, 102, 103,
3157 104, -1, -1, -1, -1, -1, 110, 535, 112, -1,
3158 114, 115, 116, 154, -1, -1, 157, -1, -1, 160,
3159 -1, 162, 163, -1, -1, -1, -1, -1, -1, -1,
3160 -1, -1, -1, -1, -1, 139, 140, 141, 142, 143,
3161 144, 145, 146, 147, 148, 149, 150, 151, 576, -1,
3162 -1, -1, -1, 157, -1, -1, 160, -1, 162, -1,
3163 -1, 165, -1, 591, -1, -1, -1, -1, -1, -1,
3164 598, -1, -1, -1, 602, 603, 5, 6, -1, 8,
3165 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
3166 19, -1, 21, 22, -1, 24, -1, -1, -1, 3,
3167 4, 5, 6, 7, -1, -1, -1, -1, -1, -1,
3168 -1, -1, -1, -1, -1, -1, -1, -1, 22, 48,
3169 24, -1, 26, 27, 28, -1, -1, -1, -1, -1,
3170 -1, -1, -1, -1, 38, 39, -1, -1, -1, -1,
3171 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3172 -1, -1, -1, -1, -1, -1, -1, 61, -1, -1,
3173 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3174 -1, -1, -1, -1, -1, 79, 80, 81, 82, 83,
3175 84, 85, 86, 87, 88, 89, 90, 91, 92, 93,
3176 94, 95, 96, 97, 98, 99, 100, 101, 102, 103,
3177 104, -1, -1, -1, -1, -1, 110, -1, 112, -1,
3178 114, 115, 116, -1, -1, -1, -1, -1, -1, -1,
3179 -1, -1, -1, -1, -1, 154, 3, 4, 157, -1,
3180 7, 160, -1, 162, 163, 139, 140, 141, 142, 143,
3181 144, 145, 146, 147, 148, 149, 150, 151, -1, 26,
3182 27, 28, -1, -1, -1, -1, 160, -1, -1, -1,
3183 -1, 38, 39, -1, -1, -1, -1, -1, -1, -1,
3184 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3185 -1, -1, -1, -1, 61, -1, -1, -1, -1, -1,
3186 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3187 -1, -1, 79, 80, 81, 82, 83, 84, 85, 86,
3188 87, 88, 89, 90, 91, 92, 93, 94, 95, 96,
3189 97, 98, 99, 100, 101, 102, 103, 104, -1, -1,
3190 -1, -1, -1, 110, -1, 112, -1, 114, 115, 116,
3191 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3192 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3193 -1, -1, 139, 140, 141, 142, 143, 144, 145, 146,
3194 147, 148, 149, 150, 151, -1, -1, -1, -1, -1,
3195 -1, 5, 6, 160, 8, 9, 10, 11, 12, 13,
3196 14, 15, 16, 17, 18, 19, -1, 21, 22, -1,
3197 24, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3198 -1, -1, -1, 37, -1, -1, -1, -1, -1, -1,
3199 -1, -1, 5, 6, 48, 8, 9, 10, 11, 12,
3200 13, 14, 15, 16, 17, 18, 19, -1, 21, 22,
3201 -1, 24, 5, 6, -1, 8, 9, 10, 11, 12,
3202 13, 14, 15, 16, 17, 18, 19, -1, 21, 22,
3203 -1, 24, -1, -1, -1, 48, -1, -1, -1, -1,
3204 -1, -1, -1, -1, 37, -1, -1, -1, -1, -1,
3205 -1, -1, -1, 5, 6, 48, 8, 9, 10, 11,
3206 12, 13, 14, 15, 16, 17, 18, 19, -1, 21,
3207 22, -1, 24, -1, -1, -1, -1, -1, -1, -1,
3208 -1, -1, -1, -1, -1, 37, -1, -1, -1, -1,
3209 -1, -1, -1, -1, -1, -1, 48, -1, -1, -1,
3210 154, -1, -1, 157, -1, -1, 160, -1, 162, -1,
3211 5, 6, -1, 8, 9, 10, 11, 12, 13, 14,
3212 15, 16, 17, 18, 19, -1, 21, 22, -1, 24,
3213 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3214 -1, 154, 37, -1, 157, -1, 159, 160, -1, 162,
3215 -1, -1, -1, 48, -1, -1, -1, -1, -1, -1,
3216 -1, 154, -1, -1, 157, -1, -1, 160, -1, 162,
3217 5, 6, -1, 8, 9, 10, 11, 12, 13, 14,
3218 15, 16, 17, 18, 19, -1, 21, 22, -1, 24,
3219 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3220 -1, -1, 154, -1, -1, 157, -1, -1, 160, -1,
3221 162, 5, 6, 48, 8, 9, 10, 11, 12, 13,
3222 14, 15, 16, 17, 18, 19, -1, 21, 22, -1,
3223 24, 5, 6, -1, 8, 9, 10, 11, 12, 13,
3224 14, 15, 16, 17, 18, 19, -1, 21, 22, -1,
3225 24, -1, -1, -1, 48, -1, -1, -1, -1, 154,
3226 -1, -1, 157, -1, -1, 160, -1, 162, -1, -1,
3227 -1, -1, 5, 6, 48, 8, 9, 10, 11, 12,
3228 13, 14, 15, 16, 17, 18, 19, -1, 21, 22,
3229 -1, 24, 5, 6, -1, 8, 9, 10, 11, 12,
3230 13, 14, 15, 16, 17, 18, 19, -1, 21, 22,
3231 -1, 24, -1, -1, -1, 48, -1, -1, -1, 154,
3232 -1, -1, 157, -1, -1, 160, -1, 162, -1, -1,
3233 -1, -1, -1, -1, -1, 48, -1, -1, -1, -1,
3234 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3235 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3236 154, -1, -1, 157, -1, -1, 160, -1, 162, -1,
3237 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3238 154, -1, -1, 157, -1, -1, 160, -1, 162, -1,
3239 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3240 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3241 -1, -1, -1, -1, 35, -1, -1, -1, -1, -1,
3242 -1, 154, -1, -1, 157, -1, -1, 160, 49, 162,
3243 -1, -1, -1, -1, -1, -1, -1, -1, 59, 60,
3244 -1, 154, -1, -1, 157, -1, -1, 160, -1, 162,
3245 -1, 72, 73, 74, 75, 76, 77, 78, 79, 80,
3246 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,
3247 91, 92, 93, 94, 95, 96, 97, 98, 99, 100,
3248 101, 102, 103, 104, 105, 106, 107, -1, -1, 110,
3249 111, 112, 113, 114, 115, 116, 117, 118, -1, -1,
3250 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3251 -1, -1, -1, -1, -1, -1, -1, -1, 139, 140,
3252 141, 142, 143, 144, 145, 146, 147, 148, 149, 150,
3256 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
3257 symbol of state STATE-NUM. */
3258 static const unsigned char yystos[] =
3260 0, 200, 201, 202, 0, 25, 31, 41, 42, 43,
3261 44, 45, 46, 47, 62, 181, 219, 222, 224, 232,
3262 22, 24, 51, 58, 62, 180, 212, 224, 225, 61,
3263 220, 23, 233, 234, 30, 163, 221, 233, 52, 53,
3264 54, 71, 209, 152, 61, 20, 45, 47, 50, 181,
3265 152, 45, 47, 223, 24, 207, 64, 65, 66, 67,
3266 68, 69, 70, 182, 217, 180, 238, 152, 152, 152,
3267 152, 157, 210, 207, 5, 6, 8, 9, 10, 11,
3268 12, 13, 14, 15, 16, 17, 18, 19, 21, 48,
3269 154, 157, 160, 162, 167, 189, 190, 191, 192, 193,
3270 212, 229, 32, 33, 199, 199, 199, 199, 226, 4,
3271 189, 29, 162, 218, 35, 49, 59, 60, 72, 73,
3272 74, 75, 76, 77, 78, 79, 80, 81, 82, 83,
3273 84, 85, 86, 87, 88, 89, 90, 91, 92, 93,
3274 94, 95, 96, 97, 98, 99, 100, 101, 102, 103,
3275 104, 105, 106, 107, 110, 111, 112, 113, 114, 115,
3276 116, 117, 118, 139, 140, 141, 142, 143, 144, 145,
3277 146, 147, 148, 149, 150, 151, 169, 170, 171, 174,
3278 175, 235, 236, 242, 243, 245, 246, 24, 55, 56,
3279 208, 4, 24, 24, 211, 4, 4, 4, 162, 8,
3280 163, 193, 194, 155, 164, 191, 191, 191, 9, 10,
3281 11, 12, 13, 14, 15, 16, 17, 18, 19, 176,
3282 177, 179, 191, 196, 217, 212, 191, 231, 59, 8,
3283 231, 9, 21, 10, 11, 12, 13, 14, 15, 16,
3284 17, 176, 177, 178, 182, 119, 120, 121, 122, 123,
3285 124, 125, 126, 127, 128, 172, 27, 28, 125, 126,
3286 127, 128, 129, 130, 131, 132, 133, 134, 135, 136,
3287 137, 138, 173, 191, 191, 231, 191, 191, 239, 231,
3288 231, 231, 231, 231, 231, 231, 191, 191, 191, 231,
3289 231, 182, 108, 109, 153, 159, 158, 158, 163, 194,
3290 153, 163, 37, 194, 195, 205, 206, 204, 27, 28,
3291 3, 4, 168, 4, 7, 26, 38, 39, 103, 104,
3292 110, 112, 114, 115, 116, 157, 160, 162, 165, 169,
3293 170, 171, 174, 175, 197, 229, 203, 155, 3, 4,
3294 7, 26, 27, 28, 38, 39, 61, 160, 197, 228,
3295 229, 230, 230, 230, 230, 189, 191, 191, 153, 184,
3296 153, 184, 230, 157, 153, 153, 153, 153, 153, 153,
3297 153, 153, 230, 230, 230, 153, 36, 189, 191, 231,
3298 24, 193, 193, 161, 163, 193, 153, 156, 153, 187,
3299 187, 187, 172, 173, 155, 155, 155, 155, 155, 159,
3300 196, 198, 162, 198, 163, 198, 24, 155, 155, 155,
3301 155, 155, 187, 37, 191, 214, 215, 216, 63, 227,
3302 198, 153, 153, 230, 230, 230, 15, 57, 15, 153,
3303 244, 230, 157, 231, 191, 231, 231, 231, 191, 191,
3304 153, 153, 153, 231, 191, 230, 230, 153, 159, 161,
3305 161, 37, 34, 57, 185, 188, 155, 155, 196, 196,
3306 196, 196, 196, 153, 159, 163, 193, 198, 161, 163,
3307 196, 196, 196, 196, 196, 212, 213, 153, 156, 24,
3308 161, 21, 21, 155, 153, 153, 230, 4, 230, 231,
3309 240, 153, 230, 153, 153, 153, 230, 230, 230, 155,
3310 191, 24, 4, 187, 196, 196, 244, 153, 153, 153,
3311 153, 196, 161, 163, 153, 153, 153, 153, 36, 37,
3312 214, 185, 186, 153, 230, 230, 240, 241, 230, 230,
3313 153, 184, 184, 153, 230, 153, 231, 231, 231, 241,
3314 230, 153, 153, 156, 196, 196, 196, 196, 161, 196,
3315 196, 196, 196, 191, 57, 183, 24, 153, 157, 156,
3316 231, 159, 230, 156, 196, 196, 153, 156, 153, 153,
3317 156, 156, 156, 156, 156, 4, 21, 159, 178, 237,
3318 36, 159, 156, 156, 196, 196, 196, 230, 228, 159,
3319 178, 21, 156, 156, 156, 153, 228, 230, 21, 153,
3320 235, 230, 21, 21, 230, 230
3323 #define yyerrok (yyerrstatus = 0)
3324 #define yyclearin (yychar = YYEMPTY)
3325 #define YYEMPTY (-2)
3328 #define YYACCEPT goto yyacceptlab
3329 #define YYABORT goto yyabortlab
3330 #define YYERROR goto yyerrorlab
3333 /* Like YYERROR except do call yyerror. This remains here temporarily
3334 to ease the transition to the new meaning of YYERROR, for GCC.
3335 Once GCC version 2 has supplanted version 1, this can go. */
3337 #define YYFAIL goto yyerrlab
3339 #define YYRECOVERING() (!!yyerrstatus)
3341 #define YYBACKUP(Token, Value) \
3343 if (yychar == YYEMPTY && yylen == 1) \
3347 yytoken = YYTRANSLATE (yychar); \
3353 yyerror (YY_("syntax error: cannot back up")); \
3360 #define YYERRCODE 256
3363 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
3364 If N is 0, then set CURRENT to the empty location which ends
3365 the previous symbol: RHS[0] (always defined). */
3367 #define YYRHSLOC(Rhs, K) ((Rhs)[K])
3368 #ifndef YYLLOC_DEFAULT
3369 # define YYLLOC_DEFAULT(Current, Rhs, N) \
3373 (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \
3374 (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \
3375 (Current).last_line = YYRHSLOC (Rhs, N).last_line; \
3376 (Current).last_column = YYRHSLOC (Rhs, N).last_column; \
3380 (Current).first_line = (Current).last_line = \
3381 YYRHSLOC (Rhs, 0).last_line; \
3382 (Current).first_column = (Current).last_column = \
3383 YYRHSLOC (Rhs, 0).last_column; \
3389 /* YY_LOCATION_PRINT -- Print the location on the stream.
3390 This macro was not mandated originally: define only if we know
3391 we won't break user code: when these are the locations we know. */
3393 #ifndef YY_LOCATION_PRINT
3394 # if YYLTYPE_IS_TRIVIAL
3395 # define YY_LOCATION_PRINT(File, Loc) \
3396 fprintf (File, "%d.%d-%d.%d", \
3397 (Loc).first_line, (Loc).first_column, \
3398 (Loc).last_line, (Loc).last_column)
3400 # define YY_LOCATION_PRINT(File, Loc) ((void) 0)
3405 /* YYLEX -- calling `yylex' with the right arguments. */
3408 # define YYLEX yylex (YYLEX_PARAM)
3410 # define YYLEX yylex ()
3413 /* Enable debugging if requested. */
3417 # include <stdio.h> /* INFRINGES ON USER NAME SPACE */
3418 # define YYFPRINTF fprintf
3421 # define YYDPRINTF(Args) \
3427 # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
3431 YYFPRINTF (stderr, "%s ", Title); \
3432 yysymprint (stderr, \
3434 YYFPRINTF (stderr, "\n"); \
3438 /*------------------------------------------------------------------.
3439 | yy_stack_print -- Print the state stack from its BOTTOM up to its |
3441 `------------------------------------------------------------------*/
3443 #if defined (__STDC__) || defined (__cplusplus)
3445 yy_stack_print (short int *bottom, short int *top)
3448 yy_stack_print (bottom, top)
3453 YYFPRINTF (stderr, "Stack now");
3454 for (/* Nothing. */; bottom <= top; ++bottom)
3455 YYFPRINTF (stderr, " %d", *bottom);
3456 YYFPRINTF (stderr, "\n");
3459 # define YY_STACK_PRINT(Bottom, Top) \
3462 yy_stack_print ((Bottom), (Top)); \
3466 /*------------------------------------------------.
3467 | Report that the YYRULE is going to be reduced. |
3468 `------------------------------------------------*/
3470 #if defined (__STDC__) || defined (__cplusplus)
3472 yy_reduce_print (int yyrule)
3475 yy_reduce_print (yyrule)
3480 unsigned long int yylno = yyrline[yyrule];
3481 YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu), ",
3483 /* Print the symbols being reduced, and their result. */
3484 for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++)
3485 YYFPRINTF (stderr, "%s ", yytname[yyrhs[yyi]]);
3486 YYFPRINTF (stderr, "-> %s\n", yytname[yyr1[yyrule]]);
3489 # define YY_REDUCE_PRINT(Rule) \
3492 yy_reduce_print (Rule); \
3495 /* Nonzero means print parse trace. It is left uninitialized so that
3496 multiple parsers can coexist. */
3498 #else /* !YYDEBUG */
3499 # define YYDPRINTF(Args)
3500 # define YY_SYMBOL_PRINT(Title, Type, Value, Location)
3501 # define YY_STACK_PRINT(Bottom, Top)
3502 # define YY_REDUCE_PRINT(Rule)
3503 #endif /* !YYDEBUG */
3506 /* YYINITDEPTH -- initial size of the parser's stacks. */
3508 # define YYINITDEPTH 200
3511 /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
3512 if the built-in stack extension method is used).
3514 Do not make this value too large; the results are undefined if
3515 YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
3516 evaluated with infinite-precision integer arithmetic. */
3519 # define YYMAXDEPTH 10000
3527 # if defined (__GLIBC__) && defined (_STRING_H)
3528 # define yystrlen strlen
3530 /* Return the length of YYSTR. */
3532 # if defined (__STDC__) || defined (__cplusplus)
3533 yystrlen (const char *yystr)
3539 const char *yys = yystr;
3541 while (*yys++ != '\0')
3544 return yys - yystr - 1;
3550 # if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
3551 # define yystpcpy stpcpy
3553 /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
3556 # if defined (__STDC__) || defined (__cplusplus)
3557 yystpcpy (char *yydest, const char *yysrc)
3559 yystpcpy (yydest, yysrc)
3565 const char *yys = yysrc;
3567 while ((*yyd++ = *yys++) != '\0')
3576 /* Copy to YYRES the contents of YYSTR after stripping away unnecessary
3577 quotes and backslashes, so that it's suitable for yyerror. The
3578 heuristic is that double-quoting is unnecessary unless the string
3579 contains an apostrophe, a comma, or backslash (other than
3580 backslash-backslash). YYSTR is taken from yytname. If YYRES is
3581 null, do not copy; instead, return the length of what the result
3584 yytnamerr (char *yyres, const char *yystr)
3589 char const *yyp = yystr;
3596 goto do_not_strip_quotes;
3600 goto do_not_strip_quotes;
3613 do_not_strip_quotes: ;
3617 return yystrlen (yystr);
3619 return yystpcpy (yyres, yystr) - yyres;
3623 #endif /* YYERROR_VERBOSE */
3628 /*--------------------------------.
3629 | Print this symbol on YYOUTPUT. |
3630 `--------------------------------*/
3632 #if defined (__STDC__) || defined (__cplusplus)
3634 yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep)
3637 yysymprint (yyoutput, yytype, yyvaluep)
3643 /* Pacify ``unused variable'' warnings. */
3646 if (yytype < YYNTOKENS)
3647 YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
3649 YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
3653 if (yytype < YYNTOKENS)
3654 YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
3661 YYFPRINTF (yyoutput, ")");
3664 #endif /* ! YYDEBUG */
3665 /*-----------------------------------------------.
3666 | Release the memory associated to this symbol. |
3667 `-----------------------------------------------*/
3669 #if defined (__STDC__) || defined (__cplusplus)
3671 yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
3674 yydestruct (yymsg, yytype, yyvaluep)
3680 /* Pacify ``unused variable'' warnings. */
3685 YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
3696 /* Prevent warnings from -Wmissing-prototypes. */
3698 #ifdef YYPARSE_PARAM
3699 # if defined (__STDC__) || defined (__cplusplus)
3700 int yyparse (void *YYPARSE_PARAM);
3704 #else /* ! YYPARSE_PARAM */
3705 #if defined (__STDC__) || defined (__cplusplus)
3710 #endif /* ! YYPARSE_PARAM */
3714 /* The look-ahead symbol. */
3717 /* The semantic value of the look-ahead symbol. */
3720 /* Number of syntax errors so far. */
3729 #ifdef YYPARSE_PARAM
3730 # if defined (__STDC__) || defined (__cplusplus)
3731 int yyparse (void *YYPARSE_PARAM)
3733 int yyparse (YYPARSE_PARAM)
3734 void *YYPARSE_PARAM;
3736 #else /* ! YYPARSE_PARAM */
3737 #if defined (__STDC__) || defined (__cplusplus)
3751 /* Number of tokens to shift before error messages enabled. */
3753 /* Look-ahead token as an internal (translated) token number. */
3756 /* Three stacks and their tools:
3757 `yyss': related to states,
3758 `yyvs': related to semantic values,
3759 `yyls': related to locations.
3761 Refer to the stacks thru separate pointers, to allow yyoverflow
3762 to reallocate them elsewhere. */
3764 /* The state stack. */
3765 short int yyssa[YYINITDEPTH];
3766 short int *yyss = yyssa;
3769 /* The semantic value stack. */
3770 YYSTYPE yyvsa[YYINITDEPTH];
3771 YYSTYPE *yyvs = yyvsa;
3776 #define YYPOPSTACK (yyvsp--, yyssp--)
3778 YYSIZE_T yystacksize = YYINITDEPTH;
3780 /* The variables used to return semantic value and location from the
3785 /* When reducing, the number of symbols on the RHS of the reduced
3789 YYDPRINTF ((stderr, "Starting parse\n"));
3794 yychar = YYEMPTY; /* Cause a token to be read. */
3796 /* Initialize stack pointers.
3797 Waste one element of value and location stack
3798 so that they stay on the same level as the state stack.
3799 The wasted elements are never initialized. */
3806 /*------------------------------------------------------------.
3807 | yynewstate -- Push a new state, which is found in yystate. |
3808 `------------------------------------------------------------*/
3810 /* In all cases, when you get here, the value and location stacks
3811 have just been pushed. so pushing a state here evens the stacks.
3818 if (yyss + yystacksize - 1 <= yyssp)
3820 /* Get the current used size of the three stacks, in elements. */
3821 YYSIZE_T yysize = yyssp - yyss + 1;
3825 /* Give user a chance to reallocate the stack. Use copies of
3826 these so that the &'s don't force the real ones into
3828 YYSTYPE *yyvs1 = yyvs;
3829 short int *yyss1 = yyss;
3832 /* Each stack pointer address is followed by the size of the
3833 data in use in that stack, in bytes. This used to be a
3834 conditional around just the two extra args, but that might
3835 be undefined if yyoverflow is a macro. */
3836 yyoverflow (YY_("memory exhausted"),
3837 &yyss1, yysize * sizeof (*yyssp),
3838 &yyvs1, yysize * sizeof (*yyvsp),
3845 #else /* no yyoverflow */
3846 # ifndef YYSTACK_RELOCATE
3847 goto yyexhaustedlab;
3849 /* Extend the stack our own way. */
3850 if (YYMAXDEPTH <= yystacksize)
3851 goto yyexhaustedlab;
3853 if (YYMAXDEPTH < yystacksize)
3854 yystacksize = YYMAXDEPTH;
3857 short int *yyss1 = yyss;
3858 union yyalloc *yyptr =
3859 (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
3861 goto yyexhaustedlab;
3862 YYSTACK_RELOCATE (yyss);
3863 YYSTACK_RELOCATE (yyvs);
3865 # undef YYSTACK_RELOCATE
3867 YYSTACK_FREE (yyss1);
3870 #endif /* no yyoverflow */
3872 yyssp = yyss + yysize - 1;
3873 yyvsp = yyvs + yysize - 1;
3876 YYDPRINTF ((stderr, "Stack size increased to %lu\n",
3877 (unsigned long int) yystacksize));
3879 if (yyss + yystacksize - 1 <= yyssp)
3883 YYDPRINTF ((stderr, "Entering state %d\n", yystate));
3892 /* Do appropriate processing given the current state. */
3893 /* Read a look-ahead token if we need one and don't already have one. */
3896 /* First try to decide what to do without reference to look-ahead token. */
3898 yyn = yypact[yystate];
3899 if (yyn == YYPACT_NINF)
3902 /* Not known => get a look-ahead token if don't already have one. */
3904 /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */
3905 if (yychar == YYEMPTY)
3907 YYDPRINTF ((stderr, "Reading a token: "));
3911 if (yychar <= YYEOF)
3913 yychar = yytoken = YYEOF;
3914 YYDPRINTF ((stderr, "Now at end of input.\n"));
3918 yytoken = YYTRANSLATE (yychar);
3919 YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
3922 /* If the proper action on seeing token YYTOKEN is to reduce or to
3923 detect an error, take that action. */
3925 if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
3930 if (yyn == 0 || yyn == YYTABLE_NINF)
3939 /* Shift the look-ahead token. */
3940 YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
3942 /* Discard the token being shifted unless it is eof. */
3943 if (yychar != YYEOF)
3949 /* Count tokens shifted since error; after three, turn off error
3958 /*-----------------------------------------------------------.
3959 | yydefault -- do the default action for the current state. |
3960 `-----------------------------------------------------------*/
3962 yyn = yydefact[yystate];
3968 /*-----------------------------.
3969 | yyreduce -- Do a reduction. |
3970 `-----------------------------*/
3972 /* yyn is the number of a rule to reduce with. */
3975 /* If YYLEN is nonzero, implement the default value of the action:
3978 Otherwise, the following line sets YYVAL to garbage.
3979 This behavior is undocumented and Bison
3980 users should not rely upon it. Assigning to YYVAL
3981 unconditionally makes the parser a bit smaller, and it avoids a
3982 GCC warning that YYVAL may be used uninitialized. */
3983 yyval = yyvsp[1-yylen];
3986 YY_REDUCE_PRINT (yyn);
3990 #line 1916 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
3992 if ((yyvsp[0].UIntVal) > (uint32_t)INT32_MAX) // Outside of my range!
3993 error("Value too large for type");
3994 (yyval.SIntVal) = (int32_t)(yyvsp[0].UIntVal);
3999 #line 1925 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4001 if ((yyvsp[0].UInt64Val) > (uint64_t)INT64_MAX) // Outside of my range!
4002 error("Value too large for type");
4003 (yyval.SInt64Val) = (int64_t)(yyvsp[0].UInt64Val);
4008 #line 1947 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4009 { (yyval.IPred) = ICmpInst::ICMP_EQ; ;}
4013 #line 1947 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4014 { (yyval.IPred) = ICmpInst::ICMP_NE; ;}
4018 #line 1948 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4019 { (yyval.IPred) = ICmpInst::ICMP_SLT; ;}
4023 #line 1948 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4024 { (yyval.IPred) = ICmpInst::ICMP_SGT; ;}
4028 #line 1949 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4029 { (yyval.IPred) = ICmpInst::ICMP_SLE; ;}
4033 #line 1949 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4034 { (yyval.IPred) = ICmpInst::ICMP_SGE; ;}
4038 #line 1950 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4039 { (yyval.IPred) = ICmpInst::ICMP_ULT; ;}
4043 #line 1950 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4044 { (yyval.IPred) = ICmpInst::ICMP_UGT; ;}
4048 #line 1951 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4049 { (yyval.IPred) = ICmpInst::ICMP_ULE; ;}
4053 #line 1951 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4054 { (yyval.IPred) = ICmpInst::ICMP_UGE; ;}
4058 #line 1955 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4059 { (yyval.FPred) = FCmpInst::FCMP_OEQ; ;}
4063 #line 1955 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4064 { (yyval.FPred) = FCmpInst::FCMP_ONE; ;}
4068 #line 1956 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4069 { (yyval.FPred) = FCmpInst::FCMP_OLT; ;}
4073 #line 1956 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4074 { (yyval.FPred) = FCmpInst::FCMP_OGT; ;}
4078 #line 1957 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4079 { (yyval.FPred) = FCmpInst::FCMP_OLE; ;}
4083 #line 1957 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4084 { (yyval.FPred) = FCmpInst::FCMP_OGE; ;}
4088 #line 1958 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4089 { (yyval.FPred) = FCmpInst::FCMP_ORD; ;}
4093 #line 1958 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4094 { (yyval.FPred) = FCmpInst::FCMP_UNO; ;}
4098 #line 1959 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4099 { (yyval.FPred) = FCmpInst::FCMP_UEQ; ;}
4103 #line 1959 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4104 { (yyval.FPred) = FCmpInst::FCMP_UNE; ;}
4108 #line 1960 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4109 { (yyval.FPred) = FCmpInst::FCMP_ULT; ;}
4113 #line 1960 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4114 { (yyval.FPred) = FCmpInst::FCMP_UGT; ;}
4118 #line 1961 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4119 { (yyval.FPred) = FCmpInst::FCMP_ULE; ;}
4123 #line 1961 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4124 { (yyval.FPred) = FCmpInst::FCMP_UGE; ;}
4128 #line 1962 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4129 { (yyval.FPred) = FCmpInst::FCMP_TRUE; ;}
4133 #line 1963 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4134 { (yyval.FPred) = FCmpInst::FCMP_FALSE; ;}
4138 #line 1994 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4140 (yyval.StrVal) = (yyvsp[-1].StrVal);
4145 #line 1997 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4152 #line 2002 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4153 { (yyval.Linkage) = GlobalValue::InternalLinkage; ;}
4157 #line 2003 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4158 { (yyval.Linkage) = GlobalValue::LinkOnceLinkage; ;}
4162 #line 2004 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4163 { (yyval.Linkage) = GlobalValue::WeakLinkage; ;}
4167 #line 2005 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4168 { (yyval.Linkage) = GlobalValue::AppendingLinkage; ;}
4172 #line 2006 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4173 { (yyval.Linkage) = GlobalValue::DLLImportLinkage; ;}
4177 #line 2007 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4178 { (yyval.Linkage) = GlobalValue::DLLExportLinkage; ;}
4182 #line 2008 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4183 { (yyval.Linkage) = GlobalValue::ExternalWeakLinkage; ;}
4187 #line 2009 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4188 { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;}
4192 #line 2013 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4193 { (yyval.UIntVal) = lastCallingConv = OldCallingConv::C; ;}
4197 #line 2014 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4198 { (yyval.UIntVal) = lastCallingConv = OldCallingConv::C; ;}
4202 #line 2015 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4203 { (yyval.UIntVal) = lastCallingConv = OldCallingConv::CSRet; ;}
4207 #line 2016 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4208 { (yyval.UIntVal) = lastCallingConv = OldCallingConv::Fast; ;}
4212 #line 2017 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4213 { (yyval.UIntVal) = lastCallingConv = OldCallingConv::Cold; ;}
4217 #line 2018 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4218 { (yyval.UIntVal) = lastCallingConv = OldCallingConv::X86_StdCall; ;}
4222 #line 2019 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4223 { (yyval.UIntVal) = lastCallingConv = OldCallingConv::X86_FastCall; ;}
4227 #line 2020 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4229 if ((unsigned)(yyvsp[0].UInt64Val) != (yyvsp[0].UInt64Val))
4230 error("Calling conv too large");
4231 (yyval.UIntVal) = lastCallingConv = (yyvsp[0].UInt64Val);
4236 #line 2030 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4237 { (yyval.UIntVal) = 0; ;}
4241 #line 2031 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4243 (yyval.UIntVal) = (yyvsp[0].UInt64Val);
4244 if ((yyval.UIntVal) != 0 && !isPowerOf2_32((yyval.UIntVal)))
4245 error("Alignment must be a power of two");
4250 #line 2039 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4251 { (yyval.UIntVal) = 0; ;}
4255 #line 2040 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4257 (yyval.UIntVal) = (yyvsp[0].UInt64Val);
4258 if ((yyval.UIntVal) != 0 && !isPowerOf2_32((yyval.UIntVal)))
4259 error("Alignment must be a power of two");
4264 #line 2048 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4266 for (unsigned i = 0, e = strlen((yyvsp[0].StrVal)); i != e; ++i)
4267 if ((yyvsp[0].StrVal)[i] == '"' || (yyvsp[0].StrVal)[i] == '\\')
4268 error("Invalid character in section name");
4269 (yyval.StrVal) = (yyvsp[0].StrVal);
4274 #line 2057 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4275 { (yyval.StrVal) = 0; ;}
4279 #line 2058 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4280 { (yyval.StrVal) = (yyvsp[0].StrVal); ;}
4284 #line 2065 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4289 #line 2066 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4294 #line 2070 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4296 CurGV->setSection((yyvsp[0].StrVal));
4297 free((yyvsp[0].StrVal));
4302 #line 2074 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4304 if ((yyvsp[0].UInt64Val) != 0 && !isPowerOf2_32((yyvsp[0].UInt64Val)))
4305 error("Alignment must be a power of two");
4306 CurGV->setAlignment((yyvsp[0].UInt64Val));
4312 #line 2091 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4314 (yyval.TypeVal).PAT = new PATypeHolder((yyvsp[0].PrimType).T);
4315 (yyval.TypeVal).S.makeSignless();
4320 #line 2099 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4322 (yyval.TypeVal).PAT = new PATypeHolder((yyvsp[0].PrimType).T);
4323 (yyval.TypeVal).S.makeSignless();
4328 #line 2106 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4330 if (!UpRefs.empty())
4331 error("Invalid upreference in type: " + (*(yyvsp[0].TypeVal).PAT)->getDescription());
4332 (yyval.TypeVal) = (yyvsp[0].TypeVal);
4337 #line 2120 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4339 (yyval.TypeVal).PAT = new PATypeHolder((yyvsp[0].PrimType).T);
4340 (yyval.TypeVal).S.copy((yyvsp[0].PrimType).S);
4345 #line 2124 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4347 (yyval.TypeVal).PAT = new PATypeHolder(OpaqueType::get());
4348 (yyval.TypeVal).S.makeSignless();
4353 #line 2128 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4354 { // Named types are also simple types...
4355 (yyval.TypeVal).S.copy(getTypeSign((yyvsp[0].ValIDVal)));
4356 const Type* tmp = getType((yyvsp[0].ValIDVal));
4357 (yyval.TypeVal).PAT = new PATypeHolder(tmp);
4362 #line 2133 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4363 { // Type UpReference
4364 if ((yyvsp[0].UInt64Val) > (uint64_t)~0U)
4365 error("Value out of range");
4366 OpaqueType *OT = OpaqueType::get(); // Use temporary placeholder
4367 UpRefs.push_back(UpRefRecord((unsigned)(yyvsp[0].UInt64Val), OT)); // Add to vector...
4368 (yyval.TypeVal).PAT = new PATypeHolder(OT);
4369 (yyval.TypeVal).S.makeSignless();
4370 UR_OUT("New Upreference!\n");
4375 #line 2142 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4376 { // Function derived type?
4377 (yyval.TypeVal).S.makeComposite((yyvsp[-3].TypeVal).S);
4378 std::vector<const Type*> Params;
4379 for (std::list<llvm::PATypeInfo>::iterator I = (yyvsp[-1].TypeList)->begin(),
4380 E = (yyvsp[-1].TypeList)->end(); I != E; ++I) {
4381 Params.push_back(I->PAT->get());
4382 (yyval.TypeVal).S.add(I->S);
4384 bool isVarArg = Params.size() && Params.back() == Type::VoidTy;
4385 if (isVarArg) Params.pop_back();
4387 ParamAttrsList *PAL = 0;
4388 if (lastCallingConv == OldCallingConv::CSRet) {
4389 ParamAttrsVector Attrs;
4390 ParamAttrsWithIndex PAWI;
4391 PAWI.index = 1; PAWI.attrs = ParamAttr::StructRet; // first arg
4392 Attrs.push_back(PAWI);
4393 PAL = ParamAttrsList::get(Attrs);
4396 const FunctionType *FTy =
4397 FunctionType::get((yyvsp[-3].TypeVal).PAT->get(), Params, isVarArg, PAL);
4399 (yyval.TypeVal).PAT = new PATypeHolder( HandleUpRefs(FTy, (yyval.TypeVal).S) );
4400 delete (yyvsp[-3].TypeVal).PAT; // Delete the return type handle
4401 delete (yyvsp[-1].TypeList); // Delete the argument list
4406 #line 2169 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4407 { // Sized array type?
4408 (yyval.TypeVal).S.makeComposite((yyvsp[-1].TypeVal).S);
4409 (yyval.TypeVal).PAT = new PATypeHolder(HandleUpRefs(ArrayType::get((yyvsp[-1].TypeVal).PAT->get(),
4410 (unsigned)(yyvsp[-3].UInt64Val)), (yyval.TypeVal).S));
4411 delete (yyvsp[-1].TypeVal).PAT;
4416 #line 2175 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4418 const llvm::Type* ElemTy = (yyvsp[-1].TypeVal).PAT->get();
4419 if ((unsigned)(yyvsp[-3].UInt64Val) != (yyvsp[-3].UInt64Val))
4420 error("Unsigned result not equal to signed result");
4421 if (!(ElemTy->isInteger() || ElemTy->isFloatingPoint()))
4422 error("Elements of a VectorType must be integer or floating point");
4423 if (!isPowerOf2_32((yyvsp[-3].UInt64Val)))
4424 error("VectorType length should be a power of 2");
4425 (yyval.TypeVal).S.makeComposite((yyvsp[-1].TypeVal).S);
4426 (yyval.TypeVal).PAT = new PATypeHolder(HandleUpRefs(VectorType::get(ElemTy,
4427 (unsigned)(yyvsp[-3].UInt64Val)), (yyval.TypeVal).S));
4428 delete (yyvsp[-1].TypeVal).PAT;
4433 #line 2188 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4434 { // Structure type?
4435 std::vector<const Type*> Elements;
4436 (yyval.TypeVal).S.makeComposite();
4437 for (std::list<llvm::PATypeInfo>::iterator I = (yyvsp[-1].TypeList)->begin(),
4438 E = (yyvsp[-1].TypeList)->end(); I != E; ++I) {
4439 Elements.push_back(I->PAT->get());
4440 (yyval.TypeVal).S.add(I->S);
4442 (yyval.TypeVal).PAT = new PATypeHolder(HandleUpRefs(StructType::get(Elements), (yyval.TypeVal).S));
4443 delete (yyvsp[-1].TypeList);
4448 #line 2199 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4449 { // Empty structure type?
4450 (yyval.TypeVal).PAT = new PATypeHolder(StructType::get(std::vector<const Type*>()));
4451 (yyval.TypeVal).S.makeComposite();
4456 #line 2203 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4457 { // Packed Structure type?
4458 (yyval.TypeVal).S.makeComposite();
4459 std::vector<const Type*> Elements;
4460 for (std::list<llvm::PATypeInfo>::iterator I = (yyvsp[-2].TypeList)->begin(),
4461 E = (yyvsp[-2].TypeList)->end(); I != E; ++I) {
4462 Elements.push_back(I->PAT->get());
4463 (yyval.TypeVal).S.add(I->S);
4466 (yyval.TypeVal).PAT = new PATypeHolder(HandleUpRefs(StructType::get(Elements, true),
4467 (yyval.TypeVal).S));
4468 delete (yyvsp[-2].TypeList);
4473 #line 2216 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4474 { // Empty packed structure type?
4475 (yyval.TypeVal).PAT = new PATypeHolder(StructType::get(std::vector<const Type*>(),true));
4476 (yyval.TypeVal).S.makeComposite();
4481 #line 2220 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4483 if ((yyvsp[-1].TypeVal).PAT->get() == Type::LabelTy)
4484 error("Cannot form a pointer to a basic block");
4485 (yyval.TypeVal).S.makeComposite((yyvsp[-1].TypeVal).S);
4486 (yyval.TypeVal).PAT = new PATypeHolder(HandleUpRefs(PointerType::get((yyvsp[-1].TypeVal).PAT->get()),
4487 (yyval.TypeVal).S));
4488 delete (yyvsp[-1].TypeVal).PAT;
4493 #line 2234 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4495 (yyval.TypeList) = new std::list<PATypeInfo>();
4496 (yyval.TypeList)->push_back((yyvsp[0].TypeVal));
4501 #line 2238 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4503 ((yyval.TypeList)=(yyvsp[-2].TypeList))->push_back((yyvsp[0].TypeVal));
4508 #line 2246 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4511 VoidTI.PAT = new PATypeHolder(Type::VoidTy);
4512 VoidTI.S.makeSignless();
4513 ((yyval.TypeList)=(yyvsp[-2].TypeList))->push_back(VoidTI);
4518 #line 2252 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4520 (yyval.TypeList) = new std::list<PATypeInfo>();
4522 VoidTI.PAT = new PATypeHolder(Type::VoidTy);
4523 VoidTI.S.makeSignless();
4524 (yyval.TypeList)->push_back(VoidTI);
4529 #line 2259 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4531 (yyval.TypeList) = new std::list<PATypeInfo>();
4536 #line 2271 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4537 { // Nonempty unsized arr
4538 const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[-3].TypeVal).PAT->get());
4540 error("Cannot make array constant with type: '" +
4541 (yyvsp[-3].TypeVal).PAT->get()->getDescription() + "'");
4542 const Type *ETy = ATy->getElementType();
4543 int NumElements = ATy->getNumElements();
4545 // Verify that we have the correct size...
4546 if (NumElements != -1 && NumElements != (int)(yyvsp[-1].ConstVector)->size())
4547 error("Type mismatch: constant sized array initialized with " +
4548 utostr((yyvsp[-1].ConstVector)->size()) + " arguments, but has size of " +
4549 itostr(NumElements) + "");
4551 // Verify all elements are correct type!
4552 std::vector<Constant*> Elems;
4553 for (unsigned i = 0; i < (yyvsp[-1].ConstVector)->size(); i++) {
4554 Constant *C = (*(yyvsp[-1].ConstVector))[i].C;
4555 const Type* ValTy = C->getType();
4557 error("Element #" + utostr(i) + " is not of type '" +
4558 ETy->getDescription() +"' as required!\nIt is of type '"+
4559 ValTy->getDescription() + "'");
4562 (yyval.ConstVal).C = ConstantArray::get(ATy, Elems);
4563 (yyval.ConstVal).S.copy((yyvsp[-3].TypeVal).S);
4564 delete (yyvsp[-3].TypeVal).PAT;
4565 delete (yyvsp[-1].ConstVector);
4570 #line 2301 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4572 const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[-2].TypeVal).PAT->get());
4574 error("Cannot make array constant with type: '" +
4575 (yyvsp[-2].TypeVal).PAT->get()->getDescription() + "'");
4576 int NumElements = ATy->getNumElements();
4577 if (NumElements != -1 && NumElements != 0)
4578 error("Type mismatch: constant sized array initialized with 0"
4579 " arguments, but has size of " + itostr(NumElements) +"");
4580 (yyval.ConstVal).C = ConstantArray::get(ATy, std::vector<Constant*>());
4581 (yyval.ConstVal).S.copy((yyvsp[-2].TypeVal).S);
4582 delete (yyvsp[-2].TypeVal).PAT;
4587 #line 2314 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4589 const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[-2].TypeVal).PAT->get());
4591 error("Cannot make array constant with type: '" +
4592 (yyvsp[-2].TypeVal).PAT->get()->getDescription() + "'");
4593 int NumElements = ATy->getNumElements();
4594 const Type *ETy = dyn_cast<IntegerType>(ATy->getElementType());
4595 if (!ETy || cast<IntegerType>(ETy)->getBitWidth() != 8)
4596 error("String arrays require type i8, not '" + ETy->getDescription() +
4598 char *EndStr = UnEscapeLexed((yyvsp[0].StrVal), true);
4599 if (NumElements != -1 && NumElements != (EndStr-(yyvsp[0].StrVal)))
4600 error("Can't build string constant of size " +
4601 itostr((int)(EndStr-(yyvsp[0].StrVal))) + " when array has size " +
4602 itostr(NumElements) + "");
4603 std::vector<Constant*> Vals;
4604 for (char *C = (char *)(yyvsp[0].StrVal); C != (char *)EndStr; ++C)
4605 Vals.push_back(ConstantInt::get(ETy, *C));
4606 free((yyvsp[0].StrVal));
4607 (yyval.ConstVal).C = ConstantArray::get(ATy, Vals);
4608 (yyval.ConstVal).S.copy((yyvsp[-2].TypeVal).S);
4609 delete (yyvsp[-2].TypeVal).PAT;
4614 #line 2337 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4615 { // Nonempty unsized arr
4616 const VectorType *PTy = dyn_cast<VectorType>((yyvsp[-3].TypeVal).PAT->get());
4618 error("Cannot make packed constant with type: '" +
4619 (yyvsp[-3].TypeVal).PAT->get()->getDescription() + "'");
4620 const Type *ETy = PTy->getElementType();
4621 int NumElements = PTy->getNumElements();
4622 // Verify that we have the correct size...
4623 if (NumElements != -1 && NumElements != (int)(yyvsp[-1].ConstVector)->size())
4624 error("Type mismatch: constant sized packed initialized with " +
4625 utostr((yyvsp[-1].ConstVector)->size()) + " arguments, but has size of " +
4626 itostr(NumElements) + "");
4627 // Verify all elements are correct type!
4628 std::vector<Constant*> Elems;
4629 for (unsigned i = 0; i < (yyvsp[-1].ConstVector)->size(); i++) {
4630 Constant *C = (*(yyvsp[-1].ConstVector))[i].C;
4631 const Type* ValTy = C->getType();
4633 error("Element #" + utostr(i) + " is not of type '" +
4634 ETy->getDescription() +"' as required!\nIt is of type '"+
4635 ValTy->getDescription() + "'");
4638 (yyval.ConstVal).C = ConstantVector::get(PTy, Elems);
4639 (yyval.ConstVal).S.copy((yyvsp[-3].TypeVal).S);
4640 delete (yyvsp[-3].TypeVal).PAT;
4641 delete (yyvsp[-1].ConstVector);
4646 #line 2365 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4648 const StructType *STy = dyn_cast<StructType>((yyvsp[-3].TypeVal).PAT->get());
4650 error("Cannot make struct constant with type: '" +
4651 (yyvsp[-3].TypeVal).PAT->get()->getDescription() + "'");
4652 if ((yyvsp[-1].ConstVector)->size() != STy->getNumContainedTypes())
4653 error("Illegal number of initializers for structure type");
4655 // Check to ensure that constants are compatible with the type initializer!
4656 std::vector<Constant*> Fields;
4657 for (unsigned i = 0, e = (yyvsp[-1].ConstVector)->size(); i != e; ++i) {
4658 Constant *C = (*(yyvsp[-1].ConstVector))[i].C;
4659 if (C->getType() != STy->getElementType(i))
4660 error("Expected type '" + STy->getElementType(i)->getDescription() +
4661 "' for element #" + utostr(i) + " of structure initializer");
4662 Fields.push_back(C);
4664 (yyval.ConstVal).C = ConstantStruct::get(STy, Fields);
4665 (yyval.ConstVal).S.copy((yyvsp[-3].TypeVal).S);
4666 delete (yyvsp[-3].TypeVal).PAT;
4667 delete (yyvsp[-1].ConstVector);
4672 #line 2387 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4674 const StructType *STy = dyn_cast<StructType>((yyvsp[-2].TypeVal).PAT->get());
4676 error("Cannot make struct constant with type: '" +
4677 (yyvsp[-2].TypeVal).PAT->get()->getDescription() + "'");
4678 if (STy->getNumContainedTypes() != 0)
4679 error("Illegal number of initializers for structure type");
4680 (yyval.ConstVal).C = ConstantStruct::get(STy, std::vector<Constant*>());
4681 (yyval.ConstVal).S.copy((yyvsp[-2].TypeVal).S);
4682 delete (yyvsp[-2].TypeVal).PAT;
4687 #line 2398 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4689 const StructType *STy = dyn_cast<StructType>((yyvsp[-5].TypeVal).PAT->get());
4691 error("Cannot make packed struct constant with type: '" +
4692 (yyvsp[-5].TypeVal).PAT->get()->getDescription() + "'");
4693 if ((yyvsp[-2].ConstVector)->size() != STy->getNumContainedTypes())
4694 error("Illegal number of initializers for packed structure type");
4696 // Check to ensure that constants are compatible with the type initializer!
4697 std::vector<Constant*> Fields;
4698 for (unsigned i = 0, e = (yyvsp[-2].ConstVector)->size(); i != e; ++i) {
4699 Constant *C = (*(yyvsp[-2].ConstVector))[i].C;
4700 if (C->getType() != STy->getElementType(i))
4701 error("Expected type '" + STy->getElementType(i)->getDescription() +
4702 "' for element #" + utostr(i) + " of packed struct initializer");
4703 Fields.push_back(C);
4705 (yyval.ConstVal).C = ConstantStruct::get(STy, Fields);
4706 (yyval.ConstVal).S.copy((yyvsp[-5].TypeVal).S);
4707 delete (yyvsp[-5].TypeVal).PAT;
4708 delete (yyvsp[-2].ConstVector);
4713 #line 2420 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4715 const StructType *STy = dyn_cast<StructType>((yyvsp[-4].TypeVal).PAT->get());
4717 error("Cannot make packed struct constant with type: '" +
4718 (yyvsp[-4].TypeVal).PAT->get()->getDescription() + "'");
4719 if (STy->getNumContainedTypes() != 0)
4720 error("Illegal number of initializers for packed structure type");
4721 (yyval.ConstVal).C = ConstantStruct::get(STy, std::vector<Constant*>());
4722 (yyval.ConstVal).S.copy((yyvsp[-4].TypeVal).S);
4723 delete (yyvsp[-4].TypeVal).PAT;
4728 #line 2431 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4730 const PointerType *PTy = dyn_cast<PointerType>((yyvsp[-1].TypeVal).PAT->get());
4732 error("Cannot make null pointer constant with type: '" +
4733 (yyvsp[-1].TypeVal).PAT->get()->getDescription() + "'");
4734 (yyval.ConstVal).C = ConstantPointerNull::get(PTy);
4735 (yyval.ConstVal).S.copy((yyvsp[-1].TypeVal).S);
4736 delete (yyvsp[-1].TypeVal).PAT;
4741 #line 2440 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4743 (yyval.ConstVal).C = UndefValue::get((yyvsp[-1].TypeVal).PAT->get());
4744 (yyval.ConstVal).S.copy((yyvsp[-1].TypeVal).S);
4745 delete (yyvsp[-1].TypeVal).PAT;
4750 #line 2445 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4752 const PointerType *Ty = dyn_cast<PointerType>((yyvsp[-1].TypeVal).PAT->get());
4754 error("Global const reference must be a pointer type, not" +
4755 (yyvsp[-1].TypeVal).PAT->get()->getDescription());
4757 // ConstExprs can exist in the body of a function, thus creating
4758 // GlobalValues whenever they refer to a variable. Because we are in
4759 // the context of a function, getExistingValue will search the functions
4760 // symbol table instead of the module symbol table for the global symbol,
4761 // which throws things all off. To get around this, we just tell
4762 // getExistingValue that we are at global scope here.
4764 Function *SavedCurFn = CurFun.CurrentFunction;
4765 CurFun.CurrentFunction = 0;
4766 (yyvsp[0].ValIDVal).S.copy((yyvsp[-1].TypeVal).S);
4767 Value *V = getExistingValue(Ty, (yyvsp[0].ValIDVal));
4768 CurFun.CurrentFunction = SavedCurFn;
4770 // If this is an initializer for a constant pointer, which is referencing a
4771 // (currently) undefined variable, create a stub now that shall be replaced
4772 // in the future with the right type of variable.
4775 assert(isa<PointerType>(Ty) && "Globals may only be used as pointers");
4776 const PointerType *PT = cast<PointerType>(Ty);
4778 // First check to see if the forward references value is already created!
4779 PerModuleInfo::GlobalRefsType::iterator I =
4780 CurModule.GlobalRefs.find(std::make_pair(PT, (yyvsp[0].ValIDVal)));
4782 if (I != CurModule.GlobalRefs.end()) {
4783 V = I->second; // Placeholder already exists, use it...
4784 (yyvsp[0].ValIDVal).destroy();
4787 if ((yyvsp[0].ValIDVal).Type == ValID::NameVal) Name = (yyvsp[0].ValIDVal).Name;
4789 // Create the forward referenced global.
4791 if (const FunctionType *FTy =
4792 dyn_cast<FunctionType>(PT->getElementType())) {
4793 GV = new Function(FTy, GlobalValue::ExternalLinkage, Name,
4794 CurModule.CurrentModule);
4796 GV = new GlobalVariable(PT->getElementType(), false,
4797 GlobalValue::ExternalLinkage, 0,
4798 Name, CurModule.CurrentModule);
4801 // Keep track of the fact that we have a forward ref to recycle it
4802 CurModule.GlobalRefs.insert(std::make_pair(std::make_pair(PT, (yyvsp[0].ValIDVal)), GV));
4806 (yyval.ConstVal).C = cast<GlobalValue>(V);
4807 (yyval.ConstVal).S.copy((yyvsp[-1].TypeVal).S);
4808 delete (yyvsp[-1].TypeVal).PAT; // Free the type handle
4813 #line 2504 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4815 if ((yyvsp[-1].TypeVal).PAT->get() != (yyvsp[0].ConstVal).C->getType())
4816 error("Mismatched types for constant expression");
4817 (yyval.ConstVal) = (yyvsp[0].ConstVal);
4818 (yyval.ConstVal).S.copy((yyvsp[-1].TypeVal).S);
4819 delete (yyvsp[-1].TypeVal).PAT;
4824 #line 2511 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4826 const Type *Ty = (yyvsp[-1].TypeVal).PAT->get();
4827 if (isa<FunctionType>(Ty) || Ty == Type::LabelTy || isa<OpaqueType>(Ty))
4828 error("Cannot create a null initialized value of this type");
4829 (yyval.ConstVal).C = Constant::getNullValue(Ty);
4830 (yyval.ConstVal).S.copy((yyvsp[-1].TypeVal).S);
4831 delete (yyvsp[-1].TypeVal).PAT;
4836 #line 2519 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4837 { // integral constants
4838 const Type *Ty = (yyvsp[-1].PrimType).T;
4839 if (!ConstantInt::isValueValidForType(Ty, (yyvsp[0].SInt64Val)))
4840 error("Constant value doesn't fit in type");
4841 (yyval.ConstVal).C = ConstantInt::get(Ty, (yyvsp[0].SInt64Val));
4842 (yyval.ConstVal).S.makeSigned();
4847 #line 2526 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4848 { // integral constants
4849 const Type *Ty = (yyvsp[-1].PrimType).T;
4850 if (!ConstantInt::isValueValidForType(Ty, (yyvsp[0].UInt64Val)))
4851 error("Constant value doesn't fit in type");
4852 (yyval.ConstVal).C = ConstantInt::get(Ty, (yyvsp[0].UInt64Val));
4853 (yyval.ConstVal).S.makeUnsigned();
4858 #line 2533 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4859 { // Boolean constants
4860 (yyval.ConstVal).C = ConstantInt::get(Type::Int1Ty, true);
4861 (yyval.ConstVal).S.makeUnsigned();
4866 #line 2537 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4867 { // Boolean constants
4868 (yyval.ConstVal).C = ConstantInt::get(Type::Int1Ty, false);
4869 (yyval.ConstVal).S.makeUnsigned();
4874 #line 2541 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4875 { // Float & Double constants
4876 if (!ConstantFP::isValueValidForType((yyvsp[-1].PrimType).T, (yyvsp[0].FPVal)))
4877 error("Floating point constant invalid for type");
4878 (yyval.ConstVal).C = ConstantFP::get((yyvsp[-1].PrimType).T, (yyvsp[0].FPVal));
4879 (yyval.ConstVal).S.makeSignless();
4884 #line 2550 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4886 const Type* SrcTy = (yyvsp[-3].ConstVal).C->getType();
4887 const Type* DstTy = (yyvsp[-1].TypeVal).PAT->get();
4888 Signedness SrcSign((yyvsp[-3].ConstVal).S);
4889 Signedness DstSign((yyvsp[-1].TypeVal).S);
4890 if (!SrcTy->isFirstClassType())
4891 error("cast constant expression from a non-primitive type: '" +
4892 SrcTy->getDescription() + "'");
4893 if (!DstTy->isFirstClassType())
4894 error("cast constant expression to a non-primitive type: '" +
4895 DstTy->getDescription() + "'");
4896 (yyval.ConstVal).C = cast<Constant>(getCast((yyvsp[-5].CastOpVal), (yyvsp[-3].ConstVal).C, SrcSign, DstTy, DstSign));
4897 (yyval.ConstVal).S.copy(DstSign);
4898 delete (yyvsp[-1].TypeVal).PAT;
4903 #line 2565 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4905 const Type *Ty = (yyvsp[-2].ConstVal).C->getType();
4906 if (!isa<PointerType>(Ty))
4907 error("GetElementPtr requires a pointer operand");
4909 std::vector<Constant*> CIndices;
4910 upgradeGEPCEIndices((yyvsp[-2].ConstVal).C->getType(), (yyvsp[-1].ValueList), CIndices);
4912 delete (yyvsp[-1].ValueList);
4913 (yyval.ConstVal).C = ConstantExpr::getGetElementPtr((yyvsp[-2].ConstVal).C, &CIndices[0], CIndices.size());
4914 (yyval.ConstVal).S.copy(getElementSign((yyvsp[-2].ConstVal), CIndices));
4919 #line 2577 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4921 if (!(yyvsp[-5].ConstVal).C->getType()->isInteger() ||
4922 cast<IntegerType>((yyvsp[-5].ConstVal).C->getType())->getBitWidth() != 1)
4923 error("Select condition must be bool type");
4924 if ((yyvsp[-3].ConstVal).C->getType() != (yyvsp[-1].ConstVal).C->getType())
4925 error("Select operand types must match");
4926 (yyval.ConstVal).C = ConstantExpr::getSelect((yyvsp[-5].ConstVal).C, (yyvsp[-3].ConstVal).C, (yyvsp[-1].ConstVal).C);
4927 (yyval.ConstVal).S.copy((yyvsp[-3].ConstVal).S);
4932 #line 2586 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4934 const Type *Ty = (yyvsp[-3].ConstVal).C->getType();
4935 if (Ty != (yyvsp[-1].ConstVal).C->getType())
4936 error("Binary operator types must match");
4937 // First, make sure we're dealing with the right opcode by upgrading from
4938 // obsolete versions.
4939 Instruction::BinaryOps Opcode = getBinaryOp((yyvsp[-5].BinaryOpVal), Ty, (yyvsp[-3].ConstVal).S);
4941 // HACK: llvm 1.3 and earlier used to emit invalid pointer constant exprs.
4942 // To retain backward compatibility with these early compilers, we emit a
4943 // cast to the appropriate integer type automatically if we are in the
4944 // broken case. See PR424 for more information.
4945 if (!isa<PointerType>(Ty)) {
4946 (yyval.ConstVal).C = ConstantExpr::get(Opcode, (yyvsp[-3].ConstVal).C, (yyvsp[-1].ConstVal).C);
4948 const Type *IntPtrTy = 0;
4949 switch (CurModule.CurrentModule->getPointerSize()) {
4950 case Module::Pointer32: IntPtrTy = Type::Int32Ty; break;
4951 case Module::Pointer64: IntPtrTy = Type::Int64Ty; break;
4952 default: error("invalid pointer binary constant expr");
4954 (yyval.ConstVal).C = ConstantExpr::get(Opcode,
4955 ConstantExpr::getCast(Instruction::PtrToInt, (yyvsp[-3].ConstVal).C, IntPtrTy),
4956 ConstantExpr::getCast(Instruction::PtrToInt, (yyvsp[-1].ConstVal).C, IntPtrTy));
4957 (yyval.ConstVal).C = ConstantExpr::getCast(Instruction::IntToPtr, (yyval.ConstVal).C, Ty);
4959 (yyval.ConstVal).S.copy((yyvsp[-3].ConstVal).S);
4964 #line 2614 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4966 const Type* Ty = (yyvsp[-3].ConstVal).C->getType();
4967 if (Ty != (yyvsp[-1].ConstVal).C->getType())
4968 error("Logical operator types must match");
4969 if (!Ty->isInteger()) {
4970 if (!isa<VectorType>(Ty) ||
4971 !cast<VectorType>(Ty)->getElementType()->isInteger())
4972 error("Logical operator requires integer operands");
4974 Instruction::BinaryOps Opcode = getBinaryOp((yyvsp[-5].BinaryOpVal), Ty, (yyvsp[-3].ConstVal).S);
4975 (yyval.ConstVal).C = ConstantExpr::get(Opcode, (yyvsp[-3].ConstVal).C, (yyvsp[-1].ConstVal).C);
4976 (yyval.ConstVal).S.copy((yyvsp[-3].ConstVal).S);
4981 #line 2627 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4983 const Type* Ty = (yyvsp[-3].ConstVal).C->getType();
4984 if (Ty != (yyvsp[-1].ConstVal).C->getType())
4985 error("setcc operand types must match");
4986 unsigned short pred;
4987 Instruction::OtherOps Opcode = getCompareOp((yyvsp[-5].BinaryOpVal), pred, Ty, (yyvsp[-3].ConstVal).S);
4988 (yyval.ConstVal).C = ConstantExpr::getCompare(Opcode, (yyvsp[-3].ConstVal).C, (yyvsp[-1].ConstVal).C);
4989 (yyval.ConstVal).S.makeUnsigned();
4994 #line 2636 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4996 if ((yyvsp[-3].ConstVal).C->getType() != (yyvsp[-1].ConstVal).C->getType())
4997 error("icmp operand types must match");
4998 (yyval.ConstVal).C = ConstantExpr::getCompare((yyvsp[-5].IPred), (yyvsp[-3].ConstVal).C, (yyvsp[-1].ConstVal).C);
4999 (yyval.ConstVal).S.makeUnsigned();
5004 #line 2642 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5006 if ((yyvsp[-3].ConstVal).C->getType() != (yyvsp[-1].ConstVal).C->getType())
5007 error("fcmp operand types must match");
5008 (yyval.ConstVal).C = ConstantExpr::getCompare((yyvsp[-5].FPred), (yyvsp[-3].ConstVal).C, (yyvsp[-1].ConstVal).C);
5009 (yyval.ConstVal).S.makeUnsigned();
5014 #line 2648 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5016 if (!(yyvsp[-1].ConstVal).C->getType()->isInteger() ||
5017 cast<IntegerType>((yyvsp[-1].ConstVal).C->getType())->getBitWidth() != 8)
5018 error("Shift count for shift constant must be unsigned byte");
5019 const Type* Ty = (yyvsp[-3].ConstVal).C->getType();
5020 if (!(yyvsp[-3].ConstVal).C->getType()->isInteger())
5021 error("Shift constant expression requires integer operand");
5022 Constant *ShiftAmt = ConstantExpr::getZExt((yyvsp[-1].ConstVal).C, Ty);
5023 (yyval.ConstVal).C = ConstantExpr::get(getBinaryOp((yyvsp[-5].BinaryOpVal), Ty, (yyvsp[-3].ConstVal).S), (yyvsp[-3].ConstVal).C, ShiftAmt);
5024 (yyval.ConstVal).S.copy((yyvsp[-3].ConstVal).S);
5029 #line 2659 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5031 if (!ExtractElementInst::isValidOperands((yyvsp[-3].ConstVal).C, (yyvsp[-1].ConstVal).C))
5032 error("Invalid extractelement operands");
5033 (yyval.ConstVal).C = ConstantExpr::getExtractElement((yyvsp[-3].ConstVal).C, (yyvsp[-1].ConstVal).C);
5034 (yyval.ConstVal).S.copy((yyvsp[-3].ConstVal).S.get(0));
5039 #line 2665 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5041 if (!InsertElementInst::isValidOperands((yyvsp[-5].ConstVal).C, (yyvsp[-3].ConstVal).C, (yyvsp[-1].ConstVal).C))
5042 error("Invalid insertelement operands");
5043 (yyval.ConstVal).C = ConstantExpr::getInsertElement((yyvsp[-5].ConstVal).C, (yyvsp[-3].ConstVal).C, (yyvsp[-1].ConstVal).C);
5044 (yyval.ConstVal).S.copy((yyvsp[-5].ConstVal).S);
5049 #line 2671 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5051 if (!ShuffleVectorInst::isValidOperands((yyvsp[-5].ConstVal).C, (yyvsp[-3].ConstVal).C, (yyvsp[-1].ConstVal).C))
5052 error("Invalid shufflevector operands");
5053 (yyval.ConstVal).C = ConstantExpr::getShuffleVector((yyvsp[-5].ConstVal).C, (yyvsp[-3].ConstVal).C, (yyvsp[-1].ConstVal).C);
5054 (yyval.ConstVal).S.copy((yyvsp[-5].ConstVal).S);
5059 #line 2682 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5060 { ((yyval.ConstVector) = (yyvsp[-2].ConstVector))->push_back((yyvsp[0].ConstVal)); ;}
5064 #line 2683 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5066 (yyval.ConstVector) = new std::vector<ConstInfo>();
5067 (yyval.ConstVector)->push_back((yyvsp[0].ConstVal));
5072 #line 2692 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5073 { (yyval.BoolVal) = false; ;}
5077 #line 2693 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5078 { (yyval.BoolVal) = true; ;}
5082 #line 2705 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5084 (yyval.ModuleVal) = ParserResult = (yyvsp[0].ModuleVal);
5085 CurModule.ModuleDone();
5090 #line 2714 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5091 { (yyval.ModuleVal) = (yyvsp[-1].ModuleVal); CurFun.FunctionDone(); ;}
5095 #line 2715 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5096 { (yyval.ModuleVal) = (yyvsp[-1].ModuleVal); ;}
5100 #line 2716 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5101 { (yyval.ModuleVal) = (yyvsp[-3].ModuleVal); ;}
5105 #line 2717 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5106 { (yyval.ModuleVal) = (yyvsp[-1].ModuleVal); ;}
5110 #line 2718 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5112 (yyval.ModuleVal) = CurModule.CurrentModule;
5113 // Emit an error if there are any unresolved types left.
5114 if (!CurModule.LateResolveTypes.empty()) {
5115 const ValID &DID = CurModule.LateResolveTypes.begin()->first;
5116 if (DID.Type == ValID::NameVal) {
5117 error("Reference to an undefined type: '"+DID.getName() + "'");
5119 error("Reference to an undefined type: #" + itostr(DID.Num));
5126 #line 2734 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5128 // Eagerly resolve types. This is not an optimization, this is a
5129 // requirement that is due to the fact that we could have this:
5131 // %list = type { %list * }
5132 // %list = type { %list * } ; repeated type decl
5134 // If types are not resolved eagerly, then the two types will not be
5135 // determined to be the same type!
5137 ResolveTypeTo((yyvsp[-2].StrVal), (yyvsp[0].TypeVal).PAT->get(), (yyvsp[0].TypeVal).S);
5139 if (!setTypeName((yyvsp[0].TypeVal), (yyvsp[-2].StrVal)) && !(yyvsp[-2].StrVal)) {
5140 // If this is a numbered type that is not a redefinition, add it to the
5142 CurModule.Types.push_back((yyvsp[0].TypeVal).PAT->get());
5143 CurModule.TypeSigns.push_back((yyvsp[0].TypeVal).S);
5145 delete (yyvsp[0].TypeVal).PAT;
5150 #line 2754 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5151 { // Function prototypes can be in const pool
5156 #line 2756 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5157 { // Asm blocks can be in the const pool
5162 #line 2758 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5164 if ((yyvsp[0].ConstVal).C == 0)
5165 error("Global value initializer is not a constant");
5166 CurGV = ParseGlobalVariable((yyvsp[-3].StrVal), (yyvsp[-2].Linkage), (yyvsp[-1].BoolVal), (yyvsp[0].ConstVal).C->getType(), (yyvsp[0].ConstVal).C, (yyvsp[0].ConstVal).S);
5171 #line 2762 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5178 #line 2765 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5180 const Type *Ty = (yyvsp[0].TypeVal).PAT->get();
5181 CurGV = ParseGlobalVariable((yyvsp[-3].StrVal), GlobalValue::ExternalLinkage, (yyvsp[-1].BoolVal), Ty, 0,
5182 (yyvsp[0].TypeVal).S);
5183 delete (yyvsp[0].TypeVal).PAT;
5188 #line 2770 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5195 #line 2773 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5197 const Type *Ty = (yyvsp[0].TypeVal).PAT->get();
5198 CurGV = ParseGlobalVariable((yyvsp[-3].StrVal), GlobalValue::DLLImportLinkage, (yyvsp[-1].BoolVal), Ty, 0,
5199 (yyvsp[0].TypeVal).S);
5200 delete (yyvsp[0].TypeVal).PAT;
5205 #line 2778 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5212 #line 2781 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5214 const Type *Ty = (yyvsp[0].TypeVal).PAT->get();
5216 ParseGlobalVariable((yyvsp[-3].StrVal), GlobalValue::ExternalWeakLinkage, (yyvsp[-1].BoolVal), Ty, 0,
5217 (yyvsp[0].TypeVal).S);
5218 delete (yyvsp[0].TypeVal).PAT;
5223 #line 2787 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5230 #line 2790 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5236 #line 2792 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5242 #line 2794 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5248 #line 2799 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5250 const std::string &AsmSoFar = CurModule.CurrentModule->getModuleInlineAsm();
5251 char *EndStr = UnEscapeLexed((yyvsp[0].StrVal), true);
5252 std::string NewAsm((yyvsp[0].StrVal), EndStr);
5253 free((yyvsp[0].StrVal));
5255 if (AsmSoFar.empty())
5256 CurModule.CurrentModule->setModuleInlineAsm(NewAsm);
5258 CurModule.CurrentModule->setModuleInlineAsm(AsmSoFar+"\n"+NewAsm);
5263 #line 2813 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5264 { (yyval.Endianness) = Module::BigEndian; ;}
5268 #line 2814 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5269 { (yyval.Endianness) = Module::LittleEndian; ;}
5273 #line 2818 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5275 CurModule.setEndianness((yyvsp[0].Endianness));
5280 #line 2821 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5282 if ((yyvsp[0].UInt64Val) == 32)
5283 CurModule.setPointerSize(Module::Pointer32);
5284 else if ((yyvsp[0].UInt64Val) == 64)
5285 CurModule.setPointerSize(Module::Pointer64);
5287 error("Invalid pointer size: '" + utostr((yyvsp[0].UInt64Val)) + "'");
5292 #line 2829 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5294 CurModule.CurrentModule->setTargetTriple((yyvsp[0].StrVal));
5295 free((yyvsp[0].StrVal));
5300 #line 2833 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5302 CurModule.CurrentModule->setDataLayout((yyvsp[0].StrVal));
5303 free((yyvsp[0].StrVal));
5308 #line 2844 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5310 CurModule.CurrentModule->addLibrary((yyvsp[0].StrVal));
5311 free((yyvsp[0].StrVal));
5316 #line 2848 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5318 CurModule.CurrentModule->addLibrary((yyvsp[0].StrVal));
5319 free((yyvsp[0].StrVal));
5324 #line 2852 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5329 #line 2865 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5330 { (yyval.StrVal) = 0; ;}
5334 #line 2869 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5336 if ((yyvsp[-1].TypeVal).PAT->get() == Type::VoidTy)
5337 error("void typed arguments are invalid");
5338 (yyval.ArgVal) = new std::pair<PATypeInfo, char*>((yyvsp[-1].TypeVal), (yyvsp[0].StrVal));
5343 #line 2877 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5345 (yyval.ArgList) = (yyvsp[-2].ArgList);
5346 (yyval.ArgList)->push_back(*(yyvsp[0].ArgVal));
5347 delete (yyvsp[0].ArgVal);
5352 #line 2882 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5354 (yyval.ArgList) = new std::vector<std::pair<PATypeInfo,char*> >();
5355 (yyval.ArgList)->push_back(*(yyvsp[0].ArgVal));
5356 delete (yyvsp[0].ArgVal);
5361 #line 2890 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5362 { (yyval.ArgList) = (yyvsp[0].ArgList); ;}
5366 #line 2891 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5368 (yyval.ArgList) = (yyvsp[-2].ArgList);
5370 VoidTI.PAT = new PATypeHolder(Type::VoidTy);
5371 VoidTI.S.makeSignless();
5372 (yyval.ArgList)->push_back(std::pair<PATypeInfo, char*>(VoidTI, 0));
5377 #line 2898 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5379 (yyval.ArgList) = new std::vector<std::pair<PATypeInfo,char*> >();
5381 VoidTI.PAT = new PATypeHolder(Type::VoidTy);
5382 VoidTI.S.makeSignless();
5383 (yyval.ArgList)->push_back(std::pair<PATypeInfo, char*>(VoidTI, 0));
5388 #line 2905 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5389 { (yyval.ArgList) = 0; ;}
5393 #line 2909 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5395 UnEscapeLexed((yyvsp[-5].StrVal));
5396 std::string FunctionName((yyvsp[-5].StrVal));
5397 free((yyvsp[-5].StrVal)); // Free strdup'd memory!
5399 const Type* RetTy = (yyvsp[-6].TypeVal).PAT->get();
5401 if (!RetTy->isFirstClassType() && RetTy != Type::VoidTy)
5402 error("LLVM functions cannot return aggregate types");
5405 FTySign.makeComposite((yyvsp[-6].TypeVal).S);
5406 std::vector<const Type*> ParamTyList;
5408 // In LLVM 2.0 the signatures of three varargs intrinsics changed to take
5409 // i8*. We check here for those names and override the parameter list
5410 // types to ensure the prototype is correct.
5411 if (FunctionName == "llvm.va_start" || FunctionName == "llvm.va_end") {
5412 ParamTyList.push_back(PointerType::get(Type::Int8Ty));
5413 } else if (FunctionName == "llvm.va_copy") {
5414 ParamTyList.push_back(PointerType::get(Type::Int8Ty));
5415 ParamTyList.push_back(PointerType::get(Type::Int8Ty));
5416 } else if ((yyvsp[-3].ArgList)) { // If there are arguments...
5417 for (std::vector<std::pair<PATypeInfo,char*> >::iterator
5418 I = (yyvsp[-3].ArgList)->begin(), E = (yyvsp[-3].ArgList)->end(); I != E; ++I) {
5419 const Type *Ty = I->first.PAT->get();
5420 ParamTyList.push_back(Ty);
5421 FTySign.add(I->first.S);
5425 bool isVarArg = ParamTyList.size() && ParamTyList.back() == Type::VoidTy;
5427 ParamTyList.pop_back();
5429 // Convert the CSRet calling convention into the corresponding parameter
5431 ParamAttrsList *PAL = 0;
5432 if ((yyvsp[-7].UIntVal) == OldCallingConv::CSRet) {
5433 ParamAttrsVector Attrs;
5434 ParamAttrsWithIndex PAWI;
5435 PAWI.index = 1; PAWI.attrs = ParamAttr::StructRet; // first arg
5436 Attrs.push_back(PAWI);
5437 PAL = ParamAttrsList::get(Attrs);
5440 const FunctionType *FT =
5441 FunctionType::get(RetTy, ParamTyList, isVarArg, PAL);
5442 const PointerType *PFT = PointerType::get(FT);
5443 delete (yyvsp[-6].TypeVal).PAT;
5446 if (!FunctionName.empty()) {
5447 ID = ValID::create((char*)FunctionName.c_str());
5449 ID = ValID::create((int)CurModule.Values[PFT].size());
5451 ID.S.makeComposite(FTySign);
5454 Module* M = CurModule.CurrentModule;
5456 // See if this function was forward referenced. If so, recycle the object.
5457 if (GlobalValue *FWRef = CurModule.GetForwardRefForGlobal(PFT, ID)) {
5458 // Move the function to the end of the list, from whereever it was
5459 // previously inserted.
5460 Fn = cast<Function>(FWRef);
5461 M->getFunctionList().remove(Fn);
5462 M->getFunctionList().push_back(Fn);
5463 } else if (!FunctionName.empty()) {
5464 GlobalValue *Conflict = M->getFunction(FunctionName);
5466 Conflict = M->getNamedGlobal(FunctionName);
5467 if (Conflict && PFT == Conflict->getType()) {
5468 if (!CurFun.isDeclare && !Conflict->isDeclaration()) {
5469 // We have two function definitions that conflict, same type, same
5470 // name. We should really check to make sure that this is the result
5471 // of integer type planes collapsing and generate an error if it is
5472 // not, but we'll just rename on the assumption that it is. However,
5473 // let's do it intelligently and rename the internal linkage one
5475 std::string NewName(makeNameUnique(FunctionName));
5476 if (Conflict->hasInternalLinkage()) {
5477 Conflict->setName(NewName);
5479 makeRenameMapKey(FunctionName, Conflict->getType(), ID.S);
5480 CurModule.RenameMap[Key] = NewName;
5481 Fn = new Function(FT, CurFun.Linkage, FunctionName, M);
5482 InsertValue(Fn, CurModule.Values);
5484 Fn = new Function(FT, CurFun.Linkage, NewName, M);
5485 InsertValue(Fn, CurModule.Values);
5487 makeRenameMapKey(FunctionName, PFT, ID.S);
5488 CurModule.RenameMap[Key] = NewName;
5491 // If they are not both definitions, then just use the function we
5492 // found since the types are the same.
5493 Fn = cast<Function>(Conflict);
5495 // Make sure to strip off any argument names so we can't get
5497 if (Fn->isDeclaration())
5498 for (Function::arg_iterator AI = Fn->arg_begin(),
5499 AE = Fn->arg_end(); AI != AE; ++AI)
5502 } else if (Conflict) {
5503 // We have two globals with the same name and different types.
5504 // Previously, this was permitted because the symbol table had
5505 // "type planes" and names only needed to be distinct within a
5506 // type plane. After PR411 was fixed, this is no loner the case.
5507 // To resolve this we must rename one of the two.
5508 if (Conflict->hasInternalLinkage()) {
5509 // We can safely rename the Conflict.
5511 makeRenameMapKey(Conflict->getName(), Conflict->getType(),
5512 CurModule.NamedValueSigns[Conflict->getName()]);
5513 Conflict->setName(makeNameUnique(Conflict->getName()));
5514 CurModule.RenameMap[Key] = Conflict->getName();
5515 Fn = new Function(FT, CurFun.Linkage, FunctionName, M);
5516 InsertValue(Fn, CurModule.Values);
5518 // We can't quietly rename either of these things, but we must
5519 // rename one of them. Only if the function's linkage is internal can
5520 // we forgo a warning message about the renamed function.
5521 std::string NewName = makeNameUnique(FunctionName);
5522 if (CurFun.Linkage != GlobalValue::InternalLinkage) {
5523 warning("Renaming function '" + FunctionName + "' as '" + NewName +
5524 "' may cause linkage errors");
5526 // Elect to rename the thing we're now defining.
5527 Fn = new Function(FT, CurFun.Linkage, NewName, M);
5528 InsertValue(Fn, CurModule.Values);
5529 RenameMapKey Key = makeRenameMapKey(FunctionName, PFT, ID.S);
5530 CurModule.RenameMap[Key] = NewName;
5533 // There's no conflict, just define the function
5534 Fn = new Function(FT, CurFun.Linkage, FunctionName, M);
5535 InsertValue(Fn, CurModule.Values);
5538 // There's no conflict, just define the function
5539 Fn = new Function(FT, CurFun.Linkage, FunctionName, M);
5540 InsertValue(Fn, CurModule.Values);
5544 CurFun.FunctionStart(Fn);
5546 if (CurFun.isDeclare) {
5547 // If we have declaration, always overwrite linkage. This will allow us
5548 // to correctly handle cases, when pointer to function is passed as
5549 // argument to another function.
5550 Fn->setLinkage(CurFun.Linkage);
5552 Fn->setCallingConv(upgradeCallingConv((yyvsp[-7].UIntVal)));
5553 Fn->setAlignment((yyvsp[0].UIntVal));
5554 if ((yyvsp[-1].StrVal)) {
5555 Fn->setSection((yyvsp[-1].StrVal));
5556 free((yyvsp[-1].StrVal));
5559 // Add all of the arguments we parsed to the function...
5560 if ((yyvsp[-3].ArgList)) { // Is null if empty...
5561 if (isVarArg) { // Nuke the last entry
5562 assert((yyvsp[-3].ArgList)->back().first.PAT->get() == Type::VoidTy &&
5563 (yyvsp[-3].ArgList)->back().second == 0 && "Not a varargs marker");
5564 delete (yyvsp[-3].ArgList)->back().first.PAT;
5565 (yyvsp[-3].ArgList)->pop_back(); // Delete the last entry
5567 Function::arg_iterator ArgIt = Fn->arg_begin();
5568 Function::arg_iterator ArgEnd = Fn->arg_end();
5569 std::vector<std::pair<PATypeInfo,char*> >::iterator I = (yyvsp[-3].ArgList)->begin();
5570 std::vector<std::pair<PATypeInfo,char*> >::iterator E = (yyvsp[-3].ArgList)->end();
5571 for ( ; I != E && ArgIt != ArgEnd; ++I, ++ArgIt) {
5572 delete I->first.PAT; // Delete the typeholder...
5573 ValueInfo VI; VI.V = ArgIt; VI.S.copy(I->first.S);
5574 setValueName(VI, I->second); // Insert arg into symtab...
5577 delete (yyvsp[-3].ArgList); // We're now done with the argument list
5579 lastCallingConv = OldCallingConv::C;
5584 #line 3103 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5585 { CurFun.Linkage = (yyvsp[0].Linkage); ;}
5589 #line 3103 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5591 (yyval.FunctionVal) = CurFun.CurrentFunction;
5593 // Make sure that we keep track of the linkage type even if there was a
5594 // previous "declare".
5595 (yyval.FunctionVal)->setLinkage((yyvsp[-3].Linkage));
5600 #line 3117 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5602 (yyval.FunctionVal) = (yyvsp[-1].FunctionVal);
5607 #line 3122 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5608 { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;}
5612 #line 3123 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5613 { (yyval.Linkage) = GlobalValue::DLLImportLinkage; ;}
5617 #line 3124 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5618 { (yyval.Linkage) = GlobalValue::ExternalWeakLinkage; ;}
5622 #line 3128 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5623 { CurFun.isDeclare = true; ;}
5627 #line 3129 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5628 { CurFun.Linkage = (yyvsp[0].Linkage); ;}
5632 #line 3129 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5634 (yyval.FunctionVal) = CurFun.CurrentFunction;
5635 CurFun.FunctionDone();
5641 #line 3141 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5642 { (yyval.BoolVal) = false; ;}
5646 #line 3142 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5647 { (yyval.BoolVal) = true; ;}
5651 #line 3147 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5652 { (yyval.ValIDVal) = ValID::create((yyvsp[0].SInt64Val)); ;}
5656 #line 3148 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5657 { (yyval.ValIDVal) = ValID::create((yyvsp[0].UInt64Val)); ;}
5661 #line 3149 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5662 { (yyval.ValIDVal) = ValID::create((yyvsp[0].FPVal)); ;}
5666 #line 3150 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5668 (yyval.ValIDVal) = ValID::create(ConstantInt::get(Type::Int1Ty, true));
5669 (yyval.ValIDVal).S.makeUnsigned();
5674 #line 3154 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5676 (yyval.ValIDVal) = ValID::create(ConstantInt::get(Type::Int1Ty, false));
5677 (yyval.ValIDVal).S.makeUnsigned();
5682 #line 3158 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5683 { (yyval.ValIDVal) = ValID::createNull(); ;}
5687 #line 3159 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5688 { (yyval.ValIDVal) = ValID::createUndef(); ;}
5692 #line 3160 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5693 { (yyval.ValIDVal) = ValID::createZeroInit(); ;}
5697 #line 3161 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5698 { // Nonempty unsized packed vector
5699 const Type *ETy = (*(yyvsp[-1].ConstVector))[0].C->getType();
5700 int NumElements = (yyvsp[-1].ConstVector)->size();
5701 VectorType* pt = VectorType::get(ETy, NumElements);
5702 (yyval.ValIDVal).S.makeComposite((*(yyvsp[-1].ConstVector))[0].S);
5703 PATypeHolder* PTy = new PATypeHolder(HandleUpRefs(pt, (yyval.ValIDVal).S));
5705 // Verify all elements are correct type!
5706 std::vector<Constant*> Elems;
5707 for (unsigned i = 0; i < (yyvsp[-1].ConstVector)->size(); i++) {
5708 Constant *C = (*(yyvsp[-1].ConstVector))[i].C;
5709 const Type *CTy = C->getType();
5711 error("Element #" + utostr(i) + " is not of type '" +
5712 ETy->getDescription() +"' as required!\nIt is of type '" +
5713 CTy->getDescription() + "'");
5716 (yyval.ValIDVal) = ValID::create(ConstantVector::get(pt, Elems));
5717 delete PTy; delete (yyvsp[-1].ConstVector);
5722 #line 3182 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5724 (yyval.ValIDVal) = ValID::create((yyvsp[0].ConstVal).C);
5725 (yyval.ValIDVal).S.copy((yyvsp[0].ConstVal).S);
5730 #line 3186 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5732 char *End = UnEscapeLexed((yyvsp[-2].StrVal), true);
5733 std::string AsmStr = std::string((yyvsp[-2].StrVal), End);
5734 End = UnEscapeLexed((yyvsp[0].StrVal), true);
5735 std::string Constraints = std::string((yyvsp[0].StrVal), End);
5736 (yyval.ValIDVal) = ValID::createInlineAsm(AsmStr, Constraints, (yyvsp[-3].BoolVal));
5737 free((yyvsp[-2].StrVal));
5738 free((yyvsp[0].StrVal));
5743 #line 3200 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5744 { (yyval.ValIDVal) = ValID::create((yyvsp[0].SIntVal)); (yyval.ValIDVal).S.makeSignless(); ;}
5748 #line 3201 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5749 { (yyval.ValIDVal) = ValID::create((yyvsp[0].StrVal)); (yyval.ValIDVal).S.makeSignless(); ;}
5753 #line 3214 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5755 const Type *Ty = (yyvsp[-1].TypeVal).PAT->get();
5756 (yyvsp[0].ValIDVal).S.copy((yyvsp[-1].TypeVal).S);
5757 (yyval.ValueVal).V = getVal(Ty, (yyvsp[0].ValIDVal));
5758 (yyval.ValueVal).S.copy((yyvsp[-1].TypeVal).S);
5759 delete (yyvsp[-1].TypeVal).PAT;
5764 #line 3224 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5766 (yyval.FunctionVal) = (yyvsp[-1].FunctionVal);
5771 #line 3227 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5772 { // Do not allow functions with 0 basic blocks
5773 (yyval.FunctionVal) = (yyvsp[-1].FunctionVal);
5778 #line 3236 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5780 ValueInfo VI; VI.V = (yyvsp[0].TermInstVal).TI; VI.S.copy((yyvsp[0].TermInstVal).S);
5781 setValueName(VI, (yyvsp[-1].StrVal));
5782 InsertValue((yyvsp[0].TermInstVal).TI);
5783 (yyvsp[-2].BasicBlockVal)->getInstList().push_back((yyvsp[0].TermInstVal).TI);
5784 InsertValue((yyvsp[-2].BasicBlockVal));
5785 (yyval.BasicBlockVal) = (yyvsp[-2].BasicBlockVal);
5790 #line 3247 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5792 if ((yyvsp[0].InstVal).I)
5793 (yyvsp[-1].BasicBlockVal)->getInstList().push_back((yyvsp[0].InstVal).I);
5794 (yyval.BasicBlockVal) = (yyvsp[-1].BasicBlockVal);
5799 #line 3252 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5801 (yyval.BasicBlockVal) = CurBB = getBBVal(ValID::create((int)CurFun.NextBBNum++),true);
5802 // Make sure to move the basic block to the correct location in the
5803 // function, instead of leaving it inserted wherever it was first
5805 Function::BasicBlockListType &BBL =
5806 CurFun.CurrentFunction->getBasicBlockList();
5807 BBL.splice(BBL.end(), BBL, (yyval.BasicBlockVal));
5812 #line 3261 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5814 (yyval.BasicBlockVal) = CurBB = getBBVal(ValID::create((yyvsp[0].StrVal)), true);
5815 // Make sure to move the basic block to the correct location in the
5816 // function, instead of leaving it inserted wherever it was first
5818 Function::BasicBlockListType &BBL =
5819 CurFun.CurrentFunction->getBasicBlockList();
5820 BBL.splice(BBL.end(), BBL, (yyval.BasicBlockVal));
5825 #line 3275 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5826 { // Return with a result...
5827 (yyval.TermInstVal).TI = new ReturnInst((yyvsp[0].ValueVal).V);
5828 (yyval.TermInstVal).S.makeSignless();
5833 #line 3279 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5834 { // Return with no result...
5835 (yyval.TermInstVal).TI = new ReturnInst();
5836 (yyval.TermInstVal).S.makeSignless();
5841 #line 3283 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5842 { // Unconditional Branch...
5843 BasicBlock* tmpBB = getBBVal((yyvsp[0].ValIDVal));
5844 (yyval.TermInstVal).TI = new BranchInst(tmpBB);
5845 (yyval.TermInstVal).S.makeSignless();
5850 #line 3288 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5852 (yyvsp[-3].ValIDVal).S.makeSignless();
5853 (yyvsp[0].ValIDVal).S.makeSignless();
5854 BasicBlock* tmpBBA = getBBVal((yyvsp[-3].ValIDVal));
5855 BasicBlock* tmpBBB = getBBVal((yyvsp[0].ValIDVal));
5856 (yyvsp[-6].ValIDVal).S.makeUnsigned();
5857 Value* tmpVal = getVal(Type::Int1Ty, (yyvsp[-6].ValIDVal));
5858 (yyval.TermInstVal).TI = new BranchInst(tmpBBA, tmpBBB, tmpVal);
5859 (yyval.TermInstVal).S.makeSignless();
5864 #line 3298 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5866 (yyvsp[-6].ValIDVal).S.copy((yyvsp[-7].PrimType).S);
5867 Value* tmpVal = getVal((yyvsp[-7].PrimType).T, (yyvsp[-6].ValIDVal));
5868 (yyvsp[-3].ValIDVal).S.makeSignless();
5869 BasicBlock* tmpBB = getBBVal((yyvsp[-3].ValIDVal));
5870 SwitchInst *S = new SwitchInst(tmpVal, tmpBB, (yyvsp[-1].JumpTable)->size());
5871 (yyval.TermInstVal).TI = S;
5872 (yyval.TermInstVal).S.makeSignless();
5873 std::vector<std::pair<Constant*,BasicBlock*> >::iterator I = (yyvsp[-1].JumpTable)->begin(),
5874 E = (yyvsp[-1].JumpTable)->end();
5875 for (; I != E; ++I) {
5876 if (ConstantInt *CI = dyn_cast<ConstantInt>(I->first))
5877 S->addCase(CI, I->second);
5879 error("Switch case is constant, but not a simple integer");
5881 delete (yyvsp[-1].JumpTable);
5886 #line 3316 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5888 (yyvsp[-5].ValIDVal).S.copy((yyvsp[-6].PrimType).S);
5889 Value* tmpVal = getVal((yyvsp[-6].PrimType).T, (yyvsp[-5].ValIDVal));
5890 (yyvsp[-2].ValIDVal).S.makeSignless();
5891 BasicBlock* tmpBB = getBBVal((yyvsp[-2].ValIDVal));
5892 SwitchInst *S = new SwitchInst(tmpVal, tmpBB, 0);
5893 (yyval.TermInstVal).TI = S;
5894 (yyval.TermInstVal).S.makeSignless();
5899 #line 3326 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5901 const PointerType *PFTy;
5902 const FunctionType *Ty;
5905 if (!(PFTy = dyn_cast<PointerType>((yyvsp[-10].TypeVal).PAT->get())) ||
5906 !(Ty = dyn_cast<FunctionType>(PFTy->getElementType()))) {
5907 // Pull out the types of all of the arguments...
5908 std::vector<const Type*> ParamTypes;
5909 FTySign.makeComposite((yyvsp[-10].TypeVal).S);
5910 if ((yyvsp[-7].ValueList)) {
5911 for (std::vector<ValueInfo>::iterator I = (yyvsp[-7].ValueList)->begin(), E = (yyvsp[-7].ValueList)->end();
5913 ParamTypes.push_back((*I).V->getType());
5917 ParamAttrsList *PAL = 0;
5918 if ((yyvsp[-11].UIntVal) == OldCallingConv::CSRet) {
5919 ParamAttrsVector Attrs;
5920 ParamAttrsWithIndex PAWI;
5921 PAWI.index = 1; PAWI.attrs = ParamAttr::StructRet; // first arg
5922 Attrs.push_back(PAWI);
5923 PAL = ParamAttrsList::get(Attrs);
5925 bool isVarArg = ParamTypes.size() && ParamTypes.back() == Type::VoidTy;
5926 if (isVarArg) ParamTypes.pop_back();
5927 Ty = FunctionType::get((yyvsp[-10].TypeVal).PAT->get(), ParamTypes, isVarArg, PAL);
5928 PFTy = PointerType::get(Ty);
5929 (yyval.TermInstVal).S.copy((yyvsp[-10].TypeVal).S);
5931 FTySign = (yyvsp[-10].TypeVal).S;
5932 // Get the signedness of the result type. $3 is the pointer to the
5933 // function type so we get the 0th element to extract the function type,
5934 // and then the 0th element again to get the result type.
5935 (yyval.TermInstVal).S.copy((yyvsp[-10].TypeVal).S.get(0).get(0));
5938 (yyvsp[-9].ValIDVal).S.makeComposite(FTySign);
5939 Value *V = getVal(PFTy, (yyvsp[-9].ValIDVal)); // Get the function we're calling...
5940 BasicBlock *Normal = getBBVal((yyvsp[-3].ValIDVal));
5941 BasicBlock *Except = getBBVal((yyvsp[0].ValIDVal));
5943 // Create the call node...
5944 if (!(yyvsp[-7].ValueList)) { // Has no arguments?
5945 (yyval.TermInstVal).TI = new InvokeInst(V, Normal, Except, 0, 0);
5946 } else { // Has arguments?
5947 // Loop through FunctionType's arguments and ensure they are specified
5950 FunctionType::param_iterator I = Ty->param_begin();
5951 FunctionType::param_iterator E = Ty->param_end();
5952 std::vector<ValueInfo>::iterator ArgI = (yyvsp[-7].ValueList)->begin(), ArgE = (yyvsp[-7].ValueList)->end();
5954 std::vector<Value*> Args;
5955 for (; ArgI != ArgE && I != E; ++ArgI, ++I) {
5956 if ((*ArgI).V->getType() != *I)
5957 error("Parameter " +(*ArgI).V->getName()+ " is not of type '" +
5958 (*I)->getDescription() + "'");
5959 Args.push_back((*ArgI).V);
5962 if (I != E || (ArgI != ArgE && !Ty->isVarArg()))
5963 error("Invalid number of parameters detected");
5965 (yyval.TermInstVal).TI = new InvokeInst(V, Normal, Except, &Args[0], Args.size());
5967 cast<InvokeInst>((yyval.TermInstVal).TI)->setCallingConv(upgradeCallingConv((yyvsp[-11].UIntVal)));
5968 delete (yyvsp[-10].TypeVal).PAT;
5969 delete (yyvsp[-7].ValueList);
5970 lastCallingConv = OldCallingConv::C;
5975 #line 3398 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5977 (yyval.TermInstVal).TI = new UnwindInst();
5978 (yyval.TermInstVal).S.makeSignless();
5983 #line 3402 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5985 (yyval.TermInstVal).TI = new UnreachableInst();
5986 (yyval.TermInstVal).S.makeSignless();
5991 #line 3409 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5993 (yyval.JumpTable) = (yyvsp[-5].JumpTable);
5994 (yyvsp[-3].ValIDVal).S.copy((yyvsp[-4].PrimType).S);
5995 Constant *V = cast<Constant>(getExistingValue((yyvsp[-4].PrimType).T, (yyvsp[-3].ValIDVal)));
5998 error("May only switch on a constant pool value");
6000 (yyvsp[0].ValIDVal).S.makeSignless();
6001 BasicBlock* tmpBB = getBBVal((yyvsp[0].ValIDVal));
6002 (yyval.JumpTable)->push_back(std::make_pair(V, tmpBB));
6007 #line 3421 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
6009 (yyval.JumpTable) = new std::vector<std::pair<Constant*, BasicBlock*> >();
6010 (yyvsp[-3].ValIDVal).S.copy((yyvsp[-4].PrimType).S);
6011 Constant *V = cast<Constant>(getExistingValue((yyvsp[-4].PrimType).T, (yyvsp[-3].ValIDVal)));
6014 error("May only switch on a constant pool value");
6016 (yyvsp[0].ValIDVal).S.makeSignless();
6017 BasicBlock* tmpBB = getBBVal((yyvsp[0].ValIDVal));
6018 (yyval.JumpTable)->push_back(std::make_pair(V, tmpBB));
6023 #line 3436 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
6026 if ((yyvsp[-1].StrVal))
6027 if (BitCastInst *BCI = dyn_cast<BitCastInst>((yyvsp[0].InstVal).I))
6028 if (BCI->getSrcTy() == BCI->getDestTy() &&
6029 BCI->getOperand(0)->getName() == (yyvsp[-1].StrVal))
6030 // This is a useless bit cast causing a name redefinition. It is
6031 // a bit cast from a type to the same type of an operand with the
6032 // same name as the name we would give this instruction. Since this
6033 // instruction results in no code generation, it is safe to omit
6034 // the instruction. This situation can occur because of collapsed
6035 // type planes. For example:
6036 // %X = add int %Y, %Z
6037 // %X = cast int %Y to uint
6038 // After upgrade, this looks like:
6039 // %X = add i32 %Y, %Z
6040 // %X = bitcast i32 to i32
6041 // The bitcast is clearly useless so we omit it.
6044 (yyval.InstVal).I = 0;
6045 (yyval.InstVal).S.makeSignless();
6047 ValueInfo VI; VI.V = (yyvsp[0].InstVal).I; VI.S.copy((yyvsp[0].InstVal).S);
6048 setValueName(VI, (yyvsp[-1].StrVal));
6049 InsertValue((yyvsp[0].InstVal).I);
6050 (yyval.InstVal) = (yyvsp[0].InstVal);
6056 #line 3466 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
6057 { // Used for PHI nodes
6058 (yyval.PHIList).P = new std::list<std::pair<Value*, BasicBlock*> >();
6059 (yyval.PHIList).S.copy((yyvsp[-5].TypeVal).S);
6060 (yyvsp[-3].ValIDVal).S.copy((yyvsp[-5].TypeVal).S);
6061 Value* tmpVal = getVal((yyvsp[-5].TypeVal).PAT->get(), (yyvsp[-3].ValIDVal));
6062 (yyvsp[-1].ValIDVal).S.makeSignless();
6063 BasicBlock* tmpBB = getBBVal((yyvsp[-1].ValIDVal));
6064 (yyval.PHIList).P->push_back(std::make_pair(tmpVal, tmpBB));
6065 delete (yyvsp[-5].TypeVal).PAT;
6070 #line 3476 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
6072 (yyval.PHIList) = (yyvsp[-6].PHIList);
6073 (yyvsp[-3].ValIDVal).S.copy((yyvsp[-6].PHIList).S);
6074 Value* tmpVal = getVal((yyvsp[-6].PHIList).P->front().first->getType(), (yyvsp[-3].ValIDVal));
6075 (yyvsp[-1].ValIDVal).S.makeSignless();
6076 BasicBlock* tmpBB = getBBVal((yyvsp[-1].ValIDVal));
6077 (yyvsp[-6].PHIList).P->push_back(std::make_pair(tmpVal, tmpBB));
6082 #line 3486 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
6083 { // Used for call statements, and memory insts...
6084 (yyval.ValueList) = new std::vector<ValueInfo>();
6085 (yyval.ValueList)->push_back((yyvsp[0].ValueVal));
6090 #line 3490 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
6092 (yyval.ValueList) = (yyvsp[-2].ValueList);
6093 (yyvsp[-2].ValueList)->push_back((yyvsp[0].ValueVal));
6098 #line 3498 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
6099 { (yyval.ValueList) = 0; ;}
6103 #line 3502 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
6105 (yyval.BoolVal) = true;
6110 #line 3505 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
6112 (yyval.BoolVal) = false;
6117 #line 3511 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
6119 (yyvsp[-2].ValIDVal).S.copy((yyvsp[-3].TypeVal).S);
6120 (yyvsp[0].ValIDVal).S.copy((yyvsp[-3].TypeVal).S);
6121 const Type* Ty = (yyvsp[-3].TypeVal).PAT->get();
6122 if (!Ty->isInteger() && !Ty->isFloatingPoint() && !isa<VectorType>(Ty))
6123 error("Arithmetic operator requires integer, FP, or packed operands");
6124 if (isa<VectorType>(Ty) &&
6125 ((yyvsp[-4].BinaryOpVal) == URemOp || (yyvsp[-4].BinaryOpVal) == SRemOp || (yyvsp[-4].BinaryOpVal) == FRemOp || (yyvsp[-4].BinaryOpVal) == RemOp))
6126 error("Remainder not supported on vector types");
6127 // Upgrade the opcode from obsolete versions before we do anything with it.
6128 Instruction::BinaryOps Opcode = getBinaryOp((yyvsp[-4].BinaryOpVal), Ty, (yyvsp[-3].TypeVal).S);
6129 Value* val1 = getVal(Ty, (yyvsp[-2].ValIDVal));
6130 Value* val2 = getVal(Ty, (yyvsp[0].ValIDVal));
6131 (yyval.InstVal).I = BinaryOperator::create(Opcode, val1, val2);
6132 if ((yyval.InstVal).I == 0)
6133 error("binary operator returned null");
6134 (yyval.InstVal).S.copy((yyvsp[-3].TypeVal).S);
6135 delete (yyvsp[-3].TypeVal).PAT;
6140 #line 3530 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
6142 (yyvsp[-2].ValIDVal).S.copy((yyvsp[-3].TypeVal).S);
6143 (yyvsp[0].ValIDVal).S.copy((yyvsp[-3].TypeVal).S);
6144 const Type *Ty = (yyvsp[-3].TypeVal).PAT->get();
6145 if (!Ty->isInteger()) {
6146 if (!isa<VectorType>(Ty) ||
6147 !cast<VectorType>(Ty)->getElementType()->isInteger())
6148 error("Logical operator requires integral operands");
6150 Instruction::BinaryOps Opcode = getBinaryOp((yyvsp[-4].BinaryOpVal), Ty, (yyvsp[-3].TypeVal).S);
6151 Value* tmpVal1 = getVal(Ty, (yyvsp[-2].ValIDVal));
6152 Value* tmpVal2 = getVal(Ty, (yyvsp[0].ValIDVal));
6153 (yyval.InstVal).I = BinaryOperator::create(Opcode, tmpVal1, tmpVal2);
6154 if ((yyval.InstVal).I == 0)
6155 error("binary operator returned null");
6156 (yyval.InstVal).S.copy((yyvsp[-3].TypeVal).S);
6157 delete (yyvsp[-3].TypeVal).PAT;
6162 #line 3548 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
6164 (yyvsp[-2].ValIDVal).S.copy((yyvsp[-3].TypeVal).S);
6165 (yyvsp[0].ValIDVal).S.copy((yyvsp[-3].TypeVal).S);
6166 const Type* Ty = (yyvsp[-3].TypeVal).PAT->get();
6167 if(isa<VectorType>(Ty))
6168 error("VectorTypes currently not supported in setcc instructions");
6169 unsigned short pred;
6170 Instruction::OtherOps Opcode = getCompareOp((yyvsp[-4].BinaryOpVal), pred, Ty, (yyvsp[-3].TypeVal).S);
6171 Value* tmpVal1 = getVal(Ty, (yyvsp[-2].ValIDVal));
6172 Value* tmpVal2 = getVal(Ty, (yyvsp[0].ValIDVal));
6173 (yyval.InstVal).I = CmpInst::create(Opcode, pred, tmpVal1, tmpVal2);
6174 if ((yyval.InstVal).I == 0)
6175 error("binary operator returned null");
6176 (yyval.InstVal).S.makeUnsigned();
6177 delete (yyvsp[-3].TypeVal).PAT;
6182 #line 3564 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
6184 (yyvsp[-2].ValIDVal).S.copy((yyvsp[-3].TypeVal).S);
6185 (yyvsp[0].ValIDVal).S.copy((yyvsp[-3].TypeVal).S);
6186 const Type *Ty = (yyvsp[-3].TypeVal).PAT->get();
6187 if (isa<VectorType>(Ty))
6188 error("VectorTypes currently not supported in icmp instructions");
6189 else if (!Ty->isInteger() && !isa<PointerType>(Ty))
6190 error("icmp requires integer or pointer typed operands");
6191 Value* tmpVal1 = getVal(Ty, (yyvsp[-2].ValIDVal));
6192 Value* tmpVal2 = getVal(Ty, (yyvsp[0].ValIDVal));
6193 (yyval.InstVal).I = new ICmpInst((yyvsp[-4].IPred), tmpVal1, tmpVal2);
6194 (yyval.InstVal).S.makeUnsigned();
6195 delete (yyvsp[-3].TypeVal).PAT;
6200 #line 3578 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
6202 (yyvsp[-2].ValIDVal).S.copy((yyvsp[-3].TypeVal).S);
6203 (yyvsp[0].ValIDVal).S.copy((yyvsp[-3].TypeVal).S);
6204 const Type *Ty = (yyvsp[-3].TypeVal).PAT->get();
6205 if (isa<VectorType>(Ty))
6206 error("VectorTypes currently not supported in fcmp instructions");
6207 else if (!Ty->isFloatingPoint())
6208 error("fcmp instruction requires floating point operands");
6209 Value* tmpVal1 = getVal(Ty, (yyvsp[-2].ValIDVal));
6210 Value* tmpVal2 = getVal(Ty, (yyvsp[0].ValIDVal));
6211 (yyval.InstVal).I = new FCmpInst((yyvsp[-4].FPred), tmpVal1, tmpVal2);
6212 (yyval.InstVal).S.makeUnsigned();
6213 delete (yyvsp[-3].TypeVal).PAT;
6218 #line 3592 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
6220 warning("Use of obsolete 'not' instruction: Replacing with 'xor");
6221 const Type *Ty = (yyvsp[0].ValueVal).V->getType();
6222 Value *Ones = ConstantInt::getAllOnesValue(Ty);
6224 error("Expected integral type for not instruction");
6225 (yyval.InstVal).I = BinaryOperator::create(Instruction::Xor, (yyvsp[0].ValueVal).V, Ones);
6226 if ((yyval.InstVal).I == 0)
6227 error("Could not create a xor instruction");
6228 (yyval.InstVal).S.copy((yyvsp[0].ValueVal).S);
6233 #line 3603 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
6235 if (!(yyvsp[0].ValueVal).V->getType()->isInteger() ||
6236 cast<IntegerType>((yyvsp[0].ValueVal).V->getType())->getBitWidth() != 8)
6237 error("Shift amount must be int8");
6238 const Type* Ty = (yyvsp[-2].ValueVal).V->getType();
6239 if (!Ty->isInteger())
6240 error("Shift constant expression requires integer operand");
6241 Value* ShiftAmt = 0;
6242 if (cast<IntegerType>(Ty)->getBitWidth() > Type::Int8Ty->getBitWidth())
6243 if (Constant *C = dyn_cast<Constant>((yyvsp[0].ValueVal).V))
6244 ShiftAmt = ConstantExpr::getZExt(C, Ty);
6246 ShiftAmt = new ZExtInst((yyvsp[0].ValueVal).V, Ty, makeNameUnique("shift"), CurBB);
6248 ShiftAmt = (yyvsp[0].ValueVal).V;
6249 (yyval.InstVal).I = BinaryOperator::create(getBinaryOp((yyvsp[-3].BinaryOpVal), Ty, (yyvsp[-2].ValueVal).S), (yyvsp[-2].ValueVal).V, ShiftAmt);
6250 (yyval.InstVal).S.copy((yyvsp[-2].ValueVal).S);
6255 #line 3621 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
6257 const Type *DstTy = (yyvsp[0].TypeVal).PAT->get();
6258 if (!DstTy->isFirstClassType())
6259 error("cast instruction to a non-primitive type: '" +
6260 DstTy->getDescription() + "'");
6261 (yyval.InstVal).I = cast<Instruction>(getCast((yyvsp[-3].CastOpVal), (yyvsp[-2].ValueVal).V, (yyvsp[-2].ValueVal).S, DstTy, (yyvsp[0].TypeVal).S, true));
6262 (yyval.InstVal).S.copy((yyvsp[0].TypeVal).S);
6263 delete (yyvsp[0].TypeVal).PAT;
6268 #line 3630 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
6270 if (!(yyvsp[-4].ValueVal).V->getType()->isInteger() ||
6271 cast<IntegerType>((yyvsp[-4].ValueVal).V->getType())->getBitWidth() != 1)
6272 error("select condition must be bool");
6273 if ((yyvsp[-2].ValueVal).V->getType() != (yyvsp[0].ValueVal).V->getType())
6274 error("select value types should match");
6275 (yyval.InstVal).I = new SelectInst((yyvsp[-4].ValueVal).V, (yyvsp[-2].ValueVal).V, (yyvsp[0].ValueVal).V);
6276 (yyval.InstVal).S.copy((yyvsp[-2].ValueVal).S);
6281 #line 3639 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
6283 const Type *Ty = (yyvsp[0].TypeVal).PAT->get();
6285 (yyval.InstVal).I = new VAArgInst((yyvsp[-2].ValueVal).V, Ty);
6286 (yyval.InstVal).S.copy((yyvsp[0].TypeVal).S);
6287 delete (yyvsp[0].TypeVal).PAT;
6292 #line 3646 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
6294 const Type* ArgTy = (yyvsp[-2].ValueVal).V->getType();
6295 const Type* DstTy = (yyvsp[0].TypeVal).PAT->get();
6296 ObsoleteVarArgs = true;
6297 Function* NF = cast<Function>(CurModule.CurrentModule->
6298 getOrInsertFunction("llvm.va_copy", ArgTy, ArgTy, (Type *)0));
6301 //foo = alloca 1 of t
6305 AllocaInst* foo = new AllocaInst(ArgTy, 0, "vaarg.fix");
6306 CurBB->getInstList().push_back(foo);
6307 CallInst* bar = new CallInst(NF, (yyvsp[-2].ValueVal).V);
6308 CurBB->getInstList().push_back(bar);
6309 CurBB->getInstList().push_back(new StoreInst(bar, foo));
6310 (yyval.InstVal).I = new VAArgInst(foo, DstTy);
6311 (yyval.InstVal).S.copy((yyvsp[0].TypeVal).S);
6312 delete (yyvsp[0].TypeVal).PAT;
6317 #line 3667 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
6319 const Type* ArgTy = (yyvsp[-2].ValueVal).V->getType();
6320 const Type* DstTy = (yyvsp[0].TypeVal).PAT->get();
6321 ObsoleteVarArgs = true;
6322 Function* NF = cast<Function>(CurModule.CurrentModule->
6323 getOrInsertFunction("llvm.va_copy", ArgTy, ArgTy, (Type *)0));
6325 //b = vanext a, t ->
6326 //foo = alloca 1 of t
6329 //tmp = vaarg foo, t
6331 AllocaInst* foo = new AllocaInst(ArgTy, 0, "vanext.fix");
6332 CurBB->getInstList().push_back(foo);
6333 CallInst* bar = new CallInst(NF, (yyvsp[-2].ValueVal).V);
6334 CurBB->getInstList().push_back(bar);
6335 CurBB->getInstList().push_back(new StoreInst(bar, foo));
6336 Instruction* tmp = new VAArgInst(foo, DstTy);
6337 CurBB->getInstList().push_back(tmp);
6338 (yyval.InstVal).I = new LoadInst(foo);
6339 (yyval.InstVal).S.copy((yyvsp[0].TypeVal).S);
6340 delete (yyvsp[0].TypeVal).PAT;
6345 #line 3691 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
6347 if (!ExtractElementInst::isValidOperands((yyvsp[-2].ValueVal).V, (yyvsp[0].ValueVal).V))
6348 error("Invalid extractelement operands");
6349 (yyval.InstVal).I = new ExtractElementInst((yyvsp[-2].ValueVal).V, (yyvsp[0].ValueVal).V);
6350 (yyval.InstVal).S.copy((yyvsp[-2].ValueVal).S.get(0));
6355 #line 3697 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
6357 if (!InsertElementInst::isValidOperands((yyvsp[-4].ValueVal).V, (yyvsp[-2].ValueVal).V, (yyvsp[0].ValueVal).V))
6358 error("Invalid insertelement operands");
6359 (yyval.InstVal).I = new InsertElementInst((yyvsp[-4].ValueVal).V, (yyvsp[-2].ValueVal).V, (yyvsp[0].ValueVal).V);
6360 (yyval.InstVal).S.copy((yyvsp[-4].ValueVal).S);
6365 #line 3703 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
6367 if (!ShuffleVectorInst::isValidOperands((yyvsp[-4].ValueVal).V, (yyvsp[-2].ValueVal).V, (yyvsp[0].ValueVal).V))
6368 error("Invalid shufflevector operands");
6369 (yyval.InstVal).I = new ShuffleVectorInst((yyvsp[-4].ValueVal).V, (yyvsp[-2].ValueVal).V, (yyvsp[0].ValueVal).V);
6370 (yyval.InstVal).S.copy((yyvsp[-4].ValueVal).S);
6375 #line 3709 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
6377 const Type *Ty = (yyvsp[0].PHIList).P->front().first->getType();
6378 if (!Ty->isFirstClassType())
6379 error("PHI node operands must be of first class type");
6380 PHINode *PHI = new PHINode(Ty);
6381 PHI->reserveOperandSpace((yyvsp[0].PHIList).P->size());
6382 while ((yyvsp[0].PHIList).P->begin() != (yyvsp[0].PHIList).P->end()) {
6383 if ((yyvsp[0].PHIList).P->front().first->getType() != Ty)
6384 error("All elements of a PHI node must be of the same type");
6385 PHI->addIncoming((yyvsp[0].PHIList).P->front().first, (yyvsp[0].PHIList).P->front().second);
6386 (yyvsp[0].PHIList).P->pop_front();
6388 (yyval.InstVal).I = PHI;
6389 (yyval.InstVal).S.copy((yyvsp[0].PHIList).S);
6390 delete (yyvsp[0].PHIList).P; // Free the list...
6395 #line 3725 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
6397 // Handle the short call syntax
6398 const PointerType *PFTy;
6399 const FunctionType *FTy;
6401 if (!(PFTy = dyn_cast<PointerType>((yyvsp[-4].TypeVal).PAT->get())) ||
6402 !(FTy = dyn_cast<FunctionType>(PFTy->getElementType()))) {
6403 // Pull out the types of all of the arguments...
6404 std::vector<const Type*> ParamTypes;
6405 FTySign.makeComposite((yyvsp[-4].TypeVal).S);
6406 if ((yyvsp[-1].ValueList)) {
6407 for (std::vector<ValueInfo>::iterator I = (yyvsp[-1].ValueList)->begin(), E = (yyvsp[-1].ValueList)->end();
6409 ParamTypes.push_back((*I).V->getType());
6414 bool isVarArg = ParamTypes.size() && ParamTypes.back() == Type::VoidTy;
6415 if (isVarArg) ParamTypes.pop_back();
6417 const Type *RetTy = (yyvsp[-4].TypeVal).PAT->get();
6418 if (!RetTy->isFirstClassType() && RetTy != Type::VoidTy)
6419 error("Functions cannot return aggregate types");
6421 // Deal with CSRetCC
6422 ParamAttrsList *PAL = 0;
6423 if ((yyvsp[-5].UIntVal) == OldCallingConv::CSRet) {
6424 ParamAttrsVector Attrs;
6425 ParamAttrsWithIndex PAWI;
6426 PAWI.index = 1; PAWI.attrs = ParamAttr::StructRet; // first arg
6427 Attrs.push_back(PAWI);
6428 PAL = ParamAttrsList::get(Attrs);
6431 FTy = FunctionType::get(RetTy, ParamTypes, isVarArg, PAL);
6432 PFTy = PointerType::get(FTy);
6433 (yyval.InstVal).S.copy((yyvsp[-4].TypeVal).S);
6435 FTySign = (yyvsp[-4].TypeVal).S;
6436 // Get the signedness of the result type. $3 is the pointer to the
6437 // function type so we get the 0th element to extract the function type,
6438 // and then the 0th element again to get the result type.
6439 (yyval.InstVal).S.copy((yyvsp[-4].TypeVal).S.get(0).get(0));
6441 (yyvsp[-3].ValIDVal).S.makeComposite(FTySign);
6443 // First upgrade any intrinsic calls.
6444 std::vector<Value*> Args;
6445 if ((yyvsp[-1].ValueList))
6446 for (unsigned i = 0, e = (yyvsp[-1].ValueList)->size(); i < e; ++i)
6447 Args.push_back((*(yyvsp[-1].ValueList))[i].V);
6448 Instruction *Inst = upgradeIntrinsicCall(FTy->getReturnType(), (yyvsp[-3].ValIDVal), Args);
6450 // If we got an upgraded intrinsic
6452 (yyval.InstVal).I = Inst;
6454 // Get the function we're calling
6455 Value *V = getVal(PFTy, (yyvsp[-3].ValIDVal));
6457 // Check the argument values match
6458 if (!(yyvsp[-1].ValueList)) { // Has no arguments?
6459 // Make sure no arguments is a good thing!
6460 if (FTy->getNumParams() != 0)
6461 error("No arguments passed to a function that expects arguments");
6462 } else { // Has arguments?
6463 // Loop through FunctionType's arguments and ensure they are specified
6466 FunctionType::param_iterator I = FTy->param_begin();
6467 FunctionType::param_iterator E = FTy->param_end();
6468 std::vector<ValueInfo>::iterator ArgI = (yyvsp[-1].ValueList)->begin(), ArgE = (yyvsp[-1].ValueList)->end();
6470 for (; ArgI != ArgE && I != E; ++ArgI, ++I)
6471 if ((*ArgI).V->getType() != *I)
6472 error("Parameter " +(*ArgI).V->getName()+ " is not of type '" +
6473 (*I)->getDescription() + "'");
6475 if (I != E || (ArgI != ArgE && !FTy->isVarArg()))
6476 error("Invalid number of parameters detected");
6479 // Create the call instruction
6480 CallInst *CI = new CallInst(V, &Args[0], Args.size());
6481 CI->setTailCall((yyvsp[-6].BoolVal));
6482 CI->setCallingConv(upgradeCallingConv((yyvsp[-5].UIntVal)));
6483 (yyval.InstVal).I = CI;
6485 delete (yyvsp[-4].TypeVal).PAT;
6486 delete (yyvsp[-1].ValueList);
6487 lastCallingConv = OldCallingConv::C;
6492 #line 3818 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
6494 (yyval.InstVal) = (yyvsp[0].InstVal);
6499 #line 3826 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
6500 { (yyval.ValueList) = (yyvsp[0].ValueList); ;}
6504 #line 3827 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
6505 { (yyval.ValueList) = new std::vector<ValueInfo>(); ;}
6509 #line 3831 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
6510 { (yyval.BoolVal) = true; ;}
6514 #line 3832 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
6515 { (yyval.BoolVal) = false; ;}
6519 #line 3836 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
6521 const Type *Ty = (yyvsp[-1].TypeVal).PAT->get();
6522 (yyval.InstVal).S.makeComposite((yyvsp[-1].TypeVal).S);
6523 (yyval.InstVal).I = new MallocInst(Ty, 0, (yyvsp[0].UIntVal));
6524 delete (yyvsp[-1].TypeVal).PAT;
6529 #line 3842 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
6531 const Type *Ty = (yyvsp[-4].TypeVal).PAT->get();
6532 (yyvsp[-1].ValIDVal).S.makeUnsigned();
6533 (yyval.InstVal).S.makeComposite((yyvsp[-4].TypeVal).S);
6534 (yyval.InstVal).I = new MallocInst(Ty, getVal((yyvsp[-2].PrimType).T, (yyvsp[-1].ValIDVal)), (yyvsp[0].UIntVal));
6535 delete (yyvsp[-4].TypeVal).PAT;
6540 #line 3849 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
6542 const Type *Ty = (yyvsp[-1].TypeVal).PAT->get();
6543 (yyval.InstVal).S.makeComposite((yyvsp[-1].TypeVal).S);
6544 (yyval.InstVal).I = new AllocaInst(Ty, 0, (yyvsp[0].UIntVal));
6545 delete (yyvsp[-1].TypeVal).PAT;
6550 #line 3855 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
6552 const Type *Ty = (yyvsp[-4].TypeVal).PAT->get();
6553 (yyvsp[-1].ValIDVal).S.makeUnsigned();
6554 (yyval.InstVal).S.makeComposite((yyvsp[-2].PrimType).S);
6555 (yyval.InstVal).I = new AllocaInst(Ty, getVal((yyvsp[-2].PrimType).T, (yyvsp[-1].ValIDVal)), (yyvsp[0].UIntVal));
6556 delete (yyvsp[-4].TypeVal).PAT;
6561 #line 3862 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
6563 const Type *PTy = (yyvsp[0].ValueVal).V->getType();
6564 if (!isa<PointerType>(PTy))
6565 error("Trying to free nonpointer type '" + PTy->getDescription() + "'");
6566 (yyval.InstVal).I = new FreeInst((yyvsp[0].ValueVal).V);
6567 (yyval.InstVal).S.makeSignless();
6572 #line 3869 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
6574 const Type* Ty = (yyvsp[-1].TypeVal).PAT->get();
6575 (yyvsp[0].ValIDVal).S.copy((yyvsp[-1].TypeVal).S);
6576 if (!isa<PointerType>(Ty))
6577 error("Can't load from nonpointer type: " + Ty->getDescription());
6578 if (!cast<PointerType>(Ty)->getElementType()->isFirstClassType())
6579 error("Can't load from pointer of non-first-class type: " +
6580 Ty->getDescription());
6581 Value* tmpVal = getVal(Ty, (yyvsp[0].ValIDVal));
6582 (yyval.InstVal).I = new LoadInst(tmpVal, "", (yyvsp[-3].BoolVal));
6583 (yyval.InstVal).S.copy((yyvsp[-1].TypeVal).S.get(0));
6584 delete (yyvsp[-1].TypeVal).PAT;
6589 #line 3882 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
6591 (yyvsp[0].ValIDVal).S.copy((yyvsp[-1].TypeVal).S);
6592 const PointerType *PTy = dyn_cast<PointerType>((yyvsp[-1].TypeVal).PAT->get());
6594 error("Can't store to a nonpointer type: " +
6595 (yyvsp[-1].TypeVal).PAT->get()->getDescription());
6596 const Type *ElTy = PTy->getElementType();
6597 Value *StoreVal = (yyvsp[-3].ValueVal).V;
6598 Value* tmpVal = getVal(PTy, (yyvsp[0].ValIDVal));
6599 if (ElTy != (yyvsp[-3].ValueVal).V->getType()) {
6600 StoreVal = handleSRetFuncTypeMerge((yyvsp[-3].ValueVal).V, ElTy);
6602 error("Can't store '" + (yyvsp[-3].ValueVal).V->getType()->getDescription() +
6603 "' into space of type '" + ElTy->getDescription() + "'");
6605 PTy = PointerType::get(StoreVal->getType());
6606 if (Constant *C = dyn_cast<Constant>(tmpVal))
6607 tmpVal = ConstantExpr::getBitCast(C, PTy);
6609 tmpVal = new BitCastInst(tmpVal, PTy, "upgrd.cast", CurBB);
6612 (yyval.InstVal).I = new StoreInst(StoreVal, tmpVal, (yyvsp[-5].BoolVal));
6613 (yyval.InstVal).S.makeSignless();
6614 delete (yyvsp[-1].TypeVal).PAT;
6619 #line 3908 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
6621 (yyvsp[-1].ValIDVal).S.copy((yyvsp[-2].TypeVal).S);
6622 const Type* Ty = (yyvsp[-2].TypeVal).PAT->get();
6623 if (!isa<PointerType>(Ty))
6624 error("getelementptr insn requires pointer operand");
6626 std::vector<Value*> VIndices;
6627 upgradeGEPInstIndices(Ty, (yyvsp[0].ValueList), VIndices);
6629 Value* tmpVal = getVal(Ty, (yyvsp[-1].ValIDVal));
6630 (yyval.InstVal).I = new GetElementPtrInst(tmpVal, &VIndices[0], VIndices.size());
6631 ValueInfo VI; VI.V = tmpVal; VI.S.copy((yyvsp[-2].TypeVal).S);
6632 (yyval.InstVal).S.copy(getElementSign(VI, VIndices));
6633 delete (yyvsp[-2].TypeVal).PAT;
6634 delete (yyvsp[0].ValueList);
6642 /* Line 1126 of yacc.c. */
6643 #line 6644 "UpgradeParser.tab.c"
6649 YY_STACK_PRINT (yyss, yyssp);
6654 /* Now `shift' the result of the reduction. Determine what state
6655 that goes to, based on the state we popped back to and the rule
6656 number reduced by. */
6660 yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
6661 if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
6662 yystate = yytable[yystate];
6664 yystate = yydefgoto[yyn - YYNTOKENS];
6669 /*------------------------------------.
6670 | yyerrlab -- here on detecting error |
6671 `------------------------------------*/
6673 /* If not already recovering from an error, report this error. */
6678 yyn = yypact[yystate];
6680 if (YYPACT_NINF < yyn && yyn < YYLAST)
6682 int yytype = YYTRANSLATE (yychar);
6683 YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
6684 YYSIZE_T yysize = yysize0;
6686 int yysize_overflow = 0;
6688 # define YYERROR_VERBOSE_ARGS_MAXIMUM 5
6689 char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
6693 /* This is so xgettext sees the translatable formats that are
6694 constructed on the fly. */
6695 YY_("syntax error, unexpected %s");
6696 YY_("syntax error, unexpected %s, expecting %s");
6697 YY_("syntax error, unexpected %s, expecting %s or %s");
6698 YY_("syntax error, unexpected %s, expecting %s or %s or %s");
6699 YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
6703 static char const yyunexpected[] = "syntax error, unexpected %s";
6704 static char const yyexpecting[] = ", expecting %s";
6705 static char const yyor[] = " or %s";
6706 char yyformat[sizeof yyunexpected
6707 + sizeof yyexpecting - 1
6708 + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
6709 * (sizeof yyor - 1))];
6710 char const *yyprefix = yyexpecting;
6712 /* Start YYX at -YYN if negative to avoid negative indexes in
6714 int yyxbegin = yyn < 0 ? -yyn : 0;
6716 /* Stay within bounds of both yycheck and yytname. */
6717 int yychecklim = YYLAST - yyn;
6718 int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
6721 yyarg[0] = yytname[yytype];
6722 yyfmt = yystpcpy (yyformat, yyunexpected);
6724 for (yyx = yyxbegin; yyx < yyxend; ++yyx)
6725 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
6727 if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
6731 yyformat[sizeof yyunexpected - 1] = '\0';
6734 yyarg[yycount++] = yytname[yyx];
6735 yysize1 = yysize + yytnamerr (0, yytname[yyx]);
6736 yysize_overflow |= yysize1 < yysize;
6738 yyfmt = yystpcpy (yyfmt, yyprefix);
6742 yyf = YY_(yyformat);
6743 yysize1 = yysize + yystrlen (yyf);
6744 yysize_overflow |= yysize1 < yysize;
6747 if (!yysize_overflow && yysize <= YYSTACK_ALLOC_MAXIMUM)
6748 yymsg = (char *) YYSTACK_ALLOC (yysize);
6751 /* Avoid sprintf, as that infringes on the user's name space.
6752 Don't have undefined behavior even if the translation
6753 produced a string with the wrong number of "%s"s. */
6756 while ((*yyp = *yyf))
6758 if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
6760 yyp += yytnamerr (yyp, yyarg[yyi++]);
6770 YYSTACK_FREE (yymsg);
6774 yyerror (YY_("syntax error"));
6775 goto yyexhaustedlab;
6779 #endif /* YYERROR_VERBOSE */
6780 yyerror (YY_("syntax error"));
6785 if (yyerrstatus == 3)
6787 /* If just tried and failed to reuse look-ahead token after an
6788 error, discard it. */
6790 if (yychar <= YYEOF)
6792 /* Return failure if at end of input. */
6793 if (yychar == YYEOF)
6798 yydestruct ("Error: discarding", yytoken, &yylval);
6803 /* Else will try to reuse look-ahead token after shifting the error
6808 /*---------------------------------------------------.
6809 | yyerrorlab -- error raised explicitly by YYERROR. |
6810 `---------------------------------------------------*/
6813 /* Pacify compilers like GCC when the user code never invokes
6814 YYERROR and the label yyerrorlab therefore never appears in user
6825 /*-------------------------------------------------------------.
6826 | yyerrlab1 -- common code for both syntax error and YYERROR. |
6827 `-------------------------------------------------------------*/
6829 yyerrstatus = 3; /* Each real token shifted decrements this. */
6833 yyn = yypact[yystate];
6834 if (yyn != YYPACT_NINF)
6837 if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
6845 /* Pop the current state because it cannot handle the error token. */
6850 yydestruct ("Error: popping", yystos[yystate], yyvsp);
6853 YY_STACK_PRINT (yyss, yyssp);
6862 /* Shift the error token. */
6863 YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
6869 /*-------------------------------------.
6870 | yyacceptlab -- YYACCEPT comes here. |
6871 `-------------------------------------*/
6876 /*-----------------------------------.
6877 | yyabortlab -- YYABORT comes here. |
6878 `-----------------------------------*/
6884 /*-------------------------------------------------.
6885 | yyexhaustedlab -- memory exhaustion comes here. |
6886 `-------------------------------------------------*/
6888 yyerror (YY_("memory exhausted"));
6894 if (yychar != YYEOF && yychar != YYEMPTY)
6895 yydestruct ("Cleanup: discarding lookahead",
6897 while (yyssp != yyss)
6899 yydestruct ("Cleanup: popping",
6900 yystos[*yyssp], yyvsp);
6905 YYSTACK_FREE (yyss);
6911 #line 3926 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
6914 int yyerror(const char *ErrorMsg) {
6916 = std::string((CurFilename == "-") ? std::string("<stdin>") : CurFilename)
6917 + ":" + llvm::utostr((unsigned) Upgradelineno) + ": ";
6918 std::string errMsg = where + "error: " + std::string(ErrorMsg);
6919 if (yychar != YYEMPTY && yychar != 0)
6920 errMsg += " while reading token '" + std::string(Upgradetext, Upgradeleng) +
6922 std::cerr << "llvm-upgrade: " << errMsg << '\n';
6923 std::cout << "llvm-upgrade: parse failed.\n";
6927 void warning(const std::string& ErrorMsg) {
6929 = std::string((CurFilename == "-") ? std::string("<stdin>") : CurFilename)
6930 + ":" + llvm::utostr((unsigned) Upgradelineno) + ": ";
6931 std::string errMsg = where + "warning: " + std::string(ErrorMsg);
6932 if (yychar != YYEMPTY && yychar != 0)
6933 errMsg += " while reading token '" + std::string(Upgradetext, Upgradeleng) +
6935 std::cerr << "llvm-upgrade: " << errMsg << '\n';
6938 void error(const std::string& ErrorMsg, int LineNo) {
6939 if (LineNo == -1) LineNo = Upgradelineno;
6940 Upgradelineno = LineNo;
6941 yyerror(ErrorMsg.c_str());