blob: 72c53c224d640f04ae132ef218dab1cba4aa0f4e [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,
142 RET = 323,
143 BR = 324,
144 SWITCH = 325,
145 INVOKE = 326,
146 UNWIND = 327,
147 UNREACHABLE = 328,
148 ADD = 329,
149 SUB = 330,
150 MUL = 331,
151 UDIV = 332,
152 SDIV = 333,
153 FDIV = 334,
154 UREM = 335,
155 SREM = 336,
156 FREM = 337,
157 AND = 338,
158 OR = 339,
159 XOR = 340,
160 SHL = 341,
161 LSHR = 342,
162 ASHR = 343,
163 ICMP = 344,
164 FCMP = 345,
165 EQ = 346,
166 NE = 347,
167 SLT = 348,
168 SGT = 349,
169 SLE = 350,
170 SGE = 351,
171 ULT = 352,
172 UGT = 353,
173 ULE = 354,
174 UGE = 355,
175 OEQ = 356,
176 ONE = 357,
177 OLT = 358,
178 OGT = 359,
179 OLE = 360,
180 OGE = 361,
181 ORD = 362,
182 UNO = 363,
183 UEQ = 364,
184 UNE = 365,
185 MALLOC = 366,
186 ALLOCA = 367,
187 FREE = 368,
188 LOAD = 369,
189 STORE = 370,
190 GETELEMENTPTR = 371,
191 TRUNC = 372,
192 ZEXT = 373,
193 SEXT = 374,
194 FPTRUNC = 375,
195 FPEXT = 376,
196 BITCAST = 377,
197 UITOFP = 378,
198 SITOFP = 379,
199 FPTOUI = 380,
200 FPTOSI = 381,
201 INTTOPTR = 382,
202 PTRTOINT = 383,
203 PHI_TOK = 384,
204 SELECT = 385,
205 VAARG = 386,
206 EXTRACTELEMENT = 387,
207 INSERTELEMENT = 388,
208 SHUFFLEVECTOR = 389,
Devang Patel5a970972008-02-19 22:27:01 +0000209 GETRESULT = 390,
210 SIGNEXT = 391,
211 ZEROEXT = 392,
212 NORETURN = 393,
213 INREG = 394,
214 SRET = 395,
215 NOUNWIND = 396,
216 NOALIAS = 397,
217 BYVAL = 398,
218 NEST = 399,
219 READNONE = 400,
220 READONLY = 401,
221 GC = 402,
222 DEFAULT = 403,
223 HIDDEN = 404,
224 PROTECTED = 405
Chris Lattner38905612008-02-19 04:36:25 +0000225 };
226#endif
227/* Tokens. */
228#define ESINT64VAL 258
229#define EUINT64VAL 259
230#define ESAPINTVAL 260
231#define EUAPINTVAL 261
232#define LOCALVAL_ID 262
233#define GLOBALVAL_ID 263
234#define FPVAL 264
235#define VOID 265
236#define INTTYPE 266
237#define FLOAT 267
238#define DOUBLE 268
239#define X86_FP80 269
240#define FP128 270
241#define PPC_FP128 271
242#define LABEL 272
243#define TYPE 273
244#define LOCALVAR 274
245#define GLOBALVAR 275
246#define LABELSTR 276
247#define STRINGCONSTANT 277
248#define ATSTRINGCONSTANT 278
249#define PCTSTRINGCONSTANT 279
250#define ZEROINITIALIZER 280
251#define TRUETOK 281
252#define FALSETOK 282
253#define BEGINTOK 283
254#define ENDTOK 284
255#define DECLARE 285
256#define DEFINE 286
257#define GLOBAL 287
258#define CONSTANT 288
259#define SECTION 289
260#define ALIAS 290
261#define VOLATILE 291
262#define THREAD_LOCAL 292
263#define TO 293
264#define DOTDOTDOT 294
265#define NULL_TOK 295
266#define UNDEF 296
267#define INTERNAL 297
268#define LINKONCE 298
269#define WEAK 299
270#define APPENDING 300
271#define DLLIMPORT 301
272#define DLLEXPORT 302
273#define EXTERN_WEAK 303
274#define OPAQUE 304
275#define EXTERNAL 305
276#define TARGET 306
277#define TRIPLE 307
278#define ALIGN 308
279#define ADDRSPACE 309
280#define DEPLIBS 310
281#define CALL 311
282#define TAIL 312
283#define ASM_TOK 313
284#define MODULE 314
285#define SIDEEFFECT 315
286#define CC_TOK 316
287#define CCC_TOK 317
288#define FASTCC_TOK 318
289#define COLDCC_TOK 319
290#define X86_STDCALLCC_TOK 320
291#define X86_FASTCALLCC_TOK 321
292#define DATALAYOUT 322
293#define RET 323
294#define BR 324
295#define SWITCH 325
296#define INVOKE 326
297#define UNWIND 327
298#define UNREACHABLE 328
299#define ADD 329
300#define SUB 330
301#define MUL 331
302#define UDIV 332
303#define SDIV 333
304#define FDIV 334
305#define UREM 335
306#define SREM 336
307#define FREM 337
308#define AND 338
309#define OR 339
310#define XOR 340
311#define SHL 341
312#define LSHR 342
313#define ASHR 343
314#define ICMP 344
315#define FCMP 345
316#define EQ 346
317#define NE 347
318#define SLT 348
319#define SGT 349
320#define SLE 350
321#define SGE 351
322#define ULT 352
323#define UGT 353
324#define ULE 354
325#define UGE 355
326#define OEQ 356
327#define ONE 357
328#define OLT 358
329#define OGT 359
330#define OLE 360
331#define OGE 361
332#define ORD 362
333#define UNO 363
334#define UEQ 364
335#define UNE 365
336#define MALLOC 366
337#define ALLOCA 367
338#define FREE 368
339#define LOAD 369
340#define STORE 370
341#define GETELEMENTPTR 371
342#define TRUNC 372
343#define ZEXT 373
344#define SEXT 374
345#define FPTRUNC 375
346#define FPEXT 376
347#define BITCAST 377
348#define UITOFP 378
349#define SITOFP 379
350#define FPTOUI 380
351#define FPTOSI 381
352#define INTTOPTR 382
353#define PTRTOINT 383
354#define PHI_TOK 384
355#define SELECT 385
356#define VAARG 386
357#define EXTRACTELEMENT 387
358#define INSERTELEMENT 388
359#define SHUFFLEVECTOR 389
Devang Patel5a970972008-02-19 22:27:01 +0000360#define GETRESULT 390
361#define SIGNEXT 391
362#define ZEROEXT 392
363#define NORETURN 393
364#define INREG 394
365#define SRET 395
366#define NOUNWIND 396
367#define NOALIAS 397
368#define BYVAL 398
369#define NEST 399
370#define READNONE 400
371#define READONLY 401
372#define GC 402
373#define DEFAULT 403
374#define HIDDEN 404
375#define PROTECTED 405
Chris Lattner38905612008-02-19 04:36:25 +0000376
377
378
379
380/* Copy the first part of user declarations. */
Devang Patelbd41a062008-02-22 19:31:30 +0000381#line 14 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Reid Spencer68a24bd2005-08-27 18:50:39 +0000382
383#include "ParserInternals.h"
384#include "llvm/CallingConv.h"
Chris Lattner0e9c3762006-01-25 22:27:16 +0000385#include "llvm/InlineAsm.h"
Reid Spencer68a24bd2005-08-27 18:50:39 +0000386#include "llvm/Instructions.h"
387#include "llvm/Module.h"
Reid Spenceref9b9a72007-02-05 20:47:22 +0000388#include "llvm/ValueSymbolTable.h"
Chandler Carruth02202192007-08-04 01:56:21 +0000389#include "llvm/AutoUpgrade.h"
Reid Spencer68a24bd2005-08-27 18:50:39 +0000390#include "llvm/Support/GetElementPtrTypeIterator.h"
Reid Spencer14310612006-12-31 05:40:51 +0000391#include "llvm/Support/CommandLine.h"
Chris Lattnerf7469af2007-01-31 04:44:08 +0000392#include "llvm/ADT/SmallVector.h"
Reid Spencer68a24bd2005-08-27 18:50:39 +0000393#include "llvm/ADT/STLExtras.h"
Chris Lattner0019bbe2005-11-06 06:46:53 +0000394#include "llvm/Support/MathExtras.h"
Reid Spencer481169e2006-12-01 00:33:46 +0000395#include "llvm/Support/Streams.h"
Reid Spencer68a24bd2005-08-27 18:50:39 +0000396#include <algorithm>
Reid Spencer68a24bd2005-08-27 18:50:39 +0000397#include <list>
Chris Lattner8adde282007-02-11 21:40:10 +0000398#include <map>
Reid Spencer68a24bd2005-08-27 18:50:39 +0000399#include <utility>
400
Reid Spencere4f47592006-08-18 17:32:55 +0000401// The following is a gross hack. In order to rid the libAsmParser library of
402// exceptions, we have to have a way of getting the yyparse function to go into
403// an error situation. So, whenever we want an error to occur, the GenerateError
404// function (see bottom of file) sets TriggerError. Then, at the end of each
405// production in the grammer we use CHECK_FOR_ERROR which will invoke YYERROR
406// (a goto) to put YACC in error state. Furthermore, several calls to
407// GenerateError are made from inside productions and they must simulate the
408// previous exception behavior by exiting the production immediately. We have
409// replaced these with the GEN_ERROR macro which calls GeneratError and then
410// immediately invokes YYERROR. This would be so much cleaner if it was a
411// recursive descent parser.
Reid Spencer61c83e02006-08-18 08:43:06 +0000412static bool TriggerError = false;
Reid Spencerf63697d2006-10-09 17:36:59 +0000413#define CHECK_FOR_ERROR { if (TriggerError) { TriggerError = false; YYABORT; } }
Reid Spencer61c83e02006-08-18 08:43:06 +0000414#define GEN_ERROR(msg) { GenerateError(msg); YYERROR; }
415
Reid Spencer68a24bd2005-08-27 18:50:39 +0000416int yyerror(const char *ErrorMsg); // Forward declarations to prevent "implicit
417int yylex(); // declaration" of xxx warnings.
418int yyparse();
Reid Spencer68a24bd2005-08-27 18:50:39 +0000419using namespace llvm;
420
421static Module *ParserResult;
422
423// DEBUG_UPREFS - Define this symbol if you want to enable debugging output
424// relating to upreferences in the input stream.
425//
426//#define DEBUG_UPREFS 1
427#ifdef DEBUG_UPREFS
Bill Wendlinge8156192006-12-07 01:30:32 +0000428#define UR_OUT(X) cerr << X
Reid Spencer68a24bd2005-08-27 18:50:39 +0000429#else
430#define UR_OUT(X)
431#endif
432
433#define YYERROR_VERBOSE 1
434
Chris Lattnerb475c422005-11-12 18:22:38 +0000435static GlobalVariable *CurGV;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000436
437
438// This contains info used when building the body of a function. It is
439// destroyed when the function is completed.
440//
441typedef std::vector<Value *> ValueList; // Numbered defs
Reid Spencer14310612006-12-31 05:40:51 +0000442
Reid Spencer68a24bd2005-08-27 18:50:39 +0000443static void
Reid Spencer93c40032007-03-19 18:40:50 +0000444ResolveDefinitions(ValueList &LateResolvers, ValueList *FutureLateResolvers=0);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000445
446static struct PerModuleInfo {
447 Module *CurrentModule;
Reid Spencer93c40032007-03-19 18:40:50 +0000448 ValueList Values; // Module level numbered definitions
449 ValueList LateResolveValues;
Reid Spencer861d9d62006-11-28 07:29:44 +0000450 std::vector<PATypeHolder> Types;
451 std::map<ValID, PATypeHolder> LateResolveTypes;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000452
453 /// PlaceHolderInfo - When temporary placeholder objects are created, remember
Chris Lattner0ad19702006-06-21 16:53:00 +0000454 /// how they were referenced and on which line of the input they came from so
Reid Spencer68a24bd2005-08-27 18:50:39 +0000455 /// that we can resolve them later and print error messages as appropriate.
456 std::map<Value*, std::pair<ValID, int> > PlaceHolderInfo;
457
458 // GlobalRefs - This maintains a mapping between <Type, ValID>'s and forward
459 // references to global values. Global values may be referenced before they
460 // are defined, and if so, the temporary object that they represent is held
461 // here. This is used for forward references of GlobalValues.
462 //
463 typedef std::map<std::pair<const PointerType *,
464 ValID>, GlobalValue*> GlobalRefsType;
465 GlobalRefsType GlobalRefs;
466
467 void ModuleDone() {
468 // If we could not resolve some functions at function compilation time
469 // (calls to functions before they are defined), resolve them now... Types
470 // are resolved when the constant pool has been completely parsed.
471 //
472 ResolveDefinitions(LateResolveValues);
Reid Spencer5b7e7532006-09-28 19:28:24 +0000473 if (TriggerError)
474 return;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000475
476 // Check to make sure that all global value forward references have been
477 // resolved!
478 //
479 if (!GlobalRefs.empty()) {
480 std::string UndefinedReferences = "Unresolved global references exist:\n";
481
482 for (GlobalRefsType::iterator I = GlobalRefs.begin(), E =GlobalRefs.end();
483 I != E; ++I) {
484 UndefinedReferences += " " + I->first.first->getDescription() + " " +
485 I->first.second.getName() + "\n";
486 }
Reid Spencer61c83e02006-08-18 08:43:06 +0000487 GenerateError(UndefinedReferences);
Reid Spencer5b7e7532006-09-28 19:28:24 +0000488 return;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000489 }
490
Chandler Carruth02202192007-08-04 01:56:21 +0000491 // Look for intrinsic functions and CallInst that need to be upgraded
492 for (Module::iterator FI = CurrentModule->begin(),
493 FE = CurrentModule->end(); FI != FE; )
494 UpgradeCallsToIntrinsic(FI++); // must be post-increment, as we remove
495
Reid Spencer68a24bd2005-08-27 18:50:39 +0000496 Values.clear(); // Clear out function local definitions
497 Types.clear();
498 CurrentModule = 0;
499 }
500
Reid Spencer68a24bd2005-08-27 18:50:39 +0000501 // GetForwardRefForGlobal - Check to see if there is a forward reference
502 // for this global. If so, remove it from the GlobalRefs map and return it.
503 // If not, just return null.
504 GlobalValue *GetForwardRefForGlobal(const PointerType *PTy, ValID ID) {
505 // Check to see if there is a forward reference to this global variable...
506 // if there is, eliminate it and patch the reference to use the new def'n.
507 GlobalRefsType::iterator I = GlobalRefs.find(std::make_pair(PTy, ID));
508 GlobalValue *Ret = 0;
509 if (I != GlobalRefs.end()) {
510 Ret = I->second;
511 GlobalRefs.erase(I);
512 }
513 return Ret;
514 }
Reid Spencer8c8a2dc2007-01-02 21:54:12 +0000515
516 bool TypeIsUnresolved(PATypeHolder* PATy) {
517 // If it isn't abstract, its resolved
518 const Type* Ty = PATy->get();
519 if (!Ty->isAbstract())
520 return false;
521 // Traverse the type looking for abstract types. If it isn't abstract then
522 // we don't need to traverse that leg of the type.
523 std::vector<const Type*> WorkList, SeenList;
524 WorkList.push_back(Ty);
525 while (!WorkList.empty()) {
526 const Type* Ty = WorkList.back();
527 SeenList.push_back(Ty);
528 WorkList.pop_back();
529 if (const OpaqueType* OpTy = dyn_cast<OpaqueType>(Ty)) {
530 // Check to see if this is an unresolved type
531 std::map<ValID, PATypeHolder>::iterator I = LateResolveTypes.begin();
532 std::map<ValID, PATypeHolder>::iterator E = LateResolveTypes.end();
533 for ( ; I != E; ++I) {
534 if (I->second.get() == OpTy)
535 return true;
536 }
537 } else if (const SequentialType* SeqTy = dyn_cast<SequentialType>(Ty)) {
538 const Type* TheTy = SeqTy->getElementType();
539 if (TheTy->isAbstract() && TheTy != Ty) {
540 std::vector<const Type*>::iterator I = SeenList.begin(),
541 E = SeenList.end();
542 for ( ; I != E; ++I)
543 if (*I == TheTy)
544 break;
545 if (I == E)
546 WorkList.push_back(TheTy);
547 }
548 } else if (const StructType* StrTy = dyn_cast<StructType>(Ty)) {
549 for (unsigned i = 0; i < StrTy->getNumElements(); ++i) {
550 const Type* TheTy = StrTy->getElementType(i);
551 if (TheTy->isAbstract() && TheTy != Ty) {
552 std::vector<const Type*>::iterator I = SeenList.begin(),
553 E = SeenList.end();
554 for ( ; I != E; ++I)
555 if (*I == TheTy)
556 break;
557 if (I == E)
558 WorkList.push_back(TheTy);
559 }
560 }
561 }
562 }
563 return false;
564 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000565} CurModule;
566
567static struct PerFunctionInfo {
568 Function *CurrentFunction; // Pointer to current function being created
569
Reid Spencer93c40032007-03-19 18:40:50 +0000570 ValueList Values; // Keep track of #'d definitions
571 unsigned NextValNum;
572 ValueList LateResolveValues;
Reid Spenceref9b9a72007-02-05 20:47:22 +0000573 bool isDeclare; // Is this function a forward declararation?
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +0000574 GlobalValue::LinkageTypes Linkage; // Linkage for forward declaration.
Anton Korobeynikov178a3522007-01-12 19:22:51 +0000575 GlobalValue::VisibilityTypes Visibility;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000576
577 /// BBForwardRefs - When we see forward references to basic blocks, keep
578 /// track of them here.
Reid Spencer93c40032007-03-19 18:40:50 +0000579 std::map<ValID, BasicBlock*> BBForwardRefs;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000580
581 inline PerFunctionInfo() {
582 CurrentFunction = 0;
583 isDeclare = false;
Anton Korobeynikov178a3522007-01-12 19:22:51 +0000584 Linkage = GlobalValue::ExternalLinkage;
585 Visibility = GlobalValue::DefaultVisibility;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000586 }
587
588 inline void FunctionStart(Function *M) {
589 CurrentFunction = M;
Reid Spencer93c40032007-03-19 18:40:50 +0000590 NextValNum = 0;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000591 }
592
593 void FunctionDone() {
Reid Spencer68a24bd2005-08-27 18:50:39 +0000594 // Any forward referenced blocks left?
Reid Spencer5b7e7532006-09-28 19:28:24 +0000595 if (!BBForwardRefs.empty()) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000596 GenerateError("Undefined reference to label " +
Reid Spencer93c40032007-03-19 18:40:50 +0000597 BBForwardRefs.begin()->second->getName());
Reid Spencer5b7e7532006-09-28 19:28:24 +0000598 return;
599 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000600
601 // Resolve all forward references now.
602 ResolveDefinitions(LateResolveValues, &CurModule.LateResolveValues);
603
604 Values.clear(); // Clear out function local definitions
Reid Spencer93c40032007-03-19 18:40:50 +0000605 BBForwardRefs.clear();
Reid Spencer68a24bd2005-08-27 18:50:39 +0000606 CurrentFunction = 0;
607 isDeclare = false;
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +0000608 Linkage = GlobalValue::ExternalLinkage;
Anton Korobeynikov178a3522007-01-12 19:22:51 +0000609 Visibility = GlobalValue::DefaultVisibility;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000610 }
611} CurFun; // Info for the current function...
612
613static bool inFunctionScope() { return CurFun.CurrentFunction != 0; }
614
615
616//===----------------------------------------------------------------------===//
617// Code to handle definitions of all the types
618//===----------------------------------------------------------------------===//
619
Reid Spencer93c40032007-03-19 18:40:50 +0000620static void InsertValue(Value *V, ValueList &ValueTab = CurFun.Values) {
621 // Things that have names or are void typed don't get slot numbers
622 if (V->hasName() || (V->getType() == Type::VoidTy))
623 return;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000624
Reid Spencer93c40032007-03-19 18:40:50 +0000625 // In the case of function values, we have to allow for the forward reference
626 // of basic blocks, which are included in the numbering. Consequently, we keep
627 // track of the next insertion location with NextValNum. When a BB gets
628 // inserted, it could change the size of the CurFun.Values vector.
629 if (&ValueTab == &CurFun.Values) {
630 if (ValueTab.size() <= CurFun.NextValNum)
631 ValueTab.resize(CurFun.NextValNum+1);
632 ValueTab[CurFun.NextValNum++] = V;
633 return;
634 }
635 // For all other lists, its okay to just tack it on the back of the vector.
636 ValueTab.push_back(V);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000637}
638
639static const Type *getTypeVal(const ValID &D, bool DoNotImprovise = false) {
640 switch (D.Type) {
Reid Spencer41dff5e2007-01-26 08:05:27 +0000641 case ValID::LocalID: // Is it a numbered definition?
Reid Spencer68a24bd2005-08-27 18:50:39 +0000642 // Module constants occupy the lowest numbered slots...
Reid Spencer41dff5e2007-01-26 08:05:27 +0000643 if (D.Num < CurModule.Types.size())
644 return CurModule.Types[D.Num];
Reid Spencer68a24bd2005-08-27 18:50:39 +0000645 break;
Reid Spencer41dff5e2007-01-26 08:05:27 +0000646 case ValID::LocalName: // Is it a named definition?
Reid Spencer0a8a16b2007-05-22 18:52:55 +0000647 if (const Type *N = CurModule.CurrentModule->getTypeByName(D.getName())) {
Reid Spencer68a24bd2005-08-27 18:50:39 +0000648 D.destroy(); // Free old strdup'd memory...
649 return N;
650 }
651 break;
652 default:
Reid Spencerb5334b02007-02-05 10:18:06 +0000653 GenerateError("Internal parser error: Invalid symbol type reference");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000654 return 0;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000655 }
656
657 // If we reached here, we referenced either a symbol that we don't know about
658 // or an id number that hasn't been read yet. We may be referencing something
659 // forward, so just create an entry to be resolved later and get to it...
660 //
661 if (DoNotImprovise) return 0; // Do we just want a null to be returned?
662
663
664 if (inFunctionScope()) {
Reid Spencer41dff5e2007-01-26 08:05:27 +0000665 if (D.Type == ValID::LocalName) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000666 GenerateError("Reference to an undefined type: '" + D.getName() + "'");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000667 return 0;
668 } else {
Reid Spencer41dff5e2007-01-26 08:05:27 +0000669 GenerateError("Reference to an undefined type: #" + utostr(D.Num));
Reid Spencer5b7e7532006-09-28 19:28:24 +0000670 return 0;
671 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000672 }
673
Reid Spencer861d9d62006-11-28 07:29:44 +0000674 std::map<ValID, PATypeHolder>::iterator I =CurModule.LateResolveTypes.find(D);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000675 if (I != CurModule.LateResolveTypes.end())
Reid Spencer861d9d62006-11-28 07:29:44 +0000676 return I->second;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000677
Reid Spencer861d9d62006-11-28 07:29:44 +0000678 Type *Typ = OpaqueType::get();
679 CurModule.LateResolveTypes.insert(std::make_pair(D, Typ));
680 return Typ;
Reid Spencera132e042006-12-03 05:46:11 +0000681 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000682
Reid Spencer93c40032007-03-19 18:40:50 +0000683// getExistingVal - Look up the value specified by the provided type and
Reid Spencer68a24bd2005-08-27 18:50:39 +0000684// the provided ValID. If the value exists and has already been defined, return
685// it. Otherwise return null.
686//
Reid Spencer93c40032007-03-19 18:40:50 +0000687static Value *getExistingVal(const Type *Ty, const ValID &D) {
Reid Spencer5b7e7532006-09-28 19:28:24 +0000688 if (isa<FunctionType>(Ty)) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000689 GenerateError("Functions are not values and "
Reid Spencer68a24bd2005-08-27 18:50:39 +0000690 "must be referenced as pointers");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000691 return 0;
692 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000693
694 switch (D.Type) {
Reid Spencer41dff5e2007-01-26 08:05:27 +0000695 case ValID::LocalID: { // Is it a numbered definition?
Reid Spencer41dff5e2007-01-26 08:05:27 +0000696 // Check that the number is within bounds.
Reid Spencer93c40032007-03-19 18:40:50 +0000697 if (D.Num >= CurFun.Values.size())
698 return 0;
699 Value *Result = CurFun.Values[D.Num];
700 if (Ty != Result->getType()) {
701 GenerateError("Numbered value (%" + utostr(D.Num) + ") of type '" +
702 Result->getType()->getDescription() + "' does not match "
703 "expected type, '" + Ty->getDescription() + "'");
704 return 0;
705 }
706 return Result;
Reid Spencer41dff5e2007-01-26 08:05:27 +0000707 }
708 case ValID::GlobalID: { // Is it a numbered definition?
Reid Spencer93c40032007-03-19 18:40:50 +0000709 if (D.Num >= CurModule.Values.size())
Reid Spenceref9b9a72007-02-05 20:47:22 +0000710 return 0;
Reid Spencer93c40032007-03-19 18:40:50 +0000711 Value *Result = CurModule.Values[D.Num];
712 if (Ty != Result->getType()) {
713 GenerateError("Numbered value (@" + utostr(D.Num) + ") of type '" +
714 Result->getType()->getDescription() + "' does not match "
715 "expected type, '" + Ty->getDescription() + "'");
Reid Spenceref9b9a72007-02-05 20:47:22 +0000716 return 0;
Reid Spencer93c40032007-03-19 18:40:50 +0000717 }
718 return Result;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000719 }
Reid Spencer41dff5e2007-01-26 08:05:27 +0000720
721 case ValID::LocalName: { // Is it a named definition?
Reid Spenceref9b9a72007-02-05 20:47:22 +0000722 if (!inFunctionScope())
723 return 0;
724 ValueSymbolTable &SymTab = CurFun.CurrentFunction->getValueSymbolTable();
Reid Spencer0a8a16b2007-05-22 18:52:55 +0000725 Value *N = SymTab.lookup(D.getName());
Reid Spenceref9b9a72007-02-05 20:47:22 +0000726 if (N == 0)
727 return 0;
728 if (N->getType() != Ty)
729 return 0;
Reid Spencer41dff5e2007-01-26 08:05:27 +0000730
731 D.destroy(); // Free old strdup'd memory...
732 return N;
733 }
734 case ValID::GlobalName: { // Is it a named definition?
Reid Spenceref9b9a72007-02-05 20:47:22 +0000735 ValueSymbolTable &SymTab = CurModule.CurrentModule->getValueSymbolTable();
Reid Spencer0a8a16b2007-05-22 18:52:55 +0000736 Value *N = SymTab.lookup(D.getName());
Reid Spenceref9b9a72007-02-05 20:47:22 +0000737 if (N == 0)
738 return 0;
739 if (N->getType() != Ty)
740 return 0;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000741
742 D.destroy(); // Free old strdup'd memory...
743 return N;
744 }
745
746 // Check to make sure that "Ty" is an integral type, and that our
747 // value will fit into the specified type...
748 case ValID::ConstSIntVal: // Is it a constant pool reference??
Chris Lattner38905612008-02-19 04:36:25 +0000749 if (!isa<IntegerType>(Ty) ||
750 !ConstantInt::isValueValidForType(Ty, D.ConstPool64)) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000751 GenerateError("Signed integral constant '" +
Reid Spencer68a24bd2005-08-27 18:50:39 +0000752 itostr(D.ConstPool64) + "' is invalid for type '" +
Reid Spencerb5334b02007-02-05 10:18:06 +0000753 Ty->getDescription() + "'");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000754 return 0;
755 }
Reid Spencer49d273e2007-03-19 20:40:51 +0000756 return ConstantInt::get(Ty, D.ConstPool64, true);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000757
758 case ValID::ConstUIntVal: // Is it an unsigned const pool reference?
Chris Lattner38905612008-02-19 04:36:25 +0000759 if (isa<IntegerType>(Ty) &&
760 ConstantInt::isValueValidForType(Ty, D.UConstPool64))
Reid Spencerb83eb642006-10-20 07:07:24 +0000761 return ConstantInt::get(Ty, D.UConstPool64);
Chris Lattner38905612008-02-19 04:36:25 +0000762
763 if (!isa<IntegerType>(Ty) ||
764 !ConstantInt::isValueValidForType(Ty, D.ConstPool64)) {
765 GenerateError("Integral constant '" + utostr(D.UConstPool64) +
766 "' is invalid or out of range for type '" +
767 Ty->getDescription() + "'");
768 return 0;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000769 }
Chris Lattner38905612008-02-19 04:36:25 +0000770 // This is really a signed reference. Transmogrify.
771 return ConstantInt::get(Ty, D.ConstPool64, true);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000772
773 case ValID::ConstFPVal: // Is it a floating point const pool reference?
Chris Lattner38905612008-02-19 04:36:25 +0000774 if (!Ty->isFloatingPoint() ||
775 !ConstantFP::isValueValidForType(Ty, *D.ConstPoolFP)) {
Reid Spencerb5334b02007-02-05 10:18:06 +0000776 GenerateError("FP constant invalid for type");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000777 return 0;
778 }
Dale Johannesenc72cd7e2007-09-11 18:33:39 +0000779 // Lexer has no type info, so builds all float and double FP constants
780 // as double. Fix this here. Long double does not need this.
781 if (&D.ConstPoolFP->getSemantics() == &APFloat::IEEEdouble &&
782 Ty==Type::FloatTy)
Dale Johannesencdd509a2007-09-07 21:07:57 +0000783 D.ConstPoolFP->convert(APFloat::IEEEsingle, APFloat::rmNearestTiesToEven);
784 return ConstantFP::get(Ty, *D.ConstPoolFP);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000785
786 case ValID::ConstNullVal: // Is it a null value?
Reid Spencer5b7e7532006-09-28 19:28:24 +0000787 if (!isa<PointerType>(Ty)) {
Reid Spencerb5334b02007-02-05 10:18:06 +0000788 GenerateError("Cannot create a a non pointer null");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000789 return 0;
790 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000791 return ConstantPointerNull::get(cast<PointerType>(Ty));
792
793 case ValID::ConstUndefVal: // Is it an undef value?
794 return UndefValue::get(Ty);
795
Chris Lattner7aa61892005-12-21 17:53:23 +0000796 case ValID::ConstZeroVal: // Is it a zero value?
797 return Constant::getNullValue(Ty);
798
Reid Spencer68a24bd2005-08-27 18:50:39 +0000799 case ValID::ConstantVal: // Fully resolved constant?
Reid Spencer5b7e7532006-09-28 19:28:24 +0000800 if (D.ConstantValue->getType() != Ty) {
Reid Spencerb5334b02007-02-05 10:18:06 +0000801 GenerateError("Constant expression type different from required type");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000802 return 0;
803 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000804 return D.ConstantValue;
805
Chris Lattner0e9c3762006-01-25 22:27:16 +0000806 case ValID::InlineAsmVal: { // Inline asm expression
807 const PointerType *PTy = dyn_cast<PointerType>(Ty);
808 const FunctionType *FTy =
809 PTy ? dyn_cast<FunctionType>(PTy->getElementType()) : 0;
Reid Spencer5b7e7532006-09-28 19:28:24 +0000810 if (!FTy || !InlineAsm::Verify(FTy, D.IAD->Constraints)) {
Reid Spencerb5334b02007-02-05 10:18:06 +0000811 GenerateError("Invalid type for asm constraint string");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000812 return 0;
813 }
Chris Lattner0e9c3762006-01-25 22:27:16 +0000814 InlineAsm *IA = InlineAsm::get(FTy, D.IAD->AsmString, D.IAD->Constraints,
815 D.IAD->HasSideEffects);
816 D.destroy(); // Free InlineAsmDescriptor.
817 return IA;
818 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000819 default:
Reid Spencera9720f52007-02-05 17:04:00 +0000820 assert(0 && "Unhandled case!");
Reid Spencer68a24bd2005-08-27 18:50:39 +0000821 return 0;
822 } // End of switch
823
Reid Spencera9720f52007-02-05 17:04:00 +0000824 assert(0 && "Unhandled case!");
Reid Spencer68a24bd2005-08-27 18:50:39 +0000825 return 0;
826}
827
Reid Spencer93c40032007-03-19 18:40:50 +0000828// getVal - This function is identical to getExistingVal, except that if a
Reid Spencer68a24bd2005-08-27 18:50:39 +0000829// value is not already defined, it "improvises" by creating a placeholder var
830// that looks and acts just like the requested variable. When the value is
831// defined later, all uses of the placeholder variable are replaced with the
832// real thing.
833//
834static Value *getVal(const Type *Ty, const ValID &ID) {
Reid Spencer5b7e7532006-09-28 19:28:24 +0000835 if (Ty == Type::LabelTy) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000836 GenerateError("Cannot use a basic block here");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000837 return 0;
838 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000839
840 // See if the value has already been defined.
Reid Spencer93c40032007-03-19 18:40:50 +0000841 Value *V = getExistingVal(Ty, ID);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000842 if (V) return V;
Reid Spencer5b7e7532006-09-28 19:28:24 +0000843 if (TriggerError) return 0;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000844
Reid Spencer5b7e7532006-09-28 19:28:24 +0000845 if (!Ty->isFirstClassType() && !isa<OpaqueType>(Ty)) {
Reid Spencerb5334b02007-02-05 10:18:06 +0000846 GenerateError("Invalid use of a composite type");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000847 return 0;
848 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000849
850 // If we reached here, we referenced either a symbol that we don't know about
851 // or an id number that hasn't been read yet. We may be referencing something
852 // forward, so just create an entry to be resolved later and get to it...
853 //
Anton Korobeynikov38e09802007-04-28 13:48:45 +0000854 switch (ID.Type) {
855 case ValID::GlobalName:
Reid Spencer9c9b63a2007-04-28 16:07:31 +0000856 case ValID::GlobalID: {
Anton Korobeynikov38e09802007-04-28 13:48:45 +0000857 const PointerType *PTy = dyn_cast<PointerType>(Ty);
858 if (!PTy) {
859 GenerateError("Invalid type for reference to global" );
860 return 0;
861 }
862 const Type* ElTy = PTy->getElementType();
863 if (const FunctionType *FTy = dyn_cast<FunctionType>(ElTy))
864 V = new Function(FTy, GlobalValue::ExternalLinkage);
865 else
Christopher Lamba8ed9bf2007-12-11 09:02:08 +0000866 V = new GlobalVariable(ElTy, false, GlobalValue::ExternalLinkage, 0, "",
867 (Module*)0, false, PTy->getAddressSpace());
Anton Korobeynikov38e09802007-04-28 13:48:45 +0000868 break;
Reid Spencer9c9b63a2007-04-28 16:07:31 +0000869 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +0000870 default:
871 V = new Argument(Ty);
872 }
873
Reid Spencer68a24bd2005-08-27 18:50:39 +0000874 // Remember where this forward reference came from. FIXME, shouldn't we try
875 // to recycle these things??
876 CurModule.PlaceHolderInfo.insert(std::make_pair(V, std::make_pair(ID,
Duncan Sandsdc024672007-11-27 13:23:08 +0000877 LLLgetLineNo())));
Reid Spencer68a24bd2005-08-27 18:50:39 +0000878
879 if (inFunctionScope())
880 InsertValue(V, CurFun.LateResolveValues);
881 else
882 InsertValue(V, CurModule.LateResolveValues);
883 return V;
884}
885
Reid Spencer93c40032007-03-19 18:40:50 +0000886/// defineBBVal - This is a definition of a new basic block with the specified
887/// identifier which must be the same as CurFun.NextValNum, if its numeric.
888static BasicBlock *defineBBVal(const ValID &ID) {
Reid Spencera9720f52007-02-05 17:04:00 +0000889 assert(inFunctionScope() && "Can't get basic block at global scope!");
Reid Spencer68a24bd2005-08-27 18:50:39 +0000890
Reid Spencer68a24bd2005-08-27 18:50:39 +0000891 BasicBlock *BB = 0;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000892
Reid Spencer93c40032007-03-19 18:40:50 +0000893 // First, see if this was forward referenced
Reid Spencer68a24bd2005-08-27 18:50:39 +0000894
Reid Spencer93c40032007-03-19 18:40:50 +0000895 std::map<ValID, BasicBlock*>::iterator BBI = CurFun.BBForwardRefs.find(ID);
896 if (BBI != CurFun.BBForwardRefs.end()) {
897 BB = BBI->second;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000898 // The forward declaration could have been inserted anywhere in the
899 // function: insert it into the correct place now.
900 CurFun.CurrentFunction->getBasicBlockList().remove(BB);
901 CurFun.CurrentFunction->getBasicBlockList().push_back(BB);
Reid Spencer93c40032007-03-19 18:40:50 +0000902
Reid Spencer66728ef2007-03-20 01:13:36 +0000903 // We're about to erase the entry, save the key so we can clean it up.
904 ValID Tmp = BBI->first;
905
Reid Spencer93c40032007-03-19 18:40:50 +0000906 // Erase the forward ref from the map as its no longer "forward"
907 CurFun.BBForwardRefs.erase(ID);
908
Reid Spencer66728ef2007-03-20 01:13:36 +0000909 // The key has been removed from the map but so we don't want to leave
910 // strdup'd memory around so destroy it too.
911 Tmp.destroy();
912
Reid Spencer93c40032007-03-19 18:40:50 +0000913 // If its a numbered definition, bump the number and set the BB value.
914 if (ID.Type == ValID::LocalID) {
915 assert(ID.Num == CurFun.NextValNum && "Invalid new block number");
916 InsertValue(BB);
917 }
918
919 ID.destroy();
920 return BB;
921 }
922
923 // We haven't seen this BB before and its first mention is a definition.
924 // Just create it and return it.
Reid Spencer0a8a16b2007-05-22 18:52:55 +0000925 std::string Name (ID.Type == ValID::LocalName ? ID.getName() : "");
Reid Spencer93c40032007-03-19 18:40:50 +0000926 BB = new BasicBlock(Name, CurFun.CurrentFunction);
927 if (ID.Type == ValID::LocalID) {
928 assert(ID.Num == CurFun.NextValNum && "Invalid new block number");
929 InsertValue(BB);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000930 }
Reid Spencer93c40032007-03-19 18:40:50 +0000931
932 ID.destroy(); // Free strdup'd memory
933 return BB;
934}
935
936/// getBBVal - get an existing BB value or create a forward reference for it.
937///
938static BasicBlock *getBBVal(const ValID &ID) {
939 assert(inFunctionScope() && "Can't get basic block at global scope!");
940
941 BasicBlock *BB = 0;
942
943 std::map<ValID, BasicBlock*>::iterator BBI = CurFun.BBForwardRefs.find(ID);
944 if (BBI != CurFun.BBForwardRefs.end()) {
945 BB = BBI->second;
946 } if (ID.Type == ValID::LocalName) {
Reid Spencer0a8a16b2007-05-22 18:52:55 +0000947 std::string Name = ID.getName();
Reid Spencer93c40032007-03-19 18:40:50 +0000948 Value *N = CurFun.CurrentFunction->getValueSymbolTable().lookup(Name);
Anton Korobeynikovc70d7732008-02-20 12:10:37 +0000949 if (N) {
Reid Spencer93c40032007-03-19 18:40:50 +0000950 if (N->getType()->getTypeID() == Type::LabelTyID)
951 BB = cast<BasicBlock>(N);
952 else
953 GenerateError("Reference to label '" + Name + "' is actually of type '"+
954 N->getType()->getDescription() + "'");
Anton Korobeynikovc70d7732008-02-20 12:10:37 +0000955 }
Reid Spencer93c40032007-03-19 18:40:50 +0000956 } else if (ID.Type == ValID::LocalID) {
957 if (ID.Num < CurFun.NextValNum && ID.Num < CurFun.Values.size()) {
958 if (CurFun.Values[ID.Num]->getType()->getTypeID() == Type::LabelTyID)
959 BB = cast<BasicBlock>(CurFun.Values[ID.Num]);
960 else
961 GenerateError("Reference to label '%" + utostr(ID.Num) +
962 "' is actually of type '"+
963 CurFun.Values[ID.Num]->getType()->getDescription() + "'");
964 }
965 } else {
966 GenerateError("Illegal label reference " + ID.getName());
967 return 0;
968 }
969
970 // If its already been defined, return it now.
971 if (BB) {
972 ID.destroy(); // Free strdup'd memory.
973 return BB;
974 }
975
976 // Otherwise, this block has not been seen before, create it.
977 std::string Name;
978 if (ID.Type == ValID::LocalName)
Reid Spencer0a8a16b2007-05-22 18:52:55 +0000979 Name = ID.getName();
Reid Spencer93c40032007-03-19 18:40:50 +0000980 BB = new BasicBlock(Name, CurFun.CurrentFunction);
981
982 // Insert it in the forward refs map.
983 CurFun.BBForwardRefs[ID] = BB;
984
Reid Spencer68a24bd2005-08-27 18:50:39 +0000985 return BB;
986}
987
988
989//===----------------------------------------------------------------------===//
990// Code to handle forward references in instructions
991//===----------------------------------------------------------------------===//
992//
993// This code handles the late binding needed with statements that reference
994// values not defined yet... for example, a forward branch, or the PHI node for
995// a loop body.
996//
997// This keeps a table (CurFun.LateResolveValues) of all such forward references
998// and back patchs after we are done.
999//
1000
1001// ResolveDefinitions - If we could not resolve some defs at parsing
1002// time (forward branches, phi functions for loops, etc...) resolve the
1003// defs now...
1004//
1005static void
Reid Spencer93c40032007-03-19 18:40:50 +00001006ResolveDefinitions(ValueList &LateResolvers, ValueList *FutureLateResolvers) {
Reid Spencer68a24bd2005-08-27 18:50:39 +00001007 // Loop over LateResolveDefs fixing up stuff that couldn't be resolved
Reid Spencer93c40032007-03-19 18:40:50 +00001008 while (!LateResolvers.empty()) {
1009 Value *V = LateResolvers.back();
1010 LateResolvers.pop_back();
Reid Spencer68a24bd2005-08-27 18:50:39 +00001011
Reid Spencer93c40032007-03-19 18:40:50 +00001012 std::map<Value*, std::pair<ValID, int> >::iterator PHI =
1013 CurModule.PlaceHolderInfo.find(V);
1014 assert(PHI != CurModule.PlaceHolderInfo.end() && "Placeholder error!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00001015
Reid Spencer93c40032007-03-19 18:40:50 +00001016 ValID &DID = PHI->second.first;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001017
Reid Spencer93c40032007-03-19 18:40:50 +00001018 Value *TheRealValue = getExistingVal(V->getType(), DID);
1019 if (TriggerError)
1020 return;
1021 if (TheRealValue) {
1022 V->replaceAllUsesWith(TheRealValue);
1023 delete V;
1024 CurModule.PlaceHolderInfo.erase(PHI);
1025 } else if (FutureLateResolvers) {
1026 // Functions have their unresolved items forwarded to the module late
1027 // resolver table
1028 InsertValue(V, *FutureLateResolvers);
1029 } else {
1030 if (DID.Type == ValID::LocalName || DID.Type == ValID::GlobalName) {
1031 GenerateError("Reference to an invalid definition: '" +DID.getName()+
1032 "' of type '" + V->getType()->getDescription() + "'",
1033 PHI->second.second);
Reid Spencer5b7e7532006-09-28 19:28:24 +00001034 return;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001035 } else {
Reid Spencer93c40032007-03-19 18:40:50 +00001036 GenerateError("Reference to an invalid definition: #" +
1037 itostr(DID.Num) + " of type '" +
1038 V->getType()->getDescription() + "'",
1039 PHI->second.second);
1040 return;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001041 }
1042 }
1043 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00001044 LateResolvers.clear();
1045}
1046
1047// ResolveTypeTo - A brand new type was just declared. This means that (if
1048// name is not null) things referencing Name can be resolved. Otherwise, things
1049// refering to the number can be resolved. Do this now.
1050//
Reid Spencer0a8a16b2007-05-22 18:52:55 +00001051static void ResolveTypeTo(std::string *Name, const Type *ToTy) {
Reid Spencer68a24bd2005-08-27 18:50:39 +00001052 ValID D;
Reid Spencer0a8a16b2007-05-22 18:52:55 +00001053 if (Name)
1054 D = ValID::createLocalName(*Name);
1055 else
1056 D = ValID::createLocalID(CurModule.Types.size());
Reid Spencer68a24bd2005-08-27 18:50:39 +00001057
Reid Spencer861d9d62006-11-28 07:29:44 +00001058 std::map<ValID, PATypeHolder>::iterator I =
Reid Spencer68a24bd2005-08-27 18:50:39 +00001059 CurModule.LateResolveTypes.find(D);
1060 if (I != CurModule.LateResolveTypes.end()) {
Reid Spencer861d9d62006-11-28 07:29:44 +00001061 ((DerivedType*)I->second.get())->refineAbstractTypeTo(ToTy);
Reid Spencer68a24bd2005-08-27 18:50:39 +00001062 CurModule.LateResolveTypes.erase(I);
1063 }
1064}
1065
1066// setValueName - Set the specified value to the name given. The name may be
1067// null potentially, in which case this is a noop. The string passed in is
1068// assumed to be a malloc'd string buffer, and is free'd by this function.
1069//
Reid Spencer0a8a16b2007-05-22 18:52:55 +00001070static void setValueName(Value *V, std::string *NameStr) {
Reid Spencer41dff5e2007-01-26 08:05:27 +00001071 if (!NameStr) return;
Reid Spencer0a8a16b2007-05-22 18:52:55 +00001072 std::string Name(*NameStr); // Copy string
1073 delete NameStr; // Free old string
Reid Spencer68a24bd2005-08-27 18:50:39 +00001074
Reid Spencer41dff5e2007-01-26 08:05:27 +00001075 if (V->getType() == Type::VoidTy) {
Reid Spencerb5334b02007-02-05 10:18:06 +00001076 GenerateError("Can't assign name '" + Name+"' to value with void type");
Reid Spencer41dff5e2007-01-26 08:05:27 +00001077 return;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001078 }
Reid Spencer41dff5e2007-01-26 08:05:27 +00001079
Reid Spencera9720f52007-02-05 17:04:00 +00001080 assert(inFunctionScope() && "Must be in function scope!");
Reid Spenceref9b9a72007-02-05 20:47:22 +00001081 ValueSymbolTable &ST = CurFun.CurrentFunction->getValueSymbolTable();
1082 if (ST.lookup(Name)) {
Reid Spencer41dff5e2007-01-26 08:05:27 +00001083 GenerateError("Redefinition of value '" + Name + "' of type '" +
Reid Spencerb5334b02007-02-05 10:18:06 +00001084 V->getType()->getDescription() + "'");
Reid Spencer41dff5e2007-01-26 08:05:27 +00001085 return;
1086 }
1087
1088 // Set the name.
1089 V->setName(Name);
Reid Spencer68a24bd2005-08-27 18:50:39 +00001090}
1091
1092/// ParseGlobalVariable - Handle parsing of a global. If Initializer is null,
1093/// this is a declaration, otherwise it is a definition.
Chris Lattnerb475c422005-11-12 18:22:38 +00001094static GlobalVariable *
Reid Spencer0a8a16b2007-05-22 18:52:55 +00001095ParseGlobalVariable(std::string *NameStr,
Anton Korobeynikov178a3522007-01-12 19:22:51 +00001096 GlobalValue::LinkageTypes Linkage,
1097 GlobalValue::VisibilityTypes Visibility,
Chris Lattnerb475c422005-11-12 18:22:38 +00001098 bool isConstantGlobal, const Type *Ty,
Christopher Lamba8ed9bf2007-12-11 09:02:08 +00001099 Constant *Initializer, bool IsThreadLocal,
1100 unsigned AddressSpace = 0) {
Reid Spencer5b7e7532006-09-28 19:28:24 +00001101 if (isa<FunctionType>(Ty)) {
Reid Spencerb5334b02007-02-05 10:18:06 +00001102 GenerateError("Cannot declare global vars of function type");
Reid Spencer5b7e7532006-09-28 19:28:24 +00001103 return 0;
1104 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00001105
Christopher Lamba8ed9bf2007-12-11 09:02:08 +00001106 const PointerType *PTy = PointerType::get(Ty, AddressSpace);
Reid Spencer68a24bd2005-08-27 18:50:39 +00001107
1108 std::string Name;
1109 if (NameStr) {
Reid Spencer0a8a16b2007-05-22 18:52:55 +00001110 Name = *NameStr; // Copy string
1111 delete NameStr; // Free old string
Reid Spencer68a24bd2005-08-27 18:50:39 +00001112 }
1113
1114 // See if this global value was forward referenced. If so, recycle the
1115 // object.
1116 ValID ID;
1117 if (!Name.empty()) {
Reid Spencer0a8a16b2007-05-22 18:52:55 +00001118 ID = ValID::createGlobalName(Name);
Reid Spencer68a24bd2005-08-27 18:50:39 +00001119 } else {
Reid Spencer93c40032007-03-19 18:40:50 +00001120 ID = ValID::createGlobalID(CurModule.Values.size());
Reid Spencer68a24bd2005-08-27 18:50:39 +00001121 }
1122
1123 if (GlobalValue *FWGV = CurModule.GetForwardRefForGlobal(PTy, ID)) {
1124 // Move the global to the end of the list, from whereever it was
1125 // previously inserted.
1126 GlobalVariable *GV = cast<GlobalVariable>(FWGV);
1127 CurModule.CurrentModule->getGlobalList().remove(GV);
1128 CurModule.CurrentModule->getGlobalList().push_back(GV);
1129 GV->setInitializer(Initializer);
1130 GV->setLinkage(Linkage);
Anton Korobeynikov178a3522007-01-12 19:22:51 +00001131 GV->setVisibility(Visibility);
Reid Spencer68a24bd2005-08-27 18:50:39 +00001132 GV->setConstant(isConstantGlobal);
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00001133 GV->setThreadLocal(IsThreadLocal);
Reid Spencer68a24bd2005-08-27 18:50:39 +00001134 InsertValue(GV, CurModule.Values);
Chris Lattnerb475c422005-11-12 18:22:38 +00001135 return GV;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001136 }
1137
Reid Spenceref9b9a72007-02-05 20:47:22 +00001138 // If this global has a name
Reid Spencer68a24bd2005-08-27 18:50:39 +00001139 if (!Name.empty()) {
Reid Spenceref9b9a72007-02-05 20:47:22 +00001140 // if the global we're parsing has an initializer (is a definition) and
1141 // has external linkage.
1142 if (Initializer && Linkage != GlobalValue::InternalLinkage)
1143 // If there is already a global with external linkage with this name
1144 if (CurModule.CurrentModule->getGlobalVariable(Name, false)) {
1145 // If we allow this GVar to get created, it will be renamed in the
1146 // symbol table because it conflicts with an existing GVar. We can't
1147 // allow redefinition of GVars whose linking indicates that their name
1148 // must stay the same. Issue the error.
1149 GenerateError("Redefinition of global variable named '" + Name +
1150 "' of type '" + Ty->getDescription() + "'");
1151 return 0;
1152 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00001153 }
1154
1155 // Otherwise there is no existing GV to use, create one now.
1156 GlobalVariable *GV =
1157 new GlobalVariable(Ty, isConstantGlobal, Linkage, Initializer, Name,
Christopher Lamba8ed9bf2007-12-11 09:02:08 +00001158 CurModule.CurrentModule, IsThreadLocal, AddressSpace);
Anton Korobeynikov178a3522007-01-12 19:22:51 +00001159 GV->setVisibility(Visibility);
Reid Spencer68a24bd2005-08-27 18:50:39 +00001160 InsertValue(GV, CurModule.Values);
Chris Lattnerb475c422005-11-12 18:22:38 +00001161 return GV;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001162}
1163
1164// setTypeName - Set the specified type to the name given. The name may be
1165// null potentially, in which case this is a noop. The string passed in is
1166// assumed to be a malloc'd string buffer, and is freed by this function.
1167//
1168// This function returns true if the type has already been defined, but is
1169// allowed to be redefined in the specified context. If the name is a new name
1170// for the type plane, it is inserted and false is returned.
Reid Spencer0a8a16b2007-05-22 18:52:55 +00001171static bool setTypeName(const Type *T, std::string *NameStr) {
Reid Spencera9720f52007-02-05 17:04:00 +00001172 assert(!inFunctionScope() && "Can't give types function-local names!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00001173 if (NameStr == 0) return false;
1174
Reid Spencer0a8a16b2007-05-22 18:52:55 +00001175 std::string Name(*NameStr); // Copy string
1176 delete NameStr; // Free old string
Reid Spencer68a24bd2005-08-27 18:50:39 +00001177
1178 // We don't allow assigning names to void type
Reid Spencer5b7e7532006-09-28 19:28:24 +00001179 if (T == Type::VoidTy) {
Reid Spencerb5334b02007-02-05 10:18:06 +00001180 GenerateError("Can't assign name '" + Name + "' to the void type");
Reid Spencer5b7e7532006-09-28 19:28:24 +00001181 return false;
1182 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00001183
1184 // Set the type name, checking for conflicts as we do so.
1185 bool AlreadyExists = CurModule.CurrentModule->addTypeName(Name, T);
1186
1187 if (AlreadyExists) { // Inserting a name that is already defined???
1188 const Type *Existing = CurModule.CurrentModule->getTypeByName(Name);
Reid Spencera9720f52007-02-05 17:04:00 +00001189 assert(Existing && "Conflict but no matching type?!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00001190
1191 // There is only one case where this is allowed: when we are refining an
1192 // opaque type. In this case, Existing will be an opaque type.
1193 if (const OpaqueType *OpTy = dyn_cast<OpaqueType>(Existing)) {
1194 // We ARE replacing an opaque type!
1195 const_cast<OpaqueType*>(OpTy)->refineAbstractTypeTo(T);
1196 return true;
1197 }
1198
1199 // Otherwise, this is an attempt to redefine a type. That's okay if
1200 // the redefinition is identical to the original. This will be so if
1201 // Existing and T point to the same Type object. In this one case we
1202 // allow the equivalent redefinition.
1203 if (Existing == T) return true; // Yes, it's equal.
1204
1205 // Any other kind of (non-equivalent) redefinition is an error.
Reid Spencer63c34452007-01-05 21:51:07 +00001206 GenerateError("Redefinition of type named '" + Name + "' of type '" +
Reid Spencerb5334b02007-02-05 10:18:06 +00001207 T->getDescription() + "'");
Reid Spencer68a24bd2005-08-27 18:50:39 +00001208 }
1209
1210 return false;
1211}
1212
1213//===----------------------------------------------------------------------===//
1214// Code for handling upreferences in type names...
1215//
1216
1217// TypeContains - Returns true if Ty directly contains E in it.
1218//
1219static bool TypeContains(const Type *Ty, const Type *E) {
1220 return std::find(Ty->subtype_begin(), Ty->subtype_end(),
1221 E) != Ty->subtype_end();
1222}
1223
1224namespace {
1225 struct UpRefRecord {
1226 // NestingLevel - The number of nesting levels that need to be popped before
1227 // this type is resolved.
1228 unsigned NestingLevel;
1229
1230 // LastContainedTy - This is the type at the current binding level for the
1231 // type. Every time we reduce the nesting level, this gets updated.
1232 const Type *LastContainedTy;
1233
1234 // UpRefTy - This is the actual opaque type that the upreference is
1235 // represented with.
1236 OpaqueType *UpRefTy;
1237
1238 UpRefRecord(unsigned NL, OpaqueType *URTy)
1239 : NestingLevel(NL), LastContainedTy(URTy), UpRefTy(URTy) {}
1240 };
1241}
1242
1243// UpRefs - A list of the outstanding upreferences that need to be resolved.
1244static std::vector<UpRefRecord> UpRefs;
1245
1246/// HandleUpRefs - Every time we finish a new layer of types, this function is
1247/// called. It loops through the UpRefs vector, which is a list of the
1248/// currently active types. For each type, if the up reference is contained in
1249/// the newly completed type, we decrement the level count. When the level
1250/// count reaches zero, the upreferenced type is the type that is passed in:
1251/// thus we can complete the cycle.
1252///
1253static PATypeHolder HandleUpRefs(const Type *ty) {
Chris Lattner224f84f2006-08-18 17:34:45 +00001254 // If Ty isn't abstract, or if there are no up-references in it, then there is
1255 // nothing to resolve here.
1256 if (!ty->isAbstract() || UpRefs.empty()) return ty;
1257
Reid Spencer68a24bd2005-08-27 18:50:39 +00001258 PATypeHolder Ty(ty);
1259 UR_OUT("Type '" << Ty->getDescription() <<
1260 "' newly formed. Resolving upreferences.\n" <<
1261 UpRefs.size() << " upreferences active!\n");
1262
1263 // If we find any resolvable upreferences (i.e., those whose NestingLevel goes
1264 // to zero), we resolve them all together before we resolve them to Ty. At
1265 // the end of the loop, if there is anything to resolve to Ty, it will be in
1266 // this variable.
1267 OpaqueType *TypeToResolve = 0;
1268
1269 for (unsigned i = 0; i != UpRefs.size(); ++i) {
1270 UR_OUT(" UR#" << i << " - TypeContains(" << Ty->getDescription() << ", "
1271 << UpRefs[i].second->getDescription() << ") = "
1272 << (TypeContains(Ty, UpRefs[i].second) ? "true" : "false") << "\n");
1273 if (TypeContains(Ty, UpRefs[i].LastContainedTy)) {
1274 // Decrement level of upreference
1275 unsigned Level = --UpRefs[i].NestingLevel;
1276 UpRefs[i].LastContainedTy = Ty;
1277 UR_OUT(" Uplevel Ref Level = " << Level << "\n");
1278 if (Level == 0) { // Upreference should be resolved!
1279 if (!TypeToResolve) {
1280 TypeToResolve = UpRefs[i].UpRefTy;
1281 } else {
1282 UR_OUT(" * Resolving upreference for "
1283 << UpRefs[i].second->getDescription() << "\n";
1284 std::string OldName = UpRefs[i].UpRefTy->getDescription());
1285 UpRefs[i].UpRefTy->refineAbstractTypeTo(TypeToResolve);
1286 UR_OUT(" * Type '" << OldName << "' refined upreference to: "
1287 << (const void*)Ty << ", " << Ty->getDescription() << "\n");
1288 }
1289 UpRefs.erase(UpRefs.begin()+i); // Remove from upreference list...
1290 --i; // Do not skip the next element...
1291 }
1292 }
1293 }
1294
1295 if (TypeToResolve) {
1296 UR_OUT(" * Resolving upreference for "
1297 << UpRefs[i].second->getDescription() << "\n";
1298 std::string OldName = TypeToResolve->getDescription());
1299 TypeToResolve->refineAbstractTypeTo(Ty);
1300 }
1301
1302 return Ty;
1303}
1304
Reid Spencer68a24bd2005-08-27 18:50:39 +00001305//===----------------------------------------------------------------------===//
1306// RunVMAsmParser - Define an interface to this parser
1307//===----------------------------------------------------------------------===//
1308//
Reid Spencer14310612006-12-31 05:40:51 +00001309static Module* RunParser(Module * M);
1310
Duncan Sandsdc024672007-11-27 13:23:08 +00001311Module *llvm::RunVMAsmParser(llvm::MemoryBuffer *MB) {
1312 InitLLLexer(MB);
1313 Module *M = RunParser(new Module(LLLgetFilename()));
1314 FreeLexer();
1315 return M;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001316}
1317
1318
Chris Lattner38905612008-02-19 04:36:25 +00001319
1320/* Enabling traces. */
1321#ifndef YYDEBUG
1322# define YYDEBUG 0
1323#endif
1324
1325/* Enabling verbose error messages. */
1326#ifdef YYERROR_VERBOSE
1327# undef YYERROR_VERBOSE
1328# define YYERROR_VERBOSE 1
1329#else
1330# define YYERROR_VERBOSE 0
1331#endif
1332
1333/* Enabling the token table. */
1334#ifndef YYTOKEN_TABLE
1335# define YYTOKEN_TABLE 0
1336#endif
1337
1338#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
1339typedef union YYSTYPE
Devang Patelbd41a062008-02-22 19:31:30 +00001340#line 952 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00001341{
Reid Spencer68a24bd2005-08-27 18:50:39 +00001342 llvm::Module *ModuleVal;
1343 llvm::Function *FunctionVal;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001344 llvm::BasicBlock *BasicBlockVal;
1345 llvm::TerminatorInst *TermInstVal;
1346 llvm::Instruction *InstVal;
Reid Spencera132e042006-12-03 05:46:11 +00001347 llvm::Constant *ConstVal;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001348
Reid Spencera132e042006-12-03 05:46:11 +00001349 const llvm::Type *PrimType;
Reid Spencer14310612006-12-31 05:40:51 +00001350 std::list<llvm::PATypeHolder> *TypeList;
Reid Spencera132e042006-12-03 05:46:11 +00001351 llvm::PATypeHolder *TypeVal;
1352 llvm::Value *ValueVal;
Reid Spencera132e042006-12-03 05:46:11 +00001353 std::vector<llvm::Value*> *ValueList;
Reid Spencer14310612006-12-31 05:40:51 +00001354 llvm::ArgListType *ArgList;
1355 llvm::TypeWithAttrs TypeWithAttrs;
1356 llvm::TypeWithAttrsList *TypeWithAttrsList;
Dale Johanneseneb57ea72007-11-05 21:20:28 +00001357 llvm::ParamList *ParamList;
Reid Spencer14310612006-12-31 05:40:51 +00001358
Reid Spencer68a24bd2005-08-27 18:50:39 +00001359 // Represent the RHS of PHI node
Reid Spencera132e042006-12-03 05:46:11 +00001360 std::list<std::pair<llvm::Value*,
1361 llvm::BasicBlock*> > *PHIList;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001362 std::vector<std::pair<llvm::Constant*, llvm::BasicBlock*> > *JumpTable;
Reid Spencera132e042006-12-03 05:46:11 +00001363 std::vector<llvm::Constant*> *ConstVector;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001364
1365 llvm::GlobalValue::LinkageTypes Linkage;
Anton Korobeynikov178a3522007-01-12 19:22:51 +00001366 llvm::GlobalValue::VisibilityTypes Visibility;
Dale Johannesen222ebf72008-02-19 21:40:51 +00001367 llvm::ParameterAttributes ParamAttrs;
Reid Spencer38c91a92007-02-28 02:24:54 +00001368 llvm::APInt *APIntVal;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001369 int64_t SInt64Val;
1370 uint64_t UInt64Val;
1371 int SIntVal;
1372 unsigned UIntVal;
Dale Johannesencdd509a2007-09-07 21:07:57 +00001373 llvm::APFloat *FPVal;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001374 bool BoolVal;
1375
Reid Spencer0a8a16b2007-05-22 18:52:55 +00001376 std::string *StrVal; // This memory must be deleted
1377 llvm::ValID ValIDVal;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001378
Reid Spencera132e042006-12-03 05:46:11 +00001379 llvm::Instruction::BinaryOps BinaryOpVal;
1380 llvm::Instruction::TermOps TermOpVal;
1381 llvm::Instruction::MemoryOps MemOpVal;
1382 llvm::Instruction::CastOps CastOpVal;
1383 llvm::Instruction::OtherOps OtherOpVal;
Reid Spencera132e042006-12-03 05:46:11 +00001384 llvm::ICmpInst::Predicate IPredicate;
1385 llvm::FCmpInst::Predicate FPredicate;
Chris Lattner38905612008-02-19 04:36:25 +00001386}
Devang Patel4c3f8442008-02-20 19:13:10 +00001387/* Line 193 of yacc.c. */
Anton Korobeynikovc70d7732008-02-20 12:10:37 +00001388#line 1389 "llvmAsmParser.tab.c"
Chris Lattner38905612008-02-19 04:36:25 +00001389 YYSTYPE;
1390# define yystype YYSTYPE /* obsolescent; will be withdrawn */
1391# define YYSTYPE_IS_DECLARED 1
1392# define YYSTYPE_IS_TRIVIAL 1
Reid Spencer68a24bd2005-08-27 18:50:39 +00001393#endif
1394
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00001395
Reid Spencer68a24bd2005-08-27 18:50:39 +00001396
Chris Lattner38905612008-02-19 04:36:25 +00001397/* Copy the second part of user declarations. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00001398
1399
Chris Lattner38905612008-02-19 04:36:25 +00001400/* Line 216 of yacc.c. */
Anton Korobeynikovc70d7732008-02-20 12:10:37 +00001401#line 1402 "llvmAsmParser.tab.c"
Reid Spencerb8f85052007-07-31 03:50:36 +00001402
Chris Lattner38905612008-02-19 04:36:25 +00001403#ifdef short
1404# undef short
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00001405#endif
1406
Chris Lattner38905612008-02-19 04:36:25 +00001407#ifdef YYTYPE_UINT8
1408typedef YYTYPE_UINT8 yytype_uint8;
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00001409#else
Chris Lattner38905612008-02-19 04:36:25 +00001410typedef unsigned char yytype_uint8;
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00001411#endif
1412
Chris Lattner38905612008-02-19 04:36:25 +00001413#ifdef YYTYPE_INT8
1414typedef YYTYPE_INT8 yytype_int8;
1415#elif (defined __STDC__ || defined __C99__FUNC__ \
1416 || defined __cplusplus || defined _MSC_VER)
1417typedef signed char yytype_int8;
1418#else
1419typedef short int yytype_int8;
1420#endif
1421
1422#ifdef YYTYPE_UINT16
1423typedef YYTYPE_UINT16 yytype_uint16;
1424#else
1425typedef unsigned short int yytype_uint16;
1426#endif
1427
1428#ifdef YYTYPE_INT16
1429typedef YYTYPE_INT16 yytype_int16;
1430#else
1431typedef short int yytype_int16;
1432#endif
1433
1434#ifndef YYSIZE_T
1435# ifdef __SIZE_TYPE__
1436# define YYSIZE_T __SIZE_TYPE__
1437# elif defined size_t
1438# define YYSIZE_T size_t
1439# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
1440 || defined __cplusplus || defined _MSC_VER)
1441# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
1442# define YYSIZE_T size_t
1443# else
1444# define YYSIZE_T unsigned int
1445# endif
1446#endif
1447
1448#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
1449
1450#ifndef YY_
Devang Patel4c3f8442008-02-20 19:13:10 +00001451# if defined YYENABLE_NLS && YYENABLE_NLS
Chris Lattner38905612008-02-19 04:36:25 +00001452# if ENABLE_NLS
1453# include <libintl.h> /* INFRINGES ON USER NAME SPACE */
1454# define YY_(msgid) dgettext ("bison-runtime", msgid)
1455# endif
1456# endif
1457# ifndef YY_
1458# define YY_(msgid) msgid
1459# endif
1460#endif
1461
1462/* Suppress unused-variable warnings by "using" E. */
1463#if ! defined lint || defined __GNUC__
1464# define YYUSE(e) ((void) (e))
1465#else
1466# define YYUSE(e) /* empty */
1467#endif
1468
1469/* Identity function, used to suppress warnings about constant conditions. */
1470#ifndef lint
1471# define YYID(n) (n)
1472#else
1473#if (defined __STDC__ || defined __C99__FUNC__ \
1474 || defined __cplusplus || defined _MSC_VER)
1475static int
1476YYID (int i)
1477#else
1478static int
1479YYID (i)
1480 int i;
1481#endif
1482{
1483 return i;
1484}
1485#endif
1486
1487#if ! defined yyoverflow || YYERROR_VERBOSE
1488
1489/* The parser invokes alloca or malloc; define the necessary symbols. */
1490
1491# ifdef YYSTACK_USE_ALLOCA
1492# if YYSTACK_USE_ALLOCA
1493# ifdef __GNUC__
1494# define YYSTACK_ALLOC __builtin_alloca
1495# elif defined __BUILTIN_VA_ARG_INCR
1496# include <alloca.h> /* INFRINGES ON USER NAME SPACE */
1497# elif defined _AIX
1498# define YYSTACK_ALLOC __alloca
1499# elif defined _MSC_VER
1500# include <malloc.h> /* INFRINGES ON USER NAME SPACE */
1501# define alloca _alloca
1502# else
1503# define YYSTACK_ALLOC alloca
1504# if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
1505 || defined __cplusplus || defined _MSC_VER)
1506# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
1507# ifndef _STDLIB_H
1508# define _STDLIB_H 1
1509# endif
1510# endif
1511# endif
1512# endif
1513# endif
1514
1515# ifdef YYSTACK_ALLOC
1516 /* Pacify GCC's `empty if-body' warning. */
1517# define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
1518# ifndef YYSTACK_ALLOC_MAXIMUM
1519 /* The OS might guarantee only one guard page at the bottom of the stack,
1520 and a page size can be as small as 4096 bytes. So we cannot safely
1521 invoke alloca (N) if N exceeds 4096. Use a slightly smaller number
1522 to allow for a few compiler-allocated temporary stack slots. */
1523# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
1524# endif
1525# else
1526# define YYSTACK_ALLOC YYMALLOC
1527# define YYSTACK_FREE YYFREE
1528# ifndef YYSTACK_ALLOC_MAXIMUM
1529# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
1530# endif
1531# if (defined __cplusplus && ! defined _STDLIB_H \
1532 && ! ((defined YYMALLOC || defined malloc) \
1533 && (defined YYFREE || defined free)))
1534# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
1535# ifndef _STDLIB_H
1536# define _STDLIB_H 1
1537# endif
1538# endif
1539# ifndef YYMALLOC
1540# define YYMALLOC malloc
1541# if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
1542 || defined __cplusplus || defined _MSC_VER)
1543void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
1544# endif
1545# endif
1546# ifndef YYFREE
1547# define YYFREE free
1548# if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
1549 || defined __cplusplus || defined _MSC_VER)
1550void free (void *); /* INFRINGES ON USER NAME SPACE */
1551# endif
1552# endif
1553# endif
1554#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
1555
1556
1557#if (! defined yyoverflow \
1558 && (! defined __cplusplus \
1559 || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
1560
1561/* A type that is properly aligned for any stack member. */
1562union yyalloc
1563{
1564 yytype_int16 yyss;
1565 YYSTYPE yyvs;
1566 };
1567
1568/* The size of the maximum gap between one aligned stack and the next. */
1569# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
1570
1571/* The size of an array large to enough to hold all stacks, each with
1572 N elements. */
1573# define YYSTACK_BYTES(N) \
1574 ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
1575 + YYSTACK_GAP_MAXIMUM)
1576
1577/* Copy COUNT objects from FROM to TO. The source and destination do
1578 not overlap. */
1579# ifndef YYCOPY
1580# if defined __GNUC__ && 1 < __GNUC__
1581# define YYCOPY(To, From, Count) \
1582 __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
1583# else
1584# define YYCOPY(To, From, Count) \
1585 do \
1586 { \
1587 YYSIZE_T yyi; \
1588 for (yyi = 0; yyi < (Count); yyi++) \
1589 (To)[yyi] = (From)[yyi]; \
1590 } \
1591 while (YYID (0))
1592# endif
1593# endif
1594
1595/* Relocate STACK from its old location to the new one. The
1596 local variables YYSIZE and YYSTACKSIZE give the old and new number of
1597 elements in the stack, and YYPTR gives the new location of the
1598 stack. Advance YYPTR to a properly aligned location for the next
1599 stack. */
1600# define YYSTACK_RELOCATE(Stack) \
1601 do \
1602 { \
1603 YYSIZE_T yynewbytes; \
1604 YYCOPY (&yyptr->Stack, Stack, yysize); \
1605 Stack = &yyptr->Stack; \
1606 yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
1607 yyptr += yynewbytes / sizeof (*yyptr); \
1608 } \
1609 while (YYID (0))
1610
1611#endif
1612
1613/* YYFINAL -- State number of the termination state. */
1614#define YYFINAL 43
1615/* YYLAST -- Last index in YYTABLE. */
Devang Patel7990dc72008-02-20 22:40:23 +00001616#define YYLAST 1978
Chris Lattner38905612008-02-19 04:36:25 +00001617
1618/* YYNTOKENS -- Number of terminals. */
Devang Patel5a970972008-02-19 22:27:01 +00001619#define YYNTOKENS 165
Chris Lattner38905612008-02-19 04:36:25 +00001620/* YYNNTS -- Number of nonterminals. */
Devang Patel7990dc72008-02-20 22:40:23 +00001621#define YYNNTS 85
Chris Lattner38905612008-02-19 04:36:25 +00001622/* YYNRULES -- Number of rules. */
Devang Patel7990dc72008-02-20 22:40:23 +00001623#define YYNRULES 322
Chris Lattner38905612008-02-19 04:36:25 +00001624/* YYNRULES -- Number of states. */
Devang Patel7990dc72008-02-20 22:40:23 +00001625#define YYNSTATES 629
Chris Lattner38905612008-02-19 04:36:25 +00001626
1627/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
1628#define YYUNDEFTOK 2
Devang Patel5a970972008-02-19 22:27:01 +00001629#define YYMAXUTOK 405
Chris Lattner38905612008-02-19 04:36:25 +00001630
1631#define YYTRANSLATE(YYX) \
1632 ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
1633
1634/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
1635static const yytype_uint8 yytranslate[] =
1636{
1637 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1638 2, 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,
Devang Patel5a970972008-02-19 22:27:01 +00001641 151, 152, 155, 2, 154, 2, 2, 2, 2, 2,
Chris Lattner38905612008-02-19 04:36:25 +00001642 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
Devang Patel5a970972008-02-19 22:27:01 +00001643 160, 153, 161, 2, 2, 2, 2, 2, 2, 2,
Chris Lattner38905612008-02-19 04:36:25 +00001644 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1645 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
Devang Patel5a970972008-02-19 22:27:01 +00001646 2, 157, 156, 159, 2, 2, 2, 2, 2, 164,
Chris Lattner38905612008-02-19 04:36:25 +00001647 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1648 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
Devang Patel5a970972008-02-19 22:27:01 +00001649 158, 2, 2, 162, 2, 163, 2, 2, 2, 2,
Chris Lattner38905612008-02-19 04:36:25 +00001650 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1651 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, 1, 2, 3, 4,
1663 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
1664 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
1665 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
1666 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
1667 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
1668 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
1669 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
1670 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
1671 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
1672 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
1673 105, 106, 107, 108, 109, 110, 111, 112, 113, 114,
1674 115, 116, 117, 118, 119, 120, 121, 122, 123, 124,
1675 125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
1676 135, 136, 137, 138, 139, 140, 141, 142, 143, 144,
Devang Patel5a970972008-02-19 22:27:01 +00001677 145, 146, 147, 148, 149, 150
Chris Lattner38905612008-02-19 04:36:25 +00001678};
1679
1680#if YYDEBUG
1681/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
1682 YYRHS. */
1683static const yytype_uint16 yyprhs[] =
1684{
1685 0, 0, 3, 5, 7, 9, 11, 13, 15, 17,
1686 19, 21, 23, 25, 27, 29, 31, 33, 35, 37,
1687 39, 41, 43, 45, 47, 49, 51, 53, 55, 57,
1688 59, 61, 63, 65, 67, 69, 71, 73, 75, 77,
1689 79, 81, 83, 85, 87, 89, 91, 93, 95, 97,
1690 99, 101, 103, 105, 107, 109, 111, 113, 115, 117,
1691 119, 121, 123, 125, 127, 129, 130, 135, 136, 139,
1692 140, 142, 144, 146, 147, 150, 152, 154, 156, 158,
1693 160, 162, 164, 166, 167, 169, 171, 173, 174, 176,
1694 178, 179, 181, 183, 185, 187, 188, 190, 192, 193,
1695 195, 197, 199, 201, 203, 206, 208, 210, 212, 214,
Dale Johannesen172f3112008-02-20 21:15:43 +00001696 216, 218, 220, 222, 224, 227, 228, 231, 233, 235,
1697 237, 239, 241, 243, 244, 247, 248, 251, 252, 255,
1698 256, 260, 263, 264, 266, 267, 271, 273, 276, 278,
1699 280, 282, 284, 286, 288, 290, 292, 294, 298, 300,
1700 303, 309, 315, 321, 327, 331, 334, 340, 345, 348,
1701 350, 352, 354, 358, 360, 364, 366, 367, 369, 373,
1702 378, 382, 386, 391, 396, 400, 407, 413, 416, 419,
1703 422, 425, 428, 431, 434, 437, 440, 443, 446, 449,
1704 456, 462, 471, 478, 485, 493, 501, 508, 517, 526,
1705 530, 532, 534, 536, 538, 539, 542, 549, 551, 552,
1706 554, 557, 558, 562, 563, 567, 571, 575, 579, 580,
1707 589, 590, 600, 601, 611, 617, 620, 624, 626, 630,
1708 634, 638, 642, 644, 645, 651, 655, 657, 661, 663,
1709 664, 675, 677, 679, 684, 686, 688, 691, 695, 696,
1710 698, 700, 702, 704, 706, 708, 710, 712, 714, 718,
Devang Patel7990dc72008-02-20 22:40:23 +00001711 720, 726, 728, 730, 732, 734, 736, 738, 741, 743,
1712 747, 750, 753, 757, 760, 761, 763, 766, 769, 773,
1713 783, 793, 802, 817, 819, 821, 828, 834, 837, 844,
1714 852, 857, 862, 869, 876, 877, 878, 882, 885, 887,
1715 893, 899, 906, 913, 918, 925, 930, 935, 942, 949,
1716 952, 961, 963, 965, 966, 970, 977, 981, 988, 991,
1717 997, 1005, 1011
Chris Lattner38905612008-02-19 04:36:25 +00001718};
1719
1720/* YYRHS -- A `-1'-separated list of the rules' RHS. */
1721static const yytype_int16 yyrhs[] =
1722{
Devang Patel5a970972008-02-19 22:27:01 +00001723 211, 0, -1, 74, -1, 75, -1, 76, -1, 77,
Chris Lattner38905612008-02-19 04:36:25 +00001724 -1, 78, -1, 79, -1, 80, -1, 81, -1, 82,
1725 -1, 86, -1, 87, -1, 88, -1, 83, -1, 84,
1726 -1, 85, -1, 117, -1, 118, -1, 119, -1, 120,
1727 -1, 121, -1, 122, -1, 123, -1, 124, -1, 125,
1728 -1, 126, -1, 127, -1, 128, -1, 91, -1, 92,
1729 -1, 93, -1, 94, -1, 95, -1, 96, -1, 97,
1730 -1, 98, -1, 99, -1, 100, -1, 101, -1, 102,
1731 -1, 103, -1, 104, -1, 105, -1, 106, -1, 107,
1732 -1, 108, -1, 109, -1, 110, -1, 97, -1, 98,
1733 -1, 99, -1, 100, -1, 26, -1, 27, -1, 11,
1734 -1, 12, -1, 13, -1, 16, -1, 15, -1, 14,
Devang Patel5a970972008-02-19 22:27:01 +00001735 -1, 19, -1, 22, -1, 24, -1, 173, -1, -1,
1736 54, 151, 4, 152, -1, -1, 173, 153, -1, -1,
1737 20, -1, 23, -1, 179, -1, -1, 177, 153, -1,
Chris Lattner38905612008-02-19 04:36:25 +00001738 42, -1, 44, -1, 43, -1, 45, -1, 47, -1,
Devang Patel5a970972008-02-19 22:27:01 +00001739 46, -1, 48, -1, 50, -1, -1, 148, -1, 149,
1740 -1, 150, -1, -1, 46, -1, 48, -1, -1, 42,
Chris Lattner38905612008-02-19 04:36:25 +00001741 -1, 43, -1, 44, -1, 47, -1, -1, 44, -1,
1742 42, -1, -1, 62, -1, 63, -1, 64, -1, 65,
Devang Patel5a970972008-02-19 22:27:01 +00001743 -1, 66, -1, 61, 4, -1, 137, -1, 118, -1,
1744 136, -1, 119, -1, 139, -1, 140, -1, 142, -1,
Dale Johannesen172f3112008-02-20 21:15:43 +00001745 143, -1, 144, -1, 53, 4, -1, -1, 188, 187,
1746 -1, 138, -1, 141, -1, 137, -1, 136, -1, 145,
1747 -1, 146, -1, -1, 190, 189, -1, -1, 147, 22,
1748 -1, -1, 53, 4, -1, -1, 154, 53, 4, -1,
1749 34, 22, -1, -1, 194, -1, -1, 154, 197, 196,
1750 -1, 194, -1, 53, 4, -1, 11, -1, 12, -1,
1751 13, -1, 16, -1, 15, -1, 14, -1, 17, -1,
1752 49, -1, 198, -1, 199, 175, 155, -1, 233, -1,
1753 156, 4, -1, 199, 151, 203, 152, 190, -1, 10,
1754 151, 203, 152, 190, -1, 157, 4, 158, 199, 159,
1755 -1, 160, 4, 158, 199, 161, -1, 162, 204, 163,
1756 -1, 162, 163, -1, 160, 162, 204, 163, 161, -1,
1757 160, 162, 163, 161, -1, 199, 188, -1, 199, -1,
1758 10, -1, 200, -1, 202, 154, 200, -1, 202, -1,
1759 202, 154, 39, -1, 39, -1, -1, 199, -1, 204,
1760 154, 199, -1, 199, 157, 207, 159, -1, 199, 157,
1761 159, -1, 199, 164, 22, -1, 199, 160, 207, 161,
1762 -1, 199, 162, 207, 163, -1, 199, 162, 163, -1,
1763 199, 160, 162, 207, 163, 161, -1, 199, 160, 162,
1764 163, 161, -1, 199, 40, -1, 199, 41, -1, 199,
1765 233, -1, 199, 206, -1, 199, 25, -1, 171, 3,
1766 -1, 171, 5, -1, 171, 4, -1, 171, 6, -1,
1767 11, 26, -1, 11, 27, -1, 172, 9, -1, 168,
Devang Patel7990dc72008-02-20 22:40:23 +00001768 151, 205, 38, 199, 152, -1, 116, 151, 205, 245,
Dale Johannesen172f3112008-02-20 21:15:43 +00001769 152, -1, 130, 151, 205, 154, 205, 154, 205, 152,
1770 -1, 166, 151, 205, 154, 205, 152, -1, 167, 151,
1771 205, 154, 205, 152, -1, 89, 169, 151, 205, 154,
1772 205, 152, -1, 90, 170, 151, 205, 154, 205, 152,
1773 -1, 132, 151, 205, 154, 205, 152, -1, 133, 151,
1774 205, 154, 205, 154, 205, 152, -1, 134, 151, 205,
1775 154, 205, 154, 205, 152, -1, 207, 154, 205, -1,
1776 205, -1, 32, -1, 33, -1, 37, -1, -1, 201,
1777 233, -1, 122, 151, 210, 38, 199, 152, -1, 212,
1778 -1, -1, 213, -1, 212, 213, -1, -1, 31, 214,
1779 229, -1, -1, 30, 215, 230, -1, 59, 58, 219,
1780 -1, 176, 18, 199, -1, 176, 18, 10, -1, -1,
1781 178, 182, 209, 208, 205, 175, 216, 196, -1, -1,
1782 178, 180, 182, 209, 208, 205, 175, 217, 196, -1,
1783 -1, 178, 181, 182, 209, 208, 199, 175, 218, 196,
1784 -1, 178, 182, 35, 185, 210, -1, 51, 220, -1,
1785 55, 153, 221, -1, 22, -1, 52, 153, 22, -1,
1786 67, 153, 22, -1, 157, 222, 159, -1, 222, 154,
1787 22, -1, 22, -1, -1, 223, 154, 199, 188, 174,
1788 -1, 199, 188, 174, -1, 223, -1, 223, 154, 39,
1789 -1, 39, -1, -1, 186, 201, 177, 151, 224, 152,
1790 190, 195, 192, 191, -1, 28, -1, 162, -1, 184,
Devang Patel7990dc72008-02-20 22:40:23 +00001791 182, 225, 226, -1, 29, -1, 163, -1, 237, 228,
Dale Johannesen172f3112008-02-20 21:15:43 +00001792 -1, 183, 182, 225, -1, -1, 60, -1, 3, -1,
1793 4, -1, 9, -1, 26, -1, 27, -1, 40, -1,
1794 41, -1, 25, -1, 160, 207, 161, -1, 206, -1,
1795 58, 231, 22, 154, 22, -1, 7, -1, 8, -1,
1796 173, -1, 177, -1, 233, -1, 232, -1, 199, 234,
Devang Patel7990dc72008-02-20 22:40:23 +00001797 -1, 235, -1, 236, 154, 205, -1, 237, 238, -1,
1798 227, 238, -1, 239, 176, 240, -1, 239, 242, -1,
1799 -1, 21, -1, 68, 236, -1, 68, 10, -1, 69,
1800 17, 234, -1, 69, 11, 234, 154, 17, 234, 154,
1801 17, 234, -1, 70, 171, 234, 154, 17, 234, 157,
1802 241, 159, -1, 70, 171, 234, 154, 17, 234, 157,
1803 159, -1, 71, 186, 201, 234, 151, 244, 152, 190,
1804 38, 17, 234, 72, 17, 234, -1, 72, -1, 73,
1805 -1, 241, 171, 232, 154, 17, 234, -1, 171, 232,
1806 154, 17, 234, -1, 176, 247, -1, 199, 157, 234,
1807 154, 234, 159, -1, 243, 154, 157, 234, 154, 234,
1808 159, -1, 199, 188, 234, 188, -1, 17, 188, 234,
1809 188, -1, 244, 154, 199, 188, 234, 188, -1, 244,
1810 154, 17, 188, 234, 188, -1, -1, -1, 245, 154,
1811 235, -1, 57, 56, -1, 56, -1, 166, 199, 234,
1812 154, 234, -1, 167, 199, 234, 154, 234, -1, 89,
1813 169, 199, 234, 154, 234, -1, 90, 170, 199, 234,
1814 154, 234, -1, 168, 235, 38, 199, -1, 130, 235,
1815 154, 235, 154, 235, -1, 131, 235, 154, 199, -1,
1816 132, 235, 154, 235, -1, 133, 235, 154, 235, 154,
1817 235, -1, 134, 235, 154, 235, 154, 235, -1, 129,
1818 243, -1, 246, 186, 201, 234, 151, 244, 152, 190,
1819 -1, 249, -1, 36, -1, -1, 111, 199, 193, -1,
1820 111, 199, 154, 11, 234, 193, -1, 112, 199, 193,
1821 -1, 112, 199, 154, 11, 234, 193, -1, 113, 235,
1822 -1, 248, 114, 199, 234, 193, -1, 248, 115, 235,
Devang Patelbd41a062008-02-22 19:31:30 +00001823 154, 199, 234, 193, -1, 135, 199, 233, 154, 4,
Devang Patel7990dc72008-02-20 22:40:23 +00001824 -1, 116, 199, 234, 245, -1
Chris Lattner38905612008-02-19 04:36:25 +00001825};
1826
1827/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
1828static const yytype_uint16 yyrline[] =
1829{
Devang Patel7990dc72008-02-20 22:40:23 +00001830 0, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114,
1831 1114, 1115, 1115, 1115, 1115, 1115, 1115, 1116, 1116, 1116,
1832 1116, 1116, 1116, 1117, 1117, 1117, 1117, 1117, 1117, 1120,
1833 1120, 1121, 1121, 1122, 1122, 1123, 1123, 1124, 1124, 1128,
1834 1128, 1129, 1129, 1130, 1130, 1131, 1131, 1132, 1132, 1133,
1835 1133, 1134, 1134, 1135, 1136, 1141, 1142, 1142, 1142, 1142,
1836 1142, 1144, 1144, 1144, 1145, 1145, 1147, 1148, 1152, 1156,
1837 1161, 1161, 1163, 1164, 1169, 1175, 1176, 1177, 1178, 1179,
1838 1183, 1184, 1185, 1189, 1190, 1191, 1192, 1196, 1197, 1198,
1839 1202, 1203, 1204, 1205, 1206, 1210, 1211, 1212, 1215, 1216,
1840 1217, 1218, 1219, 1220, 1221, 1228, 1229, 1230, 1231, 1232,
Dale Johannesendc6c0f12008-02-22 17:50:51 +00001841 1233, 1234, 1235, 1236, 1237, 1241, 1242, 1247, 1248, 1249,
1842 1250, 1251, 1252, 1255, 1256, 1261, 1262, 1269, 1270, 1276,
1843 1277, 1286, 1294, 1295, 1300, 1301, 1302, 1307, 1320, 1320,
1844 1320, 1320, 1320, 1320, 1320, 1323, 1327, 1331, 1338, 1343,
1845 1351, 1381, 1406, 1411, 1421, 1431, 1435, 1445, 1452, 1461,
1846 1468, 1473, 1478, 1485, 1486, 1493, 1500, 1508, 1514, 1526,
1847 1554, 1570, 1597, 1625, 1651, 1671, 1697, 1717, 1729, 1736,
1848 1802, 1812, 1822, 1828, 1838, 1844, 1854, 1859, 1864, 1877,
1849 1889, 1911, 1919, 1925, 1936, 1941, 1946, 1952, 1958, 1967,
1850 1971, 1979, 1979, 1982, 1982, 1985, 1997, 2018, 2023, 2031,
1851 2032, 2036, 2036, 2040, 2040, 2043, 2046, 2070, 2082, 2081,
1852 2093, 2092, 2102, 2101, 2112, 2152, 2155, 2161, 2171, 2175,
1853 2180, 2182, 2187, 2192, 2201, 2211, 2222, 2226, 2235, 2244,
1854 2249, 2383, 2383, 2385, 2394, 2394, 2396, 2401, 2413, 2417,
1855 2422, 2426, 2430, 2434, 2438, 2442, 2446, 2450, 2454, 2479,
1856 2483, 2493, 2497, 2501, 2506, 2513, 2513, 2519, 2528, 2533,
1857 2538, 2542, 2551, 2560, 2569, 2573, 2581, 2607, 2611, 2616,
1858 2626, 2645, 2654, 2745, 2749, 2756, 2767, 2780, 2790, 2801,
1859 2811, 2822, 2830, 2840, 2847, 2850, 2851, 2858, 2862, 2867,
1860 2883, 2900, 2914, 2928, 2940, 2948, 2955, 2961, 2967, 2973,
1861 2988, 3086, 3091, 3095, 3102, 3109, 3117, 3124, 3132, 3140,
Devang Patelbd41a062008-02-22 19:31:30 +00001862 3154, 3171, 3178
Chris Lattner38905612008-02-19 04:36:25 +00001863};
1864#endif
1865
1866#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
1867/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
1868 First, the terminals, then, starting at YYNTOKENS, nonterminals. */
1869static const char *const yytname[] =
1870{
1871 "$end", "error", "$undefined", "ESINT64VAL", "EUINT64VAL", "ESAPINTVAL",
1872 "EUAPINTVAL", "LOCALVAL_ID", "GLOBALVAL_ID", "FPVAL", "VOID", "INTTYPE",
1873 "FLOAT", "DOUBLE", "X86_FP80", "FP128", "PPC_FP128", "LABEL", "TYPE",
1874 "LOCALVAR", "GLOBALVAR", "LABELSTR", "STRINGCONSTANT",
1875 "ATSTRINGCONSTANT", "PCTSTRINGCONSTANT", "ZEROINITIALIZER", "TRUETOK",
1876 "FALSETOK", "BEGINTOK", "ENDTOK", "DECLARE", "DEFINE", "GLOBAL",
1877 "CONSTANT", "SECTION", "ALIAS", "VOLATILE", "THREAD_LOCAL", "TO",
1878 "DOTDOTDOT", "NULL_TOK", "UNDEF", "INTERNAL", "LINKONCE", "WEAK",
1879 "APPENDING", "DLLIMPORT", "DLLEXPORT", "EXTERN_WEAK", "OPAQUE",
1880 "EXTERNAL", "TARGET", "TRIPLE", "ALIGN", "ADDRSPACE", "DEPLIBS", "CALL",
1881 "TAIL", "ASM_TOK", "MODULE", "SIDEEFFECT", "CC_TOK", "CCC_TOK",
1882 "FASTCC_TOK", "COLDCC_TOK", "X86_STDCALLCC_TOK", "X86_FASTCALLCC_TOK",
1883 "DATALAYOUT", "RET", "BR", "SWITCH", "INVOKE", "UNWIND", "UNREACHABLE",
1884 "ADD", "SUB", "MUL", "UDIV", "SDIV", "FDIV", "UREM", "SREM", "FREM",
1885 "AND", "OR", "XOR", "SHL", "LSHR", "ASHR", "ICMP", "FCMP", "EQ", "NE",
1886 "SLT", "SGT", "SLE", "SGE", "ULT", "UGT", "ULE", "UGE", "OEQ", "ONE",
1887 "OLT", "OGT", "OLE", "OGE", "ORD", "UNO", "UEQ", "UNE", "MALLOC",
1888 "ALLOCA", "FREE", "LOAD", "STORE", "GETELEMENTPTR", "TRUNC", "ZEXT",
1889 "SEXT", "FPTRUNC", "FPEXT", "BITCAST", "UITOFP", "SITOFP", "FPTOUI",
1890 "FPTOSI", "INTTOPTR", "PTRTOINT", "PHI_TOK", "SELECT", "VAARG",
Devang Patel5a970972008-02-19 22:27:01 +00001891 "EXTRACTELEMENT", "INSERTELEMENT", "SHUFFLEVECTOR", "GETRESULT",
1892 "SIGNEXT", "ZEROEXT", "NORETURN", "INREG", "SRET", "NOUNWIND", "NOALIAS",
1893 "BYVAL", "NEST", "READNONE", "READONLY", "GC", "DEFAULT", "HIDDEN",
1894 "PROTECTED", "'('", "')'", "'='", "','", "'*'", "'\\\\'", "'['", "'x'",
1895 "']'", "'<'", "'>'", "'{'", "'}'", "'c'", "$accept", "ArithmeticOps",
1896 "LogicalOps", "CastOps", "IPredicates", "FPredicates", "IntType",
1897 "FPType", "LocalName", "OptLocalName", "OptAddrSpace", "OptLocalAssign",
1898 "GlobalName", "OptGlobalAssign", "GlobalAssign", "GVInternalLinkage",
Chris Lattner38905612008-02-19 04:36:25 +00001899 "GVExternalLinkage", "GVVisibilityStyle", "FunctionDeclareLinkage",
1900 "FunctionDefineLinkage", "AliasLinkage", "OptCallingConv", "ParamAttr",
1901 "OptParamAttrs", "FuncAttr", "OptFuncAttrs", "OptGC", "OptAlign",
1902 "OptCAlign", "SectionString", "OptSection", "GlobalVarAttributes",
1903 "GlobalVarAttribute", "PrimType", "Types", "ArgType", "ResultTypes",
1904 "ArgTypeList", "ArgTypeListI", "TypeListI", "ConstVal", "ConstExpr",
1905 "ConstVector", "GlobalType", "ThreadLocal", "AliaseeRef", "Module",
1906 "DefinitionList", "Definition", "@1", "@2", "@3", "@4", "@5", "AsmBlock",
1907 "TargetDefinition", "LibrariesDefinition", "LibList", "ArgListH",
1908 "ArgList", "FunctionHeaderH", "BEGIN", "FunctionHeader", "END",
1909 "Function", "FunctionProto", "OptSideEffect", "ConstValueRef",
Devang Patel7990dc72008-02-20 22:40:23 +00001910 "SymbolicValueRef", "ValueRef", "ResolvedVal", "ReturnedVal",
1911 "BasicBlockList", "BasicBlock", "InstructionList", "BBTerminatorInst",
1912 "JumpTable", "Inst", "PHIList", "ParamList", "IndexList", "OptTailCall",
1913 "InstVal", "OptVolatile", "MemoryInst", 0
Chris Lattner38905612008-02-19 04:36:25 +00001914};
1915#endif
1916
1917# ifdef YYPRINT
1918/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
1919 token YYLEX-NUM. */
1920static const yytype_uint16 yytoknum[] =
1921{
1922 0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
1923 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
1924 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
1925 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
1926 295, 296, 297, 298, 299, 300, 301, 302, 303, 304,
1927 305, 306, 307, 308, 309, 310, 311, 312, 313, 314,
1928 315, 316, 317, 318, 319, 320, 321, 322, 323, 324,
1929 325, 326, 327, 328, 329, 330, 331, 332, 333, 334,
1930 335, 336, 337, 338, 339, 340, 341, 342, 343, 344,
1931 345, 346, 347, 348, 349, 350, 351, 352, 353, 354,
1932 355, 356, 357, 358, 359, 360, 361, 362, 363, 364,
1933 365, 366, 367, 368, 369, 370, 371, 372, 373, 374,
1934 375, 376, 377, 378, 379, 380, 381, 382, 383, 384,
1935 385, 386, 387, 388, 389, 390, 391, 392, 393, 394,
1936 395, 396, 397, 398, 399, 400, 401, 402, 403, 404,
Devang Patel5a970972008-02-19 22:27:01 +00001937 405, 40, 41, 61, 44, 42, 92, 91, 120, 93,
1938 60, 62, 123, 125, 99
Chris Lattner38905612008-02-19 04:36:25 +00001939};
1940# endif
1941
1942/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
1943static const yytype_uint8 yyr1[] =
1944{
Devang Patel5a970972008-02-19 22:27:01 +00001945 0, 165, 166, 166, 166, 166, 166, 166, 166, 166,
1946 166, 167, 167, 167, 167, 167, 167, 168, 168, 168,
Chris Lattner38905612008-02-19 04:36:25 +00001947 168, 168, 168, 168, 168, 168, 168, 168, 168, 169,
Devang Patel5a970972008-02-19 22:27:01 +00001948 169, 169, 169, 169, 169, 169, 169, 169, 169, 170,
1949 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
1950 170, 170, 170, 170, 170, 171, 172, 172, 172, 172,
1951 172, 173, 173, 173, 174, 174, 175, 175, 176, 176,
1952 177, 177, 178, 178, 179, 180, 180, 180, 180, 180,
1953 181, 181, 181, 182, 182, 182, 182, 183, 183, 183,
1954 184, 184, 184, 184, 184, 185, 185, 185, 186, 186,
1955 186, 186, 186, 186, 186, 187, 187, 187, 187, 187,
Dale Johannesen172f3112008-02-20 21:15:43 +00001956 187, 187, 187, 187, 187, 188, 188, 189, 189, 189,
1957 189, 189, 189, 190, 190, 191, 191, 192, 192, 193,
1958 193, 194, 195, 195, 196, 196, 197, 197, 198, 198,
1959 198, 198, 198, 198, 198, 199, 199, 199, 199, 199,
1960 199, 199, 199, 199, 199, 199, 199, 199, 200, 201,
1961 201, 202, 202, 203, 203, 203, 203, 204, 204, 205,
Devang Patel5a970972008-02-19 22:27:01 +00001962 205, 205, 205, 205, 205, 205, 205, 205, 205, 205,
Dale Johannesen172f3112008-02-20 21:15:43 +00001963 205, 205, 205, 205, 205, 205, 205, 205, 205, 206,
1964 206, 206, 206, 206, 206, 206, 206, 206, 206, 207,
1965 207, 208, 208, 209, 209, 210, 210, 211, 211, 212,
1966 212, 214, 213, 215, 213, 213, 213, 213, 216, 213,
1967 217, 213, 218, 213, 213, 213, 213, 219, 220, 220,
1968 221, 222, 222, 222, 223, 223, 224, 224, 224, 224,
1969 225, 226, 226, 227, 228, 228, 229, 230, 231, 231,
Devang Patel5a970972008-02-19 22:27:01 +00001970 232, 232, 232, 232, 232, 232, 232, 232, 232, 232,
Dale Johannesen172f3112008-02-20 21:15:43 +00001971 232, 233, 233, 233, 233, 234, 234, 235, 236, 236,
Devang Patel7990dc72008-02-20 22:40:23 +00001972 237, 237, 238, 239, 239, 239, 240, 240, 240, 240,
1973 240, 240, 240, 240, 240, 241, 241, 242, 243, 243,
1974 244, 244, 244, 244, 244, 245, 245, 246, 246, 247,
1975 247, 247, 247, 247, 247, 247, 247, 247, 247, 247,
1976 247, 247, 248, 248, 249, 249, 249, 249, 249, 249,
1977 249, 249, 249
Chris Lattner38905612008-02-19 04:36:25 +00001978};
1979
1980/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
1981static const yytype_uint8 yyr2[] =
1982{
1983 0, 2, 1, 1, 1, 1, 1, 1, 1, 1,
1984 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1985 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1986 1, 1, 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, 0, 4, 0, 2, 0,
1990 1, 1, 1, 0, 2, 1, 1, 1, 1, 1,
1991 1, 1, 1, 0, 1, 1, 1, 0, 1, 1,
1992 0, 1, 1, 1, 1, 0, 1, 1, 0, 1,
1993 1, 1, 1, 1, 2, 1, 1, 1, 1, 1,
Dale Johannesen172f3112008-02-20 21:15:43 +00001994 1, 1, 1, 1, 2, 0, 2, 1, 1, 1,
1995 1, 1, 1, 0, 2, 0, 2, 0, 2, 0,
1996 3, 2, 0, 1, 0, 3, 1, 2, 1, 1,
1997 1, 1, 1, 1, 1, 1, 1, 3, 1, 2,
1998 5, 5, 5, 5, 3, 2, 5, 4, 2, 1,
1999 1, 1, 3, 1, 3, 1, 0, 1, 3, 4,
2000 3, 3, 4, 4, 3, 6, 5, 2, 2, 2,
2001 2, 2, 2, 2, 2, 2, 2, 2, 2, 6,
2002 5, 8, 6, 6, 7, 7, 6, 8, 8, 3,
2003 1, 1, 1, 1, 0, 2, 6, 1, 0, 1,
2004 2, 0, 3, 0, 3, 3, 3, 3, 0, 8,
2005 0, 9, 0, 9, 5, 2, 3, 1, 3, 3,
2006 3, 3, 1, 0, 5, 3, 1, 3, 1, 0,
2007 10, 1, 1, 4, 1, 1, 2, 3, 0, 1,
2008 1, 1, 1, 1, 1, 1, 1, 1, 3, 1,
Devang Patel7990dc72008-02-20 22:40:23 +00002009 5, 1, 1, 1, 1, 1, 1, 2, 1, 3,
2010 2, 2, 3, 2, 0, 1, 2, 2, 3, 9,
2011 9, 8, 14, 1, 1, 6, 5, 2, 6, 7,
2012 4, 4, 6, 6, 0, 0, 3, 2, 1, 5,
2013 5, 6, 6, 4, 6, 4, 4, 6, 6, 2,
2014 8, 1, 1, 0, 3, 6, 3, 6, 2, 5,
2015 7, 5, 4
Chris Lattner38905612008-02-19 04:36:25 +00002016};
2017
2018/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
2019 STATE-NUM when YYTABLE doesn't specify something else to do. Zero
2020 means the default is an error. */
2021static const yytype_uint16 yydefact[] =
2022{
Dale Johannesen172f3112008-02-20 21:15:43 +00002023 73, 61, 70, 62, 71, 63, 213, 211, 0, 0,
2024 0, 0, 0, 0, 83, 72, 0, 73, 209, 87,
2025 90, 0, 0, 225, 0, 0, 68, 0, 74, 75,
Chris Lattner38905612008-02-19 04:36:25 +00002026 77, 76, 78, 80, 79, 81, 82, 84, 85, 86,
Dale Johannesen172f3112008-02-20 21:15:43 +00002027 83, 83, 204, 1, 210, 88, 89, 83, 214, 91,
Devang Patel7990dc72008-02-20 22:40:23 +00002028 92, 93, 94, 83, 274, 212, 274, 0, 0, 233,
Dale Johannesen172f3112008-02-20 21:15:43 +00002029 226, 227, 215, 261, 262, 217, 138, 139, 140, 143,
2030 142, 141, 144, 145, 0, 0, 0, 0, 263, 264,
2031 146, 216, 148, 204, 204, 95, 203, 0, 98, 98,
Devang Patel7990dc72008-02-20 22:40:23 +00002032 275, 271, 69, 244, 245, 246, 270, 228, 229, 232,
Dale Johannesen172f3112008-02-20 21:15:43 +00002033 0, 166, 149, 0, 0, 0, 0, 155, 167, 0,
2034 0, 166, 0, 0, 0, 97, 96, 0, 201, 202,
2035 0, 0, 99, 100, 101, 102, 103, 0, 247, 0,
Devang Patel7990dc72008-02-20 22:40:23 +00002036 313, 273, 0, 230, 165, 115, 161, 163, 0, 0,
Dale Johannesen172f3112008-02-20 21:15:43 +00002037 0, 0, 0, 0, 154, 0, 0, 147, 0, 0,
2038 160, 0, 159, 0, 224, 138, 139, 140, 143, 142,
2039 141, 0, 0, 67, 67, 104, 0, 241, 242, 243,
Devang Patel7990dc72008-02-20 22:40:23 +00002040 312, 298, 0, 0, 0, 0, 98, 283, 284, 2,
Chris Lattner38905612008-02-19 04:36:25 +00002041 3, 4, 5, 6, 7, 8, 9, 10, 14, 15,
2042 16, 11, 12, 13, 0, 0, 0, 0, 0, 0,
2043 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
2044 27, 28, 0, 0, 0, 0, 0, 0, 0, 0,
Devang Patel7990dc72008-02-20 22:40:23 +00002045 0, 0, 272, 98, 287, 0, 311, 231, 158, 0,
Dale Johannesen172f3112008-02-20 21:15:43 +00002046 123, 67, 67, 157, 0, 168, 0, 123, 67, 67,
2047 0, 205, 186, 187, 182, 184, 183, 185, 188, 181,
2048 177, 178, 0, 0, 0, 0, 0, 0, 0, 0,
2049 0, 0, 0, 0, 0, 0, 180, 179, 218, 0,
Devang Patel7990dc72008-02-20 22:40:23 +00002050 297, 277, 67, 268, 276, 0, 0, 55, 0, 0,
2051 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
2052 0, 53, 54, 49, 50, 51, 52, 39, 40, 41,
2053 42, 43, 44, 45, 46, 47, 48, 0, 129, 129,
2054 318, 67, 67, 309, 0, 0, 0, 0, 0, 67,
2055 67, 67, 0, 0, 0, 0, 0, 106, 108, 107,
2056 105, 109, 110, 111, 112, 113, 116, 164, 162, 151,
2057 152, 153, 156, 66, 150, 220, 222, 0, 0, 0,
2058 0, 0, 0, 0, 0, 170, 200, 0, 0, 0,
2059 174, 0, 171, 0, 0, 0, 134, 239, 250, 251,
2060 252, 257, 253, 254, 255, 256, 248, 0, 259, 266,
2061 265, 267, 0, 0, 278, 0, 0, 67, 67, 0,
2062 314, 0, 316, 295, 0, 0, 0, 0, 0, 0,
2063 0, 0, 0, 0, 0, 0, 67, 0, 114, 120,
2064 119, 117, 118, 121, 122, 124, 134, 134, 0, 0,
2065 0, 295, 0, 0, 0, 0, 0, 169, 155, 167,
2066 0, 172, 173, 0, 0, 0, 0, 219, 238, 115,
2067 236, 0, 249, 0, 0, 269, 0, 0, 0, 0,
2068 0, 0, 0, 0, 322, 0, 0, 0, 305, 306,
2069 0, 0, 0, 0, 0, 303, 0, 129, 0, 221,
2070 223, 67, 0, 0, 0, 0, 0, 0, 0, 199,
2071 176, 0, 0, 0, 0, 0, 0, 136, 134, 65,
2072 0, 123, 0, 258, 0, 0, 294, 0, 0, 129,
2073 130, 129, 0, 0, 0, 0, 0, 0, 321, 299,
2074 300, 294, 0, 319, 67, 206, 0, 0, 190, 0,
2075 0, 0, 0, 175, 0, 0, 67, 131, 137, 135,
2076 64, 235, 237, 115, 132, 0, 0, 0, 115, 115,
2077 0, 301, 302, 315, 317, 296, 0, 0, 304, 307,
2078 308, 0, 129, 0, 0, 0, 196, 0, 0, 192,
2079 193, 189, 65, 133, 127, 260, 0, 0, 0, 0,
2080 123, 0, 288, 0, 123, 320, 194, 195, 0, 0,
2081 0, 234, 0, 125, 0, 281, 0, 0, 106, 108,
2082 115, 115, 0, 115, 115, 289, 310, 191, 197, 198,
2083 128, 0, 240, 279, 0, 280, 0, 291, 290, 0,
2084 0, 0, 126, 0, 0, 0, 115, 115, 0, 0,
2085 0, 293, 292, 286, 0, 0, 285, 0, 282
Chris Lattner38905612008-02-19 04:36:25 +00002086};
2087
2088/* YYDEFGOTO[NTERM-NUM]. */
2089static const yytype_int16 yydefgoto[] =
2090{
Devang Patel7990dc72008-02-20 22:40:23 +00002091 -1, 263, 264, 265, 290, 307, 161, 162, 78, 531,
Chris Lattner38905612008-02-19 04:36:25 +00002092 112, 12, 79, 14, 15, 40, 41, 42, 47, 53,
Devang Patel7990dc72008-02-20 22:40:23 +00002093 117, 127, 336, 228, 415, 339, 602, 583, 390, 487,
2094 564, 437, 488, 80, 163, 136, 153, 137, 138, 109,
2095 356, 378, 357, 120, 87, 154, 16, 17, 18, 20,
2096 19, 366, 416, 417, 62, 23, 60, 100, 440, 441,
2097 128, 169, 54, 95, 55, 48, 443, 379, 82, 381,
2098 273, 274, 56, 91, 92, 222, 587, 131, 313, 540,
2099 454, 223, 224, 225, 226
Chris Lattner38905612008-02-19 04:36:25 +00002100};
2101
2102/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
2103 STATE-NUM. */
Devang Patelbd41a062008-02-22 19:31:30 +00002104#define YYPACT_NINF -572
Chris Lattner38905612008-02-19 04:36:25 +00002105static const yytype_int16 yypact[] =
2106{
Devang Patelbd41a062008-02-22 19:31:30 +00002107 284, -572, -572, -572, -572, -572, -572, -572, -13, -121,
2108 12, -94, 78, -48, 19, -572, 127, 883, -572, 113,
2109 162, -18, 13, -572, 23, 140, -572, 1464, -572, -572,
2110 -572, -572, -572, -572, -572, -572, -572, -572, -572, -572,
2111 106, 106, 176, -572, -572, -572, -572, 106, -572, -572,
2112 -572, -572, -572, 106, 155, -572, -10, 199, 209, 212,
2113 -572, -572, -572, -572, -572, 90, -572, -572, -572, -572,
2114 -572, -572, -572, -572, 242, 246, 2, 126, -572, -572,
2115 -572, 1, -572, 228, 228, 205, -572, 9, 297, 297,
2116 -572, -572, 80, -572, -572, -572, -572, -572, -572, -572,
2117 -81, 1059, -572, 134, 138, 506, 90, -572, 1, -114,
2118 149, 1059, 146, 9, 9, -572, -572, 1014, -572, -572,
2119 1504, 301, -572, -572, -572, -572, -572, 1562, -572, -2,
2120 1843, -572, 287, -572, -572, 1, -572, 159, 164, 1620,
2121 1620, 156, -83, 1620, -572, 315, 168, -572, 1504, 1620,
2122 90, 172, 1, 388, -572, 342, 316, 317, 322, 324,
2123 328, 234, 329, 1115, 288, -572, 99, -572, -572, -572,
2124 -572, -572, 293, 1660, 83, 333, 297, -572, -572, -572,
2125 -572, -572, -572, -572, -572, -572, -572, -572, -572, -572,
2126 -572, -572, -572, -572, 511, 787, 1620, 1620, 1620, 1620,
2127 -572, -572, -572, -572, -572, -572, -572, -572, -572, -572,
2128 -572, -572, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620,
2129 1620, 1620, -572, 297, -572, 161, -572, -572, 434, 1345,
2130 -572, -31, -30, -572, 190, 1, 198, -572, 288, 3,
2131 1014, -572, -572, -572, -572, -572, -572, -572, -572, -572,
2132 -572, -572, 511, 787, 201, 203, 204, 213, 214, 1385,
2133 1678, 609, 334, 225, 230, 231, -572, -572, -572, 238,
2134 -572, 90, 702, -572, 239, 841, 841, -572, 841, 1562,
2135 -572, -572, -572, -572, -572, -572, -572, -572, -572, -572,
2136 1620, -572, -572, -572, -572, -572, -572, -572, -572, -572,
2137 -572, -572, -572, -572, -572, -572, -572, 1620, 97, 123,
2138 -572, 702, -25, 244, 245, 249, 250, 251, 252, 14,
2139 702, 702, 341, 1562, 1620, 1620, 405, -572, -572, -572,
2140 -572, -572, -572, -572, -572, -572, -572, -572, -572, -93,
2141 -572, -572, -572, -572, -93, -572, 146, 375, 264, 265,
2142 1504, 1504, 1504, 1504, 1504, -572, -572, -56, 788, -78,
2143 -572, -82, -572, 1504, 1504, 1504, 263, 1406, -572, -572,
2144 -572, -572, -572, -572, -572, -572, 360, 1504, -572, -572,
2145 -572, -572, 1504, 269, -572, 272, 841, 702, 702, 5,
2146 -572, 7, -572, -572, 841, 271, 1620, 1620, 1620, 1620,
2147 1620, 275, 276, 277, 1620, 841, 702, 281, -572, -572,
2148 -572, -572, -572, -572, -572, -572, 263, 263, 1620, 1504,
2149 1504, -572, 282, 283, 285, 289, 1504, -572, 280, 969,
2150 -68, -572, -572, 290, 291, 408, -3, -572, -572, 1,
2151 294, 295, -572, 427, -64, -572, 433, 436, 303, 302,
2152 305, 841, 451, 841, 306, 307, 841, 308, 1, -572,
2153 313, 314, 453, 841, 841, 1, 318, 319, 1620, -572,
2154 -572, -45, 320, 321, 114, 1504, 1504, 1504, 1504, -572,
2155 -572, 311, 1504, 1504, 1620, 455, 474, -572, 263, 1746,
2156 1446, -572, 330, -572, 841, 841, 1718, 841, 841, 319,
2157 -572, 319, 1620, 841, 332, 1620, 1620, 1620, -572, -572,
2158 -572, 1718, 429, -572, 702, -572, 1504, 1504, -572, 336,
2159 331, 337, 340, -572, 343, 344, 64, -572, -572, -572,
2160 -572, -572, -572, 1, 81, 466, 346, 347, 28, 1,
2161 115, -572, -572, -572, -572, -572, 339, 841, -572, -572,
2162 -572, 133, 319, 349, 351, 1504, -572, 1504, 1504, -572,
2163 -572, -572, 1746, -572, 452, -572, 489, -4, 560, 560,
2164 -572, 1736, -572, 348, -572, -572, -572, -572, 359, 363,
2165 372, -572, 508, 380, 841, -572, 1255, -1, 381, 382,
2166 -572, -572, 87, 28, 1, -572, -93, -572, -572, -572,
2167 -572, 509, -572, -572, 383, -572, 1255, 434, 434, 519,
2168 560, 560, -572, 521, 392, 841, -572, -572, 841, 530,
2169 478, 434, 434, -572, 841, 537, -572, 841, -572
Chris Lattner38905612008-02-19 04:36:25 +00002170};
2171
2172/* YYPGOTO[NTERM-NUM]. */
2173static const yytype_int16 yypgoto[] =
2174{
Devang Patelbd41a062008-02-22 19:31:30 +00002175 -572, 426, 428, 431, 323, 304, -173, -572, 0, 4,
2176 -150, 467, 8, -572, -572, -572, -572, 189, -572, -572,
2177 -572, -149, -572, -409, -572, -234, -572, -572, -289, 31,
2178 -572, -404, -572, -572, -26, 352, -122, -572, 461, 483,
2179 -92, -159, -214, 84, 196, 350, -572, -572, 572, -572,
2180 -572, -572, -572, -572, -572, -572, -572, -572, -572, -572,
2181 502, -572, -572, -572, -572, -572, -572, -571, -76, 46,
2182 -105, -572, -572, 536, -572, -572, -572, -572, -572, 85,
2183 173, -572, -572, -572, -572
Chris Lattner38905612008-02-19 04:36:25 +00002184};
2185
2186/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
2187 positive, shift that token. If negative, reduce the rule which
2188 number is the opposite. If zero, do what YYDEFACT says.
2189 If YYTABLE_NINF, syntax error. */
Dale Johannesen172f3112008-02-20 21:15:43 +00002190#define YYTABLE_NINF -209
Chris Lattner38905612008-02-19 04:36:25 +00002191static const yytype_int16 yytable[] =
2192{
Devang Patel7990dc72008-02-20 22:40:23 +00002193 11, 81, 278, 344, 266, 166, 104, 277, 13, 110,
Devang Patelbd41a062008-02-22 19:31:30 +00002194 277, 90, 469, 470, 268, 604, 451, 11, 453, 93,
2195 392, 63, 64, 110, 110, 13, 167, 279, 164, 110,
2196 489, 485, 24, 1, 2, 614, 3, 4, 5, 21,
2197 143, 118, 119, 409, 410, 411, 359, 361, 412, 144,
2198 486, 108, 413, 414, 22, 110, 238, 110, 452, 26,
2199 452, 29, 30, 31, 32, 33, 34, 35, 110, 36,
2200 25, 143, 426, 132, 323, 135, 426, 241, 133, 108,
2201 234, 432, -144, 431, 529, 135, 426, 267, 345, 346,
2202 426, 152, 11, 310, 275, 481, 27, 493, 426, 1,
2203 276, 152, 3, 427, 5, 28, 111, 515, 314, 315,
2204 316, 317, 318, 231, 232, 485, 322, 235, 110, 2,
2205 111, 111, 4, 239, 562, 609, 111, 43, 340, 568,
2206 569, 341, 394, 63, 64, 57, 106, 66, 67, 68,
2207 69, 70, 71, 72, 430, 1, 2, 272, 3, 4,
2208 5, 110, 111, 94, 111, 585, -67, 386, 605, 45,
2209 168, 46, 61, 444, 105, 111, 58, 37, 38, 39,
2210 308, 309, 272, 311, 269, 73, 90, 110, 513, -144,
2211 59, 607, 608, -144, 610, 611, 312, 272, 272, 272,
2212 272, 272, 319, 320, 321, 272, 380, 148, 149, 380,
2213 380, 405, 380, 135, 49, 50, 51, 621, 622, 52,
2214 543, 85, 544, 86, 152, 111, 561, 409, 410, 411,
2215 407, 97, 412, 409, 410, 411, 413, 414, 412, 83,
2216 84, 98, 413, 414, 99, 380, 88, 244, 245, 246,
2217 247, 101, 89, 401, 380, 380, 102, 115, 111, 116,
2218 103, 389, -67, 152, 37, 38, 39, 534, 421, 422,
2219 423, 424, 425, 575, 387, 86, 518, 570, 502, 571,
2220 266, 433, 434, 435, 111, 324, 325, 391, -67, 113,
2221 114, 388, 74, 75, -208, 574, 76, 571, 77, 107,
2222 445, 457, 139, 459, 460, 461, 140, 152, 406, 272,
2223 145, 147, -69, 1, 2, 165, 3, 4, 5, 227,
2224 380, 380, 380, 229, 6, 7, 230, 233, 380, 236,
2225 237, 383, 384, 240, 385, -56, -57, 472, 473, 380,
2226 380, -60, 429, -59, 479, 8, 592, -58, 248, 9,
2227 596, 439, 110, 10, 277, -55, -55, -55, -55, 270,
2228 343, 342, 350, 267, 351, 352, 362, 393, 121, 122,
2229 123, 124, 125, 126, 353, 354, 402, 403, 242, 243,
2230 272, 458, 272, 272, 272, 380, 363, 380, 465, 404,
2231 380, 364, 365, 519, 520, 521, 522, 380, 380, 367,
2232 524, 525, 471, 382, 586, 63, 64, 545, 395, 396,
2233 548, 549, 550, 397, 398, 399, 400, 1, 2, 408,
2234 3, 4, 5, 418, 606, 419, 420, 436, 380, 380,
2235 442, 380, 380, 446, 553, 554, 447, 380, 456, 462,
2236 463, 464, 448, 449, 450, 468, 475, 476, 380, 477,
2237 455, 480, 514, 478, 482, 483, 484, 491, 490, 492,
2238 494, 466, 467, 495, 496, 500, 497, 508, 526, 498,
2239 502, 503, 505, 578, 533, 579, 580, 506, 507, 511,
2240 539, 380, 523, 512, 516, 517, 272, 527, 528, 272,
2241 272, 272, 452, 556, 535, 539, 547, 326, 565, 530,
2242 555, 557, 380, 380, 558, 559, 560, 499, 572, 501,
2243 566, 576, 504, 577, 567, 582, 584, 595, 380, 509,
2244 510, 597, 600, 63, 64, 598, 106, 66, 67, 68,
2245 69, 70, 71, 72, 599, 1, 2, 601, 3, 4,
2246 5, 612, -18, -19, 380, 380, 615, 613, 618, 380,
2247 536, 537, 380, 541, 542, 594, 619, 624, 380, 546,
2248 625, 380, 327, 328, 627, 73, 219, 349, 220, 130,
2249 552, 221, 530, 368, 369, 563, 581, 63, 64, 370,
2250 329, 330, 146, 331, 332, 348, 333, 334, 335, 1,
2251 2, 338, 3, 4, 5, 371, 372, 373, 142, 44,
2252 347, 129, 96, 573, 474, 0, 551, 0, 0, 0,
Devang Patel7990dc72008-02-20 22:40:23 +00002253 374, 375, 280, 281, 282, 283, 284, 285, 286, 287,
2254 288, 289, 0, 326, 590, 591, 63, 64, 376, 106,
2255 155, 156, 157, 158, 159, 160, 72, 0, 1, 2,
2256 603, 3, 4, 5, 179, 180, 181, 182, 183, 184,
2257 185, 186, 187, 188, 189, 190, 191, 192, 193, 252,
2258 253, 0, 0, 0, 0, 0, 616, 617, 73, 0,
2259 0, 620, 74, 75, 623, 0, 76, 0, 77, 141,
2260 626, 0, 0, 628, 0, 0, 254, 200, 588, 589,
2261 203, 204, 205, 206, 207, 208, 209, 210, 211, 0,
2262 255, 0, 256, 257, 258, 0, 329, 330, 0, 331,
2263 332, 0, 333, 334, 335, 368, 369, 0, 0, 63,
2264 64, 370, 0, 0, 0, 0, 0, 0, 0, 0,
2265 377, 1, 2, 0, 3, 4, 5, 371, 372, 373,
2266 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2267 0, 0, 374, 375, 0, 0, 0, 0, 0, 0,
2268 0, 0, 0, 0, 0, 0, 110, 0, 0, 0,
2269 376, 0, 0, 0, 0, 74, 75, 0, 0, 76,
2270 0, 77, 360, 0, 0, 0, 179, 180, 181, 182,
Dale Johannesen172f3112008-02-20 21:15:43 +00002271 183, 184, 185, 186, 187, 188, 189, 190, 191, 192,
Devang Patel7990dc72008-02-20 22:40:23 +00002272 193, 252, 253, 0, 0, 63, 64, 0, 106, 155,
2273 156, 157, 158, 159, 160, 72, 0, 1, 2, 0,
2274 3, 4, 5, 291, 292, 0, 0, 0, 254, 200,
2275 201, 202, 203, 204, 205, 206, 207, 208, 209, 210,
2276 211, 0, 255, 0, 256, 257, 258, 73, 0, 0,
2277 0, 0, 0, 0, 368, 369, 0, 0, 63, 64,
2278 370, 0, 0, 111, 0, 0, 0, 0, 0, 0,
2279 1, 2, 377, 3, 4, 5, 371, 372, 373, 0,
Chris Lattner38905612008-02-19 04:36:25 +00002280 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
Devang Patel7990dc72008-02-20 22:40:23 +00002281 0, 374, 375, -207, 293, 294, 295, 296, 297, 298,
2282 299, 300, 301, 302, 303, 304, 305, 306, 0, 376,
2283 0, -69, 1, 2, 0, 3, 4, 5, 0, 0,
2284 0, 0, 0, 6, 7, 179, 180, 181, 182, 183,
Dale Johannesen172f3112008-02-20 21:15:43 +00002285 184, 185, 186, 187, 188, 189, 190, 191, 192, 193,
Devang Patel7990dc72008-02-20 22:40:23 +00002286 252, 253, 0, 0, 8, 0, 0, 0, 9, 0,
2287 0, 0, 10, 0, 74, 75, 0, 0, 76, 0,
2288 77, 428, 0, 0, 0, 0, 0, 254, 200, 201,
Dale Johannesen172f3112008-02-20 21:15:43 +00002289 202, 203, 204, 205, 206, 207, 208, 209, 210, 211,
Devang Patel7990dc72008-02-20 22:40:23 +00002290 0, 255, 0, 256, 257, 258, 63, 64, 0, 0,
2291 0, 0, 0, 0, 0, 0, 0, 0, 1, 2,
2292 0, 3, 4, 5, 249, 0, 0, 0, 0, 0,
2293 0, 377, 0, 0, 0, 0, 0, 0, 0, 250,
2294 251, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2295 0, 63, 64, 110, 150, 66, 67, 68, 69, 70,
Dale Johannesen172f3112008-02-20 21:15:43 +00002296 71, 72, 0, 1, 2, 0, 3, 4, 5, 0,
Devang Patel7990dc72008-02-20 22:40:23 +00002297 0, 0, 0, 179, 180, 181, 182, 183, 184, 185,
2298 186, 187, 188, 189, 190, 191, 192, 193, 252, 253,
2299 0, 0, 0, 73, 0, 0, 63, 64, 0, 106,
2300 66, 67, 68, 69, 70, 71, 72, 0, 1, 2,
2301 0, 3, 4, 5, 0, 254, 200, 201, 202, 203,
2302 204, 205, 206, 207, 208, 209, 210, 211, 134, 255,
2303 0, 256, 257, 258, 0, 0, 0, 0, 73, 0,
Devang Patel5a970972008-02-19 22:27:01 +00002304 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
Devang Patel7990dc72008-02-20 22:40:23 +00002305 111, 0, 63, 64, -67, 0, 259, 0, 0, 260,
2306 0, 261, 0, 262, 1, 2, 151, 3, 4, 5,
2307 249, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2308 0, 0, 0, 0, 0, 250, 251, 0, 0, 0,
2309 0, 0, 0, 0, 0, 0, 0, 0, 0, 110,
2310 74, 75, 0, 0, 76, 0, 77, 0, 0, 0,
2311 0, 0, 0, 0, 0, 0, 0, 0, 0, 179,
2312 180, 181, 182, 183, 184, 185, 186, 187, 188, 189,
2313 190, 191, 192, 193, 252, 253, 0, 0, 0, 0,
2314 0, 0, 0, 0, 0, 74, 75, 0, 0, 76,
2315 0, 77, 0, 0, 0, 0, 0, 0, 0, 0,
2316 0, 254, 200, 201, 202, 203, 204, 205, 206, 207,
2317 208, 209, 210, 211, 0, 255, 0, 256, 257, 258,
2318 0, 0, 0, 0, 0, 0, 0, 0, 368, 369,
2319 0, 0, 0, 0, 370, 0, 111, 0, 0, 0,
2320 0, 0, 259, 0, 0, 260, 0, 261, 0, 262,
2321 371, 372, 373, 0, 0, 0, 0, 0, 0, 0,
2322 0, 0, 0, 0, 0, 374, 375, 0, 0, 0,
2323 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2324 0, 0, 0, 376, 0, 0, 0, 0, 0, 0,
2325 0, 0, 0, 0, 0, 0, 0, 0, 0, 179,
2326 180, 181, 182, 183, 184, 185, 186, 187, 188, 189,
2327 190, 191, 192, 193, 252, 253, 0, 0, 0, 0,
2328 0, 0, 63, 64, 0, 106, 66, 67, 68, 69,
2329 70, 71, 72, 0, 1, 2, 0, 3, 4, 5,
2330 0, 254, 200, 201, 202, 203, 204, 205, 206, 207,
2331 208, 209, 210, 211, 337, 255, 0, 256, 257, 258,
2332 0, 0, 63, 64, 73, 106, 155, 156, 157, 158,
2333 159, 160, 72, 0, 1, 2, 0, 3, 4, 5,
2334 0, 0, 0, 63, 64, 377, 106, 66, 67, 68,
2335 69, 70, 71, 72, 0, 1, 2, 0, 3, 4,
2336 5, 0, 0, 0, 73, 0, 0, 0, 0, 0,
2337 0, 0, 0, 0, 0, 438, 0, 0, 0, 0,
2338 0, 0, 0, 63, 64, 73, 106, 66, 67, 68,
2339 69, 70, 71, 72, 0, 1, 2, 0, 3, 4,
2340 5, 63, 64, 0, 65, 66, 67, 68, 69, 70,
2341 71, 72, 0, 1, 2, 532, 3, 4, 5, 0,
2342 0, 0, 0, 0, 0, 73, 0, 0, 0, 0,
2343 0, 74, 75, 0, 0, 76, 0, 77, 0, 0,
2344 0, 63, 64, 73, 106, 155, 156, 157, 158, 159,
2345 160, 72, 0, 1, 2, 0, 3, 4, 5, 0,
2346 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2347 0, 74, 75, 0, 355, 76, 0, 77, 0, 0,
2348 0, 0, 0, 73, 0, 0, 0, 0, 0, 0,
Dale Johannesen172f3112008-02-20 21:15:43 +00002349 0, 0, 74, 75, 0, 0, 76, 0, 77, 63,
Devang Patel7990dc72008-02-20 22:40:23 +00002350 64, 0, 150, 66, 67, 68, 69, 70, 71, 72,
Dale Johannesen172f3112008-02-20 21:15:43 +00002351 0, 1, 2, 0, 3, 4, 5, 0, 0, 0,
2352 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
Devang Patel7990dc72008-02-20 22:40:23 +00002353 0, 0, 74, 75, 0, 0, 76, 0, 77, 0,
Dale Johannesen172f3112008-02-20 21:15:43 +00002354 0, 73, 0, 0, 0, 0, 0, 0, 0, 0,
Devang Patel7990dc72008-02-20 22:40:23 +00002355 74, 75, 0, 0, 76, 0, 77, 63, 64, 0,
2356 106, 66, 67, 68, 69, 70, 71, 72, 0, 1,
2357 2, 0, 3, 4, 5, 0, 0, 0, 0, 0,
2358 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
Dale Johannesen172f3112008-02-20 21:15:43 +00002359 74, 75, 0, 0, 76, 0, 77, 63, 64, 73,
Devang Patel7990dc72008-02-20 22:40:23 +00002360 271, 66, 67, 68, 69, 70, 71, 72, 0, 1,
2361 2, 0, 3, 4, 5, 63, 64, 0, 106, 155,
2362 156, 157, 158, 159, 160, 72, 0, 1, 2, 0,
Dale Johannesen172f3112008-02-20 21:15:43 +00002363 3, 4, 5, 0, 0, 0, 0, 0, 0, 73,
2364 0, 0, 0, 0, 0, 0, 0, 0, 74, 75,
Devang Patel7990dc72008-02-20 22:40:23 +00002365 0, 0, 76, 0, 77, 63, 64, 73, 106, 66,
2366 67, 68, 69, 70, 71, 538, 0, 1, 2, 0,
2367 3, 4, 5, 63, 64, 0, 106, 66, 67, 68,
2368 69, 70, 71, 593, 0, 1, 2, 0, 3, 4,
2369 5, 0, 0, 0, 0, 1, 0, 73, 3, 0,
2370 5, 0, 0, 0, 0, 0, 74, 75, 0, 0,
2371 76, 0, 77, 0, 0, 73, 0, 0, 0, 0,
2372 0, 0, 0, 0, 0, 0, 0, 0, 0, 326,
Dale Johannesen172f3112008-02-20 21:15:43 +00002373 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
Dale Johannesen172f3112008-02-20 21:15:43 +00002374 0, 0, 0, 0, 0, 0, 74, 75, 0, 0,
Devang Patel7990dc72008-02-20 22:40:23 +00002375 76, 0, 77, 0, 0, 0, 0, 0, 0, 0,
2376 0, 0, 0, 0, 74, 75, 0, 0, 76, 0,
2377 358, 0, 0, 0, 0, 0, 0, 0, 0, 0,
Dale Johannesen172f3112008-02-20 21:15:43 +00002378 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
Devang Patel7990dc72008-02-20 22:40:23 +00002379 0, 0, 0, 0, 327, 328, 0, 0, 0, 0,
2380 0, 0, 0, 0, 74, 75, 0, 0, 76, 170,
2381 77, 0, 329, 330, 0, 331, 332, 0, 333, 334,
2382 335, 0, 74, 75, 0, 0, 76, 0, 77, 171,
2383 172, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2384 0, 173, 174, 175, 176, 177, 178, 179, 180, 181,
Dale Johannesen172f3112008-02-20 21:15:43 +00002385 182, 183, 184, 185, 186, 187, 188, 189, 190, 191,
2386 192, 193, 194, 195, 0, 0, 0, 0, 0, 0,
2387 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2388 0, 0, 0, 0, 196, 197, 198, 0, 0, 199,
2389 200, 201, 202, 203, 204, 205, 206, 207, 208, 209,
2390 210, 211, 212, 213, 214, 215, 216, 217, 218
Chris Lattner38905612008-02-19 04:36:25 +00002391};
2392
2393static const yytype_int16 yycheck[] =
2394{
Devang Patel7990dc72008-02-20 22:40:23 +00002395 0, 27, 175, 237, 163, 127, 4, 11, 0, 54,
Devang Patelbd41a062008-02-22 19:31:30 +00002396 11, 21, 416, 417, 164, 586, 11, 17, 11, 29,
2397 309, 7, 8, 54, 54, 17, 28, 176, 120, 54,
2398 439, 34, 153, 19, 20, 606, 22, 23, 24, 52,
2399 154, 32, 33, 136, 137, 138, 260, 261, 141, 163,
2400 53, 77, 145, 146, 67, 54, 148, 54, 53, 153,
2401 53, 42, 43, 44, 45, 46, 47, 48, 54, 50,
2402 58, 154, 154, 154, 223, 101, 154, 153, 159, 105,
2403 163, 163, 54, 161, 488, 111, 154, 163, 238, 239,
2404 154, 117, 92, 198, 11, 163, 18, 161, 154, 19,
2405 17, 127, 22, 159, 24, 153, 151, 152, 213, 214,
2406 215, 216, 217, 139, 140, 34, 221, 143, 54, 20,
2407 151, 151, 23, 149, 533, 38, 151, 0, 159, 538,
2408 539, 161, 157, 7, 8, 153, 10, 11, 12, 13,
2409 14, 15, 16, 17, 358, 19, 20, 173, 22, 23,
2410 24, 54, 151, 163, 151, 159, 155, 279, 159, 46,
2411 162, 48, 22, 377, 162, 151, 153, 148, 149, 150,
2412 196, 197, 198, 199, 166, 49, 21, 54, 467, 151,
2413 157, 590, 591, 155, 593, 594, 212, 213, 214, 215,
2414 216, 217, 218, 219, 220, 221, 272, 113, 114, 275,
2415 276, 323, 278, 229, 42, 43, 44, 616, 617, 47,
2416 499, 35, 501, 37, 240, 151, 152, 136, 137, 138,
2417 325, 22, 141, 136, 137, 138, 145, 146, 141, 40,
2418 41, 22, 145, 146, 22, 311, 47, 3, 4, 5,
2419 6, 151, 53, 319, 320, 321, 4, 42, 151, 44,
2420 4, 154, 155, 279, 148, 149, 150, 491, 350, 351,
2421 352, 353, 354, 552, 290, 37, 152, 152, 154, 154,
2422 429, 363, 364, 365, 151, 114, 115, 154, 155, 83,
2423 84, 307, 156, 157, 0, 152, 160, 154, 162, 163,
2424 382, 396, 158, 398, 399, 400, 158, 323, 324, 325,
2425 151, 155, 18, 19, 20, 4, 22, 23, 24, 22,
2426 386, 387, 388, 154, 30, 31, 152, 161, 394, 4,
2427 152, 275, 276, 151, 278, 9, 9, 419, 420, 405,
2428 406, 9, 358, 9, 426, 51, 570, 9, 9, 55,
2429 574, 367, 54, 59, 11, 3, 4, 5, 6, 56,
2430 152, 161, 151, 429, 151, 151, 22, 311, 61, 62,
2431 63, 64, 65, 66, 151, 151, 320, 321, 26, 27,
2432 396, 397, 398, 399, 400, 451, 151, 453, 404, 38,
2433 456, 151, 151, 475, 476, 477, 478, 463, 464, 151,
2434 482, 483, 418, 154, 567, 7, 8, 502, 154, 154,
2435 505, 506, 507, 154, 154, 154, 154, 19, 20, 4,
2436 22, 23, 24, 38, 587, 151, 151, 154, 494, 495,
2437 60, 497, 498, 154, 516, 517, 154, 503, 157, 154,
2438 154, 154, 386, 387, 388, 154, 154, 154, 514, 154,
2439 394, 161, 468, 154, 154, 154, 38, 152, 154, 22,
2440 17, 405, 406, 17, 151, 4, 154, 4, 484, 154,
2441 154, 154, 154, 555, 490, 557, 558, 154, 154, 151,
2442 496, 547, 161, 154, 154, 154, 502, 22, 4, 505,
2443 506, 507, 53, 152, 154, 511, 154, 53, 22, 489,
2444 154, 154, 568, 569, 154, 152, 152, 451, 159, 453,
2445 154, 152, 456, 152, 157, 53, 17, 159, 584, 463,
2446 464, 152, 4, 7, 8, 152, 10, 11, 12, 13,
2447 14, 15, 16, 17, 152, 19, 20, 147, 22, 23,
2448 24, 22, 151, 151, 610, 611, 17, 154, 17, 615,
2449 494, 495, 618, 497, 498, 571, 154, 17, 624, 503,
2450 72, 627, 118, 119, 17, 49, 130, 253, 130, 92,
2451 514, 130, 562, 3, 4, 534, 562, 7, 8, 9,
2452 136, 137, 111, 139, 140, 252, 142, 143, 144, 19,
2453 20, 229, 22, 23, 24, 25, 26, 27, 105, 17,
2454 240, 89, 56, 547, 421, -1, 511, -1, -1, -1,
Devang Patel7990dc72008-02-20 22:40:23 +00002455 40, 41, 91, 92, 93, 94, 95, 96, 97, 98,
2456 99, 100, -1, 53, 568, 569, 7, 8, 58, 10,
2457 11, 12, 13, 14, 15, 16, 17, -1, 19, 20,
2458 584, 22, 23, 24, 74, 75, 76, 77, 78, 79,
2459 80, 81, 82, 83, 84, 85, 86, 87, 88, 89,
2460 90, -1, -1, -1, -1, -1, 610, 611, 49, -1,
2461 -1, 615, 156, 157, 618, -1, 160, -1, 162, 163,
2462 624, -1, -1, 627, -1, -1, 116, 117, 118, 119,
2463 120, 121, 122, 123, 124, 125, 126, 127, 128, -1,
2464 130, -1, 132, 133, 134, -1, 136, 137, -1, 139,
2465 140, -1, 142, 143, 144, 3, 4, -1, -1, 7,
2466 8, 9, -1, -1, -1, -1, -1, -1, -1, -1,
2467 160, 19, 20, -1, 22, 23, 24, 25, 26, 27,
2468 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2469 -1, -1, 40, 41, -1, -1, -1, -1, -1, -1,
2470 -1, -1, -1, -1, -1, -1, 54, -1, -1, -1,
2471 58, -1, -1, -1, -1, 156, 157, -1, -1, 160,
2472 -1, 162, 163, -1, -1, -1, 74, 75, 76, 77,
Dale Johannesen172f3112008-02-20 21:15:43 +00002473 78, 79, 80, 81, 82, 83, 84, 85, 86, 87,
Devang Patel7990dc72008-02-20 22:40:23 +00002474 88, 89, 90, -1, -1, 7, 8, -1, 10, 11,
2475 12, 13, 14, 15, 16, 17, -1, 19, 20, -1,
2476 22, 23, 24, 26, 27, -1, -1, -1, 116, 117,
Dale Johannesen172f3112008-02-20 21:15:43 +00002477 118, 119, 120, 121, 122, 123, 124, 125, 126, 127,
Devang Patel7990dc72008-02-20 22:40:23 +00002478 128, -1, 130, -1, 132, 133, 134, 49, -1, -1,
2479 -1, -1, -1, -1, 3, 4, -1, -1, 7, 8,
2480 9, -1, -1, 151, -1, -1, -1, -1, -1, -1,
2481 19, 20, 160, 22, 23, 24, 25, 26, 27, -1,
Devang Patel5a970972008-02-19 22:27:01 +00002482 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
Devang Patel7990dc72008-02-20 22:40:23 +00002483 -1, 40, 41, 0, 97, 98, 99, 100, 101, 102,
2484 103, 104, 105, 106, 107, 108, 109, 110, -1, 58,
2485 -1, 18, 19, 20, -1, 22, 23, 24, -1, -1,
2486 -1, -1, -1, 30, 31, 74, 75, 76, 77, 78,
Dale Johannesen172f3112008-02-20 21:15:43 +00002487 79, 80, 81, 82, 83, 84, 85, 86, 87, 88,
Devang Patel7990dc72008-02-20 22:40:23 +00002488 89, 90, -1, -1, 51, -1, -1, -1, 55, -1,
2489 -1, -1, 59, -1, 156, 157, -1, -1, 160, -1,
2490 162, 163, -1, -1, -1, -1, -1, 116, 117, 118,
Dale Johannesen172f3112008-02-20 21:15:43 +00002491 119, 120, 121, 122, 123, 124, 125, 126, 127, 128,
Devang Patel7990dc72008-02-20 22:40:23 +00002492 -1, 130, -1, 132, 133, 134, 7, 8, -1, -1,
2493 -1, -1, -1, -1, -1, -1, -1, -1, 19, 20,
2494 -1, 22, 23, 24, 25, -1, -1, -1, -1, -1,
2495 -1, 160, -1, -1, -1, -1, -1, -1, -1, 40,
2496 41, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2497 -1, 7, 8, 54, 10, 11, 12, 13, 14, 15,
2498 16, 17, -1, 19, 20, -1, 22, 23, 24, -1,
2499 -1, -1, -1, 74, 75, 76, 77, 78, 79, 80,
2500 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,
2501 -1, -1, -1, 49, -1, -1, 7, 8, -1, 10,
2502 11, 12, 13, 14, 15, 16, 17, -1, 19, 20,
2503 -1, 22, 23, 24, -1, 116, 117, 118, 119, 120,
2504 121, 122, 123, 124, 125, 126, 127, 128, 39, 130,
2505 -1, 132, 133, 134, -1, -1, -1, -1, 49, -1,
Dale Johannesen172f3112008-02-20 21:15:43 +00002506 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
Devang Patel7990dc72008-02-20 22:40:23 +00002507 151, -1, 7, 8, 155, -1, 157, -1, -1, 160,
2508 -1, 162, -1, 164, 19, 20, 122, 22, 23, 24,
2509 25, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2510 -1, -1, -1, -1, -1, 40, 41, -1, -1, -1,
2511 -1, -1, -1, -1, -1, -1, -1, -1, -1, 54,
2512 156, 157, -1, -1, 160, -1, 162, -1, -1, -1,
2513 -1, -1, -1, -1, -1, -1, -1, -1, -1, 74,
2514 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
2515 85, 86, 87, 88, 89, 90, -1, -1, -1, -1,
2516 -1, -1, -1, -1, -1, 156, 157, -1, -1, 160,
2517 -1, 162, -1, -1, -1, -1, -1, -1, -1, -1,
2518 -1, 116, 117, 118, 119, 120, 121, 122, 123, 124,
2519 125, 126, 127, 128, -1, 130, -1, 132, 133, 134,
2520 -1, -1, -1, -1, -1, -1, -1, -1, 3, 4,
2521 -1, -1, -1, -1, 9, -1, 151, -1, -1, -1,
2522 -1, -1, 157, -1, -1, 160, -1, 162, -1, 164,
2523 25, 26, 27, -1, -1, -1, -1, -1, -1, -1,
2524 -1, -1, -1, -1, -1, 40, 41, -1, -1, -1,
Dale Johannesen172f3112008-02-20 21:15:43 +00002525 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
Devang Patel7990dc72008-02-20 22:40:23 +00002526 -1, -1, -1, 58, -1, -1, -1, -1, -1, -1,
2527 -1, -1, -1, -1, -1, -1, -1, -1, -1, 74,
2528 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
2529 85, 86, 87, 88, 89, 90, -1, -1, -1, -1,
2530 -1, -1, 7, 8, -1, 10, 11, 12, 13, 14,
2531 15, 16, 17, -1, 19, 20, -1, 22, 23, 24,
2532 -1, 116, 117, 118, 119, 120, 121, 122, 123, 124,
2533 125, 126, 127, 128, 39, 130, -1, 132, 133, 134,
2534 -1, -1, 7, 8, 49, 10, 11, 12, 13, 14,
2535 15, 16, 17, -1, 19, 20, -1, 22, 23, 24,
2536 -1, -1, -1, 7, 8, 160, 10, 11, 12, 13,
2537 14, 15, 16, 17, -1, 19, 20, -1, 22, 23,
2538 24, -1, -1, -1, 49, -1, -1, -1, -1, -1,
2539 -1, -1, -1, -1, -1, 39, -1, -1, -1, -1,
Dale Johannesen172f3112008-02-20 21:15:43 +00002540 -1, -1, -1, 7, 8, 49, 10, 11, 12, 13,
2541 14, 15, 16, 17, -1, 19, 20, -1, 22, 23,
Devang Patel7990dc72008-02-20 22:40:23 +00002542 24, 7, 8, -1, 10, 11, 12, 13, 14, 15,
2543 16, 17, -1, 19, 20, 39, 22, 23, 24, -1,
Dale Johannesen172f3112008-02-20 21:15:43 +00002544 -1, -1, -1, -1, -1, 49, -1, -1, -1, -1,
Devang Patel7990dc72008-02-20 22:40:23 +00002545 -1, 156, 157, -1, -1, 160, -1, 162, -1, -1,
2546 -1, 7, 8, 49, 10, 11, 12, 13, 14, 15,
Dale Johannesen172f3112008-02-20 21:15:43 +00002547 16, 17, -1, 19, 20, -1, 22, 23, 24, -1,
Devang Patel5a970972008-02-19 22:27:01 +00002548 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
Devang Patel7990dc72008-02-20 22:40:23 +00002549 -1, 156, 157, -1, 159, 160, -1, 162, -1, -1,
2550 -1, -1, -1, 49, -1, -1, -1, -1, -1, -1,
Dale Johannesen172f3112008-02-20 21:15:43 +00002551 -1, -1, 156, 157, -1, -1, 160, -1, 162, 7,
2552 8, -1, 10, 11, 12, 13, 14, 15, 16, 17,
2553 -1, 19, 20, -1, 22, 23, 24, -1, -1, -1,
2554 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
Devang Patel7990dc72008-02-20 22:40:23 +00002555 -1, -1, 156, 157, -1, -1, 160, -1, 162, -1,
2556 -1, 49, -1, -1, -1, -1, -1, -1, -1, -1,
2557 156, 157, -1, -1, 160, -1, 162, 7, 8, -1,
Dale Johannesen172f3112008-02-20 21:15:43 +00002558 10, 11, 12, 13, 14, 15, 16, 17, -1, 19,
2559 20, -1, 22, 23, 24, -1, -1, -1, -1, -1,
Devang Patel7990dc72008-02-20 22:40:23 +00002560 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
Dale Johannesen172f3112008-02-20 21:15:43 +00002561 156, 157, -1, -1, 160, -1, 162, 7, 8, 49,
2562 10, 11, 12, 13, 14, 15, 16, 17, -1, 19,
2563 20, -1, 22, 23, 24, 7, 8, -1, 10, 11,
2564 12, 13, 14, 15, 16, 17, -1, 19, 20, -1,
2565 22, 23, 24, -1, -1, -1, -1, -1, -1, 49,
2566 -1, -1, -1, -1, -1, -1, -1, -1, 156, 157,
Devang Patel7990dc72008-02-20 22:40:23 +00002567 -1, -1, 160, -1, 162, 7, 8, 49, 10, 11,
2568 12, 13, 14, 15, 16, 17, -1, 19, 20, -1,
2569 22, 23, 24, 7, 8, -1, 10, 11, 12, 13,
2570 14, 15, 16, 17, -1, 19, 20, -1, 22, 23,
2571 24, -1, -1, -1, -1, 19, -1, 49, 22, -1,
2572 24, -1, -1, -1, -1, -1, 156, 157, -1, -1,
2573 160, -1, 162, -1, -1, 49, -1, -1, -1, -1,
2574 -1, -1, -1, -1, -1, -1, -1, -1, -1, 53,
Dale Johannesen172f3112008-02-20 21:15:43 +00002575 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
Dale Johannesen172f3112008-02-20 21:15:43 +00002576 -1, -1, -1, -1, -1, -1, 156, 157, -1, -1,
2577 160, -1, 162, -1, -1, -1, -1, -1, -1, -1,
Devang Patel7990dc72008-02-20 22:40:23 +00002578 -1, -1, -1, -1, 156, 157, -1, -1, 160, -1,
2579 162, -1, -1, -1, -1, -1, -1, -1, -1, -1,
Dale Johannesen172f3112008-02-20 21:15:43 +00002580 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
Devang Patel7990dc72008-02-20 22:40:23 +00002581 -1, -1, -1, -1, 118, 119, -1, -1, -1, -1,
2582 -1, -1, -1, -1, 156, 157, -1, -1, 160, 36,
2583 162, -1, 136, 137, -1, 139, 140, -1, 142, 143,
2584 144, -1, 156, 157, -1, -1, 160, -1, 162, 56,
2585 57, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2586 -1, 68, 69, 70, 71, 72, 73, 74, 75, 76,
Dale Johannesen172f3112008-02-20 21:15:43 +00002587 77, 78, 79, 80, 81, 82, 83, 84, 85, 86,
2588 87, 88, 89, 90, -1, -1, -1, -1, -1, -1,
2589 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2590 -1, -1, -1, -1, 111, 112, 113, -1, -1, 116,
2591 117, 118, 119, 120, 121, 122, 123, 124, 125, 126,
2592 127, 128, 129, 130, 131, 132, 133, 134, 135
Chris Lattner38905612008-02-19 04:36:25 +00002593};
2594
2595/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
2596 symbol of state STATE-NUM. */
2597static const yytype_uint8 yystos[] =
2598{
2599 0, 19, 20, 22, 23, 24, 30, 31, 51, 55,
Devang Patel5a970972008-02-19 22:27:01 +00002600 59, 173, 176, 177, 178, 179, 211, 212, 213, 215,
2601 214, 52, 67, 220, 153, 58, 153, 18, 153, 42,
2602 43, 44, 45, 46, 47, 48, 50, 148, 149, 150,
2603 180, 181, 182, 0, 213, 46, 48, 183, 230, 42,
Devang Patel7990dc72008-02-20 22:40:23 +00002604 43, 44, 47, 184, 227, 229, 237, 153, 153, 157,
Devang Patel5a970972008-02-19 22:27:01 +00002605 221, 22, 219, 7, 8, 10, 11, 12, 13, 14,
2606 15, 16, 17, 49, 156, 157, 160, 162, 173, 177,
2607 198, 199, 233, 182, 182, 35, 37, 209, 182, 182,
Devang Patel7990dc72008-02-20 22:40:23 +00002608 21, 238, 239, 29, 163, 228, 238, 22, 22, 22,
Devang Patel5a970972008-02-19 22:27:01 +00002609 222, 151, 4, 4, 4, 162, 10, 163, 199, 204,
2610 54, 151, 175, 209, 209, 42, 44, 185, 32, 33,
2611 208, 61, 62, 63, 64, 65, 66, 186, 225, 225,
Devang Patel7990dc72008-02-20 22:40:23 +00002612 176, 242, 154, 159, 39, 199, 200, 202, 203, 158,
Devang Patel5a970972008-02-19 22:27:01 +00002613 158, 163, 204, 154, 163, 151, 203, 155, 208, 208,
2614 10, 122, 199, 201, 210, 11, 12, 13, 14, 15,
2615 16, 171, 172, 199, 205, 4, 201, 28, 162, 226,
Chris Lattner38905612008-02-19 04:36:25 +00002616 36, 56, 57, 68, 69, 70, 71, 72, 73, 74,
2617 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
2618 85, 86, 87, 88, 89, 90, 111, 112, 113, 116,
2619 117, 118, 119, 120, 121, 122, 123, 124, 125, 126,
Devang Patel5a970972008-02-19 22:27:01 +00002620 127, 128, 129, 130, 131, 132, 133, 134, 135, 166,
Devang Patel7990dc72008-02-20 22:40:23 +00002621 167, 168, 240, 246, 247, 248, 249, 22, 188, 154,
Devang Patel5a970972008-02-19 22:27:01 +00002622 152, 199, 199, 161, 163, 199, 4, 152, 205, 199,
2623 151, 233, 26, 27, 3, 4, 5, 6, 9, 25,
2624 40, 41, 89, 90, 116, 130, 132, 133, 134, 157,
2625 160, 162, 164, 166, 167, 168, 206, 233, 175, 177,
Devang Patel7990dc72008-02-20 22:40:23 +00002626 56, 10, 199, 235, 236, 11, 17, 11, 171, 186,
2627 91, 92, 93, 94, 95, 96, 97, 98, 99, 100,
2628 169, 26, 27, 97, 98, 99, 100, 101, 102, 103,
2629 104, 105, 106, 107, 108, 109, 110, 170, 199, 199,
2630 235, 199, 199, 243, 235, 235, 235, 235, 235, 199,
2631 199, 199, 235, 186, 114, 115, 53, 118, 119, 136,
2632 137, 139, 140, 142, 143, 144, 187, 39, 200, 190,
2633 159, 161, 161, 152, 190, 175, 175, 210, 169, 170,
2634 151, 151, 151, 151, 151, 159, 205, 207, 162, 207,
2635 163, 207, 22, 151, 151, 151, 216, 151, 3, 4,
2636 9, 25, 26, 27, 40, 41, 58, 160, 206, 232,
2637 233, 234, 154, 234, 234, 234, 201, 199, 199, 154,
2638 193, 154, 193, 234, 157, 154, 154, 154, 154, 154,
Devang Patelbd41a062008-02-22 19:31:30 +00002639 154, 233, 234, 234, 38, 201, 199, 235, 4, 136,
Devang Patel7990dc72008-02-20 22:40:23 +00002640 137, 138, 141, 145, 146, 189, 217, 218, 38, 151,
2641 151, 205, 205, 205, 205, 205, 154, 159, 163, 199,
2642 207, 161, 163, 205, 205, 205, 154, 196, 39, 199,
2643 223, 224, 60, 231, 207, 205, 154, 154, 234, 234,
2644 234, 11, 53, 11, 245, 234, 157, 235, 199, 235,
2645 235, 235, 154, 154, 154, 199, 234, 234, 154, 196,
2646 196, 199, 205, 205, 245, 154, 154, 154, 154, 205,
2647 161, 163, 154, 154, 38, 34, 53, 194, 197, 188,
2648 154, 152, 22, 161, 17, 17, 151, 154, 154, 234,
2649 4, 234, 154, 154, 234, 154, 154, 154, 4, 234,
2650 234, 151, 154, 193, 199, 152, 154, 154, 152, 205,
2651 205, 205, 205, 161, 205, 205, 199, 22, 4, 196,
2652 173, 174, 39, 199, 190, 154, 234, 234, 17, 199,
2653 244, 234, 234, 193, 193, 235, 234, 154, 235, 235,
2654 235, 244, 234, 205, 205, 154, 152, 154, 154, 152,
2655 152, 152, 188, 194, 195, 22, 154, 157, 188, 188,
2656 152, 154, 159, 234, 152, 193, 152, 152, 205, 205,
2657 205, 174, 53, 192, 17, 159, 171, 241, 118, 119,
2658 234, 234, 190, 17, 199, 159, 190, 152, 152, 152,
2659 4, 147, 191, 234, 232, 159, 171, 188, 188, 38,
2660 188, 188, 22, 154, 232, 17, 234, 234, 17, 154,
2661 234, 188, 188, 234, 17, 72, 234, 17, 234
Chris Lattner38905612008-02-19 04:36:25 +00002662};
David Greene718fda32007-08-01 03:59:32 +00002663
Reid Spencer68a24bd2005-08-27 18:50:39 +00002664#define yyerrok (yyerrstatus = 0)
2665#define yyclearin (yychar = YYEMPTY)
Chris Lattner38905612008-02-19 04:36:25 +00002666#define YYEMPTY (-2)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002667#define YYEOF 0
Chris Lattner38905612008-02-19 04:36:25 +00002668
Reid Spencer68a24bd2005-08-27 18:50:39 +00002669#define YYACCEPT goto yyacceptlab
Chris Lattner38905612008-02-19 04:36:25 +00002670#define YYABORT goto yyabortlab
2671#define YYERROR goto yyerrorlab
2672
2673
2674/* Like YYERROR except do call yyerror. This remains here temporarily
2675 to ease the transition to the new meaning of YYERROR, for GCC.
Reid Spencer68a24bd2005-08-27 18:50:39 +00002676 Once GCC version 2 has supplanted version 1, this can go. */
Chris Lattner38905612008-02-19 04:36:25 +00002677
Reid Spencer68a24bd2005-08-27 18:50:39 +00002678#define YYFAIL goto yyerrlab
Chris Lattner38905612008-02-19 04:36:25 +00002679
Reid Spencer68a24bd2005-08-27 18:50:39 +00002680#define YYRECOVERING() (!!yyerrstatus)
Chris Lattner38905612008-02-19 04:36:25 +00002681
2682#define YYBACKUP(Token, Value) \
Reid Spencer68a24bd2005-08-27 18:50:39 +00002683do \
2684 if (yychar == YYEMPTY && yylen == 1) \
Chris Lattner38905612008-02-19 04:36:25 +00002685 { \
2686 yychar = (Token); \
2687 yylval = (Value); \
2688 yytoken = YYTRANSLATE (yychar); \
2689 YYPOPSTACK (1); \
Reid Spencer68a24bd2005-08-27 18:50:39 +00002690 goto yybackup; \
2691 } \
2692 else \
Chris Lattner38905612008-02-19 04:36:25 +00002693 { \
2694 yyerror (YY_("syntax error: cannot back up")); \
2695 YYERROR; \
2696 } \
2697while (YYID (0))
2698
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002699
Reid Spencer68a24bd2005-08-27 18:50:39 +00002700#define YYTERROR 1
2701#define YYERRCODE 256
2702
Chris Lattner38905612008-02-19 04:36:25 +00002703
2704/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
2705 If N is 0, then set CURRENT to the empty location which ends
2706 the previous symbol: RHS[0] (always defined). */
2707
2708#define YYRHSLOC(Rhs, K) ((Rhs)[K])
2709#ifndef YYLLOC_DEFAULT
2710# define YYLLOC_DEFAULT(Current, Rhs, N) \
2711 do \
2712 if (YYID (N)) \
2713 { \
2714 (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \
2715 (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \
2716 (Current).last_line = YYRHSLOC (Rhs, N).last_line; \
2717 (Current).last_column = YYRHSLOC (Rhs, N).last_column; \
2718 } \
2719 else \
2720 { \
2721 (Current).first_line = (Current).last_line = \
2722 YYRHSLOC (Rhs, 0).last_line; \
2723 (Current).first_column = (Current).last_column = \
2724 YYRHSLOC (Rhs, 0).last_column; \
2725 } \
2726 while (YYID (0))
Reid Spencer68a24bd2005-08-27 18:50:39 +00002727#endif
2728
Chris Lattner38905612008-02-19 04:36:25 +00002729
2730/* YY_LOCATION_PRINT -- Print the location on the stream.
2731 This macro was not mandated originally: define only if we know
2732 we won't break user code: when these are the locations we know. */
2733
2734#ifndef YY_LOCATION_PRINT
Devang Patel4c3f8442008-02-20 19:13:10 +00002735# if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL
Chris Lattner38905612008-02-19 04:36:25 +00002736# define YY_LOCATION_PRINT(File, Loc) \
2737 fprintf (File, "%d.%d-%d.%d", \
2738 (Loc).first_line, (Loc).first_column, \
2739 (Loc).last_line, (Loc).last_column)
2740# else
2741# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
2742# endif
2743#endif
2744
2745
2746/* YYLEX -- calling `yylex' with the right arguments. */
2747
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00002748#ifdef YYLEX_PARAM
Chris Lattner38905612008-02-19 04:36:25 +00002749# define YYLEX yylex (YYLEX_PARAM)
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00002750#else
Chris Lattner38905612008-02-19 04:36:25 +00002751# define YYLEX yylex ()
Scott Michel15dcd8e2008-01-30 03:10:00 +00002752#endif
Chris Lattner38905612008-02-19 04:36:25 +00002753
2754/* Enable debugging if requested. */
2755#if YYDEBUG
2756
2757# ifndef YYFPRINTF
2758# include <stdio.h> /* INFRINGES ON USER NAME SPACE */
2759# define YYFPRINTF fprintf
2760# endif
2761
2762# define YYDPRINTF(Args) \
2763do { \
2764 if (yydebug) \
2765 YYFPRINTF Args; \
2766} while (YYID (0))
2767
2768# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
2769do { \
2770 if (yydebug) \
2771 { \
2772 YYFPRINTF (stderr, "%s ", Title); \
2773 yy_symbol_print (stderr, \
2774 Type, Value); \
2775 YYFPRINTF (stderr, "\n"); \
2776 } \
2777} while (YYID (0))
2778
2779
2780/*--------------------------------.
2781| Print this symbol on YYOUTPUT. |
2782`--------------------------------*/
2783
2784/*ARGSUSED*/
2785#if (defined __STDC__ || defined __C99__FUNC__ \
2786 || defined __cplusplus || defined _MSC_VER)
2787static void
2788yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
Scott Michel15dcd8e2008-01-30 03:10:00 +00002789#else
Chris Lattner38905612008-02-19 04:36:25 +00002790static void
2791yy_symbol_value_print (yyoutput, yytype, yyvaluep)
2792 FILE *yyoutput;
2793 int yytype;
2794 YYSTYPE const * const yyvaluep;
Scott Michel15dcd8e2008-01-30 03:10:00 +00002795#endif
Chris Lattner38905612008-02-19 04:36:25 +00002796{
2797 if (!yyvaluep)
2798 return;
2799# ifdef YYPRINT
2800 if (yytype < YYNTOKENS)
2801 YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
2802# else
2803 YYUSE (yyoutput);
2804# endif
2805 switch (yytype)
2806 {
2807 default:
2808 break;
2809 }
2810}
2811
2812
2813/*--------------------------------.
2814| Print this symbol on YYOUTPUT. |
2815`--------------------------------*/
2816
2817#if (defined __STDC__ || defined __C99__FUNC__ \
2818 || defined __cplusplus || defined _MSC_VER)
2819static void
2820yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
2821#else
2822static void
2823yy_symbol_print (yyoutput, yytype, yyvaluep)
2824 FILE *yyoutput;
2825 int yytype;
2826 YYSTYPE const * const yyvaluep;
Christopher Lamba8ed9bf2007-12-11 09:02:08 +00002827#endif
Chris Lattner38905612008-02-19 04:36:25 +00002828{
2829 if (yytype < YYNTOKENS)
2830 YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
2831 else
2832 YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
Scott Michel7f9ba9b2008-01-30 02:55:46 +00002833
Chris Lattner38905612008-02-19 04:36:25 +00002834 yy_symbol_value_print (yyoutput, yytype, yyvaluep);
2835 YYFPRINTF (yyoutput, ")");
2836}
Scott Michel7f9ba9b2008-01-30 02:55:46 +00002837
Chris Lattner38905612008-02-19 04:36:25 +00002838/*------------------------------------------------------------------.
2839| yy_stack_print -- Print the state stack from its BOTTOM up to its |
2840| TOP (included). |
2841`------------------------------------------------------------------*/
Scott Michel7f9ba9b2008-01-30 02:55:46 +00002842
Chris Lattner38905612008-02-19 04:36:25 +00002843#if (defined __STDC__ || defined __C99__FUNC__ \
2844 || defined __cplusplus || defined _MSC_VER)
2845static void
2846yy_stack_print (yytype_int16 *bottom, yytype_int16 *top)
2847#else
2848static void
2849yy_stack_print (bottom, top)
2850 yytype_int16 *bottom;
2851 yytype_int16 *top;
Christopher Lamba8ed9bf2007-12-11 09:02:08 +00002852#endif
Chris Lattner38905612008-02-19 04:36:25 +00002853{
2854 YYFPRINTF (stderr, "Stack now");
2855 for (; bottom <= top; ++bottom)
2856 YYFPRINTF (stderr, " %d", *bottom);
2857 YYFPRINTF (stderr, "\n");
2858}
Scott Michel7f9ba9b2008-01-30 02:55:46 +00002859
Chris Lattner38905612008-02-19 04:36:25 +00002860# define YY_STACK_PRINT(Bottom, Top) \
2861do { \
2862 if (yydebug) \
2863 yy_stack_print ((Bottom), (Top)); \
2864} while (YYID (0))
Scott Michel7f9ba9b2008-01-30 02:55:46 +00002865
Chris Lattner38905612008-02-19 04:36:25 +00002866
2867/*------------------------------------------------.
2868| Report that the YYRULE is going to be reduced. |
2869`------------------------------------------------*/
2870
2871#if (defined __STDC__ || defined __C99__FUNC__ \
2872 || defined __cplusplus || defined _MSC_VER)
2873static void
2874yy_reduce_print (YYSTYPE *yyvsp, int yyrule)
2875#else
2876static void
2877yy_reduce_print (yyvsp, yyrule)
2878 YYSTYPE *yyvsp;
2879 int yyrule;
Dale Johannesencdd509a2007-09-07 21:07:57 +00002880#endif
Chris Lattner38905612008-02-19 04:36:25 +00002881{
2882 int yynrhs = yyr2[yyrule];
2883 int yyi;
2884 unsigned long int yylno = yyrline[yyrule];
2885 YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
2886 yyrule - 1, yylno);
2887 /* The symbols being reduced. */
2888 for (yyi = 0; yyi < yynrhs; yyi++)
2889 {
2890 fprintf (stderr, " $%d = ", yyi + 1);
2891 yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
2892 &(yyvsp[(yyi + 1) - (yynrhs)])
2893 );
2894 fprintf (stderr, "\n");
2895 }
2896}
Anton Korobeynikovb9b977d2007-11-14 09:53:48 +00002897
Chris Lattner38905612008-02-19 04:36:25 +00002898# define YY_REDUCE_PRINT(Rule) \
2899do { \
2900 if (yydebug) \
2901 yy_reduce_print (yyvsp, Rule); \
2902} while (YYID (0))
Anton Korobeynikovb9b977d2007-11-14 09:53:48 +00002903
Chris Lattner38905612008-02-19 04:36:25 +00002904/* Nonzero means print parse trace. It is left uninitialized so that
2905 multiple parsers can coexist. */
2906int yydebug;
2907#else /* !YYDEBUG */
2908# define YYDPRINTF(Args)
2909# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
2910# define YY_STACK_PRINT(Bottom, Top)
2911# define YY_REDUCE_PRINT(Rule)
2912#endif /* !YYDEBUG */
2913
2914
2915/* YYINITDEPTH -- initial size of the parser's stacks. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00002916#ifndef YYINITDEPTH
Chris Lattner38905612008-02-19 04:36:25 +00002917# define YYINITDEPTH 200
Reid Spencer68a24bd2005-08-27 18:50:39 +00002918#endif
2919
Chris Lattner38905612008-02-19 04:36:25 +00002920/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
2921 if the built-in stack extension method is used).
Reid Spencer68a24bd2005-08-27 18:50:39 +00002922
Chris Lattner38905612008-02-19 04:36:25 +00002923 Do not make this value too large; the results are undefined if
2924 YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
2925 evaluated with infinite-precision integer arithmetic. */
David Greene718fda32007-08-01 03:59:32 +00002926
Reid Spencer68a24bd2005-08-27 18:50:39 +00002927#ifndef YYMAXDEPTH
Chris Lattner38905612008-02-19 04:36:25 +00002928# define YYMAXDEPTH 10000
Reid Spencer68a24bd2005-08-27 18:50:39 +00002929#endif
Chris Lattner38905612008-02-19 04:36:25 +00002930
Reid Spencer68a24bd2005-08-27 18:50:39 +00002931
2932
Chris Lattner38905612008-02-19 04:36:25 +00002933#if YYERROR_VERBOSE
Reid Spencer68a24bd2005-08-27 18:50:39 +00002934
Chris Lattner38905612008-02-19 04:36:25 +00002935# ifndef yystrlen
2936# if defined __GLIBC__ && defined _STRING_H
2937# define yystrlen strlen
2938# else
2939/* Return the length of YYSTR. */
2940#if (defined __STDC__ || defined __C99__FUNC__ \
2941 || defined __cplusplus || defined _MSC_VER)
2942static YYSIZE_T
2943yystrlen (const char *yystr)
Scott Michel7f9ba9b2008-01-30 02:55:46 +00002944#else
Chris Lattner38905612008-02-19 04:36:25 +00002945static YYSIZE_T
2946yystrlen (yystr)
2947 const char *yystr;
2948#endif
2949{
2950 YYSIZE_T yylen;
2951 for (yylen = 0; yystr[yylen]; yylen++)
2952 continue;
2953 return yylen;
2954}
2955# endif
2956# endif
2957
2958# ifndef yystpcpy
2959# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
2960# define yystpcpy stpcpy
2961# else
2962/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
2963 YYDEST. */
2964#if (defined __STDC__ || defined __C99__FUNC__ \
2965 || defined __cplusplus || defined _MSC_VER)
2966static char *
2967yystpcpy (char *yydest, const char *yysrc)
2968#else
2969static char *
2970yystpcpy (yydest, yysrc)
2971 char *yydest;
2972 const char *yysrc;
2973#endif
2974{
2975 char *yyd = yydest;
2976 const char *yys = yysrc;
2977
2978 while ((*yyd++ = *yys++) != '\0')
2979 continue;
2980
2981 return yyd - 1;
2982}
2983# endif
2984# endif
2985
2986# ifndef yytnamerr
2987/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
2988 quotes and backslashes, so that it's suitable for yyerror. The
2989 heuristic is that double-quoting is unnecessary unless the string
2990 contains an apostrophe, a comma, or backslash (other than
2991 backslash-backslash). YYSTR is taken from yytname. If YYRES is
2992 null, do not copy; instead, return the length of what the result
2993 would have been. */
2994static YYSIZE_T
2995yytnamerr (char *yyres, const char *yystr)
2996{
2997 if (*yystr == '"')
2998 {
2999 YYSIZE_T yyn = 0;
3000 char const *yyp = yystr;
3001
3002 for (;;)
3003 switch (*++yyp)
3004 {
3005 case '\'':
3006 case ',':
3007 goto do_not_strip_quotes;
3008
3009 case '\\':
3010 if (*++yyp != '\\')
3011 goto do_not_strip_quotes;
3012 /* Fall through. */
3013 default:
3014 if (yyres)
3015 yyres[yyn] = *yyp;
3016 yyn++;
3017 break;
3018
3019 case '"':
3020 if (yyres)
3021 yyres[yyn] = '\0';
3022 return yyn;
3023 }
3024 do_not_strip_quotes: ;
3025 }
3026
3027 if (! yyres)
3028 return yystrlen (yystr);
3029
3030 return yystpcpy (yyres, yystr) - yyres;
3031}
3032# endif
3033
3034/* Copy into YYRESULT an error message about the unexpected token
3035 YYCHAR while in state YYSTATE. Return the number of bytes copied,
3036 including the terminating null byte. If YYRESULT is null, do not
3037 copy anything; just return the number of bytes that would be
3038 copied. As a special case, return 0 if an ordinary "syntax error"
3039 message will do. Return YYSIZE_MAXIMUM if overflow occurs during
3040 size calculation. */
3041static YYSIZE_T
3042yysyntax_error (char *yyresult, int yystate, int yychar)
3043{
3044 int yyn = yypact[yystate];
3045
3046 if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
3047 return 0;
3048 else
3049 {
3050 int yytype = YYTRANSLATE (yychar);
3051 YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
3052 YYSIZE_T yysize = yysize0;
3053 YYSIZE_T yysize1;
3054 int yysize_overflow = 0;
3055 enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
3056 char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
3057 int yyx;
3058
3059# if 0
3060 /* This is so xgettext sees the translatable formats that are
3061 constructed on the fly. */
3062 YY_("syntax error, unexpected %s");
3063 YY_("syntax error, unexpected %s, expecting %s");
3064 YY_("syntax error, unexpected %s, expecting %s or %s");
3065 YY_("syntax error, unexpected %s, expecting %s or %s or %s");
3066 YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
3067# endif
3068 char *yyfmt;
3069 char const *yyf;
3070 static char const yyunexpected[] = "syntax error, unexpected %s";
3071 static char const yyexpecting[] = ", expecting %s";
3072 static char const yyor[] = " or %s";
3073 char yyformat[sizeof yyunexpected
3074 + sizeof yyexpecting - 1
3075 + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
3076 * (sizeof yyor - 1))];
3077 char const *yyprefix = yyexpecting;
3078
3079 /* Start YYX at -YYN if negative to avoid negative indexes in
3080 YYCHECK. */
3081 int yyxbegin = yyn < 0 ? -yyn : 0;
3082
3083 /* Stay within bounds of both yycheck and yytname. */
3084 int yychecklim = YYLAST - yyn + 1;
3085 int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
3086 int yycount = 1;
3087
3088 yyarg[0] = yytname[yytype];
3089 yyfmt = yystpcpy (yyformat, yyunexpected);
3090
3091 for (yyx = yyxbegin; yyx < yyxend; ++yyx)
3092 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
3093 {
3094 if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
3095 {
3096 yycount = 1;
3097 yysize = yysize0;
3098 yyformat[sizeof yyunexpected - 1] = '\0';
3099 break;
3100 }
3101 yyarg[yycount++] = yytname[yyx];
3102 yysize1 = yysize + yytnamerr (0, yytname[yyx]);
3103 yysize_overflow |= (yysize1 < yysize);
3104 yysize = yysize1;
3105 yyfmt = yystpcpy (yyfmt, yyprefix);
3106 yyprefix = yyor;
3107 }
3108
3109 yyf = YY_(yyformat);
3110 yysize1 = yysize + yystrlen (yyf);
3111 yysize_overflow |= (yysize1 < yysize);
3112 yysize = yysize1;
3113
3114 if (yysize_overflow)
3115 return YYSIZE_MAXIMUM;
3116
3117 if (yyresult)
3118 {
3119 /* Avoid sprintf, as that infringes on the user's name space.
3120 Don't have undefined behavior even if the translation
3121 produced a string with the wrong number of "%s"s. */
3122 char *yyp = yyresult;
3123 int yyi = 0;
3124 while ((*yyp = *yyf) != '\0')
3125 {
3126 if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
3127 {
3128 yyp += yytnamerr (yyp, yyarg[yyi++]);
3129 yyf += 2;
3130 }
3131 else
3132 {
3133 yyp++;
3134 yyf++;
3135 }
3136 }
3137 }
3138 return yysize;
3139 }
3140}
3141#endif /* YYERROR_VERBOSE */
3142
3143
3144/*-----------------------------------------------.
3145| Release the memory associated to this symbol. |
3146`-----------------------------------------------*/
3147
3148/*ARGSUSED*/
3149#if (defined __STDC__ || defined __C99__FUNC__ \
3150 || defined __cplusplus || defined _MSC_VER)
3151static void
3152yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
3153#else
3154static void
3155yydestruct (yymsg, yytype, yyvaluep)
3156 const char *yymsg;
3157 int yytype;
3158 YYSTYPE *yyvaluep;
3159#endif
3160{
3161 YYUSE (yyvaluep);
3162
3163 if (!yymsg)
3164 yymsg = "Deleting";
3165 YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
3166
3167 switch (yytype)
3168 {
3169
3170 default:
3171 break;
3172 }
3173}
3174
3175
3176/* Prevent warnings from -Wmissing-prototypes. */
3177
3178#ifdef YYPARSE_PARAM
3179#if defined __STDC__ || defined __cplusplus
3180int yyparse (void *YYPARSE_PARAM);
3181#else
3182int yyparse ();
3183#endif
3184#else /* ! YYPARSE_PARAM */
3185#if defined __STDC__ || defined __cplusplus
David Greene5fd22a82007-09-04 18:46:50 +00003186int yyparse (void);
Scott Michel15dcd8e2008-01-30 03:10:00 +00003187#else
Chris Lattner38905612008-02-19 04:36:25 +00003188int yyparse ();
Christopher Lamba8ed9bf2007-12-11 09:02:08 +00003189#endif
Chris Lattner38905612008-02-19 04:36:25 +00003190#endif /* ! YYPARSE_PARAM */
Anton Korobeynikovb9b977d2007-11-14 09:53:48 +00003191
Scott Michel7f9ba9b2008-01-30 02:55:46 +00003192
Chris Lattner38905612008-02-19 04:36:25 +00003193
3194/* The look-ahead symbol. */
3195int yychar;
3196
3197/* The semantic value of the look-ahead symbol. */
3198YYSTYPE yylval;
3199
3200/* Number of syntax errors so far. */
3201int yynerrs;
3202
3203
3204
3205/*----------.
3206| yyparse. |
3207`----------*/
3208
3209#ifdef YYPARSE_PARAM
3210#if (defined __STDC__ || defined __C99__FUNC__ \
3211 || defined __cplusplus || defined _MSC_VER)
3212int
3213yyparse (void *YYPARSE_PARAM)
3214#else
3215int
3216yyparse (YYPARSE_PARAM)
3217 void *YYPARSE_PARAM;
3218#endif
3219#else /* ! YYPARSE_PARAM */
3220#if (defined __STDC__ || defined __C99__FUNC__ \
3221 || defined __cplusplus || defined _MSC_VER)
3222int
3223yyparse (void)
3224#else
3225int
3226yyparse ()
3227
Scott Michel15dcd8e2008-01-30 03:10:00 +00003228#endif
3229#endif
Chris Lattner38905612008-02-19 04:36:25 +00003230{
3231
3232 int yystate;
3233 int yyn;
3234 int yyresult;
3235 /* Number of tokens to shift before error messages enabled. */
3236 int yyerrstatus;
3237 /* Look-ahead token as an internal (translated) token number. */
3238 int yytoken = 0;
3239#if YYERROR_VERBOSE
3240 /* Buffer for error messages, and its allocated size. */
3241 char yymsgbuf[128];
3242 char *yymsg = yymsgbuf;
3243 YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
Scott Michel15dcd8e2008-01-30 03:10:00 +00003244#endif
Scott Michel7f9ba9b2008-01-30 02:55:46 +00003245
Chris Lattner38905612008-02-19 04:36:25 +00003246 /* Three stacks and their tools:
3247 `yyss': related to states,
3248 `yyvs': related to semantic values,
3249 `yyls': related to locations.
3250
3251 Refer to the stacks thru separate pointers, to allow yyoverflow
3252 to reallocate them elsewhere. */
3253
3254 /* The state stack. */
3255 yytype_int16 yyssa[YYINITDEPTH];
3256 yytype_int16 *yyss = yyssa;
3257 yytype_int16 *yyssp;
3258
3259 /* The semantic value stack. */
3260 YYSTYPE yyvsa[YYINITDEPTH];
3261 YYSTYPE *yyvs = yyvsa;
3262 YYSTYPE *yyvsp;
3263
3264
3265
3266#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N))
3267
3268 YYSIZE_T yystacksize = YYINITDEPTH;
3269
3270 /* The variables used to return semantic value and location from the
3271 action routines. */
3272 YYSTYPE yyval;
3273
3274
3275 /* The number of symbols on the RHS of the reduced rule.
3276 Keep to zero when no symbol should be popped. */
3277 int yylen = 0;
3278
3279 YYDPRINTF ((stderr, "Starting parse\n"));
3280
Reid Spencer68a24bd2005-08-27 18:50:39 +00003281 yystate = 0;
3282 yyerrstatus = 0;
3283 yynerrs = 0;
3284 yychar = YYEMPTY; /* Cause a token to be read. */
3285
3286 /* Initialize stack pointers.
3287 Waste one element of value and location stack
3288 so that they stay on the same level as the state stack.
3289 The wasted elements are never initialized. */
3290
Chris Lattner38905612008-02-19 04:36:25 +00003291 yyssp = yyss;
Reid Spencer68a24bd2005-08-27 18:50:39 +00003292 yyvsp = yyvs;
3293
Chris Lattner38905612008-02-19 04:36:25 +00003294 goto yysetstate;
Jeff Cohen66c5fd62005-10-23 04:37:20 +00003295
Chris Lattner38905612008-02-19 04:36:25 +00003296/*------------------------------------------------------------.
3297| yynewstate -- Push a new state, which is found in yystate. |
3298`------------------------------------------------------------*/
3299 yynewstate:
3300 /* In all cases, when you get here, the value and location stacks
3301 have just been pushed. So pushing a state here evens the stacks. */
3302 yyssp++;
Reid Spencer68a24bd2005-08-27 18:50:39 +00003303
Chris Lattner38905612008-02-19 04:36:25 +00003304 yysetstate:
3305 *yyssp = yystate;
3306
3307 if (yyss + yystacksize - 1 <= yyssp)
Reid Spencer68a24bd2005-08-27 18:50:39 +00003308 {
3309 /* Get the current used size of the three stacks, in elements. */
Chris Lattner38905612008-02-19 04:36:25 +00003310 YYSIZE_T yysize = yyssp - yyss + 1;
Reid Spencer68a24bd2005-08-27 18:50:39 +00003311
3312#ifdef yyoverflow
Chris Lattner38905612008-02-19 04:36:25 +00003313 {
3314 /* Give user a chance to reallocate the stack. Use copies of
3315 these so that the &'s don't force the real ones into
3316 memory. */
3317 YYSTYPE *yyvs1 = yyvs;
3318 yytype_int16 *yyss1 = yyss;
Reid Spencer68a24bd2005-08-27 18:50:39 +00003319
Chris Lattner38905612008-02-19 04:36:25 +00003320
3321 /* Each stack pointer address is followed by the size of the
3322 data in use in that stack, in bytes. This used to be a
3323 conditional around just the two extra args, but that might
3324 be undefined if yyoverflow is a macro. */
3325 yyoverflow (YY_("memory exhausted"),
3326 &yyss1, yysize * sizeof (*yyssp),
3327 &yyvs1, yysize * sizeof (*yyvsp),
3328
3329 &yystacksize);
3330
3331 yyss = yyss1;
3332 yyvs = yyvs1;
3333 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00003334#else /* no yyoverflow */
Chris Lattner38905612008-02-19 04:36:25 +00003335# ifndef YYSTACK_RELOCATE
3336 goto yyexhaustedlab;
3337# else
Reid Spencer68a24bd2005-08-27 18:50:39 +00003338 /* Extend the stack our own way. */
Chris Lattner38905612008-02-19 04:36:25 +00003339 if (YYMAXDEPTH <= yystacksize)
3340 goto yyexhaustedlab;
Reid Spencer68a24bd2005-08-27 18:50:39 +00003341 yystacksize *= 2;
Chris Lattner38905612008-02-19 04:36:25 +00003342 if (YYMAXDEPTH < yystacksize)
Reid Spencer68a24bd2005-08-27 18:50:39 +00003343 yystacksize = YYMAXDEPTH;
Chris Lattner38905612008-02-19 04:36:25 +00003344
3345 {
3346 yytype_int16 *yyss1 = yyss;
3347 union yyalloc *yyptr =
3348 (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
3349 if (! yyptr)
3350 goto yyexhaustedlab;
3351 YYSTACK_RELOCATE (yyss);
3352 YYSTACK_RELOCATE (yyvs);
3353
3354# undef YYSTACK_RELOCATE
3355 if (yyss1 != yyssa)
3356 YYSTACK_FREE (yyss1);
3357 }
3358# endif
Reid Spencer68a24bd2005-08-27 18:50:39 +00003359#endif /* no yyoverflow */
3360
Chris Lattner38905612008-02-19 04:36:25 +00003361 yyssp = yyss + yysize - 1;
3362 yyvsp = yyvs + yysize - 1;
Reid Spencer68a24bd2005-08-27 18:50:39 +00003363
3364
Chris Lattner38905612008-02-19 04:36:25 +00003365 YYDPRINTF ((stderr, "Stack size increased to %lu\n",
3366 (unsigned long int) yystacksize));
3367
3368 if (yyss + yystacksize - 1 <= yyssp)
Reid Spencer68a24bd2005-08-27 18:50:39 +00003369 YYABORT;
3370 }
3371
Chris Lattner38905612008-02-19 04:36:25 +00003372 YYDPRINTF ((stderr, "Entering state %d\n", yystate));
Reid Spencer68a24bd2005-08-27 18:50:39 +00003373
3374 goto yybackup;
Reid Spencer68a24bd2005-08-27 18:50:39 +00003375
Chris Lattner38905612008-02-19 04:36:25 +00003376/*-----------.
3377| yybackup. |
3378`-----------*/
3379yybackup:
Andrew Lenharth6353e052006-12-08 18:07:09 +00003380
Chris Lattner38905612008-02-19 04:36:25 +00003381 /* Do appropriate processing given the current state. Read a
3382 look-ahead token if we need one and don't already have one. */
Reid Spencer7780acb2007-04-16 06:56:07 +00003383
Chris Lattner38905612008-02-19 04:36:25 +00003384 /* First try to decide what to do without reference to look-ahead token. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00003385 yyn = yypact[yystate];
Chris Lattner38905612008-02-19 04:36:25 +00003386 if (yyn == YYPACT_NINF)
Reid Spencer68a24bd2005-08-27 18:50:39 +00003387 goto yydefault;
3388
Chris Lattner38905612008-02-19 04:36:25 +00003389 /* Not known => get a look-ahead token if don't already have one. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00003390
Chris Lattner38905612008-02-19 04:36:25 +00003391 /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00003392 if (yychar == YYEMPTY)
3393 {
Chris Lattner38905612008-02-19 04:36:25 +00003394 YYDPRINTF ((stderr, "Reading a token: "));
Reid Spencer68a24bd2005-08-27 18:50:39 +00003395 yychar = YYLEX;
3396 }
3397
Chris Lattner38905612008-02-19 04:36:25 +00003398 if (yychar <= YYEOF)
Reid Spencer68a24bd2005-08-27 18:50:39 +00003399 {
Chris Lattner38905612008-02-19 04:36:25 +00003400 yychar = yytoken = YYEOF;
3401 YYDPRINTF ((stderr, "Now at end of input.\n"));
Reid Spencer68a24bd2005-08-27 18:50:39 +00003402 }
3403 else
3404 {
Chris Lattner38905612008-02-19 04:36:25 +00003405 yytoken = YYTRANSLATE (yychar);
3406 YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
Reid Spencer68a24bd2005-08-27 18:50:39 +00003407 }
3408
Chris Lattner38905612008-02-19 04:36:25 +00003409 /* If the proper action on seeing token YYTOKEN is to reduce or to
3410 detect an error, take that action. */
3411 yyn += yytoken;
3412 if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
Reid Spencer68a24bd2005-08-27 18:50:39 +00003413 goto yydefault;
3414 yyn = yytable[yyn];
Chris Lattner38905612008-02-19 04:36:25 +00003415 if (yyn <= 0)
Reid Spencer68a24bd2005-08-27 18:50:39 +00003416 {
Chris Lattner38905612008-02-19 04:36:25 +00003417 if (yyn == 0 || yyn == YYTABLE_NINF)
Reid Spencer68a24bd2005-08-27 18:50:39 +00003418 goto yyerrlab;
3419 yyn = -yyn;
3420 goto yyreduce;
3421 }
3422
3423 if (yyn == YYFINAL)
3424 YYACCEPT;
3425
Chris Lattner38905612008-02-19 04:36:25 +00003426 /* Count tokens shifted since error; after three, turn off error
3427 status. */
3428 if (yyerrstatus)
3429 yyerrstatus--;
Dale Johannesencdd509a2007-09-07 21:07:57 +00003430
Chris Lattner38905612008-02-19 04:36:25 +00003431 /* Shift the look-ahead token. */
3432 YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003433
Chris Lattner38905612008-02-19 04:36:25 +00003434 /* Discard the shifted token unless it is eof. */
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003435 if (yychar != YYEOF)
3436 yychar = YYEMPTY;
3437
Scott Michel15dcd8e2008-01-30 03:10:00 +00003438 yystate = yyn;
Chris Lattner38905612008-02-19 04:36:25 +00003439 *++yyvsp = yylval;
3440
Reid Spencer68a24bd2005-08-27 18:50:39 +00003441 goto yynewstate;
3442
Scott Michel15dcd8e2008-01-30 03:10:00 +00003443
Chris Lattner38905612008-02-19 04:36:25 +00003444/*-----------------------------------------------------------.
3445| yydefault -- do the default action for the current state. |
3446`-----------------------------------------------------------*/
3447yydefault:
Reid Spencer68a24bd2005-08-27 18:50:39 +00003448 yyn = yydefact[yystate];
3449 if (yyn == 0)
3450 goto yyerrlab;
Chris Lattner38905612008-02-19 04:36:25 +00003451 goto yyreduce;
Reid Spencer68a24bd2005-08-27 18:50:39 +00003452
Chris Lattner38905612008-02-19 04:36:25 +00003453
3454/*-----------------------------.
3455| yyreduce -- Do a reduction. |
3456`-----------------------------*/
Reid Spencer68a24bd2005-08-27 18:50:39 +00003457yyreduce:
Chris Lattner38905612008-02-19 04:36:25 +00003458 /* yyn is the number of a rule to reduce with. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00003459 yylen = yyr2[yyn];
3460
Chris Lattner38905612008-02-19 04:36:25 +00003461 /* If YYLEN is nonzero, implement the default value of the action:
3462 `$$ = $1'.
3463
3464 Otherwise, the following line sets YYVAL to garbage.
3465 This behavior is undocumented and Bison
3466 users should not rely upon it. Assigning to YYVAL
3467 unconditionally makes the parser a bit smaller, and it avoids a
3468 GCC warning that YYVAL may be used uninitialized. */
3469 yyval = yyvsp[1-yylen];
3470
3471
3472 YY_REDUCE_PRINT (yyn);
3473 switch (yyn)
Reid Spencer68a24bd2005-08-27 18:50:39 +00003474 {
Chris Lattner38905612008-02-19 04:36:25 +00003475 case 29:
Devang Patelbd41a062008-02-22 19:31:30 +00003476#line 1120 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003477 { (yyval.IPredicate) = ICmpInst::ICMP_EQ; ;}
3478 break;
Reid Spencer41dff5e2007-01-26 08:05:27 +00003479
Chris Lattner38905612008-02-19 04:36:25 +00003480 case 30:
Devang Patelbd41a062008-02-22 19:31:30 +00003481#line 1120 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003482 { (yyval.IPredicate) = ICmpInst::ICMP_NE; ;}
3483 break;
Reid Spencerb0fcf8f2007-01-17 02:48:45 +00003484
Chris Lattner38905612008-02-19 04:36:25 +00003485 case 31:
Devang Patelbd41a062008-02-22 19:31:30 +00003486#line 1121 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003487 { (yyval.IPredicate) = ICmpInst::ICMP_SLT; ;}
3488 break;
Reid Spencerb0fcf8f2007-01-17 02:48:45 +00003489
Chris Lattner38905612008-02-19 04:36:25 +00003490 case 32:
Devang Patelbd41a062008-02-22 19:31:30 +00003491#line 1121 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003492 { (yyval.IPredicate) = ICmpInst::ICMP_SGT; ;}
3493 break;
Reid Spencerb0fcf8f2007-01-17 02:48:45 +00003494
Chris Lattner38905612008-02-19 04:36:25 +00003495 case 33:
Devang Patelbd41a062008-02-22 19:31:30 +00003496#line 1122 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003497 { (yyval.IPredicate) = ICmpInst::ICMP_SLE; ;}
3498 break;
Reid Spencerb0fcf8f2007-01-17 02:48:45 +00003499
Chris Lattner38905612008-02-19 04:36:25 +00003500 case 34:
Devang Patelbd41a062008-02-22 19:31:30 +00003501#line 1122 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003502 { (yyval.IPredicate) = ICmpInst::ICMP_SGE; ;}
3503 break;
3504
3505 case 35:
Devang Patelbd41a062008-02-22 19:31:30 +00003506#line 1123 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003507 { (yyval.IPredicate) = ICmpInst::ICMP_ULT; ;}
3508 break;
3509
3510 case 36:
Devang Patelbd41a062008-02-22 19:31:30 +00003511#line 1123 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003512 { (yyval.IPredicate) = ICmpInst::ICMP_UGT; ;}
3513 break;
3514
3515 case 37:
Devang Patelbd41a062008-02-22 19:31:30 +00003516#line 1124 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003517 { (yyval.IPredicate) = ICmpInst::ICMP_ULE; ;}
3518 break;
3519
3520 case 38:
Devang Patelbd41a062008-02-22 19:31:30 +00003521#line 1124 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003522 { (yyval.IPredicate) = ICmpInst::ICMP_UGE; ;}
3523 break;
3524
3525 case 39:
Devang Patelbd41a062008-02-22 19:31:30 +00003526#line 1128 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003527 { (yyval.FPredicate) = FCmpInst::FCMP_OEQ; ;}
3528 break;
3529
3530 case 40:
Devang Patelbd41a062008-02-22 19:31:30 +00003531#line 1128 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003532 { (yyval.FPredicate) = FCmpInst::FCMP_ONE; ;}
3533 break;
3534
3535 case 41:
Devang Patelbd41a062008-02-22 19:31:30 +00003536#line 1129 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003537 { (yyval.FPredicate) = FCmpInst::FCMP_OLT; ;}
3538 break;
3539
3540 case 42:
Devang Patelbd41a062008-02-22 19:31:30 +00003541#line 1129 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003542 { (yyval.FPredicate) = FCmpInst::FCMP_OGT; ;}
3543 break;
3544
3545 case 43:
Devang Patelbd41a062008-02-22 19:31:30 +00003546#line 1130 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003547 { (yyval.FPredicate) = FCmpInst::FCMP_OLE; ;}
3548 break;
3549
3550 case 44:
Devang Patelbd41a062008-02-22 19:31:30 +00003551#line 1130 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003552 { (yyval.FPredicate) = FCmpInst::FCMP_OGE; ;}
3553 break;
3554
3555 case 45:
Devang Patelbd41a062008-02-22 19:31:30 +00003556#line 1131 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003557 { (yyval.FPredicate) = FCmpInst::FCMP_ORD; ;}
3558 break;
3559
3560 case 46:
Devang Patelbd41a062008-02-22 19:31:30 +00003561#line 1131 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003562 { (yyval.FPredicate) = FCmpInst::FCMP_UNO; ;}
3563 break;
3564
3565 case 47:
Devang Patelbd41a062008-02-22 19:31:30 +00003566#line 1132 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003567 { (yyval.FPredicate) = FCmpInst::FCMP_UEQ; ;}
3568 break;
3569
3570 case 48:
Devang Patelbd41a062008-02-22 19:31:30 +00003571#line 1132 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003572 { (yyval.FPredicate) = FCmpInst::FCMP_UNE; ;}
3573 break;
3574
3575 case 49:
Devang Patelbd41a062008-02-22 19:31:30 +00003576#line 1133 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003577 { (yyval.FPredicate) = FCmpInst::FCMP_ULT; ;}
3578 break;
3579
3580 case 50:
Devang Patelbd41a062008-02-22 19:31:30 +00003581#line 1133 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003582 { (yyval.FPredicate) = FCmpInst::FCMP_UGT; ;}
3583 break;
3584
3585 case 51:
Devang Patelbd41a062008-02-22 19:31:30 +00003586#line 1134 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003587 { (yyval.FPredicate) = FCmpInst::FCMP_ULE; ;}
3588 break;
3589
3590 case 52:
Devang Patelbd41a062008-02-22 19:31:30 +00003591#line 1134 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003592 { (yyval.FPredicate) = FCmpInst::FCMP_UGE; ;}
3593 break;
3594
3595 case 53:
Devang Patelbd41a062008-02-22 19:31:30 +00003596#line 1135 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003597 { (yyval.FPredicate) = FCmpInst::FCMP_TRUE; ;}
3598 break;
3599
3600 case 54:
Devang Patelbd41a062008-02-22 19:31:30 +00003601#line 1136 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003602 { (yyval.FPredicate) = FCmpInst::FCMP_FALSE; ;}
3603 break;
3604
3605 case 65:
Devang Patelbd41a062008-02-22 19:31:30 +00003606#line 1145 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003607 { (yyval.StrVal) = 0; ;}
3608 break;
3609
3610 case 66:
Devang Patelbd41a062008-02-22 19:31:30 +00003611#line 1147 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003612 { (yyval.UIntVal)=(yyvsp[(3) - (4)].UInt64Val); ;}
3613 break;
3614
3615 case 67:
Devang Patelbd41a062008-02-22 19:31:30 +00003616#line 1148 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003617 { (yyval.UIntVal)=0; ;}
3618 break;
3619
3620 case 68:
Devang Patelbd41a062008-02-22 19:31:30 +00003621#line 1152 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003622 {
3623 (yyval.StrVal) = (yyvsp[(1) - (2)].StrVal);
Reid Spencer41dff5e2007-01-26 08:05:27 +00003624 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00003625 ;}
3626 break;
3627
3628 case 69:
Devang Patelbd41a062008-02-22 19:31:30 +00003629#line 1156 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003630 {
3631 (yyval.StrVal) = 0;
Christopher Lambbf3348d2007-12-12 08:45:45 +00003632 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00003633 ;}
3634 break;
3635
3636 case 73:
Devang Patelbd41a062008-02-22 19:31:30 +00003637#line 1164 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003638 {
3639 (yyval.StrVal) = 0;
Christopher Lambbf3348d2007-12-12 08:45:45 +00003640 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00003641 ;}
3642 break;
3643
3644 case 74:
Devang Patelbd41a062008-02-22 19:31:30 +00003645#line 1169 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003646 {
3647 (yyval.StrVal) = (yyvsp[(1) - (2)].StrVal);
Christopher Lambbf3348d2007-12-12 08:45:45 +00003648 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00003649 ;}
3650 break;
3651
3652 case 75:
Devang Patelbd41a062008-02-22 19:31:30 +00003653#line 1175 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003654 { (yyval.Linkage) = GlobalValue::InternalLinkage; ;}
3655 break;
3656
3657 case 76:
Devang Patelbd41a062008-02-22 19:31:30 +00003658#line 1176 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003659 { (yyval.Linkage) = GlobalValue::WeakLinkage; ;}
3660 break;
3661
3662 case 77:
Devang Patelbd41a062008-02-22 19:31:30 +00003663#line 1177 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003664 { (yyval.Linkage) = GlobalValue::LinkOnceLinkage; ;}
3665 break;
3666
3667 case 78:
Devang Patelbd41a062008-02-22 19:31:30 +00003668#line 1178 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003669 { (yyval.Linkage) = GlobalValue::AppendingLinkage; ;}
3670 break;
3671
3672 case 79:
Devang Patelbd41a062008-02-22 19:31:30 +00003673#line 1179 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003674 { (yyval.Linkage) = GlobalValue::DLLExportLinkage; ;}
3675 break;
3676
3677 case 80:
Devang Patelbd41a062008-02-22 19:31:30 +00003678#line 1183 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003679 { (yyval.Linkage) = GlobalValue::DLLImportLinkage; ;}
3680 break;
3681
3682 case 81:
Devang Patelbd41a062008-02-22 19:31:30 +00003683#line 1184 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003684 { (yyval.Linkage) = GlobalValue::ExternalWeakLinkage; ;}
3685 break;
3686
3687 case 82:
Devang Patelbd41a062008-02-22 19:31:30 +00003688#line 1185 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003689 { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;}
3690 break;
3691
3692 case 83:
Devang Patelbd41a062008-02-22 19:31:30 +00003693#line 1189 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003694 { (yyval.Visibility) = GlobalValue::DefaultVisibility; ;}
3695 break;
3696
3697 case 84:
Devang Patelbd41a062008-02-22 19:31:30 +00003698#line 1190 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003699 { (yyval.Visibility) = GlobalValue::DefaultVisibility; ;}
3700 break;
3701
3702 case 85:
Devang Patelbd41a062008-02-22 19:31:30 +00003703#line 1191 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003704 { (yyval.Visibility) = GlobalValue::HiddenVisibility; ;}
3705 break;
3706
3707 case 86:
Devang Patelbd41a062008-02-22 19:31:30 +00003708#line 1192 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003709 { (yyval.Visibility) = GlobalValue::ProtectedVisibility; ;}
3710 break;
3711
3712 case 87:
Devang Patelbd41a062008-02-22 19:31:30 +00003713#line 1196 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003714 { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;}
3715 break;
3716
3717 case 88:
Devang Patelbd41a062008-02-22 19:31:30 +00003718#line 1197 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003719 { (yyval.Linkage) = GlobalValue::DLLImportLinkage; ;}
3720 break;
3721
3722 case 89:
Devang Patelbd41a062008-02-22 19:31:30 +00003723#line 1198 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003724 { (yyval.Linkage) = GlobalValue::ExternalWeakLinkage; ;}
3725 break;
3726
3727 case 90:
Devang Patelbd41a062008-02-22 19:31:30 +00003728#line 1202 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003729 { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;}
3730 break;
3731
3732 case 91:
Devang Patelbd41a062008-02-22 19:31:30 +00003733#line 1203 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003734 { (yyval.Linkage) = GlobalValue::InternalLinkage; ;}
3735 break;
3736
3737 case 92:
Devang Patelbd41a062008-02-22 19:31:30 +00003738#line 1204 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003739 { (yyval.Linkage) = GlobalValue::LinkOnceLinkage; ;}
3740 break;
3741
3742 case 93:
Devang Patelbd41a062008-02-22 19:31:30 +00003743#line 1205 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003744 { (yyval.Linkage) = GlobalValue::WeakLinkage; ;}
3745 break;
3746
3747 case 94:
Devang Patelbd41a062008-02-22 19:31:30 +00003748#line 1206 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003749 { (yyval.Linkage) = GlobalValue::DLLExportLinkage; ;}
3750 break;
3751
3752 case 95:
Devang Patelbd41a062008-02-22 19:31:30 +00003753#line 1210 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003754 { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;}
3755 break;
3756
3757 case 96:
Devang Patelbd41a062008-02-22 19:31:30 +00003758#line 1211 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003759 { (yyval.Linkage) = GlobalValue::WeakLinkage; ;}
3760 break;
3761
3762 case 97:
Devang Patelbd41a062008-02-22 19:31:30 +00003763#line 1212 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003764 { (yyval.Linkage) = GlobalValue::InternalLinkage; ;}
3765 break;
3766
3767 case 98:
Devang Patelbd41a062008-02-22 19:31:30 +00003768#line 1215 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003769 { (yyval.UIntVal) = CallingConv::C; ;}
3770 break;
3771
3772 case 99:
Devang Patelbd41a062008-02-22 19:31:30 +00003773#line 1216 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003774 { (yyval.UIntVal) = CallingConv::C; ;}
3775 break;
3776
3777 case 100:
Devang Patelbd41a062008-02-22 19:31:30 +00003778#line 1217 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003779 { (yyval.UIntVal) = CallingConv::Fast; ;}
3780 break;
3781
3782 case 101:
Devang Patelbd41a062008-02-22 19:31:30 +00003783#line 1218 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003784 { (yyval.UIntVal) = CallingConv::Cold; ;}
3785 break;
3786
3787 case 102:
Devang Patelbd41a062008-02-22 19:31:30 +00003788#line 1219 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003789 { (yyval.UIntVal) = CallingConv::X86_StdCall; ;}
3790 break;
3791
3792 case 103:
Devang Patelbd41a062008-02-22 19:31:30 +00003793#line 1220 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003794 { (yyval.UIntVal) = CallingConv::X86_FastCall; ;}
3795 break;
3796
3797 case 104:
Devang Patelbd41a062008-02-22 19:31:30 +00003798#line 1221 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003799 {
3800 if ((unsigned)(yyvsp[(2) - (2)].UInt64Val) != (yyvsp[(2) - (2)].UInt64Val))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003801 GEN_ERROR("Calling conv too large");
Chris Lattner38905612008-02-19 04:36:25 +00003802 (yyval.UIntVal) = (yyvsp[(2) - (2)].UInt64Val);
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003803 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00003804 ;}
3805 break;
3806
3807 case 105:
Devang Patelbd41a062008-02-22 19:31:30 +00003808#line 1228 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003809 { (yyval.ParamAttrs) = ParamAttr::ZExt; ;}
3810 break;
3811
3812 case 106:
Devang Patelbd41a062008-02-22 19:31:30 +00003813#line 1229 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003814 { (yyval.ParamAttrs) = ParamAttr::ZExt; ;}
3815 break;
3816
3817 case 107:
Devang Patelbd41a062008-02-22 19:31:30 +00003818#line 1230 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003819 { (yyval.ParamAttrs) = ParamAttr::SExt; ;}
3820 break;
3821
3822 case 108:
Devang Patelbd41a062008-02-22 19:31:30 +00003823#line 1231 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003824 { (yyval.ParamAttrs) = ParamAttr::SExt; ;}
3825 break;
3826
3827 case 109:
Devang Patelbd41a062008-02-22 19:31:30 +00003828#line 1232 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003829 { (yyval.ParamAttrs) = ParamAttr::InReg; ;}
3830 break;
3831
3832 case 110:
Devang Patelbd41a062008-02-22 19:31:30 +00003833#line 1233 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003834 { (yyval.ParamAttrs) = ParamAttr::StructRet; ;}
3835 break;
3836
3837 case 111:
Devang Patelbd41a062008-02-22 19:31:30 +00003838#line 1234 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003839 { (yyval.ParamAttrs) = ParamAttr::NoAlias; ;}
3840 break;
3841
3842 case 112:
Devang Patelbd41a062008-02-22 19:31:30 +00003843#line 1235 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003844 { (yyval.ParamAttrs) = ParamAttr::ByVal; ;}
3845 break;
3846
3847 case 113:
Devang Patelbd41a062008-02-22 19:31:30 +00003848#line 1236 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003849 { (yyval.ParamAttrs) = ParamAttr::Nest; ;}
3850 break;
3851
3852 case 114:
Devang Patelbd41a062008-02-22 19:31:30 +00003853#line 1237 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Dale Johannesendc6c0f12008-02-22 17:50:51 +00003854 { (yyval.ParamAttrs) =
3855 ParamAttr::constructAlignmentFromInt((yyvsp[(2) - (2)].UInt64Val)); ;}
Chris Lattner38905612008-02-19 04:36:25 +00003856 break;
3857
3858 case 115:
Devang Patelbd41a062008-02-22 19:31:30 +00003859#line 1241 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003860 { (yyval.ParamAttrs) = ParamAttr::None; ;}
3861 break;
3862
Dale Johannesen172f3112008-02-20 21:15:43 +00003863 case 116:
Devang Patelbd41a062008-02-22 19:31:30 +00003864#line 1242 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003865 {
3866 (yyval.ParamAttrs) = (yyvsp[(1) - (2)].ParamAttrs) | (yyvsp[(2) - (2)].ParamAttrs);
3867 ;}
3868 break;
3869
Dale Johannesen172f3112008-02-20 21:15:43 +00003870 case 117:
Devang Patelbd41a062008-02-22 19:31:30 +00003871#line 1247 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Dale Johannesen172f3112008-02-20 21:15:43 +00003872 { (yyval.ParamAttrs) = ParamAttr::NoReturn; ;}
3873 break;
3874
3875 case 118:
Devang Patelbd41a062008-02-22 19:31:30 +00003876#line 1248 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Dale Johannesen172f3112008-02-20 21:15:43 +00003877 { (yyval.ParamAttrs) = ParamAttr::NoUnwind; ;}
3878 break;
3879
3880 case 119:
Devang Patelbd41a062008-02-22 19:31:30 +00003881#line 1249 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Dale Johannesen172f3112008-02-20 21:15:43 +00003882 { (yyval.ParamAttrs) = ParamAttr::ZExt; ;}
3883 break;
3884
3885 case 120:
Devang Patelbd41a062008-02-22 19:31:30 +00003886#line 1250 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Dale Johannesen172f3112008-02-20 21:15:43 +00003887 { (yyval.ParamAttrs) = ParamAttr::SExt; ;}
3888 break;
3889
3890 case 121:
Devang Patelbd41a062008-02-22 19:31:30 +00003891#line 1251 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Dale Johannesen172f3112008-02-20 21:15:43 +00003892 { (yyval.ParamAttrs) = ParamAttr::ReadNone; ;}
3893 break;
3894
3895 case 122:
Devang Patelbd41a062008-02-22 19:31:30 +00003896#line 1252 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Dale Johannesen172f3112008-02-20 21:15:43 +00003897 { (yyval.ParamAttrs) = ParamAttr::ReadOnly; ;}
3898 break;
3899
3900 case 123:
Devang Patelbd41a062008-02-22 19:31:30 +00003901#line 1255 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Dale Johannesen172f3112008-02-20 21:15:43 +00003902 { (yyval.ParamAttrs) = ParamAttr::None; ;}
3903 break;
3904
Chris Lattner38905612008-02-19 04:36:25 +00003905 case 124:
Devang Patelbd41a062008-02-22 19:31:30 +00003906#line 1256 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Dale Johannesen172f3112008-02-20 21:15:43 +00003907 {
3908 (yyval.ParamAttrs) = (yyvsp[(1) - (2)].ParamAttrs) | (yyvsp[(2) - (2)].ParamAttrs);
3909 ;}
Chris Lattner38905612008-02-19 04:36:25 +00003910 break;
3911
3912 case 125:
Devang Patelbd41a062008-02-22 19:31:30 +00003913#line 1261 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Dale Johannesen172f3112008-02-20 21:15:43 +00003914 { (yyval.StrVal) = 0; ;}
3915 break;
3916
3917 case 126:
Devang Patelbd41a062008-02-22 19:31:30 +00003918#line 1262 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003919 {
3920 (yyval.StrVal) = (yyvsp[(2) - (2)].StrVal);
3921 ;}
3922 break;
3923
Dale Johannesen172f3112008-02-20 21:15:43 +00003924 case 127:
Devang Patelbd41a062008-02-22 19:31:30 +00003925#line 1269 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003926 { (yyval.UIntVal) = 0; ;}
3927 break;
3928
Dale Johannesen172f3112008-02-20 21:15:43 +00003929 case 128:
Devang Patelbd41a062008-02-22 19:31:30 +00003930#line 1270 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003931 {
3932 (yyval.UIntVal) = (yyvsp[(2) - (2)].UInt64Val);
3933 if ((yyval.UIntVal) != 0 && !isPowerOf2_32((yyval.UIntVal)))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003934 GEN_ERROR("Alignment must be a power of two");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003935 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00003936;}
3937 break;
3938
Dale Johannesen172f3112008-02-20 21:15:43 +00003939 case 129:
Devang Patelbd41a062008-02-22 19:31:30 +00003940#line 1276 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003941 { (yyval.UIntVal) = 0; ;}
3942 break;
3943
Dale Johannesen172f3112008-02-20 21:15:43 +00003944 case 130:
Devang Patelbd41a062008-02-22 19:31:30 +00003945#line 1277 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003946 {
3947 (yyval.UIntVal) = (yyvsp[(3) - (3)].UInt64Val);
3948 if ((yyval.UIntVal) != 0 && !isPowerOf2_32((yyval.UIntVal)))
Christopher Lambbf3348d2007-12-12 08:45:45 +00003949 GEN_ERROR("Alignment must be a power of two");
3950 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00003951;}
3952 break;
3953
Dale Johannesen172f3112008-02-20 21:15:43 +00003954 case 131:
Devang Patelbd41a062008-02-22 19:31:30 +00003955#line 1286 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003956 {
3957 for (unsigned i = 0, e = (yyvsp[(2) - (2)].StrVal)->length(); i != e; ++i)
3958 if ((*(yyvsp[(2) - (2)].StrVal))[i] == '"' || (*(yyvsp[(2) - (2)].StrVal))[i] == '\\')
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003959 GEN_ERROR("Invalid character in section name");
Chris Lattner38905612008-02-19 04:36:25 +00003960 (yyval.StrVal) = (yyvsp[(2) - (2)].StrVal);
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003961 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00003962;}
3963 break;
3964
Dale Johannesen172f3112008-02-20 21:15:43 +00003965 case 132:
Devang Patelbd41a062008-02-22 19:31:30 +00003966#line 1294 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003967 { (yyval.StrVal) = 0; ;}
3968 break;
3969
Dale Johannesen172f3112008-02-20 21:15:43 +00003970 case 133:
Devang Patelbd41a062008-02-22 19:31:30 +00003971#line 1295 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003972 { (yyval.StrVal) = (yyvsp[(1) - (1)].StrVal); ;}
3973 break;
3974
Chris Lattner38905612008-02-19 04:36:25 +00003975 case 134:
Devang Patelbd41a062008-02-22 19:31:30 +00003976#line 1300 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003977 {;}
3978 break;
3979
3980 case 135:
Devang Patelbd41a062008-02-22 19:31:30 +00003981#line 1301 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Dale Johannesen172f3112008-02-20 21:15:43 +00003982 {;}
3983 break;
3984
3985 case 136:
Devang Patelbd41a062008-02-22 19:31:30 +00003986#line 1302 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003987 {
3988 CurGV->setSection(*(yyvsp[(1) - (1)].StrVal));
3989 delete (yyvsp[(1) - (1)].StrVal);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003990 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00003991 ;}
3992 break;
3993
Dale Johannesen172f3112008-02-20 21:15:43 +00003994 case 137:
Devang Patelbd41a062008-02-22 19:31:30 +00003995#line 1307 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00003996 {
3997 if ((yyvsp[(2) - (2)].UInt64Val) != 0 && !isPowerOf2_32((yyvsp[(2) - (2)].UInt64Val)))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003998 GEN_ERROR("Alignment must be a power of two");
Chris Lattner38905612008-02-19 04:36:25 +00003999 CurGV->setAlignment((yyvsp[(2) - (2)].UInt64Val));
Reid Spencer41dff5e2007-01-26 08:05:27 +00004000 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004001 ;}
4002 break;
4003
Dale Johannesen172f3112008-02-20 21:15:43 +00004004 case 145:
Devang Patelbd41a062008-02-22 19:31:30 +00004005#line 1323 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004006 {
4007 (yyval.TypeVal) = new PATypeHolder(OpaqueType::get());
Reid Spencer41dff5e2007-01-26 08:05:27 +00004008 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004009 ;}
4010 break;
4011
Dale Johannesen172f3112008-02-20 21:15:43 +00004012 case 146:
Devang Patelbd41a062008-02-22 19:31:30 +00004013#line 1327 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004014 {
4015 (yyval.TypeVal) = new PATypeHolder((yyvsp[(1) - (1)].PrimType));
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004016 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004017 ;}
4018 break;
4019
Dale Johannesen172f3112008-02-20 21:15:43 +00004020 case 147:
Devang Patelbd41a062008-02-22 19:31:30 +00004021#line 1331 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004022 { // Pointer type?
4023 if (*(yyvsp[(1) - (3)].TypeVal) == Type::LabelTy)
Christopher Lambbf3348d2007-12-12 08:45:45 +00004024 GEN_ERROR("Cannot form a pointer to a basic block");
Chris Lattner38905612008-02-19 04:36:25 +00004025 (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(PointerType::get(*(yyvsp[(1) - (3)].TypeVal), (yyvsp[(2) - (3)].UIntVal))));
4026 delete (yyvsp[(1) - (3)].TypeVal);
Christopher Lambbf3348d2007-12-12 08:45:45 +00004027 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004028 ;}
4029 break;
4030
Dale Johannesen172f3112008-02-20 21:15:43 +00004031 case 148:
Devang Patelbd41a062008-02-22 19:31:30 +00004032#line 1338 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004033 { // Named types are also simple types...
4034 const Type* tmp = getTypeVal((yyvsp[(1) - (1)].ValIDVal));
Christopher Lamba8ed9bf2007-12-11 09:02:08 +00004035 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004036 (yyval.TypeVal) = new PATypeHolder(tmp);
4037 ;}
4038 break;
4039
Dale Johannesen172f3112008-02-20 21:15:43 +00004040 case 149:
Devang Patelbd41a062008-02-22 19:31:30 +00004041#line 1343 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004042 { // Type UpReference
4043 if ((yyvsp[(2) - (2)].UInt64Val) > (uint64_t)~0U) GEN_ERROR("Value out of range");
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004044 OpaqueType *OT = OpaqueType::get(); // Use temporary placeholder
Chris Lattner38905612008-02-19 04:36:25 +00004045 UpRefs.push_back(UpRefRecord((unsigned)(yyvsp[(2) - (2)].UInt64Val), OT)); // Add to vector...
4046 (yyval.TypeVal) = new PATypeHolder(OT);
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004047 UR_OUT("New Upreference!\n");
4048 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004049 ;}
4050 break;
4051
Dale Johannesen172f3112008-02-20 21:15:43 +00004052 case 150:
Devang Patelbd41a062008-02-22 19:31:30 +00004053#line 1351 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004054 {
Duncan Sandsdc024672007-11-27 13:23:08 +00004055 // Allow but ignore attributes on function types; this permits auto-upgrade.
4056 // FIXME: remove in LLVM 3.0.
Chris Lattner38905612008-02-19 04:36:25 +00004057 const Type* RetTy = *(yyvsp[(1) - (5)].TypeVal);
Anton Korobeynikov05e5a742007-12-03 21:01:29 +00004058 if (!(RetTy->isFirstClassType() || RetTy == Type::VoidTy ||
4059 isa<OpaqueType>(RetTy)))
Anton Korobeynikovc36284e2007-12-03 19:17:47 +00004060 GEN_ERROR("LLVM Functions cannot return aggregates");
Anton Korobeynikov05e5a742007-12-03 21:01:29 +00004061
Reid Spencer41dff5e2007-01-26 08:05:27 +00004062 std::vector<const Type*> Params;
Chris Lattner38905612008-02-19 04:36:25 +00004063 TypeWithAttrsList::iterator I = (yyvsp[(3) - (5)].TypeWithAttrsList)->begin(), E = (yyvsp[(3) - (5)].TypeWithAttrsList)->end();
Duncan Sandsdc024672007-11-27 13:23:08 +00004064 for (; I != E; ++I ) {
Reid Spencer66728ef2007-03-20 01:13:36 +00004065 const Type *Ty = I->Ty->get();
Reid Spencer66728ef2007-03-20 01:13:36 +00004066 Params.push_back(Ty);
Reid Spencer41dff5e2007-01-26 08:05:27 +00004067 }
Anton Korobeynikov05e5a742007-12-03 21:01:29 +00004068
Reid Spencer41dff5e2007-01-26 08:05:27 +00004069 bool isVarArg = Params.size() && Params.back() == Type::VoidTy;
4070 if (isVarArg) Params.pop_back();
4071
Anton Korobeynikov05e5a742007-12-03 21:01:29 +00004072 for (unsigned i = 0; i != Params.size(); ++i)
4073 if (!(Params[i]->isFirstClassType() || isa<OpaqueType>(Params[i])))
4074 GEN_ERROR("Function arguments must be value types!");
4075
4076 CHECK_FOR_ERROR
4077
Anton Korobeynikovc36284e2007-12-03 19:17:47 +00004078 FunctionType *FT = FunctionType::get(RetTy, Params, isVarArg);
Chris Lattner38905612008-02-19 04:36:25 +00004079 delete (yyvsp[(3) - (5)].TypeWithAttrsList); // Delete the argument list
4080 delete (yyvsp[(1) - (5)].TypeVal); // Delete the return type handle
4081 (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(FT));
Reid Spencere4d87aa2006-12-23 06:05:41 +00004082 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004083 ;}
4084 break;
4085
Dale Johannesen172f3112008-02-20 21:15:43 +00004086 case 151:
Devang Patelbd41a062008-02-22 19:31:30 +00004087#line 1381 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004088 {
Duncan Sandsdc024672007-11-27 13:23:08 +00004089 // Allow but ignore attributes on function types; this permits auto-upgrade.
4090 // FIXME: remove in LLVM 3.0.
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004091 std::vector<const Type*> Params;
Chris Lattner38905612008-02-19 04:36:25 +00004092 TypeWithAttrsList::iterator I = (yyvsp[(3) - (5)].TypeWithAttrsList)->begin(), E = (yyvsp[(3) - (5)].TypeWithAttrsList)->end();
Duncan Sandsdc024672007-11-27 13:23:08 +00004093 for ( ; I != E; ++I ) {
Reid Spencer66728ef2007-03-20 01:13:36 +00004094 const Type* Ty = I->Ty->get();
Reid Spencer66728ef2007-03-20 01:13:36 +00004095 Params.push_back(Ty);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004096 }
Anton Korobeynikov05e5a742007-12-03 21:01:29 +00004097
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004098 bool isVarArg = Params.size() && Params.back() == Type::VoidTy;
4099 if (isVarArg) Params.pop_back();
4100
Anton Korobeynikov05e5a742007-12-03 21:01:29 +00004101 for (unsigned i = 0; i != Params.size(); ++i)
4102 if (!(Params[i]->isFirstClassType() || isa<OpaqueType>(Params[i])))
4103 GEN_ERROR("Function arguments must be value types!");
4104
4105 CHECK_FOR_ERROR
4106
Chris Lattner38905612008-02-19 04:36:25 +00004107 FunctionType *FT = FunctionType::get((yyvsp[(1) - (5)].PrimType), Params, isVarArg);
4108 delete (yyvsp[(3) - (5)].TypeWithAttrsList); // Delete the argument list
4109 (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(FT));
Reid Spencer41dff5e2007-01-26 08:05:27 +00004110 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004111 ;}
4112 break;
4113
Dale Johannesen172f3112008-02-20 21:15:43 +00004114 case 152:
Devang Patelbd41a062008-02-22 19:31:30 +00004115#line 1406 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004116 { // Sized array type?
4117 (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(ArrayType::get(*(yyvsp[(4) - (5)].TypeVal), (unsigned)(yyvsp[(2) - (5)].UInt64Val))));
4118 delete (yyvsp[(4) - (5)].TypeVal);
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004119 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004120 ;}
4121 break;
4122
Dale Johannesen172f3112008-02-20 21:15:43 +00004123 case 153:
Devang Patelbd41a062008-02-22 19:31:30 +00004124#line 1411 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004125 { // Vector type?
4126 const llvm::Type* ElemTy = (yyvsp[(4) - (5)].TypeVal)->get();
4127 if ((unsigned)(yyvsp[(2) - (5)].UInt64Val) != (yyvsp[(2) - (5)].UInt64Val))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004128 GEN_ERROR("Unsigned result not equal to signed result");
4129 if (!ElemTy->isFloatingPoint() && !ElemTy->isInteger())
4130 GEN_ERROR("Element type of a VectorType must be primitive");
Chris Lattner38905612008-02-19 04:36:25 +00004131 (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(VectorType::get(*(yyvsp[(4) - (5)].TypeVal), (unsigned)(yyvsp[(2) - (5)].UInt64Val))));
4132 delete (yyvsp[(4) - (5)].TypeVal);
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004133 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004134 ;}
4135 break;
4136
Dale Johannesen172f3112008-02-20 21:15:43 +00004137 case 154:
Devang Patelbd41a062008-02-22 19:31:30 +00004138#line 1421 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004139 { // Structure type?
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004140 std::vector<const Type*> Elements;
Chris Lattner38905612008-02-19 04:36:25 +00004141 for (std::list<llvm::PATypeHolder>::iterator I = (yyvsp[(2) - (3)].TypeList)->begin(),
4142 E = (yyvsp[(2) - (3)].TypeList)->end(); I != E; ++I)
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004143 Elements.push_back(*I);
4144
Chris Lattner38905612008-02-19 04:36:25 +00004145 (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(StructType::get(Elements)));
4146 delete (yyvsp[(2) - (3)].TypeList);
Reid Spencer14310612006-12-31 05:40:51 +00004147 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004148 ;}
4149 break;
4150
Dale Johannesen172f3112008-02-20 21:15:43 +00004151 case 155:
Devang Patelbd41a062008-02-22 19:31:30 +00004152#line 1431 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004153 { // Empty structure type?
4154 (yyval.TypeVal) = new PATypeHolder(StructType::get(std::vector<const Type*>()));
Reid Spencer14310612006-12-31 05:40:51 +00004155 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004156 ;}
4157 break;
4158
Dale Johannesen172f3112008-02-20 21:15:43 +00004159 case 156:
Devang Patelbd41a062008-02-22 19:31:30 +00004160#line 1435 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004161 {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004162 std::vector<const Type*> Elements;
Chris Lattner38905612008-02-19 04:36:25 +00004163 for (std::list<llvm::PATypeHolder>::iterator I = (yyvsp[(3) - (5)].TypeList)->begin(),
4164 E = (yyvsp[(3) - (5)].TypeList)->end(); I != E; ++I)
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004165 Elements.push_back(*I);
4166
Chris Lattner38905612008-02-19 04:36:25 +00004167 (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(StructType::get(Elements, true)));
4168 delete (yyvsp[(3) - (5)].TypeList);
Reid Spencer41dff5e2007-01-26 08:05:27 +00004169 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004170 ;}
4171 break;
4172
Dale Johannesen172f3112008-02-20 21:15:43 +00004173 case 157:
Devang Patelbd41a062008-02-22 19:31:30 +00004174#line 1445 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004175 { // Empty structure type?
4176 (yyval.TypeVal) = new PATypeHolder(StructType::get(std::vector<const Type*>(), true));
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004177 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004178 ;}
4179 break;
4180
Dale Johannesen172f3112008-02-20 21:15:43 +00004181 case 158:
Devang Patelbd41a062008-02-22 19:31:30 +00004182#line 1452 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004183 {
Duncan Sandsdc024672007-11-27 13:23:08 +00004184 // Allow but ignore attributes on function types; this permits auto-upgrade.
4185 // FIXME: remove in LLVM 3.0.
Chris Lattner38905612008-02-19 04:36:25 +00004186 (yyval.TypeWithAttrs).Ty = (yyvsp[(1) - (2)].TypeVal);
4187 (yyval.TypeWithAttrs).Attrs = ParamAttr::None;
4188 ;}
4189 break;
4190
Dale Johannesen172f3112008-02-20 21:15:43 +00004191 case 159:
Devang Patelbd41a062008-02-22 19:31:30 +00004192#line 1461 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004193 {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004194 if (!UpRefs.empty())
Chris Lattner38905612008-02-19 04:36:25 +00004195 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (1)].TypeVal))->getDescription());
Devang Patel7990dc72008-02-20 22:40:23 +00004196 if (!(*(yyvsp[(1) - (1)].TypeVal))->isFirstClassType() && (*(yyvsp[(1) - (1)].TypeVal))->getTypeID() != Type::StructTyID)
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004197 GEN_ERROR("LLVM functions cannot return aggregate types");
Chris Lattner38905612008-02-19 04:36:25 +00004198 (yyval.TypeVal) = (yyvsp[(1) - (1)].TypeVal);
4199 ;}
4200 break;
4201
Dale Johannesen172f3112008-02-20 21:15:43 +00004202 case 160:
Devang Patelbd41a062008-02-22 19:31:30 +00004203#line 1468 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004204 {
4205 (yyval.TypeVal) = new PATypeHolder(Type::VoidTy);
4206 ;}
4207 break;
4208
Dale Johannesen172f3112008-02-20 21:15:43 +00004209 case 161:
Devang Patelbd41a062008-02-22 19:31:30 +00004210#line 1473 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004211 {
4212 (yyval.TypeWithAttrsList) = new TypeWithAttrsList();
4213 (yyval.TypeWithAttrsList)->push_back((yyvsp[(1) - (1)].TypeWithAttrs));
Reid Spencer3da59db2006-11-27 01:05:10 +00004214 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004215 ;}
4216 break;
4217
Dale Johannesen172f3112008-02-20 21:15:43 +00004218 case 162:
Devang Patelbd41a062008-02-22 19:31:30 +00004219#line 1478 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004220 {
4221 ((yyval.TypeWithAttrsList)=(yyvsp[(1) - (3)].TypeWithAttrsList))->push_back((yyvsp[(3) - (3)].TypeWithAttrs));
Reid Spencer41dff5e2007-01-26 08:05:27 +00004222 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004223 ;}
4224 break;
4225
Dale Johannesen172f3112008-02-20 21:15:43 +00004226 case 164:
Devang Patelbd41a062008-02-22 19:31:30 +00004227#line 1486 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004228 {
4229 (yyval.TypeWithAttrsList)=(yyvsp[(1) - (3)].TypeWithAttrsList);
Reid Spencer18da0722007-04-11 02:44:20 +00004230 TypeWithAttrs TWA; TWA.Attrs = ParamAttr::None;
Reid Spencer41dff5e2007-01-26 08:05:27 +00004231 TWA.Ty = new PATypeHolder(Type::VoidTy);
Chris Lattner38905612008-02-19 04:36:25 +00004232 (yyval.TypeWithAttrsList)->push_back(TWA);
Reid Spencer41dff5e2007-01-26 08:05:27 +00004233 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004234 ;}
4235 break;
4236
Dale Johannesen172f3112008-02-20 21:15:43 +00004237 case 165:
Devang Patelbd41a062008-02-22 19:31:30 +00004238#line 1493 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004239 {
4240 (yyval.TypeWithAttrsList) = new TypeWithAttrsList;
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004241 TypeWithAttrs TWA; TWA.Attrs = ParamAttr::None;
4242 TWA.Ty = new PATypeHolder(Type::VoidTy);
Chris Lattner38905612008-02-19 04:36:25 +00004243 (yyval.TypeWithAttrsList)->push_back(TWA);
Reid Spencer41dff5e2007-01-26 08:05:27 +00004244 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004245 ;}
4246 break;
4247
Dale Johannesen172f3112008-02-20 21:15:43 +00004248 case 166:
Devang Patelbd41a062008-02-22 19:31:30 +00004249#line 1500 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004250 {
4251 (yyval.TypeWithAttrsList) = new TypeWithAttrsList();
Reid Spencer41dff5e2007-01-26 08:05:27 +00004252 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004253 ;}
4254 break;
4255
Dale Johannesen172f3112008-02-20 21:15:43 +00004256 case 167:
Devang Patelbd41a062008-02-22 19:31:30 +00004257#line 1508 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004258 {
4259 (yyval.TypeList) = new std::list<PATypeHolder>();
4260 (yyval.TypeList)->push_back(*(yyvsp[(1) - (1)].TypeVal));
4261 delete (yyvsp[(1) - (1)].TypeVal);
Reid Spencer3da59db2006-11-27 01:05:10 +00004262 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004263 ;}
4264 break;
4265
Dale Johannesen172f3112008-02-20 21:15:43 +00004266 case 168:
Devang Patelbd41a062008-02-22 19:31:30 +00004267#line 1514 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004268 {
4269 ((yyval.TypeList)=(yyvsp[(1) - (3)].TypeList))->push_back(*(yyvsp[(3) - (3)].TypeVal));
4270 delete (yyvsp[(3) - (3)].TypeVal);
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004271 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004272 ;}
4273 break;
4274
Dale Johannesen172f3112008-02-20 21:15:43 +00004275 case 169:
Devang Patelbd41a062008-02-22 19:31:30 +00004276#line 1526 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004277 { // Nonempty unsized arr
Reid Spencer14310612006-12-31 05:40:51 +00004278 if (!UpRefs.empty())
Chris Lattner38905612008-02-19 04:36:25 +00004279 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (4)].TypeVal))->getDescription());
4280 const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[(1) - (4)].TypeVal)->get());
Reid Spencer68a24bd2005-08-27 18:50:39 +00004281 if (ATy == 0)
Reid Spencer61c83e02006-08-18 08:43:06 +00004282 GEN_ERROR("Cannot make array constant with type: '" +
Chris Lattner38905612008-02-19 04:36:25 +00004283 (*(yyvsp[(1) - (4)].TypeVal))->getDescription() + "'");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004284 const Type *ETy = ATy->getElementType();
4285 int NumElements = ATy->getNumElements();
4286
4287 // Verify that we have the correct size...
Chris Lattner38905612008-02-19 04:36:25 +00004288 if (NumElements != -1 && NumElements != (int)(yyvsp[(3) - (4)].ConstVector)->size())
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004289 GEN_ERROR("Type mismatch: constant sized array initialized with " +
Chris Lattner38905612008-02-19 04:36:25 +00004290 utostr((yyvsp[(3) - (4)].ConstVector)->size()) + " arguments, but has size of " +
Reid Spencerb5334b02007-02-05 10:18:06 +00004291 itostr(NumElements) + "");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004292
4293 // Verify all elements are correct type!
Chris Lattner38905612008-02-19 04:36:25 +00004294 for (unsigned i = 0; i < (yyvsp[(3) - (4)].ConstVector)->size(); i++) {
4295 if (ETy != (*(yyvsp[(3) - (4)].ConstVector))[i]->getType())
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004296 GEN_ERROR("Element #" + utostr(i) + " is not of type '" +
4297 ETy->getDescription() +"' as required!\nIt is of type '"+
Chris Lattner38905612008-02-19 04:36:25 +00004298 (*(yyvsp[(3) - (4)].ConstVector))[i]->getType()->getDescription() + "'.");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004299 }
4300
Chris Lattner38905612008-02-19 04:36:25 +00004301 (yyval.ConstVal) = ConstantArray::get(ATy, *(yyvsp[(3) - (4)].ConstVector));
4302 delete (yyvsp[(1) - (4)].TypeVal); delete (yyvsp[(3) - (4)].ConstVector);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004303 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004304 ;}
4305 break;
4306
Dale Johannesen172f3112008-02-20 21:15:43 +00004307 case 170:
Devang Patelbd41a062008-02-22 19:31:30 +00004308#line 1554 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004309 {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004310 if (!UpRefs.empty())
Chris Lattner38905612008-02-19 04:36:25 +00004311 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (3)].TypeVal))->getDescription());
4312 const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[(1) - (3)].TypeVal)->get());
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004313 if (ATy == 0)
4314 GEN_ERROR("Cannot make array constant with type: '" +
Chris Lattner38905612008-02-19 04:36:25 +00004315 (*(yyvsp[(1) - (3)].TypeVal))->getDescription() + "'");
Reid Spencer68a24bd2005-08-27 18:50:39 +00004316
Andrew Lenharth6353e052006-12-08 18:07:09 +00004317 int NumElements = ATy->getNumElements();
4318 if (NumElements != -1 && NumElements != 0)
4319 GEN_ERROR("Type mismatch: constant sized array initialized with 0"
Reid Spencerb5334b02007-02-05 10:18:06 +00004320 " arguments, but has size of " + itostr(NumElements) +"");
Chris Lattner38905612008-02-19 04:36:25 +00004321 (yyval.ConstVal) = ConstantArray::get(ATy, std::vector<Constant*>());
4322 delete (yyvsp[(1) - (3)].TypeVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00004323 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004324 ;}
4325 break;
4326
Dale Johannesen172f3112008-02-20 21:15:43 +00004327 case 171:
Devang Patelbd41a062008-02-22 19:31:30 +00004328#line 1570 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004329 {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004330 if (!UpRefs.empty())
Chris Lattner38905612008-02-19 04:36:25 +00004331 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (3)].TypeVal))->getDescription());
4332 const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[(1) - (3)].TypeVal)->get());
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004333 if (ATy == 0)
4334 GEN_ERROR("Cannot make array constant with type: '" +
Chris Lattner38905612008-02-19 04:36:25 +00004335 (*(yyvsp[(1) - (3)].TypeVal))->getDescription() + "'");
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004336
4337 int NumElements = ATy->getNumElements();
4338 const Type *ETy = ATy->getElementType();
Chris Lattner38905612008-02-19 04:36:25 +00004339 if (NumElements != -1 && NumElements != int((yyvsp[(3) - (3)].StrVal)->length()))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004340 GEN_ERROR("Can't build string constant of size " +
Chris Lattner38905612008-02-19 04:36:25 +00004341 itostr((int)((yyvsp[(3) - (3)].StrVal)->length())) +
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004342 " when array has size " + itostr(NumElements) + "");
4343 std::vector<Constant*> Vals;
4344 if (ETy == Type::Int8Ty) {
Chris Lattner38905612008-02-19 04:36:25 +00004345 for (unsigned i = 0; i < (yyvsp[(3) - (3)].StrVal)->length(); ++i)
4346 Vals.push_back(ConstantInt::get(ETy, (*(yyvsp[(3) - (3)].StrVal))[i]));
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004347 } else {
Chris Lattner38905612008-02-19 04:36:25 +00004348 delete (yyvsp[(3) - (3)].StrVal);
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004349 GEN_ERROR("Cannot build string arrays of non byte sized elements");
4350 }
Chris Lattner38905612008-02-19 04:36:25 +00004351 delete (yyvsp[(3) - (3)].StrVal);
4352 (yyval.ConstVal) = ConstantArray::get(ATy, Vals);
4353 delete (yyvsp[(1) - (3)].TypeVal);
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004354 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004355 ;}
4356 break;
4357
Dale Johannesen172f3112008-02-20 21:15:43 +00004358 case 172:
Devang Patelbd41a062008-02-22 19:31:30 +00004359#line 1597 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004360 { // Nonempty unsized arr
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004361 if (!UpRefs.empty())
Chris Lattner38905612008-02-19 04:36:25 +00004362 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (4)].TypeVal))->getDescription());
4363 const VectorType *PTy = dyn_cast<VectorType>((yyvsp[(1) - (4)].TypeVal)->get());
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004364 if (PTy == 0)
4365 GEN_ERROR("Cannot make packed constant with type: '" +
Chris Lattner38905612008-02-19 04:36:25 +00004366 (*(yyvsp[(1) - (4)].TypeVal))->getDescription() + "'");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004367 const Type *ETy = PTy->getElementType();
4368 int NumElements = PTy->getNumElements();
Reid Spencer41dff5e2007-01-26 08:05:27 +00004369
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004370 // Verify that we have the correct size...
Chris Lattner38905612008-02-19 04:36:25 +00004371 if (NumElements != -1 && NumElements != (int)(yyvsp[(3) - (4)].ConstVector)->size())
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004372 GEN_ERROR("Type mismatch: constant sized packed initialized with " +
Chris Lattner38905612008-02-19 04:36:25 +00004373 utostr((yyvsp[(3) - (4)].ConstVector)->size()) + " arguments, but has size of " +
Reid Spencerb5334b02007-02-05 10:18:06 +00004374 itostr(NumElements) + "");
Reid Spencer41dff5e2007-01-26 08:05:27 +00004375
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004376 // Verify all elements are correct type!
Chris Lattner38905612008-02-19 04:36:25 +00004377 for (unsigned i = 0; i < (yyvsp[(3) - (4)].ConstVector)->size(); i++) {
4378 if (ETy != (*(yyvsp[(3) - (4)].ConstVector))[i]->getType())
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004379 GEN_ERROR("Element #" + utostr(i) + " is not of type '" +
4380 ETy->getDescription() +"' as required!\nIt is of type '"+
Chris Lattner38905612008-02-19 04:36:25 +00004381 (*(yyvsp[(3) - (4)].ConstVector))[i]->getType()->getDescription() + "'.");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004382 }
Reid Spencer41dff5e2007-01-26 08:05:27 +00004383
Chris Lattner38905612008-02-19 04:36:25 +00004384 (yyval.ConstVal) = ConstantVector::get(PTy, *(yyvsp[(3) - (4)].ConstVector));
4385 delete (yyvsp[(1) - (4)].TypeVal); delete (yyvsp[(3) - (4)].ConstVector);
Reid Spencer41dff5e2007-01-26 08:05:27 +00004386 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004387 ;}
4388 break;
4389
Dale Johannesen172f3112008-02-20 21:15:43 +00004390 case 173:
Devang Patelbd41a062008-02-22 19:31:30 +00004391#line 1625 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004392 {
4393 const StructType *STy = dyn_cast<StructType>((yyvsp[(1) - (4)].TypeVal)->get());
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004394 if (STy == 0)
4395 GEN_ERROR("Cannot make struct constant with type: '" +
Chris Lattner38905612008-02-19 04:36:25 +00004396 (*(yyvsp[(1) - (4)].TypeVal))->getDescription() + "'");
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004397
Chris Lattner38905612008-02-19 04:36:25 +00004398 if ((yyvsp[(3) - (4)].ConstVector)->size() != STy->getNumContainedTypes())
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004399 GEN_ERROR("Illegal number of initializers for structure type");
4400
4401 // Check to ensure that constants are compatible with the type initializer!
Chris Lattner38905612008-02-19 04:36:25 +00004402 for (unsigned i = 0, e = (yyvsp[(3) - (4)].ConstVector)->size(); i != e; ++i)
4403 if ((*(yyvsp[(3) - (4)].ConstVector))[i]->getType() != STy->getElementType(i))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004404 GEN_ERROR("Expected type '" +
4405 STy->getElementType(i)->getDescription() +
4406 "' for element #" + utostr(i) +
4407 " of structure initializer");
4408
4409 // Check to ensure that Type is not packed
4410 if (STy->isPacked())
4411 GEN_ERROR("Unpacked Initializer to vector type '" +
4412 STy->getDescription() + "'");
4413
Chris Lattner38905612008-02-19 04:36:25 +00004414 (yyval.ConstVal) = ConstantStruct::get(STy, *(yyvsp[(3) - (4)].ConstVector));
4415 delete (yyvsp[(1) - (4)].TypeVal); delete (yyvsp[(3) - (4)].ConstVector);
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004416 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004417 ;}
4418 break;
4419
Dale Johannesen172f3112008-02-20 21:15:43 +00004420 case 174:
Devang Patelbd41a062008-02-22 19:31:30 +00004421#line 1651 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004422 {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004423 if (!UpRefs.empty())
Chris Lattner38905612008-02-19 04:36:25 +00004424 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (3)].TypeVal))->getDescription());
4425 const StructType *STy = dyn_cast<StructType>((yyvsp[(1) - (3)].TypeVal)->get());
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004426 if (STy == 0)
4427 GEN_ERROR("Cannot make struct constant with type: '" +
Chris Lattner38905612008-02-19 04:36:25 +00004428 (*(yyvsp[(1) - (3)].TypeVal))->getDescription() + "'");
Reid Spencer41dff5e2007-01-26 08:05:27 +00004429
4430 if (STy->getNumContainedTypes() != 0)
Reid Spencerb5334b02007-02-05 10:18:06 +00004431 GEN_ERROR("Illegal number of initializers for structure type");
Reid Spencer41dff5e2007-01-26 08:05:27 +00004432
4433 // Check to ensure that Type is not packed
4434 if (STy->isPacked())
Chris Lattner6cdc6822007-04-26 05:31:05 +00004435 GEN_ERROR("Unpacked Initializer to vector type '" +
4436 STy->getDescription() + "'");
Reid Spencer41dff5e2007-01-26 08:05:27 +00004437
Chris Lattner38905612008-02-19 04:36:25 +00004438 (yyval.ConstVal) = ConstantStruct::get(STy, std::vector<Constant*>());
4439 delete (yyvsp[(1) - (3)].TypeVal);
Reid Spencer41dff5e2007-01-26 08:05:27 +00004440 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004441 ;}
4442 break;
4443
Dale Johannesen172f3112008-02-20 21:15:43 +00004444 case 175:
Devang Patelbd41a062008-02-22 19:31:30 +00004445#line 1671 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004446 {
4447 const StructType *STy = dyn_cast<StructType>((yyvsp[(1) - (6)].TypeVal)->get());
Reid Spencer41dff5e2007-01-26 08:05:27 +00004448 if (STy == 0)
4449 GEN_ERROR("Cannot make struct constant with type: '" +
Chris Lattner38905612008-02-19 04:36:25 +00004450 (*(yyvsp[(1) - (6)].TypeVal))->getDescription() + "'");
Reid Spencer41dff5e2007-01-26 08:05:27 +00004451
Chris Lattner38905612008-02-19 04:36:25 +00004452 if ((yyvsp[(4) - (6)].ConstVector)->size() != STy->getNumContainedTypes())
Reid Spencerb5334b02007-02-05 10:18:06 +00004453 GEN_ERROR("Illegal number of initializers for structure type");
Reid Spencer41dff5e2007-01-26 08:05:27 +00004454
4455 // Check to ensure that constants are compatible with the type initializer!
Chris Lattner38905612008-02-19 04:36:25 +00004456 for (unsigned i = 0, e = (yyvsp[(4) - (6)].ConstVector)->size(); i != e; ++i)
4457 if ((*(yyvsp[(4) - (6)].ConstVector))[i]->getType() != STy->getElementType(i))
Reid Spencer41dff5e2007-01-26 08:05:27 +00004458 GEN_ERROR("Expected type '" +
4459 STy->getElementType(i)->getDescription() +
4460 "' for element #" + utostr(i) +
Reid Spencerb5334b02007-02-05 10:18:06 +00004461 " of structure initializer");
Reid Spencer41dff5e2007-01-26 08:05:27 +00004462
4463 // Check to ensure that Type is packed
4464 if (!STy->isPacked())
Chris Lattner32980692007-02-19 07:44:24 +00004465 GEN_ERROR("Vector initializer to non-vector type '" +
4466 STy->getDescription() + "'");
Reid Spencer41dff5e2007-01-26 08:05:27 +00004467
Chris Lattner38905612008-02-19 04:36:25 +00004468 (yyval.ConstVal) = ConstantStruct::get(STy, *(yyvsp[(4) - (6)].ConstVector));
4469 delete (yyvsp[(1) - (6)].TypeVal); delete (yyvsp[(4) - (6)].ConstVector);
Reid Spencer41dff5e2007-01-26 08:05:27 +00004470 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004471 ;}
4472 break;
4473
Dale Johannesen172f3112008-02-20 21:15:43 +00004474 case 176:
Devang Patelbd41a062008-02-22 19:31:30 +00004475#line 1697 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004476 {
Reid Spencer41dff5e2007-01-26 08:05:27 +00004477 if (!UpRefs.empty())
Chris Lattner38905612008-02-19 04:36:25 +00004478 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (5)].TypeVal))->getDescription());
4479 const StructType *STy = dyn_cast<StructType>((yyvsp[(1) - (5)].TypeVal)->get());
Reid Spencer41dff5e2007-01-26 08:05:27 +00004480 if (STy == 0)
4481 GEN_ERROR("Cannot make struct constant with type: '" +
Chris Lattner38905612008-02-19 04:36:25 +00004482 (*(yyvsp[(1) - (5)].TypeVal))->getDescription() + "'");
Reid Spencer41dff5e2007-01-26 08:05:27 +00004483
4484 if (STy->getNumContainedTypes() != 0)
Reid Spencerb5334b02007-02-05 10:18:06 +00004485 GEN_ERROR("Illegal number of initializers for structure type");
Reid Spencer41dff5e2007-01-26 08:05:27 +00004486
4487 // Check to ensure that Type is packed
4488 if (!STy->isPacked())
Chris Lattner32980692007-02-19 07:44:24 +00004489 GEN_ERROR("Vector initializer to non-vector type '" +
4490 STy->getDescription() + "'");
Reid Spencer41dff5e2007-01-26 08:05:27 +00004491
Chris Lattner38905612008-02-19 04:36:25 +00004492 (yyval.ConstVal) = ConstantStruct::get(STy, std::vector<Constant*>());
4493 delete (yyvsp[(1) - (5)].TypeVal);
Reid Spencer41dff5e2007-01-26 08:05:27 +00004494 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004495 ;}
4496 break;
4497
Dale Johannesen172f3112008-02-20 21:15:43 +00004498 case 177:
Devang Patelbd41a062008-02-22 19:31:30 +00004499#line 1717 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004500 {
Reid Spencer41dff5e2007-01-26 08:05:27 +00004501 if (!UpRefs.empty())
Chris Lattner38905612008-02-19 04:36:25 +00004502 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (2)].TypeVal))->getDescription());
4503 const PointerType *PTy = dyn_cast<PointerType>((yyvsp[(1) - (2)].TypeVal)->get());
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004504 if (PTy == 0)
4505 GEN_ERROR("Cannot make null pointer constant with type: '" +
Chris Lattner38905612008-02-19 04:36:25 +00004506 (*(yyvsp[(1) - (2)].TypeVal))->getDescription() + "'");
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004507
Chris Lattner38905612008-02-19 04:36:25 +00004508 (yyval.ConstVal) = ConstantPointerNull::get(PTy);
4509 delete (yyvsp[(1) - (2)].TypeVal);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004510 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004511 ;}
4512 break;
4513
Dale Johannesen172f3112008-02-20 21:15:43 +00004514 case 178:
Devang Patelbd41a062008-02-22 19:31:30 +00004515#line 1729 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004516 {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004517 if (!UpRefs.empty())
Chris Lattner38905612008-02-19 04:36:25 +00004518 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (2)].TypeVal))->getDescription());
4519 (yyval.ConstVal) = UndefValue::get((yyvsp[(1) - (2)].TypeVal)->get());
4520 delete (yyvsp[(1) - (2)].TypeVal);
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004521 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004522 ;}
4523 break;
4524
Dale Johannesen172f3112008-02-20 21:15:43 +00004525 case 179:
Devang Patelbd41a062008-02-22 19:31:30 +00004526#line 1736 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004527 {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004528 if (!UpRefs.empty())
Chris Lattner38905612008-02-19 04:36:25 +00004529 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (2)].TypeVal))->getDescription());
4530 const PointerType *Ty = dyn_cast<PointerType>((yyvsp[(1) - (2)].TypeVal)->get());
Reid Spencer68a24bd2005-08-27 18:50:39 +00004531 if (Ty == 0)
Devang Patel5a970972008-02-19 22:27:01 +00004532 GEN_ERROR("Global const reference must be a pointer type " + (*(yyvsp[(1) - (2)].TypeVal))->getDescription());
Reid Spencer68a24bd2005-08-27 18:50:39 +00004533
4534 // ConstExprs can exist in the body of a function, thus creating
4535 // GlobalValues whenever they refer to a variable. Because we are in
Reid Spencer93c40032007-03-19 18:40:50 +00004536 // the context of a function, getExistingVal will search the functions
Reid Spencer68a24bd2005-08-27 18:50:39 +00004537 // symbol table instead of the module symbol table for the global symbol,
4538 // which throws things all off. To get around this, we just tell
Reid Spencer93c40032007-03-19 18:40:50 +00004539 // getExistingVal that we are at global scope here.
Reid Spencer68a24bd2005-08-27 18:50:39 +00004540 //
4541 Function *SavedCurFn = CurFun.CurrentFunction;
4542 CurFun.CurrentFunction = 0;
4543
Chris Lattner38905612008-02-19 04:36:25 +00004544 Value *V = getExistingVal(Ty, (yyvsp[(2) - (2)].ValIDVal));
Reid Spencer5b7e7532006-09-28 19:28:24 +00004545 CHECK_FOR_ERROR
Reid Spencer68a24bd2005-08-27 18:50:39 +00004546
4547 CurFun.CurrentFunction = SavedCurFn;
4548
4549 // If this is an initializer for a constant pointer, which is referencing a
4550 // (currently) undefined variable, create a stub now that shall be replaced
4551 // in the future with the right type of variable.
4552 //
4553 if (V == 0) {
Reid Spencera9720f52007-02-05 17:04:00 +00004554 assert(isa<PointerType>(Ty) && "Globals may only be used as pointers!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00004555 const PointerType *PT = cast<PointerType>(Ty);
4556
4557 // First check to see if the forward references value is already created!
4558 PerModuleInfo::GlobalRefsType::iterator I =
Chris Lattner38905612008-02-19 04:36:25 +00004559 CurModule.GlobalRefs.find(std::make_pair(PT, (yyvsp[(2) - (2)].ValIDVal)));
Reid Spencer68a24bd2005-08-27 18:50:39 +00004560
4561 if (I != CurModule.GlobalRefs.end()) {
4562 V = I->second; // Placeholder already exists, use it...
Chris Lattner38905612008-02-19 04:36:25 +00004563 (yyvsp[(2) - (2)].ValIDVal).destroy();
Reid Spencer68a24bd2005-08-27 18:50:39 +00004564 } else {
4565 std::string Name;
Chris Lattner38905612008-02-19 04:36:25 +00004566 if ((yyvsp[(2) - (2)].ValIDVal).Type == ValID::GlobalName)
4567 Name = (yyvsp[(2) - (2)].ValIDVal).getName();
4568 else if ((yyvsp[(2) - (2)].ValIDVal).Type != ValID::GlobalID)
Reid Spencer41dff5e2007-01-26 08:05:27 +00004569 GEN_ERROR("Invalid reference to global");
Reid Spencer68a24bd2005-08-27 18:50:39 +00004570
4571 // Create the forward referenced global.
4572 GlobalValue *GV;
4573 if (const FunctionType *FTy =
4574 dyn_cast<FunctionType>(PT->getElementType())) {
Chris Lattner6cdc6822007-04-26 05:31:05 +00004575 GV = new Function(FTy, GlobalValue::ExternalWeakLinkage, Name,
Reid Spencer68a24bd2005-08-27 18:50:39 +00004576 CurModule.CurrentModule);
4577 } else {
4578 GV = new GlobalVariable(PT->getElementType(), false,
Chris Lattner6cdc6822007-04-26 05:31:05 +00004579 GlobalValue::ExternalWeakLinkage, 0,
Reid Spencer68a24bd2005-08-27 18:50:39 +00004580 Name, CurModule.CurrentModule);
4581 }
4582
4583 // Keep track of the fact that we have a forward ref to recycle it
Chris Lattner38905612008-02-19 04:36:25 +00004584 CurModule.GlobalRefs.insert(std::make_pair(std::make_pair(PT, (yyvsp[(2) - (2)].ValIDVal)), GV));
Reid Spencer68a24bd2005-08-27 18:50:39 +00004585 V = GV;
4586 }
4587 }
4588
Chris Lattner38905612008-02-19 04:36:25 +00004589 (yyval.ConstVal) = cast<GlobalValue>(V);
4590 delete (yyvsp[(1) - (2)].TypeVal); // Free the type handle
Reid Spencer61c83e02006-08-18 08:43:06 +00004591 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004592 ;}
4593 break;
4594
Dale Johannesen172f3112008-02-20 21:15:43 +00004595 case 180:
Devang Patelbd41a062008-02-22 19:31:30 +00004596#line 1802 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004597 {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004598 if (!UpRefs.empty())
Chris Lattner38905612008-02-19 04:36:25 +00004599 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (2)].TypeVal))->getDescription());
4600 if ((yyvsp[(1) - (2)].TypeVal)->get() != (yyvsp[(2) - (2)].ConstVal)->getType())
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004601 GEN_ERROR("Mismatched types for constant expression: " +
Chris Lattner38905612008-02-19 04:36:25 +00004602 (*(yyvsp[(1) - (2)].TypeVal))->getDescription() + " and " + (yyvsp[(2) - (2)].ConstVal)->getType()->getDescription());
4603 (yyval.ConstVal) = (yyvsp[(2) - (2)].ConstVal);
4604 delete (yyvsp[(1) - (2)].TypeVal);
Reid Spencer41dff5e2007-01-26 08:05:27 +00004605 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004606 ;}
4607 break;
4608
Dale Johannesen172f3112008-02-20 21:15:43 +00004609 case 181:
Devang Patelbd41a062008-02-22 19:31:30 +00004610#line 1812 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004611 {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004612 if (!UpRefs.empty())
Chris Lattner38905612008-02-19 04:36:25 +00004613 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (2)].TypeVal))->getDescription());
4614 const Type *Ty = (yyvsp[(1) - (2)].TypeVal)->get();
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004615 if (isa<FunctionType>(Ty) || Ty == Type::LabelTy || isa<OpaqueType>(Ty))
4616 GEN_ERROR("Cannot create a null initialized value of this type");
Chris Lattner38905612008-02-19 04:36:25 +00004617 (yyval.ConstVal) = Constant::getNullValue(Ty);
4618 delete (yyvsp[(1) - (2)].TypeVal);
Reid Spencer41dff5e2007-01-26 08:05:27 +00004619 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004620 ;}
4621 break;
4622
Dale Johannesen172f3112008-02-20 21:15:43 +00004623 case 182:
Devang Patelbd41a062008-02-22 19:31:30 +00004624#line 1822 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004625 { // integral constants
4626 if (!ConstantInt::isValueValidForType((yyvsp[(1) - (2)].PrimType), (yyvsp[(2) - (2)].SInt64Val)))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004627 GEN_ERROR("Constant value doesn't fit in type");
Chris Lattner38905612008-02-19 04:36:25 +00004628 (yyval.ConstVal) = ConstantInt::get((yyvsp[(1) - (2)].PrimType), (yyvsp[(2) - (2)].SInt64Val), true);
Reid Spencer38c91a92007-02-28 02:24:54 +00004629 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004630 ;}
4631 break;
4632
Dale Johannesen172f3112008-02-20 21:15:43 +00004633 case 183:
Devang Patelbd41a062008-02-22 19:31:30 +00004634#line 1828 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004635 { // arbitrary precision integer constants
4636 uint32_t BitWidth = cast<IntegerType>((yyvsp[(1) - (2)].PrimType))->getBitWidth();
4637 if ((yyvsp[(2) - (2)].APIntVal)->getBitWidth() > BitWidth) {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004638 GEN_ERROR("Constant value does not fit in type");
4639 }
Chris Lattner38905612008-02-19 04:36:25 +00004640 (yyvsp[(2) - (2)].APIntVal)->sextOrTrunc(BitWidth);
4641 (yyval.ConstVal) = ConstantInt::get(*(yyvsp[(2) - (2)].APIntVal));
4642 delete (yyvsp[(2) - (2)].APIntVal);
Reid Spencer41dff5e2007-01-26 08:05:27 +00004643 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004644 ;}
4645 break;
4646
Dale Johannesen172f3112008-02-20 21:15:43 +00004647 case 184:
Devang Patelbd41a062008-02-22 19:31:30 +00004648#line 1838 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004649 { // integral constants
4650 if (!ConstantInt::isValueValidForType((yyvsp[(1) - (2)].PrimType), (yyvsp[(2) - (2)].UInt64Val)))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004651 GEN_ERROR("Constant value doesn't fit in type");
Chris Lattner38905612008-02-19 04:36:25 +00004652 (yyval.ConstVal) = ConstantInt::get((yyvsp[(1) - (2)].PrimType), (yyvsp[(2) - (2)].UInt64Val), false);
Reid Spencer41dff5e2007-01-26 08:05:27 +00004653 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004654 ;}
4655 break;
4656
Dale Johannesen172f3112008-02-20 21:15:43 +00004657 case 185:
Devang Patelbd41a062008-02-22 19:31:30 +00004658#line 1844 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004659 { // arbitrary precision integer constants
4660 uint32_t BitWidth = cast<IntegerType>((yyvsp[(1) - (2)].PrimType))->getBitWidth();
4661 if ((yyvsp[(2) - (2)].APIntVal)->getBitWidth() > BitWidth) {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004662 GEN_ERROR("Constant value does not fit in type");
4663 }
Chris Lattner38905612008-02-19 04:36:25 +00004664 (yyvsp[(2) - (2)].APIntVal)->zextOrTrunc(BitWidth);
4665 (yyval.ConstVal) = ConstantInt::get(*(yyvsp[(2) - (2)].APIntVal));
4666 delete (yyvsp[(2) - (2)].APIntVal);
Reid Spencer41dff5e2007-01-26 08:05:27 +00004667 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004668 ;}
4669 break;
4670
Dale Johannesen172f3112008-02-20 21:15:43 +00004671 case 186:
Devang Patelbd41a062008-02-22 19:31:30 +00004672#line 1854 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004673 { // Boolean constants
4674 assert(cast<IntegerType>((yyvsp[(1) - (2)].PrimType))->getBitWidth() == 1 && "Not Bool?");
4675 (yyval.ConstVal) = ConstantInt::getTrue();
Reid Spencer38c91a92007-02-28 02:24:54 +00004676 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004677 ;}
4678 break;
4679
Dale Johannesen172f3112008-02-20 21:15:43 +00004680 case 187:
Devang Patelbd41a062008-02-22 19:31:30 +00004681#line 1859 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004682 { // Boolean constants
4683 assert(cast<IntegerType>((yyvsp[(1) - (2)].PrimType))->getBitWidth() == 1 && "Not Bool?");
4684 (yyval.ConstVal) = ConstantInt::getFalse();
Reid Spencer6f407902007-01-13 05:00:46 +00004685 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004686 ;}
4687 break;
4688
Dale Johannesen172f3112008-02-20 21:15:43 +00004689 case 188:
Devang Patelbd41a062008-02-22 19:31:30 +00004690#line 1864 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004691 { // Floating point constants
4692 if (!ConstantFP::isValueValidForType((yyvsp[(1) - (2)].PrimType), *(yyvsp[(2) - (2)].FPVal)))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004693 GEN_ERROR("Floating point constant invalid for type");
Dale Johannesenc72cd7e2007-09-11 18:33:39 +00004694 // Lexer has no type info, so builds all float and double FP constants
4695 // as double. Fix this here. Long double is done right.
Chris Lattner38905612008-02-19 04:36:25 +00004696 if (&(yyvsp[(2) - (2)].FPVal)->getSemantics()==&APFloat::IEEEdouble && (yyvsp[(1) - (2)].PrimType)==Type::FloatTy)
4697 (yyvsp[(2) - (2)].FPVal)->convert(APFloat::IEEEsingle, APFloat::rmNearestTiesToEven);
4698 (yyval.ConstVal) = ConstantFP::get((yyvsp[(1) - (2)].PrimType), *(yyvsp[(2) - (2)].FPVal));
4699 delete (yyvsp[(2) - (2)].FPVal);
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004700 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004701 ;}
4702 break;
4703
Dale Johannesen172f3112008-02-20 21:15:43 +00004704 case 189:
Devang Patelbd41a062008-02-22 19:31:30 +00004705#line 1877 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004706 {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004707 if (!UpRefs.empty())
Chris Lattner38905612008-02-19 04:36:25 +00004708 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(5) - (6)].TypeVal))->getDescription());
4709 Constant *Val = (yyvsp[(3) - (6)].ConstVal);
4710 const Type *DestTy = (yyvsp[(5) - (6)].TypeVal)->get();
4711 if (!CastInst::castIsValid((yyvsp[(1) - (6)].CastOpVal), (yyvsp[(3) - (6)].ConstVal), DestTy))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004712 GEN_ERROR("invalid cast opcode for cast from '" +
4713 Val->getType()->getDescription() + "' to '" +
4714 DestTy->getDescription() + "'");
Chris Lattner38905612008-02-19 04:36:25 +00004715 (yyval.ConstVal) = ConstantExpr::getCast((yyvsp[(1) - (6)].CastOpVal), (yyvsp[(3) - (6)].ConstVal), DestTy);
4716 delete (yyvsp[(5) - (6)].TypeVal);
4717 ;}
4718 break;
4719
Dale Johannesen172f3112008-02-20 21:15:43 +00004720 case 190:
Devang Patelbd41a062008-02-22 19:31:30 +00004721#line 1889 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004722 {
4723 if (!isa<PointerType>((yyvsp[(3) - (5)].ConstVal)->getType()))
Reid Spencerb5334b02007-02-05 10:18:06 +00004724 GEN_ERROR("GetElementPtr requires a pointer operand");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004725
4726 const Type *IdxTy =
Chris Lattner38905612008-02-19 04:36:25 +00004727 GetElementPtrInst::getIndexedType((yyvsp[(3) - (5)].ConstVal)->getType(), (yyvsp[(4) - (5)].ValueList)->begin(), (yyvsp[(4) - (5)].ValueList)->end(),
Chris Lattner7d9801d2007-02-13 00:58:01 +00004728 true);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004729 if (!IdxTy)
Reid Spencerb5334b02007-02-05 10:18:06 +00004730 GEN_ERROR("Index list invalid for constant getelementptr");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004731
Chris Lattnerf7469af2007-01-31 04:44:08 +00004732 SmallVector<Constant*, 8> IdxVec;
Chris Lattner38905612008-02-19 04:36:25 +00004733 for (unsigned i = 0, e = (yyvsp[(4) - (5)].ValueList)->size(); i != e; ++i)
4734 if (Constant *C = dyn_cast<Constant>((*(yyvsp[(4) - (5)].ValueList))[i]))
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004735 IdxVec.push_back(C);
4736 else
Reid Spencerb5334b02007-02-05 10:18:06 +00004737 GEN_ERROR("Indices to constant getelementptr must be constants");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004738
Chris Lattner38905612008-02-19 04:36:25 +00004739 delete (yyvsp[(4) - (5)].ValueList);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004740
Chris Lattner38905612008-02-19 04:36:25 +00004741 (yyval.ConstVal) = ConstantExpr::getGetElementPtr((yyvsp[(3) - (5)].ConstVal), &IdxVec[0], IdxVec.size());
Andrew Lenharth6353e052006-12-08 18:07:09 +00004742 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004743 ;}
4744 break;
4745
Dale Johannesen172f3112008-02-20 21:15:43 +00004746 case 191:
Devang Patelbd41a062008-02-22 19:31:30 +00004747#line 1911 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004748 {
4749 if ((yyvsp[(3) - (8)].ConstVal)->getType() != Type::Int1Ty)
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004750 GEN_ERROR("Select condition must be of boolean type");
Chris Lattner38905612008-02-19 04:36:25 +00004751 if ((yyvsp[(5) - (8)].ConstVal)->getType() != (yyvsp[(7) - (8)].ConstVal)->getType())
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004752 GEN_ERROR("Select operand types must match");
Chris Lattner38905612008-02-19 04:36:25 +00004753 (yyval.ConstVal) = ConstantExpr::getSelect((yyvsp[(3) - (8)].ConstVal), (yyvsp[(5) - (8)].ConstVal), (yyvsp[(7) - (8)].ConstVal));
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004754 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004755 ;}
4756 break;
4757
Dale Johannesen172f3112008-02-20 21:15:43 +00004758 case 192:
Devang Patelbd41a062008-02-22 19:31:30 +00004759#line 1919 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004760 {
4761 if ((yyvsp[(3) - (6)].ConstVal)->getType() != (yyvsp[(5) - (6)].ConstVal)->getType())
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004762 GEN_ERROR("Binary operator types must match");
4763 CHECK_FOR_ERROR;
Chris Lattner38905612008-02-19 04:36:25 +00004764 (yyval.ConstVal) = ConstantExpr::get((yyvsp[(1) - (6)].BinaryOpVal), (yyvsp[(3) - (6)].ConstVal), (yyvsp[(5) - (6)].ConstVal));
4765 ;}
4766 break;
4767
Dale Johannesen172f3112008-02-20 21:15:43 +00004768 case 193:
Devang Patelbd41a062008-02-22 19:31:30 +00004769#line 1925 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004770 {
4771 if ((yyvsp[(3) - (6)].ConstVal)->getType() != (yyvsp[(5) - (6)].ConstVal)->getType())
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004772 GEN_ERROR("Logical operator types must match");
Chris Lattner38905612008-02-19 04:36:25 +00004773 if (!(yyvsp[(3) - (6)].ConstVal)->getType()->isInteger()) {
4774 if (Instruction::isShift((yyvsp[(1) - (6)].BinaryOpVal)) || !isa<VectorType>((yyvsp[(3) - (6)].ConstVal)->getType()) ||
4775 !cast<VectorType>((yyvsp[(3) - (6)].ConstVal)->getType())->getElementType()->isInteger())
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004776 GEN_ERROR("Logical operator requires integral operands");
4777 }
Chris Lattner38905612008-02-19 04:36:25 +00004778 (yyval.ConstVal) = ConstantExpr::get((yyvsp[(1) - (6)].BinaryOpVal), (yyvsp[(3) - (6)].ConstVal), (yyvsp[(5) - (6)].ConstVal));
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004779 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004780 ;}
4781 break;
4782
Dale Johannesen172f3112008-02-20 21:15:43 +00004783 case 194:
Devang Patelbd41a062008-02-22 19:31:30 +00004784#line 1936 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004785 {
4786 if ((yyvsp[(4) - (7)].ConstVal)->getType() != (yyvsp[(6) - (7)].ConstVal)->getType())
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004787 GEN_ERROR("icmp operand types must match");
Chris Lattner38905612008-02-19 04:36:25 +00004788 (yyval.ConstVal) = ConstantExpr::getICmp((yyvsp[(2) - (7)].IPredicate), (yyvsp[(4) - (7)].ConstVal), (yyvsp[(6) - (7)].ConstVal));
4789 ;}
4790 break;
4791
Dale Johannesen172f3112008-02-20 21:15:43 +00004792 case 195:
Devang Patelbd41a062008-02-22 19:31:30 +00004793#line 1941 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004794 {
4795 if ((yyvsp[(4) - (7)].ConstVal)->getType() != (yyvsp[(6) - (7)].ConstVal)->getType())
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004796 GEN_ERROR("fcmp operand types must match");
Chris Lattner38905612008-02-19 04:36:25 +00004797 (yyval.ConstVal) = ConstantExpr::getFCmp((yyvsp[(2) - (7)].FPredicate), (yyvsp[(4) - (7)].ConstVal), (yyvsp[(6) - (7)].ConstVal));
4798 ;}
4799 break;
4800
Dale Johannesen172f3112008-02-20 21:15:43 +00004801 case 196:
Devang Patelbd41a062008-02-22 19:31:30 +00004802#line 1946 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004803 {
4804 if (!ExtractElementInst::isValidOperands((yyvsp[(3) - (6)].ConstVal), (yyvsp[(5) - (6)].ConstVal)))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004805 GEN_ERROR("Invalid extractelement operands");
Chris Lattner38905612008-02-19 04:36:25 +00004806 (yyval.ConstVal) = ConstantExpr::getExtractElement((yyvsp[(3) - (6)].ConstVal), (yyvsp[(5) - (6)].ConstVal));
Reid Spencer41dff5e2007-01-26 08:05:27 +00004807 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004808 ;}
4809 break;
4810
Dale Johannesen172f3112008-02-20 21:15:43 +00004811 case 197:
Devang Patelbd41a062008-02-22 19:31:30 +00004812#line 1952 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004813 {
4814 if (!InsertElementInst::isValidOperands((yyvsp[(3) - (8)].ConstVal), (yyvsp[(5) - (8)].ConstVal), (yyvsp[(7) - (8)].ConstVal)))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004815 GEN_ERROR("Invalid insertelement operands");
Chris Lattner38905612008-02-19 04:36:25 +00004816 (yyval.ConstVal) = ConstantExpr::getInsertElement((yyvsp[(3) - (8)].ConstVal), (yyvsp[(5) - (8)].ConstVal), (yyvsp[(7) - (8)].ConstVal));
Reid Spencer41dff5e2007-01-26 08:05:27 +00004817 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004818 ;}
4819 break;
4820
Dale Johannesen172f3112008-02-20 21:15:43 +00004821 case 198:
Devang Patelbd41a062008-02-22 19:31:30 +00004822#line 1958 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004823 {
4824 if (!ShuffleVectorInst::isValidOperands((yyvsp[(3) - (8)].ConstVal), (yyvsp[(5) - (8)].ConstVal), (yyvsp[(7) - (8)].ConstVal)))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004825 GEN_ERROR("Invalid shufflevector operands");
Chris Lattner38905612008-02-19 04:36:25 +00004826 (yyval.ConstVal) = ConstantExpr::getShuffleVector((yyvsp[(3) - (8)].ConstVal), (yyvsp[(5) - (8)].ConstVal), (yyvsp[(7) - (8)].ConstVal));
Reid Spencer41dff5e2007-01-26 08:05:27 +00004827 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004828 ;}
4829 break;
4830
Dale Johannesen172f3112008-02-20 21:15:43 +00004831 case 199:
Devang Patelbd41a062008-02-22 19:31:30 +00004832#line 1967 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004833 {
4834 ((yyval.ConstVector) = (yyvsp[(1) - (3)].ConstVector))->push_back((yyvsp[(3) - (3)].ConstVal));
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004835 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004836 ;}
4837 break;
4838
Dale Johannesen172f3112008-02-20 21:15:43 +00004839 case 200:
Devang Patelbd41a062008-02-22 19:31:30 +00004840#line 1971 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004841 {
4842 (yyval.ConstVector) = new std::vector<Constant*>();
4843 (yyval.ConstVector)->push_back((yyvsp[(1) - (1)].ConstVal));
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004844 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004845 ;}
4846 break;
4847
Dale Johannesen172f3112008-02-20 21:15:43 +00004848 case 201:
Devang Patelbd41a062008-02-22 19:31:30 +00004849#line 1979 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004850 { (yyval.BoolVal) = false; ;}
4851 break;
4852
Chris Lattner38905612008-02-19 04:36:25 +00004853 case 202:
Devang Patelbd41a062008-02-22 19:31:30 +00004854#line 1979 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004855 { (yyval.BoolVal) = true; ;}
4856 break;
4857
4858 case 203:
Devang Patelbd41a062008-02-22 19:31:30 +00004859#line 1982 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Dale Johannesen172f3112008-02-20 21:15:43 +00004860 { (yyval.BoolVal) = true; ;}
Chris Lattner38905612008-02-19 04:36:25 +00004861 break;
4862
4863 case 204:
Devang Patelbd41a062008-02-22 19:31:30 +00004864#line 1982 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Dale Johannesen172f3112008-02-20 21:15:43 +00004865 { (yyval.BoolVal) = false; ;}
4866 break;
4867
4868 case 205:
Devang Patelbd41a062008-02-22 19:31:30 +00004869#line 1985 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004870 {
4871 const Type* VTy = (yyvsp[(1) - (2)].TypeVal)->get();
4872 Value *V = getVal(VTy, (yyvsp[(2) - (2)].ValIDVal));
Chris Lattner0275cff2007-08-06 21:00:46 +00004873 CHECK_FOR_ERROR
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004874 GlobalValue* Aliasee = dyn_cast<GlobalValue>(V);
4875 if (!Aliasee)
4876 GEN_ERROR("Aliases can be created only to global values");
4877
Chris Lattner38905612008-02-19 04:36:25 +00004878 (yyval.ConstVal) = Aliasee;
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004879 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004880 delete (yyvsp[(1) - (2)].TypeVal);
4881 ;}
4882 break;
4883
Dale Johannesen172f3112008-02-20 21:15:43 +00004884 case 206:
Devang Patelbd41a062008-02-22 19:31:30 +00004885#line 1997 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004886 {
4887 Constant *Val = (yyvsp[(3) - (6)].ConstVal);
4888 const Type *DestTy = (yyvsp[(5) - (6)].TypeVal)->get();
4889 if (!CastInst::castIsValid((yyvsp[(1) - (6)].CastOpVal), (yyvsp[(3) - (6)].ConstVal), DestTy))
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004890 GEN_ERROR("invalid cast opcode for cast from '" +
4891 Val->getType()->getDescription() + "' to '" +
4892 DestTy->getDescription() + "'");
4893
Chris Lattner38905612008-02-19 04:36:25 +00004894 (yyval.ConstVal) = ConstantExpr::getCast((yyvsp[(1) - (6)].CastOpVal), (yyvsp[(3) - (6)].ConstVal), DestTy);
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004895 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004896 delete (yyvsp[(5) - (6)].TypeVal);
4897 ;}
4898 break;
4899
Chris Lattner38905612008-02-19 04:36:25 +00004900 case 207:
Devang Patelbd41a062008-02-22 19:31:30 +00004901#line 2018 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004902 {
4903 (yyval.ModuleVal) = ParserResult = CurModule.CurrentModule;
Christopher Lambbf3348d2007-12-12 08:45:45 +00004904 CurModule.ModuleDone();
4905 CHECK_FOR_ERROR;
Chris Lattner38905612008-02-19 04:36:25 +00004906 ;}
4907 break;
4908
Dale Johannesen172f3112008-02-20 21:15:43 +00004909 case 208:
Devang Patelbd41a062008-02-22 19:31:30 +00004910#line 2023 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Dale Johannesen172f3112008-02-20 21:15:43 +00004911 {
4912 (yyval.ModuleVal) = ParserResult = CurModule.CurrentModule;
4913 CurModule.ModuleDone();
4914 CHECK_FOR_ERROR;
4915 ;}
Chris Lattner38905612008-02-19 04:36:25 +00004916 break;
4917
4918 case 211:
Devang Patelbd41a062008-02-22 19:31:30 +00004919#line 2036 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Dale Johannesen172f3112008-02-20 21:15:43 +00004920 { CurFun.isDeclare = false; ;}
4921 break;
4922
4923 case 212:
Devang Patelbd41a062008-02-22 19:31:30 +00004924#line 2036 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004925 {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004926 CurFun.FunctionDone();
4927 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004928 ;}
4929 break;
4930
Dale Johannesen172f3112008-02-20 21:15:43 +00004931 case 213:
Devang Patelbd41a062008-02-22 19:31:30 +00004932#line 2040 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004933 { CurFun.isDeclare = true; ;}
4934 break;
4935
Chris Lattner38905612008-02-19 04:36:25 +00004936 case 214:
Devang Patelbd41a062008-02-22 19:31:30 +00004937#line 2040 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004938 {
Christopher Lambbf3348d2007-12-12 08:45:45 +00004939 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004940 ;}
4941 break;
4942
4943 case 215:
Devang Patelbd41a062008-02-22 19:31:30 +00004944#line 2043 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Dale Johannesen172f3112008-02-20 21:15:43 +00004945 {
4946 CHECK_FOR_ERROR
4947 ;}
4948 break;
4949
4950 case 216:
Devang Patelbd41a062008-02-22 19:31:30 +00004951#line 2046 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004952 {
Reid Spencer14310612006-12-31 05:40:51 +00004953 if (!UpRefs.empty())
Chris Lattner38905612008-02-19 04:36:25 +00004954 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(3) - (3)].TypeVal))->getDescription());
Reid Spencer68a24bd2005-08-27 18:50:39 +00004955 // Eagerly resolve types. This is not an optimization, this is a
4956 // requirement that is due to the fact that we could have this:
4957 //
4958 // %list = type { %list * }
4959 // %list = type { %list * } ; repeated type decl
4960 //
4961 // If types are not resolved eagerly, then the two types will not be
4962 // determined to be the same type!
4963 //
Chris Lattner38905612008-02-19 04:36:25 +00004964 ResolveTypeTo((yyvsp[(1) - (3)].StrVal), *(yyvsp[(3) - (3)].TypeVal));
Reid Spencer68a24bd2005-08-27 18:50:39 +00004965
Chris Lattner38905612008-02-19 04:36:25 +00004966 if (!setTypeName(*(yyvsp[(3) - (3)].TypeVal), (yyvsp[(1) - (3)].StrVal)) && !(yyvsp[(1) - (3)].StrVal)) {
Reid Spencer5b7e7532006-09-28 19:28:24 +00004967 CHECK_FOR_ERROR
Reid Spencer68a24bd2005-08-27 18:50:39 +00004968 // If this is a named type that is not a redefinition, add it to the slot
4969 // table.
Chris Lattner38905612008-02-19 04:36:25 +00004970 CurModule.Types.push_back(*(yyvsp[(3) - (3)].TypeVal));
Reid Spencer68a24bd2005-08-27 18:50:39 +00004971 }
Reid Spencera132e042006-12-03 05:46:11 +00004972
Chris Lattner38905612008-02-19 04:36:25 +00004973 delete (yyvsp[(3) - (3)].TypeVal);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004974 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004975 ;}
4976 break;
Reid Spencerb8f85052007-07-31 03:50:36 +00004977
Dale Johannesen172f3112008-02-20 21:15:43 +00004978 case 217:
Devang Patelbd41a062008-02-22 19:31:30 +00004979#line 2070 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004980 {
4981 ResolveTypeTo((yyvsp[(1) - (3)].StrVal), (yyvsp[(3) - (3)].PrimType));
4982
4983 if (!setTypeName((yyvsp[(3) - (3)].PrimType), (yyvsp[(1) - (3)].StrVal)) && !(yyvsp[(1) - (3)].StrVal)) {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004984 CHECK_FOR_ERROR
4985 // If this is a named type that is not a redefinition, add it to the slot
4986 // table.
Chris Lattner38905612008-02-19 04:36:25 +00004987 CurModule.Types.push_back((yyvsp[(3) - (3)].PrimType));
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004988 }
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004989 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00004990 ;}
4991 break;
4992
Dale Johannesen172f3112008-02-20 21:15:43 +00004993 case 218:
Devang Patelbd41a062008-02-22 19:31:30 +00004994#line 2082 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00004995 {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004996 /* "Externally Visible" Linkage */
Chris Lattner38905612008-02-19 04:36:25 +00004997 if ((yyvsp[(5) - (6)].ConstVal) == 0)
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004998 GEN_ERROR("Global value initializer is not a constant");
Chris Lattner38905612008-02-19 04:36:25 +00004999 CurGV = ParseGlobalVariable((yyvsp[(1) - (6)].StrVal), GlobalValue::ExternalLinkage,
5000 (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 +00005001 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005002 ;}
5003 break;
5004
Dale Johannesen172f3112008-02-20 21:15:43 +00005005 case 219:
Devang Patelbd41a062008-02-22 19:31:30 +00005006#line 2089 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005007 {
Christopher Lambbf3348d2007-12-12 08:45:45 +00005008 CurGV = 0;
Chris Lattner38905612008-02-19 04:36:25 +00005009 ;}
5010 break;
5011
Dale Johannesen172f3112008-02-20 21:15:43 +00005012 case 220:
Devang Patelbd41a062008-02-22 19:31:30 +00005013#line 2093 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005014 {
5015 if ((yyvsp[(6) - (7)].ConstVal) == 0)
Christopher Lambbf3348d2007-12-12 08:45:45 +00005016 GEN_ERROR("Global value initializer is not a constant");
Chris Lattner38905612008-02-19 04:36:25 +00005017 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 +00005018 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005019 ;}
5020 break;
5021
Dale Johannesen172f3112008-02-20 21:15:43 +00005022 case 221:
Devang Patelbd41a062008-02-22 19:31:30 +00005023#line 2098 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005024 {
Christopher Lambbf3348d2007-12-12 08:45:45 +00005025 CurGV = 0;
Chris Lattner38905612008-02-19 04:36:25 +00005026 ;}
5027 break;
5028
Dale Johannesen172f3112008-02-20 21:15:43 +00005029 case 222:
Devang Patelbd41a062008-02-22 19:31:30 +00005030#line 2102 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005031 {
Christopher Lambbf3348d2007-12-12 08:45:45 +00005032 if (!UpRefs.empty())
Chris Lattner38905612008-02-19 04:36:25 +00005033 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(6) - (7)].TypeVal))->getDescription());
5034 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 +00005035 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005036 delete (yyvsp[(6) - (7)].TypeVal);
5037 ;}
5038 break;
5039
Dale Johannesen172f3112008-02-20 21:15:43 +00005040 case 223:
Devang Patelbd41a062008-02-22 19:31:30 +00005041#line 2108 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005042 {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005043 CurGV = 0;
Reid Spencer41dff5e2007-01-26 08:05:27 +00005044 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005045 ;}
5046 break;
5047
Dale Johannesen172f3112008-02-20 21:15:43 +00005048 case 224:
Devang Patelbd41a062008-02-22 19:31:30 +00005049#line 2112 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005050 {
Reid Spencer0a8a16b2007-05-22 18:52:55 +00005051 std::string Name;
Chris Lattner38905612008-02-19 04:36:25 +00005052 if ((yyvsp[(1) - (5)].StrVal)) {
5053 Name = *(yyvsp[(1) - (5)].StrVal);
5054 delete (yyvsp[(1) - (5)].StrVal);
Reid Spencer0a8a16b2007-05-22 18:52:55 +00005055 }
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005056 if (Name.empty())
5057 GEN_ERROR("Alias name cannot be empty");
5058
Chris Lattner38905612008-02-19 04:36:25 +00005059 Constant* Aliasee = (yyvsp[(5) - (5)].ConstVal);
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005060 if (Aliasee == 0)
Reid Spencer0a8a16b2007-05-22 18:52:55 +00005061 GEN_ERROR(std::string("Invalid aliasee for alias: ") + Name);
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005062
Chris Lattner38905612008-02-19 04:36:25 +00005063 GlobalAlias* GA = new GlobalAlias(Aliasee->getType(), (yyvsp[(4) - (5)].Linkage), Name, Aliasee,
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005064 CurModule.CurrentModule);
Chris Lattner38905612008-02-19 04:36:25 +00005065 GA->setVisibility((yyvsp[(2) - (5)].Visibility));
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005066 InsertValue(GA, CurModule.Values);
Chris Lattner569f7372007-09-10 23:24:14 +00005067
5068
5069 // If there was a forward reference of this alias, resolve it now.
5070
5071 ValID ID;
5072 if (!Name.empty())
5073 ID = ValID::createGlobalName(Name);
5074 else
5075 ID = ValID::createGlobalID(CurModule.Values.size()-1);
5076
5077 if (GlobalValue *FWGV =
5078 CurModule.GetForwardRefForGlobal(GA->getType(), ID)) {
5079 // Replace uses of the fwdref with the actual alias.
5080 FWGV->replaceAllUsesWith(GA);
5081 if (GlobalVariable *GV = dyn_cast<GlobalVariable>(FWGV))
5082 GV->eraseFromParent();
5083 else
5084 cast<Function>(FWGV)->eraseFromParent();
5085 }
5086 ID.destroy();
5087
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00005088 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005089 ;}
5090 break;
5091
Dale Johannesen172f3112008-02-20 21:15:43 +00005092 case 225:
Devang Patelbd41a062008-02-22 19:31:30 +00005093#line 2152 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005094 {
Anton Korobeynikov77d0f972007-04-25 14:29:12 +00005095 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005096 ;}
5097 break;
5098
Dale Johannesen172f3112008-02-20 21:15:43 +00005099 case 226:
Devang Patelbd41a062008-02-22 19:31:30 +00005100#line 2155 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005101 {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005102 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005103 ;}
5104 break;
5105
Dale Johannesen172f3112008-02-20 21:15:43 +00005106 case 227:
Devang Patelbd41a062008-02-22 19:31:30 +00005107#line 2161 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005108 {
Chris Lattner66316012006-01-24 04:14:29 +00005109 const std::string &AsmSoFar = CurModule.CurrentModule->getModuleInlineAsm();
Chris Lattner66316012006-01-24 04:14:29 +00005110 if (AsmSoFar.empty())
Chris Lattner38905612008-02-19 04:36:25 +00005111 CurModule.CurrentModule->setModuleInlineAsm(*(yyvsp[(1) - (1)].StrVal));
Chris Lattner66316012006-01-24 04:14:29 +00005112 else
Chris Lattner38905612008-02-19 04:36:25 +00005113 CurModule.CurrentModule->setModuleInlineAsm(AsmSoFar+"\n"+*(yyvsp[(1) - (1)].StrVal));
5114 delete (yyvsp[(1) - (1)].StrVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00005115 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005116;}
5117 break;
5118
Dale Johannesen172f3112008-02-20 21:15:43 +00005119 case 228:
Devang Patelbd41a062008-02-22 19:31:30 +00005120#line 2171 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005121 {
5122 CurModule.CurrentModule->setTargetTriple(*(yyvsp[(3) - (3)].StrVal));
5123 delete (yyvsp[(3) - (3)].StrVal);
5124 ;}
5125 break;
5126
Dale Johannesen172f3112008-02-20 21:15:43 +00005127 case 229:
Devang Patelbd41a062008-02-22 19:31:30 +00005128#line 2175 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005129 {
5130 CurModule.CurrentModule->setDataLayout(*(yyvsp[(3) - (3)].StrVal));
5131 delete (yyvsp[(3) - (3)].StrVal);
5132 ;}
5133 break;
5134
Dale Johannesen172f3112008-02-20 21:15:43 +00005135 case 231:
Devang Patelbd41a062008-02-22 19:31:30 +00005136#line 2182 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005137 {
5138 CurModule.CurrentModule->addLibrary(*(yyvsp[(3) - (3)].StrVal));
5139 delete (yyvsp[(3) - (3)].StrVal);
Christopher Lambbf3348d2007-12-12 08:45:45 +00005140 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005141 ;}
5142 break;
5143
Dale Johannesen172f3112008-02-20 21:15:43 +00005144 case 232:
Devang Patelbd41a062008-02-22 19:31:30 +00005145#line 2187 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005146 {
5147 CurModule.CurrentModule->addLibrary(*(yyvsp[(1) - (1)].StrVal));
5148 delete (yyvsp[(1) - (1)].StrVal);
Reid Spencer1013b4d2007-07-31 14:41:17 +00005149 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005150 ;}
5151 break;
5152
Dale Johannesen172f3112008-02-20 21:15:43 +00005153 case 233:
Devang Patelbd41a062008-02-22 19:31:30 +00005154#line 2192 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005155 {
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005156 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005157 ;}
5158 break;
5159
Dale Johannesen172f3112008-02-20 21:15:43 +00005160 case 234:
Devang Patelbd41a062008-02-22 19:31:30 +00005161#line 2201 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005162 {
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005163 if (!UpRefs.empty())
Chris Lattner38905612008-02-19 04:36:25 +00005164 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(3) - (5)].TypeVal))->getDescription());
5165 if (*(yyvsp[(3) - (5)].TypeVal) == Type::VoidTy)
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005166 GEN_ERROR("void typed arguments are invalid");
Chris Lattner38905612008-02-19 04:36:25 +00005167 ArgListEntry E; E.Attrs = (yyvsp[(4) - (5)].ParamAttrs); E.Ty = (yyvsp[(3) - (5)].TypeVal); E.Name = (yyvsp[(5) - (5)].StrVal);
5168 (yyval.ArgList) = (yyvsp[(1) - (5)].ArgList);
5169 (yyvsp[(1) - (5)].ArgList)->push_back(E);
Reid Spencer6f407902007-01-13 05:00:46 +00005170 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005171 ;}
5172 break;
5173
Dale Johannesen172f3112008-02-20 21:15:43 +00005174 case 235:
Devang Patelbd41a062008-02-22 19:31:30 +00005175#line 2211 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005176 {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005177 if (!UpRefs.empty())
Chris Lattner38905612008-02-19 04:36:25 +00005178 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (3)].TypeVal))->getDescription());
5179 if (*(yyvsp[(1) - (3)].TypeVal) == Type::VoidTy)
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005180 GEN_ERROR("void typed arguments are invalid");
Chris Lattner38905612008-02-19 04:36:25 +00005181 ArgListEntry E; E.Attrs = (yyvsp[(2) - (3)].ParamAttrs); E.Ty = (yyvsp[(1) - (3)].TypeVal); E.Name = (yyvsp[(3) - (3)].StrVal);
5182 (yyval.ArgList) = new ArgListType;
5183 (yyval.ArgList)->push_back(E);
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005184 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005185 ;}
5186 break;
5187
Dale Johannesen172f3112008-02-20 21:15:43 +00005188 case 236:
Devang Patelbd41a062008-02-22 19:31:30 +00005189#line 2222 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005190 {
5191 (yyval.ArgList) = (yyvsp[(1) - (1)].ArgList);
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005192 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005193 ;}
5194 break;
5195
Dale Johannesen172f3112008-02-20 21:15:43 +00005196 case 237:
Devang Patelbd41a062008-02-22 19:31:30 +00005197#line 2226 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005198 {
5199 (yyval.ArgList) = (yyvsp[(1) - (3)].ArgList);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00005200 struct ArgListEntry E;
5201 E.Ty = new PATypeHolder(Type::VoidTy);
5202 E.Name = 0;
Reid Spencer18da0722007-04-11 02:44:20 +00005203 E.Attrs = ParamAttr::None;
Chris Lattner38905612008-02-19 04:36:25 +00005204 (yyval.ArgList)->push_back(E);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00005205 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005206 ;}
5207 break;
5208
Dale Johannesen172f3112008-02-20 21:15:43 +00005209 case 238:
Devang Patelbd41a062008-02-22 19:31:30 +00005210#line 2235 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005211 {
5212 (yyval.ArgList) = new ArgListType;
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005213 struct ArgListEntry E;
5214 E.Ty = new PATypeHolder(Type::VoidTy);
5215 E.Name = 0;
5216 E.Attrs = ParamAttr::None;
Chris Lattner38905612008-02-19 04:36:25 +00005217 (yyval.ArgList)->push_back(E);
Reid Spencer61c83e02006-08-18 08:43:06 +00005218 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005219 ;}
5220 break;
5221
Dale Johannesen172f3112008-02-20 21:15:43 +00005222 case 239:
Devang Patelbd41a062008-02-22 19:31:30 +00005223#line 2244 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005224 {
5225 (yyval.ArgList) = 0;
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005226 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005227 ;}
5228 break;
5229
Dale Johannesen172f3112008-02-20 21:15:43 +00005230 case 240:
Devang Patelbd41a062008-02-22 19:31:30 +00005231#line 2250 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005232 {
5233 std::string FunctionName(*(yyvsp[(3) - (10)].StrVal));
5234 delete (yyvsp[(3) - (10)].StrVal); // Free strdup'd memory!
Reid Spencer68a24bd2005-08-27 18:50:39 +00005235
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00005236 // Check the function result for abstractness if this is a define. We should
5237 // have no abstract types at this point
Chris Lattner38905612008-02-19 04:36:25 +00005238 if (!CurFun.isDeclare && CurModule.TypeIsUnresolved((yyvsp[(2) - (10)].TypeVal)))
5239 GEN_ERROR("Reference to abstract result: "+ (yyvsp[(2) - (10)].TypeVal)->get()->getDescription());
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00005240
Reid Spencer68a24bd2005-08-27 18:50:39 +00005241 std::vector<const Type*> ParamTypeList;
Christopher Lamb5c104242007-04-22 20:09:11 +00005242 ParamAttrsVector Attrs;
Chris Lattner38905612008-02-19 04:36:25 +00005243 if ((yyvsp[(7) - (10)].ParamAttrs) != ParamAttr::None) {
Duncan Sandsdc024672007-11-27 13:23:08 +00005244 ParamAttrsWithIndex PAWI;
5245 PAWI.index = 0;
Chris Lattner38905612008-02-19 04:36:25 +00005246 PAWI.attrs = (yyvsp[(7) - (10)].ParamAttrs);
Christopher Lamb5c104242007-04-22 20:09:11 +00005247 Attrs.push_back(PAWI);
5248 }
Chris Lattner38905612008-02-19 04:36:25 +00005249 if ((yyvsp[(5) - (10)].ArgList)) { // If there are arguments...
Reid Spencer7b5d4662007-04-09 06:16:21 +00005250 unsigned index = 1;
Chris Lattner38905612008-02-19 04:36:25 +00005251 for (ArgListType::iterator I = (yyvsp[(5) - (10)].ArgList)->begin(); I != (yyvsp[(5) - (10)].ArgList)->end(); ++I, ++index) {
Reid Spencer14310612006-12-31 05:40:51 +00005252 const Type* Ty = I->Ty->get();
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00005253 if (!CurFun.isDeclare && CurModule.TypeIsUnresolved(I->Ty))
5254 GEN_ERROR("Reference to abstract argument: " + Ty->getDescription());
Reid Spencer14310612006-12-31 05:40:51 +00005255 ParamTypeList.push_back(Ty);
5256 if (Ty != Type::VoidTy)
Christopher Lamb5c104242007-04-22 20:09:11 +00005257 if (I->Attrs != ParamAttr::None) {
Duncan Sandsdc024672007-11-27 13:23:08 +00005258 ParamAttrsWithIndex PAWI;
5259 PAWI.index = index;
5260 PAWI.attrs = I->Attrs;
Christopher Lamb5c104242007-04-22 20:09:11 +00005261 Attrs.push_back(PAWI);
5262 }
Reid Spencer14310612006-12-31 05:40:51 +00005263 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00005264 }
5265
5266 bool isVarArg = ParamTypeList.size() && ParamTypeList.back() == Type::VoidTy;
5267 if (isVarArg) ParamTypeList.pop_back();
5268
Duncan Sandsafa3b6d2007-11-28 17:07:01 +00005269 const ParamAttrsList *PAL = 0;
Christopher Lamb5c104242007-04-22 20:09:11 +00005270 if (!Attrs.empty())
5271 PAL = ParamAttrsList::get(Attrs);
Reid Spencer7b5d4662007-04-09 06:16:21 +00005272
Chris Lattner38905612008-02-19 04:36:25 +00005273 FunctionType *FT = FunctionType::get(*(yyvsp[(2) - (10)].TypeVal), ParamTypeList, isVarArg);
Christopher Lamb4374f8e2007-12-17 01:17:35 +00005274 const PointerType *PFT = PointerType::getUnqual(FT);
Chris Lattner38905612008-02-19 04:36:25 +00005275 delete (yyvsp[(2) - (10)].TypeVal);
Reid Spencer68a24bd2005-08-27 18:50:39 +00005276
5277 ValID ID;
5278 if (!FunctionName.empty()) {
Reid Spencer41dff5e2007-01-26 08:05:27 +00005279 ID = ValID::createGlobalName((char*)FunctionName.c_str());
Reid Spencer68a24bd2005-08-27 18:50:39 +00005280 } else {
Reid Spencer93c40032007-03-19 18:40:50 +00005281 ID = ValID::createGlobalID(CurModule.Values.size());
Reid Spencer68a24bd2005-08-27 18:50:39 +00005282 }
5283
5284 Function *Fn = 0;
5285 // See if this function was forward referenced. If so, recycle the object.
5286 if (GlobalValue *FWRef = CurModule.GetForwardRefForGlobal(PFT, ID)) {
5287 // Move the function to the end of the list, from whereever it was
5288 // previously inserted.
5289 Fn = cast<Function>(FWRef);
Duncan Sandsdc024672007-11-27 13:23:08 +00005290 assert(!Fn->getParamAttrs() && "Forward reference has parameter attributes!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00005291 CurModule.CurrentModule->getFunctionList().remove(Fn);
5292 CurModule.CurrentModule->getFunctionList().push_back(Fn);
5293 } else if (!FunctionName.empty() && // Merge with an earlier prototype?
Reid Spenceref9b9a72007-02-05 20:47:22 +00005294 (Fn = CurModule.CurrentModule->getFunction(FunctionName))) {
Duncan Sandsdc024672007-11-27 13:23:08 +00005295 if (Fn->getFunctionType() != FT ) {
Reid Spenceref9b9a72007-02-05 20:47:22 +00005296 // The existing function doesn't have the same type. This is an overload
5297 // error.
5298 GEN_ERROR("Overload of function '" + FunctionName + "' not permitted.");
Duncan Sandsdc024672007-11-27 13:23:08 +00005299 } else if (Fn->getParamAttrs() != PAL) {
5300 // The existing function doesn't have the same parameter attributes.
5301 // This is an overload error.
5302 GEN_ERROR("Overload of function '" + FunctionName + "' not permitted.");
Reid Spenceref9b9a72007-02-05 20:47:22 +00005303 } else if (!CurFun.isDeclare && !Fn->isDeclaration()) {
Chris Lattner6cdc6822007-04-26 05:31:05 +00005304 // Neither the existing or the current function is a declaration and they
5305 // have the same name and same type. Clearly this is a redefinition.
5306 GEN_ERROR("Redefinition of function '" + FunctionName + "'");
Duncan Sandsdc024672007-11-27 13:23:08 +00005307 } else if (Fn->isDeclaration()) {
Reid Spenceref9b9a72007-02-05 20:47:22 +00005308 // Make sure to strip off any argument names so we can't get conflicts.
Reid Spencer68a24bd2005-08-27 18:50:39 +00005309 for (Function::arg_iterator AI = Fn->arg_begin(), AE = Fn->arg_end();
5310 AI != AE; ++AI)
5311 AI->setName("");
Reid Spenceref9b9a72007-02-05 20:47:22 +00005312 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00005313 } else { // Not already defined?
Chris Lattner6cdc6822007-04-26 05:31:05 +00005314 Fn = new Function(FT, GlobalValue::ExternalWeakLinkage, FunctionName,
Reid Spencer68a24bd2005-08-27 18:50:39 +00005315 CurModule.CurrentModule);
5316 InsertValue(Fn, CurModule.Values);
5317 }
5318
5319 CurFun.FunctionStart(Fn);
Anton Korobeynikov93c2b372006-09-17 13:06:18 +00005320
5321 if (CurFun.isDeclare) {
5322 // If we have declaration, always overwrite linkage. This will allow us to
5323 // correctly handle cases, when pointer to function is passed as argument to
5324 // another function.
5325 Fn->setLinkage(CurFun.Linkage);
Anton Korobeynikov178a3522007-01-12 19:22:51 +00005326 Fn->setVisibility(CurFun.Visibility);
Anton Korobeynikov93c2b372006-09-17 13:06:18 +00005327 }
Chris Lattner38905612008-02-19 04:36:25 +00005328 Fn->setCallingConv((yyvsp[(1) - (10)].UIntVal));
Duncan Sandsdc024672007-11-27 13:23:08 +00005329 Fn->setParamAttrs(PAL);
Chris Lattner38905612008-02-19 04:36:25 +00005330 Fn->setAlignment((yyvsp[(9) - (10)].UIntVal));
5331 if ((yyvsp[(8) - (10)].StrVal)) {
5332 Fn->setSection(*(yyvsp[(8) - (10)].StrVal));
5333 delete (yyvsp[(8) - (10)].StrVal);
Gordon Henriksen80a75bf2007-12-10 03:18:06 +00005334 }
Chris Lattner38905612008-02-19 04:36:25 +00005335 if ((yyvsp[(10) - (10)].StrVal)) {
5336 Fn->setCollector((yyvsp[(10) - (10)].StrVal)->c_str());
5337 delete (yyvsp[(10) - (10)].StrVal);
Chris Lattnere869eef2005-11-12 00:11:49 +00005338 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00005339
5340 // Add all of the arguments we parsed to the function...
Chris Lattner38905612008-02-19 04:36:25 +00005341 if ((yyvsp[(5) - (10)].ArgList)) { // Is null if empty...
Reid Spencer68a24bd2005-08-27 18:50:39 +00005342 if (isVarArg) { // Nuke the last entry
Chris Lattner38905612008-02-19 04:36:25 +00005343 assert((yyvsp[(5) - (10)].ArgList)->back().Ty->get() == Type::VoidTy && (yyvsp[(5) - (10)].ArgList)->back().Name == 0 &&
Reid Spencera9720f52007-02-05 17:04:00 +00005344 "Not a varargs marker!");
Chris Lattner38905612008-02-19 04:36:25 +00005345 delete (yyvsp[(5) - (10)].ArgList)->back().Ty;
5346 (yyvsp[(5) - (10)].ArgList)->pop_back(); // Delete the last entry
Reid Spencer68a24bd2005-08-27 18:50:39 +00005347 }
5348 Function::arg_iterator ArgIt = Fn->arg_begin();
Reid Spenceref9b9a72007-02-05 20:47:22 +00005349 Function::arg_iterator ArgEnd = Fn->arg_end();
Reid Spencer14310612006-12-31 05:40:51 +00005350 unsigned Idx = 1;
Chris Lattner38905612008-02-19 04:36:25 +00005351 for (ArgListType::iterator I = (yyvsp[(5) - (10)].ArgList)->begin();
5352 I != (yyvsp[(5) - (10)].ArgList)->end() && ArgIt != ArgEnd; ++I, ++ArgIt) {
Reid Spencer14310612006-12-31 05:40:51 +00005353 delete I->Ty; // Delete the typeholder...
Reid Spencer0a8a16b2007-05-22 18:52:55 +00005354 setValueName(ArgIt, I->Name); // Insert arg into symtab...
Reid Spencer5b7e7532006-09-28 19:28:24 +00005355 CHECK_FOR_ERROR
Reid Spencer68a24bd2005-08-27 18:50:39 +00005356 InsertValue(ArgIt);
Reid Spencer14310612006-12-31 05:40:51 +00005357 Idx++;
Reid Spencer68a24bd2005-08-27 18:50:39 +00005358 }
Reid Spencera132e042006-12-03 05:46:11 +00005359
Chris Lattner38905612008-02-19 04:36:25 +00005360 delete (yyvsp[(5) - (10)].ArgList); // We're now done with the argument list
Reid Spencer68a24bd2005-08-27 18:50:39 +00005361 }
Reid Spencer61c83e02006-08-18 08:43:06 +00005362 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005363;}
5364 break;
5365
Dale Johannesen172f3112008-02-20 21:15:43 +00005366 case 243:
Devang Patelbd41a062008-02-22 19:31:30 +00005367#line 2385 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005368 {
5369 (yyval.FunctionVal) = CurFun.CurrentFunction;
Reid Spencer68a24bd2005-08-27 18:50:39 +00005370
5371 // Make sure that we keep track of the linkage type even if there was a
5372 // previous "declare".
Chris Lattner38905612008-02-19 04:36:25 +00005373 (yyval.FunctionVal)->setLinkage((yyvsp[(1) - (4)].Linkage));
5374 (yyval.FunctionVal)->setVisibility((yyvsp[(2) - (4)].Visibility));
5375;}
5376 break;
5377
Dale Johannesen172f3112008-02-20 21:15:43 +00005378 case 246:
Devang Patelbd41a062008-02-22 19:31:30 +00005379#line 2396 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005380 {
5381 (yyval.FunctionVal) = (yyvsp[(1) - (2)].FunctionVal);
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005382 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005383;}
5384 break;
5385
Dale Johannesen172f3112008-02-20 21:15:43 +00005386 case 247:
Devang Patelbd41a062008-02-22 19:31:30 +00005387#line 2401 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005388 {
5389 CurFun.CurrentFunction->setLinkage((yyvsp[(1) - (3)].Linkage));
5390 CurFun.CurrentFunction->setVisibility((yyvsp[(2) - (3)].Visibility));
5391 (yyval.FunctionVal) = CurFun.CurrentFunction;
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005392 CurFun.FunctionDone();
Reid Spencer41dff5e2007-01-26 08:05:27 +00005393 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005394 ;}
5395 break;
5396
Dale Johannesen172f3112008-02-20 21:15:43 +00005397 case 248:
Devang Patelbd41a062008-02-22 19:31:30 +00005398#line 2413 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005399 {
5400 (yyval.BoolVal) = false;
Reid Spencer61c83e02006-08-18 08:43:06 +00005401 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005402 ;}
5403 break;
5404
Dale Johannesen172f3112008-02-20 21:15:43 +00005405 case 249:
Devang Patelbd41a062008-02-22 19:31:30 +00005406#line 2417 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005407 {
5408 (yyval.BoolVal) = true;
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00005409 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005410 ;}
5411 break;
5412
Dale Johannesen172f3112008-02-20 21:15:43 +00005413 case 250:
Devang Patelbd41a062008-02-22 19:31:30 +00005414#line 2422 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005415 { // A reference to a direct constant
5416 (yyval.ValIDVal) = ValID::create((yyvsp[(1) - (1)].SInt64Val));
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005417 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005418 ;}
5419 break;
5420
Dale Johannesen172f3112008-02-20 21:15:43 +00005421 case 251:
Devang Patelbd41a062008-02-22 19:31:30 +00005422#line 2426 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005423 {
5424 (yyval.ValIDVal) = ValID::create((yyvsp[(1) - (1)].UInt64Val));
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005425 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005426 ;}
5427 break;
5428
Dale Johannesen172f3112008-02-20 21:15:43 +00005429 case 252:
Devang Patelbd41a062008-02-22 19:31:30 +00005430#line 2430 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005431 { // Perhaps it's an FP constant?
5432 (yyval.ValIDVal) = ValID::create((yyvsp[(1) - (1)].FPVal));
Reid Spencere4d87aa2006-12-23 06:05:41 +00005433 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005434 ;}
5435 break;
5436
Dale Johannesen172f3112008-02-20 21:15:43 +00005437 case 253:
Devang Patelbd41a062008-02-22 19:31:30 +00005438#line 2434 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005439 {
5440 (yyval.ValIDVal) = ValID::create(ConstantInt::getTrue());
Reid Spencere4d87aa2006-12-23 06:05:41 +00005441 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005442 ;}
5443 break;
5444
Dale Johannesen172f3112008-02-20 21:15:43 +00005445 case 254:
Devang Patelbd41a062008-02-22 19:31:30 +00005446#line 2438 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005447 {
5448 (yyval.ValIDVal) = ValID::create(ConstantInt::getFalse());
Zhou Sheng6b6b6ef2007-01-11 12:24:14 +00005449 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005450 ;}
5451 break;
5452
Dale Johannesen172f3112008-02-20 21:15:43 +00005453 case 255:
Devang Patelbd41a062008-02-22 19:31:30 +00005454#line 2442 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005455 {
5456 (yyval.ValIDVal) = ValID::createNull();
Zhou Sheng6b6b6ef2007-01-11 12:24:14 +00005457 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005458 ;}
5459 break;
5460
Dale Johannesen172f3112008-02-20 21:15:43 +00005461 case 256:
Devang Patelbd41a062008-02-22 19:31:30 +00005462#line 2446 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005463 {
5464 (yyval.ValIDVal) = ValID::createUndef();
Reid Spencer61c83e02006-08-18 08:43:06 +00005465 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005466 ;}
5467 break;
5468
Dale Johannesen172f3112008-02-20 21:15:43 +00005469 case 257:
Devang Patelbd41a062008-02-22 19:31:30 +00005470#line 2450 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005471 { // A vector zero constant.
5472 (yyval.ValIDVal) = ValID::createZeroInit();
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005473 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005474 ;}
5475 break;
5476
Dale Johannesen172f3112008-02-20 21:15:43 +00005477 case 258:
Devang Patelbd41a062008-02-22 19:31:30 +00005478#line 2454 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005479 { // Nonempty unsized packed vector
5480 const Type *ETy = (*(yyvsp[(2) - (3)].ConstVector))[0]->getType();
5481 int NumElements = (yyvsp[(2) - (3)].ConstVector)->size();
Reid Spencer68a24bd2005-08-27 18:50:39 +00005482
Reid Spencer9d6565a2007-02-15 02:26:10 +00005483 VectorType* pt = VectorType::get(ETy, NumElements);
Reid Spencer68a24bd2005-08-27 18:50:39 +00005484 PATypeHolder* PTy = new PATypeHolder(
Reid Spencera132e042006-12-03 05:46:11 +00005485 HandleUpRefs(
Reid Spencer9d6565a2007-02-15 02:26:10 +00005486 VectorType::get(
Reid Spencera132e042006-12-03 05:46:11 +00005487 ETy,
5488 NumElements)
5489 )
5490 );
Reid Spencer68a24bd2005-08-27 18:50:39 +00005491
5492 // Verify all elements are correct type!
Chris Lattner38905612008-02-19 04:36:25 +00005493 for (unsigned i = 0; i < (yyvsp[(2) - (3)].ConstVector)->size(); i++) {
5494 if (ETy != (*(yyvsp[(2) - (3)].ConstVector))[i]->getType())
Reid Spencer61c83e02006-08-18 08:43:06 +00005495 GEN_ERROR("Element #" + utostr(i) + " is not of type '" +
Reid Spencer68a24bd2005-08-27 18:50:39 +00005496 ETy->getDescription() +"' as required!\nIt is of type '" +
Chris Lattner38905612008-02-19 04:36:25 +00005497 (*(yyvsp[(2) - (3)].ConstVector))[i]->getType()->getDescription() + "'.");
Reid Spencer68a24bd2005-08-27 18:50:39 +00005498 }
5499
Chris Lattner38905612008-02-19 04:36:25 +00005500 (yyval.ValIDVal) = ValID::create(ConstantVector::get(pt, *(yyvsp[(2) - (3)].ConstVector)));
5501 delete PTy; delete (yyvsp[(2) - (3)].ConstVector);
Reid Spencer832254e2007-02-02 02:16:23 +00005502 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005503 ;}
5504 break;
5505
Dale Johannesen172f3112008-02-20 21:15:43 +00005506 case 259:
Devang Patelbd41a062008-02-22 19:31:30 +00005507#line 2479 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005508 {
5509 (yyval.ValIDVal) = ValID::create((yyvsp[(1) - (1)].ConstVal));
Reid Spencer832254e2007-02-02 02:16:23 +00005510 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005511 ;}
5512 break;
5513
Dale Johannesen172f3112008-02-20 21:15:43 +00005514 case 260:
Devang Patelbd41a062008-02-22 19:31:30 +00005515#line 2483 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005516 {
5517 (yyval.ValIDVal) = ValID::createInlineAsm(*(yyvsp[(3) - (5)].StrVal), *(yyvsp[(5) - (5)].StrVal), (yyvsp[(2) - (5)].BoolVal));
5518 delete (yyvsp[(3) - (5)].StrVal);
5519 delete (yyvsp[(5) - (5)].StrVal);
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 261:
Devang Patelbd41a062008-02-22 19:31:30 +00005525#line 2493 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005526 { // Is it an integer reference...?
5527 (yyval.ValIDVal) = ValID::createLocalID((yyvsp[(1) - (1)].UIntVal));
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005528 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005529 ;}
5530 break;
5531
Dale Johannesen172f3112008-02-20 21:15:43 +00005532 case 262:
Devang Patelbd41a062008-02-22 19:31:30 +00005533#line 2497 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005534 {
5535 (yyval.ValIDVal) = ValID::createGlobalID((yyvsp[(1) - (1)].UIntVal));
Reid Spencer832254e2007-02-02 02:16:23 +00005536 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005537 ;}
5538 break;
5539
Dale Johannesen172f3112008-02-20 21:15:43 +00005540 case 263:
Devang Patelbd41a062008-02-22 19:31:30 +00005541#line 2501 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005542 { // Is it a named reference...?
5543 (yyval.ValIDVal) = ValID::createLocalName(*(yyvsp[(1) - (1)].StrVal));
5544 delete (yyvsp[(1) - (1)].StrVal);
Reid Spencer832254e2007-02-02 02:16:23 +00005545 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005546 ;}
5547 break;
5548
Dale Johannesen172f3112008-02-20 21:15:43 +00005549 case 264:
Devang Patelbd41a062008-02-22 19:31:30 +00005550#line 2506 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005551 { // Is it a named reference...?
5552 (yyval.ValIDVal) = ValID::createGlobalName(*(yyvsp[(1) - (1)].StrVal));
5553 delete (yyvsp[(1) - (1)].StrVal);
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 267:
Devang Patelbd41a062008-02-22 19:31:30 +00005559#line 2519 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005560 {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005561 if (!UpRefs.empty())
Chris Lattner38905612008-02-19 04:36:25 +00005562 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (2)].TypeVal))->getDescription());
5563 (yyval.ValueVal) = getVal(*(yyvsp[(1) - (2)].TypeVal), (yyvsp[(2) - (2)].ValIDVal));
5564 delete (yyvsp[(1) - (2)].TypeVal);
Reid Spencer832254e2007-02-02 02:16:23 +00005565 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005566 ;}
5567 break;
5568
Dale Johannesen172f3112008-02-20 21:15:43 +00005569 case 268:
Devang Patelbd41a062008-02-22 19:31:30 +00005570#line 2528 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Devang Patel7990dc72008-02-20 22:40:23 +00005571 {
5572 (yyval.ValueList) = new std::vector<Value *>();
5573 (yyval.ValueList)->push_back((yyvsp[(1) - (1)].ValueVal));
5574 CHECK_FOR_ERROR
5575 ;}
5576 break;
5577
5578 case 269:
Devang Patelbd41a062008-02-22 19:31:30 +00005579#line 2533 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Devang Patel7990dc72008-02-20 22:40:23 +00005580 {
5581 ((yyval.ValueList)=(yyvsp[(1) - (3)].ValueList))->push_back((yyvsp[(3) - (3)].ConstVal));
5582 CHECK_FOR_ERROR
5583 ;}
5584 break;
5585
5586 case 270:
Devang Patelbd41a062008-02-22 19:31:30 +00005587#line 2538 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005588 {
5589 (yyval.FunctionVal) = (yyvsp[(1) - (2)].FunctionVal);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00005590 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005591 ;}
5592 break;
5593
Devang Patel7990dc72008-02-20 22:40:23 +00005594 case 271:
Devang Patelbd41a062008-02-22 19:31:30 +00005595#line 2542 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005596 { // Do not allow functions with 0 basic blocks
5597 (yyval.FunctionVal) = (yyvsp[(1) - (2)].FunctionVal);
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005598 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005599 ;}
5600 break;
5601
Devang Patel7990dc72008-02-20 22:40:23 +00005602 case 272:
Devang Patelbd41a062008-02-22 19:31:30 +00005603#line 2551 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005604 {
5605 setValueName((yyvsp[(3) - (3)].TermInstVal), (yyvsp[(2) - (3)].StrVal));
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005606 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005607 InsertValue((yyvsp[(3) - (3)].TermInstVal));
5608 (yyvsp[(1) - (3)].BasicBlockVal)->getInstList().push_back((yyvsp[(3) - (3)].TermInstVal));
5609 (yyval.BasicBlockVal) = (yyvsp[(1) - (3)].BasicBlockVal);
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005610 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005611 ;}
5612 break;
5613
Devang Patel7990dc72008-02-20 22:40:23 +00005614 case 273:
Devang Patelbd41a062008-02-22 19:31:30 +00005615#line 2560 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005616 {
5617 if (CastInst *CI1 = dyn_cast<CastInst>((yyvsp[(2) - (2)].InstVal)))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005618 if (CastInst *CI2 = dyn_cast<CastInst>(CI1->getOperand(0)))
5619 if (CI2->getParent() == 0)
Chris Lattner38905612008-02-19 04:36:25 +00005620 (yyvsp[(1) - (2)].BasicBlockVal)->getInstList().push_back(CI2);
5621 (yyvsp[(1) - (2)].BasicBlockVal)->getInstList().push_back((yyvsp[(2) - (2)].InstVal));
5622 (yyval.BasicBlockVal) = (yyvsp[(1) - (2)].BasicBlockVal);
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005623 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005624 ;}
5625 break;
5626
Devang Patel7990dc72008-02-20 22:40:23 +00005627 case 274:
Devang Patelbd41a062008-02-22 19:31:30 +00005628#line 2569 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005629 { // Empty space between instruction lists
5630 (yyval.BasicBlockVal) = defineBBVal(ValID::createLocalID(CurFun.NextValNum));
Reid Spencered951ea2007-05-19 07:22:10 +00005631 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005632 ;}
5633 break;
5634
Devang Patel7990dc72008-02-20 22:40:23 +00005635 case 275:
Devang Patelbd41a062008-02-22 19:31:30 +00005636#line 2573 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005637 { // Labelled (named) basic block
5638 (yyval.BasicBlockVal) = defineBBVal(ValID::createLocalName(*(yyvsp[(1) - (1)].StrVal)));
5639 delete (yyvsp[(1) - (1)].StrVal);
Reid Spencered951ea2007-05-19 07:22:10 +00005640 CHECK_FOR_ERROR
Reid Spencer0a8a16b2007-05-22 18:52:55 +00005641
Chris Lattner38905612008-02-19 04:36:25 +00005642 ;}
5643 break;
Reid Spencerb8f85052007-07-31 03:50:36 +00005644
Devang Patel7990dc72008-02-20 22:40:23 +00005645 case 276:
Devang Patelbd41a062008-02-22 19:31:30 +00005646#line 2581 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Devang Patel7990dc72008-02-20 22:40:23 +00005647 { // Return with a result...
5648 if((yyvsp[(2) - (2)].ValueList)->size() == 1)
5649 (yyval.TermInstVal) = new ReturnInst((yyvsp[(2) - (2)].ValueList)->back());
5650 else {
5651
5652 std::vector<const Type*> Elements;
5653 std::vector<Constant*> Vals;
5654 for (std::vector<Value *>::iterator I = (yyvsp[(2) - (2)].ValueList)->begin(),
5655 E = (yyvsp[(2) - (2)].ValueList)->end(); I != E; ++I) {
5656 Value *V = *I;
5657 Constant *C = cast<Constant>(V);
5658 Elements.push_back(V->getType());
5659 Vals.push_back(C);
5660 }
5661
5662 const StructType *STy = StructType::get(Elements);
5663 PATypeHolder *PTy =
5664 new PATypeHolder(HandleUpRefs(StructType::get(Elements)));
5665
5666 Constant *CS = ConstantStruct::get(STy, Vals); // *$2);
5667 (yyval.TermInstVal) = new ReturnInst(CS);
5668 delete PTy;
5669 }
5670 delete (yyvsp[(2) - (2)].ValueList);
Chris Lattner38905612008-02-19 04:36:25 +00005671 CHECK_FOR_ERROR
5672 ;}
5673 break;
5674
Devang Patel7990dc72008-02-20 22:40:23 +00005675 case 277:
Devang Patelbd41a062008-02-22 19:31:30 +00005676#line 2607 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005677 { // Return with no result...
5678 (yyval.TermInstVal) = new ReturnInst();
5679 CHECK_FOR_ERROR
5680 ;}
5681 break;
5682
Devang Patel7990dc72008-02-20 22:40:23 +00005683 case 278:
Devang Patelbd41a062008-02-22 19:31:30 +00005684#line 2611 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005685 { // Unconditional Branch...
5686 BasicBlock* tmpBB = getBBVal((yyvsp[(3) - (3)].ValIDVal));
5687 CHECK_FOR_ERROR
5688 (yyval.TermInstVal) = new BranchInst(tmpBB);
5689 ;}
5690 break;
5691
Devang Patel7990dc72008-02-20 22:40:23 +00005692 case 279:
Devang Patelbd41a062008-02-22 19:31:30 +00005693#line 2616 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005694 {
5695 assert(cast<IntegerType>((yyvsp[(2) - (9)].PrimType))->getBitWidth() == 1 && "Not Bool?");
5696 BasicBlock* tmpBBA = getBBVal((yyvsp[(6) - (9)].ValIDVal));
5697 CHECK_FOR_ERROR
5698 BasicBlock* tmpBBB = getBBVal((yyvsp[(9) - (9)].ValIDVal));
5699 CHECK_FOR_ERROR
5700 Value* tmpVal = getVal(Type::Int1Ty, (yyvsp[(3) - (9)].ValIDVal));
5701 CHECK_FOR_ERROR
5702 (yyval.TermInstVal) = new BranchInst(tmpBBA, tmpBBB, tmpVal);
5703 ;}
5704 break;
5705
Devang Patel7990dc72008-02-20 22:40:23 +00005706 case 280:
Devang Patelbd41a062008-02-22 19:31:30 +00005707#line 2626 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005708 {
5709 Value* tmpVal = getVal((yyvsp[(2) - (9)].PrimType), (yyvsp[(3) - (9)].ValIDVal));
5710 CHECK_FOR_ERROR
5711 BasicBlock* tmpBB = getBBVal((yyvsp[(6) - (9)].ValIDVal));
5712 CHECK_FOR_ERROR
5713 SwitchInst *S = new SwitchInst(tmpVal, tmpBB, (yyvsp[(8) - (9)].JumpTable)->size());
5714 (yyval.TermInstVal) = S;
5715
5716 std::vector<std::pair<Constant*,BasicBlock*> >::iterator I = (yyvsp[(8) - (9)].JumpTable)->begin(),
5717 E = (yyvsp[(8) - (9)].JumpTable)->end();
Reid Spencer68a24bd2005-08-27 18:50:39 +00005718 for (; I != E; ++I) {
5719 if (ConstantInt *CI = dyn_cast<ConstantInt>(I->first))
5720 S->addCase(CI, I->second);
5721 else
Reid Spencerb5334b02007-02-05 10:18:06 +00005722 GEN_ERROR("Switch case is constant, but not a simple integer");
Reid Spencer68a24bd2005-08-27 18:50:39 +00005723 }
Chris Lattner38905612008-02-19 04:36:25 +00005724 delete (yyvsp[(8) - (9)].JumpTable);
Reid Spencer61c83e02006-08-18 08:43:06 +00005725 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005726 ;}
5727 break;
5728
Devang Patel7990dc72008-02-20 22:40:23 +00005729 case 281:
Devang Patelbd41a062008-02-22 19:31:30 +00005730#line 2645 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005731 {
5732 Value* tmpVal = getVal((yyvsp[(2) - (8)].PrimType), (yyvsp[(3) - (8)].ValIDVal));
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005733 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005734 BasicBlock* tmpBB = getBBVal((yyvsp[(6) - (8)].ValIDVal));
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005735 CHECK_FOR_ERROR
5736 SwitchInst *S = new SwitchInst(tmpVal, tmpBB, 0);
Chris Lattner38905612008-02-19 04:36:25 +00005737 (yyval.TermInstVal) = S;
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005738 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005739 ;}
5740 break;
5741
Devang Patel7990dc72008-02-20 22:40:23 +00005742 case 282:
Devang Patelbd41a062008-02-22 19:31:30 +00005743#line 2655 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005744 {
Reid Spencer3822ff52006-11-08 06:47:33 +00005745
Reid Spencer14310612006-12-31 05:40:51 +00005746 // Handle the short syntax
5747 const PointerType *PFTy = 0;
5748 const FunctionType *Ty = 0;
Chris Lattner38905612008-02-19 04:36:25 +00005749 if (!(PFTy = dyn_cast<PointerType>((yyvsp[(3) - (14)].TypeVal)->get())) ||
Reid Spencer68a24bd2005-08-27 18:50:39 +00005750 !(Ty = dyn_cast<FunctionType>(PFTy->getElementType()))) {
5751 // Pull out the types of all of the arguments...
5752 std::vector<const Type*> ParamTypes;
Chris Lattner38905612008-02-19 04:36:25 +00005753 ParamList::iterator I = (yyvsp[(6) - (14)].ParamList)->begin(), E = (yyvsp[(6) - (14)].ParamList)->end();
Duncan Sandsdc024672007-11-27 13:23:08 +00005754 for (; I != E; ++I) {
Reid Spencer14310612006-12-31 05:40:51 +00005755 const Type *Ty = I->Val->getType();
5756 if (Ty == Type::VoidTy)
5757 GEN_ERROR("Short call syntax cannot be used with varargs");
5758 ParamTypes.push_back(Ty);
Reid Spencer68a24bd2005-08-27 18:50:39 +00005759 }
Chris Lattner38905612008-02-19 04:36:25 +00005760 Ty = FunctionType::get((yyvsp[(3) - (14)].TypeVal)->get(), ParamTypes, false);
Christopher Lamb4374f8e2007-12-17 01:17:35 +00005761 PFTy = PointerType::getUnqual(Ty);
Reid Spencer68a24bd2005-08-27 18:50:39 +00005762 }
5763
Chris Lattner38905612008-02-19 04:36:25 +00005764 delete (yyvsp[(3) - (14)].TypeVal);
Reid Spencer66728ef2007-03-20 01:13:36 +00005765
Chris Lattner38905612008-02-19 04:36:25 +00005766 Value *V = getVal(PFTy, (yyvsp[(4) - (14)].ValIDVal)); // Get the function we're calling...
Andrew Lenharth6353e052006-12-08 18:07:09 +00005767 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005768 BasicBlock *Normal = getBBVal((yyvsp[(11) - (14)].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005769 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005770 BasicBlock *Except = getBBVal((yyvsp[(14) - (14)].ValIDVal));
Reid Spencer5b7e7532006-09-28 19:28:24 +00005771 CHECK_FOR_ERROR
Reid Spencer68a24bd2005-08-27 18:50:39 +00005772
Duncan Sandsdc024672007-11-27 13:23:08 +00005773 ParamAttrsVector Attrs;
Chris Lattner38905612008-02-19 04:36:25 +00005774 if ((yyvsp[(8) - (14)].ParamAttrs) != ParamAttr::None) {
5775 ParamAttrsWithIndex PAWI; PAWI.index = 0; PAWI.attrs = (yyvsp[(8) - (14)].ParamAttrs);
Duncan Sandsdc024672007-11-27 13:23:08 +00005776 Attrs.push_back(PAWI);
5777 }
5778
Reid Spencer14310612006-12-31 05:40:51 +00005779 // Check the arguments
5780 ValueList Args;
Chris Lattner38905612008-02-19 04:36:25 +00005781 if ((yyvsp[(6) - (14)].ParamList)->empty()) { // Has no arguments?
Reid Spencer14310612006-12-31 05:40:51 +00005782 // Make sure no arguments is a good thing!
5783 if (Ty->getNumParams() != 0)
5784 GEN_ERROR("No arguments passed to a function that "
Reid Spencerb5334b02007-02-05 10:18:06 +00005785 "expects arguments");
Reid Spencer68a24bd2005-08-27 18:50:39 +00005786 } else { // Has arguments?
5787 // Loop through FunctionType's arguments and ensure they are specified
5788 // correctly!
Reid Spencer68a24bd2005-08-27 18:50:39 +00005789 FunctionType::param_iterator I = Ty->param_begin();
5790 FunctionType::param_iterator E = Ty->param_end();
Chris Lattner38905612008-02-19 04:36:25 +00005791 ParamList::iterator ArgI = (yyvsp[(6) - (14)].ParamList)->begin(), ArgE = (yyvsp[(6) - (14)].ParamList)->end();
Duncan Sandsdc024672007-11-27 13:23:08 +00005792 unsigned index = 1;
Reid Spencer68a24bd2005-08-27 18:50:39 +00005793
Duncan Sandsdc024672007-11-27 13:23:08 +00005794 for (; ArgI != ArgE && I != E; ++ArgI, ++I, ++index) {
Reid Spencer14310612006-12-31 05:40:51 +00005795 if (ArgI->Val->getType() != *I)
5796 GEN_ERROR("Parameter " + ArgI->Val->getName()+ " is not of type '" +
Reid Spencerb5334b02007-02-05 10:18:06 +00005797 (*I)->getDescription() + "'");
Reid Spencer14310612006-12-31 05:40:51 +00005798 Args.push_back(ArgI->Val);
Duncan Sandsdc024672007-11-27 13:23:08 +00005799 if (ArgI->Attrs != ParamAttr::None) {
5800 ParamAttrsWithIndex PAWI;
5801 PAWI.index = index;
5802 PAWI.attrs = ArgI->Attrs;
5803 Attrs.push_back(PAWI);
5804 }
Reid Spencer14310612006-12-31 05:40:51 +00005805 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00005806
Reid Spencer14310612006-12-31 05:40:51 +00005807 if (Ty->isVarArg()) {
5808 if (I == E)
Chris Lattner38905612008-02-19 04:36:25 +00005809 for (; ArgI != ArgE; ++ArgI, ++index) {
Reid Spencer14310612006-12-31 05:40:51 +00005810 Args.push_back(ArgI->Val); // push the remaining varargs
Chris Lattner38905612008-02-19 04:36:25 +00005811 if (ArgI->Attrs != ParamAttr::None) {
5812 ParamAttrsWithIndex PAWI;
5813 PAWI.index = index;
5814 PAWI.attrs = ArgI->Attrs;
5815 Attrs.push_back(PAWI);
5816 }
5817 }
Reid Spencer14310612006-12-31 05:40:51 +00005818 } else if (I != E || ArgI != ArgE)
Reid Spencerb5334b02007-02-05 10:18:06 +00005819 GEN_ERROR("Invalid number of parameters detected");
Reid Spencer68a24bd2005-08-27 18:50:39 +00005820 }
Reid Spencer14310612006-12-31 05:40:51 +00005821
Duncan Sandsafa3b6d2007-11-28 17:07:01 +00005822 const ParamAttrsList *PAL = 0;
Duncan Sandsdc024672007-11-27 13:23:08 +00005823 if (!Attrs.empty())
5824 PAL = ParamAttrsList::get(Attrs);
5825
Reid Spencer14310612006-12-31 05:40:51 +00005826 // Create the InvokeInst
Chris Lattnerd80fb8b2007-08-29 16:15:23 +00005827 InvokeInst *II = new InvokeInst(V, Normal, Except, Args.begin(), Args.end());
Chris Lattner38905612008-02-19 04:36:25 +00005828 II->setCallingConv((yyvsp[(2) - (14)].UIntVal));
Duncan Sandsdc024672007-11-27 13:23:08 +00005829 II->setParamAttrs(PAL);
Chris Lattner38905612008-02-19 04:36:25 +00005830 (yyval.TermInstVal) = II;
5831 delete (yyvsp[(6) - (14)].ParamList);
Andrew Lenharth6353e052006-12-08 18:07:09 +00005832 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005833 ;}
5834 break;
5835
Devang Patel7990dc72008-02-20 22:40:23 +00005836 case 283:
Devang Patelbd41a062008-02-22 19:31:30 +00005837#line 2745 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005838 {
5839 (yyval.TermInstVal) = new UnwindInst();
Andrew Lenharth6353e052006-12-08 18:07:09 +00005840 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005841 ;}
5842 break;
5843
Devang Patel7990dc72008-02-20 22:40:23 +00005844 case 284:
Devang Patelbd41a062008-02-22 19:31:30 +00005845#line 2749 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005846 {
5847 (yyval.TermInstVal) = new UnreachableInst();
Andrew Lenharth6353e052006-12-08 18:07:09 +00005848 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005849 ;}
5850 break;
5851
Devang Patel7990dc72008-02-20 22:40:23 +00005852 case 285:
Devang Patelbd41a062008-02-22 19:31:30 +00005853#line 2756 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005854 {
5855 (yyval.JumpTable) = (yyvsp[(1) - (6)].JumpTable);
5856 Constant *V = cast<Constant>(getExistingVal((yyvsp[(2) - (6)].PrimType), (yyvsp[(3) - (6)].ValIDVal)));
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005857 CHECK_FOR_ERROR
5858 if (V == 0)
5859 GEN_ERROR("May only switch on a constant pool value");
5860
Chris Lattner38905612008-02-19 04:36:25 +00005861 BasicBlock* tmpBB = getBBVal((yyvsp[(6) - (6)].ValIDVal));
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005862 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005863 (yyval.JumpTable)->push_back(std::make_pair(V, tmpBB));
5864 ;}
5865 break;
5866
Devang Patel7990dc72008-02-20 22:40:23 +00005867 case 286:
Devang Patelbd41a062008-02-22 19:31:30 +00005868#line 2767 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005869 {
5870 (yyval.JumpTable) = new std::vector<std::pair<Constant*, BasicBlock*> >();
5871 Constant *V = cast<Constant>(getExistingVal((yyvsp[(1) - (5)].PrimType), (yyvsp[(2) - (5)].ValIDVal)));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005872 CHECK_FOR_ERROR
5873
5874 if (V == 0)
Reid Spencerb5334b02007-02-05 10:18:06 +00005875 GEN_ERROR("May only switch on a constant pool value");
Andrew Lenharth6353e052006-12-08 18:07:09 +00005876
Chris Lattner38905612008-02-19 04:36:25 +00005877 BasicBlock* tmpBB = getBBVal((yyvsp[(5) - (5)].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005878 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005879 (yyval.JumpTable)->push_back(std::make_pair(V, tmpBB));
5880 ;}
5881 break;
5882
Devang Patel7990dc72008-02-20 22:40:23 +00005883 case 287:
Devang Patelbd41a062008-02-22 19:31:30 +00005884#line 2780 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005885 {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005886 // Is this definition named?? if so, assign the name...
Chris Lattner38905612008-02-19 04:36:25 +00005887 setValueName((yyvsp[(2) - (2)].InstVal), (yyvsp[(1) - (2)].StrVal));
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005888 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005889 InsertValue((yyvsp[(2) - (2)].InstVal));
5890 (yyval.InstVal) = (yyvsp[(2) - (2)].InstVal);
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005891 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005892 ;}
5893 break;
5894
Devang Patel7990dc72008-02-20 22:40:23 +00005895 case 288:
Devang Patelbd41a062008-02-22 19:31:30 +00005896#line 2790 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005897 { // Used for PHI nodes
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005898 if (!UpRefs.empty())
Chris Lattner38905612008-02-19 04:36:25 +00005899 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (6)].TypeVal))->getDescription());
5900 (yyval.PHIList) = new std::list<std::pair<Value*, BasicBlock*> >();
5901 Value* tmpVal = getVal(*(yyvsp[(1) - (6)].TypeVal), (yyvsp[(3) - (6)].ValIDVal));
Reid Spencer6f407902007-01-13 05:00:46 +00005902 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005903 BasicBlock* tmpBB = getBBVal((yyvsp[(5) - (6)].ValIDVal));
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005904 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005905 (yyval.PHIList)->push_back(std::make_pair(tmpVal, tmpBB));
5906 delete (yyvsp[(1) - (6)].TypeVal);
5907 ;}
5908 break;
5909
Devang Patel7990dc72008-02-20 22:40:23 +00005910 case 289:
Devang Patelbd41a062008-02-22 19:31:30 +00005911#line 2801 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005912 {
5913 (yyval.PHIList) = (yyvsp[(1) - (7)].PHIList);
5914 Value* tmpVal = getVal((yyvsp[(1) - (7)].PHIList)->front().first->getType(), (yyvsp[(4) - (7)].ValIDVal));
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005915 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005916 BasicBlock* tmpBB = getBBVal((yyvsp[(6) - (7)].ValIDVal));
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005917 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005918 (yyvsp[(1) - (7)].PHIList)->push_back(std::make_pair(tmpVal, tmpBB));
5919 ;}
5920 break;
5921
Devang Patel7990dc72008-02-20 22:40:23 +00005922 case 290:
Devang Patelbd41a062008-02-22 19:31:30 +00005923#line 2811 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005924 {
Duncan Sandsdc024672007-11-27 13:23:08 +00005925 // FIXME: Remove trailing OptParamAttrs in LLVM 3.0, it was a mistake in 2.0
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005926 if (!UpRefs.empty())
Chris Lattner38905612008-02-19 04:36:25 +00005927 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (4)].TypeVal))->getDescription());
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005928 // Used for call and invoke instructions
Chris Lattner38905612008-02-19 04:36:25 +00005929 (yyval.ParamList) = new ParamList();
5930 ParamListEntry E; E.Attrs = (yyvsp[(2) - (4)].ParamAttrs) | (yyvsp[(4) - (4)].ParamAttrs); E.Val = getVal((yyvsp[(1) - (4)].TypeVal)->get(), (yyvsp[(3) - (4)].ValIDVal));
5931 (yyval.ParamList)->push_back(E);
5932 delete (yyvsp[(1) - (4)].TypeVal);
Duncan Sandsdc024672007-11-27 13:23:08 +00005933 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005934 ;}
5935 break;
5936
Devang Patel7990dc72008-02-20 22:40:23 +00005937 case 291:
Devang Patelbd41a062008-02-22 19:31:30 +00005938#line 2822 "/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
Dale Johanneseneb57ea72007-11-05 21:20:28 +00005941 // Labels are only valid in ASMs
Chris Lattner38905612008-02-19 04:36:25 +00005942 (yyval.ParamList) = new ParamList();
5943 ParamListEntry E; E.Attrs = (yyvsp[(2) - (4)].ParamAttrs) | (yyvsp[(4) - (4)].ParamAttrs); E.Val = getBBVal((yyvsp[(3) - (4)].ValIDVal));
5944 (yyval.ParamList)->push_back(E);
Duncan Sandsdc024672007-11-27 13:23:08 +00005945 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005946 ;}
5947 break;
5948
Devang Patel7990dc72008-02-20 22:40:23 +00005949 case 292:
Devang Patelbd41a062008-02-22 19:31:30 +00005950#line 2830 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005951 {
Duncan Sandsdc024672007-11-27 13:23:08 +00005952 // FIXME: Remove trailing OptParamAttrs in LLVM 3.0, it was a mistake in 2.0
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005953 if (!UpRefs.empty())
Chris Lattner38905612008-02-19 04:36:25 +00005954 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(3) - (6)].TypeVal))->getDescription());
5955 (yyval.ParamList) = (yyvsp[(1) - (6)].ParamList);
5956 ParamListEntry E; E.Attrs = (yyvsp[(4) - (6)].ParamAttrs) | (yyvsp[(6) - (6)].ParamAttrs); E.Val = getVal((yyvsp[(3) - (6)].TypeVal)->get(), (yyvsp[(5) - (6)].ValIDVal));
5957 (yyval.ParamList)->push_back(E);
5958 delete (yyvsp[(3) - (6)].TypeVal);
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005959 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005960 ;}
5961 break;
5962
Devang Patel7990dc72008-02-20 22:40:23 +00005963 case 293:
Devang Patelbd41a062008-02-22 19:31:30 +00005964#line 2840 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005965 {
Duncan Sandsdc024672007-11-27 13:23:08 +00005966 // FIXME: Remove trailing OptParamAttrs in LLVM 3.0, it was a mistake in 2.0
Chris Lattner38905612008-02-19 04:36:25 +00005967 (yyval.ParamList) = (yyvsp[(1) - (6)].ParamList);
5968 ParamListEntry E; E.Attrs = (yyvsp[(4) - (6)].ParamAttrs) | (yyvsp[(6) - (6)].ParamAttrs); E.Val = getBBVal((yyvsp[(5) - (6)].ValIDVal));
5969 (yyval.ParamList)->push_back(E);
Dale Johanneseneb57ea72007-11-05 21:20:28 +00005970 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005971 ;}
5972 break;
5973
Devang Patel7990dc72008-02-20 22:40:23 +00005974 case 294:
Devang Patelbd41a062008-02-22 19:31:30 +00005975#line 2847 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005976 { (yyval.ParamList) = new ParamList(); ;}
5977 break;
5978
Devang Patel7990dc72008-02-20 22:40:23 +00005979 case 295:
Devang Patelbd41a062008-02-22 19:31:30 +00005980#line 2850 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005981 { (yyval.ValueList) = new std::vector<Value*>(); ;}
5982 break;
5983
Devang Patel7990dc72008-02-20 22:40:23 +00005984 case 296:
Devang Patelbd41a062008-02-22 19:31:30 +00005985#line 2851 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005986 {
5987 (yyval.ValueList) = (yyvsp[(1) - (3)].ValueList);
5988 (yyval.ValueList)->push_back((yyvsp[(3) - (3)].ValueVal));
Reid Spencere4d87aa2006-12-23 06:05:41 +00005989 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005990 ;}
5991 break;
5992
Devang Patel7990dc72008-02-20 22:40:23 +00005993 case 297:
Devang Patelbd41a062008-02-22 19:31:30 +00005994#line 2858 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00005995 {
5996 (yyval.BoolVal) = true;
Reid Spencere4d87aa2006-12-23 06:05:41 +00005997 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00005998 ;}
5999 break;
6000
Devang Patel7990dc72008-02-20 22:40:23 +00006001 case 298:
Devang Patelbd41a062008-02-22 19:31:30 +00006002#line 2862 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00006003 {
6004 (yyval.BoolVal) = false;
Andrew Lenharth6353e052006-12-08 18:07:09 +00006005 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00006006 ;}
6007 break;
6008
Devang Patel7990dc72008-02-20 22:40:23 +00006009 case 299:
Devang Patelbd41a062008-02-22 19:31:30 +00006010#line 2867 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00006011 {
Reid Spencer14310612006-12-31 05:40:51 +00006012 if (!UpRefs.empty())
Chris Lattner38905612008-02-19 04:36:25 +00006013 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(2) - (5)].TypeVal))->getDescription());
6014 if (!(*(yyvsp[(2) - (5)].TypeVal))->isInteger() && !(*(yyvsp[(2) - (5)].TypeVal))->isFloatingPoint() &&
6015 !isa<VectorType>((*(yyvsp[(2) - (5)].TypeVal)).get()))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00006016 GEN_ERROR(
6017 "Arithmetic operator requires integer, FP, or packed operands");
Chris Lattner38905612008-02-19 04:36:25 +00006018 Value* val1 = getVal(*(yyvsp[(2) - (5)].TypeVal), (yyvsp[(3) - (5)].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00006019 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00006020 Value* val2 = getVal(*(yyvsp[(2) - (5)].TypeVal), (yyvsp[(5) - (5)].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00006021 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00006022 (yyval.InstVal) = BinaryOperator::create((yyvsp[(1) - (5)].BinaryOpVal), val1, val2);
6023 if ((yyval.InstVal) == 0)
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00006024 GEN_ERROR("binary operator returned null");
Chris Lattner38905612008-02-19 04:36:25 +00006025 delete (yyvsp[(2) - (5)].TypeVal);
6026 ;}
6027 break;
6028
Devang Patel7990dc72008-02-20 22:40:23 +00006029 case 300:
Devang Patelbd41a062008-02-22 19:31:30 +00006030#line 2883 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00006031 {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00006032 if (!UpRefs.empty())
Chris Lattner38905612008-02-19 04:36:25 +00006033 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(2) - (5)].TypeVal))->getDescription());
6034 if (!(*(yyvsp[(2) - (5)].TypeVal))->isInteger()) {
6035 if (Instruction::isShift((yyvsp[(1) - (5)].BinaryOpVal)) || !isa<VectorType>((yyvsp[(2) - (5)].TypeVal)->get()) ||
6036 !cast<VectorType>((yyvsp[(2) - (5)].TypeVal)->get())->getElementType()->isInteger())
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00006037 GEN_ERROR("Logical operator requires integral operands");
6038 }
Chris Lattner38905612008-02-19 04:36:25 +00006039 Value* tmpVal1 = getVal(*(yyvsp[(2) - (5)].TypeVal), (yyvsp[(3) - (5)].ValIDVal));
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00006040 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00006041 Value* tmpVal2 = getVal(*(yyvsp[(2) - (5)].TypeVal), (yyvsp[(5) - (5)].ValIDVal));
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00006042 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00006043 (yyval.InstVal) = BinaryOperator::create((yyvsp[(1) - (5)].BinaryOpVal), tmpVal1, tmpVal2);
6044 if ((yyval.InstVal) == 0)
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00006045 GEN_ERROR("binary operator returned null");
Chris Lattner38905612008-02-19 04:36:25 +00006046 delete (yyvsp[(2) - (5)].TypeVal);
6047 ;}
6048 break;
6049
Devang Patel7990dc72008-02-20 22:40:23 +00006050 case 301:
Devang Patelbd41a062008-02-22 19:31:30 +00006051#line 2900 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00006052 {
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00006053 if (!UpRefs.empty())
Chris Lattner38905612008-02-19 04:36:25 +00006054 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(3) - (6)].TypeVal))->getDescription());
6055 if (isa<VectorType>((*(yyvsp[(3) - (6)].TypeVal)).get()))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00006056 GEN_ERROR("Vector types not supported by icmp instruction");
Chris Lattner38905612008-02-19 04:36:25 +00006057 Value* tmpVal1 = getVal(*(yyvsp[(3) - (6)].TypeVal), (yyvsp[(4) - (6)].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00006058 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00006059 Value* tmpVal2 = getVal(*(yyvsp[(3) - (6)].TypeVal), (yyvsp[(6) - (6)].ValIDVal));
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00006060 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00006061 (yyval.InstVal) = CmpInst::create((yyvsp[(1) - (6)].OtherOpVal), (yyvsp[(2) - (6)].IPredicate), tmpVal1, tmpVal2);
6062 if ((yyval.InstVal) == 0)
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00006063 GEN_ERROR("icmp operator returned null");
Chris Lattner38905612008-02-19 04:36:25 +00006064 delete (yyvsp[(3) - (6)].TypeVal);
6065 ;}
6066 break;
6067
Devang Patel7990dc72008-02-20 22:40:23 +00006068 case 302:
Devang Patelbd41a062008-02-22 19:31:30 +00006069#line 2914 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00006070 {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00006071 if (!UpRefs.empty())
Chris Lattner38905612008-02-19 04:36:25 +00006072 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(3) - (6)].TypeVal))->getDescription());
6073 if (isa<VectorType>((*(yyvsp[(3) - (6)].TypeVal)).get()))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00006074 GEN_ERROR("Vector types not supported by fcmp instruction");
Chris Lattner38905612008-02-19 04:36:25 +00006075 Value* tmpVal1 = getVal(*(yyvsp[(3) - (6)].TypeVal), (yyvsp[(4) - (6)].ValIDVal));
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00006076 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00006077 Value* tmpVal2 = getVal(*(yyvsp[(3) - (6)].TypeVal), (yyvsp[(6) - (6)].ValIDVal));
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00006078 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00006079 (yyval.InstVal) = CmpInst::create((yyvsp[(1) - (6)].OtherOpVal), (yyvsp[(2) - (6)].FPredicate), tmpVal1, tmpVal2);
6080 if ((yyval.InstVal) == 0)
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00006081 GEN_ERROR("fcmp operator returned null");
Chris Lattner38905612008-02-19 04:36:25 +00006082 delete (yyvsp[(3) - (6)].TypeVal);
6083 ;}
6084 break;
6085
Devang Patel7990dc72008-02-20 22:40:23 +00006086 case 303:
Devang Patelbd41a062008-02-22 19:31:30 +00006087#line 2928 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00006088 {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00006089 if (!UpRefs.empty())
Chris Lattner38905612008-02-19 04:36:25 +00006090 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(4) - (4)].TypeVal))->getDescription());
6091 Value* Val = (yyvsp[(2) - (4)].ValueVal);
6092 const Type* DestTy = (yyvsp[(4) - (4)].TypeVal)->get();
6093 if (!CastInst::castIsValid((yyvsp[(1) - (4)].CastOpVal), Val, DestTy))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00006094 GEN_ERROR("invalid cast opcode for cast from '" +
6095 Val->getType()->getDescription() + "' to '" +
6096 DestTy->getDescription() + "'");
Chris Lattner38905612008-02-19 04:36:25 +00006097 (yyval.InstVal) = CastInst::create((yyvsp[(1) - (4)].CastOpVal), Val, DestTy);
6098 delete (yyvsp[(4) - (4)].TypeVal);
6099 ;}
6100 break;
6101
Devang Patel7990dc72008-02-20 22:40:23 +00006102 case 304:
Devang Patelbd41a062008-02-22 19:31:30 +00006103#line 2940 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00006104 {
6105 if ((yyvsp[(2) - (6)].ValueVal)->getType() != Type::Int1Ty)
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00006106 GEN_ERROR("select condition must be boolean");
Chris Lattner38905612008-02-19 04:36:25 +00006107 if ((yyvsp[(4) - (6)].ValueVal)->getType() != (yyvsp[(6) - (6)].ValueVal)->getType())
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00006108 GEN_ERROR("select value types should match");
Chris Lattner38905612008-02-19 04:36:25 +00006109 (yyval.InstVal) = new SelectInst((yyvsp[(2) - (6)].ValueVal), (yyvsp[(4) - (6)].ValueVal), (yyvsp[(6) - (6)].ValueVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00006110 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00006111 ;}
6112 break;
6113
Devang Patel7990dc72008-02-20 22:40:23 +00006114 case 305:
Devang Patelbd41a062008-02-22 19:31:30 +00006115#line 2948 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00006116 {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00006117 if (!UpRefs.empty())
Chris Lattner38905612008-02-19 04:36:25 +00006118 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(4) - (4)].TypeVal))->getDescription());
6119 (yyval.InstVal) = new VAArgInst((yyvsp[(2) - (4)].ValueVal), *(yyvsp[(4) - (4)].TypeVal));
6120 delete (yyvsp[(4) - (4)].TypeVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00006121 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00006122 ;}
6123 break;
6124
Devang Patel7990dc72008-02-20 22:40:23 +00006125 case 306:
Devang Patelbd41a062008-02-22 19:31:30 +00006126#line 2955 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00006127 {
6128 if (!ExtractElementInst::isValidOperands((yyvsp[(2) - (4)].ValueVal), (yyvsp[(4) - (4)].ValueVal)))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00006129 GEN_ERROR("Invalid extractelement operands");
Chris Lattner38905612008-02-19 04:36:25 +00006130 (yyval.InstVal) = new ExtractElementInst((yyvsp[(2) - (4)].ValueVal), (yyvsp[(4) - (4)].ValueVal));
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00006131 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00006132 ;}
6133 break;
6134
Devang Patel7990dc72008-02-20 22:40:23 +00006135 case 307:
Devang Patelbd41a062008-02-22 19:31:30 +00006136#line 2961 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00006137 {
6138 if (!InsertElementInst::isValidOperands((yyvsp[(2) - (6)].ValueVal), (yyvsp[(4) - (6)].ValueVal), (yyvsp[(6) - (6)].ValueVal)))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00006139 GEN_ERROR("Invalid insertelement operands");
Chris Lattner38905612008-02-19 04:36:25 +00006140 (yyval.InstVal) = new InsertElementInst((yyvsp[(2) - (6)].ValueVal), (yyvsp[(4) - (6)].ValueVal), (yyvsp[(6) - (6)].ValueVal));
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00006141 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00006142 ;}
6143 break;
6144
Devang Patel7990dc72008-02-20 22:40:23 +00006145 case 308:
Devang Patelbd41a062008-02-22 19:31:30 +00006146#line 2967 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00006147 {
6148 if (!ShuffleVectorInst::isValidOperands((yyvsp[(2) - (6)].ValueVal), (yyvsp[(4) - (6)].ValueVal), (yyvsp[(6) - (6)].ValueVal)))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00006149 GEN_ERROR("Invalid shufflevector operands");
Chris Lattner38905612008-02-19 04:36:25 +00006150 (yyval.InstVal) = new ShuffleVectorInst((yyvsp[(2) - (6)].ValueVal), (yyvsp[(4) - (6)].ValueVal), (yyvsp[(6) - (6)].ValueVal));
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00006151 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00006152 ;}
6153 break;
6154
Devang Patel7990dc72008-02-20 22:40:23 +00006155 case 309:
Devang Patelbd41a062008-02-22 19:31:30 +00006156#line 2973 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00006157 {
6158 const Type *Ty = (yyvsp[(2) - (2)].PHIList)->front().first->getType();
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00006159 if (!Ty->isFirstClassType())
6160 GEN_ERROR("PHI node operands must be of first class type");
Chris Lattner38905612008-02-19 04:36:25 +00006161 (yyval.InstVal) = new PHINode(Ty);
6162 ((PHINode*)(yyval.InstVal))->reserveOperandSpace((yyvsp[(2) - (2)].PHIList)->size());
6163 while ((yyvsp[(2) - (2)].PHIList)->begin() != (yyvsp[(2) - (2)].PHIList)->end()) {
6164 if ((yyvsp[(2) - (2)].PHIList)->front().first->getType() != Ty)
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00006165 GEN_ERROR("All elements of a PHI node must be of the same type");
Chris Lattner38905612008-02-19 04:36:25 +00006166 cast<PHINode>((yyval.InstVal))->addIncoming((yyvsp[(2) - (2)].PHIList)->front().first, (yyvsp[(2) - (2)].PHIList)->front().second);
6167 (yyvsp[(2) - (2)].PHIList)->pop_front();
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00006168 }
Chris Lattner38905612008-02-19 04:36:25 +00006169 delete (yyvsp[(2) - (2)].PHIList); // Free the list...
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00006170 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00006171 ;}
6172 break;
6173
Devang Patel7990dc72008-02-20 22:40:23 +00006174 case 310:
Devang Patelbd41a062008-02-22 19:31:30 +00006175#line 2989 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00006176 {
Reid Spencer14310612006-12-31 05:40:51 +00006177
6178 // Handle the short syntax
Andrew Lenharth6353e052006-12-08 18:07:09 +00006179 const PointerType *PFTy = 0;
6180 const FunctionType *Ty = 0;
Chris Lattner38905612008-02-19 04:36:25 +00006181 if (!(PFTy = dyn_cast<PointerType>((yyvsp[(3) - (8)].TypeVal)->get())) ||
Andrew Lenharth6353e052006-12-08 18:07:09 +00006182 !(Ty = dyn_cast<FunctionType>(PFTy->getElementType()))) {
6183 // Pull out the types of all of the arguments...
6184 std::vector<const Type*> ParamTypes;
Chris Lattner38905612008-02-19 04:36:25 +00006185 ParamList::iterator I = (yyvsp[(6) - (8)].ParamList)->begin(), E = (yyvsp[(6) - (8)].ParamList)->end();
Duncan Sandsdc024672007-11-27 13:23:08 +00006186 for (; I != E; ++I) {
Reid Spencer14310612006-12-31 05:40:51 +00006187 const Type *Ty = I->Val->getType();
6188 if (Ty == Type::VoidTy)
6189 GEN_ERROR("Short call syntax cannot be used with varargs");
6190 ParamTypes.push_back(Ty);
Andrew Lenharth6353e052006-12-08 18:07:09 +00006191 }
Chris Lattner38905612008-02-19 04:36:25 +00006192 Ty = FunctionType::get((yyvsp[(3) - (8)].TypeVal)->get(), ParamTypes, false);
Christopher Lamb4374f8e2007-12-17 01:17:35 +00006193 PFTy = PointerType::getUnqual(Ty);
Andrew Lenharth6353e052006-12-08 18:07:09 +00006194 }
Chris Lattner6cdc6822007-04-26 05:31:05 +00006195
Chris Lattner38905612008-02-19 04:36:25 +00006196 Value *V = getVal(PFTy, (yyvsp[(4) - (8)].ValIDVal)); // Get the function we're calling...
Andrew Lenharth6353e052006-12-08 18:07:09 +00006197 CHECK_FOR_ERROR
Chris Lattner6cdc6822007-04-26 05:31:05 +00006198
Reid Spencer7780acb2007-04-16 06:56:07 +00006199 // Check for call to invalid intrinsic to avoid crashing later.
6200 if (Function *theF = dyn_cast<Function>(V)) {
Reid Spencered48de22007-04-16 22:02:23 +00006201 if (theF->hasName() && (theF->getValueName()->getKeyLength() >= 5) &&
Reid Spencer36fdde12007-04-16 20:35:38 +00006202 (0 == strncmp(theF->getValueName()->getKeyData(), "llvm.", 5)) &&
6203 !theF->getIntrinsicID(true))
Reid Spencer7780acb2007-04-16 06:56:07 +00006204 GEN_ERROR("Call to invalid LLVM intrinsic function '" +
6205 theF->getName() + "'");
6206 }
6207
Duncan Sandsdc024672007-11-27 13:23:08 +00006208 // Set up the ParamAttrs for the function
6209 ParamAttrsVector Attrs;
Chris Lattner38905612008-02-19 04:36:25 +00006210 if ((yyvsp[(8) - (8)].ParamAttrs) != ParamAttr::None) {
Duncan Sandsdc024672007-11-27 13:23:08 +00006211 ParamAttrsWithIndex PAWI;
6212 PAWI.index = 0;
Chris Lattner38905612008-02-19 04:36:25 +00006213 PAWI.attrs = (yyvsp[(8) - (8)].ParamAttrs);
Duncan Sandsdc024672007-11-27 13:23:08 +00006214 Attrs.push_back(PAWI);
6215 }
Reid Spencer14310612006-12-31 05:40:51 +00006216 // Check the arguments
6217 ValueList Args;
Chris Lattner38905612008-02-19 04:36:25 +00006218 if ((yyvsp[(6) - (8)].ParamList)->empty()) { // Has no arguments?
Andrew Lenharth6353e052006-12-08 18:07:09 +00006219 // Make sure no arguments is a good thing!
6220 if (Ty->getNumParams() != 0)
6221 GEN_ERROR("No arguments passed to a function that "
Reid Spencerb5334b02007-02-05 10:18:06 +00006222 "expects arguments");
Andrew Lenharth6353e052006-12-08 18:07:09 +00006223 } else { // Has arguments?
6224 // Loop through FunctionType's arguments and ensure they are specified
Duncan Sandsdc024672007-11-27 13:23:08 +00006225 // correctly. Also, gather any parameter attributes.
Andrew Lenharth6353e052006-12-08 18:07:09 +00006226 FunctionType::param_iterator I = Ty->param_begin();
6227 FunctionType::param_iterator E = Ty->param_end();
Chris Lattner38905612008-02-19 04:36:25 +00006228 ParamList::iterator ArgI = (yyvsp[(6) - (8)].ParamList)->begin(), ArgE = (yyvsp[(6) - (8)].ParamList)->end();
Duncan Sandsdc024672007-11-27 13:23:08 +00006229 unsigned index = 1;
Andrew Lenharth6353e052006-12-08 18:07:09 +00006230
Duncan Sandsdc024672007-11-27 13:23:08 +00006231 for (; ArgI != ArgE && I != E; ++ArgI, ++I, ++index) {
Reid Spencer14310612006-12-31 05:40:51 +00006232 if (ArgI->Val->getType() != *I)
6233 GEN_ERROR("Parameter " + ArgI->Val->getName()+ " is not of type '" +
Reid Spencerb5334b02007-02-05 10:18:06 +00006234 (*I)->getDescription() + "'");
Reid Spencer14310612006-12-31 05:40:51 +00006235 Args.push_back(ArgI->Val);
Duncan Sandsdc024672007-11-27 13:23:08 +00006236 if (ArgI->Attrs != ParamAttr::None) {
6237 ParamAttrsWithIndex PAWI;
6238 PAWI.index = index;
6239 PAWI.attrs = ArgI->Attrs;
6240 Attrs.push_back(PAWI);
6241 }
Reid Spencer14310612006-12-31 05:40:51 +00006242 }
6243 if (Ty->isVarArg()) {
6244 if (I == E)
Chris Lattner38905612008-02-19 04:36:25 +00006245 for (; ArgI != ArgE; ++ArgI, ++index) {
Reid Spencer14310612006-12-31 05:40:51 +00006246 Args.push_back(ArgI->Val); // push the remaining varargs
Chris Lattner38905612008-02-19 04:36:25 +00006247 if (ArgI->Attrs != ParamAttr::None) {
6248 ParamAttrsWithIndex PAWI;
6249 PAWI.index = index;
6250 PAWI.attrs = ArgI->Attrs;
6251 Attrs.push_back(PAWI);
6252 }
6253 }
Reid Spencer14310612006-12-31 05:40:51 +00006254 } else if (I != E || ArgI != ArgE)
Reid Spencerb5334b02007-02-05 10:18:06 +00006255 GEN_ERROR("Invalid number of parameters detected");
Andrew Lenharth6353e052006-12-08 18:07:09 +00006256 }
Duncan Sandsdc024672007-11-27 13:23:08 +00006257
6258 // Finish off the ParamAttrs and check them
Duncan Sandsafa3b6d2007-11-28 17:07:01 +00006259 const ParamAttrsList *PAL = 0;
Duncan Sandsdc024672007-11-27 13:23:08 +00006260 if (!Attrs.empty())
6261 PAL = ParamAttrsList::get(Attrs);
6262
Reid Spencer14310612006-12-31 05:40:51 +00006263 // Create the call node
David Greene718fda32007-08-01 03:59:32 +00006264 CallInst *CI = new CallInst(V, Args.begin(), Args.end());
Chris Lattner38905612008-02-19 04:36:25 +00006265 CI->setTailCall((yyvsp[(1) - (8)].BoolVal));
6266 CI->setCallingConv((yyvsp[(2) - (8)].UIntVal));
Duncan Sandsdc024672007-11-27 13:23:08 +00006267 CI->setParamAttrs(PAL);
Chris Lattner38905612008-02-19 04:36:25 +00006268 (yyval.InstVal) = CI;
6269 delete (yyvsp[(6) - (8)].ParamList);
6270 delete (yyvsp[(3) - (8)].TypeVal);
Reid Spencere4d87aa2006-12-23 06:05:41 +00006271 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00006272 ;}
6273 break;
6274
Devang Patel7990dc72008-02-20 22:40:23 +00006275 case 311:
Devang Patelbd41a062008-02-22 19:31:30 +00006276#line 3086 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00006277 {
6278 (yyval.InstVal) = (yyvsp[(1) - (1)].InstVal);
Reid Spencere4d87aa2006-12-23 06:05:41 +00006279 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00006280 ;}
6281 break;
6282
Devang Patel7990dc72008-02-20 22:40:23 +00006283 case 312:
Devang Patelbd41a062008-02-22 19:31:30 +00006284#line 3091 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00006285 {
6286 (yyval.BoolVal) = true;
Reid Spencere4d87aa2006-12-23 06:05:41 +00006287 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00006288 ;}
6289 break;
6290
Devang Patel7990dc72008-02-20 22:40:23 +00006291 case 313:
Devang Patelbd41a062008-02-22 19:31:30 +00006292#line 3095 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00006293 {
6294 (yyval.BoolVal) = false;
Reid Spencer61c83e02006-08-18 08:43:06 +00006295 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00006296 ;}
6297 break;
6298
Devang Patel7990dc72008-02-20 22:40:23 +00006299 case 314:
Devang Patelbd41a062008-02-22 19:31:30 +00006300#line 3102 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00006301 {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00006302 if (!UpRefs.empty())
Chris Lattner38905612008-02-19 04:36:25 +00006303 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(2) - (3)].TypeVal))->getDescription());
6304 (yyval.InstVal) = new MallocInst(*(yyvsp[(2) - (3)].TypeVal), 0, (yyvsp[(3) - (3)].UIntVal));
6305 delete (yyvsp[(2) - (3)].TypeVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00006306 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00006307 ;}
6308 break;
6309
Devang Patel7990dc72008-02-20 22:40:23 +00006310 case 315:
Devang Patelbd41a062008-02-22 19:31:30 +00006311#line 3109 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00006312 {
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00006313 if (!UpRefs.empty())
Chris Lattner38905612008-02-19 04:36:25 +00006314 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(2) - (6)].TypeVal))->getDescription());
6315 Value* tmpVal = getVal((yyvsp[(4) - (6)].PrimType), (yyvsp[(5) - (6)].ValIDVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00006316 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00006317 (yyval.InstVal) = new MallocInst(*(yyvsp[(2) - (6)].TypeVal), tmpVal, (yyvsp[(6) - (6)].UIntVal));
6318 delete (yyvsp[(2) - (6)].TypeVal);
6319 ;}
6320 break;
6321
Devang Patel7990dc72008-02-20 22:40:23 +00006322 case 316:
Devang Patelbd41a062008-02-22 19:31:30 +00006323#line 3117 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00006324 {
Reid Spencer14310612006-12-31 05:40:51 +00006325 if (!UpRefs.empty())
Chris Lattner38905612008-02-19 04:36:25 +00006326 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(2) - (3)].TypeVal))->getDescription());
6327 (yyval.InstVal) = new AllocaInst(*(yyvsp[(2) - (3)].TypeVal), 0, (yyvsp[(3) - (3)].UIntVal));
6328 delete (yyvsp[(2) - (3)].TypeVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00006329 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00006330 ;}
6331 break;
6332
Devang Patel7990dc72008-02-20 22:40:23 +00006333 case 317:
Devang Patelbd41a062008-02-22 19:31:30 +00006334#line 3124 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00006335 {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00006336 if (!UpRefs.empty())
Chris Lattner38905612008-02-19 04:36:25 +00006337 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(2) - (6)].TypeVal))->getDescription());
6338 Value* tmpVal = getVal((yyvsp[(4) - (6)].PrimType), (yyvsp[(5) - (6)].ValIDVal));
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00006339 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00006340 (yyval.InstVal) = new AllocaInst(*(yyvsp[(2) - (6)].TypeVal), tmpVal, (yyvsp[(6) - (6)].UIntVal));
6341 delete (yyvsp[(2) - (6)].TypeVal);
6342 ;}
6343 break;
6344
Devang Patel7990dc72008-02-20 22:40:23 +00006345 case 318:
Devang Patelbd41a062008-02-22 19:31:30 +00006346#line 3132 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00006347 {
6348 if (!isa<PointerType>((yyvsp[(2) - (2)].ValueVal)->getType()))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00006349 GEN_ERROR("Trying to free nonpointer type " +
Chris Lattner38905612008-02-19 04:36:25 +00006350 (yyvsp[(2) - (2)].ValueVal)->getType()->getDescription() + "");
6351 (yyval.InstVal) = new FreeInst((yyvsp[(2) - (2)].ValueVal));
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00006352 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00006353 ;}
6354 break;
6355
Devang Patel7990dc72008-02-20 22:40:23 +00006356 case 319:
Devang Patelbd41a062008-02-22 19:31:30 +00006357#line 3140 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00006358 {
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00006359 if (!UpRefs.empty())
Chris Lattner38905612008-02-19 04:36:25 +00006360 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(3) - (5)].TypeVal))->getDescription());
6361 if (!isa<PointerType>((yyvsp[(3) - (5)].TypeVal)->get()))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00006362 GEN_ERROR("Can't load from nonpointer type: " +
Chris Lattner38905612008-02-19 04:36:25 +00006363 (*(yyvsp[(3) - (5)].TypeVal))->getDescription());
6364 if (!cast<PointerType>((yyvsp[(3) - (5)].TypeVal)->get())->getElementType()->isFirstClassType())
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00006365 GEN_ERROR("Can't load from pointer of non-first-class type: " +
Chris Lattner38905612008-02-19 04:36:25 +00006366 (*(yyvsp[(3) - (5)].TypeVal))->getDescription());
6367 Value* tmpVal = getVal(*(yyvsp[(3) - (5)].TypeVal), (yyvsp[(4) - (5)].ValIDVal));
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00006368 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00006369 (yyval.InstVal) = new LoadInst(tmpVal, "", (yyvsp[(1) - (5)].BoolVal), (yyvsp[(5) - (5)].UIntVal));
6370 delete (yyvsp[(3) - (5)].TypeVal);
6371 ;}
6372 break;
6373
Devang Patel7990dc72008-02-20 22:40:23 +00006374 case 320:
Devang Patelbd41a062008-02-22 19:31:30 +00006375#line 3154 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00006376 {
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00006377 if (!UpRefs.empty())
Chris Lattner38905612008-02-19 04:36:25 +00006378 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(5) - (7)].TypeVal))->getDescription());
6379 const PointerType *PT = dyn_cast<PointerType>((yyvsp[(5) - (7)].TypeVal)->get());
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00006380 if (!PT)
6381 GEN_ERROR("Can't store to a nonpointer type: " +
Chris Lattner38905612008-02-19 04:36:25 +00006382 (*(yyvsp[(5) - (7)].TypeVal))->getDescription());
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00006383 const Type *ElTy = PT->getElementType();
Chris Lattner38905612008-02-19 04:36:25 +00006384 if (ElTy != (yyvsp[(3) - (7)].ValueVal)->getType())
6385 GEN_ERROR("Can't store '" + (yyvsp[(3) - (7)].ValueVal)->getType()->getDescription() +
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00006386 "' into space of type '" + ElTy->getDescription() + "'");
6387
Chris Lattner38905612008-02-19 04:36:25 +00006388 Value* tmpVal = getVal(*(yyvsp[(5) - (7)].TypeVal), (yyvsp[(6) - (7)].ValIDVal));
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00006389 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00006390 (yyval.InstVal) = new StoreInst((yyvsp[(3) - (7)].ValueVal), tmpVal, (yyvsp[(1) - (7)].BoolVal), (yyvsp[(7) - (7)].UIntVal));
6391 delete (yyvsp[(5) - (7)].TypeVal);
6392 ;}
6393 break;
6394
Devang Patel7990dc72008-02-20 22:40:23 +00006395 case 321:
Devang Patelbd41a062008-02-22 19:31:30 +00006396#line 3171 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Devang Patel5a970972008-02-19 22:27:01 +00006397 {
Devang Patelbd41a062008-02-22 19:31:30 +00006398 Value *TmpVal = getVal((yyvsp[(2) - (5)].TypeVal)->get(), (yyvsp[(3) - (5)].ValIDVal));
Devang Patel4c3f8442008-02-20 19:13:10 +00006399 if (!GetResultInst::isValidOperands(TmpVal, (yyvsp[(5) - (5)].UInt64Val)))
Devang Patel5a970972008-02-19 22:27:01 +00006400 GEN_ERROR("Invalid getresult operands");
Devang Patel4c3f8442008-02-20 19:13:10 +00006401 (yyval.InstVal) = new GetResultInst(TmpVal, (yyvsp[(5) - (5)].UInt64Val));
Devang Patel5a970972008-02-19 22:27:01 +00006402 CHECK_FOR_ERROR
6403 ;}
6404 break;
6405
Devang Patel7990dc72008-02-20 22:40:23 +00006406 case 322:
Devang Patelbd41a062008-02-22 19:31:30 +00006407#line 3178 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Chris Lattner38905612008-02-19 04:36:25 +00006408 {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00006409 if (!UpRefs.empty())
Chris Lattner38905612008-02-19 04:36:25 +00006410 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(2) - (4)].TypeVal))->getDescription());
6411 if (!isa<PointerType>((yyvsp[(2) - (4)].TypeVal)->get()))
Reid Spencerb5334b02007-02-05 10:18:06 +00006412 GEN_ERROR("getelementptr insn requires pointer operand");
Reid Spencer68a24bd2005-08-27 18:50:39 +00006413
Chris Lattner38905612008-02-19 04:36:25 +00006414 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 +00006415 GEN_ERROR("Invalid getelementptr indices for type '" +
Chris Lattner38905612008-02-19 04:36:25 +00006416 (*(yyvsp[(2) - (4)].TypeVal))->getDescription()+ "'");
6417 Value* tmpVal = getVal(*(yyvsp[(2) - (4)].TypeVal), (yyvsp[(3) - (4)].ValIDVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00006418 CHECK_FOR_ERROR
Chris Lattner38905612008-02-19 04:36:25 +00006419 (yyval.InstVal) = new GetElementPtrInst(tmpVal, (yyvsp[(4) - (4)].ValueList)->begin(), (yyvsp[(4) - (4)].ValueList)->end());
6420 delete (yyvsp[(2) - (4)].TypeVal);
6421 delete (yyvsp[(4) - (4)].ValueList);
6422 ;}
6423 break;
Reid Spencer7780acb2007-04-16 06:56:07 +00006424
Chris Lattner38905612008-02-19 04:36:25 +00006425
6426/* Line 1267 of yacc.c. */
Devang Patelbd41a062008-02-22 19:31:30 +00006427#line 6428 "llvmAsmParser.tab.c"
Chris Lattner38905612008-02-19 04:36:25 +00006428 default: break;
Dale Johannesencdd509a2007-09-07 21:07:57 +00006429 }
Chris Lattner38905612008-02-19 04:36:25 +00006430 YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
6431
6432 YYPOPSTACK (yylen);
6433 yylen = 0;
6434 YY_STACK_PRINT (yyss, yyssp);
Reid Spencer68a24bd2005-08-27 18:50:39 +00006435
6436 *++yyvsp = yyval;
6437
6438
Chris Lattner38905612008-02-19 04:36:25 +00006439 /* Now `shift' the result of the reduction. Determine what state
6440 that goes to, based on the state we popped back to and the rule
6441 number reduced by. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00006442
6443 yyn = yyr1[yyn];
6444
Chris Lattner38905612008-02-19 04:36:25 +00006445 yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
6446 if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
Reid Spencer68a24bd2005-08-27 18:50:39 +00006447 yystate = yytable[yystate];
6448 else
Chris Lattner38905612008-02-19 04:36:25 +00006449 yystate = yydefgoto[yyn - YYNTOKENS];
Reid Spencer68a24bd2005-08-27 18:50:39 +00006450
6451 goto yynewstate;
6452
6453
Chris Lattner38905612008-02-19 04:36:25 +00006454/*------------------------------------.
6455| yyerrlab -- here on detecting error |
6456`------------------------------------*/
6457yyerrlab:
6458 /* If not already recovering from an error, report this error. */
6459 if (!yyerrstatus)
Reid Spencer68a24bd2005-08-27 18:50:39 +00006460 {
6461 ++yynerrs;
Chris Lattner38905612008-02-19 04:36:25 +00006462#if ! YYERROR_VERBOSE
6463 yyerror (YY_("syntax error"));
6464#else
6465 {
6466 YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
6467 if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
6468 {
6469 YYSIZE_T yyalloc = 2 * yysize;
6470 if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
6471 yyalloc = YYSTACK_ALLOC_MAXIMUM;
6472 if (yymsg != yymsgbuf)
6473 YYSTACK_FREE (yymsg);
6474 yymsg = (char *) YYSTACK_ALLOC (yyalloc);
6475 if (yymsg)
6476 yymsg_alloc = yyalloc;
6477 else
6478 {
6479 yymsg = yymsgbuf;
6480 yymsg_alloc = sizeof yymsgbuf;
6481 }
6482 }
Dale Johannesencdd509a2007-09-07 21:07:57 +00006483
Chris Lattner38905612008-02-19 04:36:25 +00006484 if (0 < yysize && yysize <= yymsg_alloc)
6485 {
6486 (void) yysyntax_error (yymsg, yystate, yychar);
6487 yyerror (yymsg);
6488 }
6489 else
6490 {
6491 yyerror (YY_("syntax error"));
6492 if (yysize != 0)
6493 goto yyexhaustedlab;
6494 }
6495 }
6496#endif
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00006497 }
6498
Chris Lattner38905612008-02-19 04:36:25 +00006499
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00006500
6501 if (yyerrstatus == 3)
6502 {
Chris Lattner38905612008-02-19 04:36:25 +00006503 /* If just tried and failed to reuse look-ahead token after an
6504 error, discard it. */
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00006505
Chris Lattner38905612008-02-19 04:36:25 +00006506 if (yychar <= YYEOF)
6507 {
6508 /* Return failure if at end of input. */
6509 if (yychar == YYEOF)
6510 YYABORT;
6511 }
6512 else
6513 {
6514 yydestruct ("Error: discarding",
6515 yytoken, &yylval);
6516 yychar = YYEMPTY;
6517 }
6518 }
6519
6520 /* Else will try to reuse look-ahead token after shifting the error
6521 token. */
6522 goto yyerrlab1;
6523
6524
6525/*---------------------------------------------------.
6526| yyerrorlab -- error raised explicitly by YYERROR. |
6527`---------------------------------------------------*/
6528yyerrorlab:
6529
6530 /* Pacify compilers like GCC when the user code never invokes
6531 YYERROR and the label yyerrorlab therefore never appears in user
6532 code. */
6533 if (/*CONSTCOND*/ 0)
6534 goto yyerrorlab;
6535
6536 /* Do not reclaim the symbols of the rule which action triggered
6537 this YYERROR. */
6538 YYPOPSTACK (yylen);
6539 yylen = 0;
6540 YY_STACK_PRINT (yyss, yyssp);
6541 yystate = *yyssp;
6542 goto yyerrlab1;
6543
6544
6545/*-------------------------------------------------------------.
6546| yyerrlab1 -- common code for both syntax error and YYERROR. |
6547`-------------------------------------------------------------*/
6548yyerrlab1:
6549 yyerrstatus = 3; /* Each real token shifted decrements this. */
6550
6551 for (;;)
6552 {
6553 yyn = yypact[yystate];
6554 if (yyn != YYPACT_NINF)
6555 {
6556 yyn += YYTERROR;
6557 if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
6558 {
6559 yyn = yytable[yyn];
6560 if (0 < yyn)
6561 break;
6562 }
6563 }
6564
6565 /* Pop the current state because it cannot handle the error token. */
6566 if (yyssp == yyss)
Reid Spencer68a24bd2005-08-27 18:50:39 +00006567 YYABORT;
6568
Dale Johannesencdd509a2007-09-07 21:07:57 +00006569
Chris Lattner38905612008-02-19 04:36:25 +00006570 yydestruct ("Error: popping",
6571 yystos[yystate], yyvsp);
6572 YYPOPSTACK (1);
6573 yystate = *yyssp;
6574 YY_STACK_PRINT (yyss, yyssp);
Reid Spencer68a24bd2005-08-27 18:50:39 +00006575 }
6576
6577 if (yyn == YYFINAL)
6578 YYACCEPT;
6579
Reid Spencer68a24bd2005-08-27 18:50:39 +00006580 *++yyvsp = yylval;
Chris Lattner38905612008-02-19 04:36:25 +00006581
6582
6583 /* Shift the error token. */
6584 YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
Reid Spencerb8f85052007-07-31 03:50:36 +00006585
Reid Spencer68a24bd2005-08-27 18:50:39 +00006586 yystate = yyn;
6587 goto yynewstate;
6588
Scott Michel15dcd8e2008-01-30 03:10:00 +00006589
Chris Lattner38905612008-02-19 04:36:25 +00006590/*-------------------------------------.
6591| yyacceptlab -- YYACCEPT comes here. |
6592`-------------------------------------*/
6593yyacceptlab:
6594 yyresult = 0;
6595 goto yyreturn;
6596
6597/*-----------------------------------.
6598| yyabortlab -- YYABORT comes here. |
6599`-----------------------------------*/
6600yyabortlab:
6601 yyresult = 1;
6602 goto yyreturn;
6603
6604#ifndef yyoverflow
6605/*-------------------------------------------------.
6606| yyexhaustedlab -- memory exhaustion comes here. |
6607`-------------------------------------------------*/
6608yyexhaustedlab:
6609 yyerror (YY_("memory exhausted"));
6610 yyresult = 2;
6611 /* Fall through. */
Scott Michel7f9ba9b2008-01-30 02:55:46 +00006612#endif
Chris Lattner38905612008-02-19 04:36:25 +00006613
6614yyreturn:
6615 if (yychar != YYEOF && yychar != YYEMPTY)
6616 yydestruct ("Cleanup: discarding lookahead",
6617 yytoken, &yylval);
6618 /* Do not reclaim the symbols of the rule which action triggered
6619 this YYABORT or YYACCEPT. */
6620 YYPOPSTACK (yylen);
6621 YY_STACK_PRINT (yyss, yyssp);
6622 while (yyssp != yyss)
6623 {
6624 yydestruct ("Cleanup: popping",
6625 yystos[*yyssp], yyvsp);
6626 YYPOPSTACK (1);
Scott Michel15dcd8e2008-01-30 03:10:00 +00006627 }
Chris Lattner38905612008-02-19 04:36:25 +00006628#ifndef yyoverflow
6629 if (yyss != yyssa)
6630 YYSTACK_FREE (yyss);
6631#endif
6632#if YYERROR_VERBOSE
6633 if (yymsg != yymsgbuf)
6634 YYSTACK_FREE (yymsg);
6635#endif
6636 /* Make sure YYID is used. */
6637 return YYID (yyresult);
Reid Spencer68a24bd2005-08-27 18:50:39 +00006638}
Chris Lattner38905612008-02-19 04:36:25 +00006639
6640
Devang Patelbd41a062008-02-22 19:31:30 +00006641#line 3195 "/Volumes/Nanpura/mrv/llvm/lib/AsmParser/llvmAsmParser.y"
Reid Spencer61c83e02006-08-18 08:43:06 +00006642
6643
Reid Spencer14310612006-12-31 05:40:51 +00006644// common code from the two 'RunVMAsmParser' functions
6645static Module* RunParser(Module * M) {
Reid Spencer14310612006-12-31 05:40:51 +00006646 CurModule.CurrentModule = M;
Reid Spencer14310612006-12-31 05:40:51 +00006647 // Check to make sure the parser succeeded
6648 if (yyparse()) {
6649 if (ParserResult)
6650 delete ParserResult;
6651 return 0;
6652 }
6653
Reid Spencer0d60b5a2007-03-30 01:37:39 +00006654 // Emit an error if there are any unresolved types left.
6655 if (!CurModule.LateResolveTypes.empty()) {
6656 const ValID &DID = CurModule.LateResolveTypes.begin()->first;
6657 if (DID.Type == ValID::LocalName) {
6658 GenerateError("Undefined type remains at eof: '"+DID.getName() + "'");
6659 } else {
6660 GenerateError("Undefined type remains at eof: #" + itostr(DID.Num));
6661 }
6662 if (ParserResult)
6663 delete ParserResult;
6664 return 0;
6665 }
6666
6667 // Emit an error if there are any unresolved values left.
6668 if (!CurModule.LateResolveValues.empty()) {
6669 Value *V = CurModule.LateResolveValues.back();
6670 std::map<Value*, std::pair<ValID, int> >::iterator I =
6671 CurModule.PlaceHolderInfo.find(V);
6672
6673 if (I != CurModule.PlaceHolderInfo.end()) {
6674 ValID &DID = I->second.first;
6675 if (DID.Type == ValID::LocalName) {
6676 GenerateError("Undefined value remains at eof: "+DID.getName() + "'");
6677 } else {
6678 GenerateError("Undefined value remains at eof: #" + itostr(DID.Num));
6679 }
6680 if (ParserResult)
6681 delete ParserResult;
6682 return 0;
6683 }
6684 }
6685
Reid Spencer14310612006-12-31 05:40:51 +00006686 // Check to make sure that parsing produced a result
6687 if (!ParserResult)
6688 return 0;
6689
6690 // Reset ParserResult variable while saving its value for the result.
6691 Module *Result = ParserResult;
6692 ParserResult = 0;
6693
6694 return Result;
6695}
6696
Reid Spencer61c83e02006-08-18 08:43:06 +00006697void llvm::GenerateError(const std::string &message, int LineNo) {
Duncan Sandsdc024672007-11-27 13:23:08 +00006698 if (LineNo == -1) LineNo = LLLgetLineNo();
Reid Spencer61c83e02006-08-18 08:43:06 +00006699 // TODO: column number in exception
6700 if (TheParseError)
Duncan Sandsdc024672007-11-27 13:23:08 +00006701 TheParseError->setError(LLLgetFilename(), message, LineNo);
Reid Spencer61c83e02006-08-18 08:43:06 +00006702 TriggerError = 1;
6703}
Reid Spencer68a24bd2005-08-27 18:50:39 +00006704
6705int yyerror(const char *ErrorMsg) {
Duncan Sandsdc024672007-11-27 13:23:08 +00006706 std::string where = LLLgetFilename() + ":" + utostr(LLLgetLineNo()) + ": ";
Reid Spenceref9b9a72007-02-05 20:47:22 +00006707 std::string errMsg = where + "error: " + std::string(ErrorMsg);
Duncan Sandsdc024672007-11-27 13:23:08 +00006708 if (yychar != YYEMPTY && yychar != 0) {
6709 errMsg += " while reading token: '";
6710 errMsg += std::string(LLLgetTokenStart(),
6711 LLLgetTokenStart()+LLLgetTokenLength()) + "'";
6712 }
Reid Spencer61c83e02006-08-18 08:43:06 +00006713 GenerateError(errMsg);
Reid Spencer68a24bd2005-08-27 18:50:39 +00006714 return 0;
6715}
Chris Lattner38905612008-02-19 04:36:25 +00006716