blob: dc99bdf076da1109ffd602ec02f9c3c54e2d02dc [file] [log] [blame]
Chris Lattner38905612008-02-19 04:36:25 +00001/* A Bison parser, made by GNU Bison 2.3. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00002
Chris Lattner38905612008-02-19 04:36:25 +00003/* Skeleton implementation for Bison's Yacc-like parsers in C
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004
Chris Lattner38905612008-02-19 04:36:25 +00005 Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
6 Free Software Foundation, Inc.
Anton Korobeynikov178a3522007-01-12 19:22:51 +00007
Chris Lattner38905612008-02-19 04:36:25 +00008 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2, or (at your option)
11 any later version.
12
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 51 Franklin Street, Fifth Floor,
21 Boston, MA 02110-1301, USA. */
22
23/* As a special exception, you may create a larger work that contains
24 part or all of the Bison parser skeleton and distribute that work
25 under terms of your choice, so long as that work isn't itself a
26 parser generator using the skeleton or a modified version thereof
27 as a parser skeleton. Alternatively, if you modify or redistribute
28 the parser skeleton itself, you may (at your option) remove this
29 special exception, which will cause the skeleton and the resulting
30 Bison output files to be licensed under the GNU General Public
31 License without this special exception.
32
33 This special exception was added by the Free Software Foundation in
34 version 2.2 of Bison. */
35
36/* C LALR(1) parser skeleton written by Richard Stallman, by
37 simplifying the original so-called "semantic" parser. */
38
39/* All symbols defined below should begin with yy or YY, to avoid
40 infringing on user name space. This should be done even for local
41 variables, as they might otherwise be expanded by user macros.
42 There are some unavoidable exceptions within include files to
43 define necessary library symbols; they are noted "INFRINGES ON
44 USER NAME SPACE" below. */
45
46/* Identify Bison output. */
47#define YYBISON 1
48
49/* Bison version. */
50#define YYBISON_VERSION "2.3"
51
52/* Skeleton name. */
53#define YYSKELETON_NAME "yacc.c"
54
55/* Pure parsers. */
56#define YYPURE 0
57
58/* Using locations. */
59#define YYLSP_NEEDED 0
60
61/* Substitute the variable and function names. */
Reid Spencer68a24bd2005-08-27 18:50:39 +000062#define yyparse llvmAsmparse
Chris Lattner38905612008-02-19 04:36:25 +000063#define yylex llvmAsmlex
Reid Spencer68a24bd2005-08-27 18:50:39 +000064#define yyerror llvmAsmerror
Chris Lattner38905612008-02-19 04:36:25 +000065#define yylval llvmAsmlval
66#define yychar llvmAsmchar
Reid Spencer68a24bd2005-08-27 18:50:39 +000067#define yydebug llvmAsmdebug
68#define yynerrs llvmAsmnerrs
69
Chris Lattner38905612008-02-19 04:36:25 +000070
71/* Tokens. */
72#ifndef YYTOKENTYPE
73# define YYTOKENTYPE
74 /* Put the tokens into the symbol table, so that GDB and other debuggers
75 know about them. */
76 enum yytokentype {
77 ESINT64VAL = 258,
78 EUINT64VAL = 259,
79 ESAPINTVAL = 260,
80 EUAPINTVAL = 261,
81 LOCALVAL_ID = 262,
82 GLOBALVAL_ID = 263,
83 FPVAL = 264,
84 VOID = 265,
85 INTTYPE = 266,
86 FLOAT = 267,
87 DOUBLE = 268,
88 X86_FP80 = 269,
89 FP128 = 270,
90 PPC_FP128 = 271,
91 LABEL = 272,
92 TYPE = 273,
93 LOCALVAR = 274,
94 GLOBALVAR = 275,
95 LABELSTR = 276,
96 STRINGCONSTANT = 277,
97 ATSTRINGCONSTANT = 278,
98 PCTSTRINGCONSTANT = 279,
99 ZEROINITIALIZER = 280,
100 TRUETOK = 281,
101 FALSETOK = 282,
102 BEGINTOK = 283,
103 ENDTOK = 284,
104 DECLARE = 285,
105 DEFINE = 286,
106 GLOBAL = 287,
107 CONSTANT = 288,
108 SECTION = 289,
109 ALIAS = 290,
110 VOLATILE = 291,
111 THREAD_LOCAL = 292,
112 TO = 293,
113 DOTDOTDOT = 294,
114 NULL_TOK = 295,
115 UNDEF = 296,
116 INTERNAL = 297,
117 LINKONCE = 298,
118 WEAK = 299,
119 APPENDING = 300,
120 DLLIMPORT = 301,
121 DLLEXPORT = 302,
122 EXTERN_WEAK = 303,
123 OPAQUE = 304,
124 EXTERNAL = 305,
125 TARGET = 306,
126 TRIPLE = 307,
127 ALIGN = 308,
128 ADDRSPACE = 309,
129 DEPLIBS = 310,
130 CALL = 311,
131 TAIL = 312,
132 ASM_TOK = 313,
133 MODULE = 314,
134 SIDEEFFECT = 315,
135 CC_TOK = 316,
136 CCC_TOK = 317,
137 FASTCC_TOK = 318,
138 COLDCC_TOK = 319,
139 X86_STDCALLCC_TOK = 320,
140 X86_FASTCALLCC_TOK = 321,
141 DATALAYOUT = 322,
Devang Patel67909432008-03-03 18:58:47 +0000142 UNWIND_TO = 323,
143 RET = 324,
144 BR = 325,
145 SWITCH = 326,
146 INVOKE = 327,
147 UNWIND = 328,
148 UNREACHABLE = 329,
149 ADD = 330,
150 SUB = 331,
151 MUL = 332,
152 UDIV = 333,
153 SDIV = 334,
154 FDIV = 335,
155 UREM = 336,
156 SREM = 337,
157 FREM = 338,
158 AND = 339,
159 OR = 340,
160 XOR = 341,
161 SHL = 342,
162 LSHR = 343,
163 ASHR = 344,
164 ICMP = 345,
165 FCMP = 346,
166 EQ = 347,
167 NE = 348,
168 SLT = 349,
169 SGT = 350,
170 SLE = 351,
171 SGE = 352,
172 ULT = 353,
173 UGT = 354,
174 ULE = 355,
175 UGE = 356,
176 OEQ = 357,
177 ONE = 358,
178 OLT = 359,
179 OGT = 360,
180 OLE = 361,
181 OGE = 362,
182 ORD = 363,
183 UNO = 364,
184 UEQ = 365,
185 UNE = 366,
186 MALLOC = 367,
187 ALLOCA = 368,
188 FREE = 369,
189 LOAD = 370,
190 STORE = 371,
191 GETELEMENTPTR = 372,
192 TRUNC = 373,
193 ZEXT = 374,
194 SEXT = 375,
195 FPTRUNC = 376,
196 FPEXT = 377,
197 BITCAST = 378,
198 UITOFP = 379,
199 SITOFP = 380,
200 FPTOUI = 381,
201 FPTOSI = 382,
202 INTTOPTR = 383,
203 PTRTOINT = 384,
204 PHI_TOK = 385,
205 SELECT = 386,
206 VAARG = 387,
207 EXTRACTELEMENT = 388,
208 INSERTELEMENT = 389,
209 SHUFFLEVECTOR = 390,
210 GETRESULT = 391,
211 SIGNEXT = 392,
212 ZEROEXT = 393,
213 NORETURN = 394,
214 INREG = 395,
215 SRET = 396,
216 NOUNWIND = 397,
217 NOALIAS = 398,
218 BYVAL = 399,
219 NEST = 400,
220 READNONE = 401,
221 READONLY = 402,
222 GC = 403,
223 DEFAULT = 404,
224 HIDDEN = 405,
225 PROTECTED = 406
Chris Lattner38905612008-02-19 04:36:25 +0000226 };
227#endif
228/* Tokens. */
229#define ESINT64VAL 258
230#define EUINT64VAL 259
231#define ESAPINTVAL 260
232#define EUAPINTVAL 261
233#define LOCALVAL_ID 262
234#define GLOBALVAL_ID 263
235#define FPVAL 264
236#define VOID 265
237#define INTTYPE 266
238#define FLOAT 267
239#define DOUBLE 268
240#define X86_FP80 269
241#define FP128 270
242#define PPC_FP128 271
243#define LABEL 272
244#define TYPE 273
245#define LOCALVAR 274
246#define GLOBALVAR 275
247#define LABELSTR 276
248#define STRINGCONSTANT 277
249#define ATSTRINGCONSTANT 278
250#define PCTSTRINGCONSTANT 279
251#define ZEROINITIALIZER 280
252#define TRUETOK 281
253#define FALSETOK 282
254#define BEGINTOK 283
255#define ENDTOK 284
256#define DECLARE 285
257#define DEFINE 286
258#define GLOBAL 287
259#define CONSTANT 288
260#define SECTION 289
261#define ALIAS 290
262#define VOLATILE 291
263#define THREAD_LOCAL 292
264#define TO 293
265#define DOTDOTDOT 294
266#define NULL_TOK 295
267#define UNDEF 296
268#define INTERNAL 297
269#define LINKONCE 298
270#define WEAK 299
271#define APPENDING 300
272#define DLLIMPORT 301
273#define DLLEXPORT 302
274#define EXTERN_WEAK 303
275#define OPAQUE 304
276#define EXTERNAL 305
277#define TARGET 306
278#define TRIPLE 307
279#define ALIGN 308
280#define ADDRSPACE 309
281#define DEPLIBS 310
282#define CALL 311
283#define TAIL 312
284#define ASM_TOK 313
285#define MODULE 314
286#define SIDEEFFECT 315
287#define CC_TOK 316
288#define CCC_TOK 317
289#define FASTCC_TOK 318
290#define COLDCC_TOK 319
291#define X86_STDCALLCC_TOK 320
292#define X86_FASTCALLCC_TOK 321
293#define DATALAYOUT 322
Devang Patel67909432008-03-03 18:58:47 +0000294#define UNWIND_TO 323
295#define RET 324
296#define BR 325
297#define SWITCH 326
298#define INVOKE 327
299#define UNWIND 328
300#define UNREACHABLE 329
301#define ADD 330
302#define SUB 331
303#define MUL 332
304#define UDIV 333
305#define SDIV 334
306#define FDIV 335
307#define UREM 336
308#define SREM 337
309#define FREM 338
310#define AND 339
311#define OR 340
312#define XOR 341
313#define SHL 342
314#define LSHR 343
315#define ASHR 344
316#define ICMP 345
317#define FCMP 346
318#define EQ 347
319#define NE 348
320#define SLT 349
321#define SGT 350
322#define SLE 351
323#define SGE 352
324#define ULT 353
325#define UGT 354
326#define ULE 355
327#define UGE 356
328#define OEQ 357
329#define ONE 358
330#define OLT 359
331#define OGT 360
332#define OLE 361
333#define OGE 362
334#define ORD 363
335#define UNO 364
336#define UEQ 365
337#define UNE 366
338#define MALLOC 367
339#define ALLOCA 368
340#define FREE 369
341#define LOAD 370
342#define STORE 371
343#define GETELEMENTPTR 372
344#define TRUNC 373
345#define ZEXT 374
346#define SEXT 375
347#define FPTRUNC 376
348#define FPEXT 377
349#define BITCAST 378
350#define UITOFP 379
351#define SITOFP 380
352#define FPTOUI 381
353#define FPTOSI 382
354#define INTTOPTR 383
355#define PTRTOINT 384
356#define PHI_TOK 385
357#define SELECT 386
358#define VAARG 387
359#define EXTRACTELEMENT 388
360#define INSERTELEMENT 389
361#define SHUFFLEVECTOR 390
362#define GETRESULT 391
363#define SIGNEXT 392
364#define ZEROEXT 393
365#define NORETURN 394
366#define INREG 395
367#define SRET 396
368#define NOUNWIND 397
369#define NOALIAS 398
370#define BYVAL 399
371#define NEST 400
372#define READNONE 401
373#define READONLY 402
374#define GC 403
375#define DEFAULT 404
376#define HIDDEN 405
377#define PROTECTED 406
Chris Lattner38905612008-02-19 04:36:25 +0000378
379
380
381
382/* Copy the first part of user declarations. */
Devang Patel13b823c2008-02-26 23:19:08 +0000383#line 14 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Reid Spencer68a24bd2005-08-27 18:50:39 +0000384
385#include "ParserInternals.h"
386#include "llvm/CallingConv.h"
Chris Lattner0e9c3762006-01-25 22:27:16 +0000387#include "llvm/InlineAsm.h"
Reid Spencer68a24bd2005-08-27 18:50:39 +0000388#include "llvm/Instructions.h"
389#include "llvm/Module.h"
Reid Spenceref9b9a72007-02-05 20:47:22 +0000390#include "llvm/ValueSymbolTable.h"
Chandler Carruth02202192007-08-04 01:56:21 +0000391#include "llvm/AutoUpgrade.h"
Reid Spencer68a24bd2005-08-27 18:50:39 +0000392#include "llvm/Support/GetElementPtrTypeIterator.h"
Reid Spencer14310612006-12-31 05:40:51 +0000393#include "llvm/Support/CommandLine.h"
Chris Lattnerf7469af2007-01-31 04:44:08 +0000394#include "llvm/ADT/SmallVector.h"
Reid Spencer68a24bd2005-08-27 18:50:39 +0000395#include "llvm/ADT/STLExtras.h"
Chris Lattner0019bbe2005-11-06 06:46:53 +0000396#include "llvm/Support/MathExtras.h"
Reid Spencer481169e2006-12-01 00:33:46 +0000397#include "llvm/Support/Streams.h"
Dale Johannesen22c39792008-02-22 22:17:59 +0000398#include "llvm/ParamAttrsList.h"
Reid Spencer68a24bd2005-08-27 18:50:39 +0000399#include <algorithm>
Reid Spencer68a24bd2005-08-27 18:50:39 +0000400#include <list>
Chris Lattner8adde282007-02-11 21:40:10 +0000401#include <map>
Reid Spencer68a24bd2005-08-27 18:50:39 +0000402#include <utility>
403
Reid Spencere4f47592006-08-18 17:32:55 +0000404// The following is a gross hack. In order to rid the libAsmParser library of
405// exceptions, we have to have a way of getting the yyparse function to go into
406// an error situation. So, whenever we want an error to occur, the GenerateError
407// function (see bottom of file) sets TriggerError. Then, at the end of each
408// production in the grammer we use CHECK_FOR_ERROR which will invoke YYERROR
409// (a goto) to put YACC in error state. Furthermore, several calls to
410// GenerateError are made from inside productions and they must simulate the
411// previous exception behavior by exiting the production immediately. We have
412// replaced these with the GEN_ERROR macro which calls GeneratError and then
413// immediately invokes YYERROR. This would be so much cleaner if it was a
414// recursive descent parser.
Reid Spencer61c83e02006-08-18 08:43:06 +0000415static bool TriggerError = false;
Reid Spencerf63697d2006-10-09 17:36:59 +0000416#define CHECK_FOR_ERROR { if (TriggerError) { TriggerError = false; YYABORT; } }
Reid Spencer61c83e02006-08-18 08:43:06 +0000417#define GEN_ERROR(msg) { GenerateError(msg); YYERROR; }
418
Reid Spencer68a24bd2005-08-27 18:50:39 +0000419int yyerror(const char *ErrorMsg); // Forward declarations to prevent "implicit
420int yylex(); // declaration" of xxx warnings.
421int yyparse();
Reid Spencer68a24bd2005-08-27 18:50:39 +0000422using namespace llvm;
423
424static Module *ParserResult;
425
426// DEBUG_UPREFS - Define this symbol if you want to enable debugging output
427// relating to upreferences in the input stream.
428//
429//#define DEBUG_UPREFS 1
430#ifdef DEBUG_UPREFS
Bill Wendlinge8156192006-12-07 01:30:32 +0000431#define UR_OUT(X) cerr << X
Reid Spencer68a24bd2005-08-27 18:50:39 +0000432#else
433#define UR_OUT(X)
434#endif
435
436#define YYERROR_VERBOSE 1
437
Chris Lattnerb475c422005-11-12 18:22:38 +0000438static GlobalVariable *CurGV;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000439
440
441// This contains info used when building the body of a function. It is
442// destroyed when the function is completed.
443//
444typedef std::vector<Value *> ValueList; // Numbered defs
Reid Spencer14310612006-12-31 05:40:51 +0000445
Reid Spencer68a24bd2005-08-27 18:50:39 +0000446static void
Reid Spencer93c40032007-03-19 18:40:50 +0000447ResolveDefinitions(ValueList &LateResolvers, ValueList *FutureLateResolvers=0);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000448
449static struct PerModuleInfo {
450 Module *CurrentModule;
Reid Spencer93c40032007-03-19 18:40:50 +0000451 ValueList Values; // Module level numbered definitions
452 ValueList LateResolveValues;
Reid Spencer861d9d62006-11-28 07:29:44 +0000453 std::vector<PATypeHolder> Types;
454 std::map<ValID, PATypeHolder> LateResolveTypes;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000455
456 /// PlaceHolderInfo - When temporary placeholder objects are created, remember
Chris Lattner0ad19702006-06-21 16:53:00 +0000457 /// how they were referenced and on which line of the input they came from so
Reid Spencer68a24bd2005-08-27 18:50:39 +0000458 /// that we can resolve them later and print error messages as appropriate.
459 std::map<Value*, std::pair<ValID, int> > PlaceHolderInfo;
460
461 // GlobalRefs - This maintains a mapping between <Type, ValID>'s and forward
462 // references to global values. Global values may be referenced before they
463 // are defined, and if so, the temporary object that they represent is held
464 // here. This is used for forward references of GlobalValues.
465 //
466 typedef std::map<std::pair<const PointerType *,
467 ValID>, GlobalValue*> GlobalRefsType;
468 GlobalRefsType GlobalRefs;
469
470 void ModuleDone() {
471 // If we could not resolve some functions at function compilation time
472 // (calls to functions before they are defined), resolve them now... Types
473 // are resolved when the constant pool has been completely parsed.
474 //
475 ResolveDefinitions(LateResolveValues);
Reid Spencer5b7e7532006-09-28 19:28:24 +0000476 if (TriggerError)
477 return;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000478
479 // Check to make sure that all global value forward references have been
480 // resolved!
481 //
482 if (!GlobalRefs.empty()) {
483 std::string UndefinedReferences = "Unresolved global references exist:\n";
484
485 for (GlobalRefsType::iterator I = GlobalRefs.begin(), E =GlobalRefs.end();
486 I != E; ++I) {
487 UndefinedReferences += " " + I->first.first->getDescription() + " " +
488 I->first.second.getName() + "\n";
489 }
Reid Spencer61c83e02006-08-18 08:43:06 +0000490 GenerateError(UndefinedReferences);
Reid Spencer5b7e7532006-09-28 19:28:24 +0000491 return;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000492 }
493
Chandler Carruth02202192007-08-04 01:56:21 +0000494 // Look for intrinsic functions and CallInst that need to be upgraded
495 for (Module::iterator FI = CurrentModule->begin(),
496 FE = CurrentModule->end(); FI != FE; )
497 UpgradeCallsToIntrinsic(FI++); // must be post-increment, as we remove
498
Reid Spencer68a24bd2005-08-27 18:50:39 +0000499 Values.clear(); // Clear out function local definitions
500 Types.clear();
501 CurrentModule = 0;
502 }
503
Reid Spencer68a24bd2005-08-27 18:50:39 +0000504 // GetForwardRefForGlobal - Check to see if there is a forward reference
505 // for this global. If so, remove it from the GlobalRefs map and return it.
506 // If not, just return null.
507 GlobalValue *GetForwardRefForGlobal(const PointerType *PTy, ValID ID) {
508 // Check to see if there is a forward reference to this global variable...
509 // if there is, eliminate it and patch the reference to use the new def'n.
510 GlobalRefsType::iterator I = GlobalRefs.find(std::make_pair(PTy, ID));
511 GlobalValue *Ret = 0;
512 if (I != GlobalRefs.end()) {
513 Ret = I->second;
514 GlobalRefs.erase(I);
515 }
516 return Ret;
517 }
Reid Spencer8c8a2dc2007-01-02 21:54:12 +0000518
519 bool TypeIsUnresolved(PATypeHolder* PATy) {
520 // If it isn't abstract, its resolved
521 const Type* Ty = PATy->get();
522 if (!Ty->isAbstract())
523 return false;
524 // Traverse the type looking for abstract types. If it isn't abstract then
525 // we don't need to traverse that leg of the type.
526 std::vector<const Type*> WorkList, SeenList;
527 WorkList.push_back(Ty);
528 while (!WorkList.empty()) {
529 const Type* Ty = WorkList.back();
530 SeenList.push_back(Ty);
531 WorkList.pop_back();
532 if (const OpaqueType* OpTy = dyn_cast<OpaqueType>(Ty)) {
533 // Check to see if this is an unresolved type
534 std::map<ValID, PATypeHolder>::iterator I = LateResolveTypes.begin();
535 std::map<ValID, PATypeHolder>::iterator E = LateResolveTypes.end();
536 for ( ; I != E; ++I) {
537 if (I->second.get() == OpTy)
538 return true;
539 }
540 } else if (const SequentialType* SeqTy = dyn_cast<SequentialType>(Ty)) {
541 const Type* TheTy = SeqTy->getElementType();
542 if (TheTy->isAbstract() && TheTy != Ty) {
543 std::vector<const Type*>::iterator I = SeenList.begin(),
544 E = SeenList.end();
545 for ( ; I != E; ++I)
546 if (*I == TheTy)
547 break;
548 if (I == E)
549 WorkList.push_back(TheTy);
550 }
551 } else if (const StructType* StrTy = dyn_cast<StructType>(Ty)) {
552 for (unsigned i = 0; i < StrTy->getNumElements(); ++i) {
553 const Type* TheTy = StrTy->getElementType(i);
554 if (TheTy->isAbstract() && TheTy != Ty) {
555 std::vector<const Type*>::iterator I = SeenList.begin(),
556 E = SeenList.end();
557 for ( ; I != E; ++I)
558 if (*I == TheTy)
559 break;
560 if (I == E)
561 WorkList.push_back(TheTy);
562 }
563 }
564 }
565 }
566 return false;
567 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000568} CurModule;
569
570static struct PerFunctionInfo {
571 Function *CurrentFunction; // Pointer to current function being created
572
Reid Spencer93c40032007-03-19 18:40:50 +0000573 ValueList Values; // Keep track of #'d definitions
574 unsigned NextValNum;
575 ValueList LateResolveValues;
Reid Spenceref9b9a72007-02-05 20:47:22 +0000576 bool isDeclare; // Is this function a forward declararation?
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +0000577 GlobalValue::LinkageTypes Linkage; // Linkage for forward declaration.
Anton Korobeynikov178a3522007-01-12 19:22:51 +0000578 GlobalValue::VisibilityTypes Visibility;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000579
580 /// BBForwardRefs - When we see forward references to basic blocks, keep
581 /// track of them here.
Reid Spencer93c40032007-03-19 18:40:50 +0000582 std::map<ValID, BasicBlock*> BBForwardRefs;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000583
584 inline PerFunctionInfo() {
585 CurrentFunction = 0;
586 isDeclare = false;
Anton Korobeynikov178a3522007-01-12 19:22:51 +0000587 Linkage = GlobalValue::ExternalLinkage;
588 Visibility = GlobalValue::DefaultVisibility;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000589 }
590
591 inline void FunctionStart(Function *M) {
592 CurrentFunction = M;
Reid Spencer93c40032007-03-19 18:40:50 +0000593 NextValNum = 0;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000594 }
595
596 void FunctionDone() {
Reid Spencer68a24bd2005-08-27 18:50:39 +0000597 // Any forward referenced blocks left?
Reid Spencer5b7e7532006-09-28 19:28:24 +0000598 if (!BBForwardRefs.empty()) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000599 GenerateError("Undefined reference to label " +
Reid Spencer93c40032007-03-19 18:40:50 +0000600 BBForwardRefs.begin()->second->getName());
Reid Spencer5b7e7532006-09-28 19:28:24 +0000601 return;
602 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000603
604 // Resolve all forward references now.
605 ResolveDefinitions(LateResolveValues, &CurModule.LateResolveValues);
606
607 Values.clear(); // Clear out function local definitions
Reid Spencer93c40032007-03-19 18:40:50 +0000608 BBForwardRefs.clear();
Reid Spencer68a24bd2005-08-27 18:50:39 +0000609 CurrentFunction = 0;
610 isDeclare = false;
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +0000611 Linkage = GlobalValue::ExternalLinkage;
Anton Korobeynikov178a3522007-01-12 19:22:51 +0000612 Visibility = GlobalValue::DefaultVisibility;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000613 }
614} CurFun; // Info for the current function...
615
616static bool inFunctionScope() { return CurFun.CurrentFunction != 0; }
617
618
619//===----------------------------------------------------------------------===//
620// Code to handle definitions of all the types
621//===----------------------------------------------------------------------===//
622
Reid Spencer93c40032007-03-19 18:40:50 +0000623static void InsertValue(Value *V, ValueList &ValueTab = CurFun.Values) {
624 // Things that have names or are void typed don't get slot numbers
625 if (V->hasName() || (V->getType() == Type::VoidTy))
626 return;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000627
Reid Spencer93c40032007-03-19 18:40:50 +0000628 // In the case of function values, we have to allow for the forward reference
629 // of basic blocks, which are included in the numbering. Consequently, we keep
630 // track of the next insertion location with NextValNum. When a BB gets
631 // inserted, it could change the size of the CurFun.Values vector.
632 if (&ValueTab == &CurFun.Values) {
633 if (ValueTab.size() <= CurFun.NextValNum)
634 ValueTab.resize(CurFun.NextValNum+1);
635 ValueTab[CurFun.NextValNum++] = V;
636 return;
637 }
638 // For all other lists, its okay to just tack it on the back of the vector.
639 ValueTab.push_back(V);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000640}
641
642static const Type *getTypeVal(const ValID &D, bool DoNotImprovise = false) {
643 switch (D.Type) {
Reid Spencer41dff5e2007-01-26 08:05:27 +0000644 case ValID::LocalID: // Is it a numbered definition?
Reid Spencer68a24bd2005-08-27 18:50:39 +0000645 // Module constants occupy the lowest numbered slots...
Reid Spencer41dff5e2007-01-26 08:05:27 +0000646 if (D.Num < CurModule.Types.size())
647 return CurModule.Types[D.Num];
Reid Spencer68a24bd2005-08-27 18:50:39 +0000648 break;
Reid Spencer41dff5e2007-01-26 08:05:27 +0000649 case ValID::LocalName: // Is it a named definition?
Reid Spencer0a8a16b2007-05-22 18:52:55 +0000650 if (const Type *N = CurModule.CurrentModule->getTypeByName(D.getName())) {
Reid Spencer68a24bd2005-08-27 18:50:39 +0000651 D.destroy(); // Free old strdup'd memory...
652 return N;
653 }
654 break;
655 default:
Reid Spencerb5334b02007-02-05 10:18:06 +0000656 GenerateError("Internal parser error: Invalid symbol type reference");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000657 return 0;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000658 }
659
660 // If we reached here, we referenced either a symbol that we don't know about
661 // or an id number that hasn't been read yet. We may be referencing something
662 // forward, so just create an entry to be resolved later and get to it...
663 //
664 if (DoNotImprovise) return 0; // Do we just want a null to be returned?
665
666
667 if (inFunctionScope()) {
Reid Spencer41dff5e2007-01-26 08:05:27 +0000668 if (D.Type == ValID::LocalName) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000669 GenerateError("Reference to an undefined type: '" + D.getName() + "'");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000670 return 0;
671 } else {
Reid Spencer41dff5e2007-01-26 08:05:27 +0000672 GenerateError("Reference to an undefined type: #" + utostr(D.Num));
Reid Spencer5b7e7532006-09-28 19:28:24 +0000673 return 0;
674 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000675 }
676
Reid Spencer861d9d62006-11-28 07:29:44 +0000677 std::map<ValID, PATypeHolder>::iterator I =CurModule.LateResolveTypes.find(D);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000678 if (I != CurModule.LateResolveTypes.end())
Reid Spencer861d9d62006-11-28 07:29:44 +0000679 return I->second;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000680
Reid Spencer861d9d62006-11-28 07:29:44 +0000681 Type *Typ = OpaqueType::get();
682 CurModule.LateResolveTypes.insert(std::make_pair(D, Typ));
683 return Typ;
Reid Spencera132e042006-12-03 05:46:11 +0000684 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000685
Reid Spencer93c40032007-03-19 18:40:50 +0000686// getExistingVal - Look up the value specified by the provided type and
Reid Spencer68a24bd2005-08-27 18:50:39 +0000687// the provided ValID. If the value exists and has already been defined, return
688// it. Otherwise return null.
689//
Reid Spencer93c40032007-03-19 18:40:50 +0000690static Value *getExistingVal(const Type *Ty, const ValID &D) {
Reid Spencer5b7e7532006-09-28 19:28:24 +0000691 if (isa<FunctionType>(Ty)) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000692 GenerateError("Functions are not values and "
Reid Spencer68a24bd2005-08-27 18:50:39 +0000693 "must be referenced as pointers");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000694 return 0;
695 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000696
697 switch (D.Type) {
Reid Spencer41dff5e2007-01-26 08:05:27 +0000698 case ValID::LocalID: { // Is it a numbered definition?
Reid Spencer41dff5e2007-01-26 08:05:27 +0000699 // Check that the number is within bounds.
Reid Spencer93c40032007-03-19 18:40:50 +0000700 if (D.Num >= CurFun.Values.size())
701 return 0;
702 Value *Result = CurFun.Values[D.Num];
703 if (Ty != Result->getType()) {
704 GenerateError("Numbered value (%" + utostr(D.Num) + ") of type '" +
705 Result->getType()->getDescription() + "' does not match "
706 "expected type, '" + Ty->getDescription() + "'");
707 return 0;
708 }
709 return Result;
Reid Spencer41dff5e2007-01-26 08:05:27 +0000710 }
711 case ValID::GlobalID: { // Is it a numbered definition?
Reid Spencer93c40032007-03-19 18:40:50 +0000712 if (D.Num >= CurModule.Values.size())
Reid Spenceref9b9a72007-02-05 20:47:22 +0000713 return 0;
Reid Spencer93c40032007-03-19 18:40:50 +0000714 Value *Result = CurModule.Values[D.Num];
715 if (Ty != Result->getType()) {
716 GenerateError("Numbered value (@" + utostr(D.Num) + ") of type '" +
717 Result->getType()->getDescription() + "' does not match "
718 "expected type, '" + Ty->getDescription() + "'");
Reid Spenceref9b9a72007-02-05 20:47:22 +0000719 return 0;
Reid Spencer93c40032007-03-19 18:40:50 +0000720 }
721 return Result;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000722 }
Reid Spencer41dff5e2007-01-26 08:05:27 +0000723
724 case ValID::LocalName: { // Is it a named definition?
Reid Spenceref9b9a72007-02-05 20:47:22 +0000725 if (!inFunctionScope())
726 return 0;
727 ValueSymbolTable &SymTab = CurFun.CurrentFunction->getValueSymbolTable();
Reid Spencer0a8a16b2007-05-22 18:52:55 +0000728 Value *N = SymTab.lookup(D.getName());
Reid Spenceref9b9a72007-02-05 20:47:22 +0000729 if (N == 0)
730 return 0;
731 if (N->getType() != Ty)
732 return 0;
Reid Spencer41dff5e2007-01-26 08:05:27 +0000733
734 D.destroy(); // Free old strdup'd memory...
735 return N;
736 }
737 case ValID::GlobalName: { // Is it a named definition?
Reid Spenceref9b9a72007-02-05 20:47:22 +0000738 ValueSymbolTable &SymTab = CurModule.CurrentModule->getValueSymbolTable();
Reid Spencer0a8a16b2007-05-22 18:52:55 +0000739 Value *N = SymTab.lookup(D.getName());
Reid Spenceref9b9a72007-02-05 20:47:22 +0000740 if (N == 0)
741 return 0;
742 if (N->getType() != Ty)
743 return 0;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000744
745 D.destroy(); // Free old strdup'd memory...
746 return N;
747 }
748
749 // Check to make sure that "Ty" is an integral type, and that our
750 // value will fit into the specified type...
751 case ValID::ConstSIntVal: // Is it a constant pool reference??
Chris Lattner38905612008-02-19 04:36:25 +0000752 if (!isa<IntegerType>(Ty) ||
753 !ConstantInt::isValueValidForType(Ty, D.ConstPool64)) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000754 GenerateError("Signed integral constant '" +
Reid Spencer68a24bd2005-08-27 18:50:39 +0000755 itostr(D.ConstPool64) + "' is invalid for type '" +
Reid Spencerb5334b02007-02-05 10:18:06 +0000756 Ty->getDescription() + "'");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000757 return 0;
758 }
Reid Spencer49d273e2007-03-19 20:40:51 +0000759 return ConstantInt::get(Ty, D.ConstPool64, true);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000760
761 case ValID::ConstUIntVal: // Is it an unsigned const pool reference?
Chris Lattner38905612008-02-19 04:36:25 +0000762 if (isa<IntegerType>(Ty) &&
763 ConstantInt::isValueValidForType(Ty, D.UConstPool64))
Reid Spencerb83eb642006-10-20 07:07:24 +0000764 return ConstantInt::get(Ty, D.UConstPool64);
Chris Lattner38905612008-02-19 04:36:25 +0000765
766 if (!isa<IntegerType>(Ty) ||
767 !ConstantInt::isValueValidForType(Ty, D.ConstPool64)) {
768 GenerateError("Integral constant '" + utostr(D.UConstPool64) +
769 "' is invalid or out of range for type '" +
770 Ty->getDescription() + "'");
771 return 0;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000772 }
Chris Lattner38905612008-02-19 04:36:25 +0000773 // This is really a signed reference. Transmogrify.
774 return ConstantInt::get(Ty, D.ConstPool64, true);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000775
776 case ValID::ConstFPVal: // Is it a floating point const pool reference?
Chris Lattner38905612008-02-19 04:36:25 +0000777 if (!Ty->isFloatingPoint() ||
778 !ConstantFP::isValueValidForType(Ty, *D.ConstPoolFP)) {
Reid Spencerb5334b02007-02-05 10:18:06 +0000779 GenerateError("FP constant invalid for type");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000780 return 0;
781 }
Dale Johannesenc72cd7e2007-09-11 18:33:39 +0000782 // Lexer has no type info, so builds all float and double FP constants
783 // as double. Fix this here. Long double does not need this.
784 if (&D.ConstPoolFP->getSemantics() == &APFloat::IEEEdouble &&
785 Ty==Type::FloatTy)
Dale Johannesencdd509a2007-09-07 21:07:57 +0000786 D.ConstPoolFP->convert(APFloat::IEEEsingle, APFloat::rmNearestTiesToEven);
787 return ConstantFP::get(Ty, *D.ConstPoolFP);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000788
789 case ValID::ConstNullVal: // Is it a null value?
Reid Spencer5b7e7532006-09-28 19:28:24 +0000790 if (!isa<PointerType>(Ty)) {
Reid Spencerb5334b02007-02-05 10:18:06 +0000791 GenerateError("Cannot create a a non pointer null");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000792 return 0;
793 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000794 return ConstantPointerNull::get(cast<PointerType>(Ty));
795
796 case ValID::ConstUndefVal: // Is it an undef value?
797 return UndefValue::get(Ty);
798
Chris Lattner7aa61892005-12-21 17:53:23 +0000799 case ValID::ConstZeroVal: // Is it a zero value?
800 return Constant::getNullValue(Ty);
801
Reid Spencer68a24bd2005-08-27 18:50:39 +0000802 case ValID::ConstantVal: // Fully resolved constant?
Reid Spencer5b7e7532006-09-28 19:28:24 +0000803 if (D.ConstantValue->getType() != Ty) {
Reid Spencerb5334b02007-02-05 10:18:06 +0000804 GenerateError("Constant expression type different from required type");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000805 return 0;
806 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000807 return D.ConstantValue;
808
Chris Lattner0e9c3762006-01-25 22:27:16 +0000809 case ValID::InlineAsmVal: { // Inline asm expression
810 const PointerType *PTy = dyn_cast<PointerType>(Ty);
811 const FunctionType *FTy =
812 PTy ? dyn_cast<FunctionType>(PTy->getElementType()) : 0;
Reid Spencer5b7e7532006-09-28 19:28:24 +0000813 if (!FTy || !InlineAsm::Verify(FTy, D.IAD->Constraints)) {
Reid Spencerb5334b02007-02-05 10:18:06 +0000814 GenerateError("Invalid type for asm constraint string");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000815 return 0;
816 }
Chris Lattner0e9c3762006-01-25 22:27:16 +0000817 InlineAsm *IA = InlineAsm::get(FTy, D.IAD->AsmString, D.IAD->Constraints,
818 D.IAD->HasSideEffects);
819 D.destroy(); // Free InlineAsmDescriptor.
820 return IA;
821 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000822 default:
Reid Spencera9720f52007-02-05 17:04:00 +0000823 assert(0 && "Unhandled case!");
Reid Spencer68a24bd2005-08-27 18:50:39 +0000824 return 0;
825 } // End of switch
826
Reid Spencera9720f52007-02-05 17:04:00 +0000827 assert(0 && "Unhandled case!");
Reid Spencer68a24bd2005-08-27 18:50:39 +0000828 return 0;
829}
830
Reid Spencer93c40032007-03-19 18:40:50 +0000831// getVal - This function is identical to getExistingVal, except that if a
Reid Spencer68a24bd2005-08-27 18:50:39 +0000832// value is not already defined, it "improvises" by creating a placeholder var
833// that looks and acts just like the requested variable. When the value is
834// defined later, all uses of the placeholder variable are replaced with the
835// real thing.
836//
837static Value *getVal(const Type *Ty, const ValID &ID) {
Reid Spencer5b7e7532006-09-28 19:28:24 +0000838 if (Ty == Type::LabelTy) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000839 GenerateError("Cannot use a basic block here");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000840 return 0;
841 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000842
843 // See if the value has already been defined.
Reid Spencer93c40032007-03-19 18:40:50 +0000844 Value *V = getExistingVal(Ty, ID);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000845 if (V) return V;
Reid Spencer5b7e7532006-09-28 19:28:24 +0000846 if (TriggerError) return 0;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000847
Reid Spencer5b7e7532006-09-28 19:28:24 +0000848 if (!Ty->isFirstClassType() && !isa<OpaqueType>(Ty)) {
Reid Spencerb5334b02007-02-05 10:18:06 +0000849 GenerateError("Invalid use of a composite type");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000850 return 0;
851 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000852
853 // If we reached here, we referenced either a symbol that we don't know about
854 // or an id number that hasn't been read yet. We may be referencing something
855 // forward, so just create an entry to be resolved later and get to it...
856 //
Anton Korobeynikov38e09802007-04-28 13:48:45 +0000857 switch (ID.Type) {
858 case ValID::GlobalName:
Reid Spencer9c9b63a2007-04-28 16:07:31 +0000859 case ValID::GlobalID: {
Anton Korobeynikov38e09802007-04-28 13:48:45 +0000860 const PointerType *PTy = dyn_cast<PointerType>(Ty);
861 if (!PTy) {
862 GenerateError("Invalid type for reference to global" );
863 return 0;
864 }
865 const Type* ElTy = PTy->getElementType();
866 if (const FunctionType *FTy = dyn_cast<FunctionType>(ElTy))
867 V = new Function(FTy, GlobalValue::ExternalLinkage);
868 else
Christopher Lamba8ed9bf2007-12-11 09:02:08 +0000869 V = new GlobalVariable(ElTy, false, GlobalValue::ExternalLinkage, 0, "",
870 (Module*)0, false, PTy->getAddressSpace());
Anton Korobeynikov38e09802007-04-28 13:48:45 +0000871 break;
Reid Spencer9c9b63a2007-04-28 16:07:31 +0000872 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +0000873 default:
874 V = new Argument(Ty);
875 }
876
Reid Spencer68a24bd2005-08-27 18:50:39 +0000877 // Remember where this forward reference came from. FIXME, shouldn't we try
878 // to recycle these things??
879 CurModule.PlaceHolderInfo.insert(std::make_pair(V, std::make_pair(ID,
Duncan Sandsdc024672007-11-27 13:23:08 +0000880 LLLgetLineNo())));
Reid Spencer68a24bd2005-08-27 18:50:39 +0000881
882 if (inFunctionScope())
883 InsertValue(V, CurFun.LateResolveValues);
884 else
885 InsertValue(V, CurModule.LateResolveValues);
886 return V;
887}
888
Reid Spencer93c40032007-03-19 18:40:50 +0000889/// defineBBVal - This is a definition of a new basic block with the specified
890/// identifier which must be the same as CurFun.NextValNum, if its numeric.
Devang Patel67909432008-03-03 18:58:47 +0000891static BasicBlock *defineBBVal(const ValID &ID, BasicBlock *unwindDest) {
Reid Spencera9720f52007-02-05 17:04:00 +0000892 assert(inFunctionScope() && "Can't get basic block at global scope!");
Reid Spencer68a24bd2005-08-27 18:50:39 +0000893
Reid Spencer68a24bd2005-08-27 18:50:39 +0000894 BasicBlock *BB = 0;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000895
Reid Spencer93c40032007-03-19 18:40:50 +0000896 // First, see if this was forward referenced
Reid Spencer68a24bd2005-08-27 18:50:39 +0000897
Reid Spencer93c40032007-03-19 18:40:50 +0000898 std::map<ValID, BasicBlock*>::iterator BBI = CurFun.BBForwardRefs.find(ID);
899 if (BBI != CurFun.BBForwardRefs.end()) {
900 BB = BBI->second;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000901 // The forward declaration could have been inserted anywhere in the
902 // function: insert it into the correct place now.
903 CurFun.CurrentFunction->getBasicBlockList().remove(BB);
904 CurFun.CurrentFunction->getBasicBlockList().push_back(BB);
Reid Spencer93c40032007-03-19 18:40:50 +0000905
Reid Spencer66728ef2007-03-20 01:13:36 +0000906 // We're about to erase the entry, save the key so we can clean it up.
907 ValID Tmp = BBI->first;
908
Reid Spencer93c40032007-03-19 18:40:50 +0000909 // Erase the forward ref from the map as its no longer "forward"
910 CurFun.BBForwardRefs.erase(ID);
911
Reid Spencer66728ef2007-03-20 01:13:36 +0000912 // The key has been removed from the map but so we don't want to leave
913 // strdup'd memory around so destroy it too.
914 Tmp.destroy();
915
Reid Spencer93c40032007-03-19 18:40:50 +0000916 // If its a numbered definition, bump the number and set the BB value.
917 if (ID.Type == ValID::LocalID) {
918 assert(ID.Num == CurFun.NextValNum && "Invalid new block number");
919 InsertValue(BB);
920 }
Devang Patel67909432008-03-03 18:58:47 +0000921 } else {
922 // We haven't seen this BB before and its first mention is a definition.
923 // Just create it and return it.
924 std::string Name (ID.Type == ValID::LocalName ? ID.getName() : "");
925 BB = new BasicBlock(Name, CurFun.CurrentFunction);
926 if (ID.Type == ValID::LocalID) {
927 assert(ID.Num == CurFun.NextValNum && "Invalid new block number");
928 InsertValue(BB);
929 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000930 }
Reid Spencer93c40032007-03-19 18:40:50 +0000931
Devang Patel67909432008-03-03 18:58:47 +0000932 ID.destroy();
933 BB->setUnwindDest(unwindDest);
Reid Spencer93c40032007-03-19 18:40:50 +0000934 return BB;
935}
936
937/// getBBVal - get an existing BB value or create a forward reference for it.
938///
939static BasicBlock *getBBVal(const ValID &ID) {
940 assert(inFunctionScope() && "Can't get basic block at global scope!");
941
942 BasicBlock *BB = 0;
943
944 std::map<ValID, BasicBlock*>::iterator BBI = CurFun.BBForwardRefs.find(ID);
945 if (BBI != CurFun.BBForwardRefs.end()) {
946 BB = BBI->second;
947 } if (ID.Type == ValID::LocalName) {
Reid Spencer0a8a16b2007-05-22 18:52:55 +0000948 std::string Name = ID.getName();
Reid Spencer93c40032007-03-19 18:40:50 +0000949 Value *N = CurFun.CurrentFunction->getValueSymbolTable().lookup(Name);
Anton Korobeynikovc70d7732008-02-20 12:10:37 +0000950 if (N) {
Reid Spencer93c40032007-03-19 18:40:50 +0000951 if (N->getType()->getTypeID() == Type::LabelTyID)
952 BB = cast<BasicBlock>(N);
953 else
954 GenerateError("Reference to label '" + Name + "' is actually of type '"+
955 N->getType()->getDescription() + "'");
Anton Korobeynikovc70d7732008-02-20 12:10:37 +0000956 }
Reid Spencer93c40032007-03-19 18:40:50 +0000957 } else if (ID.Type == ValID::LocalID) {
958 if (ID.Num < CurFun.NextValNum && ID.Num < CurFun.Values.size()) {
959 if (CurFun.Values[ID.Num]->getType()->getTypeID() == Type::LabelTyID)
960 BB = cast<BasicBlock>(CurFun.Values[ID.Num]);
961 else
962 GenerateError("Reference to label '%" + utostr(ID.Num) +
963 "' is actually of type '"+
964 CurFun.Values[ID.Num]->getType()->getDescription() + "'");
965 }
966 } else {
967 GenerateError("Illegal label reference " + ID.getName());
968 return 0;
969 }
970
971 // If its already been defined, return it now.
972 if (BB) {
973 ID.destroy(); // Free strdup'd memory.
974 return BB;
975 }
976
977 // Otherwise, this block has not been seen before, create it.
978 std::string Name;
979 if (ID.Type == ValID::LocalName)
Reid Spencer0a8a16b2007-05-22 18:52:55 +0000980 Name = ID.getName();
Reid Spencer93c40032007-03-19 18:40:50 +0000981 BB = new BasicBlock(Name, CurFun.CurrentFunction);
982
983 // Insert it in the forward refs map.
984 CurFun.BBForwardRefs[ID] = BB;
985
Reid Spencer68a24bd2005-08-27 18:50:39 +0000986 return BB;
987}
988
989
990//===----------------------------------------------------------------------===//
991// Code to handle forward references in instructions
992//===----------------------------------------------------------------------===//
993//
994// This code handles the late binding needed with statements that reference
995// values not defined yet... for example, a forward branch, or the PHI node for
996// a loop body.
997//
998// This keeps a table (CurFun.LateResolveValues) of all such forward references
999// and back patchs after we are done.
1000//
1001
1002// ResolveDefinitions - If we could not resolve some defs at parsing
1003// time (forward branches, phi functions for loops, etc...) resolve the
1004// defs now...
1005//
1006static void
Reid Spencer93c40032007-03-19 18:40:50 +00001007ResolveDefinitions(ValueList &LateResolvers, ValueList *FutureLateResolvers) {
Reid Spencer68a24bd2005-08-27 18:50:39 +00001008 // Loop over LateResolveDefs fixing up stuff that couldn't be resolved
Reid Spencer93c40032007-03-19 18:40:50 +00001009 while (!LateResolvers.empty()) {
1010 Value *V = LateResolvers.back();
1011 LateResolvers.pop_back();
Reid Spencer68a24bd2005-08-27 18:50:39 +00001012
Reid Spencer93c40032007-03-19 18:40:50 +00001013 std::map<Value*, std::pair<ValID, int> >::iterator PHI =
1014 CurModule.PlaceHolderInfo.find(V);
1015 assert(PHI != CurModule.PlaceHolderInfo.end() && "Placeholder error!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00001016
Reid Spencer93c40032007-03-19 18:40:50 +00001017 ValID &DID = PHI->second.first;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001018
Reid Spencer93c40032007-03-19 18:40:50 +00001019 Value *TheRealValue = getExistingVal(V->getType(), DID);
1020 if (TriggerError)
1021 return;
1022 if (TheRealValue) {
1023 V->replaceAllUsesWith(TheRealValue);
1024 delete V;
1025 CurModule.PlaceHolderInfo.erase(PHI);
1026 } else if (FutureLateResolvers) {
1027 // Functions have their unresolved items forwarded to the module late
1028 // resolver table
1029 InsertValue(V, *FutureLateResolvers);
1030 } else {
1031 if (DID.Type == ValID::LocalName || DID.Type == ValID::GlobalName) {
1032 GenerateError("Reference to an invalid definition: '" +DID.getName()+
1033 "' of type '" + V->getType()->getDescription() + "'",
1034 PHI->second.second);
Reid Spencer5b7e7532006-09-28 19:28:24 +00001035 return;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001036 } else {
Reid Spencer93c40032007-03-19 18:40:50 +00001037 GenerateError("Reference to an invalid definition: #" +
1038 itostr(DID.Num) + " of type '" +
1039 V->getType()->getDescription() + "'",
1040 PHI->second.second);
1041 return;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001042 }
1043 }
1044 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00001045 LateResolvers.clear();
1046}
1047
1048// ResolveTypeTo - A brand new type was just declared. This means that (if
1049// name is not null) things referencing Name can be resolved. Otherwise, things
1050// refering to the number can be resolved. Do this now.
1051//
Reid Spencer0a8a16b2007-05-22 18:52:55 +00001052static void ResolveTypeTo(std::string *Name, const Type *ToTy) {
Reid Spencer68a24bd2005-08-27 18:50:39 +00001053 ValID D;
Reid Spencer0a8a16b2007-05-22 18:52:55 +00001054 if (Name)
1055 D = ValID::createLocalName(*Name);
1056 else
1057 D = ValID::createLocalID(CurModule.Types.size());
Reid Spencer68a24bd2005-08-27 18:50:39 +00001058
Reid Spencer861d9d62006-11-28 07:29:44 +00001059 std::map<ValID, PATypeHolder>::iterator I =
Reid Spencer68a24bd2005-08-27 18:50:39 +00001060 CurModule.LateResolveTypes.find(D);
1061 if (I != CurModule.LateResolveTypes.end()) {
Reid Spencer861d9d62006-11-28 07:29:44 +00001062 ((DerivedType*)I->second.get())->refineAbstractTypeTo(ToTy);
Reid Spencer68a24bd2005-08-27 18:50:39 +00001063 CurModule.LateResolveTypes.erase(I);
1064 }
1065}
1066
1067// setValueName - Set the specified value to the name given. The name may be
1068// null potentially, in which case this is a noop. The string passed in is
1069// assumed to be a malloc'd string buffer, and is free'd by this function.
1070//
Reid Spencer0a8a16b2007-05-22 18:52:55 +00001071static void setValueName(Value *V, std::string *NameStr) {
Reid Spencer41dff5e2007-01-26 08:05:27 +00001072 if (!NameStr) return;
Reid Spencer0a8a16b2007-05-22 18:52:55 +00001073 std::string Name(*NameStr); // Copy string
1074 delete NameStr; // Free old string
Reid Spencer68a24bd2005-08-27 18:50:39 +00001075
Reid Spencer41dff5e2007-01-26 08:05:27 +00001076 if (V->getType() == Type::VoidTy) {
Reid Spencerb5334b02007-02-05 10:18:06 +00001077 GenerateError("Can't assign name '" + Name+"' to value with void type");
Reid Spencer41dff5e2007-01-26 08:05:27 +00001078 return;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001079 }
Reid Spencer41dff5e2007-01-26 08:05:27 +00001080
Reid Spencera9720f52007-02-05 17:04:00 +00001081 assert(inFunctionScope() && "Must be in function scope!");
Reid Spenceref9b9a72007-02-05 20:47:22 +00001082 ValueSymbolTable &ST = CurFun.CurrentFunction->getValueSymbolTable();
1083 if (ST.lookup(Name)) {
Reid Spencer41dff5e2007-01-26 08:05:27 +00001084 GenerateError("Redefinition of value '" + Name + "' of type '" +
Reid Spencerb5334b02007-02-05 10:18:06 +00001085 V->getType()->getDescription() + "'");
Reid Spencer41dff5e2007-01-26 08:05:27 +00001086 return;
1087 }
1088
1089 // Set the name.
1090 V->setName(Name);
Reid Spencer68a24bd2005-08-27 18:50:39 +00001091}
1092
1093/// ParseGlobalVariable - Handle parsing of a global. If Initializer is null,
1094/// this is a declaration, otherwise it is a definition.
Chris Lattnerb475c422005-11-12 18:22:38 +00001095static GlobalVariable *
Reid Spencer0a8a16b2007-05-22 18:52:55 +00001096ParseGlobalVariable(std::string *NameStr,
Anton Korobeynikov178a3522007-01-12 19:22:51 +00001097 GlobalValue::LinkageTypes Linkage,
1098 GlobalValue::VisibilityTypes Visibility,
Chris Lattnerb475c422005-11-12 18:22:38 +00001099 bool isConstantGlobal, const Type *Ty,
Christopher Lamba8ed9bf2007-12-11 09:02:08 +00001100 Constant *Initializer, bool IsThreadLocal,
1101 unsigned AddressSpace = 0) {
Reid Spencer5b7e7532006-09-28 19:28:24 +00001102 if (isa<FunctionType>(Ty)) {
Reid Spencerb5334b02007-02-05 10:18:06 +00001103 GenerateError("Cannot declare global vars of function type");
Reid Spencer5b7e7532006-09-28 19:28:24 +00001104 return 0;
1105 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00001106
Christopher Lamba8ed9bf2007-12-11 09:02:08 +00001107 const PointerType *PTy = PointerType::get(Ty, AddressSpace);
Reid Spencer68a24bd2005-08-27 18:50:39 +00001108
1109 std::string Name;
1110 if (NameStr) {
Reid Spencer0a8a16b2007-05-22 18:52:55 +00001111 Name = *NameStr; // Copy string
1112 delete NameStr; // Free old string
Reid Spencer68a24bd2005-08-27 18:50:39 +00001113 }
1114
1115 // See if this global value was forward referenced. If so, recycle the
1116 // object.
1117 ValID ID;
1118 if (!Name.empty()) {
Reid Spencer0a8a16b2007-05-22 18:52:55 +00001119 ID = ValID::createGlobalName(Name);
Reid Spencer68a24bd2005-08-27 18:50:39 +00001120 } else {
Reid Spencer93c40032007-03-19 18:40:50 +00001121 ID = ValID::createGlobalID(CurModule.Values.size());
Reid Spencer68a24bd2005-08-27 18:50:39 +00001122 }
1123
1124 if (GlobalValue *FWGV = CurModule.GetForwardRefForGlobal(PTy, ID)) {
1125 // Move the global to the end of the list, from whereever it was
1126 // previously inserted.
1127 GlobalVariable *GV = cast<GlobalVariable>(FWGV);
1128 CurModule.CurrentModule->getGlobalList().remove(GV);
1129 CurModule.CurrentModule->getGlobalList().push_back(GV);
1130 GV->setInitializer(Initializer);
1131 GV->setLinkage(Linkage);
Anton Korobeynikov178a3522007-01-12 19:22:51 +00001132 GV->setVisibility(Visibility);
Reid Spencer68a24bd2005-08-27 18:50:39 +00001133 GV->setConstant(isConstantGlobal);
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00001134 GV->setThreadLocal(IsThreadLocal);
Reid Spencer68a24bd2005-08-27 18:50:39 +00001135 InsertValue(GV, CurModule.Values);
Chris Lattnerb475c422005-11-12 18:22:38 +00001136 return GV;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001137 }
1138
Reid Spenceref9b9a72007-02-05 20:47:22 +00001139 // If this global has a name
Reid Spencer68a24bd2005-08-27 18:50:39 +00001140 if (!Name.empty()) {
Reid Spenceref9b9a72007-02-05 20:47:22 +00001141 // if the global we're parsing has an initializer (is a definition) and
1142 // has external linkage.
1143 if (Initializer && Linkage != GlobalValue::InternalLinkage)
1144 // If there is already a global with external linkage with this name
1145 if (CurModule.CurrentModule->getGlobalVariable(Name, false)) {
1146 // If we allow this GVar to get created, it will be renamed in the
1147 // symbol table because it conflicts with an existing GVar. We can't
1148 // allow redefinition of GVars whose linking indicates that their name
1149 // must stay the same. Issue the error.
1150 GenerateError("Redefinition of global variable named '" + Name +
1151 "' of type '" + Ty->getDescription() + "'");
1152 return 0;
1153 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00001154 }
1155
1156 // Otherwise there is no existing GV to use, create one now.
1157 GlobalVariable *GV =
1158 new GlobalVariable(Ty, isConstantGlobal, Linkage, Initializer, Name,
Christopher Lamba8ed9bf2007-12-11 09:02:08 +00001159 CurModule.CurrentModule, IsThreadLocal, AddressSpace);
Anton Korobeynikov178a3522007-01-12 19:22:51 +00001160 GV->setVisibility(Visibility);
Reid Spencer68a24bd2005-08-27 18:50:39 +00001161 InsertValue(GV, CurModule.Values);
Chris Lattnerb475c422005-11-12 18:22:38 +00001162 return GV;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001163}
1164
1165// setTypeName - Set the specified type to the name given. The name may be
1166// null potentially, in which case this is a noop. The string passed in is
1167// assumed to be a malloc'd string buffer, and is freed by this function.
1168//
1169// This function returns true if the type has already been defined, but is
1170// allowed to be redefined in the specified context. If the name is a new name
1171// for the type plane, it is inserted and false is returned.
Reid Spencer0a8a16b2007-05-22 18:52:55 +00001172static bool setTypeName(const Type *T, std::string *NameStr) {
Reid Spencera9720f52007-02-05 17:04:00 +00001173 assert(!inFunctionScope() && "Can't give types function-local names!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00001174 if (NameStr == 0) return false;
1175
Reid Spencer0a8a16b2007-05-22 18:52:55 +00001176 std::string Name(*NameStr); // Copy string
1177 delete NameStr; // Free old string
Reid Spencer68a24bd2005-08-27 18:50:39 +00001178
1179 // We don't allow assigning names to void type
Reid Spencer5b7e7532006-09-28 19:28:24 +00001180 if (T == Type::VoidTy) {
Reid Spencerb5334b02007-02-05 10:18:06 +00001181 GenerateError("Can't assign name '" + Name + "' to the void type");
Reid Spencer5b7e7532006-09-28 19:28:24 +00001182 return false;
1183 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00001184
1185 // Set the type name, checking for conflicts as we do so.
1186 bool AlreadyExists = CurModule.CurrentModule->addTypeName(Name, T);
1187
1188 if (AlreadyExists) { // Inserting a name that is already defined???
1189 const Type *Existing = CurModule.CurrentModule->getTypeByName(Name);
Reid Spencera9720f52007-02-05 17:04:00 +00001190 assert(Existing && "Conflict but no matching type?!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00001191
1192 // There is only one case where this is allowed: when we are refining an
1193 // opaque type. In this case, Existing will be an opaque type.
1194 if (const OpaqueType *OpTy = dyn_cast<OpaqueType>(Existing)) {
1195 // We ARE replacing an opaque type!
1196 const_cast<OpaqueType*>(OpTy)->refineAbstractTypeTo(T);
1197 return true;
1198 }
1199
1200 // Otherwise, this is an attempt to redefine a type. That's okay if
1201 // the redefinition is identical to the original. This will be so if
1202 // Existing and T point to the same Type object. In this one case we
1203 // allow the equivalent redefinition.
1204 if (Existing == T) return true; // Yes, it's equal.
1205
1206 // Any other kind of (non-equivalent) redefinition is an error.
Reid Spencer63c34452007-01-05 21:51:07 +00001207 GenerateError("Redefinition of type named '" + Name + "' of type '" +
Reid Spencerb5334b02007-02-05 10:18:06 +00001208 T->getDescription() + "'");
Reid Spencer68a24bd2005-08-27 18:50:39 +00001209 }
1210
1211 return false;
1212}
1213
1214//===----------------------------------------------------------------------===//
1215// Code for handling upreferences in type names...
1216//
1217
1218// TypeContains - Returns true if Ty directly contains E in it.
1219//
1220static bool TypeContains(const Type *Ty, const Type *E) {
1221 return std::find(Ty->subtype_begin(), Ty->subtype_end(),
1222 E) != Ty->subtype_end();
1223}
1224
1225namespace {
1226 struct UpRefRecord {
1227 // NestingLevel - The number of nesting levels that need to be popped before
1228 // this type is resolved.
1229 unsigned NestingLevel;
1230
1231 // LastContainedTy - This is the type at the current binding level for the
1232 // type. Every time we reduce the nesting level, this gets updated.
1233 const Type *LastContainedTy;
1234
1235 // UpRefTy - This is the actual opaque type that the upreference is
1236 // represented with.
1237 OpaqueType *UpRefTy;
1238
1239 UpRefRecord(unsigned NL, OpaqueType *URTy)
1240 : NestingLevel(NL), LastContainedTy(URTy), UpRefTy(URTy) {}
1241 };
1242}
1243
1244// UpRefs - A list of the outstanding upreferences that need to be resolved.
1245static std::vector<UpRefRecord> UpRefs;
1246
1247/// HandleUpRefs - Every time we finish a new layer of types, this function is
1248/// called. It loops through the UpRefs vector, which is a list of the
1249/// currently active types. For each type, if the up reference is contained in
1250/// the newly completed type, we decrement the level count. When the level
1251/// count reaches zero, the upreferenced type is the type that is passed in:
1252/// thus we can complete the cycle.
1253///
1254static PATypeHolder HandleUpRefs(const Type *ty) {
Chris Lattner224f84f2006-08-18 17:34:45 +00001255 // If Ty isn't abstract, or if there are no up-references in it, then there is
1256 // nothing to resolve here.
1257 if (!ty->isAbstract() || UpRefs.empty()) return ty;
1258
Reid Spencer68a24bd2005-08-27 18:50:39 +00001259 PATypeHolder Ty(ty);
1260 UR_OUT("Type '" << Ty->getDescription() <<
1261 "' newly formed. Resolving upreferences.\n" <<
1262 UpRefs.size() << " upreferences active!\n");
1263
1264 // If we find any resolvable upreferences (i.e., those whose NestingLevel goes
1265 // to zero), we resolve them all together before we resolve them to Ty. At
1266 // the end of the loop, if there is anything to resolve to Ty, it will be in
1267 // this variable.
1268 OpaqueType *TypeToResolve = 0;
1269
1270 for (unsigned i = 0; i != UpRefs.size(); ++i) {
1271 UR_OUT(" UR#" << i << " - TypeContains(" << Ty->getDescription() << ", "
1272 << UpRefs[i].second->getDescription() << ") = "
1273 << (TypeContains(Ty, UpRefs[i].second) ? "true" : "false") << "\n");
1274 if (TypeContains(Ty, UpRefs[i].LastContainedTy)) {
1275 // Decrement level of upreference
1276 unsigned Level = --UpRefs[i].NestingLevel;
1277 UpRefs[i].LastContainedTy = Ty;
1278 UR_OUT(" Uplevel Ref Level = " << Level << "\n");
1279 if (Level == 0) { // Upreference should be resolved!
1280 if (!TypeToResolve) {
1281 TypeToResolve = UpRefs[i].UpRefTy;
1282 } else {
1283 UR_OUT(" * Resolving upreference for "
1284 << UpRefs[i].second->getDescription() << "\n";
1285 std::string OldName = UpRefs[i].UpRefTy->getDescription());
1286 UpRefs[i].UpRefTy->refineAbstractTypeTo(TypeToResolve);
1287 UR_OUT(" * Type '" << OldName << "' refined upreference to: "
1288 << (const void*)Ty << ", " << Ty->getDescription() << "\n");
1289 }
1290 UpRefs.erase(UpRefs.begin()+i); // Remove from upreference list...
1291 --i; // Do not skip the next element...
1292 }
1293 }
1294 }
1295
1296 if (TypeToResolve) {
1297 UR_OUT(" * Resolving upreference for "
1298 << UpRefs[i].second->getDescription() << "\n";
1299 std::string OldName = TypeToResolve->getDescription());
1300 TypeToResolve->refineAbstractTypeTo(Ty);
1301 }
1302
1303 return Ty;
1304}
1305
Reid Spencer68a24bd2005-08-27 18:50:39 +00001306//===----------------------------------------------------------------------===//
1307// RunVMAsmParser - Define an interface to this parser
1308//===----------------------------------------------------------------------===//
1309//
Reid Spencer14310612006-12-31 05:40:51 +00001310static Module* RunParser(Module * M);
1311
Duncan Sandsdc024672007-11-27 13:23:08 +00001312Module *llvm::RunVMAsmParser(llvm::MemoryBuffer *MB) {
1313 InitLLLexer(MB);
1314 Module *M = RunParser(new Module(LLLgetFilename()));
1315 FreeLexer();
1316 return M;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001317}
1318
1319
Chris Lattner38905612008-02-19 04:36:25 +00001320
1321/* Enabling traces. */
1322#ifndef YYDEBUG
1323# define YYDEBUG 0
1324#endif
1325
1326/* Enabling verbose error messages. */
1327#ifdef YYERROR_VERBOSE
1328# undef YYERROR_VERBOSE
1329# define YYERROR_VERBOSE 1
1330#else
1331# define YYERROR_VERBOSE 0
1332#endif
1333
1334/* Enabling the token table. */
1335#ifndef YYTOKEN_TABLE
1336# define YYTOKEN_TABLE 0
1337#endif
1338
1339#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
1340typedef union YYSTYPE
Devang Patel67909432008-03-03 18:58:47 +00001341#line 951 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00001342{
Reid Spencer68a24bd2005-08-27 18:50:39 +00001343 llvm::Module *ModuleVal;
1344 llvm::Function *FunctionVal;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001345 llvm::BasicBlock *BasicBlockVal;
1346 llvm::TerminatorInst *TermInstVal;
1347 llvm::Instruction *InstVal;
Reid Spencera132e042006-12-03 05:46:11 +00001348 llvm::Constant *ConstVal;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001349
Reid Spencera132e042006-12-03 05:46:11 +00001350 const llvm::Type *PrimType;
Reid Spencer14310612006-12-31 05:40:51 +00001351 std::list<llvm::PATypeHolder> *TypeList;
Reid Spencera132e042006-12-03 05:46:11 +00001352 llvm::PATypeHolder *TypeVal;
1353 llvm::Value *ValueVal;
Reid Spencera132e042006-12-03 05:46:11 +00001354 std::vector<llvm::Value*> *ValueList;
Reid Spencer14310612006-12-31 05:40:51 +00001355 llvm::ArgListType *ArgList;
1356 llvm::TypeWithAttrs TypeWithAttrs;
1357 llvm::TypeWithAttrsList *TypeWithAttrsList;
Dale Johanneseneb57ea72007-11-05 21:20:28 +00001358 llvm::ParamList *ParamList;
Reid Spencer14310612006-12-31 05:40:51 +00001359
Reid Spencer68a24bd2005-08-27 18:50:39 +00001360 // Represent the RHS of PHI node
Reid Spencera132e042006-12-03 05:46:11 +00001361 std::list<std::pair<llvm::Value*,
1362 llvm::BasicBlock*> > *PHIList;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001363 std::vector<std::pair<llvm::Constant*, llvm::BasicBlock*> > *JumpTable;
Reid Spencera132e042006-12-03 05:46:11 +00001364 std::vector<llvm::Constant*> *ConstVector;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001365
1366 llvm::GlobalValue::LinkageTypes Linkage;
Anton Korobeynikov178a3522007-01-12 19:22:51 +00001367 llvm::GlobalValue::VisibilityTypes Visibility;
Dale Johannesen222ebf72008-02-19 21:40:51 +00001368 llvm::ParameterAttributes ParamAttrs;
Reid Spencer38c91a92007-02-28 02:24:54 +00001369 llvm::APInt *APIntVal;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001370 int64_t SInt64Val;
1371 uint64_t UInt64Val;
1372 int SIntVal;
1373 unsigned UIntVal;
Dale Johannesencdd509a2007-09-07 21:07:57 +00001374 llvm::APFloat *FPVal;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001375 bool BoolVal;
1376
Reid Spencer0a8a16b2007-05-22 18:52:55 +00001377 std::string *StrVal; // This memory must be deleted
1378 llvm::ValID ValIDVal;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001379
Reid Spencera132e042006-12-03 05:46:11 +00001380 llvm::Instruction::BinaryOps BinaryOpVal;
1381 llvm::Instruction::TermOps TermOpVal;
1382 llvm::Instruction::MemoryOps MemOpVal;
1383 llvm::Instruction::CastOps CastOpVal;
1384 llvm::Instruction::OtherOps OtherOpVal;
Reid Spencera132e042006-12-03 05:46:11 +00001385 llvm::ICmpInst::Predicate IPredicate;
1386 llvm::FCmpInst::Predicate FPredicate;
Chris Lattner38905612008-02-19 04:36:25 +00001387}
Devang Patel4c3f8442008-02-20 19:13:10 +00001388/* Line 193 of yacc.c. */
Dale Johannesen22c39792008-02-22 22:17:59 +00001389#line 1390 "llvmAsmParser.tab.c"
Chris Lattner38905612008-02-19 04:36:25 +00001390 YYSTYPE;
1391# define yystype YYSTYPE /* obsolescent; will be withdrawn */
1392# define YYSTYPE_IS_DECLARED 1
1393# define YYSTYPE_IS_TRIVIAL 1
Reid Spencer68a24bd2005-08-27 18:50:39 +00001394#endif
1395
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00001396
Reid Spencer68a24bd2005-08-27 18:50:39 +00001397
Chris Lattner38905612008-02-19 04:36:25 +00001398/* Copy the second part of user declarations. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00001399
1400
Chris Lattner38905612008-02-19 04:36:25 +00001401/* Line 216 of yacc.c. */
Dale Johannesen22c39792008-02-22 22:17:59 +00001402#line 1403 "llvmAsmParser.tab.c"
Reid Spencerb8f85052007-07-31 03:50:36 +00001403
Chris Lattner38905612008-02-19 04:36:25 +00001404#ifdef short
1405# undef short
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00001406#endif
1407
Chris Lattner38905612008-02-19 04:36:25 +00001408#ifdef YYTYPE_UINT8
1409typedef YYTYPE_UINT8 yytype_uint8;
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00001410#else
Chris Lattner38905612008-02-19 04:36:25 +00001411typedef unsigned char yytype_uint8;
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00001412#endif
1413
Chris Lattner38905612008-02-19 04:36:25 +00001414#ifdef YYTYPE_INT8
1415typedef YYTYPE_INT8 yytype_int8;
1416#elif (defined __STDC__ || defined __C99__FUNC__ \
1417 || defined __cplusplus || defined _MSC_VER)
1418typedef signed char yytype_int8;
1419#else
1420typedef short int yytype_int8;
1421#endif
1422
1423#ifdef YYTYPE_UINT16
1424typedef YYTYPE_UINT16 yytype_uint16;
1425#else
1426typedef unsigned short int yytype_uint16;
1427#endif
1428
1429#ifdef YYTYPE_INT16
1430typedef YYTYPE_INT16 yytype_int16;
1431#else
1432typedef short int yytype_int16;
1433#endif
1434
1435#ifndef YYSIZE_T
1436# ifdef __SIZE_TYPE__
1437# define YYSIZE_T __SIZE_TYPE__
1438# elif defined size_t
1439# define YYSIZE_T size_t
1440# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
1441 || defined __cplusplus || defined _MSC_VER)
1442# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
1443# define YYSIZE_T size_t
1444# else
1445# define YYSIZE_T unsigned int
1446# endif
1447#endif
1448
1449#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
1450
1451#ifndef YY_
Devang Patel4c3f8442008-02-20 19:13:10 +00001452# if defined YYENABLE_NLS && YYENABLE_NLS
Chris Lattner38905612008-02-19 04:36:25 +00001453# if ENABLE_NLS
1454# include <libintl.h> /* INFRINGES ON USER NAME SPACE */
1455# define YY_(msgid) dgettext ("bison-runtime", msgid)
1456# endif
1457# endif
1458# ifndef YY_
1459# define YY_(msgid) msgid
1460# endif
1461#endif
1462
1463/* Suppress unused-variable warnings by "using" E. */
1464#if ! defined lint || defined __GNUC__
1465# define YYUSE(e) ((void) (e))
1466#else
1467# define YYUSE(e) /* empty */
1468#endif
1469
1470/* Identity function, used to suppress warnings about constant conditions. */
1471#ifndef lint
1472# define YYID(n) (n)
1473#else
1474#if (defined __STDC__ || defined __C99__FUNC__ \
1475 || defined __cplusplus || defined _MSC_VER)
1476static int
1477YYID (int i)
1478#else
1479static int
1480YYID (i)
1481 int i;
1482#endif
1483{
1484 return i;
1485}
1486#endif
1487
1488#if ! defined yyoverflow || YYERROR_VERBOSE
1489
1490/* The parser invokes alloca or malloc; define the necessary symbols. */
1491
1492# ifdef YYSTACK_USE_ALLOCA
1493# if YYSTACK_USE_ALLOCA
1494# ifdef __GNUC__
1495# define YYSTACK_ALLOC __builtin_alloca
1496# elif defined __BUILTIN_VA_ARG_INCR
1497# include <alloca.h> /* INFRINGES ON USER NAME SPACE */
1498# elif defined _AIX
1499# define YYSTACK_ALLOC __alloca
1500# elif defined _MSC_VER
1501# include <malloc.h> /* INFRINGES ON USER NAME SPACE */
1502# define alloca _alloca
1503# else
1504# define YYSTACK_ALLOC alloca
1505# if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
1506 || defined __cplusplus || defined _MSC_VER)
1507# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
1508# ifndef _STDLIB_H
1509# define _STDLIB_H 1
1510# endif
1511# endif
1512# endif
1513# endif
1514# endif
1515
1516# ifdef YYSTACK_ALLOC
1517 /* Pacify GCC's `empty if-body' warning. */
1518# define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
1519# ifndef YYSTACK_ALLOC_MAXIMUM
1520 /* The OS might guarantee only one guard page at the bottom of the stack,
1521 and a page size can be as small as 4096 bytes. So we cannot safely
1522 invoke alloca (N) if N exceeds 4096. Use a slightly smaller number
1523 to allow for a few compiler-allocated temporary stack slots. */
1524# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
1525# endif
1526# else
1527# define YYSTACK_ALLOC YYMALLOC
1528# define YYSTACK_FREE YYFREE
1529# ifndef YYSTACK_ALLOC_MAXIMUM
1530# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
1531# endif
1532# if (defined __cplusplus && ! defined _STDLIB_H \
1533 && ! ((defined YYMALLOC || defined malloc) \
1534 && (defined YYFREE || defined free)))
1535# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
1536# ifndef _STDLIB_H
1537# define _STDLIB_H 1
1538# endif
1539# endif
1540# ifndef YYMALLOC
1541# define YYMALLOC malloc
1542# if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
1543 || defined __cplusplus || defined _MSC_VER)
1544void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
1545# endif
1546# endif
1547# ifndef YYFREE
1548# define YYFREE free
1549# if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
1550 || defined __cplusplus || defined _MSC_VER)
1551void free (void *); /* INFRINGES ON USER NAME SPACE */
1552# endif
1553# endif
1554# endif
1555#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
1556
1557
1558#if (! defined yyoverflow \
1559 && (! defined __cplusplus \
1560 || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
1561
1562/* A type that is properly aligned for any stack member. */
1563union yyalloc
1564{
1565 yytype_int16 yyss;
1566 YYSTYPE yyvs;
1567 };
1568
1569/* The size of the maximum gap between one aligned stack and the next. */
1570# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
1571
1572/* The size of an array large to enough to hold all stacks, each with
1573 N elements. */
1574# define YYSTACK_BYTES(N) \
1575 ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
1576 + YYSTACK_GAP_MAXIMUM)
1577
1578/* Copy COUNT objects from FROM to TO. The source and destination do
1579 not overlap. */
1580# ifndef YYCOPY
1581# if defined __GNUC__ && 1 < __GNUC__
1582# define YYCOPY(To, From, Count) \
1583 __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
1584# else
1585# define YYCOPY(To, From, Count) \
1586 do \
1587 { \
1588 YYSIZE_T yyi; \
1589 for (yyi = 0; yyi < (Count); yyi++) \
1590 (To)[yyi] = (From)[yyi]; \
1591 } \
1592 while (YYID (0))
1593# endif
1594# endif
1595
1596/* Relocate STACK from its old location to the new one. The
1597 local variables YYSIZE and YYSTACKSIZE give the old and new number of
1598 elements in the stack, and YYPTR gives the new location of the
1599 stack. Advance YYPTR to a properly aligned location for the next
1600 stack. */
1601# define YYSTACK_RELOCATE(Stack) \
1602 do \
1603 { \
1604 YYSIZE_T yynewbytes; \
1605 YYCOPY (&yyptr->Stack, Stack, yysize); \
1606 Stack = &yyptr->Stack; \
1607 yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
1608 yyptr += yynewbytes / sizeof (*yyptr); \
1609 } \
1610 while (YYID (0))
1611
1612#endif
1613
1614/* YYFINAL -- State number of the termination state. */
1615#define YYFINAL 43
1616/* YYLAST -- Last index in YYTABLE. */
Devang Patel67909432008-03-03 18:58:47 +00001617#define YYLAST 2038
Chris Lattner38905612008-02-19 04:36:25 +00001618
1619/* YYNTOKENS -- Number of terminals. */
Devang Patel67909432008-03-03 18:58:47 +00001620#define YYNTOKENS 166
Chris Lattner38905612008-02-19 04:36:25 +00001621/* YYNNTS -- Number of nonterminals. */
Devang Patel7990dc72008-02-20 22:40:23 +00001622#define YYNNTS 85
Chris Lattner38905612008-02-19 04:36:25 +00001623/* YYNRULES -- Number of rules. */
Devang Patel67909432008-03-03 18:58:47 +00001624#define YYNRULES 324
Chris Lattner38905612008-02-19 04:36:25 +00001625/* YYNRULES -- Number of states. */
Devang Patel67909432008-03-03 18:58:47 +00001626#define YYNSTATES 633
Chris Lattner38905612008-02-19 04:36:25 +00001627
1628/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
1629#define YYUNDEFTOK 2
Devang Patel67909432008-03-03 18:58:47 +00001630#define YYMAXUTOK 406
Chris Lattner38905612008-02-19 04:36:25 +00001631
1632#define YYTRANSLATE(YYX) \
1633 ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
1634
1635/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
1636static const yytype_uint8 yytranslate[] =
1637{
1638 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1639 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1640 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1641 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
Devang Patel67909432008-03-03 18:58:47 +00001642 152, 153, 156, 2, 155, 2, 2, 2, 2, 2,
Chris Lattner38905612008-02-19 04:36:25 +00001643 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
Devang Patel67909432008-03-03 18:58:47 +00001644 161, 154, 162, 2, 2, 2, 2, 2, 2, 2,
Chris Lattner38905612008-02-19 04:36:25 +00001645 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1646 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
Devang Patel67909432008-03-03 18:58:47 +00001647 2, 158, 157, 160, 2, 2, 2, 2, 2, 165,
Chris Lattner38905612008-02-19 04:36:25 +00001648 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1649 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
Devang Patel67909432008-03-03 18:58:47 +00001650 159, 2, 2, 163, 2, 164, 2, 2, 2, 2,
Chris Lattner38905612008-02-19 04:36:25 +00001651 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1652 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1653 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1654 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1655 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1656 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1657 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1658 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1659 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1660 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1661 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1662 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1663 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
1664 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
1665 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
1666 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
1667 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
1668 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
1669 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
1670 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
1671 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
1672 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
1673 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
1674 105, 106, 107, 108, 109, 110, 111, 112, 113, 114,
1675 115, 116, 117, 118, 119, 120, 121, 122, 123, 124,
1676 125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
1677 135, 136, 137, 138, 139, 140, 141, 142, 143, 144,
Devang Patel67909432008-03-03 18:58:47 +00001678 145, 146, 147, 148, 149, 150, 151
Chris Lattner38905612008-02-19 04:36:25 +00001679};
1680
1681#if YYDEBUG
1682/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
1683 YYRHS. */
1684static const yytype_uint16 yyprhs[] =
1685{
1686 0, 0, 3, 5, 7, 9, 11, 13, 15, 17,
1687 19, 21, 23, 25, 27, 29, 31, 33, 35, 37,
1688 39, 41, 43, 45, 47, 49, 51, 53, 55, 57,
1689 59, 61, 63, 65, 67, 69, 71, 73, 75, 77,
1690 79, 81, 83, 85, 87, 89, 91, 93, 95, 97,
1691 99, 101, 103, 105, 107, 109, 111, 113, 115, 117,
1692 119, 121, 123, 125, 127, 129, 130, 135, 136, 139,
1693 140, 142, 144, 146, 147, 150, 152, 154, 156, 158,
1694 160, 162, 164, 166, 167, 169, 171, 173, 174, 176,
1695 178, 179, 181, 183, 185, 187, 188, 190, 192, 193,
1696 195, 197, 199, 201, 203, 206, 208, 210, 212, 214,
Dale Johannesen172f3112008-02-20 21:15:43 +00001697 216, 218, 220, 222, 224, 227, 228, 231, 233, 235,
1698 237, 239, 241, 243, 244, 247, 248, 251, 252, 255,
1699 256, 260, 263, 264, 266, 267, 271, 273, 276, 278,
1700 280, 282, 284, 286, 288, 290, 292, 294, 298, 300,
1701 303, 309, 315, 321, 327, 331, 334, 340, 345, 348,
1702 350, 352, 354, 358, 360, 364, 366, 367, 369, 373,
1703 378, 382, 386, 391, 396, 400, 407, 413, 416, 419,
1704 422, 425, 428, 431, 434, 437, 440, 443, 446, 449,
1705 456, 462, 471, 478, 485, 493, 501, 508, 517, 526,
1706 530, 532, 534, 536, 538, 539, 542, 549, 551, 552,
1707 554, 557, 558, 562, 563, 567, 571, 575, 579, 580,
1708 589, 590, 600, 601, 611, 617, 620, 624, 626, 630,
1709 634, 638, 642, 644, 645, 651, 655, 657, 661, 663,
1710 664, 675, 677, 679, 684, 686, 688, 691, 695, 696,
1711 698, 700, 702, 704, 706, 708, 710, 712, 714, 718,
Devang Patel7990dc72008-02-20 22:40:23 +00001712 720, 726, 728, 730, 732, 734, 736, 738, 741, 743,
Devang Patel67909432008-03-03 18:58:47 +00001713 747, 750, 753, 757, 760, 761, 764, 766, 770, 773,
1714 776, 780, 790, 800, 809, 824, 826, 828, 835, 841,
1715 844, 851, 859, 864, 869, 876, 883, 884, 885, 889,
1716 892, 894, 900, 906, 913, 920, 925, 932, 937, 942,
1717 949, 956, 959, 968, 970, 972, 973, 977, 984, 988,
1718 995, 998, 1004, 1012, 1018
Chris Lattner38905612008-02-19 04:36:25 +00001719};
1720
1721/* YYRHS -- A `-1'-separated list of the rules' RHS. */
1722static const yytype_int16 yyrhs[] =
1723{
Devang Patel67909432008-03-03 18:58:47 +00001724 212, 0, -1, 75, -1, 76, -1, 77, -1, 78,
1725 -1, 79, -1, 80, -1, 81, -1, 82, -1, 83,
1726 -1, 87, -1, 88, -1, 89, -1, 84, -1, 85,
1727 -1, 86, -1, 118, -1, 119, -1, 120, -1, 121,
1728 -1, 122, -1, 123, -1, 124, -1, 125, -1, 126,
1729 -1, 127, -1, 128, -1, 129, -1, 92, -1, 93,
1730 -1, 94, -1, 95, -1, 96, -1, 97, -1, 98,
1731 -1, 99, -1, 100, -1, 101, -1, 102, -1, 103,
1732 -1, 104, -1, 105, -1, 106, -1, 107, -1, 108,
1733 -1, 109, -1, 110, -1, 111, -1, 98, -1, 99,
1734 -1, 100, -1, 101, -1, 26, -1, 27, -1, 11,
Chris Lattner38905612008-02-19 04:36:25 +00001735 -1, 12, -1, 13, -1, 16, -1, 15, -1, 14,
Devang Patel67909432008-03-03 18:58:47 +00001736 -1, 19, -1, 22, -1, 24, -1, 174, -1, -1,
1737 54, 152, 4, 153, -1, -1, 174, 154, -1, -1,
1738 20, -1, 23, -1, 180, -1, -1, 178, 154, -1,
Chris Lattner38905612008-02-19 04:36:25 +00001739 42, -1, 44, -1, 43, -1, 45, -1, 47, -1,
Devang Patel67909432008-03-03 18:58:47 +00001740 46, -1, 48, -1, 50, -1, -1, 149, -1, 150,
1741 -1, 151, -1, -1, 46, -1, 48, -1, -1, 42,
Chris Lattner38905612008-02-19 04:36:25 +00001742 -1, 43, -1, 44, -1, 47, -1, -1, 44, -1,
1743 42, -1, -1, 62, -1, 63, -1, 64, -1, 65,
Devang Patel67909432008-03-03 18:58:47 +00001744 -1, 66, -1, 61, 4, -1, 138, -1, 119, -1,
1745 137, -1, 120, -1, 140, -1, 141, -1, 143, -1,
1746 144, -1, 145, -1, 53, 4, -1, -1, 189, 188,
1747 -1, 139, -1, 142, -1, 138, -1, 137, -1, 146,
1748 -1, 147, -1, -1, 191, 190, -1, -1, 148, 22,
1749 -1, -1, 53, 4, -1, -1, 155, 53, 4, -1,
1750 34, 22, -1, -1, 195, -1, -1, 155, 198, 197,
1751 -1, 195, -1, 53, 4, -1, 11, -1, 12, -1,
Dale Johannesen172f3112008-02-20 21:15:43 +00001752 13, -1, 16, -1, 15, -1, 14, -1, 17, -1,
Devang Patel67909432008-03-03 18:58:47 +00001753 49, -1, 199, -1, 200, 176, 156, -1, 234, -1,
1754 157, 4, -1, 200, 152, 204, 153, 191, -1, 10,
1755 152, 204, 153, 191, -1, 158, 4, 159, 200, 160,
1756 -1, 161, 4, 159, 200, 162, -1, 163, 205, 164,
1757 -1, 163, 164, -1, 161, 163, 205, 164, 162, -1,
1758 161, 163, 164, 162, -1, 200, 189, -1, 200, -1,
1759 10, -1, 201, -1, 203, 155, 201, -1, 203, -1,
1760 203, 155, 39, -1, 39, -1, -1, 200, -1, 205,
1761 155, 200, -1, 200, 158, 208, 160, -1, 200, 158,
1762 160, -1, 200, 165, 22, -1, 200, 161, 208, 162,
1763 -1, 200, 163, 208, 164, -1, 200, 163, 164, -1,
1764 200, 161, 163, 208, 164, 162, -1, 200, 161, 163,
1765 164, 162, -1, 200, 40, -1, 200, 41, -1, 200,
1766 234, -1, 200, 207, -1, 200, 25, -1, 172, 3,
1767 -1, 172, 5, -1, 172, 4, -1, 172, 6, -1,
1768 11, 26, -1, 11, 27, -1, 173, 9, -1, 169,
1769 152, 206, 38, 200, 153, -1, 117, 152, 206, 246,
1770 153, -1, 131, 152, 206, 155, 206, 155, 206, 153,
1771 -1, 167, 152, 206, 155, 206, 153, -1, 168, 152,
1772 206, 155, 206, 153, -1, 90, 170, 152, 206, 155,
1773 206, 153, -1, 91, 171, 152, 206, 155, 206, 153,
1774 -1, 133, 152, 206, 155, 206, 153, -1, 134, 152,
1775 206, 155, 206, 155, 206, 153, -1, 135, 152, 206,
1776 155, 206, 155, 206, 153, -1, 208, 155, 206, -1,
1777 206, -1, 32, -1, 33, -1, 37, -1, -1, 202,
1778 234, -1, 123, 152, 211, 38, 200, 153, -1, 213,
1779 -1, -1, 214, -1, 213, 214, -1, -1, 31, 215,
1780 230, -1, -1, 30, 216, 231, -1, 59, 58, 220,
1781 -1, 177, 18, 200, -1, 177, 18, 10, -1, -1,
1782 179, 183, 210, 209, 206, 176, 217, 197, -1, -1,
1783 179, 181, 183, 210, 209, 206, 176, 218, 197, -1,
1784 -1, 179, 182, 183, 210, 209, 200, 176, 219, 197,
1785 -1, 179, 183, 35, 186, 211, -1, 51, 221, -1,
1786 55, 154, 222, -1, 22, -1, 52, 154, 22, -1,
1787 67, 154, 22, -1, 158, 223, 160, -1, 223, 155,
1788 22, -1, 22, -1, -1, 224, 155, 200, 189, 175,
1789 -1, 200, 189, 175, -1, 224, -1, 224, 155, 39,
1790 -1, 39, -1, -1, 187, 202, 178, 152, 225, 153,
1791 191, 196, 193, 192, -1, 28, -1, 163, -1, 185,
1792 183, 226, 227, -1, 29, -1, 164, -1, 238, 229,
1793 -1, 184, 183, 226, -1, -1, 60, -1, 3, -1,
Dale Johannesen172f3112008-02-20 21:15:43 +00001794 4, -1, 9, -1, 26, -1, 27, -1, 40, -1,
Devang Patel67909432008-03-03 18:58:47 +00001795 41, -1, 25, -1, 161, 208, 162, -1, 207, -1,
1796 58, 232, 22, 155, 22, -1, 7, -1, 8, -1,
1797 174, -1, 178, -1, 234, -1, 233, -1, 200, 235,
1798 -1, 236, -1, 237, 155, 236, -1, 238, 239, -1,
1799 228, 239, -1, 240, 177, 241, -1, 240, 243, -1,
1800 -1, 68, 235, -1, 21, -1, 21, 68, 235, -1,
1801 69, 237, -1, 69, 10, -1, 70, 17, 235, -1,
1802 70, 11, 235, 155, 17, 235, 155, 17, 235, -1,
1803 71, 172, 235, 155, 17, 235, 158, 242, 160, -1,
1804 71, 172, 235, 155, 17, 235, 158, 160, -1, 72,
1805 187, 202, 235, 152, 245, 153, 191, 38, 17, 235,
1806 73, 17, 235, -1, 73, -1, 74, -1, 242, 172,
1807 233, 155, 17, 235, -1, 172, 233, 155, 17, 235,
1808 -1, 177, 248, -1, 200, 158, 235, 155, 235, 160,
1809 -1, 244, 155, 158, 235, 155, 235, 160, -1, 200,
1810 189, 235, 189, -1, 17, 189, 235, 189, -1, 245,
1811 155, 200, 189, 235, 189, -1, 245, 155, 17, 189,
1812 235, 189, -1, -1, -1, 246, 155, 236, -1, 57,
1813 56, -1, 56, -1, 167, 200, 235, 155, 235, -1,
1814 168, 200, 235, 155, 235, -1, 90, 170, 200, 235,
1815 155, 235, -1, 91, 171, 200, 235, 155, 235, -1,
1816 169, 236, 38, 200, -1, 131, 236, 155, 236, 155,
1817 236, -1, 132, 236, 155, 200, -1, 133, 236, 155,
1818 236, -1, 134, 236, 155, 236, 155, 236, -1, 135,
1819 236, 155, 236, 155, 236, -1, 130, 244, -1, 247,
1820 187, 202, 235, 152, 245, 153, 191, -1, 250, -1,
1821 36, -1, -1, 112, 200, 194, -1, 112, 200, 155,
1822 11, 235, 194, -1, 113, 200, 194, -1, 113, 200,
1823 155, 11, 235, 194, -1, 114, 236, -1, 249, 115,
1824 200, 235, 194, -1, 249, 116, 236, 155, 200, 235,
1825 194, -1, 136, 200, 234, 155, 4, -1, 117, 200,
1826 235, 246, -1
Chris Lattner38905612008-02-19 04:36:25 +00001827};
1828
1829/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
1830static const yytype_uint16 yyrline[] =
1831{
Devang Patel67909432008-03-03 18:58:47 +00001832 0, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113,
1833 1113, 1114, 1114, 1114, 1114, 1114, 1114, 1115, 1115, 1115,
1834 1115, 1115, 1115, 1116, 1116, 1116, 1116, 1116, 1116, 1119,
1835 1119, 1120, 1120, 1121, 1121, 1122, 1122, 1123, 1123, 1127,
1836 1127, 1128, 1128, 1129, 1129, 1130, 1130, 1131, 1131, 1132,
1837 1132, 1133, 1133, 1134, 1135, 1140, 1141, 1141, 1141, 1141,
1838 1141, 1143, 1143, 1143, 1144, 1144, 1146, 1147, 1151, 1155,
1839 1160, 1160, 1162, 1163, 1168, 1174, 1175, 1176, 1177, 1178,
1840 1182, 1183, 1184, 1188, 1189, 1190, 1191, 1195, 1196, 1197,
1841 1201, 1202, 1203, 1204, 1205, 1209, 1210, 1211, 1214, 1215,
1842 1216, 1217, 1218, 1219, 1220, 1227, 1228, 1229, 1230, 1231,
1843 1232, 1233, 1234, 1235, 1236, 1240, 1241, 1246, 1247, 1248,
1844 1249, 1250, 1251, 1254, 1255, 1260, 1261, 1268, 1269, 1275,
1845 1276, 1285, 1293, 1294, 1299, 1300, 1301, 1306, 1319, 1319,
1846 1319, 1319, 1319, 1319, 1319, 1322, 1326, 1330, 1337, 1342,
1847 1350, 1380, 1405, 1410, 1420, 1430, 1434, 1444, 1451, 1460,
1848 1467, 1472, 1477, 1484, 1485, 1492, 1499, 1507, 1513, 1525,
1849 1553, 1569, 1596, 1624, 1650, 1670, 1696, 1716, 1728, 1735,
1850 1801, 1811, 1821, 1827, 1837, 1843, 1853, 1858, 1863, 1876,
1851 1888, 1910, 1918, 1924, 1935, 1940, 1945, 1951, 1957, 1966,
1852 1970, 1978, 1978, 1981, 1981, 1984, 1996, 2017, 2022, 2030,
1853 2031, 2035, 2035, 2039, 2039, 2042, 2045, 2069, 2081, 2080,
1854 2092, 2091, 2101, 2100, 2111, 2151, 2154, 2160, 2170, 2174,
1855 2179, 2181, 2186, 2191, 2200, 2210, 2221, 2225, 2234, 2243,
1856 2248, 2382, 2382, 2384, 2393, 2393, 2395, 2400, 2412, 2416,
1857 2421, 2425, 2429, 2433, 2437, 2441, 2445, 2449, 2453, 2478,
1858 2482, 2492, 2496, 2500, 2505, 2512, 2512, 2518, 2527, 2532,
1859 2537, 2541, 2550, 2559, 2568, 2572, 2576, 2581, 2588, 2595,
1860 2599, 2604, 2614, 2633, 2642, 2733, 2737, 2744, 2755, 2768,
1861 2778, 2789, 2799, 2810, 2818, 2828, 2835, 2838, 2839, 2846,
1862 2850, 2855, 2871, 2888, 2902, 2916, 2928, 2936, 2943, 2949,
1863 2955, 2961, 2976, 3074, 3079, 3083, 3090, 3097, 3105, 3112,
1864 3120, 3128, 3142, 3159, 3167
Chris Lattner38905612008-02-19 04:36:25 +00001865};
1866#endif
1867
1868#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
1869/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
1870 First, the terminals, then, starting at YYNTOKENS, nonterminals. */
1871static const char *const yytname[] =
1872{
1873 "$end", "error", "$undefined", "ESINT64VAL", "EUINT64VAL", "ESAPINTVAL",
1874 "EUAPINTVAL", "LOCALVAL_ID", "GLOBALVAL_ID", "FPVAL", "VOID", "INTTYPE",
1875 "FLOAT", "DOUBLE", "X86_FP80", "FP128", "PPC_FP128", "LABEL", "TYPE",
1876 "LOCALVAR", "GLOBALVAR", "LABELSTR", "STRINGCONSTANT",
1877 "ATSTRINGCONSTANT", "PCTSTRINGCONSTANT", "ZEROINITIALIZER", "TRUETOK",
1878 "FALSETOK", "BEGINTOK", "ENDTOK", "DECLARE", "DEFINE", "GLOBAL",
1879 "CONSTANT", "SECTION", "ALIAS", "VOLATILE", "THREAD_LOCAL", "TO",
1880 "DOTDOTDOT", "NULL_TOK", "UNDEF", "INTERNAL", "LINKONCE", "WEAK",
1881 "APPENDING", "DLLIMPORT", "DLLEXPORT", "EXTERN_WEAK", "OPAQUE",
1882 "EXTERNAL", "TARGET", "TRIPLE", "ALIGN", "ADDRSPACE", "DEPLIBS", "CALL",
1883 "TAIL", "ASM_TOK", "MODULE", "SIDEEFFECT", "CC_TOK", "CCC_TOK",
1884 "FASTCC_TOK", "COLDCC_TOK", "X86_STDCALLCC_TOK", "X86_FASTCALLCC_TOK",
Devang Patel67909432008-03-03 18:58:47 +00001885 "DATALAYOUT", "UNWIND_TO", "RET", "BR", "SWITCH", "INVOKE", "UNWIND",
1886 "UNREACHABLE", "ADD", "SUB", "MUL", "UDIV", "SDIV", "FDIV", "UREM",
1887 "SREM", "FREM", "AND", "OR", "XOR", "SHL", "LSHR", "ASHR", "ICMP",
1888 "FCMP", "EQ", "NE", "SLT", "SGT", "SLE", "SGE", "ULT", "UGT", "ULE",
1889 "UGE", "OEQ", "ONE", "OLT", "OGT", "OLE", "OGE", "ORD", "UNO", "UEQ",
1890 "UNE", "MALLOC", "ALLOCA", "FREE", "LOAD", "STORE", "GETELEMENTPTR",
1891 "TRUNC", "ZEXT", "SEXT", "FPTRUNC", "FPEXT", "BITCAST", "UITOFP",
1892 "SITOFP", "FPTOUI", "FPTOSI", "INTTOPTR", "PTRTOINT", "PHI_TOK",
1893 "SELECT", "VAARG", "EXTRACTELEMENT", "INSERTELEMENT", "SHUFFLEVECTOR",
1894 "GETRESULT", "SIGNEXT", "ZEROEXT", "NORETURN", "INREG", "SRET",
1895 "NOUNWIND", "NOALIAS", "BYVAL", "NEST", "READNONE", "READONLY", "GC",
1896 "DEFAULT", "HIDDEN", "PROTECTED", "'('", "')'", "'='", "','", "'*'",
1897 "'\\\\'", "'['", "'x'", "']'", "'<'", "'>'", "'{'", "'}'", "'c'",
1898 "$accept", "ArithmeticOps", "LogicalOps", "CastOps", "IPredicates",
1899 "FPredicates", "IntType", "FPType", "LocalName", "OptLocalName",
1900 "OptAddrSpace", "OptLocalAssign", "GlobalName", "OptGlobalAssign",
1901 "GlobalAssign", "GVInternalLinkage", "GVExternalLinkage",
1902 "GVVisibilityStyle", "FunctionDeclareLinkage", "FunctionDefineLinkage",
1903 "AliasLinkage", "OptCallingConv", "ParamAttr", "OptParamAttrs",
1904 "FuncAttr", "OptFuncAttrs", "OptGC", "OptAlign", "OptCAlign",
1905 "SectionString", "OptSection", "GlobalVarAttributes",
Chris Lattner38905612008-02-19 04:36:25 +00001906 "GlobalVarAttribute", "PrimType", "Types", "ArgType", "ResultTypes",
1907 "ArgTypeList", "ArgTypeListI", "TypeListI", "ConstVal", "ConstExpr",
1908 "ConstVector", "GlobalType", "ThreadLocal", "AliaseeRef", "Module",
1909 "DefinitionList", "Definition", "@1", "@2", "@3", "@4", "@5", "AsmBlock",
1910 "TargetDefinition", "LibrariesDefinition", "LibList", "ArgListH",
1911 "ArgList", "FunctionHeaderH", "BEGIN", "FunctionHeader", "END",
1912 "Function", "FunctionProto", "OptSideEffect", "ConstValueRef",
Devang Patel7990dc72008-02-20 22:40:23 +00001913 "SymbolicValueRef", "ValueRef", "ResolvedVal", "ReturnedVal",
1914 "BasicBlockList", "BasicBlock", "InstructionList", "BBTerminatorInst",
1915 "JumpTable", "Inst", "PHIList", "ParamList", "IndexList", "OptTailCall",
1916 "InstVal", "OptVolatile", "MemoryInst", 0
Chris Lattner38905612008-02-19 04:36:25 +00001917};
1918#endif
1919
1920# ifdef YYPRINT
1921/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
1922 token YYLEX-NUM. */
1923static const yytype_uint16 yytoknum[] =
1924{
1925 0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
1926 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
1927 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
1928 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
1929 295, 296, 297, 298, 299, 300, 301, 302, 303, 304,
1930 305, 306, 307, 308, 309, 310, 311, 312, 313, 314,
1931 315, 316, 317, 318, 319, 320, 321, 322, 323, 324,
1932 325, 326, 327, 328, 329, 330, 331, 332, 333, 334,
1933 335, 336, 337, 338, 339, 340, 341, 342, 343, 344,
1934 345, 346, 347, 348, 349, 350, 351, 352, 353, 354,
1935 355, 356, 357, 358, 359, 360, 361, 362, 363, 364,
1936 365, 366, 367, 368, 369, 370, 371, 372, 373, 374,
1937 375, 376, 377, 378, 379, 380, 381, 382, 383, 384,
1938 385, 386, 387, 388, 389, 390, 391, 392, 393, 394,
1939 395, 396, 397, 398, 399, 400, 401, 402, 403, 404,
Devang Patel67909432008-03-03 18:58:47 +00001940 405, 406, 40, 41, 61, 44, 42, 92, 91, 120,
1941 93, 60, 62, 123, 125, 99
Chris Lattner38905612008-02-19 04:36:25 +00001942};
1943# endif
1944
1945/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
1946static const yytype_uint8 yyr1[] =
1947{
Devang Patel67909432008-03-03 18:58:47 +00001948 0, 166, 167, 167, 167, 167, 167, 167, 167, 167,
1949 167, 168, 168, 168, 168, 168, 168, 169, 169, 169,
Devang Patel5a970972008-02-19 22:27:01 +00001950 169, 169, 169, 169, 169, 169, 169, 169, 169, 170,
Devang Patel67909432008-03-03 18:58:47 +00001951 170, 170, 170, 170, 170, 170, 170, 170, 170, 171,
1952 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
1953 171, 171, 171, 171, 171, 172, 173, 173, 173, 173,
1954 173, 174, 174, 174, 175, 175, 176, 176, 177, 177,
1955 178, 178, 179, 179, 180, 181, 181, 181, 181, 181,
1956 182, 182, 182, 183, 183, 183, 183, 184, 184, 184,
1957 185, 185, 185, 185, 185, 186, 186, 186, 187, 187,
1958 187, 187, 187, 187, 187, 188, 188, 188, 188, 188,
1959 188, 188, 188, 188, 188, 189, 189, 190, 190, 190,
1960 190, 190, 190, 191, 191, 192, 192, 193, 193, 194,
1961 194, 195, 196, 196, 197, 197, 198, 198, 199, 199,
1962 199, 199, 199, 199, 199, 200, 200, 200, 200, 200,
1963 200, 200, 200, 200, 200, 200, 200, 200, 201, 202,
1964 202, 203, 203, 204, 204, 204, 204, 205, 205, 206,
1965 206, 206, 206, 206, 206, 206, 206, 206, 206, 206,
Dale Johannesen172f3112008-02-20 21:15:43 +00001966 206, 206, 206, 206, 206, 206, 206, 206, 206, 207,
Devang Patel67909432008-03-03 18:58:47 +00001967 207, 207, 207, 207, 207, 207, 207, 207, 207, 208,
1968 208, 209, 209, 210, 210, 211, 211, 212, 212, 213,
1969 213, 215, 214, 216, 214, 214, 214, 214, 217, 214,
1970 218, 214, 219, 214, 214, 214, 214, 220, 221, 221,
1971 222, 223, 223, 223, 224, 224, 225, 225, 225, 225,
1972 226, 227, 227, 228, 229, 229, 230, 231, 232, 232,
1973 233, 233, 233, 233, 233, 233, 233, 233, 233, 233,
1974 233, 234, 234, 234, 234, 235, 235, 236, 237, 237,
1975 238, 238, 239, 240, 240, 240, 240, 240, 241, 241,
1976 241, 241, 241, 241, 241, 241, 241, 242, 242, 243,
1977 244, 244, 245, 245, 245, 245, 245, 246, 246, 247,
1978 247, 248, 248, 248, 248, 248, 248, 248, 248, 248,
1979 248, 248, 248, 248, 249, 249, 250, 250, 250, 250,
1980 250, 250, 250, 250, 250
Chris Lattner38905612008-02-19 04:36:25 +00001981};
1982
1983/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
1984static const yytype_uint8 yyr2[] =
1985{
1986 0, 2, 1, 1, 1, 1, 1, 1, 1, 1,
1987 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1988 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1989 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1990 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1991 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1992 1, 1, 1, 1, 1, 0, 4, 0, 2, 0,
1993 1, 1, 1, 0, 2, 1, 1, 1, 1, 1,
1994 1, 1, 1, 0, 1, 1, 1, 0, 1, 1,
1995 0, 1, 1, 1, 1, 0, 1, 1, 0, 1,
1996 1, 1, 1, 1, 2, 1, 1, 1, 1, 1,
Dale Johannesen172f3112008-02-20 21:15:43 +00001997 1, 1, 1, 1, 2, 0, 2, 1, 1, 1,
1998 1, 1, 1, 0, 2, 0, 2, 0, 2, 0,
1999 3, 2, 0, 1, 0, 3, 1, 2, 1, 1,
2000 1, 1, 1, 1, 1, 1, 1, 3, 1, 2,
2001 5, 5, 5, 5, 3, 2, 5, 4, 2, 1,
2002 1, 1, 3, 1, 3, 1, 0, 1, 3, 4,
2003 3, 3, 4, 4, 3, 6, 5, 2, 2, 2,
2004 2, 2, 2, 2, 2, 2, 2, 2, 2, 6,
2005 5, 8, 6, 6, 7, 7, 6, 8, 8, 3,
2006 1, 1, 1, 1, 0, 2, 6, 1, 0, 1,
2007 2, 0, 3, 0, 3, 3, 3, 3, 0, 8,
2008 0, 9, 0, 9, 5, 2, 3, 1, 3, 3,
2009 3, 3, 1, 0, 5, 3, 1, 3, 1, 0,
2010 10, 1, 1, 4, 1, 1, 2, 3, 0, 1,
2011 1, 1, 1, 1, 1, 1, 1, 1, 3, 1,
Devang Patel7990dc72008-02-20 22:40:23 +00002012 5, 1, 1, 1, 1, 1, 1, 2, 1, 3,
Devang Patel67909432008-03-03 18:58:47 +00002013 2, 2, 3, 2, 0, 2, 1, 3, 2, 2,
2014 3, 9, 9, 8, 14, 1, 1, 6, 5, 2,
2015 6, 7, 4, 4, 6, 6, 0, 0, 3, 2,
2016 1, 5, 5, 6, 6, 4, 6, 4, 4, 6,
2017 6, 2, 8, 1, 1, 0, 3, 6, 3, 6,
2018 2, 5, 7, 5, 4
Chris Lattner38905612008-02-19 04:36:25 +00002019};
2020
2021/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
2022 STATE-NUM when YYTABLE doesn't specify something else to do. Zero
2023 means the default is an error. */
2024static const yytype_uint16 yydefact[] =
2025{
Dale Johannesen172f3112008-02-20 21:15:43 +00002026 73, 61, 70, 62, 71, 63, 213, 211, 0, 0,
2027 0, 0, 0, 0, 83, 72, 0, 73, 209, 87,
2028 90, 0, 0, 225, 0, 0, 68, 0, 74, 75,
Chris Lattner38905612008-02-19 04:36:25 +00002029 77, 76, 78, 80, 79, 81, 82, 84, 85, 86,
Dale Johannesen172f3112008-02-20 21:15:43 +00002030 83, 83, 204, 1, 210, 88, 89, 83, 214, 91,
Devang Patel7990dc72008-02-20 22:40:23 +00002031 92, 93, 94, 83, 274, 212, 274, 0, 0, 233,
Dale Johannesen172f3112008-02-20 21:15:43 +00002032 226, 227, 215, 261, 262, 217, 138, 139, 140, 143,
2033 142, 141, 144, 145, 0, 0, 0, 0, 263, 264,
2034 146, 216, 148, 204, 204, 95, 203, 0, 98, 98,
Devang Patel67909432008-03-03 18:58:47 +00002035 276, 0, 271, 69, 244, 245, 246, 270, 228, 229,
2036 232, 0, 166, 149, 0, 0, 0, 0, 155, 167,
2037 0, 0, 166, 0, 0, 0, 97, 96, 0, 201,
2038 202, 0, 0, 99, 100, 101, 102, 103, 0, 247,
2039 0, 0, 250, 251, 252, 257, 253, 254, 255, 256,
2040 248, 2, 3, 4, 5, 6, 7, 8, 9, 10,
2041 14, 15, 16, 11, 12, 13, 0, 0, 0, 17,
2042 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
2043 28, 0, 0, 0, 0, 0, 0, 0, 0, 259,
2044 266, 265, 275, 315, 273, 0, 230, 165, 115, 161,
2045 163, 0, 0, 0, 0, 0, 0, 154, 0, 0,
2046 147, 0, 0, 160, 0, 159, 0, 224, 138, 139,
2047 140, 143, 142, 141, 0, 0, 67, 67, 104, 0,
2048 241, 242, 243, 277, 249, 0, 29, 30, 31, 32,
2049 33, 34, 35, 36, 37, 38, 0, 53, 54, 49,
2050 50, 51, 52, 39, 40, 41, 42, 43, 44, 45,
2051 46, 47, 48, 0, 0, 0, 0, 0, 0, 200,
2052 0, 0, 0, 0, 314, 300, 0, 0, 0, 0,
2053 98, 285, 286, 0, 0, 0, 0, 0, 0, 0,
2054 0, 0, 0, 0, 0, 0, 0, 0, 0, 272,
2055 98, 289, 0, 313, 231, 158, 0, 123, 67, 67,
2056 157, 0, 168, 0, 123, 67, 67, 0, 205, 186,
2057 187, 182, 184, 183, 185, 188, 181, 177, 178, 0,
2058 0, 0, 0, 180, 179, 218, 0, 0, 0, 0,
2059 297, 0, 0, 0, 0, 0, 258, 0, 0, 0,
2060 299, 279, 67, 268, 278, 0, 0, 55, 0, 0,
2061 0, 0, 129, 129, 320, 67, 67, 311, 0, 0,
2062 0, 0, 0, 67, 67, 67, 0, 0, 0, 0,
2063 0, 106, 108, 107, 105, 109, 110, 111, 112, 113,
2064 116, 164, 162, 151, 152, 153, 156, 66, 150, 220,
2065 222, 0, 170, 0, 0, 0, 174, 0, 171, 134,
2066 239, 0, 0, 0, 0, 0, 0, 0, 0, 199,
2067 0, 0, 0, 267, 0, 0, 280, 0, 0, 67,
2068 67, 0, 316, 0, 318, 297, 0, 0, 0, 0,
2069 0, 0, 0, 0, 0, 0, 0, 0, 67, 0,
2070 114, 120, 119, 117, 118, 121, 122, 124, 134, 134,
2071 0, 169, 155, 167, 0, 172, 173, 0, 219, 238,
2072 115, 236, 0, 260, 0, 0, 190, 0, 0, 0,
2073 0, 0, 0, 0, 67, 269, 0, 0, 0, 0,
2074 0, 0, 0, 0, 324, 0, 0, 0, 307, 308,
2075 0, 0, 0, 0, 0, 305, 0, 129, 0, 221,
2076 223, 67, 176, 0, 0, 0, 136, 134, 65, 0,
2077 123, 0, 0, 298, 0, 196, 0, 0, 192, 193,
2078 189, 0, 0, 296, 0, 0, 129, 130, 129, 0,
2079 0, 0, 0, 0, 323, 301, 302, 296, 0, 321,
2080 67, 206, 175, 131, 137, 135, 64, 235, 237, 115,
2081 132, 194, 195, 0, 0, 0, 0, 0, 115, 115,
2082 0, 303, 304, 317, 319, 0, 0, 306, 309, 310,
2083 0, 129, 65, 133, 127, 191, 197, 198, 0, 0,
2084 0, 0, 123, 0, 290, 0, 123, 322, 234, 0,
2085 125, 0, 283, 0, 0, 106, 108, 115, 115, 0,
2086 115, 115, 291, 312, 128, 0, 240, 281, 0, 282,
2087 0, 293, 292, 0, 0, 0, 126, 0, 0, 0,
2088 115, 115, 0, 0, 0, 295, 294, 288, 0, 0,
2089 287, 0, 284
Chris Lattner38905612008-02-19 04:36:25 +00002090};
2091
2092/* YYDEFGOTO[NTERM-NUM]. */
2093static const yytype_int16 yydefgoto[] =
2094{
Devang Patel67909432008-03-03 18:58:47 +00002095 -1, 176, 177, 178, 236, 253, 214, 215, 78, 547,
2096 113, 12, 79, 14, 15, 40, 41, 42, 47, 53,
2097 118, 128, 380, 295, 447, 383, 606, 590, 422, 506,
2098 574, 458, 507, 80, 216, 189, 206, 190, 191, 110,
2099 259, 179, 260, 121, 87, 207, 16, 17, 18, 20,
2100 19, 399, 448, 449, 62, 23, 60, 101, 461, 462,
2101 129, 222, 54, 96, 55, 48, 225, 180, 82, 182,
2102 343, 344, 56, 92, 93, 289, 594, 184, 357, 560,
2103 404, 290, 291, 292, 293
Chris Lattner38905612008-02-19 04:36:25 +00002104};
2105
2106/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
2107 STATE-NUM. */
Devang Patel67909432008-03-03 18:58:47 +00002108#define YYPACT_NINF -565
Chris Lattner38905612008-02-19 04:36:25 +00002109static const yytype_int16 yypact[] =
2110{
Devang Patel67909432008-03-03 18:58:47 +00002111 641, -565, -565, -565, -565, -565, -565, -565, -29, -130,
2112 -24, -105, 35, -59, 335, -565, 103, 1109, -565, 53,
2113 231, -28, 10, -565, 31, 139, -565, 1574, -565, -565,
2114 -565, -565, -565, -565, -565, -565, -565, -565, -565, -565,
2115 95, 95, 164, -565, -565, -565, -565, 95, -565, -565,
2116 -565, -565, -565, 95, -12, -565, 7, 151, 155, 181,
2117 -565, -565, -565, -565, -565, -68, -565, -565, -565, -565,
2118 -565, -565, -565, -565, 205, 225, 9, 108, -565, -565,
2119 -565, 50, -565, 149, 149, 242, -565, 182, 414, 414,
2120 166, 965, -565, 198, -565, -565, -565, -565, -565, -565,
2121 -565, -110, 1185, -565, 89, 118, 590, -68, -565, 50,
2122 -81, 69, 1185, 82, 182, 182, -565, -565, 1139, -565,
2123 -565, 1592, 281, -565, -565, -565, -565, -565, 1632, -565,
2124 -21, 965, -565, -565, -565, -565, -565, -565, -565, -565,
2125 228, -565, -565, -565, -565, -565, -565, -565, -565, -565,
2126 -565, -565, -565, -565, -565, -565, 395, 547, 143, -565,
2127 -565, -565, -565, -565, -565, -565, -565, -565, -565, -565,
2128 -565, 154, 159, 163, 169, 1592, 177, 184, 188, -565,
2129 -565, -565, -565, 1902, -565, 311, -565, -565, 50, -565,
2130 189, 192, 1691, 1691, 196, -74, 1691, -565, 346, 203,
2131 -565, 1592, 1691, -68, 199, 50, 411, -565, 343, 350,
2132 354, 355, 356, 357, 314, 358, 1241, 319, -565, 12,
2133 -565, -565, -565, -565, -565, 353, -565, -565, -565, -565,
2134 -565, -565, -565, -565, -565, -565, 224, -565, -565, -565,
2135 -565, -565, -565, -565, -565, -565, -565, -565, -565, -565,
2136 -565, -565, -565, 232, 1592, 1592, 1592, 1592, 1592, -565,
2137 -50, 1592, 1592, 1592, -565, -565, 336, 1749, 62, 382,
2138 414, -565, -565, 395, 547, 1691, 1691, 1691, 1691, 1691,
2139 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, -565,
2140 414, -565, 148, -565, -565, 393, 1473, -565, -43, -15,
2141 -565, 233, 50, 243, -565, 319, -39, 1139, -565, -565,
2142 -565, -565, -565, -565, -565, -565, -565, -565, -565, 47,
2143 1789, 769, 375, -565, -565, -565, 248, 246, 1592, 1592,
2144 -565, 253, 254, 257, 261, 1592, -565, 266, 267, 369,
2145 -565, -68, 825, -565, 268, 965, 965, -565, 965, 1632,
2146 1691, 1691, 23, 28, -565, 825, -44, 270, 271, 274,
2147 277, 282, 283, 174, 825, 825, 398, 1632, 1691, 1691,
2148 435, -565, -565, -565, -565, -565, -565, -565, -565, -565,
2149 -565, -565, -565, 323, -565, -565, -565, -565, 323, -565,
2150 82, 402, -565, 40, 874, 57, -565, -70, -565, 287,
2151 1513, 421, 290, 294, 141, 1592, 1592, 1592, 1592, -565,
2152 1592, 1592, 1691, -565, 1691, 296, -565, 297, 965, 825,
2153 825, 15, -565, 19, -565, -565, 965, 295, 1691, 1691,
2154 1691, 1691, 1691, 299, 309, 313, 1691, 965, 825, 316,
2155 -565, -565, -565, -565, -565, -565, -565, -565, 287, 287,
2156 1691, -565, 320, 1094, -64, -565, -565, -1, -565, -565,
2157 50, 318, 328, -565, 1592, 1592, -565, 1691, 344, 345,
2158 347, 348, 351, 363, 84, -565, 484, 492, 365, 364,
2159 368, 965, 506, 965, 371, 372, 965, 374, 50, -565,
2160 377, 380, 514, 965, 965, 50, 389, 387, 1691, -565,
2161 -565, 87, -565, 362, 521, 540, -565, 287, 194, 1534,
2162 -565, 392, 394, -565, 1592, -565, 1592, 1592, -565, -565,
2163 -565, 965, 965, 1807, 965, 965, 387, -565, 387, 965,
2164 391, 1691, 1691, 1691, -565, -565, -565, 1807, 497, -565,
2165 825, -565, -565, -565, -565, -565, -565, -565, -565, 50,
2166 -3, -565, -565, 399, 401, 405, 396, 397, 79, 50,
2167 175, -565, -565, -565, -565, 400, 965, -565, -565, -565,
2168 202, 387, 194, -565, 508, -565, -565, -565, 542, 3,
2169 682, 682, -565, 1850, -565, 403, -565, -565, -565, 560,
2170 418, 965, -565, 1382, 5, 415, 416, -565, -565, 252,
2171 79, 50, -565, 323, -565, 548, -565, -565, 420, -565,
2172 1382, 393, 393, 552, 682, 682, -565, 554, 422, 965,
2173 -565, -565, 965, 559, 505, 393, 393, -565, 965, 562,
2174 -565, 965, -565
Chris Lattner38905612008-02-19 04:36:25 +00002175};
2176
2177/* YYPGOTO[NTERM-NUM]. */
2178static const yytype_int16 yypgoto[] =
2179{
Devang Patel67909432008-03-03 18:58:47 +00002180 -565, 404, 406, 407, 307, 308, -267, -565, 0, 14,
2181 -195, 488, 4, -565, -565, -565, -565, 269, -565, -565,
2182 -565, -243, -565, -452, -565, -299, -565, -565, -341, 34,
2183 -565, -429, -565, -565, -26, 298, -125, -565, 479, 486,
2184 -103, -210, -232, 153, 217, 286, -565, -565, 582, -565,
2185 -565, -565, -565, -565, -565, -565, -565, -565, -565, -565,
2186 519, -565, -565, -565, -565, -565, -565, -564, -66, 102,
2187 -240, -565, -565, 555, -565, -565, -565, -565, -565, 78,
2188 191, -565, -565, -565, -565
Chris Lattner38905612008-02-19 04:36:25 +00002189};
2190
2191/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
2192 positive, shift that token. If negative, reduce the rule which
2193 number is the opposite. If zero, do what YYDEFACT says.
2194 If YYTABLE_NINF, syntax error. */
Dale Johannesen172f3112008-02-20 21:15:43 +00002195#define YYTABLE_NINF -209
Chris Lattner38905612008-02-19 04:36:25 +00002196static const yytype_int16 yytable[] =
2197{
Devang Patel67909432008-03-03 18:58:47 +00002198 11, 81, 348, 219, 13, 388, 323, 220, 508, 90,
2199 111, 111, 424, 105, 347, 111, 347, 11, 217, 499,
2200 500, 13, 325, 21, 24, 181, 481, 349, 90, 608,
2201 483, 504, 2, 504, 25, 4, 94, 354, 22, 111,
2202 358, 359, 360, 361, 362, 185, 618, 367, 366, 26,
2203 186, 109, 505, 27, 63, 64, 91, 107, 208, 209,
2204 210, 211, 212, 213, 72, 181, 1, 2, 482, 3,
2205 4, 5, 482, 345, 196, 91, 188, 111, 545, 346,
2206 109, 196, 111, 197, 102, 335, 188, 393, 395, 397,
2207 301, 335, 205, 11, 456, 28, 73, 572, 305, 45,
2208 503, 46, 205, 43, 111, 335, 580, 581, 112, 112,
2209 389, 390, 336, 112, 426, 63, 64, 384, 107, 66,
2210 67, 68, 69, 70, 71, 72, 57, 1, 2, 439,
2211 3, 4, 5, -144, 441, 442, 443, 112, 111, 444,
2212 308, 111, 221, 445, 446, 611, 612, 385, 614, 615,
2213 324, 330, 331, 332, 333, 334, 539, 73, 337, 338,
2214 339, 61, 454, 592, 58, 609, 298, 299, 625, 626,
2215 302, 95, 106, 98, 475, 112, 306, 99, 421, -67,
2216 112, 63, 64, 423, -67, 563, 86, 564, 487, 59,
2217 489, 490, 491, 1, 2, 335, 3, 4, 5, 85,
2218 451, 86, 112, 100, 74, 75, -67, 392, 76, 103,
2219 77, 550, 335, 1, 119, 120, 3, 1, 5, 455,
2220 3, 198, 5, 326, 418, 402, 403, 513, 111, 104,
2221 587, -144, 409, 223, 131, -144, 112, 520, 200, 112,
2222 541, 342, 437, 323, 37, 38, 39, 370, 192, 352,
2223 353, 342, 355, 356, 342, 342, 342, 342, 342, 363,
2224 364, 365, 342, 368, 369, 74, 75, 201, 202, 76,
2225 188, 77, 108, 49, 50, 51, 181, 193, 52, 181,
2226 181, 205, 181, 599, 116, 218, 117, 603, 224, 181,
2227 613, 567, 568, 569, 466, 254, 467, 433, 181, 181,
2228 114, 115, 468, 469, 470, 471, 255, 472, 473, 83,
2229 84, 256, 593, 371, 372, 257, 88, 311, 312, 313,
2230 314, 258, 89, 205, 419, 420, 112, 610, 582, 261,
2231 583, 373, 374, 294, 375, 376, 262, 377, 378, 379,
2232 263, 205, 438, 342, 296, 297, -55, -55, -55, -55,
2233 303, 307, 181, 181, 181, 586, 304, 583, 300, -56,
2234 181, 511, 512, -57, -60, -59, -58, 315, 453, 309,
2235 310, 181, 181, 111, 460, 327, 328, 29, 30, 31,
2236 32, 33, 34, 35, 329, 36, 474, 324, 342, 441,
2237 442, 443, 340, 347, 444, 386, 387, 398, 445, 446,
2238 400, 401, 342, 488, 342, 342, 342, 412, 405, 406,
2239 495, 553, 407, 554, 555, 181, 408, 181, 63, 64,
2240 181, 410, 411, 414, 501, 427, 428, 181, 181, 429,
2241 1, 2, 430, 3, 4, 5, 436, 431, 432, 440,
2242 450, 342, 457, 463, 413, 464, 370, 415, 416, 465,
2243 417, 476, 477, 486, 492, 181, 181, 425, 181, 181,
2244 441, 442, 443, 181, 493, 444, 434, 435, 494, 445,
2245 446, 498, 540, 509, 181, 122, 123, 124, 125, 126,
2246 127, 510, 502, 549, 37, 38, 39, 226, 227, 228,
2247 229, 230, 231, 232, 233, 234, 235, 559, 515, 514,
2248 181, 521, 516, 517, 518, 342, 342, 342, 546, 522,
2249 527, 559, 371, 372, 181, 181, 519, 523, 534, 524,
2250 478, 479, 480, 525, 542, 181, 467, 529, 485, 531,
2251 373, 374, 532, 375, 376, 533, 377, 378, 379, 496,
2252 497, 537, 538, 543, 544, 551, 566, 552, 181, 181,
2253 482, 578, 575, 181, 576, 579, 181, 601, 577, 591,
2254 584, 589, 181, 602, 604, 181, 605, -18, -19, 619,
2255 616, 622, 546, 237, 238, 617, 628, 623, 629, 631,
2256 350, 183, 351, 526, 573, 528, 588, 286, 530, 287,
2257 288, 199, 195, 391, 382, 535, 536, 63, 64, 44,
2258 107, 66, 67, 68, 69, 70, 71, 72, 130, 1,
2259 2, 97, 3, 4, 5, 570, 484, 0, 0, 0,
2260 0, 0, 0, 556, 557, 0, 561, 562, 0, 0,
2261 0, 565, 0, 0, 0, 0, 0, 0, 0, 73,
2262 0, -208, 571, 0, 0, 239, 240, 241, 242, 243,
2263 244, 245, 246, 247, 248, 249, 250, 251, 252, -69,
2264 1, 2, 0, 3, 4, 5, 0, 0, 585, 0,
2265 0, 6, 7, 0, 0, 0, 0, 0, 0, 0,
2266 0, 0, 597, 598, 0, 132, 133, 0, 0, 63,
2267 64, 134, 8, 607, 0, 0, 9, 0, 0, 0,
2268 10, 1, 2, 0, 3, 4, 5, 135, 136, 137,
2269 0, 0, 0, 0, 0, 0, 620, 621, 0, 0,
2270 0, 624, 138, 139, 627, 0, 0, 0, 0, 0,
2271 630, 0, 0, 632, 0, 370, 0, 0, 0, 0,
2272 140, 0, 0, 0, 0, 0, 0, 74, 75, 0,
2273 0, 76, 0, 77, 194, 0, 0, 141, 142, 143,
2274 144, 145, 146, 147, 148, 149, 150, 151, 152, 153,
2275 154, 155, 156, 157, 0, 0, 63, 64, 0, 107,
2276 208, 209, 210, 211, 212, 213, 72, 0, 1, 2,
2277 0, 3, 4, 5, 0, 0, 0, 0, 0, 158,
2278 159, 595, 596, 162, 163, 164, 165, 166, 167, 168,
2279 169, 170, 0, 171, 0, 172, 173, 174, 73, 373,
2280 374, 0, 375, 376, 0, 377, 378, 379, 132, 133,
2281 0, 0, 63, 64, 134, 0, 0, 0, 0, 0,
2282 0, 0, 0, 175, 1, 2, 0, 3, 4, 5,
2283 135, 136, 137, 0, 0, 0, 0, 0, 0, 0,
2284 0, 0, 0, 0, 0, 138, 139, 0, 0, 0,
2285 0, 0, 0, 0, 0, 0, 0, 0, 0, 111,
2286 0, 63, 64, 140, 107, 208, 209, 210, 211, 212,
2287 213, 72, 0, 1, 2, 0, 3, 4, 5, 0,
2288 141, 142, 143, 144, 145, 146, 147, 148, 149, 150,
2289 151, 152, 153, 154, 155, 156, 157, 0, 0, 0,
2290 0, 0, 0, 73, 0, 0, 74, 75, 0, 0,
2291 76, 0, 77, 396, 0, 0, 0, 0, 0, 0,
2292 0, 0, 158, 159, 160, 161, 162, 163, 164, 165,
2293 166, 167, 168, 169, 170, 0, 171, 0, 172, 173,
2294 174, 0, 0, 0, 0, 0, 0, 0, 132, 133,
2295 0, 0, 63, 64, 134, 0, 0, 112, 0, 0,
2296 0, 0, 0, 0, 1, 2, 175, 3, 4, 5,
2297 135, 136, 137, 0, 0, 0, 0, 0, 0, 0,
2298 0, 0, 0, 0, 0, 138, 139, 0, 0, 0,
Devang Patel7990dc72008-02-20 22:40:23 +00002299 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
Devang Patel67909432008-03-03 18:58:47 +00002300 0, 0, 0, 140, 0, 0, 0, 0, 0, 0,
2301 0, 74, 75, 0, 0, 76, 0, 77, 452, 0,
2302 141, 142, 143, 144, 145, 146, 147, 148, 149, 150,
2303 151, 152, 153, 154, 155, 156, 157, 0, 0, 0,
Chris Lattner38905612008-02-19 04:36:25 +00002304 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
Devang Patel67909432008-03-03 18:58:47 +00002305 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2306 0, 0, 158, 159, 160, 161, 162, 163, 164, 165,
2307 166, 167, 168, 169, 170, 0, 171, 0, 172, 173,
2308 174, 63, 64, 0, 0, 0, 0, 0, 0, -207,
2309 0, 0, 0, 1, 2, 0, 3, 4, 5, 316,
2310 0, 0, 0, 0, 0, 0, 175, -69, 1, 2,
2311 0, 3, 4, 5, 317, 318, 0, 0, 0, 6,
2312 7, 0, 0, 0, 0, 0, 63, 64, 111, 203,
Devang Patel7990dc72008-02-20 22:40:23 +00002313 66, 67, 68, 69, 70, 71, 72, 0, 1, 2,
Devang Patel67909432008-03-03 18:58:47 +00002314 8, 3, 4, 5, 9, 0, 0, 0, 10, 141,
2315 142, 143, 144, 145, 146, 147, 148, 149, 150, 151,
2316 152, 153, 154, 155, 156, 157, 0, 0, 73, 0,
2317 0, 0, 63, 64, 0, 107, 66, 67, 68, 69,
Devang Patel7990dc72008-02-20 22:40:23 +00002318 70, 71, 72, 0, 1, 2, 0, 3, 4, 5,
Devang Patel67909432008-03-03 18:58:47 +00002319 0, 158, 159, 160, 161, 162, 163, 164, 165, 166,
2320 167, 168, 169, 170, 187, 171, 0, 172, 173, 174,
2321 0, 0, 0, 0, 73, 0, 0, 0, 0, 0,
2322 0, 0, 0, 0, 0, 0, 112, 0, 63, 64,
2323 -67, 0, 319, 0, 0, 320, 0, 321, 0, 322,
2324 1, 2, 204, 3, 4, 5, 316, 0, 0, 0,
Devang Patel7990dc72008-02-20 22:40:23 +00002325 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
Devang Patel67909432008-03-03 18:58:47 +00002326 0, 317, 318, 0, 0, 0, 0, 0, 0, 0,
2327 0, 0, 0, 0, 0, 111, 74, 75, 0, 0,
2328 76, 0, 77, 0, 0, 0, 0, 0, 0, 0,
2329 0, 0, 0, 0, 0, 0, 141, 142, 143, 144,
2330 145, 146, 147, 148, 149, 150, 151, 152, 153, 154,
2331 155, 156, 157, 0, 0, 0, 0, 0, 0, 0,
2332 0, 0, 74, 75, 0, 0, 76, 0, 77, 0,
2333 0, 0, 0, 0, 0, 0, 0, 0, 158, 159,
2334 160, 161, 162, 163, 164, 165, 166, 167, 168, 169,
2335 170, 0, 171, 0, 172, 173, 174, 0, 0, 0,
2336 0, 0, 0, 0, 0, 132, 133, 0, 0, 0,
2337 0, 134, 0, 112, 0, 0, 0, 0, 0, 319,
2338 0, 0, 320, 0, 321, 0, 322, 135, 136, 137,
2339 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2340 0, 0, 138, 139, 0, 0, 0, 0, 0, 0,
2341 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2342 140, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2343 0, 0, 0, 0, 0, 0, 0, 141, 142, 143,
2344 144, 145, 146, 147, 148, 149, 150, 151, 152, 153,
2345 154, 155, 156, 157, 0, 0, 0, 0, 0, 0,
2346 63, 64, 0, 107, 66, 67, 68, 69, 70, 71,
2347 72, 0, 1, 2, 0, 3, 4, 5, 0, 158,
2348 159, 160, 161, 162, 163, 164, 165, 166, 167, 168,
2349 169, 170, 381, 171, 0, 172, 173, 174, 0, 0,
2350 63, 64, 73, 107, 66, 67, 68, 69, 70, 71,
2351 72, 0, 1, 2, 0, 3, 4, 5, 0, 0,
2352 0, 63, 64, 175, 107, 66, 67, 68, 69, 70,
2353 71, 72, 459, 1, 2, 0, 3, 4, 5, 0,
2354 0, 0, 73, 0, 0, 0, 0, 0, 0, 0,
2355 0, 0, 0, 548, 0, 0, 0, 0, 0, 0,
2356 0, 63, 64, 73, 65, 66, 67, 68, 69, 70,
2357 71, 72, 0, 1, 2, 0, 3, 4, 5, 63,
2358 64, 0, 107, 208, 209, 210, 211, 212, 213, 72,
2359 0, 1, 2, 0, 3, 4, 5, 0, 0, 0,
Devang Patel7990dc72008-02-20 22:40:23 +00002360 0, 0, 0, 73, 0, 0, 0, 0, 0, 0,
Devang Patel67909432008-03-03 18:58:47 +00002361 74, 75, 0, 0, 76, 0, 77, 0, 0, 63,
2362 64, 73, 203, 66, 67, 68, 69, 70, 71, 72,
Dale Johannesen172f3112008-02-20 21:15:43 +00002363 0, 1, 2, 0, 3, 4, 5, 0, 0, 0,
2364 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
Devang Patel67909432008-03-03 18:58:47 +00002365 74, 75, 0, 0, 76, 0, 77, 0, 0, 0,
Dale Johannesen172f3112008-02-20 21:15:43 +00002366 0, 73, 0, 0, 0, 0, 0, 0, 0, 0,
Devang Patel67909432008-03-03 18:58:47 +00002367 0, 74, 75, 0, 0, 76, 0, 77, 63, 64,
2368 0, 107, 66, 67, 68, 69, 70, 71, 72, 0,
2369 1, 2, 0, 3, 4, 5, 0, 0, 0, 0,
2370 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2371 0, 74, 75, 0, 0, 76, 0, 77, 0, 0,
2372 73, 0, 0, 0, 0, 0, 0, 0, 0, 74,
2373 75, 0, 0, 76, 0, 77, 63, 64, 0, 341,
2374 66, 67, 68, 69, 70, 71, 72, 0, 1, 2,
2375 0, 3, 4, 5, 0, 0, 0, 0, 0, 0,
2376 0, 0, 0, 0, 0, 0, 0, 0, 0, 74,
2377 75, 0, 0, 76, 0, 77, 63, 64, 73, 107,
2378 208, 209, 210, 211, 212, 213, 72, 0, 1, 2,
2379 0, 3, 4, 5, 63, 64, 0, 107, 66, 67,
2380 68, 69, 70, 71, 558, 0, 1, 2, 0, 3,
2381 4, 5, 0, 0, 0, 0, 0, 0, 73, 0,
2382 0, 0, 0, 0, 0, 0, 0, 0, 74, 75,
2383 0, 0, 76, 0, 77, 0, 73, 63, 64, 0,
2384 107, 66, 67, 68, 69, 70, 71, 600, 0, 1,
Devang Patel7990dc72008-02-20 22:40:23 +00002385 2, 0, 3, 4, 5, 0, 0, 0, 0, 0,
2386 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
Devang Patel67909432008-03-03 18:58:47 +00002387 0, 0, 0, 0, 0, 0, 0, 0, 0, 73,
Dale Johannesen172f3112008-02-20 21:15:43 +00002388 0, 0, 0, 0, 0, 0, 74, 75, 0, 0,
Devang Patel7990dc72008-02-20 22:40:23 +00002389 76, 0, 77, 0, 0, 0, 0, 0, 0, 0,
Devang Patel67909432008-03-03 18:58:47 +00002390 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2391 0, 0, 0, 0, 0, 0, 0, 0, 264, 0,
2392 0, 0, 0, 0, 0, 0, 74, 75, 0, 0,
2393 76, 0, 394, 0, 0, 0, 0, 0, 265, 266,
Devang Patel7990dc72008-02-20 22:40:23 +00002394 0, 0, 0, 0, 74, 75, 0, 0, 76, 0,
Devang Patel67909432008-03-03 18:58:47 +00002395 77, 267, 268, 269, 270, 271, 272, 141, 142, 143,
2396 144, 145, 146, 147, 148, 149, 150, 151, 152, 153,
2397 154, 155, 273, 274, 0, 0, 0, 0, 0, 0,
2398 0, 0, 0, 0, 0, 0, 0, 74, 75, 0,
2399 0, 76, 0, 77, 275, 276, 277, 0, 0, 278,
2400 159, 160, 161, 162, 163, 164, 165, 166, 167, 168,
2401 169, 170, 279, 280, 281, 282, 283, 284, 285
Chris Lattner38905612008-02-19 04:36:25 +00002402};
2403
2404static const yytype_int16 yycheck[] =
2405{
Devang Patel67909432008-03-03 18:58:47 +00002406 0, 27, 269, 128, 0, 304, 216, 28, 460, 21,
2407 54, 54, 353, 4, 11, 54, 11, 17, 121, 448,
2408 449, 17, 217, 52, 154, 91, 11, 270, 21, 593,
2409 11, 34, 20, 34, 58, 23, 29, 277, 67, 54,
2410 280, 281, 282, 283, 284, 155, 610, 290, 288, 154,
2411 160, 77, 53, 18, 7, 8, 68, 10, 11, 12,
2412 13, 14, 15, 16, 17, 131, 19, 20, 53, 22,
2413 23, 24, 53, 11, 155, 68, 102, 54, 507, 17,
2414 106, 155, 54, 164, 152, 155, 112, 319, 320, 321,
2415 164, 155, 118, 93, 164, 154, 49, 549, 201, 46,
2416 164, 48, 128, 0, 54, 155, 558, 559, 152, 152,
2417 305, 306, 162, 152, 158, 7, 8, 160, 10, 11,
2418 12, 13, 14, 15, 16, 17, 154, 19, 20, 369,
2419 22, 23, 24, 54, 137, 138, 139, 152, 54, 142,
2420 206, 54, 163, 146, 147, 597, 598, 162, 600, 601,
2421 216, 254, 255, 256, 257, 258, 497, 49, 261, 262,
2422 263, 22, 394, 160, 154, 160, 192, 193, 620, 621,
2423 196, 164, 163, 22, 414, 152, 202, 22, 155, 156,
2424 152, 7, 8, 155, 156, 526, 37, 528, 428, 158,
2425 430, 431, 432, 19, 20, 155, 22, 23, 24, 35,
2426 160, 37, 152, 22, 157, 158, 156, 160, 161, 4,
2427 163, 510, 155, 19, 32, 33, 22, 19, 24, 162,
2428 22, 152, 24, 219, 349, 328, 329, 467, 54, 4,
2429 571, 152, 335, 131, 68, 156, 152, 153, 156, 152,
2430 153, 267, 367, 453, 149, 150, 151, 53, 159, 275,
2431 276, 277, 278, 279, 280, 281, 282, 283, 284, 285,
2432 286, 287, 288, 115, 116, 157, 158, 114, 115, 161,
2433 296, 163, 164, 42, 43, 44, 342, 159, 47, 345,
2434 346, 307, 348, 582, 42, 4, 44, 586, 60, 355,
2435 38, 531, 532, 533, 153, 152, 155, 363, 364, 365,
2436 83, 84, 405, 406, 407, 408, 152, 410, 411, 40,
2437 41, 152, 579, 119, 120, 152, 47, 3, 4, 5,
2438 6, 152, 53, 349, 350, 351, 152, 594, 153, 152,
2439 155, 137, 138, 22, 140, 141, 152, 143, 144, 145,
2440 152, 367, 368, 369, 155, 153, 3, 4, 5, 6,
2441 4, 152, 418, 419, 420, 153, 153, 155, 162, 9,
2442 426, 464, 465, 9, 9, 9, 9, 9, 394, 26,
2443 27, 437, 438, 54, 400, 22, 152, 42, 43, 44,
2444 45, 46, 47, 48, 152, 50, 412, 453, 414, 137,
2445 138, 139, 56, 11, 142, 162, 153, 22, 146, 147,
2446 152, 155, 428, 429, 430, 431, 432, 38, 155, 155,
2447 436, 514, 155, 516, 517, 481, 155, 483, 7, 8,
2448 486, 155, 155, 155, 450, 155, 155, 493, 494, 155,
2449 19, 20, 155, 22, 23, 24, 38, 155, 155, 4,
2450 38, 467, 155, 22, 342, 155, 53, 345, 346, 155,
2451 348, 155, 155, 158, 155, 521, 522, 355, 524, 525,
2452 137, 138, 139, 529, 155, 142, 364, 365, 155, 146,
2453 147, 155, 498, 155, 540, 61, 62, 63, 64, 65,
2454 66, 153, 162, 509, 149, 150, 151, 92, 93, 94,
2455 95, 96, 97, 98, 99, 100, 101, 523, 153, 155,
2456 566, 17, 155, 155, 153, 531, 532, 533, 508, 17,
2457 4, 537, 119, 120, 580, 581, 153, 152, 4, 155,
2458 418, 419, 420, 155, 162, 591, 155, 155, 426, 155,
2459 137, 138, 155, 140, 141, 155, 143, 144, 145, 437,
2460 438, 152, 155, 22, 4, 153, 155, 153, 614, 615,
2461 53, 155, 153, 619, 153, 158, 622, 583, 153, 17,
2462 160, 53, 628, 160, 4, 631, 148, 152, 152, 17,
2463 22, 17, 572, 26, 27, 155, 17, 155, 73, 17,
2464 273, 93, 274, 481, 550, 483, 572, 183, 486, 183,
2465 183, 112, 106, 307, 296, 493, 494, 7, 8, 17,
2466 10, 11, 12, 13, 14, 15, 16, 17, 89, 19,
2467 20, 56, 22, 23, 24, 537, 425, -1, -1, -1,
2468 -1, -1, -1, 521, 522, -1, 524, 525, -1, -1,
2469 -1, 529, -1, -1, -1, -1, -1, -1, -1, 49,
2470 -1, 0, 540, -1, -1, 98, 99, 100, 101, 102,
2471 103, 104, 105, 106, 107, 108, 109, 110, 111, 18,
2472 19, 20, -1, 22, 23, 24, -1, -1, 566, -1,
2473 -1, 30, 31, -1, -1, -1, -1, -1, -1, -1,
2474 -1, -1, 580, 581, -1, 3, 4, -1, -1, 7,
2475 8, 9, 51, 591, -1, -1, 55, -1, -1, -1,
2476 59, 19, 20, -1, 22, 23, 24, 25, 26, 27,
2477 -1, -1, -1, -1, -1, -1, 614, 615, -1, -1,
2478 -1, 619, 40, 41, 622, -1, -1, -1, -1, -1,
2479 628, -1, -1, 631, -1, 53, -1, -1, -1, -1,
2480 58, -1, -1, -1, -1, -1, -1, 157, 158, -1,
2481 -1, 161, -1, 163, 164, -1, -1, 75, 76, 77,
Dale Johannesen172f3112008-02-20 21:15:43 +00002482 78, 79, 80, 81, 82, 83, 84, 85, 86, 87,
Devang Patel67909432008-03-03 18:58:47 +00002483 88, 89, 90, 91, -1, -1, 7, 8, -1, 10,
Devang Patel7990dc72008-02-20 22:40:23 +00002484 11, 12, 13, 14, 15, 16, 17, -1, 19, 20,
Devang Patel67909432008-03-03 18:58:47 +00002485 -1, 22, 23, 24, -1, -1, -1, -1, -1, 117,
2486 118, 119, 120, 121, 122, 123, 124, 125, 126, 127,
2487 128, 129, -1, 131, -1, 133, 134, 135, 49, 137,
2488 138, -1, 140, 141, -1, 143, 144, 145, 3, 4,
2489 -1, -1, 7, 8, 9, -1, -1, -1, -1, -1,
2490 -1, -1, -1, 161, 19, 20, -1, 22, 23, 24,
2491 25, 26, 27, -1, -1, -1, -1, -1, -1, -1,
Devang Patel7990dc72008-02-20 22:40:23 +00002492 -1, -1, -1, -1, -1, 40, 41, -1, -1, -1,
2493 -1, -1, -1, -1, -1, -1, -1, -1, -1, 54,
Devang Patel67909432008-03-03 18:58:47 +00002494 -1, 7, 8, 58, 10, 11, 12, 13, 14, 15,
2495 16, 17, -1, 19, 20, -1, 22, 23, 24, -1,
Devang Patel7990dc72008-02-20 22:40:23 +00002496 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
Devang Patel67909432008-03-03 18:58:47 +00002497 85, 86, 87, 88, 89, 90, 91, -1, -1, -1,
2498 -1, -1, -1, 49, -1, -1, 157, 158, -1, -1,
2499 161, -1, 163, 164, -1, -1, -1, -1, -1, -1,
2500 -1, -1, 117, 118, 119, 120, 121, 122, 123, 124,
2501 125, 126, 127, 128, 129, -1, 131, -1, 133, 134,
2502 135, -1, -1, -1, -1, -1, -1, -1, 3, 4,
2503 -1, -1, 7, 8, 9, -1, -1, 152, -1, -1,
2504 -1, -1, -1, -1, 19, 20, 161, 22, 23, 24,
Devang Patel7990dc72008-02-20 22:40:23 +00002505 25, 26, 27, -1, -1, -1, -1, -1, -1, -1,
2506 -1, -1, -1, -1, -1, 40, 41, -1, -1, -1,
Dale Johannesen172f3112008-02-20 21:15:43 +00002507 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
Devang Patel7990dc72008-02-20 22:40:23 +00002508 -1, -1, -1, 58, -1, -1, -1, -1, -1, -1,
Devang Patel67909432008-03-03 18:58:47 +00002509 -1, 157, 158, -1, -1, 161, -1, 163, 164, -1,
Devang Patel7990dc72008-02-20 22:40:23 +00002510 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
Devang Patel67909432008-03-03 18:58:47 +00002511 85, 86, 87, 88, 89, 90, 91, -1, -1, -1,
2512 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2513 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2514 -1, -1, 117, 118, 119, 120, 121, 122, 123, 124,
2515 125, 126, 127, 128, 129, -1, 131, -1, 133, 134,
2516 135, 7, 8, -1, -1, -1, -1, -1, -1, 0,
2517 -1, -1, -1, 19, 20, -1, 22, 23, 24, 25,
2518 -1, -1, -1, -1, -1, -1, 161, 18, 19, 20,
2519 -1, 22, 23, 24, 40, 41, -1, -1, -1, 30,
2520 31, -1, -1, -1, -1, -1, 7, 8, 54, 10,
2521 11, 12, 13, 14, 15, 16, 17, -1, 19, 20,
2522 51, 22, 23, 24, 55, -1, -1, -1, 59, 75,
2523 76, 77, 78, 79, 80, 81, 82, 83, 84, 85,
2524 86, 87, 88, 89, 90, 91, -1, -1, 49, -1,
Devang Patel7990dc72008-02-20 22:40:23 +00002525 -1, -1, 7, 8, -1, 10, 11, 12, 13, 14,
2526 15, 16, 17, -1, 19, 20, -1, 22, 23, 24,
Devang Patel67909432008-03-03 18:58:47 +00002527 -1, 117, 118, 119, 120, 121, 122, 123, 124, 125,
2528 126, 127, 128, 129, 39, 131, -1, 133, 134, 135,
2529 -1, -1, -1, -1, 49, -1, -1, -1, -1, -1,
2530 -1, -1, -1, -1, -1, -1, 152, -1, 7, 8,
2531 156, -1, 158, -1, -1, 161, -1, 163, -1, 165,
2532 19, 20, 123, 22, 23, 24, 25, -1, -1, -1,
Devang Patel5a970972008-02-19 22:27:01 +00002533 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
Devang Patel67909432008-03-03 18:58:47 +00002534 -1, 40, 41, -1, -1, -1, -1, -1, -1, -1,
2535 -1, -1, -1, -1, -1, 54, 157, 158, -1, -1,
2536 161, -1, 163, -1, -1, -1, -1, -1, -1, -1,
2537 -1, -1, -1, -1, -1, -1, 75, 76, 77, 78,
2538 79, 80, 81, 82, 83, 84, 85, 86, 87, 88,
2539 89, 90, 91, -1, -1, -1, -1, -1, -1, -1,
2540 -1, -1, 157, 158, -1, -1, 161, -1, 163, -1,
2541 -1, -1, -1, -1, -1, -1, -1, -1, 117, 118,
2542 119, 120, 121, 122, 123, 124, 125, 126, 127, 128,
2543 129, -1, 131, -1, 133, 134, 135, -1, -1, -1,
2544 -1, -1, -1, -1, -1, 3, 4, -1, -1, -1,
2545 -1, 9, -1, 152, -1, -1, -1, -1, -1, 158,
2546 -1, -1, 161, -1, 163, -1, 165, 25, 26, 27,
2547 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2548 -1, -1, 40, 41, -1, -1, -1, -1, -1, -1,
2549 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2550 58, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2551 -1, -1, -1, -1, -1, -1, -1, 75, 76, 77,
2552 78, 79, 80, 81, 82, 83, 84, 85, 86, 87,
2553 88, 89, 90, 91, -1, -1, -1, -1, -1, -1,
2554 7, 8, -1, 10, 11, 12, 13, 14, 15, 16,
2555 17, -1, 19, 20, -1, 22, 23, 24, -1, 117,
2556 118, 119, 120, 121, 122, 123, 124, 125, 126, 127,
2557 128, 129, 39, 131, -1, 133, 134, 135, -1, -1,
2558 7, 8, 49, 10, 11, 12, 13, 14, 15, 16,
2559 17, -1, 19, 20, -1, 22, 23, 24, -1, -1,
2560 -1, 7, 8, 161, 10, 11, 12, 13, 14, 15,
2561 16, 17, 39, 19, 20, -1, 22, 23, 24, -1,
2562 -1, -1, 49, -1, -1, -1, -1, -1, -1, -1,
2563 -1, -1, -1, 39, -1, -1, -1, -1, -1, -1,
2564 -1, 7, 8, 49, 10, 11, 12, 13, 14, 15,
2565 16, 17, -1, 19, 20, -1, 22, 23, 24, 7,
Dale Johannesen172f3112008-02-20 21:15:43 +00002566 8, -1, 10, 11, 12, 13, 14, 15, 16, 17,
2567 -1, 19, 20, -1, 22, 23, 24, -1, -1, -1,
Devang Patel67909432008-03-03 18:58:47 +00002568 -1, -1, -1, 49, -1, -1, -1, -1, -1, -1,
2569 157, 158, -1, -1, 161, -1, 163, -1, -1, 7,
2570 8, 49, 10, 11, 12, 13, 14, 15, 16, 17,
2571 -1, 19, 20, -1, 22, 23, 24, -1, -1, -1,
Dale Johannesen172f3112008-02-20 21:15:43 +00002572 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
Devang Patel67909432008-03-03 18:58:47 +00002573 157, 158, -1, -1, 161, -1, 163, -1, -1, -1,
Devang Patel7990dc72008-02-20 22:40:23 +00002574 -1, 49, -1, -1, -1, -1, -1, -1, -1, -1,
Devang Patel67909432008-03-03 18:58:47 +00002575 -1, 157, 158, -1, -1, 161, -1, 163, 7, 8,
2576 -1, 10, 11, 12, 13, 14, 15, 16, 17, -1,
2577 19, 20, -1, 22, 23, 24, -1, -1, -1, -1,
2578 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2579 -1, 157, 158, -1, -1, 161, -1, 163, -1, -1,
2580 49, -1, -1, -1, -1, -1, -1, -1, -1, 157,
2581 158, -1, -1, 161, -1, 163, 7, 8, -1, 10,
2582 11, 12, 13, 14, 15, 16, 17, -1, 19, 20,
2583 -1, 22, 23, 24, -1, -1, -1, -1, -1, -1,
2584 -1, -1, -1, -1, -1, -1, -1, -1, -1, 157,
2585 158, -1, -1, 161, -1, 163, 7, 8, 49, 10,
2586 11, 12, 13, 14, 15, 16, 17, -1, 19, 20,
2587 -1, 22, 23, 24, 7, 8, -1, 10, 11, 12,
2588 13, 14, 15, 16, 17, -1, 19, 20, -1, 22,
2589 23, 24, -1, -1, -1, -1, -1, -1, 49, -1,
2590 -1, -1, -1, -1, -1, -1, -1, -1, 157, 158,
2591 -1, -1, 161, -1, 163, -1, 49, 7, 8, -1,
Dale Johannesen172f3112008-02-20 21:15:43 +00002592 10, 11, 12, 13, 14, 15, 16, 17, -1, 19,
2593 20, -1, 22, 23, 24, -1, -1, -1, -1, -1,
Devang Patel7990dc72008-02-20 22:40:23 +00002594 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
Devang Patel67909432008-03-03 18:58:47 +00002595 -1, -1, -1, -1, -1, -1, -1, -1, -1, 49,
2596 -1, -1, -1, -1, -1, -1, 157, 158, -1, -1,
2597 161, -1, 163, -1, -1, -1, -1, -1, -1, -1,
Dale Johannesen172f3112008-02-20 21:15:43 +00002598 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
Devang Patel67909432008-03-03 18:58:47 +00002599 -1, -1, -1, -1, -1, -1, -1, -1, 36, -1,
2600 -1, -1, -1, -1, -1, -1, 157, 158, -1, -1,
2601 161, -1, 163, -1, -1, -1, -1, -1, 56, 57,
2602 -1, -1, -1, -1, 157, 158, -1, -1, 161, -1,
2603 163, 69, 70, 71, 72, 73, 74, 75, 76, 77,
2604 78, 79, 80, 81, 82, 83, 84, 85, 86, 87,
2605 88, 89, 90, 91, -1, -1, -1, -1, -1, -1,
2606 -1, -1, -1, -1, -1, -1, -1, 157, 158, -1,
2607 -1, 161, -1, 163, 112, 113, 114, -1, -1, 117,
2608 118, 119, 120, 121, 122, 123, 124, 125, 126, 127,
2609 128, 129, 130, 131, 132, 133, 134, 135, 136
Chris Lattner38905612008-02-19 04:36:25 +00002610};
2611
2612/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
2613 symbol of state STATE-NUM. */
2614static const yytype_uint8 yystos[] =
2615{
2616 0, 19, 20, 22, 23, 24, 30, 31, 51, 55,
Devang Patel67909432008-03-03 18:58:47 +00002617 59, 174, 177, 178, 179, 180, 212, 213, 214, 216,
2618 215, 52, 67, 221, 154, 58, 154, 18, 154, 42,
2619 43, 44, 45, 46, 47, 48, 50, 149, 150, 151,
2620 181, 182, 183, 0, 214, 46, 48, 184, 231, 42,
2621 43, 44, 47, 185, 228, 230, 238, 154, 154, 158,
2622 222, 22, 220, 7, 8, 10, 11, 12, 13, 14,
2623 15, 16, 17, 49, 157, 158, 161, 163, 174, 178,
2624 199, 200, 234, 183, 183, 35, 37, 210, 183, 183,
2625 21, 68, 239, 240, 29, 164, 229, 239, 22, 22,
2626 22, 223, 152, 4, 4, 4, 163, 10, 164, 200,
2627 205, 54, 152, 176, 210, 210, 42, 44, 186, 32,
2628 33, 209, 61, 62, 63, 64, 65, 66, 187, 226,
2629 226, 68, 3, 4, 9, 25, 26, 27, 40, 41,
2630 58, 75, 76, 77, 78, 79, 80, 81, 82, 83,
2631 84, 85, 86, 87, 88, 89, 90, 91, 117, 118,
2632 119, 120, 121, 122, 123, 124, 125, 126, 127, 128,
2633 129, 131, 133, 134, 135, 161, 167, 168, 169, 207,
2634 233, 234, 235, 177, 243, 155, 160, 39, 200, 201,
2635 203, 204, 159, 159, 164, 205, 155, 164, 152, 204,
2636 156, 209, 209, 10, 123, 200, 202, 211, 11, 12,
2637 13, 14, 15, 16, 172, 173, 200, 206, 4, 202,
2638 28, 163, 227, 235, 60, 232, 92, 93, 94, 95,
2639 96, 97, 98, 99, 100, 101, 170, 26, 27, 98,
2640 99, 100, 101, 102, 103, 104, 105, 106, 107, 108,
2641 109, 110, 111, 171, 152, 152, 152, 152, 152, 206,
2642 208, 152, 152, 152, 36, 56, 57, 69, 70, 71,
2643 72, 73, 74, 90, 91, 112, 113, 114, 117, 130,
2644 131, 132, 133, 134, 135, 136, 167, 168, 169, 241,
2645 247, 248, 249, 250, 22, 189, 155, 153, 200, 200,
2646 162, 164, 200, 4, 153, 206, 200, 152, 234, 26,
2647 27, 3, 4, 5, 6, 9, 25, 40, 41, 158,
2648 161, 163, 165, 207, 234, 176, 178, 22, 152, 152,
2649 206, 206, 206, 206, 206, 155, 162, 206, 206, 206,
2650 56, 10, 200, 236, 237, 11, 17, 11, 172, 187,
2651 170, 171, 200, 200, 236, 200, 200, 244, 236, 236,
2652 236, 236, 236, 200, 200, 200, 236, 187, 115, 116,
2653 53, 119, 120, 137, 138, 140, 141, 143, 144, 145,
2654 188, 39, 201, 191, 160, 162, 162, 153, 191, 176,
2655 176, 211, 160, 208, 163, 208, 164, 208, 22, 217,
2656 152, 155, 206, 206, 246, 155, 155, 155, 155, 206,
2657 155, 155, 38, 235, 155, 235, 235, 235, 202, 200,
2658 200, 155, 194, 155, 194, 235, 158, 155, 155, 155,
2659 155, 155, 155, 234, 235, 235, 38, 202, 200, 236,
2660 4, 137, 138, 139, 142, 146, 147, 190, 218, 219,
2661 38, 160, 164, 200, 208, 162, 164, 155, 197, 39,
2662 200, 224, 225, 22, 155, 155, 153, 155, 206, 206,
2663 206, 206, 206, 206, 200, 236, 155, 155, 235, 235,
2664 235, 11, 53, 11, 246, 235, 158, 236, 200, 236,
2665 236, 236, 155, 155, 155, 200, 235, 235, 155, 197,
2666 197, 200, 162, 164, 34, 53, 195, 198, 189, 155,
2667 153, 206, 206, 236, 155, 153, 155, 155, 153, 153,
2668 153, 17, 17, 152, 155, 155, 235, 4, 235, 155,
2669 235, 155, 155, 155, 4, 235, 235, 152, 155, 194,
2670 200, 153, 162, 22, 4, 197, 174, 175, 39, 200,
2671 191, 153, 153, 206, 206, 206, 235, 235, 17, 200,
2672 245, 235, 235, 194, 194, 235, 155, 236, 236, 236,
2673 245, 235, 189, 195, 196, 153, 153, 153, 155, 158,
2674 189, 189, 153, 155, 160, 235, 153, 194, 175, 53,
2675 193, 17, 160, 172, 242, 119, 120, 235, 235, 191,
2676 17, 200, 160, 191, 4, 148, 192, 235, 233, 160,
2677 172, 189, 189, 38, 189, 189, 22, 155, 233, 17,
2678 235, 235, 17, 155, 235, 189, 189, 235, 17, 73,
2679 235, 17, 235
Chris Lattner38905612008-02-19 04:36:25 +00002680};
David Greene718fda32007-08-01 03:59:32 +00002681
Reid Spencer68a24bd2005-08-27 18:50:39 +00002682#define yyerrok (yyerrstatus = 0)
2683#define yyclearin (yychar = YYEMPTY)
Chris Lattner38905612008-02-19 04:36:25 +00002684#define YYEMPTY (-2)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002685#define YYEOF 0
Chris Lattner38905612008-02-19 04:36:25 +00002686
Reid Spencer68a24bd2005-08-27 18:50:39 +00002687#define YYACCEPT goto yyacceptlab
Chris Lattner38905612008-02-19 04:36:25 +00002688#define YYABORT goto yyabortlab
2689#define YYERROR goto yyerrorlab
2690
2691
2692/* Like YYERROR except do call yyerror. This remains here temporarily
2693 to ease the transition to the new meaning of YYERROR, for GCC.
Reid Spencer68a24bd2005-08-27 18:50:39 +00002694 Once GCC version 2 has supplanted version 1, this can go. */
Chris Lattner38905612008-02-19 04:36:25 +00002695
Reid Spencer68a24bd2005-08-27 18:50:39 +00002696#define YYFAIL goto yyerrlab
Chris Lattner38905612008-02-19 04:36:25 +00002697
Reid Spencer68a24bd2005-08-27 18:50:39 +00002698#define YYRECOVERING() (!!yyerrstatus)
Chris Lattner38905612008-02-19 04:36:25 +00002699
2700#define YYBACKUP(Token, Value) \
Reid Spencer68a24bd2005-08-27 18:50:39 +00002701do \
2702 if (yychar == YYEMPTY && yylen == 1) \
Chris Lattner38905612008-02-19 04:36:25 +00002703 { \
2704 yychar = (Token); \
2705 yylval = (Value); \
2706 yytoken = YYTRANSLATE (yychar); \
2707 YYPOPSTACK (1); \
Reid Spencer68a24bd2005-08-27 18:50:39 +00002708 goto yybackup; \
2709 } \
2710 else \
Chris Lattner38905612008-02-19 04:36:25 +00002711 { \
2712 yyerror (YY_("syntax error: cannot back up")); \
2713 YYERROR; \
2714 } \
2715while (YYID (0))
2716
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002717
Reid Spencer68a24bd2005-08-27 18:50:39 +00002718#define YYTERROR 1
2719#define YYERRCODE 256
2720
Chris Lattner38905612008-02-19 04:36:25 +00002721
2722/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
2723 If N is 0, then set CURRENT to the empty location which ends
2724 the previous symbol: RHS[0] (always defined). */
2725
2726#define YYRHSLOC(Rhs, K) ((Rhs)[K])
2727#ifndef YYLLOC_DEFAULT
2728# define YYLLOC_DEFAULT(Current, Rhs, N) \
2729 do \
2730 if (YYID (N)) \
2731 { \
2732 (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \
2733 (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \
2734 (Current).last_line = YYRHSLOC (Rhs, N).last_line; \
2735 (Current).last_column = YYRHSLOC (Rhs, N).last_column; \
2736 } \
2737 else \
2738 { \
2739 (Current).first_line = (Current).last_line = \
2740 YYRHSLOC (Rhs, 0).last_line; \
2741 (Current).first_column = (Current).last_column = \
2742 YYRHSLOC (Rhs, 0).last_column; \
2743 } \
2744 while (YYID (0))
Reid Spencer68a24bd2005-08-27 18:50:39 +00002745#endif
2746
Chris Lattner38905612008-02-19 04:36:25 +00002747
2748/* YY_LOCATION_PRINT -- Print the location on the stream.
2749 This macro was not mandated originally: define only if we know
2750 we won't break user code: when these are the locations we know. */
2751
2752#ifndef YY_LOCATION_PRINT
Devang Patel4c3f8442008-02-20 19:13:10 +00002753# if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL
Chris Lattner38905612008-02-19 04:36:25 +00002754# define YY_LOCATION_PRINT(File, Loc) \
2755 fprintf (File, "%d.%d-%d.%d", \
2756 (Loc).first_line, (Loc).first_column, \
2757 (Loc).last_line, (Loc).last_column)
2758# else
2759# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
2760# endif
2761#endif
2762
2763
2764/* YYLEX -- calling `yylex' with the right arguments. */
2765
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00002766#ifdef YYLEX_PARAM
Chris Lattner38905612008-02-19 04:36:25 +00002767# define YYLEX yylex (YYLEX_PARAM)
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00002768#else
Chris Lattner38905612008-02-19 04:36:25 +00002769# define YYLEX yylex ()
Scott Michel15dcd8e2008-01-30 03:10:00 +00002770#endif
Chris Lattner38905612008-02-19 04:36:25 +00002771
2772/* Enable debugging if requested. */
2773#if YYDEBUG
2774
2775# ifndef YYFPRINTF
2776# include <stdio.h> /* INFRINGES ON USER NAME SPACE */
2777# define YYFPRINTF fprintf
2778# endif
2779
2780# define YYDPRINTF(Args) \
2781do { \
2782 if (yydebug) \
2783 YYFPRINTF Args; \
2784} while (YYID (0))
2785
2786# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
2787do { \
2788 if (yydebug) \
2789 { \
2790 YYFPRINTF (stderr, "%s ", Title); \
2791 yy_symbol_print (stderr, \
2792 Type, Value); \
2793 YYFPRINTF (stderr, "\n"); \
2794 } \
2795} while (YYID (0))
2796
2797
2798/*--------------------------------.
2799| Print this symbol on YYOUTPUT. |
2800`--------------------------------*/
2801
2802/*ARGSUSED*/
2803#if (defined __STDC__ || defined __C99__FUNC__ \
2804 || defined __cplusplus || defined _MSC_VER)
2805static void
2806yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
Scott Michel15dcd8e2008-01-30 03:10:00 +00002807#else
Chris Lattner38905612008-02-19 04:36:25 +00002808static void
2809yy_symbol_value_print (yyoutput, yytype, yyvaluep)
2810 FILE *yyoutput;
2811 int yytype;
2812 YYSTYPE const * const yyvaluep;
Scott Michel15dcd8e2008-01-30 03:10:00 +00002813#endif
Chris Lattner38905612008-02-19 04:36:25 +00002814{
2815 if (!yyvaluep)
2816 return;
2817# ifdef YYPRINT
2818 if (yytype < YYNTOKENS)
2819 YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
2820# else
2821 YYUSE (yyoutput);
2822# endif
2823 switch (yytype)
2824 {
2825 default:
2826 break;
2827 }
2828}
2829
2830
2831/*--------------------------------.
2832| Print this symbol on YYOUTPUT. |
2833`--------------------------------*/
2834
2835#if (defined __STDC__ || defined __C99__FUNC__ \
2836 || defined __cplusplus || defined _MSC_VER)
2837static void
2838yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
2839#else
2840static void
2841yy_symbol_print (yyoutput, yytype, yyvaluep)
2842 FILE *yyoutput;
2843 int yytype;
2844 YYSTYPE const * const yyvaluep;
Christopher Lamba8ed9bf2007-12-11 09:02:08 +00002845#endif
Chris Lattner38905612008-02-19 04:36:25 +00002846{
2847 if (yytype < YYNTOKENS)
2848 YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
2849 else
2850 YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
Scott Michel7f9ba9b2008-01-30 02:55:46 +00002851
Chris Lattner38905612008-02-19 04:36:25 +00002852 yy_symbol_value_print (yyoutput, yytype, yyvaluep);
2853 YYFPRINTF (yyoutput, ")");
2854}
Scott Michel7f9ba9b2008-01-30 02:55:46 +00002855
Chris Lattner38905612008-02-19 04:36:25 +00002856/*------------------------------------------------------------------.
2857| yy_stack_print -- Print the state stack from its BOTTOM up to its |
2858| TOP (included). |
2859`------------------------------------------------------------------*/
Scott Michel7f9ba9b2008-01-30 02:55:46 +00002860
Chris Lattner38905612008-02-19 04:36:25 +00002861#if (defined __STDC__ || defined __C99__FUNC__ \
2862 || defined __cplusplus || defined _MSC_VER)
2863static void
2864yy_stack_print (yytype_int16 *bottom, yytype_int16 *top)
2865#else
2866static void
2867yy_stack_print (bottom, top)
2868 yytype_int16 *bottom;
2869 yytype_int16 *top;
Christopher Lamba8ed9bf2007-12-11 09:02:08 +00002870#endif
Chris Lattner38905612008-02-19 04:36:25 +00002871{
2872 YYFPRINTF (stderr, "Stack now");
2873 for (; bottom <= top; ++bottom)
2874 YYFPRINTF (stderr, " %d", *bottom);
2875 YYFPRINTF (stderr, "\n");
2876}
Scott Michel7f9ba9b2008-01-30 02:55:46 +00002877
Chris Lattner38905612008-02-19 04:36:25 +00002878# define YY_STACK_PRINT(Bottom, Top) \
2879do { \
2880 if (yydebug) \
2881 yy_stack_print ((Bottom), (Top)); \
2882} while (YYID (0))
Scott Michel7f9ba9b2008-01-30 02:55:46 +00002883
Chris Lattner38905612008-02-19 04:36:25 +00002884
2885/*------------------------------------------------.
2886| Report that the YYRULE is going to be reduced. |
2887`------------------------------------------------*/
2888
2889#if (defined __STDC__ || defined __C99__FUNC__ \
2890 || defined __cplusplus || defined _MSC_VER)
2891static void
2892yy_reduce_print (YYSTYPE *yyvsp, int yyrule)
2893#else
2894static void
2895yy_reduce_print (yyvsp, yyrule)
2896 YYSTYPE *yyvsp;
2897 int yyrule;
Dale Johannesencdd509a2007-09-07 21:07:57 +00002898#endif
Chris Lattner38905612008-02-19 04:36:25 +00002899{
2900 int yynrhs = yyr2[yyrule];
2901 int yyi;
2902 unsigned long int yylno = yyrline[yyrule];
2903 YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
2904 yyrule - 1, yylno);
2905 /* The symbols being reduced. */
2906 for (yyi = 0; yyi < yynrhs; yyi++)
2907 {
2908 fprintf (stderr, " $%d = ", yyi + 1);
2909 yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
2910 &(yyvsp[(yyi + 1) - (yynrhs)])
2911 );
2912 fprintf (stderr, "\n");
2913 }
2914}
Anton Korobeynikovb9b977d2007-11-14 09:53:48 +00002915
Chris Lattner38905612008-02-19 04:36:25 +00002916# define YY_REDUCE_PRINT(Rule) \
2917do { \
2918 if (yydebug) \
2919 yy_reduce_print (yyvsp, Rule); \
2920} while (YYID (0))
Anton Korobeynikovb9b977d2007-11-14 09:53:48 +00002921
Chris Lattner38905612008-02-19 04:36:25 +00002922/* Nonzero means print parse trace. It is left uninitialized so that
2923 multiple parsers can coexist. */
2924int yydebug;
2925#else /* !YYDEBUG */
2926# define YYDPRINTF(Args)
2927# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
2928# define YY_STACK_PRINT(Bottom, Top)
2929# define YY_REDUCE_PRINT(Rule)
2930#endif /* !YYDEBUG */
2931
2932
2933/* YYINITDEPTH -- initial size of the parser's stacks. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00002934#ifndef YYINITDEPTH
Chris Lattner38905612008-02-19 04:36:25 +00002935# define YYINITDEPTH 200
Reid Spencer68a24bd2005-08-27 18:50:39 +00002936#endif
2937
Chris Lattner38905612008-02-19 04:36:25 +00002938/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
2939 if the built-in stack extension method is used).
Reid Spencer68a24bd2005-08-27 18:50:39 +00002940
Chris Lattner38905612008-02-19 04:36:25 +00002941 Do not make this value too large; the results are undefined if
2942 YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
2943 evaluated with infinite-precision integer arithmetic. */
David Greene718fda32007-08-01 03:59:32 +00002944
Reid Spencer68a24bd2005-08-27 18:50:39 +00002945#ifndef YYMAXDEPTH
Chris Lattner38905612008-02-19 04:36:25 +00002946# define YYMAXDEPTH 10000
Reid Spencer68a24bd2005-08-27 18:50:39 +00002947#endif
Chris Lattner38905612008-02-19 04:36:25 +00002948
Reid Spencer68a24bd2005-08-27 18:50:39 +00002949
2950
Chris Lattner38905612008-02-19 04:36:25 +00002951#if YYERROR_VERBOSE
Reid Spencer68a24bd2005-08-27 18:50:39 +00002952
Chris Lattner38905612008-02-19 04:36:25 +00002953# ifndef yystrlen
2954# if defined __GLIBC__ && defined _STRING_H
2955# define yystrlen strlen
2956# else
2957/* Return the length of YYSTR. */
2958#if (defined __STDC__ || defined __C99__FUNC__ \
2959 || defined __cplusplus || defined _MSC_VER)
2960static YYSIZE_T
2961yystrlen (const char *yystr)
Scott Michel7f9ba9b2008-01-30 02:55:46 +00002962#else
Chris Lattner38905612008-02-19 04:36:25 +00002963static YYSIZE_T
2964yystrlen (yystr)
2965 const char *yystr;
2966#endif
2967{
2968 YYSIZE_T yylen;
2969 for (yylen = 0; yystr[yylen]; yylen++)
2970 continue;
2971 return yylen;
2972}
2973# endif
2974# endif
2975
2976# ifndef yystpcpy
2977# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
2978# define yystpcpy stpcpy
2979# else
2980/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
2981 YYDEST. */
2982#if (defined __STDC__ || defined __C99__FUNC__ \
2983 || defined __cplusplus || defined _MSC_VER)
2984static char *
2985yystpcpy (char *yydest, const char *yysrc)
2986#else
2987static char *
2988yystpcpy (yydest, yysrc)
2989 char *yydest;
2990 const char *yysrc;
2991#endif
2992{
2993 char *yyd = yydest;
2994 const char *yys = yysrc;
2995
2996 while ((*yyd++ = *yys++) != '\0')
2997 continue;
2998
2999 return yyd - 1;
3000}
3001# endif
3002# endif
3003
3004# ifndef yytnamerr
3005/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
3006 quotes and backslashes, so that it's suitable for yyerror. The
3007 heuristic is that double-quoting is unnecessary unless the string
3008 contains an apostrophe, a comma, or backslash (other than
3009 backslash-backslash). YYSTR is taken from yytname. If YYRES is
3010 null, do not copy; instead, return the length of what the result
3011 would have been. */
3012static YYSIZE_T
3013yytnamerr (char *yyres, const char *yystr)
3014{
3015 if (*yystr == '"')
3016 {
3017 YYSIZE_T yyn = 0;
3018 char const *yyp = yystr;
3019
3020 for (;;)
3021 switch (*++yyp)
3022 {
3023 case '\'':
3024 case ',':
3025 goto do_not_strip_quotes;
3026
3027 case '\\':
3028 if (*++yyp != '\\')
3029 goto do_not_strip_quotes;
3030 /* Fall through. */
3031 default:
3032 if (yyres)
3033 yyres[yyn] = *yyp;
3034 yyn++;
3035 break;
3036
3037 case '"':
3038 if (yyres)
3039 yyres[yyn] = '\0';
3040 return yyn;
3041 }
3042 do_not_strip_quotes: ;
3043 }
3044
3045 if (! yyres)
3046 return yystrlen (yystr);
3047
3048 return yystpcpy (yyres, yystr) - yyres;
3049}
3050# endif
3051
3052/* Copy into YYRESULT an error message about the unexpected token
3053 YYCHAR while in state YYSTATE. Return the number of bytes copied,
3054 including the terminating null byte. If YYRESULT is null, do not
3055 copy anything; just return the number of bytes that would be
3056 copied. As a special case, return 0 if an ordinary "syntax error"
3057 message will do. Return YYSIZE_MAXIMUM if overflow occurs during
3058 size calculation. */
3059static YYSIZE_T
3060yysyntax_error (char *yyresult, int yystate, int yychar)
3061{
3062 int yyn = yypact[yystate];
3063
3064 if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
3065 return 0;
3066 else
3067 {
3068 int yytype = YYTRANSLATE (yychar);
3069 YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
3070 YYSIZE_T yysize = yysize0;
3071 YYSIZE_T yysize1;
3072 int yysize_overflow = 0;
3073 enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
3074 char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
3075 int yyx;
3076
3077# if 0
3078 /* This is so xgettext sees the translatable formats that are
3079 constructed on the fly. */
3080 YY_("syntax error, unexpected %s");
3081 YY_("syntax error, unexpected %s, expecting %s");
3082 YY_("syntax error, unexpected %s, expecting %s or %s");
3083 YY_("syntax error, unexpected %s, expecting %s or %s or %s");
3084 YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
3085# endif
3086 char *yyfmt;
3087 char const *yyf;
3088 static char const yyunexpected[] = "syntax error, unexpected %s";
3089 static char const yyexpecting[] = ", expecting %s";
3090 static char const yyor[] = " or %s";
3091 char yyformat[sizeof yyunexpected
3092 + sizeof yyexpecting - 1
3093 + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
3094 * (sizeof yyor - 1))];
3095 char const *yyprefix = yyexpecting;
3096
3097 /* Start YYX at -YYN if negative to avoid negative indexes in
3098 YYCHECK. */
3099 int yyxbegin = yyn < 0 ? -yyn : 0;
3100
3101 /* Stay within bounds of both yycheck and yytname. */
3102 int yychecklim = YYLAST - yyn + 1;
3103 int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
3104 int yycount = 1;
3105
3106 yyarg[0] = yytname[yytype];
3107 yyfmt = yystpcpy (yyformat, yyunexpected);
3108
3109 for (yyx = yyxbegin; yyx < yyxend; ++yyx)
3110 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
3111 {
3112 if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
3113 {
3114 yycount = 1;
3115 yysize = yysize0;
3116 yyformat[sizeof yyunexpected - 1] = '\0';
3117 break;
3118 }
3119 yyarg[yycount++] = yytname[yyx];
3120 yysize1 = yysize + yytnamerr (0, yytname[yyx]);
3121 yysize_overflow |= (yysize1 < yysize);
3122 yysize = yysize1;
3123 yyfmt = yystpcpy (yyfmt, yyprefix);
3124 yyprefix = yyor;
3125 }
3126
3127 yyf = YY_(yyformat);
3128 yysize1 = yysize + yystrlen (yyf);
3129 yysize_overflow |= (yysize1 < yysize);
3130 yysize = yysize1;
3131
3132 if (yysize_overflow)
3133 return YYSIZE_MAXIMUM;
3134
3135 if (yyresult)
3136 {
3137 /* Avoid sprintf, as that infringes on the user's name space.
3138 Don't have undefined behavior even if the translation
3139 produced a string with the wrong number of "%s"s. */
3140 char *yyp = yyresult;
3141 int yyi = 0;
3142 while ((*yyp = *yyf) != '\0')
3143 {
3144 if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
3145 {
3146 yyp += yytnamerr (yyp, yyarg[yyi++]);
3147 yyf += 2;
3148 }
3149 else
3150 {
3151 yyp++;
3152 yyf++;
3153 }
3154 }
3155 }
3156 return yysize;
3157 }
3158}
3159#endif /* YYERROR_VERBOSE */
3160
3161
3162/*-----------------------------------------------.
3163| Release the memory associated to this symbol. |
3164`-----------------------------------------------*/
3165
3166/*ARGSUSED*/
3167#if (defined __STDC__ || defined __C99__FUNC__ \
3168 || defined __cplusplus || defined _MSC_VER)
3169static void
3170yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
3171#else
3172static void
3173yydestruct (yymsg, yytype, yyvaluep)
3174 const char *yymsg;
3175 int yytype;
3176 YYSTYPE *yyvaluep;
3177#endif
3178{
3179 YYUSE (yyvaluep);
3180
3181 if (!yymsg)
3182 yymsg = "Deleting";
3183 YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
3184
3185 switch (yytype)
3186 {
3187
3188 default:
3189 break;
3190 }
3191}
3192
3193
3194/* Prevent warnings from -Wmissing-prototypes. */
3195
3196#ifdef YYPARSE_PARAM
3197#if defined __STDC__ || defined __cplusplus
3198int yyparse (void *YYPARSE_PARAM);
3199#else
3200int yyparse ();
3201#endif
3202#else /* ! YYPARSE_PARAM */
3203#if defined __STDC__ || defined __cplusplus
David Greene5fd22a82007-09-04 18:46:50 +00003204int yyparse (void);
Scott Michel15dcd8e2008-01-30 03:10:00 +00003205#else
Chris Lattner38905612008-02-19 04:36:25 +00003206int yyparse ();
Christopher Lamba8ed9bf2007-12-11 09:02:08 +00003207#endif
Chris Lattner38905612008-02-19 04:36:25 +00003208#endif /* ! YYPARSE_PARAM */
Anton Korobeynikovb9b977d2007-11-14 09:53:48 +00003209
Scott Michel7f9ba9b2008-01-30 02:55:46 +00003210
Chris Lattner38905612008-02-19 04:36:25 +00003211
3212/* The look-ahead symbol. */
3213int yychar;
3214
3215/* The semantic value of the look-ahead symbol. */
3216YYSTYPE yylval;
3217
3218/* Number of syntax errors so far. */
3219int yynerrs;
3220
3221
3222
3223/*----------.
3224| yyparse. |
3225`----------*/
3226
3227#ifdef YYPARSE_PARAM
3228#if (defined __STDC__ || defined __C99__FUNC__ \
3229 || defined __cplusplus || defined _MSC_VER)
3230int
3231yyparse (void *YYPARSE_PARAM)
3232#else
3233int
3234yyparse (YYPARSE_PARAM)
3235 void *YYPARSE_PARAM;
3236#endif
3237#else /* ! YYPARSE_PARAM */
3238#if (defined __STDC__ || defined __C99__FUNC__ \
3239 || defined __cplusplus || defined _MSC_VER)
3240int
3241yyparse (void)
3242#else
3243int
3244yyparse ()
3245
Scott Michel15dcd8e2008-01-30 03:10:00 +00003246#endif
3247#endif
Chris Lattner38905612008-02-19 04:36:25 +00003248{
3249
3250 int yystate;
3251 int yyn;
3252 int yyresult;
3253 /* Number of tokens to shift before error messages enabled. */
3254 int yyerrstatus;
3255 /* Look-ahead token as an internal (translated) token number. */
3256 int yytoken = 0;
3257#if YYERROR_VERBOSE
3258 /* Buffer for error messages, and its allocated size. */
3259 char yymsgbuf[128];
3260 char *yymsg = yymsgbuf;
3261 YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
Scott Michel15dcd8e2008-01-30 03:10:00 +00003262#endif
Scott Michel7f9ba9b2008-01-30 02:55:46 +00003263
Chris Lattner38905612008-02-19 04:36:25 +00003264 /* Three stacks and their tools:
3265 `yyss': related to states,
3266 `yyvs': related to semantic values,
3267 `yyls': related to locations.
3268
3269 Refer to the stacks thru separate pointers, to allow yyoverflow
3270 to reallocate them elsewhere. */
3271
3272 /* The state stack. */
3273 yytype_int16 yyssa[YYINITDEPTH];
3274 yytype_int16 *yyss = yyssa;
3275 yytype_int16 *yyssp;
3276
3277 /* The semantic value stack. */
3278 YYSTYPE yyvsa[YYINITDEPTH];
3279 YYSTYPE *yyvs = yyvsa;
3280 YYSTYPE *yyvsp;
3281
3282
3283
3284#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N))
3285
3286 YYSIZE_T yystacksize = YYINITDEPTH;
3287
3288 /* The variables used to return semantic value and location from the
3289 action routines. */
3290 YYSTYPE yyval;
3291
3292
3293 /* The number of symbols on the RHS of the reduced rule.
3294 Keep to zero when no symbol should be popped. */
3295 int yylen = 0;
3296
3297 YYDPRINTF ((stderr, "Starting parse\n"));
3298
Reid Spencer68a24bd2005-08-27 18:50:39 +00003299 yystate = 0;
3300 yyerrstatus = 0;
3301 yynerrs = 0;
3302 yychar = YYEMPTY; /* Cause a token to be read. */
3303
3304 /* Initialize stack pointers.
3305 Waste one element of value and location stack
3306 so that they stay on the same level as the state stack.
3307 The wasted elements are never initialized. */
3308
Chris Lattner38905612008-02-19 04:36:25 +00003309 yyssp = yyss;
Reid Spencer68a24bd2005-08-27 18:50:39 +00003310 yyvsp = yyvs;
3311
Chris Lattner38905612008-02-19 04:36:25 +00003312 goto yysetstate;
Jeff Cohen66c5fd62005-10-23 04:37:20 +00003313
Chris Lattner38905612008-02-19 04:36:25 +00003314/*------------------------------------------------------------.
3315| yynewstate -- Push a new state, which is found in yystate. |
3316`------------------------------------------------------------*/
3317 yynewstate:
3318 /* In all cases, when you get here, the value and location stacks
3319 have just been pushed. So pushing a state here evens the stacks. */
3320 yyssp++;
Reid Spencer68a24bd2005-08-27 18:50:39 +00003321
Chris Lattner38905612008-02-19 04:36:25 +00003322 yysetstate:
3323 *yyssp = yystate;
3324
3325 if (yyss + yystacksize - 1 <= yyssp)
Reid Spencer68a24bd2005-08-27 18:50:39 +00003326 {
3327 /* Get the current used size of the three stacks, in elements. */
Chris Lattner38905612008-02-19 04:36:25 +00003328 YYSIZE_T yysize = yyssp - yyss + 1;
Reid Spencer68a24bd2005-08-27 18:50:39 +00003329
3330#ifdef yyoverflow
Chris Lattner38905612008-02-19 04:36:25 +00003331 {
3332 /* Give user a chance to reallocate the stack. Use copies of
3333 these so that the &'s don't force the real ones into
3334 memory. */
3335 YYSTYPE *yyvs1 = yyvs;
3336 yytype_int16 *yyss1 = yyss;
Reid Spencer68a24bd2005-08-27 18:50:39 +00003337
Chris Lattner38905612008-02-19 04:36:25 +00003338
3339 /* Each stack pointer address is followed by the size of the
3340 data in use in that stack, in bytes. This used to be a
3341 conditional around just the two extra args, but that might
3342 be undefined if yyoverflow is a macro. */
3343 yyoverflow (YY_("memory exhausted"),
3344 &yyss1, yysize * sizeof (*yyssp),
3345 &yyvs1, yysize * sizeof (*yyvsp),
3346
3347 &yystacksize);
3348
3349 yyss = yyss1;
3350 yyvs = yyvs1;
3351 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00003352#else /* no yyoverflow */
Chris Lattner38905612008-02-19 04:36:25 +00003353# ifndef YYSTACK_RELOCATE
3354 goto yyexhaustedlab;
3355# else
Reid Spencer68a24bd2005-08-27 18:50:39 +00003356 /* Extend the stack our own way. */
Chris Lattner38905612008-02-19 04:36:25 +00003357 if (YYMAXDEPTH <= yystacksize)
3358 goto yyexhaustedlab;
Reid Spencer68a24bd2005-08-27 18:50:39 +00003359 yystacksize *= 2;
Chris Lattner38905612008-02-19 04:36:25 +00003360 if (YYMAXDEPTH < yystacksize)
Reid Spencer68a24bd2005-08-27 18:50:39 +00003361 yystacksize = YYMAXDEPTH;
Chris Lattner38905612008-02-19 04:36:25 +00003362
3363 {
3364 yytype_int16 *yyss1 = yyss;
3365 union yyalloc *yyptr =
3366 (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
3367 if (! yyptr)
3368 goto yyexhaustedlab;
3369 YYSTACK_RELOCATE (yyss);
3370 YYSTACK_RELOCATE (yyvs);
3371
3372# undef YYSTACK_RELOCATE
3373 if (yyss1 != yyssa)
3374 YYSTACK_FREE (yyss1);
3375 }
3376# endif
Reid Spencer68a24bd2005-08-27 18:50:39 +00003377#endif /* no yyoverflow */
3378
Chris Lattner38905612008-02-19 04:36:25 +00003379 yyssp = yyss + yysize - 1;
3380 yyvsp = yyvs + yysize - 1;
Reid Spencer68a24bd2005-08-27 18:50:39 +00003381
3382
Chris Lattner38905612008-02-19 04:36:25 +00003383 YYDPRINTF ((stderr, "Stack size increased to %lu\n",
3384 (unsigned long int) yystacksize));
3385
3386 if (yyss + yystacksize - 1 <= yyssp)
Reid Spencer68a24bd2005-08-27 18:50:39 +00003387 YYABORT;
3388 }
3389
Chris Lattner38905612008-02-19 04:36:25 +00003390 YYDPRINTF ((stderr, "Entering state %d\n", yystate));
Reid Spencer68a24bd2005-08-27 18:50:39 +00003391
3392 goto yybackup;
Reid Spencer68a24bd2005-08-27 18:50:39 +00003393
Chris Lattner38905612008-02-19 04:36:25 +00003394/*-----------.
3395| yybackup. |
3396`-----------*/
3397yybackup:
Andrew Lenharth6353e052006-12-08 18:07:09 +00003398
Chris Lattner38905612008-02-19 04:36:25 +00003399 /* Do appropriate processing given the current state. Read a
3400 look-ahead token if we need one and don't already have one. */
Reid Spencer7780acb2007-04-16 06:56:07 +00003401
Chris Lattner38905612008-02-19 04:36:25 +00003402 /* First try to decide what to do without reference to look-ahead token. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00003403 yyn = yypact[yystate];
Chris Lattner38905612008-02-19 04:36:25 +00003404 if (yyn == YYPACT_NINF)
Reid Spencer68a24bd2005-08-27 18:50:39 +00003405 goto yydefault;
3406
Chris Lattner38905612008-02-19 04:36:25 +00003407 /* Not known => get a look-ahead token if don't already have one. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00003408
Chris Lattner38905612008-02-19 04:36:25 +00003409 /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00003410 if (yychar == YYEMPTY)
3411 {
Chris Lattner38905612008-02-19 04:36:25 +00003412 YYDPRINTF ((stderr, "Reading a token: "));
Reid Spencer68a24bd2005-08-27 18:50:39 +00003413 yychar = YYLEX;
3414 }
3415
Chris Lattner38905612008-02-19 04:36:25 +00003416 if (yychar <= YYEOF)
Reid Spencer68a24bd2005-08-27 18:50:39 +00003417 {
Chris Lattner38905612008-02-19 04:36:25 +00003418 yychar = yytoken = YYEOF;
3419 YYDPRINTF ((stderr, "Now at end of input.\n"));
Reid Spencer68a24bd2005-08-27 18:50:39 +00003420 }
3421 else
3422 {
Chris Lattner38905612008-02-19 04:36:25 +00003423 yytoken = YYTRANSLATE (yychar);
3424 YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
Reid Spencer68a24bd2005-08-27 18:50:39 +00003425 }
3426
Chris Lattner38905612008-02-19 04:36:25 +00003427 /* If the proper action on seeing token YYTOKEN is to reduce or to
3428 detect an error, take that action. */
3429 yyn += yytoken;
3430 if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
Reid Spencer68a24bd2005-08-27 18:50:39 +00003431 goto yydefault;
3432 yyn = yytable[yyn];
Chris Lattner38905612008-02-19 04:36:25 +00003433 if (yyn <= 0)
Reid Spencer68a24bd2005-08-27 18:50:39 +00003434 {
Chris Lattner38905612008-02-19 04:36:25 +00003435 if (yyn == 0 || yyn == YYTABLE_NINF)
Reid Spencer68a24bd2005-08-27 18:50:39 +00003436 goto yyerrlab;
3437 yyn = -yyn;
3438 goto yyreduce;
3439 }
3440
3441 if (yyn == YYFINAL)
3442 YYACCEPT;
3443
Chris Lattner38905612008-02-19 04:36:25 +00003444 /* Count tokens shifted since error; after three, turn off error
3445 status. */
3446 if (yyerrstatus)
3447 yyerrstatus--;
Dale Johannesencdd509a2007-09-07 21:07:57 +00003448
Chris Lattner38905612008-02-19 04:36:25 +00003449 /* Shift the look-ahead token. */
3450 YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003451
Chris Lattner38905612008-02-19 04:36:25 +00003452 /* Discard the shifted token unless it is eof. */
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003453 if (yychar != YYEOF)
3454 yychar = YYEMPTY;
3455
Scott Michel15dcd8e2008-01-30 03:10:00 +00003456 yystate = yyn;
Chris Lattner38905612008-02-19 04:36:25 +00003457 *++yyvsp = yylval;
3458
Reid Spencer68a24bd2005-08-27 18:50:39 +00003459 goto yynewstate;
3460
Scott Michel15dcd8e2008-01-30 03:10:00 +00003461
Chris Lattner38905612008-02-19 04:36:25 +00003462/*-----------------------------------------------------------.
3463| yydefault -- do the default action for the current state. |
3464`-----------------------------------------------------------*/
3465yydefault:
Reid Spencer68a24bd2005-08-27 18:50:39 +00003466 yyn = yydefact[yystate];
3467 if (yyn == 0)
3468 goto yyerrlab;
Chris Lattner38905612008-02-19 04:36:25 +00003469 goto yyreduce;
Reid Spencer68a24bd2005-08-27 18:50:39 +00003470
Chris Lattner38905612008-02-19 04:36:25 +00003471
3472/*-----------------------------.
3473| yyreduce -- Do a reduction. |
3474`-----------------------------*/
Reid Spencer68a24bd2005-08-27 18:50:39 +00003475yyreduce:
Chris Lattner38905612008-02-19 04:36:25 +00003476 /* yyn is the number of a rule to reduce with. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00003477 yylen = yyr2[yyn];
3478
Chris Lattner38905612008-02-19 04:36:25 +00003479 /* If YYLEN is nonzero, implement the default value of the action:
3480 `$$ = $1'.
3481
3482 Otherwise, the following line sets YYVAL to garbage.
3483 This behavior is undocumented and Bison
3484 users should not rely upon it. Assigning to YYVAL
3485 unconditionally makes the parser a bit smaller, and it avoids a
3486 GCC warning that YYVAL may be used uninitialized. */
3487 yyval = yyvsp[1-yylen];
3488
3489
3490 YY_REDUCE_PRINT (yyn);
3491 switch (yyn)
Reid Spencer68a24bd2005-08-27 18:50:39 +00003492 {
Chris Lattner38905612008-02-19 04:36:25 +00003493 case 29:
Devang Patel67909432008-03-03 18:58:47 +00003494#line 1119 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003495 { (yyval.IPredicate) = ICmpInst::ICMP_EQ; ;}
3496 break;
Reid Spencer41dff5e2007-01-26 08:05:27 +00003497
Chris Lattner38905612008-02-19 04:36:25 +00003498 case 30:
Devang Patel67909432008-03-03 18:58:47 +00003499#line 1119 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003500 { (yyval.IPredicate) = ICmpInst::ICMP_NE; ;}
3501 break;
Reid Spencerb0fcf8f2007-01-17 02:48:45 +00003502
Chris Lattner38905612008-02-19 04:36:25 +00003503 case 31:
Devang Patel67909432008-03-03 18:58:47 +00003504#line 1120 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003505 { (yyval.IPredicate) = ICmpInst::ICMP_SLT; ;}
3506 break;
Reid Spencerb0fcf8f2007-01-17 02:48:45 +00003507
Chris Lattner38905612008-02-19 04:36:25 +00003508 case 32:
Devang Patel67909432008-03-03 18:58:47 +00003509#line 1120 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003510 { (yyval.IPredicate) = ICmpInst::ICMP_SGT; ;}
3511 break;
Reid Spencerb0fcf8f2007-01-17 02:48:45 +00003512
Chris Lattner38905612008-02-19 04:36:25 +00003513 case 33:
Devang Patel67909432008-03-03 18:58:47 +00003514#line 1121 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003515 { (yyval.IPredicate) = ICmpInst::ICMP_SLE; ;}
3516 break;
Reid Spencerb0fcf8f2007-01-17 02:48:45 +00003517
Chris Lattner38905612008-02-19 04:36:25 +00003518 case 34:
Devang Patel67909432008-03-03 18:58:47 +00003519#line 1121 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003520 { (yyval.IPredicate) = ICmpInst::ICMP_SGE; ;}
3521 break;
3522
3523 case 35:
Devang Patel67909432008-03-03 18:58:47 +00003524#line 1122 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003525 { (yyval.IPredicate) = ICmpInst::ICMP_ULT; ;}
3526 break;
3527
3528 case 36:
Devang Patel67909432008-03-03 18:58:47 +00003529#line 1122 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003530 { (yyval.IPredicate) = ICmpInst::ICMP_UGT; ;}
3531 break;
3532
3533 case 37:
Devang Patel67909432008-03-03 18:58:47 +00003534#line 1123 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003535 { (yyval.IPredicate) = ICmpInst::ICMP_ULE; ;}
3536 break;
3537
3538 case 38:
Devang Patel67909432008-03-03 18:58:47 +00003539#line 1123 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003540 { (yyval.IPredicate) = ICmpInst::ICMP_UGE; ;}
3541 break;
3542
3543 case 39:
Devang Patel67909432008-03-03 18:58:47 +00003544#line 1127 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003545 { (yyval.FPredicate) = FCmpInst::FCMP_OEQ; ;}
3546 break;
3547
3548 case 40:
Devang Patel67909432008-03-03 18:58:47 +00003549#line 1127 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003550 { (yyval.FPredicate) = FCmpInst::FCMP_ONE; ;}
3551 break;
3552
3553 case 41:
Devang Patel67909432008-03-03 18:58:47 +00003554#line 1128 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003555 { (yyval.FPredicate) = FCmpInst::FCMP_OLT; ;}
3556 break;
3557
3558 case 42:
Devang Patel67909432008-03-03 18:58:47 +00003559#line 1128 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003560 { (yyval.FPredicate) = FCmpInst::FCMP_OGT; ;}
3561 break;
3562
3563 case 43:
Devang Patel67909432008-03-03 18:58:47 +00003564#line 1129 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003565 { (yyval.FPredicate) = FCmpInst::FCMP_OLE; ;}
3566 break;
3567
3568 case 44:
Devang Patel67909432008-03-03 18:58:47 +00003569#line 1129 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003570 { (yyval.FPredicate) = FCmpInst::FCMP_OGE; ;}
3571 break;
3572
3573 case 45:
Devang Patel67909432008-03-03 18:58:47 +00003574#line 1130 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003575 { (yyval.FPredicate) = FCmpInst::FCMP_ORD; ;}
3576 break;
3577
3578 case 46:
Devang Patel67909432008-03-03 18:58:47 +00003579#line 1130 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003580 { (yyval.FPredicate) = FCmpInst::FCMP_UNO; ;}
3581 break;
3582
3583 case 47:
Devang Patel67909432008-03-03 18:58:47 +00003584#line 1131 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003585 { (yyval.FPredicate) = FCmpInst::FCMP_UEQ; ;}
3586 break;
3587
3588 case 48:
Devang Patel67909432008-03-03 18:58:47 +00003589#line 1131 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003590 { (yyval.FPredicate) = FCmpInst::FCMP_UNE; ;}
3591 break;
3592
3593 case 49:
Devang Patel67909432008-03-03 18:58:47 +00003594#line 1132 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003595 { (yyval.FPredicate) = FCmpInst::FCMP_ULT; ;}
3596 break;
3597
3598 case 50:
Devang Patel67909432008-03-03 18:58:47 +00003599#line 1132 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003600 { (yyval.FPredicate) = FCmpInst::FCMP_UGT; ;}
3601 break;
3602
3603 case 51:
Devang Patel67909432008-03-03 18:58:47 +00003604#line 1133 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003605 { (yyval.FPredicate) = FCmpInst::FCMP_ULE; ;}
3606 break;
3607
3608 case 52:
Devang Patel67909432008-03-03 18:58:47 +00003609#line 1133 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003610 { (yyval.FPredicate) = FCmpInst::FCMP_UGE; ;}
3611 break;
3612
3613 case 53:
Devang Patel67909432008-03-03 18:58:47 +00003614#line 1134 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003615 { (yyval.FPredicate) = FCmpInst::FCMP_TRUE; ;}
3616 break;
3617
3618 case 54:
Devang Patel67909432008-03-03 18:58:47 +00003619#line 1135 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003620 { (yyval.FPredicate) = FCmpInst::FCMP_FALSE; ;}
3621 break;
3622
3623 case 65:
Devang Patel67909432008-03-03 18:58:47 +00003624#line 1144 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003625 { (yyval.StrVal) = 0; ;}
3626 break;
3627
3628 case 66:
Devang Patel67909432008-03-03 18:58:47 +00003629#line 1146 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003630 { (yyval.UIntVal)=(yyvsp[(3) - (4)].UInt64Val); ;}
3631 break;
3632
3633 case 67:
Devang Patel67909432008-03-03 18:58:47 +00003634#line 1147 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003635 { (yyval.UIntVal)=0; ;}
3636 break;
3637
3638 case 68:
Devang Patel67909432008-03-03 18:58:47 +00003639#line 1151 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003640 {
3641 (yyval.StrVal) = (yyvsp[(1) - (2)].StrVal);
Reid Spencer41dff5e2007-01-26 08:05:27 +00003642 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00003643 ;}
3644 break;
3645
3646 case 69:
Devang Patel67909432008-03-03 18:58:47 +00003647#line 1155 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003648 {
3649 (yyval.StrVal) = 0;
Christopher Lambbf3348d2007-12-12 08:45:45 +00003650 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00003651 ;}
3652 break;
3653
3654 case 73:
Devang Patel67909432008-03-03 18:58:47 +00003655#line 1163 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003656 {
3657 (yyval.StrVal) = 0;
Christopher Lambbf3348d2007-12-12 08:45:45 +00003658 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00003659 ;}
3660 break;
3661
3662 case 74:
Devang Patel67909432008-03-03 18:58:47 +00003663#line 1168 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003664 {
3665 (yyval.StrVal) = (yyvsp[(1) - (2)].StrVal);
Christopher Lambbf3348d2007-12-12 08:45:45 +00003666 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00003667 ;}
3668 break;
3669
3670 case 75:
Devang Patel67909432008-03-03 18:58:47 +00003671#line 1174 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003672 { (yyval.Linkage) = GlobalValue::InternalLinkage; ;}
3673 break;
3674
3675 case 76:
Devang Patel67909432008-03-03 18:58:47 +00003676#line 1175 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003677 { (yyval.Linkage) = GlobalValue::WeakLinkage; ;}
3678 break;
3679
3680 case 77:
Devang Patel67909432008-03-03 18:58:47 +00003681#line 1176 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003682 { (yyval.Linkage) = GlobalValue::LinkOnceLinkage; ;}
3683 break;
3684
3685 case 78:
Devang Patel67909432008-03-03 18:58:47 +00003686#line 1177 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003687 { (yyval.Linkage) = GlobalValue::AppendingLinkage; ;}
3688 break;
3689
3690 case 79:
Devang Patel67909432008-03-03 18:58:47 +00003691#line 1178 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003692 { (yyval.Linkage) = GlobalValue::DLLExportLinkage; ;}
3693 break;
3694
3695 case 80:
Devang Patel67909432008-03-03 18:58:47 +00003696#line 1182 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003697 { (yyval.Linkage) = GlobalValue::DLLImportLinkage; ;}
3698 break;
3699
3700 case 81:
Devang Patel67909432008-03-03 18:58:47 +00003701#line 1183 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003702 { (yyval.Linkage) = GlobalValue::ExternalWeakLinkage; ;}
3703 break;
3704
3705 case 82:
Devang Patel67909432008-03-03 18:58:47 +00003706#line 1184 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003707 { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;}
3708 break;
3709
3710 case 83:
Devang Patel67909432008-03-03 18:58:47 +00003711#line 1188 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003712 { (yyval.Visibility) = GlobalValue::DefaultVisibility; ;}
3713 break;
3714
3715 case 84:
Devang Patel67909432008-03-03 18:58:47 +00003716#line 1189 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003717 { (yyval.Visibility) = GlobalValue::DefaultVisibility; ;}
3718 break;
3719
3720 case 85:
Devang Patel67909432008-03-03 18:58:47 +00003721#line 1190 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003722 { (yyval.Visibility) = GlobalValue::HiddenVisibility; ;}
3723 break;
3724
3725 case 86:
Devang Patel67909432008-03-03 18:58:47 +00003726#line 1191 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003727 { (yyval.Visibility) = GlobalValue::ProtectedVisibility; ;}
3728 break;
3729
3730 case 87:
Devang Patel67909432008-03-03 18:58:47 +00003731#line 1195 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003732 { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;}
3733 break;
3734
3735 case 88:
Devang Patel67909432008-03-03 18:58:47 +00003736#line 1196 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003737 { (yyval.Linkage) = GlobalValue::DLLImportLinkage; ;}
3738 break;
3739
3740 case 89:
Devang Patel67909432008-03-03 18:58:47 +00003741#line 1197 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003742 { (yyval.Linkage) = GlobalValue::ExternalWeakLinkage; ;}
3743 break;
3744
3745 case 90:
Devang Patel67909432008-03-03 18:58:47 +00003746#line 1201 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003747 { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;}
3748 break;
3749
3750 case 91:
Devang Patel67909432008-03-03 18:58:47 +00003751#line 1202 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003752 { (yyval.Linkage) = GlobalValue::InternalLinkage; ;}
3753 break;
3754
3755 case 92:
Devang Patel67909432008-03-03 18:58:47 +00003756#line 1203 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003757 { (yyval.Linkage) = GlobalValue::LinkOnceLinkage; ;}
3758 break;
3759
3760 case 93:
Devang Patel67909432008-03-03 18:58:47 +00003761#line 1204 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003762 { (yyval.Linkage) = GlobalValue::WeakLinkage; ;}
3763 break;
3764
3765 case 94:
Devang Patel67909432008-03-03 18:58:47 +00003766#line 1205 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003767 { (yyval.Linkage) = GlobalValue::DLLExportLinkage; ;}
3768 break;
3769
3770 case 95:
Devang Patel67909432008-03-03 18:58:47 +00003771#line 1209 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003772 { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;}
3773 break;
3774
3775 case 96:
Devang Patel67909432008-03-03 18:58:47 +00003776#line 1210 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003777 { (yyval.Linkage) = GlobalValue::WeakLinkage; ;}
3778 break;
3779
3780 case 97:
Devang Patel67909432008-03-03 18:58:47 +00003781#line 1211 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003782 { (yyval.Linkage) = GlobalValue::InternalLinkage; ;}
3783 break;
3784
3785 case 98:
Devang Patel67909432008-03-03 18:58:47 +00003786#line 1214 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003787 { (yyval.UIntVal) = CallingConv::C; ;}
3788 break;
3789
3790 case 99:
Devang Patel67909432008-03-03 18:58:47 +00003791#line 1215 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003792 { (yyval.UIntVal) = CallingConv::C; ;}
3793 break;
3794
3795 case 100:
Devang Patel67909432008-03-03 18:58:47 +00003796#line 1216 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003797 { (yyval.UIntVal) = CallingConv::Fast; ;}
3798 break;
3799
3800 case 101:
Devang Patel67909432008-03-03 18:58:47 +00003801#line 1217 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003802 { (yyval.UIntVal) = CallingConv::Cold; ;}
3803 break;
3804
3805 case 102:
Devang Patel67909432008-03-03 18:58:47 +00003806#line 1218 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003807 { (yyval.UIntVal) = CallingConv::X86_StdCall; ;}
3808 break;
3809
3810 case 103:
Devang Patel67909432008-03-03 18:58:47 +00003811#line 1219 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003812 { (yyval.UIntVal) = CallingConv::X86_FastCall; ;}
3813 break;
3814
3815 case 104:
Devang Patel67909432008-03-03 18:58:47 +00003816#line 1220 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003817 {
3818 if ((unsigned)(yyvsp[(2) - (2)].UInt64Val) != (yyvsp[(2) - (2)].UInt64Val))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003819 GEN_ERROR("Calling conv too large");
Chris Lattner38905612008-02-19 04:36:25 +00003820 (yyval.UIntVal) = (yyvsp[(2) - (2)].UInt64Val);
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003821 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00003822 ;}
3823 break;
3824
3825 case 105:
Devang Patel67909432008-03-03 18:58:47 +00003826#line 1227 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003827 { (yyval.ParamAttrs) = ParamAttr::ZExt; ;}
3828 break;
3829
3830 case 106:
Devang Patel67909432008-03-03 18:58:47 +00003831#line 1228 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003832 { (yyval.ParamAttrs) = ParamAttr::ZExt; ;}
3833 break;
3834
3835 case 107:
Devang Patel67909432008-03-03 18:58:47 +00003836#line 1229 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003837 { (yyval.ParamAttrs) = ParamAttr::SExt; ;}
3838 break;
3839
3840 case 108:
Devang Patel67909432008-03-03 18:58:47 +00003841#line 1230 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003842 { (yyval.ParamAttrs) = ParamAttr::SExt; ;}
3843 break;
3844
3845 case 109:
Devang Patel67909432008-03-03 18:58:47 +00003846#line 1231 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003847 { (yyval.ParamAttrs) = ParamAttr::InReg; ;}
3848 break;
3849
3850 case 110:
Devang Patel67909432008-03-03 18:58:47 +00003851#line 1232 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003852 { (yyval.ParamAttrs) = ParamAttr::StructRet; ;}
3853 break;
3854
3855 case 111:
Devang Patel67909432008-03-03 18:58:47 +00003856#line 1233 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003857 { (yyval.ParamAttrs) = ParamAttr::NoAlias; ;}
3858 break;
3859
3860 case 112:
Devang Patel67909432008-03-03 18:58:47 +00003861#line 1234 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003862 { (yyval.ParamAttrs) = ParamAttr::ByVal; ;}
3863 break;
3864
3865 case 113:
Devang Patel67909432008-03-03 18:58:47 +00003866#line 1235 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003867 { (yyval.ParamAttrs) = ParamAttr::Nest; ;}
3868 break;
3869
3870 case 114:
Devang Patel67909432008-03-03 18:58:47 +00003871#line 1236 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Dale Johannesendc6c0f12008-02-22 17:50:51 +00003872 { (yyval.ParamAttrs) =
3873 ParamAttr::constructAlignmentFromInt((yyvsp[(2) - (2)].UInt64Val)); ;}
Chris Lattner38905612008-02-19 04:36:25 +00003874 break;
3875
3876 case 115:
Devang Patel67909432008-03-03 18:58:47 +00003877#line 1240 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003878 { (yyval.ParamAttrs) = ParamAttr::None; ;}
3879 break;
3880
Dale Johannesen172f3112008-02-20 21:15:43 +00003881 case 116:
Devang Patel67909432008-03-03 18:58:47 +00003882#line 1241 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003883 {
3884 (yyval.ParamAttrs) = (yyvsp[(1) - (2)].ParamAttrs) | (yyvsp[(2) - (2)].ParamAttrs);
3885 ;}
3886 break;
3887
Dale Johannesen172f3112008-02-20 21:15:43 +00003888 case 117:
Devang Patel67909432008-03-03 18:58:47 +00003889#line 1246 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Dale Johannesen172f3112008-02-20 21:15:43 +00003890 { (yyval.ParamAttrs) = ParamAttr::NoReturn; ;}
3891 break;
3892
3893 case 118:
Devang Patel67909432008-03-03 18:58:47 +00003894#line 1247 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Dale Johannesen172f3112008-02-20 21:15:43 +00003895 { (yyval.ParamAttrs) = ParamAttr::NoUnwind; ;}
3896 break;
3897
3898 case 119:
Devang Patel67909432008-03-03 18:58:47 +00003899#line 1248 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Dale Johannesen172f3112008-02-20 21:15:43 +00003900 { (yyval.ParamAttrs) = ParamAttr::ZExt; ;}
3901 break;
3902
3903 case 120:
Devang Patel67909432008-03-03 18:58:47 +00003904#line 1249 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Dale Johannesen172f3112008-02-20 21:15:43 +00003905 { (yyval.ParamAttrs) = ParamAttr::SExt; ;}
3906 break;
3907
3908 case 121:
Devang Patel67909432008-03-03 18:58:47 +00003909#line 1250 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Dale Johannesen172f3112008-02-20 21:15:43 +00003910 { (yyval.ParamAttrs) = ParamAttr::ReadNone; ;}
3911 break;
3912
3913 case 122:
Devang Patel67909432008-03-03 18:58:47 +00003914#line 1251 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Dale Johannesen172f3112008-02-20 21:15:43 +00003915 { (yyval.ParamAttrs) = ParamAttr::ReadOnly; ;}
3916 break;
3917
3918 case 123:
Devang Patel67909432008-03-03 18:58:47 +00003919#line 1254 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Dale Johannesen172f3112008-02-20 21:15:43 +00003920 { (yyval.ParamAttrs) = ParamAttr::None; ;}
3921 break;
3922
Chris Lattner38905612008-02-19 04:36:25 +00003923 case 124:
Devang Patel67909432008-03-03 18:58:47 +00003924#line 1255 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Dale Johannesen172f3112008-02-20 21:15:43 +00003925 {
3926 (yyval.ParamAttrs) = (yyvsp[(1) - (2)].ParamAttrs) | (yyvsp[(2) - (2)].ParamAttrs);
3927 ;}
Chris Lattner38905612008-02-19 04:36:25 +00003928 break;
3929
3930 case 125:
Devang Patel67909432008-03-03 18:58:47 +00003931#line 1260 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Dale Johannesen172f3112008-02-20 21:15:43 +00003932 { (yyval.StrVal) = 0; ;}
3933 break;
3934
3935 case 126:
Devang Patel67909432008-03-03 18:58:47 +00003936#line 1261 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003937 {
3938 (yyval.StrVal) = (yyvsp[(2) - (2)].StrVal);
3939 ;}
3940 break;
3941
Dale Johannesen172f3112008-02-20 21:15:43 +00003942 case 127:
Devang Patel67909432008-03-03 18:58:47 +00003943#line 1268 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003944 { (yyval.UIntVal) = 0; ;}
3945 break;
3946
Dale Johannesen172f3112008-02-20 21:15:43 +00003947 case 128:
Devang Patel67909432008-03-03 18:58:47 +00003948#line 1269 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003949 {
3950 (yyval.UIntVal) = (yyvsp[(2) - (2)].UInt64Val);
3951 if ((yyval.UIntVal) != 0 && !isPowerOf2_32((yyval.UIntVal)))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003952 GEN_ERROR("Alignment must be a power of two");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003953 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00003954;}
3955 break;
3956
Dale Johannesen172f3112008-02-20 21:15:43 +00003957 case 129:
Devang Patel67909432008-03-03 18:58:47 +00003958#line 1275 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003959 { (yyval.UIntVal) = 0; ;}
3960 break;
3961
Dale Johannesen172f3112008-02-20 21:15:43 +00003962 case 130:
Devang Patel67909432008-03-03 18:58:47 +00003963#line 1276 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003964 {
3965 (yyval.UIntVal) = (yyvsp[(3) - (3)].UInt64Val);
3966 if ((yyval.UIntVal) != 0 && !isPowerOf2_32((yyval.UIntVal)))
Christopher Lambbf3348d2007-12-12 08:45:45 +00003967 GEN_ERROR("Alignment must be a power of two");
3968 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00003969;}
3970 break;
3971
Dale Johannesen172f3112008-02-20 21:15:43 +00003972 case 131:
Devang Patel67909432008-03-03 18:58:47 +00003973#line 1285 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003974 {
3975 for (unsigned i = 0, e = (yyvsp[(2) - (2)].StrVal)->length(); i != e; ++i)
3976 if ((*(yyvsp[(2) - (2)].StrVal))[i] == '"' || (*(yyvsp[(2) - (2)].StrVal))[i] == '\\')
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003977 GEN_ERROR("Invalid character in section name");
Chris Lattner38905612008-02-19 04:36:25 +00003978 (yyval.StrVal) = (yyvsp[(2) - (2)].StrVal);
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003979 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00003980;}
3981 break;
3982
Dale Johannesen172f3112008-02-20 21:15:43 +00003983 case 132:
Devang Patel67909432008-03-03 18:58:47 +00003984#line 1293 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003985 { (yyval.StrVal) = 0; ;}
3986 break;
3987
Dale Johannesen172f3112008-02-20 21:15:43 +00003988 case 133:
Devang Patel67909432008-03-03 18:58:47 +00003989#line 1294 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003990 { (yyval.StrVal) = (yyvsp[(1) - (1)].StrVal); ;}
3991 break;
3992
Chris Lattner38905612008-02-19 04:36:25 +00003993 case 134:
Devang Patel67909432008-03-03 18:58:47 +00003994#line 1299 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003995 {;}
3996 break;
3997
3998 case 135:
Devang Patel67909432008-03-03 18:58:47 +00003999#line 1300 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Dale Johannesen172f3112008-02-20 21:15:43 +00004000 {;}
4001 break;
4002
4003 case 136:
Devang Patel67909432008-03-03 18:58:47 +00004004#line 1301 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004005 {
4006 CurGV->setSection(*(yyvsp[(1) - (1)].StrVal));
4007 delete (yyvsp[(1) - (1)].StrVal);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004008 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004009 ;}
4010 break;
4011
Dale Johannesen172f3112008-02-20 21:15:43 +00004012 case 137:
Devang Patel67909432008-03-03 18:58:47 +00004013#line 1306 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004014 {
4015 if ((yyvsp[(2) - (2)].UInt64Val) != 0 && !isPowerOf2_32((yyvsp[(2) - (2)].UInt64Val)))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004016 GEN_ERROR("Alignment must be a power of two");
Chris Lattner38905612008-02-19 04:36:25 +00004017 CurGV->setAlignment((yyvsp[(2) - (2)].UInt64Val));
Reid Spencer41dff5e2007-01-26 08:05:27 +00004018 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004019 ;}
4020 break;
4021
Dale Johannesen172f3112008-02-20 21:15:43 +00004022 case 145:
Devang Patel67909432008-03-03 18:58:47 +00004023#line 1322 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004024 {
4025 (yyval.TypeVal) = new PATypeHolder(OpaqueType::get());
Reid Spencer41dff5e2007-01-26 08:05:27 +00004026 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004027 ;}
4028 break;
4029
Dale Johannesen172f3112008-02-20 21:15:43 +00004030 case 146:
Devang Patel67909432008-03-03 18:58:47 +00004031#line 1326 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004032 {
4033 (yyval.TypeVal) = new PATypeHolder((yyvsp[(1) - (1)].PrimType));
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004034 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004035 ;}
4036 break;
4037
Dale Johannesen172f3112008-02-20 21:15:43 +00004038 case 147:
Devang Patel67909432008-03-03 18:58:47 +00004039#line 1330 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004040 { // Pointer type?
4041 if (*(yyvsp[(1) - (3)].TypeVal) == Type::LabelTy)
Christopher Lambbf3348d2007-12-12 08:45:45 +00004042 GEN_ERROR("Cannot form a pointer to a basic block");
Chris Lattner38905612008-02-19 04:36:25 +00004043 (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(PointerType::get(*(yyvsp[(1) - (3)].TypeVal), (yyvsp[(2) - (3)].UIntVal))));
4044 delete (yyvsp[(1) - (3)].TypeVal);
Christopher Lambbf3348d2007-12-12 08:45:45 +00004045 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004046 ;}
4047 break;
4048
Dale Johannesen172f3112008-02-20 21:15:43 +00004049 case 148:
Devang Patel67909432008-03-03 18:58:47 +00004050#line 1337 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004051 { // Named types are also simple types...
4052 const Type* tmp = getTypeVal((yyvsp[(1) - (1)].ValIDVal));
Christopher Lamba8ed9bf2007-12-11 09:02:08 +00004053 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004054 (yyval.TypeVal) = new PATypeHolder(tmp);
4055 ;}
4056 break;
4057
Dale Johannesen172f3112008-02-20 21:15:43 +00004058 case 149:
Devang Patel67909432008-03-03 18:58:47 +00004059#line 1342 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004060 { // Type UpReference
4061 if ((yyvsp[(2) - (2)].UInt64Val) > (uint64_t)~0U) GEN_ERROR("Value out of range");
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004062 OpaqueType *OT = OpaqueType::get(); // Use temporary placeholder
Chris Lattner38905612008-02-19 04:36:25 +00004063 UpRefs.push_back(UpRefRecord((unsigned)(yyvsp[(2) - (2)].UInt64Val), OT)); // Add to vector...
4064 (yyval.TypeVal) = new PATypeHolder(OT);
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004065 UR_OUT("New Upreference!\n");
4066 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004067 ;}
4068 break;
4069
Dale Johannesen172f3112008-02-20 21:15:43 +00004070 case 150:
Devang Patel67909432008-03-03 18:58:47 +00004071#line 1350 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004072 {
Duncan Sandsdc024672007-11-27 13:23:08 +00004073 // Allow but ignore attributes on function types; this permits auto-upgrade.
4074 // FIXME: remove in LLVM 3.0.
Chris Lattner38905612008-02-19 04:36:25 +00004075 const Type* RetTy = *(yyvsp[(1) - (5)].TypeVal);
Anton Korobeynikov05e5a742007-12-03 21:01:29 +00004076 if (!(RetTy->isFirstClassType() || RetTy == Type::VoidTy ||
4077 isa<OpaqueType>(RetTy)))
Anton Korobeynikovc36284e2007-12-03 19:17:47 +00004078 GEN_ERROR("LLVM Functions cannot return aggregates");
Anton Korobeynikov05e5a742007-12-03 21:01:29 +00004079
Reid Spencer41dff5e2007-01-26 08:05:27 +00004080 std::vector<const Type*> Params;
Chris Lattner38905612008-02-19 04:36:25 +00004081 TypeWithAttrsList::iterator I = (yyvsp[(3) - (5)].TypeWithAttrsList)->begin(), E = (yyvsp[(3) - (5)].TypeWithAttrsList)->end();
Duncan Sandsdc024672007-11-27 13:23:08 +00004082 for (; I != E; ++I ) {
Reid Spencer66728ef2007-03-20 01:13:36 +00004083 const Type *Ty = I->Ty->get();
Reid Spencer66728ef2007-03-20 01:13:36 +00004084 Params.push_back(Ty);
Reid Spencer41dff5e2007-01-26 08:05:27 +00004085 }
Anton Korobeynikov05e5a742007-12-03 21:01:29 +00004086
Reid Spencer41dff5e2007-01-26 08:05:27 +00004087 bool isVarArg = Params.size() && Params.back() == Type::VoidTy;
4088 if (isVarArg) Params.pop_back();
4089
Anton Korobeynikov05e5a742007-12-03 21:01:29 +00004090 for (unsigned i = 0; i != Params.size(); ++i)
4091 if (!(Params[i]->isFirstClassType() || isa<OpaqueType>(Params[i])))
4092 GEN_ERROR("Function arguments must be value types!");
4093
4094 CHECK_FOR_ERROR
4095
Anton Korobeynikovc36284e2007-12-03 19:17:47 +00004096 FunctionType *FT = FunctionType::get(RetTy, Params, isVarArg);
Chris Lattner38905612008-02-19 04:36:25 +00004097 delete (yyvsp[(3) - (5)].TypeWithAttrsList); // Delete the argument list
4098 delete (yyvsp[(1) - (5)].TypeVal); // Delete the return type handle
4099 (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(FT));
Reid Spencere4d87aa2006-12-23 06:05:41 +00004100 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004101 ;}
4102 break;
4103
Dale Johannesen172f3112008-02-20 21:15:43 +00004104 case 151:
Devang Patel67909432008-03-03 18:58:47 +00004105#line 1380 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004106 {
Duncan Sandsdc024672007-11-27 13:23:08 +00004107 // Allow but ignore attributes on function types; this permits auto-upgrade.
4108 // FIXME: remove in LLVM 3.0.
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004109 std::vector<const Type*> Params;
Chris Lattner38905612008-02-19 04:36:25 +00004110 TypeWithAttrsList::iterator I = (yyvsp[(3) - (5)].TypeWithAttrsList)->begin(), E = (yyvsp[(3) - (5)].TypeWithAttrsList)->end();
Duncan Sandsdc024672007-11-27 13:23:08 +00004111 for ( ; I != E; ++I ) {
Reid Spencer66728ef2007-03-20 01:13:36 +00004112 const Type* Ty = I->Ty->get();
Reid Spencer66728ef2007-03-20 01:13:36 +00004113 Params.push_back(Ty);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004114 }
Anton Korobeynikov05e5a742007-12-03 21:01:29 +00004115
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004116 bool isVarArg = Params.size() && Params.back() == Type::VoidTy;
4117 if (isVarArg) Params.pop_back();
4118
Anton Korobeynikov05e5a742007-12-03 21:01:29 +00004119 for (unsigned i = 0; i != Params.size(); ++i)
4120 if (!(Params[i]->isFirstClassType() || isa<OpaqueType>(Params[i])))
4121 GEN_ERROR("Function arguments must be value types!");
4122
4123 CHECK_FOR_ERROR
4124
Chris Lattner38905612008-02-19 04:36:25 +00004125 FunctionType *FT = FunctionType::get((yyvsp[(1) - (5)].PrimType), Params, isVarArg);
4126 delete (yyvsp[(3) - (5)].TypeWithAttrsList); // Delete the argument list
4127 (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(FT));
Reid Spencer41dff5e2007-01-26 08:05:27 +00004128 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004129 ;}
4130 break;
4131
Dale Johannesen172f3112008-02-20 21:15:43 +00004132 case 152:
Devang Patel67909432008-03-03 18:58:47 +00004133#line 1405 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004134 { // Sized array type?
4135 (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(ArrayType::get(*(yyvsp[(4) - (5)].TypeVal), (unsigned)(yyvsp[(2) - (5)].UInt64Val))));
4136 delete (yyvsp[(4) - (5)].TypeVal);
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004137 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004138 ;}
4139 break;
4140
Dale Johannesen172f3112008-02-20 21:15:43 +00004141 case 153:
Devang Patel67909432008-03-03 18:58:47 +00004142#line 1410 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004143 { // Vector type?
4144 const llvm::Type* ElemTy = (yyvsp[(4) - (5)].TypeVal)->get();
4145 if ((unsigned)(yyvsp[(2) - (5)].UInt64Val) != (yyvsp[(2) - (5)].UInt64Val))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004146 GEN_ERROR("Unsigned result not equal to signed result");
4147 if (!ElemTy->isFloatingPoint() && !ElemTy->isInteger())
4148 GEN_ERROR("Element type of a VectorType must be primitive");
Chris Lattner38905612008-02-19 04:36:25 +00004149 (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(VectorType::get(*(yyvsp[(4) - (5)].TypeVal), (unsigned)(yyvsp[(2) - (5)].UInt64Val))));
4150 delete (yyvsp[(4) - (5)].TypeVal);
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004151 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004152 ;}
4153 break;
4154
Dale Johannesen172f3112008-02-20 21:15:43 +00004155 case 154:
Devang Patel67909432008-03-03 18:58:47 +00004156#line 1420 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004157 { // Structure type?
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004158 std::vector<const Type*> Elements;
Chris Lattner38905612008-02-19 04:36:25 +00004159 for (std::list<llvm::PATypeHolder>::iterator I = (yyvsp[(2) - (3)].TypeList)->begin(),
4160 E = (yyvsp[(2) - (3)].TypeList)->end(); I != E; ++I)
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004161 Elements.push_back(*I);
4162
Chris Lattner38905612008-02-19 04:36:25 +00004163 (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(StructType::get(Elements)));
4164 delete (yyvsp[(2) - (3)].TypeList);
Reid Spencer14310612006-12-31 05:40:51 +00004165 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004166 ;}
4167 break;
4168
Dale Johannesen172f3112008-02-20 21:15:43 +00004169 case 155:
Devang Patel67909432008-03-03 18:58:47 +00004170#line 1430 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004171 { // Empty structure type?
4172 (yyval.TypeVal) = new PATypeHolder(StructType::get(std::vector<const Type*>()));
Reid Spencer14310612006-12-31 05:40:51 +00004173 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004174 ;}
4175 break;
4176
Dale Johannesen172f3112008-02-20 21:15:43 +00004177 case 156:
Devang Patel67909432008-03-03 18:58:47 +00004178#line 1434 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004179 {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004180 std::vector<const Type*> Elements;
Chris Lattner38905612008-02-19 04:36:25 +00004181 for (std::list<llvm::PATypeHolder>::iterator I = (yyvsp[(3) - (5)].TypeList)->begin(),
4182 E = (yyvsp[(3) - (5)].TypeList)->end(); I != E; ++I)
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004183 Elements.push_back(*I);
4184
Chris Lattner38905612008-02-19 04:36:25 +00004185 (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(StructType::get(Elements, true)));
4186 delete (yyvsp[(3) - (5)].TypeList);
Reid Spencer41dff5e2007-01-26 08:05:27 +00004187 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004188 ;}
4189 break;
4190
Dale Johannesen172f3112008-02-20 21:15:43 +00004191 case 157:
Devang Patel67909432008-03-03 18:58:47 +00004192#line 1444 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004193 { // Empty structure type?
4194 (yyval.TypeVal) = new PATypeHolder(StructType::get(std::vector<const Type*>(), true));
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004195 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004196 ;}
4197 break;
4198
Dale Johannesen172f3112008-02-20 21:15:43 +00004199 case 158:
Devang Patel67909432008-03-03 18:58:47 +00004200#line 1451 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004201 {
Duncan Sandsdc024672007-11-27 13:23:08 +00004202 // Allow but ignore attributes on function types; this permits auto-upgrade.
4203 // FIXME: remove in LLVM 3.0.
Chris Lattner38905612008-02-19 04:36:25 +00004204 (yyval.TypeWithAttrs).Ty = (yyvsp[(1) - (2)].TypeVal);
4205 (yyval.TypeWithAttrs).Attrs = ParamAttr::None;
4206 ;}
4207 break;
4208
Dale Johannesen172f3112008-02-20 21:15:43 +00004209 case 159:
Devang Patel67909432008-03-03 18:58:47 +00004210#line 1460 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004211 {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004212 if (!UpRefs.empty())
Chris Lattner38905612008-02-19 04:36:25 +00004213 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (1)].TypeVal))->getDescription());
Devang Patel20071732008-02-23 01:17:37 +00004214 if (!(*(yyvsp[(1) - (1)].TypeVal))->isFirstClassType() && !isa<StructType>((yyvsp[(1) - (1)].TypeVal)->get()))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004215 GEN_ERROR("LLVM functions cannot return aggregate types");
Chris Lattner38905612008-02-19 04:36:25 +00004216 (yyval.TypeVal) = (yyvsp[(1) - (1)].TypeVal);
4217 ;}
4218 break;
4219
Dale Johannesen172f3112008-02-20 21:15:43 +00004220 case 160:
Devang Patel67909432008-03-03 18:58:47 +00004221#line 1467 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004222 {
4223 (yyval.TypeVal) = new PATypeHolder(Type::VoidTy);
4224 ;}
4225 break;
4226
Dale Johannesen172f3112008-02-20 21:15:43 +00004227 case 161:
Devang Patel67909432008-03-03 18:58:47 +00004228#line 1472 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004229 {
4230 (yyval.TypeWithAttrsList) = new TypeWithAttrsList();
4231 (yyval.TypeWithAttrsList)->push_back((yyvsp[(1) - (1)].TypeWithAttrs));
Reid Spencer3da59db2006-11-27 01:05:10 +00004232 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004233 ;}
4234 break;
4235
Dale Johannesen172f3112008-02-20 21:15:43 +00004236 case 162:
Devang Patel67909432008-03-03 18:58:47 +00004237#line 1477 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004238 {
4239 ((yyval.TypeWithAttrsList)=(yyvsp[(1) - (3)].TypeWithAttrsList))->push_back((yyvsp[(3) - (3)].TypeWithAttrs));
Reid Spencer41dff5e2007-01-26 08:05:27 +00004240 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004241 ;}
4242 break;
4243
Dale Johannesen172f3112008-02-20 21:15:43 +00004244 case 164:
Devang Patel67909432008-03-03 18:58:47 +00004245#line 1485 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004246 {
4247 (yyval.TypeWithAttrsList)=(yyvsp[(1) - (3)].TypeWithAttrsList);
Reid Spencer18da0722007-04-11 02:44:20 +00004248 TypeWithAttrs TWA; TWA.Attrs = ParamAttr::None;
Reid Spencer41dff5e2007-01-26 08:05:27 +00004249 TWA.Ty = new PATypeHolder(Type::VoidTy);
Chris Lattner38905612008-02-19 04:36:25 +00004250 (yyval.TypeWithAttrsList)->push_back(TWA);
Reid Spencer41dff5e2007-01-26 08:05:27 +00004251 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004252 ;}
4253 break;
4254
Dale Johannesen172f3112008-02-20 21:15:43 +00004255 case 165:
Devang Patel67909432008-03-03 18:58:47 +00004256#line 1492 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004257 {
4258 (yyval.TypeWithAttrsList) = new TypeWithAttrsList;
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004259 TypeWithAttrs TWA; TWA.Attrs = ParamAttr::None;
4260 TWA.Ty = new PATypeHolder(Type::VoidTy);
Chris Lattner38905612008-02-19 04:36:25 +00004261 (yyval.TypeWithAttrsList)->push_back(TWA);
Reid Spencer41dff5e2007-01-26 08:05:27 +00004262 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004263 ;}
4264 break;
4265
Dale Johannesen172f3112008-02-20 21:15:43 +00004266 case 166:
Devang Patel67909432008-03-03 18:58:47 +00004267#line 1499 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004268 {
4269 (yyval.TypeWithAttrsList) = new TypeWithAttrsList();
Reid Spencer41dff5e2007-01-26 08:05:27 +00004270 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004271 ;}
4272 break;
4273
Dale Johannesen172f3112008-02-20 21:15:43 +00004274 case 167:
Devang Patel67909432008-03-03 18:58:47 +00004275#line 1507 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004276 {
4277 (yyval.TypeList) = new std::list<PATypeHolder>();
4278 (yyval.TypeList)->push_back(*(yyvsp[(1) - (1)].TypeVal));
4279 delete (yyvsp[(1) - (1)].TypeVal);
Reid Spencer3da59db2006-11-27 01:05:10 +00004280 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004281 ;}
4282 break;
4283
Dale Johannesen172f3112008-02-20 21:15:43 +00004284 case 168:
Devang Patel67909432008-03-03 18:58:47 +00004285#line 1513 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004286 {
4287 ((yyval.TypeList)=(yyvsp[(1) - (3)].TypeList))->push_back(*(yyvsp[(3) - (3)].TypeVal));
4288 delete (yyvsp[(3) - (3)].TypeVal);
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004289 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004290 ;}
4291 break;
4292
Dale Johannesen172f3112008-02-20 21:15:43 +00004293 case 169:
Devang Patel67909432008-03-03 18:58:47 +00004294#line 1525 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004295 { // Nonempty unsized arr
Reid Spencer14310612006-12-31 05:40:51 +00004296 if (!UpRefs.empty())
Chris Lattner38905612008-02-19 04:36:25 +00004297 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (4)].TypeVal))->getDescription());
4298 const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[(1) - (4)].TypeVal)->get());
Reid Spencer68a24bd2005-08-27 18:50:39 +00004299 if (ATy == 0)
Reid Spencer61c83e02006-08-18 08:43:06 +00004300 GEN_ERROR("Cannot make array constant with type: '" +
Chris Lattner38905612008-02-19 04:36:25 +00004301 (*(yyvsp[(1) - (4)].TypeVal))->getDescription() + "'");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004302 const Type *ETy = ATy->getElementType();
4303 int NumElements = ATy->getNumElements();
4304
4305 // Verify that we have the correct size...
Chris Lattner38905612008-02-19 04:36:25 +00004306 if (NumElements != -1 && NumElements != (int)(yyvsp[(3) - (4)].ConstVector)->size())
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004307 GEN_ERROR("Type mismatch: constant sized array initialized with " +
Chris Lattner38905612008-02-19 04:36:25 +00004308 utostr((yyvsp[(3) - (4)].ConstVector)->size()) + " arguments, but has size of " +
Reid Spencerb5334b02007-02-05 10:18:06 +00004309 itostr(NumElements) + "");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004310
4311 // Verify all elements are correct type!
Chris Lattner38905612008-02-19 04:36:25 +00004312 for (unsigned i = 0; i < (yyvsp[(3) - (4)].ConstVector)->size(); i++) {
4313 if (ETy != (*(yyvsp[(3) - (4)].ConstVector))[i]->getType())
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004314 GEN_ERROR("Element #" + utostr(i) + " is not of type '" +
4315 ETy->getDescription() +"' as required!\nIt is of type '"+
Chris Lattner38905612008-02-19 04:36:25 +00004316 (*(yyvsp[(3) - (4)].ConstVector))[i]->getType()->getDescription() + "'.");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004317 }
4318
Chris Lattner38905612008-02-19 04:36:25 +00004319 (yyval.ConstVal) = ConstantArray::get(ATy, *(yyvsp[(3) - (4)].ConstVector));
4320 delete (yyvsp[(1) - (4)].TypeVal); delete (yyvsp[(3) - (4)].ConstVector);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004321 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004322 ;}
4323 break;
4324
Dale Johannesen172f3112008-02-20 21:15:43 +00004325 case 170:
Devang Patel67909432008-03-03 18:58:47 +00004326#line 1553 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004327 {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004328 if (!UpRefs.empty())
Chris Lattner38905612008-02-19 04:36:25 +00004329 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (3)].TypeVal))->getDescription());
4330 const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[(1) - (3)].TypeVal)->get());
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004331 if (ATy == 0)
4332 GEN_ERROR("Cannot make array constant with type: '" +
Chris Lattner38905612008-02-19 04:36:25 +00004333 (*(yyvsp[(1) - (3)].TypeVal))->getDescription() + "'");
Reid Spencer68a24bd2005-08-27 18:50:39 +00004334
Andrew Lenharth6353e052006-12-08 18:07:09 +00004335 int NumElements = ATy->getNumElements();
4336 if (NumElements != -1 && NumElements != 0)
4337 GEN_ERROR("Type mismatch: constant sized array initialized with 0"
Reid Spencerb5334b02007-02-05 10:18:06 +00004338 " arguments, but has size of " + itostr(NumElements) +"");
Chris Lattner38905612008-02-19 04:36:25 +00004339 (yyval.ConstVal) = ConstantArray::get(ATy, std::vector<Constant*>());
4340 delete (yyvsp[(1) - (3)].TypeVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00004341 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004342 ;}
4343 break;
4344
Dale Johannesen172f3112008-02-20 21:15:43 +00004345 case 171:
Devang Patel67909432008-03-03 18:58:47 +00004346#line 1569 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004347 {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004348 if (!UpRefs.empty())
Chris Lattner38905612008-02-19 04:36:25 +00004349 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (3)].TypeVal))->getDescription());
4350 const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[(1) - (3)].TypeVal)->get());
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004351 if (ATy == 0)
4352 GEN_ERROR("Cannot make array constant with type: '" +
Chris Lattner38905612008-02-19 04:36:25 +00004353 (*(yyvsp[(1) - (3)].TypeVal))->getDescription() + "'");
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004354
4355 int NumElements = ATy->getNumElements();
4356 const Type *ETy = ATy->getElementType();
Chris Lattner38905612008-02-19 04:36:25 +00004357 if (NumElements != -1 && NumElements != int((yyvsp[(3) - (3)].StrVal)->length()))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004358 GEN_ERROR("Can't build string constant of size " +
Chris Lattner38905612008-02-19 04:36:25 +00004359 itostr((int)((yyvsp[(3) - (3)].StrVal)->length())) +
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004360 " when array has size " + itostr(NumElements) + "");
4361 std::vector<Constant*> Vals;
4362 if (ETy == Type::Int8Ty) {
Chris Lattner38905612008-02-19 04:36:25 +00004363 for (unsigned i = 0; i < (yyvsp[(3) - (3)].StrVal)->length(); ++i)
4364 Vals.push_back(ConstantInt::get(ETy, (*(yyvsp[(3) - (3)].StrVal))[i]));
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004365 } else {
Chris Lattner38905612008-02-19 04:36:25 +00004366 delete (yyvsp[(3) - (3)].StrVal);
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004367 GEN_ERROR("Cannot build string arrays of non byte sized elements");
4368 }
Chris Lattner38905612008-02-19 04:36:25 +00004369 delete (yyvsp[(3) - (3)].StrVal);
4370 (yyval.ConstVal) = ConstantArray::get(ATy, Vals);
4371 delete (yyvsp[(1) - (3)].TypeVal);
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004372 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004373 ;}
4374 break;
4375
Dale Johannesen172f3112008-02-20 21:15:43 +00004376 case 172:
Devang Patel67909432008-03-03 18:58:47 +00004377#line 1596 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004378 { // Nonempty unsized arr
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004379 if (!UpRefs.empty())
Chris Lattner38905612008-02-19 04:36:25 +00004380 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (4)].TypeVal))->getDescription());
4381 const VectorType *PTy = dyn_cast<VectorType>((yyvsp[(1) - (4)].TypeVal)->get());
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004382 if (PTy == 0)
4383 GEN_ERROR("Cannot make packed constant with type: '" +
Chris Lattner38905612008-02-19 04:36:25 +00004384 (*(yyvsp[(1) - (4)].TypeVal))->getDescription() + "'");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004385 const Type *ETy = PTy->getElementType();
4386 int NumElements = PTy->getNumElements();
Reid Spencer41dff5e2007-01-26 08:05:27 +00004387
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004388 // Verify that we have the correct size...
Chris Lattner38905612008-02-19 04:36:25 +00004389 if (NumElements != -1 && NumElements != (int)(yyvsp[(3) - (4)].ConstVector)->size())
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004390 GEN_ERROR("Type mismatch: constant sized packed initialized with " +
Chris Lattner38905612008-02-19 04:36:25 +00004391 utostr((yyvsp[(3) - (4)].ConstVector)->size()) + " arguments, but has size of " +
Reid Spencerb5334b02007-02-05 10:18:06 +00004392 itostr(NumElements) + "");
Reid Spencer41dff5e2007-01-26 08:05:27 +00004393
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004394 // Verify all elements are correct type!
Chris Lattner38905612008-02-19 04:36:25 +00004395 for (unsigned i = 0; i < (yyvsp[(3) - (4)].ConstVector)->size(); i++) {
4396 if (ETy != (*(yyvsp[(3) - (4)].ConstVector))[i]->getType())
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004397 GEN_ERROR("Element #" + utostr(i) + " is not of type '" +
4398 ETy->getDescription() +"' as required!\nIt is of type '"+
Chris Lattner38905612008-02-19 04:36:25 +00004399 (*(yyvsp[(3) - (4)].ConstVector))[i]->getType()->getDescription() + "'.");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004400 }
Reid Spencer41dff5e2007-01-26 08:05:27 +00004401
Chris Lattner38905612008-02-19 04:36:25 +00004402 (yyval.ConstVal) = ConstantVector::get(PTy, *(yyvsp[(3) - (4)].ConstVector));
4403 delete (yyvsp[(1) - (4)].TypeVal); delete (yyvsp[(3) - (4)].ConstVector);
Reid Spencer41dff5e2007-01-26 08:05:27 +00004404 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004405 ;}
4406 break;
4407
Dale Johannesen172f3112008-02-20 21:15:43 +00004408 case 173:
Devang Patel67909432008-03-03 18:58:47 +00004409#line 1624 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004410 {
4411 const StructType *STy = dyn_cast<StructType>((yyvsp[(1) - (4)].TypeVal)->get());
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004412 if (STy == 0)
4413 GEN_ERROR("Cannot make struct constant with type: '" +
Chris Lattner38905612008-02-19 04:36:25 +00004414 (*(yyvsp[(1) - (4)].TypeVal))->getDescription() + "'");
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004415
Chris Lattner38905612008-02-19 04:36:25 +00004416 if ((yyvsp[(3) - (4)].ConstVector)->size() != STy->getNumContainedTypes())
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004417 GEN_ERROR("Illegal number of initializers for structure type");
4418
4419 // Check to ensure that constants are compatible with the type initializer!
Chris Lattner38905612008-02-19 04:36:25 +00004420 for (unsigned i = 0, e = (yyvsp[(3) - (4)].ConstVector)->size(); i != e; ++i)
4421 if ((*(yyvsp[(3) - (4)].ConstVector))[i]->getType() != STy->getElementType(i))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004422 GEN_ERROR("Expected type '" +
4423 STy->getElementType(i)->getDescription() +
4424 "' for element #" + utostr(i) +
4425 " of structure initializer");
4426
4427 // Check to ensure that Type is not packed
4428 if (STy->isPacked())
4429 GEN_ERROR("Unpacked Initializer to vector type '" +
4430 STy->getDescription() + "'");
4431
Chris Lattner38905612008-02-19 04:36:25 +00004432 (yyval.ConstVal) = ConstantStruct::get(STy, *(yyvsp[(3) - (4)].ConstVector));
4433 delete (yyvsp[(1) - (4)].TypeVal); delete (yyvsp[(3) - (4)].ConstVector);
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004434 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004435 ;}
4436 break;
4437
Dale Johannesen172f3112008-02-20 21:15:43 +00004438 case 174:
Devang Patel67909432008-03-03 18:58:47 +00004439#line 1650 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004440 {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004441 if (!UpRefs.empty())
Chris Lattner38905612008-02-19 04:36:25 +00004442 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (3)].TypeVal))->getDescription());
4443 const StructType *STy = dyn_cast<StructType>((yyvsp[(1) - (3)].TypeVal)->get());
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004444 if (STy == 0)
4445 GEN_ERROR("Cannot make struct constant with type: '" +
Chris Lattner38905612008-02-19 04:36:25 +00004446 (*(yyvsp[(1) - (3)].TypeVal))->getDescription() + "'");
Reid Spencer41dff5e2007-01-26 08:05:27 +00004447
4448 if (STy->getNumContainedTypes() != 0)
Reid Spencerb5334b02007-02-05 10:18:06 +00004449 GEN_ERROR("Illegal number of initializers for structure type");
Reid Spencer41dff5e2007-01-26 08:05:27 +00004450
4451 // Check to ensure that Type is not packed
4452 if (STy->isPacked())
Chris Lattner6cdc6822007-04-26 05:31:05 +00004453 GEN_ERROR("Unpacked Initializer to vector type '" +
4454 STy->getDescription() + "'");
Reid Spencer41dff5e2007-01-26 08:05:27 +00004455
Chris Lattner38905612008-02-19 04:36:25 +00004456 (yyval.ConstVal) = ConstantStruct::get(STy, std::vector<Constant*>());
4457 delete (yyvsp[(1) - (3)].TypeVal);
Reid Spencer41dff5e2007-01-26 08:05:27 +00004458 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004459 ;}
4460 break;
4461
Dale Johannesen172f3112008-02-20 21:15:43 +00004462 case 175:
Devang Patel67909432008-03-03 18:58:47 +00004463#line 1670 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004464 {
4465 const StructType *STy = dyn_cast<StructType>((yyvsp[(1) - (6)].TypeVal)->get());
Reid Spencer41dff5e2007-01-26 08:05:27 +00004466 if (STy == 0)
4467 GEN_ERROR("Cannot make struct constant with type: '" +
Chris Lattner38905612008-02-19 04:36:25 +00004468 (*(yyvsp[(1) - (6)].TypeVal))->getDescription() + "'");
Reid Spencer41dff5e2007-01-26 08:05:27 +00004469
Chris Lattner38905612008-02-19 04:36:25 +00004470 if ((yyvsp[(4) - (6)].ConstVector)->size() != STy->getNumContainedTypes())
Reid Spencerb5334b02007-02-05 10:18:06 +00004471 GEN_ERROR("Illegal number of initializers for structure type");
Reid Spencer41dff5e2007-01-26 08:05:27 +00004472
4473 // Check to ensure that constants are compatible with the type initializer!
Chris Lattner38905612008-02-19 04:36:25 +00004474 for (unsigned i = 0, e = (yyvsp[(4) - (6)].ConstVector)->size(); i != e; ++i)
4475 if ((*(yyvsp[(4) - (6)].ConstVector))[i]->getType() != STy->getElementType(i))
Reid Spencer41dff5e2007-01-26 08:05:27 +00004476 GEN_ERROR("Expected type '" +
4477 STy->getElementType(i)->getDescription() +
4478 "' for element #" + utostr(i) +
Reid Spencerb5334b02007-02-05 10:18:06 +00004479 " of structure initializer");
Reid Spencer41dff5e2007-01-26 08:05:27 +00004480
4481 // Check to ensure that Type is packed
4482 if (!STy->isPacked())
Chris Lattner32980692007-02-19 07:44:24 +00004483 GEN_ERROR("Vector initializer to non-vector type '" +
4484 STy->getDescription() + "'");
Reid Spencer41dff5e2007-01-26 08:05:27 +00004485
Chris Lattner38905612008-02-19 04:36:25 +00004486 (yyval.ConstVal) = ConstantStruct::get(STy, *(yyvsp[(4) - (6)].ConstVector));
4487 delete (yyvsp[(1) - (6)].TypeVal); delete (yyvsp[(4) - (6)].ConstVector);
Reid Spencer41dff5e2007-01-26 08:05:27 +00004488 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004489 ;}
4490 break;
4491
Dale Johannesen172f3112008-02-20 21:15:43 +00004492 case 176:
Devang Patel67909432008-03-03 18:58:47 +00004493#line 1696 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004494 {
Reid Spencer41dff5e2007-01-26 08:05:27 +00004495 if (!UpRefs.empty())
Chris Lattner38905612008-02-19 04:36:25 +00004496 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (5)].TypeVal))->getDescription());
4497 const StructType *STy = dyn_cast<StructType>((yyvsp[(1) - (5)].TypeVal)->get());
Reid Spencer41dff5e2007-01-26 08:05:27 +00004498 if (STy == 0)
4499 GEN_ERROR("Cannot make struct constant with type: '" +
Chris Lattner38905612008-02-19 04:36:25 +00004500 (*(yyvsp[(1) - (5)].TypeVal))->getDescription() + "'");
Reid Spencer41dff5e2007-01-26 08:05:27 +00004501
4502 if (STy->getNumContainedTypes() != 0)
Reid Spencerb5334b02007-02-05 10:18:06 +00004503 GEN_ERROR("Illegal number of initializers for structure type");
Reid Spencer41dff5e2007-01-26 08:05:27 +00004504
4505 // Check to ensure that Type is packed
4506 if (!STy->isPacked())
Chris Lattner32980692007-02-19 07:44:24 +00004507 GEN_ERROR("Vector initializer to non-vector type '" +
4508 STy->getDescription() + "'");
Reid Spencer41dff5e2007-01-26 08:05:27 +00004509
Chris Lattner38905612008-02-19 04:36:25 +00004510 (yyval.ConstVal) = ConstantStruct::get(STy, std::vector<Constant*>());
4511 delete (yyvsp[(1) - (5)].TypeVal);
Reid Spencer41dff5e2007-01-26 08:05:27 +00004512 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004513 ;}
4514 break;
4515
Dale Johannesen172f3112008-02-20 21:15:43 +00004516 case 177:
Devang Patel67909432008-03-03 18:58:47 +00004517#line 1716 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004518 {
Reid Spencer41dff5e2007-01-26 08:05:27 +00004519 if (!UpRefs.empty())
Chris Lattner38905612008-02-19 04:36:25 +00004520 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (2)].TypeVal))->getDescription());
4521 const PointerType *PTy = dyn_cast<PointerType>((yyvsp[(1) - (2)].TypeVal)->get());
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004522 if (PTy == 0)
4523 GEN_ERROR("Cannot make null pointer constant with type: '" +
Chris Lattner38905612008-02-19 04:36:25 +00004524 (*(yyvsp[(1) - (2)].TypeVal))->getDescription() + "'");
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004525
Chris Lattner38905612008-02-19 04:36:25 +00004526 (yyval.ConstVal) = ConstantPointerNull::get(PTy);
4527 delete (yyvsp[(1) - (2)].TypeVal);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004528 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004529 ;}
4530 break;
4531
Dale Johannesen172f3112008-02-20 21:15:43 +00004532 case 178:
Devang Patel67909432008-03-03 18:58:47 +00004533#line 1728 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004534 {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004535 if (!UpRefs.empty())
Chris Lattner38905612008-02-19 04:36:25 +00004536 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (2)].TypeVal))->getDescription());
4537 (yyval.ConstVal) = UndefValue::get((yyvsp[(1) - (2)].TypeVal)->get());
4538 delete (yyvsp[(1) - (2)].TypeVal);
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004539 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004540 ;}
4541 break;
4542
Dale Johannesen172f3112008-02-20 21:15:43 +00004543 case 179:
Devang Patel67909432008-03-03 18:58:47 +00004544#line 1735 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004545 {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004546 if (!UpRefs.empty())
Chris Lattner38905612008-02-19 04:36:25 +00004547 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (2)].TypeVal))->getDescription());
4548 const PointerType *Ty = dyn_cast<PointerType>((yyvsp[(1) - (2)].TypeVal)->get());
Reid Spencer68a24bd2005-08-27 18:50:39 +00004549 if (Ty == 0)
Devang Patel5a970972008-02-19 22:27:01 +00004550 GEN_ERROR("Global const reference must be a pointer type " + (*(yyvsp[(1) - (2)].TypeVal))->getDescription());
Reid Spencer68a24bd2005-08-27 18:50:39 +00004551
4552 // ConstExprs can exist in the body of a function, thus creating
4553 // GlobalValues whenever they refer to a variable. Because we are in
Reid Spencer93c40032007-03-19 18:40:50 +00004554 // the context of a function, getExistingVal will search the functions
Reid Spencer68a24bd2005-08-27 18:50:39 +00004555 // symbol table instead of the module symbol table for the global symbol,
4556 // which throws things all off. To get around this, we just tell
Reid Spencer93c40032007-03-19 18:40:50 +00004557 // getExistingVal that we are at global scope here.
Reid Spencer68a24bd2005-08-27 18:50:39 +00004558 //
4559 Function *SavedCurFn = CurFun.CurrentFunction;
4560 CurFun.CurrentFunction = 0;
4561
Chris Lattner38905612008-02-19 04:36:25 +00004562 Value *V = getExistingVal(Ty, (yyvsp[(2) - (2)].ValIDVal));
Reid Spencer5b7e7532006-09-28 19:28:24 +00004563 CHECK_FOR_ERROR
Reid Spencer68a24bd2005-08-27 18:50:39 +00004564
4565 CurFun.CurrentFunction = SavedCurFn;
4566
4567 // If this is an initializer for a constant pointer, which is referencing a
4568 // (currently) undefined variable, create a stub now that shall be replaced
4569 // in the future with the right type of variable.
4570 //
4571 if (V == 0) {
Reid Spencera9720f52007-02-05 17:04:00 +00004572 assert(isa<PointerType>(Ty) && "Globals may only be used as pointers!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00004573 const PointerType *PT = cast<PointerType>(Ty);
4574
4575 // First check to see if the forward references value is already created!
4576 PerModuleInfo::GlobalRefsType::iterator I =
Chris Lattner38905612008-02-19 04:36:25 +00004577 CurModule.GlobalRefs.find(std::make_pair(PT, (yyvsp[(2) - (2)].ValIDVal)));
Reid Spencer68a24bd2005-08-27 18:50:39 +00004578
4579 if (I != CurModule.GlobalRefs.end()) {
4580 V = I->second; // Placeholder already exists, use it...
Chris Lattner38905612008-02-19 04:36:25 +00004581 (yyvsp[(2) - (2)].ValIDVal).destroy();
Reid Spencer68a24bd2005-08-27 18:50:39 +00004582 } else {
4583 std::string Name;
Chris Lattner38905612008-02-19 04:36:25 +00004584 if ((yyvsp[(2) - (2)].ValIDVal).Type == ValID::GlobalName)
4585 Name = (yyvsp[(2) - (2)].ValIDVal).getName();
4586 else if ((yyvsp[(2) - (2)].ValIDVal).Type != ValID::GlobalID)
Reid Spencer41dff5e2007-01-26 08:05:27 +00004587 GEN_ERROR("Invalid reference to global");
Reid Spencer68a24bd2005-08-27 18:50:39 +00004588
4589 // Create the forward referenced global.
4590 GlobalValue *GV;
4591 if (const FunctionType *FTy =
4592 dyn_cast<FunctionType>(PT->getElementType())) {
Chris Lattner6cdc6822007-04-26 05:31:05 +00004593 GV = new Function(FTy, GlobalValue::ExternalWeakLinkage, Name,
Reid Spencer68a24bd2005-08-27 18:50:39 +00004594 CurModule.CurrentModule);
4595 } else {
4596 GV = new GlobalVariable(PT->getElementType(), false,
Chris Lattner6cdc6822007-04-26 05:31:05 +00004597 GlobalValue::ExternalWeakLinkage, 0,
Reid Spencer68a24bd2005-08-27 18:50:39 +00004598 Name, CurModule.CurrentModule);
4599 }
4600
4601 // Keep track of the fact that we have a forward ref to recycle it
Chris Lattner38905612008-02-19 04:36:25 +00004602 CurModule.GlobalRefs.insert(std::make_pair(std::make_pair(PT, (yyvsp[(2) - (2)].ValIDVal)), GV));
Reid Spencer68a24bd2005-08-27 18:50:39 +00004603 V = GV;
4604 }
4605 }
4606
Chris Lattner38905612008-02-19 04:36:25 +00004607 (yyval.ConstVal) = cast<GlobalValue>(V);
4608 delete (yyvsp[(1) - (2)].TypeVal); // Free the type handle
Reid Spencer61c83e02006-08-18 08:43:06 +00004609 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004610 ;}
4611 break;
4612
Dale Johannesen172f3112008-02-20 21:15:43 +00004613 case 180:
Devang Patel67909432008-03-03 18:58:47 +00004614#line 1801 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004615 {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004616 if (!UpRefs.empty())
Chris Lattner38905612008-02-19 04:36:25 +00004617 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (2)].TypeVal))->getDescription());
4618 if ((yyvsp[(1) - (2)].TypeVal)->get() != (yyvsp[(2) - (2)].ConstVal)->getType())
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004619 GEN_ERROR("Mismatched types for constant expression: " +
Chris Lattner38905612008-02-19 04:36:25 +00004620 (*(yyvsp[(1) - (2)].TypeVal))->getDescription() + " and " + (yyvsp[(2) - (2)].ConstVal)->getType()->getDescription());
4621 (yyval.ConstVal) = (yyvsp[(2) - (2)].ConstVal);
4622 delete (yyvsp[(1) - (2)].TypeVal);
Reid Spencer41dff5e2007-01-26 08:05:27 +00004623 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004624 ;}
4625 break;
4626
Dale Johannesen172f3112008-02-20 21:15:43 +00004627 case 181:
Devang Patel67909432008-03-03 18:58:47 +00004628#line 1811 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004629 {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004630 if (!UpRefs.empty())
Chris Lattner38905612008-02-19 04:36:25 +00004631 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (2)].TypeVal))->getDescription());
4632 const Type *Ty = (yyvsp[(1) - (2)].TypeVal)->get();
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004633 if (isa<FunctionType>(Ty) || Ty == Type::LabelTy || isa<OpaqueType>(Ty))
4634 GEN_ERROR("Cannot create a null initialized value of this type");
Chris Lattner38905612008-02-19 04:36:25 +00004635 (yyval.ConstVal) = Constant::getNullValue(Ty);
4636 delete (yyvsp[(1) - (2)].TypeVal);
Reid Spencer41dff5e2007-01-26 08:05:27 +00004637 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004638 ;}
4639 break;
4640
Dale Johannesen172f3112008-02-20 21:15:43 +00004641 case 182:
Devang Patel67909432008-03-03 18:58:47 +00004642#line 1821 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004643 { // integral constants
4644 if (!ConstantInt::isValueValidForType((yyvsp[(1) - (2)].PrimType), (yyvsp[(2) - (2)].SInt64Val)))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004645 GEN_ERROR("Constant value doesn't fit in type");
Chris Lattner38905612008-02-19 04:36:25 +00004646 (yyval.ConstVal) = ConstantInt::get((yyvsp[(1) - (2)].PrimType), (yyvsp[(2) - (2)].SInt64Val), true);
Reid Spencer38c91a92007-02-28 02:24:54 +00004647 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004648 ;}
4649 break;
4650
Dale Johannesen172f3112008-02-20 21:15:43 +00004651 case 183:
Devang Patel67909432008-03-03 18:58:47 +00004652#line 1827 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004653 { // arbitrary precision integer constants
4654 uint32_t BitWidth = cast<IntegerType>((yyvsp[(1) - (2)].PrimType))->getBitWidth();
4655 if ((yyvsp[(2) - (2)].APIntVal)->getBitWidth() > BitWidth) {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004656 GEN_ERROR("Constant value does not fit in type");
4657 }
Chris Lattner38905612008-02-19 04:36:25 +00004658 (yyvsp[(2) - (2)].APIntVal)->sextOrTrunc(BitWidth);
4659 (yyval.ConstVal) = ConstantInt::get(*(yyvsp[(2) - (2)].APIntVal));
4660 delete (yyvsp[(2) - (2)].APIntVal);
Reid Spencer41dff5e2007-01-26 08:05:27 +00004661 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004662 ;}
4663 break;
4664
Dale Johannesen172f3112008-02-20 21:15:43 +00004665 case 184:
Devang Patel67909432008-03-03 18:58:47 +00004666#line 1837 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004667 { // integral constants
4668 if (!ConstantInt::isValueValidForType((yyvsp[(1) - (2)].PrimType), (yyvsp[(2) - (2)].UInt64Val)))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004669 GEN_ERROR("Constant value doesn't fit in type");
Chris Lattner38905612008-02-19 04:36:25 +00004670 (yyval.ConstVal) = ConstantInt::get((yyvsp[(1) - (2)].PrimType), (yyvsp[(2) - (2)].UInt64Val), false);
Reid Spencer41dff5e2007-01-26 08:05:27 +00004671 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004672 ;}
4673 break;
4674
Dale Johannesen172f3112008-02-20 21:15:43 +00004675 case 185:
Devang Patel67909432008-03-03 18:58:47 +00004676#line 1843 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004677 { // arbitrary precision integer constants
4678 uint32_t BitWidth = cast<IntegerType>((yyvsp[(1) - (2)].PrimType))->getBitWidth();
4679 if ((yyvsp[(2) - (2)].APIntVal)->getBitWidth() > BitWidth) {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004680 GEN_ERROR("Constant value does not fit in type");
4681 }
Chris Lattner38905612008-02-19 04:36:25 +00004682 (yyvsp[(2) - (2)].APIntVal)->zextOrTrunc(BitWidth);
4683 (yyval.ConstVal) = ConstantInt::get(*(yyvsp[(2) - (2)].APIntVal));
4684 delete (yyvsp[(2) - (2)].APIntVal);
Reid Spencer41dff5e2007-01-26 08:05:27 +00004685 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004686 ;}
4687 break;
4688
Dale Johannesen172f3112008-02-20 21:15:43 +00004689 case 186:
Devang Patel67909432008-03-03 18:58:47 +00004690#line 1853 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004691 { // Boolean constants
4692 assert(cast<IntegerType>((yyvsp[(1) - (2)].PrimType))->getBitWidth() == 1 && "Not Bool?");
4693 (yyval.ConstVal) = ConstantInt::getTrue();
Reid Spencer38c91a92007-02-28 02:24:54 +00004694 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004695 ;}
4696 break;
4697
Dale Johannesen172f3112008-02-20 21:15:43 +00004698 case 187:
Devang Patel67909432008-03-03 18:58:47 +00004699#line 1858 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004700 { // Boolean constants
4701 assert(cast<IntegerType>((yyvsp[(1) - (2)].PrimType))->getBitWidth() == 1 && "Not Bool?");
4702 (yyval.ConstVal) = ConstantInt::getFalse();
Reid Spencer6f407902007-01-13 05:00:46 +00004703 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004704 ;}
4705 break;
4706
Dale Johannesen172f3112008-02-20 21:15:43 +00004707 case 188:
Devang Patel67909432008-03-03 18:58:47 +00004708#line 1863 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004709 { // Floating point constants
4710 if (!ConstantFP::isValueValidForType((yyvsp[(1) - (2)].PrimType), *(yyvsp[(2) - (2)].FPVal)))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004711 GEN_ERROR("Floating point constant invalid for type");
Dale Johannesenc72cd7e2007-09-11 18:33:39 +00004712 // Lexer has no type info, so builds all float and double FP constants
4713 // as double. Fix this here. Long double is done right.
Chris Lattner38905612008-02-19 04:36:25 +00004714 if (&(yyvsp[(2) - (2)].FPVal)->getSemantics()==&APFloat::IEEEdouble && (yyvsp[(1) - (2)].PrimType)==Type::FloatTy)
4715 (yyvsp[(2) - (2)].FPVal)->convert(APFloat::IEEEsingle, APFloat::rmNearestTiesToEven);
4716 (yyval.ConstVal) = ConstantFP::get((yyvsp[(1) - (2)].PrimType), *(yyvsp[(2) - (2)].FPVal));
4717 delete (yyvsp[(2) - (2)].FPVal);
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004718 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004719 ;}
4720 break;
4721
Dale Johannesen172f3112008-02-20 21:15:43 +00004722 case 189:
Devang Patel67909432008-03-03 18:58:47 +00004723#line 1876 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004724 {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004725 if (!UpRefs.empty())
Chris Lattner38905612008-02-19 04:36:25 +00004726 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(5) - (6)].TypeVal))->getDescription());
4727 Constant *Val = (yyvsp[(3) - (6)].ConstVal);
4728 const Type *DestTy = (yyvsp[(5) - (6)].TypeVal)->get();
4729 if (!CastInst::castIsValid((yyvsp[(1) - (6)].CastOpVal), (yyvsp[(3) - (6)].ConstVal), DestTy))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004730 GEN_ERROR("invalid cast opcode for cast from '" +
4731 Val->getType()->getDescription() + "' to '" +
4732 DestTy->getDescription() + "'");
Chris Lattner38905612008-02-19 04:36:25 +00004733 (yyval.ConstVal) = ConstantExpr::getCast((yyvsp[(1) - (6)].CastOpVal), (yyvsp[(3) - (6)].ConstVal), DestTy);
4734 delete (yyvsp[(5) - (6)].TypeVal);
4735 ;}
4736 break;
4737
Dale Johannesen172f3112008-02-20 21:15:43 +00004738 case 190:
Devang Patel67909432008-03-03 18:58:47 +00004739#line 1888 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004740 {
4741 if (!isa<PointerType>((yyvsp[(3) - (5)].ConstVal)->getType()))
Reid Spencerb5334b02007-02-05 10:18:06 +00004742 GEN_ERROR("GetElementPtr requires a pointer operand");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004743
4744 const Type *IdxTy =
Chris Lattner38905612008-02-19 04:36:25 +00004745 GetElementPtrInst::getIndexedType((yyvsp[(3) - (5)].ConstVal)->getType(), (yyvsp[(4) - (5)].ValueList)->begin(), (yyvsp[(4) - (5)].ValueList)->end(),
Chris Lattner7d9801d2007-02-13 00:58:01 +00004746 true);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004747 if (!IdxTy)
Reid Spencerb5334b02007-02-05 10:18:06 +00004748 GEN_ERROR("Index list invalid for constant getelementptr");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004749
Chris Lattnerf7469af2007-01-31 04:44:08 +00004750 SmallVector<Constant*, 8> IdxVec;
Chris Lattner38905612008-02-19 04:36:25 +00004751 for (unsigned i = 0, e = (yyvsp[(4) - (5)].ValueList)->size(); i != e; ++i)
4752 if (Constant *C = dyn_cast<Constant>((*(yyvsp[(4) - (5)].ValueList))[i]))
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004753 IdxVec.push_back(C);
4754 else
Reid Spencerb5334b02007-02-05 10:18:06 +00004755 GEN_ERROR("Indices to constant getelementptr must be constants");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004756
Chris Lattner38905612008-02-19 04:36:25 +00004757 delete (yyvsp[(4) - (5)].ValueList);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004758
Chris Lattner38905612008-02-19 04:36:25 +00004759 (yyval.ConstVal) = ConstantExpr::getGetElementPtr((yyvsp[(3) - (5)].ConstVal), &IdxVec[0], IdxVec.size());
Andrew Lenharth6353e052006-12-08 18:07:09 +00004760 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004761 ;}
4762 break;
4763
Dale Johannesen172f3112008-02-20 21:15:43 +00004764 case 191:
Devang Patel67909432008-03-03 18:58:47 +00004765#line 1910 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004766 {
4767 if ((yyvsp[(3) - (8)].ConstVal)->getType() != Type::Int1Ty)
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004768 GEN_ERROR("Select condition must be of boolean type");
Chris Lattner38905612008-02-19 04:36:25 +00004769 if ((yyvsp[(5) - (8)].ConstVal)->getType() != (yyvsp[(7) - (8)].ConstVal)->getType())
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004770 GEN_ERROR("Select operand types must match");
Chris Lattner38905612008-02-19 04:36:25 +00004771 (yyval.ConstVal) = ConstantExpr::getSelect((yyvsp[(3) - (8)].ConstVal), (yyvsp[(5) - (8)].ConstVal), (yyvsp[(7) - (8)].ConstVal));
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004772 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004773 ;}
4774 break;
4775
Dale Johannesen172f3112008-02-20 21:15:43 +00004776 case 192:
Devang Patel67909432008-03-03 18:58:47 +00004777#line 1918 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004778 {
4779 if ((yyvsp[(3) - (6)].ConstVal)->getType() != (yyvsp[(5) - (6)].ConstVal)->getType())
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004780 GEN_ERROR("Binary operator types must match");
4781 CHECK_FOR_ERROR;
Chris Lattner38905612008-02-19 04:36:25 +00004782 (yyval.ConstVal) = ConstantExpr::get((yyvsp[(1) - (6)].BinaryOpVal), (yyvsp[(3) - (6)].ConstVal), (yyvsp[(5) - (6)].ConstVal));
4783 ;}
4784 break;
4785
Dale Johannesen172f3112008-02-20 21:15:43 +00004786 case 193:
Devang Patel67909432008-03-03 18:58:47 +00004787#line 1924 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004788 {
4789 if ((yyvsp[(3) - (6)].ConstVal)->getType() != (yyvsp[(5) - (6)].ConstVal)->getType())
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004790 GEN_ERROR("Logical operator types must match");
Chris Lattner38905612008-02-19 04:36:25 +00004791 if (!(yyvsp[(3) - (6)].ConstVal)->getType()->isInteger()) {
4792 if (Instruction::isShift((yyvsp[(1) - (6)].BinaryOpVal)) || !isa<VectorType>((yyvsp[(3) - (6)].ConstVal)->getType()) ||
4793 !cast<VectorType>((yyvsp[(3) - (6)].ConstVal)->getType())->getElementType()->isInteger())
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004794 GEN_ERROR("Logical operator requires integral operands");
4795 }
Chris Lattner38905612008-02-19 04:36:25 +00004796 (yyval.ConstVal) = ConstantExpr::get((yyvsp[(1) - (6)].BinaryOpVal), (yyvsp[(3) - (6)].ConstVal), (yyvsp[(5) - (6)].ConstVal));
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004797 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004798 ;}
4799 break;
4800
Dale Johannesen172f3112008-02-20 21:15:43 +00004801 case 194:
Devang Patel67909432008-03-03 18:58:47 +00004802#line 1935 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004803 {
4804 if ((yyvsp[(4) - (7)].ConstVal)->getType() != (yyvsp[(6) - (7)].ConstVal)->getType())
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004805 GEN_ERROR("icmp operand types must match");
Chris Lattner38905612008-02-19 04:36:25 +00004806 (yyval.ConstVal) = ConstantExpr::getICmp((yyvsp[(2) - (7)].IPredicate), (yyvsp[(4) - (7)].ConstVal), (yyvsp[(6) - (7)].ConstVal));
4807 ;}
4808 break;
4809
Dale Johannesen172f3112008-02-20 21:15:43 +00004810 case 195:
Devang Patel67909432008-03-03 18:58:47 +00004811#line 1940 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004812 {
4813 if ((yyvsp[(4) - (7)].ConstVal)->getType() != (yyvsp[(6) - (7)].ConstVal)->getType())
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004814 GEN_ERROR("fcmp operand types must match");
Chris Lattner38905612008-02-19 04:36:25 +00004815 (yyval.ConstVal) = ConstantExpr::getFCmp((yyvsp[(2) - (7)].FPredicate), (yyvsp[(4) - (7)].ConstVal), (yyvsp[(6) - (7)].ConstVal));
4816 ;}
4817 break;
4818
Dale Johannesen172f3112008-02-20 21:15:43 +00004819 case 196:
Devang Patel67909432008-03-03 18:58:47 +00004820#line 1945 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004821 {
4822 if (!ExtractElementInst::isValidOperands((yyvsp[(3) - (6)].ConstVal), (yyvsp[(5) - (6)].ConstVal)))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004823 GEN_ERROR("Invalid extractelement operands");
Chris Lattner38905612008-02-19 04:36:25 +00004824 (yyval.ConstVal) = ConstantExpr::getExtractElement((yyvsp[(3) - (6)].ConstVal), (yyvsp[(5) - (6)].ConstVal));
Reid Spencer41dff5e2007-01-26 08:05:27 +00004825 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004826 ;}
4827 break;
4828
Dale Johannesen172f3112008-02-20 21:15:43 +00004829 case 197:
Devang Patel67909432008-03-03 18:58:47 +00004830#line 1951 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004831 {
4832 if (!InsertElementInst::isValidOperands((yyvsp[(3) - (8)].ConstVal), (yyvsp[(5) - (8)].ConstVal), (yyvsp[(7) - (8)].ConstVal)))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004833 GEN_ERROR("Invalid insertelement operands");
Chris Lattner38905612008-02-19 04:36:25 +00004834 (yyval.ConstVal) = ConstantExpr::getInsertElement((yyvsp[(3) - (8)].ConstVal), (yyvsp[(5) - (8)].ConstVal), (yyvsp[(7) - (8)].ConstVal));
Reid Spencer41dff5e2007-01-26 08:05:27 +00004835 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004836 ;}
4837 break;
4838
Dale Johannesen172f3112008-02-20 21:15:43 +00004839 case 198:
Devang Patel67909432008-03-03 18:58:47 +00004840#line 1957 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004841 {
4842 if (!ShuffleVectorInst::isValidOperands((yyvsp[(3) - (8)].ConstVal), (yyvsp[(5) - (8)].ConstVal), (yyvsp[(7) - (8)].ConstVal)))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004843 GEN_ERROR("Invalid shufflevector operands");
Chris Lattner38905612008-02-19 04:36:25 +00004844 (yyval.ConstVal) = ConstantExpr::getShuffleVector((yyvsp[(3) - (8)].ConstVal), (yyvsp[(5) - (8)].ConstVal), (yyvsp[(7) - (8)].ConstVal));
Reid Spencer41dff5e2007-01-26 08:05:27 +00004845 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004846 ;}
4847 break;
4848
Dale Johannesen172f3112008-02-20 21:15:43 +00004849 case 199:
Devang Patel67909432008-03-03 18:58:47 +00004850#line 1966 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004851 {
4852 ((yyval.ConstVector) = (yyvsp[(1) - (3)].ConstVector))->push_back((yyvsp[(3) - (3)].ConstVal));
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004853 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004854 ;}
4855 break;
4856
Dale Johannesen172f3112008-02-20 21:15:43 +00004857 case 200:
Devang Patel67909432008-03-03 18:58:47 +00004858#line 1970 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004859 {
4860 (yyval.ConstVector) = new std::vector<Constant*>();
4861 (yyval.ConstVector)->push_back((yyvsp[(1) - (1)].ConstVal));
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004862 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004863 ;}
4864 break;
4865
Dale Johannesen172f3112008-02-20 21:15:43 +00004866 case 201:
Devang Patel67909432008-03-03 18:58:47 +00004867#line 1978 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004868 { (yyval.BoolVal) = false; ;}
4869 break;
4870
Chris Lattner38905612008-02-19 04:36:25 +00004871 case 202:
Devang Patel67909432008-03-03 18:58:47 +00004872#line 1978 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004873 { (yyval.BoolVal) = true; ;}
4874 break;
4875
4876 case 203:
Devang Patel67909432008-03-03 18:58:47 +00004877#line 1981 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Dale Johannesen172f3112008-02-20 21:15:43 +00004878 { (yyval.BoolVal) = true; ;}
Chris Lattner38905612008-02-19 04:36:25 +00004879 break;
4880
4881 case 204:
Devang Patel67909432008-03-03 18:58:47 +00004882#line 1981 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Dale Johannesen172f3112008-02-20 21:15:43 +00004883 { (yyval.BoolVal) = false; ;}
4884 break;
4885
4886 case 205:
Devang Patel67909432008-03-03 18:58:47 +00004887#line 1984 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004888 {
4889 const Type* VTy = (yyvsp[(1) - (2)].TypeVal)->get();
4890 Value *V = getVal(VTy, (yyvsp[(2) - (2)].ValIDVal));
Chris Lattner0275cff2007-08-06 21:00:46 +00004891 CHECK_FOR_ERROR
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004892 GlobalValue* Aliasee = dyn_cast<GlobalValue>(V);
4893 if (!Aliasee)
4894 GEN_ERROR("Aliases can be created only to global values");
4895
Chris Lattner38905612008-02-19 04:36:25 +00004896 (yyval.ConstVal) = Aliasee;
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004897 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004898 delete (yyvsp[(1) - (2)].TypeVal);
4899 ;}
4900 break;
4901
Dale Johannesen172f3112008-02-20 21:15:43 +00004902 case 206:
Devang Patel67909432008-03-03 18:58:47 +00004903#line 1996 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004904 {
4905 Constant *Val = (yyvsp[(3) - (6)].ConstVal);
4906 const Type *DestTy = (yyvsp[(5) - (6)].TypeVal)->get();
4907 if (!CastInst::castIsValid((yyvsp[(1) - (6)].CastOpVal), (yyvsp[(3) - (6)].ConstVal), DestTy))
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004908 GEN_ERROR("invalid cast opcode for cast from '" +
4909 Val->getType()->getDescription() + "' to '" +
4910 DestTy->getDescription() + "'");
4911
Chris Lattner38905612008-02-19 04:36:25 +00004912 (yyval.ConstVal) = ConstantExpr::getCast((yyvsp[(1) - (6)].CastOpVal), (yyvsp[(3) - (6)].ConstVal), DestTy);
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004913 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004914 delete (yyvsp[(5) - (6)].TypeVal);
4915 ;}
4916 break;
4917
Chris Lattner38905612008-02-19 04:36:25 +00004918 case 207:
Devang Patel67909432008-03-03 18:58:47 +00004919#line 2017 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004920 {
4921 (yyval.ModuleVal) = ParserResult = CurModule.CurrentModule;
Christopher Lambbf3348d2007-12-12 08:45:45 +00004922 CurModule.ModuleDone();
4923 CHECK_FOR_ERROR;
Chris Lattner38905612008-02-19 04:36:25 +00004924 ;}
4925 break;
4926
Dale Johannesen172f3112008-02-20 21:15:43 +00004927 case 208:
Devang Patel67909432008-03-03 18:58:47 +00004928#line 2022 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Dale Johannesen172f3112008-02-20 21:15:43 +00004929 {
4930 (yyval.ModuleVal) = ParserResult = CurModule.CurrentModule;
4931 CurModule.ModuleDone();
4932 CHECK_FOR_ERROR;
4933 ;}
Chris Lattner38905612008-02-19 04:36:25 +00004934 break;
4935
4936 case 211:
Devang Patel67909432008-03-03 18:58:47 +00004937#line 2035 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Dale Johannesen172f3112008-02-20 21:15:43 +00004938 { CurFun.isDeclare = false; ;}
4939 break;
4940
4941 case 212:
Devang Patel67909432008-03-03 18:58:47 +00004942#line 2035 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004943 {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004944 CurFun.FunctionDone();
4945 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004946 ;}
4947 break;
4948
Dale Johannesen172f3112008-02-20 21:15:43 +00004949 case 213:
Devang Patel67909432008-03-03 18:58:47 +00004950#line 2039 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004951 { CurFun.isDeclare = true; ;}
4952 break;
4953
Chris Lattner38905612008-02-19 04:36:25 +00004954 case 214:
Devang Patel67909432008-03-03 18:58:47 +00004955#line 2039 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004956 {
Christopher Lambbf3348d2007-12-12 08:45:45 +00004957 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004958 ;}
4959 break;
4960
4961 case 215:
Devang Patel67909432008-03-03 18:58:47 +00004962#line 2042 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Dale Johannesen172f3112008-02-20 21:15:43 +00004963 {
4964 CHECK_FOR_ERROR
4965 ;}
4966 break;
4967
4968 case 216:
Devang Patel67909432008-03-03 18:58:47 +00004969#line 2045 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004970 {
Reid Spencer14310612006-12-31 05:40:51 +00004971 if (!UpRefs.empty())
Chris Lattner38905612008-02-19 04:36:25 +00004972 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(3) - (3)].TypeVal))->getDescription());
Reid Spencer68a24bd2005-08-27 18:50:39 +00004973 // Eagerly resolve types. This is not an optimization, this is a
4974 // requirement that is due to the fact that we could have this:
4975 //
4976 // %list = type { %list * }
4977 // %list = type { %list * } ; repeated type decl
4978 //
4979 // If types are not resolved eagerly, then the two types will not be
4980 // determined to be the same type!
4981 //
Chris Lattner38905612008-02-19 04:36:25 +00004982 ResolveTypeTo((yyvsp[(1) - (3)].StrVal), *(yyvsp[(3) - (3)].TypeVal));
Reid Spencer68a24bd2005-08-27 18:50:39 +00004983
Chris Lattner38905612008-02-19 04:36:25 +00004984 if (!setTypeName(*(yyvsp[(3) - (3)].TypeVal), (yyvsp[(1) - (3)].StrVal)) && !(yyvsp[(1) - (3)].StrVal)) {
Reid Spencer5b7e7532006-09-28 19:28:24 +00004985 CHECK_FOR_ERROR
Reid Spencer68a24bd2005-08-27 18:50:39 +00004986 // If this is a named type that is not a redefinition, add it to the slot
4987 // table.
Chris Lattner38905612008-02-19 04:36:25 +00004988 CurModule.Types.push_back(*(yyvsp[(3) - (3)].TypeVal));
Reid Spencer68a24bd2005-08-27 18:50:39 +00004989 }
Reid Spencera132e042006-12-03 05:46:11 +00004990
Chris Lattner38905612008-02-19 04:36:25 +00004991 delete (yyvsp[(3) - (3)].TypeVal);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004992 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004993 ;}
4994 break;
Reid Spencerb8f85052007-07-31 03:50:36 +00004995
Dale Johannesen172f3112008-02-20 21:15:43 +00004996 case 217:
Devang Patel67909432008-03-03 18:58:47 +00004997#line 2069 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004998 {
4999 ResolveTypeTo((yyvsp[(1) - (3)].StrVal), (yyvsp[(3) - (3)].PrimType));
5000
5001 if (!setTypeName((yyvsp[(3) - (3)].PrimType), (yyvsp[(1) - (3)].StrVal)) && !(yyvsp[(1) - (3)].StrVal)) {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005002 CHECK_FOR_ERROR
5003 // If this is a named type that is not a redefinition, add it to the slot
5004 // table.
Chris Lattner38905612008-02-19 04:36:25 +00005005 CurModule.Types.push_back((yyvsp[(3) - (3)].PrimType));
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005006 }
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00005007 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005008 ;}
5009 break;
5010
Dale Johannesen172f3112008-02-20 21:15:43 +00005011 case 218:
Devang Patel67909432008-03-03 18:58:47 +00005012#line 2081 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005013 {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005014 /* "Externally Visible" Linkage */
Chris Lattner38905612008-02-19 04:36:25 +00005015 if ((yyvsp[(5) - (6)].ConstVal) == 0)
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005016 GEN_ERROR("Global value initializer is not a constant");
Chris Lattner38905612008-02-19 04:36:25 +00005017 CurGV = ParseGlobalVariable((yyvsp[(1) - (6)].StrVal), GlobalValue::ExternalLinkage,
5018 (yyvsp[(2) - (6)].Visibility), (yyvsp[(4) - (6)].BoolVal), (yyvsp[(5) - (6)].ConstVal)->getType(), (yyvsp[(5) - (6)].ConstVal), (yyvsp[(3) - (6)].BoolVal), (yyvsp[(6) - (6)].UIntVal));
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005019 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005020 ;}
5021 break;
5022
Dale Johannesen172f3112008-02-20 21:15:43 +00005023 case 219:
Devang Patel67909432008-03-03 18:58:47 +00005024#line 2088 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005025 {
Christopher Lambbf3348d2007-12-12 08:45:45 +00005026 CurGV = 0;
Chris Lattner38905612008-02-19 04:36:25 +00005027 ;}
5028 break;
5029
Dale Johannesen172f3112008-02-20 21:15:43 +00005030 case 220:
Devang Patel67909432008-03-03 18:58:47 +00005031#line 2092 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005032 {
5033 if ((yyvsp[(6) - (7)].ConstVal) == 0)
Christopher Lambbf3348d2007-12-12 08:45:45 +00005034 GEN_ERROR("Global value initializer is not a constant");
Chris Lattner38905612008-02-19 04:36:25 +00005035 CurGV = ParseGlobalVariable((yyvsp[(1) - (7)].StrVal), (yyvsp[(2) - (7)].Linkage), (yyvsp[(3) - (7)].Visibility), (yyvsp[(5) - (7)].BoolVal), (yyvsp[(6) - (7)].ConstVal)->getType(), (yyvsp[(6) - (7)].ConstVal), (yyvsp[(4) - (7)].BoolVal), (yyvsp[(7) - (7)].UIntVal));
Christopher Lambbf3348d2007-12-12 08:45:45 +00005036 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005037 ;}
5038 break;
5039
Dale Johannesen172f3112008-02-20 21:15:43 +00005040 case 221:
Devang Patel67909432008-03-03 18:58:47 +00005041#line 2097 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005042 {
Christopher Lambbf3348d2007-12-12 08:45:45 +00005043 CurGV = 0;
Chris Lattner38905612008-02-19 04:36:25 +00005044 ;}
5045 break;
5046
Dale Johannesen172f3112008-02-20 21:15:43 +00005047 case 222:
Devang Patel67909432008-03-03 18:58:47 +00005048#line 2101 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005049 {
Christopher Lambbf3348d2007-12-12 08:45:45 +00005050 if (!UpRefs.empty())
Chris Lattner38905612008-02-19 04:36:25 +00005051 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(6) - (7)].TypeVal))->getDescription());
5052 CurGV = ParseGlobalVariable((yyvsp[(1) - (7)].StrVal), (yyvsp[(2) - (7)].Linkage), (yyvsp[(3) - (7)].Visibility), (yyvsp[(5) - (7)].BoolVal), *(yyvsp[(6) - (7)].TypeVal), 0, (yyvsp[(4) - (7)].BoolVal), (yyvsp[(7) - (7)].UIntVal));
Christopher Lambbf3348d2007-12-12 08:45:45 +00005053 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005054 delete (yyvsp[(6) - (7)].TypeVal);
5055 ;}
5056 break;
5057
Dale Johannesen172f3112008-02-20 21:15:43 +00005058 case 223:
Devang Patel67909432008-03-03 18:58:47 +00005059#line 2107 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005060 {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005061 CurGV = 0;
Reid Spencer41dff5e2007-01-26 08:05:27 +00005062 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005063 ;}
5064 break;
5065
Dale Johannesen172f3112008-02-20 21:15:43 +00005066 case 224:
Devang Patel67909432008-03-03 18:58:47 +00005067#line 2111 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005068 {
Reid Spencer0a8a16b2007-05-22 18:52:55 +00005069 std::string Name;
Chris Lattner38905612008-02-19 04:36:25 +00005070 if ((yyvsp[(1) - (5)].StrVal)) {
5071 Name = *(yyvsp[(1) - (5)].StrVal);
5072 delete (yyvsp[(1) - (5)].StrVal);
Reid Spencer0a8a16b2007-05-22 18:52:55 +00005073 }
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005074 if (Name.empty())
5075 GEN_ERROR("Alias name cannot be empty");
5076
Chris Lattner38905612008-02-19 04:36:25 +00005077 Constant* Aliasee = (yyvsp[(5) - (5)].ConstVal);
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005078 if (Aliasee == 0)
Reid Spencer0a8a16b2007-05-22 18:52:55 +00005079 GEN_ERROR(std::string("Invalid aliasee for alias: ") + Name);
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005080
Chris Lattner38905612008-02-19 04:36:25 +00005081 GlobalAlias* GA = new GlobalAlias(Aliasee->getType(), (yyvsp[(4) - (5)].Linkage), Name, Aliasee,
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005082 CurModule.CurrentModule);
Chris Lattner38905612008-02-19 04:36:25 +00005083 GA->setVisibility((yyvsp[(2) - (5)].Visibility));
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005084 InsertValue(GA, CurModule.Values);
Chris Lattner569f7372007-09-10 23:24:14 +00005085
5086
5087 // If there was a forward reference of this alias, resolve it now.
5088
5089 ValID ID;
5090 if (!Name.empty())
5091 ID = ValID::createGlobalName(Name);
5092 else
5093 ID = ValID::createGlobalID(CurModule.Values.size()-1);
5094
5095 if (GlobalValue *FWGV =
5096 CurModule.GetForwardRefForGlobal(GA->getType(), ID)) {
5097 // Replace uses of the fwdref with the actual alias.
5098 FWGV->replaceAllUsesWith(GA);
5099 if (GlobalVariable *GV = dyn_cast<GlobalVariable>(FWGV))
5100 GV->eraseFromParent();
5101 else
5102 cast<Function>(FWGV)->eraseFromParent();
5103 }
5104 ID.destroy();
5105
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00005106 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005107 ;}
5108 break;
5109
Dale Johannesen172f3112008-02-20 21:15:43 +00005110 case 225:
Devang Patel67909432008-03-03 18:58:47 +00005111#line 2151 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005112 {
Anton Korobeynikov77d0f972007-04-25 14:29:12 +00005113 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005114 ;}
5115 break;
5116
Dale Johannesen172f3112008-02-20 21:15:43 +00005117 case 226:
Devang Patel67909432008-03-03 18:58:47 +00005118#line 2154 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005119 {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005120 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005121 ;}
5122 break;
5123
Dale Johannesen172f3112008-02-20 21:15:43 +00005124 case 227:
Devang Patel67909432008-03-03 18:58:47 +00005125#line 2160 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005126 {
Chris Lattner66316012006-01-24 04:14:29 +00005127 const std::string &AsmSoFar = CurModule.CurrentModule->getModuleInlineAsm();
Chris Lattner66316012006-01-24 04:14:29 +00005128 if (AsmSoFar.empty())
Chris Lattner38905612008-02-19 04:36:25 +00005129 CurModule.CurrentModule->setModuleInlineAsm(*(yyvsp[(1) - (1)].StrVal));
Chris Lattner66316012006-01-24 04:14:29 +00005130 else
Chris Lattner38905612008-02-19 04:36:25 +00005131 CurModule.CurrentModule->setModuleInlineAsm(AsmSoFar+"\n"+*(yyvsp[(1) - (1)].StrVal));
5132 delete (yyvsp[(1) - (1)].StrVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00005133 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005134;}
5135 break;
5136
Dale Johannesen172f3112008-02-20 21:15:43 +00005137 case 228:
Devang Patel67909432008-03-03 18:58:47 +00005138#line 2170 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005139 {
5140 CurModule.CurrentModule->setTargetTriple(*(yyvsp[(3) - (3)].StrVal));
5141 delete (yyvsp[(3) - (3)].StrVal);
5142 ;}
5143 break;
5144
Dale Johannesen172f3112008-02-20 21:15:43 +00005145 case 229:
Devang Patel67909432008-03-03 18:58:47 +00005146#line 2174 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005147 {
5148 CurModule.CurrentModule->setDataLayout(*(yyvsp[(3) - (3)].StrVal));
5149 delete (yyvsp[(3) - (3)].StrVal);
5150 ;}
5151 break;
5152
Dale Johannesen172f3112008-02-20 21:15:43 +00005153 case 231:
Devang Patel67909432008-03-03 18:58:47 +00005154#line 2181 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005155 {
5156 CurModule.CurrentModule->addLibrary(*(yyvsp[(3) - (3)].StrVal));
5157 delete (yyvsp[(3) - (3)].StrVal);
Christopher Lambbf3348d2007-12-12 08:45:45 +00005158 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005159 ;}
5160 break;
5161
Dale Johannesen172f3112008-02-20 21:15:43 +00005162 case 232:
Devang Patel67909432008-03-03 18:58:47 +00005163#line 2186 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005164 {
5165 CurModule.CurrentModule->addLibrary(*(yyvsp[(1) - (1)].StrVal));
5166 delete (yyvsp[(1) - (1)].StrVal);
Reid Spencer1013b4d2007-07-31 14:41:17 +00005167 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005168 ;}
5169 break;
5170
Dale Johannesen172f3112008-02-20 21:15:43 +00005171 case 233:
Devang Patel67909432008-03-03 18:58:47 +00005172#line 2191 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005173 {
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005174 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005175 ;}
5176 break;
5177
Dale Johannesen172f3112008-02-20 21:15:43 +00005178 case 234:
Devang Patel67909432008-03-03 18:58:47 +00005179#line 2200 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005180 {
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005181 if (!UpRefs.empty())
Chris Lattner38905612008-02-19 04:36:25 +00005182 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(3) - (5)].TypeVal))->getDescription());
5183 if (*(yyvsp[(3) - (5)].TypeVal) == Type::VoidTy)
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005184 GEN_ERROR("void typed arguments are invalid");
Chris Lattner38905612008-02-19 04:36:25 +00005185 ArgListEntry E; E.Attrs = (yyvsp[(4) - (5)].ParamAttrs); E.Ty = (yyvsp[(3) - (5)].TypeVal); E.Name = (yyvsp[(5) - (5)].StrVal);
5186 (yyval.ArgList) = (yyvsp[(1) - (5)].ArgList);
5187 (yyvsp[(1) - (5)].ArgList)->push_back(E);
Reid Spencer6f407902007-01-13 05:00:46 +00005188 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005189 ;}
5190 break;
5191
Dale Johannesen172f3112008-02-20 21:15:43 +00005192 case 235:
Devang Patel67909432008-03-03 18:58:47 +00005193#line 2210 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005194 {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005195 if (!UpRefs.empty())
Chris Lattner38905612008-02-19 04:36:25 +00005196 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (3)].TypeVal))->getDescription());
5197 if (*(yyvsp[(1) - (3)].TypeVal) == Type::VoidTy)
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005198 GEN_ERROR("void typed arguments are invalid");
Chris Lattner38905612008-02-19 04:36:25 +00005199 ArgListEntry E; E.Attrs = (yyvsp[(2) - (3)].ParamAttrs); E.Ty = (yyvsp[(1) - (3)].TypeVal); E.Name = (yyvsp[(3) - (3)].StrVal);
5200 (yyval.ArgList) = new ArgListType;
5201 (yyval.ArgList)->push_back(E);
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005202 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005203 ;}
5204 break;
5205
Dale Johannesen172f3112008-02-20 21:15:43 +00005206 case 236:
Devang Patel67909432008-03-03 18:58:47 +00005207#line 2221 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005208 {
5209 (yyval.ArgList) = (yyvsp[(1) - (1)].ArgList);
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005210 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005211 ;}
5212 break;
5213
Dale Johannesen172f3112008-02-20 21:15:43 +00005214 case 237:
Devang Patel67909432008-03-03 18:58:47 +00005215#line 2225 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005216 {
5217 (yyval.ArgList) = (yyvsp[(1) - (3)].ArgList);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00005218 struct ArgListEntry E;
5219 E.Ty = new PATypeHolder(Type::VoidTy);
5220 E.Name = 0;
Reid Spencer18da0722007-04-11 02:44:20 +00005221 E.Attrs = ParamAttr::None;
Chris Lattner38905612008-02-19 04:36:25 +00005222 (yyval.ArgList)->push_back(E);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00005223 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005224 ;}
5225 break;
5226
Dale Johannesen172f3112008-02-20 21:15:43 +00005227 case 238:
Devang Patel67909432008-03-03 18:58:47 +00005228#line 2234 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005229 {
5230 (yyval.ArgList) = new ArgListType;
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005231 struct ArgListEntry E;
5232 E.Ty = new PATypeHolder(Type::VoidTy);
5233 E.Name = 0;
5234 E.Attrs = ParamAttr::None;
Chris Lattner38905612008-02-19 04:36:25 +00005235 (yyval.ArgList)->push_back(E);
Reid Spencer61c83e02006-08-18 08:43:06 +00005236 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005237 ;}
5238 break;
5239
Dale Johannesen172f3112008-02-20 21:15:43 +00005240 case 239:
Devang Patel67909432008-03-03 18:58:47 +00005241#line 2243 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005242 {
5243 (yyval.ArgList) = 0;
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005244 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005245 ;}
5246 break;
5247
Dale Johannesen172f3112008-02-20 21:15:43 +00005248 case 240:
Devang Patel67909432008-03-03 18:58:47 +00005249#line 2249 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005250 {
5251 std::string FunctionName(*(yyvsp[(3) - (10)].StrVal));
5252 delete (yyvsp[(3) - (10)].StrVal); // Free strdup'd memory!
Reid Spencer68a24bd2005-08-27 18:50:39 +00005253
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00005254 // Check the function result for abstractness if this is a define. We should
5255 // have no abstract types at this point
Chris Lattner38905612008-02-19 04:36:25 +00005256 if (!CurFun.isDeclare && CurModule.TypeIsUnresolved((yyvsp[(2) - (10)].TypeVal)))
5257 GEN_ERROR("Reference to abstract result: "+ (yyvsp[(2) - (10)].TypeVal)->get()->getDescription());
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00005258
Reid Spencer68a24bd2005-08-27 18:50:39 +00005259 std::vector<const Type*> ParamTypeList;
Christopher Lamb5c104242007-04-22 20:09:11 +00005260 ParamAttrsVector Attrs;
Chris Lattner38905612008-02-19 04:36:25 +00005261 if ((yyvsp[(7) - (10)].ParamAttrs) != ParamAttr::None) {
Duncan Sandsdc024672007-11-27 13:23:08 +00005262 ParamAttrsWithIndex PAWI;
5263 PAWI.index = 0;
Chris Lattner38905612008-02-19 04:36:25 +00005264 PAWI.attrs = (yyvsp[(7) - (10)].ParamAttrs);
Christopher Lamb5c104242007-04-22 20:09:11 +00005265 Attrs.push_back(PAWI);
5266 }
Chris Lattner38905612008-02-19 04:36:25 +00005267 if ((yyvsp[(5) - (10)].ArgList)) { // If there are arguments...
Reid Spencer7b5d4662007-04-09 06:16:21 +00005268 unsigned index = 1;
Chris Lattner38905612008-02-19 04:36:25 +00005269 for (ArgListType::iterator I = (yyvsp[(5) - (10)].ArgList)->begin(); I != (yyvsp[(5) - (10)].ArgList)->end(); ++I, ++index) {
Reid Spencer14310612006-12-31 05:40:51 +00005270 const Type* Ty = I->Ty->get();
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00005271 if (!CurFun.isDeclare && CurModule.TypeIsUnresolved(I->Ty))
5272 GEN_ERROR("Reference to abstract argument: " + Ty->getDescription());
Reid Spencer14310612006-12-31 05:40:51 +00005273 ParamTypeList.push_back(Ty);
5274 if (Ty != Type::VoidTy)
Christopher Lamb5c104242007-04-22 20:09:11 +00005275 if (I->Attrs != ParamAttr::None) {
Duncan Sandsdc024672007-11-27 13:23:08 +00005276 ParamAttrsWithIndex PAWI;
5277 PAWI.index = index;
5278 PAWI.attrs = I->Attrs;
Christopher Lamb5c104242007-04-22 20:09:11 +00005279 Attrs.push_back(PAWI);
5280 }
Reid Spencer14310612006-12-31 05:40:51 +00005281 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00005282 }
5283
5284 bool isVarArg = ParamTypeList.size() && ParamTypeList.back() == Type::VoidTy;
5285 if (isVarArg) ParamTypeList.pop_back();
5286
Duncan Sandsafa3b6d2007-11-28 17:07:01 +00005287 const ParamAttrsList *PAL = 0;
Christopher Lamb5c104242007-04-22 20:09:11 +00005288 if (!Attrs.empty())
5289 PAL = ParamAttrsList::get(Attrs);
Reid Spencer7b5d4662007-04-09 06:16:21 +00005290
Chris Lattner38905612008-02-19 04:36:25 +00005291 FunctionType *FT = FunctionType::get(*(yyvsp[(2) - (10)].TypeVal), ParamTypeList, isVarArg);
Christopher Lamb4374f8e2007-12-17 01:17:35 +00005292 const PointerType *PFT = PointerType::getUnqual(FT);
Chris Lattner38905612008-02-19 04:36:25 +00005293 delete (yyvsp[(2) - (10)].TypeVal);
Reid Spencer68a24bd2005-08-27 18:50:39 +00005294
5295 ValID ID;
5296 if (!FunctionName.empty()) {
Reid Spencer41dff5e2007-01-26 08:05:27 +00005297 ID = ValID::createGlobalName((char*)FunctionName.c_str());
Reid Spencer68a24bd2005-08-27 18:50:39 +00005298 } else {
Reid Spencer93c40032007-03-19 18:40:50 +00005299 ID = ValID::createGlobalID(CurModule.Values.size());
Reid Spencer68a24bd2005-08-27 18:50:39 +00005300 }
5301
5302 Function *Fn = 0;
5303 // See if this function was forward referenced. If so, recycle the object.
5304 if (GlobalValue *FWRef = CurModule.GetForwardRefForGlobal(PFT, ID)) {
5305 // Move the function to the end of the list, from whereever it was
5306 // previously inserted.
5307 Fn = cast<Function>(FWRef);
Duncan Sandsdc024672007-11-27 13:23:08 +00005308 assert(!Fn->getParamAttrs() && "Forward reference has parameter attributes!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00005309 CurModule.CurrentModule->getFunctionList().remove(Fn);
5310 CurModule.CurrentModule->getFunctionList().push_back(Fn);
5311 } else if (!FunctionName.empty() && // Merge with an earlier prototype?
Reid Spenceref9b9a72007-02-05 20:47:22 +00005312 (Fn = CurModule.CurrentModule->getFunction(FunctionName))) {
Duncan Sandsdc024672007-11-27 13:23:08 +00005313 if (Fn->getFunctionType() != FT ) {
Reid Spenceref9b9a72007-02-05 20:47:22 +00005314 // The existing function doesn't have the same type. This is an overload
5315 // error.
5316 GEN_ERROR("Overload of function '" + FunctionName + "' not permitted.");
Duncan Sandsdc024672007-11-27 13:23:08 +00005317 } else if (Fn->getParamAttrs() != PAL) {
5318 // The existing function doesn't have the same parameter attributes.
5319 // This is an overload error.
5320 GEN_ERROR("Overload of function '" + FunctionName + "' not permitted.");
Reid Spenceref9b9a72007-02-05 20:47:22 +00005321 } else if (!CurFun.isDeclare && !Fn->isDeclaration()) {
Chris Lattner6cdc6822007-04-26 05:31:05 +00005322 // Neither the existing or the current function is a declaration and they
5323 // have the same name and same type. Clearly this is a redefinition.
5324 GEN_ERROR("Redefinition of function '" + FunctionName + "'");
Duncan Sandsdc024672007-11-27 13:23:08 +00005325 } else if (Fn->isDeclaration()) {
Reid Spenceref9b9a72007-02-05 20:47:22 +00005326 // Make sure to strip off any argument names so we can't get conflicts.
Reid Spencer68a24bd2005-08-27 18:50:39 +00005327 for (Function::arg_iterator AI = Fn->arg_begin(), AE = Fn->arg_end();
5328 AI != AE; ++AI)
5329 AI->setName("");
Reid Spenceref9b9a72007-02-05 20:47:22 +00005330 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00005331 } else { // Not already defined?
Chris Lattner6cdc6822007-04-26 05:31:05 +00005332 Fn = new Function(FT, GlobalValue::ExternalWeakLinkage, FunctionName,
Reid Spencer68a24bd2005-08-27 18:50:39 +00005333 CurModule.CurrentModule);
5334 InsertValue(Fn, CurModule.Values);
5335 }
5336
5337 CurFun.FunctionStart(Fn);
Anton Korobeynikov93c2b372006-09-17 13:06:18 +00005338
5339 if (CurFun.isDeclare) {
5340 // If we have declaration, always overwrite linkage. This will allow us to
5341 // correctly handle cases, when pointer to function is passed as argument to
5342 // another function.
5343 Fn->setLinkage(CurFun.Linkage);
Anton Korobeynikov178a3522007-01-12 19:22:51 +00005344 Fn->setVisibility(CurFun.Visibility);
Anton Korobeynikov93c2b372006-09-17 13:06:18 +00005345 }
Chris Lattner38905612008-02-19 04:36:25 +00005346 Fn->setCallingConv((yyvsp[(1) - (10)].UIntVal));
Duncan Sandsdc024672007-11-27 13:23:08 +00005347 Fn->setParamAttrs(PAL);
Chris Lattner38905612008-02-19 04:36:25 +00005348 Fn->setAlignment((yyvsp[(9) - (10)].UIntVal));
5349 if ((yyvsp[(8) - (10)].StrVal)) {
5350 Fn->setSection(*(yyvsp[(8) - (10)].StrVal));
5351 delete (yyvsp[(8) - (10)].StrVal);
Gordon Henriksen80a75bf2007-12-10 03:18:06 +00005352 }
Chris Lattner38905612008-02-19 04:36:25 +00005353 if ((yyvsp[(10) - (10)].StrVal)) {
5354 Fn->setCollector((yyvsp[(10) - (10)].StrVal)->c_str());
5355 delete (yyvsp[(10) - (10)].StrVal);
Chris Lattnere869eef2005-11-12 00:11:49 +00005356 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00005357
5358 // Add all of the arguments we parsed to the function...
Chris Lattner38905612008-02-19 04:36:25 +00005359 if ((yyvsp[(5) - (10)].ArgList)) { // Is null if empty...
Reid Spencer68a24bd2005-08-27 18:50:39 +00005360 if (isVarArg) { // Nuke the last entry
Chris Lattner38905612008-02-19 04:36:25 +00005361 assert((yyvsp[(5) - (10)].ArgList)->back().Ty->get() == Type::VoidTy && (yyvsp[(5) - (10)].ArgList)->back().Name == 0 &&
Reid Spencera9720f52007-02-05 17:04:00 +00005362 "Not a varargs marker!");
Chris Lattner38905612008-02-19 04:36:25 +00005363 delete (yyvsp[(5) - (10)].ArgList)->back().Ty;
5364 (yyvsp[(5) - (10)].ArgList)->pop_back(); // Delete the last entry
Reid Spencer68a24bd2005-08-27 18:50:39 +00005365 }
5366 Function::arg_iterator ArgIt = Fn->arg_begin();
Reid Spenceref9b9a72007-02-05 20:47:22 +00005367 Function::arg_iterator ArgEnd = Fn->arg_end();
Reid Spencer14310612006-12-31 05:40:51 +00005368 unsigned Idx = 1;
Chris Lattner38905612008-02-19 04:36:25 +00005369 for (ArgListType::iterator I = (yyvsp[(5) - (10)].ArgList)->begin();
5370 I != (yyvsp[(5) - (10)].ArgList)->end() && ArgIt != ArgEnd; ++I, ++ArgIt) {
Reid Spencer14310612006-12-31 05:40:51 +00005371 delete I->Ty; // Delete the typeholder...
Reid Spencer0a8a16b2007-05-22 18:52:55 +00005372 setValueName(ArgIt, I->Name); // Insert arg into symtab...
Reid Spencer5b7e7532006-09-28 19:28:24 +00005373 CHECK_FOR_ERROR
Reid Spencer68a24bd2005-08-27 18:50:39 +00005374 InsertValue(ArgIt);
Reid Spencer14310612006-12-31 05:40:51 +00005375 Idx++;
Reid Spencer68a24bd2005-08-27 18:50:39 +00005376 }
Reid Spencera132e042006-12-03 05:46:11 +00005377
Chris Lattner38905612008-02-19 04:36:25 +00005378 delete (yyvsp[(5) - (10)].ArgList); // We're now done with the argument list
Reid Spencer68a24bd2005-08-27 18:50:39 +00005379 }
Reid Spencer61c83e02006-08-18 08:43:06 +00005380 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005381;}
5382 break;
5383
Dale Johannesen172f3112008-02-20 21:15:43 +00005384 case 243:
Devang Patel67909432008-03-03 18:58:47 +00005385#line 2384 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005386 {
5387 (yyval.FunctionVal) = CurFun.CurrentFunction;
Reid Spencer68a24bd2005-08-27 18:50:39 +00005388
5389 // Make sure that we keep track of the linkage type even if there was a
5390 // previous "declare".
Chris Lattner38905612008-02-19 04:36:25 +00005391 (yyval.FunctionVal)->setLinkage((yyvsp[(1) - (4)].Linkage));
5392 (yyval.FunctionVal)->setVisibility((yyvsp[(2) - (4)].Visibility));
5393;}
5394 break;
5395
Dale Johannesen172f3112008-02-20 21:15:43 +00005396 case 246:
Devang Patel67909432008-03-03 18:58:47 +00005397#line 2395 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005398 {
5399 (yyval.FunctionVal) = (yyvsp[(1) - (2)].FunctionVal);
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005400 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005401;}
5402 break;
5403
Dale Johannesen172f3112008-02-20 21:15:43 +00005404 case 247:
Devang Patel67909432008-03-03 18:58:47 +00005405#line 2400 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005406 {
5407 CurFun.CurrentFunction->setLinkage((yyvsp[(1) - (3)].Linkage));
5408 CurFun.CurrentFunction->setVisibility((yyvsp[(2) - (3)].Visibility));
5409 (yyval.FunctionVal) = CurFun.CurrentFunction;
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005410 CurFun.FunctionDone();
Reid Spencer41dff5e2007-01-26 08:05:27 +00005411 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005412 ;}
5413 break;
5414
Dale Johannesen172f3112008-02-20 21:15:43 +00005415 case 248:
Devang Patel67909432008-03-03 18:58:47 +00005416#line 2412 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005417 {
5418 (yyval.BoolVal) = false;
Reid Spencer61c83e02006-08-18 08:43:06 +00005419 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005420 ;}
5421 break;
5422
Dale Johannesen172f3112008-02-20 21:15:43 +00005423 case 249:
Devang Patel67909432008-03-03 18:58:47 +00005424#line 2416 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005425 {
5426 (yyval.BoolVal) = true;
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00005427 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005428 ;}
5429 break;
5430
Dale Johannesen172f3112008-02-20 21:15:43 +00005431 case 250:
Devang Patel67909432008-03-03 18:58:47 +00005432#line 2421 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005433 { // A reference to a direct constant
5434 (yyval.ValIDVal) = ValID::create((yyvsp[(1) - (1)].SInt64Val));
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005435 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005436 ;}
5437 break;
5438
Dale Johannesen172f3112008-02-20 21:15:43 +00005439 case 251:
Devang Patel67909432008-03-03 18:58:47 +00005440#line 2425 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005441 {
5442 (yyval.ValIDVal) = ValID::create((yyvsp[(1) - (1)].UInt64Val));
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005443 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005444 ;}
5445 break;
5446
Dale Johannesen172f3112008-02-20 21:15:43 +00005447 case 252:
Devang Patel67909432008-03-03 18:58:47 +00005448#line 2429 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005449 { // Perhaps it's an FP constant?
5450 (yyval.ValIDVal) = ValID::create((yyvsp[(1) - (1)].FPVal));
Reid Spencere4d87aa2006-12-23 06:05:41 +00005451 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005452 ;}
5453 break;
5454
Dale Johannesen172f3112008-02-20 21:15:43 +00005455 case 253:
Devang Patel67909432008-03-03 18:58:47 +00005456#line 2433 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005457 {
5458 (yyval.ValIDVal) = ValID::create(ConstantInt::getTrue());
Reid Spencere4d87aa2006-12-23 06:05:41 +00005459 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005460 ;}
5461 break;
5462
Dale Johannesen172f3112008-02-20 21:15:43 +00005463 case 254:
Devang Patel67909432008-03-03 18:58:47 +00005464#line 2437 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005465 {
5466 (yyval.ValIDVal) = ValID::create(ConstantInt::getFalse());
Zhou Sheng6b6b6ef2007-01-11 12:24:14 +00005467 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005468 ;}
5469 break;
5470
Dale Johannesen172f3112008-02-20 21:15:43 +00005471 case 255:
Devang Patel67909432008-03-03 18:58:47 +00005472#line 2441 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005473 {
5474 (yyval.ValIDVal) = ValID::createNull();
Zhou Sheng6b6b6ef2007-01-11 12:24:14 +00005475 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005476 ;}
5477 break;
5478
Dale Johannesen172f3112008-02-20 21:15:43 +00005479 case 256:
Devang Patel67909432008-03-03 18:58:47 +00005480#line 2445 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005481 {
5482 (yyval.ValIDVal) = ValID::createUndef();
Reid Spencer61c83e02006-08-18 08:43:06 +00005483 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005484 ;}
5485 break;
5486
Dale Johannesen172f3112008-02-20 21:15:43 +00005487 case 257:
Devang Patel67909432008-03-03 18:58:47 +00005488#line 2449 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005489 { // A vector zero constant.
5490 (yyval.ValIDVal) = ValID::createZeroInit();
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005491 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005492 ;}
5493 break;
5494
Dale Johannesen172f3112008-02-20 21:15:43 +00005495 case 258:
Devang Patel67909432008-03-03 18:58:47 +00005496#line 2453 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005497 { // Nonempty unsized packed vector
5498 const Type *ETy = (*(yyvsp[(2) - (3)].ConstVector))[0]->getType();
5499 int NumElements = (yyvsp[(2) - (3)].ConstVector)->size();
Reid Spencer68a24bd2005-08-27 18:50:39 +00005500
Reid Spencer9d6565a2007-02-15 02:26:10 +00005501 VectorType* pt = VectorType::get(ETy, NumElements);
Reid Spencer68a24bd2005-08-27 18:50:39 +00005502 PATypeHolder* PTy = new PATypeHolder(
Reid Spencera132e042006-12-03 05:46:11 +00005503 HandleUpRefs(
Reid Spencer9d6565a2007-02-15 02:26:10 +00005504 VectorType::get(
Reid Spencera132e042006-12-03 05:46:11 +00005505 ETy,
5506 NumElements)
5507 )
5508 );
Reid Spencer68a24bd2005-08-27 18:50:39 +00005509
5510 // Verify all elements are correct type!
Chris Lattner38905612008-02-19 04:36:25 +00005511 for (unsigned i = 0; i < (yyvsp[(2) - (3)].ConstVector)->size(); i++) {
5512 if (ETy != (*(yyvsp[(2) - (3)].ConstVector))[i]->getType())
Reid Spencer61c83e02006-08-18 08:43:06 +00005513 GEN_ERROR("Element #" + utostr(i) + " is not of type '" +
Reid Spencer68a24bd2005-08-27 18:50:39 +00005514 ETy->getDescription() +"' as required!\nIt is of type '" +
Chris Lattner38905612008-02-19 04:36:25 +00005515 (*(yyvsp[(2) - (3)].ConstVector))[i]->getType()->getDescription() + "'.");
Reid Spencer68a24bd2005-08-27 18:50:39 +00005516 }
5517
Chris Lattner38905612008-02-19 04:36:25 +00005518 (yyval.ValIDVal) = ValID::create(ConstantVector::get(pt, *(yyvsp[(2) - (3)].ConstVector)));
5519 delete PTy; delete (yyvsp[(2) - (3)].ConstVector);
Reid Spencer832254e2007-02-02 02:16:23 +00005520 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005521 ;}
5522 break;
5523
Dale Johannesen172f3112008-02-20 21:15:43 +00005524 case 259:
Devang Patel67909432008-03-03 18:58:47 +00005525#line 2478 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005526 {
5527 (yyval.ValIDVal) = ValID::create((yyvsp[(1) - (1)].ConstVal));
Reid Spencer832254e2007-02-02 02:16:23 +00005528 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005529 ;}
5530 break;
5531
Dale Johannesen172f3112008-02-20 21:15:43 +00005532 case 260:
Devang Patel67909432008-03-03 18:58:47 +00005533#line 2482 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005534 {
5535 (yyval.ValIDVal) = ValID::createInlineAsm(*(yyvsp[(3) - (5)].StrVal), *(yyvsp[(5) - (5)].StrVal), (yyvsp[(2) - (5)].BoolVal));
5536 delete (yyvsp[(3) - (5)].StrVal);
5537 delete (yyvsp[(5) - (5)].StrVal);
Reid Spencer832254e2007-02-02 02:16:23 +00005538 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005539 ;}
5540 break;
5541
Dale Johannesen172f3112008-02-20 21:15:43 +00005542 case 261:
Devang Patel67909432008-03-03 18:58:47 +00005543#line 2492 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005544 { // Is it an integer reference...?
5545 (yyval.ValIDVal) = ValID::createLocalID((yyvsp[(1) - (1)].UIntVal));
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005546 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005547 ;}
5548 break;
5549
Dale Johannesen172f3112008-02-20 21:15:43 +00005550 case 262:
Devang Patel67909432008-03-03 18:58:47 +00005551#line 2496 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005552 {
5553 (yyval.ValIDVal) = ValID::createGlobalID((yyvsp[(1) - (1)].UIntVal));
Reid Spencer832254e2007-02-02 02:16:23 +00005554 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005555 ;}
5556 break;
5557
Dale Johannesen172f3112008-02-20 21:15:43 +00005558 case 263:
Devang Patel67909432008-03-03 18:58:47 +00005559#line 2500 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005560 { // Is it a named reference...?
5561 (yyval.ValIDVal) = ValID::createLocalName(*(yyvsp[(1) - (1)].StrVal));
5562 delete (yyvsp[(1) - (1)].StrVal);
Reid Spencer832254e2007-02-02 02:16:23 +00005563 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005564 ;}
5565 break;
5566
Dale Johannesen172f3112008-02-20 21:15:43 +00005567 case 264:
Devang Patel67909432008-03-03 18:58:47 +00005568#line 2505 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005569 { // Is it a named reference...?
5570 (yyval.ValIDVal) = ValID::createGlobalName(*(yyvsp[(1) - (1)].StrVal));
5571 delete (yyvsp[(1) - (1)].StrVal);
Reid Spencer832254e2007-02-02 02:16:23 +00005572 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005573 ;}
5574 break;
5575
Dale Johannesen172f3112008-02-20 21:15:43 +00005576 case 267:
Devang Patel67909432008-03-03 18:58:47 +00005577#line 2518 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005578 {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005579 if (!UpRefs.empty())
Chris Lattner38905612008-02-19 04:36:25 +00005580 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (2)].TypeVal))->getDescription());
5581 (yyval.ValueVal) = getVal(*(yyvsp[(1) - (2)].TypeVal), (yyvsp[(2) - (2)].ValIDVal));
5582 delete (yyvsp[(1) - (2)].TypeVal);
Reid Spencer832254e2007-02-02 02:16:23 +00005583 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005584 ;}
5585 break;
5586
Dale Johannesen172f3112008-02-20 21:15:43 +00005587 case 268:
Devang Patel67909432008-03-03 18:58:47 +00005588#line 2527 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Devang Patel7990dc72008-02-20 22:40:23 +00005589 {
5590 (yyval.ValueList) = new std::vector<Value *>();
5591 (yyval.ValueList)->push_back((yyvsp[(1) - (1)].ValueVal));
5592 CHECK_FOR_ERROR
5593 ;}
5594 break;
5595
5596 case 269:
Devang Patel67909432008-03-03 18:58:47 +00005597#line 2532 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Devang Patel7990dc72008-02-20 22:40:23 +00005598 {
Devang Patel6bfc63b2008-02-23 00:38:56 +00005599 ((yyval.ValueList)=(yyvsp[(1) - (3)].ValueList))->push_back((yyvsp[(3) - (3)].ValueVal));
Devang Patel7990dc72008-02-20 22:40:23 +00005600 CHECK_FOR_ERROR
5601 ;}
5602 break;
5603
5604 case 270:
Devang Patel67909432008-03-03 18:58:47 +00005605#line 2537 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005606 {
5607 (yyval.FunctionVal) = (yyvsp[(1) - (2)].FunctionVal);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00005608 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005609 ;}
5610 break;
5611
Devang Patel7990dc72008-02-20 22:40:23 +00005612 case 271:
Devang Patel67909432008-03-03 18:58:47 +00005613#line 2541 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005614 { // Do not allow functions with 0 basic blocks
5615 (yyval.FunctionVal) = (yyvsp[(1) - (2)].FunctionVal);
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005616 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005617 ;}
5618 break;
5619
Devang Patel7990dc72008-02-20 22:40:23 +00005620 case 272:
Devang Patel67909432008-03-03 18:58:47 +00005621#line 2550 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005622 {
5623 setValueName((yyvsp[(3) - (3)].TermInstVal), (yyvsp[(2) - (3)].StrVal));
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005624 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005625 InsertValue((yyvsp[(3) - (3)].TermInstVal));
5626 (yyvsp[(1) - (3)].BasicBlockVal)->getInstList().push_back((yyvsp[(3) - (3)].TermInstVal));
5627 (yyval.BasicBlockVal) = (yyvsp[(1) - (3)].BasicBlockVal);
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005628 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005629 ;}
5630 break;
5631
Devang Patel7990dc72008-02-20 22:40:23 +00005632 case 273:
Devang Patel67909432008-03-03 18:58:47 +00005633#line 2559 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005634 {
5635 if (CastInst *CI1 = dyn_cast<CastInst>((yyvsp[(2) - (2)].InstVal)))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005636 if (CastInst *CI2 = dyn_cast<CastInst>(CI1->getOperand(0)))
5637 if (CI2->getParent() == 0)
Chris Lattner38905612008-02-19 04:36:25 +00005638 (yyvsp[(1) - (2)].BasicBlockVal)->getInstList().push_back(CI2);
5639 (yyvsp[(1) - (2)].BasicBlockVal)->getInstList().push_back((yyvsp[(2) - (2)].InstVal));
5640 (yyval.BasicBlockVal) = (yyvsp[(1) - (2)].BasicBlockVal);
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005641 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005642 ;}
5643 break;
5644
Devang Patel7990dc72008-02-20 22:40:23 +00005645 case 274:
Devang Patel67909432008-03-03 18:58:47 +00005646#line 2568 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005647 { // Empty space between instruction lists
Devang Patel67909432008-03-03 18:58:47 +00005648 (yyval.BasicBlockVal) = defineBBVal(ValID::createLocalID(CurFun.NextValNum), 0);
Reid Spencered951ea2007-05-19 07:22:10 +00005649 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005650 ;}
5651 break;
5652
Devang Patel7990dc72008-02-20 22:40:23 +00005653 case 275:
Devang Patel67909432008-03-03 18:58:47 +00005654#line 2572 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
5655 { // Only the unwind to block
5656 (yyval.BasicBlockVal) = defineBBVal(ValID::createLocalID(CurFun.NextValNum), getBBVal((yyvsp[(2) - (2)].ValIDVal)));
Reid Spencered951ea2007-05-19 07:22:10 +00005657 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005658 ;}
5659 break;
Reid Spencerb8f85052007-07-31 03:50:36 +00005660
Devang Patel7990dc72008-02-20 22:40:23 +00005661 case 276:
Devang Patel67909432008-03-03 18:58:47 +00005662#line 2576 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
5663 { // Labelled (named) basic block
5664 (yyval.BasicBlockVal) = defineBBVal(ValID::createLocalName(*(yyvsp[(1) - (1)].StrVal)), 0);
5665 delete (yyvsp[(1) - (1)].StrVal);
5666 CHECK_FOR_ERROR
5667 ;}
5668 break;
5669
5670 case 277:
5671#line 2581 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
5672 {
5673 (yyval.BasicBlockVal) = defineBBVal(ValID::createLocalName(*(yyvsp[(1) - (3)].StrVal)), getBBVal((yyvsp[(3) - (3)].ValIDVal)));
5674 delete (yyvsp[(1) - (3)].StrVal);
5675 CHECK_FOR_ERROR
5676 ;}
5677 break;
5678
5679 case 278:
5680#line 2588 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Devang Patel7990dc72008-02-20 22:40:23 +00005681 { // Return with a result...
Devang Patelb82b7f22008-02-26 22:17:48 +00005682 ValueList &VL = *(yyvsp[(2) - (2)].ValueList);
Devang Patel13b823c2008-02-26 23:19:08 +00005683 assert(!VL.empty() && "Invalid ret operands!");
5684 (yyval.TermInstVal) = new ReturnInst(&VL[0], VL.size());
Devang Patel7990dc72008-02-20 22:40:23 +00005685 delete (yyvsp[(2) - (2)].ValueList);
Chris Lattner38905612008-02-19 04:36:25 +00005686 CHECK_FOR_ERROR
5687 ;}
5688 break;
5689
Devang Patel67909432008-03-03 18:58:47 +00005690 case 279:
5691#line 2595 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005692 { // Return with no result...
5693 (yyval.TermInstVal) = new ReturnInst();
5694 CHECK_FOR_ERROR
5695 ;}
5696 break;
5697
Devang Patel67909432008-03-03 18:58:47 +00005698 case 280:
5699#line 2599 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005700 { // Unconditional Branch...
5701 BasicBlock* tmpBB = getBBVal((yyvsp[(3) - (3)].ValIDVal));
5702 CHECK_FOR_ERROR
5703 (yyval.TermInstVal) = new BranchInst(tmpBB);
5704 ;}
5705 break;
5706
Devang Patel67909432008-03-03 18:58:47 +00005707 case 281:
5708#line 2604 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005709 {
5710 assert(cast<IntegerType>((yyvsp[(2) - (9)].PrimType))->getBitWidth() == 1 && "Not Bool?");
5711 BasicBlock* tmpBBA = getBBVal((yyvsp[(6) - (9)].ValIDVal));
5712 CHECK_FOR_ERROR
5713 BasicBlock* tmpBBB = getBBVal((yyvsp[(9) - (9)].ValIDVal));
5714 CHECK_FOR_ERROR
5715 Value* tmpVal = getVal(Type::Int1Ty, (yyvsp[(3) - (9)].ValIDVal));
5716 CHECK_FOR_ERROR
5717 (yyval.TermInstVal) = new BranchInst(tmpBBA, tmpBBB, tmpVal);
5718 ;}
5719 break;
5720
Devang Patel67909432008-03-03 18:58:47 +00005721 case 282:
5722#line 2614 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005723 {
5724 Value* tmpVal = getVal((yyvsp[(2) - (9)].PrimType), (yyvsp[(3) - (9)].ValIDVal));
5725 CHECK_FOR_ERROR
5726 BasicBlock* tmpBB = getBBVal((yyvsp[(6) - (9)].ValIDVal));
5727 CHECK_FOR_ERROR
5728 SwitchInst *S = new SwitchInst(tmpVal, tmpBB, (yyvsp[(8) - (9)].JumpTable)->size());
5729 (yyval.TermInstVal) = S;
5730
5731 std::vector<std::pair<Constant*,BasicBlock*> >::iterator I = (yyvsp[(8) - (9)].JumpTable)->begin(),
5732 E = (yyvsp[(8) - (9)].JumpTable)->end();
Reid Spencer68a24bd2005-08-27 18:50:39 +00005733 for (; I != E; ++I) {
5734 if (ConstantInt *CI = dyn_cast<ConstantInt>(I->first))
5735 S->addCase(CI, I->second);
5736 else
Reid Spencerb5334b02007-02-05 10:18:06 +00005737 GEN_ERROR("Switch case is constant, but not a simple integer");
Reid Spencer68a24bd2005-08-27 18:50:39 +00005738 }
Chris Lattner38905612008-02-19 04:36:25 +00005739 delete (yyvsp[(8) - (9)].JumpTable);
Reid Spencer61c83e02006-08-18 08:43:06 +00005740 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005741 ;}
5742 break;
5743
Devang Patel67909432008-03-03 18:58:47 +00005744 case 283:
5745#line 2633 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005746 {
5747 Value* tmpVal = getVal((yyvsp[(2) - (8)].PrimType), (yyvsp[(3) - (8)].ValIDVal));
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005748 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005749 BasicBlock* tmpBB = getBBVal((yyvsp[(6) - (8)].ValIDVal));
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005750 CHECK_FOR_ERROR
5751 SwitchInst *S = new SwitchInst(tmpVal, tmpBB, 0);
Chris Lattner38905612008-02-19 04:36:25 +00005752 (yyval.TermInstVal) = S;
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005753 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005754 ;}
5755 break;
5756
Devang Patel67909432008-03-03 18:58:47 +00005757 case 284:
5758#line 2643 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005759 {
Reid Spencer3822ff52006-11-08 06:47:33 +00005760
Reid Spencer14310612006-12-31 05:40:51 +00005761 // Handle the short syntax
5762 const PointerType *PFTy = 0;
5763 const FunctionType *Ty = 0;
Chris Lattner38905612008-02-19 04:36:25 +00005764 if (!(PFTy = dyn_cast<PointerType>((yyvsp[(3) - (14)].TypeVal)->get())) ||
Reid Spencer68a24bd2005-08-27 18:50:39 +00005765 !(Ty = dyn_cast<FunctionType>(PFTy->getElementType()))) {
5766 // Pull out the types of all of the arguments...
5767 std::vector<const Type*> ParamTypes;
Chris Lattner38905612008-02-19 04:36:25 +00005768 ParamList::iterator I = (yyvsp[(6) - (14)].ParamList)->begin(), E = (yyvsp[(6) - (14)].ParamList)->end();
Duncan Sandsdc024672007-11-27 13:23:08 +00005769 for (; I != E; ++I) {
Reid Spencer14310612006-12-31 05:40:51 +00005770 const Type *Ty = I->Val->getType();
5771 if (Ty == Type::VoidTy)
5772 GEN_ERROR("Short call syntax cannot be used with varargs");
5773 ParamTypes.push_back(Ty);
Reid Spencer68a24bd2005-08-27 18:50:39 +00005774 }
Chris Lattner38905612008-02-19 04:36:25 +00005775 Ty = FunctionType::get((yyvsp[(3) - (14)].TypeVal)->get(), ParamTypes, false);
Christopher Lamb4374f8e2007-12-17 01:17:35 +00005776 PFTy = PointerType::getUnqual(Ty);
Reid Spencer68a24bd2005-08-27 18:50:39 +00005777 }
5778
Chris Lattner38905612008-02-19 04:36:25 +00005779 delete (yyvsp[(3) - (14)].TypeVal);
Reid Spencer66728ef2007-03-20 01:13:36 +00005780
Chris Lattner38905612008-02-19 04:36:25 +00005781 Value *V = getVal(PFTy, (yyvsp[(4) - (14)].ValIDVal)); // Get the function we're calling...
Andrew Lenharth6353e052006-12-08 18:07:09 +00005782 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005783 BasicBlock *Normal = getBBVal((yyvsp[(11) - (14)].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005784 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005785 BasicBlock *Except = getBBVal((yyvsp[(14) - (14)].ValIDVal));
Reid Spencer5b7e7532006-09-28 19:28:24 +00005786 CHECK_FOR_ERROR
Reid Spencer68a24bd2005-08-27 18:50:39 +00005787
Duncan Sandsdc024672007-11-27 13:23:08 +00005788 ParamAttrsVector Attrs;
Chris Lattner38905612008-02-19 04:36:25 +00005789 if ((yyvsp[(8) - (14)].ParamAttrs) != ParamAttr::None) {
5790 ParamAttrsWithIndex PAWI; PAWI.index = 0; PAWI.attrs = (yyvsp[(8) - (14)].ParamAttrs);
Duncan Sandsdc024672007-11-27 13:23:08 +00005791 Attrs.push_back(PAWI);
5792 }
5793
Reid Spencer14310612006-12-31 05:40:51 +00005794 // Check the arguments
5795 ValueList Args;
Chris Lattner38905612008-02-19 04:36:25 +00005796 if ((yyvsp[(6) - (14)].ParamList)->empty()) { // Has no arguments?
Reid Spencer14310612006-12-31 05:40:51 +00005797 // Make sure no arguments is a good thing!
5798 if (Ty->getNumParams() != 0)
5799 GEN_ERROR("No arguments passed to a function that "
Reid Spencerb5334b02007-02-05 10:18:06 +00005800 "expects arguments");
Reid Spencer68a24bd2005-08-27 18:50:39 +00005801 } else { // Has arguments?
5802 // Loop through FunctionType's arguments and ensure they are specified
5803 // correctly!
Reid Spencer68a24bd2005-08-27 18:50:39 +00005804 FunctionType::param_iterator I = Ty->param_begin();
5805 FunctionType::param_iterator E = Ty->param_end();
Chris Lattner38905612008-02-19 04:36:25 +00005806 ParamList::iterator ArgI = (yyvsp[(6) - (14)].ParamList)->begin(), ArgE = (yyvsp[(6) - (14)].ParamList)->end();
Duncan Sandsdc024672007-11-27 13:23:08 +00005807 unsigned index = 1;
Reid Spencer68a24bd2005-08-27 18:50:39 +00005808
Duncan Sandsdc024672007-11-27 13:23:08 +00005809 for (; ArgI != ArgE && I != E; ++ArgI, ++I, ++index) {
Reid Spencer14310612006-12-31 05:40:51 +00005810 if (ArgI->Val->getType() != *I)
5811 GEN_ERROR("Parameter " + ArgI->Val->getName()+ " is not of type '" +
Reid Spencerb5334b02007-02-05 10:18:06 +00005812 (*I)->getDescription() + "'");
Reid Spencer14310612006-12-31 05:40:51 +00005813 Args.push_back(ArgI->Val);
Duncan Sandsdc024672007-11-27 13:23:08 +00005814 if (ArgI->Attrs != ParamAttr::None) {
5815 ParamAttrsWithIndex PAWI;
5816 PAWI.index = index;
5817 PAWI.attrs = ArgI->Attrs;
5818 Attrs.push_back(PAWI);
5819 }
Reid Spencer14310612006-12-31 05:40:51 +00005820 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00005821
Reid Spencer14310612006-12-31 05:40:51 +00005822 if (Ty->isVarArg()) {
5823 if (I == E)
Chris Lattner38905612008-02-19 04:36:25 +00005824 for (; ArgI != ArgE; ++ArgI, ++index) {
Reid Spencer14310612006-12-31 05:40:51 +00005825 Args.push_back(ArgI->Val); // push the remaining varargs
Chris Lattner38905612008-02-19 04:36:25 +00005826 if (ArgI->Attrs != ParamAttr::None) {
5827 ParamAttrsWithIndex PAWI;
5828 PAWI.index = index;
5829 PAWI.attrs = ArgI->Attrs;
5830 Attrs.push_back(PAWI);
5831 }
5832 }
Reid Spencer14310612006-12-31 05:40:51 +00005833 } else if (I != E || ArgI != ArgE)
Reid Spencerb5334b02007-02-05 10:18:06 +00005834 GEN_ERROR("Invalid number of parameters detected");
Reid Spencer68a24bd2005-08-27 18:50:39 +00005835 }
Reid Spencer14310612006-12-31 05:40:51 +00005836
Duncan Sandsafa3b6d2007-11-28 17:07:01 +00005837 const ParamAttrsList *PAL = 0;
Duncan Sandsdc024672007-11-27 13:23:08 +00005838 if (!Attrs.empty())
5839 PAL = ParamAttrsList::get(Attrs);
5840
Reid Spencer14310612006-12-31 05:40:51 +00005841 // Create the InvokeInst
Chris Lattnerd80fb8b2007-08-29 16:15:23 +00005842 InvokeInst *II = new InvokeInst(V, Normal, Except, Args.begin(), Args.end());
Chris Lattner38905612008-02-19 04:36:25 +00005843 II->setCallingConv((yyvsp[(2) - (14)].UIntVal));
Duncan Sandsdc024672007-11-27 13:23:08 +00005844 II->setParamAttrs(PAL);
Chris Lattner38905612008-02-19 04:36:25 +00005845 (yyval.TermInstVal) = II;
5846 delete (yyvsp[(6) - (14)].ParamList);
Andrew Lenharth6353e052006-12-08 18:07:09 +00005847 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005848 ;}
5849 break;
5850
Devang Patel67909432008-03-03 18:58:47 +00005851 case 285:
5852#line 2733 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005853 {
5854 (yyval.TermInstVal) = new UnwindInst();
Andrew Lenharth6353e052006-12-08 18:07:09 +00005855 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005856 ;}
5857 break;
5858
Devang Patel67909432008-03-03 18:58:47 +00005859 case 286:
5860#line 2737 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005861 {
5862 (yyval.TermInstVal) = new UnreachableInst();
Andrew Lenharth6353e052006-12-08 18:07:09 +00005863 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005864 ;}
5865 break;
5866
Devang Patel67909432008-03-03 18:58:47 +00005867 case 287:
5868#line 2744 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005869 {
5870 (yyval.JumpTable) = (yyvsp[(1) - (6)].JumpTable);
5871 Constant *V = cast<Constant>(getExistingVal((yyvsp[(2) - (6)].PrimType), (yyvsp[(3) - (6)].ValIDVal)));
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005872 CHECK_FOR_ERROR
5873 if (V == 0)
5874 GEN_ERROR("May only switch on a constant pool value");
5875
Chris Lattner38905612008-02-19 04:36:25 +00005876 BasicBlock* tmpBB = getBBVal((yyvsp[(6) - (6)].ValIDVal));
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005877 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005878 (yyval.JumpTable)->push_back(std::make_pair(V, tmpBB));
5879 ;}
5880 break;
5881
Devang Patel67909432008-03-03 18:58:47 +00005882 case 288:
5883#line 2755 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005884 {
5885 (yyval.JumpTable) = new std::vector<std::pair<Constant*, BasicBlock*> >();
5886 Constant *V = cast<Constant>(getExistingVal((yyvsp[(1) - (5)].PrimType), (yyvsp[(2) - (5)].ValIDVal)));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005887 CHECK_FOR_ERROR
5888
5889 if (V == 0)
Reid Spencerb5334b02007-02-05 10:18:06 +00005890 GEN_ERROR("May only switch on a constant pool value");
Andrew Lenharth6353e052006-12-08 18:07:09 +00005891
Chris Lattner38905612008-02-19 04:36:25 +00005892 BasicBlock* tmpBB = getBBVal((yyvsp[(5) - (5)].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005893 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005894 (yyval.JumpTable)->push_back(std::make_pair(V, tmpBB));
5895 ;}
5896 break;
5897
Devang Patel67909432008-03-03 18:58:47 +00005898 case 289:
5899#line 2768 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005900 {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005901 // Is this definition named?? if so, assign the name...
Chris Lattner38905612008-02-19 04:36:25 +00005902 setValueName((yyvsp[(2) - (2)].InstVal), (yyvsp[(1) - (2)].StrVal));
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005903 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005904 InsertValue((yyvsp[(2) - (2)].InstVal));
5905 (yyval.InstVal) = (yyvsp[(2) - (2)].InstVal);
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005906 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005907 ;}
5908 break;
5909
Devang Patel67909432008-03-03 18:58:47 +00005910 case 290:
5911#line 2778 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005912 { // Used for PHI nodes
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005913 if (!UpRefs.empty())
Chris Lattner38905612008-02-19 04:36:25 +00005914 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (6)].TypeVal))->getDescription());
5915 (yyval.PHIList) = new std::list<std::pair<Value*, BasicBlock*> >();
5916 Value* tmpVal = getVal(*(yyvsp[(1) - (6)].TypeVal), (yyvsp[(3) - (6)].ValIDVal));
Reid Spencer6f407902007-01-13 05:00:46 +00005917 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005918 BasicBlock* tmpBB = getBBVal((yyvsp[(5) - (6)].ValIDVal));
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005919 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005920 (yyval.PHIList)->push_back(std::make_pair(tmpVal, tmpBB));
5921 delete (yyvsp[(1) - (6)].TypeVal);
5922 ;}
5923 break;
5924
Devang Patel67909432008-03-03 18:58:47 +00005925 case 291:
5926#line 2789 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005927 {
5928 (yyval.PHIList) = (yyvsp[(1) - (7)].PHIList);
5929 Value* tmpVal = getVal((yyvsp[(1) - (7)].PHIList)->front().first->getType(), (yyvsp[(4) - (7)].ValIDVal));
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005930 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005931 BasicBlock* tmpBB = getBBVal((yyvsp[(6) - (7)].ValIDVal));
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005932 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005933 (yyvsp[(1) - (7)].PHIList)->push_back(std::make_pair(tmpVal, tmpBB));
5934 ;}
5935 break;
5936
Devang Patel67909432008-03-03 18:58:47 +00005937 case 292:
5938#line 2799 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005939 {
Duncan Sandsdc024672007-11-27 13:23:08 +00005940 // FIXME: Remove trailing OptParamAttrs in LLVM 3.0, it was a mistake in 2.0
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005941 if (!UpRefs.empty())
Chris Lattner38905612008-02-19 04:36:25 +00005942 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (4)].TypeVal))->getDescription());
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005943 // Used for call and invoke instructions
Chris Lattner38905612008-02-19 04:36:25 +00005944 (yyval.ParamList) = new ParamList();
5945 ParamListEntry E; E.Attrs = (yyvsp[(2) - (4)].ParamAttrs) | (yyvsp[(4) - (4)].ParamAttrs); E.Val = getVal((yyvsp[(1) - (4)].TypeVal)->get(), (yyvsp[(3) - (4)].ValIDVal));
5946 (yyval.ParamList)->push_back(E);
5947 delete (yyvsp[(1) - (4)].TypeVal);
Duncan Sandsdc024672007-11-27 13:23:08 +00005948 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005949 ;}
5950 break;
5951
Devang Patel67909432008-03-03 18:58:47 +00005952 case 293:
5953#line 2810 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005954 {
Duncan Sandsdc024672007-11-27 13:23:08 +00005955 // FIXME: Remove trailing OptParamAttrs in LLVM 3.0, it was a mistake in 2.0
Dale Johanneseneb57ea72007-11-05 21:20:28 +00005956 // Labels are only valid in ASMs
Chris Lattner38905612008-02-19 04:36:25 +00005957 (yyval.ParamList) = new ParamList();
5958 ParamListEntry E; E.Attrs = (yyvsp[(2) - (4)].ParamAttrs) | (yyvsp[(4) - (4)].ParamAttrs); E.Val = getBBVal((yyvsp[(3) - (4)].ValIDVal));
5959 (yyval.ParamList)->push_back(E);
Duncan Sandsdc024672007-11-27 13:23:08 +00005960 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005961 ;}
5962 break;
5963
Devang Patel67909432008-03-03 18:58:47 +00005964 case 294:
5965#line 2818 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005966 {
Duncan Sandsdc024672007-11-27 13:23:08 +00005967 // FIXME: Remove trailing OptParamAttrs in LLVM 3.0, it was a mistake in 2.0
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005968 if (!UpRefs.empty())
Chris Lattner38905612008-02-19 04:36:25 +00005969 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(3) - (6)].TypeVal))->getDescription());
5970 (yyval.ParamList) = (yyvsp[(1) - (6)].ParamList);
5971 ParamListEntry E; E.Attrs = (yyvsp[(4) - (6)].ParamAttrs) | (yyvsp[(6) - (6)].ParamAttrs); E.Val = getVal((yyvsp[(3) - (6)].TypeVal)->get(), (yyvsp[(5) - (6)].ValIDVal));
5972 (yyval.ParamList)->push_back(E);
5973 delete (yyvsp[(3) - (6)].TypeVal);
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005974 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005975 ;}
5976 break;
5977
Devang Patel67909432008-03-03 18:58:47 +00005978 case 295:
5979#line 2828 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005980 {
Duncan Sandsdc024672007-11-27 13:23:08 +00005981 // FIXME: Remove trailing OptParamAttrs in LLVM 3.0, it was a mistake in 2.0
Chris Lattner38905612008-02-19 04:36:25 +00005982 (yyval.ParamList) = (yyvsp[(1) - (6)].ParamList);
5983 ParamListEntry E; E.Attrs = (yyvsp[(4) - (6)].ParamAttrs) | (yyvsp[(6) - (6)].ParamAttrs); E.Val = getBBVal((yyvsp[(5) - (6)].ValIDVal));
5984 (yyval.ParamList)->push_back(E);
Dale Johanneseneb57ea72007-11-05 21:20:28 +00005985 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005986 ;}
5987 break;
5988
Devang Patel67909432008-03-03 18:58:47 +00005989 case 296:
5990#line 2835 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005991 { (yyval.ParamList) = new ParamList(); ;}
5992 break;
5993
Devang Patel67909432008-03-03 18:58:47 +00005994 case 297:
5995#line 2838 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005996 { (yyval.ValueList) = new std::vector<Value*>(); ;}
5997 break;
5998
Devang Patel67909432008-03-03 18:58:47 +00005999 case 298:
6000#line 2839 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00006001 {
6002 (yyval.ValueList) = (yyvsp[(1) - (3)].ValueList);
6003 (yyval.ValueList)->push_back((yyvsp[(3) - (3)].ValueVal));
Reid Spencere4d87aa2006-12-23 06:05:41 +00006004 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00006005 ;}
6006 break;
6007
Devang Patel67909432008-03-03 18:58:47 +00006008 case 299:
6009#line 2846 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00006010 {
6011 (yyval.BoolVal) = true;
Reid Spencere4d87aa2006-12-23 06:05:41 +00006012 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00006013 ;}
6014 break;
6015
Devang Patel67909432008-03-03 18:58:47 +00006016 case 300:
6017#line 2850 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00006018 {
6019 (yyval.BoolVal) = false;
Andrew Lenharth6353e052006-12-08 18:07:09 +00006020 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00006021 ;}
6022 break;
6023
Devang Patel67909432008-03-03 18:58:47 +00006024 case 301:
6025#line 2855 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00006026 {
Reid Spencer14310612006-12-31 05:40:51 +00006027 if (!UpRefs.empty())
Chris Lattner38905612008-02-19 04:36:25 +00006028 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(2) - (5)].TypeVal))->getDescription());
6029 if (!(*(yyvsp[(2) - (5)].TypeVal))->isInteger() && !(*(yyvsp[(2) - (5)].TypeVal))->isFloatingPoint() &&
6030 !isa<VectorType>((*(yyvsp[(2) - (5)].TypeVal)).get()))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00006031 GEN_ERROR(
6032 "Arithmetic operator requires integer, FP, or packed operands");
Chris Lattner38905612008-02-19 04:36:25 +00006033 Value* val1 = getVal(*(yyvsp[(2) - (5)].TypeVal), (yyvsp[(3) - (5)].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00006034 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00006035 Value* val2 = getVal(*(yyvsp[(2) - (5)].TypeVal), (yyvsp[(5) - (5)].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00006036 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00006037 (yyval.InstVal) = BinaryOperator::create((yyvsp[(1) - (5)].BinaryOpVal), val1, val2);
6038 if ((yyval.InstVal) == 0)
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00006039 GEN_ERROR("binary operator returned null");
Chris Lattner38905612008-02-19 04:36:25 +00006040 delete (yyvsp[(2) - (5)].TypeVal);
6041 ;}
6042 break;
6043
Devang Patel67909432008-03-03 18:58:47 +00006044 case 302:
6045#line 2871 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00006046 {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00006047 if (!UpRefs.empty())
Chris Lattner38905612008-02-19 04:36:25 +00006048 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(2) - (5)].TypeVal))->getDescription());
6049 if (!(*(yyvsp[(2) - (5)].TypeVal))->isInteger()) {
6050 if (Instruction::isShift((yyvsp[(1) - (5)].BinaryOpVal)) || !isa<VectorType>((yyvsp[(2) - (5)].TypeVal)->get()) ||
6051 !cast<VectorType>((yyvsp[(2) - (5)].TypeVal)->get())->getElementType()->isInteger())
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00006052 GEN_ERROR("Logical operator requires integral operands");
6053 }
Chris Lattner38905612008-02-19 04:36:25 +00006054 Value* tmpVal1 = getVal(*(yyvsp[(2) - (5)].TypeVal), (yyvsp[(3) - (5)].ValIDVal));
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00006055 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00006056 Value* tmpVal2 = getVal(*(yyvsp[(2) - (5)].TypeVal), (yyvsp[(5) - (5)].ValIDVal));
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00006057 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00006058 (yyval.InstVal) = BinaryOperator::create((yyvsp[(1) - (5)].BinaryOpVal), tmpVal1, tmpVal2);
6059 if ((yyval.InstVal) == 0)
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00006060 GEN_ERROR("binary operator returned null");
Chris Lattner38905612008-02-19 04:36:25 +00006061 delete (yyvsp[(2) - (5)].TypeVal);
6062 ;}
6063 break;
6064
Devang Patel67909432008-03-03 18:58:47 +00006065 case 303:
6066#line 2888 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00006067 {
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00006068 if (!UpRefs.empty())
Chris Lattner38905612008-02-19 04:36:25 +00006069 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(3) - (6)].TypeVal))->getDescription());
6070 if (isa<VectorType>((*(yyvsp[(3) - (6)].TypeVal)).get()))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00006071 GEN_ERROR("Vector types not supported by icmp instruction");
Chris Lattner38905612008-02-19 04:36:25 +00006072 Value* tmpVal1 = getVal(*(yyvsp[(3) - (6)].TypeVal), (yyvsp[(4) - (6)].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00006073 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00006074 Value* tmpVal2 = getVal(*(yyvsp[(3) - (6)].TypeVal), (yyvsp[(6) - (6)].ValIDVal));
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00006075 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00006076 (yyval.InstVal) = CmpInst::create((yyvsp[(1) - (6)].OtherOpVal), (yyvsp[(2) - (6)].IPredicate), tmpVal1, tmpVal2);
6077 if ((yyval.InstVal) == 0)
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00006078 GEN_ERROR("icmp operator returned null");
Chris Lattner38905612008-02-19 04:36:25 +00006079 delete (yyvsp[(3) - (6)].TypeVal);
6080 ;}
6081 break;
6082
Devang Patel67909432008-03-03 18:58:47 +00006083 case 304:
6084#line 2902 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00006085 {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00006086 if (!UpRefs.empty())
Chris Lattner38905612008-02-19 04:36:25 +00006087 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(3) - (6)].TypeVal))->getDescription());
6088 if (isa<VectorType>((*(yyvsp[(3) - (6)].TypeVal)).get()))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00006089 GEN_ERROR("Vector types not supported by fcmp instruction");
Chris Lattner38905612008-02-19 04:36:25 +00006090 Value* tmpVal1 = getVal(*(yyvsp[(3) - (6)].TypeVal), (yyvsp[(4) - (6)].ValIDVal));
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00006091 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00006092 Value* tmpVal2 = getVal(*(yyvsp[(3) - (6)].TypeVal), (yyvsp[(6) - (6)].ValIDVal));
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00006093 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00006094 (yyval.InstVal) = CmpInst::create((yyvsp[(1) - (6)].OtherOpVal), (yyvsp[(2) - (6)].FPredicate), tmpVal1, tmpVal2);
6095 if ((yyval.InstVal) == 0)
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00006096 GEN_ERROR("fcmp operator returned null");
Chris Lattner38905612008-02-19 04:36:25 +00006097 delete (yyvsp[(3) - (6)].TypeVal);
6098 ;}
6099 break;
6100
Devang Patel67909432008-03-03 18:58:47 +00006101 case 305:
6102#line 2916 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00006103 {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00006104 if (!UpRefs.empty())
Chris Lattner38905612008-02-19 04:36:25 +00006105 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(4) - (4)].TypeVal))->getDescription());
6106 Value* Val = (yyvsp[(2) - (4)].ValueVal);
6107 const Type* DestTy = (yyvsp[(4) - (4)].TypeVal)->get();
6108 if (!CastInst::castIsValid((yyvsp[(1) - (4)].CastOpVal), Val, DestTy))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00006109 GEN_ERROR("invalid cast opcode for cast from '" +
6110 Val->getType()->getDescription() + "' to '" +
6111 DestTy->getDescription() + "'");
Chris Lattner38905612008-02-19 04:36:25 +00006112 (yyval.InstVal) = CastInst::create((yyvsp[(1) - (4)].CastOpVal), Val, DestTy);
6113 delete (yyvsp[(4) - (4)].TypeVal);
6114 ;}
6115 break;
6116
Devang Patel67909432008-03-03 18:58:47 +00006117 case 306:
6118#line 2928 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00006119 {
6120 if ((yyvsp[(2) - (6)].ValueVal)->getType() != Type::Int1Ty)
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00006121 GEN_ERROR("select condition must be boolean");
Chris Lattner38905612008-02-19 04:36:25 +00006122 if ((yyvsp[(4) - (6)].ValueVal)->getType() != (yyvsp[(6) - (6)].ValueVal)->getType())
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00006123 GEN_ERROR("select value types should match");
Chris Lattner38905612008-02-19 04:36:25 +00006124 (yyval.InstVal) = new SelectInst((yyvsp[(2) - (6)].ValueVal), (yyvsp[(4) - (6)].ValueVal), (yyvsp[(6) - (6)].ValueVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00006125 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00006126 ;}
6127 break;
6128
Devang Patel67909432008-03-03 18:58:47 +00006129 case 307:
6130#line 2936 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00006131 {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00006132 if (!UpRefs.empty())
Chris Lattner38905612008-02-19 04:36:25 +00006133 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(4) - (4)].TypeVal))->getDescription());
6134 (yyval.InstVal) = new VAArgInst((yyvsp[(2) - (4)].ValueVal), *(yyvsp[(4) - (4)].TypeVal));
6135 delete (yyvsp[(4) - (4)].TypeVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00006136 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00006137 ;}
6138 break;
6139
Devang Patel67909432008-03-03 18:58:47 +00006140 case 308:
6141#line 2943 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00006142 {
6143 if (!ExtractElementInst::isValidOperands((yyvsp[(2) - (4)].ValueVal), (yyvsp[(4) - (4)].ValueVal)))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00006144 GEN_ERROR("Invalid extractelement operands");
Chris Lattner38905612008-02-19 04:36:25 +00006145 (yyval.InstVal) = new ExtractElementInst((yyvsp[(2) - (4)].ValueVal), (yyvsp[(4) - (4)].ValueVal));
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00006146 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00006147 ;}
6148 break;
6149
Devang Patel67909432008-03-03 18:58:47 +00006150 case 309:
6151#line 2949 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00006152 {
6153 if (!InsertElementInst::isValidOperands((yyvsp[(2) - (6)].ValueVal), (yyvsp[(4) - (6)].ValueVal), (yyvsp[(6) - (6)].ValueVal)))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00006154 GEN_ERROR("Invalid insertelement operands");
Chris Lattner38905612008-02-19 04:36:25 +00006155 (yyval.InstVal) = new InsertElementInst((yyvsp[(2) - (6)].ValueVal), (yyvsp[(4) - (6)].ValueVal), (yyvsp[(6) - (6)].ValueVal));
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00006156 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00006157 ;}
6158 break;
6159
Devang Patel67909432008-03-03 18:58:47 +00006160 case 310:
6161#line 2955 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00006162 {
6163 if (!ShuffleVectorInst::isValidOperands((yyvsp[(2) - (6)].ValueVal), (yyvsp[(4) - (6)].ValueVal), (yyvsp[(6) - (6)].ValueVal)))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00006164 GEN_ERROR("Invalid shufflevector operands");
Chris Lattner38905612008-02-19 04:36:25 +00006165 (yyval.InstVal) = new ShuffleVectorInst((yyvsp[(2) - (6)].ValueVal), (yyvsp[(4) - (6)].ValueVal), (yyvsp[(6) - (6)].ValueVal));
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00006166 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00006167 ;}
6168 break;
6169
Devang Patel67909432008-03-03 18:58:47 +00006170 case 311:
6171#line 2961 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00006172 {
6173 const Type *Ty = (yyvsp[(2) - (2)].PHIList)->front().first->getType();
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00006174 if (!Ty->isFirstClassType())
6175 GEN_ERROR("PHI node operands must be of first class type");
Chris Lattner38905612008-02-19 04:36:25 +00006176 (yyval.InstVal) = new PHINode(Ty);
6177 ((PHINode*)(yyval.InstVal))->reserveOperandSpace((yyvsp[(2) - (2)].PHIList)->size());
6178 while ((yyvsp[(2) - (2)].PHIList)->begin() != (yyvsp[(2) - (2)].PHIList)->end()) {
6179 if ((yyvsp[(2) - (2)].PHIList)->front().first->getType() != Ty)
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00006180 GEN_ERROR("All elements of a PHI node must be of the same type");
Chris Lattner38905612008-02-19 04:36:25 +00006181 cast<PHINode>((yyval.InstVal))->addIncoming((yyvsp[(2) - (2)].PHIList)->front().first, (yyvsp[(2) - (2)].PHIList)->front().second);
6182 (yyvsp[(2) - (2)].PHIList)->pop_front();
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00006183 }
Chris Lattner38905612008-02-19 04:36:25 +00006184 delete (yyvsp[(2) - (2)].PHIList); // Free the list...
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00006185 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00006186 ;}
6187 break;
6188
Devang Patel67909432008-03-03 18:58:47 +00006189 case 312:
6190#line 2977 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00006191 {
Reid Spencer14310612006-12-31 05:40:51 +00006192
6193 // Handle the short syntax
Andrew Lenharth6353e052006-12-08 18:07:09 +00006194 const PointerType *PFTy = 0;
6195 const FunctionType *Ty = 0;
Chris Lattner38905612008-02-19 04:36:25 +00006196 if (!(PFTy = dyn_cast<PointerType>((yyvsp[(3) - (8)].TypeVal)->get())) ||
Andrew Lenharth6353e052006-12-08 18:07:09 +00006197 !(Ty = dyn_cast<FunctionType>(PFTy->getElementType()))) {
6198 // Pull out the types of all of the arguments...
6199 std::vector<const Type*> ParamTypes;
Chris Lattner38905612008-02-19 04:36:25 +00006200 ParamList::iterator I = (yyvsp[(6) - (8)].ParamList)->begin(), E = (yyvsp[(6) - (8)].ParamList)->end();
Duncan Sandsdc024672007-11-27 13:23:08 +00006201 for (; I != E; ++I) {
Reid Spencer14310612006-12-31 05:40:51 +00006202 const Type *Ty = I->Val->getType();
6203 if (Ty == Type::VoidTy)
6204 GEN_ERROR("Short call syntax cannot be used with varargs");
6205 ParamTypes.push_back(Ty);
Andrew Lenharth6353e052006-12-08 18:07:09 +00006206 }
Chris Lattner38905612008-02-19 04:36:25 +00006207 Ty = FunctionType::get((yyvsp[(3) - (8)].TypeVal)->get(), ParamTypes, false);
Christopher Lamb4374f8e2007-12-17 01:17:35 +00006208 PFTy = PointerType::getUnqual(Ty);
Andrew Lenharth6353e052006-12-08 18:07:09 +00006209 }
Chris Lattner6cdc6822007-04-26 05:31:05 +00006210
Chris Lattner38905612008-02-19 04:36:25 +00006211 Value *V = getVal(PFTy, (yyvsp[(4) - (8)].ValIDVal)); // Get the function we're calling...
Andrew Lenharth6353e052006-12-08 18:07:09 +00006212 CHECK_FOR_ERROR
Chris Lattner6cdc6822007-04-26 05:31:05 +00006213
Reid Spencer7780acb2007-04-16 06:56:07 +00006214 // Check for call to invalid intrinsic to avoid crashing later.
6215 if (Function *theF = dyn_cast<Function>(V)) {
Reid Spencered48de22007-04-16 22:02:23 +00006216 if (theF->hasName() && (theF->getValueName()->getKeyLength() >= 5) &&
Reid Spencer36fdde12007-04-16 20:35:38 +00006217 (0 == strncmp(theF->getValueName()->getKeyData(), "llvm.", 5)) &&
6218 !theF->getIntrinsicID(true))
Reid Spencer7780acb2007-04-16 06:56:07 +00006219 GEN_ERROR("Call to invalid LLVM intrinsic function '" +
6220 theF->getName() + "'");
6221 }
6222
Duncan Sandsdc024672007-11-27 13:23:08 +00006223 // Set up the ParamAttrs for the function
6224 ParamAttrsVector Attrs;
Chris Lattner38905612008-02-19 04:36:25 +00006225 if ((yyvsp[(8) - (8)].ParamAttrs) != ParamAttr::None) {
Duncan Sandsdc024672007-11-27 13:23:08 +00006226 ParamAttrsWithIndex PAWI;
6227 PAWI.index = 0;
Chris Lattner38905612008-02-19 04:36:25 +00006228 PAWI.attrs = (yyvsp[(8) - (8)].ParamAttrs);
Duncan Sandsdc024672007-11-27 13:23:08 +00006229 Attrs.push_back(PAWI);
6230 }
Reid Spencer14310612006-12-31 05:40:51 +00006231 // Check the arguments
6232 ValueList Args;
Chris Lattner38905612008-02-19 04:36:25 +00006233 if ((yyvsp[(6) - (8)].ParamList)->empty()) { // Has no arguments?
Andrew Lenharth6353e052006-12-08 18:07:09 +00006234 // Make sure no arguments is a good thing!
6235 if (Ty->getNumParams() != 0)
6236 GEN_ERROR("No arguments passed to a function that "
Reid Spencerb5334b02007-02-05 10:18:06 +00006237 "expects arguments");
Andrew Lenharth6353e052006-12-08 18:07:09 +00006238 } else { // Has arguments?
6239 // Loop through FunctionType's arguments and ensure they are specified
Duncan Sandsdc024672007-11-27 13:23:08 +00006240 // correctly. Also, gather any parameter attributes.
Andrew Lenharth6353e052006-12-08 18:07:09 +00006241 FunctionType::param_iterator I = Ty->param_begin();
6242 FunctionType::param_iterator E = Ty->param_end();
Chris Lattner38905612008-02-19 04:36:25 +00006243 ParamList::iterator ArgI = (yyvsp[(6) - (8)].ParamList)->begin(), ArgE = (yyvsp[(6) - (8)].ParamList)->end();
Duncan Sandsdc024672007-11-27 13:23:08 +00006244 unsigned index = 1;
Andrew Lenharth6353e052006-12-08 18:07:09 +00006245
Duncan Sandsdc024672007-11-27 13:23:08 +00006246 for (; ArgI != ArgE && I != E; ++ArgI, ++I, ++index) {
Reid Spencer14310612006-12-31 05:40:51 +00006247 if (ArgI->Val->getType() != *I)
6248 GEN_ERROR("Parameter " + ArgI->Val->getName()+ " is not of type '" +
Reid Spencerb5334b02007-02-05 10:18:06 +00006249 (*I)->getDescription() + "'");
Reid Spencer14310612006-12-31 05:40:51 +00006250 Args.push_back(ArgI->Val);
Duncan Sandsdc024672007-11-27 13:23:08 +00006251 if (ArgI->Attrs != ParamAttr::None) {
6252 ParamAttrsWithIndex PAWI;
6253 PAWI.index = index;
6254 PAWI.attrs = ArgI->Attrs;
6255 Attrs.push_back(PAWI);
6256 }
Reid Spencer14310612006-12-31 05:40:51 +00006257 }
6258 if (Ty->isVarArg()) {
6259 if (I == E)
Chris Lattner38905612008-02-19 04:36:25 +00006260 for (; ArgI != ArgE; ++ArgI, ++index) {
Reid Spencer14310612006-12-31 05:40:51 +00006261 Args.push_back(ArgI->Val); // push the remaining varargs
Chris Lattner38905612008-02-19 04:36:25 +00006262 if (ArgI->Attrs != ParamAttr::None) {
6263 ParamAttrsWithIndex PAWI;
6264 PAWI.index = index;
6265 PAWI.attrs = ArgI->Attrs;
6266 Attrs.push_back(PAWI);
6267 }
6268 }
Reid Spencer14310612006-12-31 05:40:51 +00006269 } else if (I != E || ArgI != ArgE)
Reid Spencerb5334b02007-02-05 10:18:06 +00006270 GEN_ERROR("Invalid number of parameters detected");
Andrew Lenharth6353e052006-12-08 18:07:09 +00006271 }
Duncan Sandsdc024672007-11-27 13:23:08 +00006272
6273 // Finish off the ParamAttrs and check them
Duncan Sandsafa3b6d2007-11-28 17:07:01 +00006274 const ParamAttrsList *PAL = 0;
Duncan Sandsdc024672007-11-27 13:23:08 +00006275 if (!Attrs.empty())
6276 PAL = ParamAttrsList::get(Attrs);
6277
Reid Spencer14310612006-12-31 05:40:51 +00006278 // Create the call node
David Greene718fda32007-08-01 03:59:32 +00006279 CallInst *CI = new CallInst(V, Args.begin(), Args.end());
Chris Lattner38905612008-02-19 04:36:25 +00006280 CI->setTailCall((yyvsp[(1) - (8)].BoolVal));
6281 CI->setCallingConv((yyvsp[(2) - (8)].UIntVal));
Duncan Sandsdc024672007-11-27 13:23:08 +00006282 CI->setParamAttrs(PAL);
Chris Lattner38905612008-02-19 04:36:25 +00006283 (yyval.InstVal) = CI;
6284 delete (yyvsp[(6) - (8)].ParamList);
6285 delete (yyvsp[(3) - (8)].TypeVal);
Reid Spencere4d87aa2006-12-23 06:05:41 +00006286 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00006287 ;}
6288 break;
6289
Devang Patel67909432008-03-03 18:58:47 +00006290 case 313:
6291#line 3074 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00006292 {
6293 (yyval.InstVal) = (yyvsp[(1) - (1)].InstVal);
Reid Spencere4d87aa2006-12-23 06:05:41 +00006294 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00006295 ;}
6296 break;
6297
Devang Patel67909432008-03-03 18:58:47 +00006298 case 314:
6299#line 3079 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00006300 {
6301 (yyval.BoolVal) = true;
Reid Spencere4d87aa2006-12-23 06:05:41 +00006302 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00006303 ;}
6304 break;
6305
Devang Patel67909432008-03-03 18:58:47 +00006306 case 315:
6307#line 3083 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00006308 {
6309 (yyval.BoolVal) = false;
Reid Spencer61c83e02006-08-18 08:43:06 +00006310 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00006311 ;}
6312 break;
6313
Devang Patel67909432008-03-03 18:58:47 +00006314 case 316:
6315#line 3090 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00006316 {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00006317 if (!UpRefs.empty())
Chris Lattner38905612008-02-19 04:36:25 +00006318 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(2) - (3)].TypeVal))->getDescription());
6319 (yyval.InstVal) = new MallocInst(*(yyvsp[(2) - (3)].TypeVal), 0, (yyvsp[(3) - (3)].UIntVal));
6320 delete (yyvsp[(2) - (3)].TypeVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00006321 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00006322 ;}
6323 break;
6324
Devang Patel67909432008-03-03 18:58:47 +00006325 case 317:
6326#line 3097 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00006327 {
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00006328 if (!UpRefs.empty())
Chris Lattner38905612008-02-19 04:36:25 +00006329 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(2) - (6)].TypeVal))->getDescription());
6330 Value* tmpVal = getVal((yyvsp[(4) - (6)].PrimType), (yyvsp[(5) - (6)].ValIDVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00006331 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00006332 (yyval.InstVal) = new MallocInst(*(yyvsp[(2) - (6)].TypeVal), tmpVal, (yyvsp[(6) - (6)].UIntVal));
6333 delete (yyvsp[(2) - (6)].TypeVal);
6334 ;}
6335 break;
6336
Devang Patel67909432008-03-03 18:58:47 +00006337 case 318:
6338#line 3105 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00006339 {
Reid Spencer14310612006-12-31 05:40:51 +00006340 if (!UpRefs.empty())
Chris Lattner38905612008-02-19 04:36:25 +00006341 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(2) - (3)].TypeVal))->getDescription());
6342 (yyval.InstVal) = new AllocaInst(*(yyvsp[(2) - (3)].TypeVal), 0, (yyvsp[(3) - (3)].UIntVal));
6343 delete (yyvsp[(2) - (3)].TypeVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00006344 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00006345 ;}
6346 break;
6347
Devang Patel67909432008-03-03 18:58:47 +00006348 case 319:
6349#line 3112 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00006350 {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00006351 if (!UpRefs.empty())
Chris Lattner38905612008-02-19 04:36:25 +00006352 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(2) - (6)].TypeVal))->getDescription());
6353 Value* tmpVal = getVal((yyvsp[(4) - (6)].PrimType), (yyvsp[(5) - (6)].ValIDVal));
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00006354 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00006355 (yyval.InstVal) = new AllocaInst(*(yyvsp[(2) - (6)].TypeVal), tmpVal, (yyvsp[(6) - (6)].UIntVal));
6356 delete (yyvsp[(2) - (6)].TypeVal);
6357 ;}
6358 break;
6359
Devang Patel67909432008-03-03 18:58:47 +00006360 case 320:
6361#line 3120 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00006362 {
6363 if (!isa<PointerType>((yyvsp[(2) - (2)].ValueVal)->getType()))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00006364 GEN_ERROR("Trying to free nonpointer type " +
Chris Lattner38905612008-02-19 04:36:25 +00006365 (yyvsp[(2) - (2)].ValueVal)->getType()->getDescription() + "");
6366 (yyval.InstVal) = new FreeInst((yyvsp[(2) - (2)].ValueVal));
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00006367 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00006368 ;}
6369 break;
6370
Devang Patel67909432008-03-03 18:58:47 +00006371 case 321:
6372#line 3128 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00006373 {
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00006374 if (!UpRefs.empty())
Chris Lattner38905612008-02-19 04:36:25 +00006375 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(3) - (5)].TypeVal))->getDescription());
6376 if (!isa<PointerType>((yyvsp[(3) - (5)].TypeVal)->get()))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00006377 GEN_ERROR("Can't load from nonpointer type: " +
Chris Lattner38905612008-02-19 04:36:25 +00006378 (*(yyvsp[(3) - (5)].TypeVal))->getDescription());
6379 if (!cast<PointerType>((yyvsp[(3) - (5)].TypeVal)->get())->getElementType()->isFirstClassType())
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00006380 GEN_ERROR("Can't load from pointer of non-first-class type: " +
Chris Lattner38905612008-02-19 04:36:25 +00006381 (*(yyvsp[(3) - (5)].TypeVal))->getDescription());
6382 Value* tmpVal = getVal(*(yyvsp[(3) - (5)].TypeVal), (yyvsp[(4) - (5)].ValIDVal));
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00006383 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00006384 (yyval.InstVal) = new LoadInst(tmpVal, "", (yyvsp[(1) - (5)].BoolVal), (yyvsp[(5) - (5)].UIntVal));
6385 delete (yyvsp[(3) - (5)].TypeVal);
6386 ;}
6387 break;
6388
Devang Patel67909432008-03-03 18:58:47 +00006389 case 322:
6390#line 3142 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00006391 {
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00006392 if (!UpRefs.empty())
Chris Lattner38905612008-02-19 04:36:25 +00006393 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(5) - (7)].TypeVal))->getDescription());
6394 const PointerType *PT = dyn_cast<PointerType>((yyvsp[(5) - (7)].TypeVal)->get());
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00006395 if (!PT)
6396 GEN_ERROR("Can't store to a nonpointer type: " +
Chris Lattner38905612008-02-19 04:36:25 +00006397 (*(yyvsp[(5) - (7)].TypeVal))->getDescription());
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00006398 const Type *ElTy = PT->getElementType();
Chris Lattner38905612008-02-19 04:36:25 +00006399 if (ElTy != (yyvsp[(3) - (7)].ValueVal)->getType())
6400 GEN_ERROR("Can't store '" + (yyvsp[(3) - (7)].ValueVal)->getType()->getDescription() +
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00006401 "' into space of type '" + ElTy->getDescription() + "'");
6402
Chris Lattner38905612008-02-19 04:36:25 +00006403 Value* tmpVal = getVal(*(yyvsp[(5) - (7)].TypeVal), (yyvsp[(6) - (7)].ValIDVal));
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00006404 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00006405 (yyval.InstVal) = new StoreInst((yyvsp[(3) - (7)].ValueVal), tmpVal, (yyvsp[(1) - (7)].BoolVal), (yyvsp[(7) - (7)].UIntVal));
6406 delete (yyvsp[(5) - (7)].TypeVal);
6407 ;}
6408 break;
6409
Devang Patel67909432008-03-03 18:58:47 +00006410 case 323:
6411#line 3159 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Devang Patel5a970972008-02-19 22:27:01 +00006412 {
Devang Patelbd41a062008-02-22 19:31:30 +00006413 Value *TmpVal = getVal((yyvsp[(2) - (5)].TypeVal)->get(), (yyvsp[(3) - (5)].ValIDVal));
Devang Patel4c3f8442008-02-20 19:13:10 +00006414 if (!GetResultInst::isValidOperands(TmpVal, (yyvsp[(5) - (5)].UInt64Val)))
Devang Patel5a970972008-02-19 22:27:01 +00006415 GEN_ERROR("Invalid getresult operands");
Devang Patel4c3f8442008-02-20 19:13:10 +00006416 (yyval.InstVal) = new GetResultInst(TmpVal, (yyvsp[(5) - (5)].UInt64Val));
Devang Patel6bfc63b2008-02-23 00:38:56 +00006417 delete (yyvsp[(2) - (5)].TypeVal);
Devang Patel5a970972008-02-19 22:27:01 +00006418 CHECK_FOR_ERROR
6419 ;}
6420 break;
6421
Devang Patel67909432008-03-03 18:58:47 +00006422 case 324:
6423#line 3167 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00006424 {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00006425 if (!UpRefs.empty())
Chris Lattner38905612008-02-19 04:36:25 +00006426 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(2) - (4)].TypeVal))->getDescription());
6427 if (!isa<PointerType>((yyvsp[(2) - (4)].TypeVal)->get()))
Reid Spencerb5334b02007-02-05 10:18:06 +00006428 GEN_ERROR("getelementptr insn requires pointer operand");
Reid Spencer68a24bd2005-08-27 18:50:39 +00006429
Chris Lattner38905612008-02-19 04:36:25 +00006430 if (!GetElementPtrInst::getIndexedType(*(yyvsp[(2) - (4)].TypeVal), (yyvsp[(4) - (4)].ValueList)->begin(), (yyvsp[(4) - (4)].ValueList)->end(), true))
Reid Spencer61c83e02006-08-18 08:43:06 +00006431 GEN_ERROR("Invalid getelementptr indices for type '" +
Chris Lattner38905612008-02-19 04:36:25 +00006432 (*(yyvsp[(2) - (4)].TypeVal))->getDescription()+ "'");
6433 Value* tmpVal = getVal(*(yyvsp[(2) - (4)].TypeVal), (yyvsp[(3) - (4)].ValIDVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00006434 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00006435 (yyval.InstVal) = new GetElementPtrInst(tmpVal, (yyvsp[(4) - (4)].ValueList)->begin(), (yyvsp[(4) - (4)].ValueList)->end());
6436 delete (yyvsp[(2) - (4)].TypeVal);
6437 delete (yyvsp[(4) - (4)].ValueList);
6438 ;}
6439 break;
Reid Spencer7780acb2007-04-16 06:56:07 +00006440
Chris Lattner38905612008-02-19 04:36:25 +00006441
6442/* Line 1267 of yacc.c. */
Devang Patel67909432008-03-03 18:58:47 +00006443#line 6444 "llvmAsmParser.tab.c"
Chris Lattner38905612008-02-19 04:36:25 +00006444 default: break;
Dale Johannesencdd509a2007-09-07 21:07:57 +00006445 }
Chris Lattner38905612008-02-19 04:36:25 +00006446 YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
6447
6448 YYPOPSTACK (yylen);
6449 yylen = 0;
6450 YY_STACK_PRINT (yyss, yyssp);
Reid Spencer68a24bd2005-08-27 18:50:39 +00006451
6452 *++yyvsp = yyval;
6453
6454
Chris Lattner38905612008-02-19 04:36:25 +00006455 /* Now `shift' the result of the reduction. Determine what state
6456 that goes to, based on the state we popped back to and the rule
6457 number reduced by. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00006458
6459 yyn = yyr1[yyn];
6460
Chris Lattner38905612008-02-19 04:36:25 +00006461 yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
6462 if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
Reid Spencer68a24bd2005-08-27 18:50:39 +00006463 yystate = yytable[yystate];
6464 else
Chris Lattner38905612008-02-19 04:36:25 +00006465 yystate = yydefgoto[yyn - YYNTOKENS];
Reid Spencer68a24bd2005-08-27 18:50:39 +00006466
6467 goto yynewstate;
6468
6469
Chris Lattner38905612008-02-19 04:36:25 +00006470/*------------------------------------.
6471| yyerrlab -- here on detecting error |
6472`------------------------------------*/
6473yyerrlab:
6474 /* If not already recovering from an error, report this error. */
6475 if (!yyerrstatus)
Reid Spencer68a24bd2005-08-27 18:50:39 +00006476 {
6477 ++yynerrs;
Chris Lattner38905612008-02-19 04:36:25 +00006478#if ! YYERROR_VERBOSE
6479 yyerror (YY_("syntax error"));
6480#else
6481 {
6482 YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
6483 if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
6484 {
6485 YYSIZE_T yyalloc = 2 * yysize;
6486 if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
6487 yyalloc = YYSTACK_ALLOC_MAXIMUM;
6488 if (yymsg != yymsgbuf)
6489 YYSTACK_FREE (yymsg);
6490 yymsg = (char *) YYSTACK_ALLOC (yyalloc);
6491 if (yymsg)
6492 yymsg_alloc = yyalloc;
6493 else
6494 {
6495 yymsg = yymsgbuf;
6496 yymsg_alloc = sizeof yymsgbuf;
6497 }
6498 }
Dale Johannesencdd509a2007-09-07 21:07:57 +00006499
Chris Lattner38905612008-02-19 04:36:25 +00006500 if (0 < yysize && yysize <= yymsg_alloc)
6501 {
6502 (void) yysyntax_error (yymsg, yystate, yychar);
6503 yyerror (yymsg);
6504 }
6505 else
6506 {
6507 yyerror (YY_("syntax error"));
6508 if (yysize != 0)
6509 goto yyexhaustedlab;
6510 }
6511 }
6512#endif
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00006513 }
6514
Chris Lattner38905612008-02-19 04:36:25 +00006515
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00006516
6517 if (yyerrstatus == 3)
6518 {
Chris Lattner38905612008-02-19 04:36:25 +00006519 /* If just tried and failed to reuse look-ahead token after an
6520 error, discard it. */
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00006521
Chris Lattner38905612008-02-19 04:36:25 +00006522 if (yychar <= YYEOF)
6523 {
6524 /* Return failure if at end of input. */
6525 if (yychar == YYEOF)
6526 YYABORT;
6527 }
6528 else
6529 {
6530 yydestruct ("Error: discarding",
6531 yytoken, &yylval);
6532 yychar = YYEMPTY;
6533 }
6534 }
6535
6536 /* Else will try to reuse look-ahead token after shifting the error
6537 token. */
6538 goto yyerrlab1;
6539
6540
6541/*---------------------------------------------------.
6542| yyerrorlab -- error raised explicitly by YYERROR. |
6543`---------------------------------------------------*/
6544yyerrorlab:
6545
6546 /* Pacify compilers like GCC when the user code never invokes
6547 YYERROR and the label yyerrorlab therefore never appears in user
6548 code. */
6549 if (/*CONSTCOND*/ 0)
6550 goto yyerrorlab;
6551
6552 /* Do not reclaim the symbols of the rule which action triggered
6553 this YYERROR. */
6554 YYPOPSTACK (yylen);
6555 yylen = 0;
6556 YY_STACK_PRINT (yyss, yyssp);
6557 yystate = *yyssp;
6558 goto yyerrlab1;
6559
6560
6561/*-------------------------------------------------------------.
6562| yyerrlab1 -- common code for both syntax error and YYERROR. |
6563`-------------------------------------------------------------*/
6564yyerrlab1:
6565 yyerrstatus = 3; /* Each real token shifted decrements this. */
6566
6567 for (;;)
6568 {
6569 yyn = yypact[yystate];
6570 if (yyn != YYPACT_NINF)
6571 {
6572 yyn += YYTERROR;
6573 if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
6574 {
6575 yyn = yytable[yyn];
6576 if (0 < yyn)
6577 break;
6578 }
6579 }
6580
6581 /* Pop the current state because it cannot handle the error token. */
6582 if (yyssp == yyss)
Reid Spencer68a24bd2005-08-27 18:50:39 +00006583 YYABORT;
6584
Dale Johannesencdd509a2007-09-07 21:07:57 +00006585
Chris Lattner38905612008-02-19 04:36:25 +00006586 yydestruct ("Error: popping",
6587 yystos[yystate], yyvsp);
6588 YYPOPSTACK (1);
6589 yystate = *yyssp;
6590 YY_STACK_PRINT (yyss, yyssp);
Reid Spencer68a24bd2005-08-27 18:50:39 +00006591 }
6592
6593 if (yyn == YYFINAL)
6594 YYACCEPT;
6595
Reid Spencer68a24bd2005-08-27 18:50:39 +00006596 *++yyvsp = yylval;
Chris Lattner38905612008-02-19 04:36:25 +00006597
6598
6599 /* Shift the error token. */
6600 YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
Reid Spencerb8f85052007-07-31 03:50:36 +00006601
Reid Spencer68a24bd2005-08-27 18:50:39 +00006602 yystate = yyn;
6603 goto yynewstate;
6604
Scott Michel15dcd8e2008-01-30 03:10:00 +00006605
Chris Lattner38905612008-02-19 04:36:25 +00006606/*-------------------------------------.
6607| yyacceptlab -- YYACCEPT comes here. |
6608`-------------------------------------*/
6609yyacceptlab:
6610 yyresult = 0;
6611 goto yyreturn;
6612
6613/*-----------------------------------.
6614| yyabortlab -- YYABORT comes here. |
6615`-----------------------------------*/
6616yyabortlab:
6617 yyresult = 1;
6618 goto yyreturn;
6619
6620#ifndef yyoverflow
6621/*-------------------------------------------------.
6622| yyexhaustedlab -- memory exhaustion comes here. |
6623`-------------------------------------------------*/
6624yyexhaustedlab:
6625 yyerror (YY_("memory exhausted"));
6626 yyresult = 2;
6627 /* Fall through. */
Scott Michel7f9ba9b2008-01-30 02:55:46 +00006628#endif
Chris Lattner38905612008-02-19 04:36:25 +00006629
6630yyreturn:
6631 if (yychar != YYEOF && yychar != YYEMPTY)
6632 yydestruct ("Cleanup: discarding lookahead",
6633 yytoken, &yylval);
6634 /* Do not reclaim the symbols of the rule which action triggered
6635 this YYABORT or YYACCEPT. */
6636 YYPOPSTACK (yylen);
6637 YY_STACK_PRINT (yyss, yyssp);
6638 while (yyssp != yyss)
6639 {
6640 yydestruct ("Cleanup: popping",
6641 yystos[*yyssp], yyvsp);
6642 YYPOPSTACK (1);
Scott Michel15dcd8e2008-01-30 03:10:00 +00006643 }
Chris Lattner38905612008-02-19 04:36:25 +00006644#ifndef yyoverflow
6645 if (yyss != yyssa)
6646 YYSTACK_FREE (yyss);
6647#endif
6648#if YYERROR_VERBOSE
6649 if (yymsg != yymsgbuf)
6650 YYSTACK_FREE (yymsg);
6651#endif
6652 /* Make sure YYID is used. */
6653 return YYID (yyresult);
Reid Spencer68a24bd2005-08-27 18:50:39 +00006654}
Chris Lattner38905612008-02-19 04:36:25 +00006655
6656
Devang Patel67909432008-03-03 18:58:47 +00006657#line 3184 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Reid Spencer61c83e02006-08-18 08:43:06 +00006658
6659
Reid Spencer14310612006-12-31 05:40:51 +00006660// common code from the two 'RunVMAsmParser' functions
6661static Module* RunParser(Module * M) {
Reid Spencer14310612006-12-31 05:40:51 +00006662 CurModule.CurrentModule = M;
Reid Spencer14310612006-12-31 05:40:51 +00006663 // Check to make sure the parser succeeded
6664 if (yyparse()) {
6665 if (ParserResult)
6666 delete ParserResult;
6667 return 0;
6668 }
6669
Reid Spencer0d60b5a2007-03-30 01:37:39 +00006670 // Emit an error if there are any unresolved types left.
6671 if (!CurModule.LateResolveTypes.empty()) {
6672 const ValID &DID = CurModule.LateResolveTypes.begin()->first;
6673 if (DID.Type == ValID::LocalName) {
6674 GenerateError("Undefined type remains at eof: '"+DID.getName() + "'");
6675 } else {
6676 GenerateError("Undefined type remains at eof: #" + itostr(DID.Num));
6677 }
6678 if (ParserResult)
6679 delete ParserResult;
6680 return 0;
6681 }
6682
6683 // Emit an error if there are any unresolved values left.
6684 if (!CurModule.LateResolveValues.empty()) {
6685 Value *V = CurModule.LateResolveValues.back();
6686 std::map<Value*, std::pair<ValID, int> >::iterator I =
6687 CurModule.PlaceHolderInfo.find(V);
6688
6689 if (I != CurModule.PlaceHolderInfo.end()) {
6690 ValID &DID = I->second.first;
6691 if (DID.Type == ValID::LocalName) {
6692 GenerateError("Undefined value remains at eof: "+DID.getName() + "'");
6693 } else {
6694 GenerateError("Undefined value remains at eof: #" + itostr(DID.Num));
6695 }
6696 if (ParserResult)
6697 delete ParserResult;
6698 return 0;
6699 }
6700 }
6701
Reid Spencer14310612006-12-31 05:40:51 +00006702 // Check to make sure that parsing produced a result
6703 if (!ParserResult)
6704 return 0;
6705
6706 // Reset ParserResult variable while saving its value for the result.
6707 Module *Result = ParserResult;
6708 ParserResult = 0;
6709
6710 return Result;
6711}
6712
Reid Spencer61c83e02006-08-18 08:43:06 +00006713void llvm::GenerateError(const std::string &message, int LineNo) {
Duncan Sandsdc024672007-11-27 13:23:08 +00006714 if (LineNo == -1) LineNo = LLLgetLineNo();
Reid Spencer61c83e02006-08-18 08:43:06 +00006715 // TODO: column number in exception
6716 if (TheParseError)
Duncan Sandsdc024672007-11-27 13:23:08 +00006717 TheParseError->setError(LLLgetFilename(), message, LineNo);
Reid Spencer61c83e02006-08-18 08:43:06 +00006718 TriggerError = 1;
6719}
Reid Spencer68a24bd2005-08-27 18:50:39 +00006720
6721int yyerror(const char *ErrorMsg) {
Duncan Sandsdc024672007-11-27 13:23:08 +00006722 std::string where = LLLgetFilename() + ":" + utostr(LLLgetLineNo()) + ": ";
Reid Spenceref9b9a72007-02-05 20:47:22 +00006723 std::string errMsg = where + "error: " + std::string(ErrorMsg);
Duncan Sandsdc024672007-11-27 13:23:08 +00006724 if (yychar != YYEMPTY && yychar != 0) {
6725 errMsg += " while reading token: '";
6726 errMsg += std::string(LLLgetTokenStart(),
6727 LLLgetTokenStart()+LLLgetTokenLength()) + "'";
6728 }
Reid Spencer61c83e02006-08-18 08:43:06 +00006729 GenerateError(errMsg);
Reid Spencer68a24bd2005-08-27 18:50:39 +00006730 return 0;
6731}
Chris Lattner38905612008-02-19 04:36:25 +00006732