blob: 8e84dc1ba22e9d7209425002cb31e8435577c968 [file] [log] [blame]
Reid Spencer68a24bd2005-08-27 18:50:39 +00001
Chris Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +00008#define yylex llvmAsmlex
Reid Spencer68a24bd2005-08-27 18:50:39 +00009#define yyerror llvmAsmerror
Chris Lattner32980692007-02-19 07:44:24 +000010#define yylval llvmAsmlval
11#define yychar llvmAsmchar
Reid Spencer68a24bd2005-08-27 18:50:39 +000012#define yydebug llvmAsmdebug
13#define yynerrs llvmAsmnerrs
Chris Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +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;
Chris Lattner32980692007-02-19 07:44:24 +00001077#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 Lattner32980692007-02-19 07:44:24 +00001087#define YYFINAL 557
1088#define YYFLAG -32768
1089#define YYNTBASE 146
Reid Spencer68a24bd2005-08-27 18:50:39 +00001090
Chris Lattner32980692007-02-19 07:44:24 +00001091#define YYTRANSLATE(x) ((unsigned)(x) <= 385 ? yytranslate[x] : 223)
Reid Spencer68a24bd2005-08-27 18:50:39 +00001092
Chris Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +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};
Chris Lattner9d2fda62007-02-13 05:53:56 +00001167
Chris Lattner32980692007-02-19 07:44:24 +00001168static 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};
Chris Lattner9d2fda62007-02-13 05:53:56 +00001260
Anton Korobeynikov178a3522007-01-12 19:22:51 +00001261#endif
1262
Chris Lattner32980692007-02-19 07:44:24 +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, 1579, 1599, 1611,
1280 1618, 1684, 1694, 1704, 1710, 1716, 1721, 1726, 1734, 1746,
1281 1768, 1776, 1782, 1793, 1798, 1803, 1809, 1815, 1824, 1828,
1282 1836, 1836, 1847, 1852, 1860, 1861, 1865, 1865, 1869, 1869,
1283 1872, 1875, 1887, 1911, 1922, 1929, 1932, 1937, 1940, 1946,
1284 1950, 1953, 1959, 1972, 1976, 1981, 1983, 1988, 1993, 2002,
1285 2012, 2023, 2027, 2036, 2045, 2050, 2162, 2162, 2164, 2173,
1286 2173, 2175, 2180, 2192, 2196, 2201, 2205, 2209, 2213, 2217,
1287 2221, 2225, 2229, 2233, 2258, 2262, 2276, 2280, 2284, 2288,
1288 2294, 2294, 2300, 2309, 2313, 2322, 2332, 2341, 2353, 2366,
1289 2370, 2374, 2379, 2389, 2408, 2417, 2484, 2488, 2495, 2506,
1290 2519, 2529, 2540, 2550, 2558, 2566, 2569, 2570, 2577, 2581,
1291 2586, 2607, 2624, 2637, 2650, 2662, 2670, 2677, 2683, 2689,
1292 2695, 2710, 2774, 2779, 2783, 2790, 2797, 2805, 2812, 2820,
1293 2828, 2842, 2859
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 Lattner32980692007-02-19 07:44:24 +00001915#define YYSTACK_ALLOC malloc
Reid Spencer5cbf9852007-01-30 20:08:39 +00001916#endif
1917
Chris Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +00001935#define YYBACKUP(token, value) \
Reid Spencer68a24bd2005-08-27 18:50:39 +00001936do \
1937 if (yychar == YYEMPTY && yylen == 1) \
Chris Lattner32980692007-02-19 07:44:24 +00001938 { yychar = (token), yylval = (value); \
1939 yychar1 = YYTRANSLATE (yychar); \
Chris Lattner9d2fda62007-02-13 05:53:56 +00001940 YYPOPSTACK; \
Reid Spencer68a24bd2005-08-27 18:50:39 +00001941 goto yybackup; \
1942 } \
1943 else \
Chris Lattner32980692007-02-19 07:44:24 +00001944 { yyerror ("syntax error: cannot back up"); YYERROR; } \
Chris Lattner9d2fda62007-02-13 05:53:56 +00001945while (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 Lattner32980692007-02-19 07:44:24 +00001950#ifndef YYPURE
1951#define YYLEX yylex()
Reid Spencer68a24bd2005-08-27 18:50:39 +00001952#endif
1953
Chris Lattner32980692007-02-19 07:44:24 +00001954#ifdef YYPURE
1955#ifdef YYLSP_NEEDED
Reid Spencer41dff5e2007-01-26 08:05:27 +00001956#ifdef YYLEX_PARAM
Chris Lattner32980692007-02-19 07:44:24 +00001957#define YYLEX yylex(&yylval, &yylloc, YYLEX_PARAM)
Reid Spencer41dff5e2007-01-26 08:05:27 +00001958#else
Chris Lattner32980692007-02-19 07:44:24 +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 Lattner9d2fda62007-02-13 05:53:56 +00001968#endif
Reid Spencer9d6565a2007-02-15 02:26:10 +00001969
Chris Lattner32980692007-02-19 07:44:24 +00001970/* If nonreentrant, generate the variables here */
Reid Spencer9d6565a2007-02-15 02:26:10 +00001971
Chris Lattner32980692007-02-19 07:44:24 +00001972#ifndef YYPURE
Reid Spencer9d6565a2007-02-15 02:26:10 +00001973
Chris Lattner32980692007-02-19 07:44:24 +00001974int yychar; /* the lookahead symbol */
1975YYSTYPE yylval; /* the semantic value of the */
1976 /* lookahead symbol */
Reid Spencer9d6565a2007-02-15 02:26:10 +00001977
Chris Lattner32980692007-02-19 07:44:24 +00001978#ifdef YYLSP_NEEDED
1979YYLTYPE yylloc; /* location data for the lookahead */
1980 /* symbol */
Chris Lattner9d2fda62007-02-13 05:53:56 +00001981#endif
Reid Spencer9d6565a2007-02-15 02:26:10 +00001982
Chris Lattner32980692007-02-19 07:44:24 +00001983int yynerrs; /* number of parse errors so far */
1984#endif /* not YYPURE */
Reid Spencer9d6565a2007-02-15 02:26:10 +00001985
Chris Lattner32980692007-02-19 07:44:24 +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 Lattner8adde282007-02-11 21:40:10 +00001990#endif
Chris Lattner7d9801d2007-02-13 00:58:01 +00001991
Chris Lattner32980692007-02-19 07:44:24 +00001992/* YYINITDEPTH indicates the initial size of the parser's stacks */
Chris Lattner7d9801d2007-02-13 00:58:01 +00001993
Reid Spencer68a24bd2005-08-27 18:50:39 +00001994#ifndef YYINITDEPTH
Chris Lattner32980692007-02-19 07:44:24 +00001995#define YYINITDEPTH 200
Reid Spencer68a24bd2005-08-27 18:50:39 +00001996#endif
1997
Chris Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +00002001#if YYMAXDEPTH == 0
2002#undef YYMAXDEPTH
2003#endif
Reid Spencer68a24bd2005-08-27 18:50:39 +00002004
2005#ifndef YYMAXDEPTH
Chris Lattner32980692007-02-19 07:44:24 +00002006#define YYMAXDEPTH 10000
Reid Spencer68a24bd2005-08-27 18:50:39 +00002007#endif
Reid Spencer68a24bd2005-08-27 18:50:39 +00002008
Chris Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +00002019/* This is the most reliable way to avoid incompatibilities
2020 in available built-in functions on various systems. */
Reid Spencer9d6565a2007-02-15 02:26:10 +00002021static void
Chris Lattner32980692007-02-19 07:44:24 +00002022__yy_memcpy (to, from, count)
2023 char *to;
2024 char *from;
2025 unsigned int count;
2026{
2027 register char *f = from;
2028 register char *t = to;
2029 register int i = count;
2030
2031 while (i-- > 0)
2032 *t++ = *f++;
2033}
2034
2035#else /* __cplusplus */
2036
2037/* This is the most reliable way to avoid incompatibilities
2038 in available built-in functions on various systems. */
Reid Spencer9d6565a2007-02-15 02:26:10 +00002039static void
Chris Lattner32980692007-02-19 07:44:24 +00002040__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
Reid Spencer9d6565a2007-02-15 02:26:10 +00002050#endif
Reid Spencer9d6565a2007-02-15 02:26:10 +00002051#endif
Reid Spencer9d6565a2007-02-15 02:26:10 +00002052
Chris Lattner32980692007-02-19 07:44:24 +00002053#line 217 "/usr/share/bison.simple"
Reid Spencer9d6565a2007-02-15 02:26:10 +00002054
Chris Lattner32980692007-02-19 07:44:24 +00002055/* 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. */
Reid Spencer9d6565a2007-02-15 02:26:10 +00002060
2061#ifdef YYPARSE_PARAM
Chris Lattner32980692007-02-19 07:44:24 +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 *);
2078#else
Reid Spencere812fb22006-01-19 01:21:04 +00002079int yyparse (void);
Reid Spencer9d6565a2007-02-15 02:26:10 +00002080#endif
Chris Lattner32980692007-02-19 07:44:24 +00002081#endif
Reid Spencer9d6565a2007-02-15 02:26:10 +00002082
Reid Spencer9d6565a2007-02-15 02:26:10 +00002083int
Chris Lattner32980692007-02-19 07:44:24 +00002084yyparse(YYPARSE_PARAM_ARG)
2085 YYPARSE_PARAM_DECL
Reid Spencer9d6565a2007-02-15 02:26:10 +00002086{
Chris Lattner32980692007-02-19 07:44:24 +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 */
Reid Spencer9d6565a2007-02-15 02:26:10 +00002093
Chris Lattner32980692007-02-19 07:44:24 +00002094 short yyssa[YYINITDEPTH]; /* the state stack */
2095 YYSTYPE yyvsa[YYINITDEPTH]; /* the semantic value stack */
Reid Spencer9d6565a2007-02-15 02:26:10 +00002096
Chris Lattner32980692007-02-19 07:44:24 +00002097 short *yyss = yyssa; /* refer to the stacks thru separate pointers */
2098 YYSTYPE *yyvs = yyvsa; /* to allow yyoverflow to reallocate them elsewhere */
Reid Spencer9d6565a2007-02-15 02:26:10 +00002099
Chris Lattner32980692007-02-19 07:44:24 +00002100#ifdef YYLSP_NEEDED
2101 YYLTYPE yylsa[YYINITDEPTH]; /* the location stack */
2102 YYLTYPE *yyls = yylsa;
2103 YYLTYPE *yylsp;
Reid Spencer9d6565a2007-02-15 02:26:10 +00002104
Chris Lattner32980692007-02-19 07:44:24 +00002105#define YYPOPSTACK (yyvsp--, yyssp--, yylsp--)
2106#else
Chris Lattner9d2fda62007-02-13 05:53:56 +00002107#define YYPOPSTACK (yyvsp--, yyssp--)
Chris Lattner32980692007-02-19 07:44:24 +00002108#endif
Anton Korobeynikov178a3522007-01-12 19:22:51 +00002109
Chris Lattner32980692007-02-19 07:44:24 +00002110 int yystacksize = YYINITDEPTH;
2111 int yyfree_stacks = 0;
Chris Lattner7d9801d2007-02-13 00:58:01 +00002112
Chris Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +00002143 yyssp = yyss - 1;
Reid Spencer68a24bd2005-08-27 18:50:39 +00002144 yyvsp = yyvs;
Chris Lattner32980692007-02-19 07:44:24 +00002145#ifdef YYLSP_NEEDED
2146 yylsp = yyls;
2147#endif
Reid Spencer68a24bd2005-08-27 18:50:39 +00002148
Chris Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +00002154 *++yyssp = yystate;
Reid Spencer68a24bd2005-08-27 18:50:39 +00002155
Chris Lattner32980692007-02-19 07:44:24 +00002156 if (yyssp >= yyss + yystacksize - 1)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002157 {
Chris Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +00002167 int size = yyssp - yyss + 1;
Reid Spencer68a24bd2005-08-27 18:50:39 +00002168
2169#ifdef yyoverflow
Chris Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +00002207 if (yystacksize > YYMAXDEPTH)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002208 yystacksize = YYMAXDEPTH;
Chris Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +00002236 if (yyssp >= yyss + yystacksize - 1)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002237 YYABORT;
2238 }
2239
Chris Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +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. */
Chris Lattner32980692007-02-19 07:44:24 +00002249/* Read a lookahead token if we need one and don't already have one. */
Chris Lattner9d2fda62007-02-13 05:53:56 +00002250/* yyresume: */
Andrew Lenharth6353e052006-12-08 18:07:09 +00002251
Chris Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +00002255 if (yyn == YYFLAG)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002256 goto yydefault;
2257
Chris Lattner32980692007-02-19 07:44:24 +00002258 /* Not known => get a lookahead token if don't already have one. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00002259
Chris Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +00002302 yyn += yychar1;
2303 if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002304 goto yydefault;
Chris Lattner32980692007-02-19 07:44:24 +00002305
Reid Spencer68a24bd2005-08-27 18:50:39 +00002306 yyn = yytable[yyn];
Chris Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +00002317 if (yyn == YYFLAG)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002318 goto yyerrlab;
2319 yyn = -yyn;
2320 goto yyreduce;
2321 }
Chris Lattner32980692007-02-19 07:44:24 +00002322 else if (yyn == 0)
2323 goto yyerrlab;
Reid Spencer68a24bd2005-08-27 18:50:39 +00002324
2325 if (yyn == YYFINAL)
2326 YYACCEPT;
2327
Chris Lattner32980692007-02-19 07:44:24 +00002328 /* Shift the lookahead token. */
2329
2330#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 Lattner32980692007-02-19 07:44:24 +00002340#ifdef YYLSP_NEEDED
2341 *++yylsp = yylloc;
2342#endif
Chris Lattner7d9801d2007-02-13 00:58:01 +00002343
Chris Lattner32980692007-02-19 07:44:24 +00002344 /* count tokens shifted since error; after three, turn off error status. */
2345 if (yyerrstatus) yyerrstatus--;
Chris Lattner9d2fda62007-02-13 05:53:56 +00002346
2347 yystate = yyn;
Reid Spencer68a24bd2005-08-27 18:50:39 +00002348 goto yynewstate;
2349
Chris Lattner32980692007-02-19 07:44:24 +00002350/* Do the default action for the current state. */
Reid Spencer9d6565a2007-02-15 02:26:10 +00002351yydefault:
Chris Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +00002360 if (yylen > 0)
2361 yyval = yyvsp[1-yylen]; /* implement default value of the action */
Reid Spencer68a24bd2005-08-27 18:50:39 +00002362
Chris Lattner32980692007-02-19 07:44:24 +00002363#if YYDEBUG != 0
2364 if (yydebug)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002365 {
Chris Lattner32980692007-02-19 07:44:24 +00002366 int i;
Reid Spencer41dff5e2007-01-26 08:05:27 +00002367
Chris Lattner32980692007-02-19 07:44:24 +00002368 fprintf (stderr, "Reducing via rule %d (line %d), ",
2369 yyn, yyrline[yyn]);
Reid Spencerb0fcf8f2007-01-17 02:48:45 +00002370
Chris Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +00002379 switch (yyn) {
Reid Spencerb0fcf8f2007-01-17 02:48:45 +00002380
Chris Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +00002618 yyval.UIntVal = yyvsp[0].UInt64Val;
Reid Spencer41dff5e2007-01-26 08:05:27 +00002619 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +00002694 yyval.StrVal = yyvsp[0].StrVal;
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00002695 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +00002727 CurGV->setAlignment(yyvsp[0].UInt64Val);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00002728 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +00002821 ;
2822 break;}
2823case 125:
2824#line 1295 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2825{ // Vector 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())
Reid Spencer9d6565a2007-02-15 02:26:10 +00002830 GEN_ERROR("Element type of a VectorType must be primitive");
Chris Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +00002833 yyval.TypeVal = new PATypeHolder(HandleUpRefs(VectorType::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 Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +00002922 yyval.TypeWithAttrsList->push_back(TWA);
Reid Spencer41dff5e2007-01-26 08:05:27 +00002923 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +00002932 yyval.TypeWithAttrsList->push_back(TWA);
Reid Spencer41dff5e2007-01-26 08:05:27 +00002933 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +00002981 (*yyvsp[-1].ConstVector)[i]->getType()->getDescription() + "'.");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00002982 }
2983
Chris Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +00003044 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription());
3045 const VectorType *PTy = dyn_cast<VectorType>(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 Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +00003063 (*yyvsp[-1].ConstVector)[i]->getType()->getDescription() + "'.");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003064 }
Reid Spencer41dff5e2007-01-26 08:05:27 +00003065
Chris Lattner32980692007-02-19 07:44:24 +00003066 yyval.ConstVal = ConstantVector::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 Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +00003077 (*yyvsp[-3].TypeVal)->getDescription() + "'");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003078
Chris Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +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())
Chris Lattner32980692007-02-19 07:44:24 +00003092 GEN_ERROR("Unpacked Initializer to vector type '" + STy->getDescription() + "'");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003093
Chris Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +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())
Chris Lattner32980692007-02-19 07:44:24 +00003114 GEN_ERROR("Unpacked Initializer to vector type '" + STy->getDescription() + "'");
Reid Spencer41dff5e2007-01-26 08:05:27 +00003115
Chris Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +00003127 (*yyvsp[-5].TypeVal)->getDescription() + "'");
Reid Spencer41dff5e2007-01-26 08:05:27 +00003128
Chris Lattner32980692007-02-19 07:44:24 +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 Lattner32980692007-02-19 07:44:24 +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())
Chris Lattner32980692007-02-19 07:44:24 +00003142 GEN_ERROR("Vector initializer to non-vector type '" +
3143 STy->getDescription() + "'");
Reid Spencer41dff5e2007-01-26 08:05:27 +00003144
Chris Lattner32980692007-02-19 07:44:24 +00003145 yyval.ConstVal = ConstantStruct::get(STy, *yyvsp[-2].ConstVector);
3146 delete yyvsp[-5].TypeVal; delete yyvsp[-2].ConstVector;
Reid Spencer41dff5e2007-01-26 08:05:27 +00003147 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00003148 ;
3149 break;}
3150case 148:
3151#line 1579 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3152{
Reid Spencer41dff5e2007-01-26 08:05:27 +00003153 if (!UpRefs.empty())
Chris Lattner32980692007-02-19 07:44:24 +00003154 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-4].TypeVal)->getDescription());
3155 const StructType *STy = dyn_cast<StructType>(yyvsp[-4].TypeVal->get());
Reid Spencer41dff5e2007-01-26 08:05:27 +00003156 if (STy == 0)
3157 GEN_ERROR("Cannot make struct constant with type: '" +
Chris Lattner32980692007-02-19 07:44:24 +00003158 (*yyvsp[-4].TypeVal)->getDescription() + "'");
Reid Spencer41dff5e2007-01-26 08:05:27 +00003159
3160 if (STy->getNumContainedTypes() != 0)
Reid Spencerb5334b02007-02-05 10:18:06 +00003161 GEN_ERROR("Illegal number of initializers for structure type");
Reid Spencer41dff5e2007-01-26 08:05:27 +00003162
3163 // Check to ensure that Type is packed
3164 if (!STy->isPacked())
Chris Lattner32980692007-02-19 07:44:24 +00003165 GEN_ERROR("Vector initializer to non-vector type '" +
3166 STy->getDescription() + "'");
Reid Spencer41dff5e2007-01-26 08:05:27 +00003167
Chris Lattner32980692007-02-19 07:44:24 +00003168 yyval.ConstVal = ConstantStruct::get(STy, std::vector<Constant*>());
3169 delete yyvsp[-4].TypeVal;
Reid Spencer41dff5e2007-01-26 08:05:27 +00003170 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00003171 ;
3172 break;}
3173case 149:
3174#line 1599 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3175{
Reid Spencer41dff5e2007-01-26 08:05:27 +00003176 if (!UpRefs.empty())
Chris Lattner32980692007-02-19 07:44:24 +00003177 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
3178 const PointerType *PTy = dyn_cast<PointerType>(yyvsp[-1].TypeVal->get());
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003179 if (PTy == 0)
3180 GEN_ERROR("Cannot make null pointer constant with type: '" +
Chris Lattner32980692007-02-19 07:44:24 +00003181 (*yyvsp[-1].TypeVal)->getDescription() + "'");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003182
Chris Lattner32980692007-02-19 07:44:24 +00003183 yyval.ConstVal = ConstantPointerNull::get(PTy);
3184 delete yyvsp[-1].TypeVal;
Reid Spencer41dff5e2007-01-26 08:05:27 +00003185 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00003186 ;
3187 break;}
3188case 150:
3189#line 1611 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3190{
Reid Spencer41dff5e2007-01-26 08:05:27 +00003191 if (!UpRefs.empty())
Chris Lattner32980692007-02-19 07:44:24 +00003192 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
3193 yyval.ConstVal = UndefValue::get(yyvsp[-1].TypeVal->get());
3194 delete yyvsp[-1].TypeVal;
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003195 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00003196 ;
3197 break;}
3198case 151:
3199#line 1618 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3200{
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003201 if (!UpRefs.empty())
Chris Lattner32980692007-02-19 07:44:24 +00003202 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
3203 const PointerType *Ty = dyn_cast<PointerType>(yyvsp[-1].TypeVal->get());
Reid Spencer68a24bd2005-08-27 18:50:39 +00003204 if (Ty == 0)
Reid Spencerb5334b02007-02-05 10:18:06 +00003205 GEN_ERROR("Global const reference must be a pointer type");
Reid Spencer68a24bd2005-08-27 18:50:39 +00003206
3207 // ConstExprs can exist in the body of a function, thus creating
3208 // GlobalValues whenever they refer to a variable. Because we are in
3209 // the context of a function, getValNonImprovising will search the functions
3210 // symbol table instead of the module symbol table for the global symbol,
3211 // which throws things all off. To get around this, we just tell
3212 // getValNonImprovising that we are at global scope here.
3213 //
3214 Function *SavedCurFn = CurFun.CurrentFunction;
3215 CurFun.CurrentFunction = 0;
3216
Chris Lattner32980692007-02-19 07:44:24 +00003217 Value *V = getValNonImprovising(Ty, yyvsp[0].ValIDVal);
Reid Spencer5b7e7532006-09-28 19:28:24 +00003218 CHECK_FOR_ERROR
Reid Spencer68a24bd2005-08-27 18:50:39 +00003219
3220 CurFun.CurrentFunction = SavedCurFn;
3221
3222 // If this is an initializer for a constant pointer, which is referencing a
3223 // (currently) undefined variable, create a stub now that shall be replaced
3224 // in the future with the right type of variable.
3225 //
3226 if (V == 0) {
Reid Spencera9720f52007-02-05 17:04:00 +00003227 assert(isa<PointerType>(Ty) && "Globals may only be used as pointers!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00003228 const PointerType *PT = cast<PointerType>(Ty);
3229
3230 // First check to see if the forward references value is already created!
3231 PerModuleInfo::GlobalRefsType::iterator I =
Chris Lattner32980692007-02-19 07:44:24 +00003232 CurModule.GlobalRefs.find(std::make_pair(PT, yyvsp[0].ValIDVal));
Reid Spencer68a24bd2005-08-27 18:50:39 +00003233
3234 if (I != CurModule.GlobalRefs.end()) {
3235 V = I->second; // Placeholder already exists, use it...
Chris Lattner32980692007-02-19 07:44:24 +00003236 yyvsp[0].ValIDVal.destroy();
Reid Spencer68a24bd2005-08-27 18:50:39 +00003237 } else {
3238 std::string Name;
Chris Lattner32980692007-02-19 07:44:24 +00003239 if (yyvsp[0].ValIDVal.Type == ValID::GlobalName)
3240 Name = yyvsp[0].ValIDVal.Name;
3241 else if (yyvsp[0].ValIDVal.Type != ValID::GlobalID)
Reid Spencer41dff5e2007-01-26 08:05:27 +00003242 GEN_ERROR("Invalid reference to global");
Reid Spencer68a24bd2005-08-27 18:50:39 +00003243
3244 // Create the forward referenced global.
3245 GlobalValue *GV;
3246 if (const FunctionType *FTy =
3247 dyn_cast<FunctionType>(PT->getElementType())) {
3248 GV = new Function(FTy, GlobalValue::ExternalLinkage, Name,
3249 CurModule.CurrentModule);
3250 } else {
3251 GV = new GlobalVariable(PT->getElementType(), false,
3252 GlobalValue::ExternalLinkage, 0,
3253 Name, CurModule.CurrentModule);
3254 }
3255
3256 // Keep track of the fact that we have a forward ref to recycle it
Chris Lattner32980692007-02-19 07:44:24 +00003257 CurModule.GlobalRefs.insert(std::make_pair(std::make_pair(PT, yyvsp[0].ValIDVal), GV));
Reid Spencer68a24bd2005-08-27 18:50:39 +00003258 V = GV;
3259 }
3260 }
3261
Chris Lattner32980692007-02-19 07:44:24 +00003262 yyval.ConstVal = cast<GlobalValue>(V);
3263 delete yyvsp[-1].TypeVal; // Free the type handle
Reid Spencer61c83e02006-08-18 08:43:06 +00003264 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00003265 ;
3266 break;}
3267case 152:
3268#line 1684 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3269{
Reid Spencer14310612006-12-31 05:40:51 +00003270 if (!UpRefs.empty())
Chris Lattner32980692007-02-19 07:44:24 +00003271 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
3272 if (yyvsp[-1].TypeVal->get() != yyvsp[0].ConstVal->getType())
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003273 GEN_ERROR("Mismatched types for constant expression: " +
Chris Lattner32980692007-02-19 07:44:24 +00003274 (*yyvsp[-1].TypeVal)->getDescription() + " and " + yyvsp[0].ConstVal->getType()->getDescription());
3275 yyval.ConstVal = yyvsp[0].ConstVal;
3276 delete yyvsp[-1].TypeVal;
Reid Spencer41dff5e2007-01-26 08:05:27 +00003277 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00003278 ;
3279 break;}
3280case 153:
3281#line 1694 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3282{
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003283 if (!UpRefs.empty())
Chris Lattner32980692007-02-19 07:44:24 +00003284 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
3285 const Type *Ty = yyvsp[-1].TypeVal->get();
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003286 if (isa<FunctionType>(Ty) || Ty == Type::LabelTy || isa<OpaqueType>(Ty))
Reid Spencerb5334b02007-02-05 10:18:06 +00003287 GEN_ERROR("Cannot create a null initialized value of this type");
Chris Lattner32980692007-02-19 07:44:24 +00003288 yyval.ConstVal = Constant::getNullValue(Ty);
3289 delete yyvsp[-1].TypeVal;
Reid Spencer41dff5e2007-01-26 08:05:27 +00003290 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00003291 ;
3292 break;}
3293case 154:
3294#line 1704 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3295{ // integral constants
3296 if (!ConstantInt::isValueValidForType(yyvsp[-1].PrimType, yyvsp[0].SInt64Val))
Reid Spencerb5334b02007-02-05 10:18:06 +00003297 GEN_ERROR("Constant value doesn't fit in type");
Chris Lattner32980692007-02-19 07:44:24 +00003298 yyval.ConstVal = ConstantInt::get(yyvsp[-1].PrimType, yyvsp[0].SInt64Val);
Reid Spencer41dff5e2007-01-26 08:05:27 +00003299 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00003300 ;
3301 break;}
3302case 155:
3303#line 1710 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3304{ // integral constants
3305 if (!ConstantInt::isValueValidForType(yyvsp[-1].PrimType, yyvsp[0].UInt64Val))
Reid Spencerb5334b02007-02-05 10:18:06 +00003306 GEN_ERROR("Constant value doesn't fit in type");
Chris Lattner32980692007-02-19 07:44:24 +00003307 yyval.ConstVal = ConstantInt::get(yyvsp[-1].PrimType, yyvsp[0].UInt64Val);
Reid Spencer41dff5e2007-01-26 08:05:27 +00003308 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00003309 ;
3310 break;}
3311case 156:
3312#line 1716 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3313{ // Boolean constants
3314 assert(cast<IntegerType>(yyvsp[-1].PrimType)->getBitWidth() == 1 && "Not Bool?");
3315 yyval.ConstVal = ConstantInt::getTrue();
Reid Spencer41dff5e2007-01-26 08:05:27 +00003316 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00003317 ;
3318 break;}
3319case 157:
3320#line 1721 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3321{ // Boolean constants
3322 assert(cast<IntegerType>(yyvsp[-1].PrimType)->getBitWidth() == 1 && "Not Bool?");
3323 yyval.ConstVal = ConstantInt::getFalse();
Reid Spencer41dff5e2007-01-26 08:05:27 +00003324 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00003325 ;
3326 break;}
3327case 158:
3328#line 1726 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3329{ // Float & Double constants
3330 if (!ConstantFP::isValueValidForType(yyvsp[-1].PrimType, yyvsp[0].FPVal))
Reid Spencerb5334b02007-02-05 10:18:06 +00003331 GEN_ERROR("Floating point constant invalid for type");
Chris Lattner32980692007-02-19 07:44:24 +00003332 yyval.ConstVal = ConstantFP::get(yyvsp[-1].PrimType, yyvsp[0].FPVal);
Reid Spencer6f407902007-01-13 05:00:46 +00003333 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00003334 ;
3335 break;}
3336case 159:
3337#line 1734 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3338{
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003339 if (!UpRefs.empty())
Chris Lattner32980692007-02-19 07:44:24 +00003340 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
3341 Constant *Val = yyvsp[-3].ConstVal;
3342 const Type *DestTy = yyvsp[-1].TypeVal->get();
3343 if (!CastInst::castIsValid(yyvsp[-5].CastOpVal, yyvsp[-3].ConstVal, DestTy))
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003344 GEN_ERROR("invalid cast opcode for cast from '" +
3345 Val->getType()->getDescription() + "' to '" +
Reid Spencerb5334b02007-02-05 10:18:06 +00003346 DestTy->getDescription() + "'");
Chris Lattner32980692007-02-19 07:44:24 +00003347 yyval.ConstVal = ConstantExpr::getCast(yyvsp[-5].CastOpVal, yyvsp[-3].ConstVal, DestTy);
3348 delete yyvsp[-1].TypeVal;
3349 ;
3350 break;}
3351case 160:
3352#line 1746 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3353{
3354 if (!isa<PointerType>(yyvsp[-2].ConstVal->getType()))
Reid Spencerb5334b02007-02-05 10:18:06 +00003355 GEN_ERROR("GetElementPtr requires a pointer operand");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003356
3357 const Type *IdxTy =
Chris Lattner32980692007-02-19 07:44:24 +00003358 GetElementPtrInst::getIndexedType(yyvsp[-2].ConstVal->getType(), &(*yyvsp[-1].ValueList)[0], yyvsp[-1].ValueList->size(),
Chris Lattner7d9801d2007-02-13 00:58:01 +00003359 true);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003360 if (!IdxTy)
Reid Spencerb5334b02007-02-05 10:18:06 +00003361 GEN_ERROR("Index list invalid for constant getelementptr");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003362
Chris Lattnerf7469af2007-01-31 04:44:08 +00003363 SmallVector<Constant*, 8> IdxVec;
Chris Lattner32980692007-02-19 07:44:24 +00003364 for (unsigned i = 0, e = yyvsp[-1].ValueList->size(); i != e; ++i)
3365 if (Constant *C = dyn_cast<Constant>((*yyvsp[-1].ValueList)[i]))
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003366 IdxVec.push_back(C);
3367 else
Reid Spencerb5334b02007-02-05 10:18:06 +00003368 GEN_ERROR("Indices to constant getelementptr must be constants");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003369
Chris Lattner32980692007-02-19 07:44:24 +00003370 delete yyvsp[-1].ValueList;
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003371
Chris Lattner32980692007-02-19 07:44:24 +00003372 yyval.ConstVal = ConstantExpr::getGetElementPtr(yyvsp[-2].ConstVal, &IdxVec[0], IdxVec.size());
Andrew Lenharth6353e052006-12-08 18:07:09 +00003373 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00003374 ;
3375 break;}
3376case 161:
3377#line 1768 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3378{
3379 if (yyvsp[-5].ConstVal->getType() != Type::Int1Ty)
Reid Spencerb5334b02007-02-05 10:18:06 +00003380 GEN_ERROR("Select condition must be of boolean type");
Chris Lattner32980692007-02-19 07:44:24 +00003381 if (yyvsp[-3].ConstVal->getType() != yyvsp[-1].ConstVal->getType())
Reid Spencerb5334b02007-02-05 10:18:06 +00003382 GEN_ERROR("Select operand types must match");
Chris Lattner32980692007-02-19 07:44:24 +00003383 yyval.ConstVal = ConstantExpr::getSelect(yyvsp[-5].ConstVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003384 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00003385 ;
3386 break;}
3387case 162:
3388#line 1776 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3389{
3390 if (yyvsp[-3].ConstVal->getType() != yyvsp[-1].ConstVal->getType())
Reid Spencerb5334b02007-02-05 10:18:06 +00003391 GEN_ERROR("Binary operator types must match");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003392 CHECK_FOR_ERROR;
Chris Lattner32980692007-02-19 07:44:24 +00003393 yyval.ConstVal = ConstantExpr::get(yyvsp[-5].BinaryOpVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
3394 ;
3395 break;}
3396case 163:
3397#line 1782 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3398{
3399 if (yyvsp[-3].ConstVal->getType() != yyvsp[-1].ConstVal->getType())
Reid Spencerb5334b02007-02-05 10:18:06 +00003400 GEN_ERROR("Logical operator types must match");
Chris Lattner32980692007-02-19 07:44:24 +00003401 if (!yyvsp[-3].ConstVal->getType()->isInteger()) {
3402 if (Instruction::isShift(yyvsp[-5].BinaryOpVal) || !isa<VectorType>(yyvsp[-3].ConstVal->getType()) ||
3403 !cast<VectorType>(yyvsp[-3].ConstVal->getType())->getElementType()->isInteger())
Reid Spencerb5334b02007-02-05 10:18:06 +00003404 GEN_ERROR("Logical operator requires integral operands");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003405 }
Chris Lattner32980692007-02-19 07:44:24 +00003406 yyval.ConstVal = ConstantExpr::get(yyvsp[-5].BinaryOpVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
Reid Spencer41dff5e2007-01-26 08:05:27 +00003407 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00003408 ;
3409 break;}
3410case 164:
3411#line 1793 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3412{
3413 if (yyvsp[-3].ConstVal->getType() != yyvsp[-1].ConstVal->getType())
Reid Spencerb5334b02007-02-05 10:18:06 +00003414 GEN_ERROR("icmp operand types must match");
Chris Lattner32980692007-02-19 07:44:24 +00003415 yyval.ConstVal = ConstantExpr::getICmp(yyvsp[-5].IPredicate, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
3416 ;
3417 break;}
3418case 165:
3419#line 1798 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3420{
3421 if (yyvsp[-3].ConstVal->getType() != yyvsp[-1].ConstVal->getType())
Reid Spencerb5334b02007-02-05 10:18:06 +00003422 GEN_ERROR("fcmp operand types must match");
Chris Lattner32980692007-02-19 07:44:24 +00003423 yyval.ConstVal = ConstantExpr::getFCmp(yyvsp[-5].FPredicate, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
3424 ;
3425 break;}
3426case 166:
3427#line 1803 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3428{
3429 if (!ExtractElementInst::isValidOperands(yyvsp[-3].ConstVal, yyvsp[-1].ConstVal))
Reid Spencerb5334b02007-02-05 10:18:06 +00003430 GEN_ERROR("Invalid extractelement operands");
Chris Lattner32980692007-02-19 07:44:24 +00003431 yyval.ConstVal = ConstantExpr::getExtractElement(yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
Reid Spencer41dff5e2007-01-26 08:05:27 +00003432 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00003433 ;
3434 break;}
3435case 167:
3436#line 1809 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3437{
3438 if (!InsertElementInst::isValidOperands(yyvsp[-5].ConstVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal))
Reid Spencerb5334b02007-02-05 10:18:06 +00003439 GEN_ERROR("Invalid insertelement operands");
Chris Lattner32980692007-02-19 07:44:24 +00003440 yyval.ConstVal = ConstantExpr::getInsertElement(yyvsp[-5].ConstVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
Reid Spencer41dff5e2007-01-26 08:05:27 +00003441 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00003442 ;
3443 break;}
3444case 168:
3445#line 1815 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3446{
3447 if (!ShuffleVectorInst::isValidOperands(yyvsp[-5].ConstVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal))
Reid Spencerb5334b02007-02-05 10:18:06 +00003448 GEN_ERROR("Invalid shufflevector operands");
Chris Lattner32980692007-02-19 07:44:24 +00003449 yyval.ConstVal = ConstantExpr::getShuffleVector(yyvsp[-5].ConstVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
Reid Spencer41dff5e2007-01-26 08:05:27 +00003450 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00003451 ;
3452 break;}
3453case 169:
3454#line 1824 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3455{
3456 (yyval.ConstVector = yyvsp[-2].ConstVector)->push_back(yyvsp[0].ConstVal);
Reid Spencer41dff5e2007-01-26 08:05:27 +00003457 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00003458 ;
3459 break;}
3460case 170:
3461#line 1828 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3462{
3463 yyval.ConstVector = new std::vector<Constant*>();
3464 yyval.ConstVector->push_back(yyvsp[0].ConstVal);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003465 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00003466 ;
3467 break;}
3468case 171:
3469#line 1836 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3470{ yyval.BoolVal = false; ;
3471 break;}
3472case 172:
3473#line 1836 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3474{ yyval.BoolVal = true; ;
3475 break;}
3476case 173:
3477#line 1847 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3478{
3479 yyval.ModuleVal = ParserResult = CurModule.CurrentModule;
Reid Spencer41dff5e2007-01-26 08:05:27 +00003480 CurModule.ModuleDone();
3481 CHECK_FOR_ERROR;
Chris Lattner32980692007-02-19 07:44:24 +00003482 ;
3483 break;}
3484case 174:
3485#line 1852 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3486{
3487 yyval.ModuleVal = ParserResult = CurModule.CurrentModule;
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003488 CurModule.ModuleDone();
3489 CHECK_FOR_ERROR;
Chris Lattner32980692007-02-19 07:44:24 +00003490 ;
3491 break;}
3492case 177:
3493#line 1865 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3494{ CurFun.isDeclare = false; ;
3495 break;}
3496case 178:
3497#line 1865 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3498{
Reid Spencer41dff5e2007-01-26 08:05:27 +00003499 CurFun.FunctionDone();
3500 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00003501 ;
3502 break;}
3503case 179:
3504#line 1869 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3505{ CurFun.isDeclare = true; ;
3506 break;}
3507case 180:
3508#line 1869 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3509{
Reid Spencer41dff5e2007-01-26 08:05:27 +00003510 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00003511 ;
3512 break;}
3513case 181:
3514#line 1872 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3515{
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003516 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00003517 ;
3518 break;}
3519case 182:
3520#line 1875 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3521{
Reid Spencer68a24bd2005-08-27 18:50:39 +00003522 // Emit an error if there are any unresolved types left.
3523 if (!CurModule.LateResolveTypes.empty()) {
3524 const ValID &DID = CurModule.LateResolveTypes.begin()->first;
Reid Spencer41dff5e2007-01-26 08:05:27 +00003525 if (DID.Type == ValID::LocalName) {
Reid Spencer61c83e02006-08-18 08:43:06 +00003526 GEN_ERROR("Reference to an undefined type: '"+DID.getName() + "'");
3527 } else {
3528 GEN_ERROR("Reference to an undefined type: #" + itostr(DID.Num));
3529 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00003530 }
Reid Spencer61c83e02006-08-18 08:43:06 +00003531 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00003532 ;
3533 break;}
3534case 183:
3535#line 1887 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3536{
Reid Spencer14310612006-12-31 05:40:51 +00003537 if (!UpRefs.empty())
Chris Lattner32980692007-02-19 07:44:24 +00003538 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[0].TypeVal)->getDescription());
Reid Spencer68a24bd2005-08-27 18:50:39 +00003539 // Eagerly resolve types. This is not an optimization, this is a
3540 // requirement that is due to the fact that we could have this:
3541 //
3542 // %list = type { %list * }
3543 // %list = type { %list * } ; repeated type decl
3544 //
3545 // If types are not resolved eagerly, then the two types will not be
3546 // determined to be the same type!
3547 //
Chris Lattner32980692007-02-19 07:44:24 +00003548 ResolveTypeTo(yyvsp[-2].StrVal, *yyvsp[0].TypeVal);
Reid Spencer68a24bd2005-08-27 18:50:39 +00003549
Chris Lattner32980692007-02-19 07:44:24 +00003550 if (!setTypeName(*yyvsp[0].TypeVal, yyvsp[-2].StrVal) && !yyvsp[-2].StrVal) {
Reid Spencer5b7e7532006-09-28 19:28:24 +00003551 CHECK_FOR_ERROR
Reid Spencer68a24bd2005-08-27 18:50:39 +00003552 // If this is a named type that is not a redefinition, add it to the slot
3553 // table.
Chris Lattner32980692007-02-19 07:44:24 +00003554 CurModule.Types.push_back(*yyvsp[0].TypeVal);
Reid Spencer68a24bd2005-08-27 18:50:39 +00003555 }
Reid Spencera132e042006-12-03 05:46:11 +00003556
Chris Lattner32980692007-02-19 07:44:24 +00003557 delete yyvsp[0].TypeVal;
Reid Spencere4d87aa2006-12-23 06:05:41 +00003558 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00003559 ;
3560 break;}
3561case 184:
3562#line 1911 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3563{
3564 ResolveTypeTo(yyvsp[-2].StrVal, yyvsp[0].PrimType);
Reid Spencerb0fcf8f2007-01-17 02:48:45 +00003565
Chris Lattner32980692007-02-19 07:44:24 +00003566 if (!setTypeName(yyvsp[0].PrimType, yyvsp[-2].StrVal) && !yyvsp[-2].StrVal) {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003567 CHECK_FOR_ERROR
3568 // If this is a named type that is not a redefinition, add it to the slot
3569 // table.
Chris Lattner32980692007-02-19 07:44:24 +00003570 CurModule.Types.push_back(yyvsp[0].PrimType);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003571 }
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003572 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00003573 ;
3574 break;}
3575case 185:
3576#line 1922 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3577{
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003578 /* "Externally Visible" Linkage */
Chris Lattner32980692007-02-19 07:44:24 +00003579 if (yyvsp[0].ConstVal == 0)
Reid Spencerb5334b02007-02-05 10:18:06 +00003580 GEN_ERROR("Global value initializer is not a constant");
Chris Lattner32980692007-02-19 07:44:24 +00003581 CurGV = ParseGlobalVariable(yyvsp[-3].StrVal, GlobalValue::ExternalLinkage,
3582 yyvsp[-2].Visibility, yyvsp[-1].BoolVal, yyvsp[0].ConstVal->getType(), yyvsp[0].ConstVal);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003583 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00003584 ;
3585 break;}
3586case 186:
3587#line 1929 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3588{
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003589 CurGV = 0;
Chris Lattner32980692007-02-19 07:44:24 +00003590 ;
3591 break;}
3592case 187:
3593#line 1932 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3594{
3595 if (yyvsp[0].ConstVal == 0)
Reid Spencerb5334b02007-02-05 10:18:06 +00003596 GEN_ERROR("Global value initializer is not a constant");
Chris Lattner32980692007-02-19 07:44:24 +00003597 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 +00003598 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00003599 ;
3600 break;}
3601case 188:
3602#line 1937 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3603{
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003604 CurGV = 0;
Chris Lattner32980692007-02-19 07:44:24 +00003605 ;
3606 break;}
3607case 189:
3608#line 1940 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3609{
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003610 if (!UpRefs.empty())
Chris Lattner32980692007-02-19 07:44:24 +00003611 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[0].TypeVal)->getDescription());
3612 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 +00003613 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00003614 delete yyvsp[0].TypeVal;
3615 ;
3616 break;}
3617case 190:
3618#line 1946 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3619{
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003620 CurGV = 0;
Reid Spencer41dff5e2007-01-26 08:05:27 +00003621 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00003622 ;
3623 break;}
3624case 191:
3625#line 1950 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3626{
Reid Spencer41dff5e2007-01-26 08:05:27 +00003627 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00003628 ;
3629 break;}
3630case 192:
3631#line 1953 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3632{
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003633 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00003634 ;
3635 break;}
3636case 193:
3637#line 1959 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3638{
Chris Lattner66316012006-01-24 04:14:29 +00003639 const std::string &AsmSoFar = CurModule.CurrentModule->getModuleInlineAsm();
Chris Lattner32980692007-02-19 07:44:24 +00003640 char *EndStr = UnEscapeLexed(yyvsp[0].StrVal, true);
3641 std::string NewAsm(yyvsp[0].StrVal, EndStr);
3642 free(yyvsp[0].StrVal);
Chris Lattner66316012006-01-24 04:14:29 +00003643
3644 if (AsmSoFar.empty())
3645 CurModule.CurrentModule->setModuleInlineAsm(NewAsm);
3646 else
3647 CurModule.CurrentModule->setModuleInlineAsm(AsmSoFar+"\n"+NewAsm);
Reid Spencer61c83e02006-08-18 08:43:06 +00003648 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00003649;
3650 break;}
3651case 194:
3652#line 1972 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3653{
3654 CurModule.CurrentModule->setTargetTriple(yyvsp[0].StrVal);
3655 free(yyvsp[0].StrVal);
3656 ;
3657 break;}
3658case 195:
3659#line 1976 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3660{
3661 CurModule.CurrentModule->setDataLayout(yyvsp[0].StrVal);
3662 free(yyvsp[0].StrVal);
3663 ;
3664 break;}
3665case 197:
3666#line 1983 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3667{
3668 CurModule.CurrentModule->addLibrary(yyvsp[0].StrVal);
3669 free(yyvsp[0].StrVal);
Reid Spencer41dff5e2007-01-26 08:05:27 +00003670 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00003671 ;
3672 break;}
3673case 198:
3674#line 1988 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3675{
3676 CurModule.CurrentModule->addLibrary(yyvsp[0].StrVal);
3677 free(yyvsp[0].StrVal);
Reid Spencera54b7cb2007-01-12 07:05:14 +00003678 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00003679 ;
3680 break;}
3681case 199:
3682#line 1993 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3683{
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003684 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00003685 ;
3686 break;}
3687case 200:
3688#line 2002 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3689{
Reid Spencer41dff5e2007-01-26 08:05:27 +00003690 if (!UpRefs.empty())
Chris Lattner32980692007-02-19 07:44:24 +00003691 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription());
3692 if (*yyvsp[-2].TypeVal == Type::VoidTy)
Reid Spencerb5334b02007-02-05 10:18:06 +00003693 GEN_ERROR("void typed arguments are invalid");
Chris Lattner32980692007-02-19 07:44:24 +00003694 ArgListEntry E; E.Attrs = yyvsp[-1].ParamAttrs; E.Ty = yyvsp[-2].TypeVal; E.Name = yyvsp[0].StrVal;
3695 yyval.ArgList = yyvsp[-4].ArgList;
3696 yyvsp[-4].ArgList->push_back(E);
Reid Spencer41dff5e2007-01-26 08:05:27 +00003697 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00003698 ;
3699 break;}
3700case 201:
3701#line 2012 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3702{
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003703 if (!UpRefs.empty())
Chris Lattner32980692007-02-19 07:44:24 +00003704 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription());
3705 if (*yyvsp[-2].TypeVal == Type::VoidTy)
Reid Spencerb5334b02007-02-05 10:18:06 +00003706 GEN_ERROR("void typed arguments are invalid");
Chris Lattner32980692007-02-19 07:44:24 +00003707 ArgListEntry E; E.Attrs = yyvsp[-1].ParamAttrs; E.Ty = yyvsp[-2].TypeVal; E.Name = yyvsp[0].StrVal;
3708 yyval.ArgList = new ArgListType;
3709 yyval.ArgList->push_back(E);
Reid Spencer61c83e02006-08-18 08:43:06 +00003710 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00003711 ;
3712 break;}
3713case 202:
3714#line 2023 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3715{
3716 yyval.ArgList = yyvsp[0].ArgList;
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003717 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00003718 ;
3719 break;}
3720case 203:
3721#line 2027 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3722{
3723 yyval.ArgList = yyvsp[-2].ArgList;
Reid Spencer41dff5e2007-01-26 08:05:27 +00003724 struct ArgListEntry E;
3725 E.Ty = new PATypeHolder(Type::VoidTy);
3726 E.Name = 0;
3727 E.Attrs = FunctionType::NoAttributeSet;
Chris Lattner32980692007-02-19 07:44:24 +00003728 yyval.ArgList->push_back(E);
Reid Spencer6f407902007-01-13 05:00:46 +00003729 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00003730 ;
3731 break;}
3732case 204:
3733#line 2036 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3734{
3735 yyval.ArgList = new ArgListType;
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003736 struct ArgListEntry E;
3737 E.Ty = new PATypeHolder(Type::VoidTy);
3738 E.Name = 0;
3739 E.Attrs = FunctionType::NoAttributeSet;
Chris Lattner32980692007-02-19 07:44:24 +00003740 yyval.ArgList->push_back(E);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003741 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00003742 ;
3743 break;}
3744case 205:
3745#line 2045 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3746{
3747 yyval.ArgList = 0;
Reid Spencer61c83e02006-08-18 08:43:06 +00003748 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00003749 ;
3750 break;}
3751case 206:
3752#line 2051 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3753{
3754 UnEscapeLexed(yyvsp[-6].StrVal);
3755 std::string FunctionName(yyvsp[-6].StrVal);
3756 free(yyvsp[-6].StrVal); // Free strdup'd memory!
Reid Spencer68a24bd2005-08-27 18:50:39 +00003757
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003758 // Check the function result for abstractness if this is a define. We should
3759 // have no abstract types at this point
Chris Lattner32980692007-02-19 07:44:24 +00003760 if (!CurFun.isDeclare && CurModule.TypeIsUnresolved(yyvsp[-7].TypeVal))
3761 GEN_ERROR("Reference to abstract result: "+ yyvsp[-7].TypeVal->get()->getDescription());
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003762
Reid Spencer68a24bd2005-08-27 18:50:39 +00003763 std::vector<const Type*> ParamTypeList;
Reid Spencer14310612006-12-31 05:40:51 +00003764 std::vector<FunctionType::ParameterAttributes> ParamAttrs;
Chris Lattner32980692007-02-19 07:44:24 +00003765 ParamAttrs.push_back(yyvsp[-2].ParamAttrs);
3766 if (yyvsp[-4].ArgList) { // If there are arguments...
3767 for (ArgListType::iterator I = yyvsp[-4].ArgList->begin(); I != yyvsp[-4].ArgList->end(); ++I) {
Reid Spencer14310612006-12-31 05:40:51 +00003768 const Type* Ty = I->Ty->get();
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003769 if (!CurFun.isDeclare && CurModule.TypeIsUnresolved(I->Ty))
3770 GEN_ERROR("Reference to abstract argument: " + Ty->getDescription());
Reid Spencer14310612006-12-31 05:40:51 +00003771 ParamTypeList.push_back(Ty);
3772 if (Ty != Type::VoidTy)
3773 ParamAttrs.push_back(I->Attrs);
3774 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00003775 }
3776
3777 bool isVarArg = ParamTypeList.size() && ParamTypeList.back() == Type::VoidTy;
3778 if (isVarArg) ParamTypeList.pop_back();
3779
Chris Lattner32980692007-02-19 07:44:24 +00003780 FunctionType *FT = FunctionType::get(*yyvsp[-7].TypeVal, ParamTypeList, isVarArg,
Reid Spencer14310612006-12-31 05:40:51 +00003781 ParamAttrs);
Reid Spencer68a24bd2005-08-27 18:50:39 +00003782 const PointerType *PFT = PointerType::get(FT);
Chris Lattner32980692007-02-19 07:44:24 +00003783 delete yyvsp[-7].TypeVal;
Reid Spencer68a24bd2005-08-27 18:50:39 +00003784
3785 ValID ID;
3786 if (!FunctionName.empty()) {
Reid Spencer41dff5e2007-01-26 08:05:27 +00003787 ID = ValID::createGlobalName((char*)FunctionName.c_str());
Reid Spencer68a24bd2005-08-27 18:50:39 +00003788 } else {
Reid Spencer41dff5e2007-01-26 08:05:27 +00003789 ID = ValID::createGlobalID(CurModule.Values[PFT].size());
Reid Spencer68a24bd2005-08-27 18:50:39 +00003790 }
3791
3792 Function *Fn = 0;
3793 // See if this function was forward referenced. If so, recycle the object.
3794 if (GlobalValue *FWRef = CurModule.GetForwardRefForGlobal(PFT, ID)) {
3795 // Move the function to the end of the list, from whereever it was
3796 // previously inserted.
3797 Fn = cast<Function>(FWRef);
3798 CurModule.CurrentModule->getFunctionList().remove(Fn);
3799 CurModule.CurrentModule->getFunctionList().push_back(Fn);
3800 } else if (!FunctionName.empty() && // Merge with an earlier prototype?
Reid Spenceref9b9a72007-02-05 20:47:22 +00003801 (Fn = CurModule.CurrentModule->getFunction(FunctionName))) {
3802 if (Fn->getFunctionType() != FT ) {
3803 // The existing function doesn't have the same type. This is an overload
3804 // error.
3805 GEN_ERROR("Overload of function '" + FunctionName + "' not permitted.");
3806 } else if (!CurFun.isDeclare && !Fn->isDeclaration()) {
3807 // Neither the existing or the current function is a declaration and they
3808 // have the same name and same type. Clearly this is a redefinition.
Reid Spencerb5334b02007-02-05 10:18:06 +00003809 GEN_ERROR("Redefinition of function '" + FunctionName + "'");
Reid Spenceref9b9a72007-02-05 20:47:22 +00003810 } if (Fn->isDeclaration()) {
3811 // Make sure to strip off any argument names so we can't get conflicts.
Reid Spencer68a24bd2005-08-27 18:50:39 +00003812 for (Function::arg_iterator AI = Fn->arg_begin(), AE = Fn->arg_end();
3813 AI != AE; ++AI)
3814 AI->setName("");
Reid Spenceref9b9a72007-02-05 20:47:22 +00003815 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00003816 } else { // Not already defined?
3817 Fn = new Function(FT, GlobalValue::ExternalLinkage, FunctionName,
3818 CurModule.CurrentModule);
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +00003819
Reid Spencer68a24bd2005-08-27 18:50:39 +00003820 InsertValue(Fn, CurModule.Values);
3821 }
3822
3823 CurFun.FunctionStart(Fn);
Anton Korobeynikov93c2b372006-09-17 13:06:18 +00003824
3825 if (CurFun.isDeclare) {
3826 // If we have declaration, always overwrite linkage. This will allow us to
3827 // correctly handle cases, when pointer to function is passed as argument to
3828 // another function.
3829 Fn->setLinkage(CurFun.Linkage);
Anton Korobeynikov178a3522007-01-12 19:22:51 +00003830 Fn->setVisibility(CurFun.Visibility);
Anton Korobeynikov93c2b372006-09-17 13:06:18 +00003831 }
Chris Lattner32980692007-02-19 07:44:24 +00003832 Fn->setCallingConv(yyvsp[-8].UIntVal);
3833 Fn->setAlignment(yyvsp[0].UIntVal);
3834 if (yyvsp[-1].StrVal) {
3835 Fn->setSection(yyvsp[-1].StrVal);
3836 free(yyvsp[-1].StrVal);
Chris Lattnere869eef2005-11-12 00:11:49 +00003837 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00003838
3839 // Add all of the arguments we parsed to the function...
Chris Lattner32980692007-02-19 07:44:24 +00003840 if (yyvsp[-4].ArgList) { // Is null if empty...
Reid Spencer68a24bd2005-08-27 18:50:39 +00003841 if (isVarArg) { // Nuke the last entry
Chris Lattner32980692007-02-19 07:44:24 +00003842 assert(yyvsp[-4].ArgList->back().Ty->get() == Type::VoidTy && yyvsp[-4].ArgList->back().Name == 0 &&
Reid Spencera9720f52007-02-05 17:04:00 +00003843 "Not a varargs marker!");
Chris Lattner32980692007-02-19 07:44:24 +00003844 delete yyvsp[-4].ArgList->back().Ty;
3845 yyvsp[-4].ArgList->pop_back(); // Delete the last entry
Reid Spencer68a24bd2005-08-27 18:50:39 +00003846 }
3847 Function::arg_iterator ArgIt = Fn->arg_begin();
Reid Spenceref9b9a72007-02-05 20:47:22 +00003848 Function::arg_iterator ArgEnd = Fn->arg_end();
Reid Spencer14310612006-12-31 05:40:51 +00003849 unsigned Idx = 1;
Chris Lattner32980692007-02-19 07:44:24 +00003850 for (ArgListType::iterator I = yyvsp[-4].ArgList->begin();
3851 I != yyvsp[-4].ArgList->end() && ArgIt != ArgEnd; ++I, ++ArgIt) {
Reid Spencer14310612006-12-31 05:40:51 +00003852 delete I->Ty; // Delete the typeholder...
Reid Spenceref9b9a72007-02-05 20:47:22 +00003853 setValueName(ArgIt, I->Name); // Insert arg into symtab...
Reid Spencer5b7e7532006-09-28 19:28:24 +00003854 CHECK_FOR_ERROR
Reid Spencer68a24bd2005-08-27 18:50:39 +00003855 InsertValue(ArgIt);
Reid Spencer14310612006-12-31 05:40:51 +00003856 Idx++;
Reid Spencer68a24bd2005-08-27 18:50:39 +00003857 }
Reid Spencera132e042006-12-03 05:46:11 +00003858
Chris Lattner32980692007-02-19 07:44:24 +00003859 delete yyvsp[-4].ArgList; // We're now done with the argument list
Reid Spencer68a24bd2005-08-27 18:50:39 +00003860 }
Reid Spencer61c83e02006-08-18 08:43:06 +00003861 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00003862;
3863 break;}
3864case 209:
3865#line 2164 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3866{
3867 yyval.FunctionVal = CurFun.CurrentFunction;
Reid Spencer68a24bd2005-08-27 18:50:39 +00003868
3869 // Make sure that we keep track of the linkage type even if there was a
3870 // previous "declare".
Chris Lattner32980692007-02-19 07:44:24 +00003871 yyval.FunctionVal->setLinkage(yyvsp[-3].Linkage);
3872 yyval.FunctionVal->setVisibility(yyvsp[-2].Visibility);
3873;
3874 break;}
3875case 212:
3876#line 2175 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3877{
3878 yyval.FunctionVal = yyvsp[-1].FunctionVal;
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003879 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00003880;
3881 break;}
3882case 213:
3883#line 2180 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3884{
3885 CurFun.CurrentFunction->setLinkage(yyvsp[-2].Linkage);
3886 CurFun.CurrentFunction->setVisibility(yyvsp[-1].Visibility);
3887 yyval.FunctionVal = CurFun.CurrentFunction;
Reid Spencer41dff5e2007-01-26 08:05:27 +00003888 CurFun.FunctionDone();
3889 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00003890 ;
3891 break;}
3892case 214:
3893#line 2192 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3894{
3895 yyval.BoolVal = false;
Reid Spencer41dff5e2007-01-26 08:05:27 +00003896 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00003897 ;
3898 break;}
3899case 215:
3900#line 2196 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3901{
3902 yyval.BoolVal = true;
Reid Spencer61c83e02006-08-18 08:43:06 +00003903 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00003904 ;
3905 break;}
3906case 216:
3907#line 2201 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3908{ // A reference to a direct constant
3909 yyval.ValIDVal = ValID::create(yyvsp[0].SInt64Val);
Reid Spencere4d87aa2006-12-23 06:05:41 +00003910 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00003911 ;
3912 break;}
3913case 217:
3914#line 2205 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3915{
3916 yyval.ValIDVal = ValID::create(yyvsp[0].UInt64Val);
Reid Spencer6f407902007-01-13 05:00:46 +00003917 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00003918 ;
3919 break;}
3920case 218:
3921#line 2209 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3922{ // Perhaps it's an FP constant?
3923 yyval.ValIDVal = ValID::create(yyvsp[0].FPVal);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003924 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00003925 ;
3926 break;}
3927case 219:
3928#line 2213 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3929{
3930 yyval.ValIDVal = ValID::create(ConstantInt::getTrue());
Reid Spencere4d87aa2006-12-23 06:05:41 +00003931 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00003932 ;
3933 break;}
3934case 220:
3935#line 2217 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3936{
3937 yyval.ValIDVal = ValID::create(ConstantInt::getFalse());
Reid Spencere4d87aa2006-12-23 06:05:41 +00003938 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00003939 ;
3940 break;}
3941case 221:
3942#line 2221 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3943{
3944 yyval.ValIDVal = ValID::createNull();
Zhou Sheng6b6b6ef2007-01-11 12:24:14 +00003945 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00003946 ;
3947 break;}
3948case 222:
3949#line 2225 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3950{
3951 yyval.ValIDVal = ValID::createUndef();
Zhou Sheng6b6b6ef2007-01-11 12:24:14 +00003952 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00003953 ;
3954 break;}
3955case 223:
3956#line 2229 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3957{ // A vector zero constant.
3958 yyval.ValIDVal = ValID::createZeroInit();
Reid Spencer61c83e02006-08-18 08:43:06 +00003959 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00003960 ;
3961 break;}
3962case 224:
3963#line 2233 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3964{ // Nonempty unsized packed vector
3965 const Type *ETy = (*yyvsp[-1].ConstVector)[0]->getType();
3966 int NumElements = yyvsp[-1].ConstVector->size();
Reid Spencer68a24bd2005-08-27 18:50:39 +00003967
Reid Spencer9d6565a2007-02-15 02:26:10 +00003968 VectorType* pt = VectorType::get(ETy, NumElements);
Reid Spencer68a24bd2005-08-27 18:50:39 +00003969 PATypeHolder* PTy = new PATypeHolder(
Reid Spencera132e042006-12-03 05:46:11 +00003970 HandleUpRefs(
Reid Spencer9d6565a2007-02-15 02:26:10 +00003971 VectorType::get(
Reid Spencera132e042006-12-03 05:46:11 +00003972 ETy,
3973 NumElements)
3974 )
3975 );
Reid Spencer68a24bd2005-08-27 18:50:39 +00003976
3977 // Verify all elements are correct type!
Chris Lattner32980692007-02-19 07:44:24 +00003978 for (unsigned i = 0; i < yyvsp[-1].ConstVector->size(); i++) {
3979 if (ETy != (*yyvsp[-1].ConstVector)[i]->getType())
Reid Spencer61c83e02006-08-18 08:43:06 +00003980 GEN_ERROR("Element #" + utostr(i) + " is not of type '" +
Reid Spencer68a24bd2005-08-27 18:50:39 +00003981 ETy->getDescription() +"' as required!\nIt is of type '" +
Chris Lattner32980692007-02-19 07:44:24 +00003982 (*yyvsp[-1].ConstVector)[i]->getType()->getDescription() + "'.");
Reid Spencer68a24bd2005-08-27 18:50:39 +00003983 }
3984
Chris Lattner32980692007-02-19 07:44:24 +00003985 yyval.ValIDVal = ValID::create(ConstantVector::get(pt, *yyvsp[-1].ConstVector));
3986 delete PTy; delete yyvsp[-1].ConstVector;
Reid Spencer41dff5e2007-01-26 08:05:27 +00003987 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00003988 ;
3989 break;}
3990case 225:
3991#line 2258 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3992{
3993 yyval.ValIDVal = ValID::create(yyvsp[0].ConstVal);
Anton Korobeynikov178a3522007-01-12 19:22:51 +00003994 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00003995 ;
3996 break;}
3997case 226:
3998#line 2262 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3999{
4000 char *End = UnEscapeLexed(yyvsp[-2].StrVal, true);
4001 std::string AsmStr = std::string(yyvsp[-2].StrVal, End);
4002 End = UnEscapeLexed(yyvsp[0].StrVal, true);
4003 std::string Constraints = std::string(yyvsp[0].StrVal, End);
4004 yyval.ValIDVal = ValID::createInlineAsm(AsmStr, Constraints, yyvsp[-3].BoolVal);
4005 free(yyvsp[-2].StrVal);
4006 free(yyvsp[0].StrVal);
Reid Spencer832254e2007-02-02 02:16:23 +00004007 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00004008 ;
4009 break;}
4010case 227:
4011#line 2276 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4012{ // Is it an integer reference...?
4013 yyval.ValIDVal = ValID::createLocalID(yyvsp[0].UIntVal);
Reid Spencer832254e2007-02-02 02:16:23 +00004014 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00004015 ;
4016 break;}
4017case 228:
4018#line 2280 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4019{
4020 yyval.ValIDVal = ValID::createGlobalID(yyvsp[0].UIntVal);
Reid Spencer832254e2007-02-02 02:16:23 +00004021 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00004022 ;
4023 break;}
4024case 229:
4025#line 2284 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4026{ // Is it a named reference...?
4027 yyval.ValIDVal = ValID::createLocalName(yyvsp[0].StrVal);
Reid Spencer832254e2007-02-02 02:16:23 +00004028 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00004029 ;
4030 break;}
4031case 230:
4032#line 2288 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4033{ // Is it a named reference...?
4034 yyval.ValIDVal = ValID::createGlobalName(yyvsp[0].StrVal);
Reid Spencer832254e2007-02-02 02:16:23 +00004035 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00004036 ;
4037 break;}
4038case 233:
4039#line 2300 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4040{
Reid Spencer832254e2007-02-02 02:16:23 +00004041 if (!UpRefs.empty())
Chris Lattner32980692007-02-19 07:44:24 +00004042 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
4043 yyval.ValueVal = getVal(*yyvsp[-1].TypeVal, yyvsp[0].ValIDVal);
4044 delete yyvsp[-1].TypeVal;
Reid Spencer832254e2007-02-02 02:16:23 +00004045 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00004046 ;
4047 break;}
4048case 234:
4049#line 2309 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4050{
4051 yyval.FunctionVal = yyvsp[-1].FunctionVal;
Reid Spencer832254e2007-02-02 02:16:23 +00004052 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00004053 ;
4054 break;}
4055case 235:
4056#line 2313 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4057{ // Do not allow functions with 0 basic blocks
4058 yyval.FunctionVal = yyvsp[-1].FunctionVal;
Reid Spencer832254e2007-02-02 02:16:23 +00004059 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00004060 ;
4061 break;}
4062case 236:
4063#line 2322 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4064{
4065 setValueName(yyvsp[0].TermInstVal, yyvsp[-1].StrVal);
Reid Spencer832254e2007-02-02 02:16:23 +00004066 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00004067 InsertValue(yyvsp[0].TermInstVal);
4068 yyvsp[-2].BasicBlockVal->getInstList().push_back(yyvsp[0].TermInstVal);
4069 InsertValue(yyvsp[-2].BasicBlockVal);
4070 yyval.BasicBlockVal = yyvsp[-2].BasicBlockVal;
Reid Spencer832254e2007-02-02 02:16:23 +00004071 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00004072 ;
4073 break;}
4074case 237:
4075#line 2332 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4076{
4077 if (CastInst *CI1 = dyn_cast<CastInst>(yyvsp[0].InstVal))
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004078 if (CastInst *CI2 = dyn_cast<CastInst>(CI1->getOperand(0)))
4079 if (CI2->getParent() == 0)
Chris Lattner32980692007-02-19 07:44:24 +00004080 yyvsp[-1].BasicBlockVal->getInstList().push_back(CI2);
4081 yyvsp[-1].BasicBlockVal->getInstList().push_back(yyvsp[0].InstVal);
4082 yyval.BasicBlockVal = yyvsp[-1].BasicBlockVal;
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004083 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00004084 ;
4085 break;}
4086case 238:
4087#line 2341 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4088{
4089 yyval.BasicBlockVal = getBBVal(ValID::createLocalID(CurFun.NextBBNum++), true);
Reid Spencere4d87aa2006-12-23 06:05:41 +00004090 CHECK_FOR_ERROR
4091
4092 // Make sure to move the basic block to the correct location in the
4093 // function, instead of leaving it inserted wherever it was first
4094 // referenced.
4095 Function::BasicBlockListType &BBL =
4096 CurFun.CurrentFunction->getBasicBlockList();
Chris Lattner32980692007-02-19 07:44:24 +00004097 BBL.splice(BBL.end(), BBL, yyval.BasicBlockVal);
Reid Spencere4d87aa2006-12-23 06:05:41 +00004098 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00004099 ;
4100 break;}
4101case 239:
4102#line 2353 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4103{
4104 yyval.BasicBlockVal = getBBVal(ValID::createLocalName(yyvsp[0].StrVal), true);
Reid Spencere4d87aa2006-12-23 06:05:41 +00004105 CHECK_FOR_ERROR
4106
4107 // Make sure to move the basic block to the correct location in the
4108 // function, instead of leaving it inserted wherever it was first
4109 // referenced.
4110 Function::BasicBlockListType &BBL =
4111 CurFun.CurrentFunction->getBasicBlockList();
Chris Lattner32980692007-02-19 07:44:24 +00004112 BBL.splice(BBL.end(), BBL, yyval.BasicBlockVal);
Reid Spencer3822ff52006-11-08 06:47:33 +00004113 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00004114 ;
4115 break;}
4116case 240:
4117#line 2366 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4118{ // Return with a result...
4119 yyval.TermInstVal = new ReturnInst(yyvsp[0].ValueVal);
4120 CHECK_FOR_ERROR
4121 ;
4122 break;}
4123case 241:
4124#line 2370 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4125{ // Return with no result...
4126 yyval.TermInstVal = new ReturnInst();
4127 CHECK_FOR_ERROR
4128 ;
4129 break;}
4130case 242:
4131#line 2374 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4132{ // Unconditional Branch...
4133 BasicBlock* tmpBB = getBBVal(yyvsp[0].ValIDVal);
4134 CHECK_FOR_ERROR
4135 yyval.TermInstVal = new BranchInst(tmpBB);
4136 ;
4137 break;}
4138case 243:
4139#line 2379 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4140{
4141 assert(cast<IntegerType>(yyvsp[-7].PrimType)->getBitWidth() == 1 && "Not Bool?");
4142 BasicBlock* tmpBBA = getBBVal(yyvsp[-3].ValIDVal);
4143 CHECK_FOR_ERROR
4144 BasicBlock* tmpBBB = getBBVal(yyvsp[0].ValIDVal);
4145 CHECK_FOR_ERROR
4146 Value* tmpVal = getVal(Type::Int1Ty, yyvsp[-6].ValIDVal);
4147 CHECK_FOR_ERROR
4148 yyval.TermInstVal = new BranchInst(tmpBBA, tmpBBB, tmpVal);
4149 ;
4150 break;}
4151case 244:
4152#line 2389 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4153{
4154 Value* tmpVal = getVal(yyvsp[-7].PrimType, yyvsp[-6].ValIDVal);
4155 CHECK_FOR_ERROR
4156 BasicBlock* tmpBB = getBBVal(yyvsp[-3].ValIDVal);
4157 CHECK_FOR_ERROR
4158 SwitchInst *S = new SwitchInst(tmpVal, tmpBB, yyvsp[-1].JumpTable->size());
4159 yyval.TermInstVal = S;
Reid Spencer3822ff52006-11-08 06:47:33 +00004160
Chris Lattner32980692007-02-19 07:44:24 +00004161 std::vector<std::pair<Constant*,BasicBlock*> >::iterator I = yyvsp[-1].JumpTable->begin(),
4162 E = yyvsp[-1].JumpTable->end();
Reid Spencer68a24bd2005-08-27 18:50:39 +00004163 for (; I != E; ++I) {
4164 if (ConstantInt *CI = dyn_cast<ConstantInt>(I->first))
4165 S->addCase(CI, I->second);
4166 else
Reid Spencerb5334b02007-02-05 10:18:06 +00004167 GEN_ERROR("Switch case is constant, but not a simple integer");
Reid Spencer68a24bd2005-08-27 18:50:39 +00004168 }
Chris Lattner32980692007-02-19 07:44:24 +00004169 delete yyvsp[-1].JumpTable;
Reid Spencer61c83e02006-08-18 08:43:06 +00004170 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00004171 ;
4172 break;}
4173case 245:
4174#line 2408 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4175{
4176 Value* tmpVal = getVal(yyvsp[-6].PrimType, yyvsp[-5].ValIDVal);
Andrew Lenharth6353e052006-12-08 18:07:09 +00004177 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00004178 BasicBlock* tmpBB = getBBVal(yyvsp[-2].ValIDVal);
Andrew Lenharth6353e052006-12-08 18:07:09 +00004179 CHECK_FOR_ERROR
4180 SwitchInst *S = new SwitchInst(tmpVal, tmpBB, 0);
Chris Lattner32980692007-02-19 07:44:24 +00004181 yyval.TermInstVal = S;
Reid Spencer61c83e02006-08-18 08:43:06 +00004182 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00004183 ;
4184 break;}
4185case 246:
4186#line 2418 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4187{
Reid Spencer3822ff52006-11-08 06:47:33 +00004188
Reid Spencer14310612006-12-31 05:40:51 +00004189 // Handle the short syntax
4190 const PointerType *PFTy = 0;
4191 const FunctionType *Ty = 0;
Chris Lattner32980692007-02-19 07:44:24 +00004192 if (!(PFTy = dyn_cast<PointerType>(yyvsp[-11].TypeVal->get())) ||
Reid Spencer68a24bd2005-08-27 18:50:39 +00004193 !(Ty = dyn_cast<FunctionType>(PFTy->getElementType()))) {
4194 // Pull out the types of all of the arguments...
4195 std::vector<const Type*> ParamTypes;
Reid Spencer14310612006-12-31 05:40:51 +00004196 FunctionType::ParamAttrsList ParamAttrs;
Chris Lattner32980692007-02-19 07:44:24 +00004197 ParamAttrs.push_back(yyvsp[-6].ParamAttrs);
4198 for (ValueRefList::iterator I = yyvsp[-8].ValueRefList->begin(), E = yyvsp[-8].ValueRefList->end(); I != E; ++I) {
Reid Spencer14310612006-12-31 05:40:51 +00004199 const Type *Ty = I->Val->getType();
4200 if (Ty == Type::VoidTy)
4201 GEN_ERROR("Short call syntax cannot be used with varargs");
4202 ParamTypes.push_back(Ty);
4203 ParamAttrs.push_back(I->Attrs);
Reid Spencer68a24bd2005-08-27 18:50:39 +00004204 }
4205
Chris Lattner32980692007-02-19 07:44:24 +00004206 Ty = FunctionType::get(yyvsp[-11].TypeVal->get(), ParamTypes, false, ParamAttrs);
Reid Spencer68a24bd2005-08-27 18:50:39 +00004207 PFTy = PointerType::get(Ty);
4208 }
4209
Chris Lattner32980692007-02-19 07:44:24 +00004210 Value *V = getVal(PFTy, yyvsp[-10].ValIDVal); // Get the function we're calling...
Andrew Lenharth6353e052006-12-08 18:07:09 +00004211 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00004212 BasicBlock *Normal = getBBVal(yyvsp[-3].ValIDVal);
Andrew Lenharth6353e052006-12-08 18:07:09 +00004213 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00004214 BasicBlock *Except = getBBVal(yyvsp[0].ValIDVal);
Reid Spencer5b7e7532006-09-28 19:28:24 +00004215 CHECK_FOR_ERROR
Reid Spencer68a24bd2005-08-27 18:50:39 +00004216
Reid Spencer14310612006-12-31 05:40:51 +00004217 // Check the arguments
4218 ValueList Args;
Chris Lattner32980692007-02-19 07:44:24 +00004219 if (yyvsp[-8].ValueRefList->empty()) { // Has no arguments?
Reid Spencer14310612006-12-31 05:40:51 +00004220 // Make sure no arguments is a good thing!
4221 if (Ty->getNumParams() != 0)
4222 GEN_ERROR("No arguments passed to a function that "
Reid Spencerb5334b02007-02-05 10:18:06 +00004223 "expects arguments");
Reid Spencer68a24bd2005-08-27 18:50:39 +00004224 } else { // Has arguments?
4225 // Loop through FunctionType's arguments and ensure they are specified
4226 // correctly!
Reid Spencer68a24bd2005-08-27 18:50:39 +00004227 FunctionType::param_iterator I = Ty->param_begin();
4228 FunctionType::param_iterator E = Ty->param_end();
Chris Lattner32980692007-02-19 07:44:24 +00004229 ValueRefList::iterator ArgI = yyvsp[-8].ValueRefList->begin(), ArgE = yyvsp[-8].ValueRefList->end();
Reid Spencer68a24bd2005-08-27 18:50:39 +00004230
Reid Spencer14310612006-12-31 05:40:51 +00004231 for (; ArgI != ArgE && I != E; ++ArgI, ++I) {
4232 if (ArgI->Val->getType() != *I)
4233 GEN_ERROR("Parameter " + ArgI->Val->getName()+ " is not of type '" +
Reid Spencerb5334b02007-02-05 10:18:06 +00004234 (*I)->getDescription() + "'");
Reid Spencer14310612006-12-31 05:40:51 +00004235 Args.push_back(ArgI->Val);
4236 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00004237
Reid Spencer14310612006-12-31 05:40:51 +00004238 if (Ty->isVarArg()) {
4239 if (I == E)
4240 for (; ArgI != ArgE; ++ArgI)
4241 Args.push_back(ArgI->Val); // push the remaining varargs
4242 } else if (I != E || ArgI != ArgE)
Reid Spencerb5334b02007-02-05 10:18:06 +00004243 GEN_ERROR("Invalid number of parameters detected");
Reid Spencer68a24bd2005-08-27 18:50:39 +00004244 }
Reid Spencer14310612006-12-31 05:40:51 +00004245
4246 // Create the InvokeInst
Chris Lattner9d2fda62007-02-13 05:53:56 +00004247 InvokeInst *II = new InvokeInst(V, Normal, Except, &Args[0], Args.size());
Chris Lattner32980692007-02-19 07:44:24 +00004248 II->setCallingConv(yyvsp[-12].UIntVal);
4249 yyval.TermInstVal = II;
4250 delete yyvsp[-8].ValueRefList;
Andrew Lenharth6353e052006-12-08 18:07:09 +00004251 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00004252 ;
4253 break;}
4254case 247:
4255#line 2484 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4256{
4257 yyval.TermInstVal = new UnwindInst();
Andrew Lenharth6353e052006-12-08 18:07:09 +00004258 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00004259 ;
4260 break;}
4261case 248:
4262#line 2488 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4263{
4264 yyval.TermInstVal = new UnreachableInst();
Andrew Lenharth6353e052006-12-08 18:07:09 +00004265 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00004266 ;
4267 break;}
4268case 249:
4269#line 2495 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4270{
4271 yyval.JumpTable = yyvsp[-5].JumpTable;
4272 Constant *V = cast<Constant>(getValNonImprovising(yyvsp[-4].PrimType, yyvsp[-3].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00004273 CHECK_FOR_ERROR
4274 if (V == 0)
Reid Spencerb5334b02007-02-05 10:18:06 +00004275 GEN_ERROR("May only switch on a constant pool value");
Andrew Lenharth6353e052006-12-08 18:07:09 +00004276
Chris Lattner32980692007-02-19 07:44:24 +00004277 BasicBlock* tmpBB = getBBVal(yyvsp[0].ValIDVal);
Andrew Lenharth6353e052006-12-08 18:07:09 +00004278 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00004279 yyval.JumpTable->push_back(std::make_pair(V, tmpBB));
4280 ;
4281 break;}
4282case 250:
4283#line 2506 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4284{
4285 yyval.JumpTable = new std::vector<std::pair<Constant*, BasicBlock*> >();
4286 Constant *V = cast<Constant>(getValNonImprovising(yyvsp[-4].PrimType, yyvsp[-3].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00004287 CHECK_FOR_ERROR
4288
4289 if (V == 0)
Reid Spencerb5334b02007-02-05 10:18:06 +00004290 GEN_ERROR("May only switch on a constant pool value");
Andrew Lenharth6353e052006-12-08 18:07:09 +00004291
Chris Lattner32980692007-02-19 07:44:24 +00004292 BasicBlock* tmpBB = getBBVal(yyvsp[0].ValIDVal);
Andrew Lenharth6353e052006-12-08 18:07:09 +00004293 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00004294 yyval.JumpTable->push_back(std::make_pair(V, tmpBB));
4295 ;
4296 break;}
4297case 251:
4298#line 2519 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4299{
Reid Spenceref9b9a72007-02-05 20:47:22 +00004300 // Is this definition named?? if so, assign the name...
Chris Lattner32980692007-02-19 07:44:24 +00004301 setValueName(yyvsp[0].InstVal, yyvsp[-1].StrVal);
Reid Spenceref9b9a72007-02-05 20:47:22 +00004302 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00004303 InsertValue(yyvsp[0].InstVal);
4304 yyval.InstVal = yyvsp[0].InstVal;
Reid Spenceref9b9a72007-02-05 20:47:22 +00004305 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00004306 ;
4307 break;}
4308case 252:
4309#line 2529 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4310{ // Used for PHI nodes
Reid Spencer14310612006-12-31 05:40:51 +00004311 if (!UpRefs.empty())
Chris Lattner32980692007-02-19 07:44:24 +00004312 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-5].TypeVal)->getDescription());
4313 yyval.PHIList = new std::list<std::pair<Value*, BasicBlock*> >();
4314 Value* tmpVal = getVal(*yyvsp[-5].TypeVal, yyvsp[-3].ValIDVal);
Andrew Lenharth6353e052006-12-08 18:07:09 +00004315 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00004316 BasicBlock* tmpBB = getBBVal(yyvsp[-1].ValIDVal);
Andrew Lenharth6353e052006-12-08 18:07:09 +00004317 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00004318 yyval.PHIList->push_back(std::make_pair(tmpVal, tmpBB));
4319 delete yyvsp[-5].TypeVal;
4320 ;
4321 break;}
4322case 253:
4323#line 2540 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4324{
4325 yyval.PHIList = yyvsp[-6].PHIList;
4326 Value* tmpVal = getVal(yyvsp[-6].PHIList->front().first->getType(), yyvsp[-3].ValIDVal);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004327 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00004328 BasicBlock* tmpBB = getBBVal(yyvsp[-1].ValIDVal);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004329 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00004330 yyvsp[-6].PHIList->push_back(std::make_pair(tmpVal, tmpBB));
4331 ;
4332 break;}
4333case 254:
4334#line 2550 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4335{
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004336 if (!UpRefs.empty())
Chris Lattner32980692007-02-19 07:44:24 +00004337 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription());
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004338 // Used for call and invoke instructions
Chris Lattner32980692007-02-19 07:44:24 +00004339 yyval.ValueRefList = new ValueRefList();
4340 ValueRefListEntry E; E.Attrs = yyvsp[0].ParamAttrs; E.Val = getVal(yyvsp[-2].TypeVal->get(), yyvsp[-1].ValIDVal);
4341 yyval.ValueRefList->push_back(E);
4342 ;
4343 break;}
4344case 255:
4345#line 2558 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4346{
Reid Spencer14310612006-12-31 05:40:51 +00004347 if (!UpRefs.empty())
Chris Lattner32980692007-02-19 07:44:24 +00004348 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription());
4349 yyval.ValueRefList = yyvsp[-4].ValueRefList;
4350 ValueRefListEntry E; E.Attrs = yyvsp[0].ParamAttrs; E.Val = getVal(yyvsp[-2].TypeVal->get(), yyvsp[-1].ValIDVal);
4351 yyval.ValueRefList->push_back(E);
Reid Spencer6f407902007-01-13 05:00:46 +00004352 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00004353 ;
4354 break;}
4355case 256:
4356#line 2566 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4357{ yyval.ValueRefList = new ValueRefList(); ;
4358 break;}
4359case 257:
4360#line 2569 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4361{ yyval.ValueList = new std::vector<Value*>(); ;
4362 break;}
4363case 258:
4364#line 2570 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4365{
4366 yyval.ValueList = yyvsp[-2].ValueList;
4367 yyval.ValueList->push_back(yyvsp[0].ValueVal);
Reid Spencer14310612006-12-31 05:40:51 +00004368 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00004369 ;
4370 break;}
4371case 259:
4372#line 2577 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4373{
4374 yyval.BoolVal = true;
Reid Spencere4d87aa2006-12-23 06:05:41 +00004375 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00004376 ;
4377 break;}
4378case 260:
4379#line 2581 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4380{
4381 yyval.BoolVal = false;
Reid Spencere4d87aa2006-12-23 06:05:41 +00004382 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00004383 ;
4384 break;}
4385case 261:
4386#line 2586 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4387{
Reid Spencer14310612006-12-31 05:40:51 +00004388 if (!UpRefs.empty())
Chris Lattner32980692007-02-19 07:44:24 +00004389 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription());
4390 if (!(*yyvsp[-3].TypeVal)->isInteger() && !(*yyvsp[-3].TypeVal)->isFloatingPoint() &&
4391 !isa<VectorType>((*yyvsp[-3].TypeVal).get()))
Reid Spencere4d87aa2006-12-23 06:05:41 +00004392 GEN_ERROR(
Reid Spencerb5334b02007-02-05 10:18:06 +00004393 "Arithmetic operator requires integer, FP, or packed operands");
Chris Lattner32980692007-02-19 07:44:24 +00004394 if (isa<VectorType>((*yyvsp[-3].TypeVal).get()) &&
4395 (yyvsp[-4].BinaryOpVal == Instruction::URem ||
4396 yyvsp[-4].BinaryOpVal == Instruction::SRem ||
4397 yyvsp[-4].BinaryOpVal == Instruction::FRem))
4398 GEN_ERROR("Remainder not supported on vector types");
4399 Value* val1 = getVal(*yyvsp[-3].TypeVal, yyvsp[-2].ValIDVal);
Andrew Lenharth6353e052006-12-08 18:07:09 +00004400 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00004401 Value* val2 = getVal(*yyvsp[-3].TypeVal, yyvsp[0].ValIDVal);
Andrew Lenharth6353e052006-12-08 18:07:09 +00004402 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00004403 yyval.InstVal = BinaryOperator::create(yyvsp[-4].BinaryOpVal, val1, val2);
4404 if (yyval.InstVal == 0)
Reid Spencerb5334b02007-02-05 10:18:06 +00004405 GEN_ERROR("binary operator returned null");
Chris Lattner32980692007-02-19 07:44:24 +00004406 delete yyvsp[-3].TypeVal;
4407 ;
4408 break;}
4409case 262:
4410#line 2607 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4411{
Reid Spencer14310612006-12-31 05:40:51 +00004412 if (!UpRefs.empty())
Chris Lattner32980692007-02-19 07:44:24 +00004413 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription());
4414 if (!(*yyvsp[-3].TypeVal)->isInteger()) {
4415 if (Instruction::isShift(yyvsp[-4].BinaryOpVal) || !isa<VectorType>(yyvsp[-3].TypeVal->get()) ||
4416 !cast<VectorType>(yyvsp[-3].TypeVal->get())->getElementType()->isInteger())
Reid Spencerb5334b02007-02-05 10:18:06 +00004417 GEN_ERROR("Logical operator requires integral operands");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004418 }
Chris Lattner32980692007-02-19 07:44:24 +00004419 Value* tmpVal1 = getVal(*yyvsp[-3].TypeVal, yyvsp[-2].ValIDVal);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004420 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00004421 Value* tmpVal2 = getVal(*yyvsp[-3].TypeVal, yyvsp[0].ValIDVal);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004422 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00004423 yyval.InstVal = BinaryOperator::create(yyvsp[-4].BinaryOpVal, tmpVal1, tmpVal2);
4424 if (yyval.InstVal == 0)
Reid Spencerb5334b02007-02-05 10:18:06 +00004425 GEN_ERROR("binary operator returned null");
Chris Lattner32980692007-02-19 07:44:24 +00004426 delete yyvsp[-3].TypeVal;
4427 ;
4428 break;}
4429case 263:
4430#line 2624 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4431{
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004432 if (!UpRefs.empty())
Chris Lattner32980692007-02-19 07:44:24 +00004433 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription());
4434 if (isa<VectorType>((*yyvsp[-3].TypeVal).get()))
4435 GEN_ERROR("Vector types not supported by icmp instruction");
4436 Value* tmpVal1 = getVal(*yyvsp[-3].TypeVal, yyvsp[-2].ValIDVal);
Andrew Lenharth6353e052006-12-08 18:07:09 +00004437 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00004438 Value* tmpVal2 = getVal(*yyvsp[-3].TypeVal, yyvsp[0].ValIDVal);
Andrew Lenharth6353e052006-12-08 18:07:09 +00004439 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00004440 yyval.InstVal = CmpInst::create(yyvsp[-5].OtherOpVal, yyvsp[-4].IPredicate, tmpVal1, tmpVal2);
4441 if (yyval.InstVal == 0)
Reid Spencerb5334b02007-02-05 10:18:06 +00004442 GEN_ERROR("icmp operator returned null");
Chris Lattner32980692007-02-19 07:44:24 +00004443 ;
4444 break;}
4445case 264:
4446#line 2637 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4447{
Reid Spencer14310612006-12-31 05:40:51 +00004448 if (!UpRefs.empty())
Chris Lattner32980692007-02-19 07:44:24 +00004449 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription());
4450 if (isa<VectorType>((*yyvsp[-3].TypeVal).get()))
4451 GEN_ERROR("Vector types not supported by fcmp instruction");
4452 Value* tmpVal1 = getVal(*yyvsp[-3].TypeVal, yyvsp[-2].ValIDVal);
Andrew Lenharth6353e052006-12-08 18:07:09 +00004453 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00004454 Value* tmpVal2 = getVal(*yyvsp[-3].TypeVal, yyvsp[0].ValIDVal);
Andrew Lenharth6353e052006-12-08 18:07:09 +00004455 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00004456 yyval.InstVal = CmpInst::create(yyvsp[-5].OtherOpVal, yyvsp[-4].FPredicate, tmpVal1, tmpVal2);
4457 if (yyval.InstVal == 0)
Reid Spencerb5334b02007-02-05 10:18:06 +00004458 GEN_ERROR("fcmp operator returned null");
Chris Lattner32980692007-02-19 07:44:24 +00004459 ;
4460 break;}
4461case 265:
4462#line 2650 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4463{
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004464 if (!UpRefs.empty())
Chris Lattner32980692007-02-19 07:44:24 +00004465 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[0].TypeVal)->getDescription());
4466 Value* Val = yyvsp[-2].ValueVal;
4467 const Type* DestTy = yyvsp[0].TypeVal->get();
4468 if (!CastInst::castIsValid(yyvsp[-3].CastOpVal, Val, DestTy))
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004469 GEN_ERROR("invalid cast opcode for cast from '" +
4470 Val->getType()->getDescription() + "' to '" +
Reid Spencerb5334b02007-02-05 10:18:06 +00004471 DestTy->getDescription() + "'");
Chris Lattner32980692007-02-19 07:44:24 +00004472 yyval.InstVal = CastInst::create(yyvsp[-3].CastOpVal, Val, DestTy);
4473 delete yyvsp[0].TypeVal;
4474 ;
4475 break;}
4476case 266:
4477#line 2662 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4478{
4479 if (yyvsp[-4].ValueVal->getType() != Type::Int1Ty)
Reid Spencerb5334b02007-02-05 10:18:06 +00004480 GEN_ERROR("select condition must be boolean");
Chris Lattner32980692007-02-19 07:44:24 +00004481 if (yyvsp[-2].ValueVal->getType() != yyvsp[0].ValueVal->getType())
Reid Spencerb5334b02007-02-05 10:18:06 +00004482 GEN_ERROR("select value types should match");
Chris Lattner32980692007-02-19 07:44:24 +00004483 yyval.InstVal = new SelectInst(yyvsp[-4].ValueVal, yyvsp[-2].ValueVal, yyvsp[0].ValueVal);
Andrew Lenharth6353e052006-12-08 18:07:09 +00004484 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00004485 ;
4486 break;}
4487case 267:
4488#line 2670 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4489{
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004490 if (!UpRefs.empty())
Chris Lattner32980692007-02-19 07:44:24 +00004491 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[0].TypeVal)->getDescription());
4492 yyval.InstVal = new VAArgInst(yyvsp[-2].ValueVal, *yyvsp[0].TypeVal);
4493 delete yyvsp[0].TypeVal;
Andrew Lenharth6353e052006-12-08 18:07:09 +00004494 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00004495 ;
4496 break;}
4497case 268:
4498#line 2677 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4499{
4500 if (!ExtractElementInst::isValidOperands(yyvsp[-2].ValueVal, yyvsp[0].ValueVal))
Reid Spencerb5334b02007-02-05 10:18:06 +00004501 GEN_ERROR("Invalid extractelement operands");
Chris Lattner32980692007-02-19 07:44:24 +00004502 yyval.InstVal = new ExtractElementInst(yyvsp[-2].ValueVal, yyvsp[0].ValueVal);
Andrew Lenharth6353e052006-12-08 18:07:09 +00004503 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00004504 ;
4505 break;}
4506case 269:
4507#line 2683 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4508{
4509 if (!InsertElementInst::isValidOperands(yyvsp[-4].ValueVal, yyvsp[-2].ValueVal, yyvsp[0].ValueVal))
Reid Spencerb5334b02007-02-05 10:18:06 +00004510 GEN_ERROR("Invalid insertelement operands");
Chris Lattner32980692007-02-19 07:44:24 +00004511 yyval.InstVal = new InsertElementInst(yyvsp[-4].ValueVal, yyvsp[-2].ValueVal, yyvsp[0].ValueVal);
Andrew Lenharth6353e052006-12-08 18:07:09 +00004512 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00004513 ;
4514 break;}
4515case 270:
4516#line 2689 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4517{
4518 if (!ShuffleVectorInst::isValidOperands(yyvsp[-4].ValueVal, yyvsp[-2].ValueVal, yyvsp[0].ValueVal))
Reid Spencerb5334b02007-02-05 10:18:06 +00004519 GEN_ERROR("Invalid shufflevector operands");
Chris Lattner32980692007-02-19 07:44:24 +00004520 yyval.InstVal = new ShuffleVectorInst(yyvsp[-4].ValueVal, yyvsp[-2].ValueVal, yyvsp[0].ValueVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00004521 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00004522 ;
4523 break;}
4524case 271:
4525#line 2695 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4526{
4527 const Type *Ty = yyvsp[0].PHIList->front().first->getType();
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004528 if (!Ty->isFirstClassType())
Reid Spencerb5334b02007-02-05 10:18:06 +00004529 GEN_ERROR("PHI node operands must be of first class type");
Chris Lattner32980692007-02-19 07:44:24 +00004530 yyval.InstVal = new PHINode(Ty);
4531 ((PHINode*)yyval.InstVal)->reserveOperandSpace(yyvsp[0].PHIList->size());
4532 while (yyvsp[0].PHIList->begin() != yyvsp[0].PHIList->end()) {
4533 if (yyvsp[0].PHIList->front().first->getType() != Ty)
Reid Spencerb5334b02007-02-05 10:18:06 +00004534 GEN_ERROR("All elements of a PHI node must be of the same type");
Chris Lattner32980692007-02-19 07:44:24 +00004535 cast<PHINode>(yyval.InstVal)->addIncoming(yyvsp[0].PHIList->front().first, yyvsp[0].PHIList->front().second);
4536 yyvsp[0].PHIList->pop_front();
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004537 }
Chris Lattner32980692007-02-19 07:44:24 +00004538 delete yyvsp[0].PHIList; // Free the list...
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004539 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00004540 ;
4541 break;}
4542case 272:
4543#line 2711 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4544{
Reid Spencer14310612006-12-31 05:40:51 +00004545
4546 // Handle the short syntax
Andrew Lenharth6353e052006-12-08 18:07:09 +00004547 const PointerType *PFTy = 0;
4548 const FunctionType *Ty = 0;
Chris Lattner32980692007-02-19 07:44:24 +00004549 if (!(PFTy = dyn_cast<PointerType>(yyvsp[-5].TypeVal->get())) ||
Andrew Lenharth6353e052006-12-08 18:07:09 +00004550 !(Ty = dyn_cast<FunctionType>(PFTy->getElementType()))) {
4551 // Pull out the types of all of the arguments...
4552 std::vector<const Type*> ParamTypes;
Reid Spencer14310612006-12-31 05:40:51 +00004553 FunctionType::ParamAttrsList ParamAttrs;
Chris Lattner32980692007-02-19 07:44:24 +00004554 ParamAttrs.push_back(yyvsp[0].ParamAttrs);
4555 for (ValueRefList::iterator I = yyvsp[-2].ValueRefList->begin(), E = yyvsp[-2].ValueRefList->end(); I != E; ++I) {
Reid Spencer14310612006-12-31 05:40:51 +00004556 const Type *Ty = I->Val->getType();
4557 if (Ty == Type::VoidTy)
4558 GEN_ERROR("Short call syntax cannot be used with varargs");
4559 ParamTypes.push_back(Ty);
4560 ParamAttrs.push_back(I->Attrs);
Andrew Lenharth6353e052006-12-08 18:07:09 +00004561 }
4562
Chris Lattner32980692007-02-19 07:44:24 +00004563 Ty = FunctionType::get(yyvsp[-5].TypeVal->get(), ParamTypes, false, ParamAttrs);
Andrew Lenharth6353e052006-12-08 18:07:09 +00004564 PFTy = PointerType::get(Ty);
4565 }
4566
Chris Lattner32980692007-02-19 07:44:24 +00004567 Value *V = getVal(PFTy, yyvsp[-4].ValIDVal); // Get the function we're calling...
Andrew Lenharth6353e052006-12-08 18:07:09 +00004568 CHECK_FOR_ERROR
4569
Reid Spencer14310612006-12-31 05:40:51 +00004570 // Check the arguments
4571 ValueList Args;
Chris Lattner32980692007-02-19 07:44:24 +00004572 if (yyvsp[-2].ValueRefList->empty()) { // Has no arguments?
Andrew Lenharth6353e052006-12-08 18:07:09 +00004573 // Make sure no arguments is a good thing!
4574 if (Ty->getNumParams() != 0)
4575 GEN_ERROR("No arguments passed to a function that "
Reid Spencerb5334b02007-02-05 10:18:06 +00004576 "expects arguments");
Andrew Lenharth6353e052006-12-08 18:07:09 +00004577 } else { // Has arguments?
4578 // Loop through FunctionType's arguments and ensure they are specified
4579 // correctly!
4580 //
4581 FunctionType::param_iterator I = Ty->param_begin();
4582 FunctionType::param_iterator E = Ty->param_end();
Chris Lattner32980692007-02-19 07:44:24 +00004583 ValueRefList::iterator ArgI = yyvsp[-2].ValueRefList->begin(), ArgE = yyvsp[-2].ValueRefList->end();
Andrew Lenharth6353e052006-12-08 18:07:09 +00004584
Reid Spencer14310612006-12-31 05:40:51 +00004585 for (; ArgI != ArgE && I != E; ++ArgI, ++I) {
4586 if (ArgI->Val->getType() != *I)
4587 GEN_ERROR("Parameter " + ArgI->Val->getName()+ " is not of type '" +
Reid Spencerb5334b02007-02-05 10:18:06 +00004588 (*I)->getDescription() + "'");
Reid Spencer14310612006-12-31 05:40:51 +00004589 Args.push_back(ArgI->Val);
4590 }
4591 if (Ty->isVarArg()) {
4592 if (I == E)
4593 for (; ArgI != ArgE; ++ArgI)
4594 Args.push_back(ArgI->Val); // push the remaining varargs
4595 } else if (I != E || ArgI != ArgE)
Reid Spencerb5334b02007-02-05 10:18:06 +00004596 GEN_ERROR("Invalid number of parameters detected");
Andrew Lenharth6353e052006-12-08 18:07:09 +00004597 }
Reid Spencer14310612006-12-31 05:40:51 +00004598 // Create the call node
Chris Lattner9d2fda62007-02-13 05:53:56 +00004599 CallInst *CI = new CallInst(V, &Args[0], Args.size());
Chris Lattner32980692007-02-19 07:44:24 +00004600 CI->setTailCall(yyvsp[-7].BoolVal);
4601 CI->setCallingConv(yyvsp[-6].UIntVal);
4602 yyval.InstVal = CI;
4603 delete yyvsp[-2].ValueRefList;
4604 delete yyvsp[-5].TypeVal;
Reid Spencere4d87aa2006-12-23 06:05:41 +00004605 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00004606 ;
4607 break;}
4608case 273:
4609#line 2774 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4610{
4611 yyval.InstVal = yyvsp[0].InstVal;
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004612 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00004613 ;
4614 break;}
4615case 274:
4616#line 2779 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4617{
4618 yyval.BoolVal = true;
Reid Spencere4d87aa2006-12-23 06:05:41 +00004619 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00004620 ;
4621 break;}
4622case 275:
4623#line 2783 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4624{
4625 yyval.BoolVal = false;
Reid Spencere4d87aa2006-12-23 06:05:41 +00004626 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00004627 ;
4628 break;}
4629case 276:
4630#line 2790 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4631{
Reid Spencer6f407902007-01-13 05:00:46 +00004632 if (!UpRefs.empty())
Chris Lattner32980692007-02-19 07:44:24 +00004633 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
4634 yyval.InstVal = new MallocInst(*yyvsp[-1].TypeVal, 0, yyvsp[0].UIntVal);
4635 delete yyvsp[-1].TypeVal;
Reid Spencer6f407902007-01-13 05:00:46 +00004636 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00004637 ;
4638 break;}
4639case 277:
4640#line 2797 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4641{
Reid Spencer14310612006-12-31 05:40:51 +00004642 if (!UpRefs.empty())
Chris Lattner32980692007-02-19 07:44:24 +00004643 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-4].TypeVal)->getDescription());
4644 Value* tmpVal = getVal(yyvsp[-2].PrimType, yyvsp[-1].ValIDVal);
Reid Spencere4d87aa2006-12-23 06:05:41 +00004645 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00004646 yyval.InstVal = new MallocInst(*yyvsp[-4].TypeVal, tmpVal, yyvsp[0].UIntVal);
4647 delete yyvsp[-4].TypeVal;
4648 ;
4649 break;}
4650case 278:
4651#line 2805 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4652{
Reid Spencer14310612006-12-31 05:40:51 +00004653 if (!UpRefs.empty())
Chris Lattner32980692007-02-19 07:44:24 +00004654 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
4655 yyval.InstVal = new AllocaInst(*yyvsp[-1].TypeVal, 0, yyvsp[0].UIntVal);
4656 delete yyvsp[-1].TypeVal;
Reid Spencer61c83e02006-08-18 08:43:06 +00004657 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00004658 ;
4659 break;}
4660case 279:
4661#line 2812 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4662{
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004663 if (!UpRefs.empty())
Chris Lattner32980692007-02-19 07:44:24 +00004664 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-4].TypeVal)->getDescription());
4665 Value* tmpVal = getVal(yyvsp[-2].PrimType, yyvsp[-1].ValIDVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00004666 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00004667 yyval.InstVal = new AllocaInst(*yyvsp[-4].TypeVal, tmpVal, yyvsp[0].UIntVal);
4668 delete yyvsp[-4].TypeVal;
4669 ;
4670 break;}
4671case 280:
4672#line 2820 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4673{
4674 if (!isa<PointerType>(yyvsp[0].ValueVal->getType()))
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004675 GEN_ERROR("Trying to free nonpointer type " +
Chris Lattner32980692007-02-19 07:44:24 +00004676 yyvsp[0].ValueVal->getType()->getDescription() + "");
4677 yyval.InstVal = new FreeInst(yyvsp[0].ValueVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00004678 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00004679 ;
4680 break;}
4681case 281:
4682#line 2828 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4683{
Reid Spencer14310612006-12-31 05:40:51 +00004684 if (!UpRefs.empty())
Chris Lattner32980692007-02-19 07:44:24 +00004685 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
4686 if (!isa<PointerType>(yyvsp[-1].TypeVal->get()))
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004687 GEN_ERROR("Can't load from nonpointer type: " +
Chris Lattner32980692007-02-19 07:44:24 +00004688 (*yyvsp[-1].TypeVal)->getDescription());
4689 if (!cast<PointerType>(yyvsp[-1].TypeVal->get())->getElementType()->isFirstClassType())
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004690 GEN_ERROR("Can't load from pointer of non-first-class type: " +
Chris Lattner32980692007-02-19 07:44:24 +00004691 (*yyvsp[-1].TypeVal)->getDescription());
4692 Value* tmpVal = getVal(*yyvsp[-1].TypeVal, yyvsp[0].ValIDVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00004693 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00004694 yyval.InstVal = new LoadInst(tmpVal, "", yyvsp[-3].BoolVal);
4695 delete yyvsp[-1].TypeVal;
4696 ;
4697 break;}
4698case 282:
4699#line 2842 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4700{
Reid Spencer14310612006-12-31 05:40:51 +00004701 if (!UpRefs.empty())
Chris Lattner32980692007-02-19 07:44:24 +00004702 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
4703 const PointerType *PT = dyn_cast<PointerType>(yyvsp[-1].TypeVal->get());
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004704 if (!PT)
4705 GEN_ERROR("Can't store to a nonpointer type: " +
Chris Lattner32980692007-02-19 07:44:24 +00004706 (*yyvsp[-1].TypeVal)->getDescription());
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004707 const Type *ElTy = PT->getElementType();
Chris Lattner32980692007-02-19 07:44:24 +00004708 if (ElTy != yyvsp[-3].ValueVal->getType())
4709 GEN_ERROR("Can't store '" + yyvsp[-3].ValueVal->getType()->getDescription() +
Reid Spencerb5334b02007-02-05 10:18:06 +00004710 "' into space of type '" + ElTy->getDescription() + "'");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004711
Chris Lattner32980692007-02-19 07:44:24 +00004712 Value* tmpVal = getVal(*yyvsp[-1].TypeVal, yyvsp[0].ValIDVal);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004713 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00004714 yyval.InstVal = new StoreInst(yyvsp[-3].ValueVal, tmpVal, yyvsp[-5].BoolVal);
4715 delete yyvsp[-1].TypeVal;
4716 ;
4717 break;}
4718case 283:
4719#line 2859 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4720{
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004721 if (!UpRefs.empty())
Chris Lattner32980692007-02-19 07:44:24 +00004722 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription());
4723 if (!isa<PointerType>(yyvsp[-2].TypeVal->get()))
Reid Spencerb5334b02007-02-05 10:18:06 +00004724 GEN_ERROR("getelementptr insn requires pointer operand");
Reid Spencer68a24bd2005-08-27 18:50:39 +00004725
Chris Lattner32980692007-02-19 07:44:24 +00004726 if (!GetElementPtrInst::getIndexedType(*yyvsp[-2].TypeVal, &(*yyvsp[0].ValueList)[0], yyvsp[0].ValueList->size(), true))
Reid Spencer61c83e02006-08-18 08:43:06 +00004727 GEN_ERROR("Invalid getelementptr indices for type '" +
Chris Lattner32980692007-02-19 07:44:24 +00004728 (*yyvsp[-2].TypeVal)->getDescription()+ "'");
4729 Value* tmpVal = getVal(*yyvsp[-2].TypeVal, yyvsp[-1].ValIDVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00004730 CHECK_FOR_ERROR
Chris Lattner32980692007-02-19 07:44:24 +00004731 yyval.InstVal = new GetElementPtrInst(tmpVal, &(*yyvsp[0].ValueList)[0], yyvsp[0].ValueList->size());
4732 delete yyvsp[-2].TypeVal;
4733 delete yyvsp[0].ValueList;
4734 ;
4735 break;}
4736}
4737 /* the action file gets copied in in place of this dollarsign */
4738#line 543 "/usr/share/bison.simple"
Chris Lattner9d2fda62007-02-13 05:53:56 +00004739
4740 yyvsp -= yylen;
4741 yyssp -= yylen;
Chris Lattner32980692007-02-19 07:44:24 +00004742#ifdef YYLSP_NEEDED
4743 yylsp -= yylen;
4744#endif
Reid Spencer5cbf9852007-01-30 20:08:39 +00004745
Chris Lattner32980692007-02-19 07:44:24 +00004746#if YYDEBUG != 0
4747 if (yydebug)
4748 {
4749 short *ssp1 = yyss - 1;
4750 fprintf (stderr, "state stack now");
4751 while (ssp1 != yyssp)
4752 fprintf (stderr, " %d", *++ssp1);
4753 fprintf (stderr, "\n");
4754 }
4755#endif
Reid Spencer68a24bd2005-08-27 18:50:39 +00004756
4757 *++yyvsp = yyval;
4758
Chris Lattner32980692007-02-19 07:44:24 +00004759#ifdef YYLSP_NEEDED
4760 yylsp++;
4761 if (yylen == 0)
4762 {
4763 yylsp->first_line = yylloc.first_line;
4764 yylsp->first_column = yylloc.first_column;
4765 yylsp->last_line = (yylsp-1)->last_line;
4766 yylsp->last_column = (yylsp-1)->last_column;
4767 yylsp->text = 0;
4768 }
4769 else
4770 {
4771 yylsp->last_line = (yylsp+yylen-1)->last_line;
4772 yylsp->last_column = (yylsp+yylen-1)->last_column;
4773 }
4774#endif
Reid Spencer68a24bd2005-08-27 18:50:39 +00004775
Chris Lattner32980692007-02-19 07:44:24 +00004776 /* Now "shift" the result of the reduction.
4777 Determine what state that goes to,
4778 based on the state we popped back to
4779 and the rule number reduced by. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00004780
4781 yyn = yyr1[yyn];
4782
Chris Lattner32980692007-02-19 07:44:24 +00004783 yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
4784 if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
Reid Spencer68a24bd2005-08-27 18:50:39 +00004785 yystate = yytable[yystate];
4786 else
Chris Lattner32980692007-02-19 07:44:24 +00004787 yystate = yydefgoto[yyn - YYNTBASE];
Reid Spencer68a24bd2005-08-27 18:50:39 +00004788
4789 goto yynewstate;
4790
Chris Lattner32980692007-02-19 07:44:24 +00004791yyerrlab: /* here on detecting error */
Reid Spencer68a24bd2005-08-27 18:50:39 +00004792
Chris Lattner32980692007-02-19 07:44:24 +00004793 if (! yyerrstatus)
4794 /* If not already recovering from an error, report this error. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00004795 {
4796 ++yynerrs;
Chris Lattner32980692007-02-19 07:44:24 +00004797
4798#ifdef YYERROR_VERBOSE
Chris Lattner9d2fda62007-02-13 05:53:56 +00004799 yyn = yypact[yystate];
4800
Chris Lattner32980692007-02-19 07:44:24 +00004801 if (yyn > YYFLAG && yyn < YYLAST)
Chris Lattner9d2fda62007-02-13 05:53:56 +00004802 {
Chris Lattner32980692007-02-19 07:44:24 +00004803 int size = 0;
4804 char *msg;
4805 int x, count;
Chris Lattner9d2fda62007-02-13 05:53:56 +00004806
Chris Lattner32980692007-02-19 07:44:24 +00004807 count = 0;
4808 /* Start X at -yyn if nec to avoid negative indexes in yycheck. */
4809 for (x = (yyn < 0 ? -yyn : 0);
4810 x < (sizeof(yytname) / sizeof(char *)); x++)
4811 if (yycheck[x + yyn] == x)
4812 size += strlen(yytname[x]) + 15, count++;
4813 msg = (char *) malloc(size + 15);
4814 if (msg != 0)
Chris Lattner9d2fda62007-02-13 05:53:56 +00004815 {
Chris Lattner32980692007-02-19 07:44:24 +00004816 strcpy(msg, "parse error");
4817
4818 if (count < 5)
Chris Lattner9d2fda62007-02-13 05:53:56 +00004819 {
Chris Lattner32980692007-02-19 07:44:24 +00004820 count = 0;
4821 for (x = (yyn < 0 ? -yyn : 0);
4822 x < (sizeof(yytname) / sizeof(char *)); x++)
4823 if (yycheck[x + yyn] == x)
4824 {
4825 strcat(msg, count == 0 ? ", expecting `" : " or `");
4826 strcat(msg, yytname[x]);
4827 strcat(msg, "'");
4828 count++;
4829 }
Chris Lattner9d2fda62007-02-13 05:53:56 +00004830 }
Chris Lattner32980692007-02-19 07:44:24 +00004831 yyerror(msg);
4832 free(msg);
Chris Lattner9d2fda62007-02-13 05:53:56 +00004833 }
4834 else
Chris Lattner32980692007-02-19 07:44:24 +00004835 yyerror ("parse error; also virtual memory exceeded");
Chris Lattner9d2fda62007-02-13 05:53:56 +00004836 }
4837 else
4838#endif /* YYERROR_VERBOSE */
Chris Lattner32980692007-02-19 07:44:24 +00004839 yyerror("parse error");
Reid Spencer68a24bd2005-08-27 18:50:39 +00004840 }
Reid Spencer41dff5e2007-01-26 08:05:27 +00004841
Chris Lattner32980692007-02-19 07:44:24 +00004842 goto yyerrlab1;
4843yyerrlab1: /* here on error raised explicitly by an action */
Reid Spencer41dff5e2007-01-26 08:05:27 +00004844
4845 if (yyerrstatus == 3)
4846 {
Chris Lattner32980692007-02-19 07:44:24 +00004847 /* if just tried and failed to reuse lookahead token after an error, discard it. */
Reid Spencer41dff5e2007-01-26 08:05:27 +00004848
Chris Lattner32980692007-02-19 07:44:24 +00004849 /* return failure if at end of input */
4850 if (yychar == YYEOF)
Reid Spencer68a24bd2005-08-27 18:50:39 +00004851 YYABORT;
4852
Chris Lattner32980692007-02-19 07:44:24 +00004853#if YYDEBUG != 0
4854 if (yydebug)
4855 fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]);
4856#endif
Reid Spencere4d87aa2006-12-23 06:05:41 +00004857
Chris Lattner32980692007-02-19 07:44:24 +00004858 yychar = YYEMPTY;
Reid Spencer68a24bd2005-08-27 18:50:39 +00004859 }
4860
Chris Lattner32980692007-02-19 07:44:24 +00004861 /* Else will try to reuse lookahead token
4862 after shifting the error token. */
4863
4864 yyerrstatus = 3; /* Each real token shifted decrements this */
4865
4866 goto yyerrhandle;
4867
4868yyerrdefault: /* current state does not do anything special for the error token. */
4869
4870#if 0
4871 /* This is wrong; only states that explicitly want error tokens
4872 should shift them. */
4873 yyn = yydefact[yystate]; /* If its default is to accept any token, ok. Otherwise pop it.*/
4874 if (yyn) goto yydefault;
4875#endif
4876
4877yyerrpop: /* pop the current state because it cannot handle the error token */
4878
4879 if (yyssp == yyss) YYABORT;
4880 yyvsp--;
4881 yystate = *--yyssp;
4882#ifdef YYLSP_NEEDED
4883 yylsp--;
4884#endif
4885
4886#if YYDEBUG != 0
4887 if (yydebug)
4888 {
4889 short *ssp1 = yyss - 1;
4890 fprintf (stderr, "Error: state stack now");
4891 while (ssp1 != yyssp)
4892 fprintf (stderr, " %d", *++ssp1);
4893 fprintf (stderr, "\n");
4894 }
4895#endif
4896
4897yyerrhandle:
4898
4899 yyn = yypact[yystate];
4900 if (yyn == YYFLAG)
4901 goto yyerrdefault;
4902
4903 yyn += YYTERROR;
4904 if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
4905 goto yyerrdefault;
4906
4907 yyn = yytable[yyn];
4908 if (yyn < 0)
4909 {
4910 if (yyn == YYFLAG)
4911 goto yyerrpop;
4912 yyn = -yyn;
4913 goto yyreduce;
4914 }
4915 else if (yyn == 0)
4916 goto yyerrpop;
4917
Reid Spencer68a24bd2005-08-27 18:50:39 +00004918 if (yyn == YYFINAL)
4919 YYACCEPT;
4920
Chris Lattner32980692007-02-19 07:44:24 +00004921#if YYDEBUG != 0
4922 if (yydebug)
4923 fprintf(stderr, "Shifting error token, ");
4924#endif
4925
Reid Spencer68a24bd2005-08-27 18:50:39 +00004926 *++yyvsp = yylval;
Chris Lattner32980692007-02-19 07:44:24 +00004927#ifdef YYLSP_NEEDED
4928 *++yylsp = yylloc;
4929#endif
Reid Spencer41dff5e2007-01-26 08:05:27 +00004930
Reid Spencer68a24bd2005-08-27 18:50:39 +00004931 yystate = yyn;
4932 goto yynewstate;
4933
Chris Lattner32980692007-02-19 07:44:24 +00004934 yyacceptlab:
4935 /* YYACCEPT comes here. */
4936 if (yyfree_stacks)
Reid Spencer9d6565a2007-02-15 02:26:10 +00004937 {
Chris Lattner32980692007-02-19 07:44:24 +00004938 free (yyss);
4939 free (yyvs);
4940#ifdef YYLSP_NEEDED
4941 free (yyls);
Reid Spencer9d6565a2007-02-15 02:26:10 +00004942#endif
Chris Lattner32980692007-02-19 07:44:24 +00004943 }
4944 return 0;
4945
4946 yyabortlab:
4947 /* YYABORT comes here. */
4948 if (yyfree_stacks)
4949 {
4950 free (yyss);
4951 free (yyvs);
4952#ifdef YYLSP_NEEDED
4953 free (yyls);
4954#endif
4955 }
4956 return 1;
Reid Spencer68a24bd2005-08-27 18:50:39 +00004957}
Chris Lattner32980692007-02-19 07:44:24 +00004958#line 2876 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
Reid Spencer61c83e02006-08-18 08:43:06 +00004959
4960
Reid Spencer14310612006-12-31 05:40:51 +00004961// common code from the two 'RunVMAsmParser' functions
4962static Module* RunParser(Module * M) {
4963
4964 llvmAsmlineno = 1; // Reset the current line number...
4965 CurModule.CurrentModule = M;
4966#if YYDEBUG
4967 yydebug = Debug;
4968#endif
4969
4970 // Check to make sure the parser succeeded
4971 if (yyparse()) {
4972 if (ParserResult)
4973 delete ParserResult;
4974 return 0;
4975 }
4976
4977 // Check to make sure that parsing produced a result
4978 if (!ParserResult)
4979 return 0;
4980
4981 // Reset ParserResult variable while saving its value for the result.
4982 Module *Result = ParserResult;
4983 ParserResult = 0;
4984
4985 return Result;
4986}
4987
Reid Spencer61c83e02006-08-18 08:43:06 +00004988void llvm::GenerateError(const std::string &message, int LineNo) {
4989 if (LineNo == -1) LineNo = llvmAsmlineno;
4990 // TODO: column number in exception
4991 if (TheParseError)
4992 TheParseError->setError(CurFilename, message, LineNo);
4993 TriggerError = 1;
4994}
Reid Spencer68a24bd2005-08-27 18:50:39 +00004995
4996int yyerror(const char *ErrorMsg) {
4997 std::string where
4998 = std::string((CurFilename == "-") ? std::string("<stdin>") : CurFilename)
4999 + ":" + utostr((unsigned) llvmAsmlineno) + ": ";
Reid Spenceref9b9a72007-02-05 20:47:22 +00005000 std::string errMsg = where + "error: " + std::string(ErrorMsg);
5001 if (yychar != YYEMPTY && yychar != 0)
5002 errMsg += " while reading token: '" + std::string(llvmAsmtext, llvmAsmleng)+
5003 "'";
Reid Spencer61c83e02006-08-18 08:43:06 +00005004 GenerateError(errMsg);
Reid Spencer68a24bd2005-08-27 18:50:39 +00005005 return 0;
5006}