blob: 6267f3c50bc67746662a802cd8f5be3bbabe7fa8 [file] [log] [blame]
Reid Spencer68a24bd2005-08-27 18:50:39 +00001
Chris Lattner9d2fda62007-02-13 05:53:56 +00002/* A Bison parser, made from /Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y
3 by GNU Bison version 1.28 */
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +00004
Chris Lattner9d2fda62007-02-13 05:53:56 +00005#define YYBISON 1 /* Identify Bison output. */
Anton Korobeynikov178a3522007-01-12 19:22:51 +00006
Reid Spencer68a24bd2005-08-27 18:50:39 +00007#define yyparse llvmAsmparse
Chris Lattner9d2fda62007-02-13 05:53:56 +00008#define yylex llvmAsmlex
Reid Spencer68a24bd2005-08-27 18:50:39 +00009#define yyerror llvmAsmerror
Chris Lattner9d2fda62007-02-13 05:53:56 +000010#define yylval llvmAsmlval
11#define yychar llvmAsmchar
Reid Spencer68a24bd2005-08-27 18:50:39 +000012#define yydebug llvmAsmdebug
13#define yynerrs llvmAsmnerrs
Chris Lattner9d2fda62007-02-13 05:53:56 +000014#define ESINT64VAL 257
15#define EUINT64VAL 258
16#define LOCALVAL_ID 259
17#define GLOBALVAL_ID 260
18#define FPVAL 261
19#define VOID 262
20#define INTTYPE 263
21#define FLOAT 264
22#define DOUBLE 265
23#define LABEL 266
24#define TYPE 267
25#define LOCALVAR 268
26#define GLOBALVAR 269
27#define LABELSTR 270
28#define STRINGCONSTANT 271
29#define ATSTRINGCONSTANT 272
30#define IMPLEMENTATION 273
31#define ZEROINITIALIZER 274
32#define TRUETOK 275
33#define FALSETOK 276
34#define BEGINTOK 277
35#define ENDTOK 278
36#define DECLARE 279
37#define DEFINE 280
38#define GLOBAL 281
39#define CONSTANT 282
40#define SECTION 283
41#define VOLATILE 284
42#define TO 285
43#define DOTDOTDOT 286
44#define NULL_TOK 287
45#define UNDEF 288
46#define INTERNAL 289
47#define LINKONCE 290
48#define WEAK 291
49#define APPENDING 292
50#define DLLIMPORT 293
51#define DLLEXPORT 294
52#define EXTERN_WEAK 295
53#define OPAQUE 296
54#define EXTERNAL 297
55#define TARGET 298
56#define TRIPLE 299
57#define ALIGN 300
58#define DEPLIBS 301
59#define CALL 302
60#define TAIL 303
61#define ASM_TOK 304
62#define MODULE 305
63#define SIDEEFFECT 306
64#define CC_TOK 307
65#define CCC_TOK 308
66#define FASTCC_TOK 309
67#define COLDCC_TOK 310
68#define X86_STDCALLCC_TOK 311
69#define X86_FASTCALLCC_TOK 312
70#define DATALAYOUT 313
71#define RET 314
72#define BR 315
73#define SWITCH 316
74#define INVOKE 317
75#define UNWIND 318
76#define UNREACHABLE 319
77#define ADD 320
78#define SUB 321
79#define MUL 322
80#define UDIV 323
81#define SDIV 324
82#define FDIV 325
83#define UREM 326
84#define SREM 327
85#define FREM 328
86#define AND 329
87#define OR 330
88#define XOR 331
89#define SHL 332
90#define LSHR 333
91#define ASHR 334
92#define ICMP 335
93#define FCMP 336
94#define EQ 337
95#define NE 338
96#define SLT 339
97#define SGT 340
98#define SLE 341
99#define SGE 342
100#define ULT 343
101#define UGT 344
102#define ULE 345
103#define UGE 346
104#define OEQ 347
105#define ONE 348
106#define OLT 349
107#define OGT 350
108#define OLE 351
109#define OGE 352
110#define ORD 353
111#define UNO 354
112#define UEQ 355
113#define UNE 356
114#define MALLOC 357
115#define ALLOCA 358
116#define FREE 359
117#define LOAD 360
118#define STORE 361
119#define GETELEMENTPTR 362
120#define TRUNC 363
121#define ZEXT 364
122#define SEXT 365
123#define FPTRUNC 366
124#define FPEXT 367
125#define BITCAST 368
126#define UITOFP 369
127#define SITOFP 370
128#define FPTOUI 371
129#define FPTOSI 372
130#define INTTOPTR 373
131#define PTRTOINT 374
132#define PHI_TOK 375
133#define SELECT 376
134#define VAARG 377
135#define EXTRACTELEMENT 378
136#define INSERTELEMENT 379
137#define SHUFFLEVECTOR 380
138#define NORETURN 381
139#define INREG 382
140#define SRET 383
141#define DEFAULT 384
142#define HIDDEN 385
Reid Spencer68a24bd2005-08-27 18:50:39 +0000143
Chris Lattner9d2fda62007-02-13 05:53:56 +0000144#line 14 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
Reid Spencer68a24bd2005-08-27 18:50:39 +0000145
146#include "ParserInternals.h"
147#include "llvm/CallingConv.h"
Chris Lattner0e9c3762006-01-25 22:27:16 +0000148#include "llvm/InlineAsm.h"
Reid Spencer68a24bd2005-08-27 18:50:39 +0000149#include "llvm/Instructions.h"
150#include "llvm/Module.h"
Reid Spenceref9b9a72007-02-05 20:47:22 +0000151#include "llvm/ValueSymbolTable.h"
Reid Spencer68a24bd2005-08-27 18:50:39 +0000152#include "llvm/Support/GetElementPtrTypeIterator.h"
Reid Spencer14310612006-12-31 05:40:51 +0000153#include "llvm/Support/CommandLine.h"
Chris Lattnerf7469af2007-01-31 04:44:08 +0000154#include "llvm/ADT/SmallVector.h"
Reid Spencer68a24bd2005-08-27 18:50:39 +0000155#include "llvm/ADT/STLExtras.h"
Chris Lattner0019bbe2005-11-06 06:46:53 +0000156#include "llvm/Support/MathExtras.h"
Reid Spencer481169e2006-12-01 00:33:46 +0000157#include "llvm/Support/Streams.h"
Reid Spencer68a24bd2005-08-27 18:50:39 +0000158#include <algorithm>
Reid Spencer68a24bd2005-08-27 18:50:39 +0000159#include <list>
Chris Lattner8adde282007-02-11 21:40:10 +0000160#include <map>
Reid Spencer68a24bd2005-08-27 18:50:39 +0000161#include <utility>
Reid Spencer14310612006-12-31 05:40:51 +0000162#ifndef NDEBUG
163#define YYDEBUG 1
164#endif
Reid Spencer68a24bd2005-08-27 18:50:39 +0000165
Reid Spencere4f47592006-08-18 17:32:55 +0000166// The following is a gross hack. In order to rid the libAsmParser library of
167// exceptions, we have to have a way of getting the yyparse function to go into
168// an error situation. So, whenever we want an error to occur, the GenerateError
169// function (see bottom of file) sets TriggerError. Then, at the end of each
170// production in the grammer we use CHECK_FOR_ERROR which will invoke YYERROR
171// (a goto) to put YACC in error state. Furthermore, several calls to
172// GenerateError are made from inside productions and they must simulate the
173// previous exception behavior by exiting the production immediately. We have
174// replaced these with the GEN_ERROR macro which calls GeneratError and then
175// immediately invokes YYERROR. This would be so much cleaner if it was a
176// recursive descent parser.
Reid Spencer61c83e02006-08-18 08:43:06 +0000177static bool TriggerError = false;
Reid Spencerf63697d2006-10-09 17:36:59 +0000178#define CHECK_FOR_ERROR { if (TriggerError) { TriggerError = false; YYABORT; } }
Reid Spencer61c83e02006-08-18 08:43:06 +0000179#define GEN_ERROR(msg) { GenerateError(msg); YYERROR; }
180
Reid Spencer68a24bd2005-08-27 18:50:39 +0000181int yyerror(const char *ErrorMsg); // Forward declarations to prevent "implicit
182int yylex(); // declaration" of xxx warnings.
183int yyparse();
184
185namespace llvm {
186 std::string CurFilename;
Reid Spencer14310612006-12-31 05:40:51 +0000187#if YYDEBUG
188static cl::opt<bool>
189Debug("debug-yacc", cl::desc("Print yacc debug state changes"),
190 cl::Hidden, cl::init(false));
191#endif
Reid Spencer68a24bd2005-08-27 18:50:39 +0000192}
193using namespace llvm;
194
195static Module *ParserResult;
196
197// DEBUG_UPREFS - Define this symbol if you want to enable debugging output
198// relating to upreferences in the input stream.
199//
200//#define DEBUG_UPREFS 1
201#ifdef DEBUG_UPREFS
Bill Wendlinge8156192006-12-07 01:30:32 +0000202#define UR_OUT(X) cerr << X
Reid Spencer68a24bd2005-08-27 18:50:39 +0000203#else
204#define UR_OUT(X)
205#endif
206
207#define YYERROR_VERBOSE 1
208
Chris Lattnerb475c422005-11-12 18:22:38 +0000209static GlobalVariable *CurGV;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000210
211
212// This contains info used when building the body of a function. It is
213// destroyed when the function is completed.
214//
215typedef std::vector<Value *> ValueList; // Numbered defs
Reid Spencer14310612006-12-31 05:40:51 +0000216
Reid Spencer68a24bd2005-08-27 18:50:39 +0000217static void
218ResolveDefinitions(std::map<const Type *,ValueList> &LateResolvers,
219 std::map<const Type *,ValueList> *FutureLateResolvers = 0);
220
221static struct PerModuleInfo {
222 Module *CurrentModule;
223 std::map<const Type *, ValueList> Values; // Module level numbered definitions
224 std::map<const Type *,ValueList> LateResolveValues;
Reid Spencer861d9d62006-11-28 07:29:44 +0000225 std::vector<PATypeHolder> Types;
226 std::map<ValID, PATypeHolder> LateResolveTypes;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000227
228 /// PlaceHolderInfo - When temporary placeholder objects are created, remember
Chris Lattner0ad19702006-06-21 16:53:00 +0000229 /// how they were referenced and on which line of the input they came from so
Reid Spencer68a24bd2005-08-27 18:50:39 +0000230 /// that we can resolve them later and print error messages as appropriate.
231 std::map<Value*, std::pair<ValID, int> > PlaceHolderInfo;
232
233 // GlobalRefs - This maintains a mapping between <Type, ValID>'s and forward
234 // references to global values. Global values may be referenced before they
235 // are defined, and if so, the temporary object that they represent is held
236 // here. This is used for forward references of GlobalValues.
237 //
238 typedef std::map<std::pair<const PointerType *,
239 ValID>, GlobalValue*> GlobalRefsType;
240 GlobalRefsType GlobalRefs;
241
242 void ModuleDone() {
243 // If we could not resolve some functions at function compilation time
244 // (calls to functions before they are defined), resolve them now... Types
245 // are resolved when the constant pool has been completely parsed.
246 //
247 ResolveDefinitions(LateResolveValues);
Reid Spencer5b7e7532006-09-28 19:28:24 +0000248 if (TriggerError)
249 return;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000250
251 // Check to make sure that all global value forward references have been
252 // resolved!
253 //
254 if (!GlobalRefs.empty()) {
255 std::string UndefinedReferences = "Unresolved global references exist:\n";
256
257 for (GlobalRefsType::iterator I = GlobalRefs.begin(), E =GlobalRefs.end();
258 I != E; ++I) {
259 UndefinedReferences += " " + I->first.first->getDescription() + " " +
260 I->first.second.getName() + "\n";
261 }
Reid Spencer61c83e02006-08-18 08:43:06 +0000262 GenerateError(UndefinedReferences);
Reid Spencer5b7e7532006-09-28 19:28:24 +0000263 return;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000264 }
265
266 Values.clear(); // Clear out function local definitions
267 Types.clear();
268 CurrentModule = 0;
269 }
270
Reid Spencer68a24bd2005-08-27 18:50:39 +0000271 // GetForwardRefForGlobal - Check to see if there is a forward reference
272 // for this global. If so, remove it from the GlobalRefs map and return it.
273 // If not, just return null.
274 GlobalValue *GetForwardRefForGlobal(const PointerType *PTy, ValID ID) {
275 // Check to see if there is a forward reference to this global variable...
276 // if there is, eliminate it and patch the reference to use the new def'n.
277 GlobalRefsType::iterator I = GlobalRefs.find(std::make_pair(PTy, ID));
278 GlobalValue *Ret = 0;
279 if (I != GlobalRefs.end()) {
280 Ret = I->second;
281 GlobalRefs.erase(I);
282 }
283 return Ret;
284 }
Reid Spencer8c8a2dc2007-01-02 21:54:12 +0000285
286 bool TypeIsUnresolved(PATypeHolder* PATy) {
287 // If it isn't abstract, its resolved
288 const Type* Ty = PATy->get();
289 if (!Ty->isAbstract())
290 return false;
291 // Traverse the type looking for abstract types. If it isn't abstract then
292 // we don't need to traverse that leg of the type.
293 std::vector<const Type*> WorkList, SeenList;
294 WorkList.push_back(Ty);
295 while (!WorkList.empty()) {
296 const Type* Ty = WorkList.back();
297 SeenList.push_back(Ty);
298 WorkList.pop_back();
299 if (const OpaqueType* OpTy = dyn_cast<OpaqueType>(Ty)) {
300 // Check to see if this is an unresolved type
301 std::map<ValID, PATypeHolder>::iterator I = LateResolveTypes.begin();
302 std::map<ValID, PATypeHolder>::iterator E = LateResolveTypes.end();
303 for ( ; I != E; ++I) {
304 if (I->second.get() == OpTy)
305 return true;
306 }
307 } else if (const SequentialType* SeqTy = dyn_cast<SequentialType>(Ty)) {
308 const Type* TheTy = SeqTy->getElementType();
309 if (TheTy->isAbstract() && TheTy != Ty) {
310 std::vector<const Type*>::iterator I = SeenList.begin(),
311 E = SeenList.end();
312 for ( ; I != E; ++I)
313 if (*I == TheTy)
314 break;
315 if (I == E)
316 WorkList.push_back(TheTy);
317 }
318 } else if (const StructType* StrTy = dyn_cast<StructType>(Ty)) {
319 for (unsigned i = 0; i < StrTy->getNumElements(); ++i) {
320 const Type* TheTy = StrTy->getElementType(i);
321 if (TheTy->isAbstract() && TheTy != Ty) {
322 std::vector<const Type*>::iterator I = SeenList.begin(),
323 E = SeenList.end();
324 for ( ; I != E; ++I)
325 if (*I == TheTy)
326 break;
327 if (I == E)
328 WorkList.push_back(TheTy);
329 }
330 }
331 }
332 }
333 return false;
334 }
335
336
Reid Spencer68a24bd2005-08-27 18:50:39 +0000337} CurModule;
338
339static struct PerFunctionInfo {
340 Function *CurrentFunction; // Pointer to current function being created
341
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +0000342 std::map<const Type*, ValueList> Values; // Keep track of #'d definitions
Reid Spencer68a24bd2005-08-27 18:50:39 +0000343 std::map<const Type*, ValueList> LateResolveValues;
Reid Spenceref9b9a72007-02-05 20:47:22 +0000344 bool isDeclare; // Is this function a forward declararation?
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +0000345 GlobalValue::LinkageTypes Linkage; // Linkage for forward declaration.
Anton Korobeynikov178a3522007-01-12 19:22:51 +0000346 GlobalValue::VisibilityTypes Visibility;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000347
348 /// BBForwardRefs - When we see forward references to basic blocks, keep
349 /// track of them here.
350 std::map<BasicBlock*, std::pair<ValID, int> > BBForwardRefs;
351 std::vector<BasicBlock*> NumberedBlocks;
352 unsigned NextBBNum;
353
354 inline PerFunctionInfo() {
355 CurrentFunction = 0;
356 isDeclare = false;
Anton Korobeynikov178a3522007-01-12 19:22:51 +0000357 Linkage = GlobalValue::ExternalLinkage;
358 Visibility = GlobalValue::DefaultVisibility;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000359 }
360
361 inline void FunctionStart(Function *M) {
362 CurrentFunction = M;
363 NextBBNum = 0;
364 }
365
366 void FunctionDone() {
367 NumberedBlocks.clear();
368
369 // Any forward referenced blocks left?
Reid Spencer5b7e7532006-09-28 19:28:24 +0000370 if (!BBForwardRefs.empty()) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000371 GenerateError("Undefined reference to label " +
Reid Spencer68a24bd2005-08-27 18:50:39 +0000372 BBForwardRefs.begin()->first->getName());
Reid Spencer5b7e7532006-09-28 19:28:24 +0000373 return;
374 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000375
376 // Resolve all forward references now.
377 ResolveDefinitions(LateResolveValues, &CurModule.LateResolveValues);
378
379 Values.clear(); // Clear out function local definitions
380 CurrentFunction = 0;
381 isDeclare = false;
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +0000382 Linkage = GlobalValue::ExternalLinkage;
Anton Korobeynikov178a3522007-01-12 19:22:51 +0000383 Visibility = GlobalValue::DefaultVisibility;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000384 }
385} CurFun; // Info for the current function...
386
387static bool inFunctionScope() { return CurFun.CurrentFunction != 0; }
388
389
390//===----------------------------------------------------------------------===//
391// Code to handle definitions of all the types
392//===----------------------------------------------------------------------===//
393
394static int InsertValue(Value *V,
395 std::map<const Type*,ValueList> &ValueTab = CurFun.Values) {
396 if (V->hasName()) return -1; // Is this a numbered definition?
397
398 // Yes, insert the value into the value table...
399 ValueList &List = ValueTab[V->getType()];
400 List.push_back(V);
401 return List.size()-1;
402}
403
404static const Type *getTypeVal(const ValID &D, bool DoNotImprovise = false) {
405 switch (D.Type) {
Reid Spencer41dff5e2007-01-26 08:05:27 +0000406 case ValID::LocalID: // Is it a numbered definition?
Reid Spencer68a24bd2005-08-27 18:50:39 +0000407 // Module constants occupy the lowest numbered slots...
Reid Spencer41dff5e2007-01-26 08:05:27 +0000408 if (D.Num < CurModule.Types.size())
409 return CurModule.Types[D.Num];
Reid Spencer68a24bd2005-08-27 18:50:39 +0000410 break;
Reid Spencer41dff5e2007-01-26 08:05:27 +0000411 case ValID::LocalName: // Is it a named definition?
Reid Spencer68a24bd2005-08-27 18:50:39 +0000412 if (const Type *N = CurModule.CurrentModule->getTypeByName(D.Name)) {
413 D.destroy(); // Free old strdup'd memory...
414 return N;
415 }
416 break;
417 default:
Reid Spencerb5334b02007-02-05 10:18:06 +0000418 GenerateError("Internal parser error: Invalid symbol type reference");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000419 return 0;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000420 }
421
422 // If we reached here, we referenced either a symbol that we don't know about
423 // or an id number that hasn't been read yet. We may be referencing something
424 // forward, so just create an entry to be resolved later and get to it...
425 //
426 if (DoNotImprovise) return 0; // Do we just want a null to be returned?
427
428
429 if (inFunctionScope()) {
Reid Spencer41dff5e2007-01-26 08:05:27 +0000430 if (D.Type == ValID::LocalName) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000431 GenerateError("Reference to an undefined type: '" + D.getName() + "'");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000432 return 0;
433 } else {
Reid Spencer41dff5e2007-01-26 08:05:27 +0000434 GenerateError("Reference to an undefined type: #" + utostr(D.Num));
Reid Spencer5b7e7532006-09-28 19:28:24 +0000435 return 0;
436 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000437 }
438
Reid Spencer861d9d62006-11-28 07:29:44 +0000439 std::map<ValID, PATypeHolder>::iterator I =CurModule.LateResolveTypes.find(D);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000440 if (I != CurModule.LateResolveTypes.end())
Reid Spencer861d9d62006-11-28 07:29:44 +0000441 return I->second;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000442
Reid Spencer861d9d62006-11-28 07:29:44 +0000443 Type *Typ = OpaqueType::get();
444 CurModule.LateResolveTypes.insert(std::make_pair(D, Typ));
445 return Typ;
Reid Spencera132e042006-12-03 05:46:11 +0000446 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000447
Reid Spencer68a24bd2005-08-27 18:50:39 +0000448// getValNonImprovising - Look up the value specified by the provided type and
449// the provided ValID. If the value exists and has already been defined, return
450// it. Otherwise return null.
451//
452static Value *getValNonImprovising(const Type *Ty, const ValID &D) {
Reid Spencer5b7e7532006-09-28 19:28:24 +0000453 if (isa<FunctionType>(Ty)) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000454 GenerateError("Functions are not values and "
Reid Spencer68a24bd2005-08-27 18:50:39 +0000455 "must be referenced as pointers");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000456 return 0;
457 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000458
459 switch (D.Type) {
Reid Spencer41dff5e2007-01-26 08:05:27 +0000460 case ValID::LocalID: { // Is it a numbered definition?
461 // Module constants occupy the lowest numbered slots.
462 std::map<const Type*,ValueList>::iterator VI = CurFun.Values.find(Ty);
463 // Make sure that our type is within bounds.
Reid Spencer68a24bd2005-08-27 18:50:39 +0000464 if (VI == CurFun.Values.end()) return 0;
465
Reid Spencer41dff5e2007-01-26 08:05:27 +0000466 // Check that the number is within bounds.
467 if (D.Num >= VI->second.size()) return 0;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000468
Reid Spencer41dff5e2007-01-26 08:05:27 +0000469 return VI->second[D.Num];
470 }
471 case ValID::GlobalID: { // Is it a numbered definition?
472 unsigned Num = D.Num;
473
474 // Module constants occupy the lowest numbered slots...
475 std::map<const Type*,ValueList>::iterator VI = CurModule.Values.find(Ty);
Reid Spenceref9b9a72007-02-05 20:47:22 +0000476 if (VI == CurModule.Values.end())
477 return 0;
478 if (D.Num >= VI->second.size())
479 return 0;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000480 return VI->second[Num];
481 }
Reid Spencer41dff5e2007-01-26 08:05:27 +0000482
483 case ValID::LocalName: { // Is it a named definition?
Reid Spenceref9b9a72007-02-05 20:47:22 +0000484 if (!inFunctionScope())
485 return 0;
486 ValueSymbolTable &SymTab = CurFun.CurrentFunction->getValueSymbolTable();
487 Value *N = SymTab.lookup(D.Name);
488 if (N == 0)
489 return 0;
490 if (N->getType() != Ty)
491 return 0;
Reid Spencer41dff5e2007-01-26 08:05:27 +0000492
493 D.destroy(); // Free old strdup'd memory...
494 return N;
495 }
496 case ValID::GlobalName: { // Is it a named definition?
Reid Spenceref9b9a72007-02-05 20:47:22 +0000497 ValueSymbolTable &SymTab = CurModule.CurrentModule->getValueSymbolTable();
498 Value *N = SymTab.lookup(D.Name);
499 if (N == 0)
500 return 0;
501 if (N->getType() != Ty)
502 return 0;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000503
504 D.destroy(); // Free old strdup'd memory...
505 return N;
506 }
507
508 // Check to make sure that "Ty" is an integral type, and that our
509 // value will fit into the specified type...
510 case ValID::ConstSIntVal: // Is it a constant pool reference??
Reid Spencerb83eb642006-10-20 07:07:24 +0000511 if (!ConstantInt::isValueValidForType(Ty, D.ConstPool64)) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000512 GenerateError("Signed integral constant '" +
Reid Spencer68a24bd2005-08-27 18:50:39 +0000513 itostr(D.ConstPool64) + "' is invalid for type '" +
Reid Spencerb5334b02007-02-05 10:18:06 +0000514 Ty->getDescription() + "'");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000515 return 0;
516 }
Reid Spencerb83eb642006-10-20 07:07:24 +0000517 return ConstantInt::get(Ty, D.ConstPool64);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000518
519 case ValID::ConstUIntVal: // Is it an unsigned const pool reference?
Reid Spencerb83eb642006-10-20 07:07:24 +0000520 if (!ConstantInt::isValueValidForType(Ty, D.UConstPool64)) {
521 if (!ConstantInt::isValueValidForType(Ty, D.ConstPool64)) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000522 GenerateError("Integral constant '" + utostr(D.UConstPool64) +
Reid Spencerb5334b02007-02-05 10:18:06 +0000523 "' is invalid or out of range");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000524 return 0;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000525 } else { // This is really a signed reference. Transmogrify.
Reid Spencerb83eb642006-10-20 07:07:24 +0000526 return ConstantInt::get(Ty, D.ConstPool64);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000527 }
528 } else {
Reid Spencerb83eb642006-10-20 07:07:24 +0000529 return ConstantInt::get(Ty, D.UConstPool64);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000530 }
531
532 case ValID::ConstFPVal: // Is it a floating point const pool reference?
Reid Spencer5b7e7532006-09-28 19:28:24 +0000533 if (!ConstantFP::isValueValidForType(Ty, D.ConstPoolFP)) {
Reid Spencerb5334b02007-02-05 10:18:06 +0000534 GenerateError("FP constant invalid for type");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000535 return 0;
536 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000537 return ConstantFP::get(Ty, D.ConstPoolFP);
538
539 case ValID::ConstNullVal: // Is it a null value?
Reid Spencer5b7e7532006-09-28 19:28:24 +0000540 if (!isa<PointerType>(Ty)) {
Reid Spencerb5334b02007-02-05 10:18:06 +0000541 GenerateError("Cannot create a a non pointer null");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000542 return 0;
543 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000544 return ConstantPointerNull::get(cast<PointerType>(Ty));
545
546 case ValID::ConstUndefVal: // Is it an undef value?
547 return UndefValue::get(Ty);
548
Chris Lattner7aa61892005-12-21 17:53:23 +0000549 case ValID::ConstZeroVal: // Is it a zero value?
550 return Constant::getNullValue(Ty);
551
Reid Spencer68a24bd2005-08-27 18:50:39 +0000552 case ValID::ConstantVal: // Fully resolved constant?
Reid Spencer5b7e7532006-09-28 19:28:24 +0000553 if (D.ConstantValue->getType() != Ty) {
Reid Spencerb5334b02007-02-05 10:18:06 +0000554 GenerateError("Constant expression type different from required type");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000555 return 0;
556 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000557 return D.ConstantValue;
558
Chris Lattner0e9c3762006-01-25 22:27:16 +0000559 case ValID::InlineAsmVal: { // Inline asm expression
560 const PointerType *PTy = dyn_cast<PointerType>(Ty);
561 const FunctionType *FTy =
562 PTy ? dyn_cast<FunctionType>(PTy->getElementType()) : 0;
Reid Spencer5b7e7532006-09-28 19:28:24 +0000563 if (!FTy || !InlineAsm::Verify(FTy, D.IAD->Constraints)) {
Reid Spencerb5334b02007-02-05 10:18:06 +0000564 GenerateError("Invalid type for asm constraint string");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000565 return 0;
566 }
Chris Lattner0e9c3762006-01-25 22:27:16 +0000567 InlineAsm *IA = InlineAsm::get(FTy, D.IAD->AsmString, D.IAD->Constraints,
568 D.IAD->HasSideEffects);
569 D.destroy(); // Free InlineAsmDescriptor.
570 return IA;
571 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000572 default:
Reid Spencera9720f52007-02-05 17:04:00 +0000573 assert(0 && "Unhandled case!");
Reid Spencer68a24bd2005-08-27 18:50:39 +0000574 return 0;
575 } // End of switch
576
Reid Spencera9720f52007-02-05 17:04:00 +0000577 assert(0 && "Unhandled case!");
Reid Spencer68a24bd2005-08-27 18:50:39 +0000578 return 0;
579}
580
581// getVal - This function is identical to getValNonImprovising, except that if a
582// value is not already defined, it "improvises" by creating a placeholder var
583// that looks and acts just like the requested variable. When the value is
584// defined later, all uses of the placeholder variable are replaced with the
585// real thing.
586//
587static Value *getVal(const Type *Ty, const ValID &ID) {
Reid Spencer5b7e7532006-09-28 19:28:24 +0000588 if (Ty == Type::LabelTy) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000589 GenerateError("Cannot use a basic block here");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000590 return 0;
591 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000592
593 // See if the value has already been defined.
594 Value *V = getValNonImprovising(Ty, ID);
595 if (V) return V;
Reid Spencer5b7e7532006-09-28 19:28:24 +0000596 if (TriggerError) return 0;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000597
Reid Spencer5b7e7532006-09-28 19:28:24 +0000598 if (!Ty->isFirstClassType() && !isa<OpaqueType>(Ty)) {
Reid Spencerb5334b02007-02-05 10:18:06 +0000599 GenerateError("Invalid use of a composite type");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000600 return 0;
601 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000602
603 // If we reached here, we referenced either a symbol that we don't know about
604 // or an id number that hasn't been read yet. We may be referencing something
605 // forward, so just create an entry to be resolved later and get to it...
606 //
607 V = new Argument(Ty);
608
609 // Remember where this forward reference came from. FIXME, shouldn't we try
610 // to recycle these things??
611 CurModule.PlaceHolderInfo.insert(std::make_pair(V, std::make_pair(ID,
612 llvmAsmlineno)));
613
614 if (inFunctionScope())
615 InsertValue(V, CurFun.LateResolveValues);
616 else
617 InsertValue(V, CurModule.LateResolveValues);
618 return V;
619}
620
621/// getBBVal - This is used for two purposes:
622/// * If isDefinition is true, a new basic block with the specified ID is being
623/// defined.
624/// * If isDefinition is true, this is a reference to a basic block, which may
625/// or may not be a forward reference.
626///
627static BasicBlock *getBBVal(const ValID &ID, bool isDefinition = false) {
Reid Spencera9720f52007-02-05 17:04:00 +0000628 assert(inFunctionScope() && "Can't get basic block at global scope!");
Reid Spencer68a24bd2005-08-27 18:50:39 +0000629
630 std::string Name;
631 BasicBlock *BB = 0;
632 switch (ID.Type) {
Reid Spencer5b7e7532006-09-28 19:28:24 +0000633 default:
634 GenerateError("Illegal label reference " + ID.getName());
635 return 0;
Reid Spencer41dff5e2007-01-26 08:05:27 +0000636 case ValID::LocalID: // Is it a numbered definition?
637 if (ID.Num >= CurFun.NumberedBlocks.size())
Reid Spencer68a24bd2005-08-27 18:50:39 +0000638 CurFun.NumberedBlocks.resize(ID.Num+1);
639 BB = CurFun.NumberedBlocks[ID.Num];
640 break;
Reid Spencer41dff5e2007-01-26 08:05:27 +0000641 case ValID::LocalName: // Is it a named definition?
Reid Spencer68a24bd2005-08-27 18:50:39 +0000642 Name = ID.Name;
Reid Spenceref9b9a72007-02-05 20:47:22 +0000643 Value *N = CurFun.CurrentFunction->getValueSymbolTable().lookup(Name);
644 if (N && N->getType()->getTypeID() == Type::LabelTyID)
Reid Spencer68a24bd2005-08-27 18:50:39 +0000645 BB = cast<BasicBlock>(N);
646 break;
647 }
648
649 // See if the block has already been defined.
650 if (BB) {
651 // If this is the definition of the block, make sure the existing value was
652 // just a forward reference. If it was a forward reference, there will be
653 // an entry for it in the PlaceHolderInfo map.
Reid Spencer5b7e7532006-09-28 19:28:24 +0000654 if (isDefinition && !CurFun.BBForwardRefs.erase(BB)) {
Reid Spencer68a24bd2005-08-27 18:50:39 +0000655 // The existing value was a definition, not a forward reference.
Reid Spencer61c83e02006-08-18 08:43:06 +0000656 GenerateError("Redefinition of label " + ID.getName());
Reid Spencer5b7e7532006-09-28 19:28:24 +0000657 return 0;
658 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000659
660 ID.destroy(); // Free strdup'd memory.
661 return BB;
662 }
663
664 // Otherwise this block has not been seen before.
665 BB = new BasicBlock("", CurFun.CurrentFunction);
Reid Spencer41dff5e2007-01-26 08:05:27 +0000666 if (ID.Type == ValID::LocalName) {
Reid Spencer68a24bd2005-08-27 18:50:39 +0000667 BB->setName(ID.Name);
668 } else {
669 CurFun.NumberedBlocks[ID.Num] = BB;
670 }
671
672 // If this is not a definition, keep track of it so we can use it as a forward
673 // reference.
674 if (!isDefinition) {
675 // Remember where this forward reference came from.
676 CurFun.BBForwardRefs[BB] = std::make_pair(ID, llvmAsmlineno);
677 } else {
678 // The forward declaration could have been inserted anywhere in the
679 // function: insert it into the correct place now.
680 CurFun.CurrentFunction->getBasicBlockList().remove(BB);
681 CurFun.CurrentFunction->getBasicBlockList().push_back(BB);
682 }
683 ID.destroy();
684 return BB;
685}
686
687
688//===----------------------------------------------------------------------===//
689// Code to handle forward references in instructions
690//===----------------------------------------------------------------------===//
691//
692// This code handles the late binding needed with statements that reference
693// values not defined yet... for example, a forward branch, or the PHI node for
694// a loop body.
695//
696// This keeps a table (CurFun.LateResolveValues) of all such forward references
697// and back patchs after we are done.
698//
699
700// ResolveDefinitions - If we could not resolve some defs at parsing
701// time (forward branches, phi functions for loops, etc...) resolve the
702// defs now...
703//
704static void
705ResolveDefinitions(std::map<const Type*,ValueList> &LateResolvers,
706 std::map<const Type*,ValueList> *FutureLateResolvers) {
707 // Loop over LateResolveDefs fixing up stuff that couldn't be resolved
708 for (std::map<const Type*,ValueList>::iterator LRI = LateResolvers.begin(),
709 E = LateResolvers.end(); LRI != E; ++LRI) {
710 ValueList &List = LRI->second;
711 while (!List.empty()) {
712 Value *V = List.back();
713 List.pop_back();
714
715 std::map<Value*, std::pair<ValID, int> >::iterator PHI =
716 CurModule.PlaceHolderInfo.find(V);
Reid Spencera9720f52007-02-05 17:04:00 +0000717 assert(PHI != CurModule.PlaceHolderInfo.end() && "Placeholder error!");
Reid Spencer68a24bd2005-08-27 18:50:39 +0000718
719 ValID &DID = PHI->second.first;
720
721 Value *TheRealValue = getValNonImprovising(LRI->first, DID);
Reid Spencer5b7e7532006-09-28 19:28:24 +0000722 if (TriggerError)
723 return;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000724 if (TheRealValue) {
725 V->replaceAllUsesWith(TheRealValue);
726 delete V;
727 CurModule.PlaceHolderInfo.erase(PHI);
728 } else if (FutureLateResolvers) {
729 // Functions have their unresolved items forwarded to the module late
730 // resolver table
731 InsertValue(V, *FutureLateResolvers);
732 } else {
Reid Spencer41dff5e2007-01-26 08:05:27 +0000733 if (DID.Type == ValID::LocalName || DID.Type == ValID::GlobalName) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000734 GenerateError("Reference to an invalid definition: '" +DID.getName()+
Reid Spencer68a24bd2005-08-27 18:50:39 +0000735 "' of type '" + V->getType()->getDescription() + "'",
736 PHI->second.second);
Reid Spencer5b7e7532006-09-28 19:28:24 +0000737 return;
738 } else {
Reid Spencer61c83e02006-08-18 08:43:06 +0000739 GenerateError("Reference to an invalid definition: #" +
Reid Spencer68a24bd2005-08-27 18:50:39 +0000740 itostr(DID.Num) + " of type '" +
741 V->getType()->getDescription() + "'",
742 PHI->second.second);
Reid Spencer5b7e7532006-09-28 19:28:24 +0000743 return;
744 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000745 }
746 }
747 }
748
749 LateResolvers.clear();
750}
751
752// ResolveTypeTo - A brand new type was just declared. This means that (if
753// name is not null) things referencing Name can be resolved. Otherwise, things
754// refering to the number can be resolved. Do this now.
755//
756static void ResolveTypeTo(char *Name, const Type *ToTy) {
757 ValID D;
Reid Spencer41dff5e2007-01-26 08:05:27 +0000758 if (Name) D = ValID::createLocalName(Name);
759 else D = ValID::createLocalID(CurModule.Types.size());
Reid Spencer68a24bd2005-08-27 18:50:39 +0000760
Reid Spencer861d9d62006-11-28 07:29:44 +0000761 std::map<ValID, PATypeHolder>::iterator I =
Reid Spencer68a24bd2005-08-27 18:50:39 +0000762 CurModule.LateResolveTypes.find(D);
763 if (I != CurModule.LateResolveTypes.end()) {
Reid Spencer861d9d62006-11-28 07:29:44 +0000764 ((DerivedType*)I->second.get())->refineAbstractTypeTo(ToTy);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000765 CurModule.LateResolveTypes.erase(I);
766 }
767}
768
769// setValueName - Set the specified value to the name given. The name may be
770// null potentially, in which case this is a noop. The string passed in is
771// assumed to be a malloc'd string buffer, and is free'd by this function.
772//
773static void setValueName(Value *V, char *NameStr) {
Reid Spencer41dff5e2007-01-26 08:05:27 +0000774 if (!NameStr) return;
775 std::string Name(NameStr); // Copy string
776 free(NameStr); // Free old string
Reid Spencer68a24bd2005-08-27 18:50:39 +0000777
Reid Spencer41dff5e2007-01-26 08:05:27 +0000778 if (V->getType() == Type::VoidTy) {
Reid Spencerb5334b02007-02-05 10:18:06 +0000779 GenerateError("Can't assign name '" + Name+"' to value with void type");
Reid Spencer41dff5e2007-01-26 08:05:27 +0000780 return;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000781 }
Reid Spencer41dff5e2007-01-26 08:05:27 +0000782
Reid Spencera9720f52007-02-05 17:04:00 +0000783 assert(inFunctionScope() && "Must be in function scope!");
Reid Spenceref9b9a72007-02-05 20:47:22 +0000784 ValueSymbolTable &ST = CurFun.CurrentFunction->getValueSymbolTable();
785 if (ST.lookup(Name)) {
Reid Spencer41dff5e2007-01-26 08:05:27 +0000786 GenerateError("Redefinition of value '" + Name + "' of type '" +
Reid Spencerb5334b02007-02-05 10:18:06 +0000787 V->getType()->getDescription() + "'");
Reid Spencer41dff5e2007-01-26 08:05:27 +0000788 return;
789 }
790
791 // Set the name.
792 V->setName(Name);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000793}
794
795/// ParseGlobalVariable - Handle parsing of a global. If Initializer is null,
796/// this is a declaration, otherwise it is a definition.
Chris Lattnerb475c422005-11-12 18:22:38 +0000797static GlobalVariable *
Anton Korobeynikov178a3522007-01-12 19:22:51 +0000798ParseGlobalVariable(char *NameStr,
799 GlobalValue::LinkageTypes Linkage,
800 GlobalValue::VisibilityTypes Visibility,
Chris Lattnerb475c422005-11-12 18:22:38 +0000801 bool isConstantGlobal, const Type *Ty,
802 Constant *Initializer) {
Reid Spencer5b7e7532006-09-28 19:28:24 +0000803 if (isa<FunctionType>(Ty)) {
Reid Spencerb5334b02007-02-05 10:18:06 +0000804 GenerateError("Cannot declare global vars of function type");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000805 return 0;
806 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000807
808 const PointerType *PTy = PointerType::get(Ty);
809
810 std::string Name;
811 if (NameStr) {
812 Name = NameStr; // Copy string
813 free(NameStr); // Free old string
814 }
815
816 // See if this global value was forward referenced. If so, recycle the
817 // object.
818 ValID ID;
819 if (!Name.empty()) {
Reid Spencer41dff5e2007-01-26 08:05:27 +0000820 ID = ValID::createGlobalName((char*)Name.c_str());
Reid Spencer68a24bd2005-08-27 18:50:39 +0000821 } else {
Reid Spencer41dff5e2007-01-26 08:05:27 +0000822 ID = ValID::createGlobalID(CurModule.Values[PTy].size());
Reid Spencer68a24bd2005-08-27 18:50:39 +0000823 }
824
825 if (GlobalValue *FWGV = CurModule.GetForwardRefForGlobal(PTy, ID)) {
826 // Move the global to the end of the list, from whereever it was
827 // previously inserted.
828 GlobalVariable *GV = cast<GlobalVariable>(FWGV);
829 CurModule.CurrentModule->getGlobalList().remove(GV);
830 CurModule.CurrentModule->getGlobalList().push_back(GV);
831 GV->setInitializer(Initializer);
832 GV->setLinkage(Linkage);
Anton Korobeynikov178a3522007-01-12 19:22:51 +0000833 GV->setVisibility(Visibility);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000834 GV->setConstant(isConstantGlobal);
835 InsertValue(GV, CurModule.Values);
Chris Lattnerb475c422005-11-12 18:22:38 +0000836 return GV;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000837 }
838
Reid Spenceref9b9a72007-02-05 20:47:22 +0000839 // If this global has a name
Reid Spencer68a24bd2005-08-27 18:50:39 +0000840 if (!Name.empty()) {
Reid Spenceref9b9a72007-02-05 20:47:22 +0000841 // if the global we're parsing has an initializer (is a definition) and
842 // has external linkage.
843 if (Initializer && Linkage != GlobalValue::InternalLinkage)
844 // If there is already a global with external linkage with this name
845 if (CurModule.CurrentModule->getGlobalVariable(Name, false)) {
846 // If we allow this GVar to get created, it will be renamed in the
847 // symbol table because it conflicts with an existing GVar. We can't
848 // allow redefinition of GVars whose linking indicates that their name
849 // must stay the same. Issue the error.
850 GenerateError("Redefinition of global variable named '" + Name +
851 "' of type '" + Ty->getDescription() + "'");
852 return 0;
853 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000854 }
855
856 // Otherwise there is no existing GV to use, create one now.
857 GlobalVariable *GV =
858 new GlobalVariable(Ty, isConstantGlobal, Linkage, Initializer, Name,
859 CurModule.CurrentModule);
Anton Korobeynikov178a3522007-01-12 19:22:51 +0000860 GV->setVisibility(Visibility);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000861 InsertValue(GV, CurModule.Values);
Chris Lattnerb475c422005-11-12 18:22:38 +0000862 return GV;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000863}
864
865// setTypeName - Set the specified type to the name given. The name may be
866// null potentially, in which case this is a noop. The string passed in is
867// assumed to be a malloc'd string buffer, and is freed by this function.
868//
869// This function returns true if the type has already been defined, but is
870// allowed to be redefined in the specified context. If the name is a new name
871// for the type plane, it is inserted and false is returned.
872static bool setTypeName(const Type *T, char *NameStr) {
Reid Spencera9720f52007-02-05 17:04:00 +0000873 assert(!inFunctionScope() && "Can't give types function-local names!");
Reid Spencer68a24bd2005-08-27 18:50:39 +0000874 if (NameStr == 0) return false;
875
876 std::string Name(NameStr); // Copy string
877 free(NameStr); // Free old string
878
879 // We don't allow assigning names to void type
Reid Spencer5b7e7532006-09-28 19:28:24 +0000880 if (T == Type::VoidTy) {
Reid Spencerb5334b02007-02-05 10:18:06 +0000881 GenerateError("Can't assign name '" + Name + "' to the void type");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000882 return false;
883 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000884
885 // Set the type name, checking for conflicts as we do so.
886 bool AlreadyExists = CurModule.CurrentModule->addTypeName(Name, T);
887
888 if (AlreadyExists) { // Inserting a name that is already defined???
889 const Type *Existing = CurModule.CurrentModule->getTypeByName(Name);
Reid Spencera9720f52007-02-05 17:04:00 +0000890 assert(Existing && "Conflict but no matching type?!");
Reid Spencer68a24bd2005-08-27 18:50:39 +0000891
892 // There is only one case where this is allowed: when we are refining an
893 // opaque type. In this case, Existing will be an opaque type.
894 if (const OpaqueType *OpTy = dyn_cast<OpaqueType>(Existing)) {
895 // We ARE replacing an opaque type!
896 const_cast<OpaqueType*>(OpTy)->refineAbstractTypeTo(T);
897 return true;
898 }
899
900 // Otherwise, this is an attempt to redefine a type. That's okay if
901 // the redefinition is identical to the original. This will be so if
902 // Existing and T point to the same Type object. In this one case we
903 // allow the equivalent redefinition.
904 if (Existing == T) return true; // Yes, it's equal.
905
906 // Any other kind of (non-equivalent) redefinition is an error.
Reid Spencer63c34452007-01-05 21:51:07 +0000907 GenerateError("Redefinition of type named '" + Name + "' of type '" +
Reid Spencerb5334b02007-02-05 10:18:06 +0000908 T->getDescription() + "'");
Reid Spencer68a24bd2005-08-27 18:50:39 +0000909 }
910
911 return false;
912}
913
914//===----------------------------------------------------------------------===//
915// Code for handling upreferences in type names...
916//
917
918// TypeContains - Returns true if Ty directly contains E in it.
919//
920static bool TypeContains(const Type *Ty, const Type *E) {
921 return std::find(Ty->subtype_begin(), Ty->subtype_end(),
922 E) != Ty->subtype_end();
923}
924
925namespace {
926 struct UpRefRecord {
927 // NestingLevel - The number of nesting levels that need to be popped before
928 // this type is resolved.
929 unsigned NestingLevel;
930
931 // LastContainedTy - This is the type at the current binding level for the
932 // type. Every time we reduce the nesting level, this gets updated.
933 const Type *LastContainedTy;
934
935 // UpRefTy - This is the actual opaque type that the upreference is
936 // represented with.
937 OpaqueType *UpRefTy;
938
939 UpRefRecord(unsigned NL, OpaqueType *URTy)
940 : NestingLevel(NL), LastContainedTy(URTy), UpRefTy(URTy) {}
941 };
942}
943
944// UpRefs - A list of the outstanding upreferences that need to be resolved.
945static std::vector<UpRefRecord> UpRefs;
946
947/// HandleUpRefs - Every time we finish a new layer of types, this function is
948/// called. It loops through the UpRefs vector, which is a list of the
949/// currently active types. For each type, if the up reference is contained in
950/// the newly completed type, we decrement the level count. When the level
951/// count reaches zero, the upreferenced type is the type that is passed in:
952/// thus we can complete the cycle.
953///
954static PATypeHolder HandleUpRefs(const Type *ty) {
Chris Lattner224f84f2006-08-18 17:34:45 +0000955 // If Ty isn't abstract, or if there are no up-references in it, then there is
956 // nothing to resolve here.
957 if (!ty->isAbstract() || UpRefs.empty()) return ty;
958
Reid Spencer68a24bd2005-08-27 18:50:39 +0000959 PATypeHolder Ty(ty);
960 UR_OUT("Type '" << Ty->getDescription() <<
961 "' newly formed. Resolving upreferences.\n" <<
962 UpRefs.size() << " upreferences active!\n");
963
964 // If we find any resolvable upreferences (i.e., those whose NestingLevel goes
965 // to zero), we resolve them all together before we resolve them to Ty. At
966 // the end of the loop, if there is anything to resolve to Ty, it will be in
967 // this variable.
968 OpaqueType *TypeToResolve = 0;
969
970 for (unsigned i = 0; i != UpRefs.size(); ++i) {
971 UR_OUT(" UR#" << i << " - TypeContains(" << Ty->getDescription() << ", "
972 << UpRefs[i].second->getDescription() << ") = "
973 << (TypeContains(Ty, UpRefs[i].second) ? "true" : "false") << "\n");
974 if (TypeContains(Ty, UpRefs[i].LastContainedTy)) {
975 // Decrement level of upreference
976 unsigned Level = --UpRefs[i].NestingLevel;
977 UpRefs[i].LastContainedTy = Ty;
978 UR_OUT(" Uplevel Ref Level = " << Level << "\n");
979 if (Level == 0) { // Upreference should be resolved!
980 if (!TypeToResolve) {
981 TypeToResolve = UpRefs[i].UpRefTy;
982 } else {
983 UR_OUT(" * Resolving upreference for "
984 << UpRefs[i].second->getDescription() << "\n";
985 std::string OldName = UpRefs[i].UpRefTy->getDescription());
986 UpRefs[i].UpRefTy->refineAbstractTypeTo(TypeToResolve);
987 UR_OUT(" * Type '" << OldName << "' refined upreference to: "
988 << (const void*)Ty << ", " << Ty->getDescription() << "\n");
989 }
990 UpRefs.erase(UpRefs.begin()+i); // Remove from upreference list...
991 --i; // Do not skip the next element...
992 }
993 }
994 }
995
996 if (TypeToResolve) {
997 UR_OUT(" * Resolving upreference for "
998 << UpRefs[i].second->getDescription() << "\n";
999 std::string OldName = TypeToResolve->getDescription());
1000 TypeToResolve->refineAbstractTypeTo(Ty);
1001 }
1002
1003 return Ty;
1004}
1005
Reid Spencer68a24bd2005-08-27 18:50:39 +00001006//===----------------------------------------------------------------------===//
1007// RunVMAsmParser - Define an interface to this parser
1008//===----------------------------------------------------------------------===//
1009//
Reid Spencer14310612006-12-31 05:40:51 +00001010static Module* RunParser(Module * M);
1011
Reid Spencer68a24bd2005-08-27 18:50:39 +00001012Module *llvm::RunVMAsmParser(const std::string &Filename, FILE *F) {
1013 set_scan_file(F);
1014
1015 CurFilename = Filename;
1016 return RunParser(new Module(CurFilename));
1017}
1018
1019Module *llvm::RunVMAsmParser(const char * AsmString, Module * M) {
1020 set_scan_string(AsmString);
1021
1022 CurFilename = "from_memory";
1023 if (M == NULL) {
1024 return RunParser(new Module (CurFilename));
1025 } else {
1026 return RunParser(M);
1027 }
1028}
1029
1030
Chris Lattner9d2fda62007-02-13 05:53:56 +00001031#line 901 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
1032typedef union {
Reid Spencer68a24bd2005-08-27 18:50:39 +00001033 llvm::Module *ModuleVal;
1034 llvm::Function *FunctionVal;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001035 llvm::BasicBlock *BasicBlockVal;
1036 llvm::TerminatorInst *TermInstVal;
1037 llvm::Instruction *InstVal;
Reid Spencera132e042006-12-03 05:46:11 +00001038 llvm::Constant *ConstVal;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001039
Reid Spencera132e042006-12-03 05:46:11 +00001040 const llvm::Type *PrimType;
Reid Spencer14310612006-12-31 05:40:51 +00001041 std::list<llvm::PATypeHolder> *TypeList;
Reid Spencera132e042006-12-03 05:46:11 +00001042 llvm::PATypeHolder *TypeVal;
1043 llvm::Value *ValueVal;
Reid Spencera132e042006-12-03 05:46:11 +00001044 std::vector<llvm::Value*> *ValueList;
Reid Spencer14310612006-12-31 05:40:51 +00001045 llvm::ArgListType *ArgList;
1046 llvm::TypeWithAttrs TypeWithAttrs;
1047 llvm::TypeWithAttrsList *TypeWithAttrsList;
1048 llvm::ValueRefList *ValueRefList;
1049
Reid Spencer68a24bd2005-08-27 18:50:39 +00001050 // Represent the RHS of PHI node
Reid Spencera132e042006-12-03 05:46:11 +00001051 std::list<std::pair<llvm::Value*,
1052 llvm::BasicBlock*> > *PHIList;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001053 std::vector<std::pair<llvm::Constant*, llvm::BasicBlock*> > *JumpTable;
Reid Spencera132e042006-12-03 05:46:11 +00001054 std::vector<llvm::Constant*> *ConstVector;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001055
1056 llvm::GlobalValue::LinkageTypes Linkage;
Anton Korobeynikov178a3522007-01-12 19:22:51 +00001057 llvm::GlobalValue::VisibilityTypes Visibility;
Reid Spencer14310612006-12-31 05:40:51 +00001058 llvm::FunctionType::ParameterAttributes ParamAttrs;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001059 int64_t SInt64Val;
1060 uint64_t UInt64Val;
1061 int SIntVal;
1062 unsigned UIntVal;
1063 double FPVal;
1064 bool BoolVal;
1065
1066 char *StrVal; // This memory is strdup'd!
Reid Spencer1628cec2006-10-26 06:15:43 +00001067 llvm::ValID ValIDVal; // strdup'd memory maybe!
Reid Spencer68a24bd2005-08-27 18:50:39 +00001068
Reid Spencera132e042006-12-03 05:46:11 +00001069 llvm::Instruction::BinaryOps BinaryOpVal;
1070 llvm::Instruction::TermOps TermOpVal;
1071 llvm::Instruction::MemoryOps MemOpVal;
1072 llvm::Instruction::CastOps CastOpVal;
1073 llvm::Instruction::OtherOps OtherOpVal;
Reid Spencera132e042006-12-03 05:46:11 +00001074 llvm::ICmpInst::Predicate IPredicate;
1075 llvm::FCmpInst::Predicate FPredicate;
Chris Lattner9d2fda62007-02-13 05:53:56 +00001076} YYSTYPE;
1077#include <stdio.h>
1078
1079#ifndef __cplusplus
1080#ifndef __STDC__
1081#define const
1082#endif
Reid Spencer68a24bd2005-08-27 18:50:39 +00001083#endif
1084
Reid Spencer41dff5e2007-01-26 08:05:27 +00001085
Reid Spencer68a24bd2005-08-27 18:50:39 +00001086
Chris Lattner9d2fda62007-02-13 05:53:56 +00001087#define YYFINAL 557
1088#define YYFLAG -32768
1089#define YYNTBASE 146
Reid Spencer68a24bd2005-08-27 18:50:39 +00001090
Chris Lattner9d2fda62007-02-13 05:53:56 +00001091#define YYTRANSLATE(x) ((unsigned)(x) <= 385 ? yytranslate[x] : 223)
Reid Spencer68a24bd2005-08-27 18:50:39 +00001092
Chris Lattner9d2fda62007-02-13 05:53:56 +00001093static const short yytranslate[] = { 0,
1094 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1095 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1096 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1097 2, 2, 2, 2, 2, 2, 2, 2, 2, 136,
1098 137, 134, 2, 133, 2, 2, 2, 2, 2, 2,
1099 2, 2, 2, 2, 2, 2, 2, 2, 2, 141,
1100 132, 142, 2, 2, 2, 2, 2, 2, 2, 2,
1101 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1102 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1103 138, 135, 140, 2, 2, 2, 2, 2, 145, 2,
1104 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1105 2, 2, 2, 2, 2, 2, 2, 2, 2, 139,
1106 2, 2, 143, 2, 144, 2, 2, 2, 2, 2,
1107 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1108 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1109 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1110 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1111 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1112 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1113 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1114 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1115 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1116 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1117 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1118 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1119 2, 2, 2, 2, 2, 1, 3, 4, 5, 6,
1120 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
1121 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
1122 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
1123 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
1124 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
1125 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
1126 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
1127 77, 78, 79, 80, 81, 82, 83, 84, 85, 86,
1128 87, 88, 89, 90, 91, 92, 93, 94, 95, 96,
1129 97, 98, 99, 100, 101, 102, 103, 104, 105, 106,
1130 107, 108, 109, 110, 111, 112, 113, 114, 115, 116,
1131 117, 118, 119, 120, 121, 122, 123, 124, 125, 126,
1132 127, 128, 129, 130, 131
1133};
Reid Spencer41dff5e2007-01-26 08:05:27 +00001134
Chris Lattner9d2fda62007-02-13 05:53:56 +00001135#if YYDEBUG != 0
1136static const short yyprhs[] = { 0,
1137 0, 2, 4, 6, 8, 10, 12, 14, 16, 18,
1138 20, 22, 24, 26, 28, 30, 32, 34, 36, 38,
1139 40, 42, 44, 46, 48, 50, 52, 54, 56, 58,
1140 60, 62, 64, 66, 68, 70, 72, 74, 76, 78,
1141 80, 82, 84, 86, 88, 90, 92, 94, 96, 98,
1142 100, 102, 104, 106, 108, 110, 112, 114, 116, 118,
1143 119, 122, 123, 125, 127, 130, 131, 133, 135, 137,
1144 139, 141, 143, 145, 147, 148, 150, 151, 153, 155,
1145 156, 158, 160, 162, 164, 165, 167, 169, 171, 173,
1146 175, 178, 180, 182, 184, 186, 187, 190, 192, 194,
1147 195, 198, 199, 202, 203, 207, 210, 211, 213, 214,
1148 218, 220, 223, 225, 227, 229, 231, 233, 235, 238,
1149 240, 243, 249, 255, 261, 267, 271, 274, 280, 285,
1150 288, 290, 292, 294, 298, 300, 304, 306, 307, 309,
1151 313, 318, 322, 326, 331, 336, 340, 347, 353, 356,
1152 359, 362, 365, 368, 371, 374, 377, 380, 383, 390,
1153 396, 405, 412, 419, 427, 435, 442, 451, 460, 464,
1154 466, 468, 470, 472, 473, 475, 478, 479, 483, 484,
1155 488, 492, 494, 498, 502, 503, 510, 511, 519, 520,
1156 528, 531, 535, 537, 541, 545, 549, 553, 555, 556,
1157 562, 566, 568, 572, 574, 575, 585, 587, 589, 594,
1158 596, 598, 601, 605, 606, 608, 610, 612, 614, 616,
1159 618, 620, 622, 624, 628, 630, 636, 638, 640, 642,
1160 644, 646, 648, 651, 654, 657, 661, 664, 665, 667,
1161 670, 673, 677, 687, 697, 706, 721, 723, 725, 732,
1162 738, 741, 748, 756, 760, 766, 767, 768, 772, 775,
1163 777, 783, 789, 796, 803, 808, 815, 820, 825, 832,
1164 839, 842, 851, 853, 855, 856, 860, 867, 871, 878,
1165 881, 886, 893
1166};
1167
1168static const short yyrhs[] = { 66,
1169 0, 67, 0, 68, 0, 69, 0, 70, 0, 71,
1170 0, 72, 0, 73, 0, 74, 0, 78, 0, 79,
1171 0, 80, 0, 75, 0, 76, 0, 77, 0, 109,
1172 0, 110, 0, 111, 0, 112, 0, 113, 0, 114,
1173 0, 115, 0, 116, 0, 117, 0, 118, 0, 119,
1174 0, 120, 0, 83, 0, 84, 0, 85, 0, 86,
1175 0, 87, 0, 88, 0, 89, 0, 90, 0, 91,
1176 0, 92, 0, 93, 0, 94, 0, 95, 0, 96,
1177 0, 97, 0, 98, 0, 99, 0, 100, 0, 101,
1178 0, 102, 0, 89, 0, 90, 0, 91, 0, 92,
1179 0, 21, 0, 22, 0, 9, 0, 10, 0, 11,
1180 0, 14, 0, 17, 0, 153, 0, 0, 153, 132,
1181 0, 0, 15, 0, 18, 0, 156, 132, 0, 0,
1182 35, 0, 37, 0, 36, 0, 38, 0, 40, 0,
1183 39, 0, 41, 0, 43, 0, 0, 131, 0, 0,
1184 39, 0, 41, 0, 0, 35, 0, 36, 0, 37,
1185 0, 40, 0, 0, 54, 0, 55, 0, 56, 0,
1186 57, 0, 58, 0, 53, 4, 0, 110, 0, 111,
1187 0, 128, 0, 129, 0, 0, 165, 164, 0, 127,
1188 0, 164, 0, 0, 167, 166, 0, 0, 46, 4,
1189 0, 0, 133, 46, 4, 0, 29, 17, 0, 0,
1190 170, 0, 0, 133, 173, 172, 0, 170, 0, 46,
1191 4, 0, 9, 0, 10, 0, 11, 0, 12, 0,
1192 42, 0, 174, 0, 175, 134, 0, 207, 0, 135,
1193 4, 0, 175, 136, 179, 137, 167, 0, 8, 136,
1194 179, 137, 167, 0, 138, 4, 139, 175, 140, 0,
1195 141, 4, 139, 175, 142, 0, 143, 180, 144, 0,
1196 143, 144, 0, 141, 143, 180, 144, 142, 0, 141,
1197 143, 144, 142, 0, 175, 165, 0, 175, 0, 8,
1198 0, 176, 0, 178, 133, 176, 0, 178, 0, 178,
1199 133, 32, 0, 32, 0, 0, 175, 0, 180, 133,
1200 175, 0, 175, 138, 183, 140, 0, 175, 138, 140,
1201 0, 175, 145, 17, 0, 175, 141, 183, 142, 0,
1202 175, 143, 183, 144, 0, 175, 143, 144, 0, 175,
1203 141, 143, 183, 144, 142, 0, 175, 141, 143, 144,
1204 142, 0, 175, 33, 0, 175, 34, 0, 175, 207,
1205 0, 175, 182, 0, 175, 20, 0, 151, 3, 0,
1206 151, 4, 0, 9, 21, 0, 9, 22, 0, 152,
1207 7, 0, 148, 136, 181, 31, 175, 137, 0, 108,
1208 136, 181, 218, 137, 0, 122, 136, 181, 133, 181,
1209 133, 181, 137, 0, 146, 136, 181, 133, 181, 137,
1210 0, 147, 136, 181, 133, 181, 137, 0, 81, 149,
1211 136, 181, 133, 181, 137, 0, 82, 150, 136, 181,
1212 133, 181, 137, 0, 124, 136, 181, 133, 181, 137,
1213 0, 125, 136, 181, 133, 181, 133, 181, 137, 0,
1214 126, 136, 181, 133, 181, 133, 181, 137, 0, 183,
1215 133, 181, 0, 181, 0, 27, 0, 28, 0, 186,
1216 0, 0, 187, 0, 186, 187, 0, 0, 26, 188,
1217 203, 0, 0, 25, 189, 204, 0, 51, 50, 193,
1218 0, 19, 0, 155, 13, 175, 0, 155, 13, 8,
1219 0, 0, 157, 160, 184, 181, 190, 172, 0, 0,
1220 157, 158, 160, 184, 181, 191, 172, 0, 0, 157,
1221 159, 160, 184, 175, 192, 172, 0, 44, 194, 0,
1222 47, 132, 195, 0, 17, 0, 45, 132, 17, 0,
1223 59, 132, 17, 0, 138, 196, 140, 0, 196, 133,
1224 17, 0, 17, 0, 0, 197, 133, 175, 165, 154,
1225 0, 175, 165, 154, 0, 197, 0, 197, 133, 32,
1226 0, 32, 0, 0, 163, 177, 156, 136, 198, 137,
1227 167, 171, 168, 0, 23, 0, 143, 0, 162, 160,
1228 199, 200, 0, 24, 0, 144, 0, 210, 202, 0,
1229 161, 160, 199, 0, 0, 52, 0, 3, 0, 4,
1230 0, 7, 0, 21, 0, 22, 0, 33, 0, 34,
1231 0, 20, 0, 141, 183, 142, 0, 182, 0, 50,
1232 205, 17, 133, 17, 0, 5, 0, 6, 0, 153,
1233 0, 156, 0, 207, 0, 206, 0, 175, 208, 0,
1234 210, 211, 0, 201, 211, 0, 212, 155, 213, 0,
1235 212, 215, 0, 0, 16, 0, 60, 209, 0, 60,
1236 8, 0, 61, 12, 208, 0, 61, 9, 208, 133,
1237 12, 208, 133, 12, 208, 0, 62, 151, 208, 133,
1238 12, 208, 138, 214, 140, 0, 62, 151, 208, 133,
1239 12, 208, 138, 140, 0, 63, 163, 177, 208, 136,
1240 217, 137, 167, 31, 12, 208, 64, 12, 208, 0,
1241 64, 0, 65, 0, 214, 151, 206, 133, 12, 208,
1242 0, 151, 206, 133, 12, 208, 0, 155, 220, 0,
1243 175, 138, 208, 133, 208, 140, 0, 216, 133, 138,
1244 208, 133, 208, 140, 0, 175, 208, 165, 0, 217,
1245 133, 175, 208, 165, 0, 0, 0, 218, 133, 209,
1246 0, 49, 48, 0, 48, 0, 146, 175, 208, 133,
1247 208, 0, 147, 175, 208, 133, 208, 0, 81, 149,
1248 175, 208, 133, 208, 0, 82, 150, 175, 208, 133,
1249 208, 0, 148, 209, 31, 175, 0, 122, 209, 133,
1250 209, 133, 209, 0, 123, 209, 133, 175, 0, 124,
1251 209, 133, 209, 0, 125, 209, 133, 209, 133, 209,
1252 0, 126, 209, 133, 209, 133, 209, 0, 121, 216,
1253 0, 219, 163, 177, 208, 136, 217, 137, 167, 0,
1254 222, 0, 30, 0, 0, 103, 175, 169, 0, 103,
1255 175, 133, 9, 208, 169, 0, 104, 175, 169, 0,
1256 104, 175, 133, 9, 208, 169, 0, 105, 209, 0,
1257 221, 106, 175, 208, 0, 221, 107, 209, 133, 175,
1258 208, 0, 108, 175, 208, 218, 0
1259};
1260
Anton Korobeynikov178a3522007-01-12 19:22:51 +00001261#endif
1262
Chris Lattner9d2fda62007-02-13 05:53:56 +00001263#if YYDEBUG != 0
1264static const short yyrline[] = { 0,
1265 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1049,
1266 1049, 1049, 1049, 1049, 1049, 1050, 1050, 1050, 1050, 1050,
1267 1050, 1050, 1051, 1051, 1051, 1051, 1051, 1054, 1054, 1055,
1268 1055, 1056, 1056, 1057, 1057, 1058, 1058, 1062, 1062, 1063,
1269 1063, 1064, 1064, 1065, 1065, 1066, 1066, 1067, 1067, 1068,
1270 1068, 1069, 1070, 1075, 1076, 1076, 1078, 1078, 1079, 1079,
1271 1083, 1087, 1092, 1092, 1094, 1098, 1104, 1105, 1106, 1107,
1272 1108, 1112, 1113, 1114, 1118, 1119, 1123, 1124, 1125, 1129,
1273 1130, 1131, 1132, 1133, 1136, 1136, 1137, 1138, 1139, 1140,
1274 1141, 1149, 1150, 1151, 1152, 1155, 1156, 1161, 1162, 1165,
1275 1166, 1173, 1173, 1180, 1180, 1189, 1197, 1197, 1203, 1203,
1276 1205, 1210, 1223, 1223, 1223, 1223, 1226, 1230, 1234, 1241,
1277 1246, 1254, 1272, 1290, 1295, 1307, 1317, 1321, 1331, 1338,
1278 1345, 1352, 1357, 1362, 1369, 1370, 1377, 1384, 1392, 1397,
1279 1408, 1436, 1452, 1481, 1509, 1534, 1553, 1578, 1597, 1609,
1280 1616, 1682, 1692, 1702, 1708, 1714, 1719, 1724, 1732, 1744,
1281 1766, 1774, 1780, 1791, 1796, 1801, 1807, 1813, 1822, 1826,
1282 1834, 1834, 1845, 1850, 1858, 1859, 1863, 1863, 1867, 1867,
1283 1870, 1873, 1885, 1909, 1920, 1927, 1930, 1935, 1938, 1944,
1284 1948, 1951, 1957, 1970, 1974, 1979, 1981, 1986, 1991, 2000,
1285 2010, 2021, 2025, 2034, 2043, 2048, 2160, 2160, 2162, 2171,
1286 2171, 2173, 2178, 2190, 2194, 2199, 2203, 2207, 2211, 2215,
1287 2219, 2223, 2227, 2231, 2256, 2260, 2274, 2278, 2282, 2286,
1288 2292, 2292, 2298, 2307, 2311, 2320, 2330, 2339, 2351, 2364,
1289 2368, 2372, 2377, 2387, 2406, 2415, 2482, 2486, 2493, 2504,
1290 2517, 2527, 2538, 2548, 2556, 2564, 2567, 2568, 2575, 2579,
1291 2584, 2605, 2622, 2635, 2648, 2660, 2668, 2675, 2681, 2687,
1292 2693, 2708, 2772, 2777, 2781, 2788, 2795, 2803, 2810, 2818,
1293 2826, 2840, 2857
1294};
1295#endif
1296
1297
1298#if YYDEBUG != 0 || defined (YYERROR_VERBOSE)
1299
1300static const char * const yytname[] = { "$","error","$undefined.","ESINT64VAL",
1301"EUINT64VAL","LOCALVAL_ID","GLOBALVAL_ID","FPVAL","VOID","INTTYPE","FLOAT","DOUBLE",
1302"LABEL","TYPE","LOCALVAR","GLOBALVAR","LABELSTR","STRINGCONSTANT","ATSTRINGCONSTANT",
1303"IMPLEMENTATION","ZEROINITIALIZER","TRUETOK","FALSETOK","BEGINTOK","ENDTOK",
1304"DECLARE","DEFINE","GLOBAL","CONSTANT","SECTION","VOLATILE","TO","DOTDOTDOT",
1305"NULL_TOK","UNDEF","INTERNAL","LINKONCE","WEAK","APPENDING","DLLIMPORT","DLLEXPORT",
1306"EXTERN_WEAK","OPAQUE","EXTERNAL","TARGET","TRIPLE","ALIGN","DEPLIBS","CALL",
1307"TAIL","ASM_TOK","MODULE","SIDEEFFECT","CC_TOK","CCC_TOK","FASTCC_TOK","COLDCC_TOK",
1308"X86_STDCALLCC_TOK","X86_FASTCALLCC_TOK","DATALAYOUT","RET","BR","SWITCH","INVOKE",
1309"UNWIND","UNREACHABLE","ADD","SUB","MUL","UDIV","SDIV","FDIV","UREM","SREM",
1310"FREM","AND","OR","XOR","SHL","LSHR","ASHR","ICMP","FCMP","EQ","NE","SLT","SGT",
1311"SLE","SGE","ULT","UGT","ULE","UGE","OEQ","ONE","OLT","OGT","OLE","OGE","ORD",
1312"UNO","UEQ","UNE","MALLOC","ALLOCA","FREE","LOAD","STORE","GETELEMENTPTR","TRUNC",
1313"ZEXT","SEXT","FPTRUNC","FPEXT","BITCAST","UITOFP","SITOFP","FPTOUI","FPTOSI",
1314"INTTOPTR","PTRTOINT","PHI_TOK","SELECT","VAARG","EXTRACTELEMENT","INSERTELEMENT",
1315"SHUFFLEVECTOR","NORETURN","INREG","SRET","DEFAULT","HIDDEN","'='","','","'*'",
1316"'\\\\'","'('","')'","'['","'x'","']'","'<'","'>'","'{'","'}'","'c'","ArithmeticOps",
1317"LogicalOps","CastOps","IPredicates","FPredicates","IntType","FPType","LocalName",
1318"OptLocalName","OptLocalAssign","GlobalName","OptGlobalAssign","GVInternalLinkage",
1319"GVExternalLinkage","GVVisibilityStyle","FunctionDeclareLinkage","FunctionDefineLinkage",
1320"OptCallingConv","ParamAttr","OptParamAttrs","FuncAttr","OptFuncAttrs","OptAlign",
1321"OptCAlign","SectionString","OptSection","GlobalVarAttributes","GlobalVarAttribute",
1322"PrimType","Types","ArgType","ResultTypes","ArgTypeList","ArgTypeListI","TypeListI",
1323"ConstVal","ConstExpr","ConstVector","GlobalType","Module","DefinitionList",
1324"Definition","@1","@2","@3","@4","@5","AsmBlock","TargetDefinition","LibrariesDefinition",
1325"LibList","ArgListH","ArgList","FunctionHeaderH","BEGIN","FunctionHeader","END",
1326"Function","FunctionProto","OptSideEffect","ConstValueRef","SymbolicValueRef",
1327"ValueRef","ResolvedVal","BasicBlockList","BasicBlock","InstructionList","BBTerminatorInst",
1328"JumpTable","Inst","PHIList","ValueRefList","IndexList","OptTailCall","InstVal",
1329"OptVolatile","MemoryInst", NULL
1330};
1331#endif
1332
1333static const short yyr1[] = { 0,
1334 146, 146, 146, 146, 146, 146, 146, 146, 146, 147,
1335 147, 147, 147, 147, 147, 148, 148, 148, 148, 148,
1336 148, 148, 148, 148, 148, 148, 148, 149, 149, 149,
1337 149, 149, 149, 149, 149, 149, 149, 150, 150, 150,
1338 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1339 150, 150, 150, 151, 152, 152, 153, 153, 154, 154,
1340 155, 155, 156, 156, 157, 157, 158, 158, 158, 158,
1341 158, 159, 159, 159, 160, 160, 161, 161, 161, 162,
1342 162, 162, 162, 162, 163, 163, 163, 163, 163, 163,
1343 163, 164, 164, 164, 164, 165, 165, 166, 166, 167,
1344 167, 168, 168, 169, 169, 170, 171, 171, 172, 172,
1345 173, 173, 174, 174, 174, 174, 175, 175, 175, 175,
1346 175, 175, 175, 175, 175, 175, 175, 175, 175, 176,
1347 177, 177, 178, 178, 179, 179, 179, 179, 180, 180,
1348 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
1349 181, 181, 181, 181, 181, 181, 181, 181, 182, 182,
1350 182, 182, 182, 182, 182, 182, 182, 182, 183, 183,
1351 184, 184, 185, 185, 186, 186, 188, 187, 189, 187,
1352 187, 187, 187, 187, 190, 187, 191, 187, 192, 187,
1353 187, 187, 193, 194, 194, 195, 196, 196, 196, 197,
1354 197, 198, 198, 198, 198, 199, 200, 200, 201, 202,
1355 202, 203, 204, 205, 205, 206, 206, 206, 206, 206,
1356 206, 206, 206, 206, 206, 206, 207, 207, 207, 207,
1357 208, 208, 209, 210, 210, 211, 212, 212, 212, 213,
1358 213, 213, 213, 213, 213, 213, 213, 213, 214, 214,
1359 215, 216, 216, 217, 217, 217, 218, 218, 219, 219,
1360 220, 220, 220, 220, 220, 220, 220, 220, 220, 220,
1361 220, 220, 220, 221, 221, 222, 222, 222, 222, 222,
1362 222, 222, 222
1363};
1364
1365static const short yyr2[] = { 0,
1366 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1367 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1368 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1369 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1370 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1371 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
1372 2, 0, 1, 1, 2, 0, 1, 1, 1, 1,
1373 1, 1, 1, 1, 0, 1, 0, 1, 1, 0,
1374 1, 1, 1, 1, 0, 1, 1, 1, 1, 1,
1375 2, 1, 1, 1, 1, 0, 2, 1, 1, 0,
1376 2, 0, 2, 0, 3, 2, 0, 1, 0, 3,
1377 1, 2, 1, 1, 1, 1, 1, 1, 2, 1,
1378 2, 5, 5, 5, 5, 3, 2, 5, 4, 2,
1379 1, 1, 1, 3, 1, 3, 1, 0, 1, 3,
1380 4, 3, 3, 4, 4, 3, 6, 5, 2, 2,
1381 2, 2, 2, 2, 2, 2, 2, 2, 6, 5,
1382 8, 6, 6, 7, 7, 6, 8, 8, 3, 1,
1383 1, 1, 1, 0, 1, 2, 0, 3, 0, 3,
1384 3, 1, 3, 3, 0, 6, 0, 7, 0, 7,
1385 2, 3, 1, 3, 3, 3, 3, 1, 0, 5,
1386 3, 1, 3, 1, 0, 9, 1, 1, 4, 1,
1387 1, 2, 3, 0, 1, 1, 1, 1, 1, 1,
1388 1, 1, 1, 3, 1, 5, 1, 1, 1, 1,
1389 1, 1, 2, 2, 2, 3, 2, 0, 1, 2,
1390 2, 3, 9, 9, 8, 14, 1, 1, 6, 5,
1391 2, 6, 7, 3, 5, 0, 0, 3, 2, 1,
1392 5, 5, 6, 6, 4, 6, 4, 4, 6, 6,
1393 2, 8, 1, 1, 0, 3, 6, 3, 6, 2,
1394 4, 6, 4
1395};
1396
1397static const short yydefact[] = { 66,
1398 57, 63, 58, 64, 182, 179, 177, 0, 0, 0,
1399 0, 0, 0, 75, 66, 175, 77, 80, 0, 0,
1400 191, 0, 0, 61, 0, 65, 67, 69, 68, 70,
1401 72, 71, 73, 74, 76, 75, 75, 0, 176, 78,
1402 79, 75, 180, 81, 82, 83, 84, 75, 238, 178,
1403 238, 0, 0, 199, 192, 193, 181, 227, 228, 184,
1404 113, 114, 115, 116, 117, 0, 0, 0, 0, 229,
1405 230, 118, 183, 120, 0, 0, 171, 172, 0, 85,
1406 85, 239, 235, 62, 210, 211, 212, 234, 194, 195,
1407 198, 0, 138, 121, 0, 0, 0, 0, 127, 139,
1408 0, 119, 138, 0, 0, 113, 114, 115, 0, 0,
1409 0, 185, 0, 86, 87, 88, 89, 90, 0, 213,
1410 0, 275, 237, 0, 196, 137, 96, 133, 135, 0,
1411 0, 0, 0, 0, 0, 126, 0, 187, 189, 156,
1412 157, 154, 155, 158, 153, 149, 150, 1, 2, 3,
1413 4, 5, 6, 7, 8, 9, 13, 14, 15, 10,
1414 11, 12, 0, 0, 0, 16, 17, 18, 19, 20,
1415 21, 22, 23, 24, 25, 26, 27, 0, 0, 0,
1416 0, 0, 0, 0, 0, 0, 0, 0, 152, 151,
1417 109, 91, 132, 131, 0, 207, 208, 209, 274, 260,
1418 0, 0, 0, 0, 85, 247, 248, 0, 0, 0,
1419 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1420 0, 0, 236, 85, 251, 0, 273, 197, 130, 0,
1421 100, 0, 0, 129, 0, 140, 100, 109, 109, 28,
1422 29, 30, 31, 32, 33, 34, 35, 36, 37, 0,
1423 52, 53, 48, 49, 50, 51, 38, 39, 40, 41,
1424 42, 43, 44, 45, 46, 47, 0, 0, 0, 0,
1425 0, 0, 142, 170, 0, 0, 0, 146, 0, 143,
1426 0, 0, 0, 0, 186, 0, 259, 241, 0, 240,
1427 0, 0, 54, 0, 0, 0, 0, 104, 104, 280,
1428 0, 0, 271, 0, 0, 0, 0, 0, 0, 0,
1429 0, 0, 0, 0, 92, 93, 94, 95, 97, 136,
1430 134, 123, 124, 125, 128, 122, 188, 190, 0, 0,
1431 257, 0, 0, 0, 0, 0, 141, 127, 139, 0,
1432 144, 145, 0, 0, 0, 0, 0, 111, 109, 205,
1433 216, 217, 218, 223, 219, 220, 221, 222, 214, 0,
1434 225, 232, 231, 233, 0, 242, 0, 0, 0, 0,
1435 0, 276, 0, 278, 257, 0, 0, 0, 0, 0,
1436 0, 0, 0, 0, 0, 0, 0, 0, 98, 99,
1437 101, 0, 0, 0, 0, 0, 0, 0, 169, 148,
1438 0, 0, 0, 0, 106, 112, 110, 204, 96, 202,
1439 0, 215, 0, 0, 0, 0, 0, 0, 0, 0,
1440 0, 0, 283, 0, 0, 0, 267, 268, 0, 0,
1441 0, 0, 265, 0, 281, 0, 0, 0, 0, 160,
1442 0, 0, 0, 0, 147, 0, 0, 0, 60, 0,
1443 100, 0, 224, 0, 0, 256, 0, 0, 104, 105,
1444 104, 0, 0, 0, 0, 0, 261, 262, 256, 0,
1445 0, 0, 258, 0, 166, 0, 0, 162, 163, 159,
1446 59, 201, 203, 96, 107, 0, 0, 0, 0, 0,
1447 263, 264, 0, 277, 279, 0, 0, 266, 269, 270,
1448 0, 282, 164, 165, 0, 0, 0, 60, 108, 102,
1449 226, 0, 0, 96, 0, 100, 252, 0, 100, 161,
1450 167, 168, 200, 0, 206, 0, 245, 0, 0, 254,
1451 0, 0, 253, 272, 103, 243, 0, 244, 0, 96,
1452 0, 0, 0, 255, 0, 0, 0, 0, 250, 0,
1453 0, 249, 0, 246, 0, 0, 0
1454};
1455
1456static const short yydefgoto[] = { 186,
1457 187, 188, 250, 267, 109, 110, 70, 482, 12, 71,
1458 14, 36, 37, 38, 42, 48, 119, 319, 229, 391,
1459 322, 525, 372, 348, 510, 285, 349, 72, 111, 128,
1460 195, 129, 130, 101, 274, 361, 275, 79, 555, 15,
1461 16, 18, 17, 191, 238, 239, 57, 21, 55, 92,
1462 410, 411, 120, 198, 49, 87, 50, 43, 413, 362,
1463 74, 364, 290, 51, 83, 84, 223, 529, 123, 303,
1464 490, 394, 224, 225, 226, 227
1465};
1466
1467static const short yypact[] = { 438,
1468-32768,-32768,-32768,-32768,-32768,-32768,-32768, 27, -119, -29,
1469 -84, 43, -57, -6, 525,-32768, 195, 140, -38, -27,
1470-32768, -39, 112,-32768, 828,-32768,-32768,-32768,-32768,-32768,
1471-32768,-32768,-32768,-32768,-32768, 32, 32, 227,-32768,-32768,
1472-32768, 32,-32768,-32768,-32768,-32768,-32768, 32, 119,-32768,
1473 -2, 188, 210, 213,-32768,-32768,-32768,-32768,-32768, 49,
1474-32768,-32768,-32768,-32768,-32768, 214, 245, 5, 104,-32768,
1475-32768,-32768, 110,-32768, 227, 227,-32768,-32768, 1043, 154,
1476 154,-32768,-32768, 109,-32768,-32768,-32768,-32768,-32768,-32768,
1477-32768, -89, 1085,-32768, 125, 139, 122, 49,-32768, 110,
1478 -55,-32768, 1085, 1043, 1188, 46, 249, 272, 266, 273,
1479 589,-32768, 279,-32768,-32768,-32768,-32768,-32768, 1204,-32768,
1480 2, 1327,-32768, 268,-32768,-32768, 110,-32768, 153, 150,
1481 1188, 1188, 149, -53, 1188,-32768, 155,-32768, 110,-32768,
1482-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
1483-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
1484-32768,-32768, 494, 943, 157,-32768,-32768,-32768,-32768,-32768,
1485-32768,-32768,-32768,-32768,-32768,-32768,-32768, 158, 159, 163,
1486 164, 790, 1226, 495, 284, 166, 167, 169,-32768,-32768,
1487 173,-32768, 49, 110, 28,-32768,-32768,-32768,-32768,-32768,
1488 262, 1243, 142, 302, 154,-32768,-32768, 494, 943, 1188,
1489 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188,
1490 1188, 1188,-32768, 154,-32768, 168,-32768,-32768, -58, 1124,
1491-32768, 25, 16,-32768, 170, 110,-32768, 173, 173,-32768,
1492-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 177,
1493-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
1494-32768,-32768,-32768,-32768,-32768,-32768, 181, 1043, 1043, 1043,
1495 1043, 1043,-32768,-32768, 20, 668, -40,-32768, -48,-32768,
1496 1043, 1043, 1043, 18,-32768, 182,-32768, 49, 747,-32768,
1497 872, 872,-32768, 872, 1204, 1188, 1188, 99, 117,-32768,
1498 747, 33, 186, 187, 191, 192, 198, 200, 747, 747,
1499 290, 1204, 1188, 1188,-32768,-32768,-32768,-32768,-32768,-32768,
1500-32768, -87,-32768,-32768,-32768, -87,-32768,-32768, 1043, 1043,
1501-32768, 203, 204, 205, 209, 1043,-32768, 202, 589, -43,
1502-32768,-32768, 216, 218, 312, 328, 342,-32768, 173, 1140,
1503-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 295, 1043,
1504-32768,-32768,-32768,-32768, 219,-32768, 229, 872, 747, 747,
1505 8,-32768, 17,-32768,-32768, 872, 225, 1188, 1188, 1188,
1506 1188, 1188, 231, 232, 1188, 872, 747, 233,-32768,-32768,
1507-32768, 234, 235, -33, 1043, 1043, 1043, 1043,-32768,-32768,
1508 230, 1043, 1043, 1188,-32768,-32768,-32768,-32768, 110, 238,
1509 236,-32768, 357, -36, 363, 364, 241, 246, 248, 872,
1510 374, 872, 251, 254, 872, 255, 110,-32768, 256, 258,
1511 872, 872, 110, 260,-32768, 1188, 1043, 1043, 1188,-32768,
1512 261, 263, 264, 270,-32768, 267, 276, 47, 130, 1159,
1513-32768, 274,-32768, 872, 872, 1188, 872, 872, 281,-32768,
1514 281, 872, 283, 1188, 1188, 1188,-32768,-32768, 1188, 747,
1515 282, 285,-32768, 1043,-32768, 1043, 1043,-32768,-32768,-32768,
1516-32768,-32768,-32768, 110, 45, 382, 287, 280, 747, -13,
1517-32768,-32768, 355,-32768,-32768, 265, 872,-32768,-32768,-32768,
1518 29,-32768,-32768,-32768, 286, 291, 292, 130,-32768, 375,
1519-32768, 412, 1,-32768, 1188,-32768,-32768, 293,-32768,-32768,
1520-32768,-32768,-32768, 423,-32768, 872,-32768, 996, 9, -58,
1521 747, 212,-32768, -87,-32768,-32768, 297,-32768, 996,-32768,
1522 419, 422, 303, -58, 872, 872, 425, 371,-32768, 872,
1523 427,-32768, 872,-32768, 443, 444,-32768
1524};
1525
1526static const short yypgoto[] = { 324,
1527 325, 326, 242, 252, -197,-32768, 0, -50, 376, 4,
1528-32768,-32768,-32768, 40,-32768,-32768, -167, -306, -397,-32768,
1529 -235,-32768, -291, -23,-32768, -211,-32768,-32768, -24, 237,
1530 -229,-32768, 362, 369, -68, -108, -178, 201,-32768,-32768,
1531 453,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
1532-32768,-32768, 391,-32768,-32768,-32768,-32768,-32768,-32768, -436,
1533 -72, 101, -157,-32768, 424,-32768,-32768,-32768,-32768,-32768,
1534 7, 105,-32768,-32768,-32768,-32768
1535};
1536
1537
1538#define YYLAST 1453
1539
1540
1541static const short yytable[] = { 11,
1542 73, 326, 189, 13, 277, 279, 294, 374, 96, 293,
1543 112, 449, 22, 82, 11, 390, 420, 293, 13, 390,
1544 23, 85, 315, 316, 196, 422, 327, 328, 27, 28,
1545 29, 30, 31, 32, 33, 138, 34, 295, 190, 389,
1546 317, 318, 2, 124, 100, 4, 346, 24, -54, -54,
1547 125, 315, 316, 421, 300, 25, 312, 304, 305, 306,
1548 307, 308, 421, 347, 311, 368, 140, 141, 127, 317,
1549 318, 19, 100, 346, 26, 75, 76, 135, 127, 135,
1550 139, 80, 386, 11, 336, 20, 508, 81, 136, 336,
1551 235, 537, 336, 52, 194, 342, 336, 340, 54, 439,
1552 401, 341, 543, 440, 53, 453, 232, 233, 58, 59,
1553 236, 98, 61, 62, 63, 64, 530, 1, 2, 515,
1554 3, 4, 1, 516, 35, 3, 58, 59, 56, 98,
1555 61, 62, 63, 64, 82, 1, 2, 407, 3, 4,
1556 527, 86, 544, 1, 197, 65, 3, 97, 538, 102,
1557 291, 103, 336, 292, 315, 316, 388, 324, 102, 337,
1558 103, 515, 35, 65, 323, 519, 102, 494, 103, 495,
1559 376, 389, 317, 318, 44, 45, 46, 289, 390, 47,
1560 102, 414, 103, 480, 93, 298, 299, 289, 301, 302,
1561 289, 289, 289, 289, 289, 309, 310, 289, 286, 331,
1562 332, 333, 334, 335, 89, 127, 113, 114, 115, 116,
1563 117, 118, 343, 344, 345, 485, 363, 94, 363, 363,
1564 426, 363, 428, 429, 430, 390, 90, 390, 363, 91,
1565 189, 371, 102, 40, 103, 41, 363, 363, 66, 315,
1566 316, 67, 541, 102, 68, 103, 69, 99, 95, 373,
1567 102, 339, 103, 77, 78, -55, 66, 317, 318, 67,
1568 392, 393, 68, 131, 69, 133, 190, 399, 142, 143,
1569 194, 369, 370, 313, 314, 104, 105, 132, -56, 144,
1570 532, 473, 192, 534, 228, 230, 231, 194, 387, 289,
1571 234, 237, 268, 269, 270, 363, 363, 363, 271, 272,
1572 280, 281, 282, 363, 283, 284, 498, 499, 500, 287,
1573 293, 325, 329, 363, 363, 528, 330, 350, 377, 378,
1574 385, 315, 316, 379, 380, 409, 441, 442, 443, 444,
1575 381, 539, 382, 446, 447, 395, 396, 397, 389, 317,
1576 318, 398, 404, 400, 405, 406, 412, 363, 402, 363,
1577 403, 415, 363, 289, 427, 289, 289, 289, 363, 363,
1578 433, 416, 425, 431, 432, 436, 437, 438, 471, 472,
1579 450, 445, 451, 452, 454, 455, 456, 460, 457, 448,
1580 458, 363, 363, 439, 363, 363, 462, 464, 465, 363,
1581 466, 365, 366, 474, 367, 469, 476, 363, 511, 475,
1582 421, 375, 477, 478, 517, 505, 486, 506, 507, 383,
1583 384, 470, 479, 493, 289, 497, 363, 513, 503, 512,
1584 524, 504, 520, 526, 363, 484, 535, 521, 522, 542,
1585 545, 489, 533, 546, 551, 547, 550, -174, 553, 289,
1586 289, 289, 556, 557, 489, 220, 221, 222, 481, 296,
1587 -62, 1, 2, 363, 3, 4, 5, 523, 363, 122,
1588 297, 509, 6, 7, 137, 134, 321, 39, 417, 418,
1589 419, 121, 363, 363, 88, 501, 424, 363, 0, 423,
1590 363, 8, 0, 0, 9, 0, 434, 435, 10, 0,
1591 531, 0, 0, 0, 0, 0, 0, 0, 0, 58,
1592 59, 0, 98, 106, 107, 108, 64, 481, 1, 2,
1593 0, 3, 4, 0, 0, 0, 0, 0, 0, 0,
1594 459, 0, 461, 0, -173, 463, 0, 0, 0, 0,
1595 0, 467, 468, 0, 0, 0, 65, -62, 1, 2,
1596 0, 3, 4, 5, 0, 0, 0, 0, 0, 6,
1597 7, 0, 0, 0, 487, 488, 0, 491, 492, 0,
1598 0, 0, 496, 0, 0, 0, 0, 0, 8, 0,
1599 502, 9, 0, 0, 0, 10, 240, 241, 242, 243,
1600 244, 245, 246, 247, 248, 249, 0, 0, 0, 514,
1601 0, 0, 0, 58, 59, 0, 0, 518, 0, 0,
1602 0, 0, 1, 2, 0, 3, 4, 0, 145, 0,
1603 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1604 0, 146, 147, 0, 0, 0, 536, 0, 0, 66,
1605 0, 540, 67, 0, 0, 68, 0, 69, 278, 0,
1606 0, 0, 0, 0, 0, 548, 549, 0, 0, 0,
1607 552, 0, 0, 554, 148, 149, 150, 151, 152, 153,
1608 154, 155, 156, 157, 158, 159, 160, 161, 162, 163,
1609 164, 0, 58, 59, 0, 98, 106, 107, 108, 64,
1610 0, 1, 2, 0, 3, 4, 0, 0, 0, 0,
1611 0, 0, 0, 0, 0, 0, 165, 166, 167, 168,
1612 169, 170, 171, 172, 173, 174, 175, 176, 177, 65,
1613 178, 0, 179, 180, 181, 0, 0, 0, 0, 0,
1614 0, 0, 102, 0, 103, 0, 182, 0, 0, 183,
1615 0, 184, 0, 185, 0, 0, 0, 0, 0, 0,
1616 0, 0, 0, 0, 0, 0, 0, 0, 0, 351,
1617 352, 58, 59, 353, 0, 0, 0, 0, 0, 0,
1618 1, 2, 0, 3, 4, 0, 354, 355, 356, 0,
1619 0, 0, 0, 0, 0, 0, 0, 0, 0, 357,
1620 358, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1621 0, 0, 0, 0, 58, 59, 359, 98, 106, 107,
1622 108, 64, 66, 1, 2, 67, 3, 4, 68, 0,
1623 69, 338, 148, 149, 150, 151, 152, 153, 154, 155,
1624 156, 157, 158, 159, 160, 161, 162, 163, 164, 0,
1625 0, 65, 58, 59, 0, 60, 61, 62, 63, 64,
1626 0, 1, 2, 0, 3, 4, 0, 0, 0, 0,
1627 0, 0, 0, 0, 165, 166, 167, 168, 169, 170,
1628 171, 172, 173, 174, 175, 176, 177, 0, 178, 65,
1629 179, 180, 181, 0, 351, 352, 58, 59, 353, 0,
1630 102, 0, 103, 0, 0, 1, 2, 360, 3, 4,
1631 0, 354, 355, 356, 0, 0, 0, 0, 0, 0,
1632 0, 0, 0, 0, 357, 358, 0, 0, 0, 0,
1633 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1634 0, 359, 0, 0, 66, 0, 0, 67, 0, 273,
1635 68, 0, 69, 0, 0, 0, 0, 148, 149, 150,
1636 151, 152, 153, 154, 155, 156, 157, 158, 159, 160,
1637 161, 162, 163, 164, 0, 0, 0, 0, 0, 0,
1638 0, 0, 66, 251, 252, 67, 0, 0, 68, 0,
1639 69, 0, 0, 0, 0, 0, 0, 0, 0, 165,
1640 166, 167, 168, 169, 170, 171, 172, 173, 174, 175,
1641 176, 177, 0, 178, 0, 179, 180, 181, 351, 352,
1642 0, 0, 353, 0, 0, 0, 0, 0, 0, 0,
1643 0, 0, 360, 0, 0, 354, 355, 356, 0, 0,
1644 0, 0, 0, 0, 0, 0, 0, 0, 357, 358,
1645 0, 253, 254, 255, 256, 257, 258, 259, 260, 261,
1646 262, 263, 264, 265, 266, 359, 0, 58, 59, 0,
1647 98, 106, 107, 108, 64, 0, 1, 2, 0, 3,
1648 4, 148, 149, 150, 151, 152, 153, 154, 155, 156,
1649 157, 158, 159, 160, 161, 162, 163, 164, 0, 0,
1650 0, 0, 0, 0, 65, 0, 0, 0, 0, 58,
1651 59, 0, 98, 61, 62, 63, 64, 0, 1, 2,
1652 0, 3, 4, 165, 166, 167, 168, 169, 170, 171,
1653 172, 173, 174, 175, 176, 177, 126, 178, 0, 179,
1654 180, 181, 0, 0, 0, 0, 65, 0, 58, 59,
1655 0, 98, 61, 62, 63, 64, 360, 1, 2, 0,
1656 3, 4, 0, 0, 58, 59, 0, 98, 61, 62,
1657 63, 64, 0, 1, 2, 320, 3, 4, 0, 0,
1658 0, 0, 0, 58, 59, 65, 98, 61, 62, 63,
1659 64, 408, 1, 2, 0, 3, 4, 66, 0, 0,
1660 67, 65, 0, 68, 0, 69, 0, 0, 0, 0,
1661 483, 0, 58, 59, 0, 98, 61, 62, 63, 64,
1662 65, 1, 2, 0, 3, 4, 0, 0, 58, 59,
1663 0, 193, 61, 62, 63, 64, 0, 1, 2, 66,
1664 3, 4, 67, 0, 0, 68, 0, 69, 0, 65,
1665 58, 59, 0, 98, 106, 107, 108, 64, 0, 1,
1666 2, 0, 3, 4, 0, 65, 0, 58, 59, 0,
1667 288, 61, 62, 63, 64, 0, 1, 2, 66, 3,
1668 4, 67, 0, 0, 68, 0, 69, 65, 0, 0,
1669 0, 0, 0, 0, 66, 0, 0, 67, 0, 0,
1670 68, 0, 69, 0, 65, 0, 0, 0, 0, 0,
1671 0, 0, 0, 66, 0, 0, 67, 0, 0, 68,
1672 0, 69, 0, 0, 0, 0, 0, 0, 0, 0,
1673 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1674 0, 0, 66, 0, 0, 67, 0, 0, 68, 0,
1675 69, 0, 0, 0, 0, 0, 0, 0, 66, 0,
1676 0, 67, 0, 0, 68, 0, 69, 0, 0, 0,
1677 0, 0, 0, 0, 0, 0, 199, 0, 0, 0,
1678 66, 0, 0, 67, 0, 0, 68, 0, 276, 0,
1679 0, 0, 0, 0, 200, 201, 0, 66, 0, 0,
1680 67, 0, 0, 68, 0, 69, 202, 203, 204, 205,
1681 206, 207, 148, 149, 150, 151, 152, 153, 154, 155,
1682 156, 157, 158, 159, 160, 161, 162, 208, 209, 0,
1683 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1684 0, 0, 0, 0, 0, 0, 0, 0, 0, 210,
1685 211, 212, 0, 0, 213, 166, 167, 168, 169, 170,
1686 171, 172, 173, 174, 175, 176, 177, 214, 215, 216,
1687 217, 218, 219
1688};
1689
1690static const short yycheck[] = { 0,
1691 25, 237, 111, 0, 183, 184, 204, 299, 4, 9,
1692 79, 409, 132, 16, 15, 322, 9, 9, 15, 326,
1693 50, 24, 110, 111, 23, 9, 238, 239, 35, 36,
1694 37, 38, 39, 40, 41, 104, 43, 205, 111, 127,
1695 128, 129, 15, 133, 69, 18, 29, 132, 3, 4,
1696 140, 110, 111, 46, 212, 13, 224, 215, 216, 217,
1697 218, 219, 46, 46, 222, 295, 21, 22, 93, 128,
1698 129, 45, 97, 29, 132, 36, 37, 133, 103, 133,
1699 105, 42, 312, 84, 133, 59, 484, 48, 144, 133,
1700 144, 528, 133, 132, 119, 144, 133, 276, 138, 133,
1701 144, 142, 539, 137, 132, 142, 131, 132, 5, 6,
1702 135, 8, 9, 10, 11, 12, 514, 14, 15, 133,
1703 17, 18, 14, 137, 131, 17, 5, 6, 17, 8,
1704 9, 10, 11, 12, 16, 14, 15, 349, 17, 18,
1705 140, 144, 540, 14, 143, 42, 17, 143, 140, 134,
1706 9, 136, 133, 12, 110, 111, 314, 142, 134, 140,
1707 136, 133, 131, 42, 140, 137, 134, 459, 136, 461,
1708 138, 127, 128, 129, 35, 36, 37, 202, 485, 40,
1709 134, 360, 136, 137, 136, 210, 211, 212, 213, 214,
1710 215, 216, 217, 218, 219, 220, 221, 222, 195, 268,
1711 269, 270, 271, 272, 17, 230, 53, 54, 55, 56,
1712 57, 58, 281, 282, 283, 451, 289, 4, 291, 292,
1713 378, 294, 380, 381, 382, 532, 17, 534, 301, 17,
1714 339, 133, 134, 39, 136, 41, 309, 310, 135, 110,
1715 111, 138, 31, 134, 141, 136, 143, 144, 4, 133,
1716 134, 276, 136, 27, 28, 7, 135, 128, 129, 138,
1717 329, 330, 141, 139, 143, 144, 339, 336, 3, 4,
1718 295, 296, 297, 106, 107, 75, 76, 139, 7, 7,
1719 516, 439, 4, 519, 17, 133, 137, 312, 313, 314,
1720 142, 137, 136, 136, 136, 368, 369, 370, 136, 136,
1721 17, 136, 136, 376, 136, 133, 464, 465, 466, 48,
1722 9, 142, 136, 386, 387, 513, 136, 136, 133, 133,
1723 31, 110, 111, 133, 133, 350, 395, 396, 397, 398,
1724 133, 529, 133, 402, 403, 133, 133, 133, 127, 128,
1725 129, 133, 31, 142, 17, 4, 52, 420, 133, 422,
1726 133, 133, 425, 378, 379, 380, 381, 382, 431, 432,
1727 385, 133, 138, 133, 133, 133, 133, 133, 437, 438,
1728 133, 142, 137, 17, 12, 12, 136, 4, 133, 404,
1729 133, 454, 455, 133, 457, 458, 133, 133, 133, 462,
1730 133, 291, 292, 133, 294, 136, 133, 470, 17, 137,
1731 46, 301, 133, 137, 140, 474, 133, 476, 477, 309,
1732 310, 436, 137, 133, 439, 133, 489, 138, 137, 133,
1733 46, 137, 137, 12, 497, 450, 4, 137, 137, 133,
1734 12, 456, 140, 12, 64, 133, 12, 0, 12, 464,
1735 465, 466, 0, 0, 469, 122, 122, 122, 449, 208,
1736 13, 14, 15, 526, 17, 18, 19, 508, 531, 84,
1737 209, 485, 25, 26, 103, 97, 230, 15, 368, 369,
1738 370, 81, 545, 546, 51, 469, 376, 550, -1, 375,
1739 553, 44, -1, -1, 47, -1, 386, 387, 51, -1,
1740 515, -1, -1, -1, -1, -1, -1, -1, -1, 5,
1741 6, -1, 8, 9, 10, 11, 12, 508, 14, 15,
1742 -1, 17, 18, -1, -1, -1, -1, -1, -1, -1,
1743 420, -1, 422, -1, 0, 425, -1, -1, -1, -1,
1744 -1, 431, 432, -1, -1, -1, 42, 13, 14, 15,
1745 -1, 17, 18, 19, -1, -1, -1, -1, -1, 25,
1746 26, -1, -1, -1, 454, 455, -1, 457, 458, -1,
1747 -1, -1, 462, -1, -1, -1, -1, -1, 44, -1,
1748 470, 47, -1, -1, -1, 51, 83, 84, 85, 86,
1749 87, 88, 89, 90, 91, 92, -1, -1, -1, 489,
1750 -1, -1, -1, 5, 6, -1, -1, 497, -1, -1,
1751 -1, -1, 14, 15, -1, 17, 18, -1, 20, -1,
1752 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
1753 -1, 33, 34, -1, -1, -1, 526, -1, -1, 135,
1754 -1, 531, 138, -1, -1, 141, -1, 143, 144, -1,
1755 -1, -1, -1, -1, -1, 545, 546, -1, -1, -1,
1756 550, -1, -1, 553, 66, 67, 68, 69, 70, 71,
1757 72, 73, 74, 75, 76, 77, 78, 79, 80, 81,
1758 82, -1, 5, 6, -1, 8, 9, 10, 11, 12,
1759 -1, 14, 15, -1, 17, 18, -1, -1, -1, -1,
1760 -1, -1, -1, -1, -1, -1, 108, 109, 110, 111,
1761 112, 113, 114, 115, 116, 117, 118, 119, 120, 42,
1762 122, -1, 124, 125, 126, -1, -1, -1, -1, -1,
1763 -1, -1, 134, -1, 136, -1, 138, -1, -1, 141,
1764 -1, 143, -1, 145, -1, -1, -1, -1, -1, -1,
1765 -1, -1, -1, -1, -1, -1, -1, -1, -1, 3,
1766 4, 5, 6, 7, -1, -1, -1, -1, -1, -1,
1767 14, 15, -1, 17, 18, -1, 20, 21, 22, -1,
1768 -1, -1, -1, -1, -1, -1, -1, -1, -1, 33,
1769 34, -1, -1, -1, -1, -1, -1, -1, -1, -1,
1770 -1, -1, -1, -1, 5, 6, 50, 8, 9, 10,
1771 11, 12, 135, 14, 15, 138, 17, 18, 141, -1,
1772 143, 144, 66, 67, 68, 69, 70, 71, 72, 73,
1773 74, 75, 76, 77, 78, 79, 80, 81, 82, -1,
1774 -1, 42, 5, 6, -1, 8, 9, 10, 11, 12,
1775 -1, 14, 15, -1, 17, 18, -1, -1, -1, -1,
1776 -1, -1, -1, -1, 108, 109, 110, 111, 112, 113,
1777 114, 115, 116, 117, 118, 119, 120, -1, 122, 42,
1778 124, 125, 126, -1, 3, 4, 5, 6, 7, -1,
1779 134, -1, 136, -1, -1, 14, 15, 141, 17, 18,
1780 -1, 20, 21, 22, -1, -1, -1, -1, -1, -1,
1781 -1, -1, -1, -1, 33, 34, -1, -1, -1, -1,
1782 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
1783 -1, 50, -1, -1, 135, -1, -1, 138, -1, 140,
1784 141, -1, 143, -1, -1, -1, -1, 66, 67, 68,
1785 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
1786 79, 80, 81, 82, -1, -1, -1, -1, -1, -1,
1787 -1, -1, 135, 21, 22, 138, -1, -1, 141, -1,
1788 143, -1, -1, -1, -1, -1, -1, -1, -1, 108,
1789 109, 110, 111, 112, 113, 114, 115, 116, 117, 118,
1790 119, 120, -1, 122, -1, 124, 125, 126, 3, 4,
1791 -1, -1, 7, -1, -1, -1, -1, -1, -1, -1,
1792 -1, -1, 141, -1, -1, 20, 21, 22, -1, -1,
1793 -1, -1, -1, -1, -1, -1, -1, -1, 33, 34,
1794 -1, 89, 90, 91, 92, 93, 94, 95, 96, 97,
1795 98, 99, 100, 101, 102, 50, -1, 5, 6, -1,
1796 8, 9, 10, 11, 12, -1, 14, 15, -1, 17,
1797 18, 66, 67, 68, 69, 70, 71, 72, 73, 74,
1798 75, 76, 77, 78, 79, 80, 81, 82, -1, -1,
1799 -1, -1, -1, -1, 42, -1, -1, -1, -1, 5,
1800 6, -1, 8, 9, 10, 11, 12, -1, 14, 15,
1801 -1, 17, 18, 108, 109, 110, 111, 112, 113, 114,
1802 115, 116, 117, 118, 119, 120, 32, 122, -1, 124,
1803 125, 126, -1, -1, -1, -1, 42, -1, 5, 6,
1804 -1, 8, 9, 10, 11, 12, 141, 14, 15, -1,
1805 17, 18, -1, -1, 5, 6, -1, 8, 9, 10,
1806 11, 12, -1, 14, 15, 32, 17, 18, -1, -1,
1807 -1, -1, -1, 5, 6, 42, 8, 9, 10, 11,
1808 12, 32, 14, 15, -1, 17, 18, 135, -1, -1,
1809 138, 42, -1, 141, -1, 143, -1, -1, -1, -1,
1810 32, -1, 5, 6, -1, 8, 9, 10, 11, 12,
1811 42, 14, 15, -1, 17, 18, -1, -1, 5, 6,
1812 -1, 8, 9, 10, 11, 12, -1, 14, 15, 135,
1813 17, 18, 138, -1, -1, 141, -1, 143, -1, 42,
1814 5, 6, -1, 8, 9, 10, 11, 12, -1, 14,
1815 15, -1, 17, 18, -1, 42, -1, 5, 6, -1,
1816 8, 9, 10, 11, 12, -1, 14, 15, 135, 17,
1817 18, 138, -1, -1, 141, -1, 143, 42, -1, -1,
1818 -1, -1, -1, -1, 135, -1, -1, 138, -1, -1,
1819 141, -1, 143, -1, 42, -1, -1, -1, -1, -1,
1820 -1, -1, -1, 135, -1, -1, 138, -1, -1, 141,
1821 -1, 143, -1, -1, -1, -1, -1, -1, -1, -1,
1822 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
1823 -1, -1, 135, -1, -1, 138, -1, -1, 141, -1,
1824 143, -1, -1, -1, -1, -1, -1, -1, 135, -1,
1825 -1, 138, -1, -1, 141, -1, 143, -1, -1, -1,
1826 -1, -1, -1, -1, -1, -1, 30, -1, -1, -1,
1827 135, -1, -1, 138, -1, -1, 141, -1, 143, -1,
1828 -1, -1, -1, -1, 48, 49, -1, 135, -1, -1,
1829 138, -1, -1, 141, -1, 143, 60, 61, 62, 63,
1830 64, 65, 66, 67, 68, 69, 70, 71, 72, 73,
1831 74, 75, 76, 77, 78, 79, 80, 81, 82, -1,
1832 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
1833 -1, -1, -1, -1, -1, -1, -1, -1, -1, 103,
1834 104, 105, -1, -1, 108, 109, 110, 111, 112, 113,
1835 114, 115, 116, 117, 118, 119, 120, 121, 122, 123,
1836 124, 125, 126
1837};
1838/* -*-C-*- Note some compilers choke on comments on `#line' lines. */
1839#line 3 "/usr/share/bison.simple"
1840/* This file comes from bison-1.28. */
1841
1842/* Skeleton output parser for bison,
1843 Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc.
1844
1845 This program is free software; you can redistribute it and/or modify
1846 it under the terms of the GNU General Public License as published by
1847 the Free Software Foundation; either version 2, or (at your option)
1848 any later version.
1849
1850 This program is distributed in the hope that it will be useful,
1851 but WITHOUT ANY WARRANTY; without even the implied warranty of
1852 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1853 GNU General Public License for more details.
1854
1855 You should have received a copy of the GNU General Public License
1856 along with this program; if not, write to the Free Software
1857 Foundation, Inc., 59 Temple Place - Suite 330,
1858 Boston, MA 02111-1307, USA. */
1859
1860/* As a special exception, when this file is copied by Bison into a
1861 Bison output file, you may use that output file without restriction.
1862 This special exception was added by the Free Software Foundation
1863 in version 1.24 of Bison. */
1864
1865/* This is the parser code that is written into each bison parser
1866 when the %semantic_parser declaration is not specified in the grammar.
1867 It was written by Richard Stallman by simplifying the hairy parser
1868 used when %semantic_parser is specified. */
1869
1870#ifndef YYSTACK_USE_ALLOCA
1871#ifdef alloca
1872#define YYSTACK_USE_ALLOCA
1873#else /* alloca not defined */
1874#ifdef __GNUC__
1875#define YYSTACK_USE_ALLOCA
1876#define alloca __builtin_alloca
1877#else /* not GNU C. */
1878#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || (defined (__sun) && defined (__i386))
1879#define YYSTACK_USE_ALLOCA
1880#include <alloca.h>
1881#else /* not sparc */
1882/* We think this test detects Watcom and Microsoft C. */
1883/* This used to test MSDOS, but that is a bad idea
1884 since that symbol is in the user namespace. */
1885#if (defined (_MSDOS) || defined (_MSDOS_)) && !defined (__TURBOC__)
1886#if 0 /* No need for malloc.h, which pollutes the namespace;
1887 instead, just don't use alloca. */
1888#include <malloc.h>
1889#endif
1890#else /* not MSDOS, or __TURBOC__ */
1891#if defined(_AIX)
1892/* I don't know what this was needed for, but it pollutes the namespace.
1893 So I turned it off. rms, 2 May 1997. */
1894/* #include <malloc.h> */
1895 #pragma alloca
1896#define YYSTACK_USE_ALLOCA
1897#else /* not MSDOS, or __TURBOC__, or _AIX */
1898#if 0
1899#ifdef __hpux /* haible@ilog.fr says this works for HPUX 9.05 and up,
1900 and on HPUX 10. Eventually we can turn this on. */
1901#define YYSTACK_USE_ALLOCA
1902#define alloca __builtin_alloca
1903#endif /* __hpux */
1904#endif
1905#endif /* not _AIX */
1906#endif /* not MSDOS, or __TURBOC__ */
1907#endif /* not sparc */
1908#endif /* not GNU C */
1909#endif /* alloca not defined */
1910#endif /* YYSTACK_USE_ALLOCA not defined */
1911
1912#ifdef YYSTACK_USE_ALLOCA
1913#define YYSTACK_ALLOC alloca
Reid Spencer5cbf9852007-01-30 20:08:39 +00001914#else
Chris Lattner9d2fda62007-02-13 05:53:56 +00001915#define YYSTACK_ALLOC malloc
Reid Spencer5cbf9852007-01-30 20:08:39 +00001916#endif
1917
Chris Lattner9d2fda62007-02-13 05:53:56 +00001918/* Note: there must be only one dollar sign in this file.
1919 It is replaced by the list of actions, each action
1920 as one case of the switch. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00001921
1922#define yyerrok (yyerrstatus = 0)
1923#define yyclearin (yychar = YYEMPTY)
Chris Lattner9d2fda62007-02-13 05:53:56 +00001924#define YYEMPTY -2
Reid Spencer68a24bd2005-08-27 18:50:39 +00001925#define YYEOF 0
Reid Spencer68a24bd2005-08-27 18:50:39 +00001926#define YYACCEPT goto yyacceptlab
Chris Lattner9d2fda62007-02-13 05:53:56 +00001927#define YYABORT goto yyabortlab
1928#define YYERROR goto yyerrlab1
1929/* Like YYERROR except do call yyerror.
1930 This remains here temporarily to ease the
1931 transition to the new meaning of YYERROR, for GCC.
Reid Spencer68a24bd2005-08-27 18:50:39 +00001932 Once GCC version 2 has supplanted version 1, this can go. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00001933#define YYFAIL goto yyerrlab
Reid Spencer68a24bd2005-08-27 18:50:39 +00001934#define YYRECOVERING() (!!yyerrstatus)
Chris Lattner9d2fda62007-02-13 05:53:56 +00001935#define YYBACKUP(token, value) \
Reid Spencer68a24bd2005-08-27 18:50:39 +00001936do \
1937 if (yychar == YYEMPTY && yylen == 1) \
Chris Lattner9d2fda62007-02-13 05:53:56 +00001938 { yychar = (token), yylval = (value); \
1939 yychar1 = YYTRANSLATE (yychar); \
1940 YYPOPSTACK; \
Reid Spencer68a24bd2005-08-27 18:50:39 +00001941 goto yybackup; \
1942 } \
1943 else \
Chris Lattner9d2fda62007-02-13 05:53:56 +00001944 { yyerror ("syntax error: cannot back up"); YYERROR; } \
1945while (0)
Anton Korobeynikov178a3522007-01-12 19:22:51 +00001946
Reid Spencer68a24bd2005-08-27 18:50:39 +00001947#define YYTERROR 1
1948#define YYERRCODE 256
1949
Chris Lattner9d2fda62007-02-13 05:53:56 +00001950#ifndef YYPURE
1951#define YYLEX yylex()
Reid Spencer68a24bd2005-08-27 18:50:39 +00001952#endif
1953
Chris Lattner9d2fda62007-02-13 05:53:56 +00001954#ifdef YYPURE
1955#ifdef YYLSP_NEEDED
Reid Spencer41dff5e2007-01-26 08:05:27 +00001956#ifdef YYLEX_PARAM
Chris Lattner9d2fda62007-02-13 05:53:56 +00001957#define YYLEX yylex(&yylval, &yylloc, YYLEX_PARAM)
Reid Spencer41dff5e2007-01-26 08:05:27 +00001958#else
Chris Lattner9d2fda62007-02-13 05:53:56 +00001959#define YYLEX yylex(&yylval, &yylloc)
1960#endif
1961#else /* not YYLSP_NEEDED */
1962#ifdef YYLEX_PARAM
1963#define YYLEX yylex(&yylval, YYLEX_PARAM)
1964#else
1965#define YYLEX yylex(&yylval)
1966#endif
1967#endif /* not YYLSP_NEEDED */
Chris Lattner8adde282007-02-11 21:40:10 +00001968#endif
Chris Lattner7d9801d2007-02-13 00:58:01 +00001969
Chris Lattner9d2fda62007-02-13 05:53:56 +00001970/* If nonreentrant, generate the variables here */
Chris Lattner7d9801d2007-02-13 00:58:01 +00001971
Chris Lattner9d2fda62007-02-13 05:53:56 +00001972#ifndef YYPURE
Chris Lattner7d9801d2007-02-13 00:58:01 +00001973
Chris Lattner9d2fda62007-02-13 05:53:56 +00001974int yychar; /* the lookahead symbol */
1975YYSTYPE yylval; /* the semantic value of the */
1976 /* lookahead symbol */
Chris Lattner7d9801d2007-02-13 00:58:01 +00001977
Chris Lattner9d2fda62007-02-13 05:53:56 +00001978#ifdef YYLSP_NEEDED
1979YYLTYPE yylloc; /* location data for the lookahead */
1980 /* symbol */
Chris Lattner8adde282007-02-11 21:40:10 +00001981#endif
Chris Lattner7d9801d2007-02-13 00:58:01 +00001982
Chris Lattner9d2fda62007-02-13 05:53:56 +00001983int yynerrs; /* number of parse errors so far */
1984#endif /* not YYPURE */
Chris Lattner7d9801d2007-02-13 00:58:01 +00001985
Chris Lattner9d2fda62007-02-13 05:53:56 +00001986#if YYDEBUG != 0
1987int yydebug; /* nonzero means print parse trace */
1988/* Since this is uninitialized, it does not stop multiple parsers
1989 from coexisting. */
Chris Lattnerf7469af2007-01-31 04:44:08 +00001990#endif
Reid Spencer832254e2007-02-02 02:16:23 +00001991
Chris Lattner9d2fda62007-02-13 05:53:56 +00001992/* YYINITDEPTH indicates the initial size of the parser's stacks */
Reid Spencer832254e2007-02-02 02:16:23 +00001993
Reid Spencer68a24bd2005-08-27 18:50:39 +00001994#ifndef YYINITDEPTH
Chris Lattner9d2fda62007-02-13 05:53:56 +00001995#define YYINITDEPTH 200
Reid Spencer68a24bd2005-08-27 18:50:39 +00001996#endif
1997
Chris Lattner9d2fda62007-02-13 05:53:56 +00001998/* YYMAXDEPTH is the maximum size the stacks can grow to
1999 (effective only if the built-in stack extension method is used). */
Reid Spencer68a24bd2005-08-27 18:50:39 +00002000
Chris Lattner9d2fda62007-02-13 05:53:56 +00002001#if YYMAXDEPTH == 0
2002#undef YYMAXDEPTH
2003#endif
Reid Spencer68a24bd2005-08-27 18:50:39 +00002004
2005#ifndef YYMAXDEPTH
Chris Lattner9d2fda62007-02-13 05:53:56 +00002006#define YYMAXDEPTH 10000
Reid Spencer68a24bd2005-08-27 18:50:39 +00002007#endif
Reid Spencer68a24bd2005-08-27 18:50:39 +00002008
Chris Lattner9d2fda62007-02-13 05:53:56 +00002009/* Define __yy_memcpy. Note that the size argument
2010 should be passed with type unsigned int, because that is what the non-GCC
2011 definitions require. With GCC, __builtin_memcpy takes an arg
2012 of type size_t, but it can handle unsigned int. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00002013
Chris Lattner9d2fda62007-02-13 05:53:56 +00002014#if __GNUC__ > 1 /* GNU C and GNU C++ define this. */
2015#define __yy_memcpy(TO,FROM,COUNT) __builtin_memcpy(TO,FROM,COUNT)
2016#else /* not GNU C or C++ */
2017#ifndef __cplusplus
Reid Spencer68a24bd2005-08-27 18:50:39 +00002018
Chris Lattner9d2fda62007-02-13 05:53:56 +00002019/* This is the most reliable way to avoid incompatibilities
2020 in available built-in functions on various systems. */
Chris Lattner7d9801d2007-02-13 00:58:01 +00002021static void
Chris Lattner9d2fda62007-02-13 05:53:56 +00002022__yy_memcpy (to, from, count)
2023 char *to;
2024 char *from;
2025 unsigned int count;
Chris Lattner7d9801d2007-02-13 00:58:01 +00002026{
Chris Lattner9d2fda62007-02-13 05:53:56 +00002027 register char *f = from;
2028 register char *t = to;
2029 register int i = count;
Chris Lattner7d9801d2007-02-13 00:58:01 +00002030
Chris Lattner9d2fda62007-02-13 05:53:56 +00002031 while (i-- > 0)
2032 *t++ = *f++;
Chris Lattner7d9801d2007-02-13 00:58:01 +00002033}
Chris Lattner7d9801d2007-02-13 00:58:01 +00002034
Chris Lattner9d2fda62007-02-13 05:53:56 +00002035#else /* __cplusplus */
2036
2037/* This is the most reliable way to avoid incompatibilities
2038 in available built-in functions on various systems. */
2039static void
2040__yy_memcpy (char *to, char *from, unsigned int count)
2041{
2042 register char *t = to;
2043 register char *f = from;
2044 register int i = count;
2045
2046 while (i-- > 0)
2047 *t++ = *f++;
2048}
2049
2050#endif
2051#endif
2052
2053#line 217 "/usr/share/bison.simple"
2054
2055/* The user can define YYPARSE_PARAM as the name of an argument to be passed
2056 into yyparse. The argument should have type void *.
2057 It should actually point to an object.
2058 Grammar actions can access the variable by casting it
2059 to the proper pointer type. */
Chris Lattner7d9801d2007-02-13 00:58:01 +00002060
2061#ifdef YYPARSE_PARAM
Chris Lattner9d2fda62007-02-13 05:53:56 +00002062#ifdef __cplusplus
2063#define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
2064#define YYPARSE_PARAM_DECL
2065#else /* not __cplusplus */
2066#define YYPARSE_PARAM_ARG YYPARSE_PARAM
2067#define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
2068#endif /* not __cplusplus */
2069#else /* not YYPARSE_PARAM */
2070#define YYPARSE_PARAM_ARG
2071#define YYPARSE_PARAM_DECL
2072#endif /* not YYPARSE_PARAM */
2073
2074/* Prevent warning if -Wstrict-prototypes. */
2075#ifdef __GNUC__
2076#ifdef YYPARSE_PARAM
2077int yyparse (void *);
Chris Lattner7d9801d2007-02-13 00:58:01 +00002078#else
Reid Spencere812fb22006-01-19 01:21:04 +00002079int yyparse (void);
Chris Lattner8adde282007-02-11 21:40:10 +00002080#endif
2081#endif
Chris Lattner9d2fda62007-02-13 05:53:56 +00002082
2083int
2084yyparse(YYPARSE_PARAM_ARG)
2085 YYPARSE_PARAM_DECL
Chris Lattner7d9801d2007-02-13 00:58:01 +00002086{
Chris Lattner9d2fda62007-02-13 05:53:56 +00002087 register int yystate;
2088 register int yyn;
2089 register short *yyssp;
2090 register YYSTYPE *yyvsp;
2091 int yyerrstatus; /* number of tokens to shift before error messages enabled */
2092 int yychar1 = 0; /* lookahead token as an internal (translated) token number */
2093
2094 short yyssa[YYINITDEPTH]; /* the state stack */
2095 YYSTYPE yyvsa[YYINITDEPTH]; /* the semantic value stack */
2096
2097 short *yyss = yyssa; /* refer to the stacks thru separate pointers */
2098 YYSTYPE *yyvs = yyvsa; /* to allow yyoverflow to reallocate them elsewhere */
2099
2100#ifdef YYLSP_NEEDED
2101 YYLTYPE yylsa[YYINITDEPTH]; /* the location stack */
2102 YYLTYPE *yyls = yylsa;
2103 YYLTYPE *yylsp;
2104
2105#define YYPOPSTACK (yyvsp--, yyssp--, yylsp--)
2106#else
2107#define YYPOPSTACK (yyvsp--, yyssp--)
Chris Lattner8adde282007-02-11 21:40:10 +00002108#endif
Anton Korobeynikov178a3522007-01-12 19:22:51 +00002109
Chris Lattner9d2fda62007-02-13 05:53:56 +00002110 int yystacksize = YYINITDEPTH;
2111 int yyfree_stacks = 0;
Chris Lattner7d9801d2007-02-13 00:58:01 +00002112
Chris Lattner9d2fda62007-02-13 05:53:56 +00002113#ifdef YYPURE
2114 int yychar;
2115 YYSTYPE yylval;
2116 int yynerrs;
2117#ifdef YYLSP_NEEDED
2118 YYLTYPE yylloc;
2119#endif
2120#endif
Chris Lattner7d9801d2007-02-13 00:58:01 +00002121
Chris Lattner9d2fda62007-02-13 05:53:56 +00002122 YYSTYPE yyval; /* the variable used to return */
2123 /* semantic values from the action */
2124 /* routines */
Chris Lattner7d9801d2007-02-13 00:58:01 +00002125
Chris Lattner9d2fda62007-02-13 05:53:56 +00002126 int yylen;
Chris Lattner7d9801d2007-02-13 00:58:01 +00002127
Chris Lattner9d2fda62007-02-13 05:53:56 +00002128#if YYDEBUG != 0
2129 if (yydebug)
2130 fprintf(stderr, "Starting parse\n");
2131#endif
Chris Lattner7d9801d2007-02-13 00:58:01 +00002132
Reid Spencer68a24bd2005-08-27 18:50:39 +00002133 yystate = 0;
2134 yyerrstatus = 0;
2135 yynerrs = 0;
2136 yychar = YYEMPTY; /* Cause a token to be read. */
2137
2138 /* Initialize stack pointers.
2139 Waste one element of value and location stack
2140 so that they stay on the same level as the state stack.
2141 The wasted elements are never initialized. */
2142
Chris Lattner9d2fda62007-02-13 05:53:56 +00002143 yyssp = yyss - 1;
Reid Spencer68a24bd2005-08-27 18:50:39 +00002144 yyvsp = yyvs;
Chris Lattner9d2fda62007-02-13 05:53:56 +00002145#ifdef YYLSP_NEEDED
2146 yylsp = yyls;
2147#endif
Reid Spencer68a24bd2005-08-27 18:50:39 +00002148
Chris Lattner9d2fda62007-02-13 05:53:56 +00002149/* Push a new state, which is found in yystate . */
2150/* In all cases, when you get here, the value and location stacks
2151 have just been pushed. so pushing a state here evens the stacks. */
2152yynewstate:
Jeff Cohen66c5fd62005-10-23 04:37:20 +00002153
Chris Lattner9d2fda62007-02-13 05:53:56 +00002154 *++yyssp = yystate;
Reid Spencer68a24bd2005-08-27 18:50:39 +00002155
Chris Lattner9d2fda62007-02-13 05:53:56 +00002156 if (yyssp >= yyss + yystacksize - 1)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002157 {
Chris Lattner9d2fda62007-02-13 05:53:56 +00002158 /* Give user a chance to reallocate the stack */
2159 /* Use copies of these so that the &'s don't force the real ones into memory. */
2160 YYSTYPE *yyvs1 = yyvs;
2161 short *yyss1 = yyss;
2162#ifdef YYLSP_NEEDED
2163 YYLTYPE *yyls1 = yyls;
2164#endif
2165
Reid Spencer68a24bd2005-08-27 18:50:39 +00002166 /* Get the current used size of the three stacks, in elements. */
Chris Lattner9d2fda62007-02-13 05:53:56 +00002167 int size = yyssp - yyss + 1;
Reid Spencer68a24bd2005-08-27 18:50:39 +00002168
2169#ifdef yyoverflow
Chris Lattner9d2fda62007-02-13 05:53:56 +00002170 /* Each stack pointer address is followed by the size of
2171 the data in use in that stack, in bytes. */
2172#ifdef YYLSP_NEEDED
2173 /* This used to be a conditional around just the two extra args,
2174 but that might be undefined if yyoverflow is a macro. */
2175 yyoverflow("parser stack overflow",
2176 &yyss1, size * sizeof (*yyssp),
2177 &yyvs1, size * sizeof (*yyvsp),
2178 &yyls1, size * sizeof (*yylsp),
2179 &yystacksize);
2180#else
2181 yyoverflow("parser stack overflow",
2182 &yyss1, size * sizeof (*yyssp),
2183 &yyvs1, size * sizeof (*yyvsp),
2184 &yystacksize);
2185#endif
Reid Spencer68a24bd2005-08-27 18:50:39 +00002186
Chris Lattner9d2fda62007-02-13 05:53:56 +00002187 yyss = yyss1; yyvs = yyvs1;
2188#ifdef YYLSP_NEEDED
2189 yyls = yyls1;
2190#endif
Reid Spencer68a24bd2005-08-27 18:50:39 +00002191#else /* no yyoverflow */
Reid Spencer68a24bd2005-08-27 18:50:39 +00002192 /* Extend the stack our own way. */
Chris Lattner9d2fda62007-02-13 05:53:56 +00002193 if (yystacksize >= YYMAXDEPTH)
2194 {
2195 yyerror("parser stack overflow");
2196 if (yyfree_stacks)
2197 {
2198 free (yyss);
2199 free (yyvs);
2200#ifdef YYLSP_NEEDED
2201 free (yyls);
2202#endif
2203 }
2204 return 2;
2205 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00002206 yystacksize *= 2;
Chris Lattner9d2fda62007-02-13 05:53:56 +00002207 if (yystacksize > YYMAXDEPTH)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002208 yystacksize = YYMAXDEPTH;
Chris Lattner9d2fda62007-02-13 05:53:56 +00002209#ifndef YYSTACK_USE_ALLOCA
2210 yyfree_stacks = 1;
2211#endif
2212 yyss = (short *) YYSTACK_ALLOC (yystacksize * sizeof (*yyssp));
2213 __yy_memcpy ((char *)yyss, (char *)yyss1,
2214 size * (unsigned int) sizeof (*yyssp));
2215 yyvs = (YYSTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yyvsp));
2216 __yy_memcpy ((char *)yyvs, (char *)yyvs1,
2217 size * (unsigned int) sizeof (*yyvsp));
2218#ifdef YYLSP_NEEDED
2219 yyls = (YYLTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yylsp));
2220 __yy_memcpy ((char *)yyls, (char *)yyls1,
2221 size * (unsigned int) sizeof (*yylsp));
2222#endif
Reid Spencer68a24bd2005-08-27 18:50:39 +00002223#endif /* no yyoverflow */
2224
Chris Lattner9d2fda62007-02-13 05:53:56 +00002225 yyssp = yyss + size - 1;
2226 yyvsp = yyvs + size - 1;
2227#ifdef YYLSP_NEEDED
2228 yylsp = yyls + size - 1;
2229#endif
Reid Spencer68a24bd2005-08-27 18:50:39 +00002230
Chris Lattner9d2fda62007-02-13 05:53:56 +00002231#if YYDEBUG != 0
2232 if (yydebug)
2233 fprintf(stderr, "Stack size increased to %d\n", yystacksize);
2234#endif
Reid Spencer68a24bd2005-08-27 18:50:39 +00002235
Chris Lattner9d2fda62007-02-13 05:53:56 +00002236 if (yyssp >= yyss + yystacksize - 1)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002237 YYABORT;
2238 }
2239
Chris Lattner9d2fda62007-02-13 05:53:56 +00002240#if YYDEBUG != 0
2241 if (yydebug)
2242 fprintf(stderr, "Entering state %d\n", yystate);
2243#endif
Reid Spencer68a24bd2005-08-27 18:50:39 +00002244
2245 goto yybackup;
Chris Lattner9d2fda62007-02-13 05:53:56 +00002246 yybackup:
Reid Spencer68a24bd2005-08-27 18:50:39 +00002247
Chris Lattner9d2fda62007-02-13 05:53:56 +00002248/* Do appropriate processing given the current state. */
2249/* Read a lookahead token if we need one and don't already have one. */
2250/* yyresume: */
Andrew Lenharth6353e052006-12-08 18:07:09 +00002251
Chris Lattner9d2fda62007-02-13 05:53:56 +00002252 /* First try to decide what to do without reference to lookahead token. */
Reid Spencer5cbf9852007-01-30 20:08:39 +00002253
Reid Spencer68a24bd2005-08-27 18:50:39 +00002254 yyn = yypact[yystate];
Chris Lattner9d2fda62007-02-13 05:53:56 +00002255 if (yyn == YYFLAG)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002256 goto yydefault;
2257
Chris Lattner9d2fda62007-02-13 05:53:56 +00002258 /* Not known => get a lookahead token if don't already have one. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00002259
Chris Lattner9d2fda62007-02-13 05:53:56 +00002260 /* yychar is either YYEMPTY or YYEOF
2261 or a valid token in external form. */
2262
Reid Spencer68a24bd2005-08-27 18:50:39 +00002263 if (yychar == YYEMPTY)
2264 {
Chris Lattner9d2fda62007-02-13 05:53:56 +00002265#if YYDEBUG != 0
2266 if (yydebug)
2267 fprintf(stderr, "Reading a token: ");
2268#endif
Reid Spencer68a24bd2005-08-27 18:50:39 +00002269 yychar = YYLEX;
2270 }
2271
Chris Lattner9d2fda62007-02-13 05:53:56 +00002272 /* Convert token to internal form (in yychar1) for indexing tables with */
2273
2274 if (yychar <= 0) /* This means end of input. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00002275 {
Chris Lattner9d2fda62007-02-13 05:53:56 +00002276 yychar1 = 0;
2277 yychar = YYEOF; /* Don't call YYLEX any more */
2278
2279#if YYDEBUG != 0
2280 if (yydebug)
2281 fprintf(stderr, "Now at end of input.\n");
2282#endif
Reid Spencer68a24bd2005-08-27 18:50:39 +00002283 }
2284 else
2285 {
Chris Lattner9d2fda62007-02-13 05:53:56 +00002286 yychar1 = YYTRANSLATE(yychar);
2287
2288#if YYDEBUG != 0
2289 if (yydebug)
2290 {
2291 fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]);
2292 /* Give the individual parser a way to print the precise meaning
2293 of a token, for further debugging info. */
2294#ifdef YYPRINT
2295 YYPRINT (stderr, yychar, yylval);
2296#endif
2297 fprintf (stderr, ")\n");
2298 }
2299#endif
Reid Spencer68a24bd2005-08-27 18:50:39 +00002300 }
2301
Chris Lattner9d2fda62007-02-13 05:53:56 +00002302 yyn += yychar1;
2303 if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002304 goto yydefault;
Chris Lattner9d2fda62007-02-13 05:53:56 +00002305
Reid Spencer68a24bd2005-08-27 18:50:39 +00002306 yyn = yytable[yyn];
Chris Lattner9d2fda62007-02-13 05:53:56 +00002307
2308 /* yyn is what to do for this token type in this state.
2309 Negative => reduce, -yyn is rule number.
2310 Positive => shift, yyn is new state.
2311 New state is final state => don't bother to shift,
2312 just return success.
2313 0, or most negative number => error. */
2314
2315 if (yyn < 0)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002316 {
Chris Lattner9d2fda62007-02-13 05:53:56 +00002317 if (yyn == YYFLAG)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002318 goto yyerrlab;
2319 yyn = -yyn;
2320 goto yyreduce;
2321 }
Chris Lattner9d2fda62007-02-13 05:53:56 +00002322 else if (yyn == 0)
2323 goto yyerrlab;
Reid Spencer68a24bd2005-08-27 18:50:39 +00002324
2325 if (yyn == YYFINAL)
2326 YYACCEPT;
2327
Chris Lattner9d2fda62007-02-13 05:53:56 +00002328 /* Shift the lookahead token. */
Chris Lattner8adde282007-02-11 21:40:10 +00002329
Chris Lattner9d2fda62007-02-13 05:53:56 +00002330#if YYDEBUG != 0
2331 if (yydebug)
2332 fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]);
2333#endif
Reid Spencer5cbf9852007-01-30 20:08:39 +00002334
Chris Lattner9d2fda62007-02-13 05:53:56 +00002335 /* Discard the token being shifted unless it is eof. */
Reid Spencer5cbf9852007-01-30 20:08:39 +00002336 if (yychar != YYEOF)
2337 yychar = YYEMPTY;
2338
Chris Lattner7d9801d2007-02-13 00:58:01 +00002339 *++yyvsp = yylval;
Chris Lattner9d2fda62007-02-13 05:53:56 +00002340#ifdef YYLSP_NEEDED
2341 *++yylsp = yylloc;
2342#endif
Chris Lattner7d9801d2007-02-13 00:58:01 +00002343
Chris Lattner9d2fda62007-02-13 05:53:56 +00002344 /* count tokens shifted since error; after three, turn off error status. */
2345 if (yyerrstatus) yyerrstatus--;
2346
2347 yystate = yyn;
Reid Spencer68a24bd2005-08-27 18:50:39 +00002348 goto yynewstate;
2349
Chris Lattner9d2fda62007-02-13 05:53:56 +00002350/* Do the default action for the current state. */
Chris Lattner7d9801d2007-02-13 00:58:01 +00002351yydefault:
Chris Lattner9d2fda62007-02-13 05:53:56 +00002352
Reid Spencer68a24bd2005-08-27 18:50:39 +00002353 yyn = yydefact[yystate];
2354 if (yyn == 0)
2355 goto yyerrlab;
Reid Spencer68a24bd2005-08-27 18:50:39 +00002356
Chris Lattner9d2fda62007-02-13 05:53:56 +00002357/* Do a reduction. yyn is the number of a rule to reduce with. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00002358yyreduce:
Reid Spencer68a24bd2005-08-27 18:50:39 +00002359 yylen = yyr2[yyn];
Chris Lattner9d2fda62007-02-13 05:53:56 +00002360 if (yylen > 0)
2361 yyval = yyvsp[1-yylen]; /* implement default value of the action */
Reid Spencer68a24bd2005-08-27 18:50:39 +00002362
Chris Lattner9d2fda62007-02-13 05:53:56 +00002363#if YYDEBUG != 0
2364 if (yydebug)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002365 {
Chris Lattner9d2fda62007-02-13 05:53:56 +00002366 int i;
Reid Spencer41dff5e2007-01-26 08:05:27 +00002367
Chris Lattner9d2fda62007-02-13 05:53:56 +00002368 fprintf (stderr, "Reducing via rule %d (line %d), ",
2369 yyn, yyrline[yyn]);
Reid Spencerb0fcf8f2007-01-17 02:48:45 +00002370
Chris Lattner9d2fda62007-02-13 05:53:56 +00002371 /* Print the symbols being reduced, and their result. */
2372 for (i = yyprhs[yyn]; yyrhs[i] > 0; i++)
2373 fprintf (stderr, "%s ", yytname[yyrhs[i]]);
2374 fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]);
2375 }
2376#endif
Reid Spencerb0fcf8f2007-01-17 02:48:45 +00002377
Reid Spencerb0fcf8f2007-01-17 02:48:45 +00002378
Chris Lattner9d2fda62007-02-13 05:53:56 +00002379 switch (yyn) {
Reid Spencerb0fcf8f2007-01-17 02:48:45 +00002380
Chris Lattner9d2fda62007-02-13 05:53:56 +00002381case 28:
2382#line 1054 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2383{ yyval.IPredicate = ICmpInst::ICMP_EQ; ;
2384 break;}
2385case 29:
2386#line 1054 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2387{ yyval.IPredicate = ICmpInst::ICMP_NE; ;
2388 break;}
2389case 30:
2390#line 1055 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2391{ yyval.IPredicate = ICmpInst::ICMP_SLT; ;
2392 break;}
2393case 31:
2394#line 1055 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2395{ yyval.IPredicate = ICmpInst::ICMP_SGT; ;
2396 break;}
2397case 32:
2398#line 1056 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2399{ yyval.IPredicate = ICmpInst::ICMP_SLE; ;
2400 break;}
2401case 33:
2402#line 1056 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2403{ yyval.IPredicate = ICmpInst::ICMP_SGE; ;
2404 break;}
2405case 34:
2406#line 1057 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2407{ yyval.IPredicate = ICmpInst::ICMP_ULT; ;
2408 break;}
2409case 35:
2410#line 1057 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2411{ yyval.IPredicate = ICmpInst::ICMP_UGT; ;
2412 break;}
2413case 36:
2414#line 1058 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2415{ yyval.IPredicate = ICmpInst::ICMP_ULE; ;
2416 break;}
2417case 37:
2418#line 1058 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2419{ yyval.IPredicate = ICmpInst::ICMP_UGE; ;
2420 break;}
2421case 38:
2422#line 1062 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2423{ yyval.FPredicate = FCmpInst::FCMP_OEQ; ;
2424 break;}
2425case 39:
2426#line 1062 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2427{ yyval.FPredicate = FCmpInst::FCMP_ONE; ;
2428 break;}
2429case 40:
2430#line 1063 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2431{ yyval.FPredicate = FCmpInst::FCMP_OLT; ;
2432 break;}
2433case 41:
2434#line 1063 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2435{ yyval.FPredicate = FCmpInst::FCMP_OGT; ;
2436 break;}
2437case 42:
2438#line 1064 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2439{ yyval.FPredicate = FCmpInst::FCMP_OLE; ;
2440 break;}
2441case 43:
2442#line 1064 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2443{ yyval.FPredicate = FCmpInst::FCMP_OGE; ;
2444 break;}
2445case 44:
2446#line 1065 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2447{ yyval.FPredicate = FCmpInst::FCMP_ORD; ;
2448 break;}
2449case 45:
2450#line 1065 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2451{ yyval.FPredicate = FCmpInst::FCMP_UNO; ;
2452 break;}
2453case 46:
2454#line 1066 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2455{ yyval.FPredicate = FCmpInst::FCMP_UEQ; ;
2456 break;}
2457case 47:
2458#line 1066 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2459{ yyval.FPredicate = FCmpInst::FCMP_UNE; ;
2460 break;}
2461case 48:
2462#line 1067 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2463{ yyval.FPredicate = FCmpInst::FCMP_ULT; ;
2464 break;}
2465case 49:
2466#line 1067 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2467{ yyval.FPredicate = FCmpInst::FCMP_UGT; ;
2468 break;}
2469case 50:
2470#line 1068 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2471{ yyval.FPredicate = FCmpInst::FCMP_ULE; ;
2472 break;}
2473case 51:
2474#line 1068 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2475{ yyval.FPredicate = FCmpInst::FCMP_UGE; ;
2476 break;}
2477case 52:
2478#line 1069 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2479{ yyval.FPredicate = FCmpInst::FCMP_TRUE; ;
2480 break;}
2481case 53:
2482#line 1070 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2483{ yyval.FPredicate = FCmpInst::FCMP_FALSE; ;
2484 break;}
2485case 60:
2486#line 1079 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2487{ yyval.StrVal = 0; ;
2488 break;}
2489case 61:
2490#line 1083 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2491{
2492 yyval.StrVal = yyvsp[-1].StrVal;
Reid Spencer41dff5e2007-01-26 08:05:27 +00002493 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00002494 ;
2495 break;}
2496case 62:
2497#line 1087 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2498{
2499 yyval.StrVal = 0;
Reid Spencer41dff5e2007-01-26 08:05:27 +00002500 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00002501 ;
2502 break;}
2503case 65:
2504#line 1094 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2505{
2506 yyval.StrVal = yyvsp[-1].StrVal;
Reid Spencer41dff5e2007-01-26 08:05:27 +00002507 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00002508 ;
2509 break;}
2510case 66:
2511#line 1098 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2512{
2513 yyval.StrVal = 0;
Reid Spencer41dff5e2007-01-26 08:05:27 +00002514 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00002515 ;
2516 break;}
2517case 67:
2518#line 1104 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2519{ yyval.Linkage = GlobalValue::InternalLinkage; ;
2520 break;}
2521case 68:
2522#line 1105 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2523{ yyval.Linkage = GlobalValue::WeakLinkage; ;
2524 break;}
2525case 69:
2526#line 1106 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2527{ yyval.Linkage = GlobalValue::LinkOnceLinkage; ;
2528 break;}
2529case 70:
2530#line 1107 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2531{ yyval.Linkage = GlobalValue::AppendingLinkage; ;
2532 break;}
2533case 71:
2534#line 1108 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2535{ yyval.Linkage = GlobalValue::DLLExportLinkage; ;
2536 break;}
2537case 72:
2538#line 1112 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2539{ yyval.Linkage = GlobalValue::DLLImportLinkage; ;
2540 break;}
2541case 73:
2542#line 1113 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2543{ yyval.Linkage = GlobalValue::ExternalWeakLinkage; ;
2544 break;}
2545case 74:
2546#line 1114 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2547{ yyval.Linkage = GlobalValue::ExternalLinkage; ;
2548 break;}
2549case 75:
2550#line 1118 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2551{ yyval.Visibility = GlobalValue::DefaultVisibility; ;
2552 break;}
2553case 76:
2554#line 1119 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2555{ yyval.Visibility = GlobalValue::HiddenVisibility; ;
2556 break;}
2557case 77:
2558#line 1123 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2559{ yyval.Linkage = GlobalValue::ExternalLinkage; ;
2560 break;}
2561case 78:
2562#line 1124 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2563{ yyval.Linkage = GlobalValue::DLLImportLinkage; ;
2564 break;}
2565case 79:
2566#line 1125 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2567{ yyval.Linkage = GlobalValue::ExternalWeakLinkage; ;
2568 break;}
2569case 80:
2570#line 1129 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2571{ yyval.Linkage = GlobalValue::ExternalLinkage; ;
2572 break;}
2573case 81:
2574#line 1130 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2575{ yyval.Linkage = GlobalValue::InternalLinkage; ;
2576 break;}
2577case 82:
2578#line 1131 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2579{ yyval.Linkage = GlobalValue::LinkOnceLinkage; ;
2580 break;}
2581case 83:
2582#line 1132 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2583{ yyval.Linkage = GlobalValue::WeakLinkage; ;
2584 break;}
2585case 84:
2586#line 1133 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2587{ yyval.Linkage = GlobalValue::DLLExportLinkage; ;
2588 break;}
2589case 85:
2590#line 1136 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2591{ yyval.UIntVal = CallingConv::C; ;
2592 break;}
2593case 86:
2594#line 1137 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2595{ yyval.UIntVal = CallingConv::C; ;
2596 break;}
2597case 87:
2598#line 1138 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2599{ yyval.UIntVal = CallingConv::Fast; ;
2600 break;}
2601case 88:
2602#line 1139 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2603{ yyval.UIntVal = CallingConv::Cold; ;
2604 break;}
2605case 89:
2606#line 1140 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2607{ yyval.UIntVal = CallingConv::X86_StdCall; ;
2608 break;}
2609case 90:
2610#line 1141 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2611{ yyval.UIntVal = CallingConv::X86_FastCall; ;
2612 break;}
2613case 91:
2614#line 1142 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2615{
2616 if ((unsigned)yyvsp[0].UInt64Val != yyvsp[0].UInt64Val)
Reid Spencerb5334b02007-02-05 10:18:06 +00002617 GEN_ERROR("Calling conv too large");
Chris Lattner9d2fda62007-02-13 05:53:56 +00002618 yyval.UIntVal = yyvsp[0].UInt64Val;
Reid Spencer41dff5e2007-01-26 08:05:27 +00002619 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00002620 ;
2621 break;}
2622case 92:
2623#line 1149 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2624{ yyval.ParamAttrs = FunctionType::ZExtAttribute; ;
2625 break;}
2626case 93:
2627#line 1150 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2628{ yyval.ParamAttrs = FunctionType::SExtAttribute; ;
2629 break;}
2630case 94:
2631#line 1151 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2632{ yyval.ParamAttrs = FunctionType::InRegAttribute; ;
2633 break;}
2634case 95:
2635#line 1152 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2636{ yyval.ParamAttrs = FunctionType::StructRetAttribute; ;
2637 break;}
2638case 96:
2639#line 1155 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2640{ yyval.ParamAttrs = FunctionType::NoAttributeSet; ;
2641 break;}
2642case 97:
2643#line 1156 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2644{
2645 yyval.ParamAttrs = FunctionType::ParameterAttributes(yyvsp[-1].ParamAttrs | yyvsp[0].ParamAttrs);
2646 ;
2647 break;}
2648case 98:
2649#line 1161 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2650{ yyval.ParamAttrs = FunctionType::NoReturnAttribute; ;
2651 break;}
2652case 100:
2653#line 1165 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2654{ yyval.ParamAttrs = FunctionType::NoAttributeSet; ;
2655 break;}
2656case 101:
2657#line 1166 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2658{
2659 yyval.ParamAttrs = FunctionType::ParameterAttributes(yyvsp[-1].ParamAttrs | yyvsp[0].ParamAttrs);
2660 ;
2661 break;}
2662case 102:
2663#line 1173 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2664{ yyval.UIntVal = 0; ;
2665 break;}
2666case 103:
2667#line 1174 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2668{
2669 yyval.UIntVal = yyvsp[0].UInt64Val;
2670 if (yyval.UIntVal != 0 && !isPowerOf2_32(yyval.UIntVal))
Reid Spencerb5334b02007-02-05 10:18:06 +00002671 GEN_ERROR("Alignment must be a power of two");
Reid Spencer41dff5e2007-01-26 08:05:27 +00002672 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00002673;
2674 break;}
2675case 104:
2676#line 1180 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2677{ yyval.UIntVal = 0; ;
2678 break;}
2679case 105:
2680#line 1181 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2681{
2682 yyval.UIntVal = yyvsp[0].UInt64Val;
2683 if (yyval.UIntVal != 0 && !isPowerOf2_32(yyval.UIntVal))
Reid Spencerb5334b02007-02-05 10:18:06 +00002684 GEN_ERROR("Alignment must be a power of two");
Reid Spencer41dff5e2007-01-26 08:05:27 +00002685 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00002686;
2687 break;}
2688case 106:
2689#line 1189 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2690{
2691 for (unsigned i = 0, e = strlen(yyvsp[0].StrVal); i != e; ++i)
2692 if (yyvsp[0].StrVal[i] == '"' || yyvsp[0].StrVal[i] == '\\')
Reid Spencerb5334b02007-02-05 10:18:06 +00002693 GEN_ERROR("Invalid character in section name");
Chris Lattner9d2fda62007-02-13 05:53:56 +00002694 yyval.StrVal = yyvsp[0].StrVal;
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00002695 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00002696;
2697 break;}
2698case 107:
2699#line 1197 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2700{ yyval.StrVal = 0; ;
2701 break;}
2702case 108:
2703#line 1198 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2704{ yyval.StrVal = yyvsp[0].StrVal; ;
2705 break;}
2706case 109:
2707#line 1203 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2708{;
2709 break;}
2710case 110:
2711#line 1204 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2712{;
2713 break;}
2714case 111:
2715#line 1205 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2716{
2717 CurGV->setSection(yyvsp[0].StrVal);
2718 free(yyvsp[0].StrVal);
Reid Spencer6f407902007-01-13 05:00:46 +00002719 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00002720 ;
2721 break;}
2722case 112:
2723#line 1210 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2724{
2725 if (yyvsp[0].UInt64Val != 0 && !isPowerOf2_32(yyvsp[0].UInt64Val))
Reid Spencerb5334b02007-02-05 10:18:06 +00002726 GEN_ERROR("Alignment must be a power of two");
Chris Lattner9d2fda62007-02-13 05:53:56 +00002727 CurGV->setAlignment(yyvsp[0].UInt64Val);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00002728 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00002729 ;
2730 break;}
2731case 117:
2732#line 1226 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2733{
2734 yyval.TypeVal = new PATypeHolder(OpaqueType::get());
Reid Spencer41dff5e2007-01-26 08:05:27 +00002735 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00002736 ;
2737 break;}
2738case 118:
2739#line 1230 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2740{
2741 yyval.TypeVal = new PATypeHolder(yyvsp[0].PrimType);
Reid Spencer41dff5e2007-01-26 08:05:27 +00002742 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00002743 ;
2744 break;}
2745case 119:
2746#line 1234 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2747{ // Pointer type?
2748 if (*yyvsp[-1].TypeVal == Type::LabelTy)
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00002749 GEN_ERROR("Cannot form a pointer to a basic block");
Chris Lattner9d2fda62007-02-13 05:53:56 +00002750 yyval.TypeVal = new PATypeHolder(HandleUpRefs(PointerType::get(*yyvsp[-1].TypeVal)));
2751 delete yyvsp[-1].TypeVal;
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00002752 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00002753 ;
2754 break;}
2755case 120:
2756#line 1241 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2757{ // Named types are also simple types...
2758 const Type* tmp = getTypeVal(yyvsp[0].ValIDVal);
Reid Spencer41dff5e2007-01-26 08:05:27 +00002759 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00002760 yyval.TypeVal = new PATypeHolder(tmp);
2761 ;
2762 break;}
2763case 121:
2764#line 1246 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2765{ // Type UpReference
2766 if (yyvsp[0].UInt64Val > (uint64_t)~0U) GEN_ERROR("Value out of range");
Reid Spencer41dff5e2007-01-26 08:05:27 +00002767 OpaqueType *OT = OpaqueType::get(); // Use temporary placeholder
Chris Lattner9d2fda62007-02-13 05:53:56 +00002768 UpRefs.push_back(UpRefRecord((unsigned)yyvsp[0].UInt64Val, OT)); // Add to vector...
2769 yyval.TypeVal = new PATypeHolder(OT);
Reid Spencer41dff5e2007-01-26 08:05:27 +00002770 UR_OUT("New Upreference!\n");
2771 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00002772 ;
2773 break;}
2774case 122:
2775#line 1254 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2776{
Reid Spencer41dff5e2007-01-26 08:05:27 +00002777 std::vector<const Type*> Params;
2778 std::vector<FunctionType::ParameterAttributes> Attrs;
Chris Lattner9d2fda62007-02-13 05:53:56 +00002779 Attrs.push_back(yyvsp[0].ParamAttrs);
2780 for (TypeWithAttrsList::iterator I=yyvsp[-2].TypeWithAttrsList->begin(), E=yyvsp[-2].TypeWithAttrsList->end(); I != E; ++I) {
Reid Spencer41dff5e2007-01-26 08:05:27 +00002781 Params.push_back(I->Ty->get());
2782 if (I->Ty->get() != Type::VoidTy)
2783 Attrs.push_back(I->Attrs);
2784 }
2785 bool isVarArg = Params.size() && Params.back() == Type::VoidTy;
2786 if (isVarArg) Params.pop_back();
2787
Chris Lattner9d2fda62007-02-13 05:53:56 +00002788 FunctionType *FT = FunctionType::get(*yyvsp[-4].TypeVal, Params, isVarArg, Attrs);
2789 delete yyvsp[-2].TypeWithAttrsList; // Delete the argument list
2790 delete yyvsp[-4].TypeVal; // Delete the return type handle
2791 yyval.TypeVal = new PATypeHolder(HandleUpRefs(FT));
Reid Spencere4d87aa2006-12-23 06:05:41 +00002792 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00002793 ;
2794 break;}
2795case 123:
2796#line 1272 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2797{
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00002798 std::vector<const Type*> Params;
2799 std::vector<FunctionType::ParameterAttributes> Attrs;
Chris Lattner9d2fda62007-02-13 05:53:56 +00002800 Attrs.push_back(yyvsp[0].ParamAttrs);
2801 for (TypeWithAttrsList::iterator I=yyvsp[-2].TypeWithAttrsList->begin(), E=yyvsp[-2].TypeWithAttrsList->end(); I != E; ++I) {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00002802 Params.push_back(I->Ty->get());
2803 if (I->Ty->get() != Type::VoidTy)
2804 Attrs.push_back(I->Attrs);
2805 }
2806 bool isVarArg = Params.size() && Params.back() == Type::VoidTy;
2807 if (isVarArg) Params.pop_back();
2808
Chris Lattner9d2fda62007-02-13 05:53:56 +00002809 FunctionType *FT = FunctionType::get(yyvsp[-4].PrimType, Params, isVarArg, Attrs);
2810 delete yyvsp[-2].TypeWithAttrsList; // Delete the argument list
2811 yyval.TypeVal = new PATypeHolder(HandleUpRefs(FT));
Reid Spencer41dff5e2007-01-26 08:05:27 +00002812 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00002813 ;
2814 break;}
2815case 124:
2816#line 1290 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2817{ // Sized array type?
2818 yyval.TypeVal = new PATypeHolder(HandleUpRefs(ArrayType::get(*yyvsp[-1].TypeVal, (unsigned)yyvsp[-3].UInt64Val)));
2819 delete yyvsp[-1].TypeVal;
Reid Spencer41dff5e2007-01-26 08:05:27 +00002820 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00002821 ;
2822 break;}
2823case 125:
2824#line 1295 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2825{ // Packed array type?
2826 const llvm::Type* ElemTy = yyvsp[-1].TypeVal->get();
2827 if ((unsigned)yyvsp[-3].UInt64Val != yyvsp[-3].UInt64Val)
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00002828 GEN_ERROR("Unsigned result not equal to signed result");
2829 if (!ElemTy->isFloatingPoint() && !ElemTy->isInteger())
2830 GEN_ERROR("Element type of a PackedType must be primitive");
Chris Lattner9d2fda62007-02-13 05:53:56 +00002831 if (!isPowerOf2_32(yyvsp[-3].UInt64Val))
Reid Spencerb5334b02007-02-05 10:18:06 +00002832 GEN_ERROR("Vector length should be a power of 2");
Chris Lattner9d2fda62007-02-13 05:53:56 +00002833 yyval.TypeVal = new PATypeHolder(HandleUpRefs(PackedType::get(*yyvsp[-1].TypeVal, (unsigned)yyvsp[-3].UInt64Val)));
2834 delete yyvsp[-1].TypeVal;
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00002835 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00002836 ;
2837 break;}
2838case 126:
2839#line 1307 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2840{ // Structure type?
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00002841 std::vector<const Type*> Elements;
Chris Lattner9d2fda62007-02-13 05:53:56 +00002842 for (std::list<llvm::PATypeHolder>::iterator I = yyvsp[-1].TypeList->begin(),
2843 E = yyvsp[-1].TypeList->end(); I != E; ++I)
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00002844 Elements.push_back(*I);
2845
Chris Lattner9d2fda62007-02-13 05:53:56 +00002846 yyval.TypeVal = new PATypeHolder(HandleUpRefs(StructType::get(Elements)));
2847 delete yyvsp[-1].TypeList;
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00002848 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00002849 ;
2850 break;}
2851case 127:
2852#line 1317 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2853{ // Empty structure type?
2854 yyval.TypeVal = new PATypeHolder(StructType::get(std::vector<const Type*>()));
Reid Spencer14310612006-12-31 05:40:51 +00002855 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00002856 ;
2857 break;}
2858case 128:
2859#line 1321 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2860{
Reid Spencer41dff5e2007-01-26 08:05:27 +00002861 std::vector<const Type*> Elements;
Chris Lattner9d2fda62007-02-13 05:53:56 +00002862 for (std::list<llvm::PATypeHolder>::iterator I = yyvsp[-2].TypeList->begin(),
2863 E = yyvsp[-2].TypeList->end(); I != E; ++I)
Reid Spencer41dff5e2007-01-26 08:05:27 +00002864 Elements.push_back(*I);
2865
Chris Lattner9d2fda62007-02-13 05:53:56 +00002866 yyval.TypeVal = new PATypeHolder(HandleUpRefs(StructType::get(Elements, true)));
2867 delete yyvsp[-2].TypeList;
Reid Spencer14310612006-12-31 05:40:51 +00002868 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00002869 ;
2870 break;}
2871case 129:
2872#line 1331 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2873{ // Empty structure type?
2874 yyval.TypeVal = new PATypeHolder(StructType::get(std::vector<const Type*>(), true));
Reid Spencer41dff5e2007-01-26 08:05:27 +00002875 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00002876 ;
2877 break;}
2878case 130:
2879#line 1338 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2880{
2881 yyval.TypeWithAttrs.Ty = yyvsp[-1].TypeVal;
2882 yyval.TypeWithAttrs.Attrs = yyvsp[0].ParamAttrs;
2883 ;
2884 break;}
2885case 131:
2886#line 1345 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2887{
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00002888 if (!UpRefs.empty())
Chris Lattner9d2fda62007-02-13 05:53:56 +00002889 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[0].TypeVal)->getDescription());
2890 if (!(*yyvsp[0].TypeVal)->isFirstClassType())
Reid Spencerb5334b02007-02-05 10:18:06 +00002891 GEN_ERROR("LLVM functions cannot return aggregate types");
Chris Lattner9d2fda62007-02-13 05:53:56 +00002892 yyval.TypeVal = yyvsp[0].TypeVal;
2893 ;
2894 break;}
2895case 132:
2896#line 1352 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2897{
2898 yyval.TypeVal = new PATypeHolder(Type::VoidTy);
2899 ;
2900 break;}
2901case 133:
2902#line 1357 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2903{
2904 yyval.TypeWithAttrsList = new TypeWithAttrsList();
2905 yyval.TypeWithAttrsList->push_back(yyvsp[0].TypeWithAttrs);
Reid Spencer6f407902007-01-13 05:00:46 +00002906 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00002907 ;
2908 break;}
2909case 134:
2910#line 1362 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2911{
2912 (yyval.TypeWithAttrsList=yyvsp[-2].TypeWithAttrsList)->push_back(yyvsp[0].TypeWithAttrs);
Reid Spencer3da59db2006-11-27 01:05:10 +00002913 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00002914 ;
2915 break;}
2916case 136:
2917#line 1370 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2918{
2919 yyval.TypeWithAttrsList=yyvsp[-2].TypeWithAttrsList;
Reid Spencer41dff5e2007-01-26 08:05:27 +00002920 TypeWithAttrs TWA; TWA.Attrs = FunctionType::NoAttributeSet;
2921 TWA.Ty = new PATypeHolder(Type::VoidTy);
Chris Lattner9d2fda62007-02-13 05:53:56 +00002922 yyval.TypeWithAttrsList->push_back(TWA);
Reid Spencer41dff5e2007-01-26 08:05:27 +00002923 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00002924 ;
2925 break;}
2926case 137:
2927#line 1377 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2928{
2929 yyval.TypeWithAttrsList = new TypeWithAttrsList;
Reid Spencer41dff5e2007-01-26 08:05:27 +00002930 TypeWithAttrs TWA; TWA.Attrs = FunctionType::NoAttributeSet;
2931 TWA.Ty = new PATypeHolder(Type::VoidTy);
Chris Lattner9d2fda62007-02-13 05:53:56 +00002932 yyval.TypeWithAttrsList->push_back(TWA);
Reid Spencer41dff5e2007-01-26 08:05:27 +00002933 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00002934 ;
2935 break;}
2936case 138:
2937#line 1384 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2938{
2939 yyval.TypeWithAttrsList = new TypeWithAttrsList();
Reid Spencer41dff5e2007-01-26 08:05:27 +00002940 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00002941 ;
2942 break;}
2943case 139:
2944#line 1392 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2945{
2946 yyval.TypeList = new std::list<PATypeHolder>();
2947 yyval.TypeList->push_back(*yyvsp[0].TypeVal); delete yyvsp[0].TypeVal;
Reid Spencer41dff5e2007-01-26 08:05:27 +00002948 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00002949 ;
2950 break;}
2951case 140:
2952#line 1397 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2953{
2954 (yyval.TypeList=yyvsp[-2].TypeList)->push_back(*yyvsp[0].TypeVal); delete yyvsp[0].TypeVal;
Reid Spencer3da59db2006-11-27 01:05:10 +00002955 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00002956 ;
2957 break;}
2958case 141:
2959#line 1408 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2960{ // Nonempty unsized arr
Reid Spencer14310612006-12-31 05:40:51 +00002961 if (!UpRefs.empty())
Chris Lattner9d2fda62007-02-13 05:53:56 +00002962 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription());
2963 const ArrayType *ATy = dyn_cast<ArrayType>(yyvsp[-3].TypeVal->get());
Reid Spencer68a24bd2005-08-27 18:50:39 +00002964 if (ATy == 0)
Reid Spencer61c83e02006-08-18 08:43:06 +00002965 GEN_ERROR("Cannot make array constant with type: '" +
Chris Lattner9d2fda62007-02-13 05:53:56 +00002966 (*yyvsp[-3].TypeVal)->getDescription() + "'");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00002967 const Type *ETy = ATy->getElementType();
2968 int NumElements = ATy->getNumElements();
2969
2970 // Verify that we have the correct size...
Chris Lattner9d2fda62007-02-13 05:53:56 +00002971 if (NumElements != -1 && NumElements != (int)yyvsp[-1].ConstVector->size())
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00002972 GEN_ERROR("Type mismatch: constant sized array initialized with " +
Chris Lattner9d2fda62007-02-13 05:53:56 +00002973 utostr(yyvsp[-1].ConstVector->size()) + " arguments, but has size of " +
Reid Spencerb5334b02007-02-05 10:18:06 +00002974 itostr(NumElements) + "");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00002975
2976 // Verify all elements are correct type!
Chris Lattner9d2fda62007-02-13 05:53:56 +00002977 for (unsigned i = 0; i < yyvsp[-1].ConstVector->size(); i++) {
2978 if (ETy != (*yyvsp[-1].ConstVector)[i]->getType())
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00002979 GEN_ERROR("Element #" + utostr(i) + " is not of type '" +
2980 ETy->getDescription() +"' as required!\nIt is of type '"+
Chris Lattner9d2fda62007-02-13 05:53:56 +00002981 (*yyvsp[-1].ConstVector)[i]->getType()->getDescription() + "'.");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00002982 }
2983
Chris Lattner9d2fda62007-02-13 05:53:56 +00002984 yyval.ConstVal = ConstantArray::get(ATy, *yyvsp[-1].ConstVector);
2985 delete yyvsp[-3].TypeVal; delete yyvsp[-1].ConstVector;
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00002986 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00002987 ;
2988 break;}
2989case 142:
2990#line 1436 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2991{
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00002992 if (!UpRefs.empty())
Chris Lattner9d2fda62007-02-13 05:53:56 +00002993 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription());
2994 const ArrayType *ATy = dyn_cast<ArrayType>(yyvsp[-2].TypeVal->get());
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00002995 if (ATy == 0)
2996 GEN_ERROR("Cannot make array constant with type: '" +
Chris Lattner9d2fda62007-02-13 05:53:56 +00002997 (*yyvsp[-2].TypeVal)->getDescription() + "'");
Reid Spencer68a24bd2005-08-27 18:50:39 +00002998
Andrew Lenharth6353e052006-12-08 18:07:09 +00002999 int NumElements = ATy->getNumElements();
3000 if (NumElements != -1 && NumElements != 0)
3001 GEN_ERROR("Type mismatch: constant sized array initialized with 0"
Reid Spencerb5334b02007-02-05 10:18:06 +00003002 " arguments, but has size of " + itostr(NumElements) +"");
Chris Lattner9d2fda62007-02-13 05:53:56 +00003003 yyval.ConstVal = ConstantArray::get(ATy, std::vector<Constant*>());
3004 delete yyvsp[-2].TypeVal;
Reid Spencer61c83e02006-08-18 08:43:06 +00003005 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00003006 ;
3007 break;}
3008case 143:
3009#line 1452 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3010{
Reid Spencer14310612006-12-31 05:40:51 +00003011 if (!UpRefs.empty())
Chris Lattner9d2fda62007-02-13 05:53:56 +00003012 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription());
3013 const ArrayType *ATy = dyn_cast<ArrayType>(yyvsp[-2].TypeVal->get());
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003014 if (ATy == 0)
3015 GEN_ERROR("Cannot make array constant with type: '" +
Chris Lattner9d2fda62007-02-13 05:53:56 +00003016 (*yyvsp[-2].TypeVal)->getDescription() + "'");
Reid Spencer61c83e02006-08-18 08:43:06 +00003017
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003018 int NumElements = ATy->getNumElements();
3019 const Type *ETy = ATy->getElementType();
Chris Lattner9d2fda62007-02-13 05:53:56 +00003020 char *EndStr = UnEscapeLexed(yyvsp[0].StrVal, true);
3021 if (NumElements != -1 && NumElements != (EndStr-yyvsp[0].StrVal))
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003022 GEN_ERROR("Can't build string constant of size " +
Chris Lattner9d2fda62007-02-13 05:53:56 +00003023 itostr((int)(EndStr-yyvsp[0].StrVal)) +
Reid Spencerb5334b02007-02-05 10:18:06 +00003024 " when array has size " + itostr(NumElements) + "");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003025 std::vector<Constant*> Vals;
3026 if (ETy == Type::Int8Ty) {
Chris Lattner9d2fda62007-02-13 05:53:56 +00003027 for (unsigned char *C = (unsigned char *)yyvsp[0].StrVal;
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003028 C != (unsigned char*)EndStr; ++C)
3029 Vals.push_back(ConstantInt::get(ETy, *C));
3030 } else {
Chris Lattner9d2fda62007-02-13 05:53:56 +00003031 free(yyvsp[0].StrVal);
Reid Spencerb5334b02007-02-05 10:18:06 +00003032 GEN_ERROR("Cannot build string arrays of non byte sized elements");
Andrew Lenharth6353e052006-12-08 18:07:09 +00003033 }
Chris Lattner9d2fda62007-02-13 05:53:56 +00003034 free(yyvsp[0].StrVal);
3035 yyval.ConstVal = ConstantArray::get(ATy, Vals);
3036 delete yyvsp[-2].TypeVal;
Reid Spencer61c83e02006-08-18 08:43:06 +00003037 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00003038 ;
3039 break;}
3040case 144:
3041#line 1481 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3042{ // Nonempty unsized arr
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003043 if (!UpRefs.empty())
Chris Lattner9d2fda62007-02-13 05:53:56 +00003044 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription());
3045 const PackedType *PTy = dyn_cast<PackedType>(yyvsp[-3].TypeVal->get());
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003046 if (PTy == 0)
3047 GEN_ERROR("Cannot make packed constant with type: '" +
Chris Lattner9d2fda62007-02-13 05:53:56 +00003048 (*yyvsp[-3].TypeVal)->getDescription() + "'");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003049 const Type *ETy = PTy->getElementType();
3050 int NumElements = PTy->getNumElements();
Reid Spencer41dff5e2007-01-26 08:05:27 +00003051
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003052 // Verify that we have the correct size...
Chris Lattner9d2fda62007-02-13 05:53:56 +00003053 if (NumElements != -1 && NumElements != (int)yyvsp[-1].ConstVector->size())
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003054 GEN_ERROR("Type mismatch: constant sized packed initialized with " +
Chris Lattner9d2fda62007-02-13 05:53:56 +00003055 utostr(yyvsp[-1].ConstVector->size()) + " arguments, but has size of " +
Reid Spencerb5334b02007-02-05 10:18:06 +00003056 itostr(NumElements) + "");
Reid Spencer41dff5e2007-01-26 08:05:27 +00003057
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003058 // Verify all elements are correct type!
Chris Lattner9d2fda62007-02-13 05:53:56 +00003059 for (unsigned i = 0; i < yyvsp[-1].ConstVector->size(); i++) {
3060 if (ETy != (*yyvsp[-1].ConstVector)[i]->getType())
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003061 GEN_ERROR("Element #" + utostr(i) + " is not of type '" +
3062 ETy->getDescription() +"' as required!\nIt is of type '"+
Chris Lattner9d2fda62007-02-13 05:53:56 +00003063 (*yyvsp[-1].ConstVector)[i]->getType()->getDescription() + "'.");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003064 }
Reid Spencer41dff5e2007-01-26 08:05:27 +00003065
Chris Lattner9d2fda62007-02-13 05:53:56 +00003066 yyval.ConstVal = ConstantPacked::get(PTy, *yyvsp[-1].ConstVector);
3067 delete yyvsp[-3].TypeVal; delete yyvsp[-1].ConstVector;
Reid Spencer41dff5e2007-01-26 08:05:27 +00003068 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00003069 ;
3070 break;}
3071case 145:
3072#line 1509 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3073{
3074 const StructType *STy = dyn_cast<StructType>(yyvsp[-3].TypeVal->get());
Reid Spencer41dff5e2007-01-26 08:05:27 +00003075 if (STy == 0)
3076 GEN_ERROR("Cannot make struct constant with type: '" +
Chris Lattner9d2fda62007-02-13 05:53:56 +00003077 (*yyvsp[-3].TypeVal)->getDescription() + "'");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003078
Chris Lattner9d2fda62007-02-13 05:53:56 +00003079 if (yyvsp[-1].ConstVector->size() != STy->getNumContainedTypes())
Reid Spencerb5334b02007-02-05 10:18:06 +00003080 GEN_ERROR("Illegal number of initializers for structure type");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003081
3082 // Check to ensure that constants are compatible with the type initializer!
Chris Lattner9d2fda62007-02-13 05:53:56 +00003083 for (unsigned i = 0, e = yyvsp[-1].ConstVector->size(); i != e; ++i)
3084 if ((*yyvsp[-1].ConstVector)[i]->getType() != STy->getElementType(i))
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003085 GEN_ERROR("Expected type '" +
3086 STy->getElementType(i)->getDescription() +
3087 "' for element #" + utostr(i) +
Reid Spencerb5334b02007-02-05 10:18:06 +00003088 " of structure initializer");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003089
3090 // Check to ensure that Type is not packed
3091 if (STy->isPacked())
3092 GEN_ERROR("Unpacked Initializer to packed type '" + STy->getDescription() + "'");
3093
Chris Lattner9d2fda62007-02-13 05:53:56 +00003094 yyval.ConstVal = ConstantStruct::get(STy, *yyvsp[-1].ConstVector);
3095 delete yyvsp[-3].TypeVal; delete yyvsp[-1].ConstVector;
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003096 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00003097 ;
3098 break;}
3099case 146:
3100#line 1534 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3101{
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003102 if (!UpRefs.empty())
Chris Lattner9d2fda62007-02-13 05:53:56 +00003103 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription());
3104 const StructType *STy = dyn_cast<StructType>(yyvsp[-2].TypeVal->get());
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003105 if (STy == 0)
3106 GEN_ERROR("Cannot make struct constant with type: '" +
Chris Lattner9d2fda62007-02-13 05:53:56 +00003107 (*yyvsp[-2].TypeVal)->getDescription() + "'");
Reid Spencer41dff5e2007-01-26 08:05:27 +00003108
3109 if (STy->getNumContainedTypes() != 0)
Reid Spencerb5334b02007-02-05 10:18:06 +00003110 GEN_ERROR("Illegal number of initializers for structure type");
Reid Spencer41dff5e2007-01-26 08:05:27 +00003111
3112 // Check to ensure that Type is not packed
3113 if (STy->isPacked())
3114 GEN_ERROR("Unpacked Initializer to packed type '" + STy->getDescription() + "'");
3115
Chris Lattner9d2fda62007-02-13 05:53:56 +00003116 yyval.ConstVal = ConstantStruct::get(STy, std::vector<Constant*>());
3117 delete yyvsp[-2].TypeVal;
Reid Spencer41dff5e2007-01-26 08:05:27 +00003118 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00003119 ;
3120 break;}
3121case 147:
3122#line 1553 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3123{
3124 const StructType *STy = dyn_cast<StructType>(yyvsp[-5].TypeVal->get());
Reid Spencer41dff5e2007-01-26 08:05:27 +00003125 if (STy == 0)
3126 GEN_ERROR("Cannot make struct constant with type: '" +
Chris Lattner9d2fda62007-02-13 05:53:56 +00003127 (*yyvsp[-5].TypeVal)->getDescription() + "'");
Reid Spencer41dff5e2007-01-26 08:05:27 +00003128
Chris Lattner9d2fda62007-02-13 05:53:56 +00003129 if (yyvsp[-2].ConstVector->size() != STy->getNumContainedTypes())
Reid Spencerb5334b02007-02-05 10:18:06 +00003130 GEN_ERROR("Illegal number of initializers for structure type");
Reid Spencer41dff5e2007-01-26 08:05:27 +00003131
3132 // Check to ensure that constants are compatible with the type initializer!
Chris Lattner9d2fda62007-02-13 05:53:56 +00003133 for (unsigned i = 0, e = yyvsp[-2].ConstVector->size(); i != e; ++i)
3134 if ((*yyvsp[-2].ConstVector)[i]->getType() != STy->getElementType(i))
Reid Spencer41dff5e2007-01-26 08:05:27 +00003135 GEN_ERROR("Expected type '" +
3136 STy->getElementType(i)->getDescription() +
3137 "' for element #" + utostr(i) +
Reid Spencerb5334b02007-02-05 10:18:06 +00003138 " of structure initializer");
Reid Spencer41dff5e2007-01-26 08:05:27 +00003139
3140 // Check to ensure that Type is packed
3141 if (!STy->isPacked())
3142 GEN_ERROR("Packed Initializer to unpacked type '" + STy->getDescription() + "'");
3143
Chris Lattner9d2fda62007-02-13 05:53:56 +00003144 yyval.ConstVal = ConstantStruct::get(STy, *yyvsp[-2].ConstVector);
3145 delete yyvsp[-5].TypeVal; delete yyvsp[-2].ConstVector;
Reid Spencer41dff5e2007-01-26 08:05:27 +00003146 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00003147 ;
3148 break;}
3149case 148:
3150#line 1578 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3151{
Reid Spencer41dff5e2007-01-26 08:05:27 +00003152 if (!UpRefs.empty())
Chris Lattner9d2fda62007-02-13 05:53:56 +00003153 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-4].TypeVal)->getDescription());
3154 const StructType *STy = dyn_cast<StructType>(yyvsp[-4].TypeVal->get());
Reid Spencer41dff5e2007-01-26 08:05:27 +00003155 if (STy == 0)
3156 GEN_ERROR("Cannot make struct constant with type: '" +
Chris Lattner9d2fda62007-02-13 05:53:56 +00003157 (*yyvsp[-4].TypeVal)->getDescription() + "'");
Reid Spencer41dff5e2007-01-26 08:05:27 +00003158
3159 if (STy->getNumContainedTypes() != 0)
Reid Spencerb5334b02007-02-05 10:18:06 +00003160 GEN_ERROR("Illegal number of initializers for structure type");
Reid Spencer41dff5e2007-01-26 08:05:27 +00003161
3162 // Check to ensure that Type is packed
3163 if (!STy->isPacked())
3164 GEN_ERROR("Packed Initializer to unpacked type '" + STy->getDescription() + "'");
3165
Chris Lattner9d2fda62007-02-13 05:53:56 +00003166 yyval.ConstVal = ConstantStruct::get(STy, std::vector<Constant*>());
3167 delete yyvsp[-4].TypeVal;
Reid Spencer41dff5e2007-01-26 08:05:27 +00003168 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00003169 ;
3170 break;}
3171case 149:
3172#line 1597 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3173{
Reid Spencer41dff5e2007-01-26 08:05:27 +00003174 if (!UpRefs.empty())
Chris Lattner9d2fda62007-02-13 05:53:56 +00003175 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
3176 const PointerType *PTy = dyn_cast<PointerType>(yyvsp[-1].TypeVal->get());
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003177 if (PTy == 0)
3178 GEN_ERROR("Cannot make null pointer constant with type: '" +
Chris Lattner9d2fda62007-02-13 05:53:56 +00003179 (*yyvsp[-1].TypeVal)->getDescription() + "'");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003180
Chris Lattner9d2fda62007-02-13 05:53:56 +00003181 yyval.ConstVal = ConstantPointerNull::get(PTy);
3182 delete yyvsp[-1].TypeVal;
Reid Spencer41dff5e2007-01-26 08:05:27 +00003183 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00003184 ;
3185 break;}
3186case 150:
3187#line 1609 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3188{
Reid Spencer41dff5e2007-01-26 08:05:27 +00003189 if (!UpRefs.empty())
Chris Lattner9d2fda62007-02-13 05:53:56 +00003190 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
3191 yyval.ConstVal = UndefValue::get(yyvsp[-1].TypeVal->get());
3192 delete yyvsp[-1].TypeVal;
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003193 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00003194 ;
3195 break;}
3196case 151:
3197#line 1616 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3198{
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003199 if (!UpRefs.empty())
Chris Lattner9d2fda62007-02-13 05:53:56 +00003200 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
3201 const PointerType *Ty = dyn_cast<PointerType>(yyvsp[-1].TypeVal->get());
Reid Spencer68a24bd2005-08-27 18:50:39 +00003202 if (Ty == 0)
Reid Spencerb5334b02007-02-05 10:18:06 +00003203 GEN_ERROR("Global const reference must be a pointer type");
Reid Spencer68a24bd2005-08-27 18:50:39 +00003204
3205 // ConstExprs can exist in the body of a function, thus creating
3206 // GlobalValues whenever they refer to a variable. Because we are in
3207 // the context of a function, getValNonImprovising will search the functions
3208 // symbol table instead of the module symbol table for the global symbol,
3209 // which throws things all off. To get around this, we just tell
3210 // getValNonImprovising that we are at global scope here.
3211 //
3212 Function *SavedCurFn = CurFun.CurrentFunction;
3213 CurFun.CurrentFunction = 0;
3214
Chris Lattner9d2fda62007-02-13 05:53:56 +00003215 Value *V = getValNonImprovising(Ty, yyvsp[0].ValIDVal);
Reid Spencer5b7e7532006-09-28 19:28:24 +00003216 CHECK_FOR_ERROR
Reid Spencer68a24bd2005-08-27 18:50:39 +00003217
3218 CurFun.CurrentFunction = SavedCurFn;
3219
3220 // If this is an initializer for a constant pointer, which is referencing a
3221 // (currently) undefined variable, create a stub now that shall be replaced
3222 // in the future with the right type of variable.
3223 //
3224 if (V == 0) {
Reid Spencera9720f52007-02-05 17:04:00 +00003225 assert(isa<PointerType>(Ty) && "Globals may only be used as pointers!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00003226 const PointerType *PT = cast<PointerType>(Ty);
3227
3228 // First check to see if the forward references value is already created!
3229 PerModuleInfo::GlobalRefsType::iterator I =
Chris Lattner9d2fda62007-02-13 05:53:56 +00003230 CurModule.GlobalRefs.find(std::make_pair(PT, yyvsp[0].ValIDVal));
Reid Spencer68a24bd2005-08-27 18:50:39 +00003231
3232 if (I != CurModule.GlobalRefs.end()) {
3233 V = I->second; // Placeholder already exists, use it...
Chris Lattner9d2fda62007-02-13 05:53:56 +00003234 yyvsp[0].ValIDVal.destroy();
Reid Spencer68a24bd2005-08-27 18:50:39 +00003235 } else {
3236 std::string Name;
Chris Lattner9d2fda62007-02-13 05:53:56 +00003237 if (yyvsp[0].ValIDVal.Type == ValID::GlobalName)
3238 Name = yyvsp[0].ValIDVal.Name;
3239 else if (yyvsp[0].ValIDVal.Type != ValID::GlobalID)
Reid Spencer41dff5e2007-01-26 08:05:27 +00003240 GEN_ERROR("Invalid reference to global");
Reid Spencer68a24bd2005-08-27 18:50:39 +00003241
3242 // Create the forward referenced global.
3243 GlobalValue *GV;
3244 if (const FunctionType *FTy =
3245 dyn_cast<FunctionType>(PT->getElementType())) {
3246 GV = new Function(FTy, GlobalValue::ExternalLinkage, Name,
3247 CurModule.CurrentModule);
3248 } else {
3249 GV = new GlobalVariable(PT->getElementType(), false,
3250 GlobalValue::ExternalLinkage, 0,
3251 Name, CurModule.CurrentModule);
3252 }
3253
3254 // Keep track of the fact that we have a forward ref to recycle it
Chris Lattner9d2fda62007-02-13 05:53:56 +00003255 CurModule.GlobalRefs.insert(std::make_pair(std::make_pair(PT, yyvsp[0].ValIDVal), GV));
Reid Spencer68a24bd2005-08-27 18:50:39 +00003256 V = GV;
3257 }
3258 }
3259
Chris Lattner9d2fda62007-02-13 05:53:56 +00003260 yyval.ConstVal = cast<GlobalValue>(V);
3261 delete yyvsp[-1].TypeVal; // Free the type handle
Reid Spencer61c83e02006-08-18 08:43:06 +00003262 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00003263 ;
3264 break;}
3265case 152:
3266#line 1682 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3267{
Reid Spencer14310612006-12-31 05:40:51 +00003268 if (!UpRefs.empty())
Chris Lattner9d2fda62007-02-13 05:53:56 +00003269 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
3270 if (yyvsp[-1].TypeVal->get() != yyvsp[0].ConstVal->getType())
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003271 GEN_ERROR("Mismatched types for constant expression: " +
Chris Lattner9d2fda62007-02-13 05:53:56 +00003272 (*yyvsp[-1].TypeVal)->getDescription() + " and " + yyvsp[0].ConstVal->getType()->getDescription());
3273 yyval.ConstVal = yyvsp[0].ConstVal;
3274 delete yyvsp[-1].TypeVal;
Reid Spencer41dff5e2007-01-26 08:05:27 +00003275 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00003276 ;
3277 break;}
3278case 153:
3279#line 1692 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3280{
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003281 if (!UpRefs.empty())
Chris Lattner9d2fda62007-02-13 05:53:56 +00003282 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
3283 const Type *Ty = yyvsp[-1].TypeVal->get();
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003284 if (isa<FunctionType>(Ty) || Ty == Type::LabelTy || isa<OpaqueType>(Ty))
Reid Spencerb5334b02007-02-05 10:18:06 +00003285 GEN_ERROR("Cannot create a null initialized value of this type");
Chris Lattner9d2fda62007-02-13 05:53:56 +00003286 yyval.ConstVal = Constant::getNullValue(Ty);
3287 delete yyvsp[-1].TypeVal;
Reid Spencer41dff5e2007-01-26 08:05:27 +00003288 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00003289 ;
3290 break;}
3291case 154:
3292#line 1702 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3293{ // integral constants
3294 if (!ConstantInt::isValueValidForType(yyvsp[-1].PrimType, yyvsp[0].SInt64Val))
Reid Spencerb5334b02007-02-05 10:18:06 +00003295 GEN_ERROR("Constant value doesn't fit in type");
Chris Lattner9d2fda62007-02-13 05:53:56 +00003296 yyval.ConstVal = ConstantInt::get(yyvsp[-1].PrimType, yyvsp[0].SInt64Val);
Reid Spencer41dff5e2007-01-26 08:05:27 +00003297 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00003298 ;
3299 break;}
3300case 155:
3301#line 1708 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3302{ // integral constants
3303 if (!ConstantInt::isValueValidForType(yyvsp[-1].PrimType, yyvsp[0].UInt64Val))
Reid Spencerb5334b02007-02-05 10:18:06 +00003304 GEN_ERROR("Constant value doesn't fit in type");
Chris Lattner9d2fda62007-02-13 05:53:56 +00003305 yyval.ConstVal = ConstantInt::get(yyvsp[-1].PrimType, yyvsp[0].UInt64Val);
Reid Spencer41dff5e2007-01-26 08:05:27 +00003306 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00003307 ;
3308 break;}
3309case 156:
3310#line 1714 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3311{ // Boolean constants
3312 assert(cast<IntegerType>(yyvsp[-1].PrimType)->getBitWidth() == 1 && "Not Bool?");
3313 yyval.ConstVal = ConstantInt::getTrue();
Reid Spencer41dff5e2007-01-26 08:05:27 +00003314 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00003315 ;
3316 break;}
3317case 157:
3318#line 1719 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3319{ // Boolean constants
3320 assert(cast<IntegerType>(yyvsp[-1].PrimType)->getBitWidth() == 1 && "Not Bool?");
3321 yyval.ConstVal = ConstantInt::getFalse();
Reid Spencer41dff5e2007-01-26 08:05:27 +00003322 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00003323 ;
3324 break;}
3325case 158:
3326#line 1724 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3327{ // Float & Double constants
3328 if (!ConstantFP::isValueValidForType(yyvsp[-1].PrimType, yyvsp[0].FPVal))
Reid Spencerb5334b02007-02-05 10:18:06 +00003329 GEN_ERROR("Floating point constant invalid for type");
Chris Lattner9d2fda62007-02-13 05:53:56 +00003330 yyval.ConstVal = ConstantFP::get(yyvsp[-1].PrimType, yyvsp[0].FPVal);
Reid Spencer6f407902007-01-13 05:00:46 +00003331 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00003332 ;
3333 break;}
3334case 159:
3335#line 1732 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3336{
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003337 if (!UpRefs.empty())
Chris Lattner9d2fda62007-02-13 05:53:56 +00003338 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
3339 Constant *Val = yyvsp[-3].ConstVal;
3340 const Type *DestTy = yyvsp[-1].TypeVal->get();
3341 if (!CastInst::castIsValid(yyvsp[-5].CastOpVal, yyvsp[-3].ConstVal, DestTy))
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003342 GEN_ERROR("invalid cast opcode for cast from '" +
3343 Val->getType()->getDescription() + "' to '" +
Reid Spencerb5334b02007-02-05 10:18:06 +00003344 DestTy->getDescription() + "'");
Chris Lattner9d2fda62007-02-13 05:53:56 +00003345 yyval.ConstVal = ConstantExpr::getCast(yyvsp[-5].CastOpVal, yyvsp[-3].ConstVal, DestTy);
3346 delete yyvsp[-1].TypeVal;
3347 ;
3348 break;}
3349case 160:
3350#line 1744 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3351{
3352 if (!isa<PointerType>(yyvsp[-2].ConstVal->getType()))
Reid Spencerb5334b02007-02-05 10:18:06 +00003353 GEN_ERROR("GetElementPtr requires a pointer operand");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003354
3355 const Type *IdxTy =
Chris Lattner9d2fda62007-02-13 05:53:56 +00003356 GetElementPtrInst::getIndexedType(yyvsp[-2].ConstVal->getType(), &(*yyvsp[-1].ValueList)[0], yyvsp[-1].ValueList->size(),
Chris Lattner7d9801d2007-02-13 00:58:01 +00003357 true);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003358 if (!IdxTy)
Reid Spencerb5334b02007-02-05 10:18:06 +00003359 GEN_ERROR("Index list invalid for constant getelementptr");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003360
Chris Lattnerf7469af2007-01-31 04:44:08 +00003361 SmallVector<Constant*, 8> IdxVec;
Chris Lattner9d2fda62007-02-13 05:53:56 +00003362 for (unsigned i = 0, e = yyvsp[-1].ValueList->size(); i != e; ++i)
3363 if (Constant *C = dyn_cast<Constant>((*yyvsp[-1].ValueList)[i]))
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003364 IdxVec.push_back(C);
3365 else
Reid Spencerb5334b02007-02-05 10:18:06 +00003366 GEN_ERROR("Indices to constant getelementptr must be constants");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003367
Chris Lattner9d2fda62007-02-13 05:53:56 +00003368 delete yyvsp[-1].ValueList;
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003369
Chris Lattner9d2fda62007-02-13 05:53:56 +00003370 yyval.ConstVal = ConstantExpr::getGetElementPtr(yyvsp[-2].ConstVal, &IdxVec[0], IdxVec.size());
Andrew Lenharth6353e052006-12-08 18:07:09 +00003371 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00003372 ;
3373 break;}
3374case 161:
3375#line 1766 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3376{
3377 if (yyvsp[-5].ConstVal->getType() != Type::Int1Ty)
Reid Spencerb5334b02007-02-05 10:18:06 +00003378 GEN_ERROR("Select condition must be of boolean type");
Chris Lattner9d2fda62007-02-13 05:53:56 +00003379 if (yyvsp[-3].ConstVal->getType() != yyvsp[-1].ConstVal->getType())
Reid Spencerb5334b02007-02-05 10:18:06 +00003380 GEN_ERROR("Select operand types must match");
Chris Lattner9d2fda62007-02-13 05:53:56 +00003381 yyval.ConstVal = ConstantExpr::getSelect(yyvsp[-5].ConstVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003382 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00003383 ;
3384 break;}
3385case 162:
3386#line 1774 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3387{
3388 if (yyvsp[-3].ConstVal->getType() != yyvsp[-1].ConstVal->getType())
Reid Spencerb5334b02007-02-05 10:18:06 +00003389 GEN_ERROR("Binary operator types must match");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003390 CHECK_FOR_ERROR;
Chris Lattner9d2fda62007-02-13 05:53:56 +00003391 yyval.ConstVal = ConstantExpr::get(yyvsp[-5].BinaryOpVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
3392 ;
3393 break;}
3394case 163:
3395#line 1780 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3396{
3397 if (yyvsp[-3].ConstVal->getType() != yyvsp[-1].ConstVal->getType())
Reid Spencerb5334b02007-02-05 10:18:06 +00003398 GEN_ERROR("Logical operator types must match");
Chris Lattner9d2fda62007-02-13 05:53:56 +00003399 if (!yyvsp[-3].ConstVal->getType()->isInteger()) {
3400 if (Instruction::isShift(yyvsp[-5].BinaryOpVal) || !isa<PackedType>(yyvsp[-3].ConstVal->getType()) ||
3401 !cast<PackedType>(yyvsp[-3].ConstVal->getType())->getElementType()->isInteger())
Reid Spencerb5334b02007-02-05 10:18:06 +00003402 GEN_ERROR("Logical operator requires integral operands");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003403 }
Chris Lattner9d2fda62007-02-13 05:53:56 +00003404 yyval.ConstVal = ConstantExpr::get(yyvsp[-5].BinaryOpVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
Reid Spencer41dff5e2007-01-26 08:05:27 +00003405 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00003406 ;
3407 break;}
3408case 164:
3409#line 1791 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3410{
3411 if (yyvsp[-3].ConstVal->getType() != yyvsp[-1].ConstVal->getType())
Reid Spencerb5334b02007-02-05 10:18:06 +00003412 GEN_ERROR("icmp operand types must match");
Chris Lattner9d2fda62007-02-13 05:53:56 +00003413 yyval.ConstVal = ConstantExpr::getICmp(yyvsp[-5].IPredicate, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
3414 ;
3415 break;}
3416case 165:
3417#line 1796 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3418{
3419 if (yyvsp[-3].ConstVal->getType() != yyvsp[-1].ConstVal->getType())
Reid Spencerb5334b02007-02-05 10:18:06 +00003420 GEN_ERROR("fcmp operand types must match");
Chris Lattner9d2fda62007-02-13 05:53:56 +00003421 yyval.ConstVal = ConstantExpr::getFCmp(yyvsp[-5].FPredicate, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
3422 ;
3423 break;}
3424case 166:
3425#line 1801 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3426{
3427 if (!ExtractElementInst::isValidOperands(yyvsp[-3].ConstVal, yyvsp[-1].ConstVal))
Reid Spencerb5334b02007-02-05 10:18:06 +00003428 GEN_ERROR("Invalid extractelement operands");
Chris Lattner9d2fda62007-02-13 05:53:56 +00003429 yyval.ConstVal = ConstantExpr::getExtractElement(yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
Reid Spencer41dff5e2007-01-26 08:05:27 +00003430 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00003431 ;
3432 break;}
3433case 167:
3434#line 1807 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3435{
3436 if (!InsertElementInst::isValidOperands(yyvsp[-5].ConstVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal))
Reid Spencerb5334b02007-02-05 10:18:06 +00003437 GEN_ERROR("Invalid insertelement operands");
Chris Lattner9d2fda62007-02-13 05:53:56 +00003438 yyval.ConstVal = ConstantExpr::getInsertElement(yyvsp[-5].ConstVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
Reid Spencer41dff5e2007-01-26 08:05:27 +00003439 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00003440 ;
3441 break;}
3442case 168:
3443#line 1813 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3444{
3445 if (!ShuffleVectorInst::isValidOperands(yyvsp[-5].ConstVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal))
Reid Spencerb5334b02007-02-05 10:18:06 +00003446 GEN_ERROR("Invalid shufflevector operands");
Chris Lattner9d2fda62007-02-13 05:53:56 +00003447 yyval.ConstVal = ConstantExpr::getShuffleVector(yyvsp[-5].ConstVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
Reid Spencer41dff5e2007-01-26 08:05:27 +00003448 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00003449 ;
3450 break;}
3451case 169:
3452#line 1822 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3453{
3454 (yyval.ConstVector = yyvsp[-2].ConstVector)->push_back(yyvsp[0].ConstVal);
Reid Spencer41dff5e2007-01-26 08:05:27 +00003455 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00003456 ;
3457 break;}
3458case 170:
3459#line 1826 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3460{
3461 yyval.ConstVector = new std::vector<Constant*>();
3462 yyval.ConstVector->push_back(yyvsp[0].ConstVal);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003463 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00003464 ;
3465 break;}
3466case 171:
3467#line 1834 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3468{ yyval.BoolVal = false; ;
3469 break;}
3470case 172:
3471#line 1834 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3472{ yyval.BoolVal = true; ;
3473 break;}
3474case 173:
3475#line 1845 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3476{
3477 yyval.ModuleVal = ParserResult = CurModule.CurrentModule;
Reid Spencer41dff5e2007-01-26 08:05:27 +00003478 CurModule.ModuleDone();
3479 CHECK_FOR_ERROR;
Chris Lattner9d2fda62007-02-13 05:53:56 +00003480 ;
3481 break;}
3482case 174:
3483#line 1850 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3484{
3485 yyval.ModuleVal = ParserResult = CurModule.CurrentModule;
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003486 CurModule.ModuleDone();
3487 CHECK_FOR_ERROR;
Chris Lattner9d2fda62007-02-13 05:53:56 +00003488 ;
3489 break;}
3490case 177:
3491#line 1863 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3492{ CurFun.isDeclare = false; ;
3493 break;}
3494case 178:
3495#line 1863 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3496{
Reid Spencer41dff5e2007-01-26 08:05:27 +00003497 CurFun.FunctionDone();
3498 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00003499 ;
3500 break;}
3501case 179:
3502#line 1867 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3503{ CurFun.isDeclare = true; ;
3504 break;}
3505case 180:
3506#line 1867 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3507{
Reid Spencer41dff5e2007-01-26 08:05:27 +00003508 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00003509 ;
3510 break;}
3511case 181:
3512#line 1870 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3513{
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003514 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00003515 ;
3516 break;}
3517case 182:
3518#line 1873 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3519{
Reid Spencer68a24bd2005-08-27 18:50:39 +00003520 // Emit an error if there are any unresolved types left.
3521 if (!CurModule.LateResolveTypes.empty()) {
3522 const ValID &DID = CurModule.LateResolveTypes.begin()->first;
Reid Spencer41dff5e2007-01-26 08:05:27 +00003523 if (DID.Type == ValID::LocalName) {
Reid Spencer61c83e02006-08-18 08:43:06 +00003524 GEN_ERROR("Reference to an undefined type: '"+DID.getName() + "'");
3525 } else {
3526 GEN_ERROR("Reference to an undefined type: #" + itostr(DID.Num));
3527 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00003528 }
Reid Spencer61c83e02006-08-18 08:43:06 +00003529 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00003530 ;
3531 break;}
3532case 183:
3533#line 1885 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3534{
Reid Spencer14310612006-12-31 05:40:51 +00003535 if (!UpRefs.empty())
Chris Lattner9d2fda62007-02-13 05:53:56 +00003536 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[0].TypeVal)->getDescription());
Reid Spencer68a24bd2005-08-27 18:50:39 +00003537 // Eagerly resolve types. This is not an optimization, this is a
3538 // requirement that is due to the fact that we could have this:
3539 //
3540 // %list = type { %list * }
3541 // %list = type { %list * } ; repeated type decl
3542 //
3543 // If types are not resolved eagerly, then the two types will not be
3544 // determined to be the same type!
3545 //
Chris Lattner9d2fda62007-02-13 05:53:56 +00003546 ResolveTypeTo(yyvsp[-2].StrVal, *yyvsp[0].TypeVal);
Reid Spencer68a24bd2005-08-27 18:50:39 +00003547
Chris Lattner9d2fda62007-02-13 05:53:56 +00003548 if (!setTypeName(*yyvsp[0].TypeVal, yyvsp[-2].StrVal) && !yyvsp[-2].StrVal) {
Reid Spencer5b7e7532006-09-28 19:28:24 +00003549 CHECK_FOR_ERROR
Reid Spencer68a24bd2005-08-27 18:50:39 +00003550 // If this is a named type that is not a redefinition, add it to the slot
3551 // table.
Chris Lattner9d2fda62007-02-13 05:53:56 +00003552 CurModule.Types.push_back(*yyvsp[0].TypeVal);
Reid Spencer68a24bd2005-08-27 18:50:39 +00003553 }
Reid Spencera132e042006-12-03 05:46:11 +00003554
Chris Lattner9d2fda62007-02-13 05:53:56 +00003555 delete yyvsp[0].TypeVal;
Reid Spencere4d87aa2006-12-23 06:05:41 +00003556 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00003557 ;
3558 break;}
3559case 184:
3560#line 1909 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3561{
3562 ResolveTypeTo(yyvsp[-2].StrVal, yyvsp[0].PrimType);
Reid Spencerb0fcf8f2007-01-17 02:48:45 +00003563
Chris Lattner9d2fda62007-02-13 05:53:56 +00003564 if (!setTypeName(yyvsp[0].PrimType, yyvsp[-2].StrVal) && !yyvsp[-2].StrVal) {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003565 CHECK_FOR_ERROR
3566 // If this is a named type that is not a redefinition, add it to the slot
3567 // table.
Chris Lattner9d2fda62007-02-13 05:53:56 +00003568 CurModule.Types.push_back(yyvsp[0].PrimType);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003569 }
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003570 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00003571 ;
3572 break;}
3573case 185:
3574#line 1920 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3575{
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003576 /* "Externally Visible" Linkage */
Chris Lattner9d2fda62007-02-13 05:53:56 +00003577 if (yyvsp[0].ConstVal == 0)
Reid Spencerb5334b02007-02-05 10:18:06 +00003578 GEN_ERROR("Global value initializer is not a constant");
Chris Lattner9d2fda62007-02-13 05:53:56 +00003579 CurGV = ParseGlobalVariable(yyvsp[-3].StrVal, GlobalValue::ExternalLinkage,
3580 yyvsp[-2].Visibility, yyvsp[-1].BoolVal, yyvsp[0].ConstVal->getType(), yyvsp[0].ConstVal);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003581 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00003582 ;
3583 break;}
3584case 186:
3585#line 1927 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3586{
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003587 CurGV = 0;
Chris Lattner9d2fda62007-02-13 05:53:56 +00003588 ;
3589 break;}
3590case 187:
3591#line 1930 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3592{
3593 if (yyvsp[0].ConstVal == 0)
Reid Spencerb5334b02007-02-05 10:18:06 +00003594 GEN_ERROR("Global value initializer is not a constant");
Chris Lattner9d2fda62007-02-13 05:53:56 +00003595 CurGV = ParseGlobalVariable(yyvsp[-4].StrVal, yyvsp[-3].Linkage, yyvsp[-2].Visibility, yyvsp[-1].BoolVal, yyvsp[0].ConstVal->getType(), yyvsp[0].ConstVal);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003596 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00003597 ;
3598 break;}
3599case 188:
3600#line 1935 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3601{
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003602 CurGV = 0;
Chris Lattner9d2fda62007-02-13 05:53:56 +00003603 ;
3604 break;}
3605case 189:
3606#line 1938 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3607{
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003608 if (!UpRefs.empty())
Chris Lattner9d2fda62007-02-13 05:53:56 +00003609 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[0].TypeVal)->getDescription());
3610 CurGV = ParseGlobalVariable(yyvsp[-4].StrVal, yyvsp[-3].Linkage, yyvsp[-2].Visibility, yyvsp[-1].BoolVal, *yyvsp[0].TypeVal, 0);
Reid Spencer41dff5e2007-01-26 08:05:27 +00003611 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00003612 delete yyvsp[0].TypeVal;
3613 ;
3614 break;}
3615case 190:
3616#line 1944 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3617{
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003618 CurGV = 0;
Reid Spencer41dff5e2007-01-26 08:05:27 +00003619 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00003620 ;
3621 break;}
3622case 191:
3623#line 1948 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3624{
Reid Spencer41dff5e2007-01-26 08:05:27 +00003625 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00003626 ;
3627 break;}
3628case 192:
3629#line 1951 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3630{
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003631 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00003632 ;
3633 break;}
3634case 193:
3635#line 1957 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3636{
Chris Lattner66316012006-01-24 04:14:29 +00003637 const std::string &AsmSoFar = CurModule.CurrentModule->getModuleInlineAsm();
Chris Lattner9d2fda62007-02-13 05:53:56 +00003638 char *EndStr = UnEscapeLexed(yyvsp[0].StrVal, true);
3639 std::string NewAsm(yyvsp[0].StrVal, EndStr);
3640 free(yyvsp[0].StrVal);
Chris Lattner66316012006-01-24 04:14:29 +00003641
3642 if (AsmSoFar.empty())
3643 CurModule.CurrentModule->setModuleInlineAsm(NewAsm);
3644 else
3645 CurModule.CurrentModule->setModuleInlineAsm(AsmSoFar+"\n"+NewAsm);
Reid Spencer61c83e02006-08-18 08:43:06 +00003646 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00003647;
3648 break;}
3649case 194:
3650#line 1970 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3651{
3652 CurModule.CurrentModule->setTargetTriple(yyvsp[0].StrVal);
3653 free(yyvsp[0].StrVal);
3654 ;
3655 break;}
3656case 195:
3657#line 1974 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3658{
3659 CurModule.CurrentModule->setDataLayout(yyvsp[0].StrVal);
3660 free(yyvsp[0].StrVal);
3661 ;
3662 break;}
3663case 197:
3664#line 1981 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3665{
3666 CurModule.CurrentModule->addLibrary(yyvsp[0].StrVal);
3667 free(yyvsp[0].StrVal);
Reid Spencer41dff5e2007-01-26 08:05:27 +00003668 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00003669 ;
3670 break;}
3671case 198:
3672#line 1986 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3673{
3674 CurModule.CurrentModule->addLibrary(yyvsp[0].StrVal);
3675 free(yyvsp[0].StrVal);
Reid Spencera54b7cb2007-01-12 07:05:14 +00003676 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00003677 ;
3678 break;}
3679case 199:
3680#line 1991 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3681{
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003682 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00003683 ;
3684 break;}
3685case 200:
3686#line 2000 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3687{
Reid Spencer41dff5e2007-01-26 08:05:27 +00003688 if (!UpRefs.empty())
Chris Lattner9d2fda62007-02-13 05:53:56 +00003689 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription());
3690 if (*yyvsp[-2].TypeVal == Type::VoidTy)
Reid Spencerb5334b02007-02-05 10:18:06 +00003691 GEN_ERROR("void typed arguments are invalid");
Chris Lattner9d2fda62007-02-13 05:53:56 +00003692 ArgListEntry E; E.Attrs = yyvsp[-1].ParamAttrs; E.Ty = yyvsp[-2].TypeVal; E.Name = yyvsp[0].StrVal;
3693 yyval.ArgList = yyvsp[-4].ArgList;
3694 yyvsp[-4].ArgList->push_back(E);
Reid Spencer41dff5e2007-01-26 08:05:27 +00003695 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00003696 ;
3697 break;}
3698case 201:
3699#line 2010 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3700{
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003701 if (!UpRefs.empty())
Chris Lattner9d2fda62007-02-13 05:53:56 +00003702 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription());
3703 if (*yyvsp[-2].TypeVal == Type::VoidTy)
Reid Spencerb5334b02007-02-05 10:18:06 +00003704 GEN_ERROR("void typed arguments are invalid");
Chris Lattner9d2fda62007-02-13 05:53:56 +00003705 ArgListEntry E; E.Attrs = yyvsp[-1].ParamAttrs; E.Ty = yyvsp[-2].TypeVal; E.Name = yyvsp[0].StrVal;
3706 yyval.ArgList = new ArgListType;
3707 yyval.ArgList->push_back(E);
Reid Spencer61c83e02006-08-18 08:43:06 +00003708 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00003709 ;
3710 break;}
3711case 202:
3712#line 2021 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3713{
3714 yyval.ArgList = yyvsp[0].ArgList;
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003715 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00003716 ;
3717 break;}
3718case 203:
3719#line 2025 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3720{
3721 yyval.ArgList = yyvsp[-2].ArgList;
Reid Spencer41dff5e2007-01-26 08:05:27 +00003722 struct ArgListEntry E;
3723 E.Ty = new PATypeHolder(Type::VoidTy);
3724 E.Name = 0;
3725 E.Attrs = FunctionType::NoAttributeSet;
Chris Lattner9d2fda62007-02-13 05:53:56 +00003726 yyval.ArgList->push_back(E);
Reid Spencer6f407902007-01-13 05:00:46 +00003727 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00003728 ;
3729 break;}
3730case 204:
3731#line 2034 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3732{
3733 yyval.ArgList = new ArgListType;
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003734 struct ArgListEntry E;
3735 E.Ty = new PATypeHolder(Type::VoidTy);
3736 E.Name = 0;
3737 E.Attrs = FunctionType::NoAttributeSet;
Chris Lattner9d2fda62007-02-13 05:53:56 +00003738 yyval.ArgList->push_back(E);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003739 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00003740 ;
3741 break;}
3742case 205:
3743#line 2043 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3744{
3745 yyval.ArgList = 0;
Reid Spencer61c83e02006-08-18 08:43:06 +00003746 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00003747 ;
3748 break;}
3749case 206:
3750#line 2049 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3751{
3752 UnEscapeLexed(yyvsp[-6].StrVal);
3753 std::string FunctionName(yyvsp[-6].StrVal);
3754 free(yyvsp[-6].StrVal); // Free strdup'd memory!
Reid Spencer68a24bd2005-08-27 18:50:39 +00003755
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003756 // Check the function result for abstractness if this is a define. We should
3757 // have no abstract types at this point
Chris Lattner9d2fda62007-02-13 05:53:56 +00003758 if (!CurFun.isDeclare && CurModule.TypeIsUnresolved(yyvsp[-7].TypeVal))
3759 GEN_ERROR("Reference to abstract result: "+ yyvsp[-7].TypeVal->get()->getDescription());
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003760
Reid Spencer68a24bd2005-08-27 18:50:39 +00003761 std::vector<const Type*> ParamTypeList;
Reid Spencer14310612006-12-31 05:40:51 +00003762 std::vector<FunctionType::ParameterAttributes> ParamAttrs;
Chris Lattner9d2fda62007-02-13 05:53:56 +00003763 ParamAttrs.push_back(yyvsp[-2].ParamAttrs);
3764 if (yyvsp[-4].ArgList) { // If there are arguments...
3765 for (ArgListType::iterator I = yyvsp[-4].ArgList->begin(); I != yyvsp[-4].ArgList->end(); ++I) {
Reid Spencer14310612006-12-31 05:40:51 +00003766 const Type* Ty = I->Ty->get();
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003767 if (!CurFun.isDeclare && CurModule.TypeIsUnresolved(I->Ty))
3768 GEN_ERROR("Reference to abstract argument: " + Ty->getDescription());
Reid Spencer14310612006-12-31 05:40:51 +00003769 ParamTypeList.push_back(Ty);
3770 if (Ty != Type::VoidTy)
3771 ParamAttrs.push_back(I->Attrs);
3772 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00003773 }
3774
3775 bool isVarArg = ParamTypeList.size() && ParamTypeList.back() == Type::VoidTy;
3776 if (isVarArg) ParamTypeList.pop_back();
3777
Chris Lattner9d2fda62007-02-13 05:53:56 +00003778 FunctionType *FT = FunctionType::get(*yyvsp[-7].TypeVal, ParamTypeList, isVarArg,
Reid Spencer14310612006-12-31 05:40:51 +00003779 ParamAttrs);
Reid Spencer68a24bd2005-08-27 18:50:39 +00003780 const PointerType *PFT = PointerType::get(FT);
Chris Lattner9d2fda62007-02-13 05:53:56 +00003781 delete yyvsp[-7].TypeVal;
Reid Spencer68a24bd2005-08-27 18:50:39 +00003782
3783 ValID ID;
3784 if (!FunctionName.empty()) {
Reid Spencer41dff5e2007-01-26 08:05:27 +00003785 ID = ValID::createGlobalName((char*)FunctionName.c_str());
Reid Spencer68a24bd2005-08-27 18:50:39 +00003786 } else {
Reid Spencer41dff5e2007-01-26 08:05:27 +00003787 ID = ValID::createGlobalID(CurModule.Values[PFT].size());
Reid Spencer68a24bd2005-08-27 18:50:39 +00003788 }
3789
3790 Function *Fn = 0;
3791 // See if this function was forward referenced. If so, recycle the object.
3792 if (GlobalValue *FWRef = CurModule.GetForwardRefForGlobal(PFT, ID)) {
3793 // Move the function to the end of the list, from whereever it was
3794 // previously inserted.
3795 Fn = cast<Function>(FWRef);
3796 CurModule.CurrentModule->getFunctionList().remove(Fn);
3797 CurModule.CurrentModule->getFunctionList().push_back(Fn);
3798 } else if (!FunctionName.empty() && // Merge with an earlier prototype?
Reid Spenceref9b9a72007-02-05 20:47:22 +00003799 (Fn = CurModule.CurrentModule->getFunction(FunctionName))) {
3800 if (Fn->getFunctionType() != FT ) {
3801 // The existing function doesn't have the same type. This is an overload
3802 // error.
3803 GEN_ERROR("Overload of function '" + FunctionName + "' not permitted.");
3804 } else if (!CurFun.isDeclare && !Fn->isDeclaration()) {
3805 // Neither the existing or the current function is a declaration and they
3806 // have the same name and same type. Clearly this is a redefinition.
Reid Spencerb5334b02007-02-05 10:18:06 +00003807 GEN_ERROR("Redefinition of function '" + FunctionName + "'");
Reid Spenceref9b9a72007-02-05 20:47:22 +00003808 } if (Fn->isDeclaration()) {
3809 // Make sure to strip off any argument names so we can't get conflicts.
Reid Spencer68a24bd2005-08-27 18:50:39 +00003810 for (Function::arg_iterator AI = Fn->arg_begin(), AE = Fn->arg_end();
3811 AI != AE; ++AI)
3812 AI->setName("");
Reid Spenceref9b9a72007-02-05 20:47:22 +00003813 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00003814 } else { // Not already defined?
3815 Fn = new Function(FT, GlobalValue::ExternalLinkage, FunctionName,
3816 CurModule.CurrentModule);
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +00003817
Reid Spencer68a24bd2005-08-27 18:50:39 +00003818 InsertValue(Fn, CurModule.Values);
3819 }
3820
3821 CurFun.FunctionStart(Fn);
Anton Korobeynikov93c2b372006-09-17 13:06:18 +00003822
3823 if (CurFun.isDeclare) {
3824 // If we have declaration, always overwrite linkage. This will allow us to
3825 // correctly handle cases, when pointer to function is passed as argument to
3826 // another function.
3827 Fn->setLinkage(CurFun.Linkage);
Anton Korobeynikov178a3522007-01-12 19:22:51 +00003828 Fn->setVisibility(CurFun.Visibility);
Anton Korobeynikov93c2b372006-09-17 13:06:18 +00003829 }
Chris Lattner9d2fda62007-02-13 05:53:56 +00003830 Fn->setCallingConv(yyvsp[-8].UIntVal);
3831 Fn->setAlignment(yyvsp[0].UIntVal);
3832 if (yyvsp[-1].StrVal) {
3833 Fn->setSection(yyvsp[-1].StrVal);
3834 free(yyvsp[-1].StrVal);
Chris Lattnere869eef2005-11-12 00:11:49 +00003835 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00003836
3837 // Add all of the arguments we parsed to the function...
Chris Lattner9d2fda62007-02-13 05:53:56 +00003838 if (yyvsp[-4].ArgList) { // Is null if empty...
Reid Spencer68a24bd2005-08-27 18:50:39 +00003839 if (isVarArg) { // Nuke the last entry
Chris Lattner9d2fda62007-02-13 05:53:56 +00003840 assert(yyvsp[-4].ArgList->back().Ty->get() == Type::VoidTy && yyvsp[-4].ArgList->back().Name == 0 &&
Reid Spencera9720f52007-02-05 17:04:00 +00003841 "Not a varargs marker!");
Chris Lattner9d2fda62007-02-13 05:53:56 +00003842 delete yyvsp[-4].ArgList->back().Ty;
3843 yyvsp[-4].ArgList->pop_back(); // Delete the last entry
Reid Spencer68a24bd2005-08-27 18:50:39 +00003844 }
3845 Function::arg_iterator ArgIt = Fn->arg_begin();
Reid Spenceref9b9a72007-02-05 20:47:22 +00003846 Function::arg_iterator ArgEnd = Fn->arg_end();
Reid Spencer14310612006-12-31 05:40:51 +00003847 unsigned Idx = 1;
Chris Lattner9d2fda62007-02-13 05:53:56 +00003848 for (ArgListType::iterator I = yyvsp[-4].ArgList->begin();
3849 I != yyvsp[-4].ArgList->end() && ArgIt != ArgEnd; ++I, ++ArgIt) {
Reid Spencer14310612006-12-31 05:40:51 +00003850 delete I->Ty; // Delete the typeholder...
Reid Spenceref9b9a72007-02-05 20:47:22 +00003851 setValueName(ArgIt, I->Name); // Insert arg into symtab...
Reid Spencer5b7e7532006-09-28 19:28:24 +00003852 CHECK_FOR_ERROR
Reid Spencer68a24bd2005-08-27 18:50:39 +00003853 InsertValue(ArgIt);
Reid Spencer14310612006-12-31 05:40:51 +00003854 Idx++;
Reid Spencer68a24bd2005-08-27 18:50:39 +00003855 }
Reid Spencera132e042006-12-03 05:46:11 +00003856
Chris Lattner9d2fda62007-02-13 05:53:56 +00003857 delete yyvsp[-4].ArgList; // We're now done with the argument list
Reid Spencer68a24bd2005-08-27 18:50:39 +00003858 }
Reid Spencer61c83e02006-08-18 08:43:06 +00003859 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00003860;
3861 break;}
3862case 209:
3863#line 2162 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3864{
3865 yyval.FunctionVal = CurFun.CurrentFunction;
Reid Spencer68a24bd2005-08-27 18:50:39 +00003866
3867 // Make sure that we keep track of the linkage type even if there was a
3868 // previous "declare".
Chris Lattner9d2fda62007-02-13 05:53:56 +00003869 yyval.FunctionVal->setLinkage(yyvsp[-3].Linkage);
3870 yyval.FunctionVal->setVisibility(yyvsp[-2].Visibility);
3871;
3872 break;}
3873case 212:
3874#line 2173 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3875{
3876 yyval.FunctionVal = yyvsp[-1].FunctionVal;
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003877 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00003878;
3879 break;}
3880case 213:
3881#line 2178 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3882{
3883 CurFun.CurrentFunction->setLinkage(yyvsp[-2].Linkage);
3884 CurFun.CurrentFunction->setVisibility(yyvsp[-1].Visibility);
3885 yyval.FunctionVal = CurFun.CurrentFunction;
Reid Spencer41dff5e2007-01-26 08:05:27 +00003886 CurFun.FunctionDone();
3887 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00003888 ;
3889 break;}
3890case 214:
3891#line 2190 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3892{
3893 yyval.BoolVal = false;
Reid Spencer41dff5e2007-01-26 08:05:27 +00003894 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00003895 ;
3896 break;}
3897case 215:
3898#line 2194 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3899{
3900 yyval.BoolVal = true;
Reid Spencer61c83e02006-08-18 08:43:06 +00003901 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00003902 ;
3903 break;}
3904case 216:
3905#line 2199 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3906{ // A reference to a direct constant
3907 yyval.ValIDVal = ValID::create(yyvsp[0].SInt64Val);
Reid Spencere4d87aa2006-12-23 06:05:41 +00003908 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00003909 ;
3910 break;}
3911case 217:
3912#line 2203 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3913{
3914 yyval.ValIDVal = ValID::create(yyvsp[0].UInt64Val);
Reid Spencer6f407902007-01-13 05:00:46 +00003915 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00003916 ;
3917 break;}
3918case 218:
3919#line 2207 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3920{ // Perhaps it's an FP constant?
3921 yyval.ValIDVal = ValID::create(yyvsp[0].FPVal);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003922 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00003923 ;
3924 break;}
3925case 219:
3926#line 2211 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3927{
3928 yyval.ValIDVal = ValID::create(ConstantInt::getTrue());
Reid Spencere4d87aa2006-12-23 06:05:41 +00003929 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00003930 ;
3931 break;}
3932case 220:
3933#line 2215 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3934{
3935 yyval.ValIDVal = ValID::create(ConstantInt::getFalse());
Reid Spencere4d87aa2006-12-23 06:05:41 +00003936 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00003937 ;
3938 break;}
3939case 221:
3940#line 2219 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3941{
3942 yyval.ValIDVal = ValID::createNull();
Zhou Sheng6b6b6ef2007-01-11 12:24:14 +00003943 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00003944 ;
3945 break;}
3946case 222:
3947#line 2223 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3948{
3949 yyval.ValIDVal = ValID::createUndef();
Zhou Sheng6b6b6ef2007-01-11 12:24:14 +00003950 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00003951 ;
3952 break;}
3953case 223:
3954#line 2227 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3955{ // A vector zero constant.
3956 yyval.ValIDVal = ValID::createZeroInit();
Reid Spencer61c83e02006-08-18 08:43:06 +00003957 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00003958 ;
3959 break;}
3960case 224:
3961#line 2231 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3962{ // Nonempty unsized packed vector
3963 const Type *ETy = (*yyvsp[-1].ConstVector)[0]->getType();
3964 int NumElements = yyvsp[-1].ConstVector->size();
Reid Spencer68a24bd2005-08-27 18:50:39 +00003965
3966 PackedType* pt = PackedType::get(ETy, NumElements);
3967 PATypeHolder* PTy = new PATypeHolder(
Reid Spencera132e042006-12-03 05:46:11 +00003968 HandleUpRefs(
3969 PackedType::get(
3970 ETy,
3971 NumElements)
3972 )
3973 );
Reid Spencer68a24bd2005-08-27 18:50:39 +00003974
3975 // Verify all elements are correct type!
Chris Lattner9d2fda62007-02-13 05:53:56 +00003976 for (unsigned i = 0; i < yyvsp[-1].ConstVector->size(); i++) {
3977 if (ETy != (*yyvsp[-1].ConstVector)[i]->getType())
Reid Spencer61c83e02006-08-18 08:43:06 +00003978 GEN_ERROR("Element #" + utostr(i) + " is not of type '" +
Reid Spencer68a24bd2005-08-27 18:50:39 +00003979 ETy->getDescription() +"' as required!\nIt is of type '" +
Chris Lattner9d2fda62007-02-13 05:53:56 +00003980 (*yyvsp[-1].ConstVector)[i]->getType()->getDescription() + "'.");
Reid Spencer68a24bd2005-08-27 18:50:39 +00003981 }
3982
Chris Lattner9d2fda62007-02-13 05:53:56 +00003983 yyval.ValIDVal = ValID::create(ConstantPacked::get(pt, *yyvsp[-1].ConstVector));
3984 delete PTy; delete yyvsp[-1].ConstVector;
Reid Spencer41dff5e2007-01-26 08:05:27 +00003985 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00003986 ;
3987 break;}
3988case 225:
3989#line 2256 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3990{
3991 yyval.ValIDVal = ValID::create(yyvsp[0].ConstVal);
Anton Korobeynikov178a3522007-01-12 19:22:51 +00003992 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00003993 ;
3994 break;}
3995case 226:
3996#line 2260 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3997{
3998 char *End = UnEscapeLexed(yyvsp[-2].StrVal, true);
3999 std::string AsmStr = std::string(yyvsp[-2].StrVal, End);
4000 End = UnEscapeLexed(yyvsp[0].StrVal, true);
4001 std::string Constraints = std::string(yyvsp[0].StrVal, End);
4002 yyval.ValIDVal = ValID::createInlineAsm(AsmStr, Constraints, yyvsp[-3].BoolVal);
4003 free(yyvsp[-2].StrVal);
4004 free(yyvsp[0].StrVal);
Reid Spencer832254e2007-02-02 02:16:23 +00004005 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00004006 ;
4007 break;}
4008case 227:
4009#line 2274 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4010{ // Is it an integer reference...?
4011 yyval.ValIDVal = ValID::createLocalID(yyvsp[0].UIntVal);
Reid Spencer832254e2007-02-02 02:16:23 +00004012 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00004013 ;
4014 break;}
4015case 228:
4016#line 2278 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4017{
4018 yyval.ValIDVal = ValID::createGlobalID(yyvsp[0].UIntVal);
Reid Spencer832254e2007-02-02 02:16:23 +00004019 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00004020 ;
4021 break;}
4022case 229:
4023#line 2282 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4024{ // Is it a named reference...?
4025 yyval.ValIDVal = ValID::createLocalName(yyvsp[0].StrVal);
Reid Spencer832254e2007-02-02 02:16:23 +00004026 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00004027 ;
4028 break;}
4029case 230:
4030#line 2286 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4031{ // Is it a named reference...?
4032 yyval.ValIDVal = ValID::createGlobalName(yyvsp[0].StrVal);
Reid Spencer832254e2007-02-02 02:16:23 +00004033 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00004034 ;
4035 break;}
4036case 233:
4037#line 2298 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4038{
Reid Spencer832254e2007-02-02 02:16:23 +00004039 if (!UpRefs.empty())
Chris Lattner9d2fda62007-02-13 05:53:56 +00004040 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
4041 yyval.ValueVal = getVal(*yyvsp[-1].TypeVal, yyvsp[0].ValIDVal);
4042 delete yyvsp[-1].TypeVal;
Reid Spencer832254e2007-02-02 02:16:23 +00004043 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00004044 ;
4045 break;}
4046case 234:
4047#line 2307 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4048{
4049 yyval.FunctionVal = yyvsp[-1].FunctionVal;
Reid Spencer832254e2007-02-02 02:16:23 +00004050 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00004051 ;
4052 break;}
4053case 235:
4054#line 2311 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4055{ // Do not allow functions with 0 basic blocks
4056 yyval.FunctionVal = yyvsp[-1].FunctionVal;
Reid Spencer832254e2007-02-02 02:16:23 +00004057 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00004058 ;
4059 break;}
4060case 236:
4061#line 2320 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4062{
4063 setValueName(yyvsp[0].TermInstVal, yyvsp[-1].StrVal);
Reid Spencer832254e2007-02-02 02:16:23 +00004064 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00004065 InsertValue(yyvsp[0].TermInstVal);
4066 yyvsp[-2].BasicBlockVal->getInstList().push_back(yyvsp[0].TermInstVal);
4067 InsertValue(yyvsp[-2].BasicBlockVal);
4068 yyval.BasicBlockVal = yyvsp[-2].BasicBlockVal;
Reid Spencer832254e2007-02-02 02:16:23 +00004069 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00004070 ;
4071 break;}
4072case 237:
4073#line 2330 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4074{
4075 if (CastInst *CI1 = dyn_cast<CastInst>(yyvsp[0].InstVal))
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004076 if (CastInst *CI2 = dyn_cast<CastInst>(CI1->getOperand(0)))
4077 if (CI2->getParent() == 0)
Chris Lattner9d2fda62007-02-13 05:53:56 +00004078 yyvsp[-1].BasicBlockVal->getInstList().push_back(CI2);
4079 yyvsp[-1].BasicBlockVal->getInstList().push_back(yyvsp[0].InstVal);
4080 yyval.BasicBlockVal = yyvsp[-1].BasicBlockVal;
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004081 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00004082 ;
4083 break;}
4084case 238:
4085#line 2339 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4086{
4087 yyval.BasicBlockVal = getBBVal(ValID::createLocalID(CurFun.NextBBNum++), true);
Reid Spencere4d87aa2006-12-23 06:05:41 +00004088 CHECK_FOR_ERROR
4089
4090 // Make sure to move the basic block to the correct location in the
4091 // function, instead of leaving it inserted wherever it was first
4092 // referenced.
4093 Function::BasicBlockListType &BBL =
4094 CurFun.CurrentFunction->getBasicBlockList();
Chris Lattner9d2fda62007-02-13 05:53:56 +00004095 BBL.splice(BBL.end(), BBL, yyval.BasicBlockVal);
Reid Spencere4d87aa2006-12-23 06:05:41 +00004096 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00004097 ;
4098 break;}
4099case 239:
4100#line 2351 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4101{
4102 yyval.BasicBlockVal = getBBVal(ValID::createLocalName(yyvsp[0].StrVal), true);
Reid Spencere4d87aa2006-12-23 06:05:41 +00004103 CHECK_FOR_ERROR
4104
4105 // Make sure to move the basic block to the correct location in the
4106 // function, instead of leaving it inserted wherever it was first
4107 // referenced.
4108 Function::BasicBlockListType &BBL =
4109 CurFun.CurrentFunction->getBasicBlockList();
Chris Lattner9d2fda62007-02-13 05:53:56 +00004110 BBL.splice(BBL.end(), BBL, yyval.BasicBlockVal);
Reid Spencer3822ff52006-11-08 06:47:33 +00004111 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00004112 ;
4113 break;}
4114case 240:
4115#line 2364 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4116{ // Return with a result...
4117 yyval.TermInstVal = new ReturnInst(yyvsp[0].ValueVal);
4118 CHECK_FOR_ERROR
4119 ;
4120 break;}
4121case 241:
4122#line 2368 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4123{ // Return with no result...
4124 yyval.TermInstVal = new ReturnInst();
4125 CHECK_FOR_ERROR
4126 ;
4127 break;}
4128case 242:
4129#line 2372 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4130{ // Unconditional Branch...
4131 BasicBlock* tmpBB = getBBVal(yyvsp[0].ValIDVal);
4132 CHECK_FOR_ERROR
4133 yyval.TermInstVal = new BranchInst(tmpBB);
4134 ;
4135 break;}
4136case 243:
4137#line 2377 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4138{
4139 assert(cast<IntegerType>(yyvsp[-7].PrimType)->getBitWidth() == 1 && "Not Bool?");
4140 BasicBlock* tmpBBA = getBBVal(yyvsp[-3].ValIDVal);
4141 CHECK_FOR_ERROR
4142 BasicBlock* tmpBBB = getBBVal(yyvsp[0].ValIDVal);
4143 CHECK_FOR_ERROR
4144 Value* tmpVal = getVal(Type::Int1Ty, yyvsp[-6].ValIDVal);
4145 CHECK_FOR_ERROR
4146 yyval.TermInstVal = new BranchInst(tmpBBA, tmpBBB, tmpVal);
4147 ;
4148 break;}
4149case 244:
4150#line 2387 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4151{
4152 Value* tmpVal = getVal(yyvsp[-7].PrimType, yyvsp[-6].ValIDVal);
4153 CHECK_FOR_ERROR
4154 BasicBlock* tmpBB = getBBVal(yyvsp[-3].ValIDVal);
4155 CHECK_FOR_ERROR
4156 SwitchInst *S = new SwitchInst(tmpVal, tmpBB, yyvsp[-1].JumpTable->size());
4157 yyval.TermInstVal = S;
Reid Spencer3822ff52006-11-08 06:47:33 +00004158
Chris Lattner9d2fda62007-02-13 05:53:56 +00004159 std::vector<std::pair<Constant*,BasicBlock*> >::iterator I = yyvsp[-1].JumpTable->begin(),
4160 E = yyvsp[-1].JumpTable->end();
Reid Spencer68a24bd2005-08-27 18:50:39 +00004161 for (; I != E; ++I) {
4162 if (ConstantInt *CI = dyn_cast<ConstantInt>(I->first))
4163 S->addCase(CI, I->second);
4164 else
Reid Spencerb5334b02007-02-05 10:18:06 +00004165 GEN_ERROR("Switch case is constant, but not a simple integer");
Reid Spencer68a24bd2005-08-27 18:50:39 +00004166 }
Chris Lattner9d2fda62007-02-13 05:53:56 +00004167 delete yyvsp[-1].JumpTable;
Reid Spencer61c83e02006-08-18 08:43:06 +00004168 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00004169 ;
4170 break;}
4171case 245:
4172#line 2406 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4173{
4174 Value* tmpVal = getVal(yyvsp[-6].PrimType, yyvsp[-5].ValIDVal);
Andrew Lenharth6353e052006-12-08 18:07:09 +00004175 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00004176 BasicBlock* tmpBB = getBBVal(yyvsp[-2].ValIDVal);
Andrew Lenharth6353e052006-12-08 18:07:09 +00004177 CHECK_FOR_ERROR
4178 SwitchInst *S = new SwitchInst(tmpVal, tmpBB, 0);
Chris Lattner9d2fda62007-02-13 05:53:56 +00004179 yyval.TermInstVal = S;
Reid Spencer61c83e02006-08-18 08:43:06 +00004180 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00004181 ;
4182 break;}
4183case 246:
4184#line 2416 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4185{
Reid Spencer3822ff52006-11-08 06:47:33 +00004186
Reid Spencer14310612006-12-31 05:40:51 +00004187 // Handle the short syntax
4188 const PointerType *PFTy = 0;
4189 const FunctionType *Ty = 0;
Chris Lattner9d2fda62007-02-13 05:53:56 +00004190 if (!(PFTy = dyn_cast<PointerType>(yyvsp[-11].TypeVal->get())) ||
Reid Spencer68a24bd2005-08-27 18:50:39 +00004191 !(Ty = dyn_cast<FunctionType>(PFTy->getElementType()))) {
4192 // Pull out the types of all of the arguments...
4193 std::vector<const Type*> ParamTypes;
Reid Spencer14310612006-12-31 05:40:51 +00004194 FunctionType::ParamAttrsList ParamAttrs;
Chris Lattner9d2fda62007-02-13 05:53:56 +00004195 ParamAttrs.push_back(yyvsp[-6].ParamAttrs);
4196 for (ValueRefList::iterator I = yyvsp[-8].ValueRefList->begin(), E = yyvsp[-8].ValueRefList->end(); I != E; ++I) {
Reid Spencer14310612006-12-31 05:40:51 +00004197 const Type *Ty = I->Val->getType();
4198 if (Ty == Type::VoidTy)
4199 GEN_ERROR("Short call syntax cannot be used with varargs");
4200 ParamTypes.push_back(Ty);
4201 ParamAttrs.push_back(I->Attrs);
Reid Spencer68a24bd2005-08-27 18:50:39 +00004202 }
4203
Chris Lattner9d2fda62007-02-13 05:53:56 +00004204 Ty = FunctionType::get(yyvsp[-11].TypeVal->get(), ParamTypes, false, ParamAttrs);
Reid Spencer68a24bd2005-08-27 18:50:39 +00004205 PFTy = PointerType::get(Ty);
4206 }
4207
Chris Lattner9d2fda62007-02-13 05:53:56 +00004208 Value *V = getVal(PFTy, yyvsp[-10].ValIDVal); // Get the function we're calling...
Andrew Lenharth6353e052006-12-08 18:07:09 +00004209 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00004210 BasicBlock *Normal = getBBVal(yyvsp[-3].ValIDVal);
Andrew Lenharth6353e052006-12-08 18:07:09 +00004211 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00004212 BasicBlock *Except = getBBVal(yyvsp[0].ValIDVal);
Reid Spencer5b7e7532006-09-28 19:28:24 +00004213 CHECK_FOR_ERROR
Reid Spencer68a24bd2005-08-27 18:50:39 +00004214
Reid Spencer14310612006-12-31 05:40:51 +00004215 // Check the arguments
4216 ValueList Args;
Chris Lattner9d2fda62007-02-13 05:53:56 +00004217 if (yyvsp[-8].ValueRefList->empty()) { // Has no arguments?
Reid Spencer14310612006-12-31 05:40:51 +00004218 // Make sure no arguments is a good thing!
4219 if (Ty->getNumParams() != 0)
4220 GEN_ERROR("No arguments passed to a function that "
Reid Spencerb5334b02007-02-05 10:18:06 +00004221 "expects arguments");
Reid Spencer68a24bd2005-08-27 18:50:39 +00004222 } else { // Has arguments?
4223 // Loop through FunctionType's arguments and ensure they are specified
4224 // correctly!
Reid Spencer68a24bd2005-08-27 18:50:39 +00004225 FunctionType::param_iterator I = Ty->param_begin();
4226 FunctionType::param_iterator E = Ty->param_end();
Chris Lattner9d2fda62007-02-13 05:53:56 +00004227 ValueRefList::iterator ArgI = yyvsp[-8].ValueRefList->begin(), ArgE = yyvsp[-8].ValueRefList->end();
Reid Spencer68a24bd2005-08-27 18:50:39 +00004228
Reid Spencer14310612006-12-31 05:40:51 +00004229 for (; ArgI != ArgE && I != E; ++ArgI, ++I) {
4230 if (ArgI->Val->getType() != *I)
4231 GEN_ERROR("Parameter " + ArgI->Val->getName()+ " is not of type '" +
Reid Spencerb5334b02007-02-05 10:18:06 +00004232 (*I)->getDescription() + "'");
Reid Spencer14310612006-12-31 05:40:51 +00004233 Args.push_back(ArgI->Val);
4234 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00004235
Reid Spencer14310612006-12-31 05:40:51 +00004236 if (Ty->isVarArg()) {
4237 if (I == E)
4238 for (; ArgI != ArgE; ++ArgI)
4239 Args.push_back(ArgI->Val); // push the remaining varargs
4240 } else if (I != E || ArgI != ArgE)
Reid Spencerb5334b02007-02-05 10:18:06 +00004241 GEN_ERROR("Invalid number of parameters detected");
Reid Spencer68a24bd2005-08-27 18:50:39 +00004242 }
Reid Spencer14310612006-12-31 05:40:51 +00004243
4244 // Create the InvokeInst
Chris Lattner9d2fda62007-02-13 05:53:56 +00004245 InvokeInst *II = new InvokeInst(V, Normal, Except, &Args[0], Args.size());
4246 II->setCallingConv(yyvsp[-12].UIntVal);
4247 yyval.TermInstVal = II;
4248 delete yyvsp[-8].ValueRefList;
Andrew Lenharth6353e052006-12-08 18:07:09 +00004249 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00004250 ;
4251 break;}
4252case 247:
4253#line 2482 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4254{
4255 yyval.TermInstVal = new UnwindInst();
Andrew Lenharth6353e052006-12-08 18:07:09 +00004256 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00004257 ;
4258 break;}
4259case 248:
4260#line 2486 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4261{
4262 yyval.TermInstVal = new UnreachableInst();
Andrew Lenharth6353e052006-12-08 18:07:09 +00004263 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00004264 ;
4265 break;}
4266case 249:
4267#line 2493 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4268{
4269 yyval.JumpTable = yyvsp[-5].JumpTable;
4270 Constant *V = cast<Constant>(getValNonImprovising(yyvsp[-4].PrimType, yyvsp[-3].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00004271 CHECK_FOR_ERROR
4272 if (V == 0)
Reid Spencerb5334b02007-02-05 10:18:06 +00004273 GEN_ERROR("May only switch on a constant pool value");
Andrew Lenharth6353e052006-12-08 18:07:09 +00004274
Chris Lattner9d2fda62007-02-13 05:53:56 +00004275 BasicBlock* tmpBB = getBBVal(yyvsp[0].ValIDVal);
Andrew Lenharth6353e052006-12-08 18:07:09 +00004276 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00004277 yyval.JumpTable->push_back(std::make_pair(V, tmpBB));
4278 ;
4279 break;}
4280case 250:
4281#line 2504 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4282{
4283 yyval.JumpTable = new std::vector<std::pair<Constant*, BasicBlock*> >();
4284 Constant *V = cast<Constant>(getValNonImprovising(yyvsp[-4].PrimType, yyvsp[-3].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00004285 CHECK_FOR_ERROR
4286
4287 if (V == 0)
Reid Spencerb5334b02007-02-05 10:18:06 +00004288 GEN_ERROR("May only switch on a constant pool value");
Andrew Lenharth6353e052006-12-08 18:07:09 +00004289
Chris Lattner9d2fda62007-02-13 05:53:56 +00004290 BasicBlock* tmpBB = getBBVal(yyvsp[0].ValIDVal);
Andrew Lenharth6353e052006-12-08 18:07:09 +00004291 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00004292 yyval.JumpTable->push_back(std::make_pair(V, tmpBB));
4293 ;
4294 break;}
4295case 251:
4296#line 2517 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4297{
Reid Spenceref9b9a72007-02-05 20:47:22 +00004298 // Is this definition named?? if so, assign the name...
Chris Lattner9d2fda62007-02-13 05:53:56 +00004299 setValueName(yyvsp[0].InstVal, yyvsp[-1].StrVal);
Reid Spenceref9b9a72007-02-05 20:47:22 +00004300 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00004301 InsertValue(yyvsp[0].InstVal);
4302 yyval.InstVal = yyvsp[0].InstVal;
Reid Spenceref9b9a72007-02-05 20:47:22 +00004303 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00004304 ;
4305 break;}
4306case 252:
4307#line 2527 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4308{ // Used for PHI nodes
Reid Spencer14310612006-12-31 05:40:51 +00004309 if (!UpRefs.empty())
Chris Lattner9d2fda62007-02-13 05:53:56 +00004310 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-5].TypeVal)->getDescription());
4311 yyval.PHIList = new std::list<std::pair<Value*, BasicBlock*> >();
4312 Value* tmpVal = getVal(*yyvsp[-5].TypeVal, yyvsp[-3].ValIDVal);
Andrew Lenharth6353e052006-12-08 18:07:09 +00004313 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00004314 BasicBlock* tmpBB = getBBVal(yyvsp[-1].ValIDVal);
Andrew Lenharth6353e052006-12-08 18:07:09 +00004315 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00004316 yyval.PHIList->push_back(std::make_pair(tmpVal, tmpBB));
4317 delete yyvsp[-5].TypeVal;
4318 ;
4319 break;}
4320case 253:
4321#line 2538 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4322{
4323 yyval.PHIList = yyvsp[-6].PHIList;
4324 Value* tmpVal = getVal(yyvsp[-6].PHIList->front().first->getType(), yyvsp[-3].ValIDVal);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004325 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00004326 BasicBlock* tmpBB = getBBVal(yyvsp[-1].ValIDVal);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004327 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00004328 yyvsp[-6].PHIList->push_back(std::make_pair(tmpVal, tmpBB));
4329 ;
4330 break;}
4331case 254:
4332#line 2548 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4333{
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004334 if (!UpRefs.empty())
Chris Lattner9d2fda62007-02-13 05:53:56 +00004335 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription());
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004336 // Used for call and invoke instructions
Chris Lattner9d2fda62007-02-13 05:53:56 +00004337 yyval.ValueRefList = new ValueRefList();
4338 ValueRefListEntry E; E.Attrs = yyvsp[0].ParamAttrs; E.Val = getVal(yyvsp[-2].TypeVal->get(), yyvsp[-1].ValIDVal);
4339 yyval.ValueRefList->push_back(E);
4340 ;
4341 break;}
4342case 255:
4343#line 2556 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4344{
Reid Spencer14310612006-12-31 05:40:51 +00004345 if (!UpRefs.empty())
Chris Lattner9d2fda62007-02-13 05:53:56 +00004346 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription());
4347 yyval.ValueRefList = yyvsp[-4].ValueRefList;
4348 ValueRefListEntry E; E.Attrs = yyvsp[0].ParamAttrs; E.Val = getVal(yyvsp[-2].TypeVal->get(), yyvsp[-1].ValIDVal);
4349 yyval.ValueRefList->push_back(E);
Reid Spencer6f407902007-01-13 05:00:46 +00004350 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00004351 ;
4352 break;}
4353case 256:
4354#line 2564 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4355{ yyval.ValueRefList = new ValueRefList(); ;
4356 break;}
4357case 257:
4358#line 2567 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4359{ yyval.ValueList = new std::vector<Value*>(); ;
4360 break;}
4361case 258:
4362#line 2568 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4363{
4364 yyval.ValueList = yyvsp[-2].ValueList;
4365 yyval.ValueList->push_back(yyvsp[0].ValueVal);
Reid Spencer14310612006-12-31 05:40:51 +00004366 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00004367 ;
4368 break;}
4369case 259:
4370#line 2575 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4371{
4372 yyval.BoolVal = true;
Reid Spencere4d87aa2006-12-23 06:05:41 +00004373 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00004374 ;
4375 break;}
4376case 260:
4377#line 2579 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4378{
4379 yyval.BoolVal = false;
Reid Spencere4d87aa2006-12-23 06:05:41 +00004380 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00004381 ;
4382 break;}
4383case 261:
4384#line 2584 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4385{
Reid Spencer14310612006-12-31 05:40:51 +00004386 if (!UpRefs.empty())
Chris Lattner9d2fda62007-02-13 05:53:56 +00004387 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription());
4388 if (!(*yyvsp[-3].TypeVal)->isInteger() && !(*yyvsp[-3].TypeVal)->isFloatingPoint() &&
4389 !isa<PackedType>((*yyvsp[-3].TypeVal).get()))
Reid Spencere4d87aa2006-12-23 06:05:41 +00004390 GEN_ERROR(
Reid Spencerb5334b02007-02-05 10:18:06 +00004391 "Arithmetic operator requires integer, FP, or packed operands");
Chris Lattner9d2fda62007-02-13 05:53:56 +00004392 if (isa<PackedType>((*yyvsp[-3].TypeVal).get()) &&
4393 (yyvsp[-4].BinaryOpVal == Instruction::URem ||
4394 yyvsp[-4].BinaryOpVal == Instruction::SRem ||
4395 yyvsp[-4].BinaryOpVal == Instruction::FRem))
Reid Spenceref9b9a72007-02-05 20:47:22 +00004396 GEN_ERROR("Remainder not supported on packed types");
Chris Lattner9d2fda62007-02-13 05:53:56 +00004397 Value* val1 = getVal(*yyvsp[-3].TypeVal, yyvsp[-2].ValIDVal);
Andrew Lenharth6353e052006-12-08 18:07:09 +00004398 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00004399 Value* val2 = getVal(*yyvsp[-3].TypeVal, yyvsp[0].ValIDVal);
Andrew Lenharth6353e052006-12-08 18:07:09 +00004400 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00004401 yyval.InstVal = BinaryOperator::create(yyvsp[-4].BinaryOpVal, val1, val2);
4402 if (yyval.InstVal == 0)
Reid Spencerb5334b02007-02-05 10:18:06 +00004403 GEN_ERROR("binary operator returned null");
Chris Lattner9d2fda62007-02-13 05:53:56 +00004404 delete yyvsp[-3].TypeVal;
4405 ;
4406 break;}
4407case 262:
4408#line 2605 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4409{
Reid Spencer14310612006-12-31 05:40:51 +00004410 if (!UpRefs.empty())
Chris Lattner9d2fda62007-02-13 05:53:56 +00004411 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription());
4412 if (!(*yyvsp[-3].TypeVal)->isInteger()) {
4413 if (Instruction::isShift(yyvsp[-4].BinaryOpVal) || !isa<PackedType>(yyvsp[-3].TypeVal->get()) ||
4414 !cast<PackedType>(yyvsp[-3].TypeVal->get())->getElementType()->isInteger())
Reid Spencerb5334b02007-02-05 10:18:06 +00004415 GEN_ERROR("Logical operator requires integral operands");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004416 }
Chris Lattner9d2fda62007-02-13 05:53:56 +00004417 Value* tmpVal1 = getVal(*yyvsp[-3].TypeVal, yyvsp[-2].ValIDVal);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004418 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00004419 Value* tmpVal2 = getVal(*yyvsp[-3].TypeVal, yyvsp[0].ValIDVal);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004420 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00004421 yyval.InstVal = BinaryOperator::create(yyvsp[-4].BinaryOpVal, tmpVal1, tmpVal2);
4422 if (yyval.InstVal == 0)
Reid Spencerb5334b02007-02-05 10:18:06 +00004423 GEN_ERROR("binary operator returned null");
Chris Lattner9d2fda62007-02-13 05:53:56 +00004424 delete yyvsp[-3].TypeVal;
4425 ;
4426 break;}
4427case 263:
4428#line 2622 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4429{
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004430 if (!UpRefs.empty())
Chris Lattner9d2fda62007-02-13 05:53:56 +00004431 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription());
4432 if (isa<PackedType>((*yyvsp[-3].TypeVal).get()))
Reid Spencerac4a1dd2007-01-04 02:57:52 +00004433 GEN_ERROR("Packed types not supported by icmp instruction");
Chris Lattner9d2fda62007-02-13 05:53:56 +00004434 Value* tmpVal1 = getVal(*yyvsp[-3].TypeVal, yyvsp[-2].ValIDVal);
Andrew Lenharth6353e052006-12-08 18:07:09 +00004435 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00004436 Value* tmpVal2 = getVal(*yyvsp[-3].TypeVal, yyvsp[0].ValIDVal);
Andrew Lenharth6353e052006-12-08 18:07:09 +00004437 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00004438 yyval.InstVal = CmpInst::create(yyvsp[-5].OtherOpVal, yyvsp[-4].IPredicate, tmpVal1, tmpVal2);
4439 if (yyval.InstVal == 0)
Reid Spencerb5334b02007-02-05 10:18:06 +00004440 GEN_ERROR("icmp operator returned null");
Chris Lattner9d2fda62007-02-13 05:53:56 +00004441 ;
4442 break;}
4443case 264:
4444#line 2635 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4445{
Reid Spencer14310612006-12-31 05:40:51 +00004446 if (!UpRefs.empty())
Chris Lattner9d2fda62007-02-13 05:53:56 +00004447 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription());
4448 if (isa<PackedType>((*yyvsp[-3].TypeVal).get()))
Reid Spencerac4a1dd2007-01-04 02:57:52 +00004449 GEN_ERROR("Packed types not supported by fcmp instruction");
Chris Lattner9d2fda62007-02-13 05:53:56 +00004450 Value* tmpVal1 = getVal(*yyvsp[-3].TypeVal, yyvsp[-2].ValIDVal);
Andrew Lenharth6353e052006-12-08 18:07:09 +00004451 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00004452 Value* tmpVal2 = getVal(*yyvsp[-3].TypeVal, yyvsp[0].ValIDVal);
Andrew Lenharth6353e052006-12-08 18:07:09 +00004453 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00004454 yyval.InstVal = CmpInst::create(yyvsp[-5].OtherOpVal, yyvsp[-4].FPredicate, tmpVal1, tmpVal2);
4455 if (yyval.InstVal == 0)
Reid Spencerb5334b02007-02-05 10:18:06 +00004456 GEN_ERROR("fcmp operator returned null");
Chris Lattner9d2fda62007-02-13 05:53:56 +00004457 ;
4458 break;}
4459case 265:
4460#line 2648 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4461{
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004462 if (!UpRefs.empty())
Chris Lattner9d2fda62007-02-13 05:53:56 +00004463 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[0].TypeVal)->getDescription());
4464 Value* Val = yyvsp[-2].ValueVal;
4465 const Type* DestTy = yyvsp[0].TypeVal->get();
4466 if (!CastInst::castIsValid(yyvsp[-3].CastOpVal, Val, DestTy))
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004467 GEN_ERROR("invalid cast opcode for cast from '" +
4468 Val->getType()->getDescription() + "' to '" +
Reid Spencerb5334b02007-02-05 10:18:06 +00004469 DestTy->getDescription() + "'");
Chris Lattner9d2fda62007-02-13 05:53:56 +00004470 yyval.InstVal = CastInst::create(yyvsp[-3].CastOpVal, Val, DestTy);
4471 delete yyvsp[0].TypeVal;
4472 ;
4473 break;}
4474case 266:
4475#line 2660 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4476{
4477 if (yyvsp[-4].ValueVal->getType() != Type::Int1Ty)
Reid Spencerb5334b02007-02-05 10:18:06 +00004478 GEN_ERROR("select condition must be boolean");
Chris Lattner9d2fda62007-02-13 05:53:56 +00004479 if (yyvsp[-2].ValueVal->getType() != yyvsp[0].ValueVal->getType())
Reid Spencerb5334b02007-02-05 10:18:06 +00004480 GEN_ERROR("select value types should match");
Chris Lattner9d2fda62007-02-13 05:53:56 +00004481 yyval.InstVal = new SelectInst(yyvsp[-4].ValueVal, yyvsp[-2].ValueVal, yyvsp[0].ValueVal);
Andrew Lenharth6353e052006-12-08 18:07:09 +00004482 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00004483 ;
4484 break;}
4485case 267:
4486#line 2668 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4487{
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004488 if (!UpRefs.empty())
Chris Lattner9d2fda62007-02-13 05:53:56 +00004489 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[0].TypeVal)->getDescription());
4490 yyval.InstVal = new VAArgInst(yyvsp[-2].ValueVal, *yyvsp[0].TypeVal);
4491 delete yyvsp[0].TypeVal;
Andrew Lenharth6353e052006-12-08 18:07:09 +00004492 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00004493 ;
4494 break;}
4495case 268:
4496#line 2675 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4497{
4498 if (!ExtractElementInst::isValidOperands(yyvsp[-2].ValueVal, yyvsp[0].ValueVal))
Reid Spencerb5334b02007-02-05 10:18:06 +00004499 GEN_ERROR("Invalid extractelement operands");
Chris Lattner9d2fda62007-02-13 05:53:56 +00004500 yyval.InstVal = new ExtractElementInst(yyvsp[-2].ValueVal, yyvsp[0].ValueVal);
Andrew Lenharth6353e052006-12-08 18:07:09 +00004501 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00004502 ;
4503 break;}
4504case 269:
4505#line 2681 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4506{
4507 if (!InsertElementInst::isValidOperands(yyvsp[-4].ValueVal, yyvsp[-2].ValueVal, yyvsp[0].ValueVal))
Reid Spencerb5334b02007-02-05 10:18:06 +00004508 GEN_ERROR("Invalid insertelement operands");
Chris Lattner9d2fda62007-02-13 05:53:56 +00004509 yyval.InstVal = new InsertElementInst(yyvsp[-4].ValueVal, yyvsp[-2].ValueVal, yyvsp[0].ValueVal);
Andrew Lenharth6353e052006-12-08 18:07:09 +00004510 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00004511 ;
4512 break;}
4513case 270:
4514#line 2687 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4515{
4516 if (!ShuffleVectorInst::isValidOperands(yyvsp[-4].ValueVal, yyvsp[-2].ValueVal, yyvsp[0].ValueVal))
Reid Spencerb5334b02007-02-05 10:18:06 +00004517 GEN_ERROR("Invalid shufflevector operands");
Chris Lattner9d2fda62007-02-13 05:53:56 +00004518 yyval.InstVal = new ShuffleVectorInst(yyvsp[-4].ValueVal, yyvsp[-2].ValueVal, yyvsp[0].ValueVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00004519 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00004520 ;
4521 break;}
4522case 271:
4523#line 2693 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4524{
4525 const Type *Ty = yyvsp[0].PHIList->front().first->getType();
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004526 if (!Ty->isFirstClassType())
Reid Spencerb5334b02007-02-05 10:18:06 +00004527 GEN_ERROR("PHI node operands must be of first class type");
Chris Lattner9d2fda62007-02-13 05:53:56 +00004528 yyval.InstVal = new PHINode(Ty);
4529 ((PHINode*)yyval.InstVal)->reserveOperandSpace(yyvsp[0].PHIList->size());
4530 while (yyvsp[0].PHIList->begin() != yyvsp[0].PHIList->end()) {
4531 if (yyvsp[0].PHIList->front().first->getType() != Ty)
Reid Spencerb5334b02007-02-05 10:18:06 +00004532 GEN_ERROR("All elements of a PHI node must be of the same type");
Chris Lattner9d2fda62007-02-13 05:53:56 +00004533 cast<PHINode>(yyval.InstVal)->addIncoming(yyvsp[0].PHIList->front().first, yyvsp[0].PHIList->front().second);
4534 yyvsp[0].PHIList->pop_front();
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004535 }
Chris Lattner9d2fda62007-02-13 05:53:56 +00004536 delete yyvsp[0].PHIList; // Free the list...
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004537 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00004538 ;
4539 break;}
4540case 272:
4541#line 2709 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4542{
Reid Spencer14310612006-12-31 05:40:51 +00004543
4544 // Handle the short syntax
Andrew Lenharth6353e052006-12-08 18:07:09 +00004545 const PointerType *PFTy = 0;
4546 const FunctionType *Ty = 0;
Chris Lattner9d2fda62007-02-13 05:53:56 +00004547 if (!(PFTy = dyn_cast<PointerType>(yyvsp[-5].TypeVal->get())) ||
Andrew Lenharth6353e052006-12-08 18:07:09 +00004548 !(Ty = dyn_cast<FunctionType>(PFTy->getElementType()))) {
4549 // Pull out the types of all of the arguments...
4550 std::vector<const Type*> ParamTypes;
Reid Spencer14310612006-12-31 05:40:51 +00004551 FunctionType::ParamAttrsList ParamAttrs;
Chris Lattner9d2fda62007-02-13 05:53:56 +00004552 ParamAttrs.push_back(yyvsp[0].ParamAttrs);
4553 for (ValueRefList::iterator I = yyvsp[-2].ValueRefList->begin(), E = yyvsp[-2].ValueRefList->end(); I != E; ++I) {
Reid Spencer14310612006-12-31 05:40:51 +00004554 const Type *Ty = I->Val->getType();
4555 if (Ty == Type::VoidTy)
4556 GEN_ERROR("Short call syntax cannot be used with varargs");
4557 ParamTypes.push_back(Ty);
4558 ParamAttrs.push_back(I->Attrs);
Andrew Lenharth6353e052006-12-08 18:07:09 +00004559 }
4560
Chris Lattner9d2fda62007-02-13 05:53:56 +00004561 Ty = FunctionType::get(yyvsp[-5].TypeVal->get(), ParamTypes, false, ParamAttrs);
Andrew Lenharth6353e052006-12-08 18:07:09 +00004562 PFTy = PointerType::get(Ty);
4563 }
4564
Chris Lattner9d2fda62007-02-13 05:53:56 +00004565 Value *V = getVal(PFTy, yyvsp[-4].ValIDVal); // Get the function we're calling...
Andrew Lenharth6353e052006-12-08 18:07:09 +00004566 CHECK_FOR_ERROR
4567
Reid Spencer14310612006-12-31 05:40:51 +00004568 // Check the arguments
4569 ValueList Args;
Chris Lattner9d2fda62007-02-13 05:53:56 +00004570 if (yyvsp[-2].ValueRefList->empty()) { // Has no arguments?
Andrew Lenharth6353e052006-12-08 18:07:09 +00004571 // Make sure no arguments is a good thing!
4572 if (Ty->getNumParams() != 0)
4573 GEN_ERROR("No arguments passed to a function that "
Reid Spencerb5334b02007-02-05 10:18:06 +00004574 "expects arguments");
Andrew Lenharth6353e052006-12-08 18:07:09 +00004575 } else { // Has arguments?
4576 // Loop through FunctionType's arguments and ensure they are specified
4577 // correctly!
4578 //
4579 FunctionType::param_iterator I = Ty->param_begin();
4580 FunctionType::param_iterator E = Ty->param_end();
Chris Lattner9d2fda62007-02-13 05:53:56 +00004581 ValueRefList::iterator ArgI = yyvsp[-2].ValueRefList->begin(), ArgE = yyvsp[-2].ValueRefList->end();
Andrew Lenharth6353e052006-12-08 18:07:09 +00004582
Reid Spencer14310612006-12-31 05:40:51 +00004583 for (; ArgI != ArgE && I != E; ++ArgI, ++I) {
4584 if (ArgI->Val->getType() != *I)
4585 GEN_ERROR("Parameter " + ArgI->Val->getName()+ " is not of type '" +
Reid Spencerb5334b02007-02-05 10:18:06 +00004586 (*I)->getDescription() + "'");
Reid Spencer14310612006-12-31 05:40:51 +00004587 Args.push_back(ArgI->Val);
4588 }
4589 if (Ty->isVarArg()) {
4590 if (I == E)
4591 for (; ArgI != ArgE; ++ArgI)
4592 Args.push_back(ArgI->Val); // push the remaining varargs
4593 } else if (I != E || ArgI != ArgE)
Reid Spencerb5334b02007-02-05 10:18:06 +00004594 GEN_ERROR("Invalid number of parameters detected");
Andrew Lenharth6353e052006-12-08 18:07:09 +00004595 }
Reid Spencer14310612006-12-31 05:40:51 +00004596 // Create the call node
Chris Lattner9d2fda62007-02-13 05:53:56 +00004597 CallInst *CI = new CallInst(V, &Args[0], Args.size());
4598 CI->setTailCall(yyvsp[-7].BoolVal);
4599 CI->setCallingConv(yyvsp[-6].UIntVal);
4600 yyval.InstVal = CI;
4601 delete yyvsp[-2].ValueRefList;
4602 delete yyvsp[-5].TypeVal;
Reid Spencere4d87aa2006-12-23 06:05:41 +00004603 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00004604 ;
4605 break;}
4606case 273:
4607#line 2772 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4608{
4609 yyval.InstVal = yyvsp[0].InstVal;
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004610 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00004611 ;
4612 break;}
4613case 274:
4614#line 2777 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4615{
4616 yyval.BoolVal = true;
Reid Spencere4d87aa2006-12-23 06:05:41 +00004617 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00004618 ;
4619 break;}
4620case 275:
4621#line 2781 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4622{
4623 yyval.BoolVal = false;
Reid Spencere4d87aa2006-12-23 06:05:41 +00004624 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00004625 ;
4626 break;}
4627case 276:
4628#line 2788 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4629{
Reid Spencer6f407902007-01-13 05:00:46 +00004630 if (!UpRefs.empty())
Chris Lattner9d2fda62007-02-13 05:53:56 +00004631 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
4632 yyval.InstVal = new MallocInst(*yyvsp[-1].TypeVal, 0, yyvsp[0].UIntVal);
4633 delete yyvsp[-1].TypeVal;
Reid Spencer6f407902007-01-13 05:00:46 +00004634 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00004635 ;
4636 break;}
4637case 277:
4638#line 2795 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4639{
Reid Spencer14310612006-12-31 05:40:51 +00004640 if (!UpRefs.empty())
Chris Lattner9d2fda62007-02-13 05:53:56 +00004641 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-4].TypeVal)->getDescription());
4642 Value* tmpVal = getVal(yyvsp[-2].PrimType, yyvsp[-1].ValIDVal);
Reid Spencere4d87aa2006-12-23 06:05:41 +00004643 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00004644 yyval.InstVal = new MallocInst(*yyvsp[-4].TypeVal, tmpVal, yyvsp[0].UIntVal);
4645 delete yyvsp[-4].TypeVal;
4646 ;
4647 break;}
4648case 278:
4649#line 2803 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4650{
Reid Spencer14310612006-12-31 05:40:51 +00004651 if (!UpRefs.empty())
Chris Lattner9d2fda62007-02-13 05:53:56 +00004652 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
4653 yyval.InstVal = new AllocaInst(*yyvsp[-1].TypeVal, 0, yyvsp[0].UIntVal);
4654 delete yyvsp[-1].TypeVal;
Reid Spencer61c83e02006-08-18 08:43:06 +00004655 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00004656 ;
4657 break;}
4658case 279:
4659#line 2810 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4660{
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004661 if (!UpRefs.empty())
Chris Lattner9d2fda62007-02-13 05:53:56 +00004662 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-4].TypeVal)->getDescription());
4663 Value* tmpVal = getVal(yyvsp[-2].PrimType, yyvsp[-1].ValIDVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00004664 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00004665 yyval.InstVal = new AllocaInst(*yyvsp[-4].TypeVal, tmpVal, yyvsp[0].UIntVal);
4666 delete yyvsp[-4].TypeVal;
4667 ;
4668 break;}
4669case 280:
4670#line 2818 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4671{
4672 if (!isa<PointerType>(yyvsp[0].ValueVal->getType()))
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004673 GEN_ERROR("Trying to free nonpointer type " +
Chris Lattner9d2fda62007-02-13 05:53:56 +00004674 yyvsp[0].ValueVal->getType()->getDescription() + "");
4675 yyval.InstVal = new FreeInst(yyvsp[0].ValueVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00004676 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00004677 ;
4678 break;}
4679case 281:
4680#line 2826 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4681{
Reid Spencer14310612006-12-31 05:40:51 +00004682 if (!UpRefs.empty())
Chris Lattner9d2fda62007-02-13 05:53:56 +00004683 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
4684 if (!isa<PointerType>(yyvsp[-1].TypeVal->get()))
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004685 GEN_ERROR("Can't load from nonpointer type: " +
Chris Lattner9d2fda62007-02-13 05:53:56 +00004686 (*yyvsp[-1].TypeVal)->getDescription());
4687 if (!cast<PointerType>(yyvsp[-1].TypeVal->get())->getElementType()->isFirstClassType())
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004688 GEN_ERROR("Can't load from pointer of non-first-class type: " +
Chris Lattner9d2fda62007-02-13 05:53:56 +00004689 (*yyvsp[-1].TypeVal)->getDescription());
4690 Value* tmpVal = getVal(*yyvsp[-1].TypeVal, yyvsp[0].ValIDVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00004691 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00004692 yyval.InstVal = new LoadInst(tmpVal, "", yyvsp[-3].BoolVal);
4693 delete yyvsp[-1].TypeVal;
4694 ;
4695 break;}
4696case 282:
4697#line 2840 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4698{
Reid Spencer14310612006-12-31 05:40:51 +00004699 if (!UpRefs.empty())
Chris Lattner9d2fda62007-02-13 05:53:56 +00004700 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
4701 const PointerType *PT = dyn_cast<PointerType>(yyvsp[-1].TypeVal->get());
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004702 if (!PT)
4703 GEN_ERROR("Can't store to a nonpointer type: " +
Chris Lattner9d2fda62007-02-13 05:53:56 +00004704 (*yyvsp[-1].TypeVal)->getDescription());
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004705 const Type *ElTy = PT->getElementType();
Chris Lattner9d2fda62007-02-13 05:53:56 +00004706 if (ElTy != yyvsp[-3].ValueVal->getType())
4707 GEN_ERROR("Can't store '" + yyvsp[-3].ValueVal->getType()->getDescription() +
Reid Spencerb5334b02007-02-05 10:18:06 +00004708 "' into space of type '" + ElTy->getDescription() + "'");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004709
Chris Lattner9d2fda62007-02-13 05:53:56 +00004710 Value* tmpVal = getVal(*yyvsp[-1].TypeVal, yyvsp[0].ValIDVal);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004711 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00004712 yyval.InstVal = new StoreInst(yyvsp[-3].ValueVal, tmpVal, yyvsp[-5].BoolVal);
4713 delete yyvsp[-1].TypeVal;
4714 ;
4715 break;}
4716case 283:
4717#line 2857 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4718{
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004719 if (!UpRefs.empty())
Chris Lattner9d2fda62007-02-13 05:53:56 +00004720 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription());
4721 if (!isa<PointerType>(yyvsp[-2].TypeVal->get()))
Reid Spencerb5334b02007-02-05 10:18:06 +00004722 GEN_ERROR("getelementptr insn requires pointer operand");
Reid Spencer68a24bd2005-08-27 18:50:39 +00004723
Chris Lattner9d2fda62007-02-13 05:53:56 +00004724 if (!GetElementPtrInst::getIndexedType(*yyvsp[-2].TypeVal, &(*yyvsp[0].ValueList)[0], yyvsp[0].ValueList->size(), true))
Reid Spencer61c83e02006-08-18 08:43:06 +00004725 GEN_ERROR("Invalid getelementptr indices for type '" +
Chris Lattner9d2fda62007-02-13 05:53:56 +00004726 (*yyvsp[-2].TypeVal)->getDescription()+ "'");
4727 Value* tmpVal = getVal(*yyvsp[-2].TypeVal, yyvsp[-1].ValIDVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00004728 CHECK_FOR_ERROR
Chris Lattner9d2fda62007-02-13 05:53:56 +00004729 yyval.InstVal = new GetElementPtrInst(tmpVal, &(*yyvsp[0].ValueList)[0], yyvsp[0].ValueList->size());
4730 delete yyvsp[-2].TypeVal;
4731 delete yyvsp[0].ValueList;
4732 ;
4733 break;}
4734}
4735 /* the action file gets copied in in place of this dollarsign */
4736#line 543 "/usr/share/bison.simple"
4737
4738 yyvsp -= yylen;
4739 yyssp -= yylen;
4740#ifdef YYLSP_NEEDED
4741 yylsp -= yylen;
4742#endif
Reid Spencer5cbf9852007-01-30 20:08:39 +00004743
Chris Lattner9d2fda62007-02-13 05:53:56 +00004744#if YYDEBUG != 0
4745 if (yydebug)
4746 {
4747 short *ssp1 = yyss - 1;
4748 fprintf (stderr, "state stack now");
4749 while (ssp1 != yyssp)
4750 fprintf (stderr, " %d", *++ssp1);
4751 fprintf (stderr, "\n");
Chris Lattner8adde282007-02-11 21:40:10 +00004752 }
Chris Lattner9d2fda62007-02-13 05:53:56 +00004753#endif
Reid Spencer68a24bd2005-08-27 18:50:39 +00004754
4755 *++yyvsp = yyval;
4756
Chris Lattner9d2fda62007-02-13 05:53:56 +00004757#ifdef YYLSP_NEEDED
4758 yylsp++;
4759 if (yylen == 0)
4760 {
4761 yylsp->first_line = yylloc.first_line;
4762 yylsp->first_column = yylloc.first_column;
4763 yylsp->last_line = (yylsp-1)->last_line;
4764 yylsp->last_column = (yylsp-1)->last_column;
4765 yylsp->text = 0;
4766 }
4767 else
4768 {
4769 yylsp->last_line = (yylsp+yylen-1)->last_line;
4770 yylsp->last_column = (yylsp+yylen-1)->last_column;
4771 }
4772#endif
Reid Spencer68a24bd2005-08-27 18:50:39 +00004773
Chris Lattner9d2fda62007-02-13 05:53:56 +00004774 /* Now "shift" the result of the reduction.
4775 Determine what state that goes to,
4776 based on the state we popped back to
4777 and the rule number reduced by. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00004778
4779 yyn = yyr1[yyn];
4780
Chris Lattner9d2fda62007-02-13 05:53:56 +00004781 yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
4782 if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
Reid Spencer68a24bd2005-08-27 18:50:39 +00004783 yystate = yytable[yystate];
4784 else
Chris Lattner9d2fda62007-02-13 05:53:56 +00004785 yystate = yydefgoto[yyn - YYNTBASE];
Reid Spencer68a24bd2005-08-27 18:50:39 +00004786
4787 goto yynewstate;
4788
Chris Lattner9d2fda62007-02-13 05:53:56 +00004789yyerrlab: /* here on detecting error */
Reid Spencer68a24bd2005-08-27 18:50:39 +00004790
Chris Lattner9d2fda62007-02-13 05:53:56 +00004791 if (! yyerrstatus)
4792 /* If not already recovering from an error, report this error. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00004793 {
4794 ++yynerrs;
Chris Lattner8adde282007-02-11 21:40:10 +00004795
Chris Lattner9d2fda62007-02-13 05:53:56 +00004796#ifdef YYERROR_VERBOSE
4797 yyn = yypact[yystate];
4798
4799 if (yyn > YYFLAG && yyn < YYLAST)
4800 {
4801 int size = 0;
4802 char *msg;
4803 int x, count;
4804
4805 count = 0;
4806 /* Start X at -yyn if nec to avoid negative indexes in yycheck. */
4807 for (x = (yyn < 0 ? -yyn : 0);
4808 x < (sizeof(yytname) / sizeof(char *)); x++)
4809 if (yycheck[x + yyn] == x)
4810 size += strlen(yytname[x]) + 15, count++;
4811 msg = (char *) malloc(size + 15);
4812 if (msg != 0)
4813 {
4814 strcpy(msg, "parse error");
4815
4816 if (count < 5)
4817 {
4818 count = 0;
4819 for (x = (yyn < 0 ? -yyn : 0);
4820 x < (sizeof(yytname) / sizeof(char *)); x++)
4821 if (yycheck[x + yyn] == x)
4822 {
4823 strcat(msg, count == 0 ? ", expecting `" : " or `");
4824 strcat(msg, yytname[x]);
4825 strcat(msg, "'");
4826 count++;
4827 }
4828 }
4829 yyerror(msg);
4830 free(msg);
4831 }
4832 else
4833 yyerror ("parse error; also virtual memory exceeded");
4834 }
4835 else
4836#endif /* YYERROR_VERBOSE */
4837 yyerror("parse error");
Reid Spencer68a24bd2005-08-27 18:50:39 +00004838 }
Reid Spencer41dff5e2007-01-26 08:05:27 +00004839
Chris Lattner9d2fda62007-02-13 05:53:56 +00004840 goto yyerrlab1;
4841yyerrlab1: /* here on error raised explicitly by an action */
Reid Spencer41dff5e2007-01-26 08:05:27 +00004842
4843 if (yyerrstatus == 3)
4844 {
Chris Lattner9d2fda62007-02-13 05:53:56 +00004845 /* if just tried and failed to reuse lookahead token after an error, discard it. */
Reid Spencer41dff5e2007-01-26 08:05:27 +00004846
Chris Lattner9d2fda62007-02-13 05:53:56 +00004847 /* return failure if at end of input */
4848 if (yychar == YYEOF)
Reid Spencer68a24bd2005-08-27 18:50:39 +00004849 YYABORT;
4850
Chris Lattner9d2fda62007-02-13 05:53:56 +00004851#if YYDEBUG != 0
4852 if (yydebug)
4853 fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]);
4854#endif
Reid Spencere4d87aa2006-12-23 06:05:41 +00004855
Chris Lattner9d2fda62007-02-13 05:53:56 +00004856 yychar = YYEMPTY;
Reid Spencer68a24bd2005-08-27 18:50:39 +00004857 }
4858
Chris Lattner9d2fda62007-02-13 05:53:56 +00004859 /* Else will try to reuse lookahead token
4860 after shifting the error token. */
4861
4862 yyerrstatus = 3; /* Each real token shifted decrements this */
4863
4864 goto yyerrhandle;
4865
4866yyerrdefault: /* current state does not do anything special for the error token. */
4867
4868#if 0
4869 /* This is wrong; only states that explicitly want error tokens
4870 should shift them. */
4871 yyn = yydefact[yystate]; /* If its default is to accept any token, ok. Otherwise pop it.*/
4872 if (yyn) goto yydefault;
4873#endif
4874
4875yyerrpop: /* pop the current state because it cannot handle the error token */
4876
4877 if (yyssp == yyss) YYABORT;
4878 yyvsp--;
4879 yystate = *--yyssp;
4880#ifdef YYLSP_NEEDED
4881 yylsp--;
4882#endif
4883
4884#if YYDEBUG != 0
4885 if (yydebug)
4886 {
4887 short *ssp1 = yyss - 1;
4888 fprintf (stderr, "Error: state stack now");
4889 while (ssp1 != yyssp)
4890 fprintf (stderr, " %d", *++ssp1);
4891 fprintf (stderr, "\n");
4892 }
4893#endif
4894
4895yyerrhandle:
4896
4897 yyn = yypact[yystate];
4898 if (yyn == YYFLAG)
4899 goto yyerrdefault;
4900
4901 yyn += YYTERROR;
4902 if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
4903 goto yyerrdefault;
4904
4905 yyn = yytable[yyn];
4906 if (yyn < 0)
4907 {
4908 if (yyn == YYFLAG)
4909 goto yyerrpop;
4910 yyn = -yyn;
4911 goto yyreduce;
4912 }
4913 else if (yyn == 0)
4914 goto yyerrpop;
4915
Reid Spencer68a24bd2005-08-27 18:50:39 +00004916 if (yyn == YYFINAL)
4917 YYACCEPT;
4918
Chris Lattner9d2fda62007-02-13 05:53:56 +00004919#if YYDEBUG != 0
4920 if (yydebug)
4921 fprintf(stderr, "Shifting error token, ");
4922#endif
4923
Reid Spencer68a24bd2005-08-27 18:50:39 +00004924 *++yyvsp = yylval;
Chris Lattner9d2fda62007-02-13 05:53:56 +00004925#ifdef YYLSP_NEEDED
4926 *++yylsp = yylloc;
4927#endif
Reid Spencer41dff5e2007-01-26 08:05:27 +00004928
Reid Spencer68a24bd2005-08-27 18:50:39 +00004929 yystate = yyn;
4930 goto yynewstate;
4931
Chris Lattner9d2fda62007-02-13 05:53:56 +00004932 yyacceptlab:
4933 /* YYACCEPT comes here. */
4934 if (yyfree_stacks)
Chris Lattner7d9801d2007-02-13 00:58:01 +00004935 {
Chris Lattner9d2fda62007-02-13 05:53:56 +00004936 free (yyss);
4937 free (yyvs);
4938#ifdef YYLSP_NEEDED
4939 free (yyls);
4940#endif
Chris Lattner8adde282007-02-11 21:40:10 +00004941 }
Chris Lattner9d2fda62007-02-13 05:53:56 +00004942 return 0;
4943
4944 yyabortlab:
4945 /* YYABORT comes here. */
4946 if (yyfree_stacks)
4947 {
4948 free (yyss);
4949 free (yyvs);
4950#ifdef YYLSP_NEEDED
4951 free (yyls);
Chris Lattner7d9801d2007-02-13 00:58:01 +00004952#endif
Chris Lattner9d2fda62007-02-13 05:53:56 +00004953 }
4954 return 1;
Reid Spencer68a24bd2005-08-27 18:50:39 +00004955}
Chris Lattner9d2fda62007-02-13 05:53:56 +00004956#line 2874 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
Reid Spencer61c83e02006-08-18 08:43:06 +00004957
4958
Reid Spencer14310612006-12-31 05:40:51 +00004959// common code from the two 'RunVMAsmParser' functions
4960static Module* RunParser(Module * M) {
4961
4962 llvmAsmlineno = 1; // Reset the current line number...
4963 CurModule.CurrentModule = M;
4964#if YYDEBUG
4965 yydebug = Debug;
4966#endif
4967
4968 // Check to make sure the parser succeeded
4969 if (yyparse()) {
4970 if (ParserResult)
4971 delete ParserResult;
4972 return 0;
4973 }
4974
4975 // Check to make sure that parsing produced a result
4976 if (!ParserResult)
4977 return 0;
4978
4979 // Reset ParserResult variable while saving its value for the result.
4980 Module *Result = ParserResult;
4981 ParserResult = 0;
4982
4983 return Result;
4984}
4985
Reid Spencer61c83e02006-08-18 08:43:06 +00004986void llvm::GenerateError(const std::string &message, int LineNo) {
4987 if (LineNo == -1) LineNo = llvmAsmlineno;
4988 // TODO: column number in exception
4989 if (TheParseError)
4990 TheParseError->setError(CurFilename, message, LineNo);
4991 TriggerError = 1;
4992}
Reid Spencer68a24bd2005-08-27 18:50:39 +00004993
4994int yyerror(const char *ErrorMsg) {
4995 std::string where
4996 = std::string((CurFilename == "-") ? std::string("<stdin>") : CurFilename)
4997 + ":" + utostr((unsigned) llvmAsmlineno) + ": ";
Reid Spenceref9b9a72007-02-05 20:47:22 +00004998 std::string errMsg = where + "error: " + std::string(ErrorMsg);
4999 if (yychar != YYEMPTY && yychar != 0)
5000 errMsg += " while reading token: '" + std::string(llvmAsmtext, llvmAsmleng)+
5001 "'";
Reid Spencer61c83e02006-08-18 08:43:06 +00005002 GenerateError(errMsg);
Reid Spencer68a24bd2005-08-27 18:50:39 +00005003 return 0;
5004}