Maintain ETNode as part of DomTreeNode.
[llvm-complete.git] / tools / llvm-upgrade / UpgradeParser.cpp.cvs
blob577d94daef24337e10ab756afe2acb16079deedb
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)
9    any later version.
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.  */
37 #define YYBISON 1
39 /* Bison version.  */
40 #define YYBISON_VERSION "2.1"
42 /* Skeleton name.  */
43 #define YYSKELETON_NAME "yacc.c"
45 /* Pure parsers.  */
46 #define YYPURE 0
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
61 /* Tokens.  */
62 #ifndef YYTOKENTYPE
63 # define YYTOKENTYPE
64    /* Put the tokens into the symbol table, so that GDB and other debuggers
65       know about them.  */
66    enum yytokentype {
67      ESINT64VAL = 258,
68      EUINT64VAL = 259,
69      SINTVAL = 260,
70      UINTVAL = 261,
71      FPVAL = 262,
72      VOID = 263,
73      BOOL = 264,
74      SBYTE = 265,
75      UBYTE = 266,
76      SHORT = 267,
77      USHORT = 268,
78      INT = 269,
79      UINT = 270,
80      LONG = 271,
81      ULONG = 272,
82      FLOAT = 273,
83      DOUBLE = 274,
84      TYPE = 275,
85      LABEL = 276,
86      VAR_ID = 277,
87      LABELSTR = 278,
88      STRINGCONSTANT = 279,
89      IMPLEMENTATION = 280,
90      ZEROINITIALIZER = 281,
91      TRUETOK = 282,
92      FALSETOK = 283,
93      BEGINTOK = 284,
94      ENDTOK = 285,
95      DECLARE = 286,
96      GLOBAL = 287,
97      CONSTANT = 288,
98      SECTION = 289,
99      VOLATILE = 290,
100      TO = 291,
101      DOTDOTDOT = 292,
102      NULL_TOK = 293,
103      UNDEF = 294,
104      CONST = 295,
105      INTERNAL = 296,
106      LINKONCE = 297,
107      WEAK = 298,
108      APPENDING = 299,
109      DLLIMPORT = 300,
110      DLLEXPORT = 301,
111      EXTERN_WEAK = 302,
112      OPAQUE = 303,
113      NOT = 304,
114      EXTERNAL = 305,
115      TARGET = 306,
116      TRIPLE = 307,
117      ENDIAN = 308,
118      POINTERSIZE = 309,
119      LITTLE = 310,
120      BIG = 311,
121      ALIGN = 312,
122      DEPLIBS = 313,
123      CALL = 314,
124      TAIL = 315,
125      ASM_TOK = 316,
126      MODULE = 317,
127      SIDEEFFECT = 318,
128      CC_TOK = 319,
129      CCC_TOK = 320,
130      CSRETCC_TOK = 321,
131      FASTCC_TOK = 322,
132      COLDCC_TOK = 323,
133      X86_STDCALLCC_TOK = 324,
134      X86_FASTCALLCC_TOK = 325,
135      DATALAYOUT = 326,
136      RET = 327,
137      BR = 328,
138      SWITCH = 329,
139      INVOKE = 330,
140      UNREACHABLE = 331,
141      UNWIND = 332,
142      EXCEPT = 333,
143      ADD = 334,
144      SUB = 335,
145      MUL = 336,
146      DIV = 337,
147      UDIV = 338,
148      SDIV = 339,
149      FDIV = 340,
150      REM = 341,
151      UREM = 342,
152      SREM = 343,
153      FREM = 344,
154      AND = 345,
155      OR = 346,
156      XOR = 347,
157      SHL = 348,
158      SHR = 349,
159      ASHR = 350,
160      LSHR = 351,
161      SETLE = 352,
162      SETGE = 353,
163      SETLT = 354,
164      SETGT = 355,
165      SETEQ = 356,
166      SETNE = 357,
167      ICMP = 358,
168      FCMP = 359,
169      MALLOC = 360,
170      ALLOCA = 361,
171      FREE = 362,
172      LOAD = 363,
173      STORE = 364,
174      GETELEMENTPTR = 365,
175      PHI_TOK = 366,
176      SELECT = 367,
177      VAARG = 368,
178      EXTRACTELEMENT = 369,
179      INSERTELEMENT = 370,
180      SHUFFLEVECTOR = 371,
181      VAARG_old = 372,
182      VANEXT_old = 373,
183      EQ = 374,
184      NE = 375,
185      SLT = 376,
186      SGT = 377,
187      SLE = 378,
188      SGE = 379,
189      ULT = 380,
190      UGT = 381,
191      ULE = 382,
192      UGE = 383,
193      OEQ = 384,
194      ONE = 385,
195      OLT = 386,
196      OGT = 387,
197      OLE = 388,
198      OGE = 389,
199      ORD = 390,
200      UNO = 391,
201      UEQ = 392,
202      UNE = 393,
203      CAST = 394,
204      TRUNC = 395,
205      ZEXT = 396,
206      SEXT = 397,
207      FPTRUNC = 398,
208      FPEXT = 399,
209      FPTOUI = 400,
210      FPTOSI = 401,
211      UITOFP = 402,
212      SITOFP = 403,
213      PTRTOINT = 404,
214      INTTOPTR = 405,
215      BITCAST = 406
216    };
217 #endif
218 /* Tokens.  */
219 #define ESINT64VAL 258
220 #define EUINT64VAL 259
221 #define SINTVAL 260
222 #define UINTVAL 261
223 #define FPVAL 262
224 #define VOID 263
225 #define BOOL 264
226 #define SBYTE 265
227 #define UBYTE 266
228 #define SHORT 267
229 #define USHORT 268
230 #define INT 269
231 #define UINT 270
232 #define LONG 271
233 #define ULONG 272
234 #define FLOAT 273
235 #define DOUBLE 274
236 #define TYPE 275
237 #define LABEL 276
238 #define VAR_ID 277
239 #define LABELSTR 278
240 #define STRINGCONSTANT 279
241 #define IMPLEMENTATION 280
242 #define ZEROINITIALIZER 281
243 #define TRUETOK 282
244 #define FALSETOK 283
245 #define BEGINTOK 284
246 #define ENDTOK 285
247 #define DECLARE 286
248 #define GLOBAL 287
249 #define CONSTANT 288
250 #define SECTION 289
251 #define VOLATILE 290
252 #define TO 291
253 #define DOTDOTDOT 292
254 #define NULL_TOK 293
255 #define UNDEF 294
256 #define CONST 295
257 #define INTERNAL 296
258 #define LINKONCE 297
259 #define WEAK 298
260 #define APPENDING 299
261 #define DLLIMPORT 300
262 #define DLLEXPORT 301
263 #define EXTERN_WEAK 302
264 #define OPAQUE 303
265 #define NOT 304
266 #define EXTERNAL 305
267 #define TARGET 306
268 #define TRIPLE 307
269 #define ENDIAN 308
270 #define POINTERSIZE 309
271 #define LITTLE 310
272 #define BIG 311
273 #define ALIGN 312
274 #define DEPLIBS 313
275 #define CALL 314
276 #define TAIL 315
277 #define ASM_TOK 316
278 #define MODULE 317
279 #define SIDEEFFECT 318
280 #define CC_TOK 319
281 #define CCC_TOK 320
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
288 #define RET 327
289 #define BR 328
290 #define SWITCH 329
291 #define INVOKE 330
292 #define UNREACHABLE 331
293 #define UNWIND 332
294 #define EXCEPT 333
295 #define ADD 334
296 #define SUB 335
297 #define MUL 336
298 #define DIV 337
299 #define UDIV 338
300 #define SDIV 339
301 #define FDIV 340
302 #define REM 341
303 #define UREM 342
304 #define SREM 343
305 #define FREM 344
306 #define AND 345
307 #define OR 346
308 #define XOR 347
309 #define SHL 348
310 #define SHR 349
311 #define ASHR 350
312 #define LSHR 351
313 #define SETLE 352
314 #define SETGE 353
315 #define SETLT 354
316 #define SETGT 355
317 #define SETEQ 356
318 #define SETNE 357
319 #define ICMP 358
320 #define FCMP 359
321 #define MALLOC 360
322 #define ALLOCA 361
323 #define FREE 362
324 #define LOAD 363
325 #define STORE 364
326 #define GETELEMENTPTR 365
327 #define PHI_TOK 366
328 #define SELECT 367
329 #define VAARG 368
330 #define EXTRACTELEMENT 369
331 #define INSERTELEMENT 370
332 #define SHUFFLEVECTOR 371
333 #define VAARG_old 372
334 #define VANEXT_old 373
335 #define EQ 374
336 #define NE 375
337 #define SLT 376
338 #define SGT 377
339 #define SLE 378
340 #define SGE 379
341 #define ULT 380
342 #define UGT 381
343 #define ULE 382
344 #define UGE 383
345 #define OEQ 384
346 #define ONE 385
347 #define OLT 386
348 #define OGT 387
349 #define OLE 388
350 #define OGE 389
351 #define ORD 390
352 #define UNO 391
353 #define UEQ 392
354 #define UNE 393
355 #define CAST 394
356 #define TRUNC 395
357 #define ZEXT 396
358 #define SEXT 397
359 #define FPTRUNC 398
360 #define FPEXT 399
361 #define FPTOUI 400
362 #define FPTOSI 401
363 #define UITOFP 402
364 #define SITOFP 403
365 #define PTRTOINT 404
366 #define INTTOPTR 405
367 #define BITCAST 406
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"
385 #include <algorithm>
386 #include <iostream>
387 #include <map>
388 #include <list>
389 #include <utility>
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
395 #ifdef DEBUG_UPREFS
396 #define UR_OUT(X) std::cerr << X
397 #else
398 #define UR_OUT(X)
399 #endif
401 #define YYERROR_VERBOSE 1
402 #define YYINCLUDED_STDLIB_H
403 #define YYDEBUG 1
405 int yylex();
406 int yyparse();
408 int yyerror(const char*);
409 static void warning(const std::string& WarningMsg);
411 namespace llvm {
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;
435 static void 
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.
461   //
462   typedef std::map<std::pair<const PointerType *, ValID>, GlobalValue*> 
463     GlobalRefsType;
464   GlobalRefsType GlobalRefs;
466   void ModuleDone() {
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.
470     //
471     ResolveDefinitions(LateResolveValues);
473     // Check to make sure that all global value forward references have been
474     // resolved!
475     //
476     if (!GlobalRefs.empty()) {
477       std::string UndefinedReferences = "Unresolved global references exist:\n";
479       for (GlobalRefsType::iterator I = GlobalRefs.begin(), E =GlobalRefs.end();
480            I != E; ++I) {
481         UndefinedReferences += "  " + I->first.first->getDescription() + " " +
482                                I->first.second.getName() + "\n";
483       }
484       error(UndefinedReferences);
485       return;
486     }
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())
494           dataLayout += "-";
495         dataLayout.append(PointerSize == Module::Pointer64 ? 
496                           "p:64:64" : "p:32:32");
497       }
498       CurrentModule->setDataLayout(dataLayout);
499     }
501     Values.clear();         // Clear out function local definitions
502     Types.clear();
503     TypeSigns.clear();
504     NamedTypeSigns.clear();
505     NamedValueSigns.clear();
506     CurrentModule = 0;
507   }
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()) {
518       Ret = I->second;
519       GlobalRefs.erase(I);
520     }
521     return Ret;
522   }
523   void setEndianness(Module::Endianness E) { Endian = E; }
524   void setPointerSize(Module::PointerSize sz) { PointerSize = sz; }
525 } CurModule;
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;
543   unsigned NextBBNum;
545   inline PerFunctionInfo() {
546     CurrentFunction = 0;
547     isDeclare = false;
548     Linkage = GlobalValue::ExternalLinkage;    
549   }
551   inline void FunctionStart(Function *M) {
552     CurrentFunction = M;
553     NextBBNum = 0;
554   }
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());
563       return;
564     }
566     // Resolve all forward references now.
567     ResolveDefinitions(LateResolveValues, &CurModule.LateResolveValues);
569     Values.clear();         // Clear out function local definitions
570     RenameMap.clear();
571     CurrentFunction = 0;
572     isDeclare = false;
573     Linkage = GlobalValue::ExternalLinkage;
574   }
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) {
586   TypeInfo TI; 
587   TI.T = Ty; 
588   if (Sign.isNamed())
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()]);
592   else
593     TI.S.copy(Sign);
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()];
608   List.push_back(V);
609   return List.size()-1;
612 static const Type *getType(const ValID &D, bool DoNotImprovise = false) {
613   switch (D.Type) {
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];
618     }
619     break;
620   case ValID::NameVal:                 // Is it a named definition?
621     if (const Type *N = CurModule.CurrentModule->getTypeByName(D.Name)) {
622       return N;
623     }
624     break;
625   default:
626     error("Internal parser error: Invalid symbol type reference");
627     return 0;
628   }
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...
633   //
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() + "'");
639       return 0;
640     } else {
641       error("Reference to an undefined type: #" + itostr(D.Num));
642       return 0;
643     }
644   }
646   std::map<ValID, PATypeHolder>::iterator I =CurModule.LateResolveTypes.find(D);
647   if (I != CurModule.LateResolveTypes.end())
648     return I->second;
650   Type *Typ = OpaqueType::get();
651   CurModule.LateResolveTypes.insert(std::make_pair(D, Typ));
652   return 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) {
659   switch (D.Type) {
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];
664     }
665     break;
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())
670       return I->second;
671     // Perhaps its a named forward .. just cache the name
672     Signedness S;
673     S.makeNamed(D.Name);
674     return S;
675   }
676   default: 
677     break;
678   }
679   // If we don't find it, its signless
680   Signedness S;
681   S.makeSignless();
682   return S;
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");
695   unsigned CurIdx = 0;
696   Signedness S(VI.S);
697   while (const CompositeType *CT = dyn_cast<CompositeType>(Ptr)) {
698     if (CurIdx == Indices.size())
699       break;
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())
705       Ptr = Ty;
706     assert(S.isComposite() && "Bad Signedness type");
707     if (isa<StructType>(CT)) {
708       S = S.get(cast<ConstantInt>(Index)->getZExtValue());
709     } else {
710       S = S.get(0UL);
711     }
712     if (S.isNamed())
713       S = CurModule.NamedTypeSigns[S.getName()];
714   }
715   Signedness Result;
716   Result.makeComposite(S);
717   return Result;
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) {
725   ValueInfo VI;
726   VI.V = CI.C;
727   VI.S.copy(CI.S);
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);
732   VI.destroy();
733   return result;
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())
743     return false;
744   const ParamAttrsList *PAL1 = F1->getParamAttrs();
745   const ParamAttrsList *PAL2 = F2->getParamAttrs();
746   if (PAL1 && !PAL2 || PAL2 && !PAL1)
747     return false;
748   if (PAL1 && PAL2 && ((PAL1->size() != PAL2->size()) ||
749       (PAL1->getParamAttrs(0) != PAL2->getParamAttrs(0)))) 
750     return false;
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)))
756       return false;
757   }
758   return true;
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)
766     return true;
767   const PointerType *PF1 = dyn_cast<PointerType>(Ty);
768   const PointerType *PF2 = dyn_cast<PointerType>(V->getType());
769   if (PF1 && PF2) {
770     const FunctionType* FT1 = dyn_cast<FunctionType>(PF1->getElementType());
771     const FunctionType* FT2 = dyn_cast<FunctionType>(PF2->getElementType());
772     if (FT1 && FT2)
773       return FuncTysDifferOnlyBySRet(FT1, FT2);
774   }
775   return false;
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
784   if (!V)
785     return 0;
786   if (V->getType() == Ty)
787     return V;
789   const PointerType *PF1 = dyn_cast<PointerType>(Ty);
790   const PointerType *PF2 = dyn_cast<PointerType>(V->getType());
791   if (PF1 && PF2) {
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))
797         return V;
798       else if (Constant *C = dyn_cast<Constant>(V))
799         return ConstantExpr::getBitCast(C, PF1);
800       else
801         return new BitCastInst(V, PF1, "upgrd.cast", CurBB);
802     }
803       
804   }
805   return 0;
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");
815   }
817   switch (D.Type) {
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();
827     }
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];
837   }
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);
842     Value *V = 0;
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;
849       else
850         LookupName = D.Name;
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");
856     }
857     if (!V) {
858       RenameMapType::const_iterator I = CurModule.RenameMap.find(Key);
859       std::string LookupName;
860       if (I != CurModule.RenameMap.end())
861         LookupName = I->second;
862       else
863         LookupName = D.Name;
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");
868     }
869     if (!V) 
870       return 0;
872     D.destroy();  // Free old strdup'd memory...
873     return V;
874   }
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() + "'");
882     }
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);
892     } else
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);
910     
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.
925     return IA;
926   }
927   default:
928     assert(0 && "Unhandled case");
929     return 0;
930   }   // End of switch
932   assert(0 && "Unhandled case");
933   return 0;
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
940 // real thing.
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);
948   if (V) return V;
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);
965   else
966     InsertValue(V, CurModule.LateResolveValues);
967   return V;
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++);
975   return Result;
978 /// getBBVal - This is used for two purposes:
979 ///  * If isDefinition is true, a new basic block with the specified ID is being
980 ///    defined.
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");
987   std::string Name;
988   BasicBlock *BB = 0;
989   switch (ID.Type) {
990   default: 
991     error("Illegal label reference " + ID.getName());
992     break;
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];
997     break;
998   case ValID::NameVal:                  // Is it a named definition?
999     Name = ID.Name;
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
1005         // had been found.
1006         RenameMapKey Key = makeRenameMapKey(ID.Name, N->getType(), ID.S);
1007         N->setName(makeNameUnique(N->getName()));
1008         CurModule.RenameMap[Key] = N->getName();
1009         BB = 0;
1010       } else {
1011         BB = cast<BasicBlock>(N);
1012       }
1013     }
1014     break;
1015   }
1017   // See if the block has already been defined.
1018   if (BB) {
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.
1027     return BB;
1028   }
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);
1034   } else {
1035     CurFun.NumberedBlocks[ID.Num] = BB;
1036   }
1038   // If this is not a definition, keep track of it so we can use it as a forward
1039   // reference.
1040   if (!isDefinition) {
1041     // Remember where this forward reference came from.
1042     CurFun.BBForwardRefs[BB] = std::make_pair(ID, Upgradelineno);
1043   } else {
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);
1048   }
1049   ID.destroy();
1050   return 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
1060 // a loop body.
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
1068 // defs now...
1070 static void 
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();
1081       List.pop_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);
1090       if (TheRealValue) {
1091         V->replaceAllUsesWith(TheRealValue);
1092         delete V;
1093         CurModule.PlaceHolderInfo.erase(PHI);
1094       } else if (FutureLateResolvers) {
1095         // Functions have their unresolved items forwarded to the module late
1096         // resolver table
1097         InsertValue(V, *FutureLateResolvers);
1098       } else {
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);
1103             return;
1104         } else {
1105           error("Reference to an invalid definition: #" +
1106                 itostr(DID.Num) + " of type '" + 
1107                 V->getType()->getDescription() + "'", PHI->second.second);
1108           return;
1109         }
1110       }
1111     }
1112   }
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
1119 /// concrete type.
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){
1130   ValID D;
1131   if (Name)
1132     D = ValID::create(Name);
1133   else      
1134     D = ValID::create((int)CurModule.Types.size());
1135   D.S.copy(Sign);
1137   if (Name)
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);
1146   }
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))
1155     return false;
1156   if (Ty->isInteger())
1157     return true;
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();
1163        I != E; ++I)
1164     if (Ty == *I)
1165       return false;
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)) 
1172       return true;
1173     FunctionType::param_iterator I = FTy->param_begin();
1174     FunctionType::param_iterator E = FTy->param_end();
1175     for (; I != E; ++I)
1176       if (TypeHasIntegerI(*I, Stack))
1177         return true;
1178     return false;
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))
1184         return true;
1185     }
1186     return false;
1187   }
1188   // There shouldn't be anything else, but its definitely not integer
1189   assert(0 && "What type is this?");
1190   return false;
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) {
1205   if (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");
1211       return;
1212     }
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);
1219     if (Existing) {
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() + "'");
1229         return;
1230       } 
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 
1237       // cause a problem.
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;
1244       Name = NewName;
1245     }
1247     // Set the name.
1248     V.V->setName(Name);
1249   }
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);
1264   std::string Name;
1265   if (NameStr) {
1266     Name = NameStr;      // Copy string
1267     free(NameStr);       // Free old string
1268   }
1270   // See if this global value was forward referenced.  If so, recycle the
1271   // object.
1272   ValID ID;
1273   if (!Name.empty()) {
1274     ID = ValID::create((char*)Name.c_str());
1275   } else {
1276     ID = ValID::create((int)CurModule.Values[PTy].size());
1277   }
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);
1290     return GV;
1291   }
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");
1313       }
1315       // Put the renaming in the global rename map
1316       RenameMapKey Key = makeRenameMapKey(Name, PointerType::get(Ty), ID.S);
1317       CurModule.RenameMap[Key] = NewName;
1319       // Rename it
1320       Name = NewName;
1321     }
1322   }
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;
1331   return GV;
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");
1353     return false;
1354   }
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);
1371       return true;
1372     }
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");
1383   }
1385   return false;
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();
1399 namespace {
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) { }
1415   };
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;
1432   
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
1441   // this variable.
1442   OpaqueType *TypeToResolve = 0;
1444   unsigned i = 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;
1457         } else {
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");
1465         }
1466         UpRefs.erase(UpRefs.begin()+i);     // Remove from upreference list...
1467         --i;                                // Do not skip the next element...
1468       }
1469     }
1470   }
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);
1478   }
1480   return Ty;
1483 bool Signedness::operator<(const Signedness &that) const {
1484   if (isNamed()) {
1485     if (that.isNamed()) 
1486       return *(this->name) < *(that.name);
1487     else
1488       return CurModule.NamedTypeSigns[*name] < that;
1489   } else if (that.isNamed()) {
1490     return *this < CurModule.NamedTypeSigns[*that.name];
1491   }
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)
1500           return true;
1501         else if (!(*thisI == *thatI))
1502           return false;
1503       }
1504       return false;
1505     }
1506     return sv->size() < that.sv->size();
1507   }  
1508   return kind < that.kind;
1511 bool Signedness::operator==(const Signedness &that) const {
1512   if (isNamed())
1513     if (that.isNamed())
1514       return *(this->name) == *(that.name);
1515     else 
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))
1526           return false;
1527       }
1528       return true;
1529     }
1530     return false;
1531   }
1532   return kind == that.kind;
1535 void Signedness::copy(const Signedness &that) {
1536   if (that.isNamed()) {
1537     kind = Named;
1538     name = new std::string(*that.name);
1539   } else if (that.isComposite()) {
1540     kind = Composite;
1541     sv = new SignVector();
1542     *sv = *that.sv;
1543   } else {
1544     kind = that.kind;
1545     sv = 0;
1546   }
1549 void Signedness::destroy() {
1550   if (isNamed()) {
1551     delete name;
1552   } else if (isComposite()) {
1553     delete sv;
1554   } 
1557 #ifndef NDEBUG
1558 void Signedness::dump() const {
1559   if (isComposite()) {
1560     if (sv->size() == 1) {
1561       (*sv)[0].dump();
1562       std::cerr << "*";
1563     } else {
1564       std::cerr << "{ " ;
1565       for (unsigned i = 0; i < sv->size(); ++i) {
1566         if (i != 0)
1567           std::cerr << ", ";
1568         (*sv)[i].dump();
1569       }
1570       std::cerr << "} " ;
1571     }
1572   } else if (isNamed()) {
1573     std::cerr << *name;
1574   } else if (isSigned()) {
1575     std::cerr << "S";
1576   } else if (isUnsigned()) {
1577     std::cerr << "U";
1578   } else
1579     std::cerr << ".";
1581 #endif
1583 static inline Instruction::TermOps 
1584 getTermOp(TermOps op) {
1585   switch (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;
1593   }
1596 static inline Instruction::BinaryOps 
1597 getBinaryOp(BinaryOps op, const Type *Ty, const Signedness& Sign) {
1598   switch (op) {
1599     default     : assert(0 && "Invalid OldBinaryOps");
1600     case SetEQ  : 
1601     case SetNE  : 
1602     case SetLE  :
1603     case SetGE  :
1604     case SetLT  :
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;
1609     case DivOp  : {
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();
1616       if (isFP)
1617         return Instruction::FDiv;
1618       else if (Sign.isSigned())
1619         return Instruction::SDiv;
1620       return Instruction::UDiv;
1621     }
1622     case UDivOp : return Instruction::UDiv;
1623     case SDivOp : return Instruction::SDiv;
1624     case FDivOp : return Instruction::FDiv;
1625     case RemOp  : {
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
1633       if (isFP)
1634         return Instruction::FRem;
1635       else if (Sign.isSigned())
1636         return Instruction::SRem;
1637       return Instruction::URem;
1638     }
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;
1645     case ShrOp  : 
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;
1652   }
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();
1660   switch (op) {
1661     default     : assert(0 && "Invalid OldSetCC");
1662     case SetEQ  : 
1663       if (isFP) {
1664         predicate = FCmpInst::FCMP_OEQ;
1665         return Instruction::FCmp;
1666       } else {
1667         predicate = ICmpInst::ICMP_EQ;
1668         return Instruction::ICmp;
1669       }
1670     case SetNE  : 
1671       if (isFP) {
1672         predicate = FCmpInst::FCMP_UNE;
1673         return Instruction::FCmp;
1674       } else {
1675         predicate = ICmpInst::ICMP_NE;
1676         return Instruction::ICmp;
1677       }
1678     case SetLE  : 
1679       if (isFP) {
1680         predicate = FCmpInst::FCMP_OLE;
1681         return Instruction::FCmp;
1682       } else {
1683         if (isSigned)
1684           predicate = ICmpInst::ICMP_SLE;
1685         else
1686           predicate = ICmpInst::ICMP_ULE;
1687         return Instruction::ICmp;
1688       }
1689     case SetGE  : 
1690       if (isFP) {
1691         predicate = FCmpInst::FCMP_OGE;
1692         return Instruction::FCmp;
1693       } else {
1694         if (isSigned)
1695           predicate = ICmpInst::ICMP_SGE;
1696         else
1697           predicate = ICmpInst::ICMP_UGE;
1698         return Instruction::ICmp;
1699       }
1700     case SetLT  : 
1701       if (isFP) {
1702         predicate = FCmpInst::FCMP_OLT;
1703         return Instruction::FCmp;
1704       } else {
1705         if (isSigned)
1706           predicate = ICmpInst::ICMP_SLT;
1707         else
1708           predicate = ICmpInst::ICMP_ULT;
1709         return Instruction::ICmp;
1710       }
1711     case SetGT  : 
1712       if (isFP) {
1713         predicate = FCmpInst::FCMP_OGT;
1714         return Instruction::FCmp;
1715       } else {
1716         if (isSigned)
1717           predicate = ICmpInst::ICMP_SGT;
1718         else
1719           predicate = ICmpInst::ICMP_UGT;
1720         return Instruction::ICmp;
1721       }
1722   }
1725 static inline Instruction::MemoryOps getMemoryOp(MemoryOps op) {
1726   switch (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;
1734   }
1737 static inline Instruction::OtherOps 
1738 getOtherOp(OtherOps op, const Signedness &Sign) {
1739   switch (op) {
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;
1752   };
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();
1760   if (op == CastOp) {
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);
1769       } else {
1770         std::string NewName(makeNameUnique(Src->getName()));
1771         Src = new FPToUIInst(Src, SrcTy, NewName, CurBB);
1772       }
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");
1786       }
1787       if (isa<Constant>(Src) && !ForceInstruction)
1788         return ConstantExpr::getCompare(predicate, cast<Constant>(Src), Null);
1789       else
1790         return CmpInst::create(Opcode, predicate, Src, Null);
1791     }
1792     // Determine the opcode to use by calling CastInst::getCastOpcode
1793     Opcode = 
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;
1811   }
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] != '.')
1825     return 0;
1827   switch (Name[5]) {
1828     case 'i':
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]);
1833       }
1834       break;
1835     case 'b':
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, 
1841                                                        (void*)0));
1842         return new CallInst(F, Args[0]);
1843       }
1844       break;
1845     case 'c':
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);
1852         if (OldF)
1853           OldF->setName("upgrd.rm." + Name);
1855         Function *NewF = cast<Function>(
1856           CurModule.CurrentModule->getOrInsertFunction(Name, Type::Int32Ty, 
1857                                                        ArgTy, (void*)0));
1859         Instruction *Call = new CallInst(NewF, Args[0], "", CurBB);
1860         return CastInst::createIntegerCast(Call, RetTy, false);
1861       }
1862       break;
1864     case 'v' : {
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());
1891       }
1892     }
1893   }
1894   return 0;
1897 const Type* upgradeGEPCEIndices(const Type* PTy, 
1898                                 std::vector<ValueInfo> *Indices, 
1899                                 std::vector<Constant*> &Result) {
1900   const Type *Ty = PTy;
1901   Result.clear();
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);
1910     }
1911     
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);
1920         }
1921       }
1922     }
1923     Result.push_back(Index);
1924     Ty = GetElementPtrInst::getIndexedType(PTy, (Value**)&Result[0], 
1925                                            Result.size(),true);
1926     if (!Ty)
1927       error("Index list invalid for constant getelementptr");
1928   }
1929   return Ty;
1932 const Type* upgradeGEPInstIndices(const Type* PTy, 
1933                                   std::vector<ValueInfo> *Indices, 
1934                                   std::vector<Value*>    &Result) {
1935   const Type *Ty = PTy;
1936   Result.clear();
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);
1945     }
1946     
1948     if (isa<StructType>(Ty)) {        // Only change struct indices
1949       if (!isa<Constant>(Index)) {
1950         error("Invalid non-constant structure index");
1951         return 0;
1952       }
1953     } else {
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);
1963           else
1964             Index = CastInst::create(Instruction::ZExt, Index, Type::Int64Ty,
1965               makeNameUnique("gep"), CurBB);
1966         }
1967       }
1968     }
1969     Result.push_back(Index);
1970     Ty = GetElementPtrInst::getIndexedType(PTy, &Result[0], Result.size(),true);
1971     if (!Ty)
1972       error("Index list invalid for constant getelementptr");
1973   }
1974   return Ty;
1977 unsigned upgradeCallingConv(unsigned CC) {
1978   switch (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;
1985     default:
1986       return CC;
1987   }
1990 Module* UpgradeAssembly(const std::string &infile, std::istream& in, 
1991                               bool debug, bool addAttrs)
1993   Upgradelineno = 1; 
1994   CurFilename = infile;
1995   LexInput = &in;
1996   yydebug = debug;
1997   AddAttributes = addAttrs;
1998   ObsoleteVarArgs = false;
1999   NewVarArgs = false;
2001   CurModule.CurrentModule = new Module(CurFilename);
2003   // Check to make sure the parser succeeded
2004   if (yyparse()) {
2005     if (ParserResult)
2006       delete ParserResult;
2007     std::cerr << "llvm-upgrade: parse failed.\n";
2008     return 0;
2009   }
2011   // Check to make sure that parsing produced a result
2012   if (!ParserResult) {
2013     std::cerr << "llvm-upgrade: no parse result.\n";
2014     return 0;
2015   }
2017   // Reset ParserResult variable while saving its value for the result.
2018   Module *Result = ParserResult;
2019   ParserResult = 0;
2021   //Not all functions use vaarg, so make a second check for ObsoleteVarArgs
2022   {
2023     Function* F;
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;
2030   }
2032   if (ObsoleteVarArgs && NewVarArgs) {
2033     error("This file is corrupt: it uses both new and old style varargs");
2034     return 0;
2035   }
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");
2041         return 0;
2042       }
2043       
2044       //foo = va_start()
2045       // ->
2046       //bar = alloca typeof(foo)
2047       //va_start(bar)
2048       //foo = load bar
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);
2063       }
2064       Result->getFunctionList().erase(F);
2065     }
2066     
2067     if(Function* F = Result->getFunction("llvm.va_end")) {
2068       if(F->arg_size() != 1) {
2069         error("Obsolete va_end takes 1 argument");
2070         return 0;
2071       }
2073       //vaend foo
2074       // ->
2075       //bar = alloca 1 of typeof(foo)
2076       //vaend bar
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);
2089       }
2090       Result->getFunctionList().erase(F);
2091     }
2093     if(Function* F = Result->getFunction("llvm.va_copy")) {
2094       if(F->arg_size() != 1) {
2095         error("Obsolete va_copy takes 1 argument");
2096         return 0;
2097       }
2098       //foo = vacopy(bar)
2099       // ->
2100       //a = alloca 1 of typeof(foo)
2101       //b = alloca 1 of typeof(foo)
2102       //store bar -> b
2103       //vacopy(a, b)
2104       //foo = load a
2105       
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);
2121       }
2122       Result->getFunctionList().erase(F);
2123     }
2124   }
2126   return Result;
2129 } // end llvm namespace
2131 using namespace llvm;
2135 /* Enabling traces.  */
2136 #ifndef YYDEBUG
2137 # define YYDEBUG 0
2138 #endif
2140 /* Enabling verbose error messages.  */
2141 #ifdef YYERROR_VERBOSE
2142 # undef YYERROR_VERBOSE
2143 # define YYERROR_VERBOSE 1
2144 #else
2145 # define YYERROR_VERBOSE 0
2146 #endif
2148 /* Enabling the token table.  */
2149 #ifndef YYTOKEN_TABLE
2150 # define YYTOKEN_TABLE 0
2151 #endif
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;
2177   int64_t                           SInt64Val;
2178   uint64_t                          UInt64Val;
2179   int                               SIntVal;
2180   unsigned                          UIntVal;
2181   double                            FPVal;
2182   bool                              BoolVal;
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;
2195 } YYSTYPE;
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
2201 #endif
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__
2213 #endif
2214 #if ! defined (YYSIZE_T) && defined (size_t)
2215 # define YYSIZE_T size_t
2216 #endif
2217 #if ! defined (YYSIZE_T) && (defined (__STDC__) || defined (__cplusplus))
2218 # include <stddef.h> /* INFRINGES ON USER NAME SPACE */
2219 # define YYSIZE_T size_t
2220 #endif
2221 #if ! defined (YYSIZE_T)
2222 # define YYSIZE_T unsigned int
2223 #endif
2225 #ifndef YY_
2226 # if YYENABLE_NLS
2227 #  if ENABLE_NLS
2228 #   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
2229 #   define YY_(msgid) dgettext ("bison-runtime", msgid)
2230 #  endif
2231 # endif
2232 # ifndef YY_
2233 #  define YY_(msgid) msgid
2234 # endif
2235 #endif
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
2243 #   ifdef __GNUC__
2244 #    define YYSTACK_ALLOC __builtin_alloca
2245 #   else
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
2250 #    endif
2251 #   endif
2252 #  endif
2253 # endif
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 */
2264 #  endif
2265 # else
2266 #  define YYSTACK_ALLOC YYMALLOC
2267 #  define YYSTACK_FREE YYFREE
2268 #  ifndef YYSTACK_ALLOC_MAXIMUM
2269 #   define YYSTACK_ALLOC_MAXIMUM ((YYSIZE_T) -1)
2270 #  endif
2271 #  ifdef __cplusplus
2272 extern "C" {
2273 #  endif
2274 #  ifndef YYMALLOC
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 */
2279 #   endif
2280 #  endif
2281 #  ifndef YYFREE
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 */
2286 #   endif
2287 #  endif
2288 #  ifdef __cplusplus
2290 #  endif
2291 # endif
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.  */
2300 union yyalloc
2302   short int yyss;
2303   YYSTYPE yyvs;
2304   };
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
2310    N elements.  */
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
2316    not overlap.  */
2317 # ifndef YYCOPY
2318 #  if defined (__GNUC__) && 1 < __GNUC__
2319 #   define YYCOPY(To, From, Count) \
2320       __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
2321 #  else
2322 #   define YYCOPY(To, From, Count)              \
2323       do                                        \
2324         {                                       \
2325           YYSIZE_T yyi;                         \
2326           for (yyi = 0; yyi < (Count); yyi++)   \
2327             (To)[yyi] = (From)[yyi];            \
2328         }                                       \
2329       while (0)
2330 #  endif
2331 # endif
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
2337    stack.  */
2338 # define YYSTACK_RELOCATE(Stack)                                        \
2339     do                                                                  \
2340       {                                                                 \
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);                          \
2346       }                                                                 \
2347     while (0)
2349 #endif
2351 #if defined (__STDC__) || defined (__cplusplus)
2352    typedef signed char yysigned_char;
2353 #else
2354    typedef short int yysigned_char;
2355 #endif
2357 /* YYFINAL -- State number of the termination state. */
2358 #define YYFINAL  4
2359 /* YYLAST -- Last index in YYTABLE.  */
2360 #define YYLAST   1630
2362 /* YYNTOKENS -- Number of terminals. */
2363 #define YYNTOKENS  166
2364 /* YYNNTS -- Number of nonterminals. */
2365 #define YYNNTS  81
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
2424 #if YYDEBUG
2425 /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
2426    YYRHS.  */
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,
2460      969
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,
2563      191,   230,   244,    -1
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,
2600     3908
2602 #endif
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
2650 #endif
2652 # ifdef YYPRINT
2653 /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
2654    token YYLEX-NUM.  */
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
2675 # endif
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,
2711      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,
2748        4
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,
2830      186
2833 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
2834    STATE-NUM.  */
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,
2912     -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,
3085      175
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,
3253      151
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)
3326 #define YYEOF           0
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)                                  \
3342 do                                                              \
3343   if (yychar == YYEMPTY && yylen == 1)                          \
3344     {                                                           \
3345       yychar = (Token);                                         \
3346       yylval = (Value);                                         \
3347       yytoken = YYTRANSLATE (yychar);                           \
3348       YYPOPSTACK;                                               \
3349       goto yybackup;                                            \
3350     }                                                           \
3351   else                                                          \
3352     {                                                           \
3353       yyerror (YY_("syntax error: cannot back up")); \
3354       YYERROR;                                                  \
3355     }                                                           \
3356 while (0)
3359 #define YYTERROR        1
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)                                \
3370     do                                                                  \
3371       if (N)                                                            \
3372         {                                                               \
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;       \
3377         }                                                               \
3378       else                                                              \
3379         {                                                               \
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;                              \
3384         }                                                               \
3385     while (0)
3386 #endif
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)
3399 # else
3400 #  define YY_LOCATION_PRINT(File, Loc) ((void) 0)
3401 # endif
3402 #endif
3405 /* YYLEX -- calling `yylex' with the right arguments.  */
3407 #ifdef YYLEX_PARAM
3408 # define YYLEX yylex (YYLEX_PARAM)
3409 #else
3410 # define YYLEX yylex ()
3411 #endif
3413 /* Enable debugging if requested.  */
3414 #if YYDEBUG
3416 # ifndef YYFPRINTF
3417 #  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
3418 #  define YYFPRINTF fprintf
3419 # endif
3421 # define YYDPRINTF(Args)                        \
3422 do {                                            \
3423   if (yydebug)                                  \
3424     YYFPRINTF Args;                             \
3425 } while (0)
3427 # define YY_SYMBOL_PRINT(Title, Type, Value, Location)          \
3428 do {                                                            \
3429   if (yydebug)                                                  \
3430     {                                                           \
3431       YYFPRINTF (stderr, "%s ", Title);                         \
3432       yysymprint (stderr,                                       \
3433                   Type, Value); \
3434       YYFPRINTF (stderr, "\n");                                 \
3435     }                                                           \
3436 } while (0)
3438 /*------------------------------------------------------------------.
3439 | yy_stack_print -- Print the state stack from its BOTTOM up to its |
3440 | TOP (included).                                                   |
3441 `------------------------------------------------------------------*/
3443 #if defined (__STDC__) || defined (__cplusplus)
3444 static void
3445 yy_stack_print (short int *bottom, short int *top)
3446 #else
3447 static void
3448 yy_stack_print (bottom, top)
3449     short int *bottom;
3450     short int *top;
3451 #endif
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)                            \
3460 do {                                                            \
3461   if (yydebug)                                                  \
3462     yy_stack_print ((Bottom), (Top));                           \
3463 } while (0)
3466 /*------------------------------------------------.
3467 | Report that the YYRULE is going to be reduced.  |
3468 `------------------------------------------------*/
3470 #if defined (__STDC__) || defined (__cplusplus)
3471 static void
3472 yy_reduce_print (int yyrule)
3473 #else
3474 static void
3475 yy_reduce_print (yyrule)
3476     int yyrule;
3477 #endif
3479   int yyi;
3480   unsigned long int yylno = yyrline[yyrule];
3481   YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu), ",
3482              yyrule - 1, yylno);
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)          \
3490 do {                                    \
3491   if (yydebug)                          \
3492     yy_reduce_print (Rule);             \
3493 } while (0)
3495 /* Nonzero means print parse trace.  It is left uninitialized so that
3496    multiple parsers can coexist.  */
3497 int yydebug;
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.  */
3507 #ifndef YYINITDEPTH
3508 # define YYINITDEPTH 200
3509 #endif
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.  */
3518 #ifndef YYMAXDEPTH
3519 # define YYMAXDEPTH 10000
3520 #endif
3524 #if YYERROR_VERBOSE
3526 # ifndef yystrlen
3527 #  if defined (__GLIBC__) && defined (_STRING_H)
3528 #   define yystrlen strlen
3529 #  else
3530 /* Return the length of YYSTR.  */
3531 static YYSIZE_T
3532 #   if defined (__STDC__) || defined (__cplusplus)
3533 yystrlen (const char *yystr)
3534 #   else
3535 yystrlen (yystr)
3536      const char *yystr;
3537 #   endif
3539   const char *yys = yystr;
3541   while (*yys++ != '\0')
3542     continue;
3544   return yys - yystr - 1;
3546 #  endif
3547 # endif
3549 # ifndef yystpcpy
3550 #  if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
3551 #   define yystpcpy stpcpy
3552 #  else
3553 /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
3554    YYDEST.  */
3555 static char *
3556 #   if defined (__STDC__) || defined (__cplusplus)
3557 yystpcpy (char *yydest, const char *yysrc)
3558 #   else
3559 yystpcpy (yydest, yysrc)
3560      char *yydest;
3561      const char *yysrc;
3562 #   endif
3564   char *yyd = yydest;
3565   const char *yys = yysrc;
3567   while ((*yyd++ = *yys++) != '\0')
3568     continue;
3570   return yyd - 1;
3572 #  endif
3573 # endif
3575 # ifndef yytnamerr
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
3582    would have been.  */
3583 static YYSIZE_T
3584 yytnamerr (char *yyres, const char *yystr)
3586   if (*yystr == '"')
3587     {
3588       size_t yyn = 0;
3589       char const *yyp = yystr;
3591       for (;;)
3592         switch (*++yyp)
3593           {
3594           case '\'':
3595           case ',':
3596             goto do_not_strip_quotes;
3598           case '\\':
3599             if (*++yyp != '\\')
3600               goto do_not_strip_quotes;
3601             /* Fall through.  */
3602           default:
3603             if (yyres)
3604               yyres[yyn] = *yyp;
3605             yyn++;
3606             break;
3608           case '"':
3609             if (yyres)
3610               yyres[yyn] = '\0';
3611             return yyn;
3612           }
3613     do_not_strip_quotes: ;
3614     }
3616   if (! yyres)
3617     return yystrlen (yystr);
3619   return yystpcpy (yyres, yystr) - yyres;
3621 # endif
3623 #endif /* YYERROR_VERBOSE */
3627 #if YYDEBUG
3628 /*--------------------------------.
3629 | Print this symbol on YYOUTPUT.  |
3630 `--------------------------------*/
3632 #if defined (__STDC__) || defined (__cplusplus)
3633 static void
3634 yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep)
3635 #else
3636 static void
3637 yysymprint (yyoutput, yytype, yyvaluep)
3638     FILE *yyoutput;
3639     int yytype;
3640     YYSTYPE *yyvaluep;
3641 #endif
3643   /* Pacify ``unused variable'' warnings.  */
3644   (void) yyvaluep;
3646   if (yytype < YYNTOKENS)
3647     YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
3648   else
3649     YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
3652 # ifdef YYPRINT
3653   if (yytype < YYNTOKENS)
3654     YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
3655 # endif
3656   switch (yytype)
3657     {
3658       default:
3659         break;
3660     }
3661   YYFPRINTF (yyoutput, ")");
3664 #endif /* ! YYDEBUG */
3665 /*-----------------------------------------------.
3666 | Release the memory associated to this symbol.  |
3667 `-----------------------------------------------*/
3669 #if defined (__STDC__) || defined (__cplusplus)
3670 static void
3671 yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
3672 #else
3673 static void
3674 yydestruct (yymsg, yytype, yyvaluep)
3675     const char *yymsg;
3676     int yytype;
3677     YYSTYPE *yyvaluep;
3678 #endif
3680   /* Pacify ``unused variable'' warnings.  */
3681   (void) yyvaluep;
3683   if (!yymsg)
3684     yymsg = "Deleting";
3685   YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
3687   switch (yytype)
3688     {
3690       default:
3691         break;
3692     }
3696 /* Prevent warnings from -Wmissing-prototypes.  */
3698 #ifdef YYPARSE_PARAM
3699 # if defined (__STDC__) || defined (__cplusplus)
3700 int yyparse (void *YYPARSE_PARAM);
3701 # else
3702 int yyparse ();
3703 # endif
3704 #else /* ! YYPARSE_PARAM */
3705 #if defined (__STDC__) || defined (__cplusplus)
3706 int yyparse (void);
3707 #else
3708 int yyparse ();
3709 #endif
3710 #endif /* ! YYPARSE_PARAM */
3714 /* The look-ahead symbol.  */
3715 int yychar;
3717 /* The semantic value of the look-ahead symbol.  */
3718 YYSTYPE yylval;
3720 /* Number of syntax errors so far.  */
3721 int yynerrs;
3725 /*----------.
3726 | yyparse.  |
3727 `----------*/
3729 #ifdef YYPARSE_PARAM
3730 # if defined (__STDC__) || defined (__cplusplus)
3731 int yyparse (void *YYPARSE_PARAM)
3732 # else
3733 int yyparse (YYPARSE_PARAM)
3734   void *YYPARSE_PARAM;
3735 # endif
3736 #else /* ! YYPARSE_PARAM */
3737 #if defined (__STDC__) || defined (__cplusplus)
3739 yyparse (void)
3740 #else
3742 yyparse ()
3744 #endif
3745 #endif
3747   
3748   int yystate;
3749   int yyn;
3750   int yyresult;
3751   /* Number of tokens to shift before error messages enabled.  */
3752   int yyerrstatus;
3753   /* Look-ahead token as an internal (translated) token number.  */
3754   int yytoken = 0;
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;
3767   short int *yyssp;
3769   /* The semantic value stack.  */
3770   YYSTYPE yyvsa[YYINITDEPTH];
3771   YYSTYPE *yyvs = yyvsa;
3772   YYSTYPE *yyvsp;
3776 #define YYPOPSTACK   (yyvsp--, yyssp--)
3778   YYSIZE_T yystacksize = YYINITDEPTH;
3780   /* The variables used to return semantic value and location from the
3781      action routines.  */
3782   YYSTYPE yyval;
3785   /* When reducing, the number of symbols on the RHS of the reduced
3786      rule.  */
3787   int yylen;
3789   YYDPRINTF ((stderr, "Starting parse\n"));
3791   yystate = 0;
3792   yyerrstatus = 0;
3793   yynerrs = 0;
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.  */
3801   yyssp = yyss;
3802   yyvsp = yyvs;
3804   goto yysetstate;
3806 /*------------------------------------------------------------.
3807 | yynewstate -- Push a new state, which is found in yystate.  |
3808 `------------------------------------------------------------*/
3809  yynewstate:
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.
3812      */
3813   yyssp++;
3815  yysetstate:
3816   *yyssp = yystate;
3818   if (yyss + yystacksize - 1 <= yyssp)
3819     {
3820       /* Get the current used size of the three stacks, in elements.  */
3821       YYSIZE_T yysize = yyssp - yyss + 1;
3823 #ifdef yyoverflow
3824       {
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
3827            memory.  */
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),
3840                     &yystacksize);
3842         yyss = yyss1;
3843         yyvs = yyvs1;
3844       }
3845 #else /* no yyoverflow */
3846 # ifndef YYSTACK_RELOCATE
3847       goto yyexhaustedlab;
3848 # else
3849       /* Extend the stack our own way.  */
3850       if (YYMAXDEPTH <= yystacksize)
3851         goto yyexhaustedlab;
3852       yystacksize *= 2;
3853       if (YYMAXDEPTH < yystacksize)
3854         yystacksize = YYMAXDEPTH;
3856       {
3857         short int *yyss1 = yyss;
3858         union yyalloc *yyptr =
3859           (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
3860         if (! yyptr)
3861           goto yyexhaustedlab;
3862         YYSTACK_RELOCATE (yyss);
3863         YYSTACK_RELOCATE (yyvs);
3865 #  undef YYSTACK_RELOCATE
3866         if (yyss1 != yyssa)
3867           YYSTACK_FREE (yyss1);
3868       }
3869 # endif
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)
3880         YYABORT;
3881     }
3883   YYDPRINTF ((stderr, "Entering state %d\n", yystate));
3885   goto yybackup;
3887 /*-----------.
3888 | yybackup.  |
3889 `-----------*/
3890 yybackup:
3892 /* Do appropriate processing given the current state.  */
3893 /* Read a look-ahead token if we need one and don't already have one.  */
3894 /* yyresume: */
3896   /* First try to decide what to do without reference to look-ahead token.  */
3898   yyn = yypact[yystate];
3899   if (yyn == YYPACT_NINF)
3900     goto yydefault;
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)
3906     {
3907       YYDPRINTF ((stderr, "Reading a token: "));
3908       yychar = YYLEX;
3909     }
3911   if (yychar <= YYEOF)
3912     {
3913       yychar = yytoken = YYEOF;
3914       YYDPRINTF ((stderr, "Now at end of input.\n"));
3915     }
3916   else
3917     {
3918       yytoken = YYTRANSLATE (yychar);
3919       YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
3920     }
3922   /* If the proper action on seeing token YYTOKEN is to reduce or to
3923      detect an error, take that action.  */
3924   yyn += yytoken;
3925   if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
3926     goto yydefault;
3927   yyn = yytable[yyn];
3928   if (yyn <= 0)
3929     {
3930       if (yyn == 0 || yyn == YYTABLE_NINF)
3931         goto yyerrlab;
3932       yyn = -yyn;
3933       goto yyreduce;
3934     }
3936   if (yyn == YYFINAL)
3937     YYACCEPT;
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)
3944     yychar = YYEMPTY;
3946   *++yyvsp = yylval;
3949   /* Count tokens shifted since error; after three, turn off error
3950      status.  */
3951   if (yyerrstatus)
3952     yyerrstatus--;
3954   yystate = yyn;
3955   goto yynewstate;
3958 /*-----------------------------------------------------------.
3959 | yydefault -- do the default action for the current state.  |
3960 `-----------------------------------------------------------*/
3961 yydefault:
3962   yyn = yydefact[yystate];
3963   if (yyn == 0)
3964     goto yyerrlab;
3965   goto yyreduce;
3968 /*-----------------------------.
3969 | yyreduce -- Do a reduction.  |
3970 `-----------------------------*/
3971 yyreduce:
3972   /* yyn is the number of a rule to reduce with.  */
3973   yylen = yyr2[yyn];
3975   /* If YYLEN is nonzero, implement the default value of the action:
3976      `$$ = $1'.
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);
3987   switch (yyn)
3988     {
3989         case 3:
3990 #line 1916 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
3991     {
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);
3995   ;}
3996     break;
3998   case 5:
3999 #line 1925 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4000     {
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);
4004   ;}
4005     break;
4007   case 26:
4008 #line 1947 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4009     { (yyval.IPred) = ICmpInst::ICMP_EQ; ;}
4010     break;
4012   case 27:
4013 #line 1947 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4014     { (yyval.IPred) = ICmpInst::ICMP_NE; ;}
4015     break;
4017   case 28:
4018 #line 1948 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4019     { (yyval.IPred) = ICmpInst::ICMP_SLT; ;}
4020     break;
4022   case 29:
4023 #line 1948 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4024     { (yyval.IPred) = ICmpInst::ICMP_SGT; ;}
4025     break;
4027   case 30:
4028 #line 1949 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4029     { (yyval.IPred) = ICmpInst::ICMP_SLE; ;}
4030     break;
4032   case 31:
4033 #line 1949 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4034     { (yyval.IPred) = ICmpInst::ICMP_SGE; ;}
4035     break;
4037   case 32:
4038 #line 1950 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4039     { (yyval.IPred) = ICmpInst::ICMP_ULT; ;}
4040     break;
4042   case 33:
4043 #line 1950 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4044     { (yyval.IPred) = ICmpInst::ICMP_UGT; ;}
4045     break;
4047   case 34:
4048 #line 1951 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4049     { (yyval.IPred) = ICmpInst::ICMP_ULE; ;}
4050     break;
4052   case 35:
4053 #line 1951 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4054     { (yyval.IPred) = ICmpInst::ICMP_UGE; ;}
4055     break;
4057   case 36:
4058 #line 1955 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4059     { (yyval.FPred) = FCmpInst::FCMP_OEQ; ;}
4060     break;
4062   case 37:
4063 #line 1955 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4064     { (yyval.FPred) = FCmpInst::FCMP_ONE; ;}
4065     break;
4067   case 38:
4068 #line 1956 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4069     { (yyval.FPred) = FCmpInst::FCMP_OLT; ;}
4070     break;
4072   case 39:
4073 #line 1956 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4074     { (yyval.FPred) = FCmpInst::FCMP_OGT; ;}
4075     break;
4077   case 40:
4078 #line 1957 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4079     { (yyval.FPred) = FCmpInst::FCMP_OLE; ;}
4080     break;
4082   case 41:
4083 #line 1957 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4084     { (yyval.FPred) = FCmpInst::FCMP_OGE; ;}
4085     break;
4087   case 42:
4088 #line 1958 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4089     { (yyval.FPred) = FCmpInst::FCMP_ORD; ;}
4090     break;
4092   case 43:
4093 #line 1958 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4094     { (yyval.FPred) = FCmpInst::FCMP_UNO; ;}
4095     break;
4097   case 44:
4098 #line 1959 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4099     { (yyval.FPred) = FCmpInst::FCMP_UEQ; ;}
4100     break;
4102   case 45:
4103 #line 1959 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4104     { (yyval.FPred) = FCmpInst::FCMP_UNE; ;}
4105     break;
4107   case 46:
4108 #line 1960 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4109     { (yyval.FPred) = FCmpInst::FCMP_ULT; ;}
4110     break;
4112   case 47:
4113 #line 1960 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4114     { (yyval.FPred) = FCmpInst::FCMP_UGT; ;}
4115     break;
4117   case 48:
4118 #line 1961 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4119     { (yyval.FPred) = FCmpInst::FCMP_ULE; ;}
4120     break;
4122   case 49:
4123 #line 1961 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4124     { (yyval.FPred) = FCmpInst::FCMP_UGE; ;}
4125     break;
4127   case 50:
4128 #line 1962 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4129     { (yyval.FPred) = FCmpInst::FCMP_TRUE; ;}
4130     break;
4132   case 51:
4133 #line 1963 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4134     { (yyval.FPred) = FCmpInst::FCMP_FALSE; ;}
4135     break;
4137   case 81:
4138 #line 1994 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4139     {
4140     (yyval.StrVal) = (yyvsp[-1].StrVal);
4141   ;}
4142     break;
4144   case 82:
4145 #line 1997 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4146     {
4147     (yyval.StrVal) = 0;
4148   ;}
4149     break;
4151   case 83:
4152 #line 2002 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4153     { (yyval.Linkage) = GlobalValue::InternalLinkage; ;}
4154     break;
4156   case 84:
4157 #line 2003 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4158     { (yyval.Linkage) = GlobalValue::LinkOnceLinkage; ;}
4159     break;
4161   case 85:
4162 #line 2004 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4163     { (yyval.Linkage) = GlobalValue::WeakLinkage; ;}
4164     break;
4166   case 86:
4167 #line 2005 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4168     { (yyval.Linkage) = GlobalValue::AppendingLinkage; ;}
4169     break;
4171   case 87:
4172 #line 2006 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4173     { (yyval.Linkage) = GlobalValue::DLLImportLinkage; ;}
4174     break;
4176   case 88:
4177 #line 2007 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4178     { (yyval.Linkage) = GlobalValue::DLLExportLinkage; ;}
4179     break;
4181   case 89:
4182 #line 2008 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4183     { (yyval.Linkage) = GlobalValue::ExternalWeakLinkage; ;}
4184     break;
4186   case 90:
4187 #line 2009 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4188     { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;}
4189     break;
4191   case 91:
4192 #line 2013 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4193     { (yyval.UIntVal) = lastCallingConv = OldCallingConv::C; ;}
4194     break;
4196   case 92:
4197 #line 2014 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4198     { (yyval.UIntVal) = lastCallingConv = OldCallingConv::C; ;}
4199     break;
4201   case 93:
4202 #line 2015 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4203     { (yyval.UIntVal) = lastCallingConv = OldCallingConv::CSRet; ;}
4204     break;
4206   case 94:
4207 #line 2016 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4208     { (yyval.UIntVal) = lastCallingConv = OldCallingConv::Fast; ;}
4209     break;
4211   case 95:
4212 #line 2017 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4213     { (yyval.UIntVal) = lastCallingConv = OldCallingConv::Cold; ;}
4214     break;
4216   case 96:
4217 #line 2018 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4218     { (yyval.UIntVal) = lastCallingConv = OldCallingConv::X86_StdCall; ;}
4219     break;
4221   case 97:
4222 #line 2019 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4223     { (yyval.UIntVal) = lastCallingConv = OldCallingConv::X86_FastCall; ;}
4224     break;
4226   case 98:
4227 #line 2020 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4228     {
4229     if ((unsigned)(yyvsp[0].UInt64Val) != (yyvsp[0].UInt64Val))
4230       error("Calling conv too large");
4231     (yyval.UIntVal) = lastCallingConv = (yyvsp[0].UInt64Val);
4232   ;}
4233     break;
4235   case 99:
4236 #line 2030 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4237     { (yyval.UIntVal) = 0; ;}
4238     break;
4240   case 100:
4241 #line 2031 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4242     {
4243     (yyval.UIntVal) = (yyvsp[0].UInt64Val);
4244     if ((yyval.UIntVal) != 0 && !isPowerOf2_32((yyval.UIntVal)))
4245       error("Alignment must be a power of two");
4246   ;}
4247     break;
4249   case 101:
4250 #line 2039 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4251     { (yyval.UIntVal) = 0; ;}
4252     break;
4254   case 102:
4255 #line 2040 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4256     {
4257     (yyval.UIntVal) = (yyvsp[0].UInt64Val);
4258     if ((yyval.UIntVal) != 0 && !isPowerOf2_32((yyval.UIntVal)))
4259       error("Alignment must be a power of two");
4260   ;}
4261     break;
4263   case 103:
4264 #line 2048 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4265     {
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);
4270   ;}
4271     break;
4273   case 104:
4274 #line 2057 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4275     { (yyval.StrVal) = 0; ;}
4276     break;
4278   case 105:
4279 #line 2058 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4280     { (yyval.StrVal) = (yyvsp[0].StrVal); ;}
4281     break;
4283   case 106:
4284 #line 2065 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4285     {;}
4286     break;
4288   case 107:
4289 #line 2066 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4290     {;}
4291     break;
4293   case 108:
4294 #line 2070 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4295     {
4296     CurGV->setSection((yyvsp[0].StrVal));
4297     free((yyvsp[0].StrVal));
4298   ;}
4299     break;
4301   case 109:
4302 #line 2074 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4303     {
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));
4307     
4308   ;}
4309     break;
4311   case 111:
4312 #line 2091 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4313     { 
4314     (yyval.TypeVal).PAT = new PATypeHolder((yyvsp[0].PrimType).T); 
4315     (yyval.TypeVal).S.makeSignless();
4316   ;}
4317     break;
4319   case 113:
4320 #line 2099 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4321     { 
4322     (yyval.TypeVal).PAT = new PATypeHolder((yyvsp[0].PrimType).T); 
4323     (yyval.TypeVal).S.makeSignless();
4324   ;}
4325     break;
4327   case 114:
4328 #line 2106 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4329     {
4330     if (!UpRefs.empty())
4331       error("Invalid upreference in type: " + (*(yyvsp[0].TypeVal).PAT)->getDescription());
4332     (yyval.TypeVal) = (yyvsp[0].TypeVal);
4333   ;}
4334     break;
4336   case 127:
4337 #line 2120 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4338     { 
4339     (yyval.TypeVal).PAT = new PATypeHolder((yyvsp[0].PrimType).T);
4340     (yyval.TypeVal).S.copy((yyvsp[0].PrimType).S);
4341   ;}
4342     break;
4344   case 128:
4345 #line 2124 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4346     {
4347     (yyval.TypeVal).PAT = new PATypeHolder(OpaqueType::get());
4348     (yyval.TypeVal).S.makeSignless();
4349   ;}
4350     break;
4352   case 129:
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);
4358   ;}
4359     break;
4361   case 130:
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");
4371   ;}
4372     break;
4374   case 131:
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);
4383     }
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);
4394     }
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
4402   ;}
4403     break;
4405   case 132:
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;
4412   ;}
4413     break;
4415   case 133:
4416 #line 2175 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4417     {          // Vector type?
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;
4429   ;}
4430     break;
4432   case 134:
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);
4441     }
4442     (yyval.TypeVal).PAT = new PATypeHolder(HandleUpRefs(StructType::get(Elements), (yyval.TypeVal).S));
4443     delete (yyvsp[-1].TypeList);
4444   ;}
4445     break;
4447   case 135:
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();
4452   ;}
4453     break;
4455   case 136:
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);
4464       delete I->PAT;
4465     }
4466     (yyval.TypeVal).PAT = new PATypeHolder(HandleUpRefs(StructType::get(Elements, true), 
4467                                            (yyval.TypeVal).S));
4468     delete (yyvsp[-2].TypeList);
4469   ;}
4470     break;
4472   case 137:
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();
4477   ;}
4478     break;
4480   case 138:
4481 #line 2220 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4482     {                             // Pointer type?
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;
4489   ;}
4490     break;
4492   case 139:
4493 #line 2234 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4494     {
4495     (yyval.TypeList) = new std::list<PATypeInfo>();
4496     (yyval.TypeList)->push_back((yyvsp[0].TypeVal)); 
4497   ;}
4498     break;
4500   case 140:
4501 #line 2238 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4502     {
4503     ((yyval.TypeList)=(yyvsp[-2].TypeList))->push_back((yyvsp[0].TypeVal));
4504   ;}
4505     break;
4507   case 142:
4508 #line 2246 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4509     {
4510     PATypeInfo VoidTI;
4511     VoidTI.PAT = new PATypeHolder(Type::VoidTy);
4512     VoidTI.S.makeSignless();
4513     ((yyval.TypeList)=(yyvsp[-2].TypeList))->push_back(VoidTI);
4514   ;}
4515     break;
4517   case 143:
4518 #line 2252 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4519     {
4520     (yyval.TypeList) = new std::list<PATypeInfo>();
4521     PATypeInfo VoidTI;
4522     VoidTI.PAT = new PATypeHolder(Type::VoidTy);
4523     VoidTI.S.makeSignless();
4524     (yyval.TypeList)->push_back(VoidTI);
4525   ;}
4526     break;
4528   case 144:
4529 #line 2259 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4530     {
4531     (yyval.TypeList) = new std::list<PATypeInfo>();
4532   ;}
4533     break;
4535   case 145:
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());
4539     if (ATy == 0)
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();
4556       if (ETy != ValTy)
4557         error("Element #" + utostr(i) + " is not of type '" + 
4558               ETy->getDescription() +"' as required!\nIt is of type '"+
4559               ValTy->getDescription() + "'");
4560       Elems.push_back(C);
4561     }
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);
4566   ;}
4567     break;
4569   case 146:
4570 #line 2301 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4571     {
4572     const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[-2].TypeVal).PAT->get());
4573     if (ATy == 0)
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;
4583   ;}
4584     break;
4586   case 147:
4587 #line 2314 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4588     {
4589     const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[-2].TypeVal).PAT->get());
4590     if (ATy == 0)
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() + 
4597             "'");
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;
4610   ;}
4611     break;
4613   case 148:
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());
4617     if (PTy == 0)
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();
4632       if (ETy != ValTy)
4633         error("Element #" + utostr(i) + " is not of type '" + 
4634               ETy->getDescription() +"' as required!\nIt is of type '"+
4635               ValTy->getDescription() + "'");
4636       Elems.push_back(C);
4637     }
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);
4642   ;}
4643     break;
4645   case 149:
4646 #line 2365 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4647     {
4648     const StructType *STy = dyn_cast<StructType>((yyvsp[-3].TypeVal).PAT->get());
4649     if (STy == 0)
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);
4663     }
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);
4668   ;}
4669     break;
4671   case 150:
4672 #line 2387 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4673     {
4674     const StructType *STy = dyn_cast<StructType>((yyvsp[-2].TypeVal).PAT->get());
4675     if (STy == 0)
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;
4683   ;}
4684     break;
4686   case 151:
4687 #line 2398 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4688     {
4689     const StructType *STy = dyn_cast<StructType>((yyvsp[-5].TypeVal).PAT->get());
4690     if (STy == 0)
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);
4704     }
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);
4709   ;}
4710     break;
4712   case 152:
4713 #line 2420 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4714     {
4715     const StructType *STy = dyn_cast<StructType>((yyvsp[-4].TypeVal).PAT->get());
4716     if (STy == 0)
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;
4724   ;}
4725     break;
4727   case 153:
4728 #line 2431 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4729     {
4730     const PointerType *PTy = dyn_cast<PointerType>((yyvsp[-1].TypeVal).PAT->get());
4731     if (PTy == 0)
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;
4737   ;}
4738     break;
4740   case 154:
4741 #line 2440 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4742     {
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;
4746   ;}
4747     break;
4749   case 155:
4750 #line 2445 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4751     {
4752     const PointerType *Ty = dyn_cast<PointerType>((yyvsp[-1].TypeVal).PAT->get());
4753     if (Ty == 0)
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.
4763     //
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.
4773     //
4774     if (V == 0) {
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)));
4781     
4782       if (I != CurModule.GlobalRefs.end()) {
4783         V = I->second;             // Placeholder already exists, use it...
4784         (yyvsp[0].ValIDVal).destroy();
4785       } else {
4786         std::string Name;
4787         if ((yyvsp[0].ValIDVal).Type == ValID::NameVal) Name = (yyvsp[0].ValIDVal).Name;
4789         // Create the forward referenced global.
4790         GlobalValue *GV;
4791         if (const FunctionType *FTy = 
4792                  dyn_cast<FunctionType>(PT->getElementType())) {
4793           GV = new Function(FTy, GlobalValue::ExternalLinkage, Name,
4794                             CurModule.CurrentModule);
4795         } else {
4796           GV = new GlobalVariable(PT->getElementType(), false,
4797                                   GlobalValue::ExternalLinkage, 0,
4798                                   Name, CurModule.CurrentModule);
4799         }
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));
4803         V = GV;
4804       }
4805     }
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
4809   ;}
4810     break;
4812   case 156:
4813 #line 2504 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4814     {
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;
4820   ;}
4821     break;
4823   case 157:
4824 #line 2511 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4825     {
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;
4832   ;}
4833     break;
4835   case 158:
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();
4843   ;}
4844     break;
4846   case 159:
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();
4854   ;}
4855     break;
4857   case 160:
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();
4862   ;}
4863     break;
4865   case 161:
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();
4870   ;}
4871     break;
4873   case 162:
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();
4880   ;}
4881     break;
4883   case 163:
4884 #line 2550 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4885     {
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;
4899   ;}
4900     break;
4902   case 164:
4903 #line 2565 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4904     {
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));
4915   ;}
4916     break;
4918   case 165:
4919 #line 2577 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4920     {
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);
4928   ;}
4929     break;
4931   case 166:
4932 #line 2586 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4933     {
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);
4947     } else {
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");
4953       }
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);
4958     }
4959     (yyval.ConstVal).S.copy((yyvsp[-3].ConstVal).S); 
4960   ;}
4961     break;
4963   case 167:
4964 #line 2614 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4965     {
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");
4973     }
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);
4977   ;}
4978     break;
4980   case 168:
4981 #line 2627 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4982     {
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();
4990   ;}
4991     break;
4993   case 169:
4994 #line 2636 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
4995     {
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();
5000   ;}
5001     break;
5003   case 170:
5004 #line 2642 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5005     {
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();
5010   ;}
5011     break;
5013   case 171:
5014 #line 2648 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5015     {
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);
5025   ;}
5026     break;
5028   case 172:
5029 #line 2659 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5030     {
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));
5035   ;}
5036     break;
5038   case 173:
5039 #line 2665 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5040     {
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);
5045   ;}
5046     break;
5048   case 174:
5049 #line 2671 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5050     {
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);
5055   ;}
5056     break;
5058   case 175:
5059 #line 2682 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5060     { ((yyval.ConstVector) = (yyvsp[-2].ConstVector))->push_back((yyvsp[0].ConstVal)); ;}
5061     break;
5063   case 176:
5064 #line 2683 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5065     {
5066     (yyval.ConstVector) = new std::vector<ConstInfo>();
5067     (yyval.ConstVector)->push_back((yyvsp[0].ConstVal));
5068   ;}
5069     break;
5071   case 177:
5072 #line 2692 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5073     { (yyval.BoolVal) = false; ;}
5074     break;
5076   case 178:
5077 #line 2693 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5078     { (yyval.BoolVal) = true; ;}
5079     break;
5081   case 179:
5082 #line 2705 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5083     {
5084     (yyval.ModuleVal) = ParserResult = (yyvsp[0].ModuleVal);
5085     CurModule.ModuleDone();
5086   ;}
5087     break;
5089   case 180:
5090 #line 2714 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5091     { (yyval.ModuleVal) = (yyvsp[-1].ModuleVal); CurFun.FunctionDone(); ;}
5092     break;
5094   case 181:
5095 #line 2715 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5096     { (yyval.ModuleVal) = (yyvsp[-1].ModuleVal); ;}
5097     break;
5099   case 182:
5100 #line 2716 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5101     { (yyval.ModuleVal) = (yyvsp[-3].ModuleVal); ;}
5102     break;
5104   case 183:
5105 #line 2717 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5106     { (yyval.ModuleVal) = (yyvsp[-1].ModuleVal); ;}
5107     break;
5109   case 184:
5110 #line 2718 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5111     {
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() + "'");
5118       } else {
5119         error("Reference to an undefined type: #" + itostr(DID.Num));
5120       }
5121     }
5122   ;}
5123     break;
5125   case 185:
5126 #line 2734 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5127     {
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:
5130     //
5131     // %list = type { %list * }
5132     // %list = type { %list * }    ; repeated type decl
5133     //
5134     // If types are not resolved eagerly, then the two types will not be
5135     // determined to be the same type!
5136     //
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 
5141       // slot table.
5142       CurModule.Types.push_back((yyvsp[0].TypeVal).PAT->get());
5143       CurModule.TypeSigns.push_back((yyvsp[0].TypeVal).S);
5144     }
5145     delete (yyvsp[0].TypeVal).PAT;
5146   ;}
5147     break;
5149   case 186:
5150 #line 2754 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5151     {       // Function prototypes can be in const pool
5152   ;}
5153     break;
5155   case 187:
5156 #line 2756 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5157     {  // Asm blocks can be in the const pool
5158   ;}
5159     break;
5161   case 188:
5162 #line 2758 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5163     {
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);
5167   ;}
5168     break;
5170   case 189:
5171 #line 2762 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5172     {
5173     CurGV = 0;
5174   ;}
5175     break;
5177   case 190:
5178 #line 2765 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5179     {
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;
5184   ;}
5185     break;
5187   case 191:
5188 #line 2770 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5189     {
5190     CurGV = 0;
5191   ;}
5192     break;
5194   case 192:
5195 #line 2773 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5196     {
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;
5201   ;}
5202     break;
5204   case 193:
5205 #line 2778 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5206     {
5207     CurGV = 0;
5208   ;}
5209     break;
5211   case 194:
5212 #line 2781 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5213     {
5214     const Type *Ty = (yyvsp[0].TypeVal).PAT->get();
5215     CurGV = 
5216       ParseGlobalVariable((yyvsp[-3].StrVal), GlobalValue::ExternalWeakLinkage, (yyvsp[-1].BoolVal), Ty, 0, 
5217                           (yyvsp[0].TypeVal).S);
5218     delete (yyvsp[0].TypeVal).PAT;
5219   ;}
5220     break;
5222   case 195:
5223 #line 2787 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5224     {
5225     CurGV = 0;
5226   ;}
5227     break;
5229   case 196:
5230 #line 2790 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5231     { 
5232   ;}
5233     break;
5235   case 197:
5236 #line 2792 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5237     {
5238   ;}
5239     break;
5241   case 198:
5242 #line 2794 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5243     { 
5244   ;}
5245     break;
5247   case 199:
5248 #line 2799 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5249     {
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);
5257     else
5258       CurModule.CurrentModule->setModuleInlineAsm(AsmSoFar+"\n"+NewAsm);
5259   ;}
5260     break;
5262   case 200:
5263 #line 2813 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5264     { (yyval.Endianness) = Module::BigEndian; ;}
5265     break;
5267   case 201:
5268 #line 2814 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5269     { (yyval.Endianness) = Module::LittleEndian; ;}
5270     break;
5272   case 202:
5273 #line 2818 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5274     {
5275     CurModule.setEndianness((yyvsp[0].Endianness));
5276   ;}
5277     break;
5279   case 203:
5280 #line 2821 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5281     {
5282     if ((yyvsp[0].UInt64Val) == 32)
5283       CurModule.setPointerSize(Module::Pointer32);
5284     else if ((yyvsp[0].UInt64Val) == 64)
5285       CurModule.setPointerSize(Module::Pointer64);
5286     else
5287       error("Invalid pointer size: '" + utostr((yyvsp[0].UInt64Val)) + "'");
5288   ;}
5289     break;
5291   case 204:
5292 #line 2829 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5293     {
5294     CurModule.CurrentModule->setTargetTriple((yyvsp[0].StrVal));
5295     free((yyvsp[0].StrVal));
5296   ;}
5297     break;
5299   case 205:
5300 #line 2833 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5301     {
5302     CurModule.CurrentModule->setDataLayout((yyvsp[0].StrVal));
5303     free((yyvsp[0].StrVal));
5304   ;}
5305     break;
5307   case 207:
5308 #line 2844 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5309     {
5310       CurModule.CurrentModule->addLibrary((yyvsp[0].StrVal));
5311       free((yyvsp[0].StrVal));
5312   ;}
5313     break;
5315   case 208:
5316 #line 2848 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5317     {
5318     CurModule.CurrentModule->addLibrary((yyvsp[0].StrVal));
5319     free((yyvsp[0].StrVal));
5320   ;}
5321     break;
5323   case 209:
5324 #line 2852 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5325     { ;}
5326     break;
5328   case 213:
5329 #line 2865 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5330     { (yyval.StrVal) = 0; ;}
5331     break;
5333   case 214:
5334 #line 2869 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5335     {
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));
5339   ;}
5340     break;
5342   case 215:
5343 #line 2877 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5344     {
5345     (yyval.ArgList) = (yyvsp[-2].ArgList);
5346     (yyval.ArgList)->push_back(*(yyvsp[0].ArgVal));
5347     delete (yyvsp[0].ArgVal);
5348   ;}
5349     break;
5351   case 216:
5352 #line 2882 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5353     {
5354     (yyval.ArgList) = new std::vector<std::pair<PATypeInfo,char*> >();
5355     (yyval.ArgList)->push_back(*(yyvsp[0].ArgVal));
5356     delete (yyvsp[0].ArgVal);
5357   ;}
5358     break;
5360   case 217:
5361 #line 2890 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5362     { (yyval.ArgList) = (yyvsp[0].ArgList); ;}
5363     break;
5365   case 218:
5366 #line 2891 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5367     {
5368     (yyval.ArgList) = (yyvsp[-2].ArgList);
5369     PATypeInfo VoidTI;
5370     VoidTI.PAT = new PATypeHolder(Type::VoidTy);
5371     VoidTI.S.makeSignless();
5372     (yyval.ArgList)->push_back(std::pair<PATypeInfo, char*>(VoidTI, 0));
5373   ;}
5374     break;
5376   case 219:
5377 #line 2898 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5378     {
5379     (yyval.ArgList) = new std::vector<std::pair<PATypeInfo,char*> >();
5380     PATypeInfo VoidTI;
5381     VoidTI.PAT = new PATypeHolder(Type::VoidTy);
5382     VoidTI.S.makeSignless();
5383     (yyval.ArgList)->push_back(std::pair<PATypeInfo, char*>(VoidTI, 0));
5384   ;}
5385     break;
5387   case 220:
5388 #line 2905 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5389     { (yyval.ArgList) = 0; ;}
5390     break;
5392   case 221:
5393 #line 2909 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5394     {
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();
5400     
5401     if (!RetTy->isFirstClassType() && RetTy != Type::VoidTy)
5402       error("LLVM functions cannot return aggregate types");
5404     Signedness FTySign;
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);
5422       }
5423     }
5425     bool isVarArg = ParamTyList.size() && ParamTyList.back() == Type::VoidTy;
5426     if (isVarArg) 
5427       ParamTyList.pop_back();
5429     // Convert the CSRet calling convention into the corresponding parameter
5430     // attribute.
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);
5438     }
5440     const FunctionType *FT = 
5441       FunctionType::get(RetTy, ParamTyList, isVarArg, PAL);
5442     const PointerType *PFT = PointerType::get(FT);
5443     delete (yyvsp[-6].TypeVal).PAT;
5445     ValID ID;
5446     if (!FunctionName.empty()) {
5447       ID = ValID::create((char*)FunctionName.c_str());
5448     } else {
5449       ID = ValID::create((int)CurModule.Values[PFT].size());
5450     }
5451     ID.S.makeComposite(FTySign);
5453     Function *Fn = 0;
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);
5465       if (!Conflict)
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
5474           // if there is one.
5475           std::string NewName(makeNameUnique(FunctionName));
5476           if (Conflict->hasInternalLinkage()) {
5477             Conflict->setName(NewName);
5478             RenameMapKey Key = 
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);
5483           } else {
5484             Fn = new Function(FT, CurFun.Linkage, NewName, M);
5485             InsertValue(Fn, CurModule.Values);
5486             RenameMapKey Key = 
5487               makeRenameMapKey(FunctionName, PFT, ID.S);
5488             CurModule.RenameMap[Key] = NewName;
5489           }
5490         } else {
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 
5496           // conflicts.
5497           if (Fn->isDeclaration())
5498             for (Function::arg_iterator AI = Fn->arg_begin(), 
5499                  AE = Fn->arg_end(); AI != AE; ++AI)
5500               AI->setName("");
5501         }
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.
5510           RenameMapKey Key = 
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);
5517         } else { 
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");
5525           }
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;
5531         } 
5532       } else {
5533         // There's no conflict, just define the function
5534         Fn = new Function(FT, CurFun.Linkage, FunctionName, M);
5535         InsertValue(Fn, CurModule.Values);
5536       }
5537     } else {
5538       // There's no conflict, just define the function
5539       Fn = new Function(FT, CurFun.Linkage, FunctionName, M);
5540       InsertValue(Fn, CurModule.Values);
5541     }
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);
5551     }
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));
5557     }
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
5566       }
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...
5575         InsertValue(ArgIt);
5576       }
5577       delete (yyvsp[-3].ArgList);                     // We're now done with the argument list
5578     }
5579     lastCallingConv = OldCallingConv::C;
5580   ;}
5581     break;
5583   case 224:
5584 #line 3103 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5585     { CurFun.Linkage = (yyvsp[0].Linkage); ;}
5586     break;
5588   case 225:
5589 #line 3103 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5590     {
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));
5596   ;}
5597     break;
5599   case 228:
5600 #line 3117 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5601     {
5602     (yyval.FunctionVal) = (yyvsp[-1].FunctionVal);
5603   ;}
5604     break;
5606   case 229:
5607 #line 3122 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5608     { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;}
5609     break;
5611   case 230:
5612 #line 3123 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5613     { (yyval.Linkage) = GlobalValue::DLLImportLinkage; ;}
5614     break;
5616   case 231:
5617 #line 3124 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5618     { (yyval.Linkage) = GlobalValue::ExternalWeakLinkage; ;}
5619     break;
5621   case 232:
5622 #line 3128 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5623     { CurFun.isDeclare = true; ;}
5624     break;
5626   case 233:
5627 #line 3129 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5628     { CurFun.Linkage = (yyvsp[0].Linkage); ;}
5629     break;
5631   case 234:
5632 #line 3129 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5633     {
5634     (yyval.FunctionVal) = CurFun.CurrentFunction;
5635     CurFun.FunctionDone();
5636     
5637   ;}
5638     break;
5640   case 235:
5641 #line 3141 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5642     { (yyval.BoolVal) = false; ;}
5643     break;
5645   case 236:
5646 #line 3142 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5647     { (yyval.BoolVal) = true; ;}
5648     break;
5650   case 237:
5651 #line 3147 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5652     { (yyval.ValIDVal) = ValID::create((yyvsp[0].SInt64Val)); ;}
5653     break;
5655   case 238:
5656 #line 3148 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5657     { (yyval.ValIDVal) = ValID::create((yyvsp[0].UInt64Val)); ;}
5658     break;
5660   case 239:
5661 #line 3149 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5662     { (yyval.ValIDVal) = ValID::create((yyvsp[0].FPVal)); ;}
5663     break;
5665   case 240:
5666 #line 3150 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5667     { 
5668     (yyval.ValIDVal) = ValID::create(ConstantInt::get(Type::Int1Ty, true));
5669     (yyval.ValIDVal).S.makeUnsigned();
5670   ;}
5671     break;
5673   case 241:
5674 #line 3154 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5675     { 
5676     (yyval.ValIDVal) = ValID::create(ConstantInt::get(Type::Int1Ty, false)); 
5677     (yyval.ValIDVal).S.makeUnsigned();
5678   ;}
5679     break;
5681   case 242:
5682 #line 3158 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5683     { (yyval.ValIDVal) = ValID::createNull(); ;}
5684     break;
5686   case 243:
5687 #line 3159 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5688     { (yyval.ValIDVal) = ValID::createUndef(); ;}
5689     break;
5691   case 244:
5692 #line 3160 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5693     { (yyval.ValIDVal) = ValID::createZeroInit(); ;}
5694     break;
5696   case 245:
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));
5704     
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();
5710       if (ETy != CTy)
5711         error("Element #" + utostr(i) + " is not of type '" + 
5712               ETy->getDescription() +"' as required!\nIt is of type '" +
5713               CTy->getDescription() + "'");
5714       Elems.push_back(C);
5715     }
5716     (yyval.ValIDVal) = ValID::create(ConstantVector::get(pt, Elems));
5717     delete PTy; delete (yyvsp[-1].ConstVector);
5718   ;}
5719     break;
5721   case 246:
5722 #line 3182 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5723     {
5724     (yyval.ValIDVal) = ValID::create((yyvsp[0].ConstVal).C);
5725     (yyval.ValIDVal).S.copy((yyvsp[0].ConstVal).S);
5726   ;}
5727     break;
5729   case 247:
5730 #line 3186 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5731     {
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));
5739   ;}
5740     break;
5742   case 248:
5743 #line 3200 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5744     {  (yyval.ValIDVal) = ValID::create((yyvsp[0].SIntVal)); (yyval.ValIDVal).S.makeSignless(); ;}
5745     break;
5747   case 249:
5748 #line 3201 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5749     {  (yyval.ValIDVal) = ValID::create((yyvsp[0].StrVal)); (yyval.ValIDVal).S.makeSignless(); ;}
5750     break;
5752   case 252:
5753 #line 3214 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5754     { 
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;
5760   ;}
5761     break;
5763   case 253:
5764 #line 3224 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5765     {
5766     (yyval.FunctionVal) = (yyvsp[-1].FunctionVal);
5767   ;}
5768     break;
5770   case 254:
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);
5774   ;}
5775     break;
5777   case 255:
5778 #line 3236 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5779     {
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);
5786   ;}
5787     break;
5789   case 256:
5790 #line 3247 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5791     {
5792     if ((yyvsp[0].InstVal).I)
5793       (yyvsp[-1].BasicBlockVal)->getInstList().push_back((yyvsp[0].InstVal).I);
5794     (yyval.BasicBlockVal) = (yyvsp[-1].BasicBlockVal);
5795   ;}
5796     break;
5798   case 257:
5799 #line 3252 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5800     {
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
5804     // referenced.
5805     Function::BasicBlockListType &BBL = 
5806       CurFun.CurrentFunction->getBasicBlockList();
5807     BBL.splice(BBL.end(), BBL, (yyval.BasicBlockVal));
5808   ;}
5809     break;
5811   case 258:
5812 #line 3261 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5813     {
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
5817     // referenced.
5818     Function::BasicBlockListType &BBL = 
5819       CurFun.CurrentFunction->getBasicBlockList();
5820     BBL.splice(BBL.end(), BBL, (yyval.BasicBlockVal));
5821   ;}
5822     break;
5824   case 261:
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();
5829   ;}
5830     break;
5832   case 262:
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();
5837   ;}
5838     break;
5840   case 263:
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();
5846   ;}
5847     break;
5849   case 264:
5850 #line 3288 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5851     {  
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();
5860   ;}
5861     break;
5863   case 265:
5864 #line 3298 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5865     {
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);
5878       else
5879         error("Switch case is constant, but not a simple integer");
5880     }
5881     delete (yyvsp[-1].JumpTable);
5882   ;}
5883     break;
5885   case 266:
5886 #line 3316 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5887     {
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();
5895   ;}
5896     break;
5898   case 267:
5899 #line 3326 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5900     {
5901     const PointerType *PFTy;
5902     const FunctionType *Ty;
5903     Signedness FTySign;
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();
5912              I != E; ++I) {
5913           ParamTypes.push_back((*I).V->getType());
5914           FTySign.add(I->S);
5915         }
5916       }
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);
5924       }
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);
5930     } else {
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)); 
5936     }
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
5948       // correctly!
5949       //
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);
5960       }
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());
5966     }
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;
5971   ;}
5972     break;
5974   case 268:
5975 #line 3398 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5976     {
5977     (yyval.TermInstVal).TI = new UnwindInst();
5978     (yyval.TermInstVal).S.makeSignless();
5979   ;}
5980     break;
5982   case 269:
5983 #line 3402 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5984     {
5985     (yyval.TermInstVal).TI = new UnreachableInst();
5986     (yyval.TermInstVal).S.makeSignless();
5987   ;}
5988     break;
5990   case 270:
5991 #line 3409 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
5992     {
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)));
5996     
5997     if (V == 0)
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));
6003   ;}
6004     break;
6006   case 271:
6007 #line 3421 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
6008     {
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)));
6013     if (V == 0)
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)); 
6019   ;}
6020     break;
6022   case 272:
6023 #line 3436 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
6024     {
6025     bool omit = false;
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.
6042           omit = true;
6043     if (omit) {
6044       (yyval.InstVal).I = 0;
6045       (yyval.InstVal).S.makeSignless();
6046     } else {
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);
6051     }
6052   ;}
6053     break;
6055   case 273:
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;
6066   ;}
6067     break;
6069   case 274:
6070 #line 3476 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
6071     {
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));
6078   ;}
6079     break;
6081   case 275:
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));
6086   ;}
6087     break;
6089   case 276:
6090 #line 3490 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
6091     {
6092     (yyval.ValueList) = (yyvsp[-2].ValueList);
6093     (yyvsp[-2].ValueList)->push_back((yyvsp[0].ValueVal));
6094   ;}
6095     break;
6097   case 278:
6098 #line 3498 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
6099     { (yyval.ValueList) = 0; ;}
6100     break;
6102   case 279:
6103 #line 3502 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
6104     {
6105     (yyval.BoolVal) = true;
6106   ;}
6107     break;
6109   case 280:
6110 #line 3505 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
6111     {
6112     (yyval.BoolVal) = false;
6113   ;}
6114     break;
6116   case 281:
6117 #line 3511 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
6118     {
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;
6136   ;}
6137     break;
6139   case 282:
6140 #line 3530 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
6141     {
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");
6149     }
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;
6158   ;}
6159     break;
6161   case 283:
6162 #line 3548 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
6163     {
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;
6178   ;}
6179     break;
6181   case 284:
6182 #line 3564 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
6183     {
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;
6196   ;}
6197     break;
6199   case 285:
6200 #line 3578 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
6201     {
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;
6214   ;}
6215     break;
6217   case 286:
6218 #line 3592 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
6219     {
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);
6223     if (Ones == 0)
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);
6229   ;}
6230     break;
6232   case 287:
6233 #line 3603 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
6234     {
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);
6245       else
6246         ShiftAmt = new ZExtInst((yyvsp[0].ValueVal).V, Ty, makeNameUnique("shift"), CurBB);
6247     else
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);
6251   ;}
6252     break;
6254   case 288:
6255 #line 3621 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
6256     {
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;
6264   ;}
6265     break;
6267   case 289:
6268 #line 3630 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
6269     {
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);
6277   ;}
6278     break;
6280   case 290:
6281 #line 3639 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
6282     {
6283     const Type *Ty = (yyvsp[0].TypeVal).PAT->get();
6284     NewVarArgs = true;
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;
6288   ;}
6289     break;
6291   case 291:
6292 #line 3646 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
6293     {
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));
6300     //b = vaarg a, t -> 
6301     //foo = alloca 1 of t
6302     //bar = vacopy a 
6303     //store bar -> foo
6304     //b = vaarg foo, 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;
6313   ;}
6314     break;
6316   case 292:
6317 #line 3667 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
6318     {
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
6327     //bar = vacopy a
6328     //store bar -> foo
6329     //tmp = vaarg foo, t
6330     //b = load foo
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;
6341   ;}
6342     break;
6344   case 293:
6345 #line 3691 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
6346     {
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));
6351   ;}
6352     break;
6354   case 294:
6355 #line 3697 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
6356     {
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);
6361   ;}
6362     break;
6364   case 295:
6365 #line 3703 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
6366     {
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);
6371   ;}
6372     break;
6374   case 296:
6375 #line 3709 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
6376     {
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();
6387     }
6388     (yyval.InstVal).I = PHI;
6389     (yyval.InstVal).S.copy((yyvsp[0].PHIList).S);
6390     delete (yyvsp[0].PHIList).P;  // Free the list...
6391   ;}
6392     break;
6394   case 297:
6395 #line 3725 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
6396     {
6397     // Handle the short call syntax
6398     const PointerType *PFTy;
6399     const FunctionType *FTy;
6400     Signedness FTySign;
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();
6408              I != E; ++I) {
6409           ParamTypes.push_back((*I).V->getType());
6410           FTySign.add(I->S);
6411         }
6412       }
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);
6429       }
6431       FTy = FunctionType::get(RetTy, ParamTypes, isVarArg, PAL);
6432       PFTy = PointerType::get(FTy);
6433       (yyval.InstVal).S.copy((yyvsp[-4].TypeVal).S);
6434     } else {
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)); 
6440     }
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
6451     if (Inst) {
6452       (yyval.InstVal).I = Inst;
6453     } else {
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
6464         // correctly!
6465         //
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");
6477       }
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;
6484     }
6485     delete (yyvsp[-4].TypeVal).PAT;
6486     delete (yyvsp[-1].ValueList);
6487     lastCallingConv = OldCallingConv::C;
6488   ;}
6489     break;
6491   case 298:
6492 #line 3818 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
6493     {
6494     (yyval.InstVal) = (yyvsp[0].InstVal);
6495   ;}
6496     break;
6498   case 299:
6499 #line 3826 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
6500     { (yyval.ValueList) = (yyvsp[0].ValueList); ;}
6501     break;
6503   case 300:
6504 #line 3827 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
6505     { (yyval.ValueList) = new std::vector<ValueInfo>(); ;}
6506     break;
6508   case 301:
6509 #line 3831 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
6510     { (yyval.BoolVal) = true; ;}
6511     break;
6513   case 302:
6514 #line 3832 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
6515     { (yyval.BoolVal) = false; ;}
6516     break;
6518   case 303:
6519 #line 3836 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
6520     {
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;
6525   ;}
6526     break;
6528   case 304:
6529 #line 3842 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
6530     {
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;
6536   ;}
6537     break;
6539   case 305:
6540 #line 3849 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
6541     {
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;
6546   ;}
6547     break;
6549   case 306:
6550 #line 3855 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
6551     {
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;
6557   ;}
6558     break;
6560   case 307:
6561 #line 3862 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
6562     {
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();
6568   ;}
6569     break;
6571   case 308:
6572 #line 3869 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
6573     {
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;
6585   ;}
6586     break;
6588   case 309:
6589 #line 3882 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
6590     {
6591     (yyvsp[0].ValIDVal).S.copy((yyvsp[-1].TypeVal).S);
6592     const PointerType *PTy = dyn_cast<PointerType>((yyvsp[-1].TypeVal).PAT->get());
6593     if (!PTy)
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);
6601       if (!StoreVal)
6602         error("Can't store '" + (yyvsp[-3].ValueVal).V->getType()->getDescription() +
6603               "' into space of type '" + ElTy->getDescription() + "'");
6604       else {
6605         PTy = PointerType::get(StoreVal->getType());
6606         if (Constant *C = dyn_cast<Constant>(tmpVal))
6607           tmpVal = ConstantExpr::getBitCast(C, PTy);
6608         else
6609           tmpVal = new BitCastInst(tmpVal, PTy, "upgrd.cast", CurBB);
6610       }
6611     }
6612     (yyval.InstVal).I = new StoreInst(StoreVal, tmpVal, (yyvsp[-5].BoolVal));
6613     (yyval.InstVal).S.makeSignless();
6614     delete (yyvsp[-1].TypeVal).PAT;
6615   ;}
6616     break;
6618   case 310:
6619 #line 3908 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
6620     {
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);
6635   ;}
6636     break;
6639       default: break;
6640     }
6642 /* Line 1126 of yacc.c.  */
6643 #line 6644 "UpgradeParser.tab.c"
6645   yyvsp -= yylen;
6646   yyssp -= yylen;
6649   YY_STACK_PRINT (yyss, yyssp);
6651   *++yyvsp = yyval;
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.  */
6658   yyn = yyr1[yyn];
6660   yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
6661   if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
6662     yystate = yytable[yystate];
6663   else
6664     yystate = yydefgoto[yyn - YYNTOKENS];
6666   goto yynewstate;
6669 /*------------------------------------.
6670 | yyerrlab -- here on detecting error |
6671 `------------------------------------*/
6672 yyerrlab:
6673   /* If not already recovering from an error, report this error.  */
6674   if (!yyerrstatus)
6675     {
6676       ++yynerrs;
6677 #if YYERROR_VERBOSE
6678       yyn = yypact[yystate];
6680       if (YYPACT_NINF < yyn && yyn < YYLAST)
6681         {
6682           int yytype = YYTRANSLATE (yychar);
6683           YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
6684           YYSIZE_T yysize = yysize0;
6685           YYSIZE_T yysize1;
6686           int yysize_overflow = 0;
6687           char *yymsg = 0;
6688 #         define YYERROR_VERBOSE_ARGS_MAXIMUM 5
6689           char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
6690           int yyx;
6692 #if 0
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");
6700 #endif
6701           char *yyfmt;
6702           char const *yyf;
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
6713              YYCHECK.  */
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;
6719           int yycount = 1;
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)
6726               {
6727                 if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
6728                   {
6729                     yycount = 1;
6730                     yysize = yysize0;
6731                     yyformat[sizeof yyunexpected - 1] = '\0';
6732                     break;
6733                   }
6734                 yyarg[yycount++] = yytname[yyx];
6735                 yysize1 = yysize + yytnamerr (0, yytname[yyx]);
6736                 yysize_overflow |= yysize1 < yysize;
6737                 yysize = yysize1;
6738                 yyfmt = yystpcpy (yyfmt, yyprefix);
6739                 yyprefix = yyor;
6740               }
6742           yyf = YY_(yyformat);
6743           yysize1 = yysize + yystrlen (yyf);
6744           yysize_overflow |= yysize1 < yysize;
6745           yysize = yysize1;
6747           if (!yysize_overflow && yysize <= YYSTACK_ALLOC_MAXIMUM)
6748             yymsg = (char *) YYSTACK_ALLOC (yysize);
6749           if (yymsg)
6750             {
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.  */
6754               char *yyp = yymsg;
6755               int yyi = 0;
6756               while ((*yyp = *yyf))
6757                 {
6758                   if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
6759                     {
6760                       yyp += yytnamerr (yyp, yyarg[yyi++]);
6761                       yyf += 2;
6762                     }
6763                   else
6764                     {
6765                       yyp++;
6766                       yyf++;
6767                     }
6768                 }
6769               yyerror (yymsg);
6770               YYSTACK_FREE (yymsg);
6771             }
6772           else
6773             {
6774               yyerror (YY_("syntax error"));
6775               goto yyexhaustedlab;
6776             }
6777         }
6778       else
6779 #endif /* YYERROR_VERBOSE */
6780         yyerror (YY_("syntax error"));
6781     }
6785   if (yyerrstatus == 3)
6786     {
6787       /* If just tried and failed to reuse look-ahead token after an
6788          error, discard it.  */
6790       if (yychar <= YYEOF)
6791         {
6792           /* Return failure if at end of input.  */
6793           if (yychar == YYEOF)
6794             YYABORT;
6795         }
6796       else
6797         {
6798           yydestruct ("Error: discarding", yytoken, &yylval);
6799           yychar = YYEMPTY;
6800         }
6801     }
6803   /* Else will try to reuse look-ahead token after shifting the error
6804      token.  */
6805   goto yyerrlab1;
6808 /*---------------------------------------------------.
6809 | yyerrorlab -- error raised explicitly by YYERROR.  |
6810 `---------------------------------------------------*/
6811 yyerrorlab:
6813   /* Pacify compilers like GCC when the user code never invokes
6814      YYERROR and the label yyerrorlab therefore never appears in user
6815      code.  */
6816   if (0)
6817      goto yyerrorlab;
6819 yyvsp -= yylen;
6820   yyssp -= yylen;
6821   yystate = *yyssp;
6822   goto yyerrlab1;
6825 /*-------------------------------------------------------------.
6826 | yyerrlab1 -- common code for both syntax error and YYERROR.  |
6827 `-------------------------------------------------------------*/
6828 yyerrlab1:
6829   yyerrstatus = 3;      /* Each real token shifted decrements this.  */
6831   for (;;)
6832     {
6833       yyn = yypact[yystate];
6834       if (yyn != YYPACT_NINF)
6835         {
6836           yyn += YYTERROR;
6837           if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
6838             {
6839               yyn = yytable[yyn];
6840               if (0 < yyn)
6841                 break;
6842             }
6843         }
6845       /* Pop the current state because it cannot handle the error token.  */
6846       if (yyssp == yyss)
6847         YYABORT;
6850       yydestruct ("Error: popping", yystos[yystate], yyvsp);
6851       YYPOPSTACK;
6852       yystate = *yyssp;
6853       YY_STACK_PRINT (yyss, yyssp);
6854     }
6856   if (yyn == YYFINAL)
6857     YYACCEPT;
6859   *++yyvsp = yylval;
6862   /* Shift the error token. */
6863   YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
6865   yystate = yyn;
6866   goto yynewstate;
6869 /*-------------------------------------.
6870 | yyacceptlab -- YYACCEPT comes here.  |
6871 `-------------------------------------*/
6872 yyacceptlab:
6873   yyresult = 0;
6874   goto yyreturn;
6876 /*-----------------------------------.
6877 | yyabortlab -- YYABORT comes here.  |
6878 `-----------------------------------*/
6879 yyabortlab:
6880   yyresult = 1;
6881   goto yyreturn;
6883 #ifndef yyoverflow
6884 /*-------------------------------------------------.
6885 | yyexhaustedlab -- memory exhaustion comes here.  |
6886 `-------------------------------------------------*/
6887 yyexhaustedlab:
6888   yyerror (YY_("memory exhausted"));
6889   yyresult = 2;
6890   /* Fall through.  */
6891 #endif
6893 yyreturn:
6894   if (yychar != YYEOF && yychar != YYEMPTY)
6895      yydestruct ("Cleanup: discarding lookahead",
6896                  yytoken, &yylval);
6897   while (yyssp != yyss)
6898     {
6899       yydestruct ("Cleanup: popping",
6900                   yystos[*yyssp], yyvsp);
6901       YYPOPSTACK;
6902     }
6903 #ifndef yyoverflow
6904   if (yyss != yyssa)
6905     YYSTACK_FREE (yyss);
6906 #endif
6907   return yyresult;
6911 #line 3926 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
6914 int yyerror(const char *ErrorMsg) {
6915   std::string where 
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) +
6921               "'.";
6922   std::cerr << "llvm-upgrade: " << errMsg << '\n';
6923   std::cout << "llvm-upgrade: parse failed.\n";
6924   exit(1);
6927 void warning(const std::string& ErrorMsg) {
6928   std::string where 
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) +
6934               "'.";
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());