From reid at x10sys.com Mon Apr 23 02:23:16 2007 From: reid at x10sys.com (Reid Spencer) Date: Mon, 23 Apr 2007 02:23:16 -0500 Subject: [llvm-commits] CVS: llvm/lib/System/Unix/Program.inc Message-ID: <200704230723.l3N7NGqO024469@zion.cs.uiuc.edu> Changes in directory llvm/lib/System/Unix: Program.inc updated: 1.23 -> 1.24 --- Log message: Cygwin doesn't have the RSS_LIMIT for get/setrlimit. --- Diffs of the changes: (+2 -0) Program.inc | 2 ++ 1 files changed, 2 insertions(+) Index: llvm/lib/System/Unix/Program.inc diff -u llvm/lib/System/Unix/Program.inc:1.23 llvm/lib/System/Unix/Program.inc:1.24 --- llvm/lib/System/Unix/Program.inc:1.23 Fri Feb 16 13:11:06 2007 +++ llvm/lib/System/Unix/Program.inc Mon Apr 23 02:22:51 2007 @@ -119,10 +119,12 @@ getrlimit (RLIMIT_DATA, &r); r.rlim_cur = limit; setrlimit (RLIMIT_DATA, &r); +#ifndef __CYGWIN__ // Resident set size. getrlimit (RLIMIT_RSS, &r); r.rlim_cur = limit; setrlimit (RLIMIT_RSS, &r); +#endif // Virtual memory. getrlimit (RLIMIT_AS, &r); r.rlim_cur = limit; From baldrick at free.fr Mon Apr 23 03:11:04 2007 From: baldrick at free.fr (Duncan Sands) Date: Mon, 23 Apr 2007 10:11:04 +0200 Subject: [llvm-commits] CVS: llvm/test/lib/llvm.exp In-Reply-To: <200704221414.l3MEET4k025424@zion.cs.uiuc.edu> References: <200704221414.l3MEET4k025424@zion.cs.uiuc.edu> Message-ID: <200704231011.04764.baldrick@free.fr> Hi Reid, > + if { [ string first "$lang" "$llvmgcc_langs" ] >= 0 } { won't c match c,c++,objc and objc++; and c++ match both c++ and objc++, etc? Best wishes, Duncan. From jeffc at jolt-lang.org Mon Apr 23 08:55:22 2007 From: jeffc at jolt-lang.org (Jeff Cohen) Date: Mon, 23 Apr 2007 08:55:22 -0500 Subject: [llvm-commits] CVS: llvm/win32/Bitcode/Bitcode.vcproj Message-ID: <200704231355.l3NDtM19031172@zion.cs.uiuc.edu> Changes in directory llvm/win32/Bitcode: Bitcode.vcproj updated: 1.1 -> 1.2 --- Log message: Unbreak VC++ build. --- Diffs of the changes: (+2 -2) Bitcode.vcproj | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) Index: llvm/win32/Bitcode/Bitcode.vcproj diff -u llvm/win32/Bitcode/Bitcode.vcproj:1.1 llvm/win32/Bitcode/Bitcode.vcproj:1.2 --- llvm/win32/Bitcode/Bitcode.vcproj:1.1 Sun Apr 22 10:00:52 2007 +++ llvm/win32/Bitcode/Bitcode.vcproj Mon Apr 23 08:55:05 2007 @@ -149,10 +149,10 @@ RelativePath="..\..\include\llvm\Bitcode\BitstreamWriter.h"> + RelativePath="..\..\include\llvm\Bitcode\LLVMBitCodes.h"> + RelativePath="..\..\include\llvm\Bitcode\ReaderWriter.h"> From sabre at nondot.org Mon Apr 23 10:40:16 2007 From: sabre at nondot.org (Chris Lattner) Date: Mon, 23 Apr 2007 10:40:16 -0500 Subject: [llvm-commits] CVS: llvm-www/ProjectsWithLLVM/index.html Message-ID: <200704231540.l3NFeG0m000803@zion.cs.uiuc.edu> Changes in directory llvm-www/ProjectsWithLLVM: index.html updated: 1.34 -> 1.35 --- Log message: add the calysto checker --- Diffs of the changes: (+56 -0) index.html | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 56 insertions(+) Index: llvm-www/ProjectsWithLLVM/index.html diff -u llvm-www/ProjectsWithLLVM/index.html:1.34 llvm-www/ProjectsWithLLVM/index.html:1.35 --- llvm-www/ProjectsWithLLVM/index.html:1.34 Mon Mar 26 14:05:37 2007 +++ llvm-www/ProjectsWithLLVM/index.html Mon Apr 23 10:39:59 2007 @@ -35,6 +35,7 @@
@@ -355,6 +356,6 @@ src="http://jigsaw.w3.org/css-validator/images/vcss" alt="Valid CSS!"> Valid HTML 4.01! -
Last modified: $Date: 2007/04/19 05:20:43 $ +
Last modified: $Date: 2007/04/23 16:58:07 $ From sabre at nondot.org Mon Apr 23 12:44:09 2007 From: sabre at nondot.org (Chris Lattner) Date: Mon, 23 Apr 2007 12:44:09 -0500 Subject: [llvm-commits] CVS: llvm/include/llvm/Bitcode/BitstreamWriter.h Message-ID: <200704231744.l3NHi9oX003524@zion.cs.uiuc.edu> Changes in directory llvm/include/llvm/Bitcode: BitstreamWriter.h updated: 1.3 -> 1.4 --- Log message: finish implementation of basic abbrev writing. --- Diffs of the changes: (+69 -4) BitstreamWriter.h | 73 +++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 69 insertions(+), 4 deletions(-) Index: llvm/include/llvm/Bitcode/BitstreamWriter.h diff -u llvm/include/llvm/Bitcode/BitstreamWriter.h:1.3 llvm/include/llvm/Bitcode/BitstreamWriter.h:1.4 --- llvm/include/llvm/Bitcode/BitstreamWriter.h:1.3 Mon Apr 23 11:04:05 2007 +++ llvm/include/llvm/Bitcode/BitstreamWriter.h Mon Apr 23 12:43:52 2007 @@ -194,11 +194,40 @@ unsigned AbbrevNo = Abbrev-bitc::FIRST_ABBREV; assert(AbbrevNo < CurAbbrevs.size() && "Invalid abbrev #!"); BitCodeAbbrev *Abbv = CurAbbrevs[AbbrevNo]; - assert(0 && "TODO"); - for (unsigned i = 0, e = Abbv->getNumOperandInfos(); i != e; ++i) { - } + EmitCode(Abbrev); + + // Insert the code into Vals to treat it uniformly. + Vals.insert(Vals.begin(), Code); + unsigned RecordIdx = 0; + for (unsigned i = 0, e = Abbv->getNumOperandInfos(); i != e; ++i) { + assert(RecordIdx < Vals.size() && "Invalid abbrev/record"); + const BitCodeAbbrevOp &Op = Abbv->getOperandInfo(i); + uint64_t RecordVal = Vals[RecordIdx]; + + if (Op.isLiteral()) { + // If the abbrev specifies the literal value to use, don't emit + // anything. + assert(RecordVal == Op.getLiteralValue() && + "Invalid abbrev for record!"); + ++RecordIdx; + } else { + // Encode the value as we are commanded. + switch (Op.getEncoding()) { + default: assert(0 && "Unknown encoding!"); + case BitCodeAbbrevOp::FixedWidth: + Emit64(RecordVal, Op.getEncodingData()); + ++RecordIdx; + break; + case BitCodeAbbrevOp::VBR: + EmitVBR64(RecordVal, Op.getEncodingData()); + ++RecordIdx; + break; + } + } + } + assert(RecordIdx == Vals.size() && "Not all record operands emitted!"); } else { // If we don't have an abbrev to use, emit this in its fully unabbreviated // form. @@ -215,7 +244,43 @@ void EmitRecord(unsigned Code, SmallVectorImpl &Vals, unsigned Abbrev = 0) { if (Abbrev) { - assert(0 && "abbrevs not implemented yet!"); + unsigned AbbrevNo = Abbrev-bitc::FIRST_ABBREV; + assert(AbbrevNo < CurAbbrevs.size() && "Invalid abbrev #!"); + BitCodeAbbrev *Abbv = CurAbbrevs[AbbrevNo]; + + EmitCode(Abbrev); + + // Insert the code into Vals to treat it uniformly. + Vals.insert(Vals.begin(), Code); + + unsigned RecordIdx = 0; + for (unsigned i = 0, e = Abbv->getNumOperandInfos(); i != e; ++i) { + assert(RecordIdx < Vals.size() && "Invalid abbrev/record"); + const BitCodeAbbrevOp &Op = Abbv->getOperandInfo(i); + unsigned RecordVal = Vals[RecordIdx]; + + if (Op.isLiteral()) { + // If the abbrev specifies the literal value to use, don't emit + // anything. + assert(RecordVal == Op.getLiteralValue() && + "Invalid abbrev for record!"); + ++RecordIdx; + } else { + // Encode the value as we are commanded. + switch (Op.getEncoding()) { + default: assert(0 && "Unknown encoding!"); + case BitCodeAbbrevOp::FixedWidth: + Emit(RecordVal, Op.getEncodingData()); + ++RecordIdx; + break; + case BitCodeAbbrevOp::VBR: + EmitVBR(RecordVal, Op.getEncodingData()); + ++RecordIdx; + break; + } + } + } + assert(RecordIdx == Vals.size() && "Not all record operands emitted!"); } else { // If we don't have an abbrev to use, emit this in its fully unabbreviated // form. From isanbard at gmail.com Mon Apr 23 13:52:54 2007 From: isanbard at gmail.com (Bill Wendling) Date: Mon, 23 Apr 2007 11:52:54 -0700 Subject: [llvm-commits] CVS: llvm-www/Users.html In-Reply-To: <200704231545.KAA01124@choi.cs.uiuc.edu> References: <200704231545.KAA01124@choi.cs.uiuc.edu> Message-ID: <16e5fdf90704231152p1a63138en62ddbf2a2f1558cf@mail.gmail.com> Hi John, > + ?bo Akademi University Could you use the HTML entity for the "?"? I think it's "Â". Thanks! -bw From sabre at nondot.org Mon Apr 23 13:57:50 2007 From: sabre at nondot.org (Chris Lattner) Date: Mon, 23 Apr 2007 13:57:50 -0500 Subject: [llvm-commits] CVS: llvm/include/llvm/Bitcode/BitstreamWriter.h Message-ID: <200704231857.l3NIvoCO006552@zion.cs.uiuc.edu> Changes in directory llvm/include/llvm/Bitcode: BitstreamWriter.h updated: 1.4 -> 1.5 --- Log message: minor cleanups --- Diffs of the changes: (+5 -3) BitstreamWriter.h | 8 +++++--- 1 files changed, 5 insertions(+), 3 deletions(-) Index: llvm/include/llvm/Bitcode/BitstreamWriter.h diff -u llvm/include/llvm/Bitcode/BitstreamWriter.h:1.4 llvm/include/llvm/Bitcode/BitstreamWriter.h:1.5 --- llvm/include/llvm/Bitcode/BitstreamWriter.h:1.4 Mon Apr 23 12:43:52 2007 +++ llvm/include/llvm/Bitcode/BitstreamWriter.h Mon Apr 23 13:57:32 2007 @@ -32,7 +32,10 @@ // CurCodeSize - This is the declared size of code values used for the current // block, in bits. unsigned CurCodeSize; - + + /// CurAbbrevs - Abbrevs installed at in this block. + std::vector CurAbbrevs; + struct Block { unsigned PrevCodeSize; unsigned StartSizeWord; @@ -43,14 +46,13 @@ /// BlockScope - This tracks the current blocks that we have entered. std::vector BlockScope; - std::vector CurAbbrevs; public: BitstreamWriter(std::vector &O) : Out(O), CurBit(0), CurValue(0), CurCodeSize(2) {} ~BitstreamWriter() { assert(CurBit == 0 && "Unflused data remaining"); - assert(BlockScope.empty() && "Block imbalance"); + assert(BlockScope.empty() && CurAbbrevs.empty() && "Block imbalance"); } //===--------------------------------------------------------------------===// // Basic Primitives for emitting bits to the stream. From sabre at nondot.org Mon Apr 23 13:58:16 2007 From: sabre at nondot.org (Chris Lattner) Date: Mon, 23 Apr 2007 13:58:16 -0500 Subject: [llvm-commits] CVS: llvm/include/llvm/Bitcode/BitstreamReader.h Message-ID: <200704231858.l3NIwGiD006595@zion.cs.uiuc.edu> Changes in directory llvm/include/llvm/Bitcode: BitstreamReader.h updated: 1.4 -> 1.5 --- Log message: implement reading of abbrevs --- Diffs of the changes: (+89 -6) BitstreamReader.h | 95 ++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 89 insertions(+), 6 deletions(-) Index: llvm/include/llvm/Bitcode/BitstreamReader.h diff -u llvm/include/llvm/Bitcode/BitstreamReader.h:1.4 llvm/include/llvm/Bitcode/BitstreamReader.h:1.5 --- llvm/include/llvm/Bitcode/BitstreamReader.h:1.4 Mon Apr 23 11:04:05 2007 +++ llvm/include/llvm/Bitcode/BitstreamReader.h Mon Apr 23 13:57:58 2007 @@ -34,10 +34,19 @@ // CurCodeSize - This is the declared size of code values used for the current // block, in bits. unsigned CurCodeSize; + + /// CurAbbrevs - Abbrevs installed at in this block. + std::vector CurAbbrevs; - /// BlockScope - This tracks the codesize of parent blocks. - SmallVector BlockScope; + struct Block { + unsigned PrevCodeSize; + std::vector PrevAbbrevs; + explicit Block(unsigned PCS) : PrevCodeSize(PCS) {} + }; + /// BlockScope - This tracks the codesize of parent blocks. + SmallVector BlockScope; + public: BitstreamReader(const unsigned char *Start, const unsigned char *End) : NextChar(Start), LastChar(End) { @@ -47,6 +56,19 @@ CurCodeSize = 2; } + ~BitstreamReader() { + // Abbrevs could still exist if the stream was broken. If so, don't leak + // them. + for (unsigned i = 0, e = CurAbbrevs.size(); i != e; ++i) + delete CurAbbrevs[i]; + + for (unsigned S = 0, e = BlockScope.size(); S != e; ++S) { + std::vector &Abbrevs = BlockScope[S].PrevAbbrevs; + for (unsigned i = 0, e = Abbrevs.size(); i != e; ++i) + delete Abbrevs[i]; + } + } + bool AtEndOfStream() const { return NextChar == LastChar; } uint32_t Read(unsigned NumBits) { @@ -87,6 +109,13 @@ return R; } + uint64_t Read64(unsigned NumBits) { + if (NumBits <= 32) return Read(NumBits); + + uint64_t V = Read(32); + return V | (uint64_t)Read(NumBits-32) << 32; + } + uint32_t ReadVBR(unsigned NumBits) { uint32_t Piece = Read(NumBits); if ((Piece & (1U << (NumBits-1))) == 0) @@ -168,7 +197,8 @@ /// EnterSubBlock - Having read the ENTER_SUBBLOCK abbrevid, read and enter /// the block, returning the BlockID of the block we just entered. bool EnterSubBlock() { - BlockScope.push_back(CurCodeSize); + BlockScope.push_back(Block(CurCodeSize)); + BlockScope.back().PrevAbbrevs.swap(CurAbbrevs); // Get the codesize of this block. CurCodeSize = ReadVBR(bitc::CodeLenWidth); @@ -188,7 +218,13 @@ // Block tail: // [END_BLOCK, ] SkipToWord(); - CurCodeSize = BlockScope.back(); + CurCodeSize = BlockScope.back().PrevCodeSize; + + // Delete abbrevs from popped scope. + for (unsigned i = 0, e = CurAbbrevs.size(); i != e; ++i) + delete CurAbbrevs[i]; + + BlockScope.back().PrevAbbrevs.swap(CurAbbrevs); BlockScope.pop_back(); return false; } @@ -206,10 +242,57 @@ return Code; } - assert(0 && "Reading with abbrevs not implemented!"); - return 0; + unsigned AbbrevNo = AbbrevID-bitc::FIRST_ABBREV; + assert(AbbrevNo < CurAbbrevs.size() && "Invalid abbrev #!"); + BitCodeAbbrev *Abbv = CurAbbrevs[AbbrevNo]; + + for (unsigned i = 0, e = Abbv->getNumOperandInfos(); i != e; ++i) { + const BitCodeAbbrevOp &Op = Abbv->getOperandInfo(i); + if (Op.isLiteral()) { + // If the abbrev specifies the literal value to use, use it. + Vals.push_back(Op.getLiteralValue()); + } else { + // Decode the value as we are commanded. + switch (Op.getEncoding()) { + default: assert(0 && "Unknown encoding!"); + case BitCodeAbbrevOp::FixedWidth: + Vals.push_back(Read(Op.getEncodingData())); + break; + case BitCodeAbbrevOp::VBR: + Vals.push_back(ReadVBR64(Op.getEncodingData())); + break; + } + } + } + + unsigned Code = Vals[0]; + Vals.erase(Vals.begin()); + return Code; } + //===--------------------------------------------------------------------===// + // Abbrev Processing + //===--------------------------------------------------------------------===// + + void ReadAbbrevRecord() { + BitCodeAbbrev *Abbv = new BitCodeAbbrev(); + unsigned NumOpInfo = ReadVBR(5); + for (unsigned i = 0; i != NumOpInfo; ++i) { + bool IsLiteral = Read(1); + if (IsLiteral) { + Abbv->Add(BitCodeAbbrevOp(ReadVBR64(8))); + continue; + } + + BitCodeAbbrevOp::Encoding E = (BitCodeAbbrevOp::Encoding)Read(3); + if (BitCodeAbbrevOp::hasEncodingData(E)) { + Abbv->Add(BitCodeAbbrevOp(E, ReadVBR64(5))); + } else { + assert(0 && "unimp"); + } + } + CurAbbrevs.push_back(Abbv); + } }; } // End llvm namespace From sabre at nondot.org Mon Apr 23 13:58:58 2007 From: sabre at nondot.org (Chris Lattner) Date: Mon, 23 Apr 2007 13:58:58 -0500 Subject: [llvm-commits] CVS: llvm/lib/Bitcode/Writer/Writer.cpp Message-ID: <200704231858.l3NIww3T006651@zion.cs.uiuc.edu> Changes in directory llvm/lib/Bitcode/Writer: Writer.cpp updated: 1.3 -> 1.4 --- Log message: implement reading of abbrevs, and writing of abbreviated global varrs. --- Diffs of the changes: (+7 -3) Writer.cpp | 10 +++++++--- 1 files changed, 7 insertions(+), 3 deletions(-) Index: llvm/lib/Bitcode/Writer/Writer.cpp diff -u llvm/lib/Bitcode/Writer/Writer.cpp:1.3 llvm/lib/Bitcode/Writer/Writer.cpp:1.4 --- llvm/lib/Bitcode/Writer/Writer.cpp:1.3 Mon Apr 23 11:04:05 2007 +++ llvm/lib/Bitcode/Writer/Writer.cpp Mon Apr 23 13:58:34 2007 @@ -204,9 +204,11 @@ // compute the maximum alignment value. std::map SectionMap; unsigned MaxAlignment = 0; + unsigned MaxGlobalType = 0; for (Module::const_global_iterator GV = M->global_begin(),E = M->global_end(); GV != E; ++GV) { MaxAlignment = std::max(MaxAlignment, GV->getAlignment()); + MaxGlobalType = std::max(MaxGlobalType, VE.getTypeID(GV->getType())); if (!GV->hasSection()) continue; // Give section names unique ID's. @@ -229,10 +231,12 @@ // Emit abbrev for globals, now that we know # sections and max alignment. unsigned SimpleGVarAbbrev = 0; - if (!M->global_empty() && 0) { + if (!M->global_empty()) { // Add an abbrev for common globals with no visibility or thread localness. BitCodeAbbrev *Abbv = new BitCodeAbbrev(); Abbv->Add(BitCodeAbbrevOp(bitc::MODULE_CODE_GLOBALVAR)); + Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::FixedWidth, + Log2_32_Ceil(MaxGlobalType+1))); Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::FixedWidth, 1)); // Constant. Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // Initializer. Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::FixedWidth, 3)); // Linkage. @@ -241,7 +245,7 @@ else { unsigned MaxEncAlignment = Log2_32(MaxAlignment)+1; Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::FixedWidth, - Log2_32_Ceil(MaxEncAlignment))); + Log2_32_Ceil(MaxEncAlignment+1))); } if (SectionMap.empty()) // Section. Abbv->Add(BitCodeAbbrevOp(0)); @@ -300,7 +304,7 @@ /// WriteModule - Emit the specified module to the bitstream. static void WriteModule(const Module *M, BitstreamWriter &Stream) { - Stream.EnterSubblock(bitc::MODULE_BLOCK_ID, 2); + Stream.EnterSubblock(bitc::MODULE_BLOCK_ID, 3); // Emit the version number if it is non-zero. if (CurVersion) { From sabre at nondot.org Mon Apr 23 13:58:58 2007 From: sabre at nondot.org (Chris Lattner) Date: Mon, 23 Apr 2007 13:58:58 -0500 Subject: [llvm-commits] CVS: llvm/lib/Bitcode/Reader/BitcodeReader.cpp Message-ID: <200704231858.l3NIwwTs006649@zion.cs.uiuc.edu> Changes in directory llvm/lib/Bitcode/Reader: BitcodeReader.cpp updated: 1.2 -> 1.3 --- Log message: implement reading of abbrevs, and writing of abbreviated global varrs. --- Diffs of the changes: (+6 -3) BitcodeReader.cpp | 9 ++++++--- 1 files changed, 6 insertions(+), 3 deletions(-) Index: llvm/lib/Bitcode/Reader/BitcodeReader.cpp diff -u llvm/lib/Bitcode/Reader/BitcodeReader.cpp:1.2 llvm/lib/Bitcode/Reader/BitcodeReader.cpp:1.3 --- llvm/lib/Bitcode/Reader/BitcodeReader.cpp:1.2 Mon Apr 23 11:04:05 2007 +++ llvm/lib/Bitcode/Reader/BitcodeReader.cpp Mon Apr 23 13:58:34 2007 @@ -94,7 +94,8 @@ } if (Code == bitc::DEFINE_ABBREV) { - assert(0 && "Abbrevs not implemented yet!"); + Stream.ReadAbbrevRecord(); + continue; } // Read a record. @@ -231,7 +232,8 @@ } if (Code == bitc::DEFINE_ABBREV) { - assert(0 && "Abbrevs not implemented yet!"); + Stream.ReadAbbrevRecord(); + continue; } // Read a record. @@ -294,7 +296,8 @@ } if (Code == bitc::DEFINE_ABBREV) { - assert(0 && "Abbrevs not implemented yet!"); + Stream.ReadAbbrevRecord(); + continue; } // Read a record. From dalej at apple.com Mon Apr 23 14:59:12 2007 From: dalej at apple.com (Dale Johannesen) Date: Mon, 23 Apr 2007 14:59:12 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/AsmPrinter.cpp Message-ID: <200704231959.l3NJxCNF007942@zion.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen: AsmPrinter.cpp updated: 1.154 -> 1.155 --- Log message: make EmitAlignment work the way Chris says it should --- Diffs of the changes: (+3 -1) AsmPrinter.cpp | 4 +++- 1 files changed, 3 insertions(+), 1 deletion(-) Index: llvm/lib/CodeGen/AsmPrinter.cpp diff -u llvm/lib/CodeGen/AsmPrinter.cpp:1.154 llvm/lib/CodeGen/AsmPrinter.cpp:1.155 --- llvm/lib/CodeGen/AsmPrinter.cpp:1.154 Tue Mar 6 13:25:02 2007 +++ llvm/lib/CodeGen/AsmPrinter.cpp Mon Apr 23 14:58:54 2007 @@ -579,8 +579,10 @@ //===----------------------------------------------------------------------===// // EmitAlignment - Emit an alignment directive to the specified power of two. +// Use the maximum of the specified alignment and the alignment from the +// specified GlobalValue (if any). void AsmPrinter::EmitAlignment(unsigned NumBits, const GlobalValue *GV) const { - if (GV && GV->getAlignment()) + if (GV && GV->getAlignment() && Log2_32(GV->getAlignment()) > NumBits) NumBits = Log2_32(GV->getAlignment()); if (NumBits == 0) return; // No need to emit alignment. if (TAI->getAlignmentIsInBytes()) NumBits = 1 << NumBits; From dalej at apple.com Mon Apr 23 15:00:35 2007 From: dalej at apple.com (Dale Johannesen) Date: Mon, 23 Apr 2007 15:00:35 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/TargetAsmInfo.cpp Message-ID: <200704232000.l3NK0ZRf007981@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target: TargetAsmInfo.cpp updated: 1.22 -> 1.23 --- Log message: Fix generic getInlineAsmLength --- Diffs of the changes: (+18 -4) TargetAsmInfo.cpp | 22 ++++++++++++++++++---- 1 files changed, 18 insertions(+), 4 deletions(-) Index: llvm/lib/Target/TargetAsmInfo.cpp diff -u llvm/lib/Target/TargetAsmInfo.cpp:1.22 llvm/lib/Target/TargetAsmInfo.cpp:1.23 --- llvm/lib/Target/TargetAsmInfo.cpp:1.22 Fri Apr 20 16:38:10 2007 +++ llvm/lib/Target/TargetAsmInfo.cpp Mon Apr 23 15:00:17 2007 @@ -13,6 +13,8 @@ //===----------------------------------------------------------------------===// #include "llvm/Target/TargetAsmInfo.h" +#include +#include using namespace llvm; @@ -100,15 +102,27 @@ /// Measure the specified inline asm to determine an approximation of its /// length. +/// Comments (which run till the next SeparatorChar or newline) do not +/// count as an instruction. +/// Any other non-whitespace text is considered an instruction, with +/// multiple instructions separated by SeparatorChar or newlines. +/// Variable-length instructions are not handled here; this function +/// may be overloaded in the target code to do that. unsigned TargetAsmInfo::getInlineAsmLength(const char *Str) const { // Count the number of instructions in the asm. - unsigned NumInsts = 0; + bool atInsnStart = true; + unsigned Length = 0; for (; *Str; ++Str) { if (*Str == '\n' || *Str == SeparatorChar) - ++NumInsts; + atInsnStart = true; + if (atInsnStart && !isspace(*Str)) { + Length += MaxInstLength; + atInsnStart = false; + } + if (atInsnStart && strncmp(Str, CommentString, strlen(CommentString))==0) + atInsnStart = false; } - // Multiply by the worst-case length for each instruction. - return NumInsts * MaxInstLength; + return Length; } From dalej at apple.com Mon Apr 23 15:04:52 2007 From: dalej at apple.com (Dale Johannesen) Date: Mon, 23 Apr 2007 15:04:52 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/ARM/ARMTargetAsmInfo.cpp ARMTargetAsmInfo.h Message-ID: <200704232004.l3NK4q9w008074@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/ARM: ARMTargetAsmInfo.cpp updated: 1.13 -> 1.14 ARMTargetAsmInfo.h updated: 1.1 -> 1.2 --- Log message: add isThumb (unused as yet) --- Diffs of the changes: (+5 -0) ARMTargetAsmInfo.cpp | 3 +++ ARMTargetAsmInfo.h | 2 ++ 2 files changed, 5 insertions(+) Index: llvm/lib/Target/ARM/ARMTargetAsmInfo.cpp diff -u llvm/lib/Target/ARM/ARMTargetAsmInfo.cpp:1.13 llvm/lib/Target/ARM/ARMTargetAsmInfo.cpp:1.14 --- llvm/lib/Target/ARM/ARMTargetAsmInfo.cpp:1.13 Wed Mar 7 19:25:25 2007 +++ llvm/lib/Target/ARM/ARMTargetAsmInfo.cpp Mon Apr 23 15:04:35 2007 @@ -13,6 +13,8 @@ #include "ARMTargetAsmInfo.h" #include "ARMTargetMachine.h" +#include +#include using namespace llvm; ARMTargetAsmInfo::ARMTargetAsmInfo(const ARMTargetMachine &TM) { @@ -80,4 +82,5 @@ InlineAsmStart = "@ InlineAsm Start"; InlineAsmEnd = "@ InlineAsm End"; LCOMMDirective = "\t.lcomm\t"; + isThumb = Subtarget->isThumb(); } Index: llvm/lib/Target/ARM/ARMTargetAsmInfo.h diff -u llvm/lib/Target/ARM/ARMTargetAsmInfo.h:1.1 llvm/lib/Target/ARM/ARMTargetAsmInfo.h:1.2 --- llvm/lib/Target/ARM/ARMTargetAsmInfo.h:1.1 Thu Sep 7 17:05:01 2006 +++ llvm/lib/Target/ARM/ARMTargetAsmInfo.h Mon Apr 23 15:04:35 2007 @@ -23,6 +23,8 @@ struct ARMTargetAsmInfo : public TargetAsmInfo { ARMTargetAsmInfo(const ARMTargetMachine &TM); + + bool isThumb; }; From dalej at apple.com Mon Apr 23 15:07:43 2007 From: dalej at apple.com (Dale Johannesen) Date: Mon, 23 Apr 2007 15:07:43 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/ARM/ARMMachineFunctionInfo.h ARMAsmPrinter.cpp Message-ID: <200704232007.l3NK7h5p008130@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/ARM: ARMMachineFunctionInfo.h updated: 1.8 -> 1.9 ARMAsmPrinter.cpp updated: 1.65 -> 1.66 --- Log message: add Align field, and use when generating function alignment --- Diffs of the changes: (+13 -3) ARMAsmPrinter.cpp | 2 +- ARMMachineFunctionInfo.h | 14 ++++++++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) Index: llvm/lib/Target/ARM/ARMMachineFunctionInfo.h diff -u llvm/lib/Target/ARM/ARMMachineFunctionInfo.h:1.8 llvm/lib/Target/ARM/ARMMachineFunctionInfo.h:1.9 --- llvm/lib/Target/ARM/ARMMachineFunctionInfo.h:1.8 Thu Mar 1 02:26:31 2007 +++ llvm/lib/Target/ARM/ARMMachineFunctionInfo.h Mon Apr 23 15:07:25 2007 @@ -27,9 +27,14 @@ class ARMFunctionInfo : public MachineFunctionInfo { /// isThumb - True if this function is compiled under Thumb mode. - /// + /// Used to initialized Align, so must precede it. bool isThumb; + /// Align - required alignment. ARM functions and Thumb functions with + /// constant pools require 4-byte alignment; other Thumb functions + /// require only 2-byte alignment. + unsigned Align; + /// VarArgsRegSaveSize - Size of the register save area for vararg functions. /// unsigned VarArgsRegSaveSize; @@ -84,7 +89,8 @@ public: ARMFunctionInfo() : - isThumb(false), + isThumb(false), + Align(2U), VarArgsRegSaveSize(0), HasStackFrame(false), LRSpilledForFarJump(false), R3IsLiveIn(false), FramePtrSpillOffset(0), GPRCS1Offset(0), GPRCS2Offset(0), DPRCSOffset(0), @@ -94,6 +100,7 @@ ARMFunctionInfo(MachineFunction &MF) : isThumb(MF.getTarget().getSubtarget().isThumb()), + Align(isThumb ? 1U : 2U), VarArgsRegSaveSize(0), HasStackFrame(false), LRSpilledForFarJump(false), R3IsLiveIn(false), FramePtrSpillOffset(0), GPRCS1Offset(0), GPRCS2Offset(0), DPRCSOffset(0), @@ -104,6 +111,9 @@ bool isThumbFunction() const { return isThumb; } + unsigned getAlign() const { return Align; } + void setAlign(unsigned a) { Align = a; } + unsigned getVarArgsRegSaveSize() const { return VarArgsRegSaveSize; } void setVarArgsRegSaveSize(unsigned s) { VarArgsRegSaveSize = s; } Index: llvm/lib/Target/ARM/ARMAsmPrinter.cpp diff -u llvm/lib/Target/ARM/ARMAsmPrinter.cpp:1.65 llvm/lib/Target/ARM/ARMAsmPrinter.cpp:1.66 --- llvm/lib/Target/ARM/ARMAsmPrinter.cpp:1.65 Sat Apr 21 19:04:12 2007 +++ llvm/lib/Target/ARM/ARMAsmPrinter.cpp Mon Apr 23 15:07:25 2007 @@ -211,7 +211,7 @@ O << Directive << CurrentFnName << "\n"; if (AFI->isThumbFunction()) { - EmitAlignment(1, F); + EmitAlignment(AFI->getAlign(), F); O << "\t.code\t16\n"; O << "\t.thumb_func"; if (Subtarget->isTargetDarwin()) From dalej at apple.com Mon Apr 23 15:09:22 2007 From: dalej at apple.com (Dale Johannesen) Date: Mon, 23 Apr 2007 15:09:22 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/ARM/ARMConstantIslandPass.cpp Message-ID: <200704232009.l3NK9MLO008168@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/ARM: ARMConstantIslandPass.cpp updated: 1.35 -> 1.36 --- Log message: Make Thumb funcs containing islands 4-byte aligned. Fix bugs maintaining BBOffsets and BBSizes when adjusting conditional branches. --- Diffs of the changes: (+19 -6) ARMConstantIslandPass.cpp | 25 +++++++++++++++++++------ 1 files changed, 19 insertions(+), 6 deletions(-) Index: llvm/lib/Target/ARM/ARMConstantIslandPass.cpp diff -u llvm/lib/Target/ARM/ARMConstantIslandPass.cpp:1.35 llvm/lib/Target/ARM/ARMConstantIslandPass.cpp:1.36 --- llvm/lib/Target/ARM/ARMConstantIslandPass.cpp:1.35 Tue Apr 3 18:39:48 2007 +++ llvm/lib/Target/ARM/ARMConstantIslandPass.cpp Mon Apr 23 15:09:04 2007 @@ -121,7 +121,6 @@ bool HasFarJump; const TargetInstrInfo *TII; - const ARMFunctionInfo *AFI; bool isThumb; public: virtual bool runOnMachineFunction(MachineFunction &Fn); @@ -173,9 +172,9 @@ bool ARMConstantIslands::runOnMachineFunction(MachineFunction &Fn) { MachineConstantPool &MCP = *Fn.getConstantPool(); + ARMFunctionInfo *AFI = Fn.getInfo(); TII = Fn.getTarget().getInstrInfo(); - AFI = Fn.getInfo(); isThumb = AFI->isThumbFunction(); HasFarJump = false; @@ -184,11 +183,18 @@ // the numbers agree with the position of the block in the function. Fn.RenumberBlocks(); + /// Thumb functions containing constant pools get 2-byte alignment. This is so + /// we can keep exact track of where the alignment padding goes. Set default. + AFI->setAlign(isThumb ? 1U : 2U); + // Perform the initial placement of the constant pool entries. To start with, // we put them all at the end of the function. std::vector CPEMIs; - if (!MCP.isEmpty()) + if (!MCP.isEmpty()) { DoInitialPlacement(Fn, CPEMIs); + if (isThumb) + AFI->setAlign(2U); + } /// The next UID to take is the first unused one. NextUID = CPEMIs.size(); @@ -1071,6 +1077,9 @@ SplitBlockBeforeInstr(MI); // No need for the branch to the next block. We're adding a unconditional // branch to the destination. + int delta = ARM::GetInstSize(&MBB->back()); + BBSizes[MBB->getNumber()] -= delta; + AdjustBBOffsetsAfter(MBB, -delta); MBB->back().eraseFromParent(); } MachineBasicBlock *NextBB = next(MachineFunction::iterator(MBB)); @@ -1079,18 +1088,22 @@ << " also invert condition and change dest. to BB#" << NextBB->getNumber() << "\n"; - // Insert a unconditional branch and replace the conditional branch. + // Insert a new conditional branch and a new unconditional branch. // Also update the ImmBranch as well as adding a new entry for the new branch. BuildMI(MBB, TII->get(MI->getOpcode())).addMBB(NextBB).addImm(CC); Br.MI = &MBB->back(); + BBSizes[MBB->getNumber()] += ARM::GetInstSize(&MBB->back()); BuildMI(MBB, TII->get(Br.UncondBr)).addMBB(DestBB); + BBSizes[MBB->getNumber()] += ARM::GetInstSize(&MBB->back()); unsigned MaxDisp = getUnconditionalBrDisp(Br.UncondBr); ImmBranches.push_back(ImmBranch(&MBB->back(), MaxDisp, false, Br.UncondBr)); + + // Remove the old conditional branch. It may or may not still be in MBB. + BBSizes[MI->getParent()->getNumber()] -= ARM::GetInstSize(MI); MI->eraseFromParent(); - // Increase the size of MBB to account for the new unconditional branch. + // The net size change is an addition of one unconditional branch. int delta = ARM::GetInstSize(&MBB->back()); - BBSizes[MBB->getNumber()] += delta; AdjustBBOffsetsAfter(MBB, delta); return true; } From sabre at nondot.org Mon Apr 23 15:35:03 2007 From: sabre at nondot.org (Chris Lattner) Date: Mon, 23 Apr 2007 15:35:03 -0500 Subject: [llvm-commits] CVS: llvm/include/llvm/Bitcode/BitstreamWriter.h LLVMBitCodes.h Message-ID: <200704232035.l3NKZ3HQ008675@zion.cs.uiuc.edu> Changes in directory llvm/include/llvm/Bitcode: BitstreamWriter.h updated: 1.5 -> 1.6 LLVMBitCodes.h updated: 1.1 -> 1.2 --- Log message: Fix a bug in bitstream writer handling abbrevs, add value symtab --- Diffs of the changes: (+12 -6) BitstreamWriter.h | 11 ++++++----- LLVMBitCodes.h | 7 ++++++- 2 files changed, 12 insertions(+), 6 deletions(-) Index: llvm/include/llvm/Bitcode/BitstreamWriter.h diff -u llvm/include/llvm/Bitcode/BitstreamWriter.h:1.5 llvm/include/llvm/Bitcode/BitstreamWriter.h:1.6 --- llvm/include/llvm/Bitcode/BitstreamWriter.h:1.5 Mon Apr 23 13:57:32 2007 +++ llvm/include/llvm/Bitcode/BitstreamWriter.h Mon Apr 23 15:34:46 2007 @@ -147,12 +147,8 @@ EmitVBR(CodeLen, bitc::CodeLenWidth); FlushToWord(); BlockScope.push_back(Block(CurCodeSize, Out.size()/4)); - - // Delete all abbrevs. - for (unsigned i = 0, e = CurAbbrevs.size(); i != e; ++i) - delete CurAbbrevs[i]; - BlockScope.back().PrevAbbrevs.swap(CurAbbrevs); + // Emit a placeholder, which will be replaced when the block is popped. Emit(0, bitc::BlockSizeWidth); @@ -161,6 +157,11 @@ void ExitBlock() { assert(!BlockScope.empty() && "Block scope imbalance!"); + + // Delete all abbrevs. + for (unsigned i = 0, e = CurAbbrevs.size(); i != e; ++i) + delete CurAbbrevs[i]; + const Block &B = BlockScope.back(); // Block tail: Index: llvm/include/llvm/Bitcode/LLVMBitCodes.h diff -u llvm/include/llvm/Bitcode/LLVMBitCodes.h:1.1 llvm/include/llvm/Bitcode/LLVMBitCodes.h:1.2 --- llvm/include/llvm/Bitcode/LLVMBitCodes.h:1.1 Sun Apr 22 20:01:15 2007 +++ llvm/include/llvm/Bitcode/LLVMBitCodes.h Mon Apr 23 15:34:46 2007 @@ -33,7 +33,7 @@ GLOBALCONSTANTS_BLOCK_ID = 3, FUNCTION_BLOCK_ID = 4, TYPE_SYMTAB_BLOCK_ID = 5, - GLOBAL_SYMTAB_BLOCK_ID = 6 + VALUE_SYMTAB_BLOCK_ID = 6 }; @@ -81,6 +81,11 @@ TST_ENTRY_CODE = 1 // TST_ENTRY: [typeid, namelen, namechar x N] }; + // The value symbol table only has one code (VST_ENTRY_CODE). + enum ValueSymtabCodes { + VST_ENTRY_CODE = 1 // VST_ENTRY: [valid, namelen, namechar x N] + }; + } // End bitc namespace } // End llvm namespace From sabre at nondot.org Mon Apr 23 15:35:19 2007 From: sabre at nondot.org (Chris Lattner) Date: Mon, 23 Apr 2007 15:35:19 -0500 Subject: [llvm-commits] CVS: llvm/lib/Bitcode/Writer/Writer.cpp Message-ID: <200704232035.l3NKZJf4008686@zion.cs.uiuc.edu> Changes in directory llvm/lib/Bitcode/Writer: Writer.cpp updated: 1.4 -> 1.5 --- Log message: write out the symtab for globals. --- Diffs of the changes: (+70 -33) Writer.cpp | 103 +++++++++++++++++++++++++++++++++++++++++-------------------- 1 files changed, 70 insertions(+), 33 deletions(-) Index: llvm/lib/Bitcode/Writer/Writer.cpp diff -u llvm/lib/Bitcode/Writer/Writer.cpp:1.4 llvm/lib/Bitcode/Writer/Writer.cpp:1.5 --- llvm/lib/Bitcode/Writer/Writer.cpp:1.4 Mon Apr 23 13:58:34 2007 +++ llvm/lib/Bitcode/Writer/Writer.cpp Mon Apr 23 15:35:01 2007 @@ -18,6 +18,7 @@ #include "llvm/DerivedTypes.h" #include "llvm/Module.h" #include "llvm/TypeSymbolTable.h" +#include "llvm/ValueSymbolTable.h" #include "llvm/Support/MathExtras.h" using namespace llvm; @@ -126,39 +127,6 @@ Stream.ExitBlock(); } -/// WriteTypeSymbolTable - Emit a block for the specified type symtab. -static void WriteTypeSymbolTable(const TypeSymbolTable &TST, - const ValueEnumerator &VE, - BitstreamWriter &Stream) { - if (TST.empty()) return; - - Stream.EnterSubblock(bitc::TYPE_SYMTAB_BLOCK_ID, 3); - - // FIXME: Set up the abbrev, we know how many types there are! - // FIXME: We know if the type names can use 7-bit ascii. - - SmallVector NameVals; - - for (TypeSymbolTable::const_iterator TI = TST.begin(), TE = TST.end(); - TI != TE; ++TI) { - unsigned AbbrevToUse = 0; - - // TST_ENTRY: [typeid, namelen, namechar x N] - NameVals.push_back(VE.getTypeID(TI->second)); - - const std::string &Str = TI->first; - NameVals.push_back(Str.size()); - for (unsigned i = 0, e = Str.size(); i != e; ++i) - NameVals.push_back(Str[i]); - - // Emit the finished record. - Stream.EmitRecord(bitc::TST_ENTRY_CODE, NameVals, AbbrevToUse); - NameVals.clear(); - } - - Stream.ExitBlock(); -} - static unsigned getEncodedLinkage(const GlobalValue *GV) { switch (GV->getLinkage()) { default: assert(0 && "Invalid linkage!"); @@ -302,6 +270,71 @@ } +/// WriteTypeSymbolTable - Emit a block for the specified type symtab. +static void WriteTypeSymbolTable(const TypeSymbolTable &TST, + const ValueEnumerator &VE, + BitstreamWriter &Stream) { + if (TST.empty()) return; + + Stream.EnterSubblock(bitc::TYPE_SYMTAB_BLOCK_ID, 3); + + // FIXME: Set up the abbrev, we know how many types there are! + // FIXME: We know if the type names can use 7-bit ascii. + + SmallVector NameVals; + + for (TypeSymbolTable::const_iterator TI = TST.begin(), TE = TST.end(); + TI != TE; ++TI) { + unsigned AbbrevToUse = 0; + + // TST_ENTRY: [typeid, namelen, namechar x N] + NameVals.push_back(VE.getTypeID(TI->second)); + + const std::string &Str = TI->first; + NameVals.push_back(Str.size()); + for (unsigned i = 0, e = Str.size(); i != e; ++i) + NameVals.push_back(Str[i]); + + // Emit the finished record. + Stream.EmitRecord(bitc::TST_ENTRY_CODE, NameVals, AbbrevToUse); + NameVals.clear(); + } + + Stream.ExitBlock(); +} + +// Emit names for globals/functions etc. +static void WriteValueSymbolTable(const ValueSymbolTable &VST, + const ValueEnumerator &VE, + BitstreamWriter &Stream) { + if (VST.empty()) return; + Stream.EnterSubblock(bitc::VALUE_SYMTAB_BLOCK_ID, 3); + + // FIXME: Set up the abbrev, we know how many values there are! + // FIXME: We know if the type names can use 7-bit ascii. + SmallVector NameVals; + + for (ValueSymbolTable::const_iterator SI = VST.begin(), SE = VST.end(); + SI != SE; ++SI) { + unsigned AbbrevToUse = 0; + + // VST_ENTRY: [valueid, namelen, namechar x N] + NameVals.push_back(VE.getValueID(SI->getValue())); + + NameVals.push_back(SI->getKeyLength()); + for (const char *P = SI->getKeyData(), + *E = SI->getKeyData()+SI->getKeyLength(); P != E; ++P) + NameVals.push_back((unsigned char)*P); + + // Emit the finished record. + Stream.EmitRecord(bitc::VST_ENTRY_CODE, NameVals, AbbrevToUse); + NameVals.clear(); + } + Stream.ExitBlock(); +} + + + /// WriteModule - Emit the specified module to the bitstream. static void WriteModule(const Module *M, BitstreamWriter &Stream) { Stream.EnterSubblock(bitc::MODULE_BLOCK_ID, 3); @@ -327,6 +360,10 @@ // Emit the type symbol table information. WriteTypeSymbolTable(M->getTypeSymbolTable(), VE, Stream); + + // Emit names for globals/functions etc. + WriteValueSymbolTable(M->getValueSymbolTable(), VE, Stream); + Stream.ExitBlock(); } From sabre at nondot.org Mon Apr 23 15:58:31 2007 From: sabre at nondot.org (Chris Lattner) Date: Mon, 23 Apr 2007 15:58:31 -0500 Subject: [llvm-commits] CVS: llvm/include/llvm/ADT/SmallString.h Message-ID: <200704232058.l3NKwVZZ009245@zion.cs.uiuc.edu> Changes in directory llvm/include/llvm/ADT: SmallString.h updated: 1.1 -> 1.2 --- Log message: add a missing operator --- Diffs of the changes: (+5 -0) SmallString.h | 5 +++++ 1 files changed, 5 insertions(+) Index: llvm/include/llvm/ADT/SmallString.h diff -u llvm/include/llvm/ADT/SmallString.h:1.1 llvm/include/llvm/ADT/SmallString.h:1.2 --- llvm/include/llvm/ADT/SmallString.h:1.1 Sun Oct 29 21:39:20 2006 +++ llvm/include/llvm/ADT/SmallString.h Mon Apr 23 15:58:14 2007 @@ -49,6 +49,11 @@ this->append(RHS, RHS+strlen(RHS)); return *this; } + SmallString &operator+=(char C) { + this->push_back(C); + return *this; + } + }; From reid at x10sys.com Mon Apr 23 16:22:11 2007 From: reid at x10sys.com (Reid Spencer) Date: Mon, 23 Apr 2007 16:22:11 -0500 Subject: [llvm-commits] CVS: llvm/test/lib/llvm.exp Message-ID: <200704232122.l3NLMBqg009884@zion.cs.uiuc.edu> Changes in directory llvm/test/lib: llvm.exp updated: 1.22 -> 1.23 --- Log message: Dan is right, using "string first" would produce false positives. So, devolve the check to a comparison against each component in the string. Fortunately there isn't many of them. --- Diffs of the changes: (+9 -7) llvm.exp | 16 +++++++++------- 1 files changed, 9 insertions(+), 7 deletions(-) Index: llvm/test/lib/llvm.exp diff -u llvm/test/lib/llvm.exp:1.22 llvm/test/lib/llvm.exp:1.23 --- llvm/test/lib/llvm.exp:1.22 Sun Apr 22 09:14:11 2007 +++ llvm/test/lib/llvm.exp Mon Apr 23 16:21:53 2007 @@ -207,13 +207,15 @@ fortran { set file fcc1 } default { return 0 } } - if { [ string first "$lang" "$llvmgcc_langs" ] >= 0 } { - # FIXME: Knowing it is configured is not enough. We should do two more - # checks here. First, we need to run llvm-gcc -print-prog-name=$file to get - # the path to the compiler. If we don't get a path, the language isn't - # properly configured or built. If we do get a path, we should check to make - # sure that it is executable and perhaps even try executing it. - return 1; + foreach supported_lang [split "$llvmgcc_langs" ,] { + if { "$lang" == "$supported_lang" } { + # FIXME: Knowing it is configured is not enough. We should do two more + # checks here. First, we need to run llvm-gcc -print-prog-name=$file to + # get the path to the compiler. If we don't get a path, the language isn't + # properly configured or built. If we do get a path, we should check to + # make sure that it is executable and perhaps even try executing it. + return 1; + } } return 0; } From sabre at nondot.org Mon Apr 23 16:23:59 2007 From: sabre at nondot.org (Chris Lattner) Date: Mon, 23 Apr 2007 16:23:59 -0500 Subject: [llvm-commits] CVS: llvm/lib/Bitcode/Writer/ValueEnumerator.h Message-ID: <200704232123.l3NLNxcS009962@zion.cs.uiuc.edu> Changes in directory llvm/lib/Bitcode/Writer: ValueEnumerator.h updated: 1.1 -> 1.2 --- Log message: fix off-by one --- Diffs of the changes: (+1 -1) ValueEnumerator.h | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-) Index: llvm/lib/Bitcode/Writer/ValueEnumerator.h diff -u llvm/lib/Bitcode/Writer/ValueEnumerator.h:1.1 llvm/lib/Bitcode/Writer/ValueEnumerator.h:1.2 --- llvm/lib/Bitcode/Writer/ValueEnumerator.h:1.1 Sun Apr 22 01:24:45 2007 +++ llvm/lib/Bitcode/Writer/ValueEnumerator.h Mon Apr 23 16:23:41 2007 @@ -54,7 +54,7 @@ unsigned getValueID(const Value *V) const { ValueMapType::const_iterator I = ValueMap.find(V); assert(I != ValueMap.end() && "Value not in slotcalculator!"); - return I->second; + return I->second-1; } unsigned getTypeID(const Type *T) const { From sabre at nondot.org Mon Apr 23 16:26:23 2007 From: sabre at nondot.org (Chris Lattner) Date: Mon, 23 Apr 2007 16:26:23 -0500 Subject: [llvm-commits] CVS: llvm/lib/Bitcode/Reader/BitcodeReader.cpp BitcodeReader.h Message-ID: <200704232126.l3NLQNUk010102@zion.cs.uiuc.edu> Changes in directory llvm/lib/Bitcode/Reader: BitcodeReader.cpp updated: 1.3 -> 1.4 BitcodeReader.h updated: 1.3 -> 1.4 --- Log message: Read global symtab --- Diffs of the changes: (+59 -3) BitcodeReader.cpp | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++--- BitcodeReader.h | 3 ++ 2 files changed, 59 insertions(+), 3 deletions(-) Index: llvm/lib/Bitcode/Reader/BitcodeReader.cpp diff -u llvm/lib/Bitcode/Reader/BitcodeReader.cpp:1.3 llvm/lib/Bitcode/Reader/BitcodeReader.cpp:1.4 --- llvm/lib/Bitcode/Reader/BitcodeReader.cpp:1.3 Mon Apr 23 13:58:34 2007 +++ llvm/lib/Bitcode/Reader/BitcodeReader.cpp Mon Apr 23 16:26:05 2007 @@ -15,12 +15,14 @@ #include "llvm/Bitcode/BitstreamReader.h" #include "llvm/DerivedTypes.h" #include "llvm/Module.h" +#include "llvm/ADT/SmallString.h" using namespace llvm; /// ConvertToString - Convert a string from a record into an std::string, return /// true on failure. +template static bool ConvertToString(SmallVector &Record, unsigned Idx, - std::string &Result) { + StrTy &Result) { if (Record.size() < Idx+1 || Record.size() < Record[Idx]+Idx+1) return true; @@ -255,6 +257,52 @@ } } +bool BitcodeReader::ParseValueSymbolTable(BitstreamReader &Stream) { + if (Stream.EnterSubBlock()) + return Error("Malformed block record"); + + SmallVector Record; + + // Read all the records for this value table. + SmallString<128> ValueName; + while (1) { + unsigned Code = Stream.ReadCode(); + if (Code == bitc::END_BLOCK) + return Stream.ReadBlockEnd(); + + if (Code == bitc::ENTER_SUBBLOCK) { + // No known subblocks, always skip them. + Stream.ReadSubBlockID(); + if (Stream.SkipBlock()) + return Error("Malformed block record"); + continue; + } + + if (Code == bitc::DEFINE_ABBREV) { + Stream.ReadAbbrevRecord(); + continue; + } + + // Read a record. + Record.clear(); + switch (Stream.ReadRecord(Code, Record)) { + default: // Default behavior: unknown type. + break; + case bitc::VST_ENTRY_CODE: // VST_ENTRY: [valueid, namelen, namechar x N] + if (ConvertToString(Record, 1, ValueName)) + return Error("Invalid TST_ENTRY record"); + unsigned ValueID = Record[0]; + if (ValueID >= ValueList.size()) + return Error("Invalid Value ID in VST_ENTRY record"); + Value *V = ValueList[ValueID]; + + V->setName(&ValueName[0], ValueName.size()); + ValueName.clear(); + break; + } + } +} + bool BitcodeReader::ParseModule(BitstreamReader &Stream, const std::string &ModuleID) { @@ -291,6 +339,10 @@ if (ParseTypeSymbolTable(Stream)) return true; break; + case bitc::VALUE_SYMTAB_BLOCK_ID: + if (ParseValueSymbolTable(Stream)) + return true; + break; } continue; } @@ -377,7 +429,8 @@ NewGV->setVisibility(Visibility); NewGV->setThreadLocal(isThreadLocal); - // TODO: Add to value table. + ValueList.push_back(NewGV); + // TODO: remember initializer/global pair for later substitution. break; } @@ -407,7 +460,7 @@ } Func->setVisibility(GetDecodedVisibility(Record[6])); - // TODO: Add to value table. + ValueList.push_back(Func); // TODO: remember initializer/global pair for later substitution. break; } Index: llvm/lib/Bitcode/Reader/BitcodeReader.h diff -u llvm/lib/Bitcode/Reader/BitcodeReader.h:1.3 llvm/lib/Bitcode/Reader/BitcodeReader.h:1.4 --- llvm/lib/Bitcode/Reader/BitcodeReader.h:1.3 Sun Apr 22 20:01:37 2007 +++ llvm/lib/Bitcode/Reader/BitcodeReader.h Mon Apr 23 16:26:05 2007 @@ -21,11 +21,13 @@ namespace llvm { class BitstreamReader; + class Value; class BitcodeReader : public ModuleProvider { const char *ErrorString; std::vector TypeList; + std::vector ValueList; public: virtual ~BitcodeReader() {} @@ -59,6 +61,7 @@ bool ParseModule(BitstreamReader &Stream, const std::string &ModuleID); bool ParseTypeTable(BitstreamReader &Stream); bool ParseTypeSymbolTable(BitstreamReader &Stream); + bool ParseValueSymbolTable(BitstreamReader &Stream); }; } // End llvm namespace From clattner at apple.com Mon Apr 23 16:52:56 2007 From: clattner at apple.com (clattner at apple.com) Date: Mon, 23 Apr 2007 14:52:56 -0700 (PDT) Subject: [llvm-commits] [126432] clarify the relation of this file with README.LLVM. Message-ID: <20070423215256.98883100AF6D8@src> Revision: 126432 Author: clattner Date: 2007-04-23 14:52:56 -0700 (Mon, 23 Apr 2007) Log Message: ----------- clarify the relation of this file with README.LLVM. Modified Paths: -------------- apple-local/branches/llvm/README.Apple Modified: apple-local/branches/llvm/README.Apple =================================================================== --- apple-local/branches/llvm/README.Apple 2007-04-23 20:32:59 UTC (rev 126431) +++ apple-local/branches/llvm/README.Apple 2007-04-23 21:52:56 UTC (rev 126432) @@ -1,5 +1,13 @@ APPLE LOCAL file documentation +//===----------------------------------------------------------------------===// +NOTE: This file contains a description of the non-llvm GCC that llvm-gcc is +based on. For information on building llvm-gcc for any platform (including +Apple), please follow the directions in README.LLVM. + +//===----------------------------------------------------------------------===// + + This file describes Apple's version of GCC 4.x modified for Darwin / Mac OS X. Although Apple's stated policy is to contribute all of its GCC work to the FSF GCC mainstream, at any given moment there will be From dpatel at apple.com Mon Apr 23 17:07:28 2007 From: dpatel at apple.com (dpatel at apple.com) Date: Mon, 23 Apr 2007 15:07:28 -0700 (PDT) Subject: [llvm-commits] [126435] Fix PR 1344 Message-ID: <20070423220728.5C42C100C29E2@src> Revision: 126435 Author: dpatel Date: 2007-04-23 15:07:27 -0700 (Mon, 23 Apr 2007) Log Message: ----------- Fix PR 1344 Modified Paths: -------------- apple-local/branches/llvm/gcc/llvm-types.cpp Modified: apple-local/branches/llvm/gcc/llvm-types.cpp =================================================================== --- apple-local/branches/llvm/gcc/llvm-types.cpp 2007-04-23 22:06:28 UTC (rev 126434) +++ apple-local/branches/llvm/gcc/llvm-types.cpp 2007-04-23 22:07:27 UTC (rev 126435) @@ -1560,8 +1560,10 @@ bool OldConvertingStruct = ConvertingStruct; ConvertingStruct = true; - // Find the type with the largest size, and if we have multiple things with - // the same size, the thing with the largest alignment. + // Find the type with the largest aligment, and if we have multiple types with + // the same alignment, select one with largest size. If type with max. align + // is smaller then other types then we will add padding later on anyway to + // match union size. const TargetData &TD = getTargetData(); const Type *UnionTy = 0; unsigned MaxSize = 0, MaxAlign = 0; @@ -1576,9 +1578,10 @@ const Type *TheTy = ConvertType(TREE_TYPE(Field)); unsigned Size = TD.getTypeSize(TheTy); unsigned Align = TD.getABITypeAlignment(TheTy); - if (UnionTy == 0 || Size>MaxSize || (Size == MaxSize && Align > MaxAlign)) { + if (UnionTy == 0 || Align > MaxAlign + || (MaxAlign == Align && Size > MaxSize)) { UnionTy = TheTy; - MaxSize = Size; + MaxSize = MAX(MaxSize, Size); MaxAlign = Align; } } From dpatel at apple.com Mon Apr 23 17:40:10 2007 From: dpatel at apple.com (Devang Patel) Date: Mon, 23 Apr 2007 17:40:10 -0500 Subject: [llvm-commits] CVS: llvm/test/Transforms/LoopStrengthReduce/2007-04-23-UseIterator.ll Message-ID: <200704232240.l3NMeA8a011319@zion.cs.uiuc.edu> Changes in directory llvm/test/Transforms/LoopStrengthReduce: 2007-04-23-UseIterator.ll added (r1.1) --- Log message: New test. --- Diffs of the changes: (+71 -0) 2007-04-23-UseIterator.ll | 71 ++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 71 insertions(+) Index: llvm/test/Transforms/LoopStrengthReduce/2007-04-23-UseIterator.ll diff -c /dev/null llvm/test/Transforms/LoopStrengthReduce/2007-04-23-UseIterator.ll:1.1 *** /dev/null Mon Apr 23 17:40:03 2007 --- llvm/test/Transforms/LoopStrengthReduce/2007-04-23-UseIterator.ll Mon Apr 23 17:39:53 2007 *************** *** 0 **** --- 1,71 ---- + ; RUN: llvm-as < %s | opt -loop-reduce -disable-output + + target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64" + + target triple = "i686-apple-darwin9" + + define i8* @foo( i8* %ABC) { + entry: + switch i8 0, label %bb129 [ + i8 0, label %UnifiedReturnBlock + i8 9, label %UnifiedReturnBlock + i8 32, label %UnifiedReturnBlock + i8 35, label %UnifiedReturnBlock + i8 37, label %bb16.preheader + ] + + bb16.preheader: ; preds = %entry + br label %bb16 + + bb16: ; preds = %cond_next102, %bb16.preheader + %indvar = phi i32 [ %indvar.next, %cond_next102 ], [ 0, %bb16.preheader ] ; [#uses=2] + %ABC.2146.0.rec = mul i32 %indvar, 3 ; [#uses=1] + br i1 false, label %UnifiedReturnBlock.loopexit, label %cond_next102 + + cond_next102: ; preds = %bb16 + %tmp138145.rec = add i32 %ABC.2146.0.rec, 3 ; [#uses=1] + %tmp138145 = getelementptr i8* %ABC, i32 %tmp138145.rec ; [#uses=4] + %indvar.next = add i32 %indvar, 1 ; [#uses=1] + switch i8 0, label %bb129.loopexit [ + i8 0, label %UnifiedReturnBlock.loopexit + i8 9, label %UnifiedReturnBlock.loopexit + i8 32, label %UnifiedReturnBlock.loopexit + i8 35, label %UnifiedReturnBlock.loopexit + i8 37, label %bb16 + ] + + bb129.loopexit: ; preds = %cond_next102 + br label %bb129 + + bb129: ; preds = %bb129.loopexit, %entry + ret i8* null + + UnifiedReturnBlock.loopexit: ; preds = %cond_next102, %cond_next102, %cond_next102, %cond_next102, %bb16 + %UnifiedRetVal.ph = phi i8* [ %tmp138145, %cond_next102 ], [ %tmp138145, %cond_next102 ], [ %tmp138145, %cond_next102 ], [ %tmp138145, %cond_next102 ], [ null, %bb16 ] ; [#uses=0] + br label %UnifiedReturnBlock + + UnifiedReturnBlock: ; preds = %UnifiedReturnBlock.loopexit, %entry, %entry, %entry, %entry + ret i8* null + } + + define i8* @bar() { + entry: + switch i8 0, label %bb158 [ + i8 37, label %bb74 + i8 58, label %cond_true + i8 64, label %bb11 + ] + + bb11: ; preds = %entry + ret i8* null + + cond_true: ; preds = %entry + ret i8* null + + bb74: ; preds = %entry + ret i8* null + + bb158: ; preds = %entry + ret i8* null + } + From dpatel at apple.com Mon Apr 23 17:42:23 2007 From: dpatel at apple.com (Devang Patel) Date: Mon, 23 Apr 2007 17:42:23 -0500 Subject: [llvm-commits] CVS: llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp Message-ID: <200704232242.l3NMgNjr011369@zion.cs.uiuc.edu> Changes in directory llvm/lib/Transforms/Scalar: LoopStrengthReduce.cpp updated: 1.130 -> 1.131 --- Log message: Fix http://lists.cs.uiuc.edu/pipermail/llvm-commits/Week-of-Mon-20070423/048333.html --- Diffs of the changes: (+9 -5) LoopStrengthReduce.cpp | 14 +++++++++----- 1 files changed, 9 insertions(+), 5 deletions(-) Index: llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp diff -u llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp:1.130 llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp:1.131 --- llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp:1.130 Sun Apr 15 03:47:27 2007 +++ llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp Mon Apr 23 17:42:03 2007 @@ -416,12 +416,16 @@ if (!getSCEVStartAndStride(ISE, L, Start, Stride)) return false; // Non-reducible symbolic expression, bail out. - for (Value::use_iterator UI = I->use_begin(), E = I->use_end(); UI != E;) { - Instruction *User = cast(*UI); + std::vector IUsers; + // Collect all I uses now because IVUseShouldUsePostIncValue may + // invalidate use_iterator. + for (Value::use_iterator UI = I->use_begin(), E = I->use_end(); UI != E; ++UI) + IUsers.push_back(cast(*UI)); - // Increment iterator now because IVUseShouldUsePostIncValue may remove - // User from the list of I users. - ++UI; + for (unsigned iused_index = 0, iused_size = IUsers.size(); + iused_index != iused_size; ++iused_index) { + + Instruction *User = IUsers[iused_index]; // Do not infinitely recurse on PHI nodes. if (isa(User) && Processed.count(User)) From christopher.lamb at gmail.com Mon Apr 23 17:50:57 2007 From: christopher.lamb at gmail.com (Christopher Lamb) Date: Mon, 23 Apr 2007 17:50:57 -0500 Subject: [llvm-commits] CVS: llvm/include/llvm/CodeGen/ValueTypes.h Message-ID: <200704232250.l3NMovpF011505@zion.cs.uiuc.edu> Changes in directory llvm/include/llvm/CodeGen: ValueTypes.h updated: 1.32 -> 1.33 --- Log message: Fix bug in isFloatingPoint() --- Diffs of the changes: (+1 -1) ValueTypes.h | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-) Index: llvm/include/llvm/CodeGen/ValueTypes.h diff -u llvm/include/llvm/CodeGen/ValueTypes.h:1.32 llvm/include/llvm/CodeGen/ValueTypes.h:1.33 --- llvm/include/llvm/CodeGen/ValueTypes.h:1.32 Sun Apr 1 02:17:45 2007 +++ llvm/include/llvm/CodeGen/ValueTypes.h Mon Apr 23 17:50:40 2007 @@ -85,7 +85,7 @@ /// MVT::isFloatingPoint - Return true if this is a simple FP, or a packed /// vector FP type. static inline bool isFloatingPoint(ValueType VT) { - return (VT >= f32 && VT <= f128) || (VT >= v4f32 && VT <= v2f64); + return (VT >= f32 && VT <= f128) || (VT >= v2f32 && VT <= v2f64); } /// MVT::isVector - Return true if this is a packed vector type (i.e. not From sabre at nondot.org Mon Apr 23 18:30:16 2007 From: sabre at nondot.org (Chris Lattner) Date: Mon, 23 Apr 2007 18:30:16 -0500 Subject: [llvm-commits] CVS: llvm/include/llvm/Bitcode/LLVMBitCodes.h Message-ID: <200704232330.l3NNUGAO013668@zion.cs.uiuc.edu> Changes in directory llvm/include/llvm/Bitcode: LLVMBitCodes.h updated: 1.2 -> 1.3 --- Log message: add codes for constants table --- Diffs of the changes: (+17 -3) LLVMBitCodes.h | 20 +++++++++++++++++--- 1 files changed, 17 insertions(+), 3 deletions(-) Index: llvm/include/llvm/Bitcode/LLVMBitCodes.h diff -u llvm/include/llvm/Bitcode/LLVMBitCodes.h:1.2 llvm/include/llvm/Bitcode/LLVMBitCodes.h:1.3 --- llvm/include/llvm/Bitcode/LLVMBitCodes.h:1.2 Mon Apr 23 15:34:46 2007 +++ llvm/include/llvm/Bitcode/LLVMBitCodes.h Mon Apr 23 18:29:59 2007 @@ -30,7 +30,7 @@ // Module sub-block id's TYPE_BLOCK_ID = 1, MODULEINFO_BLOCK_ID = 2, - GLOBALCONSTANTS_BLOCK_ID = 3, + CONSTANTS_BLOCK_ID = 3, FUNCTION_BLOCK_ID = 4, TYPE_SYMTAB_BLOCK_ID = 5, VALUE_SYMTAB_BLOCK_ID = 6 @@ -78,12 +78,26 @@ // The type symbol table only has one code (TST_ENTRY_CODE). enum TypeSymtabCodes { - TST_ENTRY_CODE = 1 // TST_ENTRY: [typeid, namelen, namechar x N] + TST_CODE_ENTRY = 1 // TST_ENTRY: [typeid, namelen, namechar x N] }; // The value symbol table only has one code (VST_ENTRY_CODE). enum ValueSymtabCodes { - VST_ENTRY_CODE = 1 // VST_ENTRY: [valid, namelen, namechar x N] + VST_CODE_ENTRY = 1 // VST_ENTRY: [valid, namelen, namechar x N] + }; + + // The constants block (CONSTANTS_BLOCK_ID) describes emission for each + // constant and maintains an implicit current type value. + enum ConstantsSymtabCodes { + CST_CODE_SETTYPE = 1, // SETTYPE: [typeid] + CST_CODE_NULL = 2, // NULL + CST_CODE_UNDEF = 3, // UNDEF + CST_CODE_INTEGER = 4, // INTEGER: [intval] + CST_CODE_WIDE_INTEGER = 5, // WIDE_INTEGER: [n, n x intval] + CST_CODE_FLOAT = 6, // FLOAT: [fpval] + CST_CODE_AGGREGATE = 7, // AGGREGATE: [n, n x value number] + CST_CODE_CONSTEXPR = 8 // CONSTEXPR: [opcode, n, n x val#] + // TODO: CE_BINOP ETC }; } // End bitc namespace From dalej at apple.com Mon Apr 23 18:33:48 2007 From: dalej at apple.com (Dale Johannesen) Date: Mon, 23 Apr 2007 18:33:48 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/AsmPrinter.cpp Message-ID: <200704232333.l3NNXmYO013862@zion.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen: AsmPrinter.cpp updated: 1.155 -> 1.156 --- Log message: modify per review commentary --- Diffs of the changes: (+2 -2) AsmPrinter.cpp | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) Index: llvm/lib/CodeGen/AsmPrinter.cpp diff -u llvm/lib/CodeGen/AsmPrinter.cpp:1.155 llvm/lib/CodeGen/AsmPrinter.cpp:1.156 --- llvm/lib/CodeGen/AsmPrinter.cpp:1.155 Mon Apr 23 14:58:54 2007 +++ llvm/lib/CodeGen/AsmPrinter.cpp Mon Apr 23 18:33:31 2007 @@ -582,8 +582,8 @@ // Use the maximum of the specified alignment and the alignment from the // specified GlobalValue (if any). void AsmPrinter::EmitAlignment(unsigned NumBits, const GlobalValue *GV) const { - if (GV && GV->getAlignment() && Log2_32(GV->getAlignment()) > NumBits) - NumBits = Log2_32(GV->getAlignment()); + if (GV && GV->getAlignment()) + NumBits = std::max(NumBits, Log2_32(GV->getAlignment())); if (NumBits == 0) return; // No need to emit alignment. if (TAI->getAlignmentIsInBytes()) NumBits = 1 << NumBits; O << TAI->getAlignDirective() << NumBits << "\n"; From sabre at nondot.org Mon Apr 23 19:16:22 2007 From: sabre at nondot.org (Chris Lattner) Date: Mon, 23 Apr 2007 19:16:22 -0500 Subject: [llvm-commits] CVS: llvm/lib/Bitcode/Writer/ValueEnumerator.cpp ValueEnumerator.h Writer.cpp Message-ID: <200704240016.l3O0GM85016216@zion.cs.uiuc.edu> Changes in directory llvm/lib/Bitcode/Writer: ValueEnumerator.cpp updated: 1.1 -> 1.2 ValueEnumerator.h updated: 1.2 -> 1.3 Writer.cpp updated: 1.5 -> 1.6 --- Log message: Emit module-level constants. --- Diffs of the changes: (+118 -10) ValueEnumerator.cpp | 5 +- ValueEnumerator.h | 8 +-- Writer.cpp | 115 ++++++++++++++++++++++++++++++++++++++++++++++++++-- 3 files changed, 118 insertions(+), 10 deletions(-) Index: llvm/lib/Bitcode/Writer/ValueEnumerator.cpp diff -u llvm/lib/Bitcode/Writer/ValueEnumerator.cpp:1.1 llvm/lib/Bitcode/Writer/ValueEnumerator.cpp:1.2 --- llvm/lib/Bitcode/Writer/ValueEnumerator.cpp:1.1 Sun Apr 22 01:24:45 2007 +++ llvm/lib/Bitcode/Writer/ValueEnumerator.cpp Mon Apr 23 19:16:04 2007 @@ -56,9 +56,12 @@ // FIXME: std::partition the type and value tables so that first-class types - // come earlier than aggregates. + // come earlier than aggregates. FIXME: Emit a marker into the module + // indicating which aggregates types AND values can be dropped form the table. // FIXME: Sort type/value tables by frequency. + + // FIXME: Sort constants by type to reduce size. } /// EnumerateTypeSymbolTable - Insert all of the types in the specified symbol Index: llvm/lib/Bitcode/Writer/ValueEnumerator.h diff -u llvm/lib/Bitcode/Writer/ValueEnumerator.h:1.2 llvm/lib/Bitcode/Writer/ValueEnumerator.h:1.3 --- llvm/lib/Bitcode/Writer/ValueEnumerator.h:1.2 Mon Apr 23 16:23:41 2007 +++ llvm/lib/Bitcode/Writer/ValueEnumerator.h Mon Apr 23 19:16:04 2007 @@ -35,15 +35,13 @@ // For each value, we remember its Value* and occurrence frequency. typedef std::vector > ValueList; private: - TypeList Types; - typedef DenseMap TypeMapType; TypeMapType TypeMap; + TypeList Types; - ValueList Values; - typedef DenseMap ValueMapType; ValueMapType ValueMap; + ValueList Values; ValueEnumerator(const ValueEnumerator &); // DO NOT IMPLEMENT @@ -63,7 +61,7 @@ return I->second-1; } - + const ValueList &getValues() const { return Values; } const TypeList &getTypes() const { return Types; } /// incorporateFunction/purgeFunction - If you'd like to deal with a function, Index: llvm/lib/Bitcode/Writer/Writer.cpp diff -u llvm/lib/Bitcode/Writer/Writer.cpp:1.5 llvm/lib/Bitcode/Writer/Writer.cpp:1.6 --- llvm/lib/Bitcode/Writer/Writer.cpp:1.5 Mon Apr 23 15:35:01 2007 +++ llvm/lib/Bitcode/Writer/Writer.cpp Mon Apr 23 19:16:04 2007 @@ -15,6 +15,7 @@ #include "llvm/Bitcode/BitstreamWriter.h" #include "llvm/Bitcode/LLVMBitCodes.h" #include "ValueEnumerator.h" +#include "llvm/Constants.h" #include "llvm/DerivedTypes.h" #include "llvm/Module.h" #include "llvm/TypeSymbolTable.h" @@ -296,7 +297,7 @@ NameVals.push_back(Str[i]); // Emit the finished record. - Stream.EmitRecord(bitc::TST_ENTRY_CODE, NameVals, AbbrevToUse); + Stream.EmitRecord(bitc::VST_CODE_ENTRY, NameVals, AbbrevToUse); NameVals.clear(); } @@ -327,13 +328,118 @@ NameVals.push_back((unsigned char)*P); // Emit the finished record. - Stream.EmitRecord(bitc::VST_ENTRY_CODE, NameVals, AbbrevToUse); + Stream.EmitRecord(bitc::VST_CODE_ENTRY, NameVals, AbbrevToUse); NameVals.clear(); } Stream.ExitBlock(); } +static void WriteConstants(unsigned FirstVal, unsigned LastVal, + const ValueEnumerator &VE, + BitstreamWriter &Stream) { + if (FirstVal == LastVal) return; + + Stream.EnterSubblock(bitc::CONSTANTS_BLOCK_ID, 2); + + // FIXME: Install and use abbrevs to reduce size. + + SmallVector Record; + + const ValueEnumerator::ValueList &Vals = VE.getValues(); + const Type *LastTy = 0; + for (unsigned i = FirstVal; i != LastVal; ++i) { + const Value *V = Vals[i].first; + // If we need to switch types, do so now. + if (V->getType() != LastTy) { + LastTy = V->getType(); + Record.push_back(VE.getTypeID(LastTy)); + Stream.EmitRecord(bitc::CST_CODE_SETTYPE, Record); + Record.clear(); + } + + if (const InlineAsm *IA = dyn_cast(V)) { + assert(0 && IA && "FIXME: Inline asm writing unimp!"); + continue; + } + const Constant *C = cast(V); + unsigned Code = -1U; + unsigned AbbrevToUse = 0; + if (C->isNullValue()) { + Code = bitc::CST_CODE_NULL; + } else if (isa(C)) { + Code = bitc::CST_CODE_UNDEF; + } else if (const ConstantInt *IV = dyn_cast(C)) { + if (IV->getBitWidth() <= 64) { + int64_t V = IV->getSExtValue(); + if (V >= 0) + Record.push_back(V << 1); + else + Record.push_back((-V << 1) | 1); + Code = bitc::CST_CODE_INTEGER; + } else { // Wide integers, > 64 bits in size. + // We have an arbitrary precision integer value to write whose + // bit width is > 64. However, in canonical unsigned integer + // format it is likely that the high bits are going to be zero. + // So, we only write the number of active words. + unsigned NWords = IV->getValue().getActiveWords(); + const uint64_t *RawWords = IV->getValue().getRawData(); + Record.push_back(NWords); + for (unsigned i = 0; i != NWords; ++i) { + int64_t V = RawWords[i]; + if (V >= 0) + Record.push_back(V << 1); + else + Record.push_back((-V << 1) | 1); + } + Code = bitc::CST_CODE_WIDE_INTEGER; + } + } else if (const ConstantFP *CFP = dyn_cast(C)) { + Code = bitc::CST_CODE_FLOAT; + if (CFP->getType() == Type::FloatTy) { + Record.push_back(FloatToBits((float)CFP->getValue())); + } else { + assert (CFP->getType() == Type::DoubleTy && "Unknown FP type!"); + Record.push_back(DoubleToBits((double)CFP->getValue())); + } + } else if (isa(C) || isa(V) || + isa(V)) { + Code = bitc::CST_CODE_AGGREGATE; + Record.push_back(C->getNumOperands()); + for (unsigned i = 0, e = C->getNumOperands(); i != e; ++i) + Record.push_back(VE.getValueID(C->getOperand(i))); + } else if (const ConstantExpr *CE = dyn_cast(C)) { + Code = bitc::CST_CODE_CONSTEXPR; + // FIXME: optimize for binops, compares, etc. + Record.push_back(CE->getOpcode()); + Record.push_back(CE->getNumOperands()); + for (unsigned i = 0, e = CE->getNumOperands(); i != e; ++i) + Record.push_back(VE.getValueID(C->getOperand(i))); + // Compares also pass their predicate. + if (CE->isCompare()) + Record.push_back((unsigned)CE->getPredicate()); + } else { + assert(0 && "Unknown constant!"); + } + Stream.EmitRecord(Code, Record, AbbrevToUse); + Record.clear(); + } + Stream.ExitBlock(); +} + +static void WriteModuleConstants(const ValueEnumerator &VE, + BitstreamWriter &Stream) { + const ValueEnumerator::ValueList &Vals = VE.getValues(); + + // Find the first constant to emit, which is the first non-globalvalue value. + // We know globalvalues have been emitted by WriteModuleInfo. + for (unsigned i = 0, e = Vals.size(); i != e; ++i) { + if (!isa(Vals[i].first)) { + WriteConstants(i, Vals.size(), VE, Stream); + return; + } + } +} /// WriteModule - Emit the specified module to the bitstream. static void WriteModule(const Module *M, BitstreamWriter &Stream) { @@ -352,12 +458,13 @@ // Emit information describing all of the types in the module. WriteTypeTable(VE, Stream); - // FIXME: Emit constants. - // Emit top-level description of module, including target triple, inline asm, // descriptors for global variables, and function prototype info. WriteModuleInfo(M, VE, Stream); + // Emit constants. + WriteModuleConstants(VE, Stream); + // Emit the type symbol table information. WriteTypeSymbolTable(M->getTypeSymbolTable(), VE, Stream); From sabre at nondot.org Mon Apr 23 19:18:38 2007 From: sabre at nondot.org (Chris Lattner) Date: Mon, 23 Apr 2007 19:18:38 -0500 Subject: [llvm-commits] CVS: llvm/lib/Bitcode/Reader/BitcodeReader.cpp BitcodeReader.h Message-ID: <200704240018.l3O0Icoc016362@zion.cs.uiuc.edu> Changes in directory llvm/lib/Bitcode/Reader: BitcodeReader.cpp updated: 1.4 -> 1.5 BitcodeReader.h updated: 1.4 -> 1.5 --- Log message: track global inits --- Diffs of the changes: (+9 -3) BitcodeReader.cpp | 10 +++++++--- BitcodeReader.h | 2 ++ 2 files changed, 9 insertions(+), 3 deletions(-) Index: llvm/lib/Bitcode/Reader/BitcodeReader.cpp diff -u llvm/lib/Bitcode/Reader/BitcodeReader.cpp:1.4 llvm/lib/Bitcode/Reader/BitcodeReader.cpp:1.5 --- llvm/lib/Bitcode/Reader/BitcodeReader.cpp:1.4 Mon Apr 23 16:26:05 2007 +++ llvm/lib/Bitcode/Reader/BitcodeReader.cpp Mon Apr 23 19:18:21 2007 @@ -243,7 +243,7 @@ switch (Stream.ReadRecord(Code, Record)) { default: // Default behavior: unknown type. break; - case bitc::TST_ENTRY_CODE: // TST_ENTRY: [typeid, namelen, namechar x N] + case bitc::TST_CODE_ENTRY: // TST_ENTRY: [typeid, namelen, namechar x N] if (ConvertToString(Record, 1, TypeName)) return Error("Invalid TST_ENTRY record"); unsigned TypeID = Record[0]; @@ -288,7 +288,7 @@ switch (Stream.ReadRecord(Code, Record)) { default: // Default behavior: unknown type. break; - case bitc::VST_ENTRY_CODE: // VST_ENTRY: [valueid, namelen, namechar x N] + case bitc::TST_CODE_ENTRY: // VST_ENTRY: [valueid, namelen, namechar x N] if (ConvertToString(Record, 1, ValueName)) return Error("Invalid TST_ENTRY record"); unsigned ValueID = Record[0]; @@ -358,6 +358,8 @@ case bitc::MODULE_CODE_VERSION: // VERSION: [version#] if (Record.size() < 1) return Error("Malformed MODULE_CODE_VERSION"); + if (!GlobalInits.empty()) + return Error("Malformed global initializer set"); // Only version #0 is supported so far. if (Record[0] != 0) return Error("Unknown bitstream version!"); @@ -431,7 +433,9 @@ ValueList.push_back(NewGV); - // TODO: remember initializer/global pair for later substitution. + // Remember which value to use for the global initializer. + if (unsigned InitID = Record[2]) + GlobalInits.push_back(std::make_pair(NewGV, InitID-1)); break; } // FUNCTION: [type, callingconv, isproto, linkage, alignment, section, Index: llvm/lib/Bitcode/Reader/BitcodeReader.h diff -u llvm/lib/Bitcode/Reader/BitcodeReader.h:1.4 llvm/lib/Bitcode/Reader/BitcodeReader.h:1.5 --- llvm/lib/Bitcode/Reader/BitcodeReader.h:1.4 Mon Apr 23 16:26:05 2007 +++ llvm/lib/Bitcode/Reader/BitcodeReader.h Mon Apr 23 19:18:21 2007 @@ -22,12 +22,14 @@ namespace llvm { class BitstreamReader; class Value; + class GlobalValue; class BitcodeReader : public ModuleProvider { const char *ErrorString; std::vector TypeList; std::vector ValueList; + std::vector > GlobalInits; public: virtual ~BitcodeReader() {} From sabre at nondot.org Mon Apr 23 19:22:03 2007 From: sabre at nondot.org (Chris Lattner) Date: Mon, 23 Apr 2007 19:22:03 -0500 Subject: [llvm-commits] CVS: llvm/lib/Bitcode/Reader/BitcodeReader.cpp Message-ID: <200704240022.l3O0M3I3016589@zion.cs.uiuc.edu> Changes in directory llvm/lib/Bitcode/Reader: BitcodeReader.cpp updated: 1.5 -> 1.6 --- Log message: move check to the right place :) --- Diffs of the changes: (+4 -3) BitcodeReader.cpp | 7 ++++--- 1 files changed, 4 insertions(+), 3 deletions(-) Index: llvm/lib/Bitcode/Reader/BitcodeReader.cpp diff -u llvm/lib/Bitcode/Reader/BitcodeReader.cpp:1.5 llvm/lib/Bitcode/Reader/BitcodeReader.cpp:1.6 --- llvm/lib/Bitcode/Reader/BitcodeReader.cpp:1.5 Mon Apr 23 19:18:21 2007 +++ llvm/lib/Bitcode/Reader/BitcodeReader.cpp Mon Apr 23 19:21:45 2007 @@ -322,8 +322,11 @@ // Read all the records for this module. while (!Stream.AtEndOfStream()) { unsigned Code = Stream.ReadCode(); - if (Code == bitc::END_BLOCK) + if (Code == bitc::END_BLOCK) { + if (!GlobalInits.empty()) + return Error("Malformed global initializer set"); return Stream.ReadBlockEnd(); + } if (Code == bitc::ENTER_SUBBLOCK) { switch (Stream.ReadSubBlockID()) { @@ -358,8 +361,6 @@ case bitc::MODULE_CODE_VERSION: // VERSION: [version#] if (Record.size() < 1) return Error("Malformed MODULE_CODE_VERSION"); - if (!GlobalInits.empty()) - return Error("Malformed global initializer set"); // Only version #0 is supported so far. if (Record[0] != 0) return Error("Unknown bitstream version!"); From scottm at aero.org Mon Apr 23 20:24:38 2007 From: scottm at aero.org (Scott Michel) Date: Mon, 23 Apr 2007 20:24:38 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp Message-ID: <200704240124.l3O1Oc6U019732@zion.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen/SelectionDAG: SelectionDAGISel.cpp updated: 1.424 -> 1.425 --- Log message: Use '-1U' where '-1UL' is obvious overkill, eliminating gcc warnings about tests always being true in the process. --- Diffs of the changes: (+2 -2) SelectionDAGISel.cpp | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) Index: llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp diff -u llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.424 llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.425 --- llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.424 Sun Apr 22 18:15:29 2007 +++ llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp Mon Apr 23 20:24:20 2007 @@ -1177,7 +1177,7 @@ /// visitJumpTable - Emit JumpTable node in the current MBB void SelectionDAGLowering::visitJumpTable(SelectionDAGISel::JumpTable &JT) { // Emit the code for the jump table - assert(JT.Reg != -1UL && "Should lower JT Header first!"); + assert(JT.Reg != -1U && "Should lower JT Header first!"); MVT::ValueType PTy = TLI.getPointerTy(); SDOperand Index = DAG.getCopyFromReg(getRoot(), JT.Reg, PTy); SDOperand Table = DAG.getJumpTable(JT.JTI, PTy); @@ -1544,7 +1544,7 @@ // Set the jump table information so that we can codegen it as a second // MachineBasicBlock - SelectionDAGISel::JumpTable JT(-1UL, JTI, JumpTableBB, Default); + SelectionDAGISel::JumpTable JT(-1U, JTI, JumpTableBB, Default); SelectionDAGISel::JumpTableHeader JTH(First, Last, SV, CR.CaseBB, (CR.CaseBB == CurMBB)); if (CR.CaseBB == CurMBB) From sabre at nondot.org Mon Apr 23 22:30:05 2007 From: sabre at nondot.org (Chris Lattner) Date: Mon, 23 Apr 2007 22:30:05 -0500 Subject: [llvm-commits] CVS: llvm/lib/Bitcode/Writer/Writer.cpp Message-ID: <200704240330.l3O3U5cZ024807@zion.cs.uiuc.edu> Changes in directory llvm/lib/Bitcode/Writer: Writer.cpp updated: 1.6 -> 1.7 --- Log message: fix off-by-one computing size for section abbrevs --- Diffs of the changes: (+1 -1) Writer.cpp | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-) Index: llvm/lib/Bitcode/Writer/Writer.cpp diff -u llvm/lib/Bitcode/Writer/Writer.cpp:1.6 llvm/lib/Bitcode/Writer/Writer.cpp:1.7 --- llvm/lib/Bitcode/Writer/Writer.cpp:1.6 Mon Apr 23 19:16:04 2007 +++ llvm/lib/Bitcode/Writer/Writer.cpp Mon Apr 23 22:29:47 2007 @@ -220,7 +220,7 @@ Abbv->Add(BitCodeAbbrevOp(0)); else Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::FixedWidth, - Log2_32_Ceil(SectionMap.size()))); + Log2_32_Ceil(SectionMap.size()+1))); // Don't bother emitting vis + thread local. SimpleGVarAbbrev = Stream.EmitAbbrev(Abbv); } From sabre at nondot.org Mon Apr 23 22:30:52 2007 From: sabre at nondot.org (Chris Lattner) Date: Mon, 23 Apr 2007 22:30:52 -0500 Subject: [llvm-commits] CVS: llvm/lib/Bitcode/Reader/BitcodeReader.cpp BitcodeReader.h Message-ID: <200704240330.l3O3Uqek024876@zion.cs.uiuc.edu> Changes in directory llvm/lib/Bitcode/Reader: BitcodeReader.cpp updated: 1.6 -> 1.7 BitcodeReader.h updated: 1.5 -> 1.6 --- Log message: read basic constants: null, undef, integers <= 64bits --- Diffs of the changes: (+80 -2) BitcodeReader.cpp | 77 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ BitcodeReader.h | 5 ++- 2 files changed, 80 insertions(+), 2 deletions(-) Index: llvm/lib/Bitcode/Reader/BitcodeReader.cpp diff -u llvm/lib/Bitcode/Reader/BitcodeReader.cpp:1.6 llvm/lib/Bitcode/Reader/BitcodeReader.cpp:1.7 --- llvm/lib/Bitcode/Reader/BitcodeReader.cpp:1.6 Mon Apr 23 19:21:45 2007 +++ llvm/lib/Bitcode/Reader/BitcodeReader.cpp Mon Apr 23 22:30:34 2007 @@ -13,6 +13,7 @@ #include "BitcodeReader.h" #include "llvm/Bitcode/BitstreamReader.h" +#include "llvm/Constants.h" #include "llvm/DerivedTypes.h" #include "llvm/Module.h" #include "llvm/ADT/SmallString.h" @@ -303,6 +304,78 @@ } } +bool BitcodeReader::ParseConstants(BitstreamReader &Stream) { + if (Stream.EnterSubBlock()) + return Error("Malformed block record"); + + SmallVector Record; + + // Read all the records for this value table. + const Type *CurTy = Type::Int32Ty; + while (1) { + unsigned Code = Stream.ReadCode(); + if (Code == bitc::END_BLOCK) { + // If there are global var inits to process, do so now. + if (!GlobalInits.empty()) { + while (!GlobalInits.empty()) { + unsigned ValID = GlobalInits.back().second; + if (ValID >= ValueList.size()) + return Error("Invalid value ID for global var init!"); + if (Constant *C = dyn_cast(ValueList[ValID])) + GlobalInits.back().first->setInitializer(C); + else + return Error("Global variable initializer is not a constant!"); + GlobalInits.pop_back(); + } + } + + return Stream.ReadBlockEnd(); + } + + if (Code == bitc::ENTER_SUBBLOCK) { + // No known subblocks, always skip them. + Stream.ReadSubBlockID(); + if (Stream.SkipBlock()) + return Error("Malformed block record"); + continue; + } + + if (Code == bitc::DEFINE_ABBREV) { + Stream.ReadAbbrevRecord(); + continue; + } + + // Read a record. + Record.clear(); + Value *V = 0; + switch (Stream.ReadRecord(Code, Record)) { + default: // Default behavior: unknown constant + case bitc::CST_CODE_UNDEF: // UNDEF + V = UndefValue::get(CurTy); + break; + case bitc::CST_CODE_SETTYPE: // SETTYPE: [typeid] + if (Record.empty()) + return Error("Malformed CST_SETTYPE record"); + if (Record[0] >= TypeList.size()) + return Error("Invalid Type ID in CST_SETTYPE record"); + CurTy = TypeList[Record[0]]; + continue; + case bitc::CST_CODE_NULL: // NULL + V = Constant::getNullValue(CurTy); + break; + case bitc::CST_CODE_INTEGER: // INTEGER: [intval] + if (!isa(CurTy)) + return Error("Invalid type for CST_INTEGER"); + if (Record[0] & 1) + V = ConstantInt::get(CurTy, -(Record[0]>>1)); + else + V = ConstantInt::get(CurTy, Record[0]>>1); + break; + } + + ValueList.push_back(V); + } +} bool BitcodeReader::ParseModule(BitstreamReader &Stream, const std::string &ModuleID) { @@ -346,6 +419,10 @@ if (ParseValueSymbolTable(Stream)) return true; break; + case bitc::CONSTANTS_BLOCK_ID: + if (ParseConstants(Stream)) + return true; + break; } continue; } Index: llvm/lib/Bitcode/Reader/BitcodeReader.h diff -u llvm/lib/Bitcode/Reader/BitcodeReader.h:1.5 llvm/lib/Bitcode/Reader/BitcodeReader.h:1.6 --- llvm/lib/Bitcode/Reader/BitcodeReader.h:1.5 Mon Apr 23 19:18:21 2007 +++ llvm/lib/Bitcode/Reader/BitcodeReader.h Mon Apr 23 22:30:34 2007 @@ -22,14 +22,14 @@ namespace llvm { class BitstreamReader; class Value; - class GlobalValue; + class GlobalVariable; class BitcodeReader : public ModuleProvider { const char *ErrorString; std::vector TypeList; std::vector ValueList; - std::vector > GlobalInits; + std::vector > GlobalInits; public: virtual ~BitcodeReader() {} @@ -64,6 +64,7 @@ bool ParseTypeTable(BitstreamReader &Stream); bool ParseTypeSymbolTable(BitstreamReader &Stream); bool ParseValueSymbolTable(BitstreamReader &Stream); + bool ParseConstants(BitstreamReader &Stream); }; } // End llvm namespace From sabre at nondot.org Mon Apr 23 23:04:53 2007 From: sabre at nondot.org (Chris Lattner) Date: Mon, 23 Apr 2007 23:04:53 -0500 Subject: [llvm-commits] CVS: llvm/lib/Bitcode/Reader/BitcodeReader.cpp Message-ID: <200704240404.l3O44rm1025519@zion.cs.uiuc.edu> Changes in directory llvm/lib/Bitcode/Reader: BitcodeReader.cpp updated: 1.7 -> 1.8 --- Log message: add supprot for FP constants, wide integers, and fix the encoding of MININT --- Diffs of the changes: (+40 -8) BitcodeReader.cpp | 48 ++++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 40 insertions(+), 8 deletions(-) Index: llvm/lib/Bitcode/Reader/BitcodeReader.cpp diff -u llvm/lib/Bitcode/Reader/BitcodeReader.cpp:1.7 llvm/lib/Bitcode/Reader/BitcodeReader.cpp:1.8 --- llvm/lib/Bitcode/Reader/BitcodeReader.cpp:1.7 Mon Apr 23 22:30:34 2007 +++ llvm/lib/Bitcode/Reader/BitcodeReader.cpp Mon Apr 23 23:04:35 2007 @@ -17,6 +17,7 @@ #include "llvm/DerivedTypes.h" #include "llvm/Module.h" #include "llvm/ADT/SmallString.h" +#include "llvm/Support/MathExtras.h" using namespace llvm; /// ConvertToString - Convert a string from a record into an std::string, return @@ -204,8 +205,8 @@ const_cast(OldTy)->refineAbstractTypeTo(ResultTy); // This should have replaced the old opaque type with the new type in the - // value table... or with a preexisting type that was already in the system. - // Let's just make sure it did. + // value table... or with a preexisting type that was already in the + // system. Let's just make sure it did. assert(TypeList[NumRecords-1].get() != OldTy && "refineAbstractType didn't work!"); } @@ -304,6 +305,17 @@ } } +/// DecodeSignRotatedValue - Decode a signed value stored with the sign bit in +/// the LSB for dense VBR encoding. +static uint64_t DecodeSignRotatedValue(uint64_t V) { + if ((V & 1) == 0) + return V >> 1; + if (V != 1) + return -(V >> 1); + // There is no such thing as -0 with integers. "-0" really means MININT. + return 1ULL << 63; +} + bool BitcodeReader::ParseConstants(BitstreamReader &Stream) { if (Stream.EnterSubBlock()) return Error("Malformed block record"); @@ -359,17 +371,37 @@ if (Record[0] >= TypeList.size()) return Error("Invalid Type ID in CST_SETTYPE record"); CurTy = TypeList[Record[0]]; - continue; + continue; // Skip the ValueList manipulation. case bitc::CST_CODE_NULL: // NULL V = Constant::getNullValue(CurTy); break; case bitc::CST_CODE_INTEGER: // INTEGER: [intval] - if (!isa(CurTy)) - return Error("Invalid type for CST_INTEGER"); - if (Record[0] & 1) - V = ConstantInt::get(CurTy, -(Record[0]>>1)); + if (!isa(CurTy) || Record.empty()) + return Error("Invalid CST_INTEGER record"); + V = ConstantInt::get(CurTy, DecodeSignRotatedValue(Record[0])); + break; + case bitc::CST_CODE_WIDE_INTEGER: {// WIDE_INTEGER: [n, n x intval] + if (!isa(CurTy) || Record.empty() || + Record.size() < Record[0]+1) + return Error("Invalid WIDE_INTEGER record"); + + unsigned NumWords = Record[0]; + uint64_t *Data = new uint64_t[NumWords]; + for (unsigned i = 0; i != NumWords; ++i) + Data[i] = DecodeSignRotatedValue(Record[i+1]); + V = ConstantInt::get(APInt(cast(CurTy)->getBitWidth(), + NumWords, Data)); + break; + } + case bitc::CST_CODE_FLOAT: // FLOAT: [fpval] + if (Record.empty()) + return Error("Invalid FLOAT record"); + if (CurTy == Type::FloatTy) + V = ConstantFP::get(CurTy, BitsToFloat(Record[0])); + else if (CurTy == Type::DoubleTy) + V = ConstantFP::get(CurTy, BitsToDouble(Record[0])); else - V = ConstantInt::get(CurTy, Record[0]>>1); + V = UndefValue::get(CurTy); break; } From sabre at nondot.org Tue Apr 24 00:49:14 2007 From: sabre at nondot.org (Chris Lattner) Date: Tue, 24 Apr 2007 00:49:14 -0500 Subject: [llvm-commits] CVS: llvm/lib/Bitcode/Reader/BitcodeReader.cpp BitcodeReader.h Message-ID: <200704240549.l3O5nElM027271@zion.cs.uiuc.edu> Changes in directory llvm/lib/Bitcode/Reader: BitcodeReader.cpp updated: 1.8 -> 1.9 BitcodeReader.h updated: 1.6 -> 1.7 --- Log message: implement support for reading aggregate constants, including handling forward constant references, etc. --- Diffs of the changes: (+108 -5) BitcodeReader.cpp | 78 +++++++++++++++++++++++++++++++++++++++++++++++++++++- BitcodeReader.h | 35 +++++++++++++++++++++--- 2 files changed, 108 insertions(+), 5 deletions(-) Index: llvm/lib/Bitcode/Reader/BitcodeReader.cpp diff -u llvm/lib/Bitcode/Reader/BitcodeReader.cpp:1.8 llvm/lib/Bitcode/Reader/BitcodeReader.cpp:1.9 --- llvm/lib/Bitcode/Reader/BitcodeReader.cpp:1.8 Mon Apr 23 23:04:35 2007 +++ llvm/lib/Bitcode/Reader/BitcodeReader.cpp Tue Apr 24 00:48:56 2007 @@ -55,6 +55,39 @@ } } +namespace { + /// @brief A class for maintaining the slot number definition + /// as a placeholder for the actual definition for forward constants defs. + class ConstantPlaceHolder : public ConstantExpr { + ConstantPlaceHolder(); // DO NOT IMPLEMENT + void operator=(const ConstantPlaceHolder &); // DO NOT IMPLEMENT +public: + Use Op; + ConstantPlaceHolder(const Type *Ty) + : ConstantExpr(Ty, Instruction::UserOp1, &Op, 1), + Op(UndefValue::get(Type::Int32Ty), this) { + } + }; +} + +Constant *BitcodeReaderValueList::getConstantFwdRef(unsigned Idx, + const Type *Ty) { + if (Idx >= size()) { + // Insert a bunch of null values. + Uses.resize(Idx+1); + OperandList = &Uses[0]; + NumOperands = Idx+1; + } + + if (Uses[Idx]) + return cast(getOperand(Idx)); + + // Create and return a placeholder, which will later be RAUW'd. + Constant *C = new ConstantPlaceHolder(Ty); + Uses[Idx].init(C, this); + return C; +} + const Type *BitcodeReader::getTypeByID(unsigned ID, bool isTypeTable) { // If the TypeID is in range, return it. @@ -324,6 +357,7 @@ // Read all the records for this value table. const Type *CurTy = Type::Int32Ty; + unsigned NextCstNo = ValueList.size(); while (1) { unsigned Code = Stream.ReadCode(); if (Code == bitc::END_BLOCK) { @@ -341,6 +375,9 @@ } } + if (NextCstNo != ValueList.size()) + return Error("Invalid constant reference!"); + return Stream.ReadBlockEnd(); } @@ -403,9 +440,48 @@ else V = UndefValue::get(CurTy); break; + + case bitc::CST_CODE_AGGREGATE: {// AGGREGATE: [n, n x value number] + if (Record.empty() || Record.size() < Record[0]+1) + return Error("Invalid CST_AGGREGATE record"); + + unsigned Size = Record[0]; + std::vector Elts; + + if (const StructType *STy = dyn_cast(CurTy)) { + for (unsigned i = 0; i != Size; ++i) + Elts.push_back(ValueList.getConstantFwdRef(Record[i+1], + STy->getElementType(i))); + V = ConstantStruct::get(STy, Elts); + } else if (const ArrayType *ATy = dyn_cast(CurTy)) { + const Type *EltTy = ATy->getElementType(); + for (unsigned i = 0; i != Size; ++i) + Elts.push_back(ValueList.getConstantFwdRef(Record[i+1], EltTy)); + V = ConstantArray::get(ATy, Elts); + } else if (const VectorType *VTy = dyn_cast(CurTy)) { + const Type *EltTy = VTy->getElementType(); + for (unsigned i = 0; i != Size; ++i) + Elts.push_back(ValueList.getConstantFwdRef(Record[i+1], EltTy)); + V = ConstantVector::get(Elts); + } else { + V = UndefValue::get(CurTy); + } + } + } + + if (NextCstNo == ValueList.size()) + ValueList.push_back(V); + else if (ValueList[NextCstNo] == 0) + ValueList.initVal(NextCstNo, V); + else { + // If there was a forward reference to this constant, + Value *OldV = ValueList[NextCstNo]; + ValueList.setOperand(NextCstNo, V); + OldV->replaceAllUsesWith(V); + delete OldV; } - ValueList.push_back(V); + ++NextCstNo; } } Index: llvm/lib/Bitcode/Reader/BitcodeReader.h diff -u llvm/lib/Bitcode/Reader/BitcodeReader.h:1.6 llvm/lib/Bitcode/Reader/BitcodeReader.h:1.7 --- llvm/lib/Bitcode/Reader/BitcodeReader.h:1.6 Mon Apr 23 22:30:34 2007 +++ llvm/lib/Bitcode/Reader/BitcodeReader.h Tue Apr 24 00:48:56 2007 @@ -14,21 +14,48 @@ #ifndef BITCODE_READER_H #define BITCODE_READER_H -#include "llvm/Type.h" #include "llvm/ModuleProvider.h" +#include "llvm/Type.h" +#include "llvm/User.h" #include "llvm/Bitcode/LLVMBitCodes.h" #include namespace llvm { class BitstreamReader; - class Value; - class GlobalVariable; + +class BitcodeReaderValueList : public User { + std::vector Uses; +public: + BitcodeReaderValueList() : User(Type::VoidTy, Value::ArgumentVal, 0, 0) {} + + // vector compatibility methods + unsigned size() const { return getNumOperands(); } + void push_back(Value *V) { + Uses.push_back(Use(V, this)); + OperandList = &Uses[0]; + ++NumOperands; + } + + Value *operator[](unsigned i) const { return getOperand(i); } + + Value *back() const { return Uses.back(); } + void pop_back() { Uses.pop_back(); --NumOperands; } + bool empty() const { return NumOperands == 0; } + virtual void print(std::ostream&) const {} + + Constant *getConstantFwdRef(unsigned Idx, const Type *Ty); + void initVal(unsigned Idx, Value *V) { + assert(Uses[Idx] == 0 && "Cannot init an already init'd Use!"); + Uses[Idx].init(V, this); + } +}; + class BitcodeReader : public ModuleProvider { const char *ErrorString; std::vector TypeList; - std::vector ValueList; + BitcodeReaderValueList ValueList; std::vector > GlobalInits; public: virtual ~BitcodeReader() {} From resistor at mac.com Tue Apr 24 01:40:56 2007 From: resistor at mac.com (Owen Anderson) Date: Tue, 24 Apr 2007 01:40:56 -0500 Subject: [llvm-commits] CVS: llvm/lib/Transforms/Scalar/LICM.cpp Message-ID: <200704240640.l3O6eu4l028105@zion.cs.uiuc.edu> Changes in directory llvm/lib/Transforms/Scalar: LICM.cpp updated: 1.94 -> 1.95 --- Log message: Rollback some changes that adversely affected performance. I'm currently rethinking my approach to this, so hopefully I'll find a way to do this without making this slower. --- Diffs of the changes: (+26 -22) LICM.cpp | 48 ++++++++++++++++++++++++++---------------------- 1 files changed, 26 insertions(+), 22 deletions(-) Index: llvm/lib/Transforms/Scalar/LICM.cpp diff -u llvm/lib/Transforms/Scalar/LICM.cpp:1.94 llvm/lib/Transforms/Scalar/LICM.cpp:1.95 --- llvm/lib/Transforms/Scalar/LICM.cpp:1.94 Sat Apr 21 02:11:47 2007 +++ llvm/lib/Transforms/Scalar/LICM.cpp Tue Apr 24 01:40:39 2007 @@ -72,6 +72,7 @@ AU.setPreservesCFG(); AU.addRequiredID(LoopSimplifyID); AU.addRequired(); + AU.addRequired(); AU.addRequired(); AU.addRequired(); // For scalar promotion (mem2reg) AU.addRequired(); @@ -86,7 +87,8 @@ // Various analyses that we use... AliasAnalysis *AA; // Current AliasAnalysis information LoopInfo *LI; // Current LoopInfo - ETForest *ET; // ETForest for the current Loop... + ETForest *ET; // ETForest for the current loop.. + DominatorTree *DT; // Dominator Tree for the current Loop... DominanceFrontier *DF; // Current Dominance Frontier // State that is updated as we process loops @@ -98,19 +100,19 @@ /// SinkRegion - Walk the specified region of the CFG (defined by all blocks /// dominated by the specified block, and that are in the current loop) in - /// reverse depth first order w.r.t the ETForest. This allows us to + /// reverse depth first order w.r.t the DominatorTree. This allows us to /// visit uses before definitions, allowing us to sink a loop body in one /// pass without iteration. /// - void SinkRegion(BasicBlock *BB); + void SinkRegion(DominatorTree::Node *N); /// HoistRegion - Walk the specified region of the CFG (defined by all /// blocks dominated by the specified block, and that are in the current - /// loop) in depth first order w.r.t the ETForest. This allows us to + /// loop) in depth first order w.r.t the DominatorTree. This allows us to /// visit definitions before uses, allowing us to hoist a loop body in one /// pass without iteration. /// - void HoistRegion(BasicBlock *BB); + void HoistRegion(DominatorTree::Node *N); /// inSubLoop - Little predicate that returns true if the specified basic /// block is in a subloop of the current one, not the current one itself. @@ -135,20 +137,21 @@ if (BlockInLoop == LoopHeader) return true; - BasicBlock *IDom = ExitBlock; + DominatorTree::Node *BlockInLoopNode = DT->getNode(BlockInLoop); + DominatorTree::Node *IDom = DT->getNode(ExitBlock); // Because the exit block is not in the loop, we know we have to get _at // least_ its immediate dominator. do { // Get next Immediate Dominator. - IDom = ET->getIDom(IDom); + IDom = IDom->getIDom(); // If we have got to the header of the loop, then the instructions block // did not dominate the exit node, so we can't hoist it. - if (IDom == LoopHeader) + if (IDom->getBlock() == LoopHeader) return false; - } while (IDom != BlockInLoop); + } while (IDom != BlockInLoopNode); return true; } @@ -212,6 +215,7 @@ LI = &getAnalysis(); AA = &getAnalysis(); DF = &getAnalysis(); + DT = &getAnalysis(); ET = &getAnalysis(); CurAST = new AliasSetTracker(*AA); @@ -251,8 +255,8 @@ // us to sink instructions in one pass, without iteration. AFter sinking // instructions, we perform another pass to hoist them out of the loop. // - SinkRegion(L->getHeader()); - HoistRegion(L->getHeader()); + SinkRegion(DT->getNode(L->getHeader())); + HoistRegion(DT->getNode(L->getHeader())); // Now that all loop invariants have been removed from the loop, promote any // memory references to scalars that we can... @@ -269,19 +273,19 @@ /// SinkRegion - Walk the specified region of the CFG (defined by all blocks /// dominated by the specified block, and that are in the current loop) in -/// reverse depth first order w.r.t the ETForest. This allows us to visit +/// reverse depth first order w.r.t the DominatorTree. This allows us to visit /// uses before definitions, allowing us to sink a loop body in one pass without /// iteration. /// -void LICM::SinkRegion(BasicBlock *BB) { - assert(BB != 0 && "Null sink block?"); +void LICM::SinkRegion(DominatorTree::Node *N) { + assert(N != 0 && "Null dominator tree node?"); + BasicBlock *BB = N->getBlock(); // If this subregion is not in the top level loop at all, exit. if (!CurLoop->contains(BB)) return; // We are processing blocks in reverse dfo, so process children first... - std::vector Children; - ET->getChildren(BB, Children); + const std::vector &Children = N->getChildren(); for (unsigned i = 0, e = Children.size(); i != e; ++i) SinkRegion(Children[i]); @@ -307,11 +311,12 @@ /// HoistRegion - Walk the specified region of the CFG (defined by all blocks /// dominated by the specified block, and that are in the current loop) in depth -/// first order w.r.t the ETForest. This allows us to visit definitions +/// first order w.r.t the DominatorTree. This allows us to visit definitions /// before uses, allowing us to hoist a loop body in one pass without iteration. /// -void LICM::HoistRegion(BasicBlock *BB) { - assert(BB != 0 && "Null hoist block?"); +void LICM::HoistRegion(DominatorTree::Node *N) { + assert(N != 0 && "Null dominator tree node?"); + BasicBlock *BB = N->getBlock(); // If this subregion is not in the top level loop at all, exit. if (!CurLoop->contains(BB)) return; @@ -331,8 +336,7 @@ hoist(I); } - std::vector Children; - ET->getChildren(BB, Children); + const std::vector &Children = N->getChildren(); for (unsigned i = 0, e = Children.size(); i != e; ++i) HoistRegion(Children[i]); } @@ -603,7 +607,7 @@ std::vector ExitBlocks; CurLoop->getExitBlocks(ExitBlocks); - // For each exit block, walk up the ET until the + // For each exit block, get the DT node and walk up the DT until the // instruction's basic block is found or we exit the loop. for (unsigned i = 0, e = ExitBlocks.size(); i != e; ++i) if (!isExitBlockDominatedByBlockInLoop(ExitBlocks[i], Inst.getParent())) From sabre at nondot.org Tue Apr 24 02:03:26 2007 From: sabre at nondot.org (Chris Lattner) Date: Tue, 24 Apr 2007 02:03:26 -0500 Subject: [llvm-commits] CVS: llvm/include/llvm/Bitcode/LLVMBitCodes.h Message-ID: <200704240703.l3O73Qbw028483@zion.cs.uiuc.edu> Changes in directory llvm/include/llvm/Bitcode: LLVMBitCodes.h updated: 1.3 -> 1.4 --- Log message: add records for constant exprs --- Diffs of the changes: (+46 -9) LLVMBitCodes.h | 55 ++++++++++++++++++++++++++++++++++++++++++++++--------- 1 files changed, 46 insertions(+), 9 deletions(-) Index: llvm/include/llvm/Bitcode/LLVMBitCodes.h diff -u llvm/include/llvm/Bitcode/LLVMBitCodes.h:1.3 llvm/include/llvm/Bitcode/LLVMBitCodes.h:1.4 --- llvm/include/llvm/Bitcode/LLVMBitCodes.h:1.3 Mon Apr 23 18:29:59 2007 +++ llvm/include/llvm/Bitcode/LLVMBitCodes.h Tue Apr 24 02:03:08 2007 @@ -89,15 +89,52 @@ // The constants block (CONSTANTS_BLOCK_ID) describes emission for each // constant and maintains an implicit current type value. enum ConstantsSymtabCodes { - CST_CODE_SETTYPE = 1, // SETTYPE: [typeid] - CST_CODE_NULL = 2, // NULL - CST_CODE_UNDEF = 3, // UNDEF - CST_CODE_INTEGER = 4, // INTEGER: [intval] - CST_CODE_WIDE_INTEGER = 5, // WIDE_INTEGER: [n, n x intval] - CST_CODE_FLOAT = 6, // FLOAT: [fpval] - CST_CODE_AGGREGATE = 7, // AGGREGATE: [n, n x value number] - CST_CODE_CONSTEXPR = 8 // CONSTEXPR: [opcode, n, n x val#] - // TODO: CE_BINOP ETC + CST_CODE_SETTYPE = 1, // SETTYPE: [typeid] + CST_CODE_NULL = 2, // NULL + CST_CODE_UNDEF = 3, // UNDEF + CST_CODE_INTEGER = 4, // INTEGER: [intval] + CST_CODE_WIDE_INTEGER = 5, // WIDE_INTEGER: [n, n x intval] + CST_CODE_FLOAT = 6, // FLOAT: [fpval] + CST_CODE_AGGREGATE = 7, // AGGREGATE: [n, n x value number] + CST_CODE_CE_BINOP = 8, // CE_BINOP: [opcode, opval, opval] + CST_CODE_CE_CAST = 9, // CE_CAST: [opcode, opty, opval] + CST_CODE_CE_GEP = 10, // CE_GEP: [n, n x operands] + CST_CODE_CE_SELECT = 11, // CE_SELECT: [opval, opval, opval] + CST_CODE_CE_EXTRACTELT = 12, // CE_EXTRACTELT: [opty, opval, opval] + CST_CODE_CE_INSERTELT = 13, // CE_INSERTELT: [opval, opval, opval] + CST_CODE_CE_SHUFFLEVEC = 14, // CE_SHUFFLEVEC: [opval, opval, opval] + CST_CODE_CE_CMP = 15 // CE_CMP: [opty, opval, opval, pred] + }; + + enum CastOpcodes { + CAST_TRUNC = 0, + CAST_ZEXT = 1, + CAST_SEXT = 2, + CAST_FPTOUI = 3, + CAST_FPTOSI = 4, + CAST_UITOFP = 5, + CAST_SITOFP = 6, + CAST_FPTRUNC = 7, + CAST_FPEXT = 8, + CAST_PTRTOINT = 9, + CAST_INTTOPTR = 10, + CAST_BITCAST = 11 + }; + + enum BinaryOpcodes { + BINOP_ADD = 0, + BINOP_SUB = 1, + BINOP_MUL = 2, + BINOP_UDIV = 3, + BINOP_SDIV = 4, // overloaded for FP + BINOP_UREM = 5, + BINOP_SREM = 6, // overloaded for FP + BINOP_SHL = 7, + BINOP_LSHR = 8, + BINOP_ASHR = 9, + BINOP_AND = 10, + BINOP_OR = 11, + BINOP_XOR = 12 }; } // End bitc namespace From sabre at nondot.org Tue Apr 24 02:07:33 2007 From: sabre at nondot.org (Chris Lattner) Date: Tue, 24 Apr 2007 02:07:33 -0500 Subject: [llvm-commits] CVS: llvm/lib/Bitcode/Writer/Writer.cpp Message-ID: <200704240707.l3O77X9M029099@zion.cs.uiuc.edu> Changes in directory llvm/lib/Bitcode/Writer: Writer.cpp updated: 1.7 -> 1.8 --- Log message: implement reading and writing of constant exprs. --- Diffs of the changes: (+97 -9) Writer.cpp | 106 +++++++++++++++++++++++++++++++++++++++++++++++++++++++------ 1 files changed, 97 insertions(+), 9 deletions(-) Index: llvm/lib/Bitcode/Writer/Writer.cpp diff -u llvm/lib/Bitcode/Writer/Writer.cpp:1.7 llvm/lib/Bitcode/Writer/Writer.cpp:1.8 --- llvm/lib/Bitcode/Writer/Writer.cpp:1.7 Mon Apr 23 22:29:47 2007 +++ llvm/lib/Bitcode/Writer/Writer.cpp Tue Apr 24 02:07:11 2007 @@ -25,6 +25,47 @@ static const unsigned CurVersion = 0; +static unsigned GetEncodedCastOpcode(unsigned Opcode) { + switch (Opcode) { + default: assert(0 && "Unknown cast instruction!"); + case Instruction::Trunc : return bitc::CAST_TRUNC; + case Instruction::ZExt : return bitc::CAST_ZEXT; + case Instruction::SExt : return bitc::CAST_SEXT; + case Instruction::FPToUI : return bitc::CAST_FPTOUI; + case Instruction::FPToSI : return bitc::CAST_FPTOSI; + case Instruction::UIToFP : return bitc::CAST_UITOFP; + case Instruction::SIToFP : return bitc::CAST_SITOFP; + case Instruction::FPTrunc : return bitc::CAST_FPTRUNC; + case Instruction::FPExt : return bitc::CAST_FPEXT; + case Instruction::PtrToInt: return bitc::CAST_PTRTOINT; + case Instruction::IntToPtr: return bitc::CAST_INTTOPTR; + case Instruction::BitCast : return bitc::CAST_BITCAST; + } +} + +static unsigned GetEncodedBinaryOpcode(unsigned Opcode) { + switch (Opcode) { + default: assert(0 && "Unknown binary instruction!"); + case Instruction::Add: return bitc::BINOP_ADD; + case Instruction::Sub: return bitc::BINOP_SUB; + case Instruction::Mul: return bitc::BINOP_MUL; + case Instruction::UDiv: return bitc::BINOP_UDIV; + case Instruction::FDiv: + case Instruction::SDiv: return bitc::BINOP_SDIV; + case Instruction::URem: return bitc::BINOP_UREM; + case Instruction::FRem: + case Instruction::SRem: return bitc::BINOP_SREM; + case Instruction::Shl: return bitc::BINOP_SHL; + case Instruction::LShr: return bitc::BINOP_LSHR; + case Instruction::AShr: return bitc::BINOP_ASHR; + case Instruction::And: return bitc::BINOP_AND; + case Instruction::Or: return bitc::BINOP_OR; + case Instruction::Xor: return bitc::BINOP_XOR; + } +} + + + static void WriteStringRecord(unsigned Code, const std::string &Str, unsigned AbbrevToUse, BitstreamWriter &Stream) { SmallVector Vals; @@ -408,15 +449,62 @@ for (unsigned i = 0, e = C->getNumOperands(); i != e; ++i) Record.push_back(VE.getValueID(C->getOperand(i))); } else if (const ConstantExpr *CE = dyn_cast(C)) { - Code = bitc::CST_CODE_CONSTEXPR; - // FIXME: optimize for binops, compares, etc. - Record.push_back(CE->getOpcode()); - Record.push_back(CE->getNumOperands()); - for (unsigned i = 0, e = CE->getNumOperands(); i != e; ++i) - Record.push_back(VE.getValueID(C->getOperand(i))); - // Compares also pass their predicate. - if (CE->isCompare()) - Record.push_back((unsigned)CE->getPredicate()); + switch (CE->getOpcode()) { + default: + if (Instruction::isCast(CE->getOpcode())) { + Code = bitc::CST_CODE_CE_CAST; + Record.push_back(GetEncodedCastOpcode(CE->getOpcode())); + Record.push_back(VE.getTypeID(C->getOperand(0)->getType())); + Record.push_back(VE.getValueID(C->getOperand(0))); + } else { + assert(CE->getNumOperands() == 2 && "Unknown constant expr!"); + Code = bitc::CST_CODE_CE_BINOP; + Record.push_back(GetEncodedBinaryOpcode(CE->getOpcode())); + Record.push_back(VE.getValueID(C->getOperand(0))); + Record.push_back(VE.getValueID(C->getOperand(1))); + } + break; + case Instruction::GetElementPtr: + Code = bitc::CST_CODE_CE_GEP; + Record.push_back(CE->getNumOperands()); + for (unsigned i = 0, e = CE->getNumOperands(); i != e; ++i) { + Record.push_back(VE.getTypeID(C->getOperand(i)->getType())); + Record.push_back(VE.getValueID(C->getOperand(i))); + } + break; + case Instruction::Select: + Code = bitc::CST_CODE_CE_SELECT; + Record.push_back(VE.getValueID(C->getOperand(0))); + Record.push_back(VE.getValueID(C->getOperand(1))); + Record.push_back(VE.getValueID(C->getOperand(2))); + break; + case Instruction::ExtractElement: + Code = bitc::CST_CODE_CE_EXTRACTELT; + Record.push_back(VE.getTypeID(C->getOperand(0)->getType())); + Record.push_back(VE.getValueID(C->getOperand(0))); + Record.push_back(VE.getValueID(C->getOperand(1))); + break; + case Instruction::InsertElement: + Code = bitc::CST_CODE_CE_INSERTELT; + Record.push_back(VE.getValueID(C->getOperand(0))); + Record.push_back(VE.getValueID(C->getOperand(1))); + Record.push_back(VE.getValueID(C->getOperand(2))); + break; + case Instruction::ShuffleVector: + Code = bitc::CST_CODE_CE_SHUFFLEVEC; + Record.push_back(VE.getValueID(C->getOperand(0))); + Record.push_back(VE.getValueID(C->getOperand(1))); + Record.push_back(VE.getValueID(C->getOperand(2))); + break; + case Instruction::ICmp: + case Instruction::FCmp: + Code = bitc::CST_CODE_CE_CMP; + Record.push_back(VE.getTypeID(C->getOperand(0)->getType())); + Record.push_back(VE.getValueID(C->getOperand(0))); + Record.push_back(VE.getValueID(C->getOperand(1))); + Record.push_back(CE->getPredicate()); + break; + } } else { assert(0 && "Unknown constant!"); } From sabre at nondot.org Tue Apr 24 02:07:33 2007 From: sabre at nondot.org (Chris Lattner) Date: Tue, 24 Apr 2007 02:07:33 -0500 Subject: [llvm-commits] CVS: llvm/lib/Bitcode/Reader/BitcodeReader.cpp Message-ID: <200704240707.l3O77X8R029106@zion.cs.uiuc.edu> Changes in directory llvm/lib/Bitcode/Reader: BitcodeReader.cpp updated: 1.9 -> 1.10 --- Log message: implement reading and writing of constant exprs. --- Diffs of the changes: (+133 -6) BitcodeReader.cpp | 139 +++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 133 insertions(+), 6 deletions(-) Index: llvm/lib/Bitcode/Reader/BitcodeReader.cpp diff -u llvm/lib/Bitcode/Reader/BitcodeReader.cpp:1.9 llvm/lib/Bitcode/Reader/BitcodeReader.cpp:1.10 --- llvm/lib/Bitcode/Reader/BitcodeReader.cpp:1.9 Tue Apr 24 00:48:56 2007 +++ llvm/lib/Bitcode/Reader/BitcodeReader.cpp Tue Apr 24 02:07:11 2007 @@ -55,17 +55,56 @@ } } +static int GetDecodedCastOpcode(unsigned Val) { + switch (Val) { + default: return -1; + case bitc::CAST_TRUNC : return Instruction::Trunc; + case bitc::CAST_ZEXT : return Instruction::ZExt; + case bitc::CAST_SEXT : return Instruction::SExt; + case bitc::CAST_FPTOUI : return Instruction::FPToUI; + case bitc::CAST_FPTOSI : return Instruction::FPToSI; + case bitc::CAST_UITOFP : return Instruction::UIToFP; + case bitc::CAST_SITOFP : return Instruction::SIToFP; + case bitc::CAST_FPTRUNC : return Instruction::FPTrunc; + case bitc::CAST_FPEXT : return Instruction::FPExt; + case bitc::CAST_PTRTOINT: return Instruction::PtrToInt; + case bitc::CAST_INTTOPTR: return Instruction::IntToPtr; + case bitc::CAST_BITCAST : return Instruction::BitCast; + } +} +static int GetDecodedBinaryOpcode(unsigned Val, const Type *Ty) { + switch (Val) { + default: return -1; + case bitc::BINOP_ADD: return Instruction::Add; + case bitc::BINOP_SUB: return Instruction::Sub; + case bitc::BINOP_MUL: return Instruction::Mul; + case bitc::BINOP_UDIV: return Instruction::UDiv; + case bitc::BINOP_SDIV: + return Ty->isFPOrFPVector() ? Instruction::FDiv : Instruction::SDiv; + case bitc::BINOP_UREM: return Instruction::URem; + case bitc::BINOP_SREM: + return Ty->isFPOrFPVector() ? Instruction::FRem : Instruction::SRem; + case bitc::BINOP_SHL: return Instruction::Shl; + case bitc::BINOP_LSHR: return Instruction::LShr; + case bitc::BINOP_ASHR: return Instruction::AShr; + case bitc::BINOP_AND: return Instruction::And; + case bitc::BINOP_OR: return Instruction::Or; + case bitc::BINOP_XOR: return Instruction::Xor; + } +} + + namespace { /// @brief A class for maintaining the slot number definition /// as a placeholder for the actual definition for forward constants defs. class ConstantPlaceHolder : public ConstantExpr { ConstantPlaceHolder(); // DO NOT IMPLEMENT void operator=(const ConstantPlaceHolder &); // DO NOT IMPLEMENT -public: - Use Op; - ConstantPlaceHolder(const Type *Ty) - : ConstantExpr(Ty, Instruction::UserOp1, &Op, 1), - Op(UndefValue::get(Type::Int32Ty), this) { + public: + Use Op; + ConstantPlaceHolder(const Type *Ty) + : ConstantExpr(Ty, Instruction::UserOp1, &Op, 1), + Op(UndefValue::get(Type::Int32Ty), this) { } }; } @@ -79,8 +118,11 @@ NumOperands = Idx+1; } - if (Uses[Idx]) + if (Uses[Idx]) { + assert(Ty == getOperand(Idx)->getType() && + "Type mismatch in constant table!"); return cast(getOperand(Idx)); + } // Create and return a placeholder, which will later be RAUW'd. Constant *C = new ConstantPlaceHolder(Ty); @@ -466,6 +508,91 @@ } else { V = UndefValue::get(CurTy); } + break; + } + + case bitc::CST_CODE_CE_BINOP: { // CE_BINOP: [opcode, opval, opval] + if (Record.size() < 3) return Error("Invalid CE_BINOP record"); + int Opc = GetDecodedBinaryOpcode(Record[0], CurTy); + if (Opc < 0) return UndefValue::get(CurTy); // Unknown binop. + + Constant *LHS = ValueList.getConstantFwdRef(Record[1], CurTy); + Constant *RHS = ValueList.getConstantFwdRef(Record[2], CurTy); + V = ConstantExpr::get(Opc, LHS, RHS); + break; + } + case bitc::CST_CODE_CE_CAST: { // CE_CAST: [opcode, opty, opval] + if (Record.size() < 3) return Error("Invalid CE_CAST record"); + int Opc = GetDecodedCastOpcode(Record[0]); + if (Opc < 0) return UndefValue::get(CurTy); // Unknown cast. + + const Type *OpTy = getTypeByID(Record[1]); + Constant *Op = ValueList.getConstantFwdRef(Record[2], OpTy); + V = ConstantExpr::getCast(Opc, Op, CurTy); + break; + } + case bitc::CST_CODE_CE_GEP: { // CE_GEP: [n x operands] + if ((Record.size() & 1) == 0) return Error("Invalid CE_GEP record"); + SmallVector Elts; + for (unsigned i = 1, e = Record.size(); i != e; i += 2) { + const Type *ElTy = getTypeByID(Record[i]); + if (!ElTy) return Error("Invalid CE_GEP record"); + Elts.push_back(ValueList.getConstantFwdRef(Record[i+1], ElTy)); + } + return ConstantExpr::getGetElementPtr(Elts[0], &Elts[1], Elts.size()-1); + } + case bitc::CST_CODE_CE_SELECT: // CE_SELECT: [opval#, opval#, opval#] + if (Record.size() < 3) return Error("Invalid CE_SELECT record"); + V = ConstantExpr::getSelect(ValueList.getConstantFwdRef(Record[0], + Type::Int1Ty), + ValueList.getConstantFwdRef(Record[1],CurTy), + ValueList.getConstantFwdRef(Record[2],CurTy)); + break; + case bitc::CST_CODE_CE_EXTRACTELT: { // CE_EXTRACTELT: [opty, opval, opval] + if (Record.size() < 3) return Error("Invalid CE_EXTRACTELT record"); + const VectorType *OpTy = + dyn_cast_or_null(getTypeByID(Record[0])); + if (OpTy == 0) return Error("Invalid CE_EXTRACTELT record"); + Constant *Op0 = ValueList.getConstantFwdRef(Record[1], OpTy); + Constant *Op1 = ValueList.getConstantFwdRef(Record[2], + OpTy->getElementType()); + V = ConstantExpr::getExtractElement(Op0, Op1); + break; + } + case bitc::CST_CODE_CE_INSERTELT: { // CE_INSERTELT: [opval, opval, opval] + const VectorType *OpTy = dyn_cast(CurTy); + if (Record.size() < 3 || OpTy == 0) + return Error("Invalid CE_INSERTELT record"); + Constant *Op0 = ValueList.getConstantFwdRef(Record[0], OpTy); + Constant *Op1 = ValueList.getConstantFwdRef(Record[1], + OpTy->getElementType()); + Constant *Op2 = ValueList.getConstantFwdRef(Record[2], Type::Int32Ty); + V = ConstantExpr::getInsertElement(Op0, Op1, Op2); + break; + } + case bitc::CST_CODE_CE_SHUFFLEVEC: { // CE_SHUFFLEVEC: [opval, opval, opval] + const VectorType *OpTy = dyn_cast(CurTy); + if (Record.size() < 3 || OpTy == 0) + return Error("Invalid CE_INSERTELT record"); + Constant *Op0 = ValueList.getConstantFwdRef(Record[0], OpTy); + Constant *Op1 = ValueList.getConstantFwdRef(Record[1], OpTy); + const Type *ShufTy=VectorType::get(Type::Int32Ty, OpTy->getNumElements()); + Constant *Op2 = ValueList.getConstantFwdRef(Record[2], ShufTy); + V = ConstantExpr::getShuffleVector(Op0, Op1, Op2); + break; + } + case bitc::CST_CODE_CE_CMP: { // CE_CMP: [opty, opval, opval, pred] + if (Record.size() < 4) return Error("Invalid CE_CMP record"); + const Type *OpTy = getTypeByID(Record[0]); + if (OpTy == 0) return Error("Invalid CE_CMP record"); + Constant *Op0 = ValueList.getConstantFwdRef(Record[1], OpTy); + Constant *Op1 = ValueList.getConstantFwdRef(Record[2], OpTy); + + if (OpTy->isFloatingPoint()) + V = ConstantExpr::getFCmp(Record[3], Op0, Op1); + else + V = ConstantExpr::getICmp(Record[3], Op0, Op1); + break; } } From sabre at nondot.org Tue Apr 24 10:55:11 2007 From: sabre at nondot.org (Chris Lattner) Date: Tue, 24 Apr 2007 10:55:11 -0500 Subject: [llvm-commits] CVS: llvm/include/llvm/Bitcode/LLVMBitCodes.h Message-ID: <200704241555.l3OFtBRO005995@zion.cs.uiuc.edu> Changes in directory llvm/include/llvm/Bitcode: LLVMBitCodes.h updated: 1.4 -> 1.5 --- Log message: comentate --- Diffs of the changes: (+8 -0) LLVMBitCodes.h | 8 ++++++++ 1 files changed, 8 insertions(+) Index: llvm/include/llvm/Bitcode/LLVMBitCodes.h diff -u llvm/include/llvm/Bitcode/LLVMBitCodes.h:1.4 llvm/include/llvm/Bitcode/LLVMBitCodes.h:1.5 --- llvm/include/llvm/Bitcode/LLVMBitCodes.h:1.4 Tue Apr 24 02:03:08 2007 +++ llvm/include/llvm/Bitcode/LLVMBitCodes.h Tue Apr 24 10:54:42 2007 @@ -106,6 +106,10 @@ CST_CODE_CE_CMP = 15 // CE_CMP: [opty, opval, opval, pred] }; + /// CastOpcodes - These are values used in the bitcode files to encode which + /// cast a CST_CODE_CE_CAST or a XXX refers to. The values of these enums + /// have no fixed relation to the LLVM IR enum values. Changing these will + /// break compatibility with old files. enum CastOpcodes { CAST_TRUNC = 0, CAST_ZEXT = 1, @@ -121,6 +125,10 @@ CAST_BITCAST = 11 }; + /// BinaryOpcodes - These are values used in the bitcode files to encode which + /// binop a CST_CODE_CE_BINOP or a XXX refers to. The values of these enums + /// have no fixed relation to the LLVM IR enum values. Changing these will + /// break compatibility with old files. enum BinaryOpcodes { BINOP_ADD = 0, BINOP_SUB = 1, From sabre at nondot.org Tue Apr 24 12:21:11 2007 From: sabre at nondot.org (Chris Lattner) Date: Tue, 24 Apr 2007 12:21:11 -0500 Subject: [llvm-commits] CVS: llvm/lib/Bytecode/Reader/Analyzer.cpp Reader.cpp Message-ID: <200704241721.l3OHLB5B007685@zion.cs.uiuc.edu> Changes in directory llvm/lib/Bytecode/Reader: Analyzer.cpp updated: 1.40 -> 1.41 Reader.cpp updated: 1.253 -> 1.254 --- Log message: fix a memory leak --- Diffs of the changes: (+15 -14) Analyzer.cpp | 18 +++++++++--------- Reader.cpp | 11 ++++++----- 2 files changed, 15 insertions(+), 14 deletions(-) Index: llvm/lib/Bytecode/Reader/Analyzer.cpp diff -u llvm/lib/Bytecode/Reader/Analyzer.cpp:1.40 llvm/lib/Bytecode/Reader/Analyzer.cpp:1.41 --- llvm/lib/Bytecode/Reader/Analyzer.cpp:1.40 Thu Apr 12 13:32:50 2007 +++ llvm/lib/Bytecode/Reader/Analyzer.cpp Tue Apr 24 12:20:52 2007 @@ -165,7 +165,7 @@ << " Linkage=" << Linkage << " Visibility="<< Visibility << " Type="; - WriteTypeSymbolic(*os, ElemType, M); + //WriteTypeSymbolic(*os, ElemType, M); *os << " Slot=" << SlotNum << " InitSlot=" << initSlot << "\n"; } @@ -187,7 +187,7 @@ bca.numTypes++; if (os) { *os << " Type: "; - WriteTypeSymbolic(*os,Ty,M); + //WriteTypeSymbolic(*os,Ty,M); *os << "\n"; } } @@ -199,7 +199,7 @@ bca.numValues++; if (os) { *os << " Function Decl: "; - WriteTypeSymbolic(*os,Func->getType(),M); + //WriteTypeSymbolic(*os,Func->getType(),M); *os <<", Linkage=" << Func->getLinkage(); *os <<", Visibility=" << Func->getVisibility(); *os << "\n"; @@ -276,13 +276,13 @@ << " Linkage: " << Func->getLinkage() << "\n" << " Visibility: " << Func->getVisibility() << "\n" << " Type: "; - WriteTypeSymbolic(*os,Func->getType(),M); + //WriteTypeSymbolic(*os,Func->getType(),M); *os << "\n"; } currFunc = &bca.FunctionInfo[Func]; std::ostringstream tmp; - WriteTypeSymbolic(tmp,Func->getType(),M); + //WriteTypeSymbolic(tmp,Func->getType(),M); currFunc->description = tmp.str(); currFunc->name = Func->getName(); currFunc->byteSize = Size; @@ -388,7 +388,7 @@ Constant* ArrayVal ) { if (os) { *os << " ARRAY: "; - WriteTypeSymbolic(*os,AT,M); + //WriteTypeSymbolic(*os,AT,M); *os << " TypeSlot=" << TypeSlot << "\n"; for (unsigned i = 0; i != NumElts; ++i) { *os << " #" << i; @@ -411,7 +411,7 @@ { if (os) { *os << " STRUC: "; - WriteTypeSymbolic(*os,ST,M); + //WriteTypeSymbolic(*os,ST,M); *os << "\n"; for ( unsigned i = 0; i != NumElts; ++i) { *os << " #" << i << " "; Elements[i]->print(*os); @@ -433,7 +433,7 @@ { if (os) { *os << " PACKD: "; - WriteTypeSymbolic(*os,PT,M); + //WriteTypeSymbolic(*os,PT,M); *os << " TypeSlot=" << TypeSlot << "\n"; for ( unsigned i = 0; i != NumElts; ++i ) { *os << " #" << i; @@ -453,7 +453,7 @@ unsigned Slot, GlobalValue* GV ) { if (os) { *os << " PNTR: "; - WriteTypeSymbolic(*os,PT,M); + //WriteTypeSymbolic(*os,PT,M); *os << " Slot=" << Slot << " GlobalValue="; GV->print(*os); *os << "\n"; Index: llvm/lib/Bytecode/Reader/Reader.cpp diff -u llvm/lib/Bytecode/Reader/Reader.cpp:1.253 llvm/lib/Bytecode/Reader/Reader.cpp:1.254 --- llvm/lib/Bytecode/Reader/Reader.cpp:1.253 Sun Apr 22 17:22:02 2007 +++ llvm/lib/Bytecode/Reader/Reader.cpp Tue Apr 24 12:20:52 2007 @@ -1299,11 +1299,12 @@ Result = ConstantInt::get(IT, Val); if (Handler) Handler->handleConstantValue(Result); } else { - uint32_t numWords = read_vbr_uint(); - uint64_t *data = new uint64_t[numWords]; - for (uint32_t i = 0; i < numWords; ++i) - data[i] = read_vbr_uint64(); - Result = ConstantInt::get(APInt(IT->getBitWidth(), numWords, data)); + uint32_t NumWords = read_vbr_uint(); + SmallVector Words; + Words.resize(NumWords); + for (uint32_t i = 0; i < NumWords; ++i) + Words[i] = read_vbr_uint64(); + Result = ConstantInt::get(APInt(IT->getBitWidth(), NumWords, &Words[0])); if (Handler) Handler->handleConstantValue(Result); } break; From sabre at nondot.org Tue Apr 24 12:22:23 2007 From: sabre at nondot.org (Chris Lattner) Date: Tue, 24 Apr 2007 12:22:23 -0500 Subject: [llvm-commits] CVS: llvm/lib/Bitcode/Reader/BitcodeReader.cpp Message-ID: <200704241722.l3OHMN7u007738@zion.cs.uiuc.edu> Changes in directory llvm/lib/Bitcode/Reader: BitcodeReader.cpp updated: 1.10 -> 1.11 --- Log message: fix memory leak --- Diffs of the changes: (+4 -3) BitcodeReader.cpp | 7 ++++--- 1 files changed, 4 insertions(+), 3 deletions(-) Index: llvm/lib/Bitcode/Reader/BitcodeReader.cpp diff -u llvm/lib/Bitcode/Reader/BitcodeReader.cpp:1.10 llvm/lib/Bitcode/Reader/BitcodeReader.cpp:1.11 --- llvm/lib/Bitcode/Reader/BitcodeReader.cpp:1.10 Tue Apr 24 02:07:11 2007 +++ llvm/lib/Bitcode/Reader/BitcodeReader.cpp Tue Apr 24 12:22:05 2007 @@ -465,11 +465,12 @@ return Error("Invalid WIDE_INTEGER record"); unsigned NumWords = Record[0]; - uint64_t *Data = new uint64_t[NumWords]; + SmallVector Words; + Words.resize(NumWords); for (unsigned i = 0; i != NumWords; ++i) - Data[i] = DecodeSignRotatedValue(Record[i+1]); + Words[i] = DecodeSignRotatedValue(Record[i+1]); V = ConstantInt::get(APInt(cast(CurTy)->getBitWidth(), - NumWords, Data)); + NumWords, &Words[0])); break; } case bitc::CST_CODE_FLOAT: // FLOAT: [fpval] From sabre at nondot.org Tue Apr 24 13:15:41 2007 From: sabre at nondot.org (Chris Lattner) Date: Tue, 24 Apr 2007 13:15:41 -0500 Subject: [llvm-commits] CVS: llvm/lib/Bitcode/Reader/BitcodeReader.cpp BitcodeReader.h ReaderWrappers.cpp Message-ID: <200704241815.l3OIFfFH008751@zion.cs.uiuc.edu> Changes in directory llvm/lib/Bitcode/Reader: BitcodeReader.cpp updated: 1.11 -> 1.12 BitcodeReader.h updated: 1.7 -> 1.8 ReaderWrappers.cpp updated: 1.1 -> 1.2 --- Log message: ensure that every error return sets a message (and goes through Error, for easy breakpointing). Fix bugs reading constantexpr geps. We now can disassemble kc++ global initializers. --- Diffs of the changes: (+37 -19) BitcodeReader.cpp | 54 ++++++++++++++++++++++++++++++++++------------------- BitcodeReader.h | 1 ReaderWrappers.cpp | 1 3 files changed, 37 insertions(+), 19 deletions(-) Index: llvm/lib/Bitcode/Reader/BitcodeReader.cpp diff -u llvm/lib/Bitcode/Reader/BitcodeReader.cpp:1.11 llvm/lib/Bitcode/Reader/BitcodeReader.cpp:1.12 --- llvm/lib/Bitcode/Reader/BitcodeReader.cpp:1.11 Tue Apr 24 12:22:05 2007 +++ llvm/lib/Bitcode/Reader/BitcodeReader.cpp Tue Apr 24 13:15:21 2007 @@ -161,7 +161,9 @@ if (Code == bitc::END_BLOCK) { if (NumRecords != TypeList.size()) return Error("Invalid type forward reference in TYPE_BLOCK"); - return Stream.ReadBlockEnd(); + if (Stream.ReadBlockEnd()) + return Error("Error at end of type table block"); + return false; } if (Code == bitc::ENTER_SUBBLOCK) { @@ -299,8 +301,11 @@ std::string TypeName; while (1) { unsigned Code = Stream.ReadCode(); - if (Code == bitc::END_BLOCK) - return Stream.ReadBlockEnd(); + if (Code == bitc::END_BLOCK) { + if (Stream.ReadBlockEnd()) + return Error("Error at end of type symbol table block"); + return false; + } if (Code == bitc::ENTER_SUBBLOCK) { // No known subblocks, always skip them. @@ -344,9 +349,11 @@ SmallString<128> ValueName; while (1) { unsigned Code = Stream.ReadCode(); - if (Code == bitc::END_BLOCK) - return Stream.ReadBlockEnd(); - + if (Code == bitc::END_BLOCK) { + if (Stream.ReadBlockEnd()) + return Error("Error at end of value symbol table block"); + return false; + } if (Code == bitc::ENTER_SUBBLOCK) { // No known subblocks, always skip them. Stream.ReadSubBlockID(); @@ -420,7 +427,9 @@ if (NextCstNo != ValueList.size()) return Error("Invalid constant reference!"); - return Stream.ReadBlockEnd(); + if (Stream.ReadBlockEnd()) + return Error("Error at end of constants block"); + return false; } if (Code == bitc::ENTER_SUBBLOCK) { @@ -515,21 +524,25 @@ case bitc::CST_CODE_CE_BINOP: { // CE_BINOP: [opcode, opval, opval] if (Record.size() < 3) return Error("Invalid CE_BINOP record"); int Opc = GetDecodedBinaryOpcode(Record[0], CurTy); - if (Opc < 0) return UndefValue::get(CurTy); // Unknown binop. - - Constant *LHS = ValueList.getConstantFwdRef(Record[1], CurTy); - Constant *RHS = ValueList.getConstantFwdRef(Record[2], CurTy); - V = ConstantExpr::get(Opc, LHS, RHS); + if (Opc < 0) { + V = UndefValue::get(CurTy); // Unknown binop. + } else { + Constant *LHS = ValueList.getConstantFwdRef(Record[1], CurTy); + Constant *RHS = ValueList.getConstantFwdRef(Record[2], CurTy); + V = ConstantExpr::get(Opc, LHS, RHS); + } break; } case bitc::CST_CODE_CE_CAST: { // CE_CAST: [opcode, opty, opval] if (Record.size() < 3) return Error("Invalid CE_CAST record"); int Opc = GetDecodedCastOpcode(Record[0]); - if (Opc < 0) return UndefValue::get(CurTy); // Unknown cast. - - const Type *OpTy = getTypeByID(Record[1]); - Constant *Op = ValueList.getConstantFwdRef(Record[2], OpTy); - V = ConstantExpr::getCast(Opc, Op, CurTy); + if (Opc < 0) { + V = UndefValue::get(CurTy); // Unknown cast. + } else { + const Type *OpTy = getTypeByID(Record[1]); + Constant *Op = ValueList.getConstantFwdRef(Record[2], OpTy); + V = ConstantExpr::getCast(Opc, Op, CurTy); + } break; } case bitc::CST_CODE_CE_GEP: { // CE_GEP: [n x operands] @@ -540,7 +553,8 @@ if (!ElTy) return Error("Invalid CE_GEP record"); Elts.push_back(ValueList.getConstantFwdRef(Record[i+1], ElTy)); } - return ConstantExpr::getGetElementPtr(Elts[0], &Elts[1], Elts.size()-1); + V = ConstantExpr::getGetElementPtr(Elts[0], &Elts[1], Elts.size()-1); + break; } case bitc::CST_CODE_CE_SELECT: // CE_SELECT: [opval#, opval#, opval#] if (Record.size() < 3) return Error("Invalid CE_SELECT record"); @@ -634,7 +648,9 @@ if (Code == bitc::END_BLOCK) { if (!GlobalInits.empty()) return Error("Malformed global initializer set"); - return Stream.ReadBlockEnd(); + if (Stream.ReadBlockEnd()) + return Error("Error at end of module block"); + return false; } if (Code == bitc::ENTER_SUBBLOCK) { Index: llvm/lib/Bitcode/Reader/BitcodeReader.h diff -u llvm/lib/Bitcode/Reader/BitcodeReader.h:1.7 llvm/lib/Bitcode/Reader/BitcodeReader.h:1.8 --- llvm/lib/Bitcode/Reader/BitcodeReader.h:1.7 Tue Apr 24 00:48:56 2007 +++ llvm/lib/Bitcode/Reader/BitcodeReader.h Tue Apr 24 13:15:21 2007 @@ -58,6 +58,7 @@ BitcodeReaderValueList ValueList; std::vector > GlobalInits; public: + BitcodeReader() : ErrorString(0) {} virtual ~BitcodeReader() {} virtual void FreeState() {} Index: llvm/lib/Bitcode/Reader/ReaderWrappers.cpp diff -u llvm/lib/Bitcode/Reader/ReaderWrappers.cpp:1.1 llvm/lib/Bitcode/Reader/ReaderWrappers.cpp:1.2 --- llvm/lib/Bitcode/Reader/ReaderWrappers.cpp:1.1 Sun Apr 22 01:23:29 2007 +++ llvm/lib/Bitcode/Reader/ReaderWrappers.cpp Tue Apr 24 13:15:21 2007 @@ -51,6 +51,7 @@ unsigned char *Buffer = reinterpret_cast(File.base()); if (!ParseBitcode(Buffer, File.size(), Filename)) return false; + assert(getErrorString() && "Didn't set an error string?"); if (ErrMsg) *ErrMsg = getErrorString(); return true; } From dpatel at apple.com Tue Apr 24 13:49:52 2007 From: dpatel at apple.com (Devang Patel) Date: Tue, 24 Apr 2007 13:49:52 -0500 Subject: [llvm-commits] CVS: llvm/CREDITS.TXT Message-ID: <200704241849.l3OInqDr009854@zion.cs.uiuc.edu> Changes in directory llvm: CREDITS.TXT updated: 1.73 -> 1.74 --- Log message: Add myself. --- Diffs of the changes: (+6 -0) CREDITS.TXT | 6 ++++++ 1 files changed, 6 insertions(+) Index: llvm/CREDITS.TXT diff -u llvm/CREDITS.TXT:1.73 llvm/CREDITS.TXT:1.74 --- llvm/CREDITS.TXT:1.73 Sat Apr 21 03:16:24 2007 +++ llvm/CREDITS.TXT Tue Apr 24 13:49:33 2007 @@ -168,6 +168,12 @@ E: morten at hue.no D: Visual C++ compatibility fixes +N: Devang Patel +E: dpatel at apple.com +D: LTO tool, PassManager rewrite, Loop Pass Manager, Loop Rotate +D: GCC PCH Integration (llvm-gcc), llvm-gcc improvements +D: Optimizer improvements + N: Vladimir Prus W: http://vladimir_prus.blogspot.com E: ghost at cs.msu.su From dpatel at apple.com Tue Apr 24 14:24:58 2007 From: dpatel at apple.com (Devang Patel) Date: Tue, 24 Apr 2007 14:24:58 -0500 Subject: [llvm-commits] CVS: llvm/test/CFrontend/2007-04-24-bit-not-expr.ll Message-ID: <200704241924.l3OJOwAD010598@zion.cs.uiuc.edu> Changes in directory llvm/test/CFrontend: 2007-04-24-bit-not-expr.ll added (r1.1) --- Log message: New test case. --- Diffs of the changes: (+7 -0) 2007-04-24-bit-not-expr.ll | 7 +++++++ 1 files changed, 7 insertions(+) Index: llvm/test/CFrontend/2007-04-24-bit-not-expr.ll diff -c /dev/null llvm/test/CFrontend/2007-04-24-bit-not-expr.ll:1.1 *** /dev/null Tue Apr 24 14:24:49 2007 --- llvm/test/CFrontend/2007-04-24-bit-not-expr.ll Tue Apr 24 14:24:39 2007 *************** *** 0 **** --- 1,7 ---- + // PR 1346 + // RUN: %llvmgcc -c %s -o /dev/null + extern bar(void *); + + void f(void *cd) { + bar(((void *)((unsigned long)(cd) ^ -1))); + } From dpatel at apple.com Tue Apr 24 14:27:29 2007 From: dpatel at apple.com (dpatel at apple.com) Date: Tue, 24 Apr 2007 12:27:29 -0700 (PDT) Subject: [llvm-commits] [126481] Fix http://lists.cs.uiuc.edu/pipermail/llvm-commits/ Week-of-Mon-20070423/048355.html Message-ID: <20070424192729.6799310337BC8@src> Revision: 126481 Author: dpatel Date: 2007-04-24 12:27:29 -0700 (Tue, 24 Apr 2007) Log Message: ----------- Fix http://lists.cs.uiuc.edu/pipermail/llvm-commits/Week-of-Mon-20070423/048355.html Modified Paths: -------------- apple-local/branches/llvm/gcc/llvm-convert.cpp Modified: apple-local/branches/llvm/gcc/llvm-convert.cpp =================================================================== --- apple-local/branches/llvm/gcc/llvm-convert.cpp 2007-04-24 16:16:23 UTC (rev 126480) +++ apple-local/branches/llvm/gcc/llvm-convert.cpp 2007-04-24 19:27:29 UTC (rev 126481) @@ -2973,6 +2973,11 @@ Value *TreeToLLVM::EmitBIT_NOT_EXPR(tree exp) { Value *Op = Emit(TREE_OPERAND(exp, 0), 0); + if (isa(Op->getType())) { + assert (TREE_CODE(TREE_TYPE(exp)) == INTEGER_TYPE && + "Expected integer type here"); + Op = CastToType(Instruction::PtrToInt, Op, TREE_TYPE(exp)); + } return BinaryOperator::createNot(Op, Op->getName()+"not", CurBB); } From dpatel at apple.com Tue Apr 24 16:06:10 2007 From: dpatel at apple.com (Devang Patel) Date: Tue, 24 Apr 2007 16:06:10 -0500 Subject: [llvm-commits] CVS: llvm/test/CFrontend/2007-04-24-str-const.ll Message-ID: <200704242106.l3OL6A6V014439@zion.cs.uiuc.edu> Changes in directory llvm/test/CFrontend: 2007-04-24-str-const.ll added (r1.1) --- Log message: New test. --- Diffs of the changes: (+17 -0) 2007-04-24-str-const.ll | 17 +++++++++++++++++ 1 files changed, 17 insertions(+) Index: llvm/test/CFrontend/2007-04-24-str-const.ll diff -c /dev/null llvm/test/CFrontend/2007-04-24-str-const.ll:1.1 *** /dev/null Tue Apr 24 16:06:02 2007 --- llvm/test/CFrontend/2007-04-24-str-const.ll Tue Apr 24 16:05:52 2007 *************** *** 0 **** --- 1,17 ---- + // RUN: %llvmgcc -c %s -o /dev/null + static char *str; + + static const struct { + const char *name; + unsigned type; + } scan_special[] = { + {"shift", 1}, + {0, 0} + }; + + static void + sb(void) + { + while (*str == ' ' || *str == '\t') + str++; + } From dpatel at apple.com Tue Apr 24 16:07:03 2007 From: dpatel at apple.com (dpatel at apple.com) Date: Tue, 24 Apr 2007 14:07:03 -0700 (PDT) Subject: [llvm-commits] [126482] Magic! Message-ID: <20070424210703.3F69810398EE5@src> Revision: 126482 Author: dpatel Date: 2007-04-24 14:07:03 -0700 (Tue, 24 Apr 2007) Log Message: ----------- Magic! Fix http://lists.cs.uiuc.edu/pipermail/llvm-commits/Week-of-Mon-20070423/048357.html Modified Paths: -------------- apple-local/branches/llvm/gcc/llvm-convert.cpp Modified: apple-local/branches/llvm/gcc/llvm-convert.cpp =================================================================== --- apple-local/branches/llvm/gcc/llvm-convert.cpp 2007-04-24 19:27:29 UTC (rev 126481) +++ apple-local/branches/llvm/gcc/llvm-convert.cpp 2007-04-24 21:07:03 UTC (rev 126482) @@ -5796,7 +5796,7 @@ // Create a new string global. GlobalVariable *GV = new GlobalVariable(Init->getType(), StringIsConstant, GlobalVariable::InternalLinkage, - Init, "str", TheModule); + Init, ".str", TheModule); if (SlotP) *SlotP = GV; return GV; } From isanbard at gmail.com Tue Apr 24 16:13:43 2007 From: isanbard at gmail.com (Bill Wendling) Date: Tue, 24 Apr 2007 16:13:43 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp Message-ID: <200704242113.l3OLDhel014700@zion.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen/SelectionDAG: SelectionDAGISel.cpp updated: 1.425 -> 1.426 --- Log message: Assertion when using a 1-element vector for an add operation. Get the real vector type in this case. --- Diffs of the changes: (+7 -4) SelectionDAGISel.cpp | 11 +++++++---- 1 files changed, 7 insertions(+), 4 deletions(-) Index: llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp diff -u llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.425 llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.426 --- llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.425 Mon Apr 23 20:24:20 2007 +++ llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp Tue Apr 24 16:13:23 2007 @@ -308,19 +308,22 @@ const VectorType *PTy = cast(V->getType()); unsigned NumElts = PTy->getNumElements(); MVT::ValueType EltTy = TLI.getValueType(PTy->getElementType()); + MVT::ValueType VecTy = getVectorType(EltTy, NumElts); // Divide the input until we get to a supported size. This will always // end with a scalar if the target doesn't support vectors. - while (NumElts > 1 && !TLI.isTypeLegal(getVectorType(EltTy, NumElts))) { + while (NumElts > 1 && !TLI.isTypeLegal(VecTy)) { NumElts >>= 1; NumVectorRegs <<= 1; } - if (NumElts == 1) + + // Check that VecTy isn't a 1-element vector. + if (NumElts == 1 && VecTy == MVT::Other) VT = EltTy; else - VT = getVectorType(EltTy, NumElts); + VT = VecTy; } - + // The common case is that we will only create one register for this // value. If we have that case, create and return the virtual register. unsigned NV = TLI.getNumElements(VT); From isanbard at gmail.com Tue Apr 24 16:17:13 2007 From: isanbard at gmail.com (Bill Wendling) Date: Tue, 24 Apr 2007 16:17:13 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/X86/X86ISelLowering.cpp X86ISelLowering.h Message-ID: <200704242117.l3OLHDEt014820@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/X86: X86ISelLowering.cpp updated: 1.396 -> 1.397 X86ISelLowering.h updated: 1.99 -> 1.100 --- Log message: Support for the special case of a vector with the canonical form: vector_shuffle v1, v2, <2, 6, 3, 7> I.e. vector_shuffle v, undef, <2, 2, 3, 3> MMX only has a shuffle for v4i16 vectors. It needs to use the unpackh for this type of operation. --- Diffs of the changes: (+35 -2) X86ISelLowering.cpp | 32 ++++++++++++++++++++++++++++++-- X86ISelLowering.h | 5 +++++ 2 files changed, 35 insertions(+), 2 deletions(-) Index: llvm/lib/Target/X86/X86ISelLowering.cpp diff -u llvm/lib/Target/X86/X86ISelLowering.cpp:1.396 llvm/lib/Target/X86/X86ISelLowering.cpp:1.397 --- llvm/lib/Target/X86/X86ISelLowering.cpp:1.396 Sun Apr 22 17:50:52 2007 +++ llvm/lib/Target/X86/X86ISelLowering.cpp Tue Apr 24 16:16:55 2007 @@ -379,6 +379,8 @@ setOperationAction(ISD::SCALAR_TO_VECTOR, MVT::v8i8, Custom); setOperationAction(ISD::SCALAR_TO_VECTOR, MVT::v4i16, Custom); + setOperationAction(ISD::SCALAR_TO_VECTOR, MVT::v2i32, Custom); + setOperationAction(ISD::SCALAR_TO_VECTOR, MVT::v1i64, Custom); } if (Subtarget->hasSSE1()) { @@ -1776,7 +1778,7 @@ assert(N->getOpcode() == ISD::BUILD_VECTOR); unsigned NumElems = N->getNumOperands(); - if (NumElems != 4 && NumElems != 8 && NumElems != 16) + if (NumElems != 2 && NumElems != 4 && NumElems != 8 && NumElems != 16) return false; for (unsigned i = 0, j = 0; i != NumElems; i += 2, ++j) { @@ -1792,6 +1794,29 @@ return true; } +/// isUNPCKH_v_undef_Mask - Special case of isUNPCKHMask for canonical form +/// of vector_shuffle v, v, <2, 6, 3, 7>, i.e. vector_shuffle v, undef, +/// <2, 2, 3, 3> +bool X86::isUNPCKH_v_undef_Mask(SDNode *N) { + assert(N->getOpcode() == ISD::BUILD_VECTOR); + + unsigned NumElems = N->getNumOperands(); + if (NumElems != 2 && NumElems != 4 && NumElems != 8 && NumElems != 16) + return false; + + for (unsigned i = 0, j = NumElems / 2; i != NumElems; i += 2, ++j) { + SDOperand BitI = N->getOperand(i); + SDOperand BitI1 = N->getOperand(i + 1); + + if (!isUndefOrEqual(BitI, j)) + return false; + if (!isUndefOrEqual(BitI1, j)) + return false; + } + + return true; +} + /// isMOVLMask - Return true if the specified VECTOR_SHUFFLE operand /// specifies a shuffle of elements that is suitable for input to MOVSS, /// MOVSD, and MOVD, i.e. setting the lowest element. @@ -2432,7 +2457,7 @@ } } - // Let legalizer expand 2-wide build_vector's. + // Let legalizer expand 2-wide build_vectors. if (EVTBits == 64) return SDOperand(); @@ -2591,6 +2616,7 @@ } if (X86::isUNPCKL_v_undef_Mask(PermMask.Val) || + X86::isUNPCKH_v_undef_Mask(PermMask.Val) || X86::isUNPCKLMask(PermMask.Val) || X86::isUNPCKHMask(PermMask.Val)) return Op; @@ -2619,6 +2645,7 @@ // Commute is back and try unpck* again. Op = CommuteVectorShuffle(Op, V1, V2, PermMask, DAG); if (X86::isUNPCKL_v_undef_Mask(PermMask.Val) || + X86::isUNPCKH_v_undef_Mask(PermMask.Val) || X86::isUNPCKLMask(PermMask.Val) || X86::isUNPCKHMask(PermMask.Val)) return Op; @@ -4231,6 +4258,7 @@ isPSHUFHW_PSHUFLWMask(Mask.Val) || X86::isUNPCKLMask(Mask.Val) || X86::isUNPCKL_v_undef_Mask(Mask.Val) || + X86::isUNPCKH_v_undef_Mask(Mask.Val) || X86::isUNPCKHMask(Mask.Val)); } Index: llvm/lib/Target/X86/X86ISelLowering.h diff -u llvm/lib/Target/X86/X86ISelLowering.h:1.99 llvm/lib/Target/X86/X86ISelLowering.h:1.100 --- llvm/lib/Target/X86/X86ISelLowering.h:1.99 Fri Apr 20 16:38:10 2007 +++ llvm/lib/Target/X86/X86ISelLowering.h Tue Apr 24 16:16:55 2007 @@ -231,6 +231,11 @@ /// <0, 0, 1, 1> bool isUNPCKL_v_undef_Mask(SDNode *N); + /// isUNPCKH_v_undef_Mask - Special case of isUNPCKHMask for canonical form + /// of vector_shuffle v, v, <2, 6, 3, 7>, i.e. vector_shuffle v, undef, + /// <2, 2, 3, 3> + bool isUNPCKH_v_undef_Mask(SDNode *N); + /// isMOVLMask - Return true if the specified VECTOR_SHUFFLE operand /// specifies a shuffle of elements that is suitable for input to MOVSS, /// MOVSD, and MOVD, i.e. setting the lowest element. From isanbard at gmail.com Tue Apr 24 16:18:04 2007 From: isanbard at gmail.com (Bill Wendling) Date: Tue, 24 Apr 2007 16:18:04 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/X86/X86InstrInfo.cpp Message-ID: <200704242118.l3OLI4s2014857@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/X86: X86InstrInfo.cpp updated: 1.83 -> 1.84 --- Log message: Remove some invalid instructions from this check. --- Diffs of the changes: (+1 -2) X86InstrInfo.cpp | 3 +-- 1 files changed, 1 insertion(+), 2 deletions(-) Index: llvm/lib/Target/X86/X86InstrInfo.cpp diff -u llvm/lib/Target/X86/X86InstrInfo.cpp:1.83 llvm/lib/Target/X86/X86InstrInfo.cpp:1.84 --- llvm/lib/Target/X86/X86InstrInfo.cpp:1.83 Tue Apr 3 18:48:32 2007 +++ llvm/lib/Target/X86/X86InstrInfo.cpp Tue Apr 24 16:17:46 2007 @@ -38,8 +38,7 @@ oc == X86::MOVAPSrr || oc == X86::MOVAPDrr || oc == X86::MOVSS2PSrr || oc == X86::MOVSD2PDrr || oc == X86::MOVPS2SSrr || oc == X86::MOVPD2SDrr || - oc == X86::MMX_MOVD64rr || oc == X86::MMX_MOVQ64rr || - oc == X86::MMX_MOVDQ2Qrr || oc == X86::MMX_MOVQ2DQrr) { + oc == X86::MMX_MOVD64rr || oc == X86::MMX_MOVQ64rr) { assert(MI.getNumOperands() == 2 && MI.getOperand(0).isRegister() && MI.getOperand(1).isRegister() && From isanbard at gmail.com Tue Apr 24 16:18:56 2007 From: isanbard at gmail.com (Bill Wendling) Date: Tue, 24 Apr 2007 16:18:56 -0500 Subject: [llvm-commits] CVS: llvm/include/llvm/IntrinsicsX86.td Message-ID: <200704242118.l3OLIusD014894@zion.cs.uiuc.edu> Changes in directory llvm/include/llvm: IntrinsicsX86.td updated: 1.43 -> 1.44 --- Log message: Add the final MMX instructions. Correct a few wrong patterns. --- Diffs of the changes: (+4 -0) IntrinsicsX86.td | 4 ++++ 1 files changed, 4 insertions(+) Index: llvm/include/llvm/IntrinsicsX86.td diff -u llvm/include/llvm/IntrinsicsX86.td:1.43 llvm/include/llvm/IntrinsicsX86.td:1.44 --- llvm/include/llvm/IntrinsicsX86.td:1.43 Tue Apr 10 17:10:25 2007 +++ llvm/include/llvm/IntrinsicsX86.td Tue Apr 24 16:18:37 2007 @@ -704,4 +704,8 @@ let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". def int_x86_mmx_pmovmskb : GCCBuiltin<"__builtin_ia32_pmovmskb">, Intrinsic<[llvm_i32_ty, llvm_v8i8_ty], [IntrNoMem]>; + + def int_x86_mmx_movnt_dq : GCCBuiltin<"__builtin_ia32_movntq">, + Intrinsic<[llvm_void_ty, llvm_ptr_ty, + llvm_v1i64_ty], [IntrWriteMem]>; } From isanbard at gmail.com Tue Apr 24 16:18:57 2007 From: isanbard at gmail.com (Bill Wendling) Date: Tue, 24 Apr 2007 16:18:57 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/X86/X86InstrMMX.td Message-ID: <200704242118.l3OLIvIv014900@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/X86: X86InstrMMX.td updated: 1.30 -> 1.31 --- Log message: Add the final MMX instructions. Correct a few wrong patterns. --- Diffs of the changes: (+101 -19) X86InstrMMX.td | 120 +++++++++++++++++++++++++++++++++++++++++++++++---------- 1 files changed, 101 insertions(+), 19 deletions(-) Index: llvm/lib/Target/X86/X86InstrMMX.td diff -u llvm/lib/Target/X86/X86InstrMMX.td:1.30 llvm/lib/Target/X86/X86InstrMMX.td:1.31 --- llvm/lib/Target/X86/X86InstrMMX.td:1.30 Tue Apr 3 18:48:32 2007 +++ llvm/lib/Target/X86/X86InstrMMX.td Tue Apr 24 16:18:37 2007 @@ -61,14 +61,42 @@ // MMX Masks //===----------------------------------------------------------------------===// +// MMX_SHUFFLE_get_shuf_imm xform function: convert vector_shuffle mask to +// PSHUFW imm. +def MMX_SHUFFLE_get_shuf_imm : SDNodeXForm; + +// Patterns for: vector_shuffle v1, v2, <2, 6, 3, 7, ...> def MMX_UNPCKH_shuffle_mask : PatLeaf<(build_vector), [{ return X86::isUNPCKHMask(N); }]>; +// Patterns for: vector_shuffle v1, v2, <0, 4, 2, 5, ...> def MMX_UNPCKL_shuffle_mask : PatLeaf<(build_vector), [{ return X86::isUNPCKLMask(N); }]>; +// Patterns for: vector_shuffle v1, , <0, 0, 1, 1, ...> +def MMX_UNPCKH_v_undef_shuffle_mask : PatLeaf<(build_vector), [{ + return X86::isUNPCKH_v_undef_Mask(N); +}]>; + +// Patterns for: vector_shuffle v1, , <2, 2, 3, 3, ...> +def MMX_UNPCKL_v_undef_shuffle_mask : PatLeaf<(build_vector), [{ + return X86::isUNPCKL_v_undef_Mask(N); +}]>; + +// Patterns for shuffling. +def MMX_PSHUFW_shuffle_mask : PatLeaf<(build_vector), [{ + return X86::isPSHUFDMask(N); +}], MMX_SHUFFLE_get_shuf_imm>; + +// Patterns for: vector_shuffle v1, v2, <4, 5, 2, 3>; etc. +def MMX_MOVL_shuffle_mask : PatLeaf<(build_vector), [{ + return X86::isMOVLMask(N); +}]>; + //===----------------------------------------------------------------------===// // MMX Multiclasses //===----------------------------------------------------------------------===// @@ -166,15 +194,35 @@ def MMX_MOVDQ2Qrr : MMXID<0xD6, MRMDestMem, (ops VR64:$dst, VR128:$src), "movdq2q {$src, $dst|$dst, $src}", - [(store (i64 (vector_extract (v2i64 VR128:$src), - (iPTR 0))), VR64:$dst)]>; + [(set VR64:$dst, + (v1i64 (vector_extract (v2i64 VR128:$src), + (iPTR 0))))]>; + def MMX_MOVQ2DQrr : MMXIS<0xD6, MRMDestMem, (ops VR128:$dst, VR64:$src), "movq2dq {$src, $dst|$dst, $src}", - [(store (v1i64 VR64:$src), VR128:$dst)]>; + [(set VR128:$dst, + (bitconvert (v1i64 VR64:$src)))]>; def MMX_MOVNTQmr : MMXI<0xE7, MRMDestMem, (ops i64mem:$dst, VR64:$src), - "movntq {$src, $dst|$dst, $src}", []>; + "movntq {$src, $dst|$dst, $src}", + [(int_x86_mmx_movnt_dq addr:$dst, VR64:$src)]>; +let AddedComplexity = 15 in +// movd to MMX register zero-extends +def MMX_MOVZDI2PDIrr : MMX2I<0x6E, MRMSrcReg, (ops VR64:$dst, GR32:$src), + "movd {$src, $dst|$dst, $src}", + [(set VR64:$dst, + (v2i32 (vector_shuffle immAllZerosV, + (v2i32 (scalar_to_vector GR32:$src)), + MMX_MOVL_shuffle_mask)))]>; +let AddedComplexity = 20 in +def MMX_MOVZDI2PDIrm : MMX2I<0x6E, MRMSrcMem, (ops VR64:$dst, i32mem:$src), + "movd {$src, $dst|$dst, $src}", + [(set VR64:$dst, + (v2i32 (vector_shuffle immAllZerosV, + (v2i32 (scalar_to_vector + (loadi32 addr:$src))), + MMX_MOVL_shuffle_mask)))]>; // Arithmetic Instructions @@ -194,6 +242,7 @@ defm MMX_PSUBB : MMXI_binop_rm<0xF8, "psubb", sub, v8i8>; defm MMX_PSUBW : MMXI_binop_rm<0xF9, "psubw", sub, v4i16>; defm MMX_PSUBD : MMXI_binop_rm<0xFA, "psubd", sub, v2i32>; +defm MMX_PSUBQ : MMXI_binop_rm<0xFB, "psubq", sub, v1i64>; defm MMX_PSUBSB : MMXI_binop_rm_int<0xE8, "psubsb" , int_x86_mmx_psubs_b>; defm MMX_PSUBSW : MMXI_binop_rm_int<0xE9, "psubsw" , int_x86_mmx_psubs_w>; @@ -365,6 +414,23 @@ defm MMX_PACKSSDW : MMXI_binop_rm_int<0x6B, "packssdw", int_x86_mmx_packssdw>; defm MMX_PACKUSWB : MMXI_binop_rm_int<0x67, "packuswb", int_x86_mmx_packuswb>; +// -- Shuffle Instructions +def MMX_PSHUFWri : MMXIi8<0x70, MRMSrcReg, + (ops VR64:$dst, VR64:$src1, i8imm:$src2), + "pshufw {$src2, $src1, $dst|$dst, $src1, $src2}", + [(set VR64:$dst, + (v4i16 (vector_shuffle + VR64:$src1, (undef), + MMX_PSHUFW_shuffle_mask:$src2)))]>; +def MMX_PSHUFWmi : MMXIi8<0x70, MRMSrcMem, + (ops VR64:$dst, i64mem:$src1, i8imm:$src2), + "pshufw {$src2, $src1, $dst|$dst, $src1, $src2}", + [(set VR64:$dst, + (v4i16 (vector_shuffle + (bc_v4i16 (load_mmx addr:$src1)), + (undef), + MMX_PSHUFW_shuffle_mask:$src2)))]>; + // -- Conversion Instructions def MMX_CVTPD2PIrr : MMX2I<0x2D, MRMSrcReg, (ops VR64:$dst, VR128:$src), "cvtpd2pi {$src, $dst|$dst, $src}", []>; @@ -396,14 +462,6 @@ def MMX_CVTTPS2PIrm : MMXI<0x2C, MRMSrcMem, (ops VR64:$dst, f64mem:$src), "cvttps2pi {$src, $dst|$dst, $src}", []>; -// Shuffle and unpack instructions -def PSHUFWri : MMXIi8<0x70, MRMSrcReg, - (ops VR64:$dst, VR64:$src1, i8imm:$src2), - "pshufw {$src2, $src1, $dst|$dst, $src1, $src2}", []>; -def PSHUFWmi : MMXIi8<0x70, MRMSrcMem, - (ops VR64:$dst, i64mem:$src1, i8imm:$src2), - "pshufw {$src2, $src1, $dst|$dst, $src1, $src2}", []>; - // Extract / Insert def MMX_X86pextrw : SDNode<"X86ISD::PEXTRW", SDTypeProfile<1, 2, []>, []>; def MMX_X86pinsrw : SDNode<"X86ISD::PINSRW", SDTypeProfile<1, 3, []>, []>; @@ -494,16 +552,27 @@ def MMX_X86s2vec : SDNode<"X86ISD::S2VEC", SDTypeProfile<1, 1, []>, []>; -// Scalar to v4i16 / v8i8. The source may be a GR32, but only the lower 8 or -// 16-bits matter. +// Move scalar to XMM zero-extended +// movd to XMM register zero-extends +let AddedComplexity = 15 in { + def : Pat<(v8i8 (vector_shuffle immAllZerosV, + (v8i8 (MMX_X86s2vec GR32:$src)), MMX_MOVL_shuffle_mask)), + (MMX_MOVZDI2PDIrr GR32:$src)>; + def : Pat<(v4i16 (vector_shuffle immAllZerosV, + (v4i16 (MMX_X86s2vec GR32:$src)), MMX_MOVL_shuffle_mask)), + (MMX_MOVZDI2PDIrr GR32:$src)>; + def : Pat<(v2i32 (vector_shuffle immAllZerosV, + (v2i32 (MMX_X86s2vec GR32:$src)), MMX_MOVL_shuffle_mask)), + (MMX_MOVZDI2PDIrr GR32:$src)>; +} + +// Scalar to v2i32 / v4i16 / v8i8. The source may be a GR32, but only the lower +// 8 or 16-bits matter. def : Pat<(v8i8 (MMX_X86s2vec GR32:$src)), (MMX_MOVD64rr GR32:$src)>; def : Pat<(v4i16 (MMX_X86s2vec GR32:$src)), (MMX_MOVD64rr GR32:$src)>; +def : Pat<(v2i32 (MMX_X86s2vec GR32:$src)), (MMX_MOVD64rr GR32:$src)>; -// Recipes for: vector_shuffle v1, , <0, 0, 1, 1, ...> -def MMX_UNPCKL_v_undef_shuffle_mask : PatLeaf<(build_vector), [{ - return X86::isUNPCKL_v_undef_Mask(N); -}]>; - +// Patterns to perform canonical versions of vector shuffling. let AddedComplexity = 10 in { def : Pat<(v8i8 (vector_shuffle VR64:$src, (undef), MMX_UNPCKL_v_undef_shuffle_mask)), @@ -516,6 +585,19 @@ (MMX_PUNPCKLDQrr VR64:$src, VR64:$src)>; } +let AddedComplexity = 10 in { + def : Pat<(v8i8 (vector_shuffle VR64:$src, (undef), + MMX_UNPCKH_v_undef_shuffle_mask)), + (MMX_PUNPCKHBWrr VR64:$src, VR64:$src)>; + def : Pat<(v4i16 (vector_shuffle VR64:$src, (undef), + MMX_UNPCKH_v_undef_shuffle_mask)), + (MMX_PUNPCKHWDrr VR64:$src, VR64:$src)>; + def : Pat<(v2i32 (vector_shuffle VR64:$src, (undef), + MMX_UNPCKH_v_undef_shuffle_mask)), + (MMX_PUNPCKHDQrr VR64:$src, VR64:$src)>; +} + +// Patterns to perform vector shuffling with a zeroed out vector. let AddedComplexity = 20 in { def : Pat<(bc_v2i32 (vector_shuffle immAllZerosV, (v2i32 (scalar_to_vector (load_mmx addr:$src))), From isanbard at gmail.com Tue Apr 24 16:19:33 2007 From: isanbard at gmail.com (Bill Wendling) Date: Tue, 24 Apr 2007 16:19:33 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/X86/X86RegisterInfo.cpp Message-ID: <200704242119.l3OLJXWI014937@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/X86: X86RegisterInfo.cpp updated: 1.211 -> 1.212 --- Log message: Add the PADDQ to the list. --- Diffs of the changes: (+1 -0) X86RegisterInfo.cpp | 1 + 1 files changed, 1 insertion(+) Index: llvm/lib/Target/X86/X86RegisterInfo.cpp diff -u llvm/lib/Target/X86/X86RegisterInfo.cpp:1.211 llvm/lib/Target/X86/X86RegisterInfo.cpp:1.212 --- llvm/lib/Target/X86/X86RegisterInfo.cpp:1.211 Tue Apr 17 12:21:52 2007 +++ llvm/lib/Target/X86/X86RegisterInfo.cpp Tue Apr 24 16:19:14 2007 @@ -769,6 +769,7 @@ { X86::PACKUSWBrr, X86::PACKUSWBrm }, { X86::PADDBrr, X86::PADDBrm }, { X86::PADDDrr, X86::PADDDrm }, + { X86::PADDQrr, X86::PADDQrm }, { X86::PADDSBrr, X86::PADDSBrm }, { X86::PADDSWrr, X86::PADDSWrm }, { X86::PADDWrr, X86::PADDWrm }, From isanbard at gmail.com Tue Apr 24 16:20:22 2007 From: isanbard at gmail.com (Bill Wendling) Date: Tue, 24 Apr 2007 16:20:22 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/X86/README-MMX.txt Message-ID: <200704242120.l3OLKMtr014982@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/X86: README-MMX.txt updated: 1.2 -> 1.3 --- Log message: Update. --- Diffs of the changes: (+37 -0) README-MMX.txt | 37 +++++++++++++++++++++++++++++++++++++ 1 files changed, 37 insertions(+) Index: llvm/lib/Target/X86/README-MMX.txt diff -u llvm/lib/Target/X86/README-MMX.txt:1.2 llvm/lib/Target/X86/README-MMX.txt:1.3 --- llvm/lib/Target/X86/README-MMX.txt:1.2 Mon Mar 26 02:55:58 2007 +++ llvm/lib/Target/X86/README-MMX.txt Tue Apr 24 16:20:03 2007 @@ -3,3 +3,40 @@ //===---------------------------------------------------------------------===// //===---------------------------------------------------------------------===// + +This: + +#include + +__v2si qux(int A) { + return (__v2si){ 0, A }; +} + +is compiled into: + +_qux: + subl $28, %esp + movl 32(%esp), %eax + movd %eax, %mm0 + movq %mm0, (%esp) + movl (%esp), %eax + movl %eax, 20(%esp) + movq %mm0, 8(%esp) + movl 12(%esp), %eax + movl %eax, 16(%esp) + movq 16(%esp), %mm0 + addl $28, %esp + ret + +Yuck! + +GCC gives us: + +_qux: + subl $12, %esp + movl 16(%esp), %eax + movl 20(%esp), %edx + movl $0, (%eax) + movl %edx, 4(%eax) + addl $12, %esp + ret $4 From isanbard at gmail.com Tue Apr 24 17:28:49 2007 From: isanbard at gmail.com (Bill Wendling) Date: Tue, 24 Apr 2007 17:28:49 -0500 Subject: [llvm-commits] CVS: llvm/test/CodeGen/X86/mmx-insert-element.ll mmx-punpckhdq.ll Message-ID: <200704242228.l3OMSnoc016817@zion.cs.uiuc.edu> Changes in directory llvm/test/CodeGen/X86: mmx-insert-element.ll added (r1.1) mmx-punpckhdq.ll added (r1.1) --- Log message: Testcases for MMX. --- Diffs of the changes: (+37 -0) mmx-insert-element.ll | 23 +++++++++++++++++++++++ mmx-punpckhdq.ll | 14 ++++++++++++++ 2 files changed, 37 insertions(+) Index: llvm/test/CodeGen/X86/mmx-insert-element.ll diff -c /dev/null llvm/test/CodeGen/X86/mmx-insert-element.ll:1.1 *** /dev/null Tue Apr 24 17:28:40 2007 --- llvm/test/CodeGen/X86/mmx-insert-element.ll Tue Apr 24 17:28:30 2007 *************** *** 0 **** --- 1,23 ---- + ; RUN: llvm-as < %s | llc -march=x86 -mattr=+mmx | grep movq | wc -l | grep 3 + + ; FIXME: This code outputs: + ; + ; subl $28, %esp + ; movl 32(%esp), %eax + ; movd %eax, %mm0 + ; movq %mm0, (%esp) + ; movl (%esp), %eax + ; movl %eax, 20(%esp) + ; movq %mm0, 8(%esp) + ; movl 12(%esp), %eax + ; movl %eax, 16(%esp) + ; movq 16(%esp), %mm0 + ; addl $28, %esp + ; + ; Which is ugly. We need to fix this. + + define <2 x i32> @qux(i32 %A) { + entry: + %tmp3 = insertelement <2 x i32> < i32 0, i32 undef >, i32 %A, i32 1 ; <<2 x i32>> [#uses=1] + ret <2 x i32> %tmp3 + } Index: llvm/test/CodeGen/X86/mmx-punpckhdq.ll diff -c /dev/null llvm/test/CodeGen/X86/mmx-punpckhdq.ll:1.1 *** /dev/null Tue Apr 24 17:28:49 2007 --- llvm/test/CodeGen/X86/mmx-punpckhdq.ll Tue Apr 24 17:28:30 2007 *************** *** 0 **** --- 1,14 ---- + ; RUN: llvm-as < %s | llc -march=x86 -mattr=+mmx | grep punpckhdq | wc -l | grep 1 + + define void @bork(<1 x i64>* %x) { + entry: + %tmp2 = load <1 x i64>* %x ; <<1 x i64>> [#uses=1] + %tmp6 = bitcast <1 x i64> %tmp2 to <2 x i32> ; <<2 x i32>> [#uses=1] + %tmp9 = shufflevector <2 x i32> %tmp6, <2 x i32> undef, <2 x i32> < i32 1, i32 1 > ; <<2 x i32>> [#uses=1] + %tmp10 = bitcast <2 x i32> %tmp9 to <1 x i64> ; <<1 x i64>> [#uses=1] + store <1 x i64> %tmp10, <1 x i64>* %x + tail call void @llvm.x86.mmx.emms( ) + ret void + } + + declare void @llvm.x86.mmx.emms() From sabre at nondot.org Tue Apr 24 17:50:14 2007 From: sabre at nondot.org (Chris Lattner) Date: Tue, 24 Apr 2007 17:50:14 -0500 Subject: [llvm-commits] CVS: llvm/test/CodeGen/PowerPC/2007-04-24-InlineAsm-I-Modifier.ll Message-ID: <200704242250.l3OMoEiI017242@zion.cs.uiuc.edu> Changes in directory llvm/test/CodeGen/PowerPC: 2007-04-24-InlineAsm-I-Modifier.ll added (r1.1) --- Log message: testcase for PR1351: http://llvm.org/PR1351 --- Diffs of the changes: (+15 -0) 2007-04-24-InlineAsm-I-Modifier.ll | 15 +++++++++++++++ 1 files changed, 15 insertions(+) Index: llvm/test/CodeGen/PowerPC/2007-04-24-InlineAsm-I-Modifier.ll diff -c /dev/null llvm/test/CodeGen/PowerPC/2007-04-24-InlineAsm-I-Modifier.ll:1.1 *** /dev/null Tue Apr 24 17:50:07 2007 --- llvm/test/CodeGen/PowerPC/2007-04-24-InlineAsm-I-Modifier.ll Tue Apr 24 17:49:57 2007 *************** *** 0 **** --- 1,15 ---- + ; RUN: llvm-as < %s | llc -march=ppc32 -mtriple=powerpc-apple-darwin8.8.0 | grep {foo r3, r4} + ; RUN: llvm-as < %s | llc -march=ppc32 -mtriple=powerpc-apple-darwin8.8.0 | grep {bar r3, r} + + ; PR1351 + + define i32 @test1(i32 %Y, i32 %X) { + %tmp1 = tail call i32 asm "foo${1:I} $0, $1", "=r,rI"( i32 %X ) + ret i32 %tmp1 + } + + ;; TODO: We'd actually prefer this to be 'bari r3, 47', but 'bar r3, rN' is also ok. + define i32 @test2(i32 %Y, i32 %X) { + %tmp1 = tail call i32 asm "bar${1:I} $0, $1", "=r,rI"( i32 47 ) + ret i32 %tmp1 + } From sabre at nondot.org Tue Apr 24 17:51:21 2007 From: sabre at nondot.org (Chris Lattner) Date: Tue, 24 Apr 2007 17:51:21 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp Message-ID: <200704242251.l3OMpL80017335@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/PowerPC: PPCAsmPrinter.cpp updated: 1.237 -> 1.238 --- Log message: Fix PR1351: http://llvm.org/PR1351 and CodeGen/PowerPC/2007-04-24-InlineAsm-I-Modifier.ll --- Diffs of the changes: (+6 -0) PPCAsmPrinter.cpp | 6 ++++++ 1 files changed, 6 insertions(+) Index: llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp diff -u llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp:1.237 llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp:1.238 --- llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp:1.237 Thu Mar 8 02:31:54 2007 +++ llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp Tue Apr 24 17:51:03 2007 @@ -442,6 +442,12 @@ return true; ++OpNo; // Return the high-part. break; + case 'I': + // Write 'i' if an integer constant, otherwise nothing. Used to print + // addi vs add, etc. + if (MI->getOperand(OpNo).isImm()) + O << "i"; + return false; } } From dalej at apple.com Tue Apr 24 18:48:49 2007 From: dalej at apple.com (Dale Johannesen) Date: Tue, 24 Apr 2007 18:48:49 -0500 Subject: [llvm-commits] CVS: llvm/CREDITS.TXT Message-ID: <200704242348.l3ONmnTv018504@zion.cs.uiuc.edu> Changes in directory llvm: CREDITS.TXT updated: 1.74 -> 1.75 --- Log message: Add me --- Diffs of the changes: (+4 -0) CREDITS.TXT | 4 ++++ 1 files changed, 4 insertions(+) Index: llvm/CREDITS.TXT diff -u llvm/CREDITS.TXT:1.74 llvm/CREDITS.TXT:1.75 --- llvm/CREDITS.TXT:1.74 Tue Apr 24 13:49:33 2007 +++ llvm/CREDITS.TXT Tue Apr 24 18:48:30 2007 @@ -106,6 +106,10 @@ E: kungfoomaster at nondot.org D: Support for packed types +N: Dale Johannesen +E: dalej at apple.com +D: ARM constant islands improvments + N: Eric Kidd W: http://randomhacks.net/ D: llvm-config script From sabre at nondot.org Tue Apr 24 19:00:31 2007 From: sabre at nondot.org (Chris Lattner) Date: Tue, 24 Apr 2007 19:00:31 -0500 Subject: [llvm-commits] CVS: llvm/test/CodeGen/X86/2007-04-24-VectorCrash.ll Message-ID: <200704250000.l3P00V77018794@zion.cs.uiuc.edu> Changes in directory llvm/test/CodeGen/X86: 2007-04-24-VectorCrash.ll added (r1.1) --- Log message: new testcase that crashes llc --- Diffs of the changes: (+63 -0) 2007-04-24-VectorCrash.ll | 63 ++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 63 insertions(+) Index: llvm/test/CodeGen/X86/2007-04-24-VectorCrash.ll diff -c /dev/null llvm/test/CodeGen/X86/2007-04-24-VectorCrash.ll:1.1 *** /dev/null Tue Apr 24 19:00:22 2007 --- llvm/test/CodeGen/X86/2007-04-24-VectorCrash.ll Tue Apr 24 19:00:12 2007 *************** *** 0 **** --- 1,63 ---- + ; RUN: llvm-as < %s | llc -mcpu=yonah + target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64" + target triple = "i686-apple-darwin8" + + declare <4 x float> @llvm.x86.sse.add.ss(<4 x float>, <4 x float>) + + define void @test(float* %P) { + entry: + or <4 x i32> zeroinitializer, and (<4 x i32> bitcast (<4 x float> shufflevector (<4 x float> undef, <4 x float> undef, <4 x i32> zeroinitializer) to <4 x i32>), <4 x i32> < i32 -2147483648, i32 -2147483648, i32 -2147483648, i32 -2147483648 >) ; <<4 x i32>>:0 [#uses=1] + bitcast <4 x i32> %0 to <4 x float> ; <<4 x float>>:1 [#uses=1] + sub <4 x float> %1, zeroinitializer ; <<4 x float>>:2 [#uses=1] + sub <4 x float> shufflevector (<4 x float> undef, <4 x float> undef, <4 x i32> zeroinitializer), %2 ; <<4 x float>>:3 [#uses=1] + shufflevector <4 x float> zeroinitializer, <4 x float> %3, <4 x i32> < i32 0, i32 5, i32 6, i32 7 > ; <<4 x float>>:4 [#uses=1] + shufflevector <4 x float> zeroinitializer, <4 x float> %4, <4 x i32> < i32 0, i32 5, i32 6, i32 7 > ; <<4 x float>>:5 [#uses=1] + shufflevector <4 x float> zeroinitializer, <4 x float> %5, <4 x i32> < i32 0, i32 1, i32 2, i32 7 > ; <<4 x float>>:6 [#uses=1] + shufflevector <4 x float> %6, <4 x float> zeroinitializer, <4 x i32> < i32 0, i32 1, i32 2, i32 7 > ; <<4 x float>>:7 [#uses=1] + shufflevector <4 x float> %7, <4 x float> zeroinitializer, <4 x i32> < i32 0, i32 1, i32 2, i32 7 > ; <<4 x float>>:8 [#uses=1] + shufflevector <4 x float> zeroinitializer, <4 x float> %8, <4 x i32> < i32 0, i32 1, i32 2, i32 7 > ; <<4 x float>>:9 [#uses=1] + shufflevector <4 x float> zeroinitializer, <4 x float> %9, <4 x i32> < i32 0, i32 1, i32 2, i32 7 > ; <<4 x float>>:10 [#uses=1] + shufflevector <4 x float> zeroinitializer, <4 x float> %10, <4 x i32> < i32 0, i32 5, i32 6, i32 7 > ; <<4 x float>>:11 [#uses=1] + shufflevector <4 x float> zeroinitializer, <4 x float> %11, <4 x i32> < i32 0, i32 5, i32 6, i32 7 > ; <<4 x float>>:12 [#uses=1] + shufflevector <4 x float> %12, <4 x float> zeroinitializer, <4 x i32> < i32 0, i32 1, i32 2, i32 7 > ; <<4 x float>>:13 [#uses=1] + shufflevector <4 x float> zeroinitializer, <4 x float> %13, <4 x i32> < i32 0, i32 1, i32 2, i32 7 > ; <<4 x float>>:14 [#uses=1] + shufflevector <4 x float> zeroinitializer, <4 x float> %14, <4 x i32> < i32 0, i32 1, i32 2, i32 7 > ; <<4 x float>>:15 [#uses=1] + shufflevector <4 x float> %15, <4 x float> zeroinitializer, <4 x i32> < i32 0, i32 1, i32 2, i32 7 > ; <<4 x float>>:16 [#uses=1] + shufflevector <4 x float> zeroinitializer, <4 x float> %16, <4 x i32> < i32 0, i32 1, i32 2, i32 7 > ; <<4 x float>>:17 [#uses=1] + shufflevector <4 x float> %17, <4 x float> zeroinitializer, <4 x i32> < i32 0, i32 1, i32 2, i32 7 > ; <<4 x float>>:18 [#uses=1] + shufflevector <4 x float> %18, <4 x float> zeroinitializer, <4 x i32> < i32 0, i32 1, i32 2, i32 7 > ; <<4 x float>>:19 [#uses=1] + shufflevector <4 x float> zeroinitializer, <4 x float> %19, <4 x i32> < i32 0, i32 1, i32 2, i32 7 > ; <<4 x float>>:20 [#uses=1] + shufflevector <4 x float> %20, <4 x float> zeroinitializer, <4 x i32> < i32 0, i32 1, i32 2, i32 7 > ; <<4 x float>>:21 [#uses=1] + shufflevector <4 x float> %21, <4 x float> zeroinitializer, <4 x i32> < i32 0, i32 1, i32 2, i32 7 > ; <<4 x float>>:22 [#uses=1] + mul <4 x float> %22, zeroinitializer ; <<4 x float>>:23 [#uses=1] + shufflevector <4 x float> %23, <4 x float> undef, <4 x i32> < i32 2, i32 2, i32 2, i32 2 > ; <<4 x float>>:24 [#uses=1] + call <4 x float> @llvm.x86.sse.add.ss( <4 x float> zeroinitializer, <4 x float> %24 ) ; <<4 x float>>:25 [#uses=1] + shufflevector <4 x float> %25, <4 x float> undef, <4 x i32> zeroinitializer ; <<4 x float>>:26 [#uses=1] + shufflevector <4 x float> %26, <4 x float> zeroinitializer, <4 x i32> zeroinitializer ; <<4 x float>>:27 [#uses=1] + shufflevector <4 x float> %27, <4 x float> zeroinitializer, <4 x i32> < i32 4, i32 1, i32 6, i32 7 > ; <<4 x float>>:28 [#uses=1] + mul <4 x float> zeroinitializer, %28 ; <<4 x float>>:29 [#uses=1] + add <4 x float> %29, zeroinitializer ; <<4 x float>>:30 [#uses=1] + mul <4 x float> zeroinitializer, %30 ; <<4 x float>>:31 [#uses=1] + shufflevector <4 x float> zeroinitializer, <4 x float> %31, <4 x i32> < i32 0, i32 5, i32 6, i32 7 > ; <<4 x float>>:32 [#uses=1] + mul <4 x float> zeroinitializer, %32 ; <<4 x float>>:33 [#uses=1] + shufflevector <4 x float> %33, <4 x float> zeroinitializer, <4 x i32> zeroinitializer ; <<4 x float>>:34 [#uses=1] + mul <4 x float> zeroinitializer, %34 ; <<4 x float>>:35 [#uses=1] + shufflevector <4 x float> zeroinitializer, <4 x float> %35, <4 x i32> < i32 0, i32 1, i32 6, i32 7 > ; <<4 x float>>:36 [#uses=1] + shufflevector <4 x float> zeroinitializer, <4 x float> %36, <4 x i32> < i32 0, i32 5, i32 6, i32 7 > ; <<4 x float>>:37 [#uses=1] + shufflevector <4 x float> zeroinitializer, <4 x float> %37, <4 x i32> < i32 0, i32 5, i32 6, i32 7 > ; <<4 x float>>:38 [#uses=1] + shufflevector <4 x float> zeroinitializer, <4 x float> %38, <4 x i32> < i32 0, i32 5, i32 6, i32 7 > ; <<4 x float>>:39 [#uses=1] + shufflevector <4 x float> zeroinitializer, <4 x float> %39, <4 x i32> < i32 0, i32 5, i32 6, i32 7 > ; <<4 x float>>:40 [#uses=1] + shufflevector <4 x float> zeroinitializer, <4 x float> %40, <4 x i32> < i32 4, i32 1, i32 6, i32 7 > ; <<4 x float>>:41 [#uses=1] + shufflevector <4 x float> zeroinitializer, <4 x float> %41, <4 x i32> < i32 4, i32 1, i32 6, i32 7 > ; <<4 x float>>:42 [#uses=1] + shufflevector <4 x float> zeroinitializer, <4 x float> %42, <4 x i32> < i32 4, i32 1, i32 6, i32 7 > ; <<4 x float>>:43 [#uses=1] + shufflevector <4 x float> zeroinitializer, <4 x float> %43, <4 x i32> < i32 4, i32 1, i32 6, i32 7 > ; <<4 x float>>:44 [#uses=1] + shufflevector <4 x float> zeroinitializer, <4 x float> %44, <4 x i32> < i32 0, i32 5, i32 6, i32 7 > ; <<4 x float>>:45 [#uses=1] + shufflevector <4 x float> zeroinitializer, <4 x float> %45, <4 x i32> < i32 0, i32 5, i32 6, i32 7 > ; <<4 x float>>:46 [#uses=1] + shufflevector <4 x float> zeroinitializer, <4 x float> %46, <4 x i32> < i32 0, i32 5, i32 6, i32 7 > ; <<4 x float>>:47 [#uses=1] + shufflevector <4 x float> zeroinitializer, <4 x float> %47, <4 x i32> < i32 0, i32 5, i32 6, i32 7 > ; <<4 x float>>:48 [#uses=1] + shufflevector <4 x float> %48, <4 x float> undef, <4 x i32> < i32 1, i32 1, i32 1, i32 1 > ; <<4 x float>>:49 [#uses=1] + add <4 x float> %49, zeroinitializer ; <<4 x float>>:50 [#uses=1] + %tmp5845 = extractelement <4 x float> %50, i32 2 ; [#uses=1] + store float %tmp5845, float* %P + ret void + } From sabre at nondot.org Tue Apr 24 19:01:03 2007 From: sabre at nondot.org (Chris Lattner) Date: Tue, 24 Apr 2007 19:01:03 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp Message-ID: <200704250001.l3P013a4018819@zion.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen/SelectionDAG: SelectionDAG.cpp updated: 1.402 -> 1.403 --- Log message: Be more careful about folding op(x, undef) when we have vector operands. This fixes CodeGen/X86/2007-04-24-VectorCrash.ll --- Diffs of the changes: (+16 -9) SelectionDAG.cpp | 25 ++++++++++++++++--------- 1 files changed, 16 insertions(+), 9 deletions(-) Index: llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp diff -u llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:1.402 llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:1.403 --- llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:1.402 Sun Apr 22 18:15:30 2007 +++ llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp Tue Apr 24 19:00:45 2007 @@ -1294,13 +1294,8 @@ double F; uint64_t I; } u1; - union { - double F; - int64_t I; - } u2; u1.F = C1; - u2.F = C2; - if (u2.I < 0) // Sign bit of RHS set? + if (int64_t(DoubleToBits(C2)) < 0) // Sign bit of RHS set? u1.I |= 1ULL << 63; // Set the sign bit of the LHS. else u1.I &= (1ULL << 63)-1; // Clear the sign bit of the LHS. @@ -1336,7 +1331,11 @@ case ISD::SREM: case ISD::SRL: case ISD::SHL: - return getConstant(0, VT); // fold op(undef, arg2) -> 0 + if (!MVT::isVector(VT)) + return getConstant(0, VT); // fold op(undef, arg2) -> 0 + // For vectors, we can't easily build an all zero vector, just return + // the LHS. + return N2; } } } @@ -1363,9 +1362,17 @@ case ISD::AND: case ISD::SRL: case ISD::SHL: - return getConstant(0, VT); // fold op(arg1, undef) -> 0 + if (!MVT::isVector(VT)) + return getConstant(0, VT); // fold op(arg1, undef) -> 0 + // For vectors, we can't easily build an all zero vector, just return + // the LHS. + return N1; case ISD::OR: - return getConstant(MVT::getIntVTBitMask(VT), VT); + if (!MVT::isVector(VT)) + return getConstant(MVT::getIntVTBitMask(VT), VT); + // For vectors, we can't easily build an all one vector, just return + // the LHS. + return N1; case ISD::SRA: return N1; } From dalej at apple.com Tue Apr 24 19:15:07 2007 From: dalej at apple.com (Dale Johannesen) Date: Tue, 24 Apr 2007 19:15:07 -0500 Subject: [llvm-commits] CVS: llvm/CREDITS.TXT Message-ID: <200704250015.l3P0F714019051@zion.cs.uiuc.edu> Changes in directory llvm: CREDITS.TXT updated: 1.75 -> 1.76 --- Log message: fix typo --- Diffs of the changes: (+1 -1) CREDITS.TXT | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-) Index: llvm/CREDITS.TXT diff -u llvm/CREDITS.TXT:1.75 llvm/CREDITS.TXT:1.76 --- llvm/CREDITS.TXT:1.75 Tue Apr 24 18:48:30 2007 +++ llvm/CREDITS.TXT Tue Apr 24 19:14:49 2007 @@ -108,7 +108,7 @@ N: Dale Johannesen E: dalej at apple.com -D: ARM constant islands improvments +D: ARM constant islands improvements N: Eric Kidd W: http://randomhacks.net/ From sabre at nondot.org Tue Apr 24 19:26:24 2007 From: sabre at nondot.org (Chris Lattner) Date: Tue, 24 Apr 2007 19:26:24 -0500 Subject: [llvm-commits] CVS: llvm/test/CFrontend/2007-04-24-VolatileStructCopy.c Message-ID: <200704250026.l3P0QO8c019346@zion.cs.uiuc.edu> Changes in directory llvm/test/CFrontend: 2007-04-24-VolatileStructCopy.c added (r1.1) --- Log message: testcase for PR1352: http://llvm.org/PR1352 --- Diffs of the changes: (+10 -0) 2007-04-24-VolatileStructCopy.c | 10 ++++++++++ 1 files changed, 10 insertions(+) Index: llvm/test/CFrontend/2007-04-24-VolatileStructCopy.c diff -c /dev/null llvm/test/CFrontend/2007-04-24-VolatileStructCopy.c:1.1 *** /dev/null Tue Apr 24 19:26:15 2007 --- llvm/test/CFrontend/2007-04-24-VolatileStructCopy.c Tue Apr 24 19:26:05 2007 *************** *** 0 **** --- 1,10 ---- + // RUN: %llvmgcc -O3 -S -o - -emit-llvm %s | grep {volatile store} + // PR1352 + + struct foo { + int x; + }; + + void copy(volatile struct foo *p, struct foo *q) { + *p = *q; + } From clattner at apple.com Tue Apr 24 19:26:05 2007 From: clattner at apple.com (clattner at apple.com) Date: Tue, 24 Apr 2007 17:26:05 -0700 (PDT) Subject: [llvm-commits] [126488] Fix PR1352 and CFrontend/2007-04-24-VolatileStructCopy.c Message-ID: <20070425002605.38CE910426ADF@src> Revision: 126488 Author: clattner Date: 2007-04-24 17:26:05 -0700 (Tue, 24 Apr 2007) Log Message: ----------- Fix PR1352 and CFrontend/2007-04-24-VolatileStructCopy.c Modified Paths: -------------- apple-local/branches/llvm/gcc/llvm-convert.cpp Modified: apple-local/branches/llvm/gcc/llvm-convert.cpp =================================================================== --- apple-local/branches/llvm/gcc/llvm-convert.cpp 2007-04-25 00:21:38 UTC (rev 126487) +++ apple-local/branches/llvm/gcc/llvm-convert.cpp 2007-04-25 00:26:05 UTC (rev 126488) @@ -2762,9 +2762,23 @@ } // Non-bitfield aggregate value. - Emit(TREE_OPERAND(exp, 1), LV.Ptr); - if (DestLoc) + if (DestLoc) { + Emit(TREE_OPERAND(exp, 1), LV.Ptr); EmitAggregateCopy(DestLoc, LV.Ptr, TREE_TYPE(exp), isVolatile, false); + } else if (!isVolatile) { + Emit(TREE_OPERAND(exp, 1), LV.Ptr); + } else { + // Need to do a volatile store into TREE_OPERAND(exp, 1). To do this, we + // emit it into a temporary memory location, them do a volatile copy into + // the real destination. This is probably suboptimal in some cases, but + // it gets the volatile memory access right. It would be better if the + // destloc pointer of 'Emit' had a flag that indicated it should be + // volatile. + Value *Tmp = CreateTemporary(ConvertType(TREE_TYPE(TREE_OPERAND(exp,1)))); + Emit(TREE_OPERAND(exp, 1), Tmp); + EmitAggregateCopy(LV.Ptr, Tmp, TREE_TYPE(TREE_OPERAND(exp,1)), + isVolatile, false); + } return 0; } From sabre at nondot.org Tue Apr 24 19:32:03 2007 From: sabre at nondot.org (Chris Lattner) Date: Tue, 24 Apr 2007 19:32:03 -0500 Subject: [llvm-commits] CVS: llvm-www/DevMtgMay2007.html Message-ID: <200704250032.l3P0W3Zn019538@zion.cs.uiuc.edu> Changes in directory llvm-www: DevMtgMay2007.html updated: 1.113 -> 1.114 --- Log message: Add Ascenium folks --- Diffs of the changes: (+5 -3) DevMtgMay2007.html | 8 +++++--- 1 files changed, 5 insertions(+), 3 deletions(-) Index: llvm-www/DevMtgMay2007.html diff -u llvm-www/DevMtgMay2007.html:1.113 llvm-www/DevMtgMay2007.html:1.114 --- llvm-www/DevMtgMay2007.html:1.113 Mon Apr 23 11:58:07 2007 +++ llvm-www/DevMtgMay2007.html Tue Apr 24 19:31:45 2007 @@ -308,15 +308,16 @@ Julien LerougeApple Inc. Nick LewyckyIndependent Efrem LipkinCoDesign + Gabe McArthurIndependent - + @@ -332,12 +333,13 @@ +
Confirmed Attendees
NameOrganization
Gabe McArthurIndependent
Paul McJonesAdobe Systems Incorporated.
Scott MichelAerospace
Robert MyklandAscenium Corp.
Steve NaroffApple Inc.
Devang PatelApple Inc.
Fernando Magno Quintao PereiraUCLA
Sarah ThompsonNASA, Ames Research Center
Bill WendlingApple Inc.
Marcel WeiherMetaObject
James WeisnerAscenium Corp.
Calum WilkieMicrochip Technology
-

Total confirmed: 38

+

Total confirmed: 40

@@ -356,6 +358,6 @@ src="http://jigsaw.w3.org/css-validator/images/vcss" alt="Valid CSS!">Valid HTML 4.01! -
Last modified: $Date: 2007/04/23 16:58:07 $ +
Last modified: $Date: 2007/04/25 00:31:45 $ From dpatel at apple.com Tue Apr 24 19:35:55 2007 From: dpatel at apple.com (Devang Patel) Date: Tue, 24 Apr 2007 19:35:55 -0500 Subject: [llvm-commits] CVS: llvm/test/Other/2007-04-24-eliminate-mostly-empty-blocks.ll Message-ID: <200704250035.l3P0Zt5d019612@zion.cs.uiuc.edu> Changes in directory llvm/test/Other: 2007-04-24-eliminate-mostly-empty-blocks.ll added (r1.1) --- Log message: New test. --- Diffs of the changes: (+309 -0) 2007-04-24-eliminate-mostly-empty-blocks.ll | 309 ++++++++++++++++++++++++++++ 1 files changed, 309 insertions(+) Index: llvm/test/Other/2007-04-24-eliminate-mostly-empty-blocks.ll diff -c /dev/null llvm/test/Other/2007-04-24-eliminate-mostly-empty-blocks.ll:1.1 *** /dev/null Tue Apr 24 19:35:47 2007 --- llvm/test/Other/2007-04-24-eliminate-mostly-empty-blocks.ll Tue Apr 24 19:35:37 2007 *************** *** 0 **** --- 1,309 ---- + ;RUN: llvm-upgrade < %s | llvm-as | opt -codegenprepare -disable-output + + void @foo() { + entry: + br i1 false, label %cond_next31, label %cond_true + + cond_true: ; preds = %entry + br i1 false, label %cond_true19, label %cond_next31 + + cond_true19: ; preds = %cond_true + br i1 false, label %bb510, label %cond_next31 + + cond_next31: ; preds = %cond_true19, %cond_true, %entry + br i1 false, label %cond_true61, label %cond_next78 + + cond_true61: ; preds = %cond_next31 + br label %cond_next78 + + cond_next78: ; preds = %cond_true61, %cond_next31 + br i1 false, label %cond_true93, label %bb.preheader + + cond_true93: ; preds = %cond_next78 + br label %bb.preheader + + bb.preheader: ; preds = %cond_true93, %cond_next78 + %iftmp.11.0.ph.ph = phi i16 [ 0, %cond_true93 ], [ 0, %cond_next78 ] ; [#uses=1] + br label %bb + + bb: ; preds = %cond_next499, %bb.preheader + %n.1 = phi i16 [ %iftmp.11.0.ph.ph, %cond_next499 ], [ 0, %bb.preheader ] ; [#uses=0] + br i1 false, label %bb148.preheader, label %bb493 + + bb148.preheader: ; preds = %bb + br label %bb148 + + bb148: ; preds = %cond_next475, %bb148.preheader + br i1 false, label %cond_next175, label %bb184 + + cond_next175: ; preds = %bb148 + br i1 false, label %bb184, label %bb185 + + bb184: ; preds = %cond_next175, %bb148 + br label %bb185 + + bb185: ; preds = %bb184, %cond_next175 + br i1 false, label %bb420.preheader, label %cond_true198 + + bb420.preheader: ; preds = %bb185 + br label %bb420 + + cond_true198: ; preds = %bb185 + br i1 false, label %bb294, label %cond_next208 + + cond_next208: ; preds = %cond_true198 + br i1 false, label %cond_next249, label %cond_true214 + + cond_true214: ; preds = %cond_next208 + br i1 false, label %bb294, label %cond_next262 + + cond_next249: ; preds = %cond_next208 + br i1 false, label %bb294, label %cond_next262 + + cond_next262: ; preds = %cond_next249, %cond_true214 + br label %bb269 + + bb269: ; preds = %cond_next285, %cond_next262 + br i1 false, label %cond_next285, label %cond_true279 + + cond_true279: ; preds = %bb269 + br label %cond_next285 + + cond_next285: ; preds = %cond_true279, %bb269 + br i1 false, label %bb269, label %cond_next446.loopexit + + bb294: ; preds = %cond_next249, %cond_true214, %cond_true198 + br i1 false, label %cond_next336, label %cond_true301 + + cond_true301: ; preds = %bb294 + br i1 false, label %cond_false398, label %cond_true344 + + cond_next336: ; preds = %bb294 + br i1 false, label %cond_false398, label %cond_true344 + + cond_true344: ; preds = %cond_next336, %cond_true301 + br i1 false, label %cond_false381, label %cond_true351 + + cond_true351: ; preds = %cond_true344 + br label %cond_next387 + + cond_false381: ; preds = %cond_true344 + br label %cond_next387 + + cond_next387: ; preds = %cond_false381, %cond_true351 + br label %cond_next401 + + cond_false398: ; preds = %cond_next336, %cond_true301 + br label %cond_next401 + + cond_next401: ; preds = %cond_false398, %cond_next387 + br i1 false, label %cond_next475, label %cond_true453 + + bb420: ; preds = %cond_next434, %bb420.preheader + br i1 false, label %cond_next434, label %cond_true428 + + cond_true428: ; preds = %bb420 + br label %cond_next434 + + cond_next434: ; preds = %cond_true428, %bb420 + br i1 false, label %bb420, label %cond_next446.loopexit1 + + cond_next446.loopexit: ; preds = %cond_next285 + br label %cond_next446 + + cond_next446.loopexit1: ; preds = %cond_next434 + br label %cond_next446 + + cond_next446: ; preds = %cond_next446.loopexit1, %cond_next446.loopexit + br i1 false, label %cond_next475, label %cond_true453 + + cond_true453: ; preds = %cond_next446, %cond_next401 + br i1 false, label %cond_true458, label %cond_next475 + + cond_true458: ; preds = %cond_true453 + br label %cond_next475 + + cond_next475: ; preds = %cond_true458, %cond_true453, %cond_next446, %cond_next401 + br i1 false, label %bb493.loopexit, label %bb148 + + bb493.loopexit: ; preds = %cond_next475 + br label %bb493 + + bb493: ; preds = %bb493.loopexit, %bb + br i1 false, label %cond_next499, label %bb510.loopexit + + cond_next499: ; preds = %bb493 + br label %bb + + bb510.loopexit: ; preds = %bb493 + br label %bb510 + + bb510: ; preds = %bb510.loopexit, %cond_true19 + br i1 false, label %cond_next524, label %cond_true517 + + cond_true517: ; preds = %bb510 + br label %cond_next524 + + cond_next524: ; preds = %cond_true517, %bb510 + br i1 false, label %cond_next540, label %cond_true533 + + cond_true533: ; preds = %cond_next524 + br label %cond_next540 + + cond_next540: ; preds = %cond_true533, %cond_next524 + br i1 false, label %cond_true554, label %cond_next560 + + cond_true554: ; preds = %cond_next540 + br label %cond_next560 + + cond_next560: ; preds = %cond_true554, %cond_next540 + br i1 false, label %cond_true566, label %cond_next572 + + cond_true566: ; preds = %cond_next560 + br label %cond_next572 + + cond_next572: ; preds = %cond_true566, %cond_next560 + br i1 false, label %bb608.preheader, label %bb791.preheader + + bb608.preheader: ; preds = %cond_next797.us, %cond_next572 + br label %bb608 + + bb608: ; preds = %cond_next771, %bb608.preheader + br i1 false, label %cond_false627, label %cond_true613 + + cond_true613: ; preds = %bb608 + br label %cond_next640 + + cond_false627: ; preds = %bb608 + br label %cond_next640 + + cond_next640: ; preds = %cond_false627, %cond_true613 + br i1 false, label %cond_true653, label %cond_next671 + + cond_true653: ; preds = %cond_next640 + br label %cond_next671 + + cond_next671: ; preds = %cond_true653, %cond_next640 + br i1 false, label %cond_true683, label %cond_next724 + + cond_true683: ; preds = %cond_next671 + br i1 false, label %cond_next724, label %L1 + + cond_next724: ; preds = %cond_true683, %cond_next671 + br i1 false, label %cond_true735, label %L1 + + cond_true735: ; preds = %cond_next724 + br label %L1 + + L1: ; preds = %cond_true735, %cond_next724, %cond_true683 + br i1 false, label %cond_true745, label %cond_next771 + + cond_true745: ; preds = %L1 + br label %cond_next771 + + cond_next771: ; preds = %cond_true745, %L1 + br i1 false, label %bb608, label %bb791.preheader.loopexit + + bb791.preheader.loopexit: ; preds = %cond_next771 + br label %bb791.preheader + + bb791.preheader: ; preds = %bb791.preheader.loopexit, %cond_next572 + br i1 false, label %cond_next797.us, label %bb809.split + + cond_next797.us: ; preds = %bb791.preheader + br label %bb608.preheader + + bb809.split: ; preds = %bb791.preheader + br i1 false, label %cond_next827, label %cond_true820 + + cond_true820: ; preds = %bb809.split + br label %cond_next827 + + cond_next827: ; preds = %cond_true820, %bb809.split + br i1 false, label %cond_true833, label %cond_next840 + + cond_true833: ; preds = %cond_next827 + br label %cond_next840 + + cond_next840: ; preds = %cond_true833, %cond_next827 + br i1 false, label %bb866, label %bb1245 + + bb866: ; preds = %bb1239, %cond_next840 + br i1 false, label %cond_true875, label %bb911 + + cond_true875: ; preds = %bb866 + br label %cond_next1180 + + bb911: ; preds = %bb866 + switch i32 0, label %bb1165 [ + i32 0, label %bb915 + i32 1, label %bb932 + i32 2, label %bb941 + i32 3, label %bb1029 + i32 4, label %bb1036 + i32 5, label %bb1069 + i32 6, label %L3 + ] + + bb915: ; preds = %cond_next1171, %bb911 + br i1 false, label %cond_next1171, label %cond_next1180 + + bb932: ; preds = %cond_next1171, %bb911 + br label %L1970 + + bb941: ; preds = %cond_next1171, %bb911 + br label %L1970 + + L1970: ; preds = %bb941, %bb932 + br label %bb1165 + + bb1029: ; preds = %cond_next1171, %bb911 + br label %L4 + + bb1036: ; preds = %cond_next1171, %bb911 + br label %L4 + + bb1069: ; preds = %cond_next1171, %bb911 + br i1 false, label %cond_next1121, label %cond_true1108 + + L3: ; preds = %cond_next1171, %bb911 + br i1 false, label %cond_next1121, label %cond_true1108 + + cond_true1108: ; preds = %L3, %bb1069 + br label %L4 + + cond_next1121: ; preds = %L3, %bb1069 + br label %L4 + + L4: ; preds = %cond_next1121, %cond_true1108, %bb1036, %bb1029 + br label %bb1165 + + bb1165: ; preds = %cond_next1171, %L4, %L1970, %bb911 + br i1 false, label %cond_next1171, label %cond_next1180 + + cond_next1171: ; preds = %bb1165, %bb915 + switch i32 0, label %bb1165 [ + i32 0, label %bb915 + i32 1, label %bb932 + i32 2, label %bb941 + i32 3, label %bb1029 + i32 4, label %bb1036 + i32 5, label %bb1069 + i32 6, label %L3 + ] + + cond_next1180: ; preds = %bb1165, %bb915, %cond_true875 + br label %bb1239 + + bb1239: ; preds = %cond_next1251, %cond_next1180 + br i1 false, label %bb866, label %bb1245 + + bb1245: ; preds = %bb1239, %cond_next840 + br i1 false, label %cond_next1251, label %bb1257 + + cond_next1251: ; preds = %bb1245 + br label %bb1239 + + bb1257: ; preds = %bb1245 + ret void + } From dpatel at apple.com Tue Apr 24 19:37:23 2007 From: dpatel at apple.com (Devang Patel) Date: Tue, 24 Apr 2007 19:37:23 -0500 Subject: [llvm-commits] CVS: llvm/lib/Transforms/Scalar/CodeGenPrepare.cpp Message-ID: <200704250037.l3P0bN2o019649@zion.cs.uiuc.edu> Changes in directory llvm/lib/Transforms/Scalar: CodeGenPrepare.cpp updated: 1.5 -> 1.6 --- Log message: Fix http://lists.cs.uiuc.edu/pipermail/llvm-commits/Week-of-Mon-20070423/048376.html --- Diffs of the changes: (+12 -0) CodeGenPrepare.cpp | 12 ++++++++++++ 1 files changed, 12 insertions(+) Index: llvm/lib/Transforms/Scalar/CodeGenPrepare.cpp diff -u llvm/lib/Transforms/Scalar/CodeGenPrepare.cpp:1.5 llvm/lib/Transforms/Scalar/CodeGenPrepare.cpp:1.6 --- llvm/lib/Transforms/Scalar/CodeGenPrepare.cpp:1.5 Fri Apr 13 19:17:39 2007 +++ llvm/lib/Transforms/Scalar/CodeGenPrepare.cpp Tue Apr 24 19:37:04 2007 @@ -129,6 +129,18 @@ const Instruction *User = cast(*UI); if (User->getParent() != DestBB || !isa(User)) return false; + // If User is inside DestBB block and it is a PHINode then check + // incoming value. If incoming value is not from BB then this is + // a complex condition (e.g. preheaders) we want to avoid here. + if (User->getParent() == DestBB) { + if (const PHINode *UPN = dyn_cast(User)) + for (unsigned I = 0, E = UPN->getNumIncomingValues(); I != E; ++I) { + Instruction *Insn = dyn_cast(UPN->getIncomingValue(I)); + if (Insn && Insn->getParent() == BB && + Insn->getParent() != UPN->getIncomingBlock(I)) + return false; + } + } } } From sabre at nondot.org Tue Apr 24 20:51:52 2007 From: sabre at nondot.org (Chris Lattner) Date: Tue, 24 Apr 2007 20:51:52 -0500 Subject: [llvm-commits] CVS: llvm/test/CFrontend/block-copy.c Message-ID: <200704250151.l3P1pqM4021294@zion.cs.uiuc.edu> Changes in directory llvm/test/CFrontend: block-copy.c added (r1.1) --- Log message: new testcase --- Diffs of the changes: (+20 -0) block-copy.c | 20 ++++++++++++++++++++ 1 files changed, 20 insertions(+) Index: llvm/test/CFrontend/block-copy.c diff -c /dev/null llvm/test/CFrontend/block-copy.c:1.1 *** /dev/null Tue Apr 24 20:51:43 2007 --- llvm/test/CFrontend/block-copy.c Tue Apr 24 20:51:33 2007 *************** *** 0 **** --- 1,20 ---- + /* RUN: %llvmgcc %s -S -o - -emit-llvm -O3 | grep {call.*memcpy} + + This should compile into a memcpy from a global, not 128 stores. */ + + + + void foo(); + + float bar() { + float lookupTable[] = {-1,-1,-1,0, -1,-1,0,-1, -1,-1,0,1, -1,-1,1,0, + -1,0,-1,-1, -1,0,-1,1, -1,0,1,-1, -1,0,1,1, + -1,1,-1,0, -1,1,0,-1, -1,1,0,1, -1,1,1,0, + 0,-1,-1,-1, 0,-1,-1,1, 0,-1,1,-1, 0,-1,1,1, + 1,-1,-1,0, 1,-1,0,-1, 1,-1,0,1, 1,-1,1,0, + 1,0,-1,-1, 1,0,-1,1, 1,0,1,-1, 1,0,1,1, + 1,1,-1,0, 1,1,0,-1, 1,1,0,1, 1,1,1,0, + 0,1,-1,-1, 0,1,-1,1, 0,1,1,-1, 0,1,1,1}; + foo(lookupTable); + } + From clattner at apple.com Tue Apr 24 20:53:42 2007 From: clattner at apple.com (clattner at apple.com) Date: Tue, 24 Apr 2007 18:53:42 -0700 (PDT) Subject: [llvm-commits] [126489] add it turns out, using "(((SIZE)/(ALIGN)) > (MOVE_RATIO))" as a decision of Message-ID: <20070425015342.480BD10444DA1@src> Revision: 126489 Author: clattner Date: 2007-04-24 18:53:42 -0700 (Tue, 24 Apr 2007) Log Message: ----------- add it turns out, using "(((SIZE)/(ALIGN)) > (MOVE_RATIO))" as a decision of whether or not to do a copy with scalar stores is an extremely bad idea. For example, it turns the initializer in test/CFrontend/block-copy.c into 128 scalar stores (it is size 512 with alignment 32). Since this stuff is only used by the gimplifier for CONSTRUCTOR lowering, force it to always use memcpy when possible. This dramatically reduces the code size of some examples. Modified Paths: -------------- apple-local/branches/llvm/gcc/expr.c Modified: apple-local/branches/llvm/gcc/expr.c =================================================================== --- apple-local/branches/llvm/gcc/expr.c 2007-04-25 00:26:05 UTC (rev 126488) +++ apple-local/branches/llvm/gcc/expr.c 2007-04-25 01:53:42 UTC (rev 126489) @@ -175,16 +175,10 @@ /* APPLE LOCAL begin LLVM */ #ifdef ENABLE_LLVM +/* LLVM always emits moves with memcpy, which allows us to make smart decisions + later. This affects CONSTRUCTOR lowering in the gimplifier. */ #undef MOVE_BY_PIECES_P -#undef CLEAR_BY_PIECES_P -#undef STORE_BY_PIECES_P - -/* Disable functions like move_by_pieces_ninsns which want to look at - * optabs, which we do not initialize. - */ -#define STORE_BY_PIECES_P(SIZE, ALIGN) (((SIZE)/(ALIGN)) > (MOVE_RATIO)) -#define CLEAR_BY_PIECES_P(SIZE, ALIGN) (((SIZE)/(ALIGN)) > (CLEAR_RATIO)) -#define MOVE_BY_PIECES_P(SIZE, ALIGN) (((SIZE)/(ALIGN)) > (MOVE_RATIO)) +#define MOVE_BY_PIECES_P(SIZE, ALIGN) ((SIZE-SIZE)+(ALIGN-ALIGN)) #endif /* APPLE LOCAL end LLVM */ From sabre at nondot.org Tue Apr 24 23:07:50 2007 From: sabre at nondot.org (Chris Lattner) Date: Tue, 24 Apr 2007 23:07:50 -0500 Subject: [llvm-commits] CVS: llvm/include/llvm/CodeGen/MachineFrameInfo.h Message-ID: <200704250407.l3P47oGP023598@zion.cs.uiuc.edu> Changes in directory llvm/include/llvm/CodeGen: MachineFrameInfo.h updated: 1.23 -> 1.24 --- Log message: allow 64-bit stack objects --- Diffs of the changes: (+5 -5) MachineFrameInfo.h | 10 +++++----- 1 files changed, 5 insertions(+), 5 deletions(-) Index: llvm/include/llvm/CodeGen/MachineFrameInfo.h diff -u llvm/include/llvm/CodeGen/MachineFrameInfo.h:1.23 llvm/include/llvm/CodeGen/MachineFrameInfo.h:1.24 --- llvm/include/llvm/CodeGen/MachineFrameInfo.h:1.23 Wed Apr 4 02:38:25 2007 +++ llvm/include/llvm/CodeGen/MachineFrameInfo.h Tue Apr 24 23:07:31 2007 @@ -77,7 +77,7 @@ // StackObject - Represent a single object allocated on the stack. struct StackObject { // The size of this object on the stack. 0 means a variable sized object - unsigned Size; + uint64_t Size; // Alignment - The required alignment of this stack slot. unsigned Alignment; @@ -86,7 +86,7 @@ // the function. This field has no meaning for a variable sized element. int SPOffset; - StackObject(unsigned Sz, unsigned Al, int SP) + StackObject(uint64_t Sz, unsigned Al, int SP) : Size(Sz), Alignment(Al), SPOffset(SP) {} }; @@ -110,7 +110,7 @@ /// above. It then updates StackSize to contain the number of bytes that need /// to be allocated on entry to the function. /// - unsigned StackSize; + uint64_t StackSize; /// OffsetAdjustment - The amount that a frame offset needs to be adjusted to /// have the actual offset from the stack/frame pointer. The calculation is @@ -257,7 +257,7 @@ /// All fixed objects should be created before other objects are created for /// efficiency. This returns an index with a negative value. /// - int CreateFixedObject(unsigned Size, int SPOffset) { + int CreateFixedObject(uint64_t Size, int SPOffset) { assert(Size != 0 && "Cannot allocate zero size fixed stack objects!"); Objects.insert(Objects.begin(), StackObject(Size, 1, SPOffset)); return -++NumFixedObjects; @@ -272,7 +272,7 @@ /// CreateStackObject - Create a new statically sized stack object, returning /// a postive identifier to represent it. /// - int CreateStackObject(unsigned Size, unsigned Alignment) { + int CreateStackObject(uint64_t Size, unsigned Alignment) { // Keep track of the maximum alignment. if (MaxAlignment < Alignment) MaxAlignment = Alignment; From sabre at nondot.org Tue Apr 24 23:08:46 2007 From: sabre at nondot.org (Chris Lattner) Date: Tue, 24 Apr 2007 23:08:46 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp Message-ID: <200704250408.l3P48ki6023648@zion.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen/SelectionDAG: SelectionDAGISel.cpp updated: 1.426 -> 1.427 --- Log message: allow support for 64-bit stack objects --- Diffs of the changes: (+1 -1) SelectionDAGISel.cpp | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-) Index: llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp diff -u llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.426 llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.427 --- llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.426 Tue Apr 24 16:13:23 2007 +++ llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp Tue Apr 24 23:08:28 2007 @@ -249,7 +249,7 @@ TySize *= CUI->getZExtValue(); // Get total allocated size. if (TySize == 0) TySize = 1; // Don't create zero-sized stack objects. StaticAllocaMap[AI] = - MF.getFrameInfo()->CreateStackObject((unsigned)TySize, Align); + MF.getFrameInfo()->CreateStackObject(TySize, Align); } for (; BB != EB; ++BB) From resistor at mac.com Tue Apr 24 23:19:11 2007 From: resistor at mac.com (Owen Anderson) Date: Tue, 24 Apr 2007 23:19:11 -0500 Subject: [llvm-commits] CVS: llvm/lib/Transforms/Scalar/PredicateSimplifier.cpp Message-ID: <200704250419.l3P4JBiF023826@zion.cs.uiuc.edu> Changes in directory llvm/lib/Transforms/Scalar: PredicateSimplifier.cpp updated: 1.69 -> 1.70 --- Log message: Undo my previous changes. Since my approach to this problem is being revised, this approach is no longer appropriate. --- Diffs of the changes: (+31 -32) PredicateSimplifier.cpp | 63 +++++++++++++++++++++++------------------------- 1 files changed, 31 insertions(+), 32 deletions(-) Index: llvm/lib/Transforms/Scalar/PredicateSimplifier.cpp diff -u llvm/lib/Transforms/Scalar/PredicateSimplifier.cpp:1.69 llvm/lib/Transforms/Scalar/PredicateSimplifier.cpp:1.70 --- llvm/lib/Transforms/Scalar/PredicateSimplifier.cpp:1.69 Sat Apr 21 02:38:12 2007 +++ llvm/lib/Transforms/Scalar/PredicateSimplifier.cpp Tue Apr 24 23:18:54 2007 @@ -1980,19 +1980,21 @@ /// can't be equal and will solve setcc instructions when possible. /// @brief Root of the predicate simplifier optimization. class VISIBILITY_HIDDEN PredicateSimplifier : public FunctionPass { + DominatorTree *DT; ETForest *Forest; bool modified; InequalityGraph *IG; UnreachableBlocks UB; ValueRanges *VR; - std::vector WorkList; + std::vector WorkList; public: bool runOnFunction(Function &F); virtual void getAnalysisUsage(AnalysisUsage &AU) const { AU.addRequiredID(BreakCriticalEdgesID); + AU.addRequired(); AU.addRequired(); AU.addRequired(); AU.addPreserved(); @@ -2008,15 +2010,15 @@ class VISIBILITY_HIDDEN Forwards : public InstVisitor { friend class InstVisitor; PredicateSimplifier *PS; - BasicBlock *Node; + DominatorTree::Node *DTNode; public: InequalityGraph &IG; UnreachableBlocks &UB; ValueRanges &VR; - Forwards(PredicateSimplifier *PS, BasicBlock* node) - : PS(PS), Node(node), IG(*PS->IG), UB(PS->UB), VR(*PS->VR) {} + Forwards(PredicateSimplifier *PS, DominatorTree::Node *DTNode) + : PS(PS), DTNode(DTNode), IG(*PS->IG), UB(PS->UB), VR(*PS->VR) {} void visitTerminatorInst(TerminatorInst &TI); void visitBranchInst(BranchInst &BI); @@ -2036,32 +2038,31 @@ // Used by terminator instructions to proceed from the current basic // block to the next. Verifies that "current" dominates "next", // then calls visitBasicBlock. - void proceedToSuccessors(BasicBlock *Current) { - std::vector Children; - Forest->getChildren(Current, Children); - for (std::vector::iterator I = Children.begin(), - E = Children.end(); I != E; ++I) { + void proceedToSuccessors(DominatorTree::Node *Current) { + for (DominatorTree::Node::iterator I = Current->begin(), + E = Current->end(); I != E; ++I) { WorkList.push_back(*I); } } - void proceedToSuccessor(BasicBlock *Next) { + void proceedToSuccessor(DominatorTree::Node *Next) { WorkList.push_back(Next); } // Visits each instruction in the basic block. - void visitBasicBlock(BasicBlock *BB) { + void visitBasicBlock(DominatorTree::Node *Node) { + BasicBlock *BB = Node->getBlock(); ETNode *ET = Forest->getNodeForBlock(BB); DOUT << "Entering Basic Block: " << BB->getName() << " (" << ET->getDFSNumIn() << ")\n"; for (BasicBlock::iterator I = BB->begin(), E = BB->end(); I != E;) { - visitInstruction(I++, BB, ET); + visitInstruction(I++, Node, ET); } } // Tries to simplify each Instruction and add new properties to // the PropertySet. - void visitInstruction(Instruction *I, BasicBlock *node, ETNode *ET) { + void visitInstruction(Instruction *I, DominatorTree::Node *DT, ETNode *ET) { DOUT << "Considering instruction " << *I << "\n"; DEBUG(IG->dump()); @@ -2105,13 +2106,14 @@ std::string name = I->getParent()->getName(); DOUT << "push (%" << name << ")\n"; - Forwards visit(this, node); + Forwards visit(this, DT); visit.visit(*I); DOUT << "pop (%" << name << ")\n"; } }; bool PredicateSimplifier::runOnFunction(Function &F) { + DT = &getAnalysis(); Forest = &getAnalysis(); TargetData *TD = &getAnalysis(); @@ -2125,12 +2127,12 @@ BasicBlock *RootBlock = &F.getEntryBlock(); IG = new InequalityGraph(Forest->getNodeForBlock(RootBlock)); VR = new ValueRanges(TD); - WorkList.push_back(Forest->getRoot()); + WorkList.push_back(DT->getRootNode()); do { - BasicBlock *node = WorkList.back(); + DominatorTree::Node *DTNode = WorkList.back(); WorkList.pop_back(); - if (!UB.isDead(node)) visitBasicBlock(node); + if (!UB.isDead(DTNode->getBlock())) visitBasicBlock(DTNode); } while (!WorkList.empty()); delete VR; @@ -2142,12 +2144,12 @@ } void PredicateSimplifier::Forwards::visitTerminatorInst(TerminatorInst &TI) { - PS->proceedToSuccessors(Node); + PS->proceedToSuccessors(DTNode); } void PredicateSimplifier::Forwards::visitBranchInst(BranchInst &BI) { if (BI.isUnconditional()) { - PS->proceedToSuccessors(Node); + PS->proceedToSuccessors(DTNode); return; } @@ -2156,26 +2158,24 @@ BasicBlock *FalseDest = BI.getSuccessor(1); if (isa(Condition) || TrueDest == FalseDest) { - PS->proceedToSuccessors(Node); + PS->proceedToSuccessors(DTNode); return; } - std::vector Children; - PS->Forest->getChildren(Node, Children); - for (std::vector::iterator I = Children.begin(), - E = Children.end(); I != E; ++I) { - BasicBlock *Dest = *I; + for (DominatorTree::Node::iterator I = DTNode->begin(), E = DTNode->end(); + I != E; ++I) { + BasicBlock *Dest = (*I)->getBlock(); DOUT << "Branch thinking about %" << Dest->getName() << "(" << PS->Forest->getNodeForBlock(Dest)->getDFSNumIn() << ")\n"; if (Dest == TrueDest) { - DOUT << "(" << Node->getName() << ") true set:\n"; + DOUT << "(" << DTNode->getBlock()->getName() << ") true set:\n"; VRPSolver VRP(IG, UB, VR, PS->Forest, PS->modified, Dest); VRP.add(ConstantInt::getTrue(), Condition, ICmpInst::ICMP_EQ); VRP.solve(); DEBUG(IG.dump()); } else if (Dest == FalseDest) { - DOUT << "(" << Node->getName() << ") false set:\n"; + DOUT << "(" << DTNode->getBlock()->getName() << ") false set:\n"; VRPSolver VRP(IG, UB, VR, PS->Forest, PS->modified, Dest); VRP.add(ConstantInt::getFalse(), Condition, ICmpInst::ICMP_EQ); VRP.solve(); @@ -2191,11 +2191,10 @@ // Set the EQProperty in each of the cases BBs, and the NEProperties // in the default BB. - std::vector Children; - PS->Forest->getChildren(Node, Children); - for (std::vector::iterator I = Children.begin(), - E = Children.end(); I != E; ++I) { - BasicBlock *BB = *I; + + for (DominatorTree::Node::iterator I = DTNode->begin(), E = DTNode->end(); + I != E; ++I) { + BasicBlock *BB = (*I)->getBlock(); DOUT << "Switch thinking about BB %" << BB->getName() << "(" << PS->Forest->getNodeForBlock(BB)->getDFSNumIn() << ")\n"; From sabre at nondot.org Tue Apr 24 23:20:21 2007 From: sabre at nondot.org (Chris Lattner) Date: Tue, 24 Apr 2007 23:20:21 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/MachineFunction.cpp Message-ID: <200704250420.l3P4KLJc023905@zion.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen: MachineFunction.cpp updated: 1.109 -> 1.110 --- Log message: support > 4G stack objects --- Diffs of the changes: (+1 -1) MachineFunction.cpp | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-) Index: llvm/lib/CodeGen/MachineFunction.cpp diff -u llvm/lib/CodeGen/MachineFunction.cpp:1.109 llvm/lib/CodeGen/MachineFunction.cpp:1.110 --- llvm/lib/CodeGen/MachineFunction.cpp:1.109 Tue Feb 13 23:52:17 2007 +++ llvm/lib/CodeGen/MachineFunction.cpp Tue Apr 24 23:20:02 2007 @@ -342,7 +342,7 @@ if (i < NumFixedObjects) OS << " fixed"; if (i < NumFixedObjects || SO.SPOffset != -1) { - int Off = SO.SPOffset - ValOffset; + int64_t Off = SO.SPOffset - ValOffset; OS << " at location [SP"; if (Off > 0) OS << "+" << Off; From sabre at nondot.org Tue Apr 24 23:20:41 2007 From: sabre at nondot.org (Chris Lattner) Date: Tue, 24 Apr 2007 23:20:41 -0500 Subject: [llvm-commits] CVS: llvm/include/llvm/CodeGen/MachineFrameInfo.h Message-ID: <200704250420.l3P4KfqL023945@zion.cs.uiuc.edu> Changes in directory llvm/include/llvm/CodeGen: MachineFrameInfo.h updated: 1.24 -> 1.25 --- Log message: support > 4G stack objects --- Diffs of the changes: (+6 -6) MachineFrameInfo.h | 12 ++++++------ 1 files changed, 6 insertions(+), 6 deletions(-) Index: llvm/include/llvm/CodeGen/MachineFrameInfo.h diff -u llvm/include/llvm/CodeGen/MachineFrameInfo.h:1.24 llvm/include/llvm/CodeGen/MachineFrameInfo.h:1.25 --- llvm/include/llvm/CodeGen/MachineFrameInfo.h:1.24 Tue Apr 24 23:07:31 2007 +++ llvm/include/llvm/CodeGen/MachineFrameInfo.h Tue Apr 24 23:20:23 2007 @@ -84,9 +84,9 @@ // SPOffset - The offset of this object from the stack pointer on entry to // the function. This field has no meaning for a variable sized element. - int SPOffset; + int64_t SPOffset; - StackObject(uint64_t Sz, unsigned Al, int SP) + StackObject(uint64_t Sz, unsigned Al, int64_t SP) : Size(Sz), Alignment(Al), SPOffset(SP) {} }; @@ -184,7 +184,7 @@ /// getObjectSize - Return the size of the specified object /// - int getObjectSize(int ObjectIdx) const { + int64_t getObjectSize(int ObjectIdx) const { assert(ObjectIdx+NumFixedObjects < Objects.size() && "Invalid Object Idx!"); return Objects[ObjectIdx+NumFixedObjects].Size; } @@ -198,7 +198,7 @@ /// getObjectOffset - Return the assigned stack offset of the specified object /// from the incoming stack pointer. /// - int getObjectOffset(int ObjectIdx) const { + int64_t getObjectOffset(int ObjectIdx) const { assert(ObjectIdx+NumFixedObjects < Objects.size() && "Invalid Object Idx!"); return Objects[ObjectIdx+NumFixedObjects].SPOffset; } @@ -206,7 +206,7 @@ /// setObjectOffset - Set the stack frame offset of the specified object. The /// offset is relative to the stack pointer on entry to the function. /// - void setObjectOffset(int ObjectIdx, int SPOffset) { + void setObjectOffset(int ObjectIdx, int64_t SPOffset) { assert(ObjectIdx+NumFixedObjects < Objects.size() && "Invalid Object Idx!"); Objects[ObjectIdx+NumFixedObjects].SPOffset = SPOffset; } @@ -257,7 +257,7 @@ /// All fixed objects should be created before other objects are created for /// efficiency. This returns an index with a negative value. /// - int CreateFixedObject(uint64_t Size, int SPOffset) { + int CreateFixedObject(uint64_t Size, int64_t SPOffset) { assert(Size != 0 && "Cannot allocate zero size fixed stack objects!"); Objects.insert(Objects.begin(), StackObject(Size, 1, SPOffset)); return -++NumFixedObjects; From sabre at nondot.org Tue Apr 24 23:21:11 2007 From: sabre at nondot.org (Chris Lattner) Date: Tue, 24 Apr 2007 23:21:11 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/PrologEpilogInserter.cpp Message-ID: <200704250421.l3P4LB4N023984@zion.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen: PrologEpilogInserter.cpp updated: 1.79 -> 1.80 --- Log message: support > 4G stack objects --- Diffs of the changes: (+2 -2) PrologEpilogInserter.cpp | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) Index: llvm/lib/CodeGen/PrologEpilogInserter.cpp diff -u llvm/lib/CodeGen/PrologEpilogInserter.cpp:1.79 llvm/lib/CodeGen/PrologEpilogInserter.cpp:1.80 --- llvm/lib/CodeGen/PrologEpilogInserter.cpp:1.79 Sun Apr 8 20:19:33 2007 +++ llvm/lib/CodeGen/PrologEpilogInserter.cpp Tue Apr 24 23:20:54 2007 @@ -305,7 +305,7 @@ // Start at the beginning of the local area. // The Offset is the distance from the stack top in the direction // of stack growth -- so it's always positive. - int Offset = TFI.getOffsetOfLocalArea(); + int64_t Offset = TFI.getOffsetOfLocalArea(); if (StackGrowsDown) Offset = -Offset; assert(Offset >= 0 @@ -317,7 +317,7 @@ // so we adjust 'Offset' to point to the end of last fixed sized // preallocated object. for (int i = FFI->getObjectIndexBegin(); i != 0; ++i) { - int FixedOff; + int64_t FixedOff; if (StackGrowsDown) { // The maximum distance from the stack pointer is at lower address of // the object -- which is given by offset. For down growing stack From sabre at nondot.org Tue Apr 24 23:25:27 2007 From: sabre at nondot.org (Chris Lattner) Date: Tue, 24 Apr 2007 23:25:27 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/X86/X86RegisterInfo.cpp Message-ID: <200704250425.l3P4PRJW024135@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/X86: X86RegisterInfo.cpp updated: 1.212 -> 1.213 --- Log message: support >4G stack frames --- Diffs of the changes: (+9 -9) X86RegisterInfo.cpp | 18 +++++++++--------- 1 files changed, 9 insertions(+), 9 deletions(-) Index: llvm/lib/Target/X86/X86RegisterInfo.cpp diff -u llvm/lib/Target/X86/X86RegisterInfo.cpp:1.212 llvm/lib/Target/X86/X86RegisterInfo.cpp:1.213 --- llvm/lib/Target/X86/X86RegisterInfo.cpp:1.212 Tue Apr 24 16:19:14 2007 +++ llvm/lib/Target/X86/X86RegisterInfo.cpp Tue Apr 24 23:25:10 2007 @@ -939,7 +939,7 @@ // 'sub ESP, ' and the adjcallstackdown instruction into 'add ESP, // ' MachineInstr *Old = I; - unsigned Amount = Old->getOperand(0).getImmedValue(); + uint64_t Amount = Old->getOperand(0).getImm(); if (Amount != 0) { // We need to keep the stack aligned properly. To do this, we round the // amount of space needed for the outgoing arguments up to the next @@ -954,7 +954,7 @@ } else { assert(Old->getOpcode() == X86::ADJCALLSTACKUP); // factor out the amount the callee already popped. - unsigned CalleeAmt = Old->getOperand(1).getImmedValue(); + uint64_t CalleeAmt = Old->getOperand(1).getImm(); Amount -= CalleeAmt; if (Amount) { unsigned Opc = (Amount < 128) ? @@ -972,7 +972,7 @@ // If we are performing frame pointer elimination and if the callee pops // something off the stack pointer, add it back. We do this until we have // more advanced stack pointer tracking ability. - if (unsigned CalleeAmt = I->getOperand(1).getImmedValue()) { + if (uint64_t CalleeAmt = I->getOperand(1).getImm()) { unsigned Opc = (CalleeAmt < 128) ? (Is64Bit ? X86::SUB64ri8 : X86::SUB32ri8) : (Is64Bit ? X86::SUB64ri32 : X86::SUB32ri); @@ -1001,8 +1001,8 @@ MI.getOperand(i).ChangeToRegister(hasFP(MF) ? FramePtr : StackPtr, false); // Now add the frame object offset to the offset from EBP. - int Offset = MF.getFrameInfo()->getObjectOffset(FrameIndex) + - MI.getOperand(i+3).getImmedValue()+SlotSize; + int64_t Offset = MF.getFrameInfo()->getObjectOffset(FrameIndex) + + MI.getOperand(i+3).getImm()+SlotSize; if (!hasFP(MF)) Offset += MF.getFrameInfo()->getStackSize(); @@ -1182,8 +1182,8 @@ // pop EBP BuildMI(MBB, MBBI, TII.get(Is64Bit ? X86::POP64r : X86::POP32r), FramePtr); } else { - // Get the number of bytes allocated from the FrameInfo... - unsigned NumBytes = MFI->getStackSize(); + // Get the number of bytes allocated from the FrameInfo. + uint64_t NumBytes = MFI->getStackSize(); if (NumBytes) { // adjust stack pointer back: ESP += numbytes // If there is an ADD32ri or SUB32ri of ESP immediately before this @@ -1194,12 +1194,12 @@ if ((Opc == X86::ADD64ri32 || Opc == X86::ADD64ri8 || Opc == X86::ADD32ri || Opc == X86::ADD32ri8) && PI->getOperand(0).getReg() == StackPtr) { - NumBytes += PI->getOperand(2).getImmedValue(); + NumBytes += PI->getOperand(2).getImm(); MBB.erase(PI); } else if ((Opc == X86::SUB64ri32 || Opc == X86::SUB64ri8 || Opc == X86::SUB32ri || Opc == X86::SUB32ri8) && PI->getOperand(0).getReg() == StackPtr) { - NumBytes -= PI->getOperand(2).getImmedValue(); + NumBytes -= PI->getOperand(2).getImm(); MBB.erase(PI); } } From sabre at nondot.org Tue Apr 24 23:28:58 2007 From: sabre at nondot.org (Chris Lattner) Date: Tue, 24 Apr 2007 23:28:58 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/PrologEpilogInserter.cpp Message-ID: <200704250428.l3P4SwDQ024276@zion.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen: PrologEpilogInserter.cpp updated: 1.80 -> 1.81 --- Log message: support for >4G stack frames --- Diffs of the changes: (+1 -1) PrologEpilogInserter.cpp | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-) Index: llvm/lib/CodeGen/PrologEpilogInserter.cpp diff -u llvm/lib/CodeGen/PrologEpilogInserter.cpp:1.80 llvm/lib/CodeGen/PrologEpilogInserter.cpp:1.81 --- llvm/lib/CodeGen/PrologEpilogInserter.cpp:1.80 Tue Apr 24 23:20:54 2007 +++ llvm/lib/CodeGen/PrologEpilogInserter.cpp Tue Apr 24 23:28:40 2007 @@ -455,7 +455,7 @@ Offset += FFI->getMaxCallFrameSize(); unsigned AlignMask = TFI.getStackAlignment() - 1; - Offset = (Offset + AlignMask) & ~AlignMask; + Offset = (Offset + AlignMask) & ~uint64_t(AlignMask); } // Update frame info to pretend that this is part of the stack... From sabre at nondot.org Tue Apr 24 23:29:24 2007 From: sabre at nondot.org (Chris Lattner) Date: Tue, 24 Apr 2007 23:29:24 -0500 Subject: [llvm-commits] CVS: llvm/include/llvm/CodeGen/MachineFrameInfo.h Message-ID: <200704250429.l3P4TO5o024314@zion.cs.uiuc.edu> Changes in directory llvm/include/llvm/CodeGen: MachineFrameInfo.h updated: 1.25 -> 1.26 --- Log message: support for >4G frames --- Diffs of the changes: (+2 -2) MachineFrameInfo.h | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) Index: llvm/include/llvm/CodeGen/MachineFrameInfo.h diff -u llvm/include/llvm/CodeGen/MachineFrameInfo.h:1.25 llvm/include/llvm/CodeGen/MachineFrameInfo.h:1.26 --- llvm/include/llvm/CodeGen/MachineFrameInfo.h:1.25 Tue Apr 24 23:20:23 2007 +++ llvm/include/llvm/CodeGen/MachineFrameInfo.h Tue Apr 24 23:29:06 2007 @@ -215,11 +215,11 @@ /// all of the fixed size frame objects. This is only valid after /// Prolog/Epilog code insertion has finalized the stack frame layout. /// - unsigned getStackSize() const { return StackSize; } + uint64_t getStackSize() const { return StackSize; } /// setStackSize - Set the size of the stack... /// - void setStackSize(unsigned Size) { StackSize = Size; } + void setStackSize(uint64_t Size) { StackSize = Size; } /// getOffsetAdjustment - Return the correction for frame offsets. /// From sabre at nondot.org Tue Apr 24 23:30:42 2007 From: sabre at nondot.org (Chris Lattner) Date: Tue, 24 Apr 2007 23:30:42 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/X86/X86RegisterInfo.cpp Message-ID: <200704250430.l3P4UgKk024397@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/X86: X86RegisterInfo.cpp updated: 1.213 -> 1.214 --- Log message: support for >4G stack frames --- Diffs of the changes: (+4 -3) X86RegisterInfo.cpp | 7 ++++--- 1 files changed, 4 insertions(+), 3 deletions(-) Index: llvm/lib/Target/X86/X86RegisterInfo.cpp diff -u llvm/lib/Target/X86/X86RegisterInfo.cpp:1.213 llvm/lib/Target/X86/X86RegisterInfo.cpp:1.214 --- llvm/lib/Target/X86/X86RegisterInfo.cpp:1.213 Tue Apr 24 23:25:10 2007 +++ llvm/lib/Target/X86/X86RegisterInfo.cpp Tue Apr 24 23:30:24 2007 @@ -1036,7 +1036,7 @@ unsigned FrameLabelId = 0; // Get the number of bytes to allocate from the FrameInfo - unsigned NumBytes = MFI->getStackSize(); + uint64_t NumBytes = MFI->getStackSize(); if (NumBytes) { // adjust stack pointer: ESP -= numbytes if (NumBytes >= 4096 && Subtarget->isTargetCygMing()) { @@ -1091,7 +1091,8 @@ if (hasFP(MF)) { // Get the offset of the stack slot for the EBP register... which is // guaranteed to be the last slot by processFunctionBeforeFrameFinalized. - int EBPOffset = MFI->getObjectOffset(MFI->getObjectIndexBegin())+SlotSize; + int64_t EBPOffset = + MFI->getObjectOffset(MFI->getObjectIndexBegin())+SlotSize; // Update the frame offset adjustment. MFI->setOffsetAdjustment(SlotSize-NumBytes); @@ -1128,7 +1129,7 @@ // Add callee saved registers to move list. const std::vector &CSI = MFI->getCalleeSavedInfo(); for (unsigned I = 0, E = CSI.size(); I != E; ++I) { - int Offset = MFI->getObjectOffset(CSI[I].getFrameIdx()); + int64_t Offset = MFI->getObjectOffset(CSI[I].getFrameIdx()); unsigned Reg = CSI[I].getReg(); MachineLocation CSDst(MachineLocation::VirtualFP, Offset); MachineLocation CSSrc(Reg); From sabre at nondot.org Wed Apr 25 00:03:14 2007 From: sabre at nondot.org (Chris Lattner) Date: Wed, 25 Apr 2007 00:03:14 -0500 Subject: [llvm-commits] CVS: llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp Message-ID: <200704250503.l3P53Eaj025106@zion.cs.uiuc.edu> Changes in directory llvm/lib/Transforms/Scalar: ScalarReplAggregates.cpp updated: 1.86 -> 1.87 --- Log message: refactor the SROA code out into its own method, no functionality change. --- Diffs of the changes: (+107 -98) ScalarReplAggregates.cpp | 205 ++++++++++++++++++++++++----------------------- 1 files changed, 107 insertions(+), 98 deletions(-) Index: llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp diff -u llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp:1.86 llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp:1.87 --- llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp:1.86 Fri Apr 20 01:27:13 2007 +++ llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp Wed Apr 25 00:02:56 2007 @@ -65,6 +65,8 @@ bool isSafeMemIntrinsicOnAllocation(MemIntrinsic *MI, AllocationInst *AI); bool isSafeUseOfBitCastedAllocation(BitCastInst *User, AllocationInst *AI); int isSafeAllocaToScalarRepl(AllocationInst *AI); + void DoScalarReplacement(AllocationInst *AI, + std::vector &WorkList); void CanonicalizeAllocaUsers(AllocationInst *AI); AllocaInst *AddNewAlloca(Function &F, const Type *Ty, AllocationInst *Base); @@ -166,116 +168,123 @@ // We cannot transform the allocation instruction if it is an array // allocation (allocations OF arrays are ok though), and an allocation of a // scalar value cannot be decomposed at all. - // - if (AI->isArrayAllocation() || - (!isa(AI->getAllocatedType()) && - !isa(AI->getAllocatedType()))) continue; - - // Check that all of the users of the allocation are capable of being - // transformed. - switch (isSafeAllocaToScalarRepl(AI)) { - default: assert(0 && "Unexpected value!"); - case 0: // Not safe to scalar replace. - continue; - case 1: // Safe, but requires cleanup/canonicalizations first - CanonicalizeAllocaUsers(AI); - case 3: // Safe to scalar replace. - break; + if (!AI->isArrayAllocation() && + (isa(AI->getAllocatedType()) || + isa(AI->getAllocatedType()))) { + // Check that all of the users of the allocation are capable of being + // transformed. + switch (isSafeAllocaToScalarRepl(AI)) { + default: assert(0 && "Unexpected value!"); + case 0: // Not safe to scalar replace. + break; + case 1: // Safe, but requires cleanup/canonicalizations first + CanonicalizeAllocaUsers(AI); + // FALL THROUGH. + case 3: // Safe to scalar replace. + DoScalarReplacement(AI, WorkList); + Changed = true; + continue; + } } + + // Otherwise, couldn't process this. + } - DOUT << "Found inst to xform: " << *AI; - Changed = true; + return Changed; +} - SmallVector ElementAllocas; - if (const StructType *ST = dyn_cast(AI->getAllocatedType())) { - ElementAllocas.reserve(ST->getNumContainedTypes()); - for (unsigned i = 0, e = ST->getNumContainedTypes(); i != e; ++i) { - AllocaInst *NA = new AllocaInst(ST->getContainedType(i), 0, - AI->getAlignment(), - AI->getName() + "." + utostr(i), AI); - ElementAllocas.push_back(NA); - WorkList.push_back(NA); // Add to worklist for recursive processing - } - } else { - const ArrayType *AT = cast(AI->getAllocatedType()); - ElementAllocas.reserve(AT->getNumElements()); - const Type *ElTy = AT->getElementType(); - for (unsigned i = 0, e = AT->getNumElements(); i != e; ++i) { - AllocaInst *NA = new AllocaInst(ElTy, 0, AI->getAlignment(), - AI->getName() + "." + utostr(i), AI); - ElementAllocas.push_back(NA); - WorkList.push_back(NA); // Add to worklist for recursive processing - } +/// DoScalarReplacement - This alloca satisfied the isSafeAllocaToScalarRepl +/// predicate, do SROA now. +void SROA::DoScalarReplacement(AllocationInst *AI, + std::vector &WorkList) { + DOUT << "Found inst to xform: " << *AI; + SmallVector ElementAllocas; + if (const StructType *ST = dyn_cast(AI->getAllocatedType())) { + ElementAllocas.reserve(ST->getNumContainedTypes()); + for (unsigned i = 0, e = ST->getNumContainedTypes(); i != e; ++i) { + AllocaInst *NA = new AllocaInst(ST->getContainedType(i), 0, + AI->getAlignment(), + AI->getName() + "." + utostr(i), AI); + ElementAllocas.push_back(NA); + WorkList.push_back(NA); // Add to worklist for recursive processing + } + } else { + const ArrayType *AT = cast(AI->getAllocatedType()); + ElementAllocas.reserve(AT->getNumElements()); + const Type *ElTy = AT->getElementType(); + for (unsigned i = 0, e = AT->getNumElements(); i != e; ++i) { + AllocaInst *NA = new AllocaInst(ElTy, 0, AI->getAlignment(), + AI->getName() + "." + utostr(i), AI); + ElementAllocas.push_back(NA); + WorkList.push_back(NA); // Add to worklist for recursive processing } + } - // Now that we have created the alloca instructions that we want to use, - // expand the getelementptr instructions to use them. - // - while (!AI->use_empty()) { - Instruction *User = cast(AI->use_back()); - if (BitCastInst *BCInst = dyn_cast(User)) { - RewriteBitCastUserOfAlloca(BCInst, AI, ElementAllocas); - BCInst->eraseFromParent(); - continue; - } - - GetElementPtrInst *GEPI = cast(User); - // We now know that the GEP is of the form: GEP , 0, - unsigned Idx = - (unsigned)cast(GEPI->getOperand(2))->getZExtValue(); - - assert(Idx < ElementAllocas.size() && "Index out of range?"); - AllocaInst *AllocaToUse = ElementAllocas[Idx]; - - Value *RepValue; - if (GEPI->getNumOperands() == 3) { - // Do not insert a new getelementptr instruction with zero indices, only - // to have it optimized out later. - RepValue = AllocaToUse; - } else { - // We are indexing deeply into the structure, so we still need a - // getelement ptr instruction to finish the indexing. This may be - // expanded itself once the worklist is rerun. - // - SmallVector NewArgs; - NewArgs.push_back(Constant::getNullValue(Type::Int32Ty)); - NewArgs.append(GEPI->op_begin()+3, GEPI->op_end()); - RepValue = new GetElementPtrInst(AllocaToUse, &NewArgs[0], - NewArgs.size(), "", GEPI); - RepValue->takeName(GEPI); - } - - // If this GEP is to the start of the aggregate, check for memcpys. - if (Idx == 0) { - bool IsStartOfAggregateGEP = true; - for (unsigned i = 3, e = GEPI->getNumOperands(); i != e; ++i) { - if (!isa(GEPI->getOperand(i))) { - IsStartOfAggregateGEP = false; - break; - } - if (!cast(GEPI->getOperand(i))->isZero()) { - IsStartOfAggregateGEP = false; - break; - } + // Now that we have created the alloca instructions that we want to use, + // expand the getelementptr instructions to use them. + // + while (!AI->use_empty()) { + Instruction *User = cast(AI->use_back()); + if (BitCastInst *BCInst = dyn_cast(User)) { + RewriteBitCastUserOfAlloca(BCInst, AI, ElementAllocas); + BCInst->eraseFromParent(); + continue; + } + + GetElementPtrInst *GEPI = cast(User); + // We now know that the GEP is of the form: GEP , 0, + unsigned Idx = + (unsigned)cast(GEPI->getOperand(2))->getZExtValue(); + + assert(Idx < ElementAllocas.size() && "Index out of range?"); + AllocaInst *AllocaToUse = ElementAllocas[Idx]; + + Value *RepValue; + if (GEPI->getNumOperands() == 3) { + // Do not insert a new getelementptr instruction with zero indices, only + // to have it optimized out later. + RepValue = AllocaToUse; + } else { + // We are indexing deeply into the structure, so we still need a + // getelement ptr instruction to finish the indexing. This may be + // expanded itself once the worklist is rerun. + // + SmallVector NewArgs; + NewArgs.push_back(Constant::getNullValue(Type::Int32Ty)); + NewArgs.append(GEPI->op_begin()+3, GEPI->op_end()); + RepValue = new GetElementPtrInst(AllocaToUse, &NewArgs[0], + NewArgs.size(), "", GEPI); + RepValue->takeName(GEPI); + } + + // If this GEP is to the start of the aggregate, check for memcpys. + if (Idx == 0) { + bool IsStartOfAggregateGEP = true; + for (unsigned i = 3, e = GEPI->getNumOperands(); i != e; ++i) { + if (!isa(GEPI->getOperand(i))) { + IsStartOfAggregateGEP = false; + break; + } + if (!cast(GEPI->getOperand(i))->isZero()) { + IsStartOfAggregateGEP = false; + break; } - - if (IsStartOfAggregateGEP) - RewriteBitCastUserOfAlloca(GEPI, AI, ElementAllocas); } - - // Move all of the users over to the new GEP. - GEPI->replaceAllUsesWith(RepValue); - // Delete the old GEP - GEPI->eraseFromParent(); + if (IsStartOfAggregateGEP) + RewriteBitCastUserOfAlloca(GEPI, AI, ElementAllocas); } + - // Finally, delete the Alloca instruction - AI->eraseFromParent(); - NumReplaced++; + // Move all of the users over to the new GEP. + GEPI->replaceAllUsesWith(RepValue); + // Delete the old GEP + GEPI->eraseFromParent(); } - return Changed; + // Finally, delete the Alloca instruction + AI->eraseFromParent(); + NumReplaced++; } From sabre at nondot.org Wed Apr 25 00:49:28 2007 From: sabre at nondot.org (Chris Lattner) Date: Wed, 25 Apr 2007 00:49:28 -0500 Subject: [llvm-commits] CVS: llvm/lib/VMCore/Function.cpp Message-ID: <200704250549.l3P5nSbn025872@zion.cs.uiuc.edu> Changes in directory llvm/lib/VMCore: Function.cpp updated: 1.126 -> 1.127 --- Log message: simplify some code --- Diffs of the changes: (+2 -5) Function.cpp | 7 ++----- 1 files changed, 2 insertions(+), 5 deletions(-) Index: llvm/lib/VMCore/Function.cpp diff -u llvm/lib/VMCore/Function.cpp:1.126 llvm/lib/VMCore/Function.cpp:1.127 --- llvm/lib/VMCore/Function.cpp:1.126 Sun Apr 22 12:28:03 2007 +++ llvm/lib/VMCore/Function.cpp Wed Apr 25 00:49:09 2007 @@ -307,11 +307,8 @@ if (isa(CI->getOperand(0)->getType())) return StripPointerCasts(CI->getOperand(0)); } else if (GetElementPtrInst *GEP = dyn_cast(Ptr)) { - for (unsigned i = 1, e = GEP->getNumOperands(); i != e; ++i) - if (!isa(GEP->getOperand(i)) || - !cast(GEP->getOperand(i))->isNullValue()) - return Ptr; - return StripPointerCasts(GEP->getOperand(0)); + if (GEP->hasAllZeroIndices()) + return StripPointerCasts(GEP->getOperand(0)); } return Ptr; } From sabre at nondot.org Wed Apr 25 01:29:51 2007 From: sabre at nondot.org (Chris Lattner) Date: Wed, 25 Apr 2007 01:29:51 -0500 Subject: [llvm-commits] CVS: llvm/test/Transforms/ScalarRepl/memcpy-from-global.ll Message-ID: <200704250629.l3P6Tp5i026556@zion.cs.uiuc.edu> Changes in directory llvm/test/Transforms/ScalarRepl: memcpy-from-global.ll added (r1.1) --- Log message: new testcase, should be able to eliminate the alloca and memcpy --- Diffs of the changes: (+33 -0) memcpy-from-global.ll | 33 +++++++++++++++++++++++++++++++++ 1 files changed, 33 insertions(+) Index: llvm/test/Transforms/ScalarRepl/memcpy-from-global.ll diff -c /dev/null llvm/test/Transforms/ScalarRepl/memcpy-from-global.ll:1.1 *** /dev/null Wed Apr 25 01:29:44 2007 --- llvm/test/Transforms/ScalarRepl/memcpy-from-global.ll Wed Apr 25 01:29:34 2007 *************** *** 0 **** --- 1,33 ---- + ; RUN: llvm-as < %s | opt -scalarrepl | llvm-dis | not grep {call.*memcpy} + @C.0.1248 = internal constant [128 x float] [ float -1.000000e+00, float -1.000000e+00, float -1.000000e+00, float 0.000000e+00, float -1.000000e+00, float -1.000000e+00, float 0.000000e+00, float -1.000000e+00, float -1.000000e+00, float -1.000000e+00, float 0.000000e+00, float 1.000000e+00, float -1.000000e+00, float -1.000000e+00, float 1.000000e+00, float 0.000000e+00, float -1.000000e+00, float 0.000000e+00, float -1.000000e+00, float -1.000000e+00, float -1.000000e+00, float 0.000000e+00, float -1.000000e+00, float 1.000000e+00, float -1.000000e+00, float 0.000000e+00, float 1.000000e+00, float -1.000000e+00, float -1.000000e+00, float 0.000000e+00, float 1.000000e+00, float 1.000000e+00, float -1.000000e+00, float 1.000000e+00, float -1.000000e+00, float 0.000000e+00, float -1.000000e+00, float 1.000000e+00, float 0.000000e+00, float -1.000000e+00, float -1.000000e+00, float 1.000000e+00, float 0.000000e+00, float 1.000000e+00, float -1.000000e+00, float 1.000000e+0! 0, float 1.000000e+00, float 0.000000e+00, float 0.000000e+00, float -1.000000e+00, float -1.000000e+00, float -1.000000e+00, float 0.000000e+00, float -1.000000e+00, float -1.000000e+00, float 1.000000e+00, float 0.000000e+00, float -1.000000e+00, float 1.000000e+00, float -1.000000e+00, float 0.000000e+00, float -1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float -1.000000e+00, float -1.000000e+00, float 0.000000e+00, float 1.000000e+00, float -1.000000e+00, float 0.000000e+00, float -1.000000e+00, float 1.000000e+00, float -1.000000e+00, float 0.000000e+00, float 1.000000e+00, float 1.000000e+00, float -1.000000e+00, float 1.000000e+00, float 0.000000e+00, float 1.000000e+00, float 0.000000e+00, float -1.000000e+00, float -1.000000e+00, float 1.000000e+00, float 0.000000e+00, float -1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 0.000000e+00, float 1.000000e+00, float -1.000000e+00, float 1.000000e+00, float 0.000000e+00, float 1! .000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.0! 00000e+0 0, float -1.000000e+00, float 0.000000e+00, float 1.000000e+00, float 1.000000e+00, float 0.000000e+00, float -1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 0.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 0.000000e+00, float 0.000000e+00, float 1.000000e+00, float -1.000000e+00, float -1.000000e+00, float 0.000000e+00, float 1.000000e+00, float -1.000000e+00, float 1.000000e+00, float 0.000000e+00, float 1.000000e+00, float 1.000000e+00, float -1.000000e+00, float 0.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00 ], align 32 ; <[128 x float]*> [#uses=1] + + define float @grad4(i32 %hash, float %x, float %y, float %z, float %w) { + entry: + %lookupTable = alloca [128 x float], align 16 ; <[128 x float]*> [#uses=5] + %lookupTable1 = bitcast [128 x float]* %lookupTable to i8* ; [#uses=1] + call void @llvm.memcpy.i32( i8* %lookupTable1, i8* bitcast ([128 x float]* @C.0.1248 to i8*), i32 512, i32 16 ) + %tmp3 = shl i32 %hash, 2 ; [#uses=1] + %tmp5 = and i32 %tmp3, 124 ; [#uses=4] + %tmp753 = getelementptr [128 x float]* %lookupTable, i32 0, i32 %tmp5 ; [#uses=1] + %tmp9 = load float* %tmp753 ; [#uses=1] + %tmp11 = mul float %tmp9, %x ; [#uses=1] + %tmp13 = add float %tmp11, 0.000000e+00 ; [#uses=1] + %tmp17.sum52 = or i32 %tmp5, 1 ; [#uses=1] + %tmp1851 = getelementptr [128 x float]* %lookupTable, i32 0, i32 %tmp17.sum52 ; [#uses=1] + %tmp19 = load float* %tmp1851 ; [#uses=1] + %tmp21 = mul float %tmp19, %y ; [#uses=1] + %tmp23 = add float %tmp21, %tmp13 ; [#uses=1] + %tmp27.sum50 = or i32 %tmp5, 2 ; [#uses=1] + %tmp2849 = getelementptr [128 x float]* %lookupTable, i32 0, i32 %tmp27.sum50 ; [#uses=1] + %tmp29 = load float* %tmp2849 ; [#uses=1] + %tmp31 = mul float %tmp29, %z ; [#uses=1] + %tmp33 = add float %tmp31, %tmp23 ; [#uses=1] + %tmp37.sum48 = or i32 %tmp5, 3 ; [#uses=1] + %tmp3847 = getelementptr [128 x float]* %lookupTable, i32 0, i32 %tmp37.sum48 ; [#uses=1] + %tmp39 = load float* %tmp3847 ; [#uses=1] + %tmp41 = mul float %tmp39, %w ; [#uses=1] + %tmp43 = add float %tmp41, %tmp33 ; [#uses=1] + ret float %tmp43 + } + + declare void @llvm.memcpy.i32(i8*, i8*, i32, i32) From sabre at nondot.org Wed Apr 25 01:41:09 2007 From: sabre at nondot.org (Chris Lattner) Date: Wed, 25 Apr 2007 01:41:09 -0500 Subject: [llvm-commits] CVS: llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp Message-ID: <200704250641.l3P6f9pI026789@zion.cs.uiuc.edu> Changes in directory llvm/lib/Transforms/Scalar: ScalarReplAggregates.cpp updated: 1.87 -> 1.88 --- Log message: If an alloca only has two types of uses: 1) reads 2) a memcpy/memmove that copies from a constant global, then we can change the reads to read from the global instead of from the alloca. This eliminates the alloca and the memcpy, and promotes secondary optimizations (because the loads are now loads from a constant global). This is important for a common C idiom: void foo() { int A[] = {1,2,3,4,5,6,7,8,9...}; ... only reads of A ... } For some reason, people forget to mark the array static or const. This triggers on these multisource benchmarks: JM/ldecode: block_pos, [3 x [4 x [4 x i32]]] FreeBench/mason: m, [18 x i32], inlined 4 times MiBench/office-stringsearch: search_strings, [1332 x i8*] MiBench/office-stringsearch: find_strings, [1333 x i8*] Prolangs-C++/city: dirs, [9 x i8*], inlined 4 places and these spec benchmarks: 177.mesa: message, [8 x [32 x i8]] 186.crafty: bias_rl45, [64 x i32] 186.crafty: diag_sq, [64 x i32] 186.crafty: empty, [9 x i8] 186.crafty: xlate, [15 x i8] 186.crafty: status, [13 x i8] 186.crafty: bdinfo, [25 x i8] 445.gobmk: routines, [16 x i8*] 458.sjeng: piece_rep, [14 x i8*] 458.sjeng: t, [13 x i32], inlined 4 places. 464.h264ref: block8x8_idx, [3 x [4 x [4 x i32]]] 464.h264ref: block_pos, [3 x [4 x [4 x i32]]] 464.h264ref: j_off_tab, [12 x i32] This implements Transforms/ScalarRepl/memcpy-from-global.ll --- Diffs of the changes: (+105 -4) ScalarReplAggregates.cpp | 109 +++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 105 insertions(+), 4 deletions(-) Index: llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp diff -u llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp:1.87 llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp:1.88 --- llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp:1.87 Wed Apr 25 00:02:56 2007 +++ llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp Wed Apr 25 01:40:51 2007 @@ -24,6 +24,7 @@ #include "llvm/Constants.h" #include "llvm/DerivedTypes.h" #include "llvm/Function.h" +#include "llvm/GlobalVariable.h" #include "llvm/Instructions.h" #include "llvm/IntrinsicInst.h" #include "llvm/Pass.h" @@ -42,6 +43,7 @@ STATISTIC(NumReplaced, "Number of allocas broken up"); STATISTIC(NumPromoted, "Number of allocas promoted"); STATISTIC(NumConverted, "Number of aggregates converted to scalar"); +STATISTIC(NumGlobals, "Number of allocas copied from constant global"); namespace { struct VISIBILITY_HIDDEN SROA : public FunctionPass { @@ -76,6 +78,7 @@ const Type *CanConvertToScalar(Value *V, bool &IsNotTrivial); void ConvertToScalar(AllocationInst *AI, const Type *Ty); void ConvertUsesToScalar(Value *Ptr, AllocaInst *NewAI, unsigned Offset); + static Instruction *isOnlyCopiedFromConstantGlobal(AllocationInst *AI); }; RegisterPass X("scalarrepl", "Scalar Replacement of Aggregates"); @@ -165,9 +168,10 @@ continue; } - // We cannot transform the allocation instruction if it is an array - // allocation (allocations OF arrays are ok though), and an allocation of a - // scalar value cannot be decomposed at all. + // Check to see if we can perform the core SROA transformation. We cannot + // transform the allocation instruction if it is an array allocation + // (allocations OF arrays are ok though), and an allocation of a scalar + // value cannot be decomposed at all. if (!AI->isArrayAllocation() && (isa(AI->getAllocatedType()) || isa(AI->getAllocatedType()))) { @@ -186,6 +190,23 @@ continue; } } + + // Check to see if this allocation is only modified by a memcpy/memmove from + // a constant global. If this is the case, we can change all users to use + // the constant global instead. This is commonly produced by the CFE by + // constructs like "void foo() { int A[] = {1,2,3,4,5,6,7,8,9...}; }" if 'A' + // is only subsequently read. + if (Instruction *TheCopy = isOnlyCopiedFromConstantGlobal(AI)) { + DOUT << "Found alloca equal to global: " << *AI; + DOUT << " memcpy = " << *TheCopy; + Constant *TheSrc = cast(TheCopy->getOperand(2)); + AI->replaceAllUsesWith(ConstantExpr::getBitCast(TheSrc, AI->getType())); + TheCopy->eraseFromParent(); // Don't mutate the global. + AI->eraseFromParent(); + ++NumGlobals; + Changed = true; + continue; + } // Otherwise, couldn't process this. } @@ -197,7 +218,7 @@ /// predicate, do SROA now. void SROA::DoScalarReplacement(AllocationInst *AI, std::vector &WorkList) { - DOUT << "Found inst to xform: " << *AI; + DOUT << "Found inst to SROA: " << *AI; SmallVector ElementAllocas; if (const StructType *ST = dyn_cast(AI->getAllocatedType())) { ElementAllocas.reserve(ST->getNumContainedTypes()); @@ -1116,3 +1137,83 @@ } } } + + +/// PointsToConstantGlobal - Return true if V (possibly indirectly) points to +/// some part of a constant global variable. This intentionally only accepts +/// constant expressions because we don't can't rewrite arbitrary instructions. +static bool PointsToConstantGlobal(Value *V) { + if (GlobalVariable *GV = dyn_cast(V)) + return GV->isConstant(); + if (ConstantExpr *CE = dyn_cast(V)) + if (CE->getOpcode() == Instruction::BitCast || + CE->getOpcode() == Instruction::GetElementPtr) + return PointsToConstantGlobal(CE->getOperand(0)); + return false; +} + +/// isOnlyCopiedFromConstantGlobal - Recursively walk the uses of a (derived) +/// pointer to an alloca. Ignore any reads of the pointer, return false if we +/// see any stores or other unknown uses. If we see pointer arithmetic, keep +/// track of whether it moves the pointer (with isOffset) but otherwise traverse +/// the uses. If we see a memcpy/memmove that targets an unoffseted pointer to +/// the alloca, and if the source pointer is a pointer to a constant global, we +/// can optimize this. +static bool isOnlyCopiedFromConstantGlobal(Value *V, Instruction *&TheCopy, + bool isOffset) { + for (Value::use_iterator UI = V->use_begin(), E = V->use_end(); UI!=E; ++UI) { + if (isa(*UI)) { + // Ignore loads, they are always ok. + continue; + } + if (BitCastInst *BCI = dyn_cast(*UI)) { + // If uses of the bitcast are ok, we are ok. + if (!isOnlyCopiedFromConstantGlobal(BCI, TheCopy, isOffset)) + return false; + continue; + } + if (GetElementPtrInst *GEP = dyn_cast(*UI)) { + // If the GEP has all zero indices, it doesn't offset the pointer. If it + // doesn't, it does. + if (!isOnlyCopiedFromConstantGlobal(GEP, TheCopy, + isOffset || !GEP->hasAllZeroIndices())) + return false; + continue; + } + + // If this is isn't our memcpy/memmove, reject it as something we can't + // handle. + if (!isa(*UI) && !isa(*UI)) + return false; + + // If we already have seen a copy, reject the second one. + if (TheCopy) return false; + + // If the pointer has been offset from the start of the alloca, we can't + // safely handle this. + if (isOffset) return false; + + // If the memintrinsic isn't using the alloca as the dest, reject it. + if (UI.getOperandNo() != 1) return false; + + MemIntrinsic *MI = cast(*UI); + + // If the source of the memcpy/move is not a constant global, reject it. + if (!PointsToConstantGlobal(MI->getOperand(2))) + return false; + + // Otherwise, the transform is safe. Remember the copy instruction. + TheCopy = MI; + } + return true; +} + +/// isOnlyCopiedFromConstantGlobal - Return true if the specified alloca is only +/// modified by a copy from a constant global. If we can prove this, we can +/// replace any uses of the alloca with uses of the global directly. +Instruction *SROA::isOnlyCopiedFromConstantGlobal(AllocationInst *AI) { + Instruction *TheCopy = 0; + if (::isOnlyCopiedFromConstantGlobal(AI, TheCopy, false)) + return TheCopy; + return 0; +} From baldrick at free.fr Wed Apr 25 01:48:40 2007 From: baldrick at free.fr (Duncan Sands) Date: Wed, 25 Apr 2007 08:48:40 +0200 Subject: [llvm-commits] [126488] Fix PR1352 and CFrontend/2007-04-24-VolatileStructCopy.c In-Reply-To: <20070425002605.38CE910426ADF@src> References: <20070425002605.38CE910426ADF@src> Message-ID: <200704250848.41368.baldrick@free.fr> Hi Chris, > // Non-bitfield aggregate value. > - Emit(TREE_OPERAND(exp, 1), LV.Ptr); > - if (DestLoc) > + if (DestLoc) { > + Emit(TREE_OPERAND(exp, 1), LV.Ptr); > EmitAggregateCopy(DestLoc, LV.Ptr, TREE_TYPE(exp), isVolatile, false); why is this ^^^ right? Doesn't a non-null DestLoc mean you are doing something like: A = (B = C), where DestLoc represents A, and the current MODIFY_EXPR represents B=C? If so, then the above is bogus: isVolatile says whether writes to B are volatile, not writes to A: if isVolatile is true, then you are doing a volatile write to A, which may or may not need it, and a non-volatile write to B when a volatile write is needed! > + } else if (!isVolatile) { > + Emit(TREE_OPERAND(exp, 1), LV.Ptr); > + } else { > + // Need to do a volatile store into TREE_OPERAND(exp, 1). To do this, we > + // emit it into a temporary memory location, them do a volatile copy into them -> then > + // the real destination. This is probably suboptimal in some cases, but > + // it gets the volatile memory access right. It would be better if the > + // destloc pointer of 'Emit' had a flag that indicated it should be > + // volatile. > + Value *Tmp = CreateTemporary(ConvertType(TREE_TYPE(TREE_OPERAND(exp,1)))); > + Emit(TREE_OPERAND(exp, 1), Tmp); > + EmitAggregateCopy(LV.Ptr, Tmp, TREE_TYPE(TREE_OPERAND(exp,1)), > + isVolatile, false); > + } > return 0; > } Ciao, Duncan. From evan.cheng at apple.com Wed Apr 25 02:12:47 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Wed, 25 Apr 2007 02:12:47 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/IA64/IA64InstrInfo.cpp Message-ID: <200704250712.l3P7Clp6030202@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/IA64: IA64InstrInfo.cpp updated: 1.7 -> 1.8 --- Log message: Relex assertions to account for additional implicit def / use operands. --- Diffs of the changes: (+1 -1) IA64InstrInfo.cpp | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-) Index: llvm/lib/Target/IA64/IA64InstrInfo.cpp diff -u llvm/lib/Target/IA64/IA64InstrInfo.cpp:1.7 llvm/lib/Target/IA64/IA64InstrInfo.cpp:1.8 --- llvm/lib/Target/IA64/IA64InstrInfo.cpp:1.7 Mon Nov 27 17:37:22 2006 +++ llvm/lib/Target/IA64/IA64InstrInfo.cpp Wed Apr 25 02:12:14 2007 @@ -30,7 +30,7 @@ MachineOpCode oc = MI.getOpcode(); if (oc == IA64::MOV || oc == IA64::FMOV) { // TODO: this doesn't detect predicate moves - assert(MI.getNumOperands() == 2 && + assert(MI.getNumOperands() >= 2 && /* MI.getOperand(0).isRegister() && MI.getOperand(1).isRegister() && */ "invalid register-register move instruction"); From evan.cheng at apple.com Wed Apr 25 02:12:48 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Wed, 25 Apr 2007 02:12:48 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/ARM/ARMInstrInfo.cpp Message-ID: <200704250712.l3P7Cm8L030225@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/ARM: ARMInstrInfo.cpp updated: 1.20 -> 1.21 --- Log message: Relex assertions to account for additional implicit def / use operands. --- Diffs of the changes: (+1 -1) ARMInstrInfo.cpp | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-) Index: llvm/lib/Target/ARM/ARMInstrInfo.cpp diff -u llvm/lib/Target/ARM/ARMInstrInfo.cpp:1.20 llvm/lib/Target/ARM/ARMInstrInfo.cpp:1.21 --- llvm/lib/Target/ARM/ARMInstrInfo.cpp:1.20 Mon Apr 16 13:10:22 2007 +++ llvm/lib/Target/ARM/ARMInstrInfo.cpp Wed Apr 25 02:12:13 2007 @@ -52,7 +52,7 @@ return true; case ARM::MOVr: case ARM::tMOVr: - assert(MI.getNumOperands() == 2 && MI.getOperand(0).isRegister() && + assert(MI.getNumOperands() >= 2 && MI.getOperand(0).isRegister() && MI.getOperand(1).isRegister() && "Invalid ARM MOV instruction"); SrcReg = MI.getOperand(1).getReg(); From evan.cheng at apple.com Wed Apr 25 02:12:53 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Wed, 25 Apr 2007 02:12:53 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/X86/X86InstrInfo.cpp Message-ID: <200704250712.l3P7CrNf030254@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/X86: X86InstrInfo.cpp updated: 1.84 -> 1.85 --- Log message: Relex assertions to account for additional implicit def / use operands. --- Diffs of the changes: (+1 -1) X86InstrInfo.cpp | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-) Index: llvm/lib/Target/X86/X86InstrInfo.cpp diff -u llvm/lib/Target/X86/X86InstrInfo.cpp:1.84 llvm/lib/Target/X86/X86InstrInfo.cpp:1.85 --- llvm/lib/Target/X86/X86InstrInfo.cpp:1.84 Tue Apr 24 16:17:46 2007 +++ llvm/lib/Target/X86/X86InstrInfo.cpp Wed Apr 25 02:12:14 2007 @@ -39,7 +39,7 @@ oc == X86::MOVSS2PSrr || oc == X86::MOVSD2PDrr || oc == X86::MOVPS2SSrr || oc == X86::MOVPD2SDrr || oc == X86::MMX_MOVD64rr || oc == X86::MMX_MOVQ64rr) { - assert(MI.getNumOperands() == 2 && + assert(MI.getNumOperands() >= 2 && MI.getOperand(0).isRegister() && MI.getOperand(1).isRegister() && "invalid register-register move instruction"); From evan.cheng at apple.com Wed Apr 25 02:12:56 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Wed, 25 Apr 2007 02:12:56 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/Alpha/AlphaInstrInfo.cpp Message-ID: <200704250712.l3P7Cuc7030284@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/Alpha: AlphaInstrInfo.cpp updated: 1.16 -> 1.17 --- Log message: Relex assertions to account for additional implicit def / use operands. --- Diffs of the changes: (+1 -1) AlphaInstrInfo.cpp | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-) Index: llvm/lib/Target/Alpha/AlphaInstrInfo.cpp diff -u llvm/lib/Target/Alpha/AlphaInstrInfo.cpp:1.16 llvm/lib/Target/Alpha/AlphaInstrInfo.cpp:1.17 --- llvm/lib/Target/Alpha/AlphaInstrInfo.cpp:1.16 Thu Dec 7 16:21:48 2006 +++ llvm/lib/Target/Alpha/AlphaInstrInfo.cpp Wed Apr 25 02:12:14 2007 @@ -33,7 +33,7 @@ oc == Alpha::CPYSTs) { // or r1, r2, r2 // cpys(s|t) r1 r2 r2 - assert(MI.getNumOperands() == 3 && + assert(MI.getNumOperands() >= 3 && MI.getOperand(0).isRegister() && MI.getOperand(1).isRegister() && MI.getOperand(2).isRegister() && From evan.cheng at apple.com Wed Apr 25 02:12:57 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Wed, 25 Apr 2007 02:12:57 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/PowerPC/PPCInstrInfo.cpp Message-ID: <200704250712.l3P7CvAx030299@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/PowerPC: PPCInstrInfo.cpp updated: 1.36 -> 1.37 --- Log message: Relex assertions to account for additional implicit def / use operands. --- Diffs of the changes: (+5 -5) PPCInstrInfo.cpp | 10 +++++----- 1 files changed, 5 insertions(+), 5 deletions(-) Index: llvm/lib/Target/PowerPC/PPCInstrInfo.cpp diff -u llvm/lib/Target/PowerPC/PPCInstrInfo.cpp:1.36 llvm/lib/Target/PowerPC/PPCInstrInfo.cpp:1.37 --- llvm/lib/Target/PowerPC/PPCInstrInfo.cpp:1.36 Thu Dec 7 16:21:48 2006 +++ llvm/lib/Target/PowerPC/PPCInstrInfo.cpp Wed Apr 25 02:12:14 2007 @@ -38,7 +38,7 @@ MachineOpCode oc = MI.getOpcode(); if (oc == PPC::OR || oc == PPC::OR8 || oc == PPC::VOR || oc == PPC::OR4To8 || oc == PPC::OR8To4) { // or r1, r2, r2 - assert(MI.getNumOperands() == 3 && + assert(MI.getNumOperands() >= 3 && MI.getOperand(0).isRegister() && MI.getOperand(1).isRegister() && MI.getOperand(2).isRegister() && @@ -49,7 +49,7 @@ return true; } } else if (oc == PPC::ADDI) { // addi r1, r2, 0 - assert(MI.getNumOperands() == 3 && + assert(MI.getNumOperands() >= 3 && MI.getOperand(0).isRegister() && MI.getOperand(2).isImmediate() && "invalid PPC ADDI instruction!"); @@ -59,7 +59,7 @@ return true; } } else if (oc == PPC::ORI) { // ori r1, r2, 0 - assert(MI.getNumOperands() == 3 && + assert(MI.getNumOperands() >= 3 && MI.getOperand(0).isRegister() && MI.getOperand(1).isRegister() && MI.getOperand(2).isImmediate() && @@ -71,7 +71,7 @@ } } else if (oc == PPC::FMRS || oc == PPC::FMRD || oc == PPC::FMRSD) { // fmr r1, r2 - assert(MI.getNumOperands() == 2 && + assert(MI.getNumOperands() >= 2 && MI.getOperand(0).isRegister() && MI.getOperand(1).isRegister() && "invalid PPC FMR instruction"); @@ -79,7 +79,7 @@ destReg = MI.getOperand(0).getReg(); return true; } else if (oc == PPC::MCRF) { // mcrf cr1, cr2 - assert(MI.getNumOperands() == 2 && + assert(MI.getNumOperands() >= 2 && MI.getOperand(0).isRegister() && MI.getOperand(1).isRegister() && "invalid PPC MCRF instruction"); From evan.cheng at apple.com Wed Apr 25 02:18:44 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Wed, 25 Apr 2007 02:18:44 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/RegAllocLinearScan.cpp Message-ID: <200704250718.l3P7IijS001130@zion.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen: RegAllocLinearScan.cpp updated: 1.143 -> 1.144 --- Log message: Clean up. --- Diffs of the changes: (+2 -4) RegAllocLinearScan.cpp | 6 ++---- 1 files changed, 2 insertions(+), 4 deletions(-) Index: llvm/lib/CodeGen/RegAllocLinearScan.cpp diff -u llvm/lib/CodeGen/RegAllocLinearScan.cpp:1.143 llvm/lib/CodeGen/RegAllocLinearScan.cpp:1.144 --- llvm/lib/CodeGen/RegAllocLinearScan.cpp:1.143 Tue Apr 17 15:32:26 2007 +++ llvm/lib/CodeGen/RegAllocLinearScan.cpp Wed Apr 25 02:18:20 2007 @@ -776,8 +776,6 @@ } } - const TargetRegisterClass* rc = mf_->getSSARegMap()->getRegClass(cur->reg); - unsigned FreeReg = 0; unsigned FreeRegInactiveCount = 0; @@ -793,8 +791,8 @@ << mri_->getName(cur->preference) << "\n"; // Scan for the first available register. - TargetRegisterClass::iterator I = rc->allocation_order_begin(*mf_); - TargetRegisterClass::iterator E = rc->allocation_order_end(*mf_); + TargetRegisterClass::iterator I = RC->allocation_order_begin(*mf_); + TargetRegisterClass::iterator E = RC->allocation_order_end(*mf_); for (; I != E; ++I) if (prt_->isRegAvail(*I)) { FreeReg = *I; From evan.cheng at apple.com Wed Apr 25 02:24:42 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Wed, 25 Apr 2007 02:24:42 -0500 Subject: [llvm-commits] CVS: llvm/include/llvm/CodeGen/MachineInstr.h Message-ID: <200704250724.l3P7OgiT004489@zion.cs.uiuc.edu> Changes in directory llvm/include/llvm/CodeGen: MachineInstr.h updated: 1.215 -> 1.216 --- Log message: Minor speed tweak. --- Diffs of the changes: (+3 -4) MachineInstr.h | 7 +++---- 1 files changed, 3 insertions(+), 4 deletions(-) Index: llvm/include/llvm/CodeGen/MachineInstr.h diff -u llvm/include/llvm/CodeGen/MachineInstr.h:1.215 llvm/include/llvm/CodeGen/MachineInstr.h:1.216 --- llvm/include/llvm/CodeGen/MachineInstr.h:1.215 Mon Mar 26 17:37:45 2007 +++ llvm/include/llvm/CodeGen/MachineInstr.h Wed Apr 25 02:24:13 2007 @@ -517,13 +517,12 @@ MachineOperand &AddNewOperand(bool IsImp = false) { assert((IsImp || !OperandsComplete()) && "Trying to add an operand to a machine instr that is already done!"); - if (NumImplicitOps == 0) { // This is true most of the time. + if (IsImp || NumImplicitOps == 0) { // This is true most of the time. Operands.push_back(MachineOperand()); return Operands.back(); - } else { - return *Operands.insert(Operands.begin()+Operands.size()-NumImplicitOps, - MachineOperand()); } + return *Operands.insert(Operands.begin()+Operands.size()-NumImplicitOps, + MachineOperand()); } /// addImplicitDefUseOperands - Add all implicit def and use operands to From evan.cheng at apple.com Wed Apr 25 02:25:08 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Wed, 25 Apr 2007 02:25:08 -0500 Subject: [llvm-commits] CVS: llvm/include/llvm/Target/MRegisterInfo.h Message-ID: <200704250725.l3P7P8UN004506@zion.cs.uiuc.edu> Changes in directory llvm/include/llvm/Target: MRegisterInfo.h updated: 1.106 -> 1.107 --- Log message: Test if a register is sub- or super-register of another. --- Diffs of the changes: (+16 -0) MRegisterInfo.h | 16 ++++++++++++++++ 1 files changed, 16 insertions(+) Index: llvm/include/llvm/Target/MRegisterInfo.h diff -u llvm/include/llvm/Target/MRegisterInfo.h:1.106 llvm/include/llvm/Target/MRegisterInfo.h:1.107 --- llvm/include/llvm/Target/MRegisterInfo.h:1.106 Fri Apr 20 19:54:06 2007 +++ llvm/include/llvm/Target/MRegisterInfo.h Wed Apr 25 02:24:50 2007 @@ -321,6 +321,22 @@ return areAliases(regA, regB); } + /// isSubRegister - Returns true if regB is a sub-register of regA. + /// + bool isSubRegister(unsigned regA, unsigned regB) const { + for (const unsigned *SR = getSubRegisters(regA); *SR; ++SR) + if (*SR == regB) return true; + return false; + } + + /// isSuperRegister - Returns true if regB is a super-register of regA. + /// + bool isSuperRegister(unsigned regA, unsigned regB) const { + for (const unsigned *SR = getSuperRegisters(regA); *SR; ++SR) + if (*SR == regB) return true; + return false; + } + /// getCalleeSavedRegs - Return a null-terminated list of all of the /// callee saved registers on this target. The register should be in the /// order of desired callee-save stack frame offset. The first register is From evan.cheng at apple.com Wed Apr 25 02:30:45 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Wed, 25 Apr 2007 02:30:45 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/LiveIntervalAnalysis.cpp LiveVariables.cpp Message-ID: <200704250730.l3P7Ujah004655@zion.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen: LiveIntervalAnalysis.cpp updated: 1.237 -> 1.238 LiveVariables.cpp updated: 1.73 -> 1.74 --- Log message: Fix for PR1306: http://llvm.org/PR1306 . - A register def / use now implicitly affects sub-register liveness but does not affect liveness information of super-registers. - Def of a larger register (if followed by a use later) is treated as read/mod/write of a smaller register. --- Diffs of the changes: (+179 -46) LiveIntervalAnalysis.cpp | 58 +++++++++++++--- LiveVariables.cpp | 167 ++++++++++++++++++++++++++++++++++++----------- 2 files changed, 179 insertions(+), 46 deletions(-) Index: llvm/lib/CodeGen/LiveIntervalAnalysis.cpp diff -u llvm/lib/CodeGen/LiveIntervalAnalysis.cpp:1.237 llvm/lib/CodeGen/LiveIntervalAnalysis.cpp:1.238 --- llvm/lib/CodeGen/LiveIntervalAnalysis.cpp:1.237 Wed Apr 18 00:04:38 2007 +++ llvm/lib/CodeGen/LiveIntervalAnalysis.cpp Wed Apr 25 02:30:23 2007 @@ -675,8 +675,12 @@ exit: assert(start < end && "did not find end of interval?"); - LiveRange LR(start, end, interval.getNextValue(SrcReg != 0 ? start : ~0U, - SrcReg)); + // Already exists? Extend old live interval. + LiveInterval::iterator OldLR = interval.FindLiveRangeContaining(start); + unsigned Id = (OldLR != interval.end()) + ? OldLR->ValId + : interval.getNextValue(SrcReg != 0 ? start : ~0U, SrcReg); + LiveRange LR(start, end, Id); interval.addRange(LR); DOUT << " +" << LR << '\n'; } @@ -692,14 +696,17 @@ if (!tii_->isMoveInstr(*MI, SrcReg, DstReg)) SrcReg = 0; handlePhysicalRegisterDef(MBB, MI, MIIdx, getOrCreateInterval(reg), SrcReg); - for (const unsigned* AS = mri_->getAliasSet(reg); *AS; ++AS) - handlePhysicalRegisterDef(MBB, MI, MIIdx, getOrCreateInterval(*AS), 0); + // Def of a register also defines its sub-registers. + for (const unsigned* AS = mri_->getSubRegisters(reg); *AS; ++AS) + // Avoid processing some defs more than once. + if (!MI->findRegisterDefOperand(*AS)) + handlePhysicalRegisterDef(MBB, MI, MIIdx, getOrCreateInterval(*AS), 0); } } void LiveIntervals::handleLiveInRegister(MachineBasicBlock *MBB, unsigned MIIdx, - LiveInterval &interval) { + LiveInterval &interval, bool isAlias) { DOUT << "\t\tlivein register: "; DEBUG(printRegName(interval.reg)); // Look for kills, if it reaches a def before it's killed, then it shouldn't @@ -728,6 +735,12 @@ } exit: + // Alias of a live-in register might not be used at all. + if (isAlias && end == 0) { + DOUT << " dead"; + end = getDefIndex(start) + 1; + } + assert(start < end && "did not find end of interval?"); LiveRange LR(start, end, interval.getNextValue(~0U, 0)); @@ -757,8 +770,10 @@ for (MachineBasicBlock::const_livein_iterator LI = MBB->livein_begin(), LE = MBB->livein_end(); LI != LE; ++LI) { handleLiveInRegister(MBB, MIIndex, getOrCreateInterval(*LI)); - for (const unsigned* AS = mri_->getAliasSet(*LI); *AS; ++AS) - handleLiveInRegister(MBB, MIIndex, getOrCreateInterval(*AS)); + // Multiple live-ins can alias the same register. + for (const unsigned* AS = mri_->getSubRegisters(*LI); *AS; ++AS) + if (!hasInterval(*AS)) + handleLiveInRegister(MBB, MIIndex, getOrCreateInterval(*AS), true); } } @@ -856,7 +871,8 @@ // If the IntB live range is assigned to a physical register, and if that // physreg has aliases, if (MRegisterInfo::isPhysicalRegister(IntB.reg)) { - for (const unsigned *AS = mri_->getAliasSet(IntB.reg); *AS; ++AS) { + // Update the liveintervals of sub-registers. + for (const unsigned *AS = mri_->getSubRegisters(IntB.reg); *AS; ++AS) { LiveInterval &AliasLI = getInterval(*AS); AliasLI.addRange(LiveRange(FillerStart, FillerEnd, AliasLI.getNextValue(~0U, 0))); @@ -1055,8 +1071,9 @@ // we have to update any aliased register's live ranges to indicate that they // have clobbered values for this range. if (MRegisterInfo::isPhysicalRegister(repDstReg)) { - for (const unsigned *AS = mri_->getAliasSet(repDstReg); *AS; ++AS) - getInterval(*AS).MergeInClobberRanges(SrcInt); + // Update the liveintervals of sub-registers. + for (const unsigned *AS = mri_->getSubRegisters(repDstReg); *AS; ++AS) + getInterval(*AS).MergeInClobberRanges(SrcInt); } else { // Merge use info if the destination is a virtual register. LiveVariables::VarInfo& dVI = lv_->getVarInfo(repDstReg); @@ -1279,6 +1296,27 @@ SmallVector LHSValNoAssignments; SmallVector RHSValNoAssignments; SmallVector, 16> ValueNumberInfo; + + // If a live interval is a physical register, conservatively check if any + // of its sub-registers is overlapping the live interval of the virtual + // register. If so, do not coalesce. + if (MRegisterInfo::isPhysicalRegister(LHS.reg) && + *mri_->getSubRegisters(LHS.reg)) { + for (const unsigned* SR = mri_->getSubRegisters(LHS.reg); *SR; ++SR) + if (hasInterval(*SR) && RHS.overlaps(getInterval(*SR))) { + DOUT << "Interfere with sub-register "; + DEBUG(getInterval(*SR).print(DOUT, mri_)); + return false; + } + } else if (MRegisterInfo::isPhysicalRegister(RHS.reg) && + *mri_->getSubRegisters(RHS.reg)) { + for (const unsigned* SR = mri_->getSubRegisters(RHS.reg); *SR; ++SR) + if (hasInterval(*SR) && LHS.overlaps(getInterval(*SR))) { + DOUT << "Interfere with sub-register "; + DEBUG(getInterval(*SR).print(DOUT, mri_)); + return false; + } + } // Compute ultimate value numbers for the LHS and RHS values. if (RHS.containsOneValue()) { Index: llvm/lib/CodeGen/LiveVariables.cpp diff -u llvm/lib/CodeGen/LiveVariables.cpp:1.73 llvm/lib/CodeGen/LiveVariables.cpp:1.74 --- llvm/lib/CodeGen/LiveVariables.cpp:1.73 Wed Apr 18 00:04:38 2007 +++ llvm/lib/CodeGen/LiveVariables.cpp Wed Apr 25 02:30:23 2007 @@ -77,7 +77,10 @@ for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) { MachineOperand &MO = MI->getOperand(i); if (MO.isReg() && MO.isKill()) { - if (RegInfo->regsOverlap(Reg, MO.getReg())) + if ((MO.getReg() == Reg) || + (MRegisterInfo::isPhysicalRegister(MO.getReg()) && + MRegisterInfo::isPhysicalRegister(Reg) && + RegInfo->isSubRegister(MO.getReg(), Reg))) return true; } } @@ -87,9 +90,13 @@ bool LiveVariables::RegisterDefIsDead(MachineInstr *MI, unsigned Reg) const { for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) { MachineOperand &MO = MI->getOperand(i); - if (MO.isReg() && MO.isDead()) - if (RegInfo->regsOverlap(Reg, MO.getReg())) + if (MO.isReg() && MO.isDead()) { + if ((MO.getReg() == Reg) || + (MRegisterInfo::isPhysicalRegister(MO.getReg()) && + MRegisterInfo::isPhysicalRegister(Reg) && + RegInfo->isSubRegister(MO.getReg(), Reg))) return true; + } } return false; } @@ -97,10 +104,8 @@ bool LiveVariables::ModifiesRegister(MachineInstr *MI, unsigned Reg) const { for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) { MachineOperand &MO = MI->getOperand(i); - if (MO.isReg() && MO.isDef()) { - if (RegInfo->regsOverlap(Reg, MO.getReg())) - return true; - } + if (MO.isReg() && MO.isDef() && MO.getReg() == Reg) + return true; } return false; } @@ -166,57 +171,145 @@ } void LiveVariables::addRegisterKilled(unsigned IncomingReg, MachineInstr *MI) { + bool Found = false; for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) { MachineOperand &MO = MI->getOperand(i); - if (MO.isReg() && MO.isUse() && MO.getReg() == IncomingReg) { - MO.setIsKill(); - break; + if (MO.isReg() && MO.isUse()) { + unsigned Reg = MO.getReg(); + if (!Reg) + continue; + if (Reg == IncomingReg) { + MO.setIsKill(); + Found = true; + break; + } else if (MRegisterInfo::isPhysicalRegister(Reg) && + MRegisterInfo::isPhysicalRegister(IncomingReg) && + RegInfo->isSuperRegister(IncomingReg, Reg) && + MO.isKill()) + // A super-register kill already exists. + return; } } + + // If not found, this means an alias of one of the operand is killed. Add a + // new implicit operand. + if (!Found) + MI->addRegOperand(IncomingReg, false/*IsDef*/,true/*IsImp*/,true/*IsKill*/); } void LiveVariables::addRegisterDead(unsigned IncomingReg, MachineInstr *MI) { + bool Found = false; for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) { MachineOperand &MO = MI->getOperand(i); - if (MO.isReg() && MO.isDef() && MO.getReg() == IncomingReg) { - MO.setIsDead(); - break; + if (MO.isReg() && MO.isDef()) { + unsigned Reg = MO.getReg(); + if (!Reg) + continue; + if (Reg == IncomingReg) { + MO.setIsDead(); + Found = true; + break; + } else if (MRegisterInfo::isPhysicalRegister(Reg) && + MRegisterInfo::isPhysicalRegister(IncomingReg) && + RegInfo->isSuperRegister(IncomingReg, Reg) && + MO.isDead()) + // There exists a super-register that's marked dead. + return; } } + + // If not found, this means an alias of one of the operand is dead. Add a + // new implicit operand. + if (!Found) + MI->addRegOperand(IncomingReg, true/*IsDef*/,true/*IsImp*/,false/*IsKill*/, + true/*IsDead*/); } void LiveVariables::HandlePhysRegUse(unsigned Reg, MachineInstr *MI) { + // There is a now a proper use, forget about the last partial use. + PhysRegPartUse[Reg] = NULL; + + // Turn previous partial def's into read/mod/write. + for (unsigned i = 0, e = PhysRegPartDef[Reg].size(); i != e; ++i) { + MachineInstr *Def = PhysRegPartDef[Reg][i]; + // First one is just a def. This means the use is reading some undef bits. + if (i != 0) + Def->addRegOperand(Reg, false/*IsDef*/,true/*IsImp*/,true/*IsKill*/); + Def->addRegOperand(Reg, true/*IsDef*/,true/*IsImp*/); + } + PhysRegPartDef[Reg].clear(); + + // There was an earlier def of a super-register. Add implicit def to that MI. + // A: EAX = ... + // B: = AX + // Add implicit def to A. + if (PhysRegInfo[Reg] && !PhysRegUsed[Reg]) { + MachineInstr *Def = PhysRegInfo[Reg]; + if (!Def->findRegisterDefOperand(Reg)) + Def->addRegOperand(Reg, true/*IsDef*/,true/*IsImp*/); + } + PhysRegInfo[Reg] = MI; PhysRegUsed[Reg] = true; - for (const unsigned *AliasSet = RegInfo->getAliasSet(Reg); - unsigned Alias = *AliasSet; ++AliasSet) { - PhysRegInfo[Alias] = MI; - PhysRegUsed[Alias] = true; + for (const unsigned *SubRegs = RegInfo->getSubRegisters(Reg); + unsigned SubReg = *SubRegs; ++SubRegs) { + PhysRegInfo[SubReg] = MI; + PhysRegUsed[SubReg] = true; } + + // Remember the partial uses. + for (const unsigned *SuperRegs = RegInfo->getSuperRegisters(Reg); + unsigned SuperReg = *SuperRegs; ++SuperRegs) + PhysRegPartUse[SuperReg] = MI; } void LiveVariables::HandlePhysRegDef(unsigned Reg, MachineInstr *MI) { // Does this kill a previous version of this register? - if (MachineInstr *LastUse = PhysRegInfo[Reg]) { + if (MachineInstr *LastRef = PhysRegInfo[Reg]) { if (PhysRegUsed[Reg]) - addRegisterKilled(Reg, LastUse); + addRegisterKilled(Reg, LastRef); + else if (PhysRegPartUse[Reg]) + // Add implicit use / kill to last use of a sub-register. + addRegisterKilled(Reg, PhysRegPartUse[Reg]); else - addRegisterDead(Reg, LastUse); + addRegisterDead(Reg, LastRef); } PhysRegInfo[Reg] = MI; PhysRegUsed[Reg] = false; + PhysRegPartUse[Reg] = NULL; - for (const unsigned *AliasSet = RegInfo->getAliasSet(Reg); - unsigned Alias = *AliasSet; ++AliasSet) { - if (MachineInstr *LastUse = PhysRegInfo[Alias]) { - if (PhysRegUsed[Alias]) - addRegisterKilled(Alias, LastUse); + for (const unsigned *SubRegs = RegInfo->getSubRegisters(Reg); + unsigned SubReg = *SubRegs; ++SubRegs) { + if (MachineInstr *LastRef = PhysRegInfo[SubReg]) { + if (PhysRegUsed[SubReg]) + addRegisterKilled(SubReg, LastRef); + else if (PhysRegPartUse[SubReg]) + // Add implicit use / kill to last use of a sub-register. + addRegisterKilled(SubReg, PhysRegPartUse[SubReg]); else - addRegisterDead(Alias, LastUse); + addRegisterDead(SubReg, LastRef); } - PhysRegInfo[Alias] = MI; - PhysRegUsed[Alias] = false; + PhysRegInfo[SubReg] = MI; + PhysRegUsed[SubReg] = false; + } + + if (MI) + for (const unsigned *SuperRegs = RegInfo->getSuperRegisters(Reg); + unsigned SuperReg = *SuperRegs; ++SuperRegs) { + if (PhysRegInfo[SuperReg]) { + // The larger register is previously defined. Now a smaller part is + // being re-defined. Treat it as read/mod/write. + // EAX = + // AX = EAX, EAX + MI->addRegOperand(SuperReg, false/*IsDef*/,true/*IsImp*/,true/*IsKill*/); + MI->addRegOperand(SuperReg, true/*IsDef*/,true/*IsImp*/); + PhysRegInfo[SuperReg] = MI; + PhysRegUsed[SuperReg] = false; + } else { + // Remember this partial def. + PhysRegPartDef[SuperReg].push_back(MI); + } } } @@ -228,14 +321,10 @@ ReservedRegisters = RegInfo->getReservedRegs(mf); - // PhysRegInfo - Keep track of which instruction was the last use of a - // physical register. This is a purely local property, because all physical - // register references as presumed dead across basic blocks. - // - PhysRegInfo = (MachineInstr**)alloca(sizeof(MachineInstr*) * - RegInfo->getNumRegs()); - PhysRegUsed = (bool*)alloca(sizeof(bool)*RegInfo->getNumRegs()); - std::fill(PhysRegInfo, PhysRegInfo+RegInfo->getNumRegs(), (MachineInstr*)0); + PhysRegInfo.resize(RegInfo->getNumRegs(), (MachineInstr*)NULL); + PhysRegUsed.resize(RegInfo->getNumRegs()); + PhysRegPartDef.resize(RegInfo->getNumRegs()); + PhysRegPartUse.resize(RegInfo->getNumRegs(), (MachineInstr*)NULL); /// Get some space for a respectable number of registers... VirtRegInfo.resize(64); @@ -342,6 +431,12 @@ for (unsigned i = 0, e = RegInfo->getNumRegs(); i != e; ++i) if (PhysRegInfo[i]) HandlePhysRegDef(i, 0); + + // Clear some states between BB's. These are purely local information. + for (unsigned i = 0, e = RegInfo->getNumRegs(); i != e; ++i) { + PhysRegPartDef[i].clear(); + PhysRegPartUse[i] = NULL; + } } // Convert and transfer the dead / killed information we have gathered into From evan.cheng at apple.com Wed Apr 25 02:30:41 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Wed, 25 Apr 2007 02:30:41 -0500 Subject: [llvm-commits] CVS: llvm/include/llvm/CodeGen/LiveIntervalAnalysis.h LiveVariables.h Message-ID: <200704250730.l3P7Uf32004647@zion.cs.uiuc.edu> Changes in directory llvm/include/llvm/CodeGen: LiveIntervalAnalysis.h updated: 1.79 -> 1.80 LiveVariables.h updated: 1.38 -> 1.39 --- Log message: Fix for PR1306: http://llvm.org/PR1306 . - A register def / use now implicitly affects sub-register liveness but does not affect liveness information of super-registers. - Def of a larger register (if followed by a use later) is treated as read/mod/write of a smaller register. --- Diffs of the changes: (+20 -3) LiveIntervalAnalysis.h | 2 +- LiveVariables.h | 21 +++++++++++++++++++-- 2 files changed, 20 insertions(+), 3 deletions(-) Index: llvm/include/llvm/CodeGen/LiveIntervalAnalysis.h diff -u llvm/include/llvm/CodeGen/LiveIntervalAnalysis.h:1.79 llvm/include/llvm/CodeGen/LiveIntervalAnalysis.h:1.80 --- llvm/include/llvm/CodeGen/LiveIntervalAnalysis.h:1.79 Tue Apr 17 21:30:19 2007 +++ llvm/include/llvm/CodeGen/LiveIntervalAnalysis.h Wed Apr 25 02:30:23 2007 @@ -255,7 +255,7 @@ /// handleLiveInRegister - Create interval for a livein register. void handleLiveInRegister(MachineBasicBlock* mbb, unsigned MIIdx, - LiveInterval &interval); + LiveInterval &interval, bool isAlias = false); /// Return true if the two specified registers belong to different /// register classes. The registers may be either phys or virt regs. Index: llvm/include/llvm/CodeGen/LiveVariables.h diff -u llvm/include/llvm/CodeGen/LiveVariables.h:1.38 llvm/include/llvm/CodeGen/LiveVariables.h:1.39 --- llvm/include/llvm/CodeGen/LiveVariables.h:1.38 Wed Apr 18 00:04:38 2007 +++ llvm/include/llvm/CodeGen/LiveVariables.h Wed Apr 25 02:30:23 2007 @@ -124,8 +124,25 @@ const MRegisterInfo *RegInfo; - MachineInstr **PhysRegInfo; - bool *PhysRegUsed; + // PhysRegInfo - Keep track of which instruction was the last def/use of a + // physical register. This is a purely local property, because all physical + // register references as presumed dead across basic blocks. + std::vector PhysRegInfo; + + // PhysRegUsed - Keep track whether the physical register has been used after + // its last definition. This is local property. + BitVector PhysRegUsed; + + // PhysRegPartDef - Keep track of a list of instructions which "partially" + // defined the physical register (e.g. on X86 AX partially defines EAX). + // These are turned into use/mod/write if there is a use of the register + // later in the same block. This is local property. + std::vector > PhysRegPartDef; + + // PhysRegPartUse - Keep track of which instruction was the last partial use + // of a physical register (e.g. on X86 a def of EAX followed by a use of AX). + // This is a purely local property. + std::vector PhysRegPartUse; typedef std::map > PHIVarInfoMap; From jeffc at jolt-lang.org Wed Apr 25 09:19:29 2007 From: jeffc at jolt-lang.org (Jeff Cohen) Date: Wed, 25 Apr 2007 07:19:29 -0700 Subject: [llvm-commits] llvm-gcc mirror not updating Message-ID: <462F6371.30007@jolt-lang.org> It did not update last night. In addition, it did not update the night before that at 2am PDT as claimed in the svn log. My nightly tester pulled in those changes only last night, 25 hours after the log claimed they were committed. From asl at math.spbu.ru Wed Apr 25 09:28:00 2007 From: asl at math.spbu.ru (Anton Korobeynikov) Date: Wed, 25 Apr 2007 09:28:00 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/AsmPrinter.cpp Message-ID: <200704251428.l3PES0uo012532@zion.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen: AsmPrinter.cpp updated: 1.156 -> 1.157 --- Log message: Implement aliases. This fixes PR1017: http://llvm.org/PR1017 and it's dependent bugs. CFE part will follow. --- Diffs of the changes: (+25 -1) AsmPrinter.cpp | 26 +++++++++++++++++++++++++- 1 files changed, 25 insertions(+), 1 deletion(-) Index: llvm/lib/CodeGen/AsmPrinter.cpp diff -u llvm/lib/CodeGen/AsmPrinter.cpp:1.156 llvm/lib/CodeGen/AsmPrinter.cpp:1.157 --- llvm/lib/CodeGen/AsmPrinter.cpp:1.156 Mon Apr 23 18:33:31 2007 +++ llvm/lib/CodeGen/AsmPrinter.cpp Wed Apr 25 09:27:10 2007 @@ -111,7 +111,7 @@ bool AsmPrinter::doFinalization(Module &M) { if (TAI->getWeakRefDirective()) { - if (ExtWeakSymbols.begin() != ExtWeakSymbols.end()) + if (!ExtWeakSymbols.empty()) SwitchToDataSection(""); for (std::set::iterator i = ExtWeakSymbols.begin(), @@ -122,6 +122,30 @@ } } + if (TAI->getSetDirective()) { + if (M.alias_size()) + SwitchToTextSection(TAI->getTextSection()); + + O << "\n"; + for (Module::const_alias_iterator I = M.alias_begin(), E = M.alias_end(); + I!=E; ++I) { + const GlobalValue *Aliasee = I->getAliasee(); + assert(Aliasee && "Aliasee cannot be null!"); + std::string Target = Mang->getValueName(Aliasee); + std::string Name = Mang->getValueName(I); + + // Aliases with external weak linkage was emitted already + if (I->hasExternalLinkage()) + O << "\t.globl\t" << Name << "\n"; + else if (I->hasWeakLinkage()) + O << TAI->getWeakRefDirective() << Name << "\n"; + else if (!I->hasInternalLinkage()) + assert(0 && "Invalid alias linkage"); + + O << TAI->getSetDirective() << Name << ", " << Target << "\n"; + } + } + delete Mang; Mang = 0; return false; } From asl at math.spbu.ru Wed Apr 25 09:28:00 2007 From: asl at math.spbu.ru (Anton Korobeynikov) Date: Wed, 25 Apr 2007 09:28:00 -0500 Subject: [llvm-commits] CVS: llvm/docs/BytecodeFormat.html LangRef.html Message-ID: <200704251428.l3PES0ZK012530@zion.cs.uiuc.edu> Changes in directory llvm/docs: BytecodeFormat.html updated: 1.69 -> 1.70 LangRef.html updated: 1.237 -> 1.238 --- Log message: Implement aliases. This fixes PR1017: http://llvm.org/PR1017 and it's dependent bugs. CFE part will follow. --- Diffs of the changes: (+91 -15) BytecodeFormat.html | 69 ++++++++++++++++++++++++++++++++++++++++++++++------ LangRef.html | 37 +++++++++++++++++++++------ 2 files changed, 91 insertions(+), 15 deletions(-) Index: llvm/docs/BytecodeFormat.html diff -u llvm/docs/BytecodeFormat.html:1.69 llvm/docs/BytecodeFormat.html:1.70 --- llvm/docs/BytecodeFormat.html:1.69 Sat Apr 21 03:16:24 2007 +++ llvm/docs/BytecodeFormat.html Wed Apr 25 09:27:10 2007 @@ -943,11 +943,11 @@ target triple specified, i.e. a platform-independent module). - - + + @@ -959,6 +959,11 @@ + + + +
Unconfirmed Attendees
NameOrganization
stringThe data layout string describing the endianness, - pointer size, and type alignments for which the module was written - (blank means no data layout specified, i.e. a platform-independent - module).stringThe data layout string describing the endianness, + pointer size, and type alignments for which the module was written + (blank means no data layout specified, i.e. a platform-independent + module).
llist(string)string The inline asm block for this module.
zlist(alias)A zero terminated list of aliases occurring in the + module.
@@ -1123,7 +1128,7 @@ bit(5-30) Type slot number of type for the function. - + bit(31) Indicates whether an extension word follows. @@ -1186,6 +1191,56 @@ + +
+

Aliases are written using 3 uint32_vbr +that encode information about alias itself and aliasee.

+ +

The table below provides the bit layout of +the first uint32_vbr which describes alias itself.

+ + + + + + + + + + + + + + + + +
TypeDescription
bit(0-1)Alias linkage. 0 - External linkage, 1 - Internal + linkage, 2 - Weak linkage.
bit(2-31)Type slot number of type for the alias itself.
+ +

The next two uint32_vbr's describes the + aliasee.

+ + + + + + + + + + + + + + + + +
TypeDescription
uint32_vbrType slot number of type for the aliasee.
uint32_vbrSlot number of the aliasee.
+ +
+ +

A constant pool defines as set of constant values. There are @@ -2097,7 +2152,7 @@ Reid Spencer and Chris Lattner
The LLVM Compiler Infrastructure
-Last modified: $Date: 2007/04/21 08:16:24 $ +Last modified: $Date: 2007/04/25 14:27:10 $ Index: llvm/docs/LangRef.html diff -u llvm/docs/LangRef.html:1.237 llvm/docs/LangRef.html:1.238 --- llvm/docs/LangRef.html:1.237 Sun Apr 22 09:56:37 2007 +++ llvm/docs/LangRef.html Wed Apr 25 09:27:10 2007 @@ -498,7 +498,8 @@

It is illegal for a function declaration to have any linkage type other than "externally visible", dllimport, or extern_weak.

- +

Aliases can have only external, internal and weak +linkages.

@@ -602,12 +603,11 @@

Global variables define regions of memory allocated at compilation time instead of run-time. Global variables may optionally be initialized, may have -an explicit section to be placed in, and may -have an optional explicit alignment specified. A variable may be defined as -"thread_local", which means that it will not be shared by threads (each thread -will have a separated copy of the variable). -A variable may be defined as a global "constant," which indicates that the -contents of the variable will never be modified (enabling better +an explicit section to be placed in, and may have an optional explicit alignment +specified. A variable may be defined as "thread_local", which means that it +will not be shared by threads (each thread will have a separated copy of the +variable). A variable may be defined as a global "constant," which indicates +that the contents of the variable will never be modified (enabling better optimization, allowing the global data to be placed in the read-only section of an executable, etc). Note that variables that need runtime initialization cannot be marked "constant" as there is a store to the variable.

@@ -698,6 +698,27 @@ + + +
+ Aliases +
+
+

Aliases act as "second name" for the aliasee value (which can be either + function or global variable). Aliases may have an + optional linkage type, and an + optional visibility style.

+ +
Syntax:
+ +
+    @<Name> = [Linkage] [Visibility] alias <AliaseeTy> @<Aliasee>
+  
+ +
+ + +
@@ -4728,7 +4749,7 @@ Chris Lattner
The LLVM Compiler Infrastructure
- Last modified: $Date: 2007/04/22 14:56:37 $ + Last modified: $Date: 2007/04/25 14:27:10 $ From asl at math.spbu.ru Wed Apr 25 09:28:00 2007 From: asl at math.spbu.ru (Anton Korobeynikov) Date: Wed, 25 Apr 2007 09:28:00 -0500 Subject: [llvm-commits] CVS: llvm/include/llvm/CodeGen/AsmPrinter.h Message-ID: <200704251428.l3PES0Fp012535@zion.cs.uiuc.edu> Changes in directory llvm/include/llvm/CodeGen: AsmPrinter.h updated: 1.62 -> 1.63 --- Log message: Implement aliases. This fixes PR1017: http://llvm.org/PR1017 and it's dependent bugs. CFE part will follow. --- Diffs of the changes: (+1 -0) AsmPrinter.h | 1 + 1 files changed, 1 insertion(+) Index: llvm/include/llvm/CodeGen/AsmPrinter.h diff -u llvm/include/llvm/CodeGen/AsmPrinter.h:1.62 llvm/include/llvm/CodeGen/AsmPrinter.h:1.63 --- llvm/include/llvm/CodeGen/AsmPrinter.h:1.62 Wed Feb 21 16:47:38 2007 +++ llvm/include/llvm/CodeGen/AsmPrinter.h Wed Apr 25 09:27:10 2007 @@ -24,6 +24,7 @@ class Constant; class ConstantArray; class GlobalVariable; + class GlobalAlias; class MachineConstantPoolEntry; class MachineConstantPoolValue; class Mangler; From asl at math.spbu.ru Wed Apr 25 09:28:01 2007 From: asl at math.spbu.ru (Anton Korobeynikov) Date: Wed, 25 Apr 2007 09:28:01 -0500 Subject: [llvm-commits] CVS: llvm/lib/Transforms/IPO/GlobalDCE.cpp Message-ID: <200704251428.l3PES166012545@zion.cs.uiuc.edu> Changes in directory llvm/lib/Transforms/IPO: GlobalDCE.cpp updated: 1.42 -> 1.43 --- Log message: Implement aliases. This fixes PR1017: http://llvm.org/PR1017 and it's dependent bugs. CFE part will follow. --- Diffs of the changes: (+12 -1) GlobalDCE.cpp | 13 ++++++++++++- 1 files changed, 12 insertions(+), 1 deletion(-) Index: llvm/lib/Transforms/IPO/GlobalDCE.cpp diff -u llvm/lib/Transforms/IPO/GlobalDCE.cpp:1.42 llvm/lib/Transforms/IPO/GlobalDCE.cpp:1.43 --- llvm/lib/Transforms/IPO/GlobalDCE.cpp:1.42 Mon Feb 5 17:32:05 2007 +++ llvm/lib/Transforms/IPO/GlobalDCE.cpp Wed Apr 25 09:27:10 2007 @@ -62,7 +62,8 @@ GlobalIsNeeded(I); } - for (Module::global_iterator I = M.global_begin(), E = M.global_end(); I != E; ++I) { + for (Module::global_iterator I = M.global_begin(), E = M.global_end(); + I != E; ++I) { Changed |= RemoveUnusedGlobalValue(*I); // Externally visible & appending globals are needed, if they have an // initializer. @@ -72,6 +73,13 @@ } + for (Module::alias_iterator I = M.alias_begin(), E = M.alias_end(); + I != E; ++I) { + Changed |= RemoveUnusedGlobalValue(*I); + // Aliases are always needed even if they are not used. + GlobalIsNeeded(I); + } + // Now that all globals which are needed are in the AliveGlobals set, we loop // through the program, deleting those which are not alive. // @@ -135,6 +143,9 @@ // referenced by the initializer to the alive set. if (GV->hasInitializer()) MarkUsedGlobalsAsNeeded(GV->getInitializer()); + } else if (GlobalAlias *GA = dyn_cast(G)) { + // If this is a global alias we also need it's aliasee + GlobalIsNeeded(const_cast(GA->getAliasee())); } else { // Otherwise this must be a function object. We have to scan the body of // the function looking for constants and global values which are used as From asl at math.spbu.ru Wed Apr 25 09:28:01 2007 From: asl at math.spbu.ru (Anton Korobeynikov) Date: Wed, 25 Apr 2007 09:28:01 -0500 Subject: [llvm-commits] CVS: llvm/test/Feature/aliases.ll Message-ID: <200704251428.l3PES1Kx012550@zion.cs.uiuc.edu> Changes in directory llvm/test/Feature: aliases.ll added (r1.1) --- Log message: Implement aliases. This fixes PR1017: http://llvm.org/PR1017 and it's dependent bugs. CFE part will follow. --- Diffs of the changes: (+28 -0) aliases.ll | 28 ++++++++++++++++++++++++++++ 1 files changed, 28 insertions(+) Index: llvm/test/Feature/aliases.ll diff -c /dev/null llvm/test/Feature/aliases.ll:1.1 *** /dev/null Wed Apr 25 09:27:21 2007 --- llvm/test/Feature/aliases.ll Wed Apr 25 09:27:10 2007 *************** *** 0 **** --- 1,28 ---- + ; RUN: llvm-as < %s | llvm-dis > %t1.ll + ; RUN: llvm-as %t1.ll -o - | llvm-dis > %t2.ll + ; RUN: diff %t1.ll %t2.ll + + @bar = external global i32 + @foo1 = alias i32* @bar + @foo2 = alias i32* @bar + + %FunTy = type i32() + + declare i32 @foo_f() + @bar_f = alias weak %FunTy* @foo_f + + @bar_i = alias internal i32* @bar + + define i32 @test() { + entry: + %tmp = load i32* @foo1 + %tmp1 = load i32* @foo2 + %tmp0 = load i32* @bar_i + %tmp2 = call i32 @foo_f() + %tmp3 = add i32 %tmp, %tmp2 + %tmp4 = call %FunTy* @bar_f() + %tmp5 = add i32 %tmp3, %tmp4 + %tmp6 = add i32 %tmp1, %tmp5 + %tmp7 = add i32 %tmp6, %tmp0 + ret i32 %tmp7 + } From asl at math.spbu.ru Wed Apr 25 09:28:01 2007 From: asl at math.spbu.ru (Anton Korobeynikov) Date: Wed, 25 Apr 2007 09:28:01 -0500 Subject: [llvm-commits] CVS: llvm/test/CodeGen/X86/aliases.ll Message-ID: <200704251428.l3PES1UT012548@zion.cs.uiuc.edu> Changes in directory llvm/test/CodeGen/X86: aliases.ll added (r1.1) --- Log message: Implement aliases. This fixes PR1017: http://llvm.org/PR1017 and it's dependent bugs. CFE part will follow. --- Diffs of the changes: (+30 -0) aliases.ll | 30 ++++++++++++++++++++++++++++++ 1 files changed, 30 insertions(+) Index: llvm/test/CodeGen/X86/aliases.ll diff -c /dev/null llvm/test/CodeGen/X86/aliases.ll:1.1 *** /dev/null Wed Apr 25 09:27:20 2007 --- llvm/test/CodeGen/X86/aliases.ll Wed Apr 25 09:27:10 2007 *************** *** 0 **** --- 1,30 ---- + ; RUN: llvm-as < %s | \ + ; RUN: llc -mtriple=i686-pc-linux-gnu -o %t -f + ; RUN: grep -c set %t | grep 4 + ; RUN: grep -c globl %t | grep 3 + ; RUN: grep -c weak %t | grep 1 + + @bar = external global i32 + @foo1 = alias i32* @bar + @foo2 = alias i32* @bar + + %FunTy = type i32() + + declare i32 @foo_f() + @bar_f = alias weak %FunTy* @foo_f + + @bar_i = alias internal i32* @bar + + define i32 @test() { + entry: + %tmp = load i32* @foo1 + %tmp1 = load i32* @foo2 + %tmp0 = load i32* @bar_i + %tmp2 = call i32 @foo_f() + %tmp3 = add i32 %tmp, %tmp2 + %tmp4 = call %FunTy* @bar_f() + %tmp5 = add i32 %tmp3, %tmp4 + %tmp6 = add i32 %tmp1, %tmp5 + %tmp7 = add i32 %tmp6, %tmp0 + ret i32 %tmp7 + } From asl at math.spbu.ru Wed Apr 25 09:28:07 2007 From: asl at math.spbu.ru (Anton Korobeynikov) Date: Wed, 25 Apr 2007 09:28:07 -0500 Subject: [llvm-commits] CVS: llvm/include/llvm/Function.h GlobalValue.h GlobalVariable.h Module.h Value.h ValueSymbolTable.h Message-ID: <200704251428.l3PES7pX012571@zion.cs.uiuc.edu> Changes in directory llvm/include/llvm: Function.h updated: 1.81 -> 1.82 GlobalValue.h updated: 1.38 -> 1.39 GlobalVariable.h updated: 1.44 -> 1.45 Module.h updated: 1.88 -> 1.89 Value.h updated: 1.100 -> 1.101 ValueSymbolTable.h updated: 1.12 -> 1.13 --- Log message: Implement aliases. This fixes PR1017: http://llvm.org/PR1017 and it's dependent bugs. CFE part will follow. --- Diffs of the changes: (+94 -16) Function.h | 4 +- GlobalValue.h | 13 +++++++- GlobalVariable.h | 4 +- Module.h | 81 ++++++++++++++++++++++++++++++++++++++++++++++------- Value.h | 7 +++- ValueSymbolTable.h | 1 6 files changed, 94 insertions(+), 16 deletions(-) Index: llvm/include/llvm/Function.h diff -u llvm/include/llvm/Function.h:1.81 llvm/include/llvm/Function.h:1.82 --- llvm/include/llvm/Function.h:1.81 Sun Apr 22 12:28:03 2007 +++ llvm/include/llvm/Function.h Wed Apr 25 09:27:10 2007 @@ -141,12 +141,12 @@ /// removeFromParent - This method unlinks 'this' from the containing module, /// but does not delete it. /// - void removeFromParent(); + virtual void removeFromParent(); /// eraseFromParent - This method unlinks 'this' from the containing module /// and deletes it. /// - void eraseFromParent(); + virtual void eraseFromParent(); /// Get the underlying elements of the Function... the basic block list is Index: llvm/include/llvm/GlobalValue.h diff -u llvm/include/llvm/GlobalValue.h:1.38 llvm/include/llvm/GlobalValue.h:1.39 --- llvm/include/llvm/GlobalValue.h:1.38 Sun Apr 22 10:11:24 2007 +++ llvm/include/llvm/GlobalValue.h Wed Apr 25 09:27:10 2007 @@ -121,6 +121,16 @@ /// value is outside of the current translation unit... virtual bool isDeclaration() const = 0; + /// removeFromParent - This method unlinks 'this' from the containing module, + /// but does not delete it. + /// + virtual void removeFromParent() = 0; + + /// eraseFromParent - This method unlinks 'this' from the containing module + /// and deletes it. + /// + virtual void eraseFromParent() = 0; + /// getParent - Get the module that this global value is contained inside /// of... inline Module *getParent() { return Parent; } @@ -136,7 +146,8 @@ static inline bool classof(const GlobalValue *) { return true; } static inline bool classof(const Value *V) { return V->getValueID() == Value::FunctionVal || - V->getValueID() == Value::GlobalVariableVal; + V->getValueID() == Value::GlobalVariableVal || + V->getValueID() == Value::GlobalAliasVal; } }; Index: llvm/include/llvm/GlobalVariable.h diff -u llvm/include/llvm/GlobalVariable.h:1.44 llvm/include/llvm/GlobalVariable.h:1.45 --- llvm/include/llvm/GlobalVariable.h:1.44 Tue Apr 17 13:30:41 2007 +++ llvm/include/llvm/GlobalVariable.h Wed Apr 25 09:27:10 2007 @@ -107,12 +107,12 @@ /// removeFromParent - This method unlinks 'this' from the containing module, /// but does not delete it. /// - void removeFromParent(); + virtual void removeFromParent(); /// eraseFromParent - This method unlinks 'this' from the containing module /// and deletes it. /// - void eraseFromParent(); + virtual void eraseFromParent(); /// Override Constant's implementation of this method so we can /// replace constant initializers. Index: llvm/include/llvm/Module.h diff -u llvm/include/llvm/Module.h:1.88 llvm/include/llvm/Module.h:1.89 --- llvm/include/llvm/Module.h:1.88 Tue Apr 17 00:33:04 2007 +++ llvm/include/llvm/Module.h Wed Apr 25 09:27:10 2007 @@ -16,12 +16,12 @@ #include "llvm/Function.h" #include "llvm/GlobalVariable.h" +#include "llvm/GlobalAlias.h" #include "llvm/Support/DataTypes.h" #include namespace llvm { -class GlobalVariable; class GlobalValueRefMap; // Used by ConstantVals.cpp class FunctionType; @@ -43,6 +43,15 @@ static inline ValueSymbolTable *getSymTab(Module *M); static int getListOffset(); }; +template<> struct ilist_traits + : public SymbolTableListTraits { + // createSentinel is used to create a node that marks the end of the list. + static GlobalAlias *createSentinel(); + static void destroySentinel(GlobalAlias *GA) { delete GA; } + static iplist &getList(Module *M); + static inline ValueSymbolTable *getSymTab(Module *M); + static int getListOffset(); +}; /// A Module instance is used to store all the information related to an /// LLVM module. Modules are the top level container of all other LLVM @@ -63,6 +72,8 @@ typedef iplist GlobalListType; /// The type for the list of functions. typedef iplist FunctionListType; + /// The type for the list of aliases. + typedef iplist AliasListType; /// The type for the list of dependent libraries. typedef std::vector LibraryListType; @@ -77,6 +88,11 @@ /// The Function constant iterator typedef FunctionListType::const_iterator const_iterator; + /// The Global Alias iterators. + typedef AliasListType::iterator alias_iterator; + /// The Global Alias constant iterator + typedef AliasListType::const_iterator const_alias_iterator; + /// The Library list iterator. typedef LibraryListType::const_iterator lib_iterator; @@ -92,6 +108,7 @@ private: GlobalListType GlobalList; ///< The Global Variables in the module FunctionListType FunctionList; ///< The Functions in the module + AliasListType AliasList; ///< The Aliases in the module LibraryListType LibraryList; ///< The Libraries needed by the module std::string GlobalScopeAsm; ///< Inline Asm at global scope. ValueSymbolTable *ValSymTab; ///< Symbol table for values @@ -175,10 +192,10 @@ /// getOrInsertFunction - Look up the specified function in the module symbol /// table. If it does not exist, add a prototype for the function and return /// it. This function guarantees to return a constant of pointer to the - /// specified function type or a ConstantExpr BitCast of that type if the - /// named /// function has a different type. This version of the method - /// takes a null terminated list of function arguments, which makes it - /// easier for clients to use. + /// specified function type or a ConstantExpr BitCast of that type if the + /// named function has a different type. This version of the method takes a + /// null terminated list of function arguments, which makes it easier for + /// clients to use. Constant *getOrInsertFunction(const std::string &Name, const Type *RetTy,...) END_WITH_NULL; @@ -205,6 +222,15 @@ GlobalVariable *getNamedGlobal(const std::string &Name) const { return getGlobalVariable(Name, true); } + +/// @} +/// @name Global Variable Accessors +/// @{ +public: + /// getNamedGlobal - Return the first global alias in the module with the + /// specified name, of arbitrary type. This method returns null if a global + /// with the specified name is not found. + GlobalAlias *getNamedAlias(const std::string &Name) const; /// @} /// @name Type Accessors @@ -235,14 +261,18 @@ const FunctionListType &getFunctionList() const { return FunctionList; } /// Get the Module's list of functions. FunctionListType &getFunctionList() { return FunctionList; } + /// Get the Module's list of aliases (constant). + const AliasListType &getAliasList() const { return AliasList; } + /// Get the Module's list of aliases. + AliasListType &getAliasList() { return AliasList; } /// Get the symbol table of global variable and function identifiers const ValueSymbolTable &getValueSymbolTable() const { return *ValSymTab; } /// Get the Module's symbol table of global variable and function identifiers. ValueSymbolTable &getValueSymbolTable() { return *ValSymTab; } /// Get the symbol table of types - const TypeSymbolTable &getTypeSymbolTable() const { return *TypeSymTab; } + const TypeSymbolTable &getTypeSymbolTable() const { return *TypeSymTab; } /// Get the Module's symbol table of types - TypeSymbolTable &getTypeSymbolTable() { return *TypeSymTab; } + TypeSymbolTable &getTypeSymbolTable() { return *TypeSymTab; } /// @} /// @name Global Variable Iteration @@ -272,7 +302,7 @@ /// Get a constant iterator to the last function. const_iterator end () const { return FunctionList.end(); } /// Determine how many functions are in the Module's list of functions. - size_t size() const { return FunctionList.size(); } + size_t size() const { return FunctionList.size(); } /// Determine if the list of functions is empty. bool empty() const { return FunctionList.empty(); } @@ -283,9 +313,9 @@ /// @brief Get a constant iterator to beginning of dependent library list. inline lib_iterator lib_begin() const { return LibraryList.begin(); } /// @brief Get a constant iterator to end of dependent library list. - inline lib_iterator lib_end() const { return LibraryList.end(); } + inline lib_iterator lib_end() const { return LibraryList.end(); } /// @brief Returns the number of items in the list of libraries. - inline size_t lib_size() const { return LibraryList.size(); } + inline size_t lib_size() const { return LibraryList.size(); } /// @brief Add a library to the list of dependent libraries void addLibrary(const std::string& Lib); /// @brief Remove a library from the list of dependent libraries @@ -294,6 +324,23 @@ inline const LibraryListType& getLibraries() const { return LibraryList; } /// @} +/// @name Alias Iteration +/// @{ +public: + /// Get an iterator to the first alias. + alias_iterator alias_begin() { return AliasList.begin(); } + /// Get a constant iterator to the first alias. + const_alias_iterator alias_begin() const { return AliasList.begin(); } + /// Get an iterator to the last alias. + alias_iterator alias_end () { return AliasList.end(); } + /// Get a constant iterator to the last alias. + const_alias_iterator alias_end () const { return AliasList.end(); } + /// Determine how many functions are in the Module's list of aliases. + size_t alias_size () const { return AliasList.size(); } + /// Determine if the list of aliases is empty. + bool alias_empty() const { return AliasList.empty(); } + +/// @} /// @name Utility functions for printing and dumping Module objects /// @{ public: @@ -324,6 +371,10 @@ Module *Obj = 0; return unsigned(reinterpret_cast(&Obj->GlobalList)); } + static unsigned getAliasListOffset() { + Module *Obj = 0; + return unsigned(reinterpret_cast(&Obj->AliasList)); + } }; /// An iostream inserter for modules. @@ -342,6 +393,11 @@ return M ? &M->getValueSymbolTable() : 0; } +inline ValueSymbolTable * +ilist_traits::getSymTab(Module *M) { + return M ? &M->getValueSymbolTable() : 0; +} + inline int ilist_traits::getListOffset() { return Module::getFunctionListOffset(); @@ -352,6 +408,11 @@ return Module::getGlobalVariableListOffset(); } +inline int +ilist_traits::getListOffset() { + return Module::getAliasListOffset(); +} + } // End llvm namespace #endif Index: llvm/include/llvm/Value.h diff -u llvm/include/llvm/Value.h:1.100 llvm/include/llvm/Value.h:1.101 --- llvm/include/llvm/Value.h:1.100 Fri Apr 13 13:12:09 2007 +++ llvm/include/llvm/Value.h Wed Apr 25 09:27:10 2007 @@ -30,6 +30,7 @@ class GlobalValue; class Function; class GlobalVariable; +class GlobalAlias; class InlineAsm; class ValueSymbolTable; class TypeSymbolTable; @@ -160,6 +161,7 @@ ArgumentVal, // This is an instance of Argument BasicBlockVal, // This is an instance of BasicBlock FunctionVal, // This is an instance of Function + GlobalAliasVal, // This is an instance of GlobalAlias GlobalVariableVal, // This is an instance of GlobalVariable UndefValueVal, // This is an instance of UndefValue ConstantExprVal, // This is an instance of ConstantExpr @@ -248,8 +250,11 @@ template <> inline bool isa_impl(const Value &Val) { return Val.getValueID() == Value::GlobalVariableVal; } +template <> inline bool isa_impl(const Value &Val) { + return Val.getValueID() == Value::GlobalAliasVal; +} template <> inline bool isa_impl(const Value &Val) { - return isa(Val) || isa(Val); + return isa(Val) || isa(Val) || isa(Val); } } // End llvm namespace Index: llvm/include/llvm/ValueSymbolTable.h diff -u llvm/include/llvm/ValueSymbolTable.h:1.12 llvm/include/llvm/ValueSymbolTable.h:1.13 --- llvm/include/llvm/ValueSymbolTable.h:1.12 Mon Apr 16 22:26:42 2007 +++ llvm/include/llvm/ValueSymbolTable.h Wed Apr 25 09:27:10 2007 @@ -35,6 +35,7 @@ friend class SymbolTableListTraits; friend class SymbolTableListTraits; friend class SymbolTableListTraits; + friend class SymbolTableListTraits; /// @name Types /// @{ public: From asl at math.spbu.ru Wed Apr 25 09:28:10 2007 From: asl at math.spbu.ru (Anton Korobeynikov) Date: Wed, 25 Apr 2007 09:28:10 -0500 Subject: [llvm-commits] CVS: llvm/lib/VMCore/AsmWriter.cpp Globals.cpp Module.cpp Verifier.cpp Message-ID: <200704251428.l3PESA1Z012589@zion.cs.uiuc.edu> Changes in directory llvm/lib/VMCore: AsmWriter.cpp updated: 1.274 -> 1.275 Globals.cpp updated: 1.19 -> 1.20 Module.cpp updated: 1.80 -> 1.81 Verifier.cpp updated: 1.205 -> 1.206 --- Log message: Implement aliases. This fixes PR1017: http://llvm.org/PR1017 and it's dependent bugs. CFE part will follow. --- Diffs of the changes: (+150 -11) AsmWriter.cpp | 74 ++++++++++++++++++++++++++++++++++++++++++++++++++-------- Globals.cpp | 45 ++++++++++++++++++++++++++++++++++- Module.cpp | 23 ++++++++++++++++++ Verifier.cpp | 19 ++++++++++++++ 4 files changed, 150 insertions(+), 11 deletions(-) Index: llvm/lib/VMCore/AsmWriter.cpp diff -u llvm/lib/VMCore/AsmWriter.cpp:1.274 llvm/lib/VMCore/AsmWriter.cpp:1.275 --- llvm/lib/VMCore/AsmWriter.cpp:1.274 Sun Apr 22 14:24:39 2007 +++ llvm/lib/VMCore/AsmWriter.cpp Wed Apr 25 09:27:10 2007 @@ -166,6 +166,8 @@ return new SlotMachine(BB->getParent()); } else if (const GlobalVariable *GV = dyn_cast(V)){ return new SlotMachine(GV->getParent()); + } else if (const GlobalAlias *GA = dyn_cast(V)){ + return new SlotMachine(GA->getParent()); } else if (const Function *Func = dyn_cast(V)) { return new SlotMachine(Func); } @@ -683,12 +685,13 @@ fillTypeNameTable(M, TypeNames); } - inline void write(const Module *M) { printModule(M); } - inline void write(const GlobalVariable *G) { printGlobal(G); } - inline void write(const Function *F) { printFunction(F); } - inline void write(const BasicBlock *BB) { printBasicBlock(BB); } + inline void write(const Module *M) { printModule(M); } + inline void write(const GlobalVariable *G) { printGlobal(G); } + inline void write(const GlobalAlias *G) { printAlias(G); } + inline void write(const Function *F) { printFunction(F); } + inline void write(const BasicBlock *BB) { printBasicBlock(BB); } inline void write(const Instruction *I) { printInstruction(*I); } - inline void write(const Type *Ty) { printType(Ty); } + inline void write(const Type *Ty) { printType(Ty); } void writeOperand(const Value *Op, bool PrintType); @@ -698,6 +701,7 @@ void printModule(const Module *M); void printTypeSymbolTable(const TypeSymbolTable &ST); void printGlobal(const GlobalVariable *GV); + void printAlias(const GlobalAlias *GV); void printFunction(const Function *F); void printArgument(const Argument *FA, uint16_t ParamAttrs); void printBasicBlock(const BasicBlock *BB); @@ -848,6 +852,11 @@ // Output all of the functions. for (Module::const_iterator I = M->begin(), E = M->end(); I != E; ++I) printFunction(I); + + // Output all aliases + for (Module::const_alias_iterator I = M->alias_begin(), E = M->alias_end(); + I != E; ++I) + printAlias(I); } void AssemblyWriter::printGlobal(const GlobalVariable *GV) { @@ -888,16 +897,55 @@ assert(C && "GlobalVar initializer isn't constant?"); writeOperand(GV->getInitializer(), false); } - + if (GV->hasSection()) Out << ", section \"" << GV->getSection() << '"'; if (GV->getAlignment()) Out << ", align " << GV->getAlignment(); - + printInfoComment(*GV); Out << "\n"; } +void AssemblyWriter::printAlias(const GlobalAlias *GA) { + Out << getLLVMName(GA->getName(), GlobalPrefix) << " = "; + switch (GA->getVisibility()) { + default: assert(0 && "Invalid visibility style!"); + case GlobalValue::DefaultVisibility: break; + case GlobalValue::HiddenVisibility: Out << "hidden "; break; + } + + Out << "alias "; + + switch (GA->getLinkage()) { + case GlobalValue::WeakLinkage: Out << "weak "; break; + case GlobalValue::InternalLinkage: Out << "internal "; break; + case GlobalValue::ExternalLinkage: break; + default: + assert(0 && "Invalid alias linkage"); + } + + const GlobalValue *Aliasee = GA->getAliasee(); + assert(Aliasee && "Aliasee cannot be null"); + + if (const GlobalVariable *GV = dyn_cast(Aliasee)) { + printType(GV->getType()); + Out << " " << getLLVMName(GV->getName(), GlobalPrefix); + } else if (const Function *F = dyn_cast(Aliasee)) { + printType(F->getFunctionType()); + Out << "* "; + + if (!F->getName().empty()) + Out << getLLVMName(F->getName(), GlobalPrefix); + else + Out << "@\"\""; + } else + assert(0 && "Unsupported aliasee"); + + printInfoComment(*GA); + Out << "\n"; +} + void AssemblyWriter::printTypeSymbolTable(const TypeSymbolTable &ST) { // Print the types. for (TypeSymbolTable::const_iterator TI = ST.begin(), TE = ST.end(); @@ -1336,6 +1384,12 @@ W.write(this); } +void GlobalAlias::print(std::ostream &o) const { + SlotMachine SlotTable(getParent()); + AssemblyWriter W(o, SlotTable, getParent(), 0); + W.write(this); +} + void Function::print(std::ostream &o, AssemblyAnnotationWriter *AAW) const { SlotMachine SlotTable(getParent()); AssemblyWriter W(o, SlotTable, getParent(), AAW); @@ -1538,8 +1592,10 @@ SC_DEBUG(" Inserting value [" << V->getType() << "] = " << V << " slot=" << DestSlot << " ["); - // G = Global, F = Function, o = other - SC_DEBUG((isa(V) ? 'G' : 'F') << "]\n"); + // G = Global, F = Function, A = Alias, o = other + SC_DEBUG((isa(V) ? 'G' : + (isa ? 'F' : + (isa ? 'A' : 'o'))) << "]\n"); } Index: llvm/lib/VMCore/Globals.cpp diff -u llvm/lib/VMCore/Globals.cpp:1.19 llvm/lib/VMCore/Globals.cpp:1.20 --- llvm/lib/VMCore/Globals.cpp:1.19 Thu Apr 12 13:32:50 2007 +++ llvm/lib/VMCore/Globals.cpp Wed Apr 25 09:27:10 2007 @@ -13,6 +13,7 @@ //===----------------------------------------------------------------------===// #include "llvm/GlobalVariable.h" +#include "llvm/GlobalAlias.h" #include "llvm/DerivedTypes.h" #include "llvm/Module.h" #include "llvm/Support/LeakDetector.h" @@ -76,6 +77,7 @@ assert(0 && "You can't GV->destroyConstant()!"); abort(); } + //===----------------------------------------------------------------------===// // GlobalVariable Implementation //===----------------------------------------------------------------------===// @@ -120,7 +122,6 @@ Before->getParent()->getGlobalList().insert(Before, this); } - void GlobalVariable::setParent(Module *parent) { if (getParent()) LeakDetector::addGarbageObject(this); @@ -156,3 +157,45 @@ // Okay, preconditions out of the way, replace the constant initializer. this->setOperand(0, cast(To)); } + +//===----------------------------------------------------------------------===// +// GlobalAlias Implementation +//===----------------------------------------------------------------------===// + +GlobalAlias::GlobalAlias(const Type *Ty, LinkageTypes Link, + const std::string &Name, const GlobalValue* aliasee, + Module *ParentModule) + : GlobalValue(Ty, Value::GlobalAliasVal, 0, 0, + Link, Name), Aliasee(aliasee) { + LeakDetector::addGarbageObject(this); + + if (ParentModule) + ParentModule->getAliasList().push_back(this); +} + +void GlobalAlias::setParent(Module *parent) { + if (getParent()) + LeakDetector::addGarbageObject(this); + Parent = parent; + if (getParent()) + LeakDetector::removeGarbageObject(this); +} + +void GlobalAlias::removeFromParent() { + getParent()->getAliasList().remove(this); +} + +void GlobalAlias::eraseFromParent() { + getParent()->getAliasList().erase(this); +} + +bool GlobalAlias::isDeclaration() const { + return (Aliasee && Aliasee->isDeclaration()); +} + +void GlobalAlias::setAliasee(const GlobalValue *GV) +{ + // FIXME: Some checks? + Aliasee = GV; +} + Index: llvm/lib/VMCore/Module.cpp diff -u llvm/lib/VMCore/Module.cpp:1.80 llvm/lib/VMCore/Module.cpp:1.81 --- llvm/lib/VMCore/Module.cpp:1.80 Mon Apr 16 23:04:14 2007 +++ llvm/lib/VMCore/Module.cpp Wed Apr 25 09:27:10 2007 @@ -45,6 +45,12 @@ LeakDetector::removeGarbageObject(Ret); return Ret; } +GlobalAlias *ilist_traits::createSentinel() { + GlobalAlias *Ret = new GlobalAlias(Type::Int32Ty, GlobalValue::ExternalLinkage); + // This should not be garbage monitored. + LeakDetector::removeGarbageObject(Ret); + return Ret; +} iplist &ilist_traits::getList(Module *M) { return M->getFunctionList(); @@ -52,11 +58,15 @@ iplist &ilist_traits::getList(Module *M) { return M->getGlobalList(); } +iplist &ilist_traits::getList(Module *M) { + return M->getAliasList(); +} // Explicit instantiations of SymbolTableListTraits since some of the methods // are not in the public header file. template class SymbolTableListTraits; template class SymbolTableListTraits; +template class SymbolTableListTraits; //===----------------------------------------------------------------------===// // Primitive Module methods. @@ -72,6 +82,7 @@ dropAllReferences(); GlobalList.clear(); FunctionList.clear(); + AliasList.clear(); LibraryList.clear(); delete ValSymTab; delete TypeSymTab; @@ -212,6 +223,18 @@ } //===----------------------------------------------------------------------===// +// Methods for easy access to the global variables in the module. +// + +// getNamedAlias - Look up the specified global in the module symbol table. +// If it does not exist, return null. +// +GlobalAlias *Module::getNamedAlias(const std::string &Name) const { + const ValueSymbolTable &SymTab = getValueSymbolTable(); + return dyn_cast_or_null(SymTab.lookup(Name)); +} + +//===----------------------------------------------------------------------===// // Methods for easy access to the types in the module. // Index: llvm/lib/VMCore/Verifier.cpp diff -u llvm/lib/VMCore/Verifier.cpp:1.205 llvm/lib/VMCore/Verifier.cpp:1.206 --- llvm/lib/VMCore/Verifier.cpp:1.205 Fri Apr 20 18:59:29 2007 +++ llvm/lib/VMCore/Verifier.cpp Wed Apr 25 09:27:10 2007 @@ -141,6 +141,10 @@ I != E; ++I) visitGlobalVariable(*I); + for (Module::alias_iterator I = M.alias_begin(), E = M.alias_end(); + I != E; ++I) + visitGlobalAlias(*I); + // If the module is broken, abort at this time. return abortIfBroken(); } @@ -179,6 +183,7 @@ void verifyTypeSymbolTable(TypeSymbolTable &ST); void visitGlobalValue(GlobalValue &GV); void visitGlobalVariable(GlobalVariable &GV); + void visitGlobalAlias(GlobalAlias &GA); void visitFunction(Function &F); void visitBasicBlock(BasicBlock &BB); void visitTruncInst(TruncInst &I); @@ -277,7 +282,9 @@ Assert1(!GV.isDeclaration() || GV.hasExternalLinkage() || GV.hasDLLImportLinkage() || - GV.hasExternalWeakLinkage(), + GV.hasExternalWeakLinkage() || + (isa(GV) && + (GV.hasInternalLinkage() || GV.hasWeakLinkage())), "Global is external, but doesn't have external or dllimport or weak linkage!", &GV); @@ -303,6 +310,16 @@ visitGlobalValue(GV); } +void Verifier::visitGlobalAlias(GlobalAlias &GA) { + Assert1(!GA.getName().empty(), + "Alias name cannot be empty!", &GA); + Assert1(GA.hasExternalLinkage() || GA.hasInternalLinkage() || + GA.hasWeakLinkage(), + "Alias should have external or external weak linkage!", &GA); + + visitGlobalValue(GA); +} + void Verifier::verifyTypeSymbolTable(TypeSymbolTable &ST) { } From asl at math.spbu.ru Wed Apr 25 09:28:11 2007 From: asl at math.spbu.ru (Anton Korobeynikov) Date: Wed, 25 Apr 2007 09:28:11 -0500 Subject: [llvm-commits] CVS: llvm/lib/Bytecode/Writer/Writer.cpp Message-ID: <200704251428.l3PESBHi012598@zion.cs.uiuc.edu> Changes in directory llvm/lib/Bytecode/Writer: Writer.cpp updated: 1.176 -> 1.177 --- Log message: Implement aliases. This fixes PR1017: http://llvm.org/PR1017 and it's dependent bugs. CFE part will follow. --- Diffs of the changes: (+26 -1) Writer.cpp | 27 ++++++++++++++++++++++++++- 1 files changed, 26 insertions(+), 1 deletion(-) Index: llvm/lib/Bytecode/Writer/Writer.cpp diff -u llvm/lib/Bytecode/Writer/Writer.cpp:1.176 llvm/lib/Bytecode/Writer/Writer.cpp:1.177 --- llvm/lib/Bytecode/Writer/Writer.cpp:1.176 Sun Apr 22 14:24:39 2007 +++ llvm/lib/Bytecode/Writer/Writer.cpp Wed Apr 25 09:27:10 2007 @@ -1088,9 +1088,34 @@ output_vbr((unsigned)SectionNames.size()); for (unsigned i = 0, e = SectionNames.size(); i != e; ++i) output(SectionNames[i]); - + // Output the inline asm string. output(M->getModuleInlineAsm()); + + // Output aliases + for (Module::const_alias_iterator I = M->alias_begin(), E = M->alias_end(); + I != E; ++I) { + unsigned Slot = Table.getTypeSlot(I->getType()); + assert(((Slot << 2) >> 2) == Slot && "Slot # too big!"); + unsigned aliasLinkage = 0; + switch (I->getLinkage()) { + case GlobalValue::ExternalLinkage: + aliasLinkage = 0; + break; + case GlobalValue::InternalLinkage: + aliasLinkage = 1; + break; + case GlobalValue::WeakLinkage: + aliasLinkage = 2; + break; + default: + assert(0 && "Invalid alias linkage"); + } + output_vbr((Slot << 2) | aliasLinkage); + output_vbr(Table.getTypeSlot(I->getAliasee()->getType())); + output_vbr(Table.getSlot(I->getAliasee())); + } + output_typeid(Table.getTypeSlot(Type::VoidTy)); } void BytecodeWriter::outputInstructions(const Function *F) { From asl at math.spbu.ru Wed Apr 25 09:28:11 2007 From: asl at math.spbu.ru (Anton Korobeynikov) Date: Wed, 25 Apr 2007 09:28:11 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/X86/X86TargetAsmInfo.cpp Message-ID: <200704251428.l3PESBO4012601@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/X86: X86TargetAsmInfo.cpp updated: 1.35 -> 1.36 --- Log message: Implement aliases. This fixes PR1017: http://llvm.org/PR1017 and it's dependent bugs. CFE part will follow. --- Diffs of the changes: (+2 -0) X86TargetAsmInfo.cpp | 2 ++ 1 files changed, 2 insertions(+) Index: llvm/lib/Target/X86/X86TargetAsmInfo.cpp diff -u llvm/lib/Target/X86/X86TargetAsmInfo.cpp:1.35 llvm/lib/Target/X86/X86TargetAsmInfo.cpp:1.36 --- llvm/lib/Target/X86/X86TargetAsmInfo.cpp:1.35 Sun Apr 1 15:49:36 2007 +++ llvm/lib/Target/X86/X86TargetAsmInfo.cpp Wed Apr 25 09:27:10 2007 @@ -108,6 +108,7 @@ ReadOnlySection = "\t.section\t.rodata\n"; PrivateGlobalPrefix = ".L"; WeakRefDirective = "\t.weak\t"; + SetDirective = "\t.set\t"; DwarfRequiresFrameSection = false; DwarfAbbrevSection = "\t.section\t.debug_abbrev,\"\", at progbits"; DwarfInfoSection = "\t.section\t.debug_info,\"\", at progbits"; @@ -137,6 +138,7 @@ AbsoluteSectionOffsets = true; PrivateGlobalPrefix = "L"; // Prefix for private global symbols WeakRefDirective = "\t.weak\t"; + SetDirective = "\t.set\t"; DwarfRequiresFrameSection = false; DwarfSectionOffsetDirective = "\t.secrel32\t"; DwarfAbbrevSection = "\t.section\t.debug_abbrev,\"dr\""; From asl at math.spbu.ru Wed Apr 25 09:28:12 2007 From: asl at math.spbu.ru (Anton Korobeynikov) Date: Wed, 25 Apr 2007 09:28:12 -0500 Subject: [llvm-commits] CVS: llvm/lib/Bytecode/Reader/Reader.cpp Message-ID: <200704251428.l3PESCMf012609@zion.cs.uiuc.edu> Changes in directory llvm/lib/Bytecode/Reader: Reader.cpp updated: 1.254 -> 1.255 --- Log message: Implement aliases. This fixes PR1017: http://llvm.org/PR1017 and it's dependent bugs. CFE part will follow. --- Diffs of the changes: (+49 -2) Reader.cpp | 51 +++++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 49 insertions(+), 2 deletions(-) Index: llvm/lib/Bytecode/Reader/Reader.cpp diff -u llvm/lib/Bytecode/Reader/Reader.cpp:1.254 llvm/lib/Bytecode/Reader/Reader.cpp:1.255 --- llvm/lib/Bytecode/Reader/Reader.cpp:1.254 Tue Apr 24 12:20:52 2007 +++ llvm/lib/Bytecode/Reader/Reader.cpp Wed Apr 25 09:27:10 2007 @@ -348,7 +348,7 @@ /// with this method. The ValueTable argument must be one of ModuleValues /// or FunctionValues data members of this class. unsigned BytecodeReader::insertValue(Value *Val, unsigned type, - ValueTable &ValueTab) { + ValueTable &ValueTab) { if (ValueTab.size() <= type) ValueTab.resize(type+1); @@ -1855,7 +1855,7 @@ case 1: Func->setLinkage(Function::DLLImportLinkage); break; case 2: Func->setLinkage(Function::ExternalWeakLinkage); break; default: assert(0 && "Unsupported external linkage"); - } + } } Func->setCallingConv(CC-1); @@ -1919,6 +1919,53 @@ I->first->setSection(SectionNames[I->second-1]); } + if (At != BlockEnd) { + // Read aliases... + unsigned VarType = read_vbr_uint(); + while (VarType != Type::VoidTyID) { // List is terminated by Void + unsigned TypeSlotNo = VarType >> 2; + unsigned EncodedLinkage = VarType & 3; + unsigned AliaseeTypeSlotNo, AliaseeSlotNo; + + AliaseeTypeSlotNo = read_vbr_uint(); + AliaseeSlotNo = read_vbr_uint(); + + const Type *Ty = getType(TypeSlotNo); + if (!Ty) + error("Alias has no type! SlotNo=" + utostr(TypeSlotNo)); + + if (!isa(Ty)) + error("Alias not a pointer type! Ty= " + Ty->getDescription()); + + Value* V = getValue(AliaseeTypeSlotNo, AliaseeSlotNo, false); + if (!V) + error("Invalid aliasee! TypeSlotNo=" + utostr(AliaseeTypeSlotNo) + + " SlotNo=" + utostr(AliaseeSlotNo)); + if (!isa(V)) + error("Aliasee is not global value! SlotNo=" + utostr(AliaseeSlotNo)); + + GlobalValue::LinkageTypes Linkage; + switch (EncodedLinkage) { + case 0: + Linkage = GlobalValue::ExternalLinkage; + break; + case 1: + Linkage = GlobalValue::InternalLinkage; + break; + case 2: + Linkage = GlobalValue::WeakLinkage; + break; + default: + assert(0 && "Unsupported encoded alias linkage"); + } + + GlobalAlias *GA = new GlobalAlias(Ty, Linkage, "", + dyn_cast(V), TheModule); + insertValue(GA, TypeSlotNo, ModuleValues); + VarType = read_vbr_uint(); + } + } + // This is for future proofing... in the future extra fields may be added that // we don't understand, so we transparently ignore them. // From lauro.venancio at gmail.com Wed Apr 25 09:28:29 2007 From: lauro.venancio at gmail.com (Lauro Ramos Venancio) Date: Wed, 25 Apr 2007 09:28:29 -0500 Subject: [llvm-commits] CVS: llvm-test/SingleSource/UnitTests/2007-04-25-weak.c Message-ID: <200704251428.l3PESTno012622@zion.cs.uiuc.edu> Changes in directory llvm-test/SingleSource/UnitTests: 2007-04-25-weak.c added (r1.1) --- Log message: Add a failing weak test. --- Diffs of the changes: (+8 -0) 2007-04-25-weak.c | 8 ++++++++ 1 files changed, 8 insertions(+) Index: llvm-test/SingleSource/UnitTests/2007-04-25-weak.c diff -c /dev/null llvm-test/SingleSource/UnitTests/2007-04-25-weak.c:1.1 *** /dev/null Wed Apr 25 09:28:20 2007 --- llvm-test/SingleSource/UnitTests/2007-04-25-weak.c Wed Apr 25 09:28:10 2007 *************** *** 0 **** --- 1,8 ---- + extern int test_weak () __attribute__ ((weak)); + + int main(){ + int (*t)() = test_weak; + if (t) + return t(); + else return 250; + } From asl at math.spbu.ru Wed Apr 25 09:29:30 2007 From: asl at math.spbu.ru (Anton Korobeynikov) Date: Wed, 25 Apr 2007 09:29:30 -0500 Subject: [llvm-commits] CVS: llvm/lib/AsmParser/Lexer.cpp.cvs Lexer.l.cvs llvmAsmParser.cpp.cvs llvmAsmParser.h.cvs llvmAsmParser.y.cvs Message-ID: <200704251429.l3PETUbu012669@zion.cs.uiuc.edu> Changes in directory llvm/lib/AsmParser: Lexer.cpp.cvs updated: 1.39 -> 1.40 Lexer.l.cvs updated: 1.32 -> 1.33 llvmAsmParser.cpp.cvs updated: 1.91 -> 1.92 llvmAsmParser.h.cvs updated: 1.69 -> 1.70 llvmAsmParser.y.cvs updated: 1.92 -> 1.93 --- Log message: Regenerate --- Diffs of the changes: (+5275 -3897) Lexer.cpp.cvs | 1240 ++++---- Lexer.l.cvs | 1 llvmAsmParser.cpp.cvs | 7379 ++++++++++++++++++++++++++++---------------------- llvmAsmParser.h.cvs | 462 ++- llvmAsmParser.y.cvs | 62 5 files changed, 5275 insertions(+), 3869 deletions(-) Index: llvm/lib/AsmParser/Lexer.cpp.cvs diff -u llvm/lib/AsmParser/Lexer.cpp.cvs:1.39 llvm/lib/AsmParser/Lexer.cpp.cvs:1.40 --- llvm/lib/AsmParser/Lexer.cpp.cvs:1.39 Thu Apr 12 13:32:50 2007 +++ llvm/lib/AsmParser/Lexer.cpp.cvs Wed Apr 25 09:29:12 2007 @@ -349,7 +349,7 @@ /* Begin user sect3 */ -#define llvmAsmwrap() 1 +#define llvmAsmwrap(n) 1 #define YY_SKIP_YYWRAP typedef unsigned char YY_CHAR; @@ -380,8 +380,8 @@ *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; -#define YY_NUM_RULES 136 -#define YY_END_OF_BUFFER 137 +#define YY_NUM_RULES 137 +#define YY_END_OF_BUFFER 138 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -389,68 +389,69 @@ flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static yyconst flex_int16_t yy_accept[550] = +static yyconst flex_int16_t yy_accept[552] = { 0, - 0, 0, 137, 135, 134, 134, 135, 135, 135, 135, - 135, 135, 127, 127, 1, 135, 135, 135, 135, 135, - 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, - 135, 135, 135, 135, 135, 135, 135, 135, 0, 125, - 0, 123, 121, 130, 0, 128, 0, 132, 127, 0, - 1, 0, 122, 131, 0, 0, 0, 0, 0, 0, - 0, 107, 0, 36, 0, 0, 0, 0, 0, 0, - 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 71, 0, 0, 0, 0, 0, 0, 0, 66, + 0, 0, 138, 136, 135, 135, 136, 136, 136, 136, + 136, 136, 128, 128, 1, 136, 136, 136, 136, 136, + 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, + 136, 136, 136, 136, 136, 136, 136, 136, 0, 126, + 0, 124, 122, 131, 0, 129, 0, 133, 128, 0, + 1, 0, 123, 132, 0, 0, 0, 0, 0, 0, + 0, 108, 0, 37, 0, 0, 0, 0, 0, 0, + 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 72, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 125, 121, 132, 21, 132, 0, 133, 0, - 126, 122, 53, 0, 0, 65, 0, 0, 34, 0, - 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 126, 122, 133, 21, 133, 0, 134, 0, + 127, 123, 54, 0, 0, 66, 0, 0, 35, 0, + 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 55, 0, 0, 0, 80, - 85, 83, 84, 82, 81, 0, 86, 90, 0, 106, + 0, 0, 0, 0, 0, 56, 0, 0, 0, 81, + 86, 84, 85, 83, 82, 0, 87, 91, 0, 107, - 0, 0, 0, 0, 0, 75, 73, 62, 0, 0, - 0, 74, 72, 0, 0, 54, 0, 0, 0, 0, - 0, 0, 0, 0, 88, 79, 77, 0, 78, 76, - 0, 89, 87, 0, 0, 0, 0, 0, 0, 0, - 0, 67, 0, 0, 124, 132, 0, 0, 0, 132, - 0, 0, 0, 64, 0, 0, 91, 0, 0, 0, + 0, 0, 0, 0, 0, 76, 74, 63, 0, 0, + 0, 75, 73, 0, 0, 55, 0, 0, 0, 0, + 0, 0, 0, 0, 89, 80, 78, 0, 79, 77, + 0, 90, 88, 0, 0, 0, 0, 0, 0, 0, + 0, 68, 0, 0, 125, 133, 0, 0, 0, 133, + 0, 0, 0, 0, 65, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 69, 58, 0, 0, 0, 0, 114, 61, 0, 0, - 0, 68, 0, 0, 0, 0, 0, 0, 0, 115, - 63, 0, 0, 0, 0, 23, 0, 0, 129, 57, - - 0, 0, 94, 0, 0, 0, 60, 43, 0, 0, - 25, 0, 0, 0, 4, 0, 50, 56, 0, 0, - 0, 0, 59, 0, 46, 0, 12, 0, 0, 93, - 132, 31, 0, 0, 2, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 5, 0, 47, - 96, 0, 0, 0, 0, 0, 0, 42, 0, 0, - 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 116, 0, 0, 0, 0, - 92, 0, 22, 0, 0, 0, 0, 0, 0, 0, - 113, 0, 0, 39, 0, 0, 0, 7, 0, 0, - - 0, 48, 0, 0, 38, 100, 99, 0, 0, 8, - 16, 0, 0, 0, 109, 0, 112, 33, 0, 0, - 51, 0, 0, 104, 0, 0, 98, 108, 26, 0, - 27, 97, 0, 110, 105, 0, 0, 0, 0, 0, - 103, 0, 0, 6, 28, 0, 0, 0, 0, 0, - 95, 0, 0, 0, 0, 0, 0, 0, 0, 32, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, - 0, 0, 0, 0, 18, 0, 0, 0, 10, 101, - 11, 45, 44, 102, 0, 0, 0, 0, 30, 0, - 0, 0, 13, 0, 15, 14, 0, 0, 0, 0, - - 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, - 0, 0, 0, 35, 0, 0, 0, 0, 0, 17, - 0, 0, 0, 0, 0, 111, 0, 0, 0, 0, - 0, 0, 0, 19, 0, 0, 0, 0, 117, 119, - 120, 0, 40, 0, 118, 41, 0, 20, 0 + 0, 70, 59, 0, 0, 0, 0, 115, 62, 0, + 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, + 116, 64, 0, 0, 0, 0, 23, 0, 0, 130, + + 58, 0, 0, 95, 0, 0, 0, 61, 44, 0, + 0, 25, 0, 0, 0, 4, 0, 51, 57, 0, + 0, 0, 0, 60, 0, 47, 0, 12, 0, 0, + 94, 133, 33, 31, 0, 0, 2, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, + 0, 48, 97, 0, 0, 0, 0, 0, 0, 43, + 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 117, 0, 0, + 0, 0, 93, 0, 22, 0, 0, 0, 0, 0, + 0, 0, 114, 0, 0, 40, 0, 0, 0, 7, + + 0, 0, 0, 49, 0, 0, 39, 101, 100, 0, + 0, 8, 16, 0, 0, 0, 110, 0, 113, 34, + 0, 0, 52, 0, 0, 105, 0, 0, 99, 109, + 26, 0, 27, 98, 0, 111, 106, 0, 0, 0, + 0, 0, 104, 0, 0, 6, 28, 0, 0, 0, + 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, + 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 9, 0, 0, 0, 0, 18, 0, 0, 0, + 10, 102, 11, 46, 45, 103, 0, 0, 0, 0, + 30, 0, 0, 0, 13, 0, 15, 14, 0, 0, + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, + 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, + 0, 17, 0, 0, 0, 0, 0, 112, 0, 0, + 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, + 118, 120, 121, 0, 41, 0, 119, 42, 0, 20, + 0 } ; static yyconst flex_int32_t yy_ec[256] = @@ -494,137 +495,137 @@ 4, 4, 4, 4 } ; -static yyconst flex_int16_t yy_base[558] = +static yyconst flex_int16_t yy_base[560] = { 0, - 0, 0, 1197, 1198, 1198, 1198, 1192, 1181, 35, 39, + 0, 0, 1201, 1202, 1202, 1202, 1196, 1185, 35, 39, 43, 49, 55, 61, 0, 72, 64, 67, 66, 86, 76, 106, 91, 65, 133, 121, 117, 99, 152, 95, - 78, 179, 137, 211, 139, 90, 148, 93, 1190, 1198, - 1179, 1198, 0, 49, 185, 217, 116, 238, 254, 259, - 0, 1188, 0, 200, 125, 149, 146, 153, 177, 63, - 154, 1177, 160, 161, 208, 185, 264, 171, 113, 210, - 1176, 222, 260, 228, 186, 261, 271, 110, 273, 274, + 78, 179, 137, 211, 139, 90, 148, 93, 1194, 1202, + 1183, 1202, 0, 49, 185, 217, 116, 238, 254, 259, + 0, 1192, 0, 200, 125, 149, 146, 153, 177, 63, + 154, 1181, 160, 161, 208, 185, 264, 171, 113, 210, + 1180, 222, 260, 228, 186, 261, 271, 110, 273, 274, 230, 289, 277, 278, 240, 290, 292, 205, 291, 232, - 296, 1175, 299, 303, 305, 306, 310, 313, 309, 318, + 296, 1179, 299, 303, 305, 306, 310, 313, 309, 318, 311, 314, 317, 322, 328, 329, 338, 331, 335, 339, - 333, 332, 346, 340, 352, 355, 1174, 358, 360, 361, + 333, 332, 346, 340, 352, 355, 1178, 358, 360, 361, 364, 368, 365, 369, 381, 376, 382, 388, 367, 396, - 384, 395, 1173, 0, 414, 1172, 429, 447, 0, 1181, - 1198, 0, 1170, 231, 397, 1169, 399, 398, 1168, 401, - 414, 405, 1167, 442, 407, 431, 419, 434, 436, 449, - 450, 1166, 454, 432, 438, 453, 456, 460, 458, 461, - 467, 465, 471, 470, 468, 481, 485, 487, 474, 489, - 490, 492, 472, 496, 498, 1165, 500, 502, 503, 1164, - 1163, 1162, 1161, 1160, 1159, 504, 1158, 1157, 506, 1156, - - 535, 509, 513, 507, 516, 1155, 1154, 1153, 515, 508, - 528, 1152, 1151, 536, 527, 1150, 524, 550, 551, 552, - 554, 555, 557, 556, 1149, 1148, 1147, 558, 1146, 1145, - 559, 1144, 1143, 561, 564, 568, 570, 572, 580, 514, - 579, 1142, 575, 583, 1198, 591, 606, 612, 616, 621, - 606, 622, 623, 1141, 625, 591, 1140, 626, 627, 628, - 592, 629, 631, 632, 633, 636, 635, 640, 638, 653, - 1139, 1138, 639, 642, 649, 637, 1137, 1136, 654, 658, - 655, 1135, 656, 659, 667, 669, 671, 675, 673, 1134, - 1133, 676, 677, 678, 679, 1132, 680, 682, 0, 1131, - - 683, 690, 1130, 685, 684, 699, 1129, 1128, 703, 700, - 1127, 704, 709, 707, 1126, 711, 1125, 1124, 716, 717, - 712, 720, 1123, 721, 1122, 722, 1121, 724, 725, 1120, - 733, 1119, 734, 733, 1118, 726, 736, 745, 748, 737, - 750, 755, 741, 752, 753, 756, 757, 1117, 758, 1116, - 1115, 764, 767, 768, 769, 771, 770, 1114, 773, 775, - 776, 780, 1113, 777, 783, 782, 784, 785, 794, 789, - 798, 800, 802, 801, 805, 1112, 806, 807, 811, 813, - 1111, 808, 1110, 814, 821, 815, 826, 810, 829, 832, - 1109, 833, 834, 1108, 836, 835, 838, 1107, 837, 842, - - 843, 1106, 839, 841, 1105, 1104, 1103, 849, 846, 1102, - 1101, 856, 867, 851, 1100, 868, 1099, 1098, 852, 859, - 1097, 869, 870, 1096, 871, 872, 1095, 1094, 1093, 879, - 1092, 1091, 878, 1090, 1089, 880, 882, 885, 886, 889, - 1088, 890, 892, 1087, 1076, 893, 895, 897, 902, 898, - 1066, 899, 903, 904, 901, 906, 910, 912, 913, 1065, - 922, 925, 926, 927, 929, 930, 932, 931, 934, 1064, - 936, 938, 941, 943, 1061, 944, 945, 947, 1060, 1059, - 1058, 1057, 1056, 1055, 949, 950, 951, 964, 1054, 966, - 967, 968, 1048, 952, 1047, 1046, 969, 977, 956, 972, - - 978, 979, 983, 981, 984, 985, 988, 855, 992, 993, - 995, 996, 998, 687, 999, 1002, 1000, 1004, 1008, 596, - 1009, 1011, 1013, 1014, 1018, 593, 1021, 1017, 1026, 1023, - 1027, 1028, 1029, 522, 1030, 1036, 1032, 1039, 521, 469, - 371, 1042, 370, 1043, 282, 279, 1045, 244, 1198, 1081, - 1083, 212, 1088, 1091, 167, 1095, 108 + 384, 395, 1177, 0, 414, 1176, 429, 447, 0, 1185, + 1202, 0, 1174, 409, 397, 1173, 420, 414, 1172, 405, + 399, 422, 1171, 442, 431, 449, 432, 450, 437, 452, + 456, 1170, 457, 435, 459, 460, 461, 465, 370, 469, + 468, 472, 470, 475, 473, 476, 489, 490, 492, 494, + 481, 497, 495, 502, 498, 1169, 503, 501, 505, 1168, + 1167, 1166, 1165, 1164, 1163, 507, 1162, 1161, 508, 1160, + + 537, 512, 515, 510, 525, 1159, 1158, 1157, 516, 542, + 531, 1156, 1155, 537, 529, 1154, 553, 555, 231, 556, + 558, 557, 559, 560, 1153, 1152, 1151, 562, 1150, 1149, + 563, 1148, 1147, 564, 565, 509, 524, 576, 582, 568, + 584, 1146, 572, 570, 1202, 599, 608, 614, 618, 623, + 608, 624, 592, 625, 1145, 626, 587, 1144, 627, 628, + 629, 630, 632, 633, 634, 637, 639, 638, 640, 580, + 641, 1143, 1142, 648, 651, 653, 656, 1141, 1140, 657, + 658, 659, 1139, 665, 661, 663, 667, 674, 666, 668, + 1138, 1137, 671, 679, 670, 680, 1136, 684, 691, 0, + + 1135, 688, 692, 1134, 693, 696, 697, 1133, 1132, 701, + 705, 1131, 712, 714, 699, 1130, 716, 1129, 1128, 717, + 718, 719, 703, 1127, 723, 1126, 726, 1125, 730, 732, + 1124, 737, 1123, 1122, 731, 738, 1121, 739, 740, 743, + 751, 742, 744, 752, 755, 756, 758, 760, 761, 1120, + 763, 1119, 1118, 765, 766, 767, 772, 770, 773, 1117, + 774, 777, 781, 783, 1116, 784, 788, 787, 789, 790, + 799, 792, 794, 800, 803, 805, 807, 1115, 808, 810, + 811, 812, 1114, 815, 1113, 817, 823, 818, 826, 831, + 828, 829, 1112, 836, 833, 1111, 838, 698, 839, 1110, + + 841, 842, 843, 1109, 848, 844, 1108, 1107, 1106, 851, + 846, 1105, 1104, 845, 860, 858, 1103, 865, 1102, 1101, + 867, 869, 1100, 870, 872, 1099, 871, 874, 1098, 1097, + 1096, 875, 1095, 1094, 878, 1093, 1092, 876, 877, 884, + 883, 886, 1091, 879, 894, 1090, 1089, 895, 896, 898, + 899, 901, 1088, 902, 905, 906, 907, 909, 908, 914, + 910, 1087, 916, 920, 924, 927, 928, 931, 935, 932, + 936, 1086, 937, 939, 941, 944, 1085, 945, 946, 947, + 1074, 1064, 1063, 1062, 1061, 1060, 949, 950, 951, 953, + 1059, 966, 967, 968, 1058, 952, 1057, 1056, 969, 971, + + 972, 977, 978, 979, 980, 983, 984, 985, 987, 1055, + 989, 991, 992, 995, 997, 1053, 1000, 1007, 998, 1002, + 1009, 1049, 1010, 1011, 1013, 1015, 1016, 1046, 1022, 1019, + 1023, 1024, 1026, 1028, 1029, 1045, 1033, 1036, 371, 1030, + 599, 522, 474, 1039, 434, 1040, 282, 279, 1043, 244, + 1202, 1079, 1081, 212, 1086, 1089, 167, 1093, 108 } ; -static yyconst flex_int16_t yy_def[558] = +static yyconst flex_int16_t yy_def[560] = { 0, - 549, 1, 549, 549, 549, 549, 550, 551, 552, 549, - 551, 551, 551, 551, 553, 554, 551, 551, 551, 551, - 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, - 551, 551, 551, 551, 551, 551, 551, 551, 550, 549, - 551, 549, 555, 549, 549, 551, 551, 551, 551, 551, - 553, 556, 557, 549, 551, 551, 551, 551, 551, 551, - 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, - 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, - 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, - 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, - - 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, - 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, - 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, - 551, 551, 549, 555, 549, 551, 551, 551, 50, 556, - 549, 557, 551, 551, 551, 551, 551, 551, 551, 551, - 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, - 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, - 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, - 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, - 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, - - 50, 551, 551, 551, 551, 551, 551, 551, 551, 551, - 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, - 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, - 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, - 551, 551, 551, 551, 549, 549, 549, 549, 551, 551, - 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, - 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, - 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, - 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, - 551, 551, 551, 551, 551, 551, 551, 551, 201, 551, - - 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, - 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, - 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, - 549, 551, 551, 551, 551, 551, 551, 551, 551, 551, - 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, - 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, - 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, - 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, - 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, - 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, - - 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, - 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, - 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, - 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, - 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, - 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, - 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, - 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, - 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, - 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, - - 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, - 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, - 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, - 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, - 551, 551, 551, 551, 551, 551, 551, 551, 0, 549, - 549, 549, 549, 549, 549, 549, 549 + 551, 1, 551, 551, 551, 551, 552, 553, 554, 551, + 553, 553, 553, 553, 555, 556, 553, 553, 553, 553, + 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, + 553, 553, 553, 553, 553, 553, 553, 553, 552, 551, + 553, 551, 557, 551, 551, 553, 553, 553, 553, 553, + 555, 558, 559, 551, 553, 553, 553, 553, 553, 553, + 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, + 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, + 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, + 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, + + 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, + 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, + 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, + 553, 553, 551, 557, 551, 553, 553, 553, 50, 558, + 551, 559, 553, 553, 553, 553, 553, 553, 553, 553, + 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, + 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, + 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, + 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, + 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, + + 50, 553, 553, 553, 553, 553, 553, 553, 553, 553, + 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, + 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, + 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, + 553, 553, 553, 553, 551, 551, 551, 551, 553, 553, + 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, + 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, + 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, + 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, + 553, 553, 553, 553, 553, 553, 553, 553, 553, 201, + + 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, + 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, + 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, + 553, 551, 553, 553, 553, 553, 553, 553, 553, 553, + 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, + 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, + 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, + 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, + 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, + 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, + + 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, + 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, + 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, + 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, + 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, + 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, + 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, + 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, + 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, + 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, + + 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, + 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, + 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, + 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, + 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, + 0, 551, 551, 551, 551, 551, 551, 551, 551 } ; -static yyconst flex_int16_t yy_nxt[1243] = +static yyconst flex_int16_t yy_nxt[1247] = { 0, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 14, 14, 4, 15, 16, 8, 8, 8, 17, @@ -653,7 +654,7 @@ 104, 42, 156, 42, 42, 48, 46, 46, 46, 46, 42, 183, 162, 120, 121, 42, 122, 154, 123, 155, 124, 42, 125, 42, 42, 42, 126, 137, 137, 137, - 137, 42, 174, 42, 185, 138, 251, 42, 166, 163, + 137, 42, 174, 42, 185, 138, 313, 42, 166, 163, 180, 138, 48, 49, 49, 49, 49, 42, 139, 139, 139, 139, 42, 42, 42, 139, 139, 42, 139, 139, 139, 139, 139, 139, 42, 157, 42, 42, 158, 164, @@ -671,81 +672,81 @@ 220, 226, 229, 223, 42, 42, 222, 42, 225, 236, 237, 42, 228, 231, 232, 227, 230, 241, 42, 42, - 42, 42, 42, 233, 42, 238, 234, 239, 42, 242, - 42, 235, 253, 246, 246, 246, 246, 42, 255, 252, - 243, 247, 42, 254, 257, 256, 244, 247, 137, 137, - 137, 137, 42, 259, 42, 42, 138, 42, 261, 42, - 260, 42, 138, 248, 249, 42, 250, 250, 250, 250, - 42, 262, 42, 42, 258, 263, 42, 42, 269, 42, - 266, 42, 264, 42, 42, 270, 265, 267, 42, 273, - 42, 42, 42, 42, 42, 42, 271, 42, 279, 268, - 277, 280, 281, 275, 42, 272, 276, 278, 42, 274, - - 42, 282, 42, 42, 283, 42, 287, 291, 284, 42, - 285, 42, 288, 42, 290, 42, 42, 42, 289, 42, - 42, 42, 42, 294, 286, 292, 42, 42, 42, 42, - 302, 305, 296, 295, 42, 42, 293, 42, 297, 304, - 42, 42, 327, 298, 299, 299, 299, 299, 300, 42, - 301, 299, 299, 303, 299, 299, 299, 299, 299, 299, - 306, 310, 309, 42, 42, 42, 307, 42, 42, 42, - 42, 42, 42, 308, 42, 313, 312, 42, 315, 311, - 317, 42, 320, 42, 321, 42, 316, 314, 42, 324, - 319, 322, 42, 42, 325, 318, 42, 328, 323, 326, - - 246, 246, 246, 246, 42, 42, 42, 329, 247, 42, - 336, 340, 248, 248, 247, 331, 331, 331, 331, 42, - 330, 331, 331, 331, 331, 250, 250, 250, 250, 42, - 250, 250, 250, 250, 42, 42, 42, 332, 42, 42, - 42, 42, 42, 333, 42, 42, 42, 337, 42, 42, - 42, 42, 42, 42, 334, 42, 335, 339, 342, 347, - 341, 348, 42, 344, 338, 345, 42, 42, 42, 42, - 346, 42, 42, 343, 349, 354, 350, 356, 357, 351, - 42, 358, 42, 355, 42, 352, 42, 353, 42, 42, - 42, 42, 42, 42, 359, 42, 42, 42, 42, 362, - - 42, 361, 360, 42, 363, 364, 366, 374, 365, 373, - 371, 372, 42, 42, 370, 367, 42, 42, 369, 368, - 42, 377, 42, 375, 42, 42, 376, 378, 379, 42, - 42, 384, 381, 42, 42, 42, 380, 42, 42, 42, - 382, 383, 331, 331, 331, 331, 42, 42, 388, 42, - 42, 385, 390, 391, 42, 392, 386, 394, 42, 387, - 389, 42, 393, 42, 395, 42, 42, 396, 42, 42, - 42, 42, 397, 398, 400, 399, 402, 42, 404, 405, - 42, 42, 42, 42, 42, 401, 42, 403, 42, 42, - 42, 406, 409, 42, 407, 42, 42, 42, 42, 408, - - 410, 411, 42, 415, 417, 418, 413, 42, 416, 414, - 412, 42, 420, 42, 42, 42, 422, 421, 42, 42, - 42, 42, 419, 42, 42, 426, 42, 42, 42, 437, - 423, 425, 428, 430, 42, 433, 431, 424, 427, 42, - 435, 432, 42, 434, 429, 42, 42, 42, 42, 42, - 42, 42, 42, 436, 42, 42, 42, 448, 449, 42, - 440, 444, 42, 439, 42, 42, 438, 442, 42, 42, - 451, 441, 42, 445, 446, 447, 452, 443, 450, 453, - 42, 42, 42, 42, 42, 42, 454, 457, 455, 456, - 458, 42, 42, 42, 461, 42, 462, 463, 42, 42, - - 459, 460, 42, 42, 464, 42, 42, 467, 42, 465, - 42, 42, 42, 468, 42, 42, 42, 42, 466, 42, - 469, 476, 477, 42, 471, 42, 42, 470, 472, 481, - 473, 475, 478, 479, 483, 42, 480, 474, 42, 42, - 42, 482, 42, 42, 42, 42, 488, 42, 486, 42, - 484, 42, 489, 491, 42, 487, 42, 42, 42, 493, - 42, 485, 42, 42, 42, 42, 497, 490, 492, 42, - 500, 502, 501, 498, 494, 495, 499, 42, 496, 42, - 42, 42, 42, 503, 504, 42, 506, 505, 509, 508, - 42, 42, 42, 511, 42, 507, 42, 42, 42, 513, - - 510, 42, 512, 517, 515, 42, 42, 519, 42, 42, - 516, 42, 42, 42, 518, 42, 514, 42, 525, 523, - 520, 42, 42, 521, 42, 526, 42, 42, 522, 527, - 42, 42, 530, 528, 42, 524, 42, 529, 536, 42, - 42, 42, 42, 42, 532, 42, 533, 534, 531, 42, - 535, 542, 42, 537, 538, 42, 42, 543, 42, 42, - 42, 42, 539, 546, 541, 540, 547, 42, 42, 42, - 42, 42, 42, 42, 42, 544, 545, 42, 42, 42, - 548, 39, 39, 39, 39, 39, 41, 41, 51, 42, - 51, 51, 51, 53, 53, 140, 140, 140, 140, 140, + 42, 275, 42, 233, 546, 238, 234, 239, 42, 242, + 257, 235, 42, 246, 246, 246, 246, 42, 251, 253, + 243, 247, 256, 42, 252, 42, 244, 247, 137, 137, + 137, 137, 42, 254, 42, 42, 138, 42, 42, 255, + 42, 258, 138, 248, 249, 42, 250, 250, 250, 250, + 42, 262, 42, 42, 259, 42, 264, 260, 261, 42, + 42, 270, 42, 42, 42, 265, 267, 263, 42, 266, + 268, 42, 42, 42, 274, 42, 42, 42, 42, 42, + 281, 278, 269, 272, 42, 280, 271, 282, 279, 284, + + 273, 276, 42, 42, 277, 42, 283, 42, 42, 290, + 42, 42, 285, 286, 42, 42, 42, 289, 42, 291, + 42, 42, 42, 42, 288, 42, 295, 287, 42, 42, + 292, 293, 296, 303, 297, 42, 294, 42, 42, 324, + 305, 298, 42, 325, 42, 299, 300, 300, 300, 300, + 42, 301, 302, 300, 300, 42, 300, 300, 300, 300, + 300, 300, 304, 307, 310, 306, 42, 308, 42, 42, + 42, 42, 42, 42, 309, 42, 42, 42, 42, 314, + 316, 42, 318, 42, 312, 42, 321, 322, 317, 42, + 311, 315, 323, 42, 320, 42, 328, 42, 326, 319, + + 42, 327, 329, 350, 330, 42, 338, 331, 246, 246, + 246, 246, 42, 335, 248, 248, 247, 332, 332, 332, + 332, 42, 247, 332, 332, 332, 332, 250, 250, 250, + 250, 42, 250, 250, 250, 250, 42, 42, 42, 42, + 42, 42, 42, 42, 333, 42, 42, 42, 339, 342, + 42, 42, 42, 42, 42, 334, 336, 337, 341, 349, + 344, 42, 351, 343, 42, 340, 42, 346, 347, 42, + 42, 42, 42, 348, 42, 345, 42, 358, 42, 42, + 42, 42, 359, 42, 42, 352, 357, 42, 353, 354, + 360, 355, 42, 42, 356, 365, 361, 42, 362, 363, + + 366, 42, 364, 367, 42, 42, 42, 369, 368, 42, + 42, 42, 42, 374, 42, 373, 42, 375, 42, 376, + 370, 377, 371, 372, 378, 42, 379, 42, 382, 42, + 42, 42, 42, 381, 387, 380, 42, 383, 386, 42, + 445, 384, 385, 42, 42, 42, 332, 332, 332, 332, + 393, 42, 42, 42, 390, 42, 42, 42, 388, 392, + 394, 396, 397, 389, 42, 42, 391, 400, 42, 42, + 398, 42, 401, 42, 42, 395, 42, 399, 42, 42, + 42, 404, 406, 42, 407, 42, 42, 42, 402, 403, + 42, 405, 408, 409, 42, 411, 42, 42, 410, 412, + + 42, 42, 42, 42, 413, 42, 417, 42, 415, 419, + 420, 414, 42, 42, 416, 418, 42, 422, 42, 424, + 42, 42, 423, 42, 42, 42, 425, 421, 42, 428, + 42, 42, 427, 432, 430, 433, 42, 426, 435, 42, + 429, 42, 42, 437, 42, 436, 42, 431, 434, 42, + 439, 42, 42, 438, 42, 42, 42, 42, 42, 42, + 441, 42, 446, 442, 42, 440, 450, 451, 455, 444, + 443, 42, 453, 42, 448, 449, 454, 447, 42, 456, + 42, 452, 42, 42, 42, 42, 458, 42, 42, 42, + 42, 42, 42, 465, 463, 457, 42, 42, 464, 42, + + 460, 461, 459, 462, 466, 467, 469, 42, 42, 42, + 470, 42, 42, 468, 42, 42, 472, 471, 42, 42, + 42, 42, 42, 42, 478, 479, 473, 42, 477, 42, + 474, 475, 483, 42, 480, 481, 485, 42, 476, 484, + 42, 42, 482, 488, 42, 42, 490, 486, 42, 42, + 42, 491, 42, 489, 42, 487, 493, 42, 42, 42, + 42, 495, 42, 42, 42, 42, 42, 499, 492, 494, + 502, 504, 503, 506, 500, 496, 497, 501, 498, 42, + 42, 42, 42, 505, 42, 42, 508, 507, 511, 510, + 42, 42, 42, 42, 512, 509, 42, 42, 42, 515, + + 42, 517, 42, 519, 42, 42, 521, 514, 42, 513, + 42, 42, 518, 42, 520, 42, 516, 522, 525, 527, + 42, 523, 42, 42, 42, 524, 42, 529, 42, 42, + 528, 530, 42, 532, 526, 42, 42, 42, 531, 42, + 538, 42, 42, 42, 534, 536, 42, 535, 533, 42, + 539, 537, 42, 42, 544, 540, 42, 545, 42, 42, + 548, 541, 42, 549, 543, 542, 42, 547, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, 550, 39, + 39, 39, 39, 39, 41, 41, 51, 42, 51, 51, + 51, 53, 53, 140, 140, 140, 140, 140, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, @@ -755,17 +756,17 @@ 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, - 42, 42, 42, 42, 141, 42, 245, 42, 42, 42, - 42, 141, 42, 133, 42, 40, 549, 3, 549, 549, + 42, 42, 42, 42, 42, 42, 42, 42, 141, 42, + 245, 42, 42, 42, 42, 141, 42, 133, 42, 40, - 549, 549, 549, 549, 549, 549, 549, 549, 549, 549, - 549, 549, 549, 549, 549, 549, 549, 549, 549, 549, - 549, 549, 549, 549, 549, 549, 549, 549, 549, 549, - 549, 549, 549, 549, 549, 549, 549, 549, 549, 549, - 549, 549 + 551, 3, 551, 551, 551, 551, 551, 551, 551, 551, + 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, + 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, + 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, + 551, 551, 551, 551, 551, 551 } ; -static yyconst flex_int16_t yy_chk[1243] = +static yyconst flex_int16_t yy_chk[1247] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -779,26 +780,26 @@ 18, 31, 24, 17, 18, 17, 13, 17, 19, 20, 17, 31, 18, 36, 23, 20, 38, 21, 30, 20, - 21, 557, 28, 36, 23, 20, 38, 21, 20, 22, + 21, 559, 28, 36, 23, 20, 38, 21, 20, 22, 23, 30, 28, 78, 47, 22, 69, 22, 22, 47, 27, 28, 30, 78, 26, 22, 27, 28, 55, 22, 26, 22, 25, 25, 25, 25, 25, 55, 26, 27, 33, 69, 35, 26, 25, 27, 33, 26, 35, 57, 37, 37, 56, 33, 25, 29, 58, 61, 57, 33, - 555, 35, 33, 63, 64, 29, 56, 29, 56, 33, + 557, 35, 33, 63, 64, 29, 56, 29, 56, 33, 37, 29, 64, 29, 68, 29, 58, 29, 32, 63, 59, 61, 32, 45, 45, 45, 45, 45, 66, 75, 68, 32, 32, 59, 32, 32, 32, 59, 32, 54, - 54, 54, 54, 75, 32, 552, 32, 32, 88, 32, + 54, 54, 54, 75, 32, 554, 32, 32, 88, 32, 34, 65, 66, 70, 34, 46, 46, 46, 46, 46, 46, 88, 70, 34, 34, 72, 34, 65, 34, 65, - 34, 74, 34, 81, 144, 90, 34, 48, 48, 48, - 48, 48, 81, 85, 90, 48, 144, 548, 74, 72, + 34, 74, 34, 81, 219, 90, 34, 48, 48, 48, + 48, 48, 81, 85, 90, 48, 219, 550, 74, 72, 85, 48, 49, 49, 49, 49, 49, 49, 50, 50, 50, 50, 50, 73, 76, 50, 50, 67, 50, 50, 50, 50, 50, 50, 77, 67, 79, 80, 67, 73, - 83, 84, 546, 76, 77, 545, 73, 67, 82, 82, + 83, 84, 548, 76, 77, 547, 73, 67, 82, 82, 82, 82, 82, 86, 89, 87, 80, 83, 77, 91, 79, 87, 93, 84, 84, 84, 94, 84, 95, 96, @@ -808,106 +809,106 @@ 106, 107, 110, 114, 103, 105, 111, 109, 106, 113, 108, 107, 110, 104, 112, 115, 113, 114, 116, 108, 106, 118, 109, 119, 120, 107, 110, 121, 123, 115, - 129, 122, 124, 543, 541, 118, 129, 115, 120, 126, + 129, 122, 124, 169, 539, 118, 129, 115, 120, 126, 116, 122, 124, 119, 125, 127, 118, 131, 121, 126, 127, 128, 123, 125, 125, 122, 124, 130, 132, 130, - 145, 148, 147, 125, 150, 128, 125, 128, 152, 131, - 155, 125, 147, 135, 135, 135, 135, 151, 150, 145, - 132, 135, 157, 148, 152, 151, 132, 135, 137, 137, - 137, 137, 137, 155, 156, 164, 137, 158, 157, 159, - 156, 165, 137, 138, 138, 154, 138, 138, 138, 138, - 138, 158, 160, 161, 154, 159, 166, 163, 164, 167, - 161, 169, 160, 168, 170, 165, 160, 163, 172, 168, - 171, 175, 540, 174, 173, 183, 166, 179, 172, 163, - 171, 173, 174, 170, 176, 167, 170, 171, 177, 169, - - 178, 175, 180, 181, 176, 182, 179, 183, 177, 184, - 178, 185, 180, 187, 182, 188, 189, 196, 181, 199, - 204, 210, 202, 187, 178, 184, 203, 240, 209, 205, - 204, 210, 189, 188, 539, 534, 185, 217, 196, 209, - 215, 211, 240, 199, 201, 201, 201, 201, 202, 214, - 203, 201, 201, 205, 201, 201, 201, 201, 201, 201, - 211, 217, 215, 218, 219, 220, 214, 221, 222, 224, - 223, 228, 231, 214, 234, 220, 219, 235, 222, 218, - 223, 236, 231, 237, 234, 238, 222, 221, 243, 237, - 228, 235, 241, 239, 238, 224, 244, 241, 236, 239, - - 246, 246, 246, 246, 256, 261, 526, 243, 246, 520, - 256, 261, 247, 247, 246, 247, 247, 247, 247, 251, - 244, 248, 248, 248, 248, 249, 249, 249, 249, 249, - 250, 250, 250, 250, 250, 252, 253, 251, 255, 258, - 259, 260, 262, 252, 263, 264, 265, 258, 267, 266, - 276, 269, 273, 268, 253, 274, 255, 260, 263, 268, - 262, 269, 275, 265, 259, 266, 270, 279, 281, 283, - 267, 280, 284, 264, 270, 276, 273, 280, 281, 274, - 285, 283, 286, 279, 287, 275, 289, 275, 288, 292, - 293, 294, 295, 297, 284, 298, 301, 305, 304, 287, - - 514, 286, 285, 302, 288, 289, 293, 305, 292, 304, - 301, 302, 306, 310, 298, 294, 309, 312, 297, 295, - 314, 310, 313, 306, 316, 321, 309, 312, 313, 319, - 320, 321, 316, 322, 324, 326, 314, 328, 329, 336, - 319, 320, 331, 331, 331, 331, 334, 333, 328, 337, - 340, 322, 329, 333, 343, 334, 324, 337, 338, 326, - 328, 339, 336, 341, 338, 344, 345, 339, 342, 346, - 347, 349, 340, 341, 343, 342, 345, 352, 347, 349, - 353, 354, 355, 357, 356, 344, 359, 346, 360, 361, - 364, 352, 355, 362, 353, 366, 365, 367, 368, 354, - - 356, 357, 370, 362, 365, 366, 360, 369, 364, 361, - 359, 371, 368, 372, 374, 373, 370, 369, 375, 377, - 378, 382, 367, 388, 379, 374, 380, 384, 386, 388, - 371, 373, 377, 379, 385, 384, 380, 372, 375, 387, - 386, 382, 389, 385, 378, 390, 392, 393, 396, 395, - 399, 397, 403, 387, 404, 400, 401, 403, 403, 409, - 392, 397, 408, 390, 414, 419, 389, 395, 508, 412, - 408, 393, 420, 399, 400, 401, 409, 396, 404, 412, - 413, 416, 422, 423, 425, 426, 413, 419, 414, 416, - 420, 433, 430, 436, 425, 437, 426, 430, 438, 439, - - 422, 423, 440, 442, 433, 443, 446, 438, 447, 436, - 448, 450, 452, 439, 455, 449, 453, 454, 437, 456, - 440, 450, 452, 457, 443, 458, 459, 442, 446, 456, - 447, 449, 453, 454, 458, 461, 455, 448, 462, 463, - 464, 457, 465, 466, 468, 467, 464, 469, 462, 471, - 459, 472, 465, 467, 473, 463, 474, 476, 477, 469, - 478, 461, 485, 486, 487, 494, 474, 466, 468, 499, - 478, 486, 485, 476, 471, 472, 477, 488, 473, 490, - 491, 492, 497, 487, 488, 500, 491, 490, 497, 494, - 498, 501, 502, 499, 504, 492, 503, 505, 506, 501, - - 498, 507, 500, 505, 503, 509, 510, 507, 511, 512, - 504, 513, 515, 517, 506, 516, 502, 518, 515, 512, - 509, 519, 521, 510, 522, 516, 523, 524, 511, 517, - 528, 525, 521, 518, 527, 513, 530, 519, 528, 529, - 531, 532, 533, 535, 523, 537, 524, 525, 522, 536, - 527, 535, 538, 529, 530, 542, 544, 536, 547, 496, - 495, 493, 531, 542, 533, 532, 544, 489, 484, 483, - 482, 481, 480, 479, 475, 537, 538, 470, 460, 451, - 547, 550, 550, 550, 550, 550, 551, 551, 553, 445, - 553, 553, 553, 554, 554, 556, 556, 556, 556, 556, - - 444, 441, 435, 434, 432, 431, 429, 428, 427, 424, - 421, 418, 417, 415, 411, 410, 407, 406, 405, 402, - 398, 394, 391, 383, 381, 376, 363, 358, 351, 350, - 348, 335, 332, 330, 327, 325, 323, 318, 317, 315, - 311, 308, 307, 303, 300, 296, 291, 290, 282, 278, - 277, 272, 271, 257, 254, 242, 233, 232, 230, 229, - 227, 226, 225, 216, 213, 212, 208, 207, 206, 200, - 198, 197, 195, 194, 193, 192, 191, 190, 186, 162, - 153, 149, 146, 143, 140, 136, 133, 117, 92, 71, - 62, 52, 41, 39, 8, 7, 3, 549, 549, 549, - - 549, 549, 549, 549, 549, 549, 549, 549, 549, 549, - 549, 549, 549, 549, 549, 549, 549, 549, 549, 549, - 549, 549, 549, 549, 549, 549, 549, 549, 549, 549, - 549, 549, 549, 549, 549, 549, 549, 549, 549, 549, - 549, 549 + 145, 169, 151, 125, 539, 128, 125, 128, 150, 131, + 151, 125, 144, 135, 135, 135, 135, 148, 144, 145, + 132, 135, 150, 147, 144, 152, 132, 135, 137, 137, + 137, 137, 137, 147, 155, 157, 137, 545, 164, 148, + 159, 152, 137, 138, 138, 154, 138, 138, 138, 138, + 138, 157, 156, 158, 154, 160, 159, 155, 156, 161, + 163, 164, 165, 166, 167, 160, 161, 158, 168, 160, + 163, 171, 170, 173, 168, 172, 175, 543, 174, 176, + 173, 171, 163, 166, 181, 172, 165, 174, 171, 176, + + 167, 170, 177, 178, 170, 179, 175, 180, 183, 181, + 182, 185, 177, 178, 188, 184, 187, 180, 189, 182, + 196, 199, 236, 204, 179, 202, 187, 178, 203, 209, + 183, 184, 188, 204, 189, 542, 185, 237, 205, 236, + 209, 196, 215, 237, 211, 199, 201, 201, 201, 201, + 214, 202, 203, 201, 201, 210, 201, 201, 201, 201, + 201, 201, 205, 211, 215, 210, 217, 214, 218, 220, + 222, 221, 223, 224, 214, 228, 231, 234, 235, 220, + 222, 240, 223, 244, 218, 243, 231, 234, 222, 238, + 217, 221, 235, 270, 228, 239, 240, 241, 238, 224, + + 257, 239, 241, 270, 243, 253, 257, 244, 246, 246, + 246, 246, 541, 253, 247, 247, 246, 247, 247, 247, + 247, 251, 246, 248, 248, 248, 248, 249, 249, 249, + 249, 249, 250, 250, 250, 250, 250, 252, 254, 256, + 259, 260, 261, 262, 251, 263, 264, 265, 259, 262, + 266, 268, 267, 269, 271, 252, 254, 256, 261, 269, + 264, 274, 271, 263, 275, 260, 276, 266, 267, 277, + 280, 281, 282, 268, 285, 265, 286, 281, 284, 289, + 287, 290, 282, 295, 293, 274, 280, 288, 275, 276, + 284, 276, 294, 296, 277, 289, 285, 298, 286, 287, + + 290, 302, 288, 293, 299, 303, 305, 295, 294, 306, + 307, 398, 315, 303, 310, 302, 323, 305, 311, 306, + 296, 307, 298, 299, 310, 313, 311, 314, 315, 317, + 320, 321, 322, 314, 323, 313, 325, 317, 322, 327, + 398, 320, 321, 329, 335, 330, 332, 332, 332, 332, + 335, 336, 338, 339, 329, 342, 340, 343, 325, 330, + 336, 339, 340, 327, 341, 344, 329, 343, 345, 346, + 341, 347, 344, 348, 349, 338, 351, 342, 354, 355, + 356, 347, 349, 358, 351, 357, 359, 361, 345, 346, + 362, 348, 354, 355, 363, 357, 364, 366, 356, 358, + + 368, 367, 369, 370, 359, 372, 364, 373, 362, 367, + 368, 361, 371, 374, 363, 366, 375, 370, 376, 372, + 377, 379, 371, 380, 381, 382, 373, 369, 384, 376, + 386, 388, 375, 381, 379, 382, 387, 374, 386, 389, + 377, 391, 392, 388, 390, 387, 395, 380, 384, 394, + 390, 397, 399, 389, 401, 402, 403, 406, 414, 411, + 392, 405, 399, 394, 410, 391, 405, 405, 414, 397, + 395, 416, 410, 415, 402, 403, 411, 401, 418, 415, + 421, 406, 422, 424, 427, 425, 418, 428, 432, 438, + 439, 435, 444, 432, 427, 416, 441, 440, 428, 442, + + 422, 424, 421, 425, 435, 438, 440, 445, 448, 449, + 441, 450, 451, 439, 452, 454, 444, 442, 455, 456, + 457, 459, 458, 461, 452, 454, 445, 460, 451, 463, + 448, 449, 458, 464, 455, 456, 460, 465, 450, 459, + 466, 467, 457, 464, 468, 470, 466, 461, 469, 471, + 473, 467, 474, 465, 475, 463, 469, 476, 478, 479, + 480, 471, 487, 488, 489, 496, 490, 476, 468, 470, + 480, 488, 487, 490, 478, 473, 474, 479, 475, 492, + 493, 494, 499, 489, 500, 501, 493, 492, 499, 496, + 502, 503, 504, 505, 500, 494, 506, 507, 508, 503, + + 509, 505, 511, 507, 512, 513, 509, 502, 514, 501, + 515, 519, 506, 517, 508, 520, 504, 511, 514, 517, + 518, 512, 521, 523, 524, 513, 525, 519, 526, 527, + 518, 520, 530, 523, 515, 529, 531, 532, 521, 533, + 530, 534, 535, 540, 525, 527, 537, 526, 524, 538, + 531, 529, 544, 546, 537, 532, 549, 538, 536, 528, + 544, 533, 522, 546, 535, 534, 516, 540, 510, 498, + 497, 495, 491, 486, 485, 484, 483, 482, 549, 552, + 552, 552, 552, 552, 553, 553, 555, 481, 555, 555, + 555, 556, 556, 558, 558, 558, 558, 558, 477, 472, + + 462, 453, 447, 446, 443, 437, 436, 434, 433, 431, + 430, 429, 426, 423, 420, 419, 417, 413, 412, 409, + 408, 407, 404, 400, 396, 393, 385, 383, 378, 365, + 360, 353, 352, 350, 337, 334, 333, 331, 328, 326, + 324, 319, 318, 316, 312, 309, 308, 304, 301, 297, + 292, 291, 283, 279, 278, 273, 272, 258, 255, 242, + 233, 232, 230, 229, 227, 226, 225, 216, 213, 212, + 208, 207, 206, 200, 198, 197, 195, 194, 193, 192, + 191, 190, 186, 162, 153, 149, 146, 143, 140, 136, + 133, 117, 92, 71, 62, 52, 41, 39, 8, 7, + + 3, 551, 551, 551, 551, 551, 551, 551, 551, 551, + 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, + 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, + 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, + 551, 551, 551, 551, 551, 551 } ; /* Table of booleans, true if rule could match eol. */ -static yyconst flex_int32_t yy_rule_can_match_eol[137] = +static yyconst flex_int32_t yy_rule_can_match_eol[138] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -915,7 +916,7 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, }; + 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, }; static yy_state_type yy_last_accepting_state; static char *yy_last_accepting_cpos; @@ -931,7 +932,7 @@ #define YY_MORE_ADJ 0 #define YY_RESTORE_YY_MORE_OFFSET char *llvmAsmtext; -#line 1 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 1 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" /*===-- Lexer.l - Scanner for llvm assembly files --------------*- C++ -*--===// // // The LLVM Compiler Infrastructure @@ -944,7 +945,7 @@ // This file implements the flex scanner for LLVM assembly languages files. // //===----------------------------------------------------------------------===*/ -#line 28 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 28 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" #include "ParserInternals.h" #include "llvm/Module.h" #include @@ -1077,7 +1078,7 @@ /* HexIntConstant - Hexadecimal constant generated by the CFE to avoid forcing * it to deal with 64 bit numbers. */ -#line 1081 "Lexer.cpp" +#line 1082 "Lexer.cpp" #define INITIAL 0 @@ -1230,10 +1231,10 @@ register char *yy_cp, *yy_bp; register int yy_act; -#line 190 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 190 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" -#line 1237 "Lexer.cpp" +#line 1238 "Lexer.cpp" if ( !(yy_init) ) { @@ -1286,13 +1287,13 @@ while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 550 ) + if ( yy_current_state >= 552 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; ++yy_cp; } - while ( yy_current_state != 549 ); + while ( yy_current_state != 551 ); yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); @@ -1324,262 +1325,267 @@ case 1: YY_RULE_SETUP -#line 192 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 192 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { /* Ignore comments for now */ } YY_BREAK case 2: YY_RULE_SETUP -#line 194 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 194 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { return BEGINTOK; } YY_BREAK case 3: YY_RULE_SETUP -#line 195 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 195 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { return ENDTOK; } YY_BREAK case 4: YY_RULE_SETUP -#line 196 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 196 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { return TRUETOK; } YY_BREAK case 5: YY_RULE_SETUP -#line 197 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 197 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { return FALSETOK; } YY_BREAK case 6: YY_RULE_SETUP -#line 198 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 198 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { return DECLARE; } YY_BREAK case 7: YY_RULE_SETUP -#line 199 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 199 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { return DEFINE; } YY_BREAK case 8: YY_RULE_SETUP -#line 200 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 200 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { return GLOBAL; } YY_BREAK case 9: YY_RULE_SETUP -#line 201 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 201 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { return CONSTANT; } YY_BREAK case 10: YY_RULE_SETUP -#line 202 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 202 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { return INTERNAL; } YY_BREAK case 11: YY_RULE_SETUP -#line 203 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 203 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { return LINKONCE; } YY_BREAK case 12: YY_RULE_SETUP -#line 204 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 204 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { return WEAK; } YY_BREAK case 13: YY_RULE_SETUP -#line 205 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 205 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { return APPENDING; } YY_BREAK case 14: YY_RULE_SETUP -#line 206 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 206 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { return DLLIMPORT; } YY_BREAK case 15: YY_RULE_SETUP -#line 207 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 207 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { return DLLEXPORT; } YY_BREAK case 16: YY_RULE_SETUP -#line 208 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 208 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { return HIDDEN; } YY_BREAK case 17: YY_RULE_SETUP -#line 209 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 209 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { return EXTERN_WEAK; } YY_BREAK case 18: YY_RULE_SETUP -#line 210 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 210 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { return EXTERNAL; } YY_BREAK case 19: YY_RULE_SETUP -#line 211 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 211 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { return THREAD_LOCAL; } YY_BREAK case 20: YY_RULE_SETUP -#line 212 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 212 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { return ZEROINITIALIZER; } YY_BREAK case 21: YY_RULE_SETUP -#line 213 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 213 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { return DOTDOTDOT; } YY_BREAK case 22: YY_RULE_SETUP -#line 214 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 214 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { return UNDEF; } YY_BREAK case 23: YY_RULE_SETUP -#line 215 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 215 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { return NULL_TOK; } YY_BREAK case 24: YY_RULE_SETUP -#line 216 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 216 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { return TO; } YY_BREAK case 25: YY_RULE_SETUP -#line 217 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 217 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { return TAIL; } YY_BREAK case 26: YY_RULE_SETUP -#line 218 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 218 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { return TARGET; } YY_BREAK case 27: YY_RULE_SETUP -#line 219 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 219 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { return TRIPLE; } YY_BREAK case 28: YY_RULE_SETUP -#line 220 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 220 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { return DEPLIBS; } YY_BREAK case 29: YY_RULE_SETUP -#line 221 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 221 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { return DATALAYOUT; } YY_BREAK case 30: YY_RULE_SETUP -#line 222 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 222 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { return VOLATILE; } YY_BREAK case 31: YY_RULE_SETUP -#line 223 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 223 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { return ALIGN; } YY_BREAK case 32: YY_RULE_SETUP -#line 224 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 224 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { return SECTION; } YY_BREAK case 33: YY_RULE_SETUP -#line 225 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" -{ return MODULE; } +#line 225 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" +{ return ALIAS; } YY_BREAK case 34: YY_RULE_SETUP -#line 226 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" -{ return ASM_TOK; } +#line 226 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" +{ return MODULE; } YY_BREAK case 35: YY_RULE_SETUP -#line 227 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" -{ return SIDEEFFECT; } +#line 227 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" +{ return ASM_TOK; } YY_BREAK case 36: YY_RULE_SETUP -#line 229 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" -{ return CC_TOK; } +#line 228 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" +{ return SIDEEFFECT; } YY_BREAK case 37: YY_RULE_SETUP -#line 230 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" -{ return CCC_TOK; } +#line 230 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" +{ return CC_TOK; } YY_BREAK case 38: YY_RULE_SETUP -#line 231 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" -{ return FASTCC_TOK; } +#line 231 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" +{ return CCC_TOK; } YY_BREAK case 39: YY_RULE_SETUP -#line 232 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" -{ return COLDCC_TOK; } +#line 232 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" +{ return FASTCC_TOK; } YY_BREAK case 40: YY_RULE_SETUP -#line 233 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" -{ return X86_STDCALLCC_TOK; } +#line 233 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" +{ return COLDCC_TOK; } YY_BREAK case 41: YY_RULE_SETUP -#line 234 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" -{ return X86_FASTCALLCC_TOK; } +#line 234 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" +{ return X86_STDCALLCC_TOK; } YY_BREAK case 42: YY_RULE_SETUP -#line 236 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" -{ return INREG; } +#line 235 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" +{ return X86_FASTCALLCC_TOK; } YY_BREAK case 43: YY_RULE_SETUP -#line 237 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" -{ return SRET; } +#line 237 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" +{ return INREG; } YY_BREAK case 44: YY_RULE_SETUP -#line 238 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" -{ return NOUNWIND; } +#line 238 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" +{ return SRET; } YY_BREAK case 45: YY_RULE_SETUP -#line 239 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" -{ return NORETURN; } +#line 239 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" +{ return NOUNWIND; } YY_BREAK case 46: YY_RULE_SETUP -#line 241 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" -{ RET_TY(Type::VoidTy, VOID); } +#line 240 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" +{ return NORETURN; } YY_BREAK case 47: YY_RULE_SETUP -#line 242 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" -{ RET_TY(Type::FloatTy, FLOAT); } +#line 242 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" +{ RET_TY(Type::VoidTy, VOID); } YY_BREAK case 48: YY_RULE_SETUP -#line 243 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" -{ RET_TY(Type::DoubleTy,DOUBLE);} +#line 243 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" +{ RET_TY(Type::FloatTy, FLOAT); } YY_BREAK case 49: YY_RULE_SETUP -#line 244 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" -{ RET_TY(Type::LabelTy, LABEL); } +#line 244 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" +{ RET_TY(Type::DoubleTy,DOUBLE);} YY_BREAK case 50: YY_RULE_SETUP -#line 245 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" -{ return TYPE; } +#line 245 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" +{ RET_TY(Type::LabelTy, LABEL); } YY_BREAK case 51: YY_RULE_SETUP -#line 246 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" -{ return OPAQUE; } +#line 246 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" +{ return TYPE; } YY_BREAK case 52: YY_RULE_SETUP -#line 247 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 247 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" +{ return OPAQUE; } + YY_BREAK +case 53: +YY_RULE_SETUP +#line 248 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { uint64_t NumBits = atoull(llvmAsmtext+1); if (NumBits < IntegerType::MIN_INT_BITS || NumBits > IntegerType::MAX_INT_BITS) @@ -1588,367 +1594,367 @@ RET_TY(Ty, INTTYPE); } YY_BREAK -case 53: +case 54: YY_RULE_SETUP -#line 255 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 256 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { RET_TOK(BinaryOpVal, Add, ADD); } YY_BREAK -case 54: +case 55: YY_RULE_SETUP -#line 256 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 257 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { RET_TOK(BinaryOpVal, Sub, SUB); } YY_BREAK -case 55: +case 56: YY_RULE_SETUP -#line 257 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 258 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { RET_TOK(BinaryOpVal, Mul, MUL); } YY_BREAK -case 56: +case 57: YY_RULE_SETUP -#line 258 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 259 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { RET_TOK(BinaryOpVal, UDiv, UDIV); } YY_BREAK -case 57: +case 58: YY_RULE_SETUP -#line 259 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 260 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { RET_TOK(BinaryOpVal, SDiv, SDIV); } YY_BREAK -case 58: +case 59: YY_RULE_SETUP -#line 260 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 261 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { RET_TOK(BinaryOpVal, FDiv, FDIV); } YY_BREAK -case 59: +case 60: YY_RULE_SETUP -#line 261 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 262 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { RET_TOK(BinaryOpVal, URem, UREM); } YY_BREAK -case 60: +case 61: YY_RULE_SETUP -#line 262 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 263 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { RET_TOK(BinaryOpVal, SRem, SREM); } YY_BREAK -case 61: +case 62: YY_RULE_SETUP -#line 263 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 264 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { RET_TOK(BinaryOpVal, FRem, FREM); } YY_BREAK -case 62: +case 63: YY_RULE_SETUP -#line 264 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 265 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { RET_TOK(BinaryOpVal, Shl, SHL); } YY_BREAK -case 63: +case 64: YY_RULE_SETUP -#line 265 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 266 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { RET_TOK(BinaryOpVal, LShr, LSHR); } YY_BREAK -case 64: +case 65: YY_RULE_SETUP -#line 266 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 267 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { RET_TOK(BinaryOpVal, AShr, ASHR); } YY_BREAK -case 65: +case 66: YY_RULE_SETUP -#line 267 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 268 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { RET_TOK(BinaryOpVal, And, AND); } YY_BREAK -case 66: +case 67: YY_RULE_SETUP -#line 268 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 269 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { RET_TOK(BinaryOpVal, Or , OR ); } YY_BREAK -case 67: +case 68: YY_RULE_SETUP -#line 269 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 270 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { RET_TOK(BinaryOpVal, Xor, XOR); } YY_BREAK -case 68: +case 69: YY_RULE_SETUP -#line 270 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 271 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { RET_TOK(OtherOpVal, ICmp, ICMP); } YY_BREAK -case 69: +case 70: YY_RULE_SETUP -#line 271 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 272 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { RET_TOK(OtherOpVal, FCmp, FCMP); } YY_BREAK -case 70: +case 71: YY_RULE_SETUP -#line 273 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 274 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { return EQ; } YY_BREAK -case 71: +case 72: YY_RULE_SETUP -#line 274 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 275 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { return NE; } YY_BREAK -case 72: +case 73: YY_RULE_SETUP -#line 275 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 276 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { return SLT; } YY_BREAK -case 73: +case 74: YY_RULE_SETUP -#line 276 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 277 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { return SGT; } YY_BREAK -case 74: +case 75: YY_RULE_SETUP -#line 277 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 278 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { return SLE; } YY_BREAK -case 75: +case 76: YY_RULE_SETUP -#line 278 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 279 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { return SGE; } YY_BREAK -case 76: +case 77: YY_RULE_SETUP -#line 279 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 280 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { return ULT; } YY_BREAK -case 77: +case 78: YY_RULE_SETUP -#line 280 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 281 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { return UGT; } YY_BREAK -case 78: +case 79: YY_RULE_SETUP -#line 281 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 282 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { return ULE; } YY_BREAK -case 79: +case 80: YY_RULE_SETUP -#line 282 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 283 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { return UGE; } YY_BREAK -case 80: +case 81: YY_RULE_SETUP -#line 283 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 284 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { return OEQ; } YY_BREAK -case 81: +case 82: YY_RULE_SETUP -#line 284 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 285 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { return ONE; } YY_BREAK -case 82: +case 83: YY_RULE_SETUP -#line 285 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 286 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { return OLT; } YY_BREAK -case 83: +case 84: YY_RULE_SETUP -#line 286 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 287 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { return OGT; } YY_BREAK -case 84: +case 85: YY_RULE_SETUP -#line 287 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 288 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { return OLE; } YY_BREAK -case 85: +case 86: YY_RULE_SETUP -#line 288 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 289 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { return OGE; } YY_BREAK -case 86: +case 87: YY_RULE_SETUP -#line 289 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 290 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { return ORD; } YY_BREAK -case 87: +case 88: YY_RULE_SETUP -#line 290 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 291 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { return UNO; } YY_BREAK -case 88: +case 89: YY_RULE_SETUP -#line 291 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 292 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { return UEQ; } YY_BREAK -case 89: +case 90: YY_RULE_SETUP -#line 292 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 293 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { return UNE; } YY_BREAK -case 90: +case 91: YY_RULE_SETUP -#line 294 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 295 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { RET_TOK(OtherOpVal, PHI, PHI_TOK); } YY_BREAK -case 91: +case 92: YY_RULE_SETUP -#line 295 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 296 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { RET_TOK(OtherOpVal, Call, CALL); } YY_BREAK -case 92: +case 93: YY_RULE_SETUP -#line 296 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 297 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { RET_TOK(CastOpVal, Trunc, TRUNC); } YY_BREAK -case 93: +case 94: YY_RULE_SETUP -#line 297 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 298 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { RET_TOK(CastOpVal, ZExt, ZEXT); } YY_BREAK -case 94: +case 95: YY_RULE_SETUP -#line 298 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 299 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { RET_TOK(CastOpVal, SExt, SEXT); } YY_BREAK -case 95: +case 96: YY_RULE_SETUP -#line 299 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 300 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { RET_TOK(CastOpVal, FPTrunc, FPTRUNC); } YY_BREAK -case 96: +case 97: YY_RULE_SETUP -#line 300 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 301 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { RET_TOK(CastOpVal, FPExt, FPEXT); } YY_BREAK -case 97: +case 98: YY_RULE_SETUP -#line 301 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 302 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { RET_TOK(CastOpVal, UIToFP, UITOFP); } YY_BREAK -case 98: +case 99: YY_RULE_SETUP -#line 302 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 303 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { RET_TOK(CastOpVal, SIToFP, SITOFP); } YY_BREAK -case 99: +case 100: YY_RULE_SETUP -#line 303 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 304 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { RET_TOK(CastOpVal, FPToUI, FPTOUI); } YY_BREAK -case 100: +case 101: YY_RULE_SETUP -#line 304 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 305 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { RET_TOK(CastOpVal, FPToSI, FPTOSI); } YY_BREAK -case 101: +case 102: YY_RULE_SETUP -#line 305 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 306 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { RET_TOK(CastOpVal, IntToPtr, INTTOPTR); } YY_BREAK -case 102: +case 103: YY_RULE_SETUP -#line 306 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 307 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { RET_TOK(CastOpVal, PtrToInt, PTRTOINT); } YY_BREAK -case 103: +case 104: YY_RULE_SETUP -#line 307 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 308 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { RET_TOK(CastOpVal, BitCast, BITCAST); } YY_BREAK -case 104: +case 105: YY_RULE_SETUP -#line 308 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 309 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { RET_TOK(OtherOpVal, Select, SELECT); } YY_BREAK -case 105: +case 106: YY_RULE_SETUP -#line 309 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 310 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { RET_TOK(OtherOpVal, VAArg , VAARG); } YY_BREAK -case 106: +case 107: YY_RULE_SETUP -#line 310 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 311 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { RET_TOK(TermOpVal, Ret, RET); } YY_BREAK -case 107: +case 108: YY_RULE_SETUP -#line 311 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 312 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { RET_TOK(TermOpVal, Br, BR); } YY_BREAK -case 108: +case 109: YY_RULE_SETUP -#line 312 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 313 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { RET_TOK(TermOpVal, Switch, SWITCH); } YY_BREAK -case 109: +case 110: YY_RULE_SETUP -#line 313 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 314 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { RET_TOK(TermOpVal, Invoke, INVOKE); } YY_BREAK -case 110: +case 111: YY_RULE_SETUP -#line 314 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 315 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { RET_TOK(TermOpVal, Unwind, UNWIND); } YY_BREAK -case 111: +case 112: YY_RULE_SETUP -#line 315 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 316 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { RET_TOK(TermOpVal, Unreachable, UNREACHABLE); } YY_BREAK -case 112: +case 113: YY_RULE_SETUP -#line 317 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 318 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { RET_TOK(MemOpVal, Malloc, MALLOC); } YY_BREAK -case 113: +case 114: YY_RULE_SETUP -#line 318 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 319 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { RET_TOK(MemOpVal, Alloca, ALLOCA); } YY_BREAK -case 114: +case 115: YY_RULE_SETUP -#line 319 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 320 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { RET_TOK(MemOpVal, Free, FREE); } YY_BREAK -case 115: +case 116: YY_RULE_SETUP -#line 320 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 321 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { RET_TOK(MemOpVal, Load, LOAD); } YY_BREAK -case 116: +case 117: YY_RULE_SETUP -#line 321 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 322 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { RET_TOK(MemOpVal, Store, STORE); } YY_BREAK -case 117: +case 118: YY_RULE_SETUP -#line 322 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 323 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { RET_TOK(MemOpVal, GetElementPtr, GETELEMENTPTR); } YY_BREAK -case 118: +case 119: YY_RULE_SETUP -#line 324 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 325 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { RET_TOK(OtherOpVal, ExtractElement, EXTRACTELEMENT); } YY_BREAK -case 119: +case 120: YY_RULE_SETUP -#line 325 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 326 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { RET_TOK(OtherOpVal, InsertElement, INSERTELEMENT); } YY_BREAK -case 120: +case 121: YY_RULE_SETUP -#line 326 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 327 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { RET_TOK(OtherOpVal, ShuffleVector, SHUFFLEVECTOR); } YY_BREAK -case 121: +case 122: YY_RULE_SETUP -#line 329 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 330 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { UnEscapeLexed(llvmAsmtext+1); llvmAsmlval.StrVal = strdup(llvmAsmtext+1); // Skip % return LOCALVAR; } YY_BREAK -case 122: +case 123: YY_RULE_SETUP -#line 334 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 335 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { UnEscapeLexed(llvmAsmtext+1); llvmAsmlval.StrVal = strdup(llvmAsmtext+1); // Skip @ return GLOBALVAR; } YY_BREAK -case 123: +case 124: YY_RULE_SETUP -#line 339 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 340 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { llvmAsmtext[strlen(llvmAsmtext)-1] = 0; // nuke colon UnEscapeLexed(llvmAsmtext); @@ -1956,10 +1962,10 @@ return LABELSTR; } YY_BREAK -case 124: -/* rule 124 can match eol */ +case 125: +/* rule 125 can match eol */ YY_RULE_SETUP -#line 345 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 346 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { llvmAsmtext[strlen(llvmAsmtext)-2] = 0; // nuke colon, end quote UnEscapeLexed(llvmAsmtext+1); @@ -1967,10 +1973,10 @@ return LABELSTR; } YY_BREAK -case 125: -/* rule 125 can match eol */ +case 126: +/* rule 126 can match eol */ YY_RULE_SETUP -#line 352 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 353 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { // Note that we cannot unescape a string constant here! The // string constant might contain a \00 which would not be // understood by the string stuff. It is valid to make a @@ -1981,19 +1987,19 @@ return STRINGCONSTANT; } YY_BREAK -case 126: -/* rule 126 can match eol */ +case 127: +/* rule 127 can match eol */ YY_RULE_SETUP -#line 361 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 362 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { llvmAsmtext[strlen(llvmAsmtext)-1] = 0; // nuke end quote llvmAsmlval.StrVal = strdup(llvmAsmtext+2); // Nuke @, quote return ATSTRINGCONSTANT; } YY_BREAK -case 127: +case 128: YY_RULE_SETUP -#line 367 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 368 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { int len = strlen(llvmAsmtext); uint32_t numBits = ((len * 64) / 19) + 1; APInt Tmp(numBits, llvmAsmtext, len, 10); @@ -2009,9 +2015,9 @@ } } YY_BREAK -case 128: +case 129: YY_RULE_SETUP -#line 381 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 382 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { int len = strlen(llvmAsmtext); uint32_t numBits = (((len-1) * 64) / 19) + 2; APInt Tmp(numBits, llvmAsmtext, len, 10); @@ -2027,9 +2033,9 @@ } } YY_BREAK -case 129: +case 130: YY_RULE_SETUP -#line 396 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 397 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { int len = strlen(llvmAsmtext+3) - 3; uint32_t bits = len * 4; APInt Tmp(bits, llvmAsmtext+3, len, 16); @@ -2048,9 +2054,9 @@ } } YY_BREAK -case 130: +case 131: YY_RULE_SETUP -#line 414 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 415 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { uint64_t Val = atoull(llvmAsmtext+1); if ((unsigned)Val != Val) @@ -2059,9 +2065,9 @@ return LOCALVAL_ID; } YY_BREAK -case 131: +case 132: YY_RULE_SETUP -#line 421 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 422 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { uint64_t Val = atoull(llvmAsmtext+1); if ((unsigned)Val != Val) @@ -2070,18 +2076,18 @@ return GLOBALVAL_ID; } YY_BREAK -case 132: +case 133: YY_RULE_SETUP -#line 429 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 430 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { llvmAsmlval.FPVal = atof(llvmAsmtext); return FPVAL; } YY_BREAK -case 133: +case 134: YY_RULE_SETUP -#line 430 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 431 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { llvmAsmlval.FPVal = HexToFP(llvmAsmtext); return FPVAL; } YY_BREAK case YY_STATE_EOF(INITIAL): -#line 432 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 433 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { /* Make sure to free the internal buffers for flex when we are * done reading our input! @@ -2090,23 +2096,23 @@ return EOF; } YY_BREAK -case 134: -/* rule 134 can match eol */ +case 135: +/* rule 135 can match eol */ YY_RULE_SETUP -#line 440 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 441 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { /* Ignore whitespace */ } YY_BREAK -case 135: +case 136: YY_RULE_SETUP -#line 441 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 442 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" { return llvmAsmtext[0]; } YY_BREAK -case 136: +case 137: YY_RULE_SETUP -#line 443 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 444 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" YY_FATAL_ERROR( "flex scanner jammed" ); YY_BREAK -#line 2110 "Lexer.cpp" +#line 2116 "Lexer.cpp" case YY_END_OF_BUFFER: { @@ -2389,7 +2395,7 @@ while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 550 ) + if ( yy_current_state >= 552 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; @@ -2417,11 +2423,11 @@ while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 550 ) + if ( yy_current_state >= 552 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; - yy_is_jam = (yy_current_state == 549); + yy_is_jam = (yy_current_state == 551); return yy_is_jam ? 0 : yy_current_state; } @@ -2842,7 +2848,7 @@ /** Setup the input buffer state to scan a string. The next call to llvmAsmlex() will * scan from a @e copy of @a str. - * @param yystr a NUL-terminated string to scan + * @param str a NUL-terminated string to scan * * @return the newly allocated buffer state object. * @note If you want to scan bytes that may contain NUL values, then use @@ -3099,7 +3105,7 @@ #define YYTABLES_NAME "yytables" -#line 443 "/home/laurov/llvm/llvm/lib/AsmParser/Lexer.l" +#line 444 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l" Index: llvm/lib/AsmParser/Lexer.l.cvs diff -u llvm/lib/AsmParser/Lexer.l.cvs:1.32 llvm/lib/AsmParser/Lexer.l.cvs:1.33 --- llvm/lib/AsmParser/Lexer.l.cvs:1.32 Thu Apr 12 13:32:50 2007 +++ llvm/lib/AsmParser/Lexer.l.cvs Wed Apr 25 09:29:12 2007 @@ -222,6 +222,7 @@ volatile { return VOLATILE; } align { return ALIGN; } section { return SECTION; } +alias { return ALIAS; } module { return MODULE; } asm { return ASM_TOK; } sideeffect { return SIDEEFFECT; } Index: llvm/lib/AsmParser/llvmAsmParser.cpp.cvs diff -u llvm/lib/AsmParser/llvmAsmParser.cpp.cvs:1.91 llvm/lib/AsmParser/llvmAsmParser.cpp.cvs:1.92 --- llvm/lib/AsmParser/llvmAsmParser.cpp.cvs:1.91 Sun Apr 22 15:09:11 2007 +++ llvm/lib/AsmParser/llvmAsmParser.cpp.cvs Wed Apr 25 09:29:12 2007 @@ -1,150 +1,354 @@ +/* A Bison parser, made by GNU Bison 2.3. */ -/* A Bison parser, made from /Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y - by GNU Bison version 1.28 */ +/* Skeleton implementation for Bison's Yacc-like parsers in C -#define YYBISON 1 /* Identify Bison output. */ + Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 + Free Software Foundation, Inc. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. */ + +/* As a special exception, you may create a larger work that contains + part or all of the Bison parser skeleton and distribute that work + under terms of your choice, so long as that work isn't itself a + parser generator using the skeleton or a modified version thereof + as a parser skeleton. Alternatively, if you modify or redistribute + the parser skeleton itself, you may (at your option) remove this + special exception, which will cause the skeleton and the resulting + Bison output files to be licensed under the GNU General Public + License without this special exception. + + This special exception was added by the Free Software Foundation in + version 2.2 of Bison. */ + +/* C LALR(1) parser skeleton written by Richard Stallman, by + simplifying the original so-called "semantic" parser. */ + +/* All symbols defined below should begin with yy or YY, to avoid + infringing on user name space. This should be done even for local + variables, as they might otherwise be expanded by user macros. + There are some unavoidable exceptions within include files to + define necessary library symbols; they are noted "INFRINGES ON + USER NAME SPACE" below. */ + +/* Identify Bison output. */ +#define YYBISON 1 + +/* Bison version. */ +#define YYBISON_VERSION "2.3" + +/* Skeleton name. */ +#define YYSKELETON_NAME "yacc.c" + +/* Pure parsers. */ +#define YYPURE 0 + +/* Using locations. */ +#define YYLSP_NEEDED 0 + +/* Substitute the variable and function names. */ #define yyparse llvmAsmparse -#define yylex llvmAsmlex +#define yylex llvmAsmlex #define yyerror llvmAsmerror -#define yylval llvmAsmlval -#define yychar llvmAsmchar +#define yylval llvmAsmlval +#define yychar llvmAsmchar #define yydebug llvmAsmdebug #define yynerrs llvmAsmnerrs -#define ESINT64VAL 257 -#define EUINT64VAL 258 -#define ESAPINTVAL 259 -#define EUAPINTVAL 260 -#define LOCALVAL_ID 261 -#define GLOBALVAL_ID 262 -#define FPVAL 263 -#define VOID 264 -#define INTTYPE 265 -#define FLOAT 266 -#define DOUBLE 267 -#define LABEL 268 -#define TYPE 269 -#define LOCALVAR 270 -#define GLOBALVAR 271 -#define LABELSTR 272 -#define STRINGCONSTANT 273 -#define ATSTRINGCONSTANT 274 -#define ZEROINITIALIZER 275 -#define TRUETOK 276 -#define FALSETOK 277 -#define BEGINTOK 278 -#define ENDTOK 279 -#define DECLARE 280 -#define DEFINE 281 -#define GLOBAL 282 -#define CONSTANT 283 -#define SECTION 284 -#define VOLATILE 285 -#define THREAD_LOCAL 286 -#define TO 287 -#define DOTDOTDOT 288 -#define NULL_TOK 289 -#define UNDEF 290 -#define INTERNAL 291 -#define LINKONCE 292 -#define WEAK 293 -#define APPENDING 294 -#define DLLIMPORT 295 -#define DLLEXPORT 296 -#define EXTERN_WEAK 297 -#define OPAQUE 298 -#define EXTERNAL 299 -#define TARGET 300 -#define TRIPLE 301 -#define ALIGN 302 -#define DEPLIBS 303 -#define CALL 304 -#define TAIL 305 -#define ASM_TOK 306 -#define MODULE 307 -#define SIDEEFFECT 308 -#define CC_TOK 309 -#define CCC_TOK 310 -#define FASTCC_TOK 311 -#define COLDCC_TOK 312 -#define X86_STDCALLCC_TOK 313 -#define X86_FASTCALLCC_TOK 314 -#define DATALAYOUT 315 -#define RET 316 -#define BR 317 -#define SWITCH 318 -#define INVOKE 319 -#define UNWIND 320 -#define UNREACHABLE 321 -#define ADD 322 -#define SUB 323 -#define MUL 324 -#define UDIV 325 -#define SDIV 326 -#define FDIV 327 -#define UREM 328 -#define SREM 329 -#define FREM 330 -#define AND 331 -#define OR 332 -#define XOR 333 -#define SHL 334 -#define LSHR 335 -#define ASHR 336 -#define ICMP 337 -#define FCMP 338 -#define EQ 339 -#define NE 340 -#define SLT 341 -#define SGT 342 -#define SLE 343 -#define SGE 344 -#define ULT 345 -#define UGT 346 -#define ULE 347 -#define UGE 348 -#define OEQ 349 -#define ONE 350 -#define OLT 351 -#define OGT 352 -#define OLE 353 -#define OGE 354 -#define ORD 355 -#define UNO 356 -#define UEQ 357 -#define UNE 358 -#define MALLOC 359 -#define ALLOCA 360 -#define FREE 361 -#define LOAD 362 -#define STORE 363 -#define GETELEMENTPTR 364 -#define TRUNC 365 -#define ZEXT 366 -#define SEXT 367 -#define FPTRUNC 368 -#define FPEXT 369 -#define BITCAST 370 -#define UITOFP 371 -#define SITOFP 372 -#define FPTOUI 373 -#define FPTOSI 374 -#define INTTOPTR 375 -#define PTRTOINT 376 -#define PHI_TOK 377 -#define SELECT 378 -#define VAARG 379 -#define EXTRACTELEMENT 380 -#define INSERTELEMENT 381 -#define SHUFFLEVECTOR 382 -#define NORETURN 383 -#define INREG 384 -#define SRET 385 -#define NOUNWIND 386 -#define DEFAULT 387 -#define HIDDEN 388 -#line 14 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" + +/* Tokens. */ +#ifndef YYTOKENTYPE +# define YYTOKENTYPE + /* Put the tokens into the symbol table, so that GDB and other debuggers + know about them. */ + enum yytokentype { + ESINT64VAL = 258, + EUINT64VAL = 259, + ESAPINTVAL = 260, + EUAPINTVAL = 261, + LOCALVAL_ID = 262, + GLOBALVAL_ID = 263, + FPVAL = 264, + VOID = 265, + INTTYPE = 266, + FLOAT = 267, + DOUBLE = 268, + LABEL = 269, + TYPE = 270, + LOCALVAR = 271, + GLOBALVAR = 272, + LABELSTR = 273, + STRINGCONSTANT = 274, + ATSTRINGCONSTANT = 275, + ZEROINITIALIZER = 276, + TRUETOK = 277, + FALSETOK = 278, + BEGINTOK = 279, + ENDTOK = 280, + DECLARE = 281, + DEFINE = 282, + GLOBAL = 283, + CONSTANT = 284, + SECTION = 285, + ALIAS = 286, + VOLATILE = 287, + THREAD_LOCAL = 288, + TO = 289, + DOTDOTDOT = 290, + NULL_TOK = 291, + UNDEF = 292, + INTERNAL = 293, + LINKONCE = 294, + WEAK = 295, + APPENDING = 296, + DLLIMPORT = 297, + DLLEXPORT = 298, + EXTERN_WEAK = 299, + OPAQUE = 300, + EXTERNAL = 301, + TARGET = 302, + TRIPLE = 303, + ALIGN = 304, + DEPLIBS = 305, + CALL = 306, + TAIL = 307, + ASM_TOK = 308, + MODULE = 309, + SIDEEFFECT = 310, + CC_TOK = 311, + CCC_TOK = 312, + FASTCC_TOK = 313, + COLDCC_TOK = 314, + X86_STDCALLCC_TOK = 315, + X86_FASTCALLCC_TOK = 316, + DATALAYOUT = 317, + RET = 318, + BR = 319, + SWITCH = 320, + INVOKE = 321, + UNWIND = 322, + UNREACHABLE = 323, + ADD = 324, + SUB = 325, + MUL = 326, + UDIV = 327, + SDIV = 328, + FDIV = 329, + UREM = 330, + SREM = 331, + FREM = 332, + AND = 333, + OR = 334, + XOR = 335, + SHL = 336, + LSHR = 337, + ASHR = 338, + ICMP = 339, + FCMP = 340, + EQ = 341, + NE = 342, + SLT = 343, + SGT = 344, + SLE = 345, + SGE = 346, + ULT = 347, + UGT = 348, + ULE = 349, + UGE = 350, + OEQ = 351, + ONE = 352, + OLT = 353, + OGT = 354, + OLE = 355, + OGE = 356, + ORD = 357, + UNO = 358, + UEQ = 359, + UNE = 360, + MALLOC = 361, + ALLOCA = 362, + FREE = 363, + LOAD = 364, + STORE = 365, + GETELEMENTPTR = 366, + TRUNC = 367, + ZEXT = 368, + SEXT = 369, + FPTRUNC = 370, + FPEXT = 371, + BITCAST = 372, + UITOFP = 373, + SITOFP = 374, + FPTOUI = 375, + FPTOSI = 376, + INTTOPTR = 377, + PTRTOINT = 378, + PHI_TOK = 379, + SELECT = 380, + VAARG = 381, + EXTRACTELEMENT = 382, + INSERTELEMENT = 383, + SHUFFLEVECTOR = 384, + NORETURN = 385, + INREG = 386, + SRET = 387, + NOUNWIND = 388, + DEFAULT = 389, + HIDDEN = 390 + }; +#endif +/* Tokens. */ +#define ESINT64VAL 258 +#define EUINT64VAL 259 +#define ESAPINTVAL 260 +#define EUAPINTVAL 261 +#define LOCALVAL_ID 262 +#define GLOBALVAL_ID 263 +#define FPVAL 264 +#define VOID 265 +#define INTTYPE 266 +#define FLOAT 267 +#define DOUBLE 268 +#define LABEL 269 +#define TYPE 270 +#define LOCALVAR 271 +#define GLOBALVAR 272 +#define LABELSTR 273 +#define STRINGCONSTANT 274 +#define ATSTRINGCONSTANT 275 +#define ZEROINITIALIZER 276 +#define TRUETOK 277 +#define FALSETOK 278 +#define BEGINTOK 279 +#define ENDTOK 280 +#define DECLARE 281 +#define DEFINE 282 +#define GLOBAL 283 +#define CONSTANT 284 +#define SECTION 285 +#define ALIAS 286 +#define VOLATILE 287 +#define THREAD_LOCAL 288 +#define TO 289 +#define DOTDOTDOT 290 +#define NULL_TOK 291 +#define UNDEF 292 +#define INTERNAL 293 +#define LINKONCE 294 +#define WEAK 295 +#define APPENDING 296 +#define DLLIMPORT 297 +#define DLLEXPORT 298 +#define EXTERN_WEAK 299 +#define OPAQUE 300 +#define EXTERNAL 301 +#define TARGET 302 +#define TRIPLE 303 +#define ALIGN 304 +#define DEPLIBS 305 +#define CALL 306 +#define TAIL 307 +#define ASM_TOK 308 +#define MODULE 309 +#define SIDEEFFECT 310 +#define CC_TOK 311 +#define CCC_TOK 312 +#define FASTCC_TOK 313 +#define COLDCC_TOK 314 +#define X86_STDCALLCC_TOK 315 +#define X86_FASTCALLCC_TOK 316 +#define DATALAYOUT 317 +#define RET 318 +#define BR 319 +#define SWITCH 320 +#define INVOKE 321 +#define UNWIND 322 +#define UNREACHABLE 323 +#define ADD 324 +#define SUB 325 +#define MUL 326 +#define UDIV 327 +#define SDIV 328 +#define FDIV 329 +#define UREM 330 +#define SREM 331 +#define FREM 332 +#define AND 333 +#define OR 334 +#define XOR 335 +#define SHL 336 +#define LSHR 337 +#define ASHR 338 +#define ICMP 339 +#define FCMP 340 +#define EQ 341 +#define NE 342 +#define SLT 343 +#define SGT 344 +#define SLE 345 +#define SGE 346 +#define ULT 347 +#define UGT 348 +#define ULE 349 +#define UGE 350 +#define OEQ 351 +#define ONE 352 +#define OLT 353 +#define OGT 354 +#define OLE 355 +#define OGE 356 +#define ORD 357 +#define UNO 358 +#define UEQ 359 +#define UNE 360 +#define MALLOC 361 +#define ALLOCA 362 +#define FREE 363 +#define LOAD 364 +#define STORE 365 +#define GETELEMENTPTR 366 +#define TRUNC 367 +#define ZEXT 368 +#define SEXT 369 +#define FPTRUNC 370 +#define FPEXT 371 +#define BITCAST 372 +#define UITOFP 373 +#define SITOFP 374 +#define FPTOUI 375 +#define FPTOSI 376 +#define INTTOPTR 377 +#define PTRTOINT 378 +#define PHI_TOK 379 +#define SELECT 380 +#define VAARG 381 +#define EXTRACTELEMENT 382 +#define INSERTELEMENT 383 +#define SHUFFLEVECTOR 384 +#define NORETURN 385 +#define INREG 386 +#define SRET 387 +#define NOUNWIND 388 +#define DEFAULT 389 +#define HIDDEN 390 + + + + +/* Copy the first part of user declarations. */ +#line 14 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" #include "ParserInternals.h" #include "llvm/CallingConv.h" @@ -1068,8 +1272,29 @@ } -#line 938 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -typedef union { + +/* Enabling traces. */ +#ifndef YYDEBUG +# define YYDEBUG 0 +#endif + +/* Enabling verbose error messages. */ +#ifdef YYERROR_VERBOSE +# undef YYERROR_VERBOSE +# define YYERROR_VERBOSE 1 +#else +# define YYERROR_VERBOSE 0 +#endif + +/* Enabling the token table. */ +#ifndef YYTOKEN_TABLE +# define YYTOKEN_TABLE 0 +#endif + +#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED +typedef union YYSTYPE +#line 938 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" +{ llvm::Module *ModuleVal; llvm::Function *FunctionVal; llvm::BasicBlock *BasicBlockVal; @@ -1114,1069 +1339,1755 @@ llvm::Instruction::OtherOps OtherOpVal; llvm::ICmpInst::Predicate IPredicate; llvm::FCmpInst::Predicate FPredicate; -} YYSTYPE; -#include - -#ifndef __cplusplus -#ifndef __STDC__ -#define const -#endif +} +/* Line 187 of yacc.c. */ +#line 1345 "llvmAsmParser.tab.c" + YYSTYPE; +# define yystype YYSTYPE /* obsolescent; will be withdrawn */ +# define YYSTYPE_IS_DECLARED 1 +# define YYSTYPE_IS_TRIVIAL 1 #endif -#define YYFINAL 565 -#define YYFLAG -32768 -#define YYNTBASE 149 - -#define YYTRANSLATE(x) ((unsigned)(x) <= 388 ? yytranslate[x] : 227) - -static const short yytranslate[] = { 0, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 139, - 140, 137, 2, 136, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 144, - 135, 145, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 141, 138, 143, 2, 2, 2, 2, 2, 148, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 142, - 2, 2, 146, 2, 147, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 1, 3, 4, 5, 6, - 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, - 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, - 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, - 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, - 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, - 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, - 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, - 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, - 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, - 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, - 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, - 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, - 127, 128, 129, 130, 131, 132, 133, 134 -}; +/* Copy the second part of user declarations. */ -#if YYDEBUG != 0 -static const short yyprhs[] = { 0, - 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, - 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, - 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, - 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, - 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, - 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, - 119, 122, 123, 125, 127, 130, 131, 133, 135, 137, - 139, 141, 143, 145, 147, 148, 150, 151, 153, 155, - 156, 158, 160, 162, 164, 165, 167, 169, 171, 173, - 175, 178, 180, 182, 184, 186, 187, 190, 192, 194, - 196, 197, 200, 201, 204, 205, 209, 212, 213, 215, - 216, 220, 222, 225, 227, 229, 231, 233, 235, 237, - 240, 242, 245, 251, 257, 263, 269, 273, 276, 282, - 287, 290, 292, 294, 296, 300, 302, 306, 308, 309, - 311, 315, 320, 324, 328, 333, 338, 342, 349, 355, - 358, 361, 364, 367, 370, 373, 376, 379, 382, 385, - 388, 391, 398, 404, 413, 420, 427, 435, 443, 450, - 459, 468, 472, 474, 476, 478, 480, 481, 483, 484, - 486, 489, 490, 494, 495, 499, 503, 507, 511, 512, - 520, 521, 530, 531, 540, 543, 547, 549, 553, 557, - 561, 565, 567, 568, 574, 578, 580, 584, 586, 587, - 597, 599, 601, 606, 608, 610, 613, 617, 618, 620, - 622, 624, 626, 628, 630, 632, 634, 636, 640, 642, - 648, 650, 652, 654, 656, 658, 660, 663, 666, 669, - 673, 676, 677, 679, 682, 685, 689, 699, 709, 718, - 733, 735, 737, 744, 750, 753, 760, 768, 772, 778, - 779, 780, 784, 787, 789, 795, 801, 808, 815, 820, - 827, 832, 837, 844, 851, 854, 863, 865, 867, 868, - 872, 879, 883, 890, 893, 899, 907 -}; -static const short yyrhs[] = { 68, - 0, 69, 0, 70, 0, 71, 0, 72, 0, 73, - 0, 74, 0, 75, 0, 76, 0, 80, 0, 81, - 0, 82, 0, 77, 0, 78, 0, 79, 0, 111, - 0, 112, 0, 113, 0, 114, 0, 115, 0, 116, - 0, 117, 0, 118, 0, 119, 0, 120, 0, 121, - 0, 122, 0, 85, 0, 86, 0, 87, 0, 88, - 0, 89, 0, 90, 0, 91, 0, 92, 0, 93, - 0, 94, 0, 95, 0, 96, 0, 97, 0, 98, - 0, 99, 0, 100, 0, 101, 0, 102, 0, 103, - 0, 104, 0, 91, 0, 92, 0, 93, 0, 94, - 0, 22, 0, 23, 0, 11, 0, 12, 0, 13, - 0, 16, 0, 19, 0, 156, 0, 0, 156, 135, - 0, 0, 17, 0, 20, 0, 159, 135, 0, 0, - 37, 0, 39, 0, 38, 0, 40, 0, 42, 0, - 41, 0, 43, 0, 45, 0, 0, 134, 0, 0, - 41, 0, 43, 0, 0, 37, 0, 38, 0, 39, - 0, 42, 0, 0, 56, 0, 57, 0, 58, 0, - 59, 0, 60, 0, 55, 4, 0, 112, 0, 113, - 0, 130, 0, 131, 0, 0, 168, 167, 0, 129, - 0, 132, 0, 167, 0, 0, 170, 169, 0, 0, - 48, 4, 0, 0, 136, 48, 4, 0, 30, 19, - 0, 0, 173, 0, 0, 136, 176, 175, 0, 173, - 0, 48, 4, 0, 11, 0, 12, 0, 13, 0, - 14, 0, 44, 0, 177, 0, 178, 137, 0, 211, - 0, 138, 4, 0, 178, 139, 182, 140, 170, 0, - 10, 139, 182, 140, 170, 0, 141, 4, 142, 178, - 143, 0, 144, 4, 142, 178, 145, 0, 146, 183, - 147, 0, 146, 147, 0, 144, 146, 183, 147, 145, - 0, 144, 146, 147, 145, 0, 178, 168, 0, 178, - 0, 10, 0, 179, 0, 181, 136, 179, 0, 181, - 0, 181, 136, 34, 0, 34, 0, 0, 178, 0, - 183, 136, 178, 0, 178, 141, 186, 143, 0, 178, - 141, 143, 0, 178, 148, 19, 0, 178, 144, 186, - 145, 0, 178, 146, 186, 147, 0, 178, 146, 147, - 0, 178, 144, 146, 186, 147, 145, 0, 178, 144, - 146, 147, 145, 0, 178, 35, 0, 178, 36, 0, - 178, 211, 0, 178, 185, 0, 178, 21, 0, 154, - 3, 0, 154, 5, 0, 154, 4, 0, 154, 6, - 0, 11, 22, 0, 11, 23, 0, 155, 9, 0, - 151, 139, 184, 33, 178, 140, 0, 110, 139, 184, - 222, 140, 0, 124, 139, 184, 136, 184, 136, 184, - 140, 0, 149, 139, 184, 136, 184, 140, 0, 150, - 139, 184, 136, 184, 140, 0, 83, 152, 139, 184, - 136, 184, 140, 0, 84, 153, 139, 184, 136, 184, - 140, 0, 126, 139, 184, 136, 184, 140, 0, 127, - 139, 184, 136, 184, 136, 184, 140, 0, 128, 139, - 184, 136, 184, 136, 184, 140, 0, 186, 136, 184, - 0, 184, 0, 28, 0, 29, 0, 32, 0, 0, - 190, 0, 0, 191, 0, 190, 191, 0, 0, 27, - 192, 207, 0, 0, 26, 193, 208, 0, 53, 52, - 197, 0, 158, 15, 178, 0, 158, 15, 10, 0, - 0, 160, 163, 188, 187, 184, 194, 175, 0, 0, - 160, 161, 163, 188, 187, 184, 195, 175, 0, 0, - 160, 162, 163, 188, 187, 178, 196, 175, 0, 46, - 198, 0, 49, 135, 199, 0, 19, 0, 47, 135, - 19, 0, 61, 135, 19, 0, 141, 200, 143, 0, - 200, 136, 19, 0, 19, 0, 0, 201, 136, 178, - 168, 157, 0, 178, 168, 157, 0, 201, 0, 201, - 136, 34, 0, 34, 0, 0, 166, 180, 159, 139, - 202, 140, 170, 174, 171, 0, 24, 0, 146, 0, - 165, 163, 203, 204, 0, 25, 0, 147, 0, 214, - 206, 0, 164, 163, 203, 0, 0, 54, 0, 3, - 0, 4, 0, 9, 0, 22, 0, 23, 0, 35, - 0, 36, 0, 21, 0, 144, 186, 145, 0, 185, - 0, 52, 209, 19, 136, 19, 0, 7, 0, 8, - 0, 156, 0, 159, 0, 211, 0, 210, 0, 178, - 212, 0, 214, 215, 0, 205, 215, 0, 216, 158, - 217, 0, 216, 219, 0, 0, 18, 0, 62, 213, - 0, 62, 10, 0, 63, 14, 212, 0, 63, 11, - 212, 136, 14, 212, 136, 14, 212, 0, 64, 154, - 212, 136, 14, 212, 141, 218, 143, 0, 64, 154, - 212, 136, 14, 212, 141, 143, 0, 65, 166, 180, - 212, 139, 221, 140, 170, 33, 14, 212, 66, 14, - 212, 0, 66, 0, 67, 0, 218, 154, 210, 136, - 14, 212, 0, 154, 210, 136, 14, 212, 0, 158, - 224, 0, 178, 141, 212, 136, 212, 143, 0, 220, - 136, 141, 212, 136, 212, 143, 0, 178, 212, 168, - 0, 221, 136, 178, 212, 168, 0, 0, 0, 222, - 136, 213, 0, 51, 50, 0, 50, 0, 149, 178, - 212, 136, 212, 0, 150, 178, 212, 136, 212, 0, - 83, 152, 178, 212, 136, 212, 0, 84, 153, 178, - 212, 136, 212, 0, 151, 213, 33, 178, 0, 124, - 213, 136, 213, 136, 213, 0, 125, 213, 136, 178, - 0, 126, 213, 136, 213, 0, 127, 213, 136, 213, - 136, 213, 0, 128, 213, 136, 213, 136, 213, 0, - 123, 220, 0, 223, 166, 180, 212, 139, 221, 140, - 170, 0, 226, 0, 31, 0, 0, 105, 178, 172, - 0, 105, 178, 136, 11, 212, 172, 0, 106, 178, - 172, 0, 106, 178, 136, 11, 212, 172, 0, 107, - 213, 0, 225, 108, 178, 212, 172, 0, 225, 109, - 213, 136, 178, 212, 172, 0, 110, 178, 212, 222, - 0 -}; +/* Line 216 of yacc.c. */ +#line 1358 "llvmAsmParser.tab.c" +#ifdef short +# undef short #endif -#if YYDEBUG != 0 -static const short yyrline[] = { 0, - 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1094, - 1094, 1094, 1094, 1094, 1094, 1095, 1095, 1095, 1095, 1095, - 1095, 1095, 1096, 1096, 1096, 1096, 1096, 1099, 1099, 1100, - 1100, 1101, 1101, 1102, 1102, 1103, 1103, 1107, 1107, 1108, - 1108, 1109, 1109, 1110, 1110, 1111, 1111, 1112, 1112, 1113, - 1113, 1114, 1115, 1120, 1121, 1121, 1123, 1123, 1124, 1124, - 1128, 1132, 1137, 1137, 1139, 1143, 1149, 1150, 1151, 1152, - 1153, 1157, 1158, 1159, 1163, 1164, 1168, 1169, 1170, 1174, - 1175, 1176, 1177, 1178, 1181, 1181, 1182, 1183, 1184, 1185, - 1186, 1194, 1195, 1196, 1197, 1200, 1201, 1206, 1207, 1208, - 1211, 1212, 1219, 1219, 1226, 1226, 1235, 1243, 1243, 1249, - 1249, 1251, 1256, 1269, 1269, 1269, 1269, 1272, 1276, 1280, - 1287, 1292, 1300, 1330, 1361, 1366, 1378, 1388, 1392, 1402, - 1409, 1416, 1423, 1428, 1433, 1440, 1441, 1448, 1455, 1463, - 1469, 1481, 1509, 1525, 1554, 1582, 1607, 1626, 1652, 1672, - 1684, 1691, 1757, 1767, 1777, 1783, 1793, 1799, 1809, 1814, - 1819, 1827, 1839, 1861, 1869, 1875, 1886, 1891, 1896, 1902, - 1908, 1917, 1921, 1929, 1929, 1932, 1932, 1943, 1948, 1956, - 1957, 1961, 1961, 1965, 1965, 1968, 1971, 1995, 2006, 2013, - 2016, 2021, 2024, 2030, 2034, 2037, 2043, 2056, 2060, 2065, - 2067, 2072, 2077, 2086, 2096, 2107, 2111, 2120, 2129, 2134, - 2256, 2256, 2258, 2267, 2267, 2269, 2274, 2286, 2290, 2295, - 2299, 2303, 2307, 2311, 2315, 2319, 2323, 2327, 2352, 2356, - 2370, 2374, 2378, 2382, 2388, 2388, 2394, 2403, 2407, 2416, - 2425, 2434, 2438, 2443, 2447, 2451, 2456, 2466, 2485, 2494, - 2574, 2578, 2585, 2596, 2609, 2619, 2630, 2640, 2649, 2658, - 2661, 2662, 2669, 2673, 2678, 2699, 2716, 2730, 2744, 2756, - 2764, 2771, 2777, 2783, 2789, 2804, 2889, 2894, 2898, 2905, - 2912, 2920, 2927, 2935, 2943, 2957, 2974 -}; +#ifdef YYTYPE_UINT8 +typedef YYTYPE_UINT8 yytype_uint8; +#else +typedef unsigned char yytype_uint8; #endif +#ifdef YYTYPE_INT8 +typedef YYTYPE_INT8 yytype_int8; +#elif (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +typedef signed char yytype_int8; +#else +typedef short int yytype_int8; +#endif -#if YYDEBUG != 0 || defined (YYERROR_VERBOSE) +#ifdef YYTYPE_UINT16 +typedef YYTYPE_UINT16 yytype_uint16; +#else +typedef unsigned short int yytype_uint16; +#endif -static const char * const yytname[] = { "$","error","$undefined.","ESINT64VAL", -"EUINT64VAL","ESAPINTVAL","EUAPINTVAL","LOCALVAL_ID","GLOBALVAL_ID","FPVAL", -"VOID","INTTYPE","FLOAT","DOUBLE","LABEL","TYPE","LOCALVAR","GLOBALVAR","LABELSTR", -"STRINGCONSTANT","ATSTRINGCONSTANT","ZEROINITIALIZER","TRUETOK","FALSETOK","BEGINTOK", -"ENDTOK","DECLARE","DEFINE","GLOBAL","CONSTANT","SECTION","VOLATILE","THREAD_LOCAL", -"TO","DOTDOTDOT","NULL_TOK","UNDEF","INTERNAL","LINKONCE","WEAK","APPENDING", -"DLLIMPORT","DLLEXPORT","EXTERN_WEAK","OPAQUE","EXTERNAL","TARGET","TRIPLE", -"ALIGN","DEPLIBS","CALL","TAIL","ASM_TOK","MODULE","SIDEEFFECT","CC_TOK","CCC_TOK", -"FASTCC_TOK","COLDCC_TOK","X86_STDCALLCC_TOK","X86_FASTCALLCC_TOK","DATALAYOUT", -"RET","BR","SWITCH","INVOKE","UNWIND","UNREACHABLE","ADD","SUB","MUL","UDIV", -"SDIV","FDIV","UREM","SREM","FREM","AND","OR","XOR","SHL","LSHR","ASHR","ICMP", -"FCMP","EQ","NE","SLT","SGT","SLE","SGE","ULT","UGT","ULE","UGE","OEQ","ONE", -"OLT","OGT","OLE","OGE","ORD","UNO","UEQ","UNE","MALLOC","ALLOCA","FREE","LOAD", -"STORE","GETELEMENTPTR","TRUNC","ZEXT","SEXT","FPTRUNC","FPEXT","BITCAST","UITOFP", -"SITOFP","FPTOUI","FPTOSI","INTTOPTR","PTRTOINT","PHI_TOK","SELECT","VAARG", -"EXTRACTELEMENT","INSERTELEMENT","SHUFFLEVECTOR","NORETURN","INREG","SRET","NOUNWIND", -"DEFAULT","HIDDEN","'='","','","'*'","'\\\\'","'('","')'","'['","'x'","']'", -"'<'","'>'","'{'","'}'","'c'","ArithmeticOps","LogicalOps","CastOps","IPredicates", -"FPredicates","IntType","FPType","LocalName","OptLocalName","OptLocalAssign", -"GlobalName","OptGlobalAssign","GVInternalLinkage","GVExternalLinkage","GVVisibilityStyle", -"FunctionDeclareLinkage","FunctionDefineLinkage","OptCallingConv","ParamAttr", -"OptParamAttrs","FuncAttr","OptFuncAttrs","OptAlign","OptCAlign","SectionString", -"OptSection","GlobalVarAttributes","GlobalVarAttribute","PrimType","Types","ArgType", -"ResultTypes","ArgTypeList","ArgTypeListI","TypeListI","ConstVal","ConstExpr", -"ConstVector","GlobalType","ThreadLocal","Module","DefinitionList","Definition", -"@1","@2","@3","@4","@5","AsmBlock","TargetDefinition","LibrariesDefinition", -"LibList","ArgListH","ArgList","FunctionHeaderH","BEGIN","FunctionHeader","END", -"Function","FunctionProto","OptSideEffect","ConstValueRef","SymbolicValueRef", -"ValueRef","ResolvedVal","BasicBlockList","BasicBlock","InstructionList","BBTerminatorInst", -"JumpTable","Inst","PHIList","ValueRefList","IndexList","OptTailCall","InstVal", -"OptVolatile","MemoryInst", NULL -}; +#ifdef YYTYPE_INT16 +typedef YYTYPE_INT16 yytype_int16; +#else +typedef short int yytype_int16; #endif -static const short yyr1[] = { 0, - 149, 149, 149, 149, 149, 149, 149, 149, 149, 150, - 150, 150, 150, 150, 150, 151, 151, 151, 151, 151, - 151, 151, 151, 151, 151, 151, 151, 152, 152, 152, - 152, 152, 152, 152, 152, 152, 152, 153, 153, 153, - 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, - 153, 153, 153, 154, 155, 155, 156, 156, 157, 157, - 158, 158, 159, 159, 160, 160, 161, 161, 161, 161, - 161, 162, 162, 162, 163, 163, 164, 164, 164, 165, - 165, 165, 165, 165, 166, 166, 166, 166, 166, 166, - 166, 167, 167, 167, 167, 168, 168, 169, 169, 169, - 170, 170, 171, 171, 172, 172, 173, 174, 174, 175, - 175, 176, 176, 177, 177, 177, 177, 178, 178, 178, - 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, - 179, 180, 180, 181, 181, 182, 182, 182, 182, 183, - 183, 184, 184, 184, 184, 184, 184, 184, 184, 184, - 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, - 184, 185, 185, 185, 185, 185, 185, 185, 185, 185, - 185, 186, 186, 187, 187, 188, 188, 189, 189, 190, - 190, 192, 191, 193, 191, 191, 191, 191, 194, 191, - 195, 191, 196, 191, 191, 191, 197, 198, 198, 199, - 200, 200, 200, 201, 201, 202, 202, 202, 202, 203, - 204, 204, 205, 206, 206, 207, 208, 209, 209, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 211, 211, 211, 211, 212, 212, 213, 214, 214, 215, - 216, 216, 216, 217, 217, 217, 217, 217, 217, 217, - 217, 217, 218, 218, 219, 220, 220, 221, 221, 221, - 222, 222, 223, 223, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 225, 225, 226, - 226, 226, 226, 226, 226, 226, 226 -}; +#ifndef YYSIZE_T +# ifdef __SIZE_TYPE__ +# define YYSIZE_T __SIZE_TYPE__ +# elif defined size_t +# define YYSIZE_T size_t +# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +# include /* INFRINGES ON USER NAME SPACE */ +# define YYSIZE_T size_t +# else +# define YYSIZE_T unsigned int +# endif +#endif + +#define YYSIZE_MAXIMUM ((YYSIZE_T) -1) + +#ifndef YY_ +# if YYENABLE_NLS +# if ENABLE_NLS +# include /* INFRINGES ON USER NAME SPACE */ +# define YY_(msgid) dgettext ("bison-runtime", msgid) +# endif +# endif +# ifndef YY_ +# define YY_(msgid) msgid +# endif +#endif + +/* Suppress unused-variable warnings by "using" E. */ +#if ! defined lint || defined __GNUC__ +# define YYUSE(e) ((void) (e)) +#else +# define YYUSE(e) /* empty */ +#endif -static const short yyr2[] = { 0, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, - 2, 0, 1, 1, 2, 0, 1, 1, 1, 1, - 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, - 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, - 2, 1, 1, 1, 1, 0, 2, 1, 1, 1, - 0, 2, 0, 2, 0, 3, 2, 0, 1, 0, - 3, 1, 2, 1, 1, 1, 1, 1, 1, 2, - 1, 2, 5, 5, 5, 5, 3, 2, 5, 4, - 2, 1, 1, 1, 3, 1, 3, 1, 0, 1, - 3, 4, 3, 3, 4, 4, 3, 6, 5, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 6, 5, 8, 6, 6, 7, 7, 6, 8, - 8, 3, 1, 1, 1, 1, 0, 1, 0, 1, - 2, 0, 3, 0, 3, 3, 3, 3, 0, 7, - 0, 8, 0, 8, 2, 3, 1, 3, 3, 3, - 3, 1, 0, 5, 3, 1, 3, 1, 0, 9, - 1, 1, 4, 1, 1, 2, 3, 0, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 3, 1, 5, - 1, 1, 1, 1, 1, 1, 2, 2, 2, 3, - 2, 0, 1, 2, 2, 3, 9, 9, 8, 14, - 1, 1, 6, 5, 2, 6, 7, 3, 5, 0, - 0, 3, 2, 1, 5, 5, 6, 6, 4, 6, - 4, 4, 6, 6, 2, 8, 1, 1, 0, 3, - 6, 3, 6, 2, 5, 7, 4 -}; +/* Identity function, used to suppress warnings about constant conditions. */ +#ifndef lint +# define YYID(n) (n) +#else +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static int +YYID (int i) +#else +static int +YYID (i) + int i; +#endif +{ + return i; +} +#endif -static const short yydefact[] = { 66, - 57, 63, 58, 64, 184, 182, 0, 0, 0, 0, - 0, 0, 75, 66, 180, 77, 80, 0, 0, 195, - 0, 0, 61, 0, 65, 67, 69, 68, 70, 72, - 71, 73, 74, 76, 75, 75, 177, 181, 78, 79, - 75, 185, 81, 82, 83, 84, 75, 242, 183, 242, - 0, 0, 203, 196, 197, 186, 231, 232, 188, 114, - 115, 116, 117, 118, 0, 0, 0, 0, 233, 234, - 119, 187, 121, 177, 177, 176, 0, 85, 85, 243, - 239, 62, 214, 215, 216, 238, 198, 199, 202, 0, - 139, 122, 0, 0, 0, 0, 128, 140, 0, 120, - 139, 0, 0, 174, 175, 0, 0, 86, 87, 88, - 89, 90, 0, 217, 0, 279, 241, 0, 200, 138, - 96, 134, 136, 0, 0, 0, 0, 0, 0, 127, - 0, 0, 0, 114, 115, 116, 0, 0, 0, 189, - 91, 133, 132, 0, 211, 212, 213, 278, 264, 0, - 0, 0, 0, 85, 251, 252, 1, 2, 3, 4, - 5, 6, 7, 8, 9, 13, 14, 15, 10, 11, - 12, 0, 0, 0, 0, 0, 0, 16, 17, 18, - 19, 20, 21, 22, 23, 24, 25, 26, 27, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 240, 85, - 255, 0, 277, 201, 131, 0, 101, 0, 0, 130, - 0, 141, 101, 191, 193, 159, 160, 155, 157, 156, - 158, 161, 154, 150, 151, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 153, - 152, 110, 0, 263, 245, 0, 244, 0, 0, 54, - 0, 0, 28, 29, 30, 31, 32, 33, 34, 35, - 36, 37, 0, 52, 53, 48, 49, 50, 51, 38, - 39, 40, 41, 42, 43, 44, 45, 46, 47, 0, - 105, 105, 284, 0, 0, 275, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 92, 93, 94, - 95, 97, 137, 135, 124, 125, 126, 129, 123, 110, - 110, 0, 0, 0, 0, 0, 0, 0, 143, 173, - 0, 0, 0, 147, 0, 144, 0, 0, 0, 0, - 190, 209, 220, 221, 222, 227, 223, 224, 225, 226, - 218, 0, 229, 236, 235, 237, 0, 246, 0, 0, - 0, 0, 0, 280, 0, 282, 261, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 98, 99, 100, 102, 192, 194, 0, 0, 261, 0, - 0, 0, 0, 0, 142, 128, 140, 0, 145, 146, - 0, 0, 0, 0, 0, 112, 110, 208, 96, 206, - 0, 219, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 287, 0, 0, 0, 271, 272, 0, 0, - 0, 0, 269, 0, 105, 0, 0, 0, 0, 0, - 0, 0, 0, 172, 149, 0, 0, 0, 0, 107, - 113, 111, 60, 0, 101, 0, 228, 0, 0, 260, - 0, 0, 105, 106, 105, 0, 0, 0, 0, 0, - 0, 265, 266, 260, 0, 285, 0, 0, 0, 163, - 0, 0, 0, 0, 148, 0, 0, 0, 59, 205, - 207, 96, 108, 0, 0, 0, 0, 0, 267, 268, - 281, 283, 262, 0, 0, 270, 273, 274, 0, 105, - 0, 0, 0, 169, 0, 0, 165, 166, 162, 60, - 109, 103, 230, 0, 0, 96, 0, 101, 256, 0, - 101, 286, 167, 168, 0, 0, 0, 204, 0, 210, - 0, 249, 0, 0, 258, 0, 0, 257, 276, 164, - 170, 171, 104, 247, 0, 248, 0, 96, 0, 0, - 0, 259, 0, 0, 0, 0, 254, 0, 0, 253, - 0, 250, 0, 0, 0 -}; +#if ! defined yyoverflow || YYERROR_VERBOSE -static const short yydefgoto[] = { 237, - 238, 239, 263, 280, 137, 138, 69, 480, 11, 70, - 13, 35, 36, 37, 41, 47, 113, 302, 205, 374, - 305, 530, 354, 396, 512, 331, 397, 71, 139, 122, - 144, 123, 124, 99, 320, 343, 321, 106, 77, 563, - 14, 15, 17, 16, 242, 310, 311, 56, 20, 54, - 90, 400, 401, 114, 147, 48, 85, 49, 42, 403, - 344, 73, 346, 247, 50, 81, 82, 199, 534, 117, - 286, 488, 413, 200, 201, 202, 203 +/* The parser invokes alloca or malloc; define the necessary symbols. */ + +# ifdef YYSTACK_USE_ALLOCA +# if YYSTACK_USE_ALLOCA +# ifdef __GNUC__ +# define YYSTACK_ALLOC __builtin_alloca +# elif defined __BUILTIN_VA_ARG_INCR +# include /* INFRINGES ON USER NAME SPACE */ +# elif defined _AIX +# define YYSTACK_ALLOC __alloca +# elif defined _MSC_VER +# include /* INFRINGES ON USER NAME SPACE */ +# define alloca _alloca +# else +# define YYSTACK_ALLOC alloca +# if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +# include /* INFRINGES ON USER NAME SPACE */ +# ifndef _STDLIB_H +# define _STDLIB_H 1 +# endif +# endif +# endif +# endif +# endif + +# ifdef YYSTACK_ALLOC + /* Pacify GCC's `empty if-body' warning. */ +# define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0)) +# ifndef YYSTACK_ALLOC_MAXIMUM + /* The OS might guarantee only one guard page at the bottom of the stack, + and a page size can be as small as 4096 bytes. So we cannot safely + invoke alloca (N) if N exceeds 4096. Use a slightly smaller number + to allow for a few compiler-allocated temporary stack slots. */ +# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ +# endif +# else +# define YYSTACK_ALLOC YYMALLOC +# define YYSTACK_FREE YYFREE +# ifndef YYSTACK_ALLOC_MAXIMUM +# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM +# endif +# if (defined __cplusplus && ! defined _STDLIB_H \ + && ! ((defined YYMALLOC || defined malloc) \ + && (defined YYFREE || defined free))) +# include /* INFRINGES ON USER NAME SPACE */ +# ifndef _STDLIB_H +# define _STDLIB_H 1 +# endif +# endif +# ifndef YYMALLOC +# define YYMALLOC malloc +# if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ +# endif +# endif +# ifndef YYFREE +# define YYFREE free +# if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +void free (void *); /* INFRINGES ON USER NAME SPACE */ +# endif +# endif +# endif +#endif /* ! defined yyoverflow || YYERROR_VERBOSE */ + + +#if (! defined yyoverflow \ + && (! defined __cplusplus \ + || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) + +/* A type that is properly aligned for any stack member. */ +union yyalloc +{ + yytype_int16 yyss; + YYSTYPE yyvs; + }; + +/* The size of the maximum gap between one aligned stack and the next. */ +# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) + +/* The size of an array large to enough to hold all stacks, each with + N elements. */ +# define YYSTACK_BYTES(N) \ + ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ + + YYSTACK_GAP_MAXIMUM) + +/* Copy COUNT objects from FROM to TO. The source and destination do + not overlap. */ +# ifndef YYCOPY +# if defined __GNUC__ && 1 < __GNUC__ +# define YYCOPY(To, From, Count) \ + __builtin_memcpy (To, From, (Count) * sizeof (*(From))) +# else +# define YYCOPY(To, From, Count) \ + do \ + { \ + YYSIZE_T yyi; \ + for (yyi = 0; yyi < (Count); yyi++) \ + (To)[yyi] = (From)[yyi]; \ + } \ + while (YYID (0)) +# endif +# endif + +/* Relocate STACK from its old location to the new one. The + local variables YYSIZE and YYSTACKSIZE give the old and new number of + elements in the stack, and YYPTR gives the new location of the + stack. Advance YYPTR to a properly aligned location for the next + stack. */ +# define YYSTACK_RELOCATE(Stack) \ + do \ + { \ + YYSIZE_T yynewbytes; \ + YYCOPY (&yyptr->Stack, Stack, yysize); \ + Stack = &yyptr->Stack; \ + yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ + yyptr += yynewbytes / sizeof (*yyptr); \ + } \ + while (YYID (0)) + +#endif + +/* YYFINAL -- State number of the termination state. */ +#define YYFINAL 41 +/* YYLAST -- Last index in YYTABLE. */ +#define YYLAST 1455 + +/* YYNTOKENS -- Number of terminals. */ +#define YYNTOKENS 150 +/* YYNNTS -- Number of nonterminals. */ +#define YYNNTS 81 +/* YYNRULES -- Number of rules. */ +#define YYNRULES 294 +/* YYNRULES -- Number of states. */ +#define YYNSTATES 573 + +/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ +#define YYUNDEFTOK 2 +#define YYMAXUTOK 390 + +#define YYTRANSLATE(YYX) \ + ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) + +/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ +static const yytype_uint8 yytranslate[] = +{ + 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 140, 141, 138, 2, 137, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 145, 136, 146, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 142, 139, 144, 2, 2, 2, 2, 2, 149, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 143, 2, 2, 147, 2, 148, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, + 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, + 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, + 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, + 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, + 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, + 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, + 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, + 135 }; -static const short yypact[] = { 593, --32768,-32768,-32768,-32768,-32768,-32768, -1, -87, 11, -41, - 89, -13, 46, 1408,-32768, 185, 82, 13, 55,-32768, - 81, 211,-32768, 1122,-32768,-32768,-32768,-32768,-32768,-32768, --32768,-32768,-32768,-32768, 98, 98, 206,-32768,-32768,-32768, - 98,-32768,-32768,-32768,-32768,-32768, 98, 235,-32768, 8, - 242, 251, 252,-32768,-32768,-32768,-32768,-32768, 128,-32768, --32768,-32768,-32768,-32768, 272, 274, 4, 122,-32768,-32768, --32768, 61,-32768, 206, 206,-32768, 183, 290, 290,-32768, --32768, 121,-32768,-32768,-32768,-32768,-32768,-32768,-32768, -92, - 979,-32768, 137, 139, 284, 128,-32768, 61, -70,-32768, - 979, 183, 183,-32768,-32768, 1136, 278,-32768,-32768,-32768, --32768,-32768, 1178,-32768, -15, 1277,-32768, 264,-32768,-32768, - 61,-32768, 148, 153, 1192, 1192, 160, -66, 1192,-32768, - 162, 1136, 1192, 32, 297, 298, 215, 301, 761,-32768, --32768, 128, 61, 145,-32768,-32768,-32768,-32768,-32768, 262, - 1234, 248, 304, 290,-32768,-32768,-32768,-32768,-32768,-32768, --32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, --32768, 157, 422, 1192, 1192, 1192, 1192,-32768,-32768,-32768, --32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 1192, - 1192, 1192, 1192, 1192, 1192, 1192, 1192, 1192,-32768, 290, --32768, -34,-32768,-32768, -33, 1019,-32768, 71, -22,-32768, - 173, 61,-32768,-32768, 61,-32768,-32768,-32768,-32768,-32768, --32768,-32768,-32768,-32768,-32768, 157, 422, 180, 181, 182, - 184, 186, 1038, 1276, 448, 305, 187, 188, 191,-32768, --32768, 193, 192,-32768, 128, 614,-32768, 740, 740,-32768, - 740, 1178,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, --32768,-32768, 1192,-32768,-32768,-32768,-32768,-32768,-32768,-32768, --32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 1192, - 88, 119,-32768, 614, 62, 197, 198, 199, 200, 207, - 217, 614, 614, 309, 1178, 1192, 1192,-32768,-32768,-32768, --32768,-32768,-32768,-32768, -73,-32768,-32768,-32768, -73, 193, - 193, 212, 216, 1136, 1136, 1136, 1136, 1136,-32768,-32768, - -44, 933, -69,-32768, -40,-32768, 1136, 1136, 1136, -5, --32768, 1077,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, - 300, 1136,-32768,-32768,-32768,-32768, 220,-32768, 221, 740, - 614, 614, 17,-32768, 23,-32768,-32768, 740, 218, 1192, - 1192, 1192, 1192, 1192, 222, 225, 1192, 740, 614, 226, --32768,-32768,-32768,-32768,-32768,-32768, 1136, 1136,-32768, 227, - 229, 230, 231, 1136,-32768, 228, 761, -35,-32768,-32768, - 234, 236, 341, 356, 372,-32768, 193,-32768, 61, 241, - 238,-32768, 360, -36, 366, 367, 243, 253, 254, 740, - 387, 740, 256, 257, 740, 258, 61,-32768, 259, 266, - 740, 740, 61, 261, 269, 1192, 270, 271, -67, 1136, - 1136, 1136, 1136,-32768,-32768, 263, 1136, 1136, 1192,-32768, --32768,-32768, 33, 1093,-32768, 273,-32768, 740, 740, 1192, - 740, 740, 269,-32768, 269, 1192, 740, 275, 1192, 1192, - 1192,-32768,-32768, 1192, 362,-32768, 614, 1136, 1136,-32768, - 279, 277, 288, 293,-32768, 280, 292, 42,-32768,-32768, --32768, 61, 65, 395, 299, 308, 614, 7,-32768,-32768, --32768,-32768,-32768, 291, 740,-32768,-32768,-32768, 73, 269, - 302, 306, 1136,-32768, 1136, 1136,-32768,-32768,-32768, 33, --32768, 391,-32768, 426, 1,-32768, 1192,-32768,-32768, 307, --32768,-32768,-32768,-32768, 311, 312, 313,-32768, 453,-32768, - 740,-32768, 890, 18, -33, 614, 75,-32768, -73,-32768, --32768,-32768,-32768,-32768, 327,-32768, 890,-32768, 452, 455, - 337, -33, 740, 740, 460, 409,-32768, 740, 462,-32768, - 740,-32768, 477, 479,-32768 +#if YYDEBUG +/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in + YYRHS. */ +static const yytype_uint16 yyprhs[] = +{ + 0, 0, 3, 5, 7, 9, 11, 13, 15, 17, + 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, + 39, 41, 43, 45, 47, 49, 51, 53, 55, 57, + 59, 61, 63, 65, 67, 69, 71, 73, 75, 77, + 79, 81, 83, 85, 87, 89, 91, 93, 95, 97, + 99, 101, 103, 105, 107, 109, 111, 113, 115, 117, + 119, 121, 122, 125, 126, 128, 130, 132, 133, 136, + 138, 140, 142, 144, 146, 148, 150, 152, 153, 155, + 157, 158, 160, 162, 163, 165, 167, 169, 171, 172, + 174, 176, 177, 179, 181, 183, 185, 187, 190, 192, + 194, 196, 198, 199, 202, 204, 206, 208, 209, 212, + 213, 216, 217, 221, 224, 225, 227, 228, 232, 234, + 237, 239, 241, 243, 245, 247, 249, 252, 254, 257, + 263, 269, 275, 281, 285, 288, 294, 299, 302, 304, + 306, 308, 312, 314, 318, 320, 321, 323, 327, 332, + 336, 340, 345, 350, 354, 361, 367, 370, 373, 376, + 379, 382, 385, 388, 391, 394, 397, 400, 403, 410, + 416, 425, 432, 439, 447, 455, 462, 471, 480, 484, + 486, 488, 490, 492, 493, 495, 496, 498, 501, 502, + 506, 507, 511, 515, 519, 523, 524, 532, 533, 542, + 543, 552, 559, 562, 566, 568, 572, 576, 580, 584, + 586, 587, 593, 597, 599, 603, 605, 606, 616, 618, + 620, 625, 627, 629, 632, 636, 637, 639, 641, 643, + 645, 647, 649, 651, 653, 655, 659, 661, 667, 669, + 671, 673, 675, 677, 679, 682, 685, 688, 692, 695, + 696, 698, 701, 704, 708, 718, 728, 737, 752, 754, + 756, 763, 769, 772, 779, 787, 791, 797, 798, 799, + 803, 806, 808, 814, 820, 827, 834, 839, 846, 851, + 856, 863, 870, 873, 882, 884, 886, 887, 891, 898, + 902, 909, 912, 918, 926 }; -static const short yypgoto[] = { 364, - 365, 368, 260, 255, -151,-32768, 0, -27, 403, 16, --32768,-32768,-32768, 6,-32768,-32768, -139, -298, -389,-32768, - -210,-32768, -269, 10,-32768, -279,-32768,-32768, -23, 281, - -233,-32768, 389, 396, 70, -133, -217, 134, 190,-32768, --32768, 481,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, --32768,-32768,-32768, 417,-32768,-32768,-32768,-32768,-32768,-32768, - -483, -135, 120, -171,-32768, 447,-32768,-32768,-32768,-32768, --32768, 34, 125,-32768,-32768,-32768,-32768 +/* YYRHS -- A `-1'-separated list of the rules' RHS. */ +static const yytype_int16 yyrhs[] = +{ + 193, 0, -1, 69, -1, 70, -1, 71, -1, 72, + -1, 73, -1, 74, -1, 75, -1, 76, -1, 77, + -1, 81, -1, 82, -1, 83, -1, 78, -1, 79, + -1, 80, -1, 112, -1, 113, -1, 114, -1, 115, + -1, 116, -1, 117, -1, 118, -1, 119, -1, 120, + -1, 121, -1, 122, -1, 123, -1, 86, -1, 87, + -1, 88, -1, 89, -1, 90, -1, 91, -1, 92, + -1, 93, -1, 94, -1, 95, -1, 96, -1, 97, + -1, 98, -1, 99, -1, 100, -1, 101, -1, 102, + -1, 103, -1, 104, -1, 105, -1, 92, -1, 93, + -1, 94, -1, 95, -1, 22, -1, 23, -1, 11, + -1, 12, -1, 13, -1, 16, -1, 19, -1, 158, + -1, -1, 158, 136, -1, -1, 17, -1, 20, -1, + 163, -1, -1, 161, 136, -1, 38, -1, 40, -1, + 39, -1, 41, -1, 43, -1, 42, -1, 44, -1, + 46, -1, -1, 134, -1, 135, -1, -1, 42, -1, + 44, -1, -1, 38, -1, 39, -1, 40, -1, 43, + -1, -1, 40, -1, 38, -1, -1, 57, -1, 58, + -1, 59, -1, 60, -1, 61, -1, 56, 4, -1, + 113, -1, 114, -1, 131, -1, 132, -1, -1, 172, + 171, -1, 130, -1, 133, -1, 171, -1, -1, 174, + 173, -1, -1, 49, 4, -1, -1, 137, 49, 4, + -1, 30, 19, -1, -1, 177, -1, -1, 137, 180, + 179, -1, 177, -1, 49, 4, -1, 11, -1, 12, + -1, 13, -1, 14, -1, 45, -1, 181, -1, 182, + 138, -1, 215, -1, 139, 4, -1, 182, 140, 186, + 141, 174, -1, 10, 140, 186, 141, 174, -1, 142, + 4, 143, 182, 144, -1, 145, 4, 143, 182, 146, + -1, 147, 187, 148, -1, 147, 148, -1, 145, 147, + 187, 148, 146, -1, 145, 147, 148, 146, -1, 182, + 172, -1, 182, -1, 10, -1, 183, -1, 185, 137, + 183, -1, 185, -1, 185, 137, 35, -1, 35, -1, + -1, 182, -1, 187, 137, 182, -1, 182, 142, 190, + 144, -1, 182, 142, 144, -1, 182, 149, 19, -1, + 182, 145, 190, 146, -1, 182, 147, 190, 148, -1, + 182, 147, 148, -1, 182, 145, 147, 190, 148, 146, + -1, 182, 145, 147, 148, 146, -1, 182, 36, -1, + 182, 37, -1, 182, 215, -1, 182, 189, -1, 182, + 21, -1, 156, 3, -1, 156, 5, -1, 156, 4, + -1, 156, 6, -1, 11, 22, -1, 11, 23, -1, + 157, 9, -1, 153, 140, 188, 34, 182, 141, -1, + 111, 140, 188, 226, 141, -1, 125, 140, 188, 137, + 188, 137, 188, 141, -1, 151, 140, 188, 137, 188, + 141, -1, 152, 140, 188, 137, 188, 141, -1, 84, + 154, 140, 188, 137, 188, 141, -1, 85, 155, 140, + 188, 137, 188, 141, -1, 127, 140, 188, 137, 188, + 141, -1, 128, 140, 188, 137, 188, 137, 188, 141, + -1, 129, 140, 188, 137, 188, 137, 188, 141, -1, + 190, 137, 188, -1, 188, -1, 28, -1, 29, -1, + 33, -1, -1, 194, -1, -1, 195, -1, 194, 195, + -1, -1, 27, 196, 211, -1, -1, 26, 197, 212, + -1, 54, 53, 201, -1, 160, 15, 182, -1, 160, + 15, 10, -1, -1, 162, 166, 192, 191, 188, 198, + 179, -1, -1, 162, 164, 166, 192, 191, 188, 199, + 179, -1, -1, 162, 165, 166, 192, 191, 182, 200, + 179, -1, 162, 166, 31, 169, 184, 215, -1, 47, + 202, -1, 50, 136, 203, -1, 19, -1, 48, 136, + 19, -1, 62, 136, 19, -1, 142, 204, 144, -1, + 204, 137, 19, -1, 19, -1, -1, 205, 137, 182, + 172, 159, -1, 182, 172, 159, -1, 205, -1, 205, + 137, 35, -1, 35, -1, -1, 170, 184, 161, 140, + 206, 141, 174, 178, 175, -1, 24, -1, 147, -1, + 168, 166, 207, 208, -1, 25, -1, 148, -1, 218, + 210, -1, 167, 166, 207, -1, -1, 55, -1, 3, + -1, 4, -1, 9, -1, 22, -1, 23, -1, 36, + -1, 37, -1, 21, -1, 145, 190, 146, -1, 189, + -1, 53, 213, 19, 137, 19, -1, 7, -1, 8, + -1, 158, -1, 161, -1, 215, -1, 214, -1, 182, + 216, -1, 218, 219, -1, 209, 219, -1, 220, 160, + 221, -1, 220, 223, -1, -1, 18, -1, 63, 217, + -1, 63, 10, -1, 64, 14, 216, -1, 64, 11, + 216, 137, 14, 216, 137, 14, 216, -1, 65, 156, + 216, 137, 14, 216, 142, 222, 144, -1, 65, 156, + 216, 137, 14, 216, 142, 144, -1, 66, 170, 184, + 216, 140, 225, 141, 174, 34, 14, 216, 67, 14, + 216, -1, 67, -1, 68, -1, 222, 156, 214, 137, + 14, 216, -1, 156, 214, 137, 14, 216, -1, 160, + 228, -1, 182, 142, 216, 137, 216, 144, -1, 224, + 137, 142, 216, 137, 216, 144, -1, 182, 216, 172, + -1, 225, 137, 182, 216, 172, -1, -1, -1, 226, + 137, 217, -1, 52, 51, -1, 51, -1, 151, 182, + 216, 137, 216, -1, 152, 182, 216, 137, 216, -1, + 84, 154, 182, 216, 137, 216, -1, 85, 155, 182, + 216, 137, 216, -1, 153, 217, 34, 182, -1, 125, + 217, 137, 217, 137, 217, -1, 126, 217, 137, 182, + -1, 127, 217, 137, 217, -1, 128, 217, 137, 217, + 137, 217, -1, 129, 217, 137, 217, 137, 217, -1, + 124, 224, -1, 227, 170, 184, 216, 140, 225, 141, + 174, -1, 230, -1, 32, -1, -1, 106, 182, 176, + -1, 106, 182, 137, 11, 216, 176, -1, 107, 182, + 176, -1, 107, 182, 137, 11, 216, 176, -1, 108, + 217, -1, 229, 109, 182, 216, 176, -1, 229, 110, + 217, 137, 182, 216, 176, -1, 111, 182, 216, 226, + -1 }; +/* YYRLINE[YYN] -- source line where rule number YYN was defined. */ +static const yytype_uint16 yyrline[] = +{ + 0, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, + 1094, 1095, 1095, 1095, 1095, 1095, 1095, 1096, 1096, 1096, + 1096, 1096, 1096, 1097, 1097, 1097, 1097, 1097, 1097, 1100, + 1100, 1101, 1101, 1102, 1102, 1103, 1103, 1104, 1104, 1108, + 1108, 1109, 1109, 1110, 1110, 1111, 1111, 1112, 1112, 1113, + 1113, 1114, 1114, 1115, 1116, 1121, 1122, 1122, 1124, 1124, + 1125, 1125, 1129, 1133, 1138, 1138, 1140, 1141, 1146, 1152, + 1153, 1154, 1155, 1156, 1160, 1161, 1162, 1166, 1167, 1168, + 1172, 1173, 1174, 1178, 1179, 1180, 1181, 1182, 1186, 1187, + 1188, 1191, 1192, 1193, 1194, 1195, 1196, 1197, 1204, 1205, + 1206, 1207, 1210, 1211, 1216, 1217, 1218, 1221, 1222, 1229, + 1230, 1236, 1237, 1245, 1253, 1254, 1259, 1260, 1261, 1266, + 1279, 1279, 1279, 1279, 1282, 1286, 1290, 1297, 1302, 1310, + 1340, 1371, 1376, 1388, 1398, 1402, 1412, 1419, 1426, 1433, + 1438, 1443, 1450, 1451, 1458, 1465, 1473, 1479, 1491, 1519, + 1535, 1564, 1592, 1617, 1636, 1662, 1682, 1694, 1701, 1767, + 1777, 1787, 1793, 1803, 1809, 1819, 1824, 1829, 1837, 1849, + 1871, 1879, 1885, 1896, 1901, 1906, 1912, 1918, 1927, 1931, + 1939, 1939, 1942, 1942, 1953, 1958, 1966, 1967, 1971, 1971, + 1975, 1975, 1978, 1981, 2005, 2016, 2016, 2026, 2026, 2034, + 2034, 2044, 2072, 2075, 2081, 2094, 2098, 2103, 2105, 2110, + 2115, 2124, 2134, 2145, 2149, 2158, 2167, 2172, 2294, 2294, + 2296, 2305, 2305, 2307, 2312, 2324, 2328, 2333, 2337, 2341, + 2345, 2349, 2353, 2357, 2361, 2365, 2390, 2394, 2408, 2412, + 2416, 2420, 2426, 2426, 2432, 2441, 2445, 2454, 2463, 2472, + 2476, 2481, 2485, 2489, 2494, 2504, 2523, 2532, 2612, 2616, + 2623, 2634, 2647, 2657, 2668, 2678, 2687, 2696, 2699, 2700, + 2707, 2711, 2716, 2737, 2754, 2768, 2782, 2794, 2802, 2809, + 2815, 2821, 2827, 2842, 2927, 2932, 2936, 2943, 2950, 2958, + 2965, 2973, 2981, 2995, 3012 +}; +#endif -#define YYLAST 1461 +#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE +/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. + First, the terminals, then, starting at YYNTOKENS, nonterminals. */ +static const char *const yytname[] = +{ + "$end", "error", "$undefined", "ESINT64VAL", "EUINT64VAL", "ESAPINTVAL", + "EUAPINTVAL", "LOCALVAL_ID", "GLOBALVAL_ID", "FPVAL", "VOID", "INTTYPE", + "FLOAT", "DOUBLE", "LABEL", "TYPE", "LOCALVAR", "GLOBALVAR", "LABELSTR", + "STRINGCONSTANT", "ATSTRINGCONSTANT", "ZEROINITIALIZER", "TRUETOK", + "FALSETOK", "BEGINTOK", "ENDTOK", "DECLARE", "DEFINE", "GLOBAL", + "CONSTANT", "SECTION", "ALIAS", "VOLATILE", "THREAD_LOCAL", "TO", + "DOTDOTDOT", "NULL_TOK", "UNDEF", "INTERNAL", "LINKONCE", "WEAK", + "APPENDING", "DLLIMPORT", "DLLEXPORT", "EXTERN_WEAK", "OPAQUE", + "EXTERNAL", "TARGET", "TRIPLE", "ALIGN", "DEPLIBS", "CALL", "TAIL", + "ASM_TOK", "MODULE", "SIDEEFFECT", "CC_TOK", "CCC_TOK", "FASTCC_TOK", + "COLDCC_TOK", "X86_STDCALLCC_TOK", "X86_FASTCALLCC_TOK", "DATALAYOUT", + "RET", "BR", "SWITCH", "INVOKE", "UNWIND", "UNREACHABLE", "ADD", "SUB", + "MUL", "UDIV", "SDIV", "FDIV", "UREM", "SREM", "FREM", "AND", "OR", + "XOR", "SHL", "LSHR", "ASHR", "ICMP", "FCMP", "EQ", "NE", "SLT", "SGT", + "SLE", "SGE", "ULT", "UGT", "ULE", "UGE", "OEQ", "ONE", "OLT", "OGT", + "OLE", "OGE", "ORD", "UNO", "UEQ", "UNE", "MALLOC", "ALLOCA", "FREE", + "LOAD", "STORE", "GETELEMENTPTR", "TRUNC", "ZEXT", "SEXT", "FPTRUNC", + "FPEXT", "BITCAST", "UITOFP", "SITOFP", "FPTOUI", "FPTOSI", "INTTOPTR", + "PTRTOINT", "PHI_TOK", "SELECT", "VAARG", "EXTRACTELEMENT", + "INSERTELEMENT", "SHUFFLEVECTOR", "NORETURN", "INREG", "SRET", + "NOUNWIND", "DEFAULT", "HIDDEN", "'='", "','", "'*'", "'\\\\'", "'('", + "')'", "'['", "'x'", "']'", "'<'", "'>'", "'{'", "'}'", "'c'", "$accept", + "ArithmeticOps", "LogicalOps", "CastOps", "IPredicates", "FPredicates", + "IntType", "FPType", "LocalName", "OptLocalName", "OptLocalAssign", + "GlobalName", "OptGlobalAssign", "GlobalAssign", "GVInternalLinkage", + "GVExternalLinkage", "GVVisibilityStyle", "FunctionDeclareLinkage", + "FunctionDefineLinkage", "AliasLinkage", "OptCallingConv", "ParamAttr", + "OptParamAttrs", "FuncAttr", "OptFuncAttrs", "OptAlign", "OptCAlign", + "SectionString", "OptSection", "GlobalVarAttributes", + "GlobalVarAttribute", "PrimType", "Types", "ArgType", "ResultTypes", + "ArgTypeList", "ArgTypeListI", "TypeListI", "ConstVal", "ConstExpr", + "ConstVector", "GlobalType", "ThreadLocal", "Module", "DefinitionList", + "Definition", "@1", "@2", "@3", "@4", "@5", "AsmBlock", + "TargetDefinition", "LibrariesDefinition", "LibList", "ArgListH", + "ArgList", "FunctionHeaderH", "BEGIN", "FunctionHeader", "END", + "Function", "FunctionProto", "OptSideEffect", "ConstValueRef", + "SymbolicValueRef", "ValueRef", "ResolvedVal", "BasicBlockList", + "BasicBlock", "InstructionList", "BBTerminatorInst", "JumpTable", "Inst", + "PHIList", "ValueRefList", "IndexList", "OptTailCall", "InstVal", + "OptVolatile", "MemoryInst", 0 +}; +#endif +# ifdef YYPRINT +/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to + token YYLEX-NUM. */ +static const yytype_uint16 yytoknum[] = +{ + 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, + 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, + 385, 386, 387, 388, 389, 390, 61, 44, 42, 92, + 40, 41, 91, 120, 93, 60, 62, 123, 125, 99 +}; +# endif -static const short yytable[] = { 10, - 72, 251, 309, 241, 283, 240, 373, 94, 145, 443, - 373, 250, 356, 10, 252, 12, 323, 325, 350, 287, - 288, 289, 290, 291, 394, 80, 294, 410, 250, 12, - 375, 376, 83, 412, -54, -54, -54, -54, 298, 299, - 74, 75, 395, 118, 98, 18, 78, 21, 1, 545, - 119, 3, 79, 216, 217, 371, 300, 301, 372, 19, - 295, 368, 22, 551, 411, 129, 384, 121, 456, 129, - 411, 98, 470, 296, 297, 389, 130, 121, 298, 299, - 211, 10, 26, 27, 28, 29, 30, 31, 32, 143, - 33, 384, 510, 23, 394, 384, 300, 301, 385, 384, - 384, 208, 209, 24, 388, 212, 390, 549, 447, 215, - 345, 436, 345, 345, 100, 345, 101, 442, 43, 44, - 45, 25, 307, 46, 404, 370, 535, 246, 57, 58, - 146, 96, 60, 61, 62, 63, 1, 1, 2, 3, - 3, 4, 517, 532, 298, 299, 518, 51, 345, 95, - 281, 282, 246, 284, 84, 466, 345, 345, 552, 243, - 546, 2, 300, 301, 4, 64, 285, 246, 246, 246, - 246, 246, 292, 293, 246, 140, 298, 299, 100, 34, - 101, 509, 121, 491, 373, 492, 298, 299, 416, 52, - 418, 419, 420, 371, 300, 301, 372, 100, 100, 101, - 101, 214, 358, 371, 300, 301, 372, 100, 517, 101, - 104, 105, 521, 306, 345, 345, 345, 218, 219, 220, - 221, 53, 345, 353, 100, 39, 101, 40, 143, 55, - 522, 34, 345, 345, 483, 132, 133, 76, 373, 351, - 373, 253, 254, 255, 256, 257, 258, 259, 260, 261, - 262, 241, 80, 240, 355, 100, 352, 101, 248, 65, - 87, 249, 66, 102, 103, 67, 91, 68, 97, 88, - 89, 143, 369, 246, 345, 92, 345, 93, 125, 345, - 126, 141, 204, 206, 493, 345, 345, 496, 497, 498, - 57, 58, 207, 96, 60, 61, 62, 63, 387, 1, - 2, 213, 3, 4, 210, -55, -56, 537, 399, 222, - 539, 244, 345, 345, 250, 345, 345, 308, 314, 315, - 316, 345, 317, 326, 318, 327, 328, 64, 330, 329, - 332, 345, 359, 360, 361, 362, 246, 417, 246, 246, - 246, 367, 363, 423, 107, 108, 109, 110, 111, 112, - 377, 345, 364, 402, 378, 405, 406, 421, 415, 345, - 422, 426, 430, 533, 431, 432, 433, 347, 348, 437, - 349, 438, 435, 439, 440, 441, 444, 445, 446, 448, - 449, 450, 547, 379, 380, 381, 382, 383, 451, 452, - 454, 456, 457, 459, 460, 345, 391, 392, 393, 464, - 345, 461, 467, 357, 465, 468, 469, 475, 484, 411, - 495, 365, 366, 513, 503, 478, 504, 345, 345, 507, - 482, 65, 345, 505, 66, 345, 487, 67, 506, 68, - 127, 508, 246, 519, 514, 246, 246, 246, 529, 531, - 487, 523, 479, 264, 265, 524, 427, 428, 515, 538, - 540, 541, 542, 434, 57, 58, 543, 96, 134, 135, - 136, 63, 550, 1, 2, 553, 3, 4, 554, 407, - 408, 409, 555, 558, 559, 561, 564, 414, 565, 196, - 197, 313, 528, 198, 116, 312, 304, 424, 425, 131, - 128, 64, 511, 536, 38, 115, 86, 499, 0, 471, - 472, 473, 474, 429, 0, 0, 476, 477, 0, 479, - 0, 0, 266, 267, 268, 269, 270, 271, 272, 273, - 274, 275, 276, 277, 278, 279, 0, 0, 0, 453, - 0, 455, 0, 0, 458, 0, 0, 501, 502, 0, - 462, 463, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 485, 486, 0, - 489, 490, 525, 0, 526, 527, 494, 0, 0, 0, - 0, 0, 0, 0, 0, 65, 500, 0, 66, 0, - 0, 67, -179, 68, 324, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 516, -62, 1, 2, - 0, 3, 4, 0, 520, 0, 333, 334, 5, 6, - 57, 58, 335, 0, 0, 0, 0, 0, 0, 1, - 2, 0, 3, 4, 336, 337, 338, 0, 7, 0, - 0, 8, 0, 0, 0, 9, 0, 0, 339, 340, - 544, 0, 0, 0, 0, 548, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 341, 0, 0, 0, 0, - 0, 0, 556, 557, 0, 0, 0, 560, 0, 0, - 562, 157, 158, 159, 160, 161, 162, 163, 164, 165, - 166, 167, 168, 169, 170, 171, 226, 227, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 228, 178, 179, 180, 181, 182, 183, - 184, 185, 186, 187, 188, 189, 0, 229, 0, 230, - 231, 232, 333, 334, 0, 0, 57, 58, 335, 0, - 100, 0, 101, 0, 0, 1, 2, 342, 3, 4, - 336, 337, 338, 0, 0, 0, 0, 57, 58, 0, - 0, 0, 0, 0, 339, 340, 1, 2, 0, 3, - 4, 223, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 341, 0, 0, 0, 224, 225, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 157, 158, 159, - 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, - 170, 171, 226, 227, 0, 0, 0, 0, 157, 158, - 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, - 169, 170, 171, 226, 227, 0, 0, 0, 0, 228, - 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, - 188, 189, 0, 229, 0, 230, 231, 232, 0, 0, - 228, 178, 179, 180, 181, 182, 183, 184, 185, 186, - 187, 188, 189, 342, 229, 0, 230, 231, 232, 0, - 0, 0, 333, 334, 0, 0, 0, 100, 335, 101, - 0, 233, 0, 0, 234, 0, 235, 0, 236, 0, - 336, 337, 338, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 339, 340, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, - 58, 341, 96, 134, 135, 136, 63, 0, 1, 2, - 0, 3, 4, 0, 0, 0, 0, 157, 158, 159, - 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, - 170, 171, 226, 227, 0, 0, 64, 0, 0, 0, - 0, 0, 0, 0, 0, 57, 58, 0, 96, 60, - 61, 62, 63, 0, 1, 2, 0, 3, 4, 228, - 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, - 188, 189, 120, 229, 0, 230, 231, 232, 0, 0, - 0, 0, 64, 0, 0, 57, 58, 0, 96, 60, - 61, 62, 63, 342, 1, 2, 0, 3, 4, 0, - 0, 0, 0, 0, 57, 58, 0, 96, 134, 135, - 136, 63, 303, 1, 2, 0, 3, 4, 0, 0, - 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, - 65, 0, 0, 66, 0, 0, 67, 0, 68, 386, - 0, 64, 0, 57, 58, 0, 96, 60, 61, 62, - 63, 0, 1, 2, 0, 3, 4, 0, 0, 57, - 58, 0, 96, 60, 61, 62, 63, 0, 1, 2, - 398, 3, 4, 0, 0, 0, 65, 0, 0, 66, - 64, 0, 67, 0, 68, 0, 481, 0, 57, 58, - 0, 59, 60, 61, 62, 63, 64, 1, 2, 0, - 3, 4, 57, 58, 0, 96, 134, 135, 136, 63, - 0, 1, 2, 0, 3, 4, 65, 0, 0, 66, - 0, 0, 67, 0, 68, 64, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 65, 0, 0, 66, 64, - 319, 67, 0, 68, 57, 58, 0, 142, 60, 61, - 62, 63, 0, 1, 2, 0, 3, 4, 57, 58, - 0, 96, 60, 61, 62, 63, 0, 1, 2, 0, - 3, 4, 0, 0, 65, 0, 0, 66, 0, 0, - 67, 64, 68, 0, 0, 0, 0, 0, 0, 0, - 65, 0, 0, 66, 0, 64, 67, 0, 68, 0, - 57, 58, 0, 245, 60, 61, 62, 63, 0, 1, - 2, 0, 3, 4, 0, 0, 0, 0, 0, 65, - 0, 0, 66, 0, 0, 67, 0, 68, 0, 0, - 0, 0, 0, 65, 0, 0, 66, 64, 0, 67, - 0, 68, 57, 58, 0, 96, 134, 135, 136, 63, - 0, 1, 2, 0, 3, 4, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 148, 0, 0, - 0, 0, 0, 0, 0, 65, 0, 0, 66, 64, - 0, 67, 0, 68, 0, 0, 149, 150, 0, 65, - 0, 0, 66, 0, 0, 67, 0, 68, 151, 152, - 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, - 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, - 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 65, 0, 0, 66, 0, 0, 67, 0, 68, - 0, 174, 175, 176, 0, 0, 177, 178, 179, 180, - 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, - 191, 192, 193, 194, 195, 0, 0, -178, 0, 0, - 0, 0, 0, 65, 0, 0, 66, 0, 0, 67, - 0, 322, -62, 1, 2, 0, 3, 4, 0, 0, - 0, 0, 0, 5, 6, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 7, 0, 0, 8, 0, 0, 0, - 9 +/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ +static const yytype_uint8 yyr1[] = +{ + 0, 150, 151, 151, 151, 151, 151, 151, 151, 151, + 151, 152, 152, 152, 152, 152, 152, 153, 153, 153, + 153, 153, 153, 153, 153, 153, 153, 153, 153, 154, + 154, 154, 154, 154, 154, 154, 154, 154, 154, 155, + 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, + 155, 155, 155, 155, 155, 156, 157, 157, 158, 158, + 159, 159, 160, 160, 161, 161, 162, 162, 163, 164, + 164, 164, 164, 164, 165, 165, 165, 166, 166, 166, + 167, 167, 167, 168, 168, 168, 168, 168, 169, 169, + 169, 170, 170, 170, 170, 170, 170, 170, 171, 171, + 171, 171, 172, 172, 173, 173, 173, 174, 174, 175, + 175, 176, 176, 177, 178, 178, 179, 179, 180, 180, + 181, 181, 181, 181, 182, 182, 182, 182, 182, 182, + 182, 182, 182, 182, 182, 182, 182, 183, 184, 184, + 185, 185, 186, 186, 186, 186, 187, 187, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, 189, 189, + 189, 189, 189, 189, 189, 189, 189, 189, 190, 190, + 191, 191, 192, 192, 193, 193, 194, 194, 196, 195, + 197, 195, 195, 195, 195, 198, 195, 199, 195, 200, + 195, 195, 195, 195, 201, 202, 202, 203, 204, 204, + 204, 205, 205, 206, 206, 206, 206, 207, 208, 208, + 209, 210, 210, 211, 212, 213, 213, 214, 214, 214, + 214, 214, 214, 214, 214, 214, 214, 214, 215, 215, + 215, 215, 216, 216, 217, 218, 218, 219, 220, 220, + 220, 221, 221, 221, 221, 221, 221, 221, 221, 221, + 222, 222, 223, 224, 224, 225, 225, 225, 226, 226, + 227, 227, 228, 228, 228, 228, 228, 228, 228, 228, + 228, 228, 228, 228, 228, 229, 229, 230, 230, 230, + 230, 230, 230, 230, 230 }; -static const short yycheck[] = { 0, - 24, 153, 213, 139, 176, 139, 305, 4, 24, 399, - 309, 11, 282, 14, 154, 0, 234, 235, 252, 191, - 192, 193, 194, 195, 30, 18, 198, 11, 11, 14, - 310, 311, 25, 11, 3, 4, 5, 6, 112, 113, - 35, 36, 48, 136, 68, 47, 41, 135, 16, 533, - 143, 19, 47, 22, 23, 129, 130, 131, 132, 61, - 200, 295, 52, 547, 48, 136, 136, 91, 136, 136, - 48, 95, 140, 108, 109, 145, 147, 101, 112, 113, - 147, 82, 37, 38, 39, 40, 41, 42, 43, 113, - 45, 136, 482, 135, 30, 136, 130, 131, 143, 136, - 136, 125, 126, 15, 322, 129, 147, 33, 145, 133, - 246, 147, 248, 249, 137, 251, 139, 397, 37, 38, - 39, 135, 145, 42, 342, 297, 516, 151, 7, 8, - 146, 10, 11, 12, 13, 14, 16, 16, 17, 19, - 19, 20, 136, 143, 112, 113, 140, 135, 284, 146, - 174, 175, 176, 177, 147, 425, 292, 293, 548, 144, - 143, 17, 130, 131, 20, 44, 190, 191, 192, 193, - 194, 195, 196, 197, 198, 106, 112, 113, 137, 134, - 139, 140, 206, 453, 483, 455, 112, 113, 360, 135, - 362, 363, 364, 129, 130, 131, 132, 137, 137, 139, - 139, 132, 141, 129, 130, 131, 132, 137, 136, 139, - 28, 29, 140, 143, 350, 351, 352, 3, 4, 5, - 6, 141, 358, 136, 137, 41, 139, 43, 252, 19, - 500, 134, 368, 369, 445, 102, 103, 32, 537, 263, - 539, 85, 86, 87, 88, 89, 90, 91, 92, 93, - 94, 387, 18, 387, 136, 137, 280, 139, 11, 138, - 19, 14, 141, 74, 75, 144, 139, 146, 147, 19, - 19, 295, 296, 297, 410, 4, 412, 4, 142, 415, - 142, 4, 19, 136, 456, 421, 422, 459, 460, 461, - 7, 8, 140, 10, 11, 12, 13, 14, 322, 16, - 17, 140, 19, 20, 145, 9, 9, 518, 332, 9, - 521, 50, 448, 449, 11, 451, 452, 145, 139, 139, - 139, 457, 139, 19, 139, 139, 139, 44, 136, 139, - 139, 467, 136, 136, 136, 136, 360, 361, 362, 363, - 364, 33, 136, 367, 55, 56, 57, 58, 59, 60, - 139, 487, 136, 54, 139, 136, 136, 136, 141, 495, - 136, 136, 136, 515, 136, 136, 136, 248, 249, 136, - 251, 136, 145, 33, 19, 4, 136, 140, 19, 14, - 14, 139, 534, 314, 315, 316, 317, 318, 136, 136, - 4, 136, 136, 136, 136, 531, 327, 328, 329, 139, - 536, 136, 426, 284, 136, 136, 136, 145, 136, 48, - 136, 292, 293, 19, 136, 439, 140, 553, 554, 140, - 444, 138, 558, 136, 141, 561, 450, 144, 136, 146, - 147, 140, 456, 143, 136, 459, 460, 461, 48, 14, - 464, 140, 443, 22, 23, 140, 377, 378, 141, 143, - 140, 140, 140, 384, 7, 8, 4, 10, 11, 12, - 13, 14, 136, 16, 17, 14, 19, 20, 14, 350, - 351, 352, 136, 14, 66, 14, 0, 358, 0, 116, - 116, 227, 510, 116, 82, 226, 206, 368, 369, 101, - 95, 44, 483, 517, 14, 79, 50, 464, -1, 430, - 431, 432, 433, 379, -1, -1, 437, 438, -1, 510, - -1, -1, 91, 92, 93, 94, 95, 96, 97, 98, - 99, 100, 101, 102, 103, 104, -1, -1, -1, 410, - -1, 412, -1, -1, 415, -1, -1, 468, 469, -1, - 421, 422, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 448, 449, -1, - 451, 452, 503, -1, 505, 506, 457, -1, -1, -1, - -1, -1, -1, -1, -1, 138, 467, -1, 141, -1, - -1, 144, 0, 146, 147, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 487, 15, 16, 17, - -1, 19, 20, -1, 495, -1, 3, 4, 26, 27, - 7, 8, 9, -1, -1, -1, -1, -1, -1, 16, - 17, -1, 19, 20, 21, 22, 23, -1, 46, -1, - -1, 49, -1, -1, -1, 53, -1, -1, 35, 36, - 531, -1, -1, -1, -1, 536, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 52, -1, -1, -1, -1, - -1, -1, 553, 554, -1, -1, -1, 558, -1, -1, - 561, 68, 69, 70, 71, 72, 73, 74, 75, 76, - 77, 78, 79, 80, 81, 82, 83, 84, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 110, 111, 112, 113, 114, 115, 116, - 117, 118, 119, 120, 121, 122, -1, 124, -1, 126, - 127, 128, 3, 4, -1, -1, 7, 8, 9, -1, - 137, -1, 139, -1, -1, 16, 17, 144, 19, 20, - 21, 22, 23, -1, -1, -1, -1, 7, 8, -1, - -1, -1, -1, -1, 35, 36, 16, 17, -1, 19, - 20, 21, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 52, -1, -1, -1, 35, 36, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 68, 69, 70, - 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, - 81, 82, 83, 84, -1, -1, -1, -1, 68, 69, - 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, -1, -1, -1, -1, 110, - 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, - 121, 122, -1, 124, -1, 126, 127, 128, -1, -1, - 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, - 120, 121, 122, 144, 124, -1, 126, 127, 128, -1, - -1, -1, 3, 4, -1, -1, -1, 137, 9, 139, - -1, 141, -1, -1, 144, -1, 146, -1, 148, -1, - 21, 22, 23, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 35, 36, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 7, - 8, 52, 10, 11, 12, 13, 14, -1, 16, 17, - -1, 19, 20, -1, -1, -1, -1, 68, 69, 70, - 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, - 81, 82, 83, 84, -1, -1, 44, -1, -1, -1, - -1, -1, -1, -1, -1, 7, 8, -1, 10, 11, - 12, 13, 14, -1, 16, 17, -1, 19, 20, 110, - 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, - 121, 122, 34, 124, -1, 126, 127, 128, -1, -1, - -1, -1, 44, -1, -1, 7, 8, -1, 10, 11, - 12, 13, 14, 144, 16, 17, -1, 19, 20, -1, - -1, -1, -1, -1, 7, 8, -1, 10, 11, 12, - 13, 14, 34, 16, 17, -1, 19, 20, -1, -1, - -1, -1, 44, -1, -1, -1, -1, -1, -1, -1, - 138, -1, -1, 141, -1, -1, 144, -1, 146, 147, - -1, 44, -1, 7, 8, -1, 10, 11, 12, 13, - 14, -1, 16, 17, -1, 19, 20, -1, -1, 7, - 8, -1, 10, 11, 12, 13, 14, -1, 16, 17, - 34, 19, 20, -1, -1, -1, 138, -1, -1, 141, - 44, -1, 144, -1, 146, -1, 34, -1, 7, 8, - -1, 10, 11, 12, 13, 14, 44, 16, 17, -1, - 19, 20, 7, 8, -1, 10, 11, 12, 13, 14, - -1, 16, 17, -1, 19, 20, 138, -1, -1, 141, - -1, -1, 144, -1, 146, 44, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 138, -1, -1, 141, 44, - 143, 144, -1, 146, 7, 8, -1, 10, 11, 12, - 13, 14, -1, 16, 17, -1, 19, 20, 7, 8, - -1, 10, 11, 12, 13, 14, -1, 16, 17, -1, - 19, 20, -1, -1, 138, -1, -1, 141, -1, -1, - 144, 44, 146, -1, -1, -1, -1, -1, -1, -1, - 138, -1, -1, 141, -1, 44, 144, -1, 146, -1, - 7, 8, -1, 10, 11, 12, 13, 14, -1, 16, - 17, -1, 19, 20, -1, -1, -1, -1, -1, 138, - -1, -1, 141, -1, -1, 144, -1, 146, -1, -1, - -1, -1, -1, 138, -1, -1, 141, 44, -1, 144, - -1, 146, 7, 8, -1, 10, 11, 12, 13, 14, - -1, 16, 17, -1, 19, 20, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 31, -1, -1, - -1, -1, -1, -1, -1, 138, -1, -1, 141, 44, - -1, 144, -1, 146, -1, -1, 50, 51, -1, 138, - -1, -1, 141, -1, -1, 144, -1, 146, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, - 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, - 84, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 138, -1, -1, 141, -1, -1, 144, -1, 146, - -1, 105, 106, 107, -1, -1, 110, 111, 112, 113, - 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, - 124, 125, 126, 127, 128, -1, -1, 0, -1, -1, - -1, -1, -1, 138, -1, -1, 141, -1, -1, 144, - -1, 146, 15, 16, 17, -1, 19, 20, -1, -1, - -1, -1, -1, 26, 27, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 46, -1, -1, 49, -1, -1, -1, - 53 +/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ +static const yytype_uint8 yyr2[] = +{ + 0, 2, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 0, 2, 0, 1, 1, 1, 0, 2, 1, + 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, + 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, + 1, 0, 1, 1, 1, 1, 1, 2, 1, 1, + 1, 1, 0, 2, 1, 1, 1, 0, 2, 0, + 2, 0, 3, 2, 0, 1, 0, 3, 1, 2, + 1, 1, 1, 1, 1, 1, 2, 1, 2, 5, + 5, 5, 5, 3, 2, 5, 4, 2, 1, 1, + 1, 3, 1, 3, 1, 0, 1, 3, 4, 3, + 3, 4, 4, 3, 6, 5, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 6, 5, + 8, 6, 6, 7, 7, 6, 8, 8, 3, 1, + 1, 1, 1, 0, 1, 0, 1, 2, 0, 3, + 0, 3, 3, 3, 3, 0, 7, 0, 8, 0, + 8, 6, 2, 3, 1, 3, 3, 3, 3, 1, + 0, 5, 3, 1, 3, 1, 0, 9, 1, 1, + 4, 1, 1, 2, 3, 0, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 3, 1, 5, 1, 1, + 1, 1, 1, 1, 2, 2, 2, 3, 2, 0, + 1, 2, 2, 3, 9, 9, 8, 14, 1, 1, + 6, 5, 2, 6, 7, 3, 5, 0, 0, 3, + 2, 1, 5, 5, 6, 6, 4, 6, 4, 4, + 6, 6, 2, 8, 1, 1, 0, 3, 6, 3, + 6, 2, 5, 7, 4 }; -/* -*-C-*- Note some compilers choke on comments on `#line' lines. */ -#line 3 "/usr/share/bison.simple" -/* This file comes from bison-1.28. */ -/* Skeleton output parser for bison, - Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc. +/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state + STATE-NUM when YYTABLE doesn't specify something else to do. Zero + means the default is an error. */ +static const yytype_uint16 yydefact[] = +{ + 67, 58, 64, 59, 65, 190, 188, 0, 0, 0, + 0, 0, 0, 77, 66, 0, 67, 186, 80, 83, + 0, 0, 202, 0, 0, 62, 0, 68, 69, 71, + 70, 72, 74, 73, 75, 76, 78, 79, 77, 77, + 183, 1, 187, 81, 82, 77, 191, 84, 85, 86, + 87, 77, 249, 189, 249, 0, 0, 210, 203, 204, + 192, 238, 239, 194, 120, 121, 122, 123, 124, 0, + 0, 0, 0, 240, 241, 125, 193, 127, 183, 183, + 88, 182, 0, 91, 91, 250, 246, 63, 221, 222, + 223, 245, 205, 206, 209, 0, 145, 128, 0, 0, + 0, 0, 134, 146, 0, 126, 145, 0, 0, 90, + 89, 0, 180, 181, 0, 0, 92, 93, 94, 95, + 96, 0, 224, 0, 286, 248, 0, 207, 144, 102, + 140, 142, 0, 0, 0, 0, 0, 0, 133, 0, + 0, 0, 139, 138, 0, 120, 121, 122, 0, 0, + 0, 195, 97, 0, 218, 219, 220, 285, 271, 0, + 0, 0, 0, 91, 258, 259, 2, 3, 4, 5, + 6, 7, 8, 9, 10, 14, 15, 16, 11, 12, + 13, 0, 0, 0, 0, 0, 0, 17, 18, 19, + 20, 21, 22, 23, 24, 25, 26, 27, 28, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 247, 91, + 262, 0, 284, 208, 137, 0, 107, 0, 0, 136, + 0, 147, 107, 197, 199, 201, 165, 166, 161, 163, + 162, 164, 167, 160, 156, 157, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 159, 158, 116, 0, 270, 252, 0, 251, 0, 0, + 55, 0, 0, 29, 30, 31, 32, 33, 34, 35, + 36, 37, 38, 0, 53, 54, 49, 50, 51, 52, + 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 0, 111, 111, 291, 0, 0, 282, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 98, 99, + 100, 101, 103, 143, 141, 130, 131, 132, 135, 129, + 116, 116, 0, 0, 0, 0, 0, 0, 0, 149, + 179, 0, 0, 0, 153, 0, 150, 0, 0, 0, + 0, 196, 216, 227, 228, 229, 234, 230, 231, 232, + 233, 225, 0, 236, 243, 242, 244, 0, 253, 0, + 0, 0, 0, 0, 287, 0, 289, 268, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 104, 105, 106, 108, 198, 200, 0, 0, 268, + 0, 0, 0, 0, 0, 148, 134, 146, 0, 151, + 152, 0, 0, 0, 0, 0, 118, 116, 215, 102, + 213, 0, 226, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 294, 0, 0, 0, 278, 279, 0, + 0, 0, 0, 276, 0, 111, 0, 0, 0, 0, + 0, 0, 0, 0, 178, 155, 0, 0, 0, 0, + 113, 119, 117, 61, 0, 107, 0, 235, 0, 0, + 267, 0, 0, 111, 112, 111, 0, 0, 0, 0, + 0, 0, 272, 273, 267, 0, 292, 0, 0, 0, + 169, 0, 0, 0, 0, 154, 0, 0, 0, 60, + 212, 214, 102, 114, 0, 0, 0, 0, 0, 274, + 275, 288, 290, 269, 0, 0, 277, 280, 281, 0, + 111, 0, 0, 0, 175, 0, 0, 171, 172, 168, + 61, 115, 109, 237, 0, 0, 102, 0, 107, 263, + 0, 107, 293, 173, 174, 0, 0, 0, 211, 0, + 217, 0, 256, 0, 0, 265, 0, 0, 264, 283, + 170, 176, 177, 110, 254, 0, 255, 0, 102, 0, + 0, 0, 266, 0, 0, 0, 0, 261, 0, 0, + 260, 0, 257 +}; - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. +/* YYDEFGOTO[NTERM-NUM]. */ +static const yytype_int16 yydefgoto[] = +{ + -1, 247, 248, 249, 273, 290, 148, 149, 73, 490, + 11, 74, 13, 14, 38, 39, 40, 45, 51, 111, + 121, 312, 214, 384, 315, 540, 364, 406, 522, 341, + 407, 75, 150, 130, 144, 131, 132, 104, 330, 353, + 331, 114, 82, 15, 16, 17, 19, 18, 252, 320, + 321, 60, 22, 58, 95, 410, 411, 122, 156, 52, + 90, 53, 46, 413, 354, 77, 356, 257, 54, 86, + 87, 208, 544, 125, 296, 498, 423, 209, 210, 211, + 212 +}; - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. +/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing + STATE-NUM. */ +#define YYPACT_NINF -467 +static const yytype_int16 yypact[] = +{ + 601, -467, -467, -467, -467, -467, -467, 28, -64, 41, + -37, 98, 10, 16, -467, 139, 856, -467, 36, 170, + 18, 26, -467, 31, 148, -467, 1069, -467, -467, -467, + -467, -467, -467, -467, -467, -467, -467, -467, 81, 81, + 107, -467, -467, -467, -467, 81, -467, -467, -467, -467, + -467, 81, 179, -467, 8, 209, 220, 226, -467, -467, + -467, -467, -467, 118, -467, -467, -467, -467, -467, 269, + 275, 1, 541, -467, -467, -467, 100, -467, 251, 251, + 229, -467, 204, 196, 196, -467, -467, 104, -467, -467, + -467, -467, -467, -467, -467, -100, 981, -467, 143, 146, + 754, 118, -467, 100, -96, -467, 981, 204, 204, -467, + -467, 1086, -467, -467, 1137, 289, -467, -467, -467, -467, + -467, 1086, -467, -15, 1326, -467, 277, -467, -467, 100, + -467, 162, 163, 1181, 1181, 167, -95, 1181, -467, 173, + 1137, 1181, 118, 100, 227, 45, 299, 306, 216, 309, + 712, -467, -467, 23, -467, -467, -467, -467, -467, 268, + 1227, 200, 312, 196, -467, -467, -467, -467, -467, -467, + -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, + -467, 303, 1195, 1181, 1181, 1181, 1181, -467, -467, -467, + -467, -467, -467, -467, -467, -467, -467, -467, -467, 1181, + 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, -467, 196, + -467, 140, -467, -467, -68, 995, -467, 58, -9, -467, + 174, 100, -467, -467, 100, -467, -467, -467, -467, -467, + -467, -467, -467, -467, -467, -467, 303, 1195, 186, 187, + 188, 189, 191, 633, 1241, 793, 313, 193, 194, 195, + -467, -467, 201, 197, -467, 118, 462, -467, 589, 589, + -467, 589, 1086, -467, -467, -467, -467, -467, -467, -467, + -467, -467, -467, 1181, -467, -467, -467, -467, -467, -467, + -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, + 1181, 89, 165, -467, 462, 134, 202, 205, 206, 213, + 214, 217, 462, 462, 307, 1086, 1181, 1181, -467, -467, + -467, -467, -467, -467, -467, -48, -467, -467, -467, -48, + 201, 201, 215, 218, 1137, 1137, 1137, 1137, 1137, -467, + -467, -26, 965, -67, -467, -45, -467, 1137, 1137, 1137, + -10, -467, 1025, -467, -467, -467, -467, -467, -467, -467, + -467, 298, 1137, -467, -467, -467, -467, 219, -467, 222, + 589, 462, 462, 24, -467, 25, -467, -467, 589, 221, + 1181, 1181, 1181, 1181, 1181, 224, 225, 1181, 589, 462, + 230, -467, -467, -467, -467, -467, -467, 1137, 1137, -467, + 233, 234, 235, 241, 1137, -467, 211, 712, -44, -467, + -467, 242, 244, 330, 347, 365, -467, 201, -467, 100, + 245, 258, -467, 364, -31, 386, 387, 265, 271, 276, + 589, 402, 589, 278, 279, 589, 280, 100, -467, 281, + 282, 589, 589, 100, 272, 283, 1181, 284, 285, -27, + 1137, 1137, 1137, 1137, -467, -467, 286, 1137, 1137, 1181, + -467, -467, -467, 13, 1039, -467, 288, -467, 589, 589, + 1181, 589, 589, 283, -467, 283, 1181, 589, 291, 1181, + 1181, 1181, -467, -467, 1181, 374, -467, 462, 1137, 1137, + -467, 293, 273, 296, 301, -467, 310, 311, 137, -467, + -467, -467, 100, 39, 420, 305, 308, 462, -7, -467, + -467, -467, -467, -467, 304, 589, -467, -467, -467, 47, + 283, 314, 315, 1137, -467, 1137, 1137, -467, -467, -467, + 13, -467, 391, -467, 433, -1, -467, 1181, -467, -467, + 316, -467, -467, -467, -467, 317, 318, 320, -467, 450, + -467, 589, -467, 842, 3, -68, 462, 73, -467, -48, + -467, -467, -467, -467, -467, 325, -467, 842, -467, 443, + 449, 327, -68, 589, 589, 453, 401, -467, 589, 458, + -467, 589, -467 +}; - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. */ +/* YYPGOTO[NTERM-NUM]. */ +static const yytype_int16 yypgoto[] = +{ + -467, 349, 350, 351, 240, 243, -160, -467, 0, -43, + 399, 11, -467, -467, -467, -467, 50, -467, -467, -467, + -148, -281, -390, -467, -219, -467, -280, -6, -467, -290, + -467, -467, -25, 290, -113, -467, 382, 393, 49, -146, + -227, 155, 232, -467, -467, 478, -467, -467, -467, -467, + -467, -467, -467, -467, -467, -467, -467, 411, -467, -467, + -467, -467, -467, -467, -466, -137, -161, -179, -467, 446, + -467, -467, -467, -467, -467, 27, 114, -467, -467, -467, + -467 +}; -/* As a special exception, when this file is copied by Bison into a - Bison output file, you may use that output file without restriction. - This special exception was added by the Free Software Foundation - in version 1.24 of Bison. */ - -/* This is the parser code that is written into each bison parser - when the %semantic_parser declaration is not specified in the grammar. - It was written by Richard Stallman by simplifying the hairy parser - used when %semantic_parser is specified. */ - -#ifndef YYSTACK_USE_ALLOCA -#ifdef alloca -#define YYSTACK_USE_ALLOCA -#else /* alloca not defined */ -#ifdef __GNUC__ -#define YYSTACK_USE_ALLOCA -#define alloca __builtin_alloca -#else /* not GNU C. */ -#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || (defined (__sun) && defined (__i386)) -#define YYSTACK_USE_ALLOCA -#include -#else /* not sparc */ -/* We think this test detects Watcom and Microsoft C. */ -/* This used to test MSDOS, but that is a bad idea - since that symbol is in the user namespace. */ -#if (defined (_MSDOS) || defined (_MSDOS_)) && !defined (__TURBOC__) -#if 0 /* No need for malloc.h, which pollutes the namespace; - instead, just don't use alloca. */ -#include -#endif -#else /* not MSDOS, or __TURBOC__ */ -#if defined(_AIX) -/* I don't know what this was needed for, but it pollutes the namespace. - So I turned it off. rms, 2 May 1997. */ -/* #include */ - #pragma alloca -#define YYSTACK_USE_ALLOCA -#else /* not MSDOS, or __TURBOC__, or _AIX */ -#if 0 -#ifdef __hpux /* haible at ilog.fr says this works for HPUX 9.05 and up, - and on HPUX 10. Eventually we can turn this on. */ -#define YYSTACK_USE_ALLOCA -#define alloca __builtin_alloca -#endif /* __hpux */ -#endif -#endif /* not _AIX */ -#endif /* not MSDOS, or __TURBOC__ */ -#endif /* not sparc */ -#endif /* not GNU C */ -#endif /* alloca not defined */ -#endif /* YYSTACK_USE_ALLOCA not defined */ +/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If + positive, shift that token. If negative, reduce the rule which + number is the opposite. If zero, do what YYDEFACT says. + If YYTABLE_NINF, syntax error. */ +#define YYTABLE_NINF -186 +static const yytype_int16 yytable[] = +{ + 10, 76, 261, 319, 250, 99, 293, 225, 153, 154, + 260, 12, 366, 251, 260, 262, 10, 333, 335, 453, + 404, 297, 298, 299, 300, 301, 85, 12, 304, 1, + 385, 386, 3, 88, 383, 420, 422, 126, 383, 405, + 2, 137, 137, 4, 127, 308, 309, 103, -55, -55, + -55, -55, 138, 220, 28, 29, 30, 31, 32, 33, + 34, 305, 35, 310, 311, 308, 309, 226, 227, 404, + 394, 129, 23, 421, 421, 103, 20, 555, 43, 399, + 44, 129, 381, 310, 311, 382, 143, 10, 78, 79, + 21, 561, 394, 394, 24, 83, 143, 357, 358, 25, + 359, 84, 520, 400, 446, 398, 394, 559, 217, 218, + 466, 394, 221, 26, 480, 457, 224, 452, 395, 355, + 1, 355, 355, 3, 355, 414, 308, 309, 380, 105, + 527, 106, 155, 367, 528, 256, 545, 317, 80, 41, + 81, 375, 376, 542, 310, 311, 27, 556, 100, 360, + 36, 37, 308, 309, 55, 476, 89, 355, 291, 292, + 256, 294, 56, 151, 253, 355, 355, 59, 562, 381, + 310, 311, 382, 57, 295, 256, 256, 256, 256, 256, + 302, 303, 256, 501, 527, 502, 308, 309, 531, 223, + 129, 426, 378, 428, 429, 430, 105, 85, 106, 417, + 418, 419, 316, 381, 310, 311, 382, 424, 47, 48, + 49, 258, 383, 50, 259, 36, 37, 434, 435, 228, + 229, 230, 231, 355, 355, 355, 363, 105, 92, 106, + 532, 355, 112, 113, 61, 62, 493, 143, 105, 93, + 106, 355, 355, 1, 2, 94, 3, 4, 361, 306, + 307, 250, 115, 116, 117, 118, 119, 120, 96, 463, + 251, 465, 140, 141, 468, 362, 383, 109, 383, 110, + 472, 473, 105, 97, 106, 105, 368, 106, 519, 98, + 143, 379, 256, 355, 81, 355, 133, 503, 355, 134, + 506, 507, 508, 152, 355, 355, 213, 495, 496, 215, + 499, 500, 365, 105, 216, 106, 504, 397, -56, 547, + 107, 108, 549, 219, 222, -57, 510, 409, 232, 254, + 318, 355, 355, 260, 355, 355, 324, 325, 326, 327, + 355, 328, 336, 337, 338, 339, 526, 342, 340, 369, + 355, 377, 370, 371, 530, 256, 427, 256, 256, 256, + 372, 373, 433, 412, 374, 387, 415, 445, 388, 416, + 355, 431, 432, 425, 449, 543, 450, 436, 355, 451, + 440, 441, 442, 389, 390, 391, 392, 393, 443, 447, + 554, 448, 454, 456, 557, 558, 401, 402, 403, 263, + 264, 265, 266, 267, 268, 269, 270, 271, 272, 455, + 458, 459, 566, 567, 355, 460, 464, 570, 461, 355, + 572, 477, 474, 462, 514, 466, 467, 469, 470, 471, + 475, 478, 479, 421, 488, 494, 355, 355, 505, 492, + 513, 355, 485, 515, 355, 497, 437, 438, 516, 523, + 539, 256, 524, 444, 256, 256, 256, 541, 529, 497, + 525, 517, 518, 489, 553, 533, 534, 563, 550, 551, + 548, 552, 560, 564, 565, 343, 344, 568, 569, 61, + 62, 345, 571, 205, 206, 207, 322, 538, 1, 2, + 323, 3, 4, 346, 347, 348, 124, 521, 139, 481, + 482, 483, 484, 136, 42, 123, 486, 487, 349, 350, + 91, 509, 546, 439, 0, 314, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 351, 0, 0, 0, 0, + 489, 0, 0, 0, 0, 0, 0, 511, 512, 0, + 0, 166, 167, 168, 169, 170, 171, 172, 173, 174, + 175, 176, 177, 178, 179, 180, 236, 237, 61, 62, + 0, 101, 64, 65, 66, 67, 0, 1, 2, 0, + 3, 4, 535, 0, 536, 537, 0, 0, 0, 0, + 0, 0, 0, 238, 187, 188, 189, 190, 191, 192, + 193, 194, 195, 196, 197, 198, 68, 239, 0, 240, + 241, 242, 343, 344, 0, 0, 61, 62, 345, 0, + 105, -185, 106, 0, 0, 1, 2, 352, 3, 4, + 346, 347, 348, 0, 0, 0, -63, 1, 2, 0, + 3, 4, 0, 0, 0, 349, 350, 5, 6, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 61, 62, 351, 101, 145, 146, 147, 67, 7, 1, + 2, 8, 3, 4, 0, 9, 0, 0, 166, 167, + 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, + 178, 179, 180, 236, 237, 0, 0, 0, 68, 0, + 69, 0, 0, 70, 0, 0, 71, 0, 72, 102, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 238, 187, 188, 189, 190, 191, 192, 193, 194, 195, + 196, 197, 198, 0, 239, 0, 240, 241, 242, 61, + 62, 0, 0, 0, 0, 0, 0, 0, 1, 2, + 0, 3, 4, 233, 352, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 234, 235, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 61, 62, 0, 101, 64, 65, 66, 67, 0, + 1, 2, 69, 3, 4, 70, 0, 329, 71, 0, + 72, 166, 167, 168, 169, 170, 171, 172, 173, 174, + 175, 176, 177, 178, 179, 180, 236, 237, 0, 68, + 61, 62, 0, 101, 145, 146, 147, 67, 0, 1, + 2, 0, 3, 4, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 238, 187, 188, 189, 190, 191, 192, + 193, 194, 195, 196, 197, 198, 0, 239, 68, 240, + 241, 242, 0, 0, 0, 343, 344, 0, 0, 0, + 105, 345, 106, 0, 243, 0, -184, 244, 0, 245, + 0, 246, 0, 346, 347, 348, 0, 0, 0, 0, + 0, -63, 1, 2, 0, 3, 4, 0, 349, 350, + 0, 0, 5, 6, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 69, 0, 351, 70, 0, 0, 71, + 0, 72, 135, 7, 0, 0, 8, 0, 0, 0, + 9, 166, 167, 168, 169, 170, 171, 172, 173, 174, + 175, 176, 177, 178, 179, 180, 236, 237, 0, 0, + 0, 0, 69, 0, 0, 70, 0, 0, 71, 0, + 72, 334, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 238, 187, 188, 189, 190, 191, 192, + 193, 194, 195, 196, 197, 198, 0, 239, 0, 240, + 241, 242, 61, 62, 0, 101, 145, 146, 147, 67, + 0, 1, 2, 0, 3, 4, 0, 352, 61, 62, + 0, 101, 64, 65, 66, 67, 0, 1, 2, 0, + 3, 4, 61, 62, 0, 101, 64, 65, 66, 67, + 68, 1, 2, 0, 3, 4, 128, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, + 313, 0, 61, 62, 0, 101, 64, 65, 66, 67, + 68, 1, 2, 0, 3, 4, 61, 62, 0, 101, + 64, 65, 66, 67, 0, 1, 2, 0, 3, 4, + 408, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 0, 0, 0, 491, 0, 61, 62, 0, 63, + 64, 65, 66, 67, 68, 1, 2, 0, 3, 4, + 0, 0, 0, 61, 62, 0, 142, 64, 65, 66, + 67, 0, 1, 2, 69, 3, 4, 70, 0, 0, + 71, 0, 72, 396, 68, 0, 0, 0, 0, 0, + 69, 0, 0, 70, 0, 0, 71, 0, 72, 0, + 0, 68, 0, 0, 69, 0, 0, 70, 0, 0, + 71, 0, 72, 0, 61, 62, 0, 101, 145, 146, + 147, 67, 0, 1, 2, 0, 3, 4, 0, 0, + 0, 0, 0, 0, 69, 0, 0, 70, 0, 0, + 71, 0, 72, 0, 0, 0, 0, 0, 69, 0, + 0, 70, 68, 0, 71, 0, 72, 0, 61, 62, + 0, 101, 64, 65, 66, 67, 0, 1, 2, 0, + 3, 4, 0, 0, 0, 0, 0, 0, 69, 0, + 0, 70, 0, 0, 71, 0, 72, 274, 275, 0, + 0, 0, 0, 0, 0, 69, 68, 0, 70, 0, + 0, 71, 0, 72, 61, 62, 0, 255, 64, 65, + 66, 67, 0, 1, 2, 0, 3, 4, 61, 62, + 0, 101, 145, 146, 147, 67, 0, 1, 2, 0, + 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 68, 0, 0, 0, 69, 0, 0, 70, + 0, 0, 71, 0, 72, 0, 68, 276, 277, 278, + 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, + 289, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 69, 0, 0, 70, 0, 0, 71, 0, 72, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 157, 0, + 0, 0, 0, 0, 0, 0, 69, 0, 0, 70, + 0, 0, 71, 0, 72, 0, 0, 158, 159, 0, + 69, 0, 0, 70, 0, 0, 71, 0, 332, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, + 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, + 181, 182, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 183, 184, 185, 0, 0, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, + 199, 200, 201, 202, 203, 204 +}; -#ifdef YYSTACK_USE_ALLOCA -#define YYSTACK_ALLOC alloca -#else -#define YYSTACK_ALLOC malloc -#endif +static const yytype_int16 yycheck[] = +{ + 0, 26, 162, 222, 150, 4, 185, 144, 121, 24, + 11, 0, 292, 150, 11, 163, 16, 244, 245, 409, + 30, 200, 201, 202, 203, 204, 18, 16, 207, 16, + 320, 321, 19, 25, 315, 11, 11, 137, 319, 49, + 17, 137, 137, 20, 144, 113, 114, 72, 3, 4, + 5, 6, 148, 148, 38, 39, 40, 41, 42, 43, + 44, 209, 46, 131, 132, 113, 114, 22, 23, 30, + 137, 96, 136, 49, 49, 100, 48, 543, 42, 146, + 44, 106, 130, 131, 132, 133, 111, 87, 38, 39, + 62, 557, 137, 137, 53, 45, 121, 258, 259, 136, + 261, 51, 492, 148, 148, 332, 137, 34, 133, 134, + 137, 137, 137, 15, 141, 146, 141, 407, 144, 256, + 16, 258, 259, 19, 261, 352, 113, 114, 307, 138, + 137, 140, 147, 294, 141, 160, 526, 146, 31, 0, + 33, 302, 303, 144, 131, 132, 136, 144, 147, 262, + 134, 135, 113, 114, 136, 435, 148, 294, 183, 184, + 185, 186, 136, 114, 153, 302, 303, 19, 558, 130, + 131, 132, 133, 142, 199, 200, 201, 202, 203, 204, + 205, 206, 207, 463, 137, 465, 113, 114, 141, 140, + 215, 370, 305, 372, 373, 374, 138, 18, 140, 360, + 361, 362, 144, 130, 131, 132, 133, 368, 38, 39, + 40, 11, 493, 43, 14, 134, 135, 378, 379, 3, + 4, 5, 6, 360, 361, 362, 137, 138, 19, 140, + 510, 368, 28, 29, 7, 8, 455, 262, 138, 19, + 140, 378, 379, 16, 17, 19, 19, 20, 273, 109, + 110, 397, 56, 57, 58, 59, 60, 61, 140, 420, + 397, 422, 107, 108, 425, 290, 547, 38, 549, 40, + 431, 432, 138, 4, 140, 138, 142, 140, 141, 4, + 305, 306, 307, 420, 33, 422, 143, 466, 425, 143, + 469, 470, 471, 4, 431, 432, 19, 458, 459, 137, + 461, 462, 137, 138, 141, 140, 467, 332, 9, 528, + 78, 79, 531, 146, 141, 9, 477, 342, 9, 51, + 146, 458, 459, 11, 461, 462, 140, 140, 140, 140, + 467, 140, 19, 140, 140, 140, 497, 140, 137, 137, + 477, 34, 137, 137, 505, 370, 371, 372, 373, 374, + 137, 137, 377, 55, 137, 140, 137, 146, 140, 137, + 497, 137, 137, 142, 34, 525, 19, 137, 505, 4, + 137, 137, 137, 324, 325, 326, 327, 328, 137, 137, + 541, 137, 137, 19, 544, 546, 337, 338, 339, 86, + 87, 88, 89, 90, 91, 92, 93, 94, 95, 141, + 14, 14, 563, 564, 541, 140, 4, 568, 137, 546, + 571, 436, 140, 137, 141, 137, 137, 137, 137, 137, + 137, 137, 137, 49, 449, 137, 563, 564, 137, 454, + 137, 568, 146, 137, 571, 460, 387, 388, 137, 19, + 49, 466, 137, 394, 469, 470, 471, 14, 144, 474, + 142, 141, 141, 453, 4, 141, 141, 14, 141, 141, + 144, 141, 137, 14, 137, 3, 4, 14, 67, 7, + 8, 9, 14, 124, 124, 124, 236, 520, 16, 17, + 237, 19, 20, 21, 22, 23, 87, 493, 106, 440, + 441, 442, 443, 100, 16, 84, 447, 448, 36, 37, + 54, 474, 527, 389, -1, 215, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 53, -1, -1, -1, -1, + 520, -1, -1, -1, -1, -1, -1, 478, 479, -1, + -1, 69, 70, 71, 72, 73, 74, 75, 76, 77, + 78, 79, 80, 81, 82, 83, 84, 85, 7, 8, + -1, 10, 11, 12, 13, 14, -1, 16, 17, -1, + 19, 20, 513, -1, 515, 516, -1, -1, -1, -1, + -1, -1, -1, 111, 112, 113, 114, 115, 116, 117, + 118, 119, 120, 121, 122, 123, 45, 125, -1, 127, + 128, 129, 3, 4, -1, -1, 7, 8, 9, -1, + 138, 0, 140, -1, -1, 16, 17, 145, 19, 20, + 21, 22, 23, -1, -1, -1, 15, 16, 17, -1, + 19, 20, -1, -1, -1, 36, 37, 26, 27, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 7, 8, 53, 10, 11, 12, 13, 14, 47, 16, + 17, 50, 19, 20, -1, 54, -1, -1, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, + 81, 82, 83, 84, 85, -1, -1, -1, 45, -1, + 139, -1, -1, 142, -1, -1, 145, -1, 147, 148, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, + 121, 122, 123, -1, 125, -1, 127, 128, 129, 7, + 8, -1, -1, -1, -1, -1, -1, -1, 16, 17, + -1, 19, 20, 21, 145, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 36, 37, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 7, 8, -1, 10, 11, 12, 13, 14, -1, + 16, 17, 139, 19, 20, 142, -1, 144, 145, -1, + 147, 69, 70, 71, 72, 73, 74, 75, 76, 77, + 78, 79, 80, 81, 82, 83, 84, 85, -1, 45, + 7, 8, -1, 10, 11, 12, 13, 14, -1, 16, + 17, -1, 19, 20, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 111, 112, 113, 114, 115, 116, 117, + 118, 119, 120, 121, 122, 123, -1, 125, 45, 127, + 128, 129, -1, -1, -1, 3, 4, -1, -1, -1, + 138, 9, 140, -1, 142, -1, 0, 145, -1, 147, + -1, 149, -1, 21, 22, 23, -1, -1, -1, -1, + -1, 15, 16, 17, -1, 19, 20, -1, 36, 37, + -1, -1, 26, 27, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 139, -1, 53, 142, -1, -1, 145, + -1, 147, 148, 47, -1, -1, 50, -1, -1, -1, + 54, 69, 70, 71, 72, 73, 74, 75, 76, 77, + 78, 79, 80, 81, 82, 83, 84, 85, -1, -1, + -1, -1, 139, -1, -1, 142, -1, -1, 145, -1, + 147, 148, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 111, 112, 113, 114, 115, 116, 117, + 118, 119, 120, 121, 122, 123, -1, 125, -1, 127, + 128, 129, 7, 8, -1, 10, 11, 12, 13, 14, + -1, 16, 17, -1, 19, 20, -1, 145, 7, 8, + -1, 10, 11, 12, 13, 14, -1, 16, 17, -1, + 19, 20, 7, 8, -1, 10, 11, 12, 13, 14, + 45, 16, 17, -1, 19, 20, 35, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 45, -1, -1, -1, + 35, -1, 7, 8, -1, 10, 11, 12, 13, 14, + 45, 16, 17, -1, 19, 20, 7, 8, -1, 10, + 11, 12, 13, 14, -1, 16, 17, -1, 19, 20, + 35, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 45, -1, -1, -1, 35, -1, 7, 8, -1, 10, + 11, 12, 13, 14, 45, 16, 17, -1, 19, 20, + -1, -1, -1, 7, 8, -1, 10, 11, 12, 13, + 14, -1, 16, 17, 139, 19, 20, 142, -1, -1, + 145, -1, 147, 148, 45, -1, -1, -1, -1, -1, + 139, -1, -1, 142, -1, -1, 145, -1, 147, -1, + -1, 45, -1, -1, 139, -1, -1, 142, -1, -1, + 145, -1, 147, -1, 7, 8, -1, 10, 11, 12, + 13, 14, -1, 16, 17, -1, 19, 20, -1, -1, + -1, -1, -1, -1, 139, -1, -1, 142, -1, -1, + 145, -1, 147, -1, -1, -1, -1, -1, 139, -1, + -1, 142, 45, -1, 145, -1, 147, -1, 7, 8, + -1, 10, 11, 12, 13, 14, -1, 16, 17, -1, + 19, 20, -1, -1, -1, -1, -1, -1, 139, -1, + -1, 142, -1, -1, 145, -1, 147, 22, 23, -1, + -1, -1, -1, -1, -1, 139, 45, -1, 142, -1, + -1, 145, -1, 147, 7, 8, -1, 10, 11, 12, + 13, 14, -1, 16, 17, -1, 19, 20, 7, 8, + -1, 10, 11, 12, 13, 14, -1, 16, 17, -1, + 19, 20, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 45, -1, -1, -1, 139, -1, -1, 142, + -1, -1, 145, -1, 147, -1, 45, 92, 93, 94, + 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 139, -1, -1, 142, -1, -1, 145, -1, 147, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 32, -1, + -1, -1, -1, -1, -1, -1, 139, -1, -1, 142, + -1, -1, 145, -1, 147, -1, -1, 51, 52, -1, + 139, -1, -1, 142, -1, -1, 145, -1, 147, 63, + 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, + 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, + 84, 85, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 106, 107, 108, -1, -1, 111, 112, 113, + 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, + 124, 125, 126, 127, 128, 129 +}; -/* Note: there must be only one dollar sign in this file. - It is replaced by the list of actions, each action - as one case of the switch. */ +/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing + symbol of state STATE-NUM. */ +static const yytype_uint8 yystos[] = +{ + 0, 16, 17, 19, 20, 26, 27, 47, 50, 54, + 158, 160, 161, 162, 163, 193, 194, 195, 197, 196, + 48, 62, 202, 136, 53, 136, 15, 136, 38, 39, + 40, 41, 42, 43, 44, 46, 134, 135, 164, 165, + 166, 0, 195, 42, 44, 167, 212, 38, 39, 40, + 43, 168, 209, 211, 218, 136, 136, 142, 203, 19, + 201, 7, 8, 10, 11, 12, 13, 14, 45, 139, + 142, 145, 147, 158, 161, 181, 182, 215, 166, 166, + 31, 33, 192, 166, 166, 18, 219, 220, 25, 148, + 210, 219, 19, 19, 19, 204, 140, 4, 4, 4, + 147, 10, 148, 182, 187, 138, 140, 192, 192, 38, + 40, 169, 28, 29, 191, 56, 57, 58, 59, 60, + 61, 170, 207, 207, 160, 223, 137, 144, 35, 182, + 183, 185, 186, 143, 143, 148, 187, 137, 148, 186, + 191, 191, 10, 182, 184, 11, 12, 13, 156, 157, + 182, 188, 4, 184, 24, 147, 208, 32, 51, 52, + 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, + 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, + 83, 84, 85, 106, 107, 108, 111, 112, 113, 114, + 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 151, 152, 153, 221, 227, + 228, 229, 230, 19, 172, 137, 141, 182, 182, 146, + 148, 182, 141, 188, 182, 215, 22, 23, 3, 4, + 5, 6, 9, 21, 36, 37, 84, 85, 111, 125, + 127, 128, 129, 142, 145, 147, 149, 151, 152, 153, + 189, 215, 198, 161, 51, 10, 182, 217, 11, 14, + 11, 156, 170, 86, 87, 88, 89, 90, 91, 92, + 93, 94, 95, 154, 22, 23, 92, 93, 94, 95, + 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, + 155, 182, 182, 217, 182, 182, 224, 217, 217, 217, + 217, 217, 182, 182, 217, 170, 109, 110, 113, 114, + 131, 132, 171, 35, 183, 174, 144, 146, 146, 174, + 199, 200, 154, 155, 140, 140, 140, 140, 140, 144, + 188, 190, 147, 190, 148, 190, 19, 140, 140, 140, + 137, 179, 140, 3, 4, 9, 21, 22, 23, 36, + 37, 53, 145, 189, 214, 215, 216, 216, 216, 216, + 184, 182, 182, 137, 176, 137, 176, 216, 142, 137, + 137, 137, 137, 137, 137, 216, 216, 34, 184, 182, + 217, 130, 133, 171, 173, 179, 179, 140, 140, 188, + 188, 188, 188, 188, 137, 144, 148, 182, 190, 146, + 148, 188, 188, 188, 30, 49, 177, 180, 35, 182, + 205, 206, 55, 213, 190, 137, 137, 216, 216, 216, + 11, 49, 11, 226, 216, 142, 217, 182, 217, 217, + 217, 137, 137, 182, 216, 216, 137, 188, 188, 226, + 137, 137, 137, 137, 188, 146, 148, 137, 137, 34, + 19, 4, 179, 172, 137, 141, 19, 146, 14, 14, + 140, 137, 137, 216, 4, 216, 137, 137, 216, 137, + 137, 137, 216, 216, 140, 137, 176, 182, 137, 137, + 141, 188, 188, 188, 188, 146, 188, 188, 182, 158, + 159, 35, 182, 174, 137, 216, 216, 182, 225, 216, + 216, 176, 176, 217, 216, 137, 217, 217, 217, 225, + 216, 188, 188, 137, 141, 137, 137, 141, 141, 141, + 172, 177, 178, 19, 137, 142, 216, 137, 141, 144, + 216, 141, 176, 141, 141, 188, 188, 188, 159, 49, + 175, 14, 144, 156, 222, 172, 182, 174, 144, 174, + 141, 141, 141, 4, 216, 214, 144, 156, 216, 34, + 137, 214, 172, 14, 14, 137, 216, 216, 14, 67, + 216, 14, 216 +}; #define yyerrok (yyerrstatus = 0) #define yyclearin (yychar = YYEMPTY) -#define YYEMPTY -2 +#define YYEMPTY (-2) #define YYEOF 0 + #define YYACCEPT goto yyacceptlab -#define YYABORT goto yyabortlab -#define YYERROR goto yyerrlab1 -/* Like YYERROR except do call yyerror. - This remains here temporarily to ease the - transition to the new meaning of YYERROR, for GCC. +#define YYABORT goto yyabortlab +#define YYERROR goto yyerrorlab + + +/* Like YYERROR except do call yyerror. This remains here temporarily + to ease the transition to the new meaning of YYERROR, for GCC. Once GCC version 2 has supplanted version 1, this can go. */ + #define YYFAIL goto yyerrlab + #define YYRECOVERING() (!!yyerrstatus) -#define YYBACKUP(token, value) \ + +#define YYBACKUP(Token, Value) \ do \ if (yychar == YYEMPTY && yylen == 1) \ - { yychar = (token), yylval = (value); \ - yychar1 = YYTRANSLATE (yychar); \ - YYPOPSTACK; \ + { \ + yychar = (Token); \ + yylval = (Value); \ + yytoken = YYTRANSLATE (yychar); \ + YYPOPSTACK (1); \ goto yybackup; \ } \ else \ - { yyerror ("syntax error: cannot back up"); YYERROR; } \ -while (0) + { \ + yyerror (YY_("syntax error: cannot back up")); \ + YYERROR; \ + } \ +while (YYID (0)) + #define YYTERROR 1 #define YYERRCODE 256 -#ifndef YYPURE -#define YYLEX yylex() + +/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. + If N is 0, then set CURRENT to the empty location which ends + the previous symbol: RHS[0] (always defined). */ + +#define YYRHSLOC(Rhs, K) ((Rhs)[K]) +#ifndef YYLLOC_DEFAULT +# define YYLLOC_DEFAULT(Current, Rhs, N) \ + do \ + if (YYID (N)) \ + { \ + (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ + (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ + (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ + (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ + } \ + else \ + { \ + (Current).first_line = (Current).last_line = \ + YYRHSLOC (Rhs, 0).last_line; \ + (Current).first_column = (Current).last_column = \ + YYRHSLOC (Rhs, 0).last_column; \ + } \ + while (YYID (0)) #endif -#ifdef YYPURE -#ifdef YYLSP_NEEDED -#ifdef YYLEX_PARAM -#define YYLEX yylex(&yylval, &yylloc, YYLEX_PARAM) -#else -#define YYLEX yylex(&yylval, &yylloc) + +/* YY_LOCATION_PRINT -- Print the location on the stream. + This macro was not mandated originally: define only if we know + we won't break user code: when these are the locations we know. */ + +#ifndef YY_LOCATION_PRINT +# if YYLTYPE_IS_TRIVIAL +# define YY_LOCATION_PRINT(File, Loc) \ + fprintf (File, "%d.%d-%d.%d", \ + (Loc).first_line, (Loc).first_column, \ + (Loc).last_line, (Loc).last_column) +# else +# define YY_LOCATION_PRINT(File, Loc) ((void) 0) +# endif #endif -#else /* not YYLSP_NEEDED */ + + +/* YYLEX -- calling `yylex' with the right arguments. */ + #ifdef YYLEX_PARAM -#define YYLEX yylex(&yylval, YYLEX_PARAM) +# define YYLEX yylex (YYLEX_PARAM) #else -#define YYLEX yylex(&yylval) +# define YYLEX yylex () #endif -#endif /* not YYLSP_NEEDED */ + +/* Enable debugging if requested. */ +#if YYDEBUG + +# ifndef YYFPRINTF +# include /* INFRINGES ON USER NAME SPACE */ +# define YYFPRINTF fprintf +# endif + +# define YYDPRINTF(Args) \ +do { \ + if (yydebug) \ + YYFPRINTF Args; \ +} while (YYID (0)) + +# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ +do { \ + if (yydebug) \ + { \ + YYFPRINTF (stderr, "%s ", Title); \ + yy_symbol_print (stderr, \ + Type, Value); \ + YYFPRINTF (stderr, "\n"); \ + } \ +} while (YYID (0)) + + +/*--------------------------------. +| Print this symbol on YYOUTPUT. | +`--------------------------------*/ + +/*ARGSUSED*/ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) +#else +static void +yy_symbol_value_print (yyoutput, yytype, yyvaluep) + FILE *yyoutput; + int yytype; + YYSTYPE const * const yyvaluep; #endif +{ + if (!yyvaluep) + return; +# ifdef YYPRINT + if (yytype < YYNTOKENS) + YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); +# else + YYUSE (yyoutput); +# endif + switch (yytype) + { + default: + break; + } +} -/* If nonreentrant, generate the variables here */ -#ifndef YYPURE +/*--------------------------------. +| Print this symbol on YYOUTPUT. | +`--------------------------------*/ + +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) +#else +static void +yy_symbol_print (yyoutput, yytype, yyvaluep) + FILE *yyoutput; + int yytype; + YYSTYPE const * const yyvaluep; +#endif +{ + if (yytype < YYNTOKENS) + YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); + else + YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); + + yy_symbol_value_print (yyoutput, yytype, yyvaluep); + YYFPRINTF (yyoutput, ")"); +} -int yychar; /* the lookahead symbol */ -YYSTYPE yylval; /* the semantic value of the */ - /* lookahead symbol */ +/*------------------------------------------------------------------. +| yy_stack_print -- Print the state stack from its BOTTOM up to its | +| TOP (included). | +`------------------------------------------------------------------*/ -#ifdef YYLSP_NEEDED -YYLTYPE yylloc; /* location data for the lookahead */ - /* symbol */ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yy_stack_print (yytype_int16 *bottom, yytype_int16 *top) +#else +static void +yy_stack_print (bottom, top) + yytype_int16 *bottom; + yytype_int16 *top; #endif +{ + YYFPRINTF (stderr, "Stack now"); + for (; bottom <= top; ++bottom) + YYFPRINTF (stderr, " %d", *bottom); + YYFPRINTF (stderr, "\n"); +} + +# define YY_STACK_PRINT(Bottom, Top) \ +do { \ + if (yydebug) \ + yy_stack_print ((Bottom), (Top)); \ +} while (YYID (0)) + -int yynerrs; /* number of parse errors so far */ -#endif /* not YYPURE */ +/*------------------------------------------------. +| Report that the YYRULE is going to be reduced. | +`------------------------------------------------*/ -#if YYDEBUG != 0 -int yydebug; /* nonzero means print parse trace */ -/* Since this is uninitialized, it does not stop multiple parsers - from coexisting. */ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yy_reduce_print (YYSTYPE *yyvsp, int yyrule) +#else +static void +yy_reduce_print (yyvsp, yyrule) + YYSTYPE *yyvsp; + int yyrule; #endif +{ + int yynrhs = yyr2[yyrule]; + int yyi; + unsigned long int yylno = yyrline[yyrule]; + YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", + yyrule - 1, yylno); + /* The symbols being reduced. */ + for (yyi = 0; yyi < yynrhs; yyi++) + { + fprintf (stderr, " $%d = ", yyi + 1); + yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], + &(yyvsp[(yyi + 1) - (yynrhs)]) + ); + fprintf (stderr, "\n"); + } +} -/* YYINITDEPTH indicates the initial size of the parser's stacks */ +# define YY_REDUCE_PRINT(Rule) \ +do { \ + if (yydebug) \ + yy_reduce_print (yyvsp, Rule); \ +} while (YYID (0)) + +/* Nonzero means print parse trace. It is left uninitialized so that + multiple parsers can coexist. */ +int yydebug; +#else /* !YYDEBUG */ +# define YYDPRINTF(Args) +# define YY_SYMBOL_PRINT(Title, Type, Value, Location) +# define YY_STACK_PRINT(Bottom, Top) +# define YY_REDUCE_PRINT(Rule) +#endif /* !YYDEBUG */ + +/* YYINITDEPTH -- initial size of the parser's stacks. */ #ifndef YYINITDEPTH -#define YYINITDEPTH 200 +# define YYINITDEPTH 200 #endif -/* YYMAXDEPTH is the maximum size the stacks can grow to - (effective only if the built-in stack extension method is used). */ +/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only + if the built-in stack extension method is used). -#if YYMAXDEPTH == 0 -#undef YYMAXDEPTH -#endif + Do not make this value too large; the results are undefined if + YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) + evaluated with infinite-precision integer arithmetic. */ #ifndef YYMAXDEPTH -#define YYMAXDEPTH 10000 +# define YYMAXDEPTH 10000 #endif + -/* Define __yy_memcpy. Note that the size argument - should be passed with type unsigned int, because that is what the non-GCC - definitions require. With GCC, __builtin_memcpy takes an arg - of type size_t, but it can handle unsigned int. */ - -#if __GNUC__ > 1 /* GNU C and GNU C++ define this. */ -#define __yy_memcpy(TO,FROM,COUNT) __builtin_memcpy(TO,FROM,COUNT) -#else /* not GNU C or C++ */ -#ifndef __cplusplus -/* This is the most reliable way to avoid incompatibilities - in available built-in functions on various systems. */ -static void -__yy_memcpy (to, from, count) - char *to; - char *from; - unsigned int count; +#if YYERROR_VERBOSE + +# ifndef yystrlen +# if defined __GLIBC__ && defined _STRING_H +# define yystrlen strlen +# else +/* Return the length of YYSTR. */ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static YYSIZE_T +yystrlen (const char *yystr) +#else +static YYSIZE_T +yystrlen (yystr) + const char *yystr; +#endif +{ + YYSIZE_T yylen; + for (yylen = 0; yystr[yylen]; yylen++) + continue; + return yylen; +} +# endif +# endif + +# ifndef yystpcpy +# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE +# define yystpcpy stpcpy +# else +/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in + YYDEST. */ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static char * +yystpcpy (char *yydest, const char *yysrc) +#else +static char * +yystpcpy (yydest, yysrc) + char *yydest; + const char *yysrc; +#endif { - register char *f = from; - register char *t = to; - register int i = count; + char *yyd = yydest; + const char *yys = yysrc; - while (i-- > 0) - *t++ = *f++; + while ((*yyd++ = *yys++) != '\0') + continue; + + return yyd - 1; } +# endif +# endif -#else /* __cplusplus */ +# ifndef yytnamerr +/* Copy to YYRES the contents of YYSTR after stripping away unnecessary + quotes and backslashes, so that it's suitable for yyerror. The + heuristic is that double-quoting is unnecessary unless the string + contains an apostrophe, a comma, or backslash (other than + backslash-backslash). YYSTR is taken from yytname. If YYRES is + null, do not copy; instead, return the length of what the result + would have been. */ +static YYSIZE_T +yytnamerr (char *yyres, const char *yystr) +{ + if (*yystr == '"') + { + YYSIZE_T yyn = 0; + char const *yyp = yystr; -/* This is the most reliable way to avoid incompatibilities - in available built-in functions on various systems. */ -static void -__yy_memcpy (char *to, char *from, unsigned int count) + for (;;) + switch (*++yyp) + { + case '\'': + case ',': + goto do_not_strip_quotes; + + case '\\': + if (*++yyp != '\\') + goto do_not_strip_quotes; + /* Fall through. */ + default: + if (yyres) + yyres[yyn] = *yyp; + yyn++; + break; + + case '"': + if (yyres) + yyres[yyn] = '\0'; + return yyn; + } + do_not_strip_quotes: ; + } + + if (! yyres) + return yystrlen (yystr); + + return yystpcpy (yyres, yystr) - yyres; +} +# endif + +/* Copy into YYRESULT an error message about the unexpected token + YYCHAR while in state YYSTATE. Return the number of bytes copied, + including the terminating null byte. If YYRESULT is null, do not + copy anything; just return the number of bytes that would be + copied. As a special case, return 0 if an ordinary "syntax error" + message will do. Return YYSIZE_MAXIMUM if overflow occurs during + size calculation. */ +static YYSIZE_T +yysyntax_error (char *yyresult, int yystate, int yychar) { - register char *t = to; - register char *f = from; - register int i = count; + int yyn = yypact[yystate]; + + if (! (YYPACT_NINF < yyn && yyn <= YYLAST)) + return 0; + else + { + int yytype = YYTRANSLATE (yychar); + YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]); + YYSIZE_T yysize = yysize0; + YYSIZE_T yysize1; + int yysize_overflow = 0; + enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; + char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; + int yyx; + +# if 0 + /* This is so xgettext sees the translatable formats that are + constructed on the fly. */ + YY_("syntax error, unexpected %s"); + YY_("syntax error, unexpected %s, expecting %s"); + YY_("syntax error, unexpected %s, expecting %s or %s"); + YY_("syntax error, unexpected %s, expecting %s or %s or %s"); + YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"); +# endif + char *yyfmt; + char const *yyf; + static char const yyunexpected[] = "syntax error, unexpected %s"; + static char const yyexpecting[] = ", expecting %s"; + static char const yyor[] = " or %s"; + char yyformat[sizeof yyunexpected + + sizeof yyexpecting - 1 + + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2) + * (sizeof yyor - 1))]; + char const *yyprefix = yyexpecting; + + /* Start YYX at -YYN if negative to avoid negative indexes in + YYCHECK. */ + int yyxbegin = yyn < 0 ? -yyn : 0; + + /* Stay within bounds of both yycheck and yytname. */ + int yychecklim = YYLAST - yyn + 1; + int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; + int yycount = 1; + + yyarg[0] = yytname[yytype]; + yyfmt = yystpcpy (yyformat, yyunexpected); + + for (yyx = yyxbegin; yyx < yyxend; ++yyx) + if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) + { + if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) + { + yycount = 1; + yysize = yysize0; + yyformat[sizeof yyunexpected - 1] = '\0'; + break; + } + yyarg[yycount++] = yytname[yyx]; + yysize1 = yysize + yytnamerr (0, yytname[yyx]); + yysize_overflow |= (yysize1 < yysize); + yysize = yysize1; + yyfmt = yystpcpy (yyfmt, yyprefix); + yyprefix = yyor; + } + + yyf = YY_(yyformat); + yysize1 = yysize + yystrlen (yyf); + yysize_overflow |= (yysize1 < yysize); + yysize = yysize1; + + if (yysize_overflow) + return YYSIZE_MAXIMUM; - while (i-- > 0) - *t++ = *f++; + if (yyresult) + { + /* Avoid sprintf, as that infringes on the user's name space. + Don't have undefined behavior even if the translation + produced a string with the wrong number of "%s"s. */ + char *yyp = yyresult; + int yyi = 0; + while ((*yyp = *yyf) != '\0') + { + if (*yyp == '%' && yyf[1] == 's' && yyi < yycount) + { + yyp += yytnamerr (yyp, yyarg[yyi++]); + yyf += 2; + } + else + { + yyp++; + yyf++; + } + } + } + return yysize; + } } +#endif /* YYERROR_VERBOSE */ + +/*-----------------------------------------------. +| Release the memory associated to this symbol. | +`-----------------------------------------------*/ + +/*ARGSUSED*/ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep) +#else +static void +yydestruct (yymsg, yytype, yyvaluep) + const char *yymsg; + int yytype; + YYSTYPE *yyvaluep; #endif -#endif - -#line 217 "/usr/share/bison.simple" +{ + YYUSE (yyvaluep); -/* The user can define YYPARSE_PARAM as the name of an argument to be passed - into yyparse. The argument should have type void *. - It should actually point to an object. - Grammar actions can access the variable by casting it - to the proper pointer type. */ + if (!yymsg) + yymsg = "Deleting"; + YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); -#ifdef YYPARSE_PARAM -#ifdef __cplusplus -#define YYPARSE_PARAM_ARG void *YYPARSE_PARAM -#define YYPARSE_PARAM_DECL -#else /* not __cplusplus */ -#define YYPARSE_PARAM_ARG YYPARSE_PARAM -#define YYPARSE_PARAM_DECL void *YYPARSE_PARAM; -#endif /* not __cplusplus */ -#else /* not YYPARSE_PARAM */ -#define YYPARSE_PARAM_ARG -#define YYPARSE_PARAM_DECL -#endif /* not YYPARSE_PARAM */ + switch (yytype) + { + + default: + break; + } +} + + +/* Prevent warnings from -Wmissing-prototypes. */ -/* Prevent warning if -Wstrict-prototypes. */ -#ifdef __GNUC__ #ifdef YYPARSE_PARAM -int yyparse (void *); +#if defined __STDC__ || defined __cplusplus +int yyparse (void *YYPARSE_PARAM); #else -int yyparse (void); +int yyparse (); #endif +#else /* ! YYPARSE_PARAM */ +#if defined __STDC__ || defined __cplusplus +int yyparse (void); +#else +int yyparse (); #endif +#endif /* ! YYPARSE_PARAM */ + -int -yyparse(YYPARSE_PARAM_ARG) - YYPARSE_PARAM_DECL -{ - register int yystate; - register int yyn; - register short *yyssp; - register YYSTYPE *yyvsp; - int yyerrstatus; /* number of tokens to shift before error messages enabled */ - int yychar1 = 0; /* lookahead token as an internal (translated) token number */ - - short yyssa[YYINITDEPTH]; /* the state stack */ - YYSTYPE yyvsa[YYINITDEPTH]; /* the semantic value stack */ - - short *yyss = yyssa; /* refer to the stacks thru separate pointers */ - YYSTYPE *yyvs = yyvsa; /* to allow yyoverflow to reallocate them elsewhere */ - -#ifdef YYLSP_NEEDED - YYLTYPE yylsa[YYINITDEPTH]; /* the location stack */ - YYLTYPE *yyls = yylsa; - YYLTYPE *yylsp; -#define YYPOPSTACK (yyvsp--, yyssp--, yylsp--) +/* The look-ahead symbol. */ +int yychar; + +/* The semantic value of the look-ahead symbol. */ +YYSTYPE yylval; + +/* Number of syntax errors so far. */ +int yynerrs; + + + +/*----------. +| yyparse. | +`----------*/ + +#ifdef YYPARSE_PARAM +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +int +yyparse (void *YYPARSE_PARAM) #else -#define YYPOPSTACK (yyvsp--, yyssp--) +int +yyparse (YYPARSE_PARAM) + void *YYPARSE_PARAM; #endif +#else /* ! YYPARSE_PARAM */ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +int +yyparse (void) +#else +int +yyparse () - int yystacksize = YYINITDEPTH; - int yyfree_stacks = 0; - -#ifdef YYPURE - int yychar; - YYSTYPE yylval; - int yynerrs; -#ifdef YYLSP_NEEDED - YYLTYPE yylloc; #endif #endif +{ + + int yystate; + int yyn; + int yyresult; + /* Number of tokens to shift before error messages enabled. */ + int yyerrstatus; + /* Look-ahead token as an internal (translated) token number. */ + int yytoken = 0; +#if YYERROR_VERBOSE + /* Buffer for error messages, and its allocated size. */ + char yymsgbuf[128]; + char *yymsg = yymsgbuf; + YYSIZE_T yymsg_alloc = sizeof yymsgbuf; +#endif - YYSTYPE yyval; /* the variable used to return */ - /* semantic values from the action */ - /* routines */ + /* Three stacks and their tools: + `yyss': related to states, + `yyvs': related to semantic values, + `yyls': related to locations. - int yylen; + Refer to the stacks thru separate pointers, to allow yyoverflow + to reallocate them elsewhere. */ + + /* The state stack. */ + yytype_int16 yyssa[YYINITDEPTH]; + yytype_int16 *yyss = yyssa; + yytype_int16 *yyssp; + + /* The semantic value stack. */ + YYSTYPE yyvsa[YYINITDEPTH]; + YYSTYPE *yyvs = yyvsa; + YYSTYPE *yyvsp; + + + +#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) + + YYSIZE_T yystacksize = YYINITDEPTH; + + /* The variables used to return semantic value and location from the + action routines. */ + YYSTYPE yyval; -#if YYDEBUG != 0 - if (yydebug) - fprintf(stderr, "Starting parse\n"); -#endif + + /* The number of symbols on the RHS of the reduced rule. + Keep to zero when no symbol should be popped. */ + int yylen = 0; + + YYDPRINTF ((stderr, "Starting parse\n")); yystate = 0; yyerrstatus = 0; @@ -2188,652 +3099,700 @@ so that they stay on the same level as the state stack. The wasted elements are never initialized. */ - yyssp = yyss - 1; + yyssp = yyss; yyvsp = yyvs; -#ifdef YYLSP_NEEDED - yylsp = yyls; -#endif -/* Push a new state, which is found in yystate . */ -/* In all cases, when you get here, the value and location stacks - have just been pushed. so pushing a state here evens the stacks. */ -yynewstate: + goto yysetstate; - *++yyssp = yystate; +/*------------------------------------------------------------. +| yynewstate -- Push a new state, which is found in yystate. | +`------------------------------------------------------------*/ + yynewstate: + /* In all cases, when you get here, the value and location stacks + have just been pushed. So pushing a state here evens the stacks. */ + yyssp++; - if (yyssp >= yyss + yystacksize - 1) - { - /* Give user a chance to reallocate the stack */ - /* Use copies of these so that the &'s don't force the real ones into memory. */ - YYSTYPE *yyvs1 = yyvs; - short *yyss1 = yyss; -#ifdef YYLSP_NEEDED - YYLTYPE *yyls1 = yyls; -#endif + yysetstate: + *yyssp = yystate; + if (yyss + yystacksize - 1 <= yyssp) + { /* Get the current used size of the three stacks, in elements. */ - int size = yyssp - yyss + 1; + YYSIZE_T yysize = yyssp - yyss + 1; #ifdef yyoverflow - /* Each stack pointer address is followed by the size of - the data in use in that stack, in bytes. */ -#ifdef YYLSP_NEEDED - /* This used to be a conditional around just the two extra args, - but that might be undefined if yyoverflow is a macro. */ - yyoverflow("parser stack overflow", - &yyss1, size * sizeof (*yyssp), - &yyvs1, size * sizeof (*yyvsp), - &yyls1, size * sizeof (*yylsp), - &yystacksize); -#else - yyoverflow("parser stack overflow", - &yyss1, size * sizeof (*yyssp), - &yyvs1, size * sizeof (*yyvsp), - &yystacksize); -#endif + { + /* Give user a chance to reallocate the stack. Use copies of + these so that the &'s don't force the real ones into + memory. */ + YYSTYPE *yyvs1 = yyvs; + yytype_int16 *yyss1 = yyss; + + + /* Each stack pointer address is followed by the size of the + data in use in that stack, in bytes. This used to be a + conditional around just the two extra args, but that might + be undefined if yyoverflow is a macro. */ + yyoverflow (YY_("memory exhausted"), + &yyss1, yysize * sizeof (*yyssp), + &yyvs1, yysize * sizeof (*yyvsp), - yyss = yyss1; yyvs = yyvs1; -#ifdef YYLSP_NEEDED - yyls = yyls1; -#endif + &yystacksize); + + yyss = yyss1; + yyvs = yyvs1; + } #else /* no yyoverflow */ +# ifndef YYSTACK_RELOCATE + goto yyexhaustedlab; +# else /* Extend the stack our own way. */ - if (yystacksize >= YYMAXDEPTH) - { - yyerror("parser stack overflow"); - if (yyfree_stacks) - { - free (yyss); - free (yyvs); -#ifdef YYLSP_NEEDED - free (yyls); -#endif - } - return 2; - } + if (YYMAXDEPTH <= yystacksize) + goto yyexhaustedlab; yystacksize *= 2; - if (yystacksize > YYMAXDEPTH) + if (YYMAXDEPTH < yystacksize) yystacksize = YYMAXDEPTH; -#ifndef YYSTACK_USE_ALLOCA - yyfree_stacks = 1; -#endif - yyss = (short *) YYSTACK_ALLOC (yystacksize * sizeof (*yyssp)); - __yy_memcpy ((char *)yyss, (char *)yyss1, - size * (unsigned int) sizeof (*yyssp)); - yyvs = (YYSTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yyvsp)); - __yy_memcpy ((char *)yyvs, (char *)yyvs1, - size * (unsigned int) sizeof (*yyvsp)); -#ifdef YYLSP_NEEDED - yyls = (YYLTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yylsp)); - __yy_memcpy ((char *)yyls, (char *)yyls1, - size * (unsigned int) sizeof (*yylsp)); -#endif + + { + yytype_int16 *yyss1 = yyss; + union yyalloc *yyptr = + (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); + if (! yyptr) + goto yyexhaustedlab; + YYSTACK_RELOCATE (yyss); + YYSTACK_RELOCATE (yyvs); + +# undef YYSTACK_RELOCATE + if (yyss1 != yyssa) + YYSTACK_FREE (yyss1); + } +# endif #endif /* no yyoverflow */ - yyssp = yyss + size - 1; - yyvsp = yyvs + size - 1; -#ifdef YYLSP_NEEDED - yylsp = yyls + size - 1; -#endif + yyssp = yyss + yysize - 1; + yyvsp = yyvs + yysize - 1; -#if YYDEBUG != 0 - if (yydebug) - fprintf(stderr, "Stack size increased to %d\n", yystacksize); -#endif - if (yyssp >= yyss + yystacksize - 1) + YYDPRINTF ((stderr, "Stack size increased to %lu\n", + (unsigned long int) yystacksize)); + + if (yyss + yystacksize - 1 <= yyssp) YYABORT; } -#if YYDEBUG != 0 - if (yydebug) - fprintf(stderr, "Entering state %d\n", yystate); -#endif + YYDPRINTF ((stderr, "Entering state %d\n", yystate)); goto yybackup; - yybackup: -/* Do appropriate processing given the current state. */ -/* Read a lookahead token if we need one and don't already have one. */ -/* yyresume: */ +/*-----------. +| yybackup. | +`-----------*/ +yybackup: - /* First try to decide what to do without reference to lookahead token. */ + /* Do appropriate processing given the current state. Read a + look-ahead token if we need one and don't already have one. */ + /* First try to decide what to do without reference to look-ahead token. */ yyn = yypact[yystate]; - if (yyn == YYFLAG) + if (yyn == YYPACT_NINF) goto yydefault; - /* Not known => get a lookahead token if don't already have one. */ - - /* yychar is either YYEMPTY or YYEOF - or a valid token in external form. */ + /* Not known => get a look-ahead token if don't already have one. */ + /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */ if (yychar == YYEMPTY) { -#if YYDEBUG != 0 - if (yydebug) - fprintf(stderr, "Reading a token: "); -#endif + YYDPRINTF ((stderr, "Reading a token: ")); yychar = YYLEX; } - /* Convert token to internal form (in yychar1) for indexing tables with */ - - if (yychar <= 0) /* This means end of input. */ + if (yychar <= YYEOF) { - yychar1 = 0; - yychar = YYEOF; /* Don't call YYLEX any more */ - -#if YYDEBUG != 0 - if (yydebug) - fprintf(stderr, "Now at end of input.\n"); -#endif + yychar = yytoken = YYEOF; + YYDPRINTF ((stderr, "Now at end of input.\n")); } else { - yychar1 = YYTRANSLATE(yychar); + yytoken = YYTRANSLATE (yychar); + YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); + } -#if YYDEBUG != 0 - if (yydebug) - { - fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]); - /* Give the individual parser a way to print the precise meaning - of a token, for further debugging info. */ -#ifdef YYPRINT - YYPRINT (stderr, yychar, yylval); -#endif - fprintf (stderr, ")\n"); - } -#endif - } - - yyn += yychar1; - if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1) + /* If the proper action on seeing token YYTOKEN is to reduce or to + detect an error, take that action. */ + yyn += yytoken; + if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) goto yydefault; - yyn = yytable[yyn]; - - /* yyn is what to do for this token type in this state. - Negative => reduce, -yyn is rule number. - Positive => shift, yyn is new state. - New state is final state => don't bother to shift, - just return success. - 0, or most negative number => error. */ - - if (yyn < 0) + if (yyn <= 0) { - if (yyn == YYFLAG) + if (yyn == 0 || yyn == YYTABLE_NINF) goto yyerrlab; yyn = -yyn; goto yyreduce; } - else if (yyn == 0) - goto yyerrlab; if (yyn == YYFINAL) YYACCEPT; - /* Shift the lookahead token. */ + /* Count tokens shifted since error; after three, turn off error + status. */ + if (yyerrstatus) + yyerrstatus--; -#if YYDEBUG != 0 - if (yydebug) - fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]); -#endif + /* Shift the look-ahead token. */ + YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); - /* Discard the token being shifted unless it is eof. */ + /* Discard the shifted token unless it is eof. */ if (yychar != YYEOF) yychar = YYEMPTY; + yystate = yyn; *++yyvsp = yylval; -#ifdef YYLSP_NEEDED - *++yylsp = yylloc; -#endif - - /* count tokens shifted since error; after three, turn off error status. */ - if (yyerrstatus) yyerrstatus--; - yystate = yyn; goto yynewstate; -/* Do the default action for the current state. */ -yydefault: +/*-----------------------------------------------------------. +| yydefault -- do the default action for the current state. | +`-----------------------------------------------------------*/ +yydefault: yyn = yydefact[yystate]; if (yyn == 0) goto yyerrlab; + goto yyreduce; -/* Do a reduction. yyn is the number of a rule to reduce with. */ + +/*-----------------------------. +| yyreduce -- Do a reduction. | +`-----------------------------*/ yyreduce: + /* yyn is the number of a rule to reduce with. */ yylen = yyr2[yyn]; - if (yylen > 0) - yyval = yyvsp[1-yylen]; /* implement default value of the action */ -#if YYDEBUG != 0 - if (yydebug) + /* If YYLEN is nonzero, implement the default value of the action: + `$$ = $1'. + + Otherwise, the following line sets YYVAL to garbage. + This behavior is undocumented and Bison + users should not rely upon it. Assigning to YYVAL + unconditionally makes the parser a bit smaller, and it avoids a + GCC warning that YYVAL may be used uninitialized. */ + yyval = yyvsp[1-yylen]; + + + YY_REDUCE_PRINT (yyn); + switch (yyn) { - int i; + case 29: +#line 1100 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { (yyval.IPredicate) = ICmpInst::ICMP_EQ; ;} + break; - fprintf (stderr, "Reducing via rule %d (line %d), ", - yyn, yyrline[yyn]); - - /* Print the symbols being reduced, and their result. */ - for (i = yyprhs[yyn]; yyrhs[i] > 0; i++) - fprintf (stderr, "%s ", yytname[yyrhs[i]]); - fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]); - } -#endif - - - switch (yyn) { - -case 28: -#line 1099 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.IPredicate = ICmpInst::ICMP_EQ; ; - break;} -case 29: -#line 1099 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.IPredicate = ICmpInst::ICMP_NE; ; - break;} -case 30: -#line 1100 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.IPredicate = ICmpInst::ICMP_SLT; ; - break;} -case 31: -#line 1100 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.IPredicate = ICmpInst::ICMP_SGT; ; - break;} -case 32: -#line 1101 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.IPredicate = ICmpInst::ICMP_SLE; ; - break;} -case 33: -#line 1101 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.IPredicate = ICmpInst::ICMP_SGE; ; - break;} -case 34: -#line 1102 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.IPredicate = ICmpInst::ICMP_ULT; ; - break;} -case 35: -#line 1102 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.IPredicate = ICmpInst::ICMP_UGT; ; - break;} -case 36: -#line 1103 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.IPredicate = ICmpInst::ICMP_ULE; ; - break;} -case 37: -#line 1103 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.IPredicate = ICmpInst::ICMP_UGE; ; - break;} -case 38: -#line 1107 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.FPredicate = FCmpInst::FCMP_OEQ; ; - break;} -case 39: -#line 1107 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.FPredicate = FCmpInst::FCMP_ONE; ; - break;} -case 40: -#line 1108 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.FPredicate = FCmpInst::FCMP_OLT; ; - break;} -case 41: -#line 1108 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.FPredicate = FCmpInst::FCMP_OGT; ; - break;} -case 42: -#line 1109 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.FPredicate = FCmpInst::FCMP_OLE; ; - break;} -case 43: -#line 1109 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.FPredicate = FCmpInst::FCMP_OGE; ; - break;} -case 44: -#line 1110 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.FPredicate = FCmpInst::FCMP_ORD; ; - break;} -case 45: -#line 1110 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.FPredicate = FCmpInst::FCMP_UNO; ; - break;} -case 46: -#line 1111 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.FPredicate = FCmpInst::FCMP_UEQ; ; - break;} -case 47: -#line 1111 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.FPredicate = FCmpInst::FCMP_UNE; ; - break;} -case 48: -#line 1112 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.FPredicate = FCmpInst::FCMP_ULT; ; - break;} -case 49: -#line 1112 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.FPredicate = FCmpInst::FCMP_UGT; ; - break;} -case 50: -#line 1113 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.FPredicate = FCmpInst::FCMP_ULE; ; - break;} -case 51: -#line 1113 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.FPredicate = FCmpInst::FCMP_UGE; ; - break;} -case 52: -#line 1114 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.FPredicate = FCmpInst::FCMP_TRUE; ; - break;} -case 53: -#line 1115 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.FPredicate = FCmpInst::FCMP_FALSE; ; - break;} -case 60: -#line 1124 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.StrVal = 0; ; - break;} -case 61: -#line 1128 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - yyval.StrVal = yyvsp[-1].StrVal; + case 30: +#line 1100 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { (yyval.IPredicate) = ICmpInst::ICMP_NE; ;} + break; + + case 31: +#line 1101 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { (yyval.IPredicate) = ICmpInst::ICMP_SLT; ;} + break; + + case 32: +#line 1101 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { (yyval.IPredicate) = ICmpInst::ICMP_SGT; ;} + break; + + case 33: +#line 1102 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { (yyval.IPredicate) = ICmpInst::ICMP_SLE; ;} + break; + + case 34: +#line 1102 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { (yyval.IPredicate) = ICmpInst::ICMP_SGE; ;} + break; + + case 35: +#line 1103 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { (yyval.IPredicate) = ICmpInst::ICMP_ULT; ;} + break; + + case 36: +#line 1103 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { (yyval.IPredicate) = ICmpInst::ICMP_UGT; ;} + break; + + case 37: +#line 1104 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { (yyval.IPredicate) = ICmpInst::ICMP_ULE; ;} + break; + + case 38: +#line 1104 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { (yyval.IPredicate) = ICmpInst::ICMP_UGE; ;} + break; + + case 39: +#line 1108 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { (yyval.FPredicate) = FCmpInst::FCMP_OEQ; ;} + break; + + case 40: +#line 1108 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { (yyval.FPredicate) = FCmpInst::FCMP_ONE; ;} + break; + + case 41: +#line 1109 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { (yyval.FPredicate) = FCmpInst::FCMP_OLT; ;} + break; + + case 42: +#line 1109 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { (yyval.FPredicate) = FCmpInst::FCMP_OGT; ;} + break; + + case 43: +#line 1110 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { (yyval.FPredicate) = FCmpInst::FCMP_OLE; ;} + break; + + case 44: +#line 1110 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { (yyval.FPredicate) = FCmpInst::FCMP_OGE; ;} + break; + + case 45: +#line 1111 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { (yyval.FPredicate) = FCmpInst::FCMP_ORD; ;} + break; + + case 46: +#line 1111 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { (yyval.FPredicate) = FCmpInst::FCMP_UNO; ;} + break; + + case 47: +#line 1112 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { (yyval.FPredicate) = FCmpInst::FCMP_UEQ; ;} + break; + + case 48: +#line 1112 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { (yyval.FPredicate) = FCmpInst::FCMP_UNE; ;} + break; + + case 49: +#line 1113 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { (yyval.FPredicate) = FCmpInst::FCMP_ULT; ;} + break; + + case 50: +#line 1113 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { (yyval.FPredicate) = FCmpInst::FCMP_UGT; ;} + break; + + case 51: +#line 1114 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { (yyval.FPredicate) = FCmpInst::FCMP_ULE; ;} + break; + + case 52: +#line 1114 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { (yyval.FPredicate) = FCmpInst::FCMP_UGE; ;} + break; + + case 53: +#line 1115 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { (yyval.FPredicate) = FCmpInst::FCMP_TRUE; ;} + break; + + case 54: +#line 1116 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { (yyval.FPredicate) = FCmpInst::FCMP_FALSE; ;} + break; + + case 61: +#line 1125 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { (yyval.StrVal) = 0; ;} + break; + + case 62: +#line 1129 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + (yyval.StrVal) = (yyvsp[(1) - (2)].StrVal); CHECK_FOR_ERROR - ; - break;} -case 62: -#line 1132 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - yyval.StrVal = 0; + ;} + break; + + case 63: +#line 1133 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + (yyval.StrVal) = 0; CHECK_FOR_ERROR - ; - break;} -case 65: -#line 1139 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - yyval.StrVal = yyvsp[-1].StrVal; + ;} + break; + + case 67: +#line 1141 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + (yyval.StrVal) = 0; CHECK_FOR_ERROR - ; - break;} -case 66: -#line 1143 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - yyval.StrVal = 0; + ;} + break; + + case 68: +#line 1146 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + (yyval.StrVal) = (yyvsp[(1) - (2)].StrVal); CHECK_FOR_ERROR - ; - break;} -case 67: -#line 1149 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.Linkage = GlobalValue::InternalLinkage; ; - break;} -case 68: -#line 1150 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.Linkage = GlobalValue::WeakLinkage; ; - break;} -case 69: -#line 1151 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.Linkage = GlobalValue::LinkOnceLinkage; ; - break;} -case 70: -#line 1152 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.Linkage = GlobalValue::AppendingLinkage; ; - break;} -case 71: -#line 1153 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.Linkage = GlobalValue::DLLExportLinkage; ; - break;} -case 72: -#line 1157 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.Linkage = GlobalValue::DLLImportLinkage; ; - break;} -case 73: -#line 1158 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.Linkage = GlobalValue::ExternalWeakLinkage; ; - break;} -case 74: -#line 1159 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.Linkage = GlobalValue::ExternalLinkage; ; - break;} -case 75: -#line 1163 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.Visibility = GlobalValue::DefaultVisibility; ; - break;} -case 76: -#line 1164 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.Visibility = GlobalValue::HiddenVisibility; ; - break;} -case 77: -#line 1168 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.Linkage = GlobalValue::ExternalLinkage; ; - break;} -case 78: -#line 1169 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.Linkage = GlobalValue::DLLImportLinkage; ; - break;} -case 79: -#line 1170 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.Linkage = GlobalValue::ExternalWeakLinkage; ; - break;} -case 80: -#line 1174 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.Linkage = GlobalValue::ExternalLinkage; ; - break;} -case 81: -#line 1175 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.Linkage = GlobalValue::InternalLinkage; ; - break;} -case 82: -#line 1176 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.Linkage = GlobalValue::LinkOnceLinkage; ; - break;} -case 83: -#line 1177 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.Linkage = GlobalValue::WeakLinkage; ; - break;} -case 84: -#line 1178 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.Linkage = GlobalValue::DLLExportLinkage; ; - break;} -case 85: -#line 1181 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.UIntVal = CallingConv::C; ; - break;} -case 86: -#line 1182 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.UIntVal = CallingConv::C; ; - break;} -case 87: -#line 1183 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.UIntVal = CallingConv::Fast; ; - break;} -case 88: -#line 1184 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.UIntVal = CallingConv::Cold; ; - break;} -case 89: -#line 1185 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.UIntVal = CallingConv::X86_StdCall; ; - break;} -case 90: -#line 1186 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.UIntVal = CallingConv::X86_FastCall; ; - break;} -case 91: -#line 1187 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - if ((unsigned)yyvsp[0].UInt64Val != yyvsp[0].UInt64Val) + ;} + break; + + case 69: +#line 1152 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { (yyval.Linkage) = GlobalValue::InternalLinkage; ;} + break; + + case 70: +#line 1153 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { (yyval.Linkage) = GlobalValue::WeakLinkage; ;} + break; + + case 71: +#line 1154 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { (yyval.Linkage) = GlobalValue::LinkOnceLinkage; ;} + break; + + case 72: +#line 1155 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { (yyval.Linkage) = GlobalValue::AppendingLinkage; ;} + break; + + case 73: +#line 1156 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { (yyval.Linkage) = GlobalValue::DLLExportLinkage; ;} + break; + + case 74: +#line 1160 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { (yyval.Linkage) = GlobalValue::DLLImportLinkage; ;} + break; + + case 75: +#line 1161 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { (yyval.Linkage) = GlobalValue::ExternalWeakLinkage; ;} + break; + + case 76: +#line 1162 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;} + break; + + case 77: +#line 1166 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { (yyval.Visibility) = GlobalValue::DefaultVisibility; ;} + break; + + case 78: +#line 1167 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { (yyval.Visibility) = GlobalValue::DefaultVisibility; ;} + break; + + case 79: +#line 1168 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { (yyval.Visibility) = GlobalValue::HiddenVisibility; ;} + break; + + case 80: +#line 1172 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;} + break; + + case 81: +#line 1173 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { (yyval.Linkage) = GlobalValue::DLLImportLinkage; ;} + break; + + case 82: +#line 1174 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { (yyval.Linkage) = GlobalValue::ExternalWeakLinkage; ;} + break; + + case 83: +#line 1178 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;} + break; + + case 84: +#line 1179 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { (yyval.Linkage) = GlobalValue::InternalLinkage; ;} + break; + + case 85: +#line 1180 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { (yyval.Linkage) = GlobalValue::LinkOnceLinkage; ;} + break; + + case 86: +#line 1181 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { (yyval.Linkage) = GlobalValue::WeakLinkage; ;} + break; + + case 87: +#line 1182 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { (yyval.Linkage) = GlobalValue::DLLExportLinkage; ;} + break; + + case 88: +#line 1186 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;} + break; + + case 89: +#line 1187 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { (yyval.Linkage) = GlobalValue::WeakLinkage; ;} + break; + + case 90: +#line 1188 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { (yyval.Linkage) = GlobalValue::InternalLinkage; ;} + break; + + case 91: +#line 1191 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { (yyval.UIntVal) = CallingConv::C; ;} + break; + + case 92: +#line 1192 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { (yyval.UIntVal) = CallingConv::C; ;} + break; + + case 93: +#line 1193 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { (yyval.UIntVal) = CallingConv::Fast; ;} + break; + + case 94: +#line 1194 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { (yyval.UIntVal) = CallingConv::Cold; ;} + break; + + case 95: +#line 1195 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { (yyval.UIntVal) = CallingConv::X86_StdCall; ;} + break; + + case 96: +#line 1196 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { (yyval.UIntVal) = CallingConv::X86_FastCall; ;} + break; + + case 97: +#line 1197 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + if ((unsigned)(yyvsp[(2) - (2)].UInt64Val) != (yyvsp[(2) - (2)].UInt64Val)) GEN_ERROR("Calling conv too large"); - yyval.UIntVal = yyvsp[0].UInt64Val; + (yyval.UIntVal) = (yyvsp[(2) - (2)].UInt64Val); CHECK_FOR_ERROR - ; - break;} -case 92: -#line 1194 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.ParamAttrs = ParamAttr::ZExt; ; - break;} -case 93: -#line 1195 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.ParamAttrs = ParamAttr::SExt; ; - break;} -case 94: -#line 1196 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.ParamAttrs = ParamAttr::InReg; ; - break;} -case 95: -#line 1197 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.ParamAttrs = ParamAttr::StructRet; ; - break;} -case 96: -#line 1200 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.ParamAttrs = ParamAttr::None; ; - break;} -case 97: -#line 1201 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - yyval.ParamAttrs = yyvsp[-1].ParamAttrs | yyvsp[0].ParamAttrs; - ; - break;} -case 98: -#line 1206 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.ParamAttrs = ParamAttr::NoReturn; ; - break;} -case 99: -#line 1207 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.ParamAttrs = ParamAttr::NoUnwind; ; - break;} -case 101: -#line 1211 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.ParamAttrs = ParamAttr::None; ; - break;} -case 102: -#line 1212 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - yyval.ParamAttrs = yyvsp[-1].ParamAttrs | yyvsp[0].ParamAttrs; - ; - break;} -case 103: -#line 1219 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.UIntVal = 0; ; - break;} -case 104: -#line 1220 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - yyval.UIntVal = yyvsp[0].UInt64Val; - if (yyval.UIntVal != 0 && !isPowerOf2_32(yyval.UIntVal)) + ;} + break; + + case 98: +#line 1204 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { (yyval.ParamAttrs) = ParamAttr::ZExt; ;} + break; + + case 99: +#line 1205 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { (yyval.ParamAttrs) = ParamAttr::SExt; ;} + break; + + case 100: +#line 1206 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { (yyval.ParamAttrs) = ParamAttr::InReg; ;} + break; + + case 101: +#line 1207 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { (yyval.ParamAttrs) = ParamAttr::StructRet; ;} + break; + + case 102: +#line 1210 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { (yyval.ParamAttrs) = ParamAttr::None; ;} + break; + + case 103: +#line 1211 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + (yyval.ParamAttrs) = (yyvsp[(1) - (2)].ParamAttrs) | (yyvsp[(2) - (2)].ParamAttrs); + ;} + break; + + case 104: +#line 1216 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { (yyval.ParamAttrs) = ParamAttr::NoReturn; ;} + break; + + case 105: +#line 1217 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { (yyval.ParamAttrs) = ParamAttr::NoUnwind; ;} + break; + + case 107: +#line 1221 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { (yyval.ParamAttrs) = ParamAttr::None; ;} + break; + + case 108: +#line 1222 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + (yyval.ParamAttrs) = (yyvsp[(1) - (2)].ParamAttrs) | (yyvsp[(2) - (2)].ParamAttrs); + ;} + break; + + case 109: +#line 1229 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { (yyval.UIntVal) = 0; ;} + break; + + case 110: +#line 1230 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + (yyval.UIntVal) = (yyvsp[(2) - (2)].UInt64Val); + if ((yyval.UIntVal) != 0 && !isPowerOf2_32((yyval.UIntVal))) GEN_ERROR("Alignment must be a power of two"); CHECK_FOR_ERROR -; - break;} -case 105: -#line 1226 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.UIntVal = 0; ; - break;} -case 106: -#line 1227 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - yyval.UIntVal = yyvsp[0].UInt64Val; - if (yyval.UIntVal != 0 && !isPowerOf2_32(yyval.UIntVal)) +;} + break; + + case 111: +#line 1236 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { (yyval.UIntVal) = 0; ;} + break; + + case 112: +#line 1237 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + (yyval.UIntVal) = (yyvsp[(3) - (3)].UInt64Val); + if ((yyval.UIntVal) != 0 && !isPowerOf2_32((yyval.UIntVal))) GEN_ERROR("Alignment must be a power of two"); CHECK_FOR_ERROR -; - break;} -case 107: -#line 1235 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - for (unsigned i = 0, e = strlen(yyvsp[0].StrVal); i != e; ++i) - if (yyvsp[0].StrVal[i] == '"' || yyvsp[0].StrVal[i] == '\\') +;} + break; + + case 113: +#line 1245 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + for (unsigned i = 0, e = strlen((yyvsp[(2) - (2)].StrVal)); i != e; ++i) + if ((yyvsp[(2) - (2)].StrVal)[i] == '"' || (yyvsp[(2) - (2)].StrVal)[i] == '\\') GEN_ERROR("Invalid character in section name"); - yyval.StrVal = yyvsp[0].StrVal; + (yyval.StrVal) = (yyvsp[(2) - (2)].StrVal); CHECK_FOR_ERROR -; - break;} -case 108: -#line 1243 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.StrVal = 0; ; - break;} -case 109: -#line 1244 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.StrVal = yyvsp[0].StrVal; ; - break;} -case 110: -#line 1249 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{; - break;} -case 111: -#line 1250 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{; - break;} -case 112: -#line 1251 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - CurGV->setSection(yyvsp[0].StrVal); - free(yyvsp[0].StrVal); +;} + break; + + case 114: +#line 1253 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { (yyval.StrVal) = 0; ;} + break; + + case 115: +#line 1254 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { (yyval.StrVal) = (yyvsp[(1) - (1)].StrVal); ;} + break; + + case 116: +#line 1259 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + {;} + break; + + case 117: +#line 1260 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + {;} + break; + + case 118: +#line 1261 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + CurGV->setSection((yyvsp[(1) - (1)].StrVal)); + free((yyvsp[(1) - (1)].StrVal)); CHECK_FOR_ERROR - ; - break;} -case 113: -#line 1256 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - if (yyvsp[0].UInt64Val != 0 && !isPowerOf2_32(yyvsp[0].UInt64Val)) + ;} + break; + + case 119: +#line 1266 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + if ((yyvsp[(2) - (2)].UInt64Val) != 0 && !isPowerOf2_32((yyvsp[(2) - (2)].UInt64Val))) GEN_ERROR("Alignment must be a power of two"); - CurGV->setAlignment(yyvsp[0].UInt64Val); + CurGV->setAlignment((yyvsp[(2) - (2)].UInt64Val)); CHECK_FOR_ERROR - ; - break;} -case 118: -#line 1272 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - yyval.TypeVal = new PATypeHolder(OpaqueType::get()); + ;} + break; + + case 124: +#line 1282 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + (yyval.TypeVal) = new PATypeHolder(OpaqueType::get()); CHECK_FOR_ERROR - ; - break;} -case 119: -#line 1276 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - yyval.TypeVal = new PATypeHolder(yyvsp[0].PrimType); + ;} + break; + + case 125: +#line 1286 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + (yyval.TypeVal) = new PATypeHolder((yyvsp[(1) - (1)].PrimType)); CHECK_FOR_ERROR - ; - break;} -case 120: -#line 1280 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ // Pointer type? - if (*yyvsp[-1].TypeVal == Type::LabelTy) + ;} + break; + + case 126: +#line 1290 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { // Pointer type? + if (*(yyvsp[(1) - (2)].TypeVal) == Type::LabelTy) GEN_ERROR("Cannot form a pointer to a basic block"); - yyval.TypeVal = new PATypeHolder(HandleUpRefs(PointerType::get(*yyvsp[-1].TypeVal))); - delete yyvsp[-1].TypeVal; + (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(PointerType::get(*(yyvsp[(1) - (2)].TypeVal)))); + delete (yyvsp[(1) - (2)].TypeVal); CHECK_FOR_ERROR - ; - break;} -case 121: -#line 1287 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ // Named types are also simple types... - const Type* tmp = getTypeVal(yyvsp[0].ValIDVal); - CHECK_FOR_ERROR - yyval.TypeVal = new PATypeHolder(tmp); - ; - break;} -case 122: -#line 1292 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ // Type UpReference - if (yyvsp[0].UInt64Val > (uint64_t)~0U) GEN_ERROR("Value out of range"); + ;} + break; + + case 127: +#line 1297 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { // Named types are also simple types... + const Type* tmp = getTypeVal((yyvsp[(1) - (1)].ValIDVal)); + CHECK_FOR_ERROR + (yyval.TypeVal) = new PATypeHolder(tmp); + ;} + break; + + case 128: +#line 1302 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { // Type UpReference + if ((yyvsp[(2) - (2)].UInt64Val) > (uint64_t)~0U) GEN_ERROR("Value out of range"); OpaqueType *OT = OpaqueType::get(); // Use temporary placeholder - UpRefs.push_back(UpRefRecord((unsigned)yyvsp[0].UInt64Val, OT)); // Add to vector... - yyval.TypeVal = new PATypeHolder(OT); + UpRefs.push_back(UpRefRecord((unsigned)(yyvsp[(2) - (2)].UInt64Val), OT)); // Add to vector... + (yyval.TypeVal) = new PATypeHolder(OT); UR_OUT("New Upreference!\n"); CHECK_FOR_ERROR - ; - break;} -case 123: -#line 1300 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 129: +#line 1310 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { std::vector Params; ParamAttrsVector Attrs; - if (yyvsp[0].ParamAttrs != ParamAttr::None) { - ParamAttrsWithIndex X; X.index = 0; X.attrs = yyvsp[0].ParamAttrs; + if ((yyvsp[(5) - (5)].ParamAttrs) != ParamAttr::None) { + ParamAttrsWithIndex X; X.index = 0; X.attrs = (yyvsp[(5) - (5)].ParamAttrs); Attrs.push_back(X); } unsigned index = 1; - TypeWithAttrsList::iterator I = yyvsp[-2].TypeWithAttrsList->begin(), E = yyvsp[-2].TypeWithAttrsList->end(); + TypeWithAttrsList::iterator I = (yyvsp[(3) - (5)].TypeWithAttrsList)->begin(), E = (yyvsp[(3) - (5)].TypeWithAttrsList)->end(); for (; I != E; ++I, ++index) { const Type *Ty = I->Ty->get(); Params.push_back(Ty); @@ -2849,23 +3808,24 @@ ParamAttrsList *ActualAttrs = 0; if (!Attrs.empty()) ActualAttrs = ParamAttrsList::get(Attrs); - FunctionType *FT = FunctionType::get(*yyvsp[-4].TypeVal, Params, isVarArg, ActualAttrs); - delete yyvsp[-2].TypeWithAttrsList; // Delete the argument list - delete yyvsp[-4].TypeVal; // Delete the return type handle - yyval.TypeVal = new PATypeHolder(HandleUpRefs(FT)); - CHECK_FOR_ERROR - ; - break;} -case 124: -#line 1330 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + FunctionType *FT = FunctionType::get(*(yyvsp[(1) - (5)].TypeVal), Params, isVarArg, ActualAttrs); + delete (yyvsp[(3) - (5)].TypeWithAttrsList); // Delete the argument list + delete (yyvsp[(1) - (5)].TypeVal); // Delete the return type handle + (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(FT)); + CHECK_FOR_ERROR + ;} + break; + + case 130: +#line 1340 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { std::vector Params; ParamAttrsVector Attrs; - if (yyvsp[0].ParamAttrs != ParamAttr::None) { - ParamAttrsWithIndex X; X.index = 0; X.attrs = yyvsp[0].ParamAttrs; + if ((yyvsp[(5) - (5)].ParamAttrs) != ParamAttr::None) { + ParamAttrsWithIndex X; X.index = 0; X.attrs = (yyvsp[(5) - (5)].ParamAttrs); Attrs.push_back(X); } - TypeWithAttrsList::iterator I = yyvsp[-2].TypeWithAttrsList->begin(), E = yyvsp[-2].TypeWithAttrsList->end(); + TypeWithAttrsList::iterator I = (yyvsp[(3) - (5)].TypeWithAttrsList)->begin(), E = (yyvsp[(3) - (5)].TypeWithAttrsList)->end(); unsigned index = 1; for ( ; I != E; ++I, ++index) { const Type* Ty = I->Ty->get(); @@ -2883,284 +3843,305 @@ if (!Attrs.empty()) ActualAttrs = ParamAttrsList::get(Attrs); - FunctionType *FT = FunctionType::get(yyvsp[-4].PrimType, Params, isVarArg, ActualAttrs); - delete yyvsp[-2].TypeWithAttrsList; // Delete the argument list - yyval.TypeVal = new PATypeHolder(HandleUpRefs(FT)); - CHECK_FOR_ERROR - ; - break;} -case 125: -#line 1361 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ // Sized array type? - yyval.TypeVal = new PATypeHolder(HandleUpRefs(ArrayType::get(*yyvsp[-1].TypeVal, (unsigned)yyvsp[-3].UInt64Val))); - delete yyvsp[-1].TypeVal; - CHECK_FOR_ERROR - ; - break;} -case 126: -#line 1366 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ // Vector type? - const llvm::Type* ElemTy = yyvsp[-1].TypeVal->get(); - if ((unsigned)yyvsp[-3].UInt64Val != yyvsp[-3].UInt64Val) + FunctionType *FT = FunctionType::get((yyvsp[(1) - (5)].PrimType), Params, isVarArg, ActualAttrs); + delete (yyvsp[(3) - (5)].TypeWithAttrsList); // Delete the argument list + (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(FT)); + CHECK_FOR_ERROR + ;} + break; + + case 131: +#line 1371 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { // Sized array type? + (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(ArrayType::get(*(yyvsp[(4) - (5)].TypeVal), (unsigned)(yyvsp[(2) - (5)].UInt64Val)))); + delete (yyvsp[(4) - (5)].TypeVal); + CHECK_FOR_ERROR + ;} + break; + + case 132: +#line 1376 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { // Vector type? + const llvm::Type* ElemTy = (yyvsp[(4) - (5)].TypeVal)->get(); + if ((unsigned)(yyvsp[(2) - (5)].UInt64Val) != (yyvsp[(2) - (5)].UInt64Val)) GEN_ERROR("Unsigned result not equal to signed result"); if (!ElemTy->isFloatingPoint() && !ElemTy->isInteger()) GEN_ERROR("Element type of a VectorType must be primitive"); - if (!isPowerOf2_32(yyvsp[-3].UInt64Val)) + if (!isPowerOf2_32((yyvsp[(2) - (5)].UInt64Val))) GEN_ERROR("Vector length should be a power of 2"); - yyval.TypeVal = new PATypeHolder(HandleUpRefs(VectorType::get(*yyvsp[-1].TypeVal, (unsigned)yyvsp[-3].UInt64Val))); - delete yyvsp[-1].TypeVal; + (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(VectorType::get(*(yyvsp[(4) - (5)].TypeVal), (unsigned)(yyvsp[(2) - (5)].UInt64Val)))); + delete (yyvsp[(4) - (5)].TypeVal); CHECK_FOR_ERROR - ; - break;} -case 127: -#line 1378 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ // Structure type? + ;} + break; + + case 133: +#line 1388 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { // Structure type? std::vector Elements; - for (std::list::iterator I = yyvsp[-1].TypeList->begin(), - E = yyvsp[-1].TypeList->end(); I != E; ++I) + for (std::list::iterator I = (yyvsp[(2) - (3)].TypeList)->begin(), + E = (yyvsp[(2) - (3)].TypeList)->end(); I != E; ++I) Elements.push_back(*I); - yyval.TypeVal = new PATypeHolder(HandleUpRefs(StructType::get(Elements))); - delete yyvsp[-1].TypeList; + (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(StructType::get(Elements))); + delete (yyvsp[(2) - (3)].TypeList); CHECK_FOR_ERROR - ; - break;} -case 128: -#line 1388 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ // Empty structure type? - yyval.TypeVal = new PATypeHolder(StructType::get(std::vector())); - CHECK_FOR_ERROR - ; - break;} -case 129: -#line 1392 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 134: +#line 1398 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { // Empty structure type? + (yyval.TypeVal) = new PATypeHolder(StructType::get(std::vector())); + CHECK_FOR_ERROR + ;} + break; + + case 135: +#line 1402 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { std::vector Elements; - for (std::list::iterator I = yyvsp[-2].TypeList->begin(), - E = yyvsp[-2].TypeList->end(); I != E; ++I) + for (std::list::iterator I = (yyvsp[(3) - (5)].TypeList)->begin(), + E = (yyvsp[(3) - (5)].TypeList)->end(); I != E; ++I) Elements.push_back(*I); - yyval.TypeVal = new PATypeHolder(HandleUpRefs(StructType::get(Elements, true))); - delete yyvsp[-2].TypeList; + (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(StructType::get(Elements, true))); + delete (yyvsp[(3) - (5)].TypeList); CHECK_FOR_ERROR - ; - break;} -case 130: -#line 1402 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ // Empty structure type? - yyval.TypeVal = new PATypeHolder(StructType::get(std::vector(), true)); - CHECK_FOR_ERROR - ; - break;} -case 131: -#line 1409 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - yyval.TypeWithAttrs.Ty = yyvsp[-1].TypeVal; - yyval.TypeWithAttrs.Attrs = yyvsp[0].ParamAttrs; - ; - break;} -case 132: -#line 1416 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 136: +#line 1412 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { // Empty structure type? + (yyval.TypeVal) = new PATypeHolder(StructType::get(std::vector(), true)); + CHECK_FOR_ERROR + ;} + break; + + case 137: +#line 1419 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + (yyval.TypeWithAttrs).Ty = (yyvsp[(1) - (2)].TypeVal); + (yyval.TypeWithAttrs).Attrs = (yyvsp[(2) - (2)].ParamAttrs); + ;} + break; + + case 138: +#line 1426 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { if (!UpRefs.empty()) - GEN_ERROR("Invalid upreference in type: " + (*yyvsp[0].TypeVal)->getDescription()); - if (!(*yyvsp[0].TypeVal)->isFirstClassType()) + GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (1)].TypeVal))->getDescription()); + if (!(*(yyvsp[(1) - (1)].TypeVal))->isFirstClassType()) GEN_ERROR("LLVM functions cannot return aggregate types"); - yyval.TypeVal = yyvsp[0].TypeVal; - ; - break;} -case 133: -#line 1423 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - yyval.TypeVal = new PATypeHolder(Type::VoidTy); - ; - break;} -case 134: -#line 1428 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - yyval.TypeWithAttrsList = new TypeWithAttrsList(); - yyval.TypeWithAttrsList->push_back(yyvsp[0].TypeWithAttrs); + (yyval.TypeVal) = (yyvsp[(1) - (1)].TypeVal); + ;} + break; + + case 139: +#line 1433 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + (yyval.TypeVal) = new PATypeHolder(Type::VoidTy); + ;} + break; + + case 140: +#line 1438 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + (yyval.TypeWithAttrsList) = new TypeWithAttrsList(); + (yyval.TypeWithAttrsList)->push_back((yyvsp[(1) - (1)].TypeWithAttrs)); CHECK_FOR_ERROR - ; - break;} -case 135: -#line 1433 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - (yyval.TypeWithAttrsList=yyvsp[-2].TypeWithAttrsList)->push_back(yyvsp[0].TypeWithAttrs); + ;} + break; + + case 141: +#line 1443 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + ((yyval.TypeWithAttrsList)=(yyvsp[(1) - (3)].TypeWithAttrsList))->push_back((yyvsp[(3) - (3)].TypeWithAttrs)); CHECK_FOR_ERROR - ; - break;} -case 137: -#line 1441 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - yyval.TypeWithAttrsList=yyvsp[-2].TypeWithAttrsList; + ;} + break; + + case 143: +#line 1451 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + (yyval.TypeWithAttrsList)=(yyvsp[(1) - (3)].TypeWithAttrsList); TypeWithAttrs TWA; TWA.Attrs = ParamAttr::None; TWA.Ty = new PATypeHolder(Type::VoidTy); - yyval.TypeWithAttrsList->push_back(TWA); + (yyval.TypeWithAttrsList)->push_back(TWA); CHECK_FOR_ERROR - ; - break;} -case 138: -#line 1448 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - yyval.TypeWithAttrsList = new TypeWithAttrsList; + ;} + break; + + case 144: +#line 1458 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + (yyval.TypeWithAttrsList) = new TypeWithAttrsList; TypeWithAttrs TWA; TWA.Attrs = ParamAttr::None; TWA.Ty = new PATypeHolder(Type::VoidTy); - yyval.TypeWithAttrsList->push_back(TWA); + (yyval.TypeWithAttrsList)->push_back(TWA); CHECK_FOR_ERROR - ; - break;} -case 139: -#line 1455 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - yyval.TypeWithAttrsList = new TypeWithAttrsList(); + ;} + break; + + case 145: +#line 1465 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + (yyval.TypeWithAttrsList) = new TypeWithAttrsList(); CHECK_FOR_ERROR - ; - break;} -case 140: -#line 1463 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - yyval.TypeList = new std::list(); - yyval.TypeList->push_back(*yyvsp[0].TypeVal); - delete yyvsp[0].TypeVal; - CHECK_FOR_ERROR - ; - break;} -case 141: -#line 1469 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - (yyval.TypeList=yyvsp[-2].TypeList)->push_back(*yyvsp[0].TypeVal); - delete yyvsp[0].TypeVal; + ;} + break; + + case 146: +#line 1473 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + (yyval.TypeList) = new std::list(); + (yyval.TypeList)->push_back(*(yyvsp[(1) - (1)].TypeVal)); + delete (yyvsp[(1) - (1)].TypeVal); + CHECK_FOR_ERROR + ;} + break; + + case 147: +#line 1479 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + ((yyval.TypeList)=(yyvsp[(1) - (3)].TypeList))->push_back(*(yyvsp[(3) - (3)].TypeVal)); + delete (yyvsp[(3) - (3)].TypeVal); CHECK_FOR_ERROR - ; - break;} -case 142: -#line 1481 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ // Nonempty unsized arr + ;} + break; + + case 148: +#line 1491 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { // Nonempty unsized arr if (!UpRefs.empty()) - GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription()); - const ArrayType *ATy = dyn_cast(yyvsp[-3].TypeVal->get()); + GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (4)].TypeVal))->getDescription()); + const ArrayType *ATy = dyn_cast((yyvsp[(1) - (4)].TypeVal)->get()); if (ATy == 0) GEN_ERROR("Cannot make array constant with type: '" + - (*yyvsp[-3].TypeVal)->getDescription() + "'"); + (*(yyvsp[(1) - (4)].TypeVal))->getDescription() + "'"); const Type *ETy = ATy->getElementType(); int NumElements = ATy->getNumElements(); // Verify that we have the correct size... - if (NumElements != -1 && NumElements != (int)yyvsp[-1].ConstVector->size()) + if (NumElements != -1 && NumElements != (int)(yyvsp[(3) - (4)].ConstVector)->size()) GEN_ERROR("Type mismatch: constant sized array initialized with " + - utostr(yyvsp[-1].ConstVector->size()) + " arguments, but has size of " + + utostr((yyvsp[(3) - (4)].ConstVector)->size()) + " arguments, but has size of " + itostr(NumElements) + ""); // Verify all elements are correct type! - for (unsigned i = 0; i < yyvsp[-1].ConstVector->size(); i++) { - if (ETy != (*yyvsp[-1].ConstVector)[i]->getType()) + for (unsigned i = 0; i < (yyvsp[(3) - (4)].ConstVector)->size(); i++) { + if (ETy != (*(yyvsp[(3) - (4)].ConstVector))[i]->getType()) GEN_ERROR("Element #" + utostr(i) + " is not of type '" + ETy->getDescription() +"' as required!\nIt is of type '"+ - (*yyvsp[-1].ConstVector)[i]->getType()->getDescription() + "'."); + (*(yyvsp[(3) - (4)].ConstVector))[i]->getType()->getDescription() + "'."); } - yyval.ConstVal = ConstantArray::get(ATy, *yyvsp[-1].ConstVector); - delete yyvsp[-3].TypeVal; delete yyvsp[-1].ConstVector; + (yyval.ConstVal) = ConstantArray::get(ATy, *(yyvsp[(3) - (4)].ConstVector)); + delete (yyvsp[(1) - (4)].TypeVal); delete (yyvsp[(3) - (4)].ConstVector); CHECK_FOR_ERROR - ; - break;} -case 143: -#line 1509 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 149: +#line 1519 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { if (!UpRefs.empty()) - GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription()); - const ArrayType *ATy = dyn_cast(yyvsp[-2].TypeVal->get()); + GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (3)].TypeVal))->getDescription()); + const ArrayType *ATy = dyn_cast((yyvsp[(1) - (3)].TypeVal)->get()); if (ATy == 0) GEN_ERROR("Cannot make array constant with type: '" + - (*yyvsp[-2].TypeVal)->getDescription() + "'"); + (*(yyvsp[(1) - (3)].TypeVal))->getDescription() + "'"); int NumElements = ATy->getNumElements(); if (NumElements != -1 && NumElements != 0) GEN_ERROR("Type mismatch: constant sized array initialized with 0" " arguments, but has size of " + itostr(NumElements) +""); - yyval.ConstVal = ConstantArray::get(ATy, std::vector()); - delete yyvsp[-2].TypeVal; + (yyval.ConstVal) = ConstantArray::get(ATy, std::vector()); + delete (yyvsp[(1) - (3)].TypeVal); CHECK_FOR_ERROR - ; - break;} -case 144: -#line 1525 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 150: +#line 1535 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { if (!UpRefs.empty()) - GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription()); - const ArrayType *ATy = dyn_cast(yyvsp[-2].TypeVal->get()); + GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (3)].TypeVal))->getDescription()); + const ArrayType *ATy = dyn_cast((yyvsp[(1) - (3)].TypeVal)->get()); if (ATy == 0) GEN_ERROR("Cannot make array constant with type: '" + - (*yyvsp[-2].TypeVal)->getDescription() + "'"); + (*(yyvsp[(1) - (3)].TypeVal))->getDescription() + "'"); int NumElements = ATy->getNumElements(); const Type *ETy = ATy->getElementType(); - char *EndStr = UnEscapeLexed(yyvsp[0].StrVal, true); - if (NumElements != -1 && NumElements != (EndStr-yyvsp[0].StrVal)) + char *EndStr = UnEscapeLexed((yyvsp[(3) - (3)].StrVal), true); + if (NumElements != -1 && NumElements != (EndStr-(yyvsp[(3) - (3)].StrVal))) GEN_ERROR("Can't build string constant of size " + - itostr((int)(EndStr-yyvsp[0].StrVal)) + + itostr((int)(EndStr-(yyvsp[(3) - (3)].StrVal))) + " when array has size " + itostr(NumElements) + ""); std::vector Vals; if (ETy == Type::Int8Ty) { - for (unsigned char *C = (unsigned char *)yyvsp[0].StrVal; + for (unsigned char *C = (unsigned char *)(yyvsp[(3) - (3)].StrVal); C != (unsigned char*)EndStr; ++C) Vals.push_back(ConstantInt::get(ETy, *C)); } else { - free(yyvsp[0].StrVal); + free((yyvsp[(3) - (3)].StrVal)); GEN_ERROR("Cannot build string arrays of non byte sized elements"); } - free(yyvsp[0].StrVal); - yyval.ConstVal = ConstantArray::get(ATy, Vals); - delete yyvsp[-2].TypeVal; - CHECK_FOR_ERROR - ; - break;} -case 145: -#line 1554 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ // Nonempty unsized arr + free((yyvsp[(3) - (3)].StrVal)); + (yyval.ConstVal) = ConstantArray::get(ATy, Vals); + delete (yyvsp[(1) - (3)].TypeVal); + CHECK_FOR_ERROR + ;} + break; + + case 151: +#line 1564 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { // Nonempty unsized arr if (!UpRefs.empty()) - GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription()); - const VectorType *PTy = dyn_cast(yyvsp[-3].TypeVal->get()); + GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (4)].TypeVal))->getDescription()); + const VectorType *PTy = dyn_cast((yyvsp[(1) - (4)].TypeVal)->get()); if (PTy == 0) GEN_ERROR("Cannot make packed constant with type: '" + - (*yyvsp[-3].TypeVal)->getDescription() + "'"); + (*(yyvsp[(1) - (4)].TypeVal))->getDescription() + "'"); const Type *ETy = PTy->getElementType(); int NumElements = PTy->getNumElements(); // Verify that we have the correct size... - if (NumElements != -1 && NumElements != (int)yyvsp[-1].ConstVector->size()) + if (NumElements != -1 && NumElements != (int)(yyvsp[(3) - (4)].ConstVector)->size()) GEN_ERROR("Type mismatch: constant sized packed initialized with " + - utostr(yyvsp[-1].ConstVector->size()) + " arguments, but has size of " + + utostr((yyvsp[(3) - (4)].ConstVector)->size()) + " arguments, but has size of " + itostr(NumElements) + ""); // Verify all elements are correct type! - for (unsigned i = 0; i < yyvsp[-1].ConstVector->size(); i++) { - if (ETy != (*yyvsp[-1].ConstVector)[i]->getType()) + for (unsigned i = 0; i < (yyvsp[(3) - (4)].ConstVector)->size(); i++) { + if (ETy != (*(yyvsp[(3) - (4)].ConstVector))[i]->getType()) GEN_ERROR("Element #" + utostr(i) + " is not of type '" + ETy->getDescription() +"' as required!\nIt is of type '"+ - (*yyvsp[-1].ConstVector)[i]->getType()->getDescription() + "'."); + (*(yyvsp[(3) - (4)].ConstVector))[i]->getType()->getDescription() + "'."); } - yyval.ConstVal = ConstantVector::get(PTy, *yyvsp[-1].ConstVector); - delete yyvsp[-3].TypeVal; delete yyvsp[-1].ConstVector; + (yyval.ConstVal) = ConstantVector::get(PTy, *(yyvsp[(3) - (4)].ConstVector)); + delete (yyvsp[(1) - (4)].TypeVal); delete (yyvsp[(3) - (4)].ConstVector); CHECK_FOR_ERROR - ; - break;} -case 146: -#line 1582 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - const StructType *STy = dyn_cast(yyvsp[-3].TypeVal->get()); + ;} + break; + + case 152: +#line 1592 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + const StructType *STy = dyn_cast((yyvsp[(1) - (4)].TypeVal)->get()); if (STy == 0) GEN_ERROR("Cannot make struct constant with type: '" + - (*yyvsp[-3].TypeVal)->getDescription() + "'"); + (*(yyvsp[(1) - (4)].TypeVal))->getDescription() + "'"); - if (yyvsp[-1].ConstVector->size() != STy->getNumContainedTypes()) + if ((yyvsp[(3) - (4)].ConstVector)->size() != STy->getNumContainedTypes()) GEN_ERROR("Illegal number of initializers for structure type"); // Check to ensure that constants are compatible with the type initializer! - for (unsigned i = 0, e = yyvsp[-1].ConstVector->size(); i != e; ++i) - if ((*yyvsp[-1].ConstVector)[i]->getType() != STy->getElementType(i)) + for (unsigned i = 0, e = (yyvsp[(3) - (4)].ConstVector)->size(); i != e; ++i) + if ((*(yyvsp[(3) - (4)].ConstVector))[i]->getType() != STy->getElementType(i)) GEN_ERROR("Expected type '" + STy->getElementType(i)->getDescription() + "' for element #" + utostr(i) + @@ -3170,20 +4151,21 @@ if (STy->isPacked()) GEN_ERROR("Unpacked Initializer to vector type '" + STy->getDescription() + "'"); - yyval.ConstVal = ConstantStruct::get(STy, *yyvsp[-1].ConstVector); - delete yyvsp[-3].TypeVal; delete yyvsp[-1].ConstVector; + (yyval.ConstVal) = ConstantStruct::get(STy, *(yyvsp[(3) - (4)].ConstVector)); + delete (yyvsp[(1) - (4)].TypeVal); delete (yyvsp[(3) - (4)].ConstVector); CHECK_FOR_ERROR - ; - break;} -case 147: -#line 1607 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 153: +#line 1617 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { if (!UpRefs.empty()) - GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription()); - const StructType *STy = dyn_cast(yyvsp[-2].TypeVal->get()); + GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (3)].TypeVal))->getDescription()); + const StructType *STy = dyn_cast((yyvsp[(1) - (3)].TypeVal)->get()); if (STy == 0) GEN_ERROR("Cannot make struct constant with type: '" + - (*yyvsp[-2].TypeVal)->getDescription() + "'"); + (*(yyvsp[(1) - (3)].TypeVal))->getDescription() + "'"); if (STy->getNumContainedTypes() != 0) GEN_ERROR("Illegal number of initializers for structure type"); @@ -3192,25 +4174,26 @@ if (STy->isPacked()) GEN_ERROR("Unpacked Initializer to vector type '" + STy->getDescription() + "'"); - yyval.ConstVal = ConstantStruct::get(STy, std::vector()); - delete yyvsp[-2].TypeVal; + (yyval.ConstVal) = ConstantStruct::get(STy, std::vector()); + delete (yyvsp[(1) - (3)].TypeVal); CHECK_FOR_ERROR - ; - break;} -case 148: -#line 1626 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - const StructType *STy = dyn_cast(yyvsp[-5].TypeVal->get()); + ;} + break; + + case 154: +#line 1636 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + const StructType *STy = dyn_cast((yyvsp[(1) - (6)].TypeVal)->get()); if (STy == 0) GEN_ERROR("Cannot make struct constant with type: '" + - (*yyvsp[-5].TypeVal)->getDescription() + "'"); + (*(yyvsp[(1) - (6)].TypeVal))->getDescription() + "'"); - if (yyvsp[-2].ConstVector->size() != STy->getNumContainedTypes()) + if ((yyvsp[(4) - (6)].ConstVector)->size() != STy->getNumContainedTypes()) GEN_ERROR("Illegal number of initializers for structure type"); // Check to ensure that constants are compatible with the type initializer! - for (unsigned i = 0, e = yyvsp[-2].ConstVector->size(); i != e; ++i) - if ((*yyvsp[-2].ConstVector)[i]->getType() != STy->getElementType(i)) + for (unsigned i = 0, e = (yyvsp[(4) - (6)].ConstVector)->size(); i != e; ++i) + if ((*(yyvsp[(4) - (6)].ConstVector))[i]->getType() != STy->getElementType(i)) GEN_ERROR("Expected type '" + STy->getElementType(i)->getDescription() + "' for element #" + utostr(i) + @@ -3221,20 +4204,21 @@ GEN_ERROR("Vector initializer to non-vector type '" + STy->getDescription() + "'"); - yyval.ConstVal = ConstantStruct::get(STy, *yyvsp[-2].ConstVector); - delete yyvsp[-5].TypeVal; delete yyvsp[-2].ConstVector; + (yyval.ConstVal) = ConstantStruct::get(STy, *(yyvsp[(4) - (6)].ConstVector)); + delete (yyvsp[(1) - (6)].TypeVal); delete (yyvsp[(4) - (6)].ConstVector); CHECK_FOR_ERROR - ; - break;} -case 149: -#line 1652 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 155: +#line 1662 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { if (!UpRefs.empty()) - GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-4].TypeVal)->getDescription()); - const StructType *STy = dyn_cast(yyvsp[-4].TypeVal->get()); + GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (5)].TypeVal))->getDescription()); + const StructType *STy = dyn_cast((yyvsp[(1) - (5)].TypeVal)->get()); if (STy == 0) GEN_ERROR("Cannot make struct constant with type: '" + - (*yyvsp[-4].TypeVal)->getDescription() + "'"); + (*(yyvsp[(1) - (5)].TypeVal))->getDescription() + "'"); if (STy->getNumContainedTypes() != 0) GEN_ERROR("Illegal number of initializers for structure type"); @@ -3244,42 +4228,45 @@ GEN_ERROR("Vector initializer to non-vector type '" + STy->getDescription() + "'"); - yyval.ConstVal = ConstantStruct::get(STy, std::vector()); - delete yyvsp[-4].TypeVal; + (yyval.ConstVal) = ConstantStruct::get(STy, std::vector()); + delete (yyvsp[(1) - (5)].TypeVal); CHECK_FOR_ERROR - ; - break;} -case 150: -#line 1672 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 156: +#line 1682 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { if (!UpRefs.empty()) - GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription()); - const PointerType *PTy = dyn_cast(yyvsp[-1].TypeVal->get()); + GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (2)].TypeVal))->getDescription()); + const PointerType *PTy = dyn_cast((yyvsp[(1) - (2)].TypeVal)->get()); if (PTy == 0) GEN_ERROR("Cannot make null pointer constant with type: '" + - (*yyvsp[-1].TypeVal)->getDescription() + "'"); + (*(yyvsp[(1) - (2)].TypeVal))->getDescription() + "'"); - yyval.ConstVal = ConstantPointerNull::get(PTy); - delete yyvsp[-1].TypeVal; + (yyval.ConstVal) = ConstantPointerNull::get(PTy); + delete (yyvsp[(1) - (2)].TypeVal); CHECK_FOR_ERROR - ; - break;} -case 151: -#line 1684 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 157: +#line 1694 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { if (!UpRefs.empty()) - GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription()); - yyval.ConstVal = UndefValue::get(yyvsp[-1].TypeVal->get()); - delete yyvsp[-1].TypeVal; - CHECK_FOR_ERROR - ; - break;} -case 152: -#line 1691 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (2)].TypeVal))->getDescription()); + (yyval.ConstVal) = UndefValue::get((yyvsp[(1) - (2)].TypeVal)->get()); + delete (yyvsp[(1) - (2)].TypeVal); + CHECK_FOR_ERROR + ;} + break; + + case 158: +#line 1701 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { if (!UpRefs.empty()) - GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription()); - const PointerType *Ty = dyn_cast(yyvsp[-1].TypeVal->get()); + GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (2)].TypeVal))->getDescription()); + const PointerType *Ty = dyn_cast((yyvsp[(1) - (2)].TypeVal)->get()); if (Ty == 0) GEN_ERROR("Global const reference must be a pointer type"); @@ -3293,7 +4280,7 @@ Function *SavedCurFn = CurFun.CurrentFunction; CurFun.CurrentFunction = 0; - Value *V = getExistingVal(Ty, yyvsp[0].ValIDVal); + Value *V = getExistingVal(Ty, (yyvsp[(2) - (2)].ValIDVal)); CHECK_FOR_ERROR CurFun.CurrentFunction = SavedCurFn; @@ -3308,16 +4295,16 @@ // First check to see if the forward references value is already created! PerModuleInfo::GlobalRefsType::iterator I = - CurModule.GlobalRefs.find(std::make_pair(PT, yyvsp[0].ValIDVal)); + CurModule.GlobalRefs.find(std::make_pair(PT, (yyvsp[(2) - (2)].ValIDVal))); if (I != CurModule.GlobalRefs.end()) { V = I->second; // Placeholder already exists, use it... - yyvsp[0].ValIDVal.destroy(); + (yyvsp[(2) - (2)].ValIDVal).destroy(); } else { std::string Name; - if (yyvsp[0].ValIDVal.Type == ValID::GlobalName) - Name = yyvsp[0].ValIDVal.Name; - else if (yyvsp[0].ValIDVal.Type != ValID::GlobalID) + if ((yyvsp[(2) - (2)].ValIDVal).Type == ValID::GlobalName) + Name = (yyvsp[(2) - (2)].ValIDVal).Name; + else if ((yyvsp[(2) - (2)].ValIDVal).Type != ValID::GlobalID) GEN_ERROR("Invalid reference to global"); // Create the forward referenced global. @@ -3333,307 +4320,340 @@ } // Keep track of the fact that we have a forward ref to recycle it - CurModule.GlobalRefs.insert(std::make_pair(std::make_pair(PT, yyvsp[0].ValIDVal), GV)); + CurModule.GlobalRefs.insert(std::make_pair(std::make_pair(PT, (yyvsp[(2) - (2)].ValIDVal)), GV)); V = GV; } } - yyval.ConstVal = cast(V); - delete yyvsp[-1].TypeVal; // Free the type handle + (yyval.ConstVal) = cast(V); + delete (yyvsp[(1) - (2)].TypeVal); // Free the type handle CHECK_FOR_ERROR - ; - break;} -case 153: -#line 1757 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 159: +#line 1767 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { if (!UpRefs.empty()) - GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription()); - if (yyvsp[-1].TypeVal->get() != yyvsp[0].ConstVal->getType()) + GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (2)].TypeVal))->getDescription()); + if ((yyvsp[(1) - (2)].TypeVal)->get() != (yyvsp[(2) - (2)].ConstVal)->getType()) GEN_ERROR("Mismatched types for constant expression: " + - (*yyvsp[-1].TypeVal)->getDescription() + " and " + yyvsp[0].ConstVal->getType()->getDescription()); - yyval.ConstVal = yyvsp[0].ConstVal; - delete yyvsp[-1].TypeVal; - CHECK_FOR_ERROR - ; - break;} -case 154: -#line 1767 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + (*(yyvsp[(1) - (2)].TypeVal))->getDescription() + " and " + (yyvsp[(2) - (2)].ConstVal)->getType()->getDescription()); + (yyval.ConstVal) = (yyvsp[(2) - (2)].ConstVal); + delete (yyvsp[(1) - (2)].TypeVal); + CHECK_FOR_ERROR + ;} + break; + + case 160: +#line 1777 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { if (!UpRefs.empty()) - GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription()); - const Type *Ty = yyvsp[-1].TypeVal->get(); + GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (2)].TypeVal))->getDescription()); + const Type *Ty = (yyvsp[(1) - (2)].TypeVal)->get(); if (isa(Ty) || Ty == Type::LabelTy || isa(Ty)) GEN_ERROR("Cannot create a null initialized value of this type"); - yyval.ConstVal = Constant::getNullValue(Ty); - delete yyvsp[-1].TypeVal; + (yyval.ConstVal) = Constant::getNullValue(Ty); + delete (yyvsp[(1) - (2)].TypeVal); CHECK_FOR_ERROR - ; - break;} -case 155: -#line 1777 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ // integral constants - if (!ConstantInt::isValueValidForType(yyvsp[-1].PrimType, yyvsp[0].SInt64Val)) + ;} + break; + + case 161: +#line 1787 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { // integral constants + if (!ConstantInt::isValueValidForType((yyvsp[(1) - (2)].PrimType), (yyvsp[(2) - (2)].SInt64Val))) GEN_ERROR("Constant value doesn't fit in type"); - yyval.ConstVal = ConstantInt::get(yyvsp[-1].PrimType, yyvsp[0].SInt64Val, true); + (yyval.ConstVal) = ConstantInt::get((yyvsp[(1) - (2)].PrimType), (yyvsp[(2) - (2)].SInt64Val), true); CHECK_FOR_ERROR - ; - break;} -case 156: -#line 1783 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ // arbitrary precision integer constants - uint32_t BitWidth = cast(yyvsp[-1].PrimType)->getBitWidth(); - if (yyvsp[0].APIntVal->getBitWidth() > BitWidth) { + ;} + break; + + case 162: +#line 1793 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { // arbitrary precision integer constants + uint32_t BitWidth = cast((yyvsp[(1) - (2)].PrimType))->getBitWidth(); + if ((yyvsp[(2) - (2)].APIntVal)->getBitWidth() > BitWidth) { GEN_ERROR("Constant value does not fit in type"); } - yyvsp[0].APIntVal->sextOrTrunc(BitWidth); - yyval.ConstVal = ConstantInt::get(*yyvsp[0].APIntVal); - delete yyvsp[0].APIntVal; - CHECK_FOR_ERROR - ; - break;} -case 157: -#line 1793 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ // integral constants - if (!ConstantInt::isValueValidForType(yyvsp[-1].PrimType, yyvsp[0].UInt64Val)) + (yyvsp[(2) - (2)].APIntVal)->sextOrTrunc(BitWidth); + (yyval.ConstVal) = ConstantInt::get(*(yyvsp[(2) - (2)].APIntVal)); + delete (yyvsp[(2) - (2)].APIntVal); + CHECK_FOR_ERROR + ;} + break; + + case 163: +#line 1803 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { // integral constants + if (!ConstantInt::isValueValidForType((yyvsp[(1) - (2)].PrimType), (yyvsp[(2) - (2)].UInt64Val))) GEN_ERROR("Constant value doesn't fit in type"); - yyval.ConstVal = ConstantInt::get(yyvsp[-1].PrimType, yyvsp[0].UInt64Val, false); + (yyval.ConstVal) = ConstantInt::get((yyvsp[(1) - (2)].PrimType), (yyvsp[(2) - (2)].UInt64Val), false); CHECK_FOR_ERROR - ; - break;} -case 158: -#line 1799 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ // arbitrary precision integer constants - uint32_t BitWidth = cast(yyvsp[-1].PrimType)->getBitWidth(); - if (yyvsp[0].APIntVal->getBitWidth() > BitWidth) { + ;} + break; + + case 164: +#line 1809 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { // arbitrary precision integer constants + uint32_t BitWidth = cast((yyvsp[(1) - (2)].PrimType))->getBitWidth(); + if ((yyvsp[(2) - (2)].APIntVal)->getBitWidth() > BitWidth) { GEN_ERROR("Constant value does not fit in type"); } - yyvsp[0].APIntVal->zextOrTrunc(BitWidth); - yyval.ConstVal = ConstantInt::get(*yyvsp[0].APIntVal); - delete yyvsp[0].APIntVal; - CHECK_FOR_ERROR - ; - break;} -case 159: -#line 1809 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ // Boolean constants - assert(cast(yyvsp[-1].PrimType)->getBitWidth() == 1 && "Not Bool?"); - yyval.ConstVal = ConstantInt::getTrue(); - CHECK_FOR_ERROR - ; - break;} -case 160: -#line 1814 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ // Boolean constants - assert(cast(yyvsp[-1].PrimType)->getBitWidth() == 1 && "Not Bool?"); - yyval.ConstVal = ConstantInt::getFalse(); - CHECK_FOR_ERROR - ; - break;} -case 161: -#line 1819 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ // Float & Double constants - if (!ConstantFP::isValueValidForType(yyvsp[-1].PrimType, yyvsp[0].FPVal)) + (yyvsp[(2) - (2)].APIntVal)->zextOrTrunc(BitWidth); + (yyval.ConstVal) = ConstantInt::get(*(yyvsp[(2) - (2)].APIntVal)); + delete (yyvsp[(2) - (2)].APIntVal); + CHECK_FOR_ERROR + ;} + break; + + case 165: +#line 1819 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { // Boolean constants + assert(cast((yyvsp[(1) - (2)].PrimType))->getBitWidth() == 1 && "Not Bool?"); + (yyval.ConstVal) = ConstantInt::getTrue(); + CHECK_FOR_ERROR + ;} + break; + + case 166: +#line 1824 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { // Boolean constants + assert(cast((yyvsp[(1) - (2)].PrimType))->getBitWidth() == 1 && "Not Bool?"); + (yyval.ConstVal) = ConstantInt::getFalse(); + CHECK_FOR_ERROR + ;} + break; + + case 167: +#line 1829 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { // Float & Double constants + if (!ConstantFP::isValueValidForType((yyvsp[(1) - (2)].PrimType), (yyvsp[(2) - (2)].FPVal))) GEN_ERROR("Floating point constant invalid for type"); - yyval.ConstVal = ConstantFP::get(yyvsp[-1].PrimType, yyvsp[0].FPVal); + (yyval.ConstVal) = ConstantFP::get((yyvsp[(1) - (2)].PrimType), (yyvsp[(2) - (2)].FPVal)); CHECK_FOR_ERROR - ; - break;} -case 162: -#line 1827 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 168: +#line 1837 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { if (!UpRefs.empty()) - GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription()); - Constant *Val = yyvsp[-3].ConstVal; - const Type *DestTy = yyvsp[-1].TypeVal->get(); - if (!CastInst::castIsValid(yyvsp[-5].CastOpVal, yyvsp[-3].ConstVal, DestTy)) + GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(5) - (6)].TypeVal))->getDescription()); + Constant *Val = (yyvsp[(3) - (6)].ConstVal); + const Type *DestTy = (yyvsp[(5) - (6)].TypeVal)->get(); + if (!CastInst::castIsValid((yyvsp[(1) - (6)].CastOpVal), (yyvsp[(3) - (6)].ConstVal), DestTy)) GEN_ERROR("invalid cast opcode for cast from '" + Val->getType()->getDescription() + "' to '" + DestTy->getDescription() + "'"); - yyval.ConstVal = ConstantExpr::getCast(yyvsp[-5].CastOpVal, yyvsp[-3].ConstVal, DestTy); - delete yyvsp[-1].TypeVal; - ; - break;} -case 163: -#line 1839 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - if (!isa(yyvsp[-2].ConstVal->getType())) + (yyval.ConstVal) = ConstantExpr::getCast((yyvsp[(1) - (6)].CastOpVal), (yyvsp[(3) - (6)].ConstVal), DestTy); + delete (yyvsp[(5) - (6)].TypeVal); + ;} + break; + + case 169: +#line 1849 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + if (!isa((yyvsp[(3) - (5)].ConstVal)->getType())) GEN_ERROR("GetElementPtr requires a pointer operand"); const Type *IdxTy = - GetElementPtrInst::getIndexedType(yyvsp[-2].ConstVal->getType(), &(*yyvsp[-1].ValueList)[0], yyvsp[-1].ValueList->size(), + GetElementPtrInst::getIndexedType((yyvsp[(3) - (5)].ConstVal)->getType(), &(*(yyvsp[(4) - (5)].ValueList))[0], (yyvsp[(4) - (5)].ValueList)->size(), true); if (!IdxTy) GEN_ERROR("Index list invalid for constant getelementptr"); SmallVector IdxVec; - for (unsigned i = 0, e = yyvsp[-1].ValueList->size(); i != e; ++i) - if (Constant *C = dyn_cast((*yyvsp[-1].ValueList)[i])) + for (unsigned i = 0, e = (yyvsp[(4) - (5)].ValueList)->size(); i != e; ++i) + if (Constant *C = dyn_cast((*(yyvsp[(4) - (5)].ValueList))[i])) IdxVec.push_back(C); else GEN_ERROR("Indices to constant getelementptr must be constants"); - delete yyvsp[-1].ValueList; + delete (yyvsp[(4) - (5)].ValueList); - yyval.ConstVal = ConstantExpr::getGetElementPtr(yyvsp[-2].ConstVal, &IdxVec[0], IdxVec.size()); + (yyval.ConstVal) = ConstantExpr::getGetElementPtr((yyvsp[(3) - (5)].ConstVal), &IdxVec[0], IdxVec.size()); CHECK_FOR_ERROR - ; - break;} -case 164: -#line 1861 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - if (yyvsp[-5].ConstVal->getType() != Type::Int1Ty) + ;} + break; + + case 170: +#line 1871 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + if ((yyvsp[(3) - (8)].ConstVal)->getType() != Type::Int1Ty) GEN_ERROR("Select condition must be of boolean type"); - if (yyvsp[-3].ConstVal->getType() != yyvsp[-1].ConstVal->getType()) + if ((yyvsp[(5) - (8)].ConstVal)->getType() != (yyvsp[(7) - (8)].ConstVal)->getType()) GEN_ERROR("Select operand types must match"); - yyval.ConstVal = ConstantExpr::getSelect(yyvsp[-5].ConstVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal); + (yyval.ConstVal) = ConstantExpr::getSelect((yyvsp[(3) - (8)].ConstVal), (yyvsp[(5) - (8)].ConstVal), (yyvsp[(7) - (8)].ConstVal)); CHECK_FOR_ERROR - ; - break;} -case 165: -#line 1869 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - if (yyvsp[-3].ConstVal->getType() != yyvsp[-1].ConstVal->getType()) + ;} + break; + + case 171: +#line 1879 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + if ((yyvsp[(3) - (6)].ConstVal)->getType() != (yyvsp[(5) - (6)].ConstVal)->getType()) GEN_ERROR("Binary operator types must match"); CHECK_FOR_ERROR; - yyval.ConstVal = ConstantExpr::get(yyvsp[-5].BinaryOpVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal); - ; - break;} -case 166: -#line 1875 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - if (yyvsp[-3].ConstVal->getType() != yyvsp[-1].ConstVal->getType()) + (yyval.ConstVal) = ConstantExpr::get((yyvsp[(1) - (6)].BinaryOpVal), (yyvsp[(3) - (6)].ConstVal), (yyvsp[(5) - (6)].ConstVal)); + ;} + break; + + case 172: +#line 1885 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + if ((yyvsp[(3) - (6)].ConstVal)->getType() != (yyvsp[(5) - (6)].ConstVal)->getType()) GEN_ERROR("Logical operator types must match"); - if (!yyvsp[-3].ConstVal->getType()->isInteger()) { - if (Instruction::isShift(yyvsp[-5].BinaryOpVal) || !isa(yyvsp[-3].ConstVal->getType()) || - !cast(yyvsp[-3].ConstVal->getType())->getElementType()->isInteger()) + if (!(yyvsp[(3) - (6)].ConstVal)->getType()->isInteger()) { + if (Instruction::isShift((yyvsp[(1) - (6)].BinaryOpVal)) || !isa((yyvsp[(3) - (6)].ConstVal)->getType()) || + !cast((yyvsp[(3) - (6)].ConstVal)->getType())->getElementType()->isInteger()) GEN_ERROR("Logical operator requires integral operands"); } - yyval.ConstVal = ConstantExpr::get(yyvsp[-5].BinaryOpVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal); + (yyval.ConstVal) = ConstantExpr::get((yyvsp[(1) - (6)].BinaryOpVal), (yyvsp[(3) - (6)].ConstVal), (yyvsp[(5) - (6)].ConstVal)); CHECK_FOR_ERROR - ; - break;} -case 167: -#line 1886 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - if (yyvsp[-3].ConstVal->getType() != yyvsp[-1].ConstVal->getType()) + ;} + break; + + case 173: +#line 1896 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + if ((yyvsp[(4) - (7)].ConstVal)->getType() != (yyvsp[(6) - (7)].ConstVal)->getType()) GEN_ERROR("icmp operand types must match"); - yyval.ConstVal = ConstantExpr::getICmp(yyvsp[-5].IPredicate, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal); - ; - break;} -case 168: -#line 1891 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - if (yyvsp[-3].ConstVal->getType() != yyvsp[-1].ConstVal->getType()) + (yyval.ConstVal) = ConstantExpr::getICmp((yyvsp[(2) - (7)].IPredicate), (yyvsp[(4) - (7)].ConstVal), (yyvsp[(6) - (7)].ConstVal)); + ;} + break; + + case 174: +#line 1901 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + if ((yyvsp[(4) - (7)].ConstVal)->getType() != (yyvsp[(6) - (7)].ConstVal)->getType()) GEN_ERROR("fcmp operand types must match"); - yyval.ConstVal = ConstantExpr::getFCmp(yyvsp[-5].FPredicate, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal); - ; - break;} -case 169: -#line 1896 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - if (!ExtractElementInst::isValidOperands(yyvsp[-3].ConstVal, yyvsp[-1].ConstVal)) + (yyval.ConstVal) = ConstantExpr::getFCmp((yyvsp[(2) - (7)].FPredicate), (yyvsp[(4) - (7)].ConstVal), (yyvsp[(6) - (7)].ConstVal)); + ;} + break; + + case 175: +#line 1906 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + if (!ExtractElementInst::isValidOperands((yyvsp[(3) - (6)].ConstVal), (yyvsp[(5) - (6)].ConstVal))) GEN_ERROR("Invalid extractelement operands"); - yyval.ConstVal = ConstantExpr::getExtractElement(yyvsp[-3].ConstVal, yyvsp[-1].ConstVal); + (yyval.ConstVal) = ConstantExpr::getExtractElement((yyvsp[(3) - (6)].ConstVal), (yyvsp[(5) - (6)].ConstVal)); CHECK_FOR_ERROR - ; - break;} -case 170: -#line 1902 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - if (!InsertElementInst::isValidOperands(yyvsp[-5].ConstVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal)) + ;} + break; + + case 176: +#line 1912 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + if (!InsertElementInst::isValidOperands((yyvsp[(3) - (8)].ConstVal), (yyvsp[(5) - (8)].ConstVal), (yyvsp[(7) - (8)].ConstVal))) GEN_ERROR("Invalid insertelement operands"); - yyval.ConstVal = ConstantExpr::getInsertElement(yyvsp[-5].ConstVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal); + (yyval.ConstVal) = ConstantExpr::getInsertElement((yyvsp[(3) - (8)].ConstVal), (yyvsp[(5) - (8)].ConstVal), (yyvsp[(7) - (8)].ConstVal)); CHECK_FOR_ERROR - ; - break;} -case 171: -#line 1908 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - if (!ShuffleVectorInst::isValidOperands(yyvsp[-5].ConstVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal)) + ;} + break; + + case 177: +#line 1918 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + if (!ShuffleVectorInst::isValidOperands((yyvsp[(3) - (8)].ConstVal), (yyvsp[(5) - (8)].ConstVal), (yyvsp[(7) - (8)].ConstVal))) GEN_ERROR("Invalid shufflevector operands"); - yyval.ConstVal = ConstantExpr::getShuffleVector(yyvsp[-5].ConstVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal); + (yyval.ConstVal) = ConstantExpr::getShuffleVector((yyvsp[(3) - (8)].ConstVal), (yyvsp[(5) - (8)].ConstVal), (yyvsp[(7) - (8)].ConstVal)); CHECK_FOR_ERROR - ; - break;} -case 172: -#line 1917 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - (yyval.ConstVector = yyvsp[-2].ConstVector)->push_back(yyvsp[0].ConstVal); + ;} + break; + + case 178: +#line 1927 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + ((yyval.ConstVector) = (yyvsp[(1) - (3)].ConstVector))->push_back((yyvsp[(3) - (3)].ConstVal)); CHECK_FOR_ERROR - ; - break;} -case 173: -#line 1921 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - yyval.ConstVector = new std::vector(); - yyval.ConstVector->push_back(yyvsp[0].ConstVal); + ;} + break; + + case 179: +#line 1931 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + (yyval.ConstVector) = new std::vector(); + (yyval.ConstVector)->push_back((yyvsp[(1) - (1)].ConstVal)); CHECK_FOR_ERROR - ; - break;} -case 174: -#line 1929 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.BoolVal = false; ; - break;} -case 175: -#line 1929 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.BoolVal = true; ; - break;} -case 176: -#line 1932 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.BoolVal = true; ; - break;} -case 177: -#line 1932 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.BoolVal = false; ; - break;} -case 178: -#line 1943 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - yyval.ModuleVal = ParserResult = CurModule.CurrentModule; + ;} + break; + + case 180: +#line 1939 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { (yyval.BoolVal) = false; ;} + break; + + case 181: +#line 1939 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { (yyval.BoolVal) = true; ;} + break; + + case 182: +#line 1942 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { (yyval.BoolVal) = true; ;} + break; + + case 183: +#line 1942 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { (yyval.BoolVal) = false; ;} + break; + + case 184: +#line 1953 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + (yyval.ModuleVal) = ParserResult = CurModule.CurrentModule; CurModule.ModuleDone(); CHECK_FOR_ERROR; - ; - break;} -case 179: -#line 1948 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - yyval.ModuleVal = ParserResult = CurModule.CurrentModule; + ;} + break; + + case 185: +#line 1958 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + (yyval.ModuleVal) = ParserResult = CurModule.CurrentModule; CurModule.ModuleDone(); CHECK_FOR_ERROR; - ; - break;} -case 182: -#line 1961 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ CurFun.isDeclare = false; ; - break;} -case 183: -#line 1961 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 188: +#line 1971 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { CurFun.isDeclare = false; ;} + break; + + case 189: +#line 1971 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { CurFun.FunctionDone(); CHECK_FOR_ERROR - ; - break;} -case 184: -#line 1965 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ CurFun.isDeclare = true; ; - break;} -case 185: -#line 1965 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 190: +#line 1975 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { CurFun.isDeclare = true; ;} + break; + + case 191: +#line 1975 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { CHECK_FOR_ERROR - ; - break;} -case 186: -#line 1968 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 192: +#line 1978 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { CHECK_FOR_ERROR - ; - break;} -case 187: -#line 1971 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 193: +#line 1981 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { if (!UpRefs.empty()) - GEN_ERROR("Invalid upreference in type: " + (*yyvsp[0].TypeVal)->getDescription()); + GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(3) - (3)].TypeVal))->getDescription()); // Eagerly resolve types. This is not an optimization, this is a // requirement that is due to the fact that we could have this: // @@ -3643,230 +4663,284 @@ // If types are not resolved eagerly, then the two types will not be // determined to be the same type! // - ResolveTypeTo(yyvsp[-2].StrVal, *yyvsp[0].TypeVal); + ResolveTypeTo((yyvsp[(1) - (3)].StrVal), *(yyvsp[(3) - (3)].TypeVal)); - if (!setTypeName(*yyvsp[0].TypeVal, yyvsp[-2].StrVal) && !yyvsp[-2].StrVal) { + if (!setTypeName(*(yyvsp[(3) - (3)].TypeVal), (yyvsp[(1) - (3)].StrVal)) && !(yyvsp[(1) - (3)].StrVal)) { CHECK_FOR_ERROR // If this is a named type that is not a redefinition, add it to the slot // table. - CurModule.Types.push_back(*yyvsp[0].TypeVal); + CurModule.Types.push_back(*(yyvsp[(3) - (3)].TypeVal)); } - delete yyvsp[0].TypeVal; + delete (yyvsp[(3) - (3)].TypeVal); CHECK_FOR_ERROR - ; - break;} -case 188: -#line 1995 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - ResolveTypeTo(yyvsp[-2].StrVal, yyvsp[0].PrimType); + ;} + break; + + case 194: +#line 2005 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + ResolveTypeTo((yyvsp[(1) - (3)].StrVal), (yyvsp[(3) - (3)].PrimType)); - if (!setTypeName(yyvsp[0].PrimType, yyvsp[-2].StrVal) && !yyvsp[-2].StrVal) { + if (!setTypeName((yyvsp[(3) - (3)].PrimType), (yyvsp[(1) - (3)].StrVal)) && !(yyvsp[(1) - (3)].StrVal)) { CHECK_FOR_ERROR // If this is a named type that is not a redefinition, add it to the slot // table. - CurModule.Types.push_back(yyvsp[0].PrimType); + CurModule.Types.push_back((yyvsp[(3) - (3)].PrimType)); } CHECK_FOR_ERROR - ; - break;} -case 189: -#line 2006 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 195: +#line 2016 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { /* "Externally Visible" Linkage */ - if (yyvsp[0].ConstVal == 0) + if ((yyvsp[(5) - (5)].ConstVal) == 0) GEN_ERROR("Global value initializer is not a constant"); - CurGV = ParseGlobalVariable(yyvsp[-4].StrVal, GlobalValue::ExternalLinkage, - yyvsp[-3].Visibility, yyvsp[-1].BoolVal, yyvsp[0].ConstVal->getType(), yyvsp[0].ConstVal, yyvsp[-2].BoolVal); + CurGV = ParseGlobalVariable((yyvsp[(1) - (5)].StrVal), GlobalValue::ExternalLinkage, + (yyvsp[(2) - (5)].Visibility), (yyvsp[(4) - (5)].BoolVal), (yyvsp[(5) - (5)].ConstVal)->getType(), (yyvsp[(5) - (5)].ConstVal), (yyvsp[(3) - (5)].BoolVal)); CHECK_FOR_ERROR - ; - break;} -case 190: -#line 2013 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 196: +#line 2023 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { CurGV = 0; - ; - break;} -case 191: -#line 2016 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - if (yyvsp[0].ConstVal == 0) + ;} + break; + + case 197: +#line 2026 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + if ((yyvsp[(6) - (6)].ConstVal) == 0) GEN_ERROR("Global value initializer is not a constant"); - CurGV = ParseGlobalVariable(yyvsp[-5].StrVal, yyvsp[-4].Linkage, yyvsp[-3].Visibility, yyvsp[-1].BoolVal, yyvsp[0].ConstVal->getType(), yyvsp[0].ConstVal, yyvsp[-2].BoolVal); + CurGV = ParseGlobalVariable((yyvsp[(1) - (6)].StrVal), (yyvsp[(2) - (6)].Linkage), (yyvsp[(3) - (6)].Visibility), (yyvsp[(5) - (6)].BoolVal), (yyvsp[(6) - (6)].ConstVal)->getType(), (yyvsp[(6) - (6)].ConstVal), (yyvsp[(4) - (6)].BoolVal)); CHECK_FOR_ERROR - ; - break;} -case 192: -#line 2021 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 198: +#line 2031 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { CurGV = 0; - ; - break;} -case 193: -#line 2024 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 199: +#line 2034 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { if (!UpRefs.empty()) - GEN_ERROR("Invalid upreference in type: " + (*yyvsp[0].TypeVal)->getDescription()); - CurGV = ParseGlobalVariable(yyvsp[-5].StrVal, yyvsp[-4].Linkage, yyvsp[-3].Visibility, yyvsp[-1].BoolVal, *yyvsp[0].TypeVal, 0, yyvsp[-2].BoolVal); + GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(6) - (6)].TypeVal))->getDescription()); + CurGV = ParseGlobalVariable((yyvsp[(1) - (6)].StrVal), (yyvsp[(2) - (6)].Linkage), (yyvsp[(3) - (6)].Visibility), (yyvsp[(5) - (6)].BoolVal), *(yyvsp[(6) - (6)].TypeVal), 0, (yyvsp[(4) - (6)].BoolVal)); CHECK_FOR_ERROR - delete yyvsp[0].TypeVal; - ; - break;} -case 194: -#line 2030 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + delete (yyvsp[(6) - (6)].TypeVal); + ;} + break; + + case 200: +#line 2040 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { CurGV = 0; CHECK_FOR_ERROR - ; - break;} -case 195: -#line 2034 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - CHECK_FOR_ERROR - ; - break;} -case 196: -#line 2037 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 201: +#line 2044 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + std::string Name((yyvsp[(1) - (6)].StrVal)); + if (Name.empty()) + GEN_ERROR("Alias name cannot be empty") + const PointerType *PFTy = 0; + const FunctionType *Ty = 0; + Value* V = 0; + const Type* VTy = 0; + if (!(PFTy = dyn_cast((yyvsp[(5) - (6)].TypeVal)->get())) || + !(Ty = dyn_cast(PFTy->getElementType()))) { + VTy = (yyvsp[(5) - (6)].TypeVal)->get(); + V = getExistingVal(VTy, (yyvsp[(6) - (6)].ValIDVal)); + } else { + VTy = PFTy; + V = getExistingVal(PFTy, (yyvsp[(6) - (6)].ValIDVal)); + } + if (V == 0) + GEN_ERROR(std::string("Invalid aliasee for alias: ") + (yyvsp[(1) - (6)].StrVal)); + GlobalValue* Aliasee; + if (Aliasee = dyn_cast(V)) { + GlobalAlias* GA = new GlobalAlias(VTy, (yyvsp[(4) - (6)].Linkage), Name, Aliasee, CurModule.CurrentModule); + GA->setVisibility((yyvsp[(2) - (6)].Visibility)); + InsertValue(GA, CurModule.Values); + } else + GEN_ERROR("Aliases can be created only to global values"); CHECK_FOR_ERROR - ; - break;} -case 197: -#line 2043 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + delete (yyvsp[(5) - (6)].TypeVal); + ;} + break; + + case 202: +#line 2072 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + CHECK_FOR_ERROR + ;} + break; + + case 203: +#line 2075 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + CHECK_FOR_ERROR + ;} + break; + + case 204: +#line 2081 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { const std::string &AsmSoFar = CurModule.CurrentModule->getModuleInlineAsm(); - char *EndStr = UnEscapeLexed(yyvsp[0].StrVal, true); - std::string NewAsm(yyvsp[0].StrVal, EndStr); - free(yyvsp[0].StrVal); + char *EndStr = UnEscapeLexed((yyvsp[(1) - (1)].StrVal), true); + std::string NewAsm((yyvsp[(1) - (1)].StrVal), EndStr); + free((yyvsp[(1) - (1)].StrVal)); if (AsmSoFar.empty()) CurModule.CurrentModule->setModuleInlineAsm(NewAsm); else CurModule.CurrentModule->setModuleInlineAsm(AsmSoFar+"\n"+NewAsm); CHECK_FOR_ERROR -; - break;} -case 198: -#line 2056 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - CurModule.CurrentModule->setTargetTriple(yyvsp[0].StrVal); - free(yyvsp[0].StrVal); - ; - break;} -case 199: -#line 2060 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - CurModule.CurrentModule->setDataLayout(yyvsp[0].StrVal); - free(yyvsp[0].StrVal); - ; - break;} -case 201: -#line 2067 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - CurModule.CurrentModule->addLibrary(yyvsp[0].StrVal); - free(yyvsp[0].StrVal); +;} + break; + + case 205: +#line 2094 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + CurModule.CurrentModule->setTargetTriple((yyvsp[(3) - (3)].StrVal)); + free((yyvsp[(3) - (3)].StrVal)); + ;} + break; + + case 206: +#line 2098 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + CurModule.CurrentModule->setDataLayout((yyvsp[(3) - (3)].StrVal)); + free((yyvsp[(3) - (3)].StrVal)); + ;} + break; + + case 208: +#line 2105 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + CurModule.CurrentModule->addLibrary((yyvsp[(3) - (3)].StrVal)); + free((yyvsp[(3) - (3)].StrVal)); CHECK_FOR_ERROR - ; - break;} -case 202: -#line 2072 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - CurModule.CurrentModule->addLibrary(yyvsp[0].StrVal); - free(yyvsp[0].StrVal); + ;} + break; + + case 209: +#line 2110 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + CurModule.CurrentModule->addLibrary((yyvsp[(1) - (1)].StrVal)); + free((yyvsp[(1) - (1)].StrVal)); CHECK_FOR_ERROR - ; - break;} -case 203: -#line 2077 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 210: +#line 2115 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { CHECK_FOR_ERROR - ; - break;} -case 204: -#line 2086 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 211: +#line 2124 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { if (!UpRefs.empty()) - GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription()); - if (*yyvsp[-2].TypeVal == Type::VoidTy) + GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(3) - (5)].TypeVal))->getDescription()); + if (*(yyvsp[(3) - (5)].TypeVal) == Type::VoidTy) GEN_ERROR("void typed arguments are invalid"); - ArgListEntry E; E.Attrs = yyvsp[-1].ParamAttrs; E.Ty = yyvsp[-2].TypeVal; E.Name = yyvsp[0].StrVal; - yyval.ArgList = yyvsp[-4].ArgList; - yyvsp[-4].ArgList->push_back(E); - CHECK_FOR_ERROR - ; - break;} -case 205: -#line 2096 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ArgListEntry E; E.Attrs = (yyvsp[(4) - (5)].ParamAttrs); E.Ty = (yyvsp[(3) - (5)].TypeVal); E.Name = (yyvsp[(5) - (5)].StrVal); + (yyval.ArgList) = (yyvsp[(1) - (5)].ArgList); + (yyvsp[(1) - (5)].ArgList)->push_back(E); + CHECK_FOR_ERROR + ;} + break; + + case 212: +#line 2134 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { if (!UpRefs.empty()) - GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription()); - if (*yyvsp[-2].TypeVal == Type::VoidTy) + GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (3)].TypeVal))->getDescription()); + if (*(yyvsp[(1) - (3)].TypeVal) == Type::VoidTy) GEN_ERROR("void typed arguments are invalid"); - ArgListEntry E; E.Attrs = yyvsp[-1].ParamAttrs; E.Ty = yyvsp[-2].TypeVal; E.Name = yyvsp[0].StrVal; - yyval.ArgList = new ArgListType; - yyval.ArgList->push_back(E); - CHECK_FOR_ERROR - ; - break;} -case 206: -#line 2107 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - yyval.ArgList = yyvsp[0].ArgList; + ArgListEntry E; E.Attrs = (yyvsp[(2) - (3)].ParamAttrs); E.Ty = (yyvsp[(1) - (3)].TypeVal); E.Name = (yyvsp[(3) - (3)].StrVal); + (yyval.ArgList) = new ArgListType; + (yyval.ArgList)->push_back(E); CHECK_FOR_ERROR - ; - break;} -case 207: -#line 2111 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - yyval.ArgList = yyvsp[-2].ArgList; + ;} + break; + + case 213: +#line 2145 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + (yyval.ArgList) = (yyvsp[(1) - (1)].ArgList); + CHECK_FOR_ERROR + ;} + break; + + case 214: +#line 2149 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + (yyval.ArgList) = (yyvsp[(1) - (3)].ArgList); struct ArgListEntry E; E.Ty = new PATypeHolder(Type::VoidTy); E.Name = 0; E.Attrs = ParamAttr::None; - yyval.ArgList->push_back(E); + (yyval.ArgList)->push_back(E); CHECK_FOR_ERROR - ; - break;} -case 208: -#line 2120 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - yyval.ArgList = new ArgListType; + ;} + break; + + case 215: +#line 2158 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + (yyval.ArgList) = new ArgListType; struct ArgListEntry E; E.Ty = new PATypeHolder(Type::VoidTy); E.Name = 0; E.Attrs = ParamAttr::None; - yyval.ArgList->push_back(E); + (yyval.ArgList)->push_back(E); CHECK_FOR_ERROR - ; - break;} -case 209: -#line 2129 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - yyval.ArgList = 0; + ;} + break; + + case 216: +#line 2167 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + (yyval.ArgList) = 0; CHECK_FOR_ERROR - ; - break;} -case 210: -#line 2135 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - UnEscapeLexed(yyvsp[-6].StrVal); - std::string FunctionName(yyvsp[-6].StrVal); - free(yyvsp[-6].StrVal); // Free strdup'd memory! + ;} + break; + + case 217: +#line 2173 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + UnEscapeLexed((yyvsp[(3) - (9)].StrVal)); + std::string FunctionName((yyvsp[(3) - (9)].StrVal)); + free((yyvsp[(3) - (9)].StrVal)); // Free strdup'd memory! // Check the function result for abstractness if this is a define. We should // have no abstract types at this point - if (!CurFun.isDeclare && CurModule.TypeIsUnresolved(yyvsp[-7].TypeVal)) - GEN_ERROR("Reference to abstract result: "+ yyvsp[-7].TypeVal->get()->getDescription()); + if (!CurFun.isDeclare && CurModule.TypeIsUnresolved((yyvsp[(2) - (9)].TypeVal))) + GEN_ERROR("Reference to abstract result: "+ (yyvsp[(2) - (9)].TypeVal)->get()->getDescription()); std::vector ParamTypeList; ParamAttrsVector Attrs; - if (yyvsp[-2].ParamAttrs != ParamAttr::None) { - ParamAttrsWithIndex PAWI; PAWI.index = 0; PAWI.attrs = yyvsp[-2].ParamAttrs; + if ((yyvsp[(7) - (9)].ParamAttrs) != ParamAttr::None) { + ParamAttrsWithIndex PAWI; PAWI.index = 0; PAWI.attrs = (yyvsp[(7) - (9)].ParamAttrs); Attrs.push_back(PAWI); } - if (yyvsp[-4].ArgList) { // If there are arguments... + if ((yyvsp[(5) - (9)].ArgList)) { // If there are arguments... unsigned index = 1; - for (ArgListType::iterator I = yyvsp[-4].ArgList->begin(); I != yyvsp[-4].ArgList->end(); ++I, ++index) { + for (ArgListType::iterator I = (yyvsp[(5) - (9)].ArgList)->begin(); I != (yyvsp[(5) - (9)].ArgList)->end(); ++I, ++index) { const Type* Ty = I->Ty->get(); if (!CurFun.isDeclare && CurModule.TypeIsUnresolved(I->Ty)) GEN_ERROR("Reference to abstract argument: " + Ty->getDescription()); @@ -3886,9 +4960,9 @@ if (!Attrs.empty()) PAL = ParamAttrsList::get(Attrs); - FunctionType *FT = FunctionType::get(*yyvsp[-7].TypeVal, ParamTypeList, isVarArg, PAL); + FunctionType *FT = FunctionType::get(*(yyvsp[(2) - (9)].TypeVal), ParamTypeList, isVarArg, PAL); const PointerType *PFT = PointerType::get(FT); - delete yyvsp[-7].TypeVal; + delete (yyvsp[(2) - (9)].TypeVal); ValID ID; if (!FunctionName.empty()) { @@ -3912,9 +4986,9 @@ // error. GEN_ERROR("Overload of function '" + FunctionName + "' not permitted."); } else if (!CurFun.isDeclare && !Fn->isDeclaration()) { - // Neither the existing or the current function is a declaration and they - // have the same name and same type. Clearly this is a redefinition. - GEN_ERROR("Redefinition of function '" + FunctionName + "'"); + // Neither the existing or the current function is a declaration and they + // have the same name and same type. Clearly this is a redefinition. + GEN_ERROR("Redefinition of function '" + FunctionName + "'"); } if (Fn->isDeclaration()) { // Make sure to strip off any argument names so we can't get conflicts. for (Function::arg_iterator AI = Fn->arg_begin(), AE = Fn->arg_end(); @@ -3937,26 +5011,26 @@ Fn->setLinkage(CurFun.Linkage); Fn->setVisibility(CurFun.Visibility); } - Fn->setCallingConv(yyvsp[-8].UIntVal); - Fn->setAlignment(yyvsp[0].UIntVal); - if (yyvsp[-1].StrVal) { - Fn->setSection(yyvsp[-1].StrVal); - free(yyvsp[-1].StrVal); + Fn->setCallingConv((yyvsp[(1) - (9)].UIntVal)); + Fn->setAlignment((yyvsp[(9) - (9)].UIntVal)); + if ((yyvsp[(8) - (9)].StrVal)) { + Fn->setSection((yyvsp[(8) - (9)].StrVal)); + free((yyvsp[(8) - (9)].StrVal)); } // Add all of the arguments we parsed to the function... - if (yyvsp[-4].ArgList) { // Is null if empty... + if ((yyvsp[(5) - (9)].ArgList)) { // Is null if empty... if (isVarArg) { // Nuke the last entry - assert(yyvsp[-4].ArgList->back().Ty->get() == Type::VoidTy && yyvsp[-4].ArgList->back().Name == 0 && + assert((yyvsp[(5) - (9)].ArgList)->back().Ty->get() == Type::VoidTy && (yyvsp[(5) - (9)].ArgList)->back().Name == 0 && "Not a varargs marker!"); - delete yyvsp[-4].ArgList->back().Ty; - yyvsp[-4].ArgList->pop_back(); // Delete the last entry + delete (yyvsp[(5) - (9)].ArgList)->back().Ty; + (yyvsp[(5) - (9)].ArgList)->pop_back(); // Delete the last entry } Function::arg_iterator ArgIt = Fn->arg_begin(); Function::arg_iterator ArgEnd = Fn->arg_end(); unsigned Idx = 1; - for (ArgListType::iterator I = yyvsp[-4].ArgList->begin(); - I != yyvsp[-4].ArgList->end() && ArgIt != ArgEnd; ++I, ++ArgIt) { + for (ArgListType::iterator I = (yyvsp[(5) - (9)].ArgList)->begin(); + I != (yyvsp[(5) - (9)].ArgList)->end() && ArgIt != ArgEnd; ++I, ++ArgIt) { delete I->Ty; // Delete the typeholder... setValueName(ArgIt, I->Name); // Insert arg into symtab... CHECK_FOR_ERROR @@ -3964,114 +5038,128 @@ Idx++; } - delete yyvsp[-4].ArgList; // We're now done with the argument list + delete (yyvsp[(5) - (9)].ArgList); // We're now done with the argument list } CHECK_FOR_ERROR -; - break;} -case 213: -#line 2258 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - yyval.FunctionVal = CurFun.CurrentFunction; +;} + break; + + case 220: +#line 2296 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + (yyval.FunctionVal) = CurFun.CurrentFunction; // Make sure that we keep track of the linkage type even if there was a // previous "declare". - yyval.FunctionVal->setLinkage(yyvsp[-3].Linkage); - yyval.FunctionVal->setVisibility(yyvsp[-2].Visibility); -; - break;} -case 216: -#line 2269 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - yyval.FunctionVal = yyvsp[-1].FunctionVal; + (yyval.FunctionVal)->setLinkage((yyvsp[(1) - (4)].Linkage)); + (yyval.FunctionVal)->setVisibility((yyvsp[(2) - (4)].Visibility)); +;} + break; + + case 223: +#line 2307 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + (yyval.FunctionVal) = (yyvsp[(1) - (2)].FunctionVal); CHECK_FOR_ERROR -; - break;} -case 217: -#line 2274 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - CurFun.CurrentFunction->setLinkage(yyvsp[-2].Linkage); - CurFun.CurrentFunction->setVisibility(yyvsp[-1].Visibility); - yyval.FunctionVal = CurFun.CurrentFunction; +;} + break; + + case 224: +#line 2312 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + CurFun.CurrentFunction->setLinkage((yyvsp[(1) - (3)].Linkage)); + CurFun.CurrentFunction->setVisibility((yyvsp[(2) - (3)].Visibility)); + (yyval.FunctionVal) = CurFun.CurrentFunction; CurFun.FunctionDone(); CHECK_FOR_ERROR - ; - break;} -case 218: -#line 2286 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - yyval.BoolVal = false; + ;} + break; + + case 225: +#line 2324 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + (yyval.BoolVal) = false; CHECK_FOR_ERROR - ; - break;} -case 219: -#line 2290 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - yyval.BoolVal = true; + ;} + break; + + case 226: +#line 2328 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + (yyval.BoolVal) = true; CHECK_FOR_ERROR - ; - break;} -case 220: -#line 2295 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ // A reference to a direct constant - yyval.ValIDVal = ValID::create(yyvsp[0].SInt64Val); - CHECK_FOR_ERROR - ; - break;} -case 221: -#line 2299 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - yyval.ValIDVal = ValID::create(yyvsp[0].UInt64Val); + ;} + break; + + case 227: +#line 2333 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { // A reference to a direct constant + (yyval.ValIDVal) = ValID::create((yyvsp[(1) - (1)].SInt64Val)); CHECK_FOR_ERROR - ; - break;} -case 222: -#line 2303 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ // Perhaps it's an FP constant? - yyval.ValIDVal = ValID::create(yyvsp[0].FPVal); - CHECK_FOR_ERROR - ; - break;} -case 223: -#line 2307 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - yyval.ValIDVal = ValID::create(ConstantInt::getTrue()); + ;} + break; + + case 228: +#line 2337 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + (yyval.ValIDVal) = ValID::create((yyvsp[(1) - (1)].UInt64Val)); CHECK_FOR_ERROR - ; - break;} -case 224: -#line 2311 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - yyval.ValIDVal = ValID::create(ConstantInt::getFalse()); + ;} + break; + + case 229: +#line 2341 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { // Perhaps it's an FP constant? + (yyval.ValIDVal) = ValID::create((yyvsp[(1) - (1)].FPVal)); CHECK_FOR_ERROR - ; - break;} -case 225: -#line 2315 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - yyval.ValIDVal = ValID::createNull(); + ;} + break; + + case 230: +#line 2345 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + (yyval.ValIDVal) = ValID::create(ConstantInt::getTrue()); CHECK_FOR_ERROR - ; - break;} -case 226: -#line 2319 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - yyval.ValIDVal = ValID::createUndef(); + ;} + break; + + case 231: +#line 2349 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + (yyval.ValIDVal) = ValID::create(ConstantInt::getFalse()); + CHECK_FOR_ERROR + ;} + break; + + case 232: +#line 2353 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + (yyval.ValIDVal) = ValID::createNull(); + CHECK_FOR_ERROR + ;} + break; + + case 233: +#line 2357 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + (yyval.ValIDVal) = ValID::createUndef(); + CHECK_FOR_ERROR + ;} + break; + + case 234: +#line 2361 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { // A vector zero constant. + (yyval.ValIDVal) = ValID::createZeroInit(); CHECK_FOR_ERROR - ; - break;} -case 227: -#line 2323 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ // A vector zero constant. - yyval.ValIDVal = ValID::createZeroInit(); - CHECK_FOR_ERROR - ; - break;} -case 228: -#line 2327 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ // Nonempty unsized packed vector - const Type *ETy = (*yyvsp[-1].ConstVector)[0]->getType(); - int NumElements = yyvsp[-1].ConstVector->size(); + ;} + break; + + case 235: +#line 2365 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { // Nonempty unsized packed vector + const Type *ETy = (*(yyvsp[(2) - (3)].ConstVector))[0]->getType(); + int NumElements = (yyvsp[(2) - (3)].ConstVector)->size(); VectorType* pt = VectorType::get(ETy, NumElements); PATypeHolder* PTy = new PATypeHolder( @@ -4083,213 +5171,233 @@ ); // Verify all elements are correct type! - for (unsigned i = 0; i < yyvsp[-1].ConstVector->size(); i++) { - if (ETy != (*yyvsp[-1].ConstVector)[i]->getType()) + for (unsigned i = 0; i < (yyvsp[(2) - (3)].ConstVector)->size(); i++) { + if (ETy != (*(yyvsp[(2) - (3)].ConstVector))[i]->getType()) GEN_ERROR("Element #" + utostr(i) + " is not of type '" + ETy->getDescription() +"' as required!\nIt is of type '" + - (*yyvsp[-1].ConstVector)[i]->getType()->getDescription() + "'."); + (*(yyvsp[(2) - (3)].ConstVector))[i]->getType()->getDescription() + "'."); } - yyval.ValIDVal = ValID::create(ConstantVector::get(pt, *yyvsp[-1].ConstVector)); - delete PTy; delete yyvsp[-1].ConstVector; + (yyval.ValIDVal) = ValID::create(ConstantVector::get(pt, *(yyvsp[(2) - (3)].ConstVector))); + delete PTy; delete (yyvsp[(2) - (3)].ConstVector); + CHECK_FOR_ERROR + ;} + break; + + case 236: +#line 2390 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + (yyval.ValIDVal) = ValID::create((yyvsp[(1) - (1)].ConstVal)); + CHECK_FOR_ERROR + ;} + break; + + case 237: +#line 2394 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + char *End = UnEscapeLexed((yyvsp[(3) - (5)].StrVal), true); + std::string AsmStr = std::string((yyvsp[(3) - (5)].StrVal), End); + End = UnEscapeLexed((yyvsp[(5) - (5)].StrVal), true); + std::string Constraints = std::string((yyvsp[(5) - (5)].StrVal), End); + (yyval.ValIDVal) = ValID::createInlineAsm(AsmStr, Constraints, (yyvsp[(2) - (5)].BoolVal)); + free((yyvsp[(3) - (5)].StrVal)); + free((yyvsp[(5) - (5)].StrVal)); + CHECK_FOR_ERROR + ;} + break; + + case 238: +#line 2408 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { // Is it an integer reference...? + (yyval.ValIDVal) = ValID::createLocalID((yyvsp[(1) - (1)].UIntVal)); + CHECK_FOR_ERROR + ;} + break; + + case 239: +#line 2412 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + (yyval.ValIDVal) = ValID::createGlobalID((yyvsp[(1) - (1)].UIntVal)); + CHECK_FOR_ERROR + ;} + break; + + case 240: +#line 2416 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { // Is it a named reference...? + (yyval.ValIDVal) = ValID::createLocalName((yyvsp[(1) - (1)].StrVal)); + CHECK_FOR_ERROR + ;} + break; + + case 241: +#line 2420 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { // Is it a named reference...? + (yyval.ValIDVal) = ValID::createGlobalName((yyvsp[(1) - (1)].StrVal)); + CHECK_FOR_ERROR + ;} + break; + + case 244: +#line 2432 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + if (!UpRefs.empty()) + GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (2)].TypeVal))->getDescription()); + (yyval.ValueVal) = getVal(*(yyvsp[(1) - (2)].TypeVal), (yyvsp[(2) - (2)].ValIDVal)); + delete (yyvsp[(1) - (2)].TypeVal); + CHECK_FOR_ERROR + ;} + break; + + case 245: +#line 2441 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + (yyval.FunctionVal) = (yyvsp[(1) - (2)].FunctionVal); + CHECK_FOR_ERROR + ;} + break; + + case 246: +#line 2445 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { // Do not allow functions with 0 basic blocks + (yyval.FunctionVal) = (yyvsp[(1) - (2)].FunctionVal); + CHECK_FOR_ERROR + ;} + break; + + case 247: +#line 2454 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + setValueName((yyvsp[(3) - (3)].TermInstVal), (yyvsp[(2) - (3)].StrVal)); + CHECK_FOR_ERROR + InsertValue((yyvsp[(3) - (3)].TermInstVal)); + (yyvsp[(1) - (3)].BasicBlockVal)->getInstList().push_back((yyvsp[(3) - (3)].TermInstVal)); + (yyval.BasicBlockVal) = (yyvsp[(1) - (3)].BasicBlockVal); + CHECK_FOR_ERROR + ;} + break; + + case 248: +#line 2463 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + if (CastInst *CI1 = dyn_cast((yyvsp[(2) - (2)].InstVal))) + if (CastInst *CI2 = dyn_cast(CI1->getOperand(0))) + if (CI2->getParent() == 0) + (yyvsp[(1) - (2)].BasicBlockVal)->getInstList().push_back(CI2); + (yyvsp[(1) - (2)].BasicBlockVal)->getInstList().push_back((yyvsp[(2) - (2)].InstVal)); + (yyval.BasicBlockVal) = (yyvsp[(1) - (2)].BasicBlockVal); + CHECK_FOR_ERROR + ;} + break; + + case 249: +#line 2472 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { // Empty space between instruction lists + (yyval.BasicBlockVal) = defineBBVal(ValID::createLocalID(CurFun.NextValNum)); + CHECK_FOR_ERROR + ;} + break; + + case 250: +#line 2476 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { // Labelled (named) basic block + (yyval.BasicBlockVal) = defineBBVal(ValID::createLocalName((yyvsp[(1) - (1)].StrVal))); CHECK_FOR_ERROR - ; - break;} -case 229: -#line 2352 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - yyval.ValIDVal = ValID::create(yyvsp[0].ConstVal); + ;} + break; + + case 251: +#line 2481 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { // Return with a result... + (yyval.TermInstVal) = new ReturnInst((yyvsp[(2) - (2)].ValueVal)); CHECK_FOR_ERROR - ; - break;} -case 230: -#line 2356 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - char *End = UnEscapeLexed(yyvsp[-2].StrVal, true); - std::string AsmStr = std::string(yyvsp[-2].StrVal, End); - End = UnEscapeLexed(yyvsp[0].StrVal, true); - std::string Constraints = std::string(yyvsp[0].StrVal, End); - yyval.ValIDVal = ValID::createInlineAsm(AsmStr, Constraints, yyvsp[-3].BoolVal); - free(yyvsp[-2].StrVal); - free(yyvsp[0].StrVal); - CHECK_FOR_ERROR - ; - break;} -case 231: -#line 2370 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ // Is it an integer reference...? - yyval.ValIDVal = ValID::createLocalID(yyvsp[0].UIntVal); - CHECK_FOR_ERROR - ; - break;} -case 232: -#line 2374 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - yyval.ValIDVal = ValID::createGlobalID(yyvsp[0].UIntVal); + ;} + break; + + case 252: +#line 2485 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { // Return with no result... + (yyval.TermInstVal) = new ReturnInst(); CHECK_FOR_ERROR - ; - break;} -case 233: -#line 2378 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ // Is it a named reference...? - yyval.ValIDVal = ValID::createLocalName(yyvsp[0].StrVal); - CHECK_FOR_ERROR - ; - break;} -case 234: -#line 2382 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ // Is it a named reference...? - yyval.ValIDVal = ValID::createGlobalName(yyvsp[0].StrVal); - CHECK_FOR_ERROR - ; - break;} -case 237: -#line 2394 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - if (!UpRefs.empty()) - GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription()); - yyval.ValueVal = getVal(*yyvsp[-1].TypeVal, yyvsp[0].ValIDVal); - delete yyvsp[-1].TypeVal; - CHECK_FOR_ERROR - ; - break;} -case 238: -#line 2403 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - yyval.FunctionVal = yyvsp[-1].FunctionVal; + ;} + break; + + case 253: +#line 2489 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { // Unconditional Branch... + BasicBlock* tmpBB = getBBVal((yyvsp[(3) - (3)].ValIDVal)); CHECK_FOR_ERROR - ; - break;} -case 239: -#line 2407 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ // Do not allow functions with 0 basic blocks - yyval.FunctionVal = yyvsp[-1].FunctionVal; - CHECK_FOR_ERROR - ; - break;} -case 240: -#line 2416 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - setValueName(yyvsp[0].TermInstVal, yyvsp[-1].StrVal); + (yyval.TermInstVal) = new BranchInst(tmpBB); + ;} + break; + + case 254: +#line 2494 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + assert(cast((yyvsp[(2) - (9)].PrimType))->getBitWidth() == 1 && "Not Bool?"); + BasicBlock* tmpBBA = getBBVal((yyvsp[(6) - (9)].ValIDVal)); CHECK_FOR_ERROR - InsertValue(yyvsp[0].TermInstVal); - yyvsp[-2].BasicBlockVal->getInstList().push_back(yyvsp[0].TermInstVal); - yyval.BasicBlockVal = yyvsp[-2].BasicBlockVal; - CHECK_FOR_ERROR - ; - break;} -case 241: -#line 2425 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - if (CastInst *CI1 = dyn_cast(yyvsp[0].InstVal)) - if (CastInst *CI2 = dyn_cast(CI1->getOperand(0))) - if (CI2->getParent() == 0) - yyvsp[-1].BasicBlockVal->getInstList().push_back(CI2); - yyvsp[-1].BasicBlockVal->getInstList().push_back(yyvsp[0].InstVal); - yyval.BasicBlockVal = yyvsp[-1].BasicBlockVal; - CHECK_FOR_ERROR - ; - break;} -case 242: -#line 2434 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ // Empty space between instruction lists - yyval.BasicBlockVal = defineBBVal(ValID::createLocalID(CurFun.NextValNum)); - CHECK_FOR_ERROR - ; - break;} -case 243: -#line 2438 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ // Labelled (named) basic block - yyval.BasicBlockVal = defineBBVal(ValID::createLocalName(yyvsp[0].StrVal)); - CHECK_FOR_ERROR - ; - break;} -case 244: -#line 2443 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ // Return with a result... - yyval.TermInstVal = new ReturnInst(yyvsp[0].ValueVal); - CHECK_FOR_ERROR - ; - break;} -case 245: -#line 2447 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ // Return with no result... - yyval.TermInstVal = new ReturnInst(); - CHECK_FOR_ERROR - ; - break;} -case 246: -#line 2451 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ // Unconditional Branch... - BasicBlock* tmpBB = getBBVal(yyvsp[0].ValIDVal); - CHECK_FOR_ERROR - yyval.TermInstVal = new BranchInst(tmpBB); - ; - break;} -case 247: -#line 2456 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - assert(cast(yyvsp[-7].PrimType)->getBitWidth() == 1 && "Not Bool?"); - BasicBlock* tmpBBA = getBBVal(yyvsp[-3].ValIDVal); - CHECK_FOR_ERROR - BasicBlock* tmpBBB = getBBVal(yyvsp[0].ValIDVal); - CHECK_FOR_ERROR - Value* tmpVal = getVal(Type::Int1Ty, yyvsp[-6].ValIDVal); - CHECK_FOR_ERROR - yyval.TermInstVal = new BranchInst(tmpBBA, tmpBBB, tmpVal); - ; - break;} -case 248: -#line 2466 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - Value* tmpVal = getVal(yyvsp[-7].PrimType, yyvsp[-6].ValIDVal); + BasicBlock* tmpBBB = getBBVal((yyvsp[(9) - (9)].ValIDVal)); + CHECK_FOR_ERROR + Value* tmpVal = getVal(Type::Int1Ty, (yyvsp[(3) - (9)].ValIDVal)); + CHECK_FOR_ERROR + (yyval.TermInstVal) = new BranchInst(tmpBBA, tmpBBB, tmpVal); + ;} + break; + + case 255: +#line 2504 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + Value* tmpVal = getVal((yyvsp[(2) - (9)].PrimType), (yyvsp[(3) - (9)].ValIDVal)); CHECK_FOR_ERROR - BasicBlock* tmpBB = getBBVal(yyvsp[-3].ValIDVal); + BasicBlock* tmpBB = getBBVal((yyvsp[(6) - (9)].ValIDVal)); CHECK_FOR_ERROR - SwitchInst *S = new SwitchInst(tmpVal, tmpBB, yyvsp[-1].JumpTable->size()); - yyval.TermInstVal = S; + SwitchInst *S = new SwitchInst(tmpVal, tmpBB, (yyvsp[(8) - (9)].JumpTable)->size()); + (yyval.TermInstVal) = S; - std::vector >::iterator I = yyvsp[-1].JumpTable->begin(), - E = yyvsp[-1].JumpTable->end(); + std::vector >::iterator I = (yyvsp[(8) - (9)].JumpTable)->begin(), + E = (yyvsp[(8) - (9)].JumpTable)->end(); for (; I != E; ++I) { if (ConstantInt *CI = dyn_cast(I->first)) S->addCase(CI, I->second); else GEN_ERROR("Switch case is constant, but not a simple integer"); } - delete yyvsp[-1].JumpTable; + delete (yyvsp[(8) - (9)].JumpTable); CHECK_FOR_ERROR - ; - break;} -case 249: -#line 2485 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - Value* tmpVal = getVal(yyvsp[-6].PrimType, yyvsp[-5].ValIDVal); + ;} + break; + + case 256: +#line 2523 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + Value* tmpVal = getVal((yyvsp[(2) - (8)].PrimType), (yyvsp[(3) - (8)].ValIDVal)); CHECK_FOR_ERROR - BasicBlock* tmpBB = getBBVal(yyvsp[-2].ValIDVal); + BasicBlock* tmpBB = getBBVal((yyvsp[(6) - (8)].ValIDVal)); CHECK_FOR_ERROR SwitchInst *S = new SwitchInst(tmpVal, tmpBB, 0); - yyval.TermInstVal = S; + (yyval.TermInstVal) = S; CHECK_FOR_ERROR - ; - break;} -case 250: -#line 2495 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 257: +#line 2533 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { // Handle the short syntax const PointerType *PFTy = 0; const FunctionType *Ty = 0; - if (!(PFTy = dyn_cast(yyvsp[-11].TypeVal->get())) || + if (!(PFTy = dyn_cast((yyvsp[(3) - (14)].TypeVal)->get())) || !(Ty = dyn_cast(PFTy->getElementType()))) { // Pull out the types of all of the arguments... std::vector ParamTypes; ParamAttrsVector Attrs; - if (yyvsp[-6].ParamAttrs != ParamAttr::None) { + if ((yyvsp[(8) - (14)].ParamAttrs) != ParamAttr::None) { ParamAttrsWithIndex PAWI; PAWI.index = 0; PAWI.attrs = 8; Attrs.push_back(PAWI); } - ValueRefList::iterator I = yyvsp[-8].ValueRefList->begin(), E = yyvsp[-8].ValueRefList->end(); + ValueRefList::iterator I = (yyvsp[(6) - (14)].ValueRefList)->begin(), E = (yyvsp[(6) - (14)].ValueRefList)->end(); unsigned index = 1; for (; I != E; ++I, ++index) { const Type *Ty = I->Val->getType(); @@ -4305,22 +5413,22 @@ ParamAttrsList *PAL = 0; if (!Attrs.empty()) PAL = ParamAttrsList::get(Attrs); - Ty = FunctionType::get(yyvsp[-11].TypeVal->get(), ParamTypes, false, PAL); + Ty = FunctionType::get((yyvsp[(3) - (14)].TypeVal)->get(), ParamTypes, false, PAL); PFTy = PointerType::get(Ty); } - delete yyvsp[-11].TypeVal; + delete (yyvsp[(3) - (14)].TypeVal); - Value *V = getVal(PFTy, yyvsp[-10].ValIDVal); // Get the function we're calling... + Value *V = getVal(PFTy, (yyvsp[(4) - (14)].ValIDVal)); // Get the function we're calling... CHECK_FOR_ERROR - BasicBlock *Normal = getBBVal(yyvsp[-3].ValIDVal); + BasicBlock *Normal = getBBVal((yyvsp[(11) - (14)].ValIDVal)); CHECK_FOR_ERROR - BasicBlock *Except = getBBVal(yyvsp[0].ValIDVal); + BasicBlock *Except = getBBVal((yyvsp[(14) - (14)].ValIDVal)); CHECK_FOR_ERROR // Check the arguments ValueList Args; - if (yyvsp[-8].ValueRefList->empty()) { // Has no arguments? + if ((yyvsp[(6) - (14)].ValueRefList)->empty()) { // Has no arguments? // Make sure no arguments is a good thing! if (Ty->getNumParams() != 0) GEN_ERROR("No arguments passed to a function that " @@ -4330,7 +5438,7 @@ // correctly! FunctionType::param_iterator I = Ty->param_begin(); FunctionType::param_iterator E = Ty->param_end(); - ValueRefList::iterator ArgI = yyvsp[-8].ValueRefList->begin(), ArgE = yyvsp[-8].ValueRefList->end(); + ValueRefList::iterator ArgI = (yyvsp[(6) - (14)].ValueRefList)->begin(), ArgE = (yyvsp[(6) - (14)].ValueRefList)->end(); for (; ArgI != ArgE && I != E; ++ArgI, ++I) { if (ArgI->Val->getType() != *I) @@ -4349,322 +5457,348 @@ // Create the InvokeInst InvokeInst *II = new InvokeInst(V, Normal, Except, &Args[0], Args.size()); - II->setCallingConv(yyvsp[-12].UIntVal); - yyval.TermInstVal = II; - delete yyvsp[-8].ValueRefList; - CHECK_FOR_ERROR - ; - break;} -case 251: -#line 2574 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - yyval.TermInstVal = new UnwindInst(); + II->setCallingConv((yyvsp[(2) - (14)].UIntVal)); + (yyval.TermInstVal) = II; + delete (yyvsp[(6) - (14)].ValueRefList); CHECK_FOR_ERROR - ; - break;} -case 252: -#line 2578 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - yyval.TermInstVal = new UnreachableInst(); + ;} + break; + + case 258: +#line 2612 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + (yyval.TermInstVal) = new UnwindInst(); CHECK_FOR_ERROR - ; - break;} -case 253: -#line 2585 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - yyval.JumpTable = yyvsp[-5].JumpTable; - Constant *V = cast(getExistingVal(yyvsp[-4].PrimType, yyvsp[-3].ValIDVal)); + ;} + break; + + case 259: +#line 2616 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + (yyval.TermInstVal) = new UnreachableInst(); + CHECK_FOR_ERROR + ;} + break; + + case 260: +#line 2623 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + (yyval.JumpTable) = (yyvsp[(1) - (6)].JumpTable); + Constant *V = cast(getExistingVal((yyvsp[(2) - (6)].PrimType), (yyvsp[(3) - (6)].ValIDVal))); CHECK_FOR_ERROR if (V == 0) GEN_ERROR("May only switch on a constant pool value"); - BasicBlock* tmpBB = getBBVal(yyvsp[0].ValIDVal); + BasicBlock* tmpBB = getBBVal((yyvsp[(6) - (6)].ValIDVal)); CHECK_FOR_ERROR - yyval.JumpTable->push_back(std::make_pair(V, tmpBB)); - ; - break;} -case 254: -#line 2596 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - yyval.JumpTable = new std::vector >(); - Constant *V = cast(getExistingVal(yyvsp[-4].PrimType, yyvsp[-3].ValIDVal)); + (yyval.JumpTable)->push_back(std::make_pair(V, tmpBB)); + ;} + break; + + case 261: +#line 2634 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + (yyval.JumpTable) = new std::vector >(); + Constant *V = cast(getExistingVal((yyvsp[(1) - (5)].PrimType), (yyvsp[(2) - (5)].ValIDVal))); CHECK_FOR_ERROR if (V == 0) GEN_ERROR("May only switch on a constant pool value"); - BasicBlock* tmpBB = getBBVal(yyvsp[0].ValIDVal); + BasicBlock* tmpBB = getBBVal((yyvsp[(5) - (5)].ValIDVal)); CHECK_FOR_ERROR - yyval.JumpTable->push_back(std::make_pair(V, tmpBB)); - ; - break;} -case 255: -#line 2609 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + (yyval.JumpTable)->push_back(std::make_pair(V, tmpBB)); + ;} + break; + + case 262: +#line 2647 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { // Is this definition named?? if so, assign the name... - setValueName(yyvsp[0].InstVal, yyvsp[-1].StrVal); + setValueName((yyvsp[(2) - (2)].InstVal), (yyvsp[(1) - (2)].StrVal)); CHECK_FOR_ERROR - InsertValue(yyvsp[0].InstVal); - yyval.InstVal = yyvsp[0].InstVal; + InsertValue((yyvsp[(2) - (2)].InstVal)); + (yyval.InstVal) = (yyvsp[(2) - (2)].InstVal); CHECK_FOR_ERROR - ; - break;} -case 256: -#line 2619 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ // Used for PHI nodes + ;} + break; + + case 263: +#line 2657 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { // Used for PHI nodes if (!UpRefs.empty()) - GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-5].TypeVal)->getDescription()); - yyval.PHIList = new std::list >(); - Value* tmpVal = getVal(*yyvsp[-5].TypeVal, yyvsp[-3].ValIDVal); - CHECK_FOR_ERROR - BasicBlock* tmpBB = getBBVal(yyvsp[-1].ValIDVal); - CHECK_FOR_ERROR - yyval.PHIList->push_back(std::make_pair(tmpVal, tmpBB)); - delete yyvsp[-5].TypeVal; - ; - break;} -case 257: -#line 2630 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - yyval.PHIList = yyvsp[-6].PHIList; - Value* tmpVal = getVal(yyvsp[-6].PHIList->front().first->getType(), yyvsp[-3].ValIDVal); + GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (6)].TypeVal))->getDescription()); + (yyval.PHIList) = new std::list >(); + Value* tmpVal = getVal(*(yyvsp[(1) - (6)].TypeVal), (yyvsp[(3) - (6)].ValIDVal)); + CHECK_FOR_ERROR + BasicBlock* tmpBB = getBBVal((yyvsp[(5) - (6)].ValIDVal)); + CHECK_FOR_ERROR + (yyval.PHIList)->push_back(std::make_pair(tmpVal, tmpBB)); + delete (yyvsp[(1) - (6)].TypeVal); + ;} + break; + + case 264: +#line 2668 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + (yyval.PHIList) = (yyvsp[(1) - (7)].PHIList); + Value* tmpVal = getVal((yyvsp[(1) - (7)].PHIList)->front().first->getType(), (yyvsp[(4) - (7)].ValIDVal)); CHECK_FOR_ERROR - BasicBlock* tmpBB = getBBVal(yyvsp[-1].ValIDVal); + BasicBlock* tmpBB = getBBVal((yyvsp[(6) - (7)].ValIDVal)); CHECK_FOR_ERROR - yyvsp[-6].PHIList->push_back(std::make_pair(tmpVal, tmpBB)); - ; - break;} -case 258: -#line 2640 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + (yyvsp[(1) - (7)].PHIList)->push_back(std::make_pair(tmpVal, tmpBB)); + ;} + break; + + case 265: +#line 2678 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { if (!UpRefs.empty()) - GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription()); + GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (3)].TypeVal))->getDescription()); // Used for call and invoke instructions - yyval.ValueRefList = new ValueRefList(); - ValueRefListEntry E; E.Attrs = yyvsp[0].ParamAttrs; E.Val = getVal(yyvsp[-2].TypeVal->get(), yyvsp[-1].ValIDVal); - yyval.ValueRefList->push_back(E); - delete yyvsp[-2].TypeVal; - ; - break;} -case 259: -#line 2649 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + (yyval.ValueRefList) = new ValueRefList(); + ValueRefListEntry E; E.Attrs = (yyvsp[(3) - (3)].ParamAttrs); E.Val = getVal((yyvsp[(1) - (3)].TypeVal)->get(), (yyvsp[(2) - (3)].ValIDVal)); + (yyval.ValueRefList)->push_back(E); + delete (yyvsp[(1) - (3)].TypeVal); + ;} + break; + + case 266: +#line 2687 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { if (!UpRefs.empty()) - GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription()); - yyval.ValueRefList = yyvsp[-4].ValueRefList; - ValueRefListEntry E; E.Attrs = yyvsp[0].ParamAttrs; E.Val = getVal(yyvsp[-2].TypeVal->get(), yyvsp[-1].ValIDVal); - yyval.ValueRefList->push_back(E); - delete yyvsp[-2].TypeVal; - CHECK_FOR_ERROR - ; - break;} -case 260: -#line 2658 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.ValueRefList = new ValueRefList(); ; - break;} -case 261: -#line 2661 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.ValueList = new std::vector(); ; - break;} -case 262: -#line 2662 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - yyval.ValueList = yyvsp[-2].ValueList; - yyval.ValueList->push_back(yyvsp[0].ValueVal); + GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(3) - (5)].TypeVal))->getDescription()); + (yyval.ValueRefList) = (yyvsp[(1) - (5)].ValueRefList); + ValueRefListEntry E; E.Attrs = (yyvsp[(5) - (5)].ParamAttrs); E.Val = getVal((yyvsp[(3) - (5)].TypeVal)->get(), (yyvsp[(4) - (5)].ValIDVal)); + (yyval.ValueRefList)->push_back(E); + delete (yyvsp[(3) - (5)].TypeVal); CHECK_FOR_ERROR - ; - break;} -case 263: -#line 2669 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - yyval.BoolVal = true; + ;} + break; + + case 267: +#line 2696 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { (yyval.ValueRefList) = new ValueRefList(); ;} + break; + + case 268: +#line 2699 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { (yyval.ValueList) = new std::vector(); ;} + break; + + case 269: +#line 2700 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + (yyval.ValueList) = (yyvsp[(1) - (3)].ValueList); + (yyval.ValueList)->push_back((yyvsp[(3) - (3)].ValueVal)); CHECK_FOR_ERROR - ; - break;} -case 264: -#line 2673 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - yyval.BoolVal = false; + ;} + break; + + case 270: +#line 2707 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + (yyval.BoolVal) = true; CHECK_FOR_ERROR - ; - break;} -case 265: -#line 2678 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 271: +#line 2711 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + (yyval.BoolVal) = false; + CHECK_FOR_ERROR + ;} + break; + + case 272: +#line 2716 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { if (!UpRefs.empty()) - GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription()); - if (!(*yyvsp[-3].TypeVal)->isInteger() && !(*yyvsp[-3].TypeVal)->isFloatingPoint() && - !isa((*yyvsp[-3].TypeVal).get())) + GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(2) - (5)].TypeVal))->getDescription()); + if (!(*(yyvsp[(2) - (5)].TypeVal))->isInteger() && !(*(yyvsp[(2) - (5)].TypeVal))->isFloatingPoint() && + !isa((*(yyvsp[(2) - (5)].TypeVal)).get())) GEN_ERROR( "Arithmetic operator requires integer, FP, or packed operands"); - if (isa((*yyvsp[-3].TypeVal).get()) && - (yyvsp[-4].BinaryOpVal == Instruction::URem || - yyvsp[-4].BinaryOpVal == Instruction::SRem || - yyvsp[-4].BinaryOpVal == Instruction::FRem)) + if (isa((*(yyvsp[(2) - (5)].TypeVal)).get()) && + ((yyvsp[(1) - (5)].BinaryOpVal) == Instruction::URem || + (yyvsp[(1) - (5)].BinaryOpVal) == Instruction::SRem || + (yyvsp[(1) - (5)].BinaryOpVal) == Instruction::FRem)) GEN_ERROR("Remainder not supported on vector types"); - Value* val1 = getVal(*yyvsp[-3].TypeVal, yyvsp[-2].ValIDVal); + Value* val1 = getVal(*(yyvsp[(2) - (5)].TypeVal), (yyvsp[(3) - (5)].ValIDVal)); CHECK_FOR_ERROR - Value* val2 = getVal(*yyvsp[-3].TypeVal, yyvsp[0].ValIDVal); + Value* val2 = getVal(*(yyvsp[(2) - (5)].TypeVal), (yyvsp[(5) - (5)].ValIDVal)); CHECK_FOR_ERROR - yyval.InstVal = BinaryOperator::create(yyvsp[-4].BinaryOpVal, val1, val2); - if (yyval.InstVal == 0) + (yyval.InstVal) = BinaryOperator::create((yyvsp[(1) - (5)].BinaryOpVal), val1, val2); + if ((yyval.InstVal) == 0) GEN_ERROR("binary operator returned null"); - delete yyvsp[-3].TypeVal; - ; - break;} -case 266: -#line 2699 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + delete (yyvsp[(2) - (5)].TypeVal); + ;} + break; + + case 273: +#line 2737 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { if (!UpRefs.empty()) - GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription()); - if (!(*yyvsp[-3].TypeVal)->isInteger()) { - if (Instruction::isShift(yyvsp[-4].BinaryOpVal) || !isa(yyvsp[-3].TypeVal->get()) || - !cast(yyvsp[-3].TypeVal->get())->getElementType()->isInteger()) + GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(2) - (5)].TypeVal))->getDescription()); + if (!(*(yyvsp[(2) - (5)].TypeVal))->isInteger()) { + if (Instruction::isShift((yyvsp[(1) - (5)].BinaryOpVal)) || !isa((yyvsp[(2) - (5)].TypeVal)->get()) || + !cast((yyvsp[(2) - (5)].TypeVal)->get())->getElementType()->isInteger()) GEN_ERROR("Logical operator requires integral operands"); } - Value* tmpVal1 = getVal(*yyvsp[-3].TypeVal, yyvsp[-2].ValIDVal); + Value* tmpVal1 = getVal(*(yyvsp[(2) - (5)].TypeVal), (yyvsp[(3) - (5)].ValIDVal)); CHECK_FOR_ERROR - Value* tmpVal2 = getVal(*yyvsp[-3].TypeVal, yyvsp[0].ValIDVal); + Value* tmpVal2 = getVal(*(yyvsp[(2) - (5)].TypeVal), (yyvsp[(5) - (5)].ValIDVal)); CHECK_FOR_ERROR - yyval.InstVal = BinaryOperator::create(yyvsp[-4].BinaryOpVal, tmpVal1, tmpVal2); - if (yyval.InstVal == 0) + (yyval.InstVal) = BinaryOperator::create((yyvsp[(1) - (5)].BinaryOpVal), tmpVal1, tmpVal2); + if ((yyval.InstVal) == 0) GEN_ERROR("binary operator returned null"); - delete yyvsp[-3].TypeVal; - ; - break;} -case 267: -#line 2716 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + delete (yyvsp[(2) - (5)].TypeVal); + ;} + break; + + case 274: +#line 2754 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { if (!UpRefs.empty()) - GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription()); - if (isa((*yyvsp[-3].TypeVal).get())) + GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(3) - (6)].TypeVal))->getDescription()); + if (isa((*(yyvsp[(3) - (6)].TypeVal)).get())) GEN_ERROR("Vector types not supported by icmp instruction"); - Value* tmpVal1 = getVal(*yyvsp[-3].TypeVal, yyvsp[-2].ValIDVal); + Value* tmpVal1 = getVal(*(yyvsp[(3) - (6)].TypeVal), (yyvsp[(4) - (6)].ValIDVal)); CHECK_FOR_ERROR - Value* tmpVal2 = getVal(*yyvsp[-3].TypeVal, yyvsp[0].ValIDVal); + Value* tmpVal2 = getVal(*(yyvsp[(3) - (6)].TypeVal), (yyvsp[(6) - (6)].ValIDVal)); CHECK_FOR_ERROR - yyval.InstVal = CmpInst::create(yyvsp[-5].OtherOpVal, yyvsp[-4].IPredicate, tmpVal1, tmpVal2); - if (yyval.InstVal == 0) + (yyval.InstVal) = CmpInst::create((yyvsp[(1) - (6)].OtherOpVal), (yyvsp[(2) - (6)].IPredicate), tmpVal1, tmpVal2); + if ((yyval.InstVal) == 0) GEN_ERROR("icmp operator returned null"); - delete yyvsp[-3].TypeVal; - ; - break;} -case 268: -#line 2730 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + delete (yyvsp[(3) - (6)].TypeVal); + ;} + break; + + case 275: +#line 2768 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { if (!UpRefs.empty()) - GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription()); - if (isa((*yyvsp[-3].TypeVal).get())) + GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(3) - (6)].TypeVal))->getDescription()); + if (isa((*(yyvsp[(3) - (6)].TypeVal)).get())) GEN_ERROR("Vector types not supported by fcmp instruction"); - Value* tmpVal1 = getVal(*yyvsp[-3].TypeVal, yyvsp[-2].ValIDVal); + Value* tmpVal1 = getVal(*(yyvsp[(3) - (6)].TypeVal), (yyvsp[(4) - (6)].ValIDVal)); CHECK_FOR_ERROR - Value* tmpVal2 = getVal(*yyvsp[-3].TypeVal, yyvsp[0].ValIDVal); + Value* tmpVal2 = getVal(*(yyvsp[(3) - (6)].TypeVal), (yyvsp[(6) - (6)].ValIDVal)); CHECK_FOR_ERROR - yyval.InstVal = CmpInst::create(yyvsp[-5].OtherOpVal, yyvsp[-4].FPredicate, tmpVal1, tmpVal2); - if (yyval.InstVal == 0) + (yyval.InstVal) = CmpInst::create((yyvsp[(1) - (6)].OtherOpVal), (yyvsp[(2) - (6)].FPredicate), tmpVal1, tmpVal2); + if ((yyval.InstVal) == 0) GEN_ERROR("fcmp operator returned null"); - delete yyvsp[-3].TypeVal; - ; - break;} -case 269: -#line 2744 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + delete (yyvsp[(3) - (6)].TypeVal); + ;} + break; + + case 276: +#line 2782 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { if (!UpRefs.empty()) - GEN_ERROR("Invalid upreference in type: " + (*yyvsp[0].TypeVal)->getDescription()); - Value* Val = yyvsp[-2].ValueVal; - const Type* DestTy = yyvsp[0].TypeVal->get(); - if (!CastInst::castIsValid(yyvsp[-3].CastOpVal, Val, DestTy)) + GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(4) - (4)].TypeVal))->getDescription()); + Value* Val = (yyvsp[(2) - (4)].ValueVal); + const Type* DestTy = (yyvsp[(4) - (4)].TypeVal)->get(); + if (!CastInst::castIsValid((yyvsp[(1) - (4)].CastOpVal), Val, DestTy)) GEN_ERROR("invalid cast opcode for cast from '" + Val->getType()->getDescription() + "' to '" + DestTy->getDescription() + "'"); - yyval.InstVal = CastInst::create(yyvsp[-3].CastOpVal, Val, DestTy); - delete yyvsp[0].TypeVal; - ; - break;} -case 270: -#line 2756 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - if (yyvsp[-4].ValueVal->getType() != Type::Int1Ty) + (yyval.InstVal) = CastInst::create((yyvsp[(1) - (4)].CastOpVal), Val, DestTy); + delete (yyvsp[(4) - (4)].TypeVal); + ;} + break; + + case 277: +#line 2794 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + if ((yyvsp[(2) - (6)].ValueVal)->getType() != Type::Int1Ty) GEN_ERROR("select condition must be boolean"); - if (yyvsp[-2].ValueVal->getType() != yyvsp[0].ValueVal->getType()) + if ((yyvsp[(4) - (6)].ValueVal)->getType() != (yyvsp[(6) - (6)].ValueVal)->getType()) GEN_ERROR("select value types should match"); - yyval.InstVal = new SelectInst(yyvsp[-4].ValueVal, yyvsp[-2].ValueVal, yyvsp[0].ValueVal); + (yyval.InstVal) = new SelectInst((yyvsp[(2) - (6)].ValueVal), (yyvsp[(4) - (6)].ValueVal), (yyvsp[(6) - (6)].ValueVal)); CHECK_FOR_ERROR - ; - break;} -case 271: -#line 2764 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 278: +#line 2802 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { if (!UpRefs.empty()) - GEN_ERROR("Invalid upreference in type: " + (*yyvsp[0].TypeVal)->getDescription()); - yyval.InstVal = new VAArgInst(yyvsp[-2].ValueVal, *yyvsp[0].TypeVal); - delete yyvsp[0].TypeVal; - CHECK_FOR_ERROR - ; - break;} -case 272: -#line 2771 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - if (!ExtractElementInst::isValidOperands(yyvsp[-2].ValueVal, yyvsp[0].ValueVal)) + GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(4) - (4)].TypeVal))->getDescription()); + (yyval.InstVal) = new VAArgInst((yyvsp[(2) - (4)].ValueVal), *(yyvsp[(4) - (4)].TypeVal)); + delete (yyvsp[(4) - (4)].TypeVal); + CHECK_FOR_ERROR + ;} + break; + + case 279: +#line 2809 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + if (!ExtractElementInst::isValidOperands((yyvsp[(2) - (4)].ValueVal), (yyvsp[(4) - (4)].ValueVal))) GEN_ERROR("Invalid extractelement operands"); - yyval.InstVal = new ExtractElementInst(yyvsp[-2].ValueVal, yyvsp[0].ValueVal); + (yyval.InstVal) = new ExtractElementInst((yyvsp[(2) - (4)].ValueVal), (yyvsp[(4) - (4)].ValueVal)); CHECK_FOR_ERROR - ; - break;} -case 273: -#line 2777 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - if (!InsertElementInst::isValidOperands(yyvsp[-4].ValueVal, yyvsp[-2].ValueVal, yyvsp[0].ValueVal)) + ;} + break; + + case 280: +#line 2815 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + if (!InsertElementInst::isValidOperands((yyvsp[(2) - (6)].ValueVal), (yyvsp[(4) - (6)].ValueVal), (yyvsp[(6) - (6)].ValueVal))) GEN_ERROR("Invalid insertelement operands"); - yyval.InstVal = new InsertElementInst(yyvsp[-4].ValueVal, yyvsp[-2].ValueVal, yyvsp[0].ValueVal); + (yyval.InstVal) = new InsertElementInst((yyvsp[(2) - (6)].ValueVal), (yyvsp[(4) - (6)].ValueVal), (yyvsp[(6) - (6)].ValueVal)); CHECK_FOR_ERROR - ; - break;} -case 274: -#line 2783 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - if (!ShuffleVectorInst::isValidOperands(yyvsp[-4].ValueVal, yyvsp[-2].ValueVal, yyvsp[0].ValueVal)) + ;} + break; + + case 281: +#line 2821 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + if (!ShuffleVectorInst::isValidOperands((yyvsp[(2) - (6)].ValueVal), (yyvsp[(4) - (6)].ValueVal), (yyvsp[(6) - (6)].ValueVal))) GEN_ERROR("Invalid shufflevector operands"); - yyval.InstVal = new ShuffleVectorInst(yyvsp[-4].ValueVal, yyvsp[-2].ValueVal, yyvsp[0].ValueVal); + (yyval.InstVal) = new ShuffleVectorInst((yyvsp[(2) - (6)].ValueVal), (yyvsp[(4) - (6)].ValueVal), (yyvsp[(6) - (6)].ValueVal)); CHECK_FOR_ERROR - ; - break;} -case 275: -#line 2789 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - const Type *Ty = yyvsp[0].PHIList->front().first->getType(); + ;} + break; + + case 282: +#line 2827 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + const Type *Ty = (yyvsp[(2) - (2)].PHIList)->front().first->getType(); if (!Ty->isFirstClassType()) GEN_ERROR("PHI node operands must be of first class type"); - yyval.InstVal = new PHINode(Ty); - ((PHINode*)yyval.InstVal)->reserveOperandSpace(yyvsp[0].PHIList->size()); - while (yyvsp[0].PHIList->begin() != yyvsp[0].PHIList->end()) { - if (yyvsp[0].PHIList->front().first->getType() != Ty) + (yyval.InstVal) = new PHINode(Ty); + ((PHINode*)(yyval.InstVal))->reserveOperandSpace((yyvsp[(2) - (2)].PHIList)->size()); + while ((yyvsp[(2) - (2)].PHIList)->begin() != (yyvsp[(2) - (2)].PHIList)->end()) { + if ((yyvsp[(2) - (2)].PHIList)->front().first->getType() != Ty) GEN_ERROR("All elements of a PHI node must be of the same type"); - cast(yyval.InstVal)->addIncoming(yyvsp[0].PHIList->front().first, yyvsp[0].PHIList->front().second); - yyvsp[0].PHIList->pop_front(); + cast((yyval.InstVal))->addIncoming((yyvsp[(2) - (2)].PHIList)->front().first, (yyvsp[(2) - (2)].PHIList)->front().second); + (yyvsp[(2) - (2)].PHIList)->pop_front(); } - delete yyvsp[0].PHIList; // Free the list... + delete (yyvsp[(2) - (2)].PHIList); // Free the list... CHECK_FOR_ERROR - ; - break;} -case 276: -#line 2805 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 283: +#line 2843 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { // Handle the short syntax const PointerType *PFTy = 0; const FunctionType *Ty = 0; - if (!(PFTy = dyn_cast(yyvsp[-5].TypeVal->get())) || + if (!(PFTy = dyn_cast((yyvsp[(3) - (8)].TypeVal)->get())) || !(Ty = dyn_cast(PFTy->getElementType()))) { // Pull out the types of all of the arguments... std::vector ParamTypes; ParamAttrsVector Attrs; - if (yyvsp[0].ParamAttrs != ParamAttr::None) { - ParamAttrsWithIndex PAWI; PAWI.index = 0; PAWI.attrs = yyvsp[0].ParamAttrs; + if ((yyvsp[(8) - (8)].ParamAttrs) != ParamAttr::None) { + ParamAttrsWithIndex PAWI; PAWI.index = 0; PAWI.attrs = (yyvsp[(8) - (8)].ParamAttrs); Attrs.push_back(PAWI); } unsigned index = 1; - ValueRefList::iterator I = yyvsp[-2].ValueRefList->begin(), E = yyvsp[-2].ValueRefList->end(); + ValueRefList::iterator I = (yyvsp[(6) - (8)].ValueRefList)->begin(), E = (yyvsp[(6) - (8)].ValueRefList)->end(); for (; I != E; ++I, ++index) { const Type *Ty = I->Val->getType(); if (Ty == Type::VoidTy) @@ -4680,13 +5814,13 @@ if (!Attrs.empty()) PAL = ParamAttrsList::get(Attrs); - Ty = FunctionType::get(yyvsp[-5].TypeVal->get(), ParamTypes, false, PAL); + Ty = FunctionType::get((yyvsp[(3) - (8)].TypeVal)->get(), ParamTypes, false, PAL); PFTy = PointerType::get(Ty); } - - Value *V = getVal(PFTy, yyvsp[-4].ValIDVal); // Get the function we're calling... + + Value *V = getVal(PFTy, (yyvsp[(4) - (8)].ValIDVal)); // Get the function we're calling... CHECK_FOR_ERROR - + // Check for call to invalid intrinsic to avoid crashing later. if (Function *theF = dyn_cast(V)) { if (theF->hasName() && (theF->getValueName()->getKeyLength() >= 5) && @@ -4698,7 +5832,7 @@ // Check the arguments ValueList Args; - if (yyvsp[-2].ValueRefList->empty()) { // Has no arguments? + if ((yyvsp[(6) - (8)].ValueRefList)->empty()) { // Has no arguments? // Make sure no arguments is a good thing! if (Ty->getNumParams() != 0) GEN_ERROR("No arguments passed to a function that " @@ -4709,7 +5843,7 @@ // FunctionType::param_iterator I = Ty->param_begin(); FunctionType::param_iterator E = Ty->param_end(); - ValueRefList::iterator ArgI = yyvsp[-2].ValueRefList->begin(), ArgE = yyvsp[-2].ValueRefList->end(); + ValueRefList::iterator ArgI = (yyvsp[(6) - (8)].ValueRefList)->begin(), ArgE = (yyvsp[(6) - (8)].ValueRefList)->end(); for (; ArgI != ArgE && I != E; ++ArgI, ++I) { if (ArgI->Val->getType() != *I) @@ -4726,365 +5860,371 @@ } // Create the call node CallInst *CI = new CallInst(V, &Args[0], Args.size()); - CI->setTailCall(yyvsp[-7].BoolVal); - CI->setCallingConv(yyvsp[-6].UIntVal); - yyval.InstVal = CI; - delete yyvsp[-2].ValueRefList; - delete yyvsp[-5].TypeVal; - CHECK_FOR_ERROR - ; - break;} -case 277: -#line 2889 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - yyval.InstVal = yyvsp[0].InstVal; + CI->setTailCall((yyvsp[(1) - (8)].BoolVal)); + CI->setCallingConv((yyvsp[(2) - (8)].UIntVal)); + (yyval.InstVal) = CI; + delete (yyvsp[(6) - (8)].ValueRefList); + delete (yyvsp[(3) - (8)].TypeVal); CHECK_FOR_ERROR - ; - break;} -case 278: -#line 2894 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - yyval.BoolVal = true; + ;} + break; + + case 284: +#line 2927 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + (yyval.InstVal) = (yyvsp[(1) - (1)].InstVal); CHECK_FOR_ERROR - ; - break;} -case 279: -#line 2898 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - yyval.BoolVal = false; + ;} + break; + + case 285: +#line 2932 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + (yyval.BoolVal) = true; CHECK_FOR_ERROR - ; - break;} -case 280: -#line 2905 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 286: +#line 2936 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + (yyval.BoolVal) = false; + CHECK_FOR_ERROR + ;} + break; + + case 287: +#line 2943 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { if (!UpRefs.empty()) - GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription()); - yyval.InstVal = new MallocInst(*yyvsp[-1].TypeVal, 0, yyvsp[0].UIntVal); - delete yyvsp[-1].TypeVal; - CHECK_FOR_ERROR - ; - break;} -case 281: -#line 2912 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(2) - (3)].TypeVal))->getDescription()); + (yyval.InstVal) = new MallocInst(*(yyvsp[(2) - (3)].TypeVal), 0, (yyvsp[(3) - (3)].UIntVal)); + delete (yyvsp[(2) - (3)].TypeVal); + CHECK_FOR_ERROR + ;} + break; + + case 288: +#line 2950 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { if (!UpRefs.empty()) - GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-4].TypeVal)->getDescription()); - Value* tmpVal = getVal(yyvsp[-2].PrimType, yyvsp[-1].ValIDVal); + GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(2) - (6)].TypeVal))->getDescription()); + Value* tmpVal = getVal((yyvsp[(4) - (6)].PrimType), (yyvsp[(5) - (6)].ValIDVal)); CHECK_FOR_ERROR - yyval.InstVal = new MallocInst(*yyvsp[-4].TypeVal, tmpVal, yyvsp[0].UIntVal); - delete yyvsp[-4].TypeVal; - ; - break;} -case 282: -#line 2920 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + (yyval.InstVal) = new MallocInst(*(yyvsp[(2) - (6)].TypeVal), tmpVal, (yyvsp[(6) - (6)].UIntVal)); + delete (yyvsp[(2) - (6)].TypeVal); + ;} + break; + + case 289: +#line 2958 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { if (!UpRefs.empty()) - GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription()); - yyval.InstVal = new AllocaInst(*yyvsp[-1].TypeVal, 0, yyvsp[0].UIntVal); - delete yyvsp[-1].TypeVal; - CHECK_FOR_ERROR - ; - break;} -case 283: -#line 2927 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(2) - (3)].TypeVal))->getDescription()); + (yyval.InstVal) = new AllocaInst(*(yyvsp[(2) - (3)].TypeVal), 0, (yyvsp[(3) - (3)].UIntVal)); + delete (yyvsp[(2) - (3)].TypeVal); + CHECK_FOR_ERROR + ;} + break; + + case 290: +#line 2965 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { if (!UpRefs.empty()) - GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-4].TypeVal)->getDescription()); - Value* tmpVal = getVal(yyvsp[-2].PrimType, yyvsp[-1].ValIDVal); + GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(2) - (6)].TypeVal))->getDescription()); + Value* tmpVal = getVal((yyvsp[(4) - (6)].PrimType), (yyvsp[(5) - (6)].ValIDVal)); CHECK_FOR_ERROR - yyval.InstVal = new AllocaInst(*yyvsp[-4].TypeVal, tmpVal, yyvsp[0].UIntVal); - delete yyvsp[-4].TypeVal; - ; - break;} -case 284: -#line 2935 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - if (!isa(yyvsp[0].ValueVal->getType())) + (yyval.InstVal) = new AllocaInst(*(yyvsp[(2) - (6)].TypeVal), tmpVal, (yyvsp[(6) - (6)].UIntVal)); + delete (yyvsp[(2) - (6)].TypeVal); + ;} + break; + + case 291: +#line 2973 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { + if (!isa((yyvsp[(2) - (2)].ValueVal)->getType())) GEN_ERROR("Trying to free nonpointer type " + - yyvsp[0].ValueVal->getType()->getDescription() + ""); - yyval.InstVal = new FreeInst(yyvsp[0].ValueVal); + (yyvsp[(2) - (2)].ValueVal)->getType()->getDescription() + ""); + (yyval.InstVal) = new FreeInst((yyvsp[(2) - (2)].ValueVal)); CHECK_FOR_ERROR - ; - break;} -case 285: -#line 2943 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 292: +#line 2981 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { if (!UpRefs.empty()) - GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription()); - if (!isa(yyvsp[-2].TypeVal->get())) + GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(3) - (5)].TypeVal))->getDescription()); + if (!isa((yyvsp[(3) - (5)].TypeVal)->get())) GEN_ERROR("Can't load from nonpointer type: " + - (*yyvsp[-2].TypeVal)->getDescription()); - if (!cast(yyvsp[-2].TypeVal->get())->getElementType()->isFirstClassType()) + (*(yyvsp[(3) - (5)].TypeVal))->getDescription()); + if (!cast((yyvsp[(3) - (5)].TypeVal)->get())->getElementType()->isFirstClassType()) GEN_ERROR("Can't load from pointer of non-first-class type: " + - (*yyvsp[-2].TypeVal)->getDescription()); - Value* tmpVal = getVal(*yyvsp[-2].TypeVal, yyvsp[-1].ValIDVal); + (*(yyvsp[(3) - (5)].TypeVal))->getDescription()); + Value* tmpVal = getVal(*(yyvsp[(3) - (5)].TypeVal), (yyvsp[(4) - (5)].ValIDVal)); CHECK_FOR_ERROR - yyval.InstVal = new LoadInst(tmpVal, "", yyvsp[-4].BoolVal, yyvsp[0].UIntVal); - delete yyvsp[-2].TypeVal; - ; - break;} -case 286: -#line 2957 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + (yyval.InstVal) = new LoadInst(tmpVal, "", (yyvsp[(1) - (5)].BoolVal), (yyvsp[(5) - (5)].UIntVal)); + delete (yyvsp[(3) - (5)].TypeVal); + ;} + break; + + case 293: +#line 2995 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { if (!UpRefs.empty()) - GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription()); - const PointerType *PT = dyn_cast(yyvsp[-2].TypeVal->get()); + GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(5) - (7)].TypeVal))->getDescription()); + const PointerType *PT = dyn_cast((yyvsp[(5) - (7)].TypeVal)->get()); if (!PT) GEN_ERROR("Can't store to a nonpointer type: " + - (*yyvsp[-2].TypeVal)->getDescription()); + (*(yyvsp[(5) - (7)].TypeVal))->getDescription()); const Type *ElTy = PT->getElementType(); - if (ElTy != yyvsp[-4].ValueVal->getType()) - GEN_ERROR("Can't store '" + yyvsp[-4].ValueVal->getType()->getDescription() + + if (ElTy != (yyvsp[(3) - (7)].ValueVal)->getType()) + GEN_ERROR("Can't store '" + (yyvsp[(3) - (7)].ValueVal)->getType()->getDescription() + "' into space of type '" + ElTy->getDescription() + "'"); - Value* tmpVal = getVal(*yyvsp[-2].TypeVal, yyvsp[-1].ValIDVal); + Value* tmpVal = getVal(*(yyvsp[(5) - (7)].TypeVal), (yyvsp[(6) - (7)].ValIDVal)); CHECK_FOR_ERROR - yyval.InstVal = new StoreInst(yyvsp[-4].ValueVal, tmpVal, yyvsp[-6].BoolVal, yyvsp[0].UIntVal); - delete yyvsp[-2].TypeVal; - ; - break;} -case 287: -#line 2974 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + (yyval.InstVal) = new StoreInst((yyvsp[(3) - (7)].ValueVal), tmpVal, (yyvsp[(1) - (7)].BoolVal), (yyvsp[(7) - (7)].UIntVal)); + delete (yyvsp[(5) - (7)].TypeVal); + ;} + break; + + case 294: +#line 3012 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" + { if (!UpRefs.empty()) - GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription()); - if (!isa(yyvsp[-2].TypeVal->get())) + GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(2) - (4)].TypeVal))->getDescription()); + if (!isa((yyvsp[(2) - (4)].TypeVal)->get())) GEN_ERROR("getelementptr insn requires pointer operand"); - if (!GetElementPtrInst::getIndexedType(*yyvsp[-2].TypeVal, &(*yyvsp[0].ValueList)[0], yyvsp[0].ValueList->size(), true)) + if (!GetElementPtrInst::getIndexedType(*(yyvsp[(2) - (4)].TypeVal), &(*(yyvsp[(4) - (4)].ValueList))[0], (yyvsp[(4) - (4)].ValueList)->size(), true)) GEN_ERROR("Invalid getelementptr indices for type '" + - (*yyvsp[-2].TypeVal)->getDescription()+ "'"); - Value* tmpVal = getVal(*yyvsp[-2].TypeVal, yyvsp[-1].ValIDVal); + (*(yyvsp[(2) - (4)].TypeVal))->getDescription()+ "'"); + Value* tmpVal = getVal(*(yyvsp[(2) - (4)].TypeVal), (yyvsp[(3) - (4)].ValIDVal)); CHECK_FOR_ERROR - yyval.InstVal = new GetElementPtrInst(tmpVal, &(*yyvsp[0].ValueList)[0], yyvsp[0].ValueList->size()); - delete yyvsp[-2].TypeVal; - delete yyvsp[0].ValueList; - ; - break;} -} - /* the action file gets copied in in place of this dollarsign */ -#line 543 "/usr/share/bison.simple" - - yyvsp -= yylen; - yyssp -= yylen; -#ifdef YYLSP_NEEDED - yylsp -= yylen; -#endif + (yyval.InstVal) = new GetElementPtrInst(tmpVal, &(*(yyvsp[(4) - (4)].ValueList))[0], (yyvsp[(4) - (4)].ValueList)->size()); + delete (yyvsp[(2) - (4)].TypeVal); + delete (yyvsp[(4) - (4)].ValueList); + ;} + break; -#if YYDEBUG != 0 - if (yydebug) - { - short *ssp1 = yyss - 1; - fprintf (stderr, "state stack now"); - while (ssp1 != yyssp) - fprintf (stderr, " %d", *++ssp1); - fprintf (stderr, "\n"); - } -#endif + +/* Line 1267 of yacc.c. */ +#line 6014 "llvmAsmParser.tab.c" + default: break; + } + YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); + + YYPOPSTACK (yylen); + yylen = 0; + YY_STACK_PRINT (yyss, yyssp); *++yyvsp = yyval; -#ifdef YYLSP_NEEDED - yylsp++; - if (yylen == 0) - { - yylsp->first_line = yylloc.first_line; - yylsp->first_column = yylloc.first_column; - yylsp->last_line = (yylsp-1)->last_line; - yylsp->last_column = (yylsp-1)->last_column; - yylsp->text = 0; - } - else - { - yylsp->last_line = (yylsp+yylen-1)->last_line; - yylsp->last_column = (yylsp+yylen-1)->last_column; - } -#endif - /* Now "shift" the result of the reduction. - Determine what state that goes to, - based on the state we popped back to - and the rule number reduced by. */ + /* Now `shift' the result of the reduction. Determine what state + that goes to, based on the state we popped back to and the rule + number reduced by. */ yyn = yyr1[yyn]; - yystate = yypgoto[yyn - YYNTBASE] + *yyssp; - if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp) + yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; + if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) yystate = yytable[yystate]; else - yystate = yydefgoto[yyn - YYNTBASE]; + yystate = yydefgoto[yyn - YYNTOKENS]; goto yynewstate; -yyerrlab: /* here on detecting error */ - if (! yyerrstatus) - /* If not already recovering from an error, report this error. */ +/*------------------------------------. +| yyerrlab -- here on detecting error | +`------------------------------------*/ +yyerrlab: + /* If not already recovering from an error, report this error. */ + if (!yyerrstatus) { ++yynerrs; - -#ifdef YYERROR_VERBOSE - yyn = yypact[yystate]; - - if (yyn > YYFLAG && yyn < YYLAST) - { - int size = 0; - char *msg; - int x, count; - - count = 0; - /* Start X at -yyn if nec to avoid negative indexes in yycheck. */ - for (x = (yyn < 0 ? -yyn : 0); - x < (sizeof(yytname) / sizeof(char *)); x++) - if (yycheck[x + yyn] == x) - size += strlen(yytname[x]) + 15, count++; - msg = (char *) malloc(size + 15); - if (msg != 0) - { - strcpy(msg, "parse error"); - - if (count < 5) - { - count = 0; - for (x = (yyn < 0 ? -yyn : 0); - x < (sizeof(yytname) / sizeof(char *)); x++) - if (yycheck[x + yyn] == x) - { - strcat(msg, count == 0 ? ", expecting `" : " or `"); - strcat(msg, yytname[x]); - strcat(msg, "'"); - count++; - } - } - yyerror(msg); - free(msg); - } - else - yyerror ("parse error; also virtual memory exceeded"); - } - else -#endif /* YYERROR_VERBOSE */ - yyerror("parse error"); +#if ! YYERROR_VERBOSE + yyerror (YY_("syntax error")); +#else + { + YYSIZE_T yysize = yysyntax_error (0, yystate, yychar); + if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM) + { + YYSIZE_T yyalloc = 2 * yysize; + if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM)) + yyalloc = YYSTACK_ALLOC_MAXIMUM; + if (yymsg != yymsgbuf) + YYSTACK_FREE (yymsg); + yymsg = (char *) YYSTACK_ALLOC (yyalloc); + if (yymsg) + yymsg_alloc = yyalloc; + else + { + yymsg = yymsgbuf; + yymsg_alloc = sizeof yymsgbuf; + } + } + + if (0 < yysize && yysize <= yymsg_alloc) + { + (void) yysyntax_error (yymsg, yystate, yychar); + yyerror (yymsg); + } + else + { + yyerror (YY_("syntax error")); + if (yysize != 0) + goto yyexhaustedlab; + } + } +#endif } - goto yyerrlab1; -yyerrlab1: /* here on error raised explicitly by an action */ + if (yyerrstatus == 3) { - /* if just tried and failed to reuse lookahead token after an error, discard it. */ - - /* return failure if at end of input */ - if (yychar == YYEOF) - YYABORT; + /* If just tried and failed to reuse look-ahead token after an + error, discard it. */ -#if YYDEBUG != 0 - if (yydebug) - fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]); -#endif - - yychar = YYEMPTY; + if (yychar <= YYEOF) + { + /* Return failure if at end of input. */ + if (yychar == YYEOF) + YYABORT; + } + else + { + yydestruct ("Error: discarding", + yytoken, &yylval); + yychar = YYEMPTY; + } } - /* Else will try to reuse lookahead token - after shifting the error token. */ - - yyerrstatus = 3; /* Each real token shifted decrements this */ - - goto yyerrhandle; + /* Else will try to reuse look-ahead token after shifting the error + token. */ + goto yyerrlab1; -yyerrdefault: /* current state does not do anything special for the error token. */ -#if 0 - /* This is wrong; only states that explicitly want error tokens - should shift them. */ - yyn = yydefact[yystate]; /* If its default is to accept any token, ok. Otherwise pop it.*/ - if (yyn) goto yydefault; -#endif +/*---------------------------------------------------. +| yyerrorlab -- error raised explicitly by YYERROR. | +`---------------------------------------------------*/ +yyerrorlab: + + /* Pacify compilers like GCC when the user code never invokes + YYERROR and the label yyerrorlab therefore never appears in user + code. */ + if (/*CONSTCOND*/ 0) + goto yyerrorlab; + + /* Do not reclaim the symbols of the rule which action triggered + this YYERROR. */ + YYPOPSTACK (yylen); + yylen = 0; + YY_STACK_PRINT (yyss, yyssp); + yystate = *yyssp; + goto yyerrlab1; -yyerrpop: /* pop the current state because it cannot handle the error token */ - if (yyssp == yyss) YYABORT; - yyvsp--; - yystate = *--yyssp; -#ifdef YYLSP_NEEDED - yylsp--; -#endif +/*-------------------------------------------------------------. +| yyerrlab1 -- common code for both syntax error and YYERROR. | +`-------------------------------------------------------------*/ +yyerrlab1: + yyerrstatus = 3; /* Each real token shifted decrements this. */ -#if YYDEBUG != 0 - if (yydebug) + for (;;) { - short *ssp1 = yyss - 1; - fprintf (stderr, "Error: state stack now"); - while (ssp1 != yyssp) - fprintf (stderr, " %d", *++ssp1); - fprintf (stderr, "\n"); - } -#endif - -yyerrhandle: + yyn = yypact[yystate]; + if (yyn != YYPACT_NINF) + { + yyn += YYTERROR; + if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) + { + yyn = yytable[yyn]; + if (0 < yyn) + break; + } + } - yyn = yypact[yystate]; - if (yyn == YYFLAG) - goto yyerrdefault; + /* Pop the current state because it cannot handle the error token. */ + if (yyssp == yyss) + YYABORT; - yyn += YYTERROR; - if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR) - goto yyerrdefault; - yyn = yytable[yyn]; - if (yyn < 0) - { - if (yyn == YYFLAG) - goto yyerrpop; - yyn = -yyn; - goto yyreduce; + yydestruct ("Error: popping", + yystos[yystate], yyvsp); + YYPOPSTACK (1); + yystate = *yyssp; + YY_STACK_PRINT (yyss, yyssp); } - else if (yyn == 0) - goto yyerrpop; if (yyn == YYFINAL) YYACCEPT; -#if YYDEBUG != 0 - if (yydebug) - fprintf(stderr, "Shifting error token, "); -#endif - *++yyvsp = yylval; -#ifdef YYLSP_NEEDED - *++yylsp = yylloc; -#endif + + + /* Shift the error token. */ + YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); yystate = yyn; goto yynewstate; - yyacceptlab: - /* YYACCEPT comes here. */ - if (yyfree_stacks) - { - free (yyss); - free (yyvs); -#ifdef YYLSP_NEEDED - free (yyls); -#endif - } - return 0; - yyabortlab: - /* YYABORT comes here. */ - if (yyfree_stacks) +/*-------------------------------------. +| yyacceptlab -- YYACCEPT comes here. | +`-------------------------------------*/ +yyacceptlab: + yyresult = 0; + goto yyreturn; + +/*-----------------------------------. +| yyabortlab -- YYABORT comes here. | +`-----------------------------------*/ +yyabortlab: + yyresult = 1; + goto yyreturn; + +#ifndef yyoverflow +/*-------------------------------------------------. +| yyexhaustedlab -- memory exhaustion comes here. | +`-------------------------------------------------*/ +yyexhaustedlab: + yyerror (YY_("memory exhausted")); + yyresult = 2; + /* Fall through. */ +#endif + +yyreturn: + if (yychar != YYEOF && yychar != YYEMPTY) + yydestruct ("Cleanup: discarding lookahead", + yytoken, &yylval); + /* Do not reclaim the symbols of the rule which action triggered + this YYABORT or YYACCEPT. */ + YYPOPSTACK (yylen); + YY_STACK_PRINT (yyss, yyssp); + while (yyssp != yyss) { - free (yyss); - free (yyvs); -#ifdef YYLSP_NEEDED - free (yyls); + yydestruct ("Cleanup: popping", + yystos[*yyssp], yyvsp); + YYPOPSTACK (1); + } +#ifndef yyoverflow + if (yyss != yyssa) + YYSTACK_FREE (yyss); +#endif +#if YYERROR_VERBOSE + if (yymsg != yymsgbuf) + YYSTACK_FREE (yymsg); #endif - } - return 1; + /* Make sure YYID is used. */ + return YYID (yyresult); } -#line 2991 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y" + + +#line 3029 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" // common code from the two 'RunVMAsmParser' functions @@ -5165,3 +6305,4 @@ GenerateError(errMsg); return 0; } + Index: llvm/lib/AsmParser/llvmAsmParser.h.cvs diff -u llvm/lib/AsmParser/llvmAsmParser.h.cvs:1.69 llvm/lib/AsmParser/llvmAsmParser.h.cvs:1.70 --- llvm/lib/AsmParser/llvmAsmParser.h.cvs:1.69 Sun Apr 22 15:09:11 2007 +++ llvm/lib/AsmParser/llvmAsmParser.h.cvs Wed Apr 25 09:29:12 2007 @@ -1,4 +1,321 @@ -typedef union { +/* A Bison parser, made by GNU Bison 2.3. */ + +/* Skeleton interface for Bison's Yacc-like parsers in C + + Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 + Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. */ + +/* As a special exception, you may create a larger work that contains + part or all of the Bison parser skeleton and distribute that work + under terms of your choice, so long as that work isn't itself a + parser generator using the skeleton or a modified version thereof + as a parser skeleton. Alternatively, if you modify or redistribute + the parser skeleton itself, you may (at your option) remove this + special exception, which will cause the skeleton and the resulting + Bison output files to be licensed under the GNU General Public + License without this special exception. + + This special exception was added by the Free Software Foundation in + version 2.2 of Bison. */ + +/* Tokens. */ +#ifndef YYTOKENTYPE +# define YYTOKENTYPE + /* Put the tokens into the symbol table, so that GDB and other debuggers + know about them. */ + enum yytokentype { + ESINT64VAL = 258, + EUINT64VAL = 259, + ESAPINTVAL = 260, + EUAPINTVAL = 261, + LOCALVAL_ID = 262, + GLOBALVAL_ID = 263, + FPVAL = 264, + VOID = 265, + INTTYPE = 266, + FLOAT = 267, + DOUBLE = 268, + LABEL = 269, + TYPE = 270, + LOCALVAR = 271, + GLOBALVAR = 272, + LABELSTR = 273, + STRINGCONSTANT = 274, + ATSTRINGCONSTANT = 275, + ZEROINITIALIZER = 276, + TRUETOK = 277, + FALSETOK = 278, + BEGINTOK = 279, + ENDTOK = 280, + DECLARE = 281, + DEFINE = 282, + GLOBAL = 283, + CONSTANT = 284, + SECTION = 285, + ALIAS = 286, + VOLATILE = 287, + THREAD_LOCAL = 288, + TO = 289, + DOTDOTDOT = 290, + NULL_TOK = 291, + UNDEF = 292, + INTERNAL = 293, + LINKONCE = 294, + WEAK = 295, + APPENDING = 296, + DLLIMPORT = 297, + DLLEXPORT = 298, + EXTERN_WEAK = 299, + OPAQUE = 300, + EXTERNAL = 301, + TARGET = 302, + TRIPLE = 303, + ALIGN = 304, + DEPLIBS = 305, + CALL = 306, + TAIL = 307, + ASM_TOK = 308, + MODULE = 309, + SIDEEFFECT = 310, + CC_TOK = 311, + CCC_TOK = 312, + FASTCC_TOK = 313, + COLDCC_TOK = 314, + X86_STDCALLCC_TOK = 315, + X86_FASTCALLCC_TOK = 316, + DATALAYOUT = 317, + RET = 318, + BR = 319, + SWITCH = 320, + INVOKE = 321, + UNWIND = 322, + UNREACHABLE = 323, + ADD = 324, + SUB = 325, + MUL = 326, + UDIV = 327, + SDIV = 328, + FDIV = 329, + UREM = 330, + SREM = 331, + FREM = 332, + AND = 333, + OR = 334, + XOR = 335, + SHL = 336, + LSHR = 337, + ASHR = 338, + ICMP = 339, + FCMP = 340, + EQ = 341, + NE = 342, + SLT = 343, + SGT = 344, + SLE = 345, + SGE = 346, + ULT = 347, + UGT = 348, + ULE = 349, + UGE = 350, + OEQ = 351, + ONE = 352, + OLT = 353, + OGT = 354, + OLE = 355, + OGE = 356, + ORD = 357, + UNO = 358, + UEQ = 359, + UNE = 360, + MALLOC = 361, + ALLOCA = 362, + FREE = 363, + LOAD = 364, + STORE = 365, + GETELEMENTPTR = 366, + TRUNC = 367, + ZEXT = 368, + SEXT = 369, + FPTRUNC = 370, + FPEXT = 371, + BITCAST = 372, + UITOFP = 373, + SITOFP = 374, + FPTOUI = 375, + FPTOSI = 376, + INTTOPTR = 377, + PTRTOINT = 378, + PHI_TOK = 379, + SELECT = 380, + VAARG = 381, + EXTRACTELEMENT = 382, + INSERTELEMENT = 383, + SHUFFLEVECTOR = 384, + NORETURN = 385, + INREG = 386, + SRET = 387, + NOUNWIND = 388, + DEFAULT = 389, + HIDDEN = 390 + }; +#endif +/* Tokens. */ +#define ESINT64VAL 258 +#define EUINT64VAL 259 +#define ESAPINTVAL 260 +#define EUAPINTVAL 261 +#define LOCALVAL_ID 262 +#define GLOBALVAL_ID 263 +#define FPVAL 264 +#define VOID 265 +#define INTTYPE 266 +#define FLOAT 267 +#define DOUBLE 268 +#define LABEL 269 +#define TYPE 270 +#define LOCALVAR 271 +#define GLOBALVAR 272 +#define LABELSTR 273 +#define STRINGCONSTANT 274 +#define ATSTRINGCONSTANT 275 +#define ZEROINITIALIZER 276 +#define TRUETOK 277 +#define FALSETOK 278 +#define BEGINTOK 279 +#define ENDTOK 280 +#define DECLARE 281 +#define DEFINE 282 +#define GLOBAL 283 +#define CONSTANT 284 +#define SECTION 285 +#define ALIAS 286 +#define VOLATILE 287 +#define THREAD_LOCAL 288 +#define TO 289 +#define DOTDOTDOT 290 +#define NULL_TOK 291 +#define UNDEF 292 +#define INTERNAL 293 +#define LINKONCE 294 +#define WEAK 295 +#define APPENDING 296 +#define DLLIMPORT 297 +#define DLLEXPORT 298 +#define EXTERN_WEAK 299 +#define OPAQUE 300 +#define EXTERNAL 301 +#define TARGET 302 +#define TRIPLE 303 +#define ALIGN 304 +#define DEPLIBS 305 +#define CALL 306 +#define TAIL 307 +#define ASM_TOK 308 +#define MODULE 309 +#define SIDEEFFECT 310 +#define CC_TOK 311 +#define CCC_TOK 312 +#define FASTCC_TOK 313 +#define COLDCC_TOK 314 +#define X86_STDCALLCC_TOK 315 +#define X86_FASTCALLCC_TOK 316 +#define DATALAYOUT 317 +#define RET 318 +#define BR 319 +#define SWITCH 320 +#define INVOKE 321 +#define UNWIND 322 +#define UNREACHABLE 323 +#define ADD 324 +#define SUB 325 +#define MUL 326 +#define UDIV 327 +#define SDIV 328 +#define FDIV 329 +#define UREM 330 +#define SREM 331 +#define FREM 332 +#define AND 333 +#define OR 334 +#define XOR 335 +#define SHL 336 +#define LSHR 337 +#define ASHR 338 +#define ICMP 339 +#define FCMP 340 +#define EQ 341 +#define NE 342 +#define SLT 343 +#define SGT 344 +#define SLE 345 +#define SGE 346 +#define ULT 347 +#define UGT 348 +#define ULE 349 +#define UGE 350 +#define OEQ 351 +#define ONE 352 +#define OLT 353 +#define OGT 354 +#define OLE 355 +#define OGE 356 +#define ORD 357 +#define UNO 358 +#define UEQ 359 +#define UNE 360 +#define MALLOC 361 +#define ALLOCA 362 +#define FREE 363 +#define LOAD 364 +#define STORE 365 +#define GETELEMENTPTR 366 +#define TRUNC 367 +#define ZEXT 368 +#define SEXT 369 +#define FPTRUNC 370 +#define FPEXT 371 +#define BITCAST 372 +#define UITOFP 373 +#define SITOFP 374 +#define FPTOUI 375 +#define FPTOSI 376 +#define INTTOPTR 377 +#define PTRTOINT 378 +#define PHI_TOK 379 +#define SELECT 380 +#define VAARG 381 +#define EXTRACTELEMENT 382 +#define INSERTELEMENT 383 +#define SHUFFLEVECTOR 384 +#define NORETURN 385 +#define INREG 386 +#define SRET 387 +#define NOUNWIND 388 +#define DEFAULT 389 +#define HIDDEN 390 + + + + +#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED +typedef union YYSTYPE +#line 938 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" +{ llvm::Module *ModuleVal; llvm::Function *FunctionVal; llvm::BasicBlock *BasicBlockVal; @@ -43,139 +360,14 @@ llvm::Instruction::OtherOps OtherOpVal; llvm::ICmpInst::Predicate IPredicate; llvm::FCmpInst::Predicate FPredicate; -} YYSTYPE; -#define ESINT64VAL 257 -#define EUINT64VAL 258 -#define ESAPINTVAL 259 -#define EUAPINTVAL 260 -#define LOCALVAL_ID 261 -#define GLOBALVAL_ID 262 -#define FPVAL 263 -#define VOID 264 -#define INTTYPE 265 -#define FLOAT 266 -#define DOUBLE 267 -#define LABEL 268 -#define TYPE 269 -#define LOCALVAR 270 -#define GLOBALVAR 271 -#define LABELSTR 272 -#define STRINGCONSTANT 273 -#define ATSTRINGCONSTANT 274 -#define ZEROINITIALIZER 275 -#define TRUETOK 276 -#define FALSETOK 277 -#define BEGINTOK 278 -#define ENDTOK 279 -#define DECLARE 280 -#define DEFINE 281 -#define GLOBAL 282 -#define CONSTANT 283 -#define SECTION 284 -#define VOLATILE 285 -#define THREAD_LOCAL 286 -#define TO 287 -#define DOTDOTDOT 288 -#define NULL_TOK 289 -#define UNDEF 290 -#define INTERNAL 291 -#define LINKONCE 292 -#define WEAK 293 -#define APPENDING 294 -#define DLLIMPORT 295 -#define DLLEXPORT 296 -#define EXTERN_WEAK 297 -#define OPAQUE 298 -#define EXTERNAL 299 -#define TARGET 300 -#define TRIPLE 301 -#define ALIGN 302 -#define DEPLIBS 303 -#define CALL 304 -#define TAIL 305 -#define ASM_TOK 306 -#define MODULE 307 -#define SIDEEFFECT 308 -#define CC_TOK 309 -#define CCC_TOK 310 -#define FASTCC_TOK 311 -#define COLDCC_TOK 312 -#define X86_STDCALLCC_TOK 313 -#define X86_FASTCALLCC_TOK 314 -#define DATALAYOUT 315 -#define RET 316 -#define BR 317 -#define SWITCH 318 -#define INVOKE 319 -#define UNWIND 320 -#define UNREACHABLE 321 -#define ADD 322 -#define SUB 323 -#define MUL 324 -#define UDIV 325 -#define SDIV 326 -#define FDIV 327 -#define UREM 328 -#define SREM 329 -#define FREM 330 -#define AND 331 -#define OR 332 -#define XOR 333 -#define SHL 334 -#define LSHR 335 -#define ASHR 336 -#define ICMP 337 -#define FCMP 338 -#define EQ 339 -#define NE 340 -#define SLT 341 -#define SGT 342 -#define SLE 343 -#define SGE 344 -#define ULT 345 -#define UGT 346 -#define ULE 347 -#define UGE 348 -#define OEQ 349 -#define ONE 350 -#define OLT 351 -#define OGT 352 -#define OLE 353 -#define OGE 354 -#define ORD 355 -#define UNO 356 -#define UEQ 357 -#define UNE 358 -#define MALLOC 359 -#define ALLOCA 360 -#define FREE 361 -#define LOAD 362 -#define STORE 363 -#define GETELEMENTPTR 364 -#define TRUNC 365 -#define ZEXT 366 -#define SEXT 367 -#define FPTRUNC 368 -#define FPEXT 369 -#define BITCAST 370 -#define UITOFP 371 -#define SITOFP 372 -#define FPTOUI 373 -#define FPTOSI 374 -#define INTTOPTR 375 -#define PTRTOINT 376 -#define PHI_TOK 377 -#define SELECT 378 -#define VAARG 379 -#define EXTRACTELEMENT 380 -#define INSERTELEMENT 381 -#define SHUFFLEVECTOR 382 -#define NORETURN 383 -#define INREG 384 -#define SRET 385 -#define NOUNWIND 386 -#define DEFAULT 387 -#define HIDDEN 388 - +} +/* Line 1489 of yacc.c. */ +#line 366 "llvmAsmParser.tab.h" + YYSTYPE; +# define yystype YYSTYPE /* obsolescent; will be withdrawn */ +# define YYSTYPE_IS_DECLARED 1 +# define YYSTYPE_IS_TRIVIAL 1 +#endif extern YYSTYPE llvmAsmlval; + Index: llvm/lib/AsmParser/llvmAsmParser.y.cvs diff -u llvm/lib/AsmParser/llvmAsmParser.y.cvs:1.92 llvm/lib/AsmParser/llvmAsmParser.y.cvs:1.93 --- llvm/lib/AsmParser/llvmAsmParser.y.cvs:1.92 Sun Apr 22 15:09:11 2007 +++ llvm/lib/AsmParser/llvmAsmParser.y.cvs Wed Apr 25 09:29:12 2007 @@ -1004,6 +1004,7 @@ %type OptSideEffect // 'sideeffect' or not. %type GVInternalLinkage GVExternalLinkage %type FunctionDefineLinkage FunctionDeclareLinkage +%type AliasLinkage %type GVVisibilityStyle // ValueRef - Unresolved reference to a definition or BB @@ -1035,12 +1036,12 @@ %token LOCALVAR GLOBALVAR LABELSTR STRINGCONSTANT ATSTRINGCONSTANT %type LocalName OptLocalName OptLocalAssign -%type GlobalName OptGlobalAssign +%type GlobalName OptGlobalAssign GlobalAssign %type OptAlign OptCAlign %type OptSection SectionString %token ZEROINITIALIZER TRUETOK FALSETOK BEGINTOK ENDTOK -%token DECLARE DEFINE GLOBAL CONSTANT SECTION VOLATILE THREAD_LOCAL +%token DECLARE DEFINE GLOBAL CONSTANT SECTION ALIAS VOLATILE THREAD_LOCAL %token TO DOTDOTDOT NULL_TOK UNDEF INTERNAL LINKONCE WEAK APPENDING %token DLLIMPORT DLLEXPORT EXTERN_WEAK %token OPAQUE EXTERNAL TARGET TRIPLE ALIGN @@ -1136,15 +1137,17 @@ GlobalName : GLOBALVAR | ATSTRINGCONSTANT; -OptGlobalAssign : GlobalName '=' { - $$ = $1; - CHECK_FOR_ERROR - } +OptGlobalAssign : GlobalAssign | /*empty*/ { $$ = 0; CHECK_FOR_ERROR }; +GlobalAssign : GlobalName '=' { + $$ = $1; + CHECK_FOR_ERROR + } + GVInternalLinkage : INTERNAL { $$ = GlobalValue::InternalLinkage; } | WEAK { $$ = GlobalValue::WeakLinkage; } @@ -1161,6 +1164,7 @@ GVVisibilityStyle : /*empty*/ { $$ = GlobalValue::DefaultVisibility; } + | DEFAULT { $$ = GlobalValue::DefaultVisibility; } | HIDDEN { $$ = GlobalValue::HiddenVisibility; } ; @@ -1170,7 +1174,7 @@ | EXTERN_WEAK { $$ = GlobalValue::ExternalWeakLinkage; } ; -FunctionDefineLinkage +FunctionDefineLinkage : /*empty*/ { $$ = GlobalValue::ExternalLinkage; } | INTERNAL { $$ = GlobalValue::InternalLinkage; } | LINKONCE { $$ = GlobalValue::LinkOnceLinkage; } @@ -1178,6 +1182,12 @@ | DLLEXPORT { $$ = GlobalValue::DLLExportLinkage; } ; +AliasLinkage + : /*empty*/ { $$ = GlobalValue::ExternalLinkage; } + | WEAK { $$ = GlobalValue::WeakLinkage; } + | INTERNAL { $$ = GlobalValue::InternalLinkage; } + ; + OptCallingConv : /*empty*/ { $$ = CallingConv::C; } | CCC_TOK { $$ = CallingConv::C; } | FASTCC_TOK { $$ = CallingConv::Fast; } | @@ -2031,6 +2041,34 @@ CurGV = 0; CHECK_FOR_ERROR } + | OptGlobalAssign GVVisibilityStyle ALIAS AliasLinkage ResultTypes SymbolicValueRef { + std::string Name($1); + if (Name.empty()) + GEN_ERROR("Alias name cannot be empty") + const PointerType *PFTy = 0; + const FunctionType *Ty = 0; + Value* V = 0; + const Type* VTy = 0; + if (!(PFTy = dyn_cast($5->get())) || + !(Ty = dyn_cast(PFTy->getElementType()))) { + VTy = $5->get(); + V = getExistingVal(VTy, $6); + } else { + VTy = PFTy; + V = getExistingVal(PFTy, $6); + } + if (V == 0) + GEN_ERROR(std::string("Invalid aliasee for alias: ") + $1); + GlobalValue* Aliasee; + if (Aliasee = dyn_cast(V)) { + GlobalAlias* GA = new GlobalAlias(VTy, $4, Name, Aliasee, CurModule.CurrentModule); + GA->setVisibility($2); + InsertValue(GA, CurModule.Values); + } else + GEN_ERROR("Aliases can be created only to global values"); + CHECK_FOR_ERROR + delete $5; + } | TARGET TargetDefinition { CHECK_FOR_ERROR } @@ -2196,9 +2234,9 @@ // error. GEN_ERROR("Overload of function '" + FunctionName + "' not permitted."); } else if (!CurFun.isDeclare && !Fn->isDeclaration()) { - // Neither the existing or the current function is a declaration and they - // have the same name and same type. Clearly this is a redefinition. - GEN_ERROR("Redefinition of function '" + FunctionName + "'"); + // Neither the existing or the current function is a declaration and they + // have the same name and same type. Clearly this is a redefinition. + GEN_ERROR("Redefinition of function '" + FunctionName + "'"); } if (Fn->isDeclaration()) { // Make sure to strip off any argument names so we can't get conflicts. for (Function::arg_iterator AI = Fn->arg_begin(), AE = Fn->arg_end(); @@ -2836,10 +2874,10 @@ Ty = FunctionType::get($3->get(), ParamTypes, false, PAL); PFTy = PointerType::get(Ty); } - + Value *V = getVal(PFTy, $4); // Get the function we're calling... CHECK_FOR_ERROR - + // Check for call to invalid intrinsic to avoid crashing later. if (Function *theF = dyn_cast(V)) { if (theF->hasName() && (theF->getValueName()->getKeyLength() >= 5) && From asl at math.spbu.ru Wed Apr 25 09:39:59 2007 From: asl at math.spbu.ru (Anton Korobeynikov) Date: Wed, 25 Apr 2007 18:39:59 +0400 Subject: [llvm-commits] llvm-gcc part of PR1017 Message-ID: <1177511999.28521.77.camel@asl.dorms.spbu.ru> Hello, Everyone. Please find attached llvm-gcc patch for symbol aliasing support. Now libstdc++ can be build as shared library on x86/linux, stripping 10M from the llvm-gcc distribution. This fixes: PR843, PR1006, PR1017. CFrontend test will follow asap after this patch will be applied. -- With best regards, Anton Korobeynikov. Faculty of Mathematics & Mechanics, Saint Petersburg State University. -------------- next part -------------- A non-text attachment was scrubbed... Name: llvm-gcc-aliases.diff Type: text/x-patch Size: 8940 bytes Desc: not available Url : http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20070425/b9ca0d6b/attachment.bin From lauro.venancio at gmail.com Wed Apr 25 09:50:57 2007 From: lauro.venancio at gmail.com (Lauro Ramos Venancio) Date: Wed, 25 Apr 2007 09:50:57 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/ARM/ARMAsmPrinter.cpp Message-ID: <200704251450.l3PEovjc013526@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/ARM: ARMAsmPrinter.cpp updated: 1.66 -> 1.67 --- Log message: remember to emit weak reference in one more case. --- Diffs of the changes: (+6 -1) ARMAsmPrinter.cpp | 7 ++++++- 1 files changed, 6 insertions(+), 1 deletion(-) Index: llvm/lib/Target/ARM/ARMAsmPrinter.cpp diff -u llvm/lib/Target/ARM/ARMAsmPrinter.cpp:1.66 llvm/lib/Target/ARM/ARMAsmPrinter.cpp:1.67 --- llvm/lib/Target/ARM/ARMAsmPrinter.cpp:1.66 Mon Apr 23 15:07:25 2007 +++ llvm/lib/Target/ARM/ARMAsmPrinter.cpp Wed Apr 25 09:50:40 2007 @@ -639,8 +639,13 @@ if (MCPE.isMachineConstantPoolEntry()) EmitMachineConstantPoolValue(MCPE.Val.MachineCPVal); - else + else { EmitGlobalConstant(MCPE.Val.ConstVal); + // remember to emit the weak reference + if (const GlobalValue *GV = dyn_cast(MCPE.Val.ConstVal)) + if (GV->hasExternalWeakLinkage()) + ExtWeakSymbols.insert(GV); + } } } From lauro.venancio at gmail.com Wed Apr 25 09:51:02 2007 From: lauro.venancio at gmail.com (Lauro Ramos Venancio) Date: Wed, 25 Apr 2007 09:51:02 -0500 Subject: [llvm-commits] CVS: llvm/test/CodeGen/ARM/weak2.ll Message-ID: <200704251451.l3PEp2n9013537@zion.cs.uiuc.edu> Changes in directory llvm/test/CodeGen/ARM: weak2.ll added (r1.1) --- Log message: remember to emit weak reference in one more case. --- Diffs of the changes: (+18 -0) weak2.ll | 18 ++++++++++++++++++ 1 files changed, 18 insertions(+) Index: llvm/test/CodeGen/ARM/weak2.ll diff -c /dev/null llvm/test/CodeGen/ARM/weak2.ll:1.1 *** /dev/null Wed Apr 25 09:50:50 2007 --- llvm/test/CodeGen/ARM/weak2.ll Wed Apr 25 09:50:40 2007 *************** *** 0 **** --- 1,18 ---- + ; RUN: llvm-as < %s | llc -march=arm | grep .weak + + define i32 @f(i32 %a) { + entry: + %tmp2 = icmp eq i32 %a, 0 ; [#uses=1] + %t.0 = select i1 %tmp2, i32 (...)* null, i32 (...)* @test_weak ; [#uses=2] + %tmp5 = icmp eq i32 (...)* %t.0, null ; [#uses=1] + br i1 %tmp5, label %UnifiedReturnBlock, label %cond_true8 + + cond_true8: ; preds = %entry + %tmp10 = tail call i32 (...)* %t.0( ) ; [#uses=1] + ret i32 %tmp10 + + UnifiedReturnBlock: ; preds = %entry + ret i32 250 + } + + declare extern_weak i32 @test_weak(...) From evan.cheng at apple.com Wed Apr 25 11:38:54 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Wed, 25 Apr 2007 09:38:54 -0700 Subject: [llvm-commits] CVS: llvm/include/llvm/Function.h GlobalValue.h GlobalVariable.h Module.h Value.h ValueSymbolTable.h In-Reply-To: <200704251428.l3PES7pX012571@zion.cs.uiuc.edu> References: <200704251428.l3PES7pX012571@zion.cs.uiuc.edu> Message-ID: <432473E7-7CF3-4A91-A698-D579413CD600@apple.com> Hi Anton, You forgot to check in GlobalAlias.h. Evan On Apr 25, 2007, at 7:28 AM, Anton Korobeynikov wrote: > > > Changes in directory llvm/include/llvm: > > Function.h updated: 1.81 -> 1.82 > GlobalValue.h updated: 1.38 -> 1.39 > GlobalVariable.h updated: 1.44 -> 1.45 > Module.h updated: 1.88 -> 1.89 > Value.h updated: 1.100 -> 1.101 > ValueSymbolTable.h updated: 1.12 -> 1.13 > --- > Log message: > > Implement aliases. This fixes PR1017: http://llvm.org/PR1017 and > it's dependent bugs. CFE part > will follow. > > > --- > Diffs of the changes: (+94 -16) > > Function.h | 4 +- > GlobalValue.h | 13 +++++++- > GlobalVariable.h | 4 +- > Module.h | 81 +++++++++++++++++++++++++++++++++++++++++ > +++++------- > Value.h | 7 +++- > ValueSymbolTable.h | 1 > 6 files changed, 94 insertions(+), 16 deletions(-) > > > Index: llvm/include/llvm/Function.h > diff -u llvm/include/llvm/Function.h:1.81 llvm/include/llvm/ > Function.h:1.82 > --- llvm/include/llvm/Function.h:1.81 Sun Apr 22 12:28:03 2007 > +++ llvm/include/llvm/Function.h Wed Apr 25 09:27:10 2007 > @@ -141,12 +141,12 @@ > /// removeFromParent - This method unlinks 'this' from the > containing module, > /// but does not delete it. > /// > - void removeFromParent(); > + virtual void removeFromParent(); > > /// eraseFromParent - This method unlinks 'this' from the > containing module > /// and deletes it. > /// > - void eraseFromParent(); > + virtual void eraseFromParent(); > > > /// Get the underlying elements of the Function... the basic > block list is > > > Index: llvm/include/llvm/GlobalValue.h > diff -u llvm/include/llvm/GlobalValue.h:1.38 llvm/include/llvm/ > GlobalValue.h:1.39 > --- llvm/include/llvm/GlobalValue.h:1.38 Sun Apr 22 10:11:24 2007 > +++ llvm/include/llvm/GlobalValue.h Wed Apr 25 09:27:10 2007 > @@ -121,6 +121,16 @@ > /// value is outside of the current translation unit... > virtual bool isDeclaration() const = 0; > > + /// removeFromParent - This method unlinks 'this' from the > containing module, > + /// but does not delete it. > + /// > + virtual void removeFromParent() = 0; > + > + /// eraseFromParent - This method unlinks 'this' from the > containing module > + /// and deletes it. > + /// > + virtual void eraseFromParent() = 0; > + > /// getParent - Get the module that this global value is > contained inside > /// of... > inline Module *getParent() { return Parent; } > @@ -136,7 +146,8 @@ > static inline bool classof(const GlobalValue *) { return true; } > static inline bool classof(const Value *V) { > return V->getValueID() == Value::FunctionVal || > - V->getValueID() == Value::GlobalVariableVal; > + V->getValueID() == Value::GlobalVariableVal || > + V->getValueID() == Value::GlobalAliasVal; > } > }; > > > > Index: llvm/include/llvm/GlobalVariable.h > diff -u llvm/include/llvm/GlobalVariable.h:1.44 llvm/include/llvm/ > GlobalVariable.h:1.45 > --- llvm/include/llvm/GlobalVariable.h:1.44 Tue Apr 17 13:30:41 2007 > +++ llvm/include/llvm/GlobalVariable.h Wed Apr 25 09:27:10 2007 > @@ -107,12 +107,12 @@ > /// removeFromParent - This method unlinks 'this' from the > containing module, > /// but does not delete it. > /// > - void removeFromParent(); > + virtual void removeFromParent(); > > /// eraseFromParent - This method unlinks 'this' from the > containing module > /// and deletes it. > /// > - void eraseFromParent(); > + virtual void eraseFromParent(); > > /// Override Constant's implementation of this method so we can > /// replace constant initializers. > > > Index: llvm/include/llvm/Module.h > diff -u llvm/include/llvm/Module.h:1.88 llvm/include/llvm/Module.h: > 1.89 > --- llvm/include/llvm/Module.h:1.88 Tue Apr 17 00:33:04 2007 > +++ llvm/include/llvm/Module.h Wed Apr 25 09:27:10 2007 > @@ -16,12 +16,12 @@ > > #include "llvm/Function.h" > #include "llvm/GlobalVariable.h" > +#include "llvm/GlobalAlias.h" > #include "llvm/Support/DataTypes.h" > #include > > namespace llvm { > > -class GlobalVariable; > class GlobalValueRefMap; // Used by ConstantVals.cpp > class FunctionType; > > @@ -43,6 +43,15 @@ > static inline ValueSymbolTable *getSymTab(Module *M); > static int getListOffset(); > }; > +template<> struct ilist_traits > + : public SymbolTableListTraits { > + // createSentinel is used to create a node that marks the end of > the list. > + static GlobalAlias *createSentinel(); > + static void destroySentinel(GlobalAlias *GA) { delete GA; } > + static iplist &getList(Module *M); > + static inline ValueSymbolTable *getSymTab(Module *M); > + static int getListOffset(); > +}; > > /// A Module instance is used to store all the information related > to an > /// LLVM module. Modules are the top level container of all other > LLVM > @@ -63,6 +72,8 @@ > typedef iplist GlobalListType; > /// The type for the list of functions. > typedef iplist FunctionListType; > + /// The type for the list of aliases. > + typedef iplist AliasListType; > > /// The type for the list of dependent libraries. > typedef std::vector LibraryListType; > @@ -77,6 +88,11 @@ > /// The Function constant iterator > typedef FunctionListType::const_iterator > const_iterator; > > + /// The Global Alias iterators. > + typedef AliasListType::iterator > alias_iterator; > + /// The Global Alias constant iterator > + typedef AliasListType::const_iterator > const_alias_iterator; > + > /// The Library list iterator. > typedef LibraryListType::const_iterator lib_iterator; > > @@ -92,6 +108,7 @@ > private: > GlobalListType GlobalList; ///< The Global Variables in the > module > FunctionListType FunctionList; ///< The Functions in the module > + AliasListType AliasList; ///< The Aliases in the module > LibraryListType LibraryList; ///< The Libraries needed by the > module > std::string GlobalScopeAsm; ///< Inline Asm at global scope. > ValueSymbolTable *ValSymTab; ///< Symbol table for values > @@ -175,10 +192,10 @@ > /// getOrInsertFunction - Look up the specified function in the > module symbol > /// table. If it does not exist, add a prototype for the > function and return > /// it. This function guarantees to return a constant of > pointer to the > - /// specified function type or a ConstantExpr BitCast of that > type if the > - /// named /// function has a different type. This version of > the method > - /// takes a null terminated list of function arguments, which > makes it > - /// easier for clients to use. > + /// specified function type or a ConstantExpr BitCast of that > type if the > + /// named function has a different type. This version of the > method takes a > + /// null terminated list of function arguments, which makes it > easier for > + /// clients to use. > Constant *getOrInsertFunction(const std::string &Name, const > Type *RetTy,...) > END_WITH_NULL; > > @@ -205,6 +222,15 @@ > GlobalVariable *getNamedGlobal(const std::string &Name) const { > return getGlobalVariable(Name, true); > } > + > +/// @} > +/// @name Global Variable Accessors > +/// @{ > +public: > + /// getNamedGlobal - Return the first global alias in the module > with the > + /// specified name, of arbitrary type. This method returns null > if a global > + /// with the specified name is not found. > + GlobalAlias *getNamedAlias(const std::string &Name) const; > > /// @} > /// @name Type Accessors > @@ -235,14 +261,18 @@ > const FunctionListType &getFunctionList() const { return > FunctionList; } > /// Get the Module's list of functions. > FunctionListType &getFunctionList() { return > FunctionList; } > + /// Get the Module's list of aliases (constant). > + const AliasListType &getAliasList() const { return > AliasList; } > + /// Get the Module's list of aliases. > + AliasListType &getAliasList() { return > AliasList; } > /// Get the symbol table of global variable and function > identifiers > const ValueSymbolTable &getValueSymbolTable() const { return > *ValSymTab; } > /// Get the Module's symbol table of global variable and > function identifiers. > ValueSymbolTable &getValueSymbolTable() { return > *ValSymTab; } > /// Get the symbol table of types > - const TypeSymbolTable &getTypeSymbolTable() const { return > *TypeSymTab; } > + const TypeSymbolTable &getTypeSymbolTable() const { return > *TypeSymTab; } > /// Get the Module's symbol table of types > - TypeSymbolTable &getTypeSymbolTable() { return > *TypeSymTab; } > + TypeSymbolTable &getTypeSymbolTable() { return > *TypeSymTab; } > > /// @} > /// @name Global Variable Iteration > @@ -272,7 +302,7 @@ > /// Get a constant iterator to the last function. > const_iterator end () const { return FunctionList.end > (); } > /// Determine how many functions are in the Module's list of > functions. > - size_t size() const { return FunctionList.size > (); } > + size_t size() const { return FunctionList.size > (); } > /// Determine if the list of functions is empty. > bool empty() const { return FunctionList.empty > (); } > > @@ -283,9 +313,9 @@ > /// @brief Get a constant iterator to beginning of dependent > library list. > inline lib_iterator lib_begin() const { return LibraryList.begin > (); } > /// @brief Get a constant iterator to end of dependent library > list. > - inline lib_iterator lib_end() const { return LibraryList.end(); } > + inline lib_iterator lib_end() const { return LibraryList.end > (); } > /// @brief Returns the number of items in the list of libraries. > - inline size_t lib_size() const { return LibraryList.size(); } > + inline size_t lib_size() const { return LibraryList.size > (); } > /// @brief Add a library to the list of dependent libraries > void addLibrary(const std::string& Lib); > /// @brief Remove a library from the list of dependent libraries > @@ -294,6 +324,23 @@ > inline const LibraryListType& getLibraries() const { return > LibraryList; } > > /// @} > +/// @name Alias Iteration > +/// @{ > +public: > + /// Get an iterator to the first alias. > + alias_iterator alias_begin() { return > AliasList.begin(); } > + /// Get a constant iterator to the first alias. > + const_alias_iterator alias_begin() const { return > AliasList.begin(); } > + /// Get an iterator to the last alias. > + alias_iterator alias_end () { return > AliasList.end(); } > + /// Get a constant iterator to the last alias. > + const_alias_iterator alias_end () const { return > AliasList.end(); } > + /// Determine how many functions are in the Module's list of > aliases. > + size_t alias_size () const { return > AliasList.size(); } > + /// Determine if the list of aliases is empty. > + bool alias_empty() const { return > AliasList.empty(); } > + > +/// @} > /// @name Utility functions for printing and dumping Module objects > /// @{ > public: > @@ -324,6 +371,10 @@ > Module *Obj = 0; > return unsigned(reinterpret_cast(&Obj->GlobalList)); > } > + static unsigned getAliasListOffset() { > + Module *Obj = 0; > + return unsigned(reinterpret_cast(&Obj->AliasList)); > + } > }; > > /// An iostream inserter for modules. > @@ -342,6 +393,11 @@ > return M ? &M->getValueSymbolTable() : 0; > } > > +inline ValueSymbolTable * > +ilist_traits::getSymTab(Module *M) { > + return M ? &M->getValueSymbolTable() : 0; > +} > + > inline int > ilist_traits::getListOffset() { > return Module::getFunctionListOffset(); > @@ -352,6 +408,11 @@ > return Module::getGlobalVariableListOffset(); > } > > +inline int > +ilist_traits::getListOffset() { > + return Module::getAliasListOffset(); > +} > + > } // End llvm namespace > > #endif > > > Index: llvm/include/llvm/Value.h > diff -u llvm/include/llvm/Value.h:1.100 llvm/include/llvm/Value.h: > 1.101 > --- llvm/include/llvm/Value.h:1.100 Fri Apr 13 13:12:09 2007 > +++ llvm/include/llvm/Value.h Wed Apr 25 09:27:10 2007 > @@ -30,6 +30,7 @@ > class GlobalValue; > class Function; > class GlobalVariable; > +class GlobalAlias; > class InlineAsm; > class ValueSymbolTable; > class TypeSymbolTable; > @@ -160,6 +161,7 @@ > ArgumentVal, // This is an instance of Argument > BasicBlockVal, // This is an instance of BasicBlock > FunctionVal, // This is an instance of Function > + GlobalAliasVal, // This is an instance of GlobalAlias > GlobalVariableVal, // This is an instance of > GlobalVariable > UndefValueVal, // This is an instance of UndefValue > ConstantExprVal, // This is an instance of ConstantExpr > @@ -248,8 +250,11 @@ > template <> inline bool isa_impl(const > Value &Val) { > return Val.getValueID() == Value::GlobalVariableVal; > } > +template <> inline bool isa_impl(const Value > &Val) { > + return Val.getValueID() == Value::GlobalAliasVal; > +} > template <> inline bool isa_impl(const Value > &Val) { > - return isa(Val) || isa(Val); > + return isa(Val) || isa(Val) || > isa(Val); > } > > } // End llvm namespace > > > Index: llvm/include/llvm/ValueSymbolTable.h > diff -u llvm/include/llvm/ValueSymbolTable.h:1.12 llvm/include/llvm/ > ValueSymbolTable.h:1.13 > --- llvm/include/llvm/ValueSymbolTable.h:1.12 Mon Apr 16 22:26:42 2007 > +++ llvm/include/llvm/ValueSymbolTable.h Wed Apr 25 09:27:10 2007 > @@ -35,6 +35,7 @@ > friend class SymbolTableListTraits; > friend class SymbolTableListTraits; > friend class SymbolTableListTraits; > + friend class SymbolTableListTraits; > /// @name Types > /// @{ > public: > > > > _______________________________________________ > llvm-commits mailing list > llvm-commits at cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits From asl at math.spbu.ru Wed Apr 25 11:42:57 2007 From: asl at math.spbu.ru (Anton Korobeynikov) Date: Wed, 25 Apr 2007 11:42:57 -0500 Subject: [llvm-commits] CVS: llvm/include/llvm/GlobalAlias.h Message-ID: <200704251642.l3PGgvDN015798@zion.cs.uiuc.edu> Changes in directory llvm/include/llvm: GlobalAlias.h added (r1.1) --- Log message: Add missed file --- Diffs of the changes: (+83 -0) GlobalAlias.h | 83 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 83 insertions(+) Index: llvm/include/llvm/GlobalAlias.h diff -c /dev/null llvm/include/llvm/GlobalAlias.h:1.1 *** /dev/null Wed Apr 25 11:42:49 2007 --- llvm/include/llvm/GlobalAlias.h Wed Apr 25 11:42:39 2007 *************** *** 0 **** --- 1,83 ---- + //===______-- llvm/GlobalAlias.h - GlobalAlias class ------------*- C++ -*-===// + // + // The LLVM Compiler Infrastructure + // + // This file was developed by Anton Korobeynikov and is distributed under + // the University of Illinois Open Source License. See LICENSE.TXT for details. + // + //===----------------------------------------------------------------------===// + // + // This file contains the declaration of the GlobalAlias class, which + // represents a single function or variable alias in the VM. + // + //===----------------------------------------------------------------------===// + + #ifndef LLVM_GLOBAL_ALIAS_H + #define LLVM_GLOBAL_ALIAS_H + + #include "llvm/GlobalValue.h" + + namespace llvm { + + class Module; + class Constant; + class PointerType; + template + class SymbolTableListTraits; + + class GlobalAlias : public GlobalValue { + friend class SymbolTableListTraits; + void operator=(const GlobalAlias &); // Do not implement + GlobalAlias(const GlobalAlias &); // Do not implement + + void setParent(Module *parent); + + GlobalAlias *Prev, *Next; + void setNext(GlobalAlias *N) { Next = N; } + void setPrev(GlobalAlias *N) { Prev = N; } + + const GlobalValue* Aliasee; + std::string Target; + public: + /// GlobalAlias ctor - If a parent module is specified, the alias is + /// automatically inserted into the end of the specified modules alias list. + GlobalAlias(const Type *Ty, LinkageTypes Linkage, const std::string &Name = "", + const GlobalValue* Aliasee = 0, Module *Parent = 0); + + /// isDeclaration - Is this global variable lacking an initializer? If so, + /// the global variable is defined in some other translation unit, and is thus + /// only a declaration here. + virtual bool isDeclaration() const; + + /// removeFromParent - This method unlinks 'this' from the containing module, + /// but does not delete it. + /// + virtual void removeFromParent(); + + /// eraseFromParent - This method unlinks 'this' from the containing module + /// and deletes it. + /// + virtual void eraseFromParent(); + + virtual void print(std::ostream &OS) const; + void print(std::ostream *OS) const { if (OS) print(*OS); } + + void setAliasee(const GlobalValue* GV); + const GlobalValue* getAliasee() const { return Aliasee; } + + // Methods for support type inquiry through isa, cast, and dyn_cast: + static inline bool classof(const GlobalAlias *) { return true; } + static inline bool classof(const Value *V) { + return V->getValueID() == Value::GlobalAliasVal; + } + private: + // getNext/Prev - Return the next or previous alias in the list. + GlobalAlias *getNext() { return Next; } + const GlobalAlias *getNext() const { return Next; } + GlobalAlias *getPrev() { return Prev; } + const GlobalAlias *getPrev() const { return Prev; } + }; + + } // End llvm namespace + + #endif From clattner at apple.com Wed Apr 25 11:53:00 2007 From: clattner at apple.com (clattner at apple.com) Date: Wed, 25 Apr 2007 09:53:00 -0700 (PDT) Subject: [llvm-commits] [126543] Clean up this macro to only eval each argument once. Message-ID: <20070425165300.330BF1056C804@src> Revision: 126543 Author: clattner Date: 2007-04-25 09:52:59 -0700 (Wed, 25 Apr 2007) Log Message: ----------- Clean up this macro to only eval each argument once. Modified Paths: -------------- apple-local/branches/llvm/gcc/expr.c Modified: apple-local/branches/llvm/gcc/expr.c =================================================================== --- apple-local/branches/llvm/gcc/expr.c 2007-04-25 11:17:44 UTC (rev 126542) +++ apple-local/branches/llvm/gcc/expr.c 2007-04-25 16:52:59 UTC (rev 126543) @@ -178,7 +178,7 @@ /* LLVM always emits moves with memcpy, which allows us to make smart decisions later. This affects CONSTRUCTOR lowering in the gimplifier. */ #undef MOVE_BY_PIECES_P -#define MOVE_BY_PIECES_P(SIZE, ALIGN) ((SIZE-SIZE)+(ALIGN-ALIGN)) +#define MOVE_BY_PIECES_P(SIZE, ALIGN) (0*(SIZE)*(ALIGN)) #endif /* APPLE LOCAL end LLVM */ From isanbard at gmail.com Wed Apr 25 11:56:18 2007 From: isanbard at gmail.com (Bill) Date: Wed, 25 Apr 2007 09:56:18 -0700 Subject: [llvm-commits] [126543] Clean up this macro to only eval each argument once. In-Reply-To: <20070425165300.330BF1056C804@src> References: <20070425165300.330BF1056C804@src> Message-ID: <16e5fdf90704250956y35a99dc8o9d10b3319c320f97@mail.gmail.com> On 4/25/07, clattner at apple.com wrote: > #undef MOVE_BY_PIECES_P > -#define MOVE_BY_PIECES_P(SIZE, ALIGN) ((SIZE-SIZE)+(ALIGN-ALIGN)) > +#define MOVE_BY_PIECES_P(SIZE, ALIGN) (0*(SIZE)*(ALIGN)) > Why not just make it: #define MOVE_BY_PIECES_P(SIZE, ALIGN) 0 ? -bw From clattner at apple.com Wed Apr 25 11:58:26 2007 From: clattner at apple.com (Chris Lattner) Date: Wed, 25 Apr 2007 09:58:26 -0700 Subject: [llvm-commits] [126543] Clean up this macro to only eval each argument once. In-Reply-To: <16e5fdf90704250956y35a99dc8o9d10b3319c320f97@mail.gmail.com> References: <20070425165300.330BF1056C804@src> <16e5fdf90704250956y35a99dc8o9d10b3319c320f97@mail.gmail.com> Message-ID: <00265DBB-4C91-46DB-9C4E-DE3FBF16CFD0@apple.com> On Apr 25, 2007, at 9:56 AM, Bill wrote: > On 4/25/07, clattner at apple.com wrote: >> #undef MOVE_BY_PIECES_P >> -#define MOVE_BY_PIECES_P(SIZE, ALIGN) ((SIZE-SIZE)+(ALIGN-ALIGN)) >> +#define MOVE_BY_PIECES_P(SIZE, ALIGN) (0*(SIZE)*(ALIGN)) >> > Why not just make it: > > #define MOVE_BY_PIECES_P(SIZE, ALIGN) 0 > > ? That would be way too logical. Unfortunately, doing that causes "unused value" warnings to be emitted. -Chris From clattner at apple.com Wed Apr 25 12:11:37 2007 From: clattner at apple.com (Chris Lattner) Date: Wed, 25 Apr 2007 10:11:37 -0700 Subject: [llvm-commits] llvm-gcc part of PR1017 In-Reply-To: <1177511999.28521.77.camel@asl.dorms.spbu.ru> References: <1177511999.28521.77.camel@asl.dorms.spbu.ru> Message-ID: <9CCA6675-0F12-4507-984B-EED9D45CC1A4@apple.com> On Apr 25, 2007, at 7:39 AM, Anton Korobeynikov wrote: > Hello, Everyone. > > Please find attached llvm-gcc patch for symbol aliasing support. Now > libstdc++ can be build as shared library on x86/linux, stripping 10M > from the llvm-gcc distribution. > > This fixes: PR843, PR1006, PR1017. Ooh, cool. A running example: int X() alias "Y"; + // Get or create LLVM global for our alias. + GlobalValue *V = castDECL_LLVM(decl); Two things: first please use ()'s around DECL_LLVM. I assume this works because DECL_LLVM expands to being surrounded by parens, but this looks very strange. Second, does this create a decl for "X" or for "Y"? I think it creates a global for X, which you later hack out and replace with a GlobalAlias instance. This is ugly because you're creating a global or function, only to remove it. Would it be possible to make make_decl_llvm create the GlobalAlias for you directly? + // Query SymTab for aliasee + const char* AliaseeName = IDENTIFIER_POINTER(target); + if (!Aliasee) { + if (isa(V)) { + Aliasee = TheModule->getFunction(AliaseeName); + } else if (isa(V)) { + Aliasee = TheModule->getNamedGlobal(AliaseeName); + } else if (isa(V)) { + Aliasee = TheModule->getNamedAlias(AliaseeName); + } + } This can be made simpler. Try something like this: Aliasee = TheModule->getValueSymbolTable().lookup(AliaseeName); + // Last resort. Query for name set via __asm__ .. + if (isa(V)) { + Aliasee = TheModule->getFunction(starred); + } else if (isa(V)) { + Aliasee = TheModule->getNamedGlobal(starred); + } else if (isa(V)) { + Aliasee = TheModule->getNamedAlias(starred); + } Likewise. + if (!Aliasee) + if (stage) { + TheModule->dump(); + error ("%J%qD aliased to undefined symbol %qE", + decl, decl, target); + } else + return -1; This probably shouldn't dump TheModule if it is a user error. :) If a user shouldn't be able to trigger this, turn this into an assert. + std::string savedName = V->getName(); + GlobalAlias* GA = new GlobalAlias(Aliasee->getType(), Linkage, savedName, + Aliasee, TheModule); .. + V->eraseFromParent(); + GA->setName(savedName); The name gymnastics would be more efficient as: GlobalAlias* GA = new GlobalAlias(Aliasee->getType(), Linkage, "", Aliasee, TheModule); GA->takeName(V); but hopefully you can eliminate them entirely by fixing make_decl_llvm. +++ b/gcc/varasm.c Wed Apr 25 17:03:17 2007 +0400 @@ -4645,17 +4647,17 @@ find_decl_and_mark_needed (tree decl, tr if (!cgraph_global_info_ready) { if (TREE_CODE (decl) == FUNCTION_DECL) - { - fnode = cgraph_node_for_asm (target); - if (fnode == NULL) - vnode = cgraph_varpool_node_for_asm (target); - } + { + fnode = cgraph_node_for_asm (target); + if (fnode == NULL) + vnode = cgraph_varpool_node_for_asm (target); + } this looks like indentation changes, please remove from the diff. There are several others in this file. Otherwise, looks great! -Chris From isanbard at gmail.com Wed Apr 25 12:13:00 2007 From: isanbard at gmail.com (Bill) Date: Wed, 25 Apr 2007 10:13:00 -0700 Subject: [llvm-commits] [126543] Clean up this macro to only eval each argument once. In-Reply-To: <00265DBB-4C91-46DB-9C4E-DE3FBF16CFD0@apple.com> References: <20070425165300.330BF1056C804@src> <16e5fdf90704250956y35a99dc8o9d10b3319c320f97@mail.gmail.com> <00265DBB-4C91-46DB-9C4E-DE3FBF16CFD0@apple.com> Message-ID: <16e5fdf90704251013i57f3f685kf2a224a5d752e4a9@mail.gmail.com> On 4/25/07, Chris Lattner wrote: > > On Apr 25, 2007, at 9:56 AM, Bill wrote: > > > On 4/25/07, clattner at apple.com wrote: > >> #undef MOVE_BY_PIECES_P > >> -#define MOVE_BY_PIECES_P(SIZE, ALIGN) ((SIZE-SIZE)+(ALIGN-ALIGN)) > >> +#define MOVE_BY_PIECES_P(SIZE, ALIGN) (0*(SIZE)*(ALIGN)) > >> > > Why not just make it: > > > > #define MOVE_BY_PIECES_P(SIZE, ALIGN) 0 > > > > ? > > That would be way too logical. Unfortunately, doing that causes > "unused value" warnings to be emitted. > Ah! I got ya. Ick. -bw From jeffc at jolt-lang.org Wed Apr 25 12:13:37 2007 From: jeffc at jolt-lang.org (Jeff Cohen) Date: Wed, 25 Apr 2007 12:13:37 -0500 Subject: [llvm-commits] CVS: llvm/win32/VMCore/VMCore.vcproj Message-ID: <200704251713.l3PHDb3K016496@zion.cs.uiuc.edu> Changes in directory llvm/win32/VMCore: VMCore.vcproj updated: 1.28 -> 1.29 --- Log message: Note new header file. --- Diffs of the changes: (+3 -0) VMCore.vcproj | 3 +++ 1 files changed, 3 insertions(+) Index: llvm/win32/VMCore/VMCore.vcproj diff -u llvm/win32/VMCore/VMCore.vcproj:1.28 llvm/win32/VMCore/VMCore.vcproj:1.29 --- llvm/win32/VMCore/VMCore.vcproj:1.28 Sun Apr 8 16:19:52 2007 +++ llvm/win32/VMCore/VMCore.vcproj Wed Apr 25 12:13:18 2007 @@ -239,6 +239,9 @@ RelativePath="..\..\include\llvm\Function.h"> + + Changes in directory llvm/lib/Transforms/Scalar: ScalarReplAggregates.cpp updated: 1.88 -> 1.89 --- Log message: Remove unused function argument. --- Diffs of the changes: (+1 -1) ScalarReplAggregates.cpp | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-) Index: llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp diff -u llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp:1.88 llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp:1.89 --- llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp:1.88 Wed Apr 25 01:40:51 2007 +++ llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp Wed Apr 25 12:15:20 2007 @@ -119,7 +119,7 @@ // the entry node for (BasicBlock::iterator I = BB.begin(), E = --BB.end(); I != E; ++I) if (AllocaInst *AI = dyn_cast(I)) // Is it an alloca? - if (isAllocaPromotable(AI, TD)) + if (isAllocaPromotable(AI)) Allocas.push_back(AI); if (Allocas.empty()) break; From dpatel at apple.com Wed Apr 25 12:15:44 2007 From: dpatel at apple.com (Devang Patel) Date: Wed, 25 Apr 2007 12:15:44 -0500 Subject: [llvm-commits] CVS: llvm/lib/Transforms/Utils/Mem2Reg.cpp PromoteMemoryToRegister.cpp Message-ID: <200704251715.l3PHFito016570@zion.cs.uiuc.edu> Changes in directory llvm/lib/Transforms/Utils: Mem2Reg.cpp updated: 1.24 -> 1.25 PromoteMemoryToRegister.cpp updated: 1.98 -> 1.99 --- Log message: Remove unused function argument. --- Diffs of the changes: (+3 -3) Mem2Reg.cpp | 2 +- PromoteMemoryToRegister.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) Index: llvm/lib/Transforms/Utils/Mem2Reg.cpp diff -u llvm/lib/Transforms/Utils/Mem2Reg.cpp:1.24 llvm/lib/Transforms/Utils/Mem2Reg.cpp:1.25 --- llvm/lib/Transforms/Utils/Mem2Reg.cpp:1.24 Fri Apr 20 01:27:13 2007 +++ llvm/lib/Transforms/Utils/Mem2Reg.cpp Wed Apr 25 12:15:20 2007 @@ -70,7 +70,7 @@ // the entry node for (BasicBlock::iterator I = BB.begin(), E = --BB.end(); I != E; ++I) if (AllocaInst *AI = dyn_cast(I)) // Is it an alloca? - if (isAllocaPromotable(AI, TD)) + if (isAllocaPromotable(AI)) Allocas.push_back(AI); if (Allocas.empty()) break; Index: llvm/lib/Transforms/Utils/PromoteMemoryToRegister.cpp diff -u llvm/lib/Transforms/Utils/PromoteMemoryToRegister.cpp:1.98 llvm/lib/Transforms/Utils/PromoteMemoryToRegister.cpp:1.99 --- llvm/lib/Transforms/Utils/PromoteMemoryToRegister.cpp:1.98 Sat Apr 21 02:12:44 2007 +++ llvm/lib/Transforms/Utils/PromoteMemoryToRegister.cpp Wed Apr 25 12:15:20 2007 @@ -52,7 +52,7 @@ /// isAllocaPromotable - Return true if this alloca is legal for promotion. /// This is true if there are only loads and stores to the alloca. /// -bool llvm::isAllocaPromotable(const AllocaInst *AI, const TargetData &TD) { +bool llvm::isAllocaPromotable(const AllocaInst *AI) { // FIXME: If the memory unit is of pointer or integer type, we can permit // assignments to subsections of the memory unit. @@ -178,7 +178,7 @@ for (unsigned AllocaNum = 0; AllocaNum != Allocas.size(); ++AllocaNum) { AllocaInst *AI = Allocas[AllocaNum]; - assert(isAllocaPromotable(AI, TD) && + assert(isAllocaPromotable(AI) && "Cannot promote non-promotable alloca!"); assert(AI->getParent()->getParent() == &F && "All allocas should be in the same function, which is same as DF!"); From dpatel at apple.com Wed Apr 25 12:15:46 2007 From: dpatel at apple.com (Devang Patel) Date: Wed, 25 Apr 2007 12:15:46 -0500 Subject: [llvm-commits] CVS: llvm/include/llvm/Transforms/Utils/PromoteMemToReg.h Message-ID: <200704251715.l3PHFkHu016577@zion.cs.uiuc.edu> Changes in directory llvm/include/llvm/Transforms/Utils: PromoteMemToReg.h updated: 1.10 -> 1.11 --- Log message: Remove unused function argument. --- Diffs of the changes: (+1 -1) PromoteMemToReg.h | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-) Index: llvm/include/llvm/Transforms/Utils/PromoteMemToReg.h diff -u llvm/include/llvm/Transforms/Utils/PromoteMemToReg.h:1.10 llvm/include/llvm/Transforms/Utils/PromoteMemToReg.h:1.11 --- llvm/include/llvm/Transforms/Utils/PromoteMemToReg.h:1.10 Fri Apr 20 01:27:13 2007 +++ llvm/include/llvm/Transforms/Utils/PromoteMemToReg.h Wed Apr 25 12:15:20 2007 @@ -28,7 +28,7 @@ /// isAllocaPromotable - Return true if this alloca is legal for promotion. /// This is true if there are only loads and stores to the alloca... /// -bool isAllocaPromotable(const AllocaInst *AI, const TargetData &TD); +bool isAllocaPromotable(const AllocaInst *AI); /// PromoteMemToReg - Promote the specified list of alloca instructions into /// scalar registers, inserting PHI nodes as appropriate. This function makes From sabre at nondot.org Wed Apr 25 12:24:12 2007 From: sabre at nondot.org (Chris Lattner) Date: Wed, 25 Apr 2007 12:24:12 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/X86/X86RegisterInfo.cpp Message-ID: <200704251724.l3PHOCbd016814@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/X86: X86RegisterInfo.cpp updated: 1.214 -> 1.215 --- Log message: do the multiplication as signed, so that 2*-2 == -4 instead of 4294967292 when promoted to 64-bits --- Diffs of the changes: (+2 -1) X86RegisterInfo.cpp | 3 ++- 1 files changed, 2 insertions(+), 1 deletion(-) Index: llvm/lib/Target/X86/X86RegisterInfo.cpp diff -u llvm/lib/Target/X86/X86RegisterInfo.cpp:1.214 llvm/lib/Target/X86/X86RegisterInfo.cpp:1.215 --- llvm/lib/Target/X86/X86RegisterInfo.cpp:1.214 Tue Apr 24 23:30:24 2007 +++ llvm/lib/Target/X86/X86RegisterInfo.cpp Wed Apr 25 12:23:53 2007 @@ -1016,7 +1016,8 @@ X86RegisterInfo::processFunctionBeforeFrameFinalized(MachineFunction &MF) const{ if (hasFP(MF)) { // Create a frame entry for the EBP register that must be saved. - int FrameIdx = MF.getFrameInfo()->CreateFixedObject(SlotSize,SlotSize * -2); + int FrameIdx = MF.getFrameInfo()->CreateFixedObject(SlotSize, + (int)SlotSize * -2); assert(FrameIdx == MF.getFrameInfo()->getObjectIndexBegin() && "Slot for EBP register must be last in order to be found!"); } From clattner at apple.com Wed Apr 25 12:31:43 2007 From: clattner at apple.com (Chris Lattner) Date: Wed, 25 Apr 2007 10:31:43 -0700 Subject: [llvm-commits] CVS: llvm/include/llvm/GlobalAlias.h In-Reply-To: <200704251642.l3PGgvDN015798@zion.cs.uiuc.edu> References: <200704251642.l3PGgvDN015798@zion.cs.uiuc.edu> Message-ID: > + //===______-- llvm/GlobalAlias.h - GlobalAlias class ------------ > *- C++ -*-===// Why the _____? Please remove :) > + class GlobalAlias : public GlobalValue { > + friend class SymbolTableListTraits; > + void operator=(const GlobalAlias &); // Do not implement > + GlobalAlias(const GlobalAlias &); // Do not implement > + > + void setParent(Module *parent); > + > + GlobalAlias *Prev, *Next; > + void setNext(GlobalAlias *N) { Next = N; } > + void setPrev(GlobalAlias *N) { Prev = N; } > + > + const GlobalValue* Aliasee; Aliasee should be stored as a Use instance, so it shows up as getOperand(0) on the GlobalAlias. This will ensure that ReplaceAllUsesWith will update aliases that use globals. > + std::string Target; What is this for? Otherwise, looks great! -Chris > + public: > + /// GlobalAlias ctor - If a parent module is specified, the > alias is > + /// automatically inserted into the end of the specified > modules alias list. > + GlobalAlias(const Type *Ty, LinkageTypes Linkage, const > std::string &Name = "", > + const GlobalValue* Aliasee = 0, Module *Parent = 0); > + > + /// isDeclaration - Is this global variable lacking an > initializer? If so, > + /// the global variable is defined in some other translation > unit, and is thus > + /// only a declaration here. > + virtual bool isDeclaration() const; > + > + /// removeFromParent - This method unlinks 'this' from the > containing module, > + /// but does not delete it. > + /// > + virtual void removeFromParent(); > + > + /// eraseFromParent - This method unlinks 'this' from the > containing module > + /// and deletes it. > + /// > + virtual void eraseFromParent(); > + > + virtual void print(std::ostream &OS) const; > + void print(std::ostream *OS) const { if (OS) print(*OS); } > + > + void setAliasee(const GlobalValue* GV); > + const GlobalValue* getAliasee() const { return Aliasee; } > + > + // Methods for support type inquiry through isa, cast, and > dyn_cast: > + static inline bool classof(const GlobalAlias *) { return true; } > + static inline bool classof(const Value *V) { > + return V->getValueID() == Value::GlobalAliasVal; > + } > + private: > + // getNext/Prev - Return the next or previous alias in the list. > + GlobalAlias *getNext() { return Next; } > + const GlobalAlias *getNext() const { return Next; } > + GlobalAlias *getPrev() { return Prev; } > + const GlobalAlias *getPrev() const { return Prev; } > + }; > + > + } // End llvm namespace > + > + #endif > > > > _______________________________________________ > llvm-commits mailing list > llvm-commits at cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits From asl at math.spbu.ru Wed Apr 25 13:07:58 2007 From: asl at math.spbu.ru (Anton Korobeynikov) Date: Wed, 25 Apr 2007 13:07:58 -0500 Subject: [llvm-commits] CVS: llvm/lib/AsmParser/llvmAsmParser.y Message-ID: <200704251807.l3PI7wdc017875@zion.cs.uiuc.edu> Changes in directory llvm/lib/AsmParser: llvmAsmParser.y updated: 1.348 -> 1.349 --- Log message: Add missed semicolon. Resotre compatibility with older bisons --- Diffs of the changes: (+1 -1) llvmAsmParser.y | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-) Index: llvm/lib/AsmParser/llvmAsmParser.y diff -u llvm/lib/AsmParser/llvmAsmParser.y:1.348 llvm/lib/AsmParser/llvmAsmParser.y:1.349 --- llvm/lib/AsmParser/llvmAsmParser.y:1.348 Wed Apr 25 09:27:10 2007 +++ llvm/lib/AsmParser/llvmAsmParser.y Wed Apr 25 13:07:40 2007 @@ -1146,7 +1146,7 @@ GlobalAssign : GlobalName '=' { $$ = $1; CHECK_FOR_ERROR - } + }; GVInternalLinkage : INTERNAL { $$ = GlobalValue::InternalLinkage; } From rspencer at reidspencer.com Wed Apr 25 13:25:57 2007 From: rspencer at reidspencer.com (Reid Spencer) Date: Wed, 25 Apr 2007 11:25:57 -0700 Subject: [llvm-commits] CVS: llvm/include/llvm/GlobalAlias.h In-Reply-To: <200704251642.l3PGgvDN015798@zion.cs.uiuc.edu> References: <200704251642.l3PGgvDN015798@zion.cs.uiuc.edu> Message-ID: Anton, Some comments ... On Wed, 25 Apr 2007 11:42:57 -0500 Anton Korobeynikov wrote: > > > Changes in directory llvm/include/llvm: > > GlobalAlias.h added (r1.1) > --- > Log message: > > Add missed file > > > --- > Diffs of the changes: (+83 -0) > > GlobalAlias.h | 83 >++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ > 1 files changed, 83 insertions(+) > > > Index: llvm/include/llvm/GlobalAlias.h > diff -c /dev/null llvm/include/llvm/GlobalAlias.h:1.1 > *** /dev/null Wed Apr 25 11:42:49 2007 > --- llvm/include/llvm/GlobalAlias.h Wed Apr 25 11:42:39 >2007 > *************** > *** 0 **** > --- 1,83 ---- > + //===______-- llvm/GlobalAlias.h - GlobalAlias class >------------*- C++ -*-===// > + // > + // The LLVM Compiler >Infrastructure > + // > + // This file was developed by Anton Korobeynikov and >is distributed under > + // the University of Illinois Open Source License. See >LICENSE.TXT for details. > + // > + >//===----------------------------------------------------------------------===// > + // > + // This file contains the declaration of the >GlobalAlias class, which > + // represents a single function or variable alias in >the VM. in the VM? That might be too specific. How about "in the IR" ? > + // > + >//===----------------------------------------------------------------------===// > + > + #ifndef LLVM_GLOBAL_ALIAS_H > + #define LLVM_GLOBAL_ALIAS_H > + > + #include "llvm/GlobalValue.h" > + > + namespace llvm { > + > + class Module; > + class Constant; > + class PointerType; > + templateItemParentClass> > + class SymbolTableListTraits; > + You are missing some significant documentation for the GlobalAlias class here. Please add doxygen comments with an @brief section and perhaps @see sections for GlobalValue, Function and GlobalVariable. Your documentation needs to discuss what the GlobalAlias is, how its used, why we need it, etc. > + class GlobalAlias : public GlobalValue { > + friend class SymbolTableListTraitsModule>; > + void operator=(const GlobalAlias &); // Do not >implement > + GlobalAlias(const GlobalAlias &); // Do not >implement > + > + void setParent(Module *parent); > + > + GlobalAlias *Prev, *Next; Most other LLVM classes put the data members at either the top or the bottom of the class declaration. Putting them in the middle makes them hard to find. > + void setNext(GlobalAlias *N) { Next = N; } > + void setPrev(GlobalAlias *N) { Prev = N; } > + > + const GlobalValue* Aliasee; > + std::string Target; > + public: > + /// GlobalAlias ctor - If a parent module is >specified, the alias is > + /// automatically inserted into the end of the >specified modules alias list. modules -> Module's > + GlobalAlias(const Type *Ty, LinkageTypes Linkage, >const std::string &Name = "", > + const GlobalValue* Aliasee = 0, Module >*Parent = 0); > + > + /// isDeclaration - Is this global variable lacking >an initializer? If so, > + /// the global variable is defined in some other >translation unit, and is thus > + /// only a declaration here. > + virtual bool isDeclaration() const; > + > + /// removeFromParent - This method unlinks 'this' >from the containing module, > + /// but does not delete it. > + /// > + virtual void removeFromParent(); > + > + /// eraseFromParent - This method unlinks 'this' >from the containing module > + /// and deletes it. > + /// > + virtual void eraseFromParent(); > + > + virtual void print(std::ostream &OS) const; > + void print(std::ostream *OS) const { if (OS) >print(*OS); } > + > + void setAliasee(const GlobalValue* GV); > + const GlobalValue* getAliasee() const { return >Aliasee; } > + > + // Methods for support type inquiry through isa, >cast, and dyn_cast: > + static inline bool classof(const GlobalAlias *) { >return true; } > + static inline bool classof(const Value *V) { > + return V->getValueID() == Value::GlobalAliasVal; > + } > + private: If you're going to have a private section down here, why not put all the private stuff down here? Its more friendly to readers of the .h file to list public things first and then protected/private. > + // getNext/Prev - Return the next or previous alias >in the list. > + GlobalAlias *getNext() { return Next; } > + const GlobalAlias *getNext() const { return Next; } > + GlobalAlias *getPrev() { return Prev; } > + const GlobalAlias *getPrev() const { return Prev; } > + }; > + > + } // End llvm namespace > + > + #endif > > > > _______________________________________________ > llvm-commits mailing list > llvm-commits at cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits From dpatel at apple.com Wed Apr 25 13:33:03 2007 From: dpatel at apple.com (Devang Patel) Date: Wed, 25 Apr 2007 13:33:03 -0500 Subject: [llvm-commits] CVS: llvm/lib/Transforms/Scalar/LICM.cpp ScalarReplAggregates.cpp Message-ID: <200704251833.l3PIX37u018382@zion.cs.uiuc.edu> Changes in directory llvm/lib/Transforms/Scalar: LICM.cpp updated: 1.95 -> 1.96 ScalarReplAggregates.cpp updated: 1.89 -> 1.90 --- Log message: Mem2Reg does not need TargetData. --- Diffs of the changes: (+3 -4) LICM.cpp | 4 ++-- ScalarReplAggregates.cpp | 3 +-- 2 files changed, 3 insertions(+), 4 deletions(-) Index: llvm/lib/Transforms/Scalar/LICM.cpp diff -u llvm/lib/Transforms/Scalar/LICM.cpp:1.95 llvm/lib/Transforms/Scalar/LICM.cpp:1.96 --- llvm/lib/Transforms/Scalar/LICM.cpp:1.95 Tue Apr 24 01:40:39 2007 +++ llvm/lib/Transforms/Scalar/LICM.cpp Wed Apr 25 13:32:35 2007 @@ -555,7 +555,7 @@ if (AI) { std::vector Allocas; Allocas.push_back(AI); - PromoteMemToReg(Allocas, *ET, *DF, AA->getTargetData(), CurAST); + PromoteMemToReg(Allocas, *ET, *DF, CurAST); } } } @@ -736,7 +736,7 @@ PromotedAllocas.reserve(PromotedValues.size()); for (unsigned i = 0, e = PromotedValues.size(); i != e; ++i) PromotedAllocas.push_back(PromotedValues[i].first); - PromoteMemToReg(PromotedAllocas, *ET, *DF, AA->getTargetData(), CurAST); + PromoteMemToReg(PromotedAllocas, *ET, *DF, CurAST); } /// FindPromotableValuesInLoop - Check the current loop for stores to definite Index: llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp diff -u llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp:1.89 llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp:1.90 --- llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp:1.89 Wed Apr 25 12:15:20 2007 +++ llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp Wed Apr 25 13:32:35 2007 @@ -104,7 +104,6 @@ bool SROA::performPromotion(Function &F) { std::vector Allocas; - const TargetData &TD = getAnalysis(); ETForest &ET = getAnalysis(); DominanceFrontier &DF = getAnalysis(); @@ -124,7 +123,7 @@ if (Allocas.empty()) break; - PromoteMemToReg(Allocas, ET, DF, TD); + PromoteMemToReg(Allocas, ET, DF); NumPromoted += Allocas.size(); Changed = true; } From dpatel at apple.com Wed Apr 25 13:33:03 2007 From: dpatel at apple.com (Devang Patel) Date: Wed, 25 Apr 2007 13:33:03 -0500 Subject: [llvm-commits] CVS: llvm/lib/Transforms/Utils/Mem2Reg.cpp PromoteMemoryToRegister.cpp Message-ID: <200704251833.l3PIX3ZZ018386@zion.cs.uiuc.edu> Changes in directory llvm/lib/Transforms/Utils: Mem2Reg.cpp updated: 1.25 -> 1.26 PromoteMemoryToRegister.cpp updated: 1.99 -> 1.100 --- Log message: Mem2Reg does not need TargetData. --- Diffs of the changes: (+6 -11) Mem2Reg.cpp | 5 +---- PromoteMemoryToRegister.cpp | 12 +++++------- 2 files changed, 6 insertions(+), 11 deletions(-) Index: llvm/lib/Transforms/Utils/Mem2Reg.cpp diff -u llvm/lib/Transforms/Utils/Mem2Reg.cpp:1.25 llvm/lib/Transforms/Utils/Mem2Reg.cpp:1.26 --- llvm/lib/Transforms/Utils/Mem2Reg.cpp:1.25 Wed Apr 25 12:15:20 2007 +++ llvm/lib/Transforms/Utils/Mem2Reg.cpp Wed Apr 25 13:32:35 2007 @@ -19,7 +19,6 @@ #include "llvm/Analysis/Dominators.h" #include "llvm/Instructions.h" #include "llvm/Function.h" -#include "llvm/Target/TargetData.h" #include "llvm/ADT/Statistic.h" #include "llvm/Support/Compiler.h" using namespace llvm; @@ -38,7 +37,6 @@ virtual void getAnalysisUsage(AnalysisUsage &AU) const { AU.addRequired(); AU.addRequired(); - AU.addRequired(); AU.setPreservesCFG(); // This is a cluster of orthogonal Transforms AU.addPreserved(); @@ -54,7 +52,6 @@ bool PromotePass::runOnFunction(Function &F) { std::vector Allocas; - const TargetData &TD = getAnalysis(); BasicBlock &BB = F.getEntryBlock(); // Get the entry node for the function @@ -75,7 +72,7 @@ if (Allocas.empty()) break; - PromoteMemToReg(Allocas, ET, DF, TD); + PromoteMemToReg(Allocas, ET, DF); NumPromoted += Allocas.size(); Changed = true; } Index: llvm/lib/Transforms/Utils/PromoteMemoryToRegister.cpp diff -u llvm/lib/Transforms/Utils/PromoteMemoryToRegister.cpp:1.99 llvm/lib/Transforms/Utils/PromoteMemoryToRegister.cpp:1.100 --- llvm/lib/Transforms/Utils/PromoteMemoryToRegister.cpp:1.99 Wed Apr 25 12:15:20 2007 +++ llvm/lib/Transforms/Utils/PromoteMemoryToRegister.cpp Wed Apr 25 13:32:35 2007 @@ -90,7 +90,6 @@ SmallVector &RetryList; ETForest &ET; DominanceFrontier &DF; - const TargetData &TD; /// AST - An AliasSetTracker object to update. If null, don't update it. /// @@ -128,9 +127,8 @@ public: PromoteMem2Reg(const std::vector &A, SmallVector &Retry, ETForest &et, - DominanceFrontier &df, const TargetData &td, - AliasSetTracker *ast) - : Allocas(A), RetryList(Retry), ET(et), DF(df), TD(td), AST(ast) {} + DominanceFrontier &df, AliasSetTracker *ast) + : Allocas(A), RetryList(Retry), ET(et), DF(df), AST(ast) {} void run(); @@ -806,12 +804,12 @@ /// void llvm::PromoteMemToReg(const std::vector &Allocas, ETForest &ET, DominanceFrontier &DF, - const TargetData &TD, AliasSetTracker *AST) { + AliasSetTracker *AST) { // If there is nothing to do, bail out... if (Allocas.empty()) return; SmallVector RetryList; - PromoteMem2Reg(Allocas, RetryList, ET, DF, TD, AST).run(); + PromoteMem2Reg(Allocas, RetryList, ET, DF, AST).run(); // PromoteMem2Reg may not have been able to promote all of the allocas in one // pass, run it again if needed. @@ -829,7 +827,7 @@ NewAllocas.assign(RetryList.begin(), RetryList.end()); RetryList.clear(); - PromoteMem2Reg(NewAllocas, RetryList, ET, DF, TD, AST).run(); + PromoteMem2Reg(NewAllocas, RetryList, ET, DF, AST).run(); NewAllocas.clear(); } } From evan.cheng at apple.com Wed Apr 25 13:33:45 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Wed, 25 Apr 2007 13:33:45 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp Message-ID: <200704251833.l3PIXjxo018419@zion.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen/SelectionDAG: SelectionDAGISel.cpp updated: 1.427 -> 1.428 --- Log message: This was lefted out. Fixed sumarray-dbl. --- Diffs of the changes: (+1 -0) SelectionDAGISel.cpp | 1 + 1 files changed, 1 insertion(+) Index: llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp diff -u llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.427 llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.428 --- llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.427 Tue Apr 24 23:08:28 2007 +++ llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp Wed Apr 25 13:33:21 2007 @@ -315,6 +315,7 @@ while (NumElts > 1 && !TLI.isTypeLegal(VecTy)) { NumElts >>= 1; NumVectorRegs <<= 1; + VecTy = getVectorType(EltTy, NumElts); } // Check that VecTy isn't a 1-element vector. From dpatel at apple.com Wed Apr 25 13:41:30 2007 From: dpatel at apple.com (Devang Patel) Date: Wed, 25 Apr 2007 13:41:30 -0500 Subject: [llvm-commits] CVS: llvm/include/llvm/Transforms/Utils/PromoteMemToReg.h Message-ID: <200704251841.l3PIfU8U018594@zion.cs.uiuc.edu> Changes in directory llvm/include/llvm/Transforms/Utils: PromoteMemToReg.h updated: 1.11 -> 1.12 --- Log message: Mem2Reg does not need TargetData. --- Diffs of the changes: (+1 -2) PromoteMemToReg.h | 3 +-- 1 files changed, 1 insertion(+), 2 deletions(-) Index: llvm/include/llvm/Transforms/Utils/PromoteMemToReg.h diff -u llvm/include/llvm/Transforms/Utils/PromoteMemToReg.h:1.11 llvm/include/llvm/Transforms/Utils/PromoteMemToReg.h:1.12 --- llvm/include/llvm/Transforms/Utils/PromoteMemToReg.h:1.11 Wed Apr 25 12:15:20 2007 +++ llvm/include/llvm/Transforms/Utils/PromoteMemToReg.h Wed Apr 25 13:41:11 2007 @@ -22,7 +22,6 @@ class AllocaInst; class ETForest; class DominanceFrontier; -class TargetData; class AliasSetTracker; /// isAllocaPromotable - Return true if this alloca is legal for promotion. @@ -40,7 +39,7 @@ /// void PromoteMemToReg(const std::vector &Allocas, ETForest &ET, DominanceFrontier &DF, - const TargetData &TD, AliasSetTracker *AST = 0); + AliasSetTracker *AST = 0); } // End llvm namespace From evan.cheng at apple.com Wed Apr 25 14:34:24 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Wed, 25 Apr 2007 14:34:24 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/LiveVariables.cpp Message-ID: <200704251934.l3PJYOuN019639@zion.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen: LiveVariables.cpp updated: 1.74 -> 1.75 --- Log message: Data structure change to improve compile time (especially in debug mode). --- Diffs of the changes: (+23 -12) LiveVariables.cpp | 35 +++++++++++++++++++++++------------ 1 files changed, 23 insertions(+), 12 deletions(-) Index: llvm/lib/CodeGen/LiveVariables.cpp diff -u llvm/lib/CodeGen/LiveVariables.cpp:1.74 llvm/lib/CodeGen/LiveVariables.cpp:1.75 --- llvm/lib/CodeGen/LiveVariables.cpp:1.74 Wed Apr 25 02:30:23 2007 +++ llvm/lib/CodeGen/LiveVariables.cpp Wed Apr 25 14:34:00 2007 @@ -321,10 +321,15 @@ ReservedRegisters = RegInfo->getReservedRegs(mf); - PhysRegInfo.resize(RegInfo->getNumRegs(), (MachineInstr*)NULL); - PhysRegUsed.resize(RegInfo->getNumRegs()); - PhysRegPartDef.resize(RegInfo->getNumRegs()); - PhysRegPartUse.resize(RegInfo->getNumRegs(), (MachineInstr*)NULL); + unsigned NumRegs = RegInfo->getNumRegs(); + PhysRegInfo = new MachineInstr*[NumRegs]; + PhysRegUsed = new bool[NumRegs]; + PhysRegPartUse = new MachineInstr*[NumRegs]; + PhysRegPartDef = new SmallVector[NumRegs]; + PHIVarInfo = new SmallVector[MF->getNumBlockIDs()]; + std::fill(PhysRegInfo, PhysRegInfo + NumRegs, (MachineInstr*)0); + std::fill(PhysRegUsed, PhysRegUsed + NumRegs, false); + std::fill(PhysRegPartUse, PhysRegPartUse + NumRegs, (MachineInstr*)0); /// Get some space for a respectable number of registers... VirtRegInfo.resize(64); @@ -399,10 +404,10 @@ // bottom of this basic block. We check all of our successor blocks to see // if they have PHI nodes, and if so, we simulate an assignment at the end // of the current block. - if (!PHIVarInfo[MBB].empty()) { - std::vector& VarInfoVec = PHIVarInfo[MBB]; + if (!PHIVarInfo[MBB->getNumber()].empty()) { + SmallVector& VarInfoVec = PHIVarInfo[MBB->getNumber()]; - for (std::vector::iterator I = VarInfoVec.begin(), + for (SmallVector::iterator I = VarInfoVec.begin(), E = VarInfoVec.end(); I != E; ++I) { VarInfo& VRInfo = getVarInfo(*I); assert(VRInfo.DefInst && "Register use before def (or no def)!"); @@ -428,15 +433,16 @@ // Loop over PhysRegInfo, killing any registers that are available at the // end of the basic block. This also resets the PhysRegInfo map. - for (unsigned i = 0, e = RegInfo->getNumRegs(); i != e; ++i) + for (unsigned i = 0; i != NumRegs; ++i) if (PhysRegInfo[i]) HandlePhysRegDef(i, 0); // Clear some states between BB's. These are purely local information. - for (unsigned i = 0, e = RegInfo->getNumRegs(); i != e; ++i) { + for (unsigned i = 0; i != NumRegs; ++i) { PhysRegPartDef[i].clear(); - PhysRegPartUse[i] = NULL; + //PhysRegPartUse[i] = NULL; } + std::fill(PhysRegPartUse, PhysRegPartUse + NumRegs, (MachineInstr*)0); } // Convert and transfer the dead / killed information we have gathered into @@ -460,7 +466,12 @@ assert(Visited.count(&*i) != 0 && "unreachable basic block found"); #endif - PHIVarInfo.clear(); + delete[] PhysRegInfo; + delete[] PhysRegUsed; + delete[] PhysRegPartUse; + delete[] PhysRegPartDef; + delete[] PHIVarInfo; + return false; } @@ -543,6 +554,6 @@ for (MachineBasicBlock::const_iterator BBI = I->begin(), BBE = I->end(); BBI != BBE && BBI->getOpcode() == TargetInstrInfo::PHI; ++BBI) for (unsigned i = 1, e = BBI->getNumOperands(); i != e; i += 2) - PHIVarInfo[BBI->getOperand(i + 1).getMachineBasicBlock()]. + PHIVarInfo[BBI->getOperand(i + 1).getMachineBasicBlock()->getNumber()]. push_back(BBI->getOperand(i).getReg()); } From evan.cheng at apple.com Wed Apr 25 14:34:24 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Wed, 25 Apr 2007 14:34:24 -0500 Subject: [llvm-commits] CVS: llvm/include/llvm/CodeGen/LiveVariables.h Message-ID: <200704251934.l3PJYO9v019636@zion.cs.uiuc.edu> Changes in directory llvm/include/llvm/CodeGen: LiveVariables.h updated: 1.39 -> 1.40 --- Log message: Data structure change to improve compile time (especially in debug mode). --- Diffs of the changes: (+10 -14) LiveVariables.h | 24 ++++++++++-------------- 1 files changed, 10 insertions(+), 14 deletions(-) Index: llvm/include/llvm/CodeGen/LiveVariables.h diff -u llvm/include/llvm/CodeGen/LiveVariables.h:1.39 llvm/include/llvm/CodeGen/LiveVariables.h:1.40 --- llvm/include/llvm/CodeGen/LiveVariables.h:1.39 Wed Apr 25 02:30:23 2007 +++ llvm/include/llvm/CodeGen/LiveVariables.h Wed Apr 25 14:34:00 2007 @@ -31,12 +31,12 @@ #include "llvm/CodeGen/MachineFunctionPass.h" #include "llvm/ADT/BitVector.h" +#include "llvm/ADT/SmallVector.h" #include namespace llvm { class MRegisterInfo; -class BitVector; class LiveVariables : public MachineFunctionPass { public: @@ -127,28 +127,24 @@ // PhysRegInfo - Keep track of which instruction was the last def/use of a // physical register. This is a purely local property, because all physical // register references as presumed dead across basic blocks. - std::vector PhysRegInfo; + MachineInstr **PhysRegInfo; // PhysRegUsed - Keep track whether the physical register has been used after // its last definition. This is local property. - BitVector PhysRegUsed; - - // PhysRegPartDef - Keep track of a list of instructions which "partially" - // defined the physical register (e.g. on X86 AX partially defines EAX). - // These are turned into use/mod/write if there is a use of the register - // later in the same block. This is local property. - std::vector > PhysRegPartDef; + bool *PhysRegUsed; // PhysRegPartUse - Keep track of which instruction was the last partial use // of a physical register (e.g. on X86 a def of EAX followed by a use of AX). // This is a purely local property. - std::vector PhysRegPartUse; + MachineInstr **PhysRegPartUse; - typedef std::map > PHIVarInfoMap; - - PHIVarInfoMap PHIVarInfo; + // PhysRegPartDef - Keep track of a list of instructions which "partially" + // defined the physical register (e.g. on X86 AX partially defines EAX). + // These are turned into use/mod/write if there is a use of the register + // later in the same block. This is local property. + SmallVector *PhysRegPartDef; + SmallVector *PHIVarInfo; /// addRegisterKilled - We have determined MI kills a register. Look for the /// operand that uses it and mark it as IsKill. From clattner at apple.com Wed Apr 25 15:10:42 2007 From: clattner at apple.com (Chris Lattner) Date: Wed, 25 Apr 2007 13:10:42 -0700 Subject: [llvm-commits] CVS: llvm/lib/AsmParser/llvmAsmParser.y In-Reply-To: <200704251807.l3PI7wdc017875@zion.cs.uiuc.edu> References: <200704251807.l3PI7wdc017875@zion.cs.uiuc.edu> Message-ID: <326EC1DF-DFAB-42F6-A592-4A8C8195392B@apple.com> Don't forget to check in the .cvs files, -Chris On Apr 25, 2007, at 11:07 AM, Anton Korobeynikov wrote: > > > Changes in directory llvm/lib/AsmParser: > > llvmAsmParser.y updated: 1.348 -> 1.349 > --- > Log message: > > Add missed semicolon. Resotre compatibility with older bisons > > > --- > Diffs of the changes: (+1 -1) > > llvmAsmParser.y | 2 +- > 1 files changed, 1 insertion(+), 1 deletion(-) > > > Index: llvm/lib/AsmParser/llvmAsmParser.y > diff -u llvm/lib/AsmParser/llvmAsmParser.y:1.348 llvm/lib/AsmParser/ > llvmAsmParser.y:1.349 > --- llvm/lib/AsmParser/llvmAsmParser.y:1.348 Wed Apr 25 09:27:10 2007 > +++ llvm/lib/AsmParser/llvmAsmParser.y Wed Apr 25 13:07:40 2007 > @@ -1146,7 +1146,7 @@ > GlobalAssign : GlobalName '=' { > $$ = $1; > CHECK_FOR_ERROR > - } > + }; > > GVInternalLinkage > : INTERNAL { $$ = GlobalValue::InternalLinkage; } > > > > _______________________________________________ > llvm-commits mailing list > llvm-commits at cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits From clattner at apple.com Wed Apr 25 15:15:34 2007 From: clattner at apple.com (Chris Lattner) Date: Wed, 25 Apr 2007 13:15:34 -0700 Subject: [llvm-commits] CVS: llvm/lib/VMCore/AsmWriter.cpp Globals.cpp Module.cpp Verifier.cpp In-Reply-To: <200704251428.l3PESA1Z012589@zion.cs.uiuc.edu> References: <200704251428.l3PESA1Z012589@zion.cs.uiuc.edu> Message-ID: <5078CE53-B645-4F89-8186-0EEAC3AAF6B6@apple.com> On Apr 25, 2007, at 7:28 AM, Anton Korobeynikov wrote: > +void GlobalAlias::setAliasee(const GlobalValue *GV) > +{ > + // FIXME: Some checks? > + Aliasee = GV; > +} > + This should assert that GV type matches the alias type. > @@ -277,7 +282,9 @@ > Assert1(!GV.isDeclaration() || > GV.hasExternalLinkage() || > GV.hasDLLImportLinkage() || > - GV.hasExternalWeakLinkage(), > + GV.hasExternalWeakLinkage() || > + (isa(GV) && > + (GV.hasInternalLinkage() || GV.hasWeakLinkage())), > "Global is external, but doesn't have external or dllimport or > weak linkage!", > &GV); Hopefully we can eliminate internal aliases... > > @@ -303,6 +310,16 @@ > visitGlobalValue(GV); > } > > +void Verifier::visitGlobalAlias(GlobalAlias &GA) { > + Assert1(!GA.getName().empty(), > + "Alias name cannot be empty!", &GA); > + Assert1(GA.hasExternalLinkage() || GA.hasInternalLinkage() || > + GA.hasWeakLinkage(), > + "Alias should have external or external weak linkage!", > &GA); This should check that the alias and aliasee have the same type. -Chris From asl at math.spbu.ru Wed Apr 25 15:21:48 2007 From: asl at math.spbu.ru (Anton Korobeynikov) Date: Thu, 26 Apr 2007 00:21:48 +0400 Subject: [llvm-commits] CVS: llvm/lib/AsmParser/llvmAsmParser.y In-Reply-To: <326EC1DF-DFAB-42F6-A592-4A8C8195392B.SS1209SS@apple.com> References: <200704251807.l3PI7wdc017875@zion.cs.uiuc.edu> <326EC1DF-DFAB-42F6-A592-4A8C8195392B.SS1209SS@apple.com> Message-ID: <1177532508.28521.91.camel@asl.dorms.spbu.ru> > Don't forget to check in the .cvs files, No .cvs files change. -- With best regards, Anton Korobeynikov. Faculty of Mathematics & Mechanics, Saint Petersburg State University. From clattner at apple.com Wed Apr 25 15:23:26 2007 From: clattner at apple.com (Chris Lattner) Date: Wed, 25 Apr 2007 13:23:26 -0700 Subject: [llvm-commits] CVS: llvm/lib/AsmParser/llvmAsmParser.y In-Reply-To: <1177532508.28521.91.camel@asl.dorms.spbu.ru> References: <200704251807.l3PI7wdc017875@zion.cs.uiuc.edu> <326EC1DF-DFAB-42F6-A592-4A8C8195392B.SS1209SS@apple.com> <1177532508.28521.91.camel@asl.dorms.spbu.ru> Message-ID: <980FD047-509F-4593-BA54-A8179494B47A@apple.com> On Apr 25, 2007, at 1:21 PM, Anton Korobeynikov wrote: >> Don't forget to check in the .cvs files, > No .cvs files change. Ah, nifty. Thanks, -Chris From clattner at apple.com Wed Apr 25 15:25:30 2007 From: clattner at apple.com (Chris Lattner) Date: Wed, 25 Apr 2007 13:25:30 -0700 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/AsmPrinter.cpp In-Reply-To: <200704251428.l3PES0uo012532@zion.cs.uiuc.edu> References: <200704251428.l3PES0uo012532@zion.cs.uiuc.edu> Message-ID: > + if (TAI->getSetDirective()) { > + if (M.alias_size()) > + SwitchToTextSection(TAI->getTextSection()); M.alias_size is linear time (okay okay, in the number of aliases, but still...). Please use !M.alias_empty() -Chris From clattner at apple.com Wed Apr 25 15:28:18 2007 From: clattner at apple.com (Chris Lattner) Date: Wed, 25 Apr 2007 13:28:18 -0700 Subject: [llvm-commits] CVS: llvm/docs/BytecodeFormat.html LangRef.html In-Reply-To: <200704251428.l3PES0ZK012530@zion.cs.uiuc.edu> References: <200704251428.l3PES0ZK012530@zion.cs.uiuc.edu> Message-ID: On Apr 25, 2007, at 7:28 AM, Anton Korobeynikov wrote: > --- llvm/docs/LangRef.html:1.237 Sun Apr 22 09:56:37 2007 > +++ llvm/docs/LangRef.html Wed Apr 25 09:27:10 2007 > @@ -498,7 +498,8 @@ >

It is illegal for a function declaration > to have any linkage type other than "externally visible", > dllimport, > or extern_weak.

> - > +

Aliases can have only external, internal and > weak > +linkages. >

What do these mean? What semantics does the linker have? Why isn't it always valid to RAUW an internal alias, then delete it? > + > +
> + Aliases > +
Should this section go in the TOC at the start of the file? > +
> +

Aliases act as "second name" for the aliasee value (which can > be either > + function or global variable). Aliases may have an > + optional linkage type, and an > + optional visibility style.

I suggest mentioning that aliases are only supported on some targets. Is there any way to emulate them on targets that don't support them? Also, can you please add CBE support for them? -Chris From clattner at apple.com Wed Apr 25 15:31:18 2007 From: clattner at apple.com (Chris Lattner) Date: Wed, 25 Apr 2007 13:31:18 -0700 Subject: [llvm-commits] CVS: llvm/lib/Transforms/IPO/GlobalDCE.cpp In-Reply-To: <200704251428.l3PES166012545@zion.cs.uiuc.edu> References: <200704251428.l3PES166012545@zion.cs.uiuc.edu> Message-ID: On Apr 25, 2007, at 7:28 AM, Anton Korobeynikov wrote: > > > + for (Module::alias_iterator I = M.alias_begin(), E = M.alias_end(); > + I != E; ++I) { > + Changed |= RemoveUnusedGlobalValue(*I); RemoveUnusedGlobalValue shouldn't be called here. > + // Aliases are always needed even if they are not used. > + GlobalIsNeeded(I); This should mark I->getAliasee() as needed, not the alias. > + } > + > // Now that all globals which are needed are in the AliveGlobals > set, we loop > // through the program, deleting those which are not alive. > // > @@ -135,6 +143,9 @@ > // referenced by the initializer to the alive set. > if (GV->hasInitializer()) > MarkUsedGlobalsAsNeeded(GV->getInitializer()); > + } else if (GlobalAlias *GA = dyn_cast(G)) { > + // If this is a global alias we also need it's aliasee > + GlobalIsNeeded(const_cast(GA->getAliasee())); If you do the above change, you can delete this hunk. Why do you need the const_cast? -Chris From clattner at apple.com Wed Apr 25 15:42:45 2007 From: clattner at apple.com (Chris Lattner) Date: Wed, 25 Apr 2007 13:42:45 -0700 Subject: [llvm-commits] CVS: llvm/test/Feature/aliases.ll In-Reply-To: <200704251428.l3PES1Kx012550@zion.cs.uiuc.edu> References: <200704251428.l3PES1Kx012550@zion.cs.uiuc.edu> Message-ID: <3F0BD243-188C-4345-A887-4E05012E4632@apple.com> > Implement aliases. This fixes PR1017: http://llvm.org/PR1017 and > it's dependent bugs. CFE part will follow. One thing that just occurred to me. When you switch GlobalAlias to have a Use for the aliasee, RAUW will work on globals that are aliased. Unfortunately, various bits of code (like the CFE) want to replace globals with other globals of different types. In practice, this means that these clients RAUW the global with a constant expr bitcast of the new global. This implies that aliases should allow either a global value or a bitcast of a global value as their aliasee: @A = alias i32* (bitcast f32* @F to i32*) What do you think? -Chris From clattner at apple.com Wed Apr 25 15:48:32 2007 From: clattner at apple.com (Chris Lattner) Date: Wed, 25 Apr 2007 13:48:32 -0700 Subject: [llvm-commits] CVS: llvm/include/llvm/Function.h GlobalValue.h GlobalVariable.h Module.h Value.h ValueSymbolTable.h In-Reply-To: <200704251428.l3PES7pX012571@zion.cs.uiuc.edu> References: <200704251428.l3PES7pX012571@zion.cs.uiuc.edu> Message-ID: > @@ -121,6 +121,16 @@ > /// value is outside of the current translation unit... > virtual bool isDeclaration() const = 0; > > + /// removeFromParent - This method unlinks 'this' from the > containing module, > + /// but does not delete it. > + /// > + virtual void removeFromParent() = 0; > + > + /// eraseFromParent - This method unlinks 'this' from the > containing module > + /// and deletes it. > + /// > + virtual void eraseFromParent() = 0; Why do these all need to be virtual and accessible from GlobalValue? Otherwise, looks good! -Chris From asl at math.spbu.ru Wed Apr 25 15:53:39 2007 From: asl at math.spbu.ru (Anton Korobeynikov) Date: Thu, 26 Apr 2007 00:53:39 +0400 Subject: [llvm-commits] CVS: llvm/include/llvm/Function.h GlobalValue.h GlobalVariable.h Module.h Value.h ValueSymbolTable.h In-Reply-To: References: <200704251428.l3PES7pX012571@zion.cs.uiuc.edu> Message-ID: <1177534419.28521.93.camel@asl.dorms.spbu.ru> Hello, Chris. > Why do these all need to be virtual and accessible from GlobalValue? For llvm-gcc patch. Or, it's better to insert three-way cast there? -- With best regards, Anton Korobeynikov. Faculty of Mathematics & Mechanics, Saint Petersburg State University. From clattner at apple.com Wed Apr 25 15:55:49 2007 From: clattner at apple.com (Chris Lattner) Date: Wed, 25 Apr 2007 13:55:49 -0700 Subject: [llvm-commits] CVS: llvm/include/llvm/Function.h GlobalValue.h GlobalVariable.h Module.h Value.h ValueSymbolTable.h In-Reply-To: <1177534419.28521.93.camel@asl.dorms.spbu.ru> References: <200704251428.l3PES7pX012571@zion.cs.uiuc.edu> <1177534419.28521.93.camel@asl.dorms.spbu.ru> Message-ID: <96EF100F-8854-44B2-9474-DCD06068DA71@apple.com> On Apr 25, 2007, at 1:53 PM, Anton Korobeynikov wrote: > Hello, Chris. > >> Why do these all need to be virtual and accessible from GlobalValue? > For llvm-gcc patch. Or, it's better to insert three-way cast there? I'd prefer to do the three way compare here, -Chris From isanbard at gmail.com Wed Apr 25 16:32:07 2007 From: isanbard at gmail.com (Bill Wendling) Date: Wed, 25 Apr 2007 16:32:07 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/X86/X86.td X86InstrInfo.td Message-ID: <200704252132.l3PLW7ZA021986@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/X86: X86.td updated: 1.30 -> 1.31 X86InstrInfo.td updated: 1.305 -> 1.306 --- Log message: Add SSSE3 as a feature of Core2. Add MMX registers to the list of registers clobbered by a call. --- Diffs of the changes: (+2 -1) X86.td | 2 +- X86InstrInfo.td | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) Index: llvm/lib/Target/X86/X86.td diff -u llvm/lib/Target/X86/X86.td:1.30 llvm/lib/Target/X86/X86.td:1.31 --- llvm/lib/Target/X86/X86.td:1.30 Tue Apr 10 17:10:25 2007 +++ llvm/lib/Target/X86/X86.td Wed Apr 25 16:31:48 2007 @@ -64,7 +64,7 @@ def : Proc<"nocona", [FeatureMMX, FeatureSSE1, FeatureSSE2, FeatureSSE3, Feature64Bit]>; def : Proc<"core2", [FeatureMMX, FeatureSSE1, FeatureSSE2, - FeatureSSE3, Feature64Bit]>; + FeatureSSE3, FeatureSSSE3, Feature64Bit]>; def : Proc<"k6", [FeatureMMX]>; def : Proc<"k6-2", [FeatureMMX, Feature3DNow]>; Index: llvm/lib/Target/X86/X86InstrInfo.td diff -u llvm/lib/Target/X86/X86InstrInfo.td:1.305 llvm/lib/Target/X86/X86InstrInfo.td:1.306 --- llvm/lib/Target/X86/X86InstrInfo.td:1.305 Sun Apr 22 20:28:10 2007 +++ llvm/lib/Target/X86/X86InstrInfo.td Wed Apr 25 16:31:48 2007 @@ -458,6 +458,7 @@ let isCall = 1, noResults = 1 in // All calls clobber the non-callee saved registers... let Defs = [EAX, ECX, EDX, FP0, FP1, FP2, FP3, FP4, FP5, FP6, ST0, + MM0, MM1, MM2, MM3, MM4, MM5, MM6, MM7, XMM0, XMM1, XMM2, XMM3, XMM4, XMM5, XMM6, XMM7] in { def CALLpcrel32 : I<0xE8, RawFrm, (ops i32imm:$dst, variable_ops), "call ${dst:call}", []>; From evan.cheng at apple.com Wed Apr 25 16:34:28 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Wed, 25 Apr 2007 16:34:28 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/LiveVariables.cpp Message-ID: <200704252134.l3PLYS7o022081@zion.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen: LiveVariables.cpp updated: 1.75 -> 1.76 --- Log message: Clean up. --- Diffs of the changes: (+1 -3) LiveVariables.cpp | 4 +--- 1 files changed, 1 insertion(+), 3 deletions(-) Index: llvm/lib/CodeGen/LiveVariables.cpp diff -u llvm/lib/CodeGen/LiveVariables.cpp:1.75 llvm/lib/CodeGen/LiveVariables.cpp:1.76 --- llvm/lib/CodeGen/LiveVariables.cpp:1.75 Wed Apr 25 14:34:00 2007 +++ llvm/lib/CodeGen/LiveVariables.cpp Wed Apr 25 16:34:08 2007 @@ -438,10 +438,8 @@ HandlePhysRegDef(i, 0); // Clear some states between BB's. These are purely local information. - for (unsigned i = 0; i != NumRegs; ++i) { + for (unsigned i = 0; i != NumRegs; ++i) PhysRegPartDef[i].clear(); - //PhysRegPartUse[i] = NULL; - } std::fill(PhysRegPartUse, PhysRegPartUse + NumRegs, (MachineInstr*)0); } From bwendlin at apple.com Wed Apr 25 16:43:21 2007 From: bwendlin at apple.com (bwendlin at apple.com) Date: Wed, 25 Apr 2007 14:43:21 -0700 (PDT) Subject: [llvm-commits] [126546] Build the vectors in the proper order. Message-ID: <20070425214321.54EFD106ED5AC@src> Revision: 126546 Author: bwendlin Date: 2007-04-25 14:43:21 -0700 (Wed, 25 Apr 2007) Log Message: ----------- Build the vectors in the proper order. GCC builds them in the same way we do. Modified Paths: -------------- apple-local/branches/llvm/gcc/config/i386/llvm-i386.cpp Modified: apple-local/branches/llvm/gcc/config/i386/llvm-i386.cpp =================================================================== --- apple-local/branches/llvm/gcc/config/i386/llvm-i386.cpp 2007-04-25 17:55:27 UTC (rev 126545) +++ apple-local/branches/llvm/gcc/config/i386/llvm-i386.cpp 2007-04-25 21:43:21 UTC (rev 126546) @@ -591,22 +591,22 @@ Ops[i] = CastInst::createIntegerCast(Ops[i], Type::Int32Ty, false, "tmp", CurBB); - Result = BuildVector(Ops[1], Ops[0], NULL); + Result = BuildVector(Ops[0], Ops[1], NULL); return true; case IX86_BUILTIN_VEC_INIT_V4HI: for (unsigned i = 0; i < 4; ++i) Ops[i] = CastInst::createIntegerCast(Ops[i], Type::Int16Ty, false, "tmp", CurBB); - Result = BuildVector(Ops[3], Ops[2], Ops[1], Ops[0], NULL); + Result = BuildVector(Ops[0], Ops[1], Ops[2], Ops[3], NULL); return true; case IX86_BUILTIN_VEC_INIT_V8QI: { for (unsigned i = 0; i < 8; ++i) Ops[i] = CastInst::createIntegerCast(Ops[i], Type::Int8Ty, false, "tmp", CurBB); - Result = BuildVector(Ops[7], Ops[6], Ops[5], Ops[4], - Ops[3], Ops[2], Ops[1], Ops[0], NULL); + Result = BuildVector(Ops[0], Ops[1], Ops[2], Ops[3], + Ops[4], Ops[5], Ops[6], Ops[7], NULL); return true; } case IX86_BUILTIN_VEC_EXT_V2SI: From isanbard at gmail.com Wed Apr 25 16:58:35 2007 From: isanbard at gmail.com (Bill Wendling) Date: Wed, 25 Apr 2007 16:58:35 -0500 Subject: [llvm-commits] CVS: llvm/test/CodeGen/X86/2007-04-25-MMX-PADDQ.ll Message-ID: <200704252158.l3PLwZCg022571@zion.cs.uiuc.edu> Changes in directory llvm/test/CodeGen/X86: 2007-04-25-MMX-PADDQ.ll added (r1.1) --- Log message: Testcase for codegen bug. --- Diffs of the changes: (+25 -0) 2007-04-25-MMX-PADDQ.ll | 25 +++++++++++++++++++++++++ 1 files changed, 25 insertions(+) Index: llvm/test/CodeGen/X86/2007-04-25-MMX-PADDQ.ll diff -c /dev/null llvm/test/CodeGen/X86/2007-04-25-MMX-PADDQ.ll:1.1 *** /dev/null Wed Apr 25 16:58:27 2007 --- llvm/test/CodeGen/X86/2007-04-25-MMX-PADDQ.ll Wed Apr 25 16:58:17 2007 *************** *** 0 **** --- 1,25 ---- + ; RUN: llvm-as < %s | llc -o - -march=x86 -mattr=+mmx | grep paddq | wc -l | grep 2 && + ; RUN: llvm-as < %s | llc -o - -march=x86 -mattr=+mmx | grep movq | wc -l | grep 3 + + define <1 x i64> @unsigned_add3(<1 x i64>* %a, <1 x i64>* %b, i32 %count) { + entry: + %tmp2942 = icmp eq i32 %count, 0 ; [#uses=1] + br i1 %tmp2942, label %bb31, label %bb26 + + bb26: ; preds = %bb26, %entry + %i.037.0 = phi i32 [ 0, %entry ], [ %tmp25, %bb26 ] ; [#uses=3] + %sum.035.0 = phi <1 x i64> [ zeroinitializer, %entry ], [ %tmp22, %bb26 ] ; <<1 x i64>> [#uses=1] + %tmp13 = getelementptr <1 x i64>* %b, i32 %i.037.0 ; <<1 x i64>*> [#uses=1] + %tmp14 = load <1 x i64>* %tmp13 ; <<1 x i64>> [#uses=1] + %tmp18 = getelementptr <1 x i64>* %a, i32 %i.037.0 ; <<1 x i64>*> [#uses=1] + %tmp19 = load <1 x i64>* %tmp18 ; <<1 x i64>> [#uses=1] + %tmp21 = add <1 x i64> %tmp19, %tmp14 ; <<1 x i64>> [#uses=1] + %tmp22 = add <1 x i64> %tmp21, %sum.035.0 ; <<1 x i64>> [#uses=2] + %tmp25 = add i32 %i.037.0, 1 ; [#uses=2] + %tmp29 = icmp ult i32 %tmp25, %count ; [#uses=1] + br i1 %tmp29, label %bb26, label %bb31 + + bb31: ; preds = %bb26, %entry + %sum.035.1 = phi <1 x i64> [ zeroinitializer, %entry ], [ %tmp22, %bb26 ] ; <<1 x i64>> [#uses=1] + ret <1 x i64> %sum.035.1 + } From evan.cheng at apple.com Wed Apr 25 17:10:34 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Wed, 25 Apr 2007 17:10:34 -0500 Subject: [llvm-commits] CVS: llvm/include/llvm/CodeGen/MachineFunction.h Message-ID: <200704252210.l3PMAYHr022870@zion.cs.uiuc.edu> Changes in directory llvm/include/llvm/CodeGen: MachineFunction.h updated: 1.65 -> 1.66 --- Log message: Change UsedPhysRegs from array bool to BitVector to save some space. Setting / getting its states now go through MachineFunction. --- Diffs of the changes: (+12 -20) MachineFunction.h | 32 ++++++++++++-------------------- 1 files changed, 12 insertions(+), 20 deletions(-) Index: llvm/include/llvm/CodeGen/MachineFunction.h diff -u llvm/include/llvm/CodeGen/MachineFunction.h:1.65 llvm/include/llvm/CodeGen/MachineFunction.h:1.66 --- llvm/include/llvm/CodeGen/MachineFunction.h:1.65 Wed Feb 14 20:55:51 2007 +++ llvm/include/llvm/CodeGen/MachineFunction.h Wed Apr 25 17:10:09 2007 @@ -21,6 +21,7 @@ #include "llvm/CodeGen/MachineModuleInfo.h" #include "llvm/CodeGen/MachineBasicBlock.h" #include "llvm/Support/Annotation.h" +#include "llvm/ADT/BitVector.h" namespace llvm { @@ -103,12 +104,12 @@ // numbered and this vector keeps track of the mapping from ID's to MBB's. std::vector MBBNumbering; - /// UsedPhysRegs - This is a new[]'d array of bools that is computed and set - /// by the register allocator, and must be kept up to date by passes that run - /// after register allocation (though most don't modify this). This is used + /// UsedPhysRegs - This is a bit vector that is computed and set by the + /// register allocator, and must be kept up to date by passes that run after + /// register allocation (though most don't modify this). This is used /// so that the code generator knows which callee save registers to save and /// for other target specific uses. - bool *UsedPhysRegs; + BitVector UsedPhysRegs; /// LiveIns/LiveOuts - Keep track of the physical registers that are /// livein/liveout of the function. Live in values are typically arguments in @@ -170,26 +171,17 @@ return const_cast(this)->getInfo(); } - /// setUsedPhysRegs - The register allocator should call this to initialized - /// the UsedPhysRegs set. This should be passed a new[]'d array with entries - /// for all of the physical registers that the target supports. Each array - /// entry should be set to true iff the physical register is used within the - /// function. - void setUsedPhysRegs(bool *UPR) { UsedPhysRegs = UPR; } - - /// getUsedPhysregs - This returns the UsedPhysRegs array. This returns null - /// before register allocation. - bool *getUsedPhysregs() { return UsedPhysRegs; } - const bool *getUsedPhysregs() const { return UsedPhysRegs; } - /// isPhysRegUsed - Return true if the specified register is used in this /// function. This only works after register allocation. bool isPhysRegUsed(unsigned Reg) const { return UsedPhysRegs[Reg]; } - /// changePhyRegUsed - This method allows code that runs after register - /// allocation to keep the PhysRegsUsed array up-to-date. - void changePhyRegUsed(unsigned Reg, bool State) { UsedPhysRegs[Reg] = State; } - + /// setPhysRegUsed - Mark the specified register used in this function. + /// This should only be called during and after register allocation. + void setPhysRegUsed(unsigned Reg) { UsedPhysRegs[Reg] = true; } + + /// setPhysRegUnused - Mark the specified register unused in this function. + /// This should only be called during and after register allocation. + void setPhysRegUnused(unsigned Reg) { UsedPhysRegs[Reg] = false; } // LiveIn/LiveOut management methods. From evan.cheng at apple.com Wed Apr 25 17:10:34 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Wed, 25 Apr 2007 17:10:34 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/MachineFunction.cpp Message-ID: <200704252210.l3PMAYtV022875@zion.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen: MachineFunction.cpp updated: 1.110 -> 1.111 --- Log message: Change UsedPhysRegs from array bool to BitVector to save some space. Setting / getting its states now go through MachineFunction. --- Diffs of the changes: (+2 -2) MachineFunction.cpp | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) Index: llvm/lib/CodeGen/MachineFunction.cpp diff -u llvm/lib/CodeGen/MachineFunction.cpp:1.110 llvm/lib/CodeGen/MachineFunction.cpp:1.111 --- llvm/lib/CodeGen/MachineFunction.cpp:1.110 Tue Apr 24 23:20:02 2007 +++ llvm/lib/CodeGen/MachineFunction.cpp Wed Apr 25 17:10:09 2007 @@ -114,11 +114,12 @@ MachineFunction::MachineFunction(const Function *F, const TargetMachine &TM) - : Annotation(MF_AID), Fn(F), Target(TM), UsedPhysRegs(0) { + : Annotation(MF_AID), Fn(F), Target(TM) { SSARegMapping = new SSARegMap(); MFInfo = 0; FrameInfo = new MachineFrameInfo(); ConstantPool = new MachineConstantPool(TM.getTargetData()); + UsedPhysRegs.resize(TM.getRegisterInfo()->getNumRegs()); // Set up jump table. const TargetData &TD = *TM.getTargetData(); @@ -138,7 +139,6 @@ delete FrameInfo; delete ConstantPool; delete JumpTableInfo; - delete[] UsedPhysRegs; } From evan.cheng at apple.com Wed Apr 25 17:12:06 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Wed, 25 Apr 2007 17:12:06 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/PrologEpilogInserter.cpp RegAllocLinearScan.cpp RegAllocLocal.cpp RegAllocSimple.cpp VirtRegMap.cpp Message-ID: <200704252212.l3PMC60Q022935@zion.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen: PrologEpilogInserter.cpp updated: 1.81 -> 1.82 RegAllocLinearScan.cpp updated: 1.144 -> 1.145 RegAllocLocal.cpp updated: 1.101 -> 1.102 RegAllocSimple.cpp updated: 1.82 -> 1.83 VirtRegMap.cpp updated: 1.109 -> 1.110 --- Log message: Match MachineFunction::UsedPhysRegs changes. --- Diffs of the changes: (+25 -48) PrologEpilogInserter.cpp | 5 ++--- RegAllocLinearScan.cpp | 7 +------ RegAllocLocal.cpp | 21 ++++++++------------- RegAllocSimple.cpp | 9 ++------- VirtRegMap.cpp | 31 ++++++++++++------------------- 5 files changed, 25 insertions(+), 48 deletions(-) Index: llvm/lib/CodeGen/PrologEpilogInserter.cpp diff -u llvm/lib/CodeGen/PrologEpilogInserter.cpp:1.81 llvm/lib/CodeGen/PrologEpilogInserter.cpp:1.82 --- llvm/lib/CodeGen/PrologEpilogInserter.cpp:1.81 Tue Apr 24 23:28:40 2007 +++ llvm/lib/CodeGen/PrologEpilogInserter.cpp Wed Apr 25 17:11:48 2007 @@ -156,19 +156,18 @@ // Now figure out which *callee saved* registers are modified by the current // function, thus needing to be saved and restored in the prolog/epilog. // - const bool *PhysRegsUsed = Fn.getUsedPhysregs(); const TargetRegisterClass* const *CSRegClasses = RegInfo->getCalleeSavedRegClasses(); std::vector CSI; for (unsigned i = 0; CSRegs[i]; ++i) { unsigned Reg = CSRegs[i]; - if (PhysRegsUsed[Reg]) { + if (Fn.isPhysRegUsed(Reg)) { // If the reg is modified, save it! CSI.push_back(CalleeSavedInfo(Reg, CSRegClasses[i])); } else { for (const unsigned *AliasSet = RegInfo->getAliasSet(Reg); *AliasSet; ++AliasSet) { // Check alias registers too. - if (PhysRegsUsed[*AliasSet]) { + if (Fn.isPhysRegUsed(*AliasSet)) { CSI.push_back(CalleeSavedInfo(Reg, CSRegClasses[i])); break; } Index: llvm/lib/CodeGen/RegAllocLinearScan.cpp diff -u llvm/lib/CodeGen/RegAllocLinearScan.cpp:1.144 llvm/lib/CodeGen/RegAllocLinearScan.cpp:1.145 --- llvm/lib/CodeGen/RegAllocLinearScan.cpp:1.144 Wed Apr 25 02:18:20 2007 +++ llvm/lib/CodeGen/RegAllocLinearScan.cpp Wed Apr 25 17:11:48 2007 @@ -61,7 +61,6 @@ const TargetMachine* tm_; const MRegisterInfo* mri_; LiveIntervals* li_; - bool *PhysRegsUsed; /// handled_ - Intervals are added to the handled_ set in the order of their /// start value. This is uses for backtracking. @@ -194,10 +193,6 @@ if (RelatedRegClasses.empty()) ComputeRelatedRegClasses(); - PhysRegsUsed = new bool[mri_->getNumRegs()]; - std::fill(PhysRegsUsed, PhysRegsUsed+mri_->getNumRegs(), false); - fn.setUsedPhysRegs(PhysRegsUsed); - if (!prt_.get()) prt_.reset(new PhysRegTracker(*mri_)); vrm_.reset(new VirtRegMap(*mf_)); if (!spiller_.get()) spiller_.reset(createSpiller()); @@ -231,7 +226,7 @@ for (LiveIntervals::iterator i = li_->begin(), e = li_->end(); i != e; ++i) { if (MRegisterInfo::isPhysicalRegister(i->second.reg)) { - PhysRegsUsed[i->second.reg] = true; + mf_->setPhysRegUsed(i->second.reg); fixed_.push_back(std::make_pair(&i->second, i->second.begin())); } else unhandled_.push(&i->second); Index: llvm/lib/CodeGen/RegAllocLocal.cpp diff -u llvm/lib/CodeGen/RegAllocLocal.cpp:1.101 llvm/lib/CodeGen/RegAllocLocal.cpp:1.102 --- llvm/lib/CodeGen/RegAllocLocal.cpp:1.101 Wed Feb 14 23:59:24 2007 +++ llvm/lib/CodeGen/RegAllocLocal.cpp Wed Apr 25 17:11:48 2007 @@ -47,7 +47,6 @@ MachineFunction *MF; const MRegisterInfo *RegInfo; LiveVariables *LV; - bool *PhysRegsEverUsed; // StackSlotForVirtReg - Maps virtual regs to the frame index where these // values are spilled. @@ -511,7 +510,7 @@ RegInfo->loadRegFromStackSlot(MBB, MI, PhysReg, FrameIndex, RC); ++NumLoads; // Update statistics - PhysRegsEverUsed[PhysReg] = true; + MF->setPhysRegUsed(PhysReg); MI->getOperand(OpNum).setReg(PhysReg); // Assign the input register return MI; } @@ -532,7 +531,7 @@ for (MachineFunction::livein_iterator I = MF->livein_begin(), E = MF->livein_end(); I != E; ++I) { unsigned Reg = I->first; - PhysRegsEverUsed[Reg] = true; + MF->setPhysRegUsed(Reg); PhysRegsUsed[Reg] = 0; // It is free and reserved now PhysRegsUseOrder.push_back(Reg); for (const unsigned *AliasSet = RegInfo->getAliasSet(Reg); @@ -540,7 +539,7 @@ if (PhysRegsUsed[*AliasSet] != -2) { PhysRegsUseOrder.push_back(*AliasSet); PhysRegsUsed[*AliasSet] = 0; // It is free and reserved now - PhysRegsEverUsed[*AliasSet] = true; + MF->setPhysRegUsed(*AliasSet); } } } @@ -630,7 +629,7 @@ unsigned Reg = MO.getReg(); if (PhysRegsUsed[Reg] == -2) continue; // Something like ESP. - PhysRegsEverUsed[Reg] = true; + MF->setPhysRegUsed(Reg); spillPhysReg(MBB, MI, Reg, true); // Spill any existing value in reg PhysRegsUsed[Reg] = 0; // It is free and reserved now PhysRegsUseOrder.push_back(Reg); @@ -639,7 +638,7 @@ if (PhysRegsUsed[*AliasSet] != -2) { PhysRegsUseOrder.push_back(*AliasSet); PhysRegsUsed[*AliasSet] = 0; // It is free and reserved now - PhysRegsEverUsed[*AliasSet] = true; + MF->setPhysRegUsed(*AliasSet); } } } @@ -656,7 +655,7 @@ PhysRegsUseOrder.push_back(Reg); PhysRegsUsed[Reg] = 0; // It is free and reserved now } - PhysRegsEverUsed[Reg] = true; + MF->setPhysRegUsed(Reg); for (const unsigned *AliasSet = RegInfo->getAliasSet(Reg); *AliasSet; ++AliasSet) { @@ -665,7 +664,7 @@ PhysRegsUseOrder.push_back(*AliasSet); PhysRegsUsed[*AliasSet] = 0; // It is free and reserved now } - PhysRegsEverUsed[*AliasSet] = true; + MF->setPhysRegUsed(*AliasSet); } } } @@ -693,7 +692,7 @@ // If DestVirtReg already has a value, use it. if (!(DestPhysReg = getVirt2PhysRegMapSlot(DestVirtReg))) DestPhysReg = getReg(MBB, MI, DestVirtReg); - PhysRegsEverUsed[DestPhysReg] = true; + MF->setPhysRegUsed(DestPhysReg); markVirtRegModified(DestVirtReg); MI->getOperand(i).setReg(DestPhysReg); // Assign the output register } @@ -779,10 +778,6 @@ RegInfo = TM->getRegisterInfo(); LV = &getAnalysis(); - PhysRegsEverUsed = new bool[RegInfo->getNumRegs()]; - std::fill(PhysRegsEverUsed, PhysRegsEverUsed+RegInfo->getNumRegs(), false); - Fn.setUsedPhysRegs(PhysRegsEverUsed); - PhysRegsUsed.assign(RegInfo->getNumRegs(), -1); // At various places we want to efficiently check to see whether a register Index: llvm/lib/CodeGen/RegAllocSimple.cpp diff -u llvm/lib/CodeGen/RegAllocSimple.cpp:1.82 llvm/lib/CodeGen/RegAllocSimple.cpp:1.83 --- llvm/lib/CodeGen/RegAllocSimple.cpp:1.82 Tue Dec 19 16:41:21 2006 +++ llvm/lib/CodeGen/RegAllocSimple.cpp Wed Apr 25 17:11:48 2007 @@ -41,7 +41,6 @@ MachineFunction *MF; const TargetMachine *TM; const MRegisterInfo *RegInfo; - bool *PhysRegsEverUsed; // StackSlotForVirtReg - Maps SSA Regs => frame index on the stack where // these values are spilled @@ -126,7 +125,7 @@ unsigned PhysReg = *(RI+regIdx); if (!RegsUsed[PhysReg]) { - PhysRegsEverUsed[PhysReg] = true; + MF->setPhysRegUsed(PhysReg); return PhysReg; } } @@ -178,7 +177,7 @@ if (Desc.ImplicitDefs) { for (Regs = Desc.ImplicitDefs; *Regs; ++Regs) { RegsUsed[*Regs] = true; - PhysRegsEverUsed[*Regs] = true; + MF->setPhysRegUsed(*Regs); } } @@ -236,10 +235,6 @@ TM = &MF->getTarget(); RegInfo = TM->getRegisterInfo(); - PhysRegsEverUsed = new bool[RegInfo->getNumRegs()]; - std::fill(PhysRegsEverUsed, PhysRegsEverUsed+RegInfo->getNumRegs(), false); - Fn.setUsedPhysRegs(PhysRegsEverUsed); - // Loop over all of the basic blocks, eliminating virtual register references for (MachineFunction::iterator MBB = Fn.begin(), MBBe = Fn.end(); MBB != MBBe; ++MBB) Index: llvm/lib/CodeGen/VirtRegMap.cpp diff -u llvm/lib/CodeGen/VirtRegMap.cpp:1.109 llvm/lib/CodeGen/VirtRegMap.cpp:1.110 --- llvm/lib/CodeGen/VirtRegMap.cpp:1.109 Wed Apr 4 02:40:01 2007 +++ llvm/lib/CodeGen/VirtRegMap.cpp Wed Apr 25 17:11:48 2007 @@ -174,7 +174,6 @@ DOUT << "********** Function: " << MF.getFunction()->getName() << '\n'; const TargetMachine &TM = MF.getTarget(); const MRegisterInfo &MRI = *TM.getRegisterInfo(); - bool *PhysRegsUsed = MF.getUsedPhysregs(); // LoadedRegs - Keep track of which vregs are loaded, so that we only load // each vreg once (in the case where a spilled vreg is used by multiple @@ -214,10 +213,10 @@ ++NumStores; } } - PhysRegsUsed[PhysReg] = true; + MF.setPhysRegUsed(PhysReg); MI.getOperand(i).setReg(PhysReg); } else { - PhysRegsUsed[MO.getReg()] = true; + MF.setPhysRegUsed(MO.getReg()); } } @@ -648,8 +647,7 @@ // same stack slot, the original store is deleted. std::map MaybeDeadStores; - bool *PhysRegsUsed = MBB.getParent()->getUsedPhysregs(); - + MachineFunction &MF = *MBB.getParent(); for (MachineBasicBlock::iterator MII = MBB.begin(), E = MBB.end(); MII != E; ) { MachineInstr &MI = *MII; @@ -688,7 +686,7 @@ const unsigned *ImpDef = TID->ImplicitDefs; if (ImpDef) { for ( ; *ImpDef; ++ImpDef) { - PhysRegsUsed[*ImpDef] = true; + MF.setPhysRegUsed(*ImpDef); ReusedOperands.markClobbered(*ImpDef); Spills.ClobberPhysReg(*ImpDef); } @@ -703,7 +701,7 @@ if (MRegisterInfo::isPhysicalRegister(MO.getReg())) { // Ignore physregs for spilling, but remember that it is used by this // function. - PhysRegsUsed[MO.getReg()] = true; + MF.setPhysRegUsed(MO.getReg()); ReusedOperands.markClobbered(MO.getReg()); continue; } @@ -715,7 +713,7 @@ if (!VRM.hasStackSlot(VirtReg)) { // This virtual register was assigned a physreg! unsigned Phys = VRM.getPhys(VirtReg); - PhysRegsUsed[Phys] = true; + MF.setPhysRegUsed(Phys); if (MO.isDef()) ReusedOperands.markClobbered(Phys); MI.getOperand(i).setReg(Phys); @@ -842,10 +840,8 @@ continue; } - const TargetRegisterClass* RC = - MBB.getParent()->getSSARegMap()->getRegClass(VirtReg); - - PhysRegsUsed[DesignatedReg] = true; + const TargetRegisterClass* RC = MF.getSSARegMap()->getRegClass(VirtReg); + MF.setPhysRegUsed(DesignatedReg); ReusedOperands.markClobbered(DesignatedReg); MRI->copyRegToReg(MBB, &MI, DesignatedReg, PhysReg, RC); @@ -883,8 +879,7 @@ // Otherwise, reload it and remember that we have it. PhysReg = VRM.getPhys(VirtReg); assert(PhysReg && "Must map virtreg to physreg!"); - const TargetRegisterClass* RC = - MBB.getParent()->getSSARegMap()->getRegClass(VirtReg); + const TargetRegisterClass* RC = MF.getSSARegMap()->getRegClass(VirtReg); // Note that, if we reused a register for a previous operand, the // register we want to reload into might not actually be @@ -894,7 +889,7 @@ PhysReg = ReusedOperands.GetRegForReload(PhysReg, &MI, Spills, MaybeDeadStores); - PhysRegsUsed[PhysReg] = true; + MF.setPhysRegUsed(PhysReg); ReusedOperands.markClobbered(PhysReg); if (doReMat) { MRI->reMaterialize(MBB, &MI, PhysReg, VRM.getReMaterializedMI(VirtReg)); @@ -947,7 +942,6 @@ MachineInstr *SSMI = NULL; if (unsigned InReg = Spills.getSpillSlotPhysReg(SS, SSMI)) { DOUT << "Promoted Load To Copy: " << MI; - MachineFunction &MF = *MBB.getParent(); if (DestReg != InReg) { MRI->copyRegToReg(MBB, &MI, DestReg, InReg, MF.getSSARegMap()->getRegClass(VirtReg)); @@ -1081,8 +1075,7 @@ // The only vregs left are stack slot definitions. int StackSlot = VRM.getStackSlot(VirtReg); - const TargetRegisterClass *RC = - MBB.getParent()->getSSARegMap()->getRegClass(VirtReg); + const TargetRegisterClass *RC = MF.getSSARegMap()->getRegClass(VirtReg); // If this def is part of a two-address operand, make sure to execute // the store from the correct physical register. @@ -1100,7 +1093,7 @@ } } - PhysRegsUsed[PhysReg] = true; + MF.setPhysRegUsed(PhysReg); ReusedOperands.markClobbered(PhysReg); MRI->storeRegToStackSlot(MBB, next(MII), PhysReg, StackSlot, RC); DOUT << "Store:\t" << *next(MII); From evan.cheng at apple.com Wed Apr 25 17:13:51 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Wed, 25 Apr 2007 17:13:51 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/ARM/ARMRegisterInfo.cpp Message-ID: <200704252213.l3PMDpun022987@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/ARM: ARMRegisterInfo.cpp updated: 1.87 -> 1.88 --- Log message: Match MachineFunction::UsedPhysRegs changes. --- Diffs of the changes: (+6 -9) ARMRegisterInfo.cpp | 15 ++++++--------- 1 files changed, 6 insertions(+), 9 deletions(-) Index: llvm/lib/Target/ARM/ARMRegisterInfo.cpp diff -u llvm/lib/Target/ARM/ARMRegisterInfo.cpp:1.87 llvm/lib/Target/ARM/ARMRegisterInfo.cpp:1.88 --- llvm/lib/Target/ARM/ARMRegisterInfo.cpp:1.87 Thu Apr 19 09:09:38 2007 +++ llvm/lib/Target/ARM/ARMRegisterInfo.cpp Wed Apr 25 17:13:27 2007 @@ -350,9 +350,6 @@ // Some targets reserve R9. if (STI.isR9Reserved()) Reserved.set(ARM::R9); - // At PEI time, if LR is used, it will be spilled upon entry. - if (MF.getUsedPhysregs() && !MF.isPhysRegUsed((unsigned)ARM::LR)) - Reserved.set(ARM::LR); return Reserved; } @@ -1094,7 +1091,7 @@ // If LR is not spilled, but at least one of R4, R5, R6, and R7 is spilled. // Spill LR as well so we can fold BX_RET to the registers restore (LDM). if (!LRSpilled && CS1Spilled) { - MF.changePhyRegUsed(ARM::LR, true); + MF.setPhysRegUsed(ARM::LR); AFI->setCSRegisterIsSpilled(ARM::LR); NumGPRSpills++; UnspilledCS1GPRs.erase(std::find(UnspilledCS1GPRs.begin(), @@ -1106,7 +1103,7 @@ // Darwin ABI requires FP to point to the stack slot that contains the // previous FP. if (STI.isTargetDarwin() || hasFP(MF)) { - MF.changePhyRegUsed(FramePtr, true); + MF.setPhysRegUsed(FramePtr); NumGPRSpills++; } @@ -1117,13 +1114,13 @@ if (TargetAlign == 8 && (NumGPRSpills & 1)) { if (CS1Spilled && !UnspilledCS1GPRs.empty()) { unsigned Reg = UnspilledCS1GPRs.front(); - MF.changePhyRegUsed(Reg, true); + MF.setPhysRegUsed(Reg); AFI->setCSRegisterIsSpilled(Reg); if (!isReservedReg(MF, Reg)) ExtraCSSpill = true; } else if (!UnspilledCS2GPRs.empty()) { unsigned Reg = UnspilledCS2GPRs.front(); - MF.changePhyRegUsed(Reg, true); + MF.setPhysRegUsed(Reg); AFI->setCSRegisterIsSpilled(Reg); if (!isReservedReg(MF, Reg)) ExtraCSSpill = true; @@ -1178,7 +1175,7 @@ } if (Extras.size() && NumExtras == 0) { for (unsigned i = 0, e = Extras.size(); i != e; ++i) { - MF.changePhyRegUsed(Extras[i], true); + MF.setPhysRegUsed(Extras[i]); AFI->setCSRegisterIsSpilled(Extras[i]); } } else { @@ -1192,7 +1189,7 @@ } if (ForceLRSpill) { - MF.changePhyRegUsed(ARM::LR, true); + MF.setPhysRegUsed(ARM::LR); AFI->setCSRegisterIsSpilled(ARM::LR); AFI->setLRIsSpilledForFarJump(true); } From evan.cheng at apple.com Wed Apr 25 17:13:51 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Wed, 25 Apr 2007 17:13:51 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/X86/X86FloatingPoint.cpp Message-ID: <200704252213.l3PMDp5T022990@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/X86: X86FloatingPoint.cpp updated: 1.67 -> 1.68 --- Log message: Match MachineFunction::UsedPhysRegs changes. --- Diffs of the changes: (+1 -2) X86FloatingPoint.cpp | 3 +-- 1 files changed, 1 insertion(+), 2 deletions(-) Index: llvm/lib/Target/X86/X86FloatingPoint.cpp diff -u llvm/lib/Target/X86/X86FloatingPoint.cpp:1.67 llvm/lib/Target/X86/X86FloatingPoint.cpp:1.68 --- llvm/lib/Target/X86/X86FloatingPoint.cpp:1.67 Tue Dec 19 16:59:26 2006 +++ llvm/lib/Target/X86/X86FloatingPoint.cpp Wed Apr 25 17:13:27 2007 @@ -161,12 +161,11 @@ bool FPS::runOnMachineFunction(MachineFunction &MF) { // We only need to run this pass if there are any FP registers used in this // function. If it is all integer, there is nothing for us to do! - const bool *PhysRegsUsed = MF.getUsedPhysregs(); bool FPIsUsed = false; assert(X86::FP6 == X86::FP0+6 && "Register enums aren't sorted right!"); for (unsigned i = 0; i <= 6; ++i) - if (PhysRegsUsed[X86::FP0+i]) { + if (MF.isPhysRegUsed(X86::FP0+i)) { FPIsUsed = true; break; } From evan.cheng at apple.com Wed Apr 25 17:13:53 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Wed, 25 Apr 2007 17:13:53 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/PowerPC/PPCRegisterInfo.cpp Message-ID: <200704252213.l3PMDraN022997@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/PowerPC: PPCRegisterInfo.cpp updated: 1.121 -> 1.122 --- Log message: Match MachineFunction::UsedPhysRegs changes. --- Diffs of the changes: (+6 -7) PPCRegisterInfo.cpp | 13 ++++++------- 1 files changed, 6 insertions(+), 7 deletions(-) Index: llvm/lib/Target/PowerPC/PPCRegisterInfo.cpp diff -u llvm/lib/Target/PowerPC/PPCRegisterInfo.cpp:1.121 llvm/lib/Target/PowerPC/PPCRegisterInfo.cpp:1.122 --- llvm/lib/Target/PowerPC/PPCRegisterInfo.cpp:1.121 Tue Apr 3 07:35:28 2007 +++ llvm/lib/Target/PowerPC/PPCRegisterInfo.cpp Wed Apr 25 17:13:27 2007 @@ -739,16 +739,16 @@ // HandleVRSaveUpdate - MI is the UPDATE_VRSAVE instruction introduced by the // instruction selector. Based on the vector registers that have been used, // transform this into the appropriate ORI instruction. -static void HandleVRSaveUpdate(MachineInstr *MI, const bool *UsedRegs, - const TargetInstrInfo &TII) { +static void HandleVRSaveUpdate(MachineInstr *MI, const TargetInstrInfo &TII) { + MachineFunction *MF = MI->getParent()->getParent(); + unsigned UsedRegMask = 0; for (unsigned i = 0; i != 32; ++i) - if (UsedRegs[VRRegNo[i]]) + if (MF->isPhysRegUsed(VRRegNo[i])) UsedRegMask |= 1 << (31-i); // Live in and live out values already must be in the mask, so don't bother // marking them. - MachineFunction *MF = MI->getParent()->getParent(); for (MachineFunction::livein_iterator I = MF->livein_begin(), E = MF->livein_end(); I != E; ++I) { unsigned RegNo = PPCRegisterInfo::getRegisterNumbering(I->first); @@ -846,8 +846,7 @@ PPCFunctionInfo *FI = MF.getInfo(); unsigned LR = getRARegister(); FI->setUsesLR(MF.isPhysRegUsed(LR)); - MF.changePhyRegUsed(LR, false); - + MF.setPhysRegUnused(LR); // Save R31 if necessary int FPSI = FI->getFramePointerSaveIndex(); @@ -883,7 +882,7 @@ // process it. for (unsigned i = 0; MBBI != MBB.end(); ++i, ++MBBI) { if (MBBI->getOpcode() == PPC::UPDATE_VRSAVE) { - HandleVRSaveUpdate(MBBI, MF.getUsedPhysregs(), TII); + HandleVRSaveUpdate(MBBI, TII); break; } } From sabre at nondot.org Wed Apr 25 17:33:14 2007 From: sabre at nondot.org (Chris Lattner) Date: Wed, 25 Apr 2007 17:33:14 -0500 Subject: [llvm-commits] CVS: llvm/test/CodeGen/X86/2007-04-25-MMX-PADDQ.ll Message-ID: <200704252233.l3PMXEqI023448@zion.cs.uiuc.edu> Changes in directory llvm/test/CodeGen/X86: 2007-04-25-MMX-PADDQ.ll updated: 1.1 -> 1.2 --- Log message: && no longer needed --- Diffs of the changes: (+1 -1) 2007-04-25-MMX-PADDQ.ll | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-) Index: llvm/test/CodeGen/X86/2007-04-25-MMX-PADDQ.ll diff -u llvm/test/CodeGen/X86/2007-04-25-MMX-PADDQ.ll:1.1 llvm/test/CodeGen/X86/2007-04-25-MMX-PADDQ.ll:1.2 --- llvm/test/CodeGen/X86/2007-04-25-MMX-PADDQ.ll:1.1 Wed Apr 25 16:58:17 2007 +++ llvm/test/CodeGen/X86/2007-04-25-MMX-PADDQ.ll Wed Apr 25 17:32:55 2007 @@ -1,4 +1,4 @@ -; RUN: llvm-as < %s | llc -o - -march=x86 -mattr=+mmx | grep paddq | wc -l | grep 2 && +; RUN: llvm-as < %s | llc -o - -march=x86 -mattr=+mmx | grep paddq | wc -l | grep 2 ; RUN: llvm-as < %s | llc -o - -march=x86 -mattr=+mmx | grep movq | wc -l | grep 3 define <1 x i64> @unsigned_add3(<1 x i64>* %a, <1 x i64>* %b, i32 %count) { From isanbard at gmail.com Wed Apr 25 18:52:20 2007 From: isanbard at gmail.com (Bill Wendling) Date: Wed, 25 Apr 2007 18:52:20 -0500 Subject: [llvm-commits] CVS: llvm/lib/AsmParser/llvmAsmParser.y Message-ID: <200704252352.l3PNqKXE024818@zion.cs.uiuc.edu> Changes in directory llvm/lib/AsmParser: llvmAsmParser.y updated: 1.349 -> 1.350 --- Log message: Quiet a compiler warning about assignment in an if-then conditional. --- Diffs of the changes: (+1 -2) llvmAsmParser.y | 3 +-- 1 files changed, 1 insertion(+), 2 deletions(-) Index: llvm/lib/AsmParser/llvmAsmParser.y diff -u llvm/lib/AsmParser/llvmAsmParser.y:1.349 llvm/lib/AsmParser/llvmAsmParser.y:1.350 --- llvm/lib/AsmParser/llvmAsmParser.y:1.349 Wed Apr 25 13:07:40 2007 +++ llvm/lib/AsmParser/llvmAsmParser.y Wed Apr 25 18:52:02 2007 @@ -2059,8 +2059,7 @@ } if (V == 0) GEN_ERROR(std::string("Invalid aliasee for alias: ") + $1); - GlobalValue* Aliasee; - if (Aliasee = dyn_cast(V)) { + if (GlobalValue* Aliasee = dyn_cast(V)) { GlobalAlias* GA = new GlobalAlias(VTy, $4, Name, Aliasee, CurModule.CurrentModule); GA->setVisibility($2); InsertValue(GA, CurModule.Values); From evan.cheng at apple.com Wed Apr 25 19:07:54 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Wed, 25 Apr 2007 19:07:54 -0500 Subject: [llvm-commits] CVS: llvm/test/CodeGen/X86/vec_add.ll Message-ID: <200704260007.l3Q07sjm025094@zion.cs.uiuc.edu> Changes in directory llvm/test/CodeGen/X86: vec_add.ll added (r1.1) --- Log message: New test case. --- Diffs of the changes: (+7 -0) vec_add.ll | 7 +++++++ 1 files changed, 7 insertions(+) Index: llvm/test/CodeGen/X86/vec_add.ll diff -c /dev/null llvm/test/CodeGen/X86/vec_add.ll:1.1 *** /dev/null Wed Apr 25 19:07:46 2007 --- llvm/test/CodeGen/X86/vec_add.ll Wed Apr 25 19:07:36 2007 *************** *** 0 **** --- 1,7 ---- + ; RUN: llvm-as < %s | | llc -march=x86 -mattr=+sse2 + + define <2 x i64> @test(<2 x i64> %a, <2 x i64> %b) { + entry: + %tmp9 = add <2 x i64> %b, %a ; <<2 x i64>> [#uses=1] + ret <2 x i64> %tmp9 + } From evan.cheng at apple.com Wed Apr 25 20:09:47 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Wed, 25 Apr 2007 20:09:47 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/X86/X86RegisterInfo.cpp Message-ID: <200704260109.l3Q19lYq026131@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/X86: X86RegisterInfo.cpp updated: 1.215 -> 1.216 --- Log message: Fix for PR1348: http://llvm.org/PR1348 . If stack inc / dec amount is > 32-bits, issue a series of add / sub instructions. --- Diffs of the changes: (+27 -18) X86RegisterInfo.cpp | 45 +++++++++++++++++++++++++++------------------ 1 files changed, 27 insertions(+), 18 deletions(-) Index: llvm/lib/Target/X86/X86RegisterInfo.cpp diff -u llvm/lib/Target/X86/X86RegisterInfo.cpp:1.215 llvm/lib/Target/X86/X86RegisterInfo.cpp:1.216 --- llvm/lib/Target/X86/X86RegisterInfo.cpp:1.215 Wed Apr 25 12:23:53 2007 +++ llvm/lib/Target/X86/X86RegisterInfo.cpp Wed Apr 25 20:09:28 2007 @@ -1023,6 +1023,30 @@ } } +/// emitSPUpdate - Emit a series of instructions to increment / decrement the +/// stack pointer by a constant value. +static +void emitSPUpdate(MachineBasicBlock &MBB, MachineBasicBlock::iterator &MBBI, + unsigned StackPtr, int64_t NumBytes, bool Is64Bit, + const TargetInstrInfo &TII) { + bool isSub = NumBytes < 0; + uint64_t Offset = isSub ? -NumBytes : NumBytes; + unsigned Opc = isSub + ? ((Offset < 128) ? + (Is64Bit ? X86::SUB64ri8 : X86::SUB32ri8) : + (Is64Bit ? X86::SUB64ri32 : X86::SUB32ri)) + : ((Offset < 128) ? + (Is64Bit ? X86::ADD64ri8 : X86::ADD32ri8) : + (Is64Bit ? X86::ADD64ri32 : X86::ADD32ri)); + uint64_t Chunk = (1LL << 31) - 1; + + while (Offset) { + uint64_t ThisVal = (Offset > Chunk) ? Chunk : Offset; + BuildMI(MBB, MBBI, TII.get(Opc), StackPtr).addReg(StackPtr).addImm(ThisVal); + Offset -= ThisVal; + } +} + void X86RegisterInfo::emitPrologue(MachineFunction &MF) const { MachineBasicBlock &MBB = MF.front(); // Prolog goes in entry BB MachineBasicBlock::iterator MBBI = MBB.begin(); @@ -1075,11 +1099,7 @@ MBB.insert(MBBI, MI); } } else { - unsigned Opc = (NumBytes < 128) ? - (Is64Bit ? X86::SUB64ri8 : X86::SUB32ri8) : - (Is64Bit ? X86::SUB64ri32 : X86::SUB32ri); - MI= BuildMI(TII.get(Opc), StackPtr).addReg(StackPtr).addImm(NumBytes); - MBB.insert(MBBI, MI); + emitSPUpdate(MBB, MBBI, StackPtr, -(int64_t)NumBytes, Is64Bit, TII); } } @@ -1206,19 +1226,8 @@ } } - if (NumBytes > 0) { - unsigned Opc = (NumBytes < 128) ? - (Is64Bit ? X86::ADD64ri8 : X86::ADD32ri8) : - (Is64Bit ? X86::ADD64ri32 : X86::ADD32ri); - BuildMI(MBB, MBBI, TII.get(Opc), StackPtr) - .addReg(StackPtr).addImm(NumBytes); - } else if ((int)NumBytes < 0) { - unsigned Opc = (-NumBytes < 128) ? - (Is64Bit ? X86::SUB64ri8 : X86::SUB32ri8) : - (Is64Bit ? X86::SUB64ri32 : X86::SUB32ri); - BuildMI(MBB, MBBI, TII.get(Opc), StackPtr) - .addReg(StackPtr).addImm(-NumBytes); - } + if (NumBytes) + emitSPUpdate(MBB, MBBI, StackPtr, NumBytes, Is64Bit, TII); } } } From evan.cheng at apple.com Wed Apr 25 20:14:33 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Wed, 25 Apr 2007 20:14:33 -0500 Subject: [llvm-commits] CVS: llvm/test/CodeGen/X86/2007-04-24-Huge-Stack.ll Message-ID: <200704260114.l3Q1EXt9026266@zion.cs.uiuc.edu> Changes in directory llvm/test/CodeGen/X86: 2007-04-24-Huge-Stack.ll added (r1.1) --- Log message: PR1348: http://llvm.org/PR1348 test case. --- Diffs of the changes: (+19 -0) 2007-04-24-Huge-Stack.ll | 19 +++++++++++++++++++ 1 files changed, 19 insertions(+) Index: llvm/test/CodeGen/X86/2007-04-24-Huge-Stack.ll diff -c /dev/null llvm/test/CodeGen/X86/2007-04-24-Huge-Stack.ll:1.1 *** /dev/null Wed Apr 25 20:14:24 2007 --- llvm/test/CodeGen/X86/2007-04-24-Huge-Stack.ll Wed Apr 25 20:14:14 2007 *************** *** 0 **** --- 1,19 ---- + ; RUN: llvm-as < %s | llc -march=x86-64 | not grep 4294967112 + ; PR1348 + + %struct.md5_ctx = type { i32, i32, i32, i32, [2 x i32], i32, [128 x i8], [4294967288 x i8] } + + define i8* @md5_buffer(i8* %buffer, i64 %len, i8* %resblock) { + entry: + %ctx = alloca %struct.md5_ctx, align 16 ; <%struct.md5_ctx*> [#uses=3] + call void @md5_init_ctx( %struct.md5_ctx* %ctx ) + call void @md5_process_bytes( i8* %buffer, i64 %len, %struct.md5_ctx* %ctx ) + %tmp4 = call i8* @md5_finish_ctx( %struct.md5_ctx* %ctx, i8* %resblock ) ; [#uses=1] + ret i8* %tmp4 + } + + declare void @md5_init_ctx(%struct.md5_ctx*) + + declare i8* @md5_finish_ctx(%struct.md5_ctx*, i8*) + + declare void @md5_process_bytes(i8*, i64, %struct.md5_ctx*) From evan.cheng at apple.com Wed Apr 25 20:40:32 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Wed, 25 Apr 2007 20:40:32 -0500 Subject: [llvm-commits] CVS: llvm/include/llvm/CodeGen/LiveVariables.h Message-ID: <200704260140.l3Q1eWY4026749@zion.cs.uiuc.edu> Changes in directory llvm/include/llvm/CodeGen: LiveVariables.h updated: 1.40 -> 1.41 --- Log message: Be careful when to add implicit kill / dead operands. Don't add them during / post reg-allocation. --- Diffs of the changes: (+22 -14) LiveVariables.h | 36 ++++++++++++++++++++++-------------- 1 files changed, 22 insertions(+), 14 deletions(-) Index: llvm/include/llvm/CodeGen/LiveVariables.h diff -u llvm/include/llvm/CodeGen/LiveVariables.h:1.40 llvm/include/llvm/CodeGen/LiveVariables.h:1.41 --- llvm/include/llvm/CodeGen/LiveVariables.h:1.40 Wed Apr 25 14:34:00 2007 +++ llvm/include/llvm/CodeGen/LiveVariables.h Wed Apr 25 20:40:09 2007 @@ -147,12 +147,18 @@ SmallVector *PHIVarInfo; /// addRegisterKilled - We have determined MI kills a register. Look for the - /// operand that uses it and mark it as IsKill. - void addRegisterKilled(unsigned IncomingReg, MachineInstr *MI); + /// operand that uses it and mark it as IsKill. If AddIfNotFound is true, + /// add a implicit operand if it's not found. Returns true if the operand + /// exists / is added. + bool addRegisterKilled(unsigned IncomingReg, MachineInstr *MI, + bool AddIfNotFound = false); /// addRegisterDead - We have determined MI defined a register without a use. - /// Look for the operand that defines it and mark it as IsDead. - void addRegisterDead(unsigned IncomingReg, MachineInstr *MI); + /// Look for the operand that defines it and mark it as IsDead. If + /// AddIfNotFound is true, add a implicit operand if it's not found. Returns + /// true if the operand exists / is added. + bool addRegisterDead(unsigned IncomingReg, MachineInstr *MI, + bool AddIfNotFound = false); void HandlePhysRegUse(unsigned Reg, MachineInstr *MI); void HandlePhysRegDef(unsigned Reg, MachineInstr *MI); @@ -189,11 +195,12 @@ /// addVirtualRegisterKilled - Add information about the fact that the /// specified register is killed after being used by the specified - /// instruction. - /// - void addVirtualRegisterKilled(unsigned IncomingReg, MachineInstr *MI) { - addRegisterKilled(IncomingReg, MI); - getVarInfo(IncomingReg).Kills.push_back(MI); + /// instruction. If AddIfNotFound is true, add a implicit operand if it's + /// not found. + void addVirtualRegisterKilled(unsigned IncomingReg, MachineInstr *MI, + bool AddIfNotFound = false) { + if (addRegisterKilled(IncomingReg, MI, AddIfNotFound)) + getVarInfo(IncomingReg).Kills.push_back(MI); } /// removeVirtualRegisterKilled - Remove the specified virtual @@ -225,11 +232,12 @@ void removeVirtualRegistersKilled(MachineInstr *MI); /// addVirtualRegisterDead - Add information about the fact that the specified - /// register is dead after being used by the specified instruction. - /// - void addVirtualRegisterDead(unsigned IncomingReg, MachineInstr *MI) { - addRegisterDead(IncomingReg, MI); - getVarInfo(IncomingReg).Kills.push_back(MI); + /// register is dead after being used by the specified instruction. If + /// AddIfNotFound is true, add a implicit operand if it's not found. + void addVirtualRegisterDead(unsigned IncomingReg, MachineInstr *MI, + bool AddIfNotFound = false) { + if (addRegisterDead(IncomingReg, MI, AddIfNotFound)) + getVarInfo(IncomingReg).Kills.push_back(MI); } /// removeVirtualRegisterDead - Remove the specified virtual From evan.cheng at apple.com Wed Apr 25 20:40:32 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Wed, 25 Apr 2007 20:40:32 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/LiveVariables.cpp Message-ID: <200704260140.l3Q1eWD5026751@zion.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen: LiveVariables.cpp updated: 1.76 -> 1.77 --- Log message: Be careful when to add implicit kill / dead operands. Don't add them during / post reg-allocation. --- Diffs of the changes: (+17 -9) LiveVariables.cpp | 26 +++++++++++++++++--------- 1 files changed, 17 insertions(+), 9 deletions(-) Index: llvm/lib/CodeGen/LiveVariables.cpp diff -u llvm/lib/CodeGen/LiveVariables.cpp:1.76 llvm/lib/CodeGen/LiveVariables.cpp:1.77 --- llvm/lib/CodeGen/LiveVariables.cpp:1.76 Wed Apr 25 16:34:08 2007 +++ llvm/lib/CodeGen/LiveVariables.cpp Wed Apr 25 20:40:09 2007 @@ -170,7 +170,8 @@ MarkVirtRegAliveInBlock(VRInfo, *PI); } -void LiveVariables::addRegisterKilled(unsigned IncomingReg, MachineInstr *MI) { +bool LiveVariables::addRegisterKilled(unsigned IncomingReg, MachineInstr *MI, + bool AddIfNotFound) { bool Found = false; for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) { MachineOperand &MO = MI->getOperand(i); @@ -187,17 +188,21 @@ RegInfo->isSuperRegister(IncomingReg, Reg) && MO.isKill()) // A super-register kill already exists. - return; + return true; } } // If not found, this means an alias of one of the operand is killed. Add a - // new implicit operand. - if (!Found) + // new implicit operand if required. + if (!Found && AddIfNotFound) { MI->addRegOperand(IncomingReg, false/*IsDef*/,true/*IsImp*/,true/*IsKill*/); + return true; + } + return Found; } -void LiveVariables::addRegisterDead(unsigned IncomingReg, MachineInstr *MI) { +bool LiveVariables::addRegisterDead(unsigned IncomingReg, MachineInstr *MI, + bool AddIfNotFound) { bool Found = false; for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) { MachineOperand &MO = MI->getOperand(i); @@ -214,15 +219,18 @@ RegInfo->isSuperRegister(IncomingReg, Reg) && MO.isDead()) // There exists a super-register that's marked dead. - return; + return true; } } // If not found, this means an alias of one of the operand is dead. Add a // new implicit operand. - if (!Found) + if (!Found && AddIfNotFound) { MI->addRegOperand(IncomingReg, true/*IsDef*/,true/*IsImp*/,false/*IsKill*/, true/*IsDead*/); + return true; + } + return Found; } void LiveVariables::HandlePhysRegUse(unsigned Reg, MachineInstr *MI) { @@ -271,9 +279,9 @@ addRegisterKilled(Reg, LastRef); else if (PhysRegPartUse[Reg]) // Add implicit use / kill to last use of a sub-register. - addRegisterKilled(Reg, PhysRegPartUse[Reg]); + addRegisterKilled(Reg, PhysRegPartUse[Reg], true); else - addRegisterDead(Reg, LastRef); + addRegisterDead(Reg, LastRef, true); } PhysRegInfo[Reg] = MI; PhysRegUsed[Reg] = false; From sabre at nondot.org Wed Apr 25 21:24:29 2007 From: sabre at nondot.org (Chris Lattner) Date: Wed, 25 Apr 2007 21:24:29 -0500 Subject: [llvm-commits] CVS: llvm/lib/VMCore/AsmWriter.cpp Message-ID: <200704260224.l3Q2OTdJ027714@zion.cs.uiuc.edu> Changes in directory llvm/lib/VMCore: AsmWriter.cpp updated: 1.275 -> 1.276 --- Log message: print aliases before functions --- Diffs of the changes: (+6 -5) AsmWriter.cpp | 11 ++++++----- 1 files changed, 6 insertions(+), 5 deletions(-) Index: llvm/lib/VMCore/AsmWriter.cpp diff -u llvm/lib/VMCore/AsmWriter.cpp:1.275 llvm/lib/VMCore/AsmWriter.cpp:1.276 --- llvm/lib/VMCore/AsmWriter.cpp:1.275 Wed Apr 25 09:27:10 2007 +++ llvm/lib/VMCore/AsmWriter.cpp Wed Apr 25 21:24:10 2007 @@ -848,15 +848,16 @@ for (Module::const_global_iterator I = M->global_begin(), E = M->global_end(); I != E; ++I) printGlobal(I); + + // Output all aliases. + if (!M->alias_empty()) Out << "\n"; + for (Module::const_alias_iterator I = M->alias_begin(), E = M->alias_end(); + I != E; ++I) + printAlias(I); // Output all of the functions. for (Module::const_iterator I = M->begin(), E = M->end(); I != E; ++I) printFunction(I); - - // Output all aliases - for (Module::const_alias_iterator I = M->alias_begin(), E = M->alias_end(); - I != E; ++I) - printAlias(I); } void AssemblyWriter::printGlobal(const GlobalVariable *GV) { From sabre at nondot.org Wed Apr 25 21:46:41 2007 From: sabre at nondot.org (Chris Lattner) Date: Wed, 25 Apr 2007 21:46:41 -0500 Subject: [llvm-commits] CVS: llvm/include/llvm/Bitcode/LLVMBitCodes.h Message-ID: <200704260246.l3Q2kflC028120@zion.cs.uiuc.edu> Changes in directory llvm/include/llvm/Bitcode: LLVMBitCodes.h updated: 1.5 -> 1.6 --- Log message: add alias support to bitcode --- Diffs of the changes: (+4 -1) LLVMBitCodes.h | 5 ++++- 1 files changed, 4 insertions(+), 1 deletion(-) Index: llvm/include/llvm/Bitcode/LLVMBitCodes.h diff -u llvm/include/llvm/Bitcode/LLVMBitCodes.h:1.5 llvm/include/llvm/Bitcode/LLVMBitCodes.h:1.6 --- llvm/include/llvm/Bitcode/LLVMBitCodes.h:1.5 Tue Apr 24 10:54:42 2007 +++ llvm/include/llvm/Bitcode/LLVMBitCodes.h Wed Apr 25 21:46:23 2007 @@ -52,7 +52,10 @@ // FUNCTION: [type, callingconv, isproto, linkage, alignment, section, // visibility] - MODULE_CODE_FUNCTION = 8 + MODULE_CODE_FUNCTION = 8, + + // ALIAS: [alias type, aliasee val#, linkage] + MODULE_CODE_ALIAS = 9 }; /// TYPE blocks have codes for each type primitive they use. From sabre at nondot.org Wed Apr 25 21:47:04 2007 From: sabre at nondot.org (Chris Lattner) Date: Wed, 25 Apr 2007 21:47:04 -0500 Subject: [llvm-commits] CVS: llvm/lib/Bitcode/Reader/BitcodeReader.cpp BitcodeReader.h Message-ID: <200704260247.l3Q2l4ut028140@zion.cs.uiuc.edu> Changes in directory llvm/lib/Bitcode/Reader: BitcodeReader.cpp updated: 1.12 -> 1.13 BitcodeReader.h updated: 1.8 -> 1.9 --- Log message: add bitcode alias support --- Diffs of the changes: (+59 -17) BitcodeReader.cpp | 74 +++++++++++++++++++++++++++++++++++++++++------------- BitcodeReader.h | 2 + 2 files changed, 59 insertions(+), 17 deletions(-) Index: llvm/lib/Bitcode/Reader/BitcodeReader.cpp diff -u llvm/lib/Bitcode/Reader/BitcodeReader.cpp:1.12 llvm/lib/Bitcode/Reader/BitcodeReader.cpp:1.13 --- llvm/lib/Bitcode/Reader/BitcodeReader.cpp:1.12 Tue Apr 24 13:15:21 2007 +++ llvm/lib/Bitcode/Reader/BitcodeReader.cpp Wed Apr 25 21:46:40 2007 @@ -398,6 +398,47 @@ return 1ULL << 63; } +/// ResolveGlobalAndAliasInits - Resolve all of the initializers for global +/// values and aliases that we can. +bool BitcodeReader::ResolveGlobalAndAliasInits() { + std::vector > GlobalInitWorklist; + std::vector > AliasInitWorklist; + + GlobalInitWorklist.swap(GlobalInits); + AliasInitWorklist.swap(AliasInits); + + while (!GlobalInitWorklist.empty()) { + unsigned ValID = GlobalInits.back().second; + if (ValID >= ValueList.size()) { + // Not ready to resolve this yet, it requires something later in the file. + GlobalInitWorklist.push_back(GlobalInits.back()); + } else { + if (Constant *C = dyn_cast(ValueList[ValID])) + GlobalInitWorklist.back().first->setInitializer(C); + else + return Error("Global variable initializer is not a constant!"); + } + GlobalInitWorklist.pop_back(); + } + + while (!AliasInitWorklist.empty()) { + unsigned ValID = AliasInitWorklist.back().second; + if (ValID >= ValueList.size()) { + AliasInits.push_back(AliasInitWorklist.back()); + } else { + if (Constant *C = dyn_cast(ValueList[ValID])) + AliasInitWorklist.back().first->setAliasee( + // FIXME: + cast(C)); + else + return Error("Alias initializer is not a constant!"); + } + AliasInitWorklist.pop_back(); + } + return false; +} + + bool BitcodeReader::ParseConstants(BitstreamReader &Stream) { if (Stream.EnterSubBlock()) return Error("Malformed block record"); @@ -410,20 +451,6 @@ while (1) { unsigned Code = Stream.ReadCode(); if (Code == bitc::END_BLOCK) { - // If there are global var inits to process, do so now. - if (!GlobalInits.empty()) { - while (!GlobalInits.empty()) { - unsigned ValID = GlobalInits.back().second; - if (ValID >= ValueList.size()) - return Error("Invalid value ID for global var init!"); - if (Constant *C = dyn_cast(ValueList[ValID])) - GlobalInits.back().first->setInitializer(C); - else - return Error("Global variable initializer is not a constant!"); - GlobalInits.pop_back(); - } - } - if (NextCstNo != ValueList.size()) return Error("Invalid constant reference!"); @@ -646,7 +673,8 @@ while (!Stream.AtEndOfStream()) { unsigned Code = Stream.ReadCode(); if (Code == bitc::END_BLOCK) { - if (!GlobalInits.empty()) + ResolveGlobalAndAliasInits(); + if (!GlobalInits.empty() || !AliasInits.empty()) return Error("Malformed global initializer set"); if (Stream.ReadBlockEnd()) return Error("Error at end of module block"); @@ -672,7 +700,7 @@ return true; break; case bitc::CONSTANTS_BLOCK_ID: - if (ParseConstants(Stream)) + if (ParseConstants(Stream) || ResolveGlobalAndAliasInits()) return true; break; } @@ -795,9 +823,21 @@ Func->setVisibility(GetDecodedVisibility(Record[6])); ValueList.push_back(Func); - // TODO: remember initializer/global pair for later substitution. break; } + // ALIAS: [alias type, aliasee val#, linkage] + case bitc::MODULE_CODE_ALIAS: + if (Record.size() < 3) + return Error("Invalid MODULE_ALIAS record"); + const Type *Ty = getTypeByID(Record[0]); + if (!isa(Ty)) + return Error("Function not a pointer type!"); + + GlobalAlias *NewGA = new GlobalAlias(Ty, GetDecodedLinkage(Record[2]), + "", 0, TheModule); + ValueList.push_back(NewGA); + AliasInits.push_back(std::make_pair(NewGA, Record[1])); + break; } Record.clear(); } Index: llvm/lib/Bitcode/Reader/BitcodeReader.h diff -u llvm/lib/Bitcode/Reader/BitcodeReader.h:1.8 llvm/lib/Bitcode/Reader/BitcodeReader.h:1.9 --- llvm/lib/Bitcode/Reader/BitcodeReader.h:1.8 Tue Apr 24 13:15:21 2007 +++ llvm/lib/Bitcode/Reader/BitcodeReader.h Wed Apr 25 21:46:40 2007 @@ -57,6 +57,7 @@ std::vector TypeList; BitcodeReaderValueList ValueList; std::vector > GlobalInits; + std::vector > AliasInits; public: BitcodeReader() : ErrorString(0) {} virtual ~BitcodeReader() {} @@ -93,6 +94,7 @@ bool ParseTypeSymbolTable(BitstreamReader &Stream); bool ParseValueSymbolTable(BitstreamReader &Stream); bool ParseConstants(BitstreamReader &Stream); + bool ResolveGlobalAndAliasInits(); }; } // End llvm namespace From sabre at nondot.org Wed Apr 25 21:47:04 2007 From: sabre at nondot.org (Chris Lattner) Date: Wed, 25 Apr 2007 21:47:04 -0500 Subject: [llvm-commits] CVS: llvm/lib/Bitcode/Writer/ValueEnumerator.cpp Writer.cpp Message-ID: <200704260247.l3Q2l4iU028147@zion.cs.uiuc.edu> Changes in directory llvm/lib/Bitcode/Writer: ValueEnumerator.cpp updated: 1.2 -> 1.3 Writer.cpp updated: 1.8 -> 1.9 --- Log message: add bitcode alias support --- Diffs of the changes: (+22 -0) ValueEnumerator.cpp | 10 ++++++++++ Writer.cpp | 12 ++++++++++++ 2 files changed, 22 insertions(+) Index: llvm/lib/Bitcode/Writer/ValueEnumerator.cpp diff -u llvm/lib/Bitcode/Writer/ValueEnumerator.cpp:1.2 llvm/lib/Bitcode/Writer/ValueEnumerator.cpp:1.3 --- llvm/lib/Bitcode/Writer/ValueEnumerator.cpp:1.2 Mon Apr 23 19:16:04 2007 +++ llvm/lib/Bitcode/Writer/ValueEnumerator.cpp Wed Apr 25 21:46:40 2007 @@ -28,12 +28,22 @@ for (Module::const_iterator I = M->begin(), E = M->end(); I != E; ++I) EnumerateValue(I); + // Enumerate the aliases. + for (Module::const_alias_iterator I = M->alias_begin(), E = M->alias_end(); + I != E; ++I) + EnumerateValue(I); + // Enumerate the global variable initializers. for (Module::const_global_iterator I = M->global_begin(), E = M->global_end(); I != E; ++I) if (I->hasInitializer()) EnumerateValue(I->getInitializer()); + // Enumerate the aliasees. + for (Module::const_alias_iterator I = M->alias_begin(), E = M->alias_end(); + I != E; ++I) + EnumerateValue(I->getAliasee()); + // FIXME: Implement the 'string constant' optimization. // Enumerate types used by the type symbol table. Index: llvm/lib/Bitcode/Writer/Writer.cpp diff -u llvm/lib/Bitcode/Writer/Writer.cpp:1.8 llvm/lib/Bitcode/Writer/Writer.cpp:1.9 --- llvm/lib/Bitcode/Writer/Writer.cpp:1.8 Tue Apr 24 02:07:11 2007 +++ llvm/lib/Bitcode/Writer/Writer.cpp Wed Apr 25 21:46:40 2007 @@ -309,6 +309,18 @@ Stream.EmitRecord(bitc::MODULE_CODE_FUNCTION, Vals, AbbrevToUse); Vals.clear(); } + + + // Emit the alias information. + for (Module::const_alias_iterator AI = M->alias_begin(), E = M->alias_end(); + AI != E; ++AI) { + Vals.push_back(VE.getTypeID(AI->getType())); + Vals.push_back(VE.getValueID(AI->getAliasee())); + Vals.push_back(getEncodedLinkage(AI)); + unsigned AbbrevToUse = 0; + Stream.EmitRecord(bitc::MODULE_CODE_ALIAS, Vals, AbbrevToUse); + Vals.clear(); + } } From sabre at nondot.org Wed Apr 25 22:26:45 2007 From: sabre at nondot.org (Chris Lattner) Date: Wed, 25 Apr 2007 22:26:45 -0500 Subject: [llvm-commits] CVS: llvm/include/llvm/Bitcode/LLVMBitCodes.h Message-ID: <200704260326.l3Q3QjOc028864@zion.cs.uiuc.edu> Changes in directory llvm/include/llvm/Bitcode: LLVMBitCodes.h updated: 1.6 -> 1.7 --- Log message: add a new code --- Diffs of the changes: (+4 -1) LLVMBitCodes.h | 5 ++++- 1 files changed, 4 insertions(+), 1 deletion(-) Index: llvm/include/llvm/Bitcode/LLVMBitCodes.h diff -u llvm/include/llvm/Bitcode/LLVMBitCodes.h:1.6 llvm/include/llvm/Bitcode/LLVMBitCodes.h:1.7 --- llvm/include/llvm/Bitcode/LLVMBitCodes.h:1.6 Wed Apr 25 21:46:23 2007 +++ llvm/include/llvm/Bitcode/LLVMBitCodes.h Wed Apr 25 22:26:26 2007 @@ -55,7 +55,10 @@ MODULE_CODE_FUNCTION = 8, // ALIAS: [alias type, aliasee val#, linkage] - MODULE_CODE_ALIAS = 9 + MODULE_CODE_ALIAS = 9, + + /// MODULE_CODE_PURGEVALS: [numvals] + MODULE_CODE_PURGEVALS = 10 }; /// TYPE blocks have codes for each type primitive they use. From sabre at nondot.org Wed Apr 25 22:28:15 2007 From: sabre at nondot.org (Chris Lattner) Date: Wed, 25 Apr 2007 22:28:15 -0500 Subject: [llvm-commits] CVS: llvm/lib/Bitcode/Reader/BitcodeReader.cpp BitcodeReader.h Message-ID: <200704260328.l3Q3SFX2028949@zion.cs.uiuc.edu> Changes in directory llvm/lib/Bitcode/Reader: BitcodeReader.cpp updated: 1.13 -> 1.14 BitcodeReader.h updated: 1.9 -> 1.10 --- Log message: move some code around, fix a bug in the reader reading globalinits (which I just introduced), stub out function reading, purge aggregate values from the value table before reading functions. --- Diffs of the changes: (+16 -3) BitcodeReader.cpp | 14 +++++++++++--- BitcodeReader.h | 5 +++++ 2 files changed, 16 insertions(+), 3 deletions(-) Index: llvm/lib/Bitcode/Reader/BitcodeReader.cpp diff -u llvm/lib/Bitcode/Reader/BitcodeReader.cpp:1.13 llvm/lib/Bitcode/Reader/BitcodeReader.cpp:1.14 --- llvm/lib/Bitcode/Reader/BitcodeReader.cpp:1.13 Wed Apr 25 21:46:40 2007 +++ llvm/lib/Bitcode/Reader/BitcodeReader.cpp Wed Apr 25 22:27:58 2007 @@ -408,10 +408,10 @@ AliasInitWorklist.swap(AliasInits); while (!GlobalInitWorklist.empty()) { - unsigned ValID = GlobalInits.back().second; + unsigned ValID = GlobalInitWorklist.back().second; if (ValID >= ValueList.size()) { // Not ready to resolve this yet, it requires something later in the file. - GlobalInitWorklist.push_back(GlobalInits.back()); + GlobalInits.push_back(GlobalInitWorklist.back()); } else { if (Constant *C = dyn_cast(ValueList[ValID])) GlobalInitWorklist.back().first->setInitializer(C); @@ -826,7 +826,7 @@ break; } // ALIAS: [alias type, aliasee val#, linkage] - case bitc::MODULE_CODE_ALIAS: + case bitc::MODULE_CODE_ALIAS: { if (Record.size() < 3) return Error("Invalid MODULE_ALIAS record"); const Type *Ty = getTypeByID(Record[0]); @@ -839,6 +839,14 @@ AliasInits.push_back(std::make_pair(NewGA, Record[1])); break; } + /// MODULE_CODE_PURGEVALS: [numvals] + case bitc::MODULE_CODE_PURGEVALS: + // Trim down the value list to the specified size. + if (Record.size() < 1 || Record[0] > ValueList.size()) + return Error("Invalid MODULE_PURGEVALS record"); + ValueList.shrinkTo(Record[0]); + break; + } Record.clear(); } Index: llvm/lib/Bitcode/Reader/BitcodeReader.h diff -u llvm/lib/Bitcode/Reader/BitcodeReader.h:1.9 llvm/lib/Bitcode/Reader/BitcodeReader.h:1.10 --- llvm/lib/Bitcode/Reader/BitcodeReader.h:1.9 Wed Apr 25 21:46:40 2007 +++ llvm/lib/Bitcode/Reader/BitcodeReader.h Wed Apr 25 22:27:58 2007 @@ -41,6 +41,11 @@ Value *back() const { return Uses.back(); } void pop_back() { Uses.pop_back(); --NumOperands; } bool empty() const { return NumOperands == 0; } + void shrinkTo(unsigned N) { + assert(N < NumOperands && "Invalid shrinkTo request!"); + Uses.resize(N); + NumOperands = N; + } virtual void print(std::ostream&) const {} Constant *getConstantFwdRef(unsigned Idx, const Type *Ty); From sabre at nondot.org Wed Apr 25 22:28:21 2007 From: sabre at nondot.org (Chris Lattner) Date: Wed, 25 Apr 2007 22:28:21 -0500 Subject: [llvm-commits] CVS: llvm/lib/Bitcode/Writer/ValueEnumerator.cpp ValueEnumerator.h Writer.cpp Message-ID: <200704260328.l3Q3SL8W028959@zion.cs.uiuc.edu> Changes in directory llvm/lib/Bitcode/Writer: ValueEnumerator.cpp updated: 1.3 -> 1.4 ValueEnumerator.h updated: 1.3 -> 1.4 Writer.cpp updated: 1.9 -> 1.10 --- Log message: move some code around, fix a bug in the reader reading globalinits (which I just introduced), stub out function reading, purge aggregate values from the value table before reading functions. --- Diffs of the changes: (+107 -66) ValueEnumerator.cpp | 16 +++++ ValueEnumerator.h | 5 + Writer.cpp | 152 +++++++++++++++++++++++++++++----------------------- 3 files changed, 107 insertions(+), 66 deletions(-) Index: llvm/lib/Bitcode/Writer/ValueEnumerator.cpp diff -u llvm/lib/Bitcode/Writer/ValueEnumerator.cpp:1.3 llvm/lib/Bitcode/Writer/ValueEnumerator.cpp:1.4 --- llvm/lib/Bitcode/Writer/ValueEnumerator.cpp:1.3 Wed Apr 25 21:46:40 2007 +++ llvm/lib/Bitcode/Writer/ValueEnumerator.cpp Wed Apr 25 22:27:58 2007 @@ -140,6 +140,22 @@ EnumerateType(*I); } +/// PurgeAggregateValues - If there are any aggregate values at the end of the +/// value list, remove them and return the count of the remaining values. If +/// there are none, return -1. +int ValueEnumerator::PurgeAggregateValues() { + // If there are no aggregate values at the end of the list, return -1. + if (Values.empty() || Values.back().first->getType()->isFirstClassType()) + return -1; + + // Otherwise, remove aggregate values... + while (!Values.empty() && !Values.back().first->getType()->isFirstClassType()) + Values.pop_back(); + + // ... and return the new size. + return Values.size(); +} + #if 0 Index: llvm/lib/Bitcode/Writer/ValueEnumerator.h diff -u llvm/lib/Bitcode/Writer/ValueEnumerator.h:1.3 llvm/lib/Bitcode/Writer/ValueEnumerator.h:1.4 --- llvm/lib/Bitcode/Writer/ValueEnumerator.h:1.3 Mon Apr 23 19:16:04 2007 +++ llvm/lib/Bitcode/Writer/ValueEnumerator.h Wed Apr 25 22:27:58 2007 @@ -64,6 +64,11 @@ const ValueList &getValues() const { return Values; } const TypeList &getTypes() const { return Types; } + /// PurgeAggregateValues - If there are any aggregate values at the end of the + /// value list, remove them and return the count of the remaining values. If + /// there are none, return -1. + int PurgeAggregateValues(); + /// incorporateFunction/purgeFunction - If you'd like to deal with a function, /// use these two methods to get its data into the ValueEnumerator! /// Index: llvm/lib/Bitcode/Writer/Writer.cpp diff -u llvm/lib/Bitcode/Writer/Writer.cpp:1.9 llvm/lib/Bitcode/Writer/Writer.cpp:1.10 --- llvm/lib/Bitcode/Writer/Writer.cpp:1.9 Wed Apr 25 21:46:40 2007 +++ llvm/lib/Bitcode/Writer/Writer.cpp Wed Apr 25 22:27:58 2007 @@ -324,69 +324,6 @@ } -/// WriteTypeSymbolTable - Emit a block for the specified type symtab. -static void WriteTypeSymbolTable(const TypeSymbolTable &TST, - const ValueEnumerator &VE, - BitstreamWriter &Stream) { - if (TST.empty()) return; - - Stream.EnterSubblock(bitc::TYPE_SYMTAB_BLOCK_ID, 3); - - // FIXME: Set up the abbrev, we know how many types there are! - // FIXME: We know if the type names can use 7-bit ascii. - - SmallVector NameVals; - - for (TypeSymbolTable::const_iterator TI = TST.begin(), TE = TST.end(); - TI != TE; ++TI) { - unsigned AbbrevToUse = 0; - - // TST_ENTRY: [typeid, namelen, namechar x N] - NameVals.push_back(VE.getTypeID(TI->second)); - - const std::string &Str = TI->first; - NameVals.push_back(Str.size()); - for (unsigned i = 0, e = Str.size(); i != e; ++i) - NameVals.push_back(Str[i]); - - // Emit the finished record. - Stream.EmitRecord(bitc::VST_CODE_ENTRY, NameVals, AbbrevToUse); - NameVals.clear(); - } - - Stream.ExitBlock(); -} - -// Emit names for globals/functions etc. -static void WriteValueSymbolTable(const ValueSymbolTable &VST, - const ValueEnumerator &VE, - BitstreamWriter &Stream) { - if (VST.empty()) return; - Stream.EnterSubblock(bitc::VALUE_SYMTAB_BLOCK_ID, 3); - - // FIXME: Set up the abbrev, we know how many values there are! - // FIXME: We know if the type names can use 7-bit ascii. - SmallVector NameVals; - - for (ValueSymbolTable::const_iterator SI = VST.begin(), SE = VST.end(); - SI != SE; ++SI) { - unsigned AbbrevToUse = 0; - - // VST_ENTRY: [valueid, namelen, namechar x N] - NameVals.push_back(VE.getValueID(SI->getValue())); - - NameVals.push_back(SI->getKeyLength()); - for (const char *P = SI->getKeyData(), - *E = SI->getKeyData()+SI->getKeyLength(); P != E; ++P) - NameVals.push_back((unsigned char)*P); - - // Emit the finished record. - Stream.EmitRecord(bitc::VST_CODE_ENTRY, NameVals, AbbrevToUse); - NameVals.clear(); - } - Stream.ExitBlock(); -} - static void WriteConstants(unsigned FirstVal, unsigned LastVal, const ValueEnumerator &VE, BitstreamWriter &Stream) { @@ -541,15 +478,85 @@ } } + +static void WriteFunction(const Function &F, ValueEnumerator &VE, + BitstreamWriter &Stream) { + +} + +/// WriteTypeSymbolTable - Emit a block for the specified type symtab. +static void WriteTypeSymbolTable(const TypeSymbolTable &TST, + const ValueEnumerator &VE, + BitstreamWriter &Stream) { + if (TST.empty()) return; + + Stream.EnterSubblock(bitc::TYPE_SYMTAB_BLOCK_ID, 3); + + // FIXME: Set up the abbrev, we know how many types there are! + // FIXME: We know if the type names can use 7-bit ascii. + + SmallVector NameVals; + + for (TypeSymbolTable::const_iterator TI = TST.begin(), TE = TST.end(); + TI != TE; ++TI) { + unsigned AbbrevToUse = 0; + + // TST_ENTRY: [typeid, namelen, namechar x N] + NameVals.push_back(VE.getTypeID(TI->second)); + + const std::string &Str = TI->first; + NameVals.push_back(Str.size()); + for (unsigned i = 0, e = Str.size(); i != e; ++i) + NameVals.push_back(Str[i]); + + // Emit the finished record. + Stream.EmitRecord(bitc::VST_CODE_ENTRY, NameVals, AbbrevToUse); + NameVals.clear(); + } + + Stream.ExitBlock(); +} + +// Emit names for globals/functions etc. +static void WriteValueSymbolTable(const ValueSymbolTable &VST, + const ValueEnumerator &VE, + BitstreamWriter &Stream) { + if (VST.empty()) return; + Stream.EnterSubblock(bitc::VALUE_SYMTAB_BLOCK_ID, 3); + + // FIXME: Set up the abbrev, we know how many values there are! + // FIXME: We know if the type names can use 7-bit ascii. + SmallVector NameVals; + + for (ValueSymbolTable::const_iterator SI = VST.begin(), SE = VST.end(); + SI != SE; ++SI) { + unsigned AbbrevToUse = 0; + + // VST_ENTRY: [valueid, namelen, namechar x N] + NameVals.push_back(VE.getValueID(SI->getValue())); + + NameVals.push_back(SI->getKeyLength()); + for (const char *P = SI->getKeyData(), + *E = SI->getKeyData()+SI->getKeyLength(); P != E; ++P) + NameVals.push_back((unsigned char)*P); + + // Emit the finished record. + Stream.EmitRecord(bitc::VST_CODE_ENTRY, NameVals, AbbrevToUse); + NameVals.clear(); + } + Stream.ExitBlock(); +} + + /// WriteModule - Emit the specified module to the bitstream. static void WriteModule(const Module *M, BitstreamWriter &Stream) { Stream.EnterSubblock(bitc::MODULE_BLOCK_ID, 3); // Emit the version number if it is non-zero. if (CurVersion) { - SmallVector VersionVals; - VersionVals.push_back(CurVersion); - Stream.EmitRecord(bitc::MODULE_CODE_VERSION, VersionVals); + SmallVector Vals; + Vals.push_back(CurVersion); + Stream.EmitRecord(bitc::MODULE_CODE_VERSION, Vals); } // Analyze the module, enumerating globals, functions, etc. @@ -565,6 +572,19 @@ // Emit constants. WriteModuleConstants(VE, Stream); + // FIXME: Purge aggregate values from the VE, emit a record that indicates how + // many to purge. + int NumNonAggregates = VE.PurgeAggregateValues(); + if (NumNonAggregates != -1) { + SmallVector Vals; + Vals.push_back(NumNonAggregates); + Stream.EmitRecord(bitc::MODULE_CODE_PURGEVALS, Vals); + } + + // Emit function bodies. + for (Module::const_iterator I = M->begin(), E = M->end(); I != E; ++I) + WriteFunction(*I, VE, Stream); + // Emit the type symbol table information. WriteTypeSymbolTable(M->getTypeSymbolTable(), VE, Stream); From sabre at nondot.org Wed Apr 25 22:33:01 2007 From: sabre at nondot.org (Chris Lattner) Date: Wed, 25 Apr 2007 22:33:01 -0500 Subject: [llvm-commits] CVS: llvm/lib/Bitcode/Writer/Writer.cpp Message-ID: <200704260333.l3Q3X1hp029129@zion.cs.uiuc.edu> Changes in directory llvm/lib/Bitcode/Writer: Writer.cpp updated: 1.10 -> 1.11 --- Log message: improve a comment --- Diffs of the changes: (+5 -3) Writer.cpp | 8 +++++--- 1 files changed, 5 insertions(+), 3 deletions(-) Index: llvm/lib/Bitcode/Writer/Writer.cpp diff -u llvm/lib/Bitcode/Writer/Writer.cpp:1.10 llvm/lib/Bitcode/Writer/Writer.cpp:1.11 --- llvm/lib/Bitcode/Writer/Writer.cpp:1.10 Wed Apr 25 22:27:58 2007 +++ llvm/lib/Bitcode/Writer/Writer.cpp Wed Apr 25 22:32:43 2007 @@ -572,8 +572,9 @@ // Emit constants. WriteModuleConstants(VE, Stream); - // FIXME: Purge aggregate values from the VE, emit a record that indicates how - // many to purge. + // If we have any aggregate values in the value table, purge them - these can + // only be used to initialize global variables. Doing so makes the value + // namespace smaller for code in functions. int NumNonAggregates = VE.PurgeAggregateValues(); if (NumNonAggregates != -1) { SmallVector Vals; @@ -583,7 +584,8 @@ // Emit function bodies. for (Module::const_iterator I = M->begin(), E = M->end(); I != E; ++I) - WriteFunction(*I, VE, Stream); + if (!I->isDeclaration()) + WriteFunction(*I, VE, Stream); // Emit the type symbol table information. WriteTypeSymbolTable(M->getTypeSymbolTable(), VE, Stream); From sabre at nondot.org Wed Apr 25 22:51:15 2007 From: sabre at nondot.org (Chris Lattner) Date: Wed, 25 Apr 2007 22:51:15 -0500 Subject: [llvm-commits] CVS: llvm/lib/Bitcode/Writer/ValueEnumerator.cpp ValueEnumerator.h Writer.cpp Message-ID: <200704260351.l3Q3pFmc029454@zion.cs.uiuc.edu> Changes in directory llvm/lib/Bitcode/Writer: ValueEnumerator.cpp updated: 1.4 -> 1.5 ValueEnumerator.h updated: 1.4 -> 1.5 Writer.cpp updated: 1.11 -> 1.12 --- Log message: add support for incorporating and purging functions to the value enumerator --- Diffs of the changes: (+38 -98) ValueEnumerator.cpp | 127 ++++++++++++---------------------------------------- ValueEnumerator.h | 5 +- Writer.cpp | 4 + 3 files changed, 38 insertions(+), 98 deletions(-) Index: llvm/lib/Bitcode/Writer/ValueEnumerator.cpp diff -u llvm/lib/Bitcode/Writer/ValueEnumerator.cpp:1.4 llvm/lib/Bitcode/Writer/ValueEnumerator.cpp:1.5 --- llvm/lib/Bitcode/Writer/ValueEnumerator.cpp:1.4 Wed Apr 25 22:27:58 2007 +++ llvm/lib/Bitcode/Writer/ValueEnumerator.cpp Wed Apr 25 22:50:57 2007 @@ -53,8 +53,13 @@ // the module symbol table can refer to them... EnumerateValueSymbolTable(M->getValueSymbolTable()); - // Enumerate types used by function bodies. + // Enumerate types used by function bodies and argument lists. for (Module::const_iterator F = M->begin(), E = M->end(); F != E; ++F) { + + for (Function::const_arg_iterator I = F->arg_begin(), E = F->arg_end(); + I != E; ++I) + EnumerateType(I->getType()); + for (Function::const_iterator BB = F->begin(), E = F->end(); BB != E; ++BB) for (BasicBlock::const_iterator I = BB->begin(), E = BB->end(); I!=E;++I){ for (User::const_op_iterator OI = I->op_begin(), E = I->op_end(); @@ -156,109 +161,39 @@ return Values.size(); } - - -#if 0 - -void SlotCalculator::incorporateFunction(const Function *F) { - SC_DEBUG("begin processFunction!\n"); +void ValueEnumerator::incorporateFunction(const Function &F) { + ModuleLevel = Values.size(); - // Iterate over function arguments, adding them to the value table... - for(Function::const_arg_iterator I = F->arg_begin(), E = F->arg_end(); + // Adding function arguments to the value table. + for(Function::const_arg_iterator I = F.arg_begin(), E = F.arg_end(); I != E; ++I) - CreateFunctionValueSlot(I); - - SC_DEBUG("Inserting Instructions:\n"); + EnumerateValue(I); + + // Add all function-level constants to the value table. + for (Function::const_iterator BB = F.begin(), E = F.end(); BB != E; ++BB) { + for (BasicBlock::const_iterator I = BB->begin(), E = BB->end(); I!=E; ++I) + for (User::const_op_iterator OI = I->op_begin(), E = I->op_end(); + OI != E; ++OI) { + if ((isa(*OI) && !isa(*OI)) || + isa(*OI)) + EnumerateValue(*OI); + } + } - // Add all of the instructions to the type planes... - for (Function::const_iterator BB = F->begin(), E = F->end(); BB != E; ++BB) { - CreateFunctionValueSlot(BB); + // Add all of the instructions. + for (Function::const_iterator BB = F.begin(), E = F.end(); BB != E; ++BB) { + EnumerateValue(BB); for (BasicBlock::const_iterator I = BB->begin(), E = BB->end(); I!=E; ++I) { if (I->getType() != Type::VoidTy) - CreateFunctionValueSlot(I); - } - } - - SC_DEBUG("end processFunction!\n"); -} - -void SlotCalculator::purgeFunction() { - SC_DEBUG("begin purgeFunction!\n"); - - // Next, remove values from existing type planes - for (DenseMap::iterator I = ModuleLevel.begin(), - E = ModuleLevel.end(); I != E; ++I) { - unsigned PlaneNo = I->first; - unsigned ModuleLev = I->second; - - // Pop all function-local values in this type-plane off of Table. - TypePlane &Plane = getPlane(PlaneNo); - assert(ModuleLev < Plane.size() && "module levels higher than elements?"); - for (unsigned i = ModuleLev, e = Plane.size(); i != e; ++i) { - NodeMap.erase(Plane.back()); // Erase from nodemap - Plane.pop_back(); // Shrink plane + EnumerateValue(I); } } - - ModuleLevel.clear(); - - // Finally, remove any type planes defined by the function... - while (Table.size() > NumModuleTypes) { - TypePlane &Plane = Table.back(); - SC_DEBUG("Removing Plane " << (Table.size()-1) << " of size " - << Plane.size() << "\n"); - for (unsigned i = 0, e = Plane.size(); i != e; ++i) - NodeMap.erase(Plane[i]); // Erase from nodemap - - Table.pop_back(); // Nuke the plane, we don't like it. - } - - SC_DEBUG("end purgeFunction!\n"); -} - -inline static bool hasImplicitNull(const Type* Ty) { - return Ty != Type::LabelTy && Ty != Type::VoidTy && !isa(Ty); } -void SlotCalculator::CreateFunctionValueSlot(const Value *V) { - assert(!NodeMap.count(V) && "Function-local value can't be inserted!"); - - const Type *Ty = V->getType(); - assert(Ty != Type::VoidTy && "Can't insert void values!"); - assert(!isa(V) && "Not a function-local value!"); - - unsigned TyPlane = getOrCreateTypeSlot(Ty); - if (Table.size() <= TyPlane) // Make sure we have the type plane allocated. - Table.resize(TyPlane+1, TypePlane()); - - // If this is the first value noticed of this type within this function, - // remember the module level for this type plane in ModuleLevel. This reminds - // us to remove the values in purgeFunction and tells us how many to remove. - if (TyPlane < NumModuleTypes) - ModuleLevel.insert(std::make_pair(TyPlane, Table[TyPlane].size())); - - // If this is the first value to get inserted into the type plane, make sure - // to insert the implicit null value. - if (Table[TyPlane].empty()) { - // Label's and opaque types can't have a null value. - if (hasImplicitNull(Ty)) { - Value *ZeroInitializer = Constant::getNullValue(Ty); - - // If we are pushing zeroinit, it will be handled below. - if (V != ZeroInitializer) { - Table[TyPlane].push_back(ZeroInitializer); - NodeMap[ZeroInitializer] = 0; - } - } - } - - // Insert node into table and NodeMap... - NodeMap[V] = Table[TyPlane].size(); - Table[TyPlane].push_back(V); - - SC_DEBUG(" Inserting value [" << TyPlane << "] = " << *V << " slot=" << - NodeMap[V] << "\n"); +void ValueEnumerator::purgeFunction() { + /// Remove purged values from the ValueMap. + for (unsigned i = ModuleLevel, e = Values.size(); i != e; ++i) + ValueMap.erase(Values[i].first); + Values.resize(ModuleLevel); } -#endif Index: llvm/lib/Bitcode/Writer/ValueEnumerator.h diff -u llvm/lib/Bitcode/Writer/ValueEnumerator.h:1.4 llvm/lib/Bitcode/Writer/ValueEnumerator.h:1.5 --- llvm/lib/Bitcode/Writer/ValueEnumerator.h:1.4 Wed Apr 25 22:27:58 2007 +++ llvm/lib/Bitcode/Writer/ValueEnumerator.h Wed Apr 25 22:50:57 2007 @@ -43,6 +43,9 @@ ValueMapType ValueMap; ValueList Values; + /// When a function is incorporated, this is the size of the Values list + /// before incorporation. + unsigned ModuleLevel; ValueEnumerator(const ValueEnumerator &); // DO NOT IMPLEMENT void operator=(const ValueEnumerator &); // DO NOT IMPLEMENT @@ -72,7 +75,7 @@ /// incorporateFunction/purgeFunction - If you'd like to deal with a function, /// use these two methods to get its data into the ValueEnumerator! /// - void incorporateFunction(const Function *F); + void incorporateFunction(const Function &F); void purgeFunction(); private: Index: llvm/lib/Bitcode/Writer/Writer.cpp diff -u llvm/lib/Bitcode/Writer/Writer.cpp:1.11 llvm/lib/Bitcode/Writer/Writer.cpp:1.12 --- llvm/lib/Bitcode/Writer/Writer.cpp:1.11 Wed Apr 25 22:32:43 2007 +++ llvm/lib/Bitcode/Writer/Writer.cpp Wed Apr 25 22:50:57 2007 @@ -478,10 +478,12 @@ } } - +/// WriteFunction - Emit a function body to the module stream. static void WriteFunction(const Function &F, ValueEnumerator &VE, BitstreamWriter &Stream) { + VE.incorporateFunction(F); + VE.purgeFunction(); } /// WriteTypeSymbolTable - Emit a block for the specified type symtab. From reid at x10sys.com Wed Apr 25 22:59:43 2007 From: reid at x10sys.com (Reid Spencer) Date: Wed, 25 Apr 2007 22:59:43 -0500 Subject: [llvm-commits] CVS: llvm/test/TestRunner.sh Message-ID: <200704260359.l3Q3xhOe029621@zion.cs.uiuc.edu> Changes in directory llvm/test: TestRunner.sh updated: 1.17 -> 1.18 --- Log message: For PR1355: http://llvm.org/PR1355 : Make the script process multiple files and describe its usage properly. --- Diffs of the changes: (+25 -25) TestRunner.sh | 50 +++++++++++++++++++++++++------------------------- 1 files changed, 25 insertions(+), 25 deletions(-) Index: llvm/test/TestRunner.sh diff -u llvm/test/TestRunner.sh:1.17 llvm/test/TestRunner.sh:1.18 --- llvm/test/TestRunner.sh:1.17 Sun Apr 15 01:47:49 2007 +++ llvm/test/TestRunner.sh Wed Apr 25 22:59:24 2007 @@ -1,32 +1,32 @@ #!/bin/sh # -# TestRunner.sh - This script is used to run arbitrary unit tests. Unit -# tests must contain the command used to run them in the input file, starting -# immediately after a "RUN:" string. +# TestRunner.sh - This script is used to run the deja-gnu tests exactly like +# deja-gnu does, by executing the Tcl script specified in the test case's +# RUN: lines. This is made possible by a simple make target supported by the +# test/Makefile. All this script does is invoke that make target. # -# This runner recognizes and replaces the following strings in the command: +# Usage: +# TestRunner.sh {script_names} # -# %s - Replaced with the input name of the program, or the program to -# execute, as appropriate. -# %llvmgcc - llvm-gcc command -# %llvmgxx - llvm-g++ command -# %prcontext - prcontext.tcl script +# This script is typically used by cd'ing to a test directory and then +# running TestRunner.sh with a list of test file names you want to run. # -TESTFILE=$1 -if test `dirname $TESTFILE` == . ; then - TESTPATH=`pwd` - SUBDIR="" - while test `basename $TESTPATH` != "test" -a ! -z "$TESTPATH" ; do - tmp=`basename $TESTPATH` - SUBDIR="$tmp/$SUBDIR" - TESTPATH=`dirname $TESTPATH` - done - if test -d "$TESTPATH" ; then - cd $TESTPATH - make check-one TESTONE="$SUBDIR$TESTFILE" +for TESTFILE in "$@" ; do + if test `dirname $TESTFILE` == . ; then + TESTPATH=`pwd` + SUBDIR="" + while test `basename $TESTPATH` != "test" -a ! -z "$TESTPATH" ; do + tmp=`basename $TESTPATH` + SUBDIR="$tmp/$SUBDIR" + TESTPATH=`dirname $TESTPATH` + done + if test -d "$TESTPATH" ; then + cd $TESTPATH + make check-one TESTONE="$SUBDIR$TESTFILE" + else + echo "Can't find llvm/test directory in " `pwd` + fi else - echo "Can't find llvm/test directory in " `pwd` + make check-one TESTONE=$TESTFILE fi -else - make check-one TESTONE=$TESTFILE -fi +done From sabre at nondot.org Wed Apr 25 23:42:34 2007 From: sabre at nondot.org (Chris Lattner) Date: Wed, 25 Apr 2007 23:42:34 -0500 Subject: [llvm-commits] CVS: llvm/lib/Bitcode/Writer/ValueEnumerator.cpp ValueEnumerator.h Message-ID: <200704260442.l3Q4gYc1030658@zion.cs.uiuc.edu> Changes in directory llvm/lib/Bitcode/Writer: ValueEnumerator.cpp updated: 1.5 -> 1.6 ValueEnumerator.h updated: 1.5 -> 1.6 --- Log message: enumerate BB's separately from other function values. --- Diffs of the changes: (+16 -4) ValueEnumerator.cpp | 7 ++++++- ValueEnumerator.h | 13 ++++++++++--- 2 files changed, 16 insertions(+), 4 deletions(-) Index: llvm/lib/Bitcode/Writer/ValueEnumerator.cpp diff -u llvm/lib/Bitcode/Writer/ValueEnumerator.cpp:1.5 llvm/lib/Bitcode/Writer/ValueEnumerator.cpp:1.6 --- llvm/lib/Bitcode/Writer/ValueEnumerator.cpp:1.5 Wed Apr 25 22:50:57 2007 +++ llvm/lib/Bitcode/Writer/ValueEnumerator.cpp Wed Apr 25 23:42:16 2007 @@ -178,11 +178,12 @@ isa(*OI)) EnumerateValue(*OI); } + ValueMap[BB] = BasicBlocks.size(); + BasicBlocks.push_back(BB); } // Add all of the instructions. for (Function::const_iterator BB = F.begin(), E = F.end(); BB != E; ++BB) { - EnumerateValue(BB); for (BasicBlock::const_iterator I = BB->begin(), E = BB->end(); I!=E; ++I) { if (I->getType() != Type::VoidTy) EnumerateValue(I); @@ -194,6 +195,10 @@ /// Remove purged values from the ValueMap. for (unsigned i = ModuleLevel, e = Values.size(); i != e; ++i) ValueMap.erase(Values[i].first); + for (unsigned i = 0, e = BasicBlocks.size(); i != e; ++i) + ValueMap.erase(BasicBlocks[i]); + Values.resize(ModuleLevel); + BasicBlocks.clear(); } Index: llvm/lib/Bitcode/Writer/ValueEnumerator.h diff -u llvm/lib/Bitcode/Writer/ValueEnumerator.h:1.5 llvm/lib/Bitcode/Writer/ValueEnumerator.h:1.6 --- llvm/lib/Bitcode/Writer/ValueEnumerator.h:1.5 Wed Apr 25 22:50:57 2007 +++ llvm/lib/Bitcode/Writer/ValueEnumerator.h Wed Apr 25 23:42:16 2007 @@ -19,13 +19,13 @@ namespace llvm { -class Value; class Type; -class Module; +class Value; +class BasicBlock; class Function; +class Module; class TypeSymbolTable; class ValueSymbolTable; -class ConstantArray; class ValueEnumerator { public: @@ -43,6 +43,10 @@ ValueMapType ValueMap; ValueList Values; + /// BasicBlocks - This contains all the basic blocks for the currently + /// incorporated function. Their reverse mapping is stored in ValueMap. + std::vector BasicBlocks; + /// When a function is incorporated, this is the size of the Values list /// before incorporation. unsigned ModuleLevel; @@ -66,6 +70,9 @@ const ValueList &getValues() const { return Values; } const TypeList &getTypes() const { return Types; } + const std::vector &getBasicBlocks() const { + return BasicBlocks; + } /// PurgeAggregateValues - If there are any aggregate values at the end of the /// value list, remove them and return the count of the remaining values. If From sabre at nondot.org Thu Apr 26 00:29:03 2007 From: sabre at nondot.org (Chris Lattner) Date: Thu, 26 Apr 2007 00:29:03 -0500 Subject: [llvm-commits] CVS: llvm/test/Assembler/2007-04-25-AssemblerFoldExternWeak.ll Message-ID: <200704260529.l3Q5T3j6031558@zion.cs.uiuc.edu> Changes in directory llvm/test/Assembler: 2007-04-25-AssemblerFoldExternWeak.ll added (r1.1) --- Log message: new testcase --- Diffs of the changes: (+6 -0) 2007-04-25-AssemblerFoldExternWeak.ll | 6 ++++++ 1 files changed, 6 insertions(+) Index: llvm/test/Assembler/2007-04-25-AssemblerFoldExternWeak.ll diff -c /dev/null llvm/test/Assembler/2007-04-25-AssemblerFoldExternWeak.ll:1.1 *** /dev/null Thu Apr 26 00:28:55 2007 --- llvm/test/Assembler/2007-04-25-AssemblerFoldExternWeak.ll Thu Apr 26 00:28:45 2007 *************** *** 0 **** --- 1,6 ---- + ; RUN: llvm-as < %s | llvm-dis | grep {icmp.*test_weak.*null} + ; PR1358 + @G = global i1 icmp ne (i32 (...)* @test_weak, i32 (...)* null) + + declare extern_weak i32 @test_weak(...) + From sabre at nondot.org Thu Apr 26 00:30:53 2007 From: sabre at nondot.org (Chris Lattner) Date: Thu, 26 Apr 2007 00:30:53 -0500 Subject: [llvm-commits] CVS: llvm/lib/AsmParser/llvmAsmParser.y Message-ID: <200704260530.l3Q5UrIm031661@zion.cs.uiuc.edu> Changes in directory llvm/lib/AsmParser: llvmAsmParser.y updated: 1.350 -> 1.351 --- Log message: wrap long lines Fix PR1358: http://llvm.org/PR1358 and test/Assembler/2007-04-25-AssemblerFoldExternWeak.ll, by creating forward decl globals with linkage extern_weak to defeat implicit constant folding. --- Diffs of the changes: (+16 -10) llvmAsmParser.y | 26 ++++++++++++++++---------- 1 files changed, 16 insertions(+), 10 deletions(-) Index: llvm/lib/AsmParser/llvmAsmParser.y diff -u llvm/lib/AsmParser/llvmAsmParser.y:1.350 llvm/lib/AsmParser/llvmAsmParser.y:1.351 --- llvm/lib/AsmParser/llvmAsmParser.y:1.350 Wed Apr 25 18:52:02 2007 +++ llvm/lib/AsmParser/llvmAsmParser.y Thu Apr 26 00:30:35 2007 @@ -1608,7 +1608,8 @@ // Check to ensure that Type is not packed if (STy->isPacked()) - GEN_ERROR("Unpacked Initializer to vector type '" + STy->getDescription() + "'"); + GEN_ERROR("Unpacked Initializer to vector type '" + + STy->getDescription() + "'"); $$ = ConstantStruct::get(STy, *$3); delete $1; delete $3; @@ -1627,7 +1628,8 @@ // Check to ensure that Type is not packed if (STy->isPacked()) - GEN_ERROR("Unpacked Initializer to vector type '" + STy->getDescription() + "'"); + GEN_ERROR("Unpacked Initializer to vector type '" + + STy->getDescription() + "'"); $$ = ConstantStruct::get(STy, std::vector()); delete $1; @@ -1746,11 +1748,11 @@ GlobalValue *GV; if (const FunctionType *FTy = dyn_cast(PT->getElementType())) { - GV = new Function(FTy, GlobalValue::ExternalLinkage, Name, + GV = new Function(FTy, GlobalValue::ExternalWeakLinkage, Name, CurModule.CurrentModule); } else { GV = new GlobalVariable(PT->getElementType(), false, - GlobalValue::ExternalLinkage, 0, + GlobalValue::ExternalWeakLinkage, 0, Name, CurModule.CurrentModule); } @@ -2023,7 +2025,8 @@ } GlobalVarAttributes { CurGV = 0; } - | OptGlobalAssign GVInternalLinkage GVVisibilityStyle ThreadLocal GlobalType ConstVal { + | OptGlobalAssign GVInternalLinkage GVVisibilityStyle ThreadLocal GlobalType + ConstVal { if ($6 == 0) GEN_ERROR("Global value initializer is not a constant"); CurGV = ParseGlobalVariable($1, $2, $3, $5, $6->getType(), $6, $4); @@ -2031,7 +2034,8 @@ } GlobalVarAttributes { CurGV = 0; } - | OptGlobalAssign GVExternalLinkage GVVisibilityStyle ThreadLocal GlobalType Types { + | OptGlobalAssign GVExternalLinkage GVVisibilityStyle ThreadLocal GlobalType + Types { if (!UpRefs.empty()) GEN_ERROR("Invalid upreference in type: " + (*$6)->getDescription()); CurGV = ParseGlobalVariable($1, $2, $3, $5, *$6, 0, $4); @@ -2041,7 +2045,8 @@ CurGV = 0; CHECK_FOR_ERROR } - | OptGlobalAssign GVVisibilityStyle ALIAS AliasLinkage ResultTypes SymbolicValueRef { + | OptGlobalAssign GVVisibilityStyle ALIAS AliasLinkage ResultTypes + SymbolicValueRef { std::string Name($1); if (Name.empty()) GEN_ERROR("Alias name cannot be empty") @@ -2060,7 +2065,8 @@ if (V == 0) GEN_ERROR(std::string("Invalid aliasee for alias: ") + $1); if (GlobalValue* Aliasee = dyn_cast(V)) { - GlobalAlias* GA = new GlobalAlias(VTy, $4, Name, Aliasee, CurModule.CurrentModule); + GlobalAlias* GA = new GlobalAlias(VTy, $4, Name, Aliasee, + CurModule.CurrentModule); GA->setVisibility($2); InsertValue(GA, CurModule.Values); } else @@ -2228,7 +2234,7 @@ CurModule.CurrentModule->getFunctionList().push_back(Fn); } else if (!FunctionName.empty() && // Merge with an earlier prototype? (Fn = CurModule.CurrentModule->getFunction(FunctionName))) { - if (Fn->getFunctionType() != FT ) { + if (Fn->getFunctionType() != FT) { // The existing function doesn't have the same type. This is an overload // error. GEN_ERROR("Overload of function '" + FunctionName + "' not permitted."); @@ -2243,7 +2249,7 @@ AI->setName(""); } } else { // Not already defined? - Fn = new Function(FT, GlobalValue::ExternalLinkage, FunctionName, + Fn = new Function(FT, GlobalValue::ExternalWeakLinkage, FunctionName, CurModule.CurrentModule); InsertValue(Fn, CurModule.Values); From sabre at nondot.org Thu Apr 26 00:31:23 2007 From: sabre at nondot.org (Chris Lattner) Date: Thu, 26 Apr 2007 00:31:23 -0500 Subject: [llvm-commits] CVS: llvm/lib/AsmParser/llvmAsmParser.cpp.cvs llvmAsmParser.h.cvs llvmAsmParser.y.cvs Message-ID: <200704260531.l3Q5VNOU031711@zion.cs.uiuc.edu> Changes in directory llvm/lib/AsmParser: llvmAsmParser.cpp.cvs updated: 1.92 -> 1.93 llvmAsmParser.h.cvs updated: 1.70 -> 1.71 llvmAsmParser.y.cvs updated: 1.93 -> 1.94 --- Log message: regen --- Diffs of the changes: (+3351 -4621) llvmAsmParser.cpp.cvs | 7468 +++++++++++++++++++++----------------------------- llvmAsmParser.h.cvs | 463 --- llvmAsmParser.y.cvs | 41 3 files changed, 3351 insertions(+), 4621 deletions(-) Index: llvm/lib/AsmParser/llvmAsmParser.cpp.cvs diff -u llvm/lib/AsmParser/llvmAsmParser.cpp.cvs:1.92 llvm/lib/AsmParser/llvmAsmParser.cpp.cvs:1.93 --- llvm/lib/AsmParser/llvmAsmParser.cpp.cvs:1.92 Wed Apr 25 09:29:12 2007 +++ llvm/lib/AsmParser/llvmAsmParser.cpp.cvs Thu Apr 26 00:31:04 2007 @@ -1,354 +1,151 @@ -/* A Bison parser, made by GNU Bison 2.3. */ -/* Skeleton implementation for Bison's Yacc-like parsers in C +/* A Bison parser, made from /Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y + by GNU Bison version 1.28 */ - Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 - Free Software Foundation, Inc. +#define YYBISON 1 /* Identify Bison output. */ - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. */ - -/* As a special exception, you may create a larger work that contains - part or all of the Bison parser skeleton and distribute that work - under terms of your choice, so long as that work isn't itself a - parser generator using the skeleton or a modified version thereof - as a parser skeleton. Alternatively, if you modify or redistribute - the parser skeleton itself, you may (at your option) remove this - special exception, which will cause the skeleton and the resulting - Bison output files to be licensed under the GNU General Public - License without this special exception. - - This special exception was added by the Free Software Foundation in - version 2.2 of Bison. */ - -/* C LALR(1) parser skeleton written by Richard Stallman, by - simplifying the original so-called "semantic" parser. */ - -/* All symbols defined below should begin with yy or YY, to avoid - infringing on user name space. This should be done even for local - variables, as they might otherwise be expanded by user macros. - There are some unavoidable exceptions within include files to - define necessary library symbols; they are noted "INFRINGES ON - USER NAME SPACE" below. */ - -/* Identify Bison output. */ -#define YYBISON 1 - -/* Bison version. */ -#define YYBISON_VERSION "2.3" - -/* Skeleton name. */ -#define YYSKELETON_NAME "yacc.c" - -/* Pure parsers. */ -#define YYPURE 0 - -/* Using locations. */ -#define YYLSP_NEEDED 0 - -/* Substitute the variable and function names. */ #define yyparse llvmAsmparse -#define yylex llvmAsmlex +#define yylex llvmAsmlex #define yyerror llvmAsmerror -#define yylval llvmAsmlval -#define yychar llvmAsmchar +#define yylval llvmAsmlval +#define yychar llvmAsmchar #define yydebug llvmAsmdebug #define yynerrs llvmAsmnerrs +#define ESINT64VAL 257 +#define EUINT64VAL 258 +#define ESAPINTVAL 259 +#define EUAPINTVAL 260 +#define LOCALVAL_ID 261 +#define GLOBALVAL_ID 262 +#define FPVAL 263 +#define VOID 264 +#define INTTYPE 265 +#define FLOAT 266 +#define DOUBLE 267 +#define LABEL 268 +#define TYPE 269 +#define LOCALVAR 270 +#define GLOBALVAR 271 +#define LABELSTR 272 +#define STRINGCONSTANT 273 +#define ATSTRINGCONSTANT 274 +#define ZEROINITIALIZER 275 +#define TRUETOK 276 +#define FALSETOK 277 +#define BEGINTOK 278 +#define ENDTOK 279 +#define DECLARE 280 +#define DEFINE 281 +#define GLOBAL 282 +#define CONSTANT 283 +#define SECTION 284 +#define ALIAS 285 +#define VOLATILE 286 +#define THREAD_LOCAL 287 +#define TO 288 +#define DOTDOTDOT 289 +#define NULL_TOK 290 +#define UNDEF 291 +#define INTERNAL 292 +#define LINKONCE 293 +#define WEAK 294 +#define APPENDING 295 +#define DLLIMPORT 296 +#define DLLEXPORT 297 +#define EXTERN_WEAK 298 +#define OPAQUE 299 +#define EXTERNAL 300 +#define TARGET 301 +#define TRIPLE 302 +#define ALIGN 303 +#define DEPLIBS 304 +#define CALL 305 +#define TAIL 306 +#define ASM_TOK 307 +#define MODULE 308 +#define SIDEEFFECT 309 +#define CC_TOK 310 +#define CCC_TOK 311 +#define FASTCC_TOK 312 +#define COLDCC_TOK 313 +#define X86_STDCALLCC_TOK 314 +#define X86_FASTCALLCC_TOK 315 +#define DATALAYOUT 316 +#define RET 317 +#define BR 318 +#define SWITCH 319 +#define INVOKE 320 +#define UNWIND 321 +#define UNREACHABLE 322 +#define ADD 323 +#define SUB 324 +#define MUL 325 +#define UDIV 326 +#define SDIV 327 +#define FDIV 328 +#define UREM 329 +#define SREM 330 +#define FREM 331 +#define AND 332 +#define OR 333 +#define XOR 334 +#define SHL 335 +#define LSHR 336 +#define ASHR 337 +#define ICMP 338 +#define FCMP 339 +#define EQ 340 +#define NE 341 +#define SLT 342 +#define SGT 343 +#define SLE 344 +#define SGE 345 +#define ULT 346 +#define UGT 347 +#define ULE 348 +#define UGE 349 +#define OEQ 350 +#define ONE 351 +#define OLT 352 +#define OGT 353 +#define OLE 354 +#define OGE 355 +#define ORD 356 +#define UNO 357 +#define UEQ 358 +#define UNE 359 +#define MALLOC 360 +#define ALLOCA 361 +#define FREE 362 +#define LOAD 363 +#define STORE 364 +#define GETELEMENTPTR 365 +#define TRUNC 366 +#define ZEXT 367 +#define SEXT 368 +#define FPTRUNC 369 +#define FPEXT 370 +#define BITCAST 371 +#define UITOFP 372 +#define SITOFP 373 +#define FPTOUI 374 +#define FPTOSI 375 +#define INTTOPTR 376 +#define PTRTOINT 377 +#define PHI_TOK 378 +#define SELECT 379 +#define VAARG 380 +#define EXTRACTELEMENT 381 +#define INSERTELEMENT 382 +#define SHUFFLEVECTOR 383 +#define NORETURN 384 +#define INREG 385 +#define SRET 386 +#define NOUNWIND 387 +#define DEFAULT 388 +#define HIDDEN 389 - -/* Tokens. */ -#ifndef YYTOKENTYPE -# define YYTOKENTYPE - /* Put the tokens into the symbol table, so that GDB and other debuggers - know about them. */ - enum yytokentype { - ESINT64VAL = 258, - EUINT64VAL = 259, - ESAPINTVAL = 260, - EUAPINTVAL = 261, - LOCALVAL_ID = 262, - GLOBALVAL_ID = 263, - FPVAL = 264, - VOID = 265, - INTTYPE = 266, - FLOAT = 267, - DOUBLE = 268, - LABEL = 269, - TYPE = 270, - LOCALVAR = 271, - GLOBALVAR = 272, - LABELSTR = 273, - STRINGCONSTANT = 274, - ATSTRINGCONSTANT = 275, - ZEROINITIALIZER = 276, - TRUETOK = 277, - FALSETOK = 278, - BEGINTOK = 279, - ENDTOK = 280, - DECLARE = 281, - DEFINE = 282, - GLOBAL = 283, - CONSTANT = 284, - SECTION = 285, - ALIAS = 286, - VOLATILE = 287, - THREAD_LOCAL = 288, - TO = 289, - DOTDOTDOT = 290, - NULL_TOK = 291, - UNDEF = 292, - INTERNAL = 293, - LINKONCE = 294, - WEAK = 295, - APPENDING = 296, - DLLIMPORT = 297, - DLLEXPORT = 298, - EXTERN_WEAK = 299, - OPAQUE = 300, - EXTERNAL = 301, - TARGET = 302, - TRIPLE = 303, - ALIGN = 304, - DEPLIBS = 305, - CALL = 306, - TAIL = 307, - ASM_TOK = 308, - MODULE = 309, - SIDEEFFECT = 310, - CC_TOK = 311, - CCC_TOK = 312, - FASTCC_TOK = 313, - COLDCC_TOK = 314, - X86_STDCALLCC_TOK = 315, - X86_FASTCALLCC_TOK = 316, - DATALAYOUT = 317, - RET = 318, - BR = 319, - SWITCH = 320, - INVOKE = 321, - UNWIND = 322, - UNREACHABLE = 323, - ADD = 324, - SUB = 325, - MUL = 326, - UDIV = 327, - SDIV = 328, - FDIV = 329, - UREM = 330, - SREM = 331, - FREM = 332, - AND = 333, - OR = 334, - XOR = 335, - SHL = 336, - LSHR = 337, - ASHR = 338, - ICMP = 339, - FCMP = 340, - EQ = 341, - NE = 342, - SLT = 343, - SGT = 344, - SLE = 345, - SGE = 346, - ULT = 347, - UGT = 348, - ULE = 349, - UGE = 350, - OEQ = 351, - ONE = 352, - OLT = 353, - OGT = 354, - OLE = 355, - OGE = 356, - ORD = 357, - UNO = 358, - UEQ = 359, - UNE = 360, - MALLOC = 361, - ALLOCA = 362, - FREE = 363, - LOAD = 364, - STORE = 365, - GETELEMENTPTR = 366, - TRUNC = 367, - ZEXT = 368, - SEXT = 369, - FPTRUNC = 370, - FPEXT = 371, - BITCAST = 372, - UITOFP = 373, - SITOFP = 374, - FPTOUI = 375, - FPTOSI = 376, - INTTOPTR = 377, - PTRTOINT = 378, - PHI_TOK = 379, - SELECT = 380, - VAARG = 381, - EXTRACTELEMENT = 382, - INSERTELEMENT = 383, - SHUFFLEVECTOR = 384, - NORETURN = 385, - INREG = 386, - SRET = 387, - NOUNWIND = 388, - DEFAULT = 389, - HIDDEN = 390 - }; -#endif -/* Tokens. */ -#define ESINT64VAL 258 -#define EUINT64VAL 259 -#define ESAPINTVAL 260 -#define EUAPINTVAL 261 -#define LOCALVAL_ID 262 -#define GLOBALVAL_ID 263 -#define FPVAL 264 -#define VOID 265 -#define INTTYPE 266 -#define FLOAT 267 -#define DOUBLE 268 -#define LABEL 269 -#define TYPE 270 -#define LOCALVAR 271 -#define GLOBALVAR 272 -#define LABELSTR 273 -#define STRINGCONSTANT 274 -#define ATSTRINGCONSTANT 275 -#define ZEROINITIALIZER 276 -#define TRUETOK 277 -#define FALSETOK 278 -#define BEGINTOK 279 -#define ENDTOK 280 -#define DECLARE 281 -#define DEFINE 282 -#define GLOBAL 283 -#define CONSTANT 284 -#define SECTION 285 -#define ALIAS 286 -#define VOLATILE 287 -#define THREAD_LOCAL 288 -#define TO 289 -#define DOTDOTDOT 290 -#define NULL_TOK 291 -#define UNDEF 292 -#define INTERNAL 293 -#define LINKONCE 294 -#define WEAK 295 -#define APPENDING 296 -#define DLLIMPORT 297 -#define DLLEXPORT 298 -#define EXTERN_WEAK 299 -#define OPAQUE 300 -#define EXTERNAL 301 -#define TARGET 302 -#define TRIPLE 303 -#define ALIGN 304 -#define DEPLIBS 305 -#define CALL 306 -#define TAIL 307 -#define ASM_TOK 308 -#define MODULE 309 -#define SIDEEFFECT 310 -#define CC_TOK 311 -#define CCC_TOK 312 -#define FASTCC_TOK 313 -#define COLDCC_TOK 314 -#define X86_STDCALLCC_TOK 315 -#define X86_FASTCALLCC_TOK 316 -#define DATALAYOUT 317 -#define RET 318 -#define BR 319 -#define SWITCH 320 -#define INVOKE 321 -#define UNWIND 322 -#define UNREACHABLE 323 -#define ADD 324 -#define SUB 325 -#define MUL 326 -#define UDIV 327 -#define SDIV 328 -#define FDIV 329 -#define UREM 330 -#define SREM 331 -#define FREM 332 -#define AND 333 -#define OR 334 -#define XOR 335 -#define SHL 336 -#define LSHR 337 -#define ASHR 338 -#define ICMP 339 -#define FCMP 340 -#define EQ 341 -#define NE 342 -#define SLT 343 -#define SGT 344 -#define SLE 345 -#define SGE 346 -#define ULT 347 -#define UGT 348 -#define ULE 349 -#define UGE 350 -#define OEQ 351 -#define ONE 352 -#define OLT 353 -#define OGT 354 -#define OLE 355 -#define OGE 356 -#define ORD 357 -#define UNO 358 -#define UEQ 359 -#define UNE 360 -#define MALLOC 361 -#define ALLOCA 362 -#define FREE 363 -#define LOAD 364 -#define STORE 365 -#define GETELEMENTPTR 366 -#define TRUNC 367 -#define ZEXT 368 -#define SEXT 369 -#define FPTRUNC 370 -#define FPEXT 371 -#define BITCAST 372 -#define UITOFP 373 -#define SITOFP 374 -#define FPTOUI 375 -#define FPTOSI 376 -#define INTTOPTR 377 -#define PTRTOINT 378 -#define PHI_TOK 379 -#define SELECT 380 -#define VAARG 381 -#define EXTRACTELEMENT 382 -#define INSERTELEMENT 383 -#define SHUFFLEVECTOR 384 -#define NORETURN 385 -#define INREG 386 -#define SRET 387 -#define NOUNWIND 388 -#define DEFAULT 389 -#define HIDDEN 390 - - - - -/* Copy the first part of user declarations. */ -#line 14 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" +#line 14 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" #include "ParserInternals.h" #include "llvm/CallingConv.h" @@ -1272,29 +1069,8 @@ } - -/* Enabling traces. */ -#ifndef YYDEBUG -# define YYDEBUG 0 -#endif - -/* Enabling verbose error messages. */ -#ifdef YYERROR_VERBOSE -# undef YYERROR_VERBOSE -# define YYERROR_VERBOSE 1 -#else -# define YYERROR_VERBOSE 0 -#endif - -/* Enabling the token table. */ -#ifndef YYTOKEN_TABLE -# define YYTOKEN_TABLE 0 -#endif - -#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED -typedef union YYSTYPE -#line 938 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" -{ +#line 938 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +typedef union { llvm::Module *ModuleVal; llvm::Function *FunctionVal; llvm::BasicBlock *BasicBlockVal; @@ -1339,1755 +1115,1076 @@ llvm::Instruction::OtherOps OtherOpVal; llvm::ICmpInst::Predicate IPredicate; llvm::FCmpInst::Predicate FPredicate; -} -/* Line 187 of yacc.c. */ -#line 1345 "llvmAsmParser.tab.c" - YYSTYPE; -# define yystype YYSTYPE /* obsolescent; will be withdrawn */ -# define YYSTYPE_IS_DECLARED 1 -# define YYSTYPE_IS_TRIVIAL 1 -#endif - +} YYSTYPE; +#include +#ifndef __cplusplus +#ifndef __STDC__ +#define const +#endif +#endif -/* Copy the second part of user declarations. */ -/* Line 216 of yacc.c. */ -#line 1358 "llvmAsmParser.tab.c" +#define YYFINAL 573 +#define YYFLAG -32768 +#define YYNTBASE 150 + +#define YYTRANSLATE(x) ((unsigned)(x) <= 389 ? yytranslate[x] : 230) + +static const short yytranslate[] = { 0, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 140, + 141, 138, 2, 137, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 145, + 136, 146, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 142, 139, 144, 2, 2, 2, 2, 2, 149, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 143, + 2, 2, 147, 2, 148, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 1, 3, 4, 5, 6, + 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, + 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, + 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, + 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, + 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, + 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, + 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, + 127, 128, 129, 130, 131, 132, 133, 134, 135 +}; -#ifdef short -# undef short -#endif +#if YYDEBUG != 0 +static const short yyprhs[] = { 0, + 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, + 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, + 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, + 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, + 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, + 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, + 119, 122, 123, 125, 127, 129, 130, 133, 135, 137, + 139, 141, 143, 145, 147, 149, 150, 152, 154, 155, + 157, 159, 160, 162, 164, 166, 168, 169, 171, 173, + 174, 176, 178, 180, 182, 184, 187, 189, 191, 193, + 195, 196, 199, 201, 203, 205, 206, 209, 210, 213, + 214, 218, 221, 222, 224, 225, 229, 231, 234, 236, + 238, 240, 242, 244, 246, 249, 251, 254, 260, 266, + 272, 278, 282, 285, 291, 296, 299, 301, 303, 305, + 309, 311, 315, 317, 318, 320, 324, 329, 333, 337, + 342, 347, 351, 358, 364, 367, 370, 373, 376, 379, + 382, 385, 388, 391, 394, 397, 400, 407, 413, 422, + 429, 436, 444, 452, 459, 468, 477, 481, 483, 485, + 487, 489, 490, 492, 493, 495, 498, 499, 503, 504, + 508, 512, 516, 520, 521, 529, 530, 539, 540, 549, + 556, 559, 563, 565, 569, 573, 577, 581, 583, 584, + 590, 594, 596, 600, 602, 603, 613, 615, 617, 622, + 624, 626, 629, 633, 634, 636, 638, 640, 642, 644, + 646, 648, 650, 652, 656, 658, 664, 666, 668, 670, + 672, 674, 676, 679, 682, 685, 689, 692, 693, 695, + 698, 701, 705, 715, 725, 734, 749, 751, 753, 760, + 766, 769, 776, 784, 788, 794, 795, 796, 800, 803, + 805, 811, 817, 824, 831, 836, 843, 848, 853, 860, + 867, 870, 879, 881, 883, 884, 888, 895, 899, 906, + 909, 915, 923 +}; -#ifdef YYTYPE_UINT8 -typedef YYTYPE_UINT8 yytype_uint8; -#else -typedef unsigned char yytype_uint8; -#endif +static const short yyrhs[] = { 69, + 0, 70, 0, 71, 0, 72, 0, 73, 0, 74, + 0, 75, 0, 76, 0, 77, 0, 81, 0, 82, + 0, 83, 0, 78, 0, 79, 0, 80, 0, 112, + 0, 113, 0, 114, 0, 115, 0, 116, 0, 117, + 0, 118, 0, 119, 0, 120, 0, 121, 0, 122, + 0, 123, 0, 86, 0, 87, 0, 88, 0, 89, + 0, 90, 0, 91, 0, 92, 0, 93, 0, 94, + 0, 95, 0, 96, 0, 97, 0, 98, 0, 99, + 0, 100, 0, 101, 0, 102, 0, 103, 0, 104, + 0, 105, 0, 92, 0, 93, 0, 94, 0, 95, + 0, 22, 0, 23, 0, 11, 0, 12, 0, 13, + 0, 16, 0, 19, 0, 157, 0, 0, 157, 136, + 0, 0, 17, 0, 20, 0, 162, 0, 0, 160, + 136, 0, 38, 0, 40, 0, 39, 0, 41, 0, + 43, 0, 42, 0, 44, 0, 46, 0, 0, 134, + 0, 135, 0, 0, 42, 0, 44, 0, 0, 38, + 0, 39, 0, 40, 0, 43, 0, 0, 40, 0, + 38, 0, 0, 57, 0, 58, 0, 59, 0, 60, + 0, 61, 0, 56, 4, 0, 113, 0, 114, 0, + 131, 0, 132, 0, 0, 171, 170, 0, 130, 0, + 133, 0, 170, 0, 0, 173, 172, 0, 0, 49, + 4, 0, 0, 137, 49, 4, 0, 30, 19, 0, + 0, 176, 0, 0, 137, 179, 178, 0, 176, 0, + 49, 4, 0, 11, 0, 12, 0, 13, 0, 14, + 0, 45, 0, 180, 0, 181, 138, 0, 214, 0, + 139, 4, 0, 181, 140, 185, 141, 173, 0, 10, + 140, 185, 141, 173, 0, 142, 4, 143, 181, 144, + 0, 145, 4, 143, 181, 146, 0, 147, 186, 148, + 0, 147, 148, 0, 145, 147, 186, 148, 146, 0, + 145, 147, 148, 146, 0, 181, 171, 0, 181, 0, + 10, 0, 182, 0, 184, 137, 182, 0, 184, 0, + 184, 137, 35, 0, 35, 0, 0, 181, 0, 186, + 137, 181, 0, 181, 142, 189, 144, 0, 181, 142, + 144, 0, 181, 149, 19, 0, 181, 145, 189, 146, + 0, 181, 147, 189, 148, 0, 181, 147, 148, 0, + 181, 145, 147, 189, 148, 146, 0, 181, 145, 147, + 148, 146, 0, 181, 36, 0, 181, 37, 0, 181, + 214, 0, 181, 188, 0, 181, 21, 0, 155, 3, + 0, 155, 5, 0, 155, 4, 0, 155, 6, 0, + 11, 22, 0, 11, 23, 0, 156, 9, 0, 152, + 140, 187, 34, 181, 141, 0, 111, 140, 187, 225, + 141, 0, 125, 140, 187, 137, 187, 137, 187, 141, + 0, 150, 140, 187, 137, 187, 141, 0, 151, 140, + 187, 137, 187, 141, 0, 84, 153, 140, 187, 137, + 187, 141, 0, 85, 154, 140, 187, 137, 187, 141, + 0, 127, 140, 187, 137, 187, 141, 0, 128, 140, + 187, 137, 187, 137, 187, 141, 0, 129, 140, 187, + 137, 187, 137, 187, 141, 0, 189, 137, 187, 0, + 187, 0, 28, 0, 29, 0, 33, 0, 0, 193, + 0, 0, 194, 0, 193, 194, 0, 0, 27, 195, + 210, 0, 0, 26, 196, 211, 0, 54, 53, 200, + 0, 159, 15, 181, 0, 159, 15, 10, 0, 0, + 161, 165, 191, 190, 187, 197, 178, 0, 0, 161, + 163, 165, 191, 190, 187, 198, 178, 0, 0, 161, + 164, 165, 191, 190, 181, 199, 178, 0, 161, 165, + 31, 168, 183, 214, 0, 47, 201, 0, 50, 136, + 202, 0, 19, 0, 48, 136, 19, 0, 62, 136, + 19, 0, 142, 203, 144, 0, 203, 137, 19, 0, + 19, 0, 0, 204, 137, 181, 171, 158, 0, 181, + 171, 158, 0, 204, 0, 204, 137, 35, 0, 35, + 0, 0, 169, 183, 160, 140, 205, 141, 173, 177, + 174, 0, 24, 0, 147, 0, 167, 165, 206, 207, + 0, 25, 0, 148, 0, 217, 209, 0, 166, 165, + 206, 0, 0, 55, 0, 3, 0, 4, 0, 9, + 0, 22, 0, 23, 0, 36, 0, 37, 0, 21, + 0, 145, 189, 146, 0, 188, 0, 53, 212, 19, + 137, 19, 0, 7, 0, 8, 0, 157, 0, 160, + 0, 214, 0, 213, 0, 181, 215, 0, 217, 218, + 0, 208, 218, 0, 219, 159, 220, 0, 219, 222, + 0, 0, 18, 0, 63, 216, 0, 63, 10, 0, + 64, 14, 215, 0, 64, 11, 215, 137, 14, 215, + 137, 14, 215, 0, 65, 155, 215, 137, 14, 215, + 142, 221, 144, 0, 65, 155, 215, 137, 14, 215, + 142, 144, 0, 66, 169, 183, 215, 140, 224, 141, + 173, 34, 14, 215, 67, 14, 215, 0, 67, 0, + 68, 0, 221, 155, 213, 137, 14, 215, 0, 155, + 213, 137, 14, 215, 0, 159, 227, 0, 181, 142, + 215, 137, 215, 144, 0, 223, 137, 142, 215, 137, + 215, 144, 0, 181, 215, 171, 0, 224, 137, 181, + 215, 171, 0, 0, 0, 225, 137, 216, 0, 52, + 51, 0, 51, 0, 150, 181, 215, 137, 215, 0, + 151, 181, 215, 137, 215, 0, 84, 153, 181, 215, + 137, 215, 0, 85, 154, 181, 215, 137, 215, 0, + 152, 216, 34, 181, 0, 125, 216, 137, 216, 137, + 216, 0, 126, 216, 137, 181, 0, 127, 216, 137, + 216, 0, 128, 216, 137, 216, 137, 216, 0, 129, + 216, 137, 216, 137, 216, 0, 124, 223, 0, 226, + 169, 183, 215, 140, 224, 141, 173, 0, 229, 0, + 32, 0, 0, 106, 181, 175, 0, 106, 181, 137, + 11, 215, 175, 0, 107, 181, 175, 0, 107, 181, + 137, 11, 215, 175, 0, 108, 216, 0, 228, 109, + 181, 215, 175, 0, 228, 110, 216, 137, 181, 215, + 175, 0, 111, 181, 215, 225, 0 +}; -#ifdef YYTYPE_INT8 -typedef YYTYPE_INT8 yytype_int8; -#elif (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -typedef signed char yytype_int8; -#else -typedef short int yytype_int8; #endif -#ifdef YYTYPE_UINT16 -typedef YYTYPE_UINT16 yytype_uint16; -#else -typedef unsigned short int yytype_uint16; +#if YYDEBUG != 0 +static const short yyrline[] = { 0, + 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1095, + 1095, 1095, 1095, 1095, 1095, 1096, 1096, 1096, 1096, 1096, + 1096, 1096, 1097, 1097, 1097, 1097, 1097, 1100, 1100, 1101, + 1101, 1102, 1102, 1103, 1103, 1104, 1104, 1108, 1108, 1109, + 1109, 1110, 1110, 1111, 1111, 1112, 1112, 1113, 1113, 1114, + 1114, 1115, 1116, 1121, 1122, 1122, 1124, 1124, 1125, 1125, + 1129, 1133, 1138, 1138, 1140, 1141, 1146, 1152, 1153, 1154, + 1155, 1156, 1160, 1161, 1162, 1166, 1167, 1168, 1172, 1173, + 1174, 1178, 1179, 1180, 1181, 1182, 1186, 1187, 1188, 1191, + 1191, 1192, 1193, 1194, 1195, 1196, 1204, 1205, 1206, 1207, + 1210, 1211, 1216, 1217, 1218, 1221, 1222, 1229, 1229, 1236, + 1236, 1245, 1253, 1253, 1259, 1259, 1261, 1266, 1279, 1279, + 1279, 1279, 1282, 1286, 1290, 1297, 1302, 1310, 1340, 1371, + 1376, 1388, 1398, 1402, 1412, 1419, 1426, 1433, 1438, 1443, + 1450, 1451, 1458, 1465, 1473, 1479, 1491, 1519, 1535, 1564, + 1592, 1618, 1638, 1664, 1684, 1696, 1703, 1769, 1779, 1789, + 1795, 1805, 1811, 1821, 1826, 1831, 1839, 1851, 1873, 1881, + 1887, 1898, 1903, 1908, 1914, 1920, 1929, 1933, 1941, 1941, + 1944, 1944, 1955, 1960, 1968, 1969, 1973, 1973, 1977, 1977, + 1980, 1983, 2007, 2018, 2025, 2028, 2034, 2037, 2044, 2048, + 2077, 2080, 2086, 2099, 2103, 2108, 2110, 2115, 2120, 2129, + 2139, 2150, 2154, 2163, 2172, 2177, 2299, 2299, 2301, 2310, + 2310, 2312, 2317, 2329, 2333, 2338, 2342, 2346, 2350, 2354, + 2358, 2362, 2366, 2370, 2395, 2399, 2413, 2417, 2421, 2425, + 2431, 2431, 2437, 2446, 2450, 2459, 2468, 2477, 2481, 2486, + 2490, 2494, 2499, 2509, 2528, 2537, 2617, 2621, 2628, 2639, + 2652, 2662, 2673, 2683, 2692, 2701, 2704, 2705, 2712, 2716, + 2721, 2742, 2759, 2773, 2787, 2799, 2807, 2814, 2820, 2826, + 2832, 2847, 2932, 2937, 2941, 2948, 2955, 2963, 2970, 2978, + 2986, 3000, 3017 +}; #endif -#ifdef YYTYPE_INT16 -typedef YYTYPE_INT16 yytype_int16; -#else -typedef short int yytype_int16; -#endif -#ifndef YYSIZE_T -# ifdef __SIZE_TYPE__ -# define YYSIZE_T __SIZE_TYPE__ -# elif defined size_t -# define YYSIZE_T size_t -# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -# include /* INFRINGES ON USER NAME SPACE */ -# define YYSIZE_T size_t -# else -# define YYSIZE_T unsigned int -# endif -#endif - -#define YYSIZE_MAXIMUM ((YYSIZE_T) -1) - -#ifndef YY_ -# if YYENABLE_NLS -# if ENABLE_NLS -# include /* INFRINGES ON USER NAME SPACE */ -# define YY_(msgid) dgettext ("bison-runtime", msgid) -# endif -# endif -# ifndef YY_ -# define YY_(msgid) msgid -# endif -#endif - -/* Suppress unused-variable warnings by "using" E. */ -#if ! defined lint || defined __GNUC__ -# define YYUSE(e) ((void) (e)) -#else -# define YYUSE(e) /* empty */ -#endif +#if YYDEBUG != 0 || defined (YYERROR_VERBOSE) -/* Identity function, used to suppress warnings about constant conditions. */ -#ifndef lint -# define YYID(n) (n) -#else -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -static int -YYID (int i) -#else -static int -YYID (i) - int i; -#endif -{ - return i; -} +static const char * const yytname[] = { "$","error","$undefined.","ESINT64VAL", +"EUINT64VAL","ESAPINTVAL","EUAPINTVAL","LOCALVAL_ID","GLOBALVAL_ID","FPVAL", +"VOID","INTTYPE","FLOAT","DOUBLE","LABEL","TYPE","LOCALVAR","GLOBALVAR","LABELSTR", +"STRINGCONSTANT","ATSTRINGCONSTANT","ZEROINITIALIZER","TRUETOK","FALSETOK","BEGINTOK", +"ENDTOK","DECLARE","DEFINE","GLOBAL","CONSTANT","SECTION","ALIAS","VOLATILE", +"THREAD_LOCAL","TO","DOTDOTDOT","NULL_TOK","UNDEF","INTERNAL","LINKONCE","WEAK", +"APPENDING","DLLIMPORT","DLLEXPORT","EXTERN_WEAK","OPAQUE","EXTERNAL","TARGET", +"TRIPLE","ALIGN","DEPLIBS","CALL","TAIL","ASM_TOK","MODULE","SIDEEFFECT","CC_TOK", +"CCC_TOK","FASTCC_TOK","COLDCC_TOK","X86_STDCALLCC_TOK","X86_FASTCALLCC_TOK", +"DATALAYOUT","RET","BR","SWITCH","INVOKE","UNWIND","UNREACHABLE","ADD","SUB", +"MUL","UDIV","SDIV","FDIV","UREM","SREM","FREM","AND","OR","XOR","SHL","LSHR", +"ASHR","ICMP","FCMP","EQ","NE","SLT","SGT","SLE","SGE","ULT","UGT","ULE","UGE", +"OEQ","ONE","OLT","OGT","OLE","OGE","ORD","UNO","UEQ","UNE","MALLOC","ALLOCA", +"FREE","LOAD","STORE","GETELEMENTPTR","TRUNC","ZEXT","SEXT","FPTRUNC","FPEXT", +"BITCAST","UITOFP","SITOFP","FPTOUI","FPTOSI","INTTOPTR","PTRTOINT","PHI_TOK", +"SELECT","VAARG","EXTRACTELEMENT","INSERTELEMENT","SHUFFLEVECTOR","NORETURN", +"INREG","SRET","NOUNWIND","DEFAULT","HIDDEN","'='","','","'*'","'\\\\'","'('", +"')'","'['","'x'","']'","'<'","'>'","'{'","'}'","'c'","ArithmeticOps","LogicalOps", +"CastOps","IPredicates","FPredicates","IntType","FPType","LocalName","OptLocalName", +"OptLocalAssign","GlobalName","OptGlobalAssign","GlobalAssign","GVInternalLinkage", +"GVExternalLinkage","GVVisibilityStyle","FunctionDeclareLinkage","FunctionDefineLinkage", +"AliasLinkage","OptCallingConv","ParamAttr","OptParamAttrs","FuncAttr","OptFuncAttrs", +"OptAlign","OptCAlign","SectionString","OptSection","GlobalVarAttributes","GlobalVarAttribute", +"PrimType","Types","ArgType","ResultTypes","ArgTypeList","ArgTypeListI","TypeListI", +"ConstVal","ConstExpr","ConstVector","GlobalType","ThreadLocal","Module","DefinitionList", +"Definition","@1","@2","@3","@4","@5","AsmBlock","TargetDefinition","LibrariesDefinition", +"LibList","ArgListH","ArgList","FunctionHeaderH","BEGIN","FunctionHeader","END", +"Function","FunctionProto","OptSideEffect","ConstValueRef","SymbolicValueRef", +"ValueRef","ResolvedVal","BasicBlockList","BasicBlock","InstructionList","BBTerminatorInst", +"JumpTable","Inst","PHIList","ValueRefList","IndexList","OptTailCall","InstVal", +"OptVolatile","MemoryInst", NULL +}; #endif -#if ! defined yyoverflow || YYERROR_VERBOSE - -/* The parser invokes alloca or malloc; define the necessary symbols. */ - -# ifdef YYSTACK_USE_ALLOCA -# if YYSTACK_USE_ALLOCA -# ifdef __GNUC__ -# define YYSTACK_ALLOC __builtin_alloca -# elif defined __BUILTIN_VA_ARG_INCR -# include /* INFRINGES ON USER NAME SPACE */ -# elif defined _AIX -# define YYSTACK_ALLOC __alloca -# elif defined _MSC_VER -# include /* INFRINGES ON USER NAME SPACE */ -# define alloca _alloca -# else -# define YYSTACK_ALLOC alloca -# if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -# include /* INFRINGES ON USER NAME SPACE */ -# ifndef _STDLIB_H -# define _STDLIB_H 1 -# endif -# endif -# endif -# endif -# endif - -# ifdef YYSTACK_ALLOC - /* Pacify GCC's `empty if-body' warning. */ -# define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0)) -# ifndef YYSTACK_ALLOC_MAXIMUM - /* The OS might guarantee only one guard page at the bottom of the stack, - and a page size can be as small as 4096 bytes. So we cannot safely - invoke alloca (N) if N exceeds 4096. Use a slightly smaller number - to allow for a few compiler-allocated temporary stack slots. */ -# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ -# endif -# else -# define YYSTACK_ALLOC YYMALLOC -# define YYSTACK_FREE YYFREE -# ifndef YYSTACK_ALLOC_MAXIMUM -# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM -# endif -# if (defined __cplusplus && ! defined _STDLIB_H \ - && ! ((defined YYMALLOC || defined malloc) \ - && (defined YYFREE || defined free))) -# include /* INFRINGES ON USER NAME SPACE */ -# ifndef _STDLIB_H -# define _STDLIB_H 1 -# endif -# endif -# ifndef YYMALLOC -# define YYMALLOC malloc -# if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ -# endif -# endif -# ifndef YYFREE -# define YYFREE free -# if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -void free (void *); /* INFRINGES ON USER NAME SPACE */ -# endif -# endif -# endif -#endif /* ! defined yyoverflow || YYERROR_VERBOSE */ - - -#if (! defined yyoverflow \ - && (! defined __cplusplus \ - || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) - -/* A type that is properly aligned for any stack member. */ -union yyalloc -{ - yytype_int16 yyss; - YYSTYPE yyvs; - }; - -/* The size of the maximum gap between one aligned stack and the next. */ -# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) - -/* The size of an array large to enough to hold all stacks, each with - N elements. */ -# define YYSTACK_BYTES(N) \ - ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ - + YYSTACK_GAP_MAXIMUM) - -/* Copy COUNT objects from FROM to TO. The source and destination do - not overlap. */ -# ifndef YYCOPY -# if defined __GNUC__ && 1 < __GNUC__ -# define YYCOPY(To, From, Count) \ - __builtin_memcpy (To, From, (Count) * sizeof (*(From))) -# else -# define YYCOPY(To, From, Count) \ - do \ - { \ - YYSIZE_T yyi; \ - for (yyi = 0; yyi < (Count); yyi++) \ - (To)[yyi] = (From)[yyi]; \ - } \ - while (YYID (0)) -# endif -# endif - -/* Relocate STACK from its old location to the new one. The - local variables YYSIZE and YYSTACKSIZE give the old and new number of - elements in the stack, and YYPTR gives the new location of the - stack. Advance YYPTR to a properly aligned location for the next - stack. */ -# define YYSTACK_RELOCATE(Stack) \ - do \ - { \ - YYSIZE_T yynewbytes; \ - YYCOPY (&yyptr->Stack, Stack, yysize); \ - Stack = &yyptr->Stack; \ - yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ - yyptr += yynewbytes / sizeof (*yyptr); \ - } \ - while (YYID (0)) - -#endif - -/* YYFINAL -- State number of the termination state. */ -#define YYFINAL 41 -/* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 1455 - -/* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 150 -/* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 81 -/* YYNRULES -- Number of rules. */ -#define YYNRULES 294 -/* YYNRULES -- Number of states. */ -#define YYNSTATES 573 - -/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ -#define YYUNDEFTOK 2 -#define YYMAXUTOK 390 - -#define YYTRANSLATE(YYX) \ - ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) - -/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ -static const yytype_uint8 yytranslate[] = -{ - 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 140, 141, 138, 2, 137, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 145, 136, 146, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 142, 139, 144, 2, 2, 2, 2, 2, 149, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 143, 2, 2, 147, 2, 148, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, - 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, - 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, - 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, - 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, - 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, - 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, - 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, - 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, - 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, - 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, - 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, - 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, - 135 +static const short yyr1[] = { 0, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 151, + 151, 151, 151, 151, 151, 152, 152, 152, 152, 152, + 152, 152, 152, 152, 152, 152, 152, 153, 153, 153, + 153, 153, 153, 153, 153, 153, 153, 154, 154, 154, + 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, + 154, 154, 154, 155, 156, 156, 157, 157, 158, 158, + 159, 159, 160, 160, 161, 161, 162, 163, 163, 163, + 163, 163, 164, 164, 164, 165, 165, 165, 166, 166, + 166, 167, 167, 167, 167, 167, 168, 168, 168, 169, + 169, 169, 169, 169, 169, 169, 170, 170, 170, 170, + 171, 171, 172, 172, 172, 173, 173, 174, 174, 175, + 175, 176, 177, 177, 178, 178, 179, 179, 180, 180, + 180, 180, 181, 181, 181, 181, 181, 181, 181, 181, + 181, 181, 181, 181, 181, 182, 183, 183, 184, 184, + 185, 185, 185, 185, 186, 186, 187, 187, 187, 187, + 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, + 187, 187, 187, 187, 187, 187, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 189, 189, 190, 190, + 191, 191, 192, 192, 193, 193, 195, 194, 196, 194, + 194, 194, 194, 197, 194, 198, 194, 199, 194, 194, + 194, 194, 200, 201, 201, 202, 203, 203, 203, 204, + 204, 205, 205, 205, 205, 206, 207, 207, 208, 209, + 209, 210, 211, 212, 212, 213, 213, 213, 213, 213, + 213, 213, 213, 213, 213, 213, 214, 214, 214, 214, + 215, 215, 216, 217, 217, 218, 219, 219, 219, 220, + 220, 220, 220, 220, 220, 220, 220, 220, 221, 221, + 222, 223, 223, 224, 224, 224, 225, 225, 226, 226, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 228, 228, 229, 229, 229, 229, 229, + 229, 229, 229 }; -#if YYDEBUG -/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in - YYRHS. */ -static const yytype_uint16 yyprhs[] = -{ - 0, 0, 3, 5, 7, 9, 11, 13, 15, 17, - 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, - 39, 41, 43, 45, 47, 49, 51, 53, 55, 57, - 59, 61, 63, 65, 67, 69, 71, 73, 75, 77, - 79, 81, 83, 85, 87, 89, 91, 93, 95, 97, - 99, 101, 103, 105, 107, 109, 111, 113, 115, 117, - 119, 121, 122, 125, 126, 128, 130, 132, 133, 136, - 138, 140, 142, 144, 146, 148, 150, 152, 153, 155, - 157, 158, 160, 162, 163, 165, 167, 169, 171, 172, - 174, 176, 177, 179, 181, 183, 185, 187, 190, 192, - 194, 196, 198, 199, 202, 204, 206, 208, 209, 212, - 213, 216, 217, 221, 224, 225, 227, 228, 232, 234, - 237, 239, 241, 243, 245, 247, 249, 252, 254, 257, - 263, 269, 275, 281, 285, 288, 294, 299, 302, 304, - 306, 308, 312, 314, 318, 320, 321, 323, 327, 332, - 336, 340, 345, 350, 354, 361, 367, 370, 373, 376, - 379, 382, 385, 388, 391, 394, 397, 400, 403, 410, - 416, 425, 432, 439, 447, 455, 462, 471, 480, 484, - 486, 488, 490, 492, 493, 495, 496, 498, 501, 502, - 506, 507, 511, 515, 519, 523, 524, 532, 533, 542, - 543, 552, 559, 562, 566, 568, 572, 576, 580, 584, - 586, 587, 593, 597, 599, 603, 605, 606, 616, 618, - 620, 625, 627, 629, 632, 636, 637, 639, 641, 643, - 645, 647, 649, 651, 653, 655, 659, 661, 667, 669, - 671, 673, 675, 677, 679, 682, 685, 688, 692, 695, - 696, 698, 701, 704, 708, 718, 728, 737, 752, 754, - 756, 763, 769, 772, 779, 787, 791, 797, 798, 799, - 803, 806, 808, 814, 820, 827, 834, 839, 846, 851, - 856, 863, 870, 873, 882, 884, 886, 887, 891, 898, - 902, 909, 912, 918, 926 +static const short yyr2[] = { 0, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, + 2, 0, 1, 1, 1, 0, 2, 1, 1, 1, + 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, + 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, + 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, + 0, 2, 1, 1, 1, 0, 2, 0, 2, 0, + 3, 2, 0, 1, 0, 3, 1, 2, 1, 1, + 1, 1, 1, 1, 2, 1, 2, 5, 5, 5, + 5, 3, 2, 5, 4, 2, 1, 1, 1, 3, + 1, 3, 1, 0, 1, 3, 4, 3, 3, 4, + 4, 3, 6, 5, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 6, 5, 8, 6, + 6, 7, 7, 6, 8, 8, 3, 1, 1, 1, + 1, 0, 1, 0, 1, 2, 0, 3, 0, 3, + 3, 3, 3, 0, 7, 0, 8, 0, 8, 6, + 2, 3, 1, 3, 3, 3, 3, 1, 0, 5, + 3, 1, 3, 1, 0, 9, 1, 1, 4, 1, + 1, 2, 3, 0, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 3, 1, 5, 1, 1, 1, 1, + 1, 1, 2, 2, 2, 3, 2, 0, 1, 2, + 2, 3, 9, 9, 8, 14, 1, 1, 6, 5, + 2, 6, 7, 3, 5, 0, 0, 3, 2, 1, + 5, 5, 6, 6, 4, 6, 4, 4, 6, 6, + 2, 8, 1, 1, 0, 3, 6, 3, 6, 2, + 5, 7, 4 }; -/* YYRHS -- A `-1'-separated list of the rules' RHS. */ -static const yytype_int16 yyrhs[] = -{ - 193, 0, -1, 69, -1, 70, -1, 71, -1, 72, - -1, 73, -1, 74, -1, 75, -1, 76, -1, 77, - -1, 81, -1, 82, -1, 83, -1, 78, -1, 79, - -1, 80, -1, 112, -1, 113, -1, 114, -1, 115, - -1, 116, -1, 117, -1, 118, -1, 119, -1, 120, - -1, 121, -1, 122, -1, 123, -1, 86, -1, 87, - -1, 88, -1, 89, -1, 90, -1, 91, -1, 92, - -1, 93, -1, 94, -1, 95, -1, 96, -1, 97, - -1, 98, -1, 99, -1, 100, -1, 101, -1, 102, - -1, 103, -1, 104, -1, 105, -1, 92, -1, 93, - -1, 94, -1, 95, -1, 22, -1, 23, -1, 11, - -1, 12, -1, 13, -1, 16, -1, 19, -1, 158, - -1, -1, 158, 136, -1, -1, 17, -1, 20, -1, - 163, -1, -1, 161, 136, -1, 38, -1, 40, -1, - 39, -1, 41, -1, 43, -1, 42, -1, 44, -1, - 46, -1, -1, 134, -1, 135, -1, -1, 42, -1, - 44, -1, -1, 38, -1, 39, -1, 40, -1, 43, - -1, -1, 40, -1, 38, -1, -1, 57, -1, 58, - -1, 59, -1, 60, -1, 61, -1, 56, 4, -1, - 113, -1, 114, -1, 131, -1, 132, -1, -1, 172, - 171, -1, 130, -1, 133, -1, 171, -1, -1, 174, - 173, -1, -1, 49, 4, -1, -1, 137, 49, 4, - -1, 30, 19, -1, -1, 177, -1, -1, 137, 180, - 179, -1, 177, -1, 49, 4, -1, 11, -1, 12, - -1, 13, -1, 14, -1, 45, -1, 181, -1, 182, - 138, -1, 215, -1, 139, 4, -1, 182, 140, 186, - 141, 174, -1, 10, 140, 186, 141, 174, -1, 142, - 4, 143, 182, 144, -1, 145, 4, 143, 182, 146, - -1, 147, 187, 148, -1, 147, 148, -1, 145, 147, - 187, 148, 146, -1, 145, 147, 148, 146, -1, 182, - 172, -1, 182, -1, 10, -1, 183, -1, 185, 137, - 183, -1, 185, -1, 185, 137, 35, -1, 35, -1, - -1, 182, -1, 187, 137, 182, -1, 182, 142, 190, - 144, -1, 182, 142, 144, -1, 182, 149, 19, -1, - 182, 145, 190, 146, -1, 182, 147, 190, 148, -1, - 182, 147, 148, -1, 182, 145, 147, 190, 148, 146, - -1, 182, 145, 147, 148, 146, -1, 182, 36, -1, - 182, 37, -1, 182, 215, -1, 182, 189, -1, 182, - 21, -1, 156, 3, -1, 156, 5, -1, 156, 4, - -1, 156, 6, -1, 11, 22, -1, 11, 23, -1, - 157, 9, -1, 153, 140, 188, 34, 182, 141, -1, - 111, 140, 188, 226, 141, -1, 125, 140, 188, 137, - 188, 137, 188, 141, -1, 151, 140, 188, 137, 188, - 141, -1, 152, 140, 188, 137, 188, 141, -1, 84, - 154, 140, 188, 137, 188, 141, -1, 85, 155, 140, - 188, 137, 188, 141, -1, 127, 140, 188, 137, 188, - 141, -1, 128, 140, 188, 137, 188, 137, 188, 141, - -1, 129, 140, 188, 137, 188, 137, 188, 141, -1, - 190, 137, 188, -1, 188, -1, 28, -1, 29, -1, - 33, -1, -1, 194, -1, -1, 195, -1, 194, 195, - -1, -1, 27, 196, 211, -1, -1, 26, 197, 212, - -1, 54, 53, 201, -1, 160, 15, 182, -1, 160, - 15, 10, -1, -1, 162, 166, 192, 191, 188, 198, - 179, -1, -1, 162, 164, 166, 192, 191, 188, 199, - 179, -1, -1, 162, 165, 166, 192, 191, 182, 200, - 179, -1, 162, 166, 31, 169, 184, 215, -1, 47, - 202, -1, 50, 136, 203, -1, 19, -1, 48, 136, - 19, -1, 62, 136, 19, -1, 142, 204, 144, -1, - 204, 137, 19, -1, 19, -1, -1, 205, 137, 182, - 172, 159, -1, 182, 172, 159, -1, 205, -1, 205, - 137, 35, -1, 35, -1, -1, 170, 184, 161, 140, - 206, 141, 174, 178, 175, -1, 24, -1, 147, -1, - 168, 166, 207, 208, -1, 25, -1, 148, -1, 218, - 210, -1, 167, 166, 207, -1, -1, 55, -1, 3, - -1, 4, -1, 9, -1, 22, -1, 23, -1, 36, - -1, 37, -1, 21, -1, 145, 190, 146, -1, 189, - -1, 53, 213, 19, 137, 19, -1, 7, -1, 8, - -1, 158, -1, 161, -1, 215, -1, 214, -1, 182, - 216, -1, 218, 219, -1, 209, 219, -1, 220, 160, - 221, -1, 220, 223, -1, -1, 18, -1, 63, 217, - -1, 63, 10, -1, 64, 14, 216, -1, 64, 11, - 216, 137, 14, 216, 137, 14, 216, -1, 65, 156, - 216, 137, 14, 216, 142, 222, 144, -1, 65, 156, - 216, 137, 14, 216, 142, 144, -1, 66, 170, 184, - 216, 140, 225, 141, 174, 34, 14, 216, 67, 14, - 216, -1, 67, -1, 68, -1, 222, 156, 214, 137, - 14, 216, -1, 156, 214, 137, 14, 216, -1, 160, - 228, -1, 182, 142, 216, 137, 216, 144, -1, 224, - 137, 142, 216, 137, 216, 144, -1, 182, 216, 172, - -1, 225, 137, 182, 216, 172, -1, -1, -1, 226, - 137, 217, -1, 52, 51, -1, 51, -1, 151, 182, - 216, 137, 216, -1, 152, 182, 216, 137, 216, -1, - 84, 154, 182, 216, 137, 216, -1, 85, 155, 182, - 216, 137, 216, -1, 153, 217, 34, 182, -1, 125, - 217, 137, 217, 137, 217, -1, 126, 217, 137, 182, - -1, 127, 217, 137, 217, -1, 128, 217, 137, 217, - 137, 217, -1, 129, 217, 137, 217, 137, 217, -1, - 124, 224, -1, 227, 170, 184, 216, 140, 225, 141, - 174, -1, 230, -1, 32, -1, -1, 106, 182, 176, - -1, 106, 182, 137, 11, 216, 176, -1, 107, 182, - 176, -1, 107, 182, 137, 11, 216, 176, -1, 108, - 217, -1, 229, 109, 182, 216, 176, -1, 229, 110, - 217, 137, 182, 216, 176, -1, 111, 182, 216, 226, - -1 +static const short yydefact[] = { 66, + 57, 63, 58, 64, 189, 187, 0, 0, 0, 0, + 0, 0, 76, 65, 66, 185, 79, 82, 0, 0, + 201, 0, 0, 61, 0, 67, 68, 70, 69, 71, + 73, 72, 74, 75, 77, 78, 76, 76, 182, 186, + 80, 81, 76, 190, 83, 84, 85, 86, 76, 248, + 188, 248, 0, 0, 209, 202, 203, 191, 237, 238, + 193, 119, 120, 121, 122, 123, 0, 0, 0, 0, + 239, 240, 124, 192, 126, 182, 182, 87, 181, 0, + 90, 90, 249, 245, 62, 220, 221, 222, 244, 204, + 205, 208, 0, 144, 127, 0, 0, 0, 0, 133, + 145, 0, 125, 144, 0, 0, 89, 88, 0, 179, + 180, 0, 0, 91, 92, 93, 94, 95, 0, 223, + 0, 285, 247, 0, 206, 143, 101, 139, 141, 0, + 0, 0, 0, 0, 0, 132, 0, 0, 0, 138, + 137, 0, 119, 120, 121, 0, 0, 0, 194, 96, + 0, 217, 218, 219, 284, 270, 0, 0, 0, 0, + 90, 257, 258, 1, 2, 3, 4, 5, 6, 7, + 8, 9, 13, 14, 15, 10, 11, 12, 0, 0, + 0, 0, 0, 0, 16, 17, 18, 19, 20, 21, + 22, 23, 24, 25, 26, 27, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 246, 90, 261, 0, 283, + 207, 136, 0, 106, 0, 0, 135, 0, 146, 106, + 196, 198, 200, 164, 165, 160, 162, 161, 163, 166, + 159, 155, 156, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 158, 157, 115, + 0, 269, 251, 0, 250, 0, 0, 54, 0, 0, + 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, + 0, 52, 53, 48, 49, 50, 51, 38, 39, 40, + 41, 42, 43, 44, 45, 46, 47, 0, 110, 110, + 290, 0, 0, 281, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 97, 98, 99, 100, 102, + 142, 140, 129, 130, 131, 134, 128, 115, 115, 0, + 0, 0, 0, 0, 0, 0, 148, 178, 0, 0, + 0, 152, 0, 149, 0, 0, 0, 0, 195, 215, + 226, 227, 228, 233, 229, 230, 231, 232, 224, 0, + 235, 242, 241, 243, 0, 252, 0, 0, 0, 0, + 0, 286, 0, 288, 267, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 103, 104, + 105, 107, 197, 199, 0, 0, 267, 0, 0, 0, + 0, 0, 147, 133, 145, 0, 150, 151, 0, 0, + 0, 0, 0, 117, 115, 214, 101, 212, 0, 225, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 293, 0, 0, 0, 277, 278, 0, 0, 0, 0, + 275, 0, 110, 0, 0, 0, 0, 0, 0, 0, + 0, 177, 154, 0, 0, 0, 0, 112, 118, 116, + 60, 0, 106, 0, 234, 0, 0, 266, 0, 0, + 110, 111, 110, 0, 0, 0, 0, 0, 0, 271, + 272, 266, 0, 291, 0, 0, 0, 168, 0, 0, + 0, 0, 153, 0, 0, 0, 59, 211, 213, 101, + 113, 0, 0, 0, 0, 0, 273, 274, 287, 289, + 268, 0, 0, 276, 279, 280, 0, 110, 0, 0, + 0, 174, 0, 0, 170, 171, 167, 60, 114, 108, + 236, 0, 0, 101, 0, 106, 262, 0, 106, 292, + 172, 173, 0, 0, 0, 210, 0, 216, 0, 255, + 0, 0, 264, 0, 0, 263, 282, 169, 175, 176, + 109, 253, 0, 254, 0, 101, 0, 0, 0, 265, + 0, 0, 0, 0, 260, 0, 0, 259, 0, 256, + 0, 0, 0 }; -/* YYRLINE[YYN] -- source line where rule number YYN was defined. */ -static const yytype_uint16 yyrline[] = -{ - 0, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, - 1094, 1095, 1095, 1095, 1095, 1095, 1095, 1096, 1096, 1096, - 1096, 1096, 1096, 1097, 1097, 1097, 1097, 1097, 1097, 1100, - 1100, 1101, 1101, 1102, 1102, 1103, 1103, 1104, 1104, 1108, - 1108, 1109, 1109, 1110, 1110, 1111, 1111, 1112, 1112, 1113, - 1113, 1114, 1114, 1115, 1116, 1121, 1122, 1122, 1124, 1124, - 1125, 1125, 1129, 1133, 1138, 1138, 1140, 1141, 1146, 1152, - 1153, 1154, 1155, 1156, 1160, 1161, 1162, 1166, 1167, 1168, - 1172, 1173, 1174, 1178, 1179, 1180, 1181, 1182, 1186, 1187, - 1188, 1191, 1192, 1193, 1194, 1195, 1196, 1197, 1204, 1205, - 1206, 1207, 1210, 1211, 1216, 1217, 1218, 1221, 1222, 1229, - 1230, 1236, 1237, 1245, 1253, 1254, 1259, 1260, 1261, 1266, - 1279, 1279, 1279, 1279, 1282, 1286, 1290, 1297, 1302, 1310, - 1340, 1371, 1376, 1388, 1398, 1402, 1412, 1419, 1426, 1433, - 1438, 1443, 1450, 1451, 1458, 1465, 1473, 1479, 1491, 1519, - 1535, 1564, 1592, 1617, 1636, 1662, 1682, 1694, 1701, 1767, - 1777, 1787, 1793, 1803, 1809, 1819, 1824, 1829, 1837, 1849, - 1871, 1879, 1885, 1896, 1901, 1906, 1912, 1918, 1927, 1931, - 1939, 1939, 1942, 1942, 1953, 1958, 1966, 1967, 1971, 1971, - 1975, 1975, 1978, 1981, 2005, 2016, 2016, 2026, 2026, 2034, - 2034, 2044, 2072, 2075, 2081, 2094, 2098, 2103, 2105, 2110, - 2115, 2124, 2134, 2145, 2149, 2158, 2167, 2172, 2294, 2294, - 2296, 2305, 2305, 2307, 2312, 2324, 2328, 2333, 2337, 2341, - 2345, 2349, 2353, 2357, 2361, 2365, 2390, 2394, 2408, 2412, - 2416, 2420, 2426, 2426, 2432, 2441, 2445, 2454, 2463, 2472, - 2476, 2481, 2485, 2489, 2494, 2504, 2523, 2532, 2612, 2616, - 2623, 2634, 2647, 2657, 2668, 2678, 2687, 2696, 2699, 2700, - 2707, 2711, 2716, 2737, 2754, 2768, 2782, 2794, 2802, 2809, - 2815, 2821, 2827, 2842, 2927, 2932, 2936, 2943, 2950, 2958, - 2965, 2973, 2981, 2995, 3012 +static const short yydefgoto[] = { 245, + 246, 247, 271, 288, 146, 147, 71, 488, 11, 72, + 13, 14, 37, 38, 39, 43, 49, 109, 119, 310, + 212, 382, 313, 538, 362, 404, 520, 339, 405, 73, + 148, 128, 142, 129, 130, 102, 328, 351, 329, 112, + 80, 571, 15, 16, 18, 17, 250, 318, 319, 58, + 21, 56, 93, 408, 409, 120, 154, 50, 88, 51, + 44, 411, 352, 75, 354, 255, 52, 84, 85, 206, + 542, 123, 294, 496, 421, 207, 208, 209, 210 }; -#endif -#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE -/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. - First, the terminals, then, starting at YYNTOKENS, nonterminals. */ -static const char *const yytname[] = -{ - "$end", "error", "$undefined", "ESINT64VAL", "EUINT64VAL", "ESAPINTVAL", - "EUAPINTVAL", "LOCALVAL_ID", "GLOBALVAL_ID", "FPVAL", "VOID", "INTTYPE", - "FLOAT", "DOUBLE", "LABEL", "TYPE", "LOCALVAR", "GLOBALVAR", "LABELSTR", - "STRINGCONSTANT", "ATSTRINGCONSTANT", "ZEROINITIALIZER", "TRUETOK", - "FALSETOK", "BEGINTOK", "ENDTOK", "DECLARE", "DEFINE", "GLOBAL", - "CONSTANT", "SECTION", "ALIAS", "VOLATILE", "THREAD_LOCAL", "TO", - "DOTDOTDOT", "NULL_TOK", "UNDEF", "INTERNAL", "LINKONCE", "WEAK", - "APPENDING", "DLLIMPORT", "DLLEXPORT", "EXTERN_WEAK", "OPAQUE", - "EXTERNAL", "TARGET", "TRIPLE", "ALIGN", "DEPLIBS", "CALL", "TAIL", - "ASM_TOK", "MODULE", "SIDEEFFECT", "CC_TOK", "CCC_TOK", "FASTCC_TOK", - "COLDCC_TOK", "X86_STDCALLCC_TOK", "X86_FASTCALLCC_TOK", "DATALAYOUT", - "RET", "BR", "SWITCH", "INVOKE", "UNWIND", "UNREACHABLE", "ADD", "SUB", - "MUL", "UDIV", "SDIV", "FDIV", "UREM", "SREM", "FREM", "AND", "OR", - "XOR", "SHL", "LSHR", "ASHR", "ICMP", "FCMP", "EQ", "NE", "SLT", "SGT", - "SLE", "SGE", "ULT", "UGT", "ULE", "UGE", "OEQ", "ONE", "OLT", "OGT", - "OLE", "OGE", "ORD", "UNO", "UEQ", "UNE", "MALLOC", "ALLOCA", "FREE", - "LOAD", "STORE", "GETELEMENTPTR", "TRUNC", "ZEXT", "SEXT", "FPTRUNC", - "FPEXT", "BITCAST", "UITOFP", "SITOFP", "FPTOUI", "FPTOSI", "INTTOPTR", - "PTRTOINT", "PHI_TOK", "SELECT", "VAARG", "EXTRACTELEMENT", - "INSERTELEMENT", "SHUFFLEVECTOR", "NORETURN", "INREG", "SRET", - "NOUNWIND", "DEFAULT", "HIDDEN", "'='", "','", "'*'", "'\\\\'", "'('", - "')'", "'['", "'x'", "']'", "'<'", "'>'", "'{'", "'}'", "'c'", "$accept", - "ArithmeticOps", "LogicalOps", "CastOps", "IPredicates", "FPredicates", - "IntType", "FPType", "LocalName", "OptLocalName", "OptLocalAssign", - "GlobalName", "OptGlobalAssign", "GlobalAssign", "GVInternalLinkage", - "GVExternalLinkage", "GVVisibilityStyle", "FunctionDeclareLinkage", - "FunctionDefineLinkage", "AliasLinkage", "OptCallingConv", "ParamAttr", - "OptParamAttrs", "FuncAttr", "OptFuncAttrs", "OptAlign", "OptCAlign", - "SectionString", "OptSection", "GlobalVarAttributes", - "GlobalVarAttribute", "PrimType", "Types", "ArgType", "ResultTypes", - "ArgTypeList", "ArgTypeListI", "TypeListI", "ConstVal", "ConstExpr", - "ConstVector", "GlobalType", "ThreadLocal", "Module", "DefinitionList", - "Definition", "@1", "@2", "@3", "@4", "@5", "AsmBlock", - "TargetDefinition", "LibrariesDefinition", "LibList", "ArgListH", - "ArgList", "FunctionHeaderH", "BEGIN", "FunctionHeader", "END", - "Function", "FunctionProto", "OptSideEffect", "ConstValueRef", - "SymbolicValueRef", "ValueRef", "ResolvedVal", "BasicBlockList", - "BasicBlock", "InstructionList", "BBTerminatorInst", "JumpTable", "Inst", - "PHIList", "ValueRefList", "IndexList", "OptTailCall", "InstVal", - "OptVolatile", "MemoryInst", 0 +static const short yypact[] = { 316, +-32768,-32768,-32768,-32768,-32768,-32768, 7, -119, 8, -62, + 73, -21, 10,-32768, 494,-32768, 127, 260, -16, 26, +-32768, 9, 91,-32768, 794,-32768,-32768,-32768,-32768,-32768, +-32768,-32768,-32768,-32768,-32768,-32768, -5, -5, 246,-32768, +-32768,-32768, -5,-32768,-32768,-32768,-32768,-32768, -5, 116, +-32768, -7, 214, 239, 243,-32768,-32768,-32768,-32768,-32768, + 131,-32768,-32768,-32768,-32768,-32768, 270, 274, 6, 25, +-32768,-32768,-32768, 146,-32768, 272, 272, 266,-32768, 158, + 196, 196,-32768,-32768, 124,-32768,-32768,-32768,-32768,-32768, +-32768,-32768, -26, 1092,-32768, 150, 177, 87, 131,-32768, + 146, -91,-32768, 1092, 158, 158,-32768,-32768, 915,-32768, +-32768, 1191, 285,-32768,-32768,-32768,-32768,-32768, 915,-32768, + -8, 1333,-32768, 304,-32768,-32768, 146,-32768, 197, 203, + 1207, 1207, 191, -69, 1207,-32768, 210, 1191, 1207, 131, + 146, 377, 195, 341, 344, 323, 345, 873,-32768,-32768, + 202,-32768,-32768,-32768,-32768,-32768, 305, 1234, 229, 346, + 196,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, +-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 366, 874, + 1207, 1207, 1207, 1207,-32768,-32768,-32768,-32768,-32768,-32768, +-32768,-32768,-32768,-32768,-32768,-32768, 1207, 1207, 1207, 1207, + 1207, 1207, 1207, 1207, 1207,-32768, 196,-32768, 140,-32768, +-32768, -48, 1133,-32768, 64, -13,-32768, 212, 146,-32768, +-32768, 146,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, +-32768,-32768,-32768, 366, 874, 215, 219, 221, 222, 225, + 256, 1248, 456, 348, 231, 232, 240,-32768,-32768, 245, + 249,-32768, 131, 623,-32768, 750, 750,-32768, 750, 915, +-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, + 1207,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, +-32768,-32768,-32768,-32768,-32768,-32768,-32768, 1207, 173, 201, +-32768, 623, 12, 253, 254, 255, 262, 265, 268, 623, + 623, 335, 915, 1207, 1207,-32768,-32768,-32768,-32768,-32768, +-32768,-32768, -41,-32768,-32768,-32768, -41, 245, 245, 267, + 273, 1191, 1191, 1191, 1191, 1191,-32768,-32768, -6, 702, + -79,-32768, -61,-32768, 1191, 1191, 1191, 13,-32768, 1147, +-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 351, 1191, +-32768,-32768,-32768,-32768, 271,-32768, 275, 750, 623, 623, + 15,-32768, 29,-32768,-32768, 750, 276, 1207, 1207, 1207, + 1207, 1207, 278, 279, 1207, 750, 623, 280,-32768,-32768, +-32768,-32768,-32768,-32768, 1191, 1191,-32768, 282, 283, 284, + 288, 1191,-32768, 264, 873, -55,-32768,-32768, 291, 293, + 398, 414, 434,-32768, 245,-32768, 146, 302, 299,-32768, + 423, -32, 433, 436, 308, 325, 328, 750, 467, 750, + 337, 340, 750, 342, 146,-32768, 347, 349, 750, 750, + 146, 338, 350, 1207, 356, 358, 47, 1191, 1191, 1191, + 1191,-32768,-32768, 339, 1191, 1191, 1207,-32768,-32768,-32768, + 107, 1177,-32768, 363,-32768, 750, 750, 1207, 750, 750, + 350,-32768, 350, 1207, 750, 367, 1207, 1207, 1207,-32768, +-32768, 1207, 454,-32768, 623, 1191, 1191,-32768, 368, 365, + 370, 371,-32768, 374, 375, 71,-32768,-32768,-32768, 146, + 83, 464, 380, 381, 623, 66,-32768,-32768,-32768,-32768, +-32768, 378, 750,-32768,-32768,-32768, 69, 350, 383, 384, + 1191,-32768, 1191, 1191,-32768,-32768,-32768, 107,-32768, 463, +-32768, 505, -2,-32768, 1207,-32768,-32768, 382,-32768,-32768, +-32768,-32768, 388, 389, 390,-32768, 528,-32768, 750,-32768, + 1003, 3, -48, 623, 114,-32768, -41,-32768,-32768,-32768, +-32768,-32768, 396,-32768, 1003,-32768, 520, 521, 399, -48, + 750, 750, 523, 471,-32768, 750, 525,-32768, 750,-32768, + 543, 546,-32768 }; -#endif -# ifdef YYPRINT -/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to - token YYLEX-NUM. */ -static const yytype_uint16 yytoknum[] = -{ - 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, - 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, - 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, - 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, - 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, - 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, - 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, - 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, - 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, - 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, - 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, - 385, 386, 387, 388, 389, 390, 61, 44, 42, 92, - 40, 41, 91, 120, 93, 60, 62, 123, 125, 99 +static const short yypgoto[] = { 425, + 427, 428, 319, 320, -159,-32768, 0, 36, 472, 5, +-32768,-32768,-32768,-32768, 259,-32768,-32768,-32768, -127, -286, + -388,-32768, -217,-32768, -278, 65,-32768, -259,-32768,-32768, + -23, 353, -111,-32768, 455, 460, 51, -144, -213, 209, + 242,-32768,-32768, 545,-32768,-32768,-32768,-32768,-32768,-32768, +-32768,-32768,-32768,-32768,-32768, 479,-32768,-32768,-32768,-32768, +-32768,-32768, -478, -135, 122, -177,-32768, 511,-32768,-32768, +-32768,-32768,-32768, 95, 181,-32768,-32768,-32768,-32768 }; -# endif -/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ -static const yytype_uint8 yyr1[] = -{ - 0, 150, 151, 151, 151, 151, 151, 151, 151, 151, - 151, 152, 152, 152, 152, 152, 152, 153, 153, 153, - 153, 153, 153, 153, 153, 153, 153, 153, 153, 154, - 154, 154, 154, 154, 154, 154, 154, 154, 154, 155, - 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, - 155, 155, 155, 155, 155, 156, 157, 157, 158, 158, - 159, 159, 160, 160, 161, 161, 162, 162, 163, 164, - 164, 164, 164, 164, 165, 165, 165, 166, 166, 166, - 167, 167, 167, 168, 168, 168, 168, 168, 169, 169, - 169, 170, 170, 170, 170, 170, 170, 170, 171, 171, - 171, 171, 172, 172, 173, 173, 173, 174, 174, 175, - 175, 176, 176, 177, 178, 178, 179, 179, 180, 180, - 181, 181, 181, 181, 182, 182, 182, 182, 182, 182, - 182, 182, 182, 182, 182, 182, 182, 183, 184, 184, - 185, 185, 186, 186, 186, 186, 187, 187, 188, 188, - 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, - 188, 188, 188, 188, 188, 188, 188, 188, 189, 189, - 189, 189, 189, 189, 189, 189, 189, 189, 190, 190, - 191, 191, 192, 192, 193, 193, 194, 194, 196, 195, - 197, 195, 195, 195, 195, 198, 195, 199, 195, 200, - 195, 195, 195, 195, 201, 202, 202, 203, 204, 204, - 204, 205, 205, 206, 206, 206, 206, 207, 208, 208, - 209, 210, 210, 211, 212, 213, 213, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 215, 215, - 215, 215, 216, 216, 217, 218, 218, 219, 220, 220, - 220, 221, 221, 221, 221, 221, 221, 221, 221, 221, - 222, 222, 223, 224, 224, 225, 225, 225, 226, 226, - 227, 227, 228, 228, 228, 228, 228, 228, 228, 228, - 228, 228, 228, 228, 228, 229, 229, 230, 230, 230, - 230, 230, 230, 230, 230 -}; -/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ -static const yytype_uint8 yyr2[] = -{ - 0, 2, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 0, 2, 0, 1, 1, 1, 0, 2, 1, - 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, - 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, - 1, 0, 1, 1, 1, 1, 1, 2, 1, 1, - 1, 1, 0, 2, 1, 1, 1, 0, 2, 0, - 2, 0, 3, 2, 0, 1, 0, 3, 1, 2, - 1, 1, 1, 1, 1, 1, 2, 1, 2, 5, - 5, 5, 5, 3, 2, 5, 4, 2, 1, 1, - 1, 3, 1, 3, 1, 0, 1, 3, 4, 3, - 3, 4, 4, 3, 6, 5, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 6, 5, - 8, 6, 6, 7, 7, 6, 8, 8, 3, 1, - 1, 1, 1, 0, 1, 0, 1, 2, 0, 3, - 0, 3, 3, 3, 3, 0, 7, 0, 8, 0, - 8, 6, 2, 3, 1, 3, 3, 3, 3, 1, - 0, 5, 3, 1, 3, 1, 0, 9, 1, 1, - 4, 1, 1, 2, 3, 0, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 3, 1, 5, 1, 1, - 1, 1, 1, 1, 2, 2, 2, 3, 2, 0, - 1, 2, 2, 3, 9, 9, 8, 14, 1, 1, - 6, 5, 2, 6, 7, 3, 5, 0, 0, 3, - 2, 1, 5, 5, 6, 6, 4, 6, 4, 4, - 6, 6, 2, 8, 1, 1, 0, 3, 6, 3, - 6, 2, 5, 7, 4 -}; +#define YYLAST 1462 -/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state - STATE-NUM when YYTABLE doesn't specify something else to do. Zero - means the default is an error. */ -static const yytype_uint16 yydefact[] = -{ - 67, 58, 64, 59, 65, 190, 188, 0, 0, 0, - 0, 0, 0, 77, 66, 0, 67, 186, 80, 83, - 0, 0, 202, 0, 0, 62, 0, 68, 69, 71, - 70, 72, 74, 73, 75, 76, 78, 79, 77, 77, - 183, 1, 187, 81, 82, 77, 191, 84, 85, 86, - 87, 77, 249, 189, 249, 0, 0, 210, 203, 204, - 192, 238, 239, 194, 120, 121, 122, 123, 124, 0, - 0, 0, 0, 240, 241, 125, 193, 127, 183, 183, - 88, 182, 0, 91, 91, 250, 246, 63, 221, 222, - 223, 245, 205, 206, 209, 0, 145, 128, 0, 0, - 0, 0, 134, 146, 0, 126, 145, 0, 0, 90, - 89, 0, 180, 181, 0, 0, 92, 93, 94, 95, - 96, 0, 224, 0, 286, 248, 0, 207, 144, 102, - 140, 142, 0, 0, 0, 0, 0, 0, 133, 0, - 0, 0, 139, 138, 0, 120, 121, 122, 0, 0, - 0, 195, 97, 0, 218, 219, 220, 285, 271, 0, - 0, 0, 0, 91, 258, 259, 2, 3, 4, 5, - 6, 7, 8, 9, 10, 14, 15, 16, 11, 12, - 13, 0, 0, 0, 0, 0, 0, 17, 18, 19, - 20, 21, 22, 23, 24, 25, 26, 27, 28, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 247, 91, - 262, 0, 284, 208, 137, 0, 107, 0, 0, 136, - 0, 147, 107, 197, 199, 201, 165, 166, 161, 163, - 162, 164, 167, 160, 156, 157, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 159, 158, 116, 0, 270, 252, 0, 251, 0, 0, - 55, 0, 0, 29, 30, 31, 32, 33, 34, 35, - 36, 37, 38, 0, 53, 54, 49, 50, 51, 52, - 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, - 0, 111, 111, 291, 0, 0, 282, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 98, 99, - 100, 101, 103, 143, 141, 130, 131, 132, 135, 129, - 116, 116, 0, 0, 0, 0, 0, 0, 0, 149, - 179, 0, 0, 0, 153, 0, 150, 0, 0, 0, - 0, 196, 216, 227, 228, 229, 234, 230, 231, 232, - 233, 225, 0, 236, 243, 242, 244, 0, 253, 0, - 0, 0, 0, 0, 287, 0, 289, 268, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 104, 105, 106, 108, 198, 200, 0, 0, 268, - 0, 0, 0, 0, 0, 148, 134, 146, 0, 151, - 152, 0, 0, 0, 0, 0, 118, 116, 215, 102, - 213, 0, 226, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 294, 0, 0, 0, 278, 279, 0, - 0, 0, 0, 276, 0, 111, 0, 0, 0, 0, - 0, 0, 0, 0, 178, 155, 0, 0, 0, 0, - 113, 119, 117, 61, 0, 107, 0, 235, 0, 0, - 267, 0, 0, 111, 112, 111, 0, 0, 0, 0, - 0, 0, 272, 273, 267, 0, 292, 0, 0, 0, - 169, 0, 0, 0, 0, 154, 0, 0, 0, 60, - 212, 214, 102, 114, 0, 0, 0, 0, 0, 274, - 275, 288, 290, 269, 0, 0, 277, 280, 281, 0, - 111, 0, 0, 0, 175, 0, 0, 171, 172, 168, - 61, 115, 109, 237, 0, 0, 102, 0, 107, 263, - 0, 107, 293, 173, 174, 0, 0, 0, 211, 0, - 217, 0, 256, 0, 0, 265, 0, 0, 264, 283, - 170, 176, 177, 110, 254, 0, 255, 0, 102, 0, - 0, 0, 266, 0, 0, 0, 0, 261, 0, 0, - 260, 0, 257 -}; -/* YYDEFGOTO[NTERM-NUM]. */ -static const yytype_int16 yydefgoto[] = -{ - -1, 247, 248, 249, 273, 290, 148, 149, 73, 490, - 11, 74, 13, 14, 38, 39, 40, 45, 51, 111, - 121, 312, 214, 384, 315, 540, 364, 406, 522, 341, - 407, 75, 150, 130, 144, 131, 132, 104, 330, 353, - 331, 114, 82, 15, 16, 17, 19, 18, 252, 320, - 321, 60, 22, 58, 95, 410, 411, 122, 156, 52, - 90, 53, 46, 413, 354, 77, 356, 257, 54, 86, - 87, 208, 544, 125, 296, 498, 423, 209, 210, 211, - 212 +static const short yytable[] = { 10, + 259, 74, 317, 248, 12, 291, 223, 151, 258, 97, + 83, 364, 249, 258, 10, 152, 22, 86, 451, 12, + 295, 296, 297, 298, 299, 418, 381, 302, 331, 333, + 381, 59, 60, 260, 99, 62, 63, 64, 65, 420, + 1, 2, 402, 3, 4, 135, 101, 27, 28, 29, + 30, 31, 32, 33, 19, 34, 136, 392, 383, 384, + 23, 403, 553, 419, 306, 307, 397, 135, 20, 66, + 127, 306, 307, 24, 101, 392, 559, 419, 218, 303, + 127, 392, 308, 309, 10, 141, 398, 25, 379, 308, + 309, 380, 444, 59, 60, 141, 99, 62, 63, 64, + 65, 518, 1, 2, 392, 3, 4, 215, 216, 57, + 124, 219, 402, 455, 26, 222, 396, 125, 353, 53, + 353, 353, 1, 353, 103, 3, 104, 378, 35, 36, + 392, 66, 315, 83, 254, 543, 412, 393, 153, 1, + 87, 540, 3, 35, 36, 450, 554, 557, 358, 103, + 55, 104, 98, 366, 474, 251, 353, 289, 290, 254, + 292, 54, 149, 67, 353, 353, 68, 560, 41, 69, + 42, 70, 100, 293, 254, 254, 254, 254, 254, 300, + 301, 254, 499, 464, 500, 110, 111, 478, 221, 127, + 424, 376, 426, 427, 428, 306, 307, -54, -54, -54, + -54, 103, 525, 104, 381, 525, 526, 314, 103, 529, + 104, 517, 379, 308, 309, 380, 224, 225, 2, 306, + 307, 4, 353, 353, 353, 67, 306, 307, 68, 530, + 353, 69, 90, 70, 133, 491, 141, 308, 309, 256, + 353, 353, 257, 379, 308, 309, 380, 359, 304, 305, + 248, 113, 114, 115, 116, 117, 118, 91, 381, 249, + 381, 92, 59, 60, 360, 99, 143, 144, 145, 65, + 94, 1, 2, 95, 3, 4, 78, 96, 79, 141, + 377, 254, 353, 103, 353, 104, 501, 353, 150, 504, + 505, 506, 131, 353, 353, 76, 77, 45, 46, 47, + 66, 81, 48, 107, 79, 108, 395, 82, 545, 361, + 103, 547, 104, 138, 139, -184, 407, 105, 106, 132, + 353, 353, 211, 353, 353, 226, 227, 228, 229, 353, + -62, 1, 2, 213, 3, 4, 217, 363, 103, 353, + 104, 5, 6, 214, 254, 425, 254, 254, 254, -55, + 220, 431, -56, 230, 322, 252, 258, 316, 323, 353, + 324, 325, 7, 541, 326, 8, 334, 353, 375, 9, + 335, 336, 387, 388, 389, 390, 391, 355, 356, 337, + 357, 338, 555, 59, 60, 399, 400, 401, 340, 367, + 368, 369, 1, 2, 67, 3, 4, 68, 370, 327, + 69, 371, 70, 353, 372, 410, 385, 413, 353, 443, + 475, 414, 386, 365, 429, 430, 434, 423, 438, 439, + 440, 373, 374, 486, 441, 353, 353, 445, 490, 446, + 353, 447, 448, 353, 495, 435, 436, 449, 452, 453, + 254, 454, 442, 254, 254, 254, 456, 458, 495, 457, + 487, 261, 262, 263, 264, 265, 266, 267, 268, 269, + 270, 459, 59, 60, 460, 99, 143, 144, 145, 65, + 462, 1, 2, 464, 3, 4, 465, 472, 467, 415, + 416, 417, 521, 468, 483, 469, 473, 422, 479, 480, + 481, 482, 476, -183, 477, 484, 485, 432, 433, 492, + 66, 544, 419, 503, 511, 512, 513, 514, -62, 1, + 2, 537, 3, 4, 515, 516, 522, 487, 539, 5, + 6, 527, 523, 531, 532, 546, 509, 510, 548, 549, + 550, 551, 558, 561, 562, 563, 566, 567, 569, 461, + 7, 463, 572, 8, 466, 573, 203, 9, 204, 205, + 470, 471, 320, 536, 321, 519, 122, 134, 137, 40, + 121, 533, 89, 534, 535, 312, 507, 437, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 493, 494, 0, + 497, 498, 0, 0, 0, 0, 502, 0, 0, 0, + 0, 0, 0, 0, 67, 0, 508, 68, 0, 0, + 69, 0, 70, 332, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 524, 0, 0, 0, + 0, 0, 0, 0, 528, 341, 342, 0, 0, 59, + 60, 343, 0, 0, 0, 0, 0, 0, 1, 2, + 0, 3, 4, 344, 345, 346, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 347, 348, + 552, 0, 0, 0, 0, 556, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 349, 0, 0, 0, 0, + 0, 0, 564, 565, 0, 0, 0, 568, 0, 0, + 570, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 234, 235, 59, 60, + 0, 99, 143, 144, 145, 65, 0, 1, 2, 0, + 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 236, 185, 186, 187, 188, 189, 190, + 191, 192, 193, 194, 195, 196, 66, 237, 0, 238, + 239, 240, 341, 342, 0, 0, 59, 60, 343, 0, + 103, 0, 104, 0, 0, 1, 2, 350, 3, 4, + 344, 345, 346, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 347, 348, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 59, 60, 349, 61, 62, 63, 64, 65, 0, 1, + 2, 0, 3, 4, 0, 0, 0, 0, 164, 165, + 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, + 176, 177, 178, 234, 235, 0, 0, 0, 66, 0, + 67, 0, 0, 68, 0, 0, 69, 0, 70, 394, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 236, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 194, 195, 196, 0, 237, 0, 238, 239, 240, 59, + 60, 0, 0, 0, 0, 0, 0, 0, 1, 2, + 0, 3, 4, 231, 350, 272, 273, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 232, 233, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 59, 60, 0, 140, 62, 63, 64, 65, 0, + 1, 2, 67, 3, 4, 68, 0, 0, 69, 0, + 70, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 234, 235, 0, 66, + 0, 0, 0, 0, 0, 274, 275, 276, 277, 278, + 279, 280, 281, 282, 283, 284, 285, 286, 287, 0, + 0, 0, 0, 236, 185, 186, 187, 188, 189, 190, + 191, 192, 193, 194, 195, 196, 0, 237, 0, 238, + 239, 240, 0, 0, 0, 341, 342, 0, 0, 0, + 103, 343, 104, 0, 241, 0, 0, 242, 0, 243, + 0, 244, 0, 344, 345, 346, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 347, 348, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 67, 0, 349, 68, 0, 0, 69, + 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 234, 235, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 59, 60, + 0, 99, 62, 63, 64, 65, 0, 1, 2, 0, + 3, 4, 0, 236, 185, 186, 187, 188, 189, 190, + 191, 192, 193, 194, 195, 196, 126, 237, 0, 238, + 239, 240, 0, 0, 0, 0, 66, 0, 0, 59, + 60, 0, 99, 62, 63, 64, 65, 350, 1, 2, + 0, 3, 4, 59, 60, 0, 99, 62, 63, 64, + 65, 0, 1, 2, 0, 3, 4, 311, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, + 0, 406, 0, 59, 60, 0, 99, 62, 63, 64, + 65, 66, 1, 2, 0, 3, 4, 59, 60, 0, + 99, 143, 144, 145, 65, 0, 1, 2, 0, 3, + 4, 489, 0, 59, 60, 0, 99, 62, 63, 64, + 65, 66, 1, 2, 0, 3, 4, 0, 0, 0, + 67, 0, 0, 68, 0, 66, 69, 0, 70, 0, + 59, 60, 0, 253, 62, 63, 64, 65, 0, 1, + 2, 66, 3, 4, 59, 60, 0, 99, 143, 144, + 145, 65, 0, 1, 2, 0, 3, 4, 0, 0, + 0, 67, 0, 0, 68, 0, 0, 69, 66, 70, + 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, + 0, 69, 66, 70, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, + 0, 69, 0, 70, 0, 0, 0, 0, 0, 67, + 0, 0, 68, 0, 0, 69, 0, 70, 0, 0, + 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, + 0, 69, 0, 70, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 155, 0, 0, 0, 0, 0, + 0, 0, 67, 0, 0, 68, 0, 0, 69, 0, + 70, 0, 0, 156, 157, 0, 67, 0, 0, 68, + 0, 0, 69, 0, 330, 158, 159, 160, 161, 162, + 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 181, 182, + 183, 0, 0, 184, 185, 186, 187, 188, 189, 190, + 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202 }; -/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing - STATE-NUM. */ -#define YYPACT_NINF -467 -static const yytype_int16 yypact[] = -{ - 601, -467, -467, -467, -467, -467, -467, 28, -64, 41, - -37, 98, 10, 16, -467, 139, 856, -467, 36, 170, - 18, 26, -467, 31, 148, -467, 1069, -467, -467, -467, - -467, -467, -467, -467, -467, -467, -467, -467, 81, 81, - 107, -467, -467, -467, -467, 81, -467, -467, -467, -467, - -467, 81, 179, -467, 8, 209, 220, 226, -467, -467, - -467, -467, -467, 118, -467, -467, -467, -467, -467, 269, - 275, 1, 541, -467, -467, -467, 100, -467, 251, 251, - 229, -467, 204, 196, 196, -467, -467, 104, -467, -467, - -467, -467, -467, -467, -467, -100, 981, -467, 143, 146, - 754, 118, -467, 100, -96, -467, 981, 204, 204, -467, - -467, 1086, -467, -467, 1137, 289, -467, -467, -467, -467, - -467, 1086, -467, -15, 1326, -467, 277, -467, -467, 100, - -467, 162, 163, 1181, 1181, 167, -95, 1181, -467, 173, - 1137, 1181, 118, 100, 227, 45, 299, 306, 216, 309, - 712, -467, -467, 23, -467, -467, -467, -467, -467, 268, - 1227, 200, 312, 196, -467, -467, -467, -467, -467, -467, - -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, - -467, 303, 1195, 1181, 1181, 1181, 1181, -467, -467, -467, - -467, -467, -467, -467, -467, -467, -467, -467, -467, 1181, - 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, -467, 196, - -467, 140, -467, -467, -68, 995, -467, 58, -9, -467, - 174, 100, -467, -467, 100, -467, -467, -467, -467, -467, - -467, -467, -467, -467, -467, -467, 303, 1195, 186, 187, - 188, 189, 191, 633, 1241, 793, 313, 193, 194, 195, - -467, -467, 201, 197, -467, 118, 462, -467, 589, 589, - -467, 589, 1086, -467, -467, -467, -467, -467, -467, -467, - -467, -467, -467, 1181, -467, -467, -467, -467, -467, -467, - -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, - 1181, 89, 165, -467, 462, 134, 202, 205, 206, 213, - 214, 217, 462, 462, 307, 1086, 1181, 1181, -467, -467, - -467, -467, -467, -467, -467, -48, -467, -467, -467, -48, - 201, 201, 215, 218, 1137, 1137, 1137, 1137, 1137, -467, - -467, -26, 965, -67, -467, -45, -467, 1137, 1137, 1137, - -10, -467, 1025, -467, -467, -467, -467, -467, -467, -467, - -467, 298, 1137, -467, -467, -467, -467, 219, -467, 222, - 589, 462, 462, 24, -467, 25, -467, -467, 589, 221, - 1181, 1181, 1181, 1181, 1181, 224, 225, 1181, 589, 462, - 230, -467, -467, -467, -467, -467, -467, 1137, 1137, -467, - 233, 234, 235, 241, 1137, -467, 211, 712, -44, -467, - -467, 242, 244, 330, 347, 365, -467, 201, -467, 100, - 245, 258, -467, 364, -31, 386, 387, 265, 271, 276, - 589, 402, 589, 278, 279, 589, 280, 100, -467, 281, - 282, 589, 589, 100, 272, 283, 1181, 284, 285, -27, - 1137, 1137, 1137, 1137, -467, -467, 286, 1137, 1137, 1181, - -467, -467, -467, 13, 1039, -467, 288, -467, 589, 589, - 1181, 589, 589, 283, -467, 283, 1181, 589, 291, 1181, - 1181, 1181, -467, -467, 1181, 374, -467, 462, 1137, 1137, - -467, 293, 273, 296, 301, -467, 310, 311, 137, -467, - -467, -467, 100, 39, 420, 305, 308, 462, -7, -467, - -467, -467, -467, -467, 304, 589, -467, -467, -467, 47, - 283, 314, 315, 1137, -467, 1137, 1137, -467, -467, -467, - 13, -467, 391, -467, 433, -1, -467, 1181, -467, -467, - 316, -467, -467, -467, -467, 317, 318, 320, -467, 450, - -467, 589, -467, 842, 3, -68, 462, 73, -467, -48, - -467, -467, -467, -467, -467, 325, -467, 842, -467, 443, - 449, 327, -68, 589, 589, 453, 401, -467, 589, 458, - -467, 589, -467 +static const short yycheck[] = { 0, + 160, 25, 220, 148, 0, 183, 142, 119, 11, 4, + 18, 290, 148, 11, 15, 24, 136, 25, 407, 15, + 198, 199, 200, 201, 202, 11, 313, 205, 242, 243, + 317, 7, 8, 161, 10, 11, 12, 13, 14, 11, + 16, 17, 30, 19, 20, 137, 70, 38, 39, 40, + 41, 42, 43, 44, 48, 46, 148, 137, 318, 319, + 53, 49, 541, 49, 113, 114, 146, 137, 62, 45, + 94, 113, 114, 136, 98, 137, 555, 49, 148, 207, + 104, 137, 131, 132, 85, 109, 148, 15, 130, 131, + 132, 133, 148, 7, 8, 119, 10, 11, 12, 13, + 14, 490, 16, 17, 137, 19, 20, 131, 132, 19, + 137, 135, 30, 146, 136, 139, 330, 144, 254, 136, + 256, 257, 16, 259, 138, 19, 140, 305, 134, 135, + 137, 45, 146, 18, 158, 524, 350, 144, 147, 16, + 148, 144, 19, 134, 135, 405, 144, 34, 260, 138, + 142, 140, 147, 142, 433, 151, 292, 181, 182, 183, + 184, 136, 112, 139, 300, 301, 142, 556, 42, 145, + 44, 147, 148, 197, 198, 199, 200, 201, 202, 203, + 204, 205, 461, 137, 463, 28, 29, 141, 138, 213, + 368, 303, 370, 371, 372, 113, 114, 3, 4, 5, + 6, 138, 137, 140, 491, 137, 141, 144, 138, 141, + 140, 141, 130, 131, 132, 133, 22, 23, 17, 113, + 114, 20, 358, 359, 360, 139, 113, 114, 142, 508, + 366, 145, 19, 147, 148, 453, 260, 131, 132, 11, + 376, 377, 14, 130, 131, 132, 133, 271, 109, 110, + 395, 56, 57, 58, 59, 60, 61, 19, 545, 395, + 547, 19, 7, 8, 288, 10, 11, 12, 13, 14, + 140, 16, 17, 4, 19, 20, 31, 4, 33, 303, + 304, 305, 418, 138, 420, 140, 464, 423, 4, 467, + 468, 469, 143, 429, 430, 37, 38, 38, 39, 40, + 45, 43, 43, 38, 33, 40, 330, 49, 526, 137, + 138, 529, 140, 105, 106, 0, 340, 76, 77, 143, + 456, 457, 19, 459, 460, 3, 4, 5, 6, 465, + 15, 16, 17, 137, 19, 20, 146, 137, 138, 475, + 140, 26, 27, 141, 368, 369, 370, 371, 372, 9, + 141, 375, 9, 9, 140, 51, 11, 146, 140, 495, + 140, 140, 47, 523, 140, 50, 19, 503, 34, 54, + 140, 140, 322, 323, 324, 325, 326, 256, 257, 140, + 259, 137, 542, 7, 8, 335, 336, 337, 140, 137, + 137, 137, 16, 17, 139, 19, 20, 142, 137, 144, + 145, 137, 147, 539, 137, 55, 140, 137, 544, 146, + 434, 137, 140, 292, 137, 137, 137, 142, 137, 137, + 137, 300, 301, 447, 137, 561, 562, 137, 452, 137, + 566, 34, 19, 569, 458, 385, 386, 4, 137, 141, + 464, 19, 392, 467, 468, 469, 14, 140, 472, 14, + 451, 86, 87, 88, 89, 90, 91, 92, 93, 94, + 95, 137, 7, 8, 137, 10, 11, 12, 13, 14, + 4, 16, 17, 137, 19, 20, 137, 140, 137, 358, + 359, 360, 19, 137, 146, 137, 137, 366, 438, 439, + 440, 441, 137, 0, 137, 445, 446, 376, 377, 137, + 45, 525, 49, 137, 137, 141, 137, 137, 15, 16, + 17, 49, 19, 20, 141, 141, 137, 518, 14, 26, + 27, 144, 142, 141, 141, 144, 476, 477, 141, 141, + 141, 4, 137, 14, 14, 137, 14, 67, 14, 418, + 47, 420, 0, 50, 423, 0, 122, 54, 122, 122, + 429, 430, 234, 518, 235, 491, 85, 98, 104, 15, + 82, 511, 52, 513, 514, 213, 472, 387, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 456, 457, -1, + 459, 460, -1, -1, -1, -1, 465, -1, -1, -1, + -1, -1, -1, -1, 139, -1, 475, 142, -1, -1, + 145, -1, 147, 148, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 495, -1, -1, -1, + -1, -1, -1, -1, 503, 3, 4, -1, -1, 7, + 8, 9, -1, -1, -1, -1, -1, -1, 16, 17, + -1, 19, 20, 21, 22, 23, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 36, 37, + 539, -1, -1, -1, -1, 544, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 53, -1, -1, -1, -1, + -1, -1, 561, 562, -1, -1, -1, 566, -1, -1, + 569, 69, 70, 71, 72, 73, 74, 75, 76, 77, + 78, 79, 80, 81, 82, 83, 84, 85, 7, 8, + -1, 10, 11, 12, 13, 14, -1, 16, 17, -1, + 19, 20, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 111, 112, 113, 114, 115, 116, 117, + 118, 119, 120, 121, 122, 123, 45, 125, -1, 127, + 128, 129, 3, 4, -1, -1, 7, 8, 9, -1, + 138, -1, 140, -1, -1, 16, 17, 145, 19, 20, + 21, 22, 23, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 36, 37, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 7, 8, 53, 10, 11, 12, 13, 14, -1, 16, + 17, -1, 19, 20, -1, -1, -1, -1, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, + 81, 82, 83, 84, 85, -1, -1, -1, 45, -1, + 139, -1, -1, 142, -1, -1, 145, -1, 147, 148, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, + 121, 122, 123, -1, 125, -1, 127, 128, 129, 7, + 8, -1, -1, -1, -1, -1, -1, -1, 16, 17, + -1, 19, 20, 21, 145, 22, 23, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 36, 37, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 7, 8, -1, 10, 11, 12, 13, 14, -1, + 16, 17, 139, 19, 20, 142, -1, -1, 145, -1, + 147, 69, 70, 71, 72, 73, 74, 75, 76, 77, + 78, 79, 80, 81, 82, 83, 84, 85, -1, 45, + -1, -1, -1, -1, -1, 92, 93, 94, 95, 96, + 97, 98, 99, 100, 101, 102, 103, 104, 105, -1, + -1, -1, -1, 111, 112, 113, 114, 115, 116, 117, + 118, 119, 120, 121, 122, 123, -1, 125, -1, 127, + 128, 129, -1, -1, -1, 3, 4, -1, -1, -1, + 138, 9, 140, -1, 142, -1, -1, 145, -1, 147, + -1, 149, -1, 21, 22, 23, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 36, 37, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 139, -1, 53, 142, -1, -1, 145, + -1, 147, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 69, 70, 71, 72, 73, 74, 75, 76, 77, + 78, 79, 80, 81, 82, 83, 84, 85, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 7, 8, + -1, 10, 11, 12, 13, 14, -1, 16, 17, -1, + 19, 20, -1, 111, 112, 113, 114, 115, 116, 117, + 118, 119, 120, 121, 122, 123, 35, 125, -1, 127, + 128, 129, -1, -1, -1, -1, 45, -1, -1, 7, + 8, -1, 10, 11, 12, 13, 14, 145, 16, 17, + -1, 19, 20, 7, 8, -1, 10, 11, 12, 13, + 14, -1, 16, 17, -1, 19, 20, 35, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 45, -1, -1, + -1, 35, -1, 7, 8, -1, 10, 11, 12, 13, + 14, 45, 16, 17, -1, 19, 20, 7, 8, -1, + 10, 11, 12, 13, 14, -1, 16, 17, -1, 19, + 20, 35, -1, 7, 8, -1, 10, 11, 12, 13, + 14, 45, 16, 17, -1, 19, 20, -1, -1, -1, + 139, -1, -1, 142, -1, 45, 145, -1, 147, -1, + 7, 8, -1, 10, 11, 12, 13, 14, -1, 16, + 17, 45, 19, 20, 7, 8, -1, 10, 11, 12, + 13, 14, -1, 16, 17, -1, 19, 20, -1, -1, + -1, 139, -1, -1, 142, -1, -1, 145, 45, 147, + -1, -1, -1, -1, -1, 139, -1, -1, 142, -1, + -1, 145, 45, 147, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 139, -1, -1, 142, -1, + -1, 145, -1, 147, -1, -1, -1, -1, -1, 139, + -1, -1, 142, -1, -1, 145, -1, 147, -1, -1, + -1, -1, -1, -1, -1, 139, -1, -1, 142, -1, + -1, 145, -1, 147, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 32, -1, -1, -1, -1, -1, + -1, -1, 139, -1, -1, 142, -1, -1, 145, -1, + 147, -1, -1, 51, 52, -1, 139, -1, -1, 142, + -1, -1, 145, -1, 147, 63, 64, 65, 66, 67, + 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, + 78, 79, 80, 81, 82, 83, 84, 85, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 106, 107, + 108, -1, -1, 111, 112, 113, 114, 115, 116, 117, + 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, + 128, 129 }; +/* -*-C-*- Note some compilers choke on comments on `#line' lines. */ +#line 3 "/usr/share/bison.simple" +/* This file comes from bison-1.28. */ -/* YYPGOTO[NTERM-NUM]. */ -static const yytype_int16 yypgoto[] = -{ - -467, 349, 350, 351, 240, 243, -160, -467, 0, -43, - 399, 11, -467, -467, -467, -467, 50, -467, -467, -467, - -148, -281, -390, -467, -219, -467, -280, -6, -467, -290, - -467, -467, -25, 290, -113, -467, 382, 393, 49, -146, - -227, 155, 232, -467, -467, 478, -467, -467, -467, -467, - -467, -467, -467, -467, -467, -467, -467, 411, -467, -467, - -467, -467, -467, -467, -466, -137, -161, -179, -467, 446, - -467, -467, -467, -467, -467, 27, 114, -467, -467, -467, - -467 -}; +/* Skeleton output parser for bison, + Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc. -/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If - positive, shift that token. If negative, reduce the rule which - number is the opposite. If zero, do what YYDEFACT says. - If YYTABLE_NINF, syntax error. */ -#define YYTABLE_NINF -186 -static const yytype_int16 yytable[] = -{ - 10, 76, 261, 319, 250, 99, 293, 225, 153, 154, - 260, 12, 366, 251, 260, 262, 10, 333, 335, 453, - 404, 297, 298, 299, 300, 301, 85, 12, 304, 1, - 385, 386, 3, 88, 383, 420, 422, 126, 383, 405, - 2, 137, 137, 4, 127, 308, 309, 103, -55, -55, - -55, -55, 138, 220, 28, 29, 30, 31, 32, 33, - 34, 305, 35, 310, 311, 308, 309, 226, 227, 404, - 394, 129, 23, 421, 421, 103, 20, 555, 43, 399, - 44, 129, 381, 310, 311, 382, 143, 10, 78, 79, - 21, 561, 394, 394, 24, 83, 143, 357, 358, 25, - 359, 84, 520, 400, 446, 398, 394, 559, 217, 218, - 466, 394, 221, 26, 480, 457, 224, 452, 395, 355, - 1, 355, 355, 3, 355, 414, 308, 309, 380, 105, - 527, 106, 155, 367, 528, 256, 545, 317, 80, 41, - 81, 375, 376, 542, 310, 311, 27, 556, 100, 360, - 36, 37, 308, 309, 55, 476, 89, 355, 291, 292, - 256, 294, 56, 151, 253, 355, 355, 59, 562, 381, - 310, 311, 382, 57, 295, 256, 256, 256, 256, 256, - 302, 303, 256, 501, 527, 502, 308, 309, 531, 223, - 129, 426, 378, 428, 429, 430, 105, 85, 106, 417, - 418, 419, 316, 381, 310, 311, 382, 424, 47, 48, - 49, 258, 383, 50, 259, 36, 37, 434, 435, 228, - 229, 230, 231, 355, 355, 355, 363, 105, 92, 106, - 532, 355, 112, 113, 61, 62, 493, 143, 105, 93, - 106, 355, 355, 1, 2, 94, 3, 4, 361, 306, - 307, 250, 115, 116, 117, 118, 119, 120, 96, 463, - 251, 465, 140, 141, 468, 362, 383, 109, 383, 110, - 472, 473, 105, 97, 106, 105, 368, 106, 519, 98, - 143, 379, 256, 355, 81, 355, 133, 503, 355, 134, - 506, 507, 508, 152, 355, 355, 213, 495, 496, 215, - 499, 500, 365, 105, 216, 106, 504, 397, -56, 547, - 107, 108, 549, 219, 222, -57, 510, 409, 232, 254, - 318, 355, 355, 260, 355, 355, 324, 325, 326, 327, - 355, 328, 336, 337, 338, 339, 526, 342, 340, 369, - 355, 377, 370, 371, 530, 256, 427, 256, 256, 256, - 372, 373, 433, 412, 374, 387, 415, 445, 388, 416, - 355, 431, 432, 425, 449, 543, 450, 436, 355, 451, - 440, 441, 442, 389, 390, 391, 392, 393, 443, 447, - 554, 448, 454, 456, 557, 558, 401, 402, 403, 263, - 264, 265, 266, 267, 268, 269, 270, 271, 272, 455, - 458, 459, 566, 567, 355, 460, 464, 570, 461, 355, - 572, 477, 474, 462, 514, 466, 467, 469, 470, 471, - 475, 478, 479, 421, 488, 494, 355, 355, 505, 492, - 513, 355, 485, 515, 355, 497, 437, 438, 516, 523, - 539, 256, 524, 444, 256, 256, 256, 541, 529, 497, - 525, 517, 518, 489, 553, 533, 534, 563, 550, 551, - 548, 552, 560, 564, 565, 343, 344, 568, 569, 61, - 62, 345, 571, 205, 206, 207, 322, 538, 1, 2, - 323, 3, 4, 346, 347, 348, 124, 521, 139, 481, - 482, 483, 484, 136, 42, 123, 486, 487, 349, 350, - 91, 509, 546, 439, 0, 314, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 351, 0, 0, 0, 0, - 489, 0, 0, 0, 0, 0, 0, 511, 512, 0, - 0, 166, 167, 168, 169, 170, 171, 172, 173, 174, - 175, 176, 177, 178, 179, 180, 236, 237, 61, 62, - 0, 101, 64, 65, 66, 67, 0, 1, 2, 0, - 3, 4, 535, 0, 536, 537, 0, 0, 0, 0, - 0, 0, 0, 238, 187, 188, 189, 190, 191, 192, - 193, 194, 195, 196, 197, 198, 68, 239, 0, 240, - 241, 242, 343, 344, 0, 0, 61, 62, 345, 0, - 105, -185, 106, 0, 0, 1, 2, 352, 3, 4, - 346, 347, 348, 0, 0, 0, -63, 1, 2, 0, - 3, 4, 0, 0, 0, 349, 350, 5, 6, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 61, 62, 351, 101, 145, 146, 147, 67, 7, 1, - 2, 8, 3, 4, 0, 9, 0, 0, 166, 167, - 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, - 178, 179, 180, 236, 237, 0, 0, 0, 68, 0, - 69, 0, 0, 70, 0, 0, 71, 0, 72, 102, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 238, 187, 188, 189, 190, 191, 192, 193, 194, 195, - 196, 197, 198, 0, 239, 0, 240, 241, 242, 61, - 62, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 0, 3, 4, 233, 352, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 234, 235, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 61, 62, 0, 101, 64, 65, 66, 67, 0, - 1, 2, 69, 3, 4, 70, 0, 329, 71, 0, - 72, 166, 167, 168, 169, 170, 171, 172, 173, 174, - 175, 176, 177, 178, 179, 180, 236, 237, 0, 68, - 61, 62, 0, 101, 145, 146, 147, 67, 0, 1, - 2, 0, 3, 4, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 238, 187, 188, 189, 190, 191, 192, - 193, 194, 195, 196, 197, 198, 0, 239, 68, 240, - 241, 242, 0, 0, 0, 343, 344, 0, 0, 0, - 105, 345, 106, 0, 243, 0, -184, 244, 0, 245, - 0, 246, 0, 346, 347, 348, 0, 0, 0, 0, - 0, -63, 1, 2, 0, 3, 4, 0, 349, 350, - 0, 0, 5, 6, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 69, 0, 351, 70, 0, 0, 71, - 0, 72, 135, 7, 0, 0, 8, 0, 0, 0, - 9, 166, 167, 168, 169, 170, 171, 172, 173, 174, - 175, 176, 177, 178, 179, 180, 236, 237, 0, 0, - 0, 0, 69, 0, 0, 70, 0, 0, 71, 0, - 72, 334, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 238, 187, 188, 189, 190, 191, 192, - 193, 194, 195, 196, 197, 198, 0, 239, 0, 240, - 241, 242, 61, 62, 0, 101, 145, 146, 147, 67, - 0, 1, 2, 0, 3, 4, 0, 352, 61, 62, - 0, 101, 64, 65, 66, 67, 0, 1, 2, 0, - 3, 4, 61, 62, 0, 101, 64, 65, 66, 67, - 68, 1, 2, 0, 3, 4, 128, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, - 313, 0, 61, 62, 0, 101, 64, 65, 66, 67, - 68, 1, 2, 0, 3, 4, 61, 62, 0, 101, - 64, 65, 66, 67, 0, 1, 2, 0, 3, 4, - 408, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 0, 0, 0, 491, 0, 61, 62, 0, 63, - 64, 65, 66, 67, 68, 1, 2, 0, 3, 4, - 0, 0, 0, 61, 62, 0, 142, 64, 65, 66, - 67, 0, 1, 2, 69, 3, 4, 70, 0, 0, - 71, 0, 72, 396, 68, 0, 0, 0, 0, 0, - 69, 0, 0, 70, 0, 0, 71, 0, 72, 0, - 0, 68, 0, 0, 69, 0, 0, 70, 0, 0, - 71, 0, 72, 0, 61, 62, 0, 101, 145, 146, - 147, 67, 0, 1, 2, 0, 3, 4, 0, 0, - 0, 0, 0, 0, 69, 0, 0, 70, 0, 0, - 71, 0, 72, 0, 0, 0, 0, 0, 69, 0, - 0, 70, 68, 0, 71, 0, 72, 0, 61, 62, - 0, 101, 64, 65, 66, 67, 0, 1, 2, 0, - 3, 4, 0, 0, 0, 0, 0, 0, 69, 0, - 0, 70, 0, 0, 71, 0, 72, 274, 275, 0, - 0, 0, 0, 0, 0, 69, 68, 0, 70, 0, - 0, 71, 0, 72, 61, 62, 0, 255, 64, 65, - 66, 67, 0, 1, 2, 0, 3, 4, 61, 62, - 0, 101, 145, 146, 147, 67, 0, 1, 2, 0, - 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 68, 0, 0, 0, 69, 0, 0, 70, - 0, 0, 71, 0, 72, 0, 68, 276, 277, 278, - 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, - 289, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 69, 0, 0, 70, 0, 0, 71, 0, 72, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 157, 0, - 0, 0, 0, 0, 0, 0, 69, 0, 0, 70, - 0, 0, 71, 0, 72, 0, 0, 158, 159, 0, - 69, 0, 0, 70, 0, 0, 71, 0, 332, 160, - 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, - 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, - 181, 182, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 183, 184, 185, 0, 0, 186, 187, 188, - 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, - 199, 200, 201, 202, 203, 204 -}; + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. -static const yytype_int16 yycheck[] = -{ - 0, 26, 162, 222, 150, 4, 185, 144, 121, 24, - 11, 0, 292, 150, 11, 163, 16, 244, 245, 409, - 30, 200, 201, 202, 203, 204, 18, 16, 207, 16, - 320, 321, 19, 25, 315, 11, 11, 137, 319, 49, - 17, 137, 137, 20, 144, 113, 114, 72, 3, 4, - 5, 6, 148, 148, 38, 39, 40, 41, 42, 43, - 44, 209, 46, 131, 132, 113, 114, 22, 23, 30, - 137, 96, 136, 49, 49, 100, 48, 543, 42, 146, - 44, 106, 130, 131, 132, 133, 111, 87, 38, 39, - 62, 557, 137, 137, 53, 45, 121, 258, 259, 136, - 261, 51, 492, 148, 148, 332, 137, 34, 133, 134, - 137, 137, 137, 15, 141, 146, 141, 407, 144, 256, - 16, 258, 259, 19, 261, 352, 113, 114, 307, 138, - 137, 140, 147, 294, 141, 160, 526, 146, 31, 0, - 33, 302, 303, 144, 131, 132, 136, 144, 147, 262, - 134, 135, 113, 114, 136, 435, 148, 294, 183, 184, - 185, 186, 136, 114, 153, 302, 303, 19, 558, 130, - 131, 132, 133, 142, 199, 200, 201, 202, 203, 204, - 205, 206, 207, 463, 137, 465, 113, 114, 141, 140, - 215, 370, 305, 372, 373, 374, 138, 18, 140, 360, - 361, 362, 144, 130, 131, 132, 133, 368, 38, 39, - 40, 11, 493, 43, 14, 134, 135, 378, 379, 3, - 4, 5, 6, 360, 361, 362, 137, 138, 19, 140, - 510, 368, 28, 29, 7, 8, 455, 262, 138, 19, - 140, 378, 379, 16, 17, 19, 19, 20, 273, 109, - 110, 397, 56, 57, 58, 59, 60, 61, 140, 420, - 397, 422, 107, 108, 425, 290, 547, 38, 549, 40, - 431, 432, 138, 4, 140, 138, 142, 140, 141, 4, - 305, 306, 307, 420, 33, 422, 143, 466, 425, 143, - 469, 470, 471, 4, 431, 432, 19, 458, 459, 137, - 461, 462, 137, 138, 141, 140, 467, 332, 9, 528, - 78, 79, 531, 146, 141, 9, 477, 342, 9, 51, - 146, 458, 459, 11, 461, 462, 140, 140, 140, 140, - 467, 140, 19, 140, 140, 140, 497, 140, 137, 137, - 477, 34, 137, 137, 505, 370, 371, 372, 373, 374, - 137, 137, 377, 55, 137, 140, 137, 146, 140, 137, - 497, 137, 137, 142, 34, 525, 19, 137, 505, 4, - 137, 137, 137, 324, 325, 326, 327, 328, 137, 137, - 541, 137, 137, 19, 544, 546, 337, 338, 339, 86, - 87, 88, 89, 90, 91, 92, 93, 94, 95, 141, - 14, 14, 563, 564, 541, 140, 4, 568, 137, 546, - 571, 436, 140, 137, 141, 137, 137, 137, 137, 137, - 137, 137, 137, 49, 449, 137, 563, 564, 137, 454, - 137, 568, 146, 137, 571, 460, 387, 388, 137, 19, - 49, 466, 137, 394, 469, 470, 471, 14, 144, 474, - 142, 141, 141, 453, 4, 141, 141, 14, 141, 141, - 144, 141, 137, 14, 137, 3, 4, 14, 67, 7, - 8, 9, 14, 124, 124, 124, 236, 520, 16, 17, - 237, 19, 20, 21, 22, 23, 87, 493, 106, 440, - 441, 442, 443, 100, 16, 84, 447, 448, 36, 37, - 54, 474, 527, 389, -1, 215, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 53, -1, -1, -1, -1, - 520, -1, -1, -1, -1, -1, -1, 478, 479, -1, - -1, 69, 70, 71, 72, 73, 74, 75, 76, 77, - 78, 79, 80, 81, 82, 83, 84, 85, 7, 8, - -1, 10, 11, 12, 13, 14, -1, 16, 17, -1, - 19, 20, 513, -1, 515, 516, -1, -1, -1, -1, - -1, -1, -1, 111, 112, 113, 114, 115, 116, 117, - 118, 119, 120, 121, 122, 123, 45, 125, -1, 127, - 128, 129, 3, 4, -1, -1, 7, 8, 9, -1, - 138, 0, 140, -1, -1, 16, 17, 145, 19, 20, - 21, 22, 23, -1, -1, -1, 15, 16, 17, -1, - 19, 20, -1, -1, -1, 36, 37, 26, 27, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 7, 8, 53, 10, 11, 12, 13, 14, 47, 16, - 17, 50, 19, 20, -1, 54, -1, -1, 69, 70, - 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, - 81, 82, 83, 84, 85, -1, -1, -1, 45, -1, - 139, -1, -1, 142, -1, -1, 145, -1, 147, 148, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, - 121, 122, 123, -1, 125, -1, 127, 128, 129, 7, - 8, -1, -1, -1, -1, -1, -1, -1, 16, 17, - -1, 19, 20, 21, 145, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 36, 37, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 7, 8, -1, 10, 11, 12, 13, 14, -1, - 16, 17, 139, 19, 20, 142, -1, 144, 145, -1, - 147, 69, 70, 71, 72, 73, 74, 75, 76, 77, - 78, 79, 80, 81, 82, 83, 84, 85, -1, 45, - 7, 8, -1, 10, 11, 12, 13, 14, -1, 16, - 17, -1, 19, 20, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 111, 112, 113, 114, 115, 116, 117, - 118, 119, 120, 121, 122, 123, -1, 125, 45, 127, - 128, 129, -1, -1, -1, 3, 4, -1, -1, -1, - 138, 9, 140, -1, 142, -1, 0, 145, -1, 147, - -1, 149, -1, 21, 22, 23, -1, -1, -1, -1, - -1, 15, 16, 17, -1, 19, 20, -1, 36, 37, - -1, -1, 26, 27, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 139, -1, 53, 142, -1, -1, 145, - -1, 147, 148, 47, -1, -1, 50, -1, -1, -1, - 54, 69, 70, 71, 72, 73, 74, 75, 76, 77, - 78, 79, 80, 81, 82, 83, 84, 85, -1, -1, - -1, -1, 139, -1, -1, 142, -1, -1, 145, -1, - 147, 148, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 111, 112, 113, 114, 115, 116, 117, - 118, 119, 120, 121, 122, 123, -1, 125, -1, 127, - 128, 129, 7, 8, -1, 10, 11, 12, 13, 14, - -1, 16, 17, -1, 19, 20, -1, 145, 7, 8, - -1, 10, 11, 12, 13, 14, -1, 16, 17, -1, - 19, 20, 7, 8, -1, 10, 11, 12, 13, 14, - 45, 16, 17, -1, 19, 20, 35, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 45, -1, -1, -1, - 35, -1, 7, 8, -1, 10, 11, 12, 13, 14, - 45, 16, 17, -1, 19, 20, 7, 8, -1, 10, - 11, 12, 13, 14, -1, 16, 17, -1, 19, 20, - 35, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 45, -1, -1, -1, 35, -1, 7, 8, -1, 10, - 11, 12, 13, 14, 45, 16, 17, -1, 19, 20, - -1, -1, -1, 7, 8, -1, 10, 11, 12, 13, - 14, -1, 16, 17, 139, 19, 20, 142, -1, -1, - 145, -1, 147, 148, 45, -1, -1, -1, -1, -1, - 139, -1, -1, 142, -1, -1, 145, -1, 147, -1, - -1, 45, -1, -1, 139, -1, -1, 142, -1, -1, - 145, -1, 147, -1, 7, 8, -1, 10, 11, 12, - 13, 14, -1, 16, 17, -1, 19, 20, -1, -1, - -1, -1, -1, -1, 139, -1, -1, 142, -1, -1, - 145, -1, 147, -1, -1, -1, -1, -1, 139, -1, - -1, 142, 45, -1, 145, -1, 147, -1, 7, 8, - -1, 10, 11, 12, 13, 14, -1, 16, 17, -1, - 19, 20, -1, -1, -1, -1, -1, -1, 139, -1, - -1, 142, -1, -1, 145, -1, 147, 22, 23, -1, - -1, -1, -1, -1, -1, 139, 45, -1, 142, -1, - -1, 145, -1, 147, 7, 8, -1, 10, 11, 12, - 13, 14, -1, 16, 17, -1, 19, 20, 7, 8, - -1, 10, 11, 12, 13, 14, -1, 16, 17, -1, - 19, 20, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 45, -1, -1, -1, 139, -1, -1, 142, - -1, -1, 145, -1, 147, -1, 45, 92, 93, 94, - 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, - 105, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 139, -1, -1, 142, -1, -1, 145, -1, 147, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 32, -1, - -1, -1, -1, -1, -1, -1, 139, -1, -1, 142, - -1, -1, 145, -1, 147, -1, -1, 51, 52, -1, - 139, -1, -1, 142, -1, -1, 145, -1, 147, 63, - 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, - 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, - 84, 85, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 106, 107, 108, -1, -1, 111, 112, 113, - 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, - 124, 125, 126, 127, 128, 129 -}; + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. -/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing - symbol of state STATE-NUM. */ -static const yytype_uint8 yystos[] = -{ - 0, 16, 17, 19, 20, 26, 27, 47, 50, 54, - 158, 160, 161, 162, 163, 193, 194, 195, 197, 196, - 48, 62, 202, 136, 53, 136, 15, 136, 38, 39, - 40, 41, 42, 43, 44, 46, 134, 135, 164, 165, - 166, 0, 195, 42, 44, 167, 212, 38, 39, 40, - 43, 168, 209, 211, 218, 136, 136, 142, 203, 19, - 201, 7, 8, 10, 11, 12, 13, 14, 45, 139, - 142, 145, 147, 158, 161, 181, 182, 215, 166, 166, - 31, 33, 192, 166, 166, 18, 219, 220, 25, 148, - 210, 219, 19, 19, 19, 204, 140, 4, 4, 4, - 147, 10, 148, 182, 187, 138, 140, 192, 192, 38, - 40, 169, 28, 29, 191, 56, 57, 58, 59, 60, - 61, 170, 207, 207, 160, 223, 137, 144, 35, 182, - 183, 185, 186, 143, 143, 148, 187, 137, 148, 186, - 191, 191, 10, 182, 184, 11, 12, 13, 156, 157, - 182, 188, 4, 184, 24, 147, 208, 32, 51, 52, - 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, - 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, - 83, 84, 85, 106, 107, 108, 111, 112, 113, 114, - 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, - 125, 126, 127, 128, 129, 151, 152, 153, 221, 227, - 228, 229, 230, 19, 172, 137, 141, 182, 182, 146, - 148, 182, 141, 188, 182, 215, 22, 23, 3, 4, - 5, 6, 9, 21, 36, 37, 84, 85, 111, 125, - 127, 128, 129, 142, 145, 147, 149, 151, 152, 153, - 189, 215, 198, 161, 51, 10, 182, 217, 11, 14, - 11, 156, 170, 86, 87, 88, 89, 90, 91, 92, - 93, 94, 95, 154, 22, 23, 92, 93, 94, 95, - 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, - 155, 182, 182, 217, 182, 182, 224, 217, 217, 217, - 217, 217, 182, 182, 217, 170, 109, 110, 113, 114, - 131, 132, 171, 35, 183, 174, 144, 146, 146, 174, - 199, 200, 154, 155, 140, 140, 140, 140, 140, 144, - 188, 190, 147, 190, 148, 190, 19, 140, 140, 140, - 137, 179, 140, 3, 4, 9, 21, 22, 23, 36, - 37, 53, 145, 189, 214, 215, 216, 216, 216, 216, - 184, 182, 182, 137, 176, 137, 176, 216, 142, 137, - 137, 137, 137, 137, 137, 216, 216, 34, 184, 182, - 217, 130, 133, 171, 173, 179, 179, 140, 140, 188, - 188, 188, 188, 188, 137, 144, 148, 182, 190, 146, - 148, 188, 188, 188, 30, 49, 177, 180, 35, 182, - 205, 206, 55, 213, 190, 137, 137, 216, 216, 216, - 11, 49, 11, 226, 216, 142, 217, 182, 217, 217, - 217, 137, 137, 182, 216, 216, 137, 188, 188, 226, - 137, 137, 137, 137, 188, 146, 148, 137, 137, 34, - 19, 4, 179, 172, 137, 141, 19, 146, 14, 14, - 140, 137, 137, 216, 4, 216, 137, 137, 216, 137, - 137, 137, 216, 216, 140, 137, 176, 182, 137, 137, - 141, 188, 188, 188, 188, 146, 188, 188, 182, 158, - 159, 35, 182, 174, 137, 216, 216, 182, 225, 216, - 216, 176, 176, 217, 216, 137, 217, 217, 217, 225, - 216, 188, 188, 137, 141, 137, 137, 141, 141, 141, - 172, 177, 178, 19, 137, 142, 216, 137, 141, 144, - 216, 141, 176, 141, 141, 188, 188, 188, 159, 49, - 175, 14, 144, 156, 222, 172, 182, 174, 144, 174, - 141, 141, 141, 4, 216, 214, 144, 156, 216, 34, - 137, 214, 172, 14, 14, 137, 216, 216, 14, 67, - 216, 14, 216 -}; + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +/* As a special exception, when this file is copied by Bison into a + Bison output file, you may use that output file without restriction. + This special exception was added by the Free Software Foundation + in version 1.24 of Bison. */ + +/* This is the parser code that is written into each bison parser + when the %semantic_parser declaration is not specified in the grammar. + It was written by Richard Stallman by simplifying the hairy parser + used when %semantic_parser is specified. */ + +#ifndef YYSTACK_USE_ALLOCA +#ifdef alloca +#define YYSTACK_USE_ALLOCA +#else /* alloca not defined */ +#ifdef __GNUC__ +#define YYSTACK_USE_ALLOCA +#define alloca __builtin_alloca +#else /* not GNU C. */ +#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || (defined (__sun) && defined (__i386)) +#define YYSTACK_USE_ALLOCA +#include +#else /* not sparc */ +/* We think this test detects Watcom and Microsoft C. */ +/* This used to test MSDOS, but that is a bad idea + since that symbol is in the user namespace. */ +#if (defined (_MSDOS) || defined (_MSDOS_)) && !defined (__TURBOC__) +#if 0 /* No need for malloc.h, which pollutes the namespace; + instead, just don't use alloca. */ +#include +#endif +#else /* not MSDOS, or __TURBOC__ */ +#if defined(_AIX) +/* I don't know what this was needed for, but it pollutes the namespace. + So I turned it off. rms, 2 May 1997. */ +/* #include */ + #pragma alloca +#define YYSTACK_USE_ALLOCA +#else /* not MSDOS, or __TURBOC__, or _AIX */ +#if 0 +#ifdef __hpux /* haible at ilog.fr says this works for HPUX 9.05 and up, + and on HPUX 10. Eventually we can turn this on. */ +#define YYSTACK_USE_ALLOCA +#define alloca __builtin_alloca +#endif /* __hpux */ +#endif +#endif /* not _AIX */ +#endif /* not MSDOS, or __TURBOC__ */ +#endif /* not sparc */ +#endif /* not GNU C */ +#endif /* alloca not defined */ +#endif /* YYSTACK_USE_ALLOCA not defined */ + +#ifdef YYSTACK_USE_ALLOCA +#define YYSTACK_ALLOC alloca +#else +#define YYSTACK_ALLOC malloc +#endif + +/* Note: there must be only one dollar sign in this file. + It is replaced by the list of actions, each action + as one case of the switch. */ #define yyerrok (yyerrstatus = 0) #define yyclearin (yychar = YYEMPTY) -#define YYEMPTY (-2) +#define YYEMPTY -2 #define YYEOF 0 - #define YYACCEPT goto yyacceptlab -#define YYABORT goto yyabortlab -#define YYERROR goto yyerrorlab - - -/* Like YYERROR except do call yyerror. This remains here temporarily - to ease the transition to the new meaning of YYERROR, for GCC. +#define YYABORT goto yyabortlab +#define YYERROR goto yyerrlab1 +/* Like YYERROR except do call yyerror. + This remains here temporarily to ease the + transition to the new meaning of YYERROR, for GCC. Once GCC version 2 has supplanted version 1, this can go. */ - #define YYFAIL goto yyerrlab - #define YYRECOVERING() (!!yyerrstatus) - -#define YYBACKUP(Token, Value) \ +#define YYBACKUP(token, value) \ do \ if (yychar == YYEMPTY && yylen == 1) \ - { \ - yychar = (Token); \ - yylval = (Value); \ - yytoken = YYTRANSLATE (yychar); \ - YYPOPSTACK (1); \ + { yychar = (token), yylval = (value); \ + yychar1 = YYTRANSLATE (yychar); \ + YYPOPSTACK; \ goto yybackup; \ } \ else \ - { \ - yyerror (YY_("syntax error: cannot back up")); \ - YYERROR; \ - } \ -while (YYID (0)) - + { yyerror ("syntax error: cannot back up"); YYERROR; } \ +while (0) #define YYTERROR 1 #define YYERRCODE 256 - -/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. - If N is 0, then set CURRENT to the empty location which ends - the previous symbol: RHS[0] (always defined). */ - -#define YYRHSLOC(Rhs, K) ((Rhs)[K]) -#ifndef YYLLOC_DEFAULT -# define YYLLOC_DEFAULT(Current, Rhs, N) \ - do \ - if (YYID (N)) \ - { \ - (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ - (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ - (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ - (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ - } \ - else \ - { \ - (Current).first_line = (Current).last_line = \ - YYRHSLOC (Rhs, 0).last_line; \ - (Current).first_column = (Current).last_column = \ - YYRHSLOC (Rhs, 0).last_column; \ - } \ - while (YYID (0)) -#endif - - -/* YY_LOCATION_PRINT -- Print the location on the stream. - This macro was not mandated originally: define only if we know - we won't break user code: when these are the locations we know. */ - -#ifndef YY_LOCATION_PRINT -# if YYLTYPE_IS_TRIVIAL -# define YY_LOCATION_PRINT(File, Loc) \ - fprintf (File, "%d.%d-%d.%d", \ - (Loc).first_line, (Loc).first_column, \ - (Loc).last_line, (Loc).last_column) -# else -# define YY_LOCATION_PRINT(File, Loc) ((void) 0) -# endif +#ifndef YYPURE +#define YYLEX yylex() #endif - -/* YYLEX -- calling `yylex' with the right arguments. */ - +#ifdef YYPURE +#ifdef YYLSP_NEEDED #ifdef YYLEX_PARAM -# define YYLEX yylex (YYLEX_PARAM) +#define YYLEX yylex(&yylval, &yylloc, YYLEX_PARAM) #else -# define YYLEX yylex () +#define YYLEX yylex(&yylval, &yylloc) #endif - -/* Enable debugging if requested. */ -#if YYDEBUG - -# ifndef YYFPRINTF -# include /* INFRINGES ON USER NAME SPACE */ -# define YYFPRINTF fprintf -# endif - -# define YYDPRINTF(Args) \ -do { \ - if (yydebug) \ - YYFPRINTF Args; \ -} while (YYID (0)) - -# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ -do { \ - if (yydebug) \ - { \ - YYFPRINTF (stderr, "%s ", Title); \ - yy_symbol_print (stderr, \ - Type, Value); \ - YYFPRINTF (stderr, "\n"); \ - } \ -} while (YYID (0)) - - -/*--------------------------------. -| Print this symbol on YYOUTPUT. | -`--------------------------------*/ - -/*ARGSUSED*/ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -static void -yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) +#else /* not YYLSP_NEEDED */ +#ifdef YYLEX_PARAM +#define YYLEX yylex(&yylval, YYLEX_PARAM) #else -static void -yy_symbol_value_print (yyoutput, yytype, yyvaluep) - FILE *yyoutput; - int yytype; - YYSTYPE const * const yyvaluep; +#define YYLEX yylex(&yylval) #endif -{ - if (!yyvaluep) - return; -# ifdef YYPRINT - if (yytype < YYNTOKENS) - YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); -# else - YYUSE (yyoutput); -# endif - switch (yytype) - { - default: - break; - } -} - - -/*--------------------------------. -| Print this symbol on YYOUTPUT. | -`--------------------------------*/ - -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -static void -yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) -#else -static void -yy_symbol_print (yyoutput, yytype, yyvaluep) - FILE *yyoutput; - int yytype; - YYSTYPE const * const yyvaluep; +#endif /* not YYLSP_NEEDED */ #endif -{ - if (yytype < YYNTOKENS) - YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); - else - YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); - - yy_symbol_value_print (yyoutput, yytype, yyvaluep); - YYFPRINTF (yyoutput, ")"); -} -/*------------------------------------------------------------------. -| yy_stack_print -- Print the state stack from its BOTTOM up to its | -| TOP (included). | -`------------------------------------------------------------------*/ +/* If nonreentrant, generate the variables here */ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -static void -yy_stack_print (yytype_int16 *bottom, yytype_int16 *top) -#else -static void -yy_stack_print (bottom, top) - yytype_int16 *bottom; - yytype_int16 *top; -#endif -{ - YYFPRINTF (stderr, "Stack now"); - for (; bottom <= top; ++bottom) - YYFPRINTF (stderr, " %d", *bottom); - YYFPRINTF (stderr, "\n"); -} +#ifndef YYPURE -# define YY_STACK_PRINT(Bottom, Top) \ -do { \ - if (yydebug) \ - yy_stack_print ((Bottom), (Top)); \ -} while (YYID (0)) +int yychar; /* the lookahead symbol */ +YYSTYPE yylval; /* the semantic value of the */ + /* lookahead symbol */ +#ifdef YYLSP_NEEDED +YYLTYPE yylloc; /* location data for the lookahead */ + /* symbol */ +#endif -/*------------------------------------------------. -| Report that the YYRULE is going to be reduced. | -`------------------------------------------------*/ +int yynerrs; /* number of parse errors so far */ +#endif /* not YYPURE */ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -static void -yy_reduce_print (YYSTYPE *yyvsp, int yyrule) -#else -static void -yy_reduce_print (yyvsp, yyrule) - YYSTYPE *yyvsp; - int yyrule; +#if YYDEBUG != 0 +int yydebug; /* nonzero means print parse trace */ +/* Since this is uninitialized, it does not stop multiple parsers + from coexisting. */ #endif -{ - int yynrhs = yyr2[yyrule]; - int yyi; - unsigned long int yylno = yyrline[yyrule]; - YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", - yyrule - 1, yylno); - /* The symbols being reduced. */ - for (yyi = 0; yyi < yynrhs; yyi++) - { - fprintf (stderr, " $%d = ", yyi + 1); - yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], - &(yyvsp[(yyi + 1) - (yynrhs)]) - ); - fprintf (stderr, "\n"); - } -} -# define YY_REDUCE_PRINT(Rule) \ -do { \ - if (yydebug) \ - yy_reduce_print (yyvsp, Rule); \ -} while (YYID (0)) - -/* Nonzero means print parse trace. It is left uninitialized so that - multiple parsers can coexist. */ -int yydebug; -#else /* !YYDEBUG */ -# define YYDPRINTF(Args) -# define YY_SYMBOL_PRINT(Title, Type, Value, Location) -# define YY_STACK_PRINT(Bottom, Top) -# define YY_REDUCE_PRINT(Rule) -#endif /* !YYDEBUG */ +/* YYINITDEPTH indicates the initial size of the parser's stacks */ - -/* YYINITDEPTH -- initial size of the parser's stacks. */ #ifndef YYINITDEPTH -# define YYINITDEPTH 200 +#define YYINITDEPTH 200 #endif -/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only - if the built-in stack extension method is used). +/* YYMAXDEPTH is the maximum size the stacks can grow to + (effective only if the built-in stack extension method is used). */ - Do not make this value too large; the results are undefined if - YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) - evaluated with infinite-precision integer arithmetic. */ +#if YYMAXDEPTH == 0 +#undef YYMAXDEPTH +#endif #ifndef YYMAXDEPTH -# define YYMAXDEPTH 10000 +#define YYMAXDEPTH 10000 #endif - +/* Define __yy_memcpy. Note that the size argument + should be passed with type unsigned int, because that is what the non-GCC + definitions require. With GCC, __builtin_memcpy takes an arg + of type size_t, but it can handle unsigned int. */ + +#if __GNUC__ > 1 /* GNU C and GNU C++ define this. */ +#define __yy_memcpy(TO,FROM,COUNT) __builtin_memcpy(TO,FROM,COUNT) +#else /* not GNU C or C++ */ +#ifndef __cplusplus -#if YYERROR_VERBOSE - -# ifndef yystrlen -# if defined __GLIBC__ && defined _STRING_H -# define yystrlen strlen -# else -/* Return the length of YYSTR. */ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -static YYSIZE_T -yystrlen (const char *yystr) -#else -static YYSIZE_T -yystrlen (yystr) - const char *yystr; -#endif -{ - YYSIZE_T yylen; - for (yylen = 0; yystr[yylen]; yylen++) - continue; - return yylen; -} -# endif -# endif - -# ifndef yystpcpy -# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE -# define yystpcpy stpcpy -# else -/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in - YYDEST. */ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -static char * -yystpcpy (char *yydest, const char *yysrc) -#else -static char * -yystpcpy (yydest, yysrc) - char *yydest; - const char *yysrc; -#endif +/* This is the most reliable way to avoid incompatibilities + in available built-in functions on various systems. */ +static void +__yy_memcpy (to, from, count) + char *to; + char *from; + unsigned int count; { - char *yyd = yydest; - const char *yys = yysrc; + register char *f = from; + register char *t = to; + register int i = count; - while ((*yyd++ = *yys++) != '\0') - continue; - - return yyd - 1; + while (i-- > 0) + *t++ = *f++; } -# endif -# endif - -# ifndef yytnamerr -/* Copy to YYRES the contents of YYSTR after stripping away unnecessary - quotes and backslashes, so that it's suitable for yyerror. The - heuristic is that double-quoting is unnecessary unless the string - contains an apostrophe, a comma, or backslash (other than - backslash-backslash). YYSTR is taken from yytname. If YYRES is - null, do not copy; instead, return the length of what the result - would have been. */ -static YYSIZE_T -yytnamerr (char *yyres, const char *yystr) -{ - if (*yystr == '"') - { - YYSIZE_T yyn = 0; - char const *yyp = yystr; - for (;;) - switch (*++yyp) - { - case '\'': - case ',': - goto do_not_strip_quotes; - - case '\\': - if (*++yyp != '\\') - goto do_not_strip_quotes; - /* Fall through. */ - default: - if (yyres) - yyres[yyn] = *yyp; - yyn++; - break; - - case '"': - if (yyres) - yyres[yyn] = '\0'; - return yyn; - } - do_not_strip_quotes: ; - } - - if (! yyres) - return yystrlen (yystr); - - return yystpcpy (yyres, yystr) - yyres; -} -# endif +#else /* __cplusplus */ -/* Copy into YYRESULT an error message about the unexpected token - YYCHAR while in state YYSTATE. Return the number of bytes copied, - including the terminating null byte. If YYRESULT is null, do not - copy anything; just return the number of bytes that would be - copied. As a special case, return 0 if an ordinary "syntax error" - message will do. Return YYSIZE_MAXIMUM if overflow occurs during - size calculation. */ -static YYSIZE_T -yysyntax_error (char *yyresult, int yystate, int yychar) +/* This is the most reliable way to avoid incompatibilities + in available built-in functions on various systems. */ +static void +__yy_memcpy (char *to, char *from, unsigned int count) { - int yyn = yypact[yystate]; - - if (! (YYPACT_NINF < yyn && yyn <= YYLAST)) - return 0; - else - { - int yytype = YYTRANSLATE (yychar); - YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]); - YYSIZE_T yysize = yysize0; - YYSIZE_T yysize1; - int yysize_overflow = 0; - enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; - char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; - int yyx; - -# if 0 - /* This is so xgettext sees the translatable formats that are - constructed on the fly. */ - YY_("syntax error, unexpected %s"); - YY_("syntax error, unexpected %s, expecting %s"); - YY_("syntax error, unexpected %s, expecting %s or %s"); - YY_("syntax error, unexpected %s, expecting %s or %s or %s"); - YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"); -# endif - char *yyfmt; - char const *yyf; - static char const yyunexpected[] = "syntax error, unexpected %s"; - static char const yyexpecting[] = ", expecting %s"; - static char const yyor[] = " or %s"; - char yyformat[sizeof yyunexpected - + sizeof yyexpecting - 1 - + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2) - * (sizeof yyor - 1))]; - char const *yyprefix = yyexpecting; - - /* Start YYX at -YYN if negative to avoid negative indexes in - YYCHECK. */ - int yyxbegin = yyn < 0 ? -yyn : 0; - - /* Stay within bounds of both yycheck and yytname. */ - int yychecklim = YYLAST - yyn + 1; - int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; - int yycount = 1; - - yyarg[0] = yytname[yytype]; - yyfmt = yystpcpy (yyformat, yyunexpected); - - for (yyx = yyxbegin; yyx < yyxend; ++yyx) - if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) - { - if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) - { - yycount = 1; - yysize = yysize0; - yyformat[sizeof yyunexpected - 1] = '\0'; - break; - } - yyarg[yycount++] = yytname[yyx]; - yysize1 = yysize + yytnamerr (0, yytname[yyx]); - yysize_overflow |= (yysize1 < yysize); - yysize = yysize1; - yyfmt = yystpcpy (yyfmt, yyprefix); - yyprefix = yyor; - } - - yyf = YY_(yyformat); - yysize1 = yysize + yystrlen (yyf); - yysize_overflow |= (yysize1 < yysize); - yysize = yysize1; - - if (yysize_overflow) - return YYSIZE_MAXIMUM; + register char *t = to; + register char *f = from; + register int i = count; - if (yyresult) - { - /* Avoid sprintf, as that infringes on the user's name space. - Don't have undefined behavior even if the translation - produced a string with the wrong number of "%s"s. */ - char *yyp = yyresult; - int yyi = 0; - while ((*yyp = *yyf) != '\0') - { - if (*yyp == '%' && yyf[1] == 's' && yyi < yycount) - { - yyp += yytnamerr (yyp, yyarg[yyi++]); - yyf += 2; - } - else - { - yyp++; - yyf++; - } - } - } - return yysize; - } + while (i-- > 0) + *t++ = *f++; } -#endif /* YYERROR_VERBOSE */ - -/*-----------------------------------------------. -| Release the memory associated to this symbol. | -`-----------------------------------------------*/ - -/*ARGSUSED*/ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -static void -yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep) -#else -static void -yydestruct (yymsg, yytype, yyvaluep) - const char *yymsg; - int yytype; - YYSTYPE *yyvaluep; #endif -{ - YYUSE (yyvaluep); - - if (!yymsg) - yymsg = "Deleting"; - YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); - - switch (yytype) - { - - default: - break; - } -} +#endif +#line 217 "/usr/share/bison.simple" -/* Prevent warnings from -Wmissing-prototypes. */ +/* The user can define YYPARSE_PARAM as the name of an argument to be passed + into yyparse. The argument should have type void *. + It should actually point to an object. + Grammar actions can access the variable by casting it + to the proper pointer type. */ #ifdef YYPARSE_PARAM -#if defined __STDC__ || defined __cplusplus -int yyparse (void *YYPARSE_PARAM); +#ifdef __cplusplus +#define YYPARSE_PARAM_ARG void *YYPARSE_PARAM +#define YYPARSE_PARAM_DECL +#else /* not __cplusplus */ +#define YYPARSE_PARAM_ARG YYPARSE_PARAM +#define YYPARSE_PARAM_DECL void *YYPARSE_PARAM; +#endif /* not __cplusplus */ +#else /* not YYPARSE_PARAM */ +#define YYPARSE_PARAM_ARG +#define YYPARSE_PARAM_DECL +#endif /* not YYPARSE_PARAM */ + +/* Prevent warning if -Wstrict-prototypes. */ +#ifdef __GNUC__ +#ifdef YYPARSE_PARAM +int yyparse (void *); #else -int yyparse (); -#endif -#else /* ! YYPARSE_PARAM */ -#if defined __STDC__ || defined __cplusplus int yyparse (void); -#else -int yyparse (); #endif -#endif /* ! YYPARSE_PARAM */ - - - -/* The look-ahead symbol. */ -int yychar; - -/* The semantic value of the look-ahead symbol. */ -YYSTYPE yylval; - -/* Number of syntax errors so far. */ -int yynerrs; - - - -/*----------. -| yyparse. | -`----------*/ +#endif -#ifdef YYPARSE_PARAM -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) int -yyparse (void *YYPARSE_PARAM) +yyparse(YYPARSE_PARAM_ARG) + YYPARSE_PARAM_DECL +{ + register int yystate; + register int yyn; + register short *yyssp; + register YYSTYPE *yyvsp; + int yyerrstatus; /* number of tokens to shift before error messages enabled */ + int yychar1 = 0; /* lookahead token as an internal (translated) token number */ + + short yyssa[YYINITDEPTH]; /* the state stack */ + YYSTYPE yyvsa[YYINITDEPTH]; /* the semantic value stack */ + + short *yyss = yyssa; /* refer to the stacks thru separate pointers */ + YYSTYPE *yyvs = yyvsa; /* to allow yyoverflow to reallocate them elsewhere */ + +#ifdef YYLSP_NEEDED + YYLTYPE yylsa[YYINITDEPTH]; /* the location stack */ + YYLTYPE *yyls = yylsa; + YYLTYPE *yylsp; + +#define YYPOPSTACK (yyvsp--, yyssp--, yylsp--) #else -int -yyparse (YYPARSE_PARAM) - void *YYPARSE_PARAM; +#define YYPOPSTACK (yyvsp--, yyssp--) #endif -#else /* ! YYPARSE_PARAM */ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -int -yyparse (void) -#else -int -yyparse () + int yystacksize = YYINITDEPTH; + int yyfree_stacks = 0; + +#ifdef YYPURE + int yychar; + YYSTYPE yylval; + int yynerrs; +#ifdef YYLSP_NEEDED + YYLTYPE yylloc; #endif #endif -{ - - int yystate; - int yyn; - int yyresult; - /* Number of tokens to shift before error messages enabled. */ - int yyerrstatus; - /* Look-ahead token as an internal (translated) token number. */ - int yytoken = 0; -#if YYERROR_VERBOSE - /* Buffer for error messages, and its allocated size. */ - char yymsgbuf[128]; - char *yymsg = yymsgbuf; - YYSIZE_T yymsg_alloc = sizeof yymsgbuf; -#endif - - /* Three stacks and their tools: - `yyss': related to states, - `yyvs': related to semantic values, - `yyls': related to locations. - - Refer to the stacks thru separate pointers, to allow yyoverflow - to reallocate them elsewhere. */ - - /* The state stack. */ - yytype_int16 yyssa[YYINITDEPTH]; - yytype_int16 *yyss = yyssa; - yytype_int16 *yyssp; - - /* The semantic value stack. */ - YYSTYPE yyvsa[YYINITDEPTH]; - YYSTYPE *yyvs = yyvsa; - YYSTYPE *yyvsp; - - - -#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) - - YYSIZE_T yystacksize = YYINITDEPTH; - /* The variables used to return semantic value and location from the - action routines. */ - YYSTYPE yyval; + YYSTYPE yyval; /* the variable used to return */ + /* semantic values from the action */ + /* routines */ + int yylen; - /* The number of symbols on the RHS of the reduced rule. - Keep to zero when no symbol should be popped. */ - int yylen = 0; - - YYDPRINTF ((stderr, "Starting parse\n")); +#if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Starting parse\n"); +#endif yystate = 0; yyerrstatus = 0; @@ -3099,700 +2196,668 @@ so that they stay on the same level as the state stack. The wasted elements are never initialized. */ - yyssp = yyss; + yyssp = yyss - 1; yyvsp = yyvs; +#ifdef YYLSP_NEEDED + yylsp = yyls; +#endif - goto yysetstate; - -/*------------------------------------------------------------. -| yynewstate -- Push a new state, which is found in yystate. | -`------------------------------------------------------------*/ - yynewstate: - /* In all cases, when you get here, the value and location stacks - have just been pushed. So pushing a state here evens the stacks. */ - yyssp++; +/* Push a new state, which is found in yystate . */ +/* In all cases, when you get here, the value and location stacks + have just been pushed. so pushing a state here evens the stacks. */ +yynewstate: - yysetstate: - *yyssp = yystate; + *++yyssp = yystate; - if (yyss + yystacksize - 1 <= yyssp) + if (yyssp >= yyss + yystacksize - 1) { + /* Give user a chance to reallocate the stack */ + /* Use copies of these so that the &'s don't force the real ones into memory. */ + YYSTYPE *yyvs1 = yyvs; + short *yyss1 = yyss; +#ifdef YYLSP_NEEDED + YYLTYPE *yyls1 = yyls; +#endif + /* Get the current used size of the three stacks, in elements. */ - YYSIZE_T yysize = yyssp - yyss + 1; + int size = yyssp - yyss + 1; #ifdef yyoverflow - { - /* Give user a chance to reallocate the stack. Use copies of - these so that the &'s don't force the real ones into - memory. */ - YYSTYPE *yyvs1 = yyvs; - yytype_int16 *yyss1 = yyss; - - - /* Each stack pointer address is followed by the size of the - data in use in that stack, in bytes. This used to be a - conditional around just the two extra args, but that might - be undefined if yyoverflow is a macro. */ - yyoverflow (YY_("memory exhausted"), - &yyss1, yysize * sizeof (*yyssp), - &yyvs1, yysize * sizeof (*yyvsp), - - &yystacksize); + /* Each stack pointer address is followed by the size of + the data in use in that stack, in bytes. */ +#ifdef YYLSP_NEEDED + /* This used to be a conditional around just the two extra args, + but that might be undefined if yyoverflow is a macro. */ + yyoverflow("parser stack overflow", + &yyss1, size * sizeof (*yyssp), + &yyvs1, size * sizeof (*yyvsp), + &yyls1, size * sizeof (*yylsp), + &yystacksize); +#else + yyoverflow("parser stack overflow", + &yyss1, size * sizeof (*yyssp), + &yyvs1, size * sizeof (*yyvsp), + &yystacksize); +#endif - yyss = yyss1; - yyvs = yyvs1; - } + yyss = yyss1; yyvs = yyvs1; +#ifdef YYLSP_NEEDED + yyls = yyls1; +#endif #else /* no yyoverflow */ -# ifndef YYSTACK_RELOCATE - goto yyexhaustedlab; -# else /* Extend the stack our own way. */ - if (YYMAXDEPTH <= yystacksize) - goto yyexhaustedlab; + if (yystacksize >= YYMAXDEPTH) + { + yyerror("parser stack overflow"); + if (yyfree_stacks) + { + free (yyss); + free (yyvs); +#ifdef YYLSP_NEEDED + free (yyls); +#endif + } + return 2; + } yystacksize *= 2; - if (YYMAXDEPTH < yystacksize) + if (yystacksize > YYMAXDEPTH) yystacksize = YYMAXDEPTH; - - { - yytype_int16 *yyss1 = yyss; - union yyalloc *yyptr = - (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); - if (! yyptr) - goto yyexhaustedlab; - YYSTACK_RELOCATE (yyss); - YYSTACK_RELOCATE (yyvs); - -# undef YYSTACK_RELOCATE - if (yyss1 != yyssa) - YYSTACK_FREE (yyss1); - } -# endif +#ifndef YYSTACK_USE_ALLOCA + yyfree_stacks = 1; +#endif + yyss = (short *) YYSTACK_ALLOC (yystacksize * sizeof (*yyssp)); + __yy_memcpy ((char *)yyss, (char *)yyss1, + size * (unsigned int) sizeof (*yyssp)); + yyvs = (YYSTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yyvsp)); + __yy_memcpy ((char *)yyvs, (char *)yyvs1, + size * (unsigned int) sizeof (*yyvsp)); +#ifdef YYLSP_NEEDED + yyls = (YYLTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yylsp)); + __yy_memcpy ((char *)yyls, (char *)yyls1, + size * (unsigned int) sizeof (*yylsp)); +#endif #endif /* no yyoverflow */ - yyssp = yyss + yysize - 1; - yyvsp = yyvs + yysize - 1; - + yyssp = yyss + size - 1; + yyvsp = yyvs + size - 1; +#ifdef YYLSP_NEEDED + yylsp = yyls + size - 1; +#endif - YYDPRINTF ((stderr, "Stack size increased to %lu\n", - (unsigned long int) yystacksize)); +#if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Stack size increased to %d\n", yystacksize); +#endif - if (yyss + yystacksize - 1 <= yyssp) + if (yyssp >= yyss + yystacksize - 1) YYABORT; } - YYDPRINTF ((stderr, "Entering state %d\n", yystate)); +#if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Entering state %d\n", yystate); +#endif goto yybackup; + yybackup: -/*-----------. -| yybackup. | -`-----------*/ -yybackup: +/* Do appropriate processing given the current state. */ +/* Read a lookahead token if we need one and don't already have one. */ +/* yyresume: */ - /* Do appropriate processing given the current state. Read a - look-ahead token if we need one and don't already have one. */ + /* First try to decide what to do without reference to lookahead token. */ - /* First try to decide what to do without reference to look-ahead token. */ yyn = yypact[yystate]; - if (yyn == YYPACT_NINF) + if (yyn == YYFLAG) goto yydefault; - /* Not known => get a look-ahead token if don't already have one. */ + /* Not known => get a lookahead token if don't already have one. */ + + /* yychar is either YYEMPTY or YYEOF + or a valid token in external form. */ - /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */ if (yychar == YYEMPTY) { - YYDPRINTF ((stderr, "Reading a token: ")); +#if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Reading a token: "); +#endif yychar = YYLEX; } - if (yychar <= YYEOF) + /* Convert token to internal form (in yychar1) for indexing tables with */ + + if (yychar <= 0) /* This means end of input. */ { - yychar = yytoken = YYEOF; - YYDPRINTF ((stderr, "Now at end of input.\n")); + yychar1 = 0; + yychar = YYEOF; /* Don't call YYLEX any more */ + +#if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Now at end of input.\n"); +#endif } else { - yytoken = YYTRANSLATE (yychar); - YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); - } + yychar1 = YYTRANSLATE(yychar); - /* If the proper action on seeing token YYTOKEN is to reduce or to - detect an error, take that action. */ - yyn += yytoken; - if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) - goto yydefault; - yyn = yytable[yyn]; - if (yyn <= 0) +#if YYDEBUG != 0 + if (yydebug) + { + fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]); + /* Give the individual parser a way to print the precise meaning + of a token, for further debugging info. */ +#ifdef YYPRINT + YYPRINT (stderr, yychar, yylval); +#endif + fprintf (stderr, ")\n"); + } +#endif + } + + yyn += yychar1; + if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1) + goto yydefault; + + yyn = yytable[yyn]; + + /* yyn is what to do for this token type in this state. + Negative => reduce, -yyn is rule number. + Positive => shift, yyn is new state. + New state is final state => don't bother to shift, + just return success. + 0, or most negative number => error. */ + + if (yyn < 0) { - if (yyn == 0 || yyn == YYTABLE_NINF) + if (yyn == YYFLAG) goto yyerrlab; yyn = -yyn; goto yyreduce; } + else if (yyn == 0) + goto yyerrlab; if (yyn == YYFINAL) YYACCEPT; - /* Count tokens shifted since error; after three, turn off error - status. */ - if (yyerrstatus) - yyerrstatus--; + /* Shift the lookahead token. */ - /* Shift the look-ahead token. */ - YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); +#if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]); +#endif - /* Discard the shifted token unless it is eof. */ + /* Discard the token being shifted unless it is eof. */ if (yychar != YYEOF) yychar = YYEMPTY; - yystate = yyn; *++yyvsp = yylval; +#ifdef YYLSP_NEEDED + *++yylsp = yylloc; +#endif - goto yynewstate; + /* count tokens shifted since error; after three, turn off error status. */ + if (yyerrstatus) yyerrstatus--; + yystate = yyn; + goto yynewstate; -/*-----------------------------------------------------------. -| yydefault -- do the default action for the current state. | -`-----------------------------------------------------------*/ +/* Do the default action for the current state. */ yydefault: + yyn = yydefact[yystate]; if (yyn == 0) goto yyerrlab; - goto yyreduce; - -/*-----------------------------. -| yyreduce -- Do a reduction. | -`-----------------------------*/ +/* Do a reduction. yyn is the number of a rule to reduce with. */ yyreduce: - /* yyn is the number of a rule to reduce with. */ yylen = yyr2[yyn]; + if (yylen > 0) + yyval = yyvsp[1-yylen]; /* implement default value of the action */ - /* If YYLEN is nonzero, implement the default value of the action: - `$$ = $1'. - - Otherwise, the following line sets YYVAL to garbage. - This behavior is undocumented and Bison - users should not rely upon it. Assigning to YYVAL - unconditionally makes the parser a bit smaller, and it avoids a - GCC warning that YYVAL may be used uninitialized. */ - yyval = yyvsp[1-yylen]; - - - YY_REDUCE_PRINT (yyn); - switch (yyn) +#if YYDEBUG != 0 + if (yydebug) { - case 29: -#line 1100 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { (yyval.IPredicate) = ICmpInst::ICMP_EQ; ;} - break; - - case 30: -#line 1100 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { (yyval.IPredicate) = ICmpInst::ICMP_NE; ;} - break; - - case 31: -#line 1101 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { (yyval.IPredicate) = ICmpInst::ICMP_SLT; ;} - break; - - case 32: -#line 1101 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { (yyval.IPredicate) = ICmpInst::ICMP_SGT; ;} - break; - - case 33: -#line 1102 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { (yyval.IPredicate) = ICmpInst::ICMP_SLE; ;} - break; - - case 34: -#line 1102 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { (yyval.IPredicate) = ICmpInst::ICMP_SGE; ;} - break; - - case 35: -#line 1103 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { (yyval.IPredicate) = ICmpInst::ICMP_ULT; ;} - break; - - case 36: -#line 1103 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { (yyval.IPredicate) = ICmpInst::ICMP_UGT; ;} - break; - - case 37: -#line 1104 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { (yyval.IPredicate) = ICmpInst::ICMP_ULE; ;} - break; - - case 38: -#line 1104 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { (yyval.IPredicate) = ICmpInst::ICMP_UGE; ;} - break; - - case 39: -#line 1108 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { (yyval.FPredicate) = FCmpInst::FCMP_OEQ; ;} - break; - - case 40: -#line 1108 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { (yyval.FPredicate) = FCmpInst::FCMP_ONE; ;} - break; - - case 41: -#line 1109 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { (yyval.FPredicate) = FCmpInst::FCMP_OLT; ;} - break; - - case 42: -#line 1109 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { (yyval.FPredicate) = FCmpInst::FCMP_OGT; ;} - break; + int i; - case 43: -#line 1110 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { (yyval.FPredicate) = FCmpInst::FCMP_OLE; ;} - break; - - case 44: -#line 1110 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { (yyval.FPredicate) = FCmpInst::FCMP_OGE; ;} - break; - - case 45: -#line 1111 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { (yyval.FPredicate) = FCmpInst::FCMP_ORD; ;} - break; - - case 46: -#line 1111 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { (yyval.FPredicate) = FCmpInst::FCMP_UNO; ;} - break; - - case 47: -#line 1112 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { (yyval.FPredicate) = FCmpInst::FCMP_UEQ; ;} - break; - - case 48: -#line 1112 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { (yyval.FPredicate) = FCmpInst::FCMP_UNE; ;} - break; - - case 49: -#line 1113 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { (yyval.FPredicate) = FCmpInst::FCMP_ULT; ;} - break; - - case 50: -#line 1113 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { (yyval.FPredicate) = FCmpInst::FCMP_UGT; ;} - break; - - case 51: -#line 1114 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { (yyval.FPredicate) = FCmpInst::FCMP_ULE; ;} - break; - - case 52: -#line 1114 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { (yyval.FPredicate) = FCmpInst::FCMP_UGE; ;} - break; - - case 53: -#line 1115 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { (yyval.FPredicate) = FCmpInst::FCMP_TRUE; ;} - break; - - case 54: -#line 1116 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { (yyval.FPredicate) = FCmpInst::FCMP_FALSE; ;} - break; - - case 61: -#line 1125 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { (yyval.StrVal) = 0; ;} - break; - - case 62: -#line 1129 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - (yyval.StrVal) = (yyvsp[(1) - (2)].StrVal); + fprintf (stderr, "Reducing via rule %d (line %d), ", + yyn, yyrline[yyn]); + + /* Print the symbols being reduced, and their result. */ + for (i = yyprhs[yyn]; yyrhs[i] > 0; i++) + fprintf (stderr, "%s ", yytname[yyrhs[i]]); + fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]); + } +#endif + + + switch (yyn) { + +case 28: +#line 1100 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.IPredicate = ICmpInst::ICMP_EQ; ; + break;} +case 29: +#line 1100 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.IPredicate = ICmpInst::ICMP_NE; ; + break;} +case 30: +#line 1101 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.IPredicate = ICmpInst::ICMP_SLT; ; + break;} +case 31: +#line 1101 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.IPredicate = ICmpInst::ICMP_SGT; ; + break;} +case 32: +#line 1102 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.IPredicate = ICmpInst::ICMP_SLE; ; + break;} +case 33: +#line 1102 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.IPredicate = ICmpInst::ICMP_SGE; ; + break;} +case 34: +#line 1103 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.IPredicate = ICmpInst::ICMP_ULT; ; + break;} +case 35: +#line 1103 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.IPredicate = ICmpInst::ICMP_UGT; ; + break;} +case 36: +#line 1104 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.IPredicate = ICmpInst::ICMP_ULE; ; + break;} +case 37: +#line 1104 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.IPredicate = ICmpInst::ICMP_UGE; ; + break;} +case 38: +#line 1108 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.FPredicate = FCmpInst::FCMP_OEQ; ; + break;} +case 39: +#line 1108 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.FPredicate = FCmpInst::FCMP_ONE; ; + break;} +case 40: +#line 1109 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.FPredicate = FCmpInst::FCMP_OLT; ; + break;} +case 41: +#line 1109 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.FPredicate = FCmpInst::FCMP_OGT; ; + break;} +case 42: +#line 1110 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.FPredicate = FCmpInst::FCMP_OLE; ; + break;} +case 43: +#line 1110 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.FPredicate = FCmpInst::FCMP_OGE; ; + break;} +case 44: +#line 1111 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.FPredicate = FCmpInst::FCMP_ORD; ; + break;} +case 45: +#line 1111 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.FPredicate = FCmpInst::FCMP_UNO; ; + break;} +case 46: +#line 1112 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.FPredicate = FCmpInst::FCMP_UEQ; ; + break;} +case 47: +#line 1112 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.FPredicate = FCmpInst::FCMP_UNE; ; + break;} +case 48: +#line 1113 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.FPredicate = FCmpInst::FCMP_ULT; ; + break;} +case 49: +#line 1113 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.FPredicate = FCmpInst::FCMP_UGT; ; + break;} +case 50: +#line 1114 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.FPredicate = FCmpInst::FCMP_ULE; ; + break;} +case 51: +#line 1114 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.FPredicate = FCmpInst::FCMP_UGE; ; + break;} +case 52: +#line 1115 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.FPredicate = FCmpInst::FCMP_TRUE; ; + break;} +case 53: +#line 1116 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.FPredicate = FCmpInst::FCMP_FALSE; ; + break;} +case 60: +#line 1125 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.StrVal = 0; ; + break;} +case 61: +#line 1129 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + yyval.StrVal = yyvsp[-1].StrVal; CHECK_FOR_ERROR - ;} - break; - - case 63: -#line 1133 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - (yyval.StrVal) = 0; + ; + break;} +case 62: +#line 1133 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + yyval.StrVal = 0; CHECK_FOR_ERROR - ;} - break; - - case 67: -#line 1141 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - (yyval.StrVal) = 0; + ; + break;} +case 66: +#line 1141 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + yyval.StrVal = 0; CHECK_FOR_ERROR - ;} - break; - - case 68: -#line 1146 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - (yyval.StrVal) = (yyvsp[(1) - (2)].StrVal); + ; + break;} +case 67: +#line 1146 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + yyval.StrVal = yyvsp[-1].StrVal; CHECK_FOR_ERROR - ;} - break; - - case 69: -#line 1152 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { (yyval.Linkage) = GlobalValue::InternalLinkage; ;} - break; - - case 70: -#line 1153 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { (yyval.Linkage) = GlobalValue::WeakLinkage; ;} - break; - - case 71: -#line 1154 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { (yyval.Linkage) = GlobalValue::LinkOnceLinkage; ;} - break; - - case 72: -#line 1155 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { (yyval.Linkage) = GlobalValue::AppendingLinkage; ;} - break; - - case 73: -#line 1156 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { (yyval.Linkage) = GlobalValue::DLLExportLinkage; ;} - break; - - case 74: -#line 1160 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { (yyval.Linkage) = GlobalValue::DLLImportLinkage; ;} - break; - - case 75: -#line 1161 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { (yyval.Linkage) = GlobalValue::ExternalWeakLinkage; ;} - break; - - case 76: -#line 1162 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;} - break; - - case 77: -#line 1166 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { (yyval.Visibility) = GlobalValue::DefaultVisibility; ;} - break; - - case 78: -#line 1167 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { (yyval.Visibility) = GlobalValue::DefaultVisibility; ;} - break; - - case 79: -#line 1168 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { (yyval.Visibility) = GlobalValue::HiddenVisibility; ;} - break; - - case 80: -#line 1172 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;} - break; - - case 81: -#line 1173 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { (yyval.Linkage) = GlobalValue::DLLImportLinkage; ;} - break; - - case 82: -#line 1174 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { (yyval.Linkage) = GlobalValue::ExternalWeakLinkage; ;} - break; - - case 83: -#line 1178 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;} - break; - - case 84: -#line 1179 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { (yyval.Linkage) = GlobalValue::InternalLinkage; ;} - break; - - case 85: -#line 1180 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { (yyval.Linkage) = GlobalValue::LinkOnceLinkage; ;} - break; - - case 86: -#line 1181 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { (yyval.Linkage) = GlobalValue::WeakLinkage; ;} - break; - - case 87: -#line 1182 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { (yyval.Linkage) = GlobalValue::DLLExportLinkage; ;} - break; - - case 88: -#line 1186 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;} - break; - - case 89: -#line 1187 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { (yyval.Linkage) = GlobalValue::WeakLinkage; ;} - break; - - case 90: -#line 1188 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { (yyval.Linkage) = GlobalValue::InternalLinkage; ;} - break; - - case 91: -#line 1191 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { (yyval.UIntVal) = CallingConv::C; ;} - break; - - case 92: -#line 1192 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { (yyval.UIntVal) = CallingConv::C; ;} - break; - - case 93: -#line 1193 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { (yyval.UIntVal) = CallingConv::Fast; ;} - break; - - case 94: -#line 1194 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { (yyval.UIntVal) = CallingConv::Cold; ;} - break; - - case 95: -#line 1195 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { (yyval.UIntVal) = CallingConv::X86_StdCall; ;} - break; - - case 96: -#line 1196 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { (yyval.UIntVal) = CallingConv::X86_FastCall; ;} - break; - - case 97: -#line 1197 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - if ((unsigned)(yyvsp[(2) - (2)].UInt64Val) != (yyvsp[(2) - (2)].UInt64Val)) + ; + break;} +case 68: +#line 1152 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.Linkage = GlobalValue::InternalLinkage; ; + break;} +case 69: +#line 1153 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.Linkage = GlobalValue::WeakLinkage; ; + break;} +case 70: +#line 1154 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.Linkage = GlobalValue::LinkOnceLinkage; ; + break;} +case 71: +#line 1155 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.Linkage = GlobalValue::AppendingLinkage; ; + break;} +case 72: +#line 1156 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.Linkage = GlobalValue::DLLExportLinkage; ; + break;} +case 73: +#line 1160 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.Linkage = GlobalValue::DLLImportLinkage; ; + break;} +case 74: +#line 1161 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.Linkage = GlobalValue::ExternalWeakLinkage; ; + break;} +case 75: +#line 1162 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.Linkage = GlobalValue::ExternalLinkage; ; + break;} +case 76: +#line 1166 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.Visibility = GlobalValue::DefaultVisibility; ; + break;} +case 77: +#line 1167 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.Visibility = GlobalValue::DefaultVisibility; ; + break;} +case 78: +#line 1168 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.Visibility = GlobalValue::HiddenVisibility; ; + break;} +case 79: +#line 1172 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.Linkage = GlobalValue::ExternalLinkage; ; + break;} +case 80: +#line 1173 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.Linkage = GlobalValue::DLLImportLinkage; ; + break;} +case 81: +#line 1174 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.Linkage = GlobalValue::ExternalWeakLinkage; ; + break;} +case 82: +#line 1178 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.Linkage = GlobalValue::ExternalLinkage; ; + break;} +case 83: +#line 1179 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.Linkage = GlobalValue::InternalLinkage; ; + break;} +case 84: +#line 1180 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.Linkage = GlobalValue::LinkOnceLinkage; ; + break;} +case 85: +#line 1181 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.Linkage = GlobalValue::WeakLinkage; ; + break;} +case 86: +#line 1182 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.Linkage = GlobalValue::DLLExportLinkage; ; + break;} +case 87: +#line 1186 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.Linkage = GlobalValue::ExternalLinkage; ; + break;} +case 88: +#line 1187 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.Linkage = GlobalValue::WeakLinkage; ; + break;} +case 89: +#line 1188 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.Linkage = GlobalValue::InternalLinkage; ; + break;} +case 90: +#line 1191 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.UIntVal = CallingConv::C; ; + break;} +case 91: +#line 1192 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.UIntVal = CallingConv::C; ; + break;} +case 92: +#line 1193 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.UIntVal = CallingConv::Fast; ; + break;} +case 93: +#line 1194 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.UIntVal = CallingConv::Cold; ; + break;} +case 94: +#line 1195 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.UIntVal = CallingConv::X86_StdCall; ; + break;} +case 95: +#line 1196 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.UIntVal = CallingConv::X86_FastCall; ; + break;} +case 96: +#line 1197 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + if ((unsigned)yyvsp[0].UInt64Val != yyvsp[0].UInt64Val) GEN_ERROR("Calling conv too large"); - (yyval.UIntVal) = (yyvsp[(2) - (2)].UInt64Val); + yyval.UIntVal = yyvsp[0].UInt64Val; CHECK_FOR_ERROR - ;} - break; - - case 98: -#line 1204 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { (yyval.ParamAttrs) = ParamAttr::ZExt; ;} - break; - - case 99: -#line 1205 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { (yyval.ParamAttrs) = ParamAttr::SExt; ;} - break; - - case 100: -#line 1206 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { (yyval.ParamAttrs) = ParamAttr::InReg; ;} - break; - - case 101: -#line 1207 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { (yyval.ParamAttrs) = ParamAttr::StructRet; ;} - break; - - case 102: -#line 1210 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { (yyval.ParamAttrs) = ParamAttr::None; ;} - break; - - case 103: -#line 1211 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - (yyval.ParamAttrs) = (yyvsp[(1) - (2)].ParamAttrs) | (yyvsp[(2) - (2)].ParamAttrs); - ;} - break; - - case 104: -#line 1216 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { (yyval.ParamAttrs) = ParamAttr::NoReturn; ;} - break; - - case 105: -#line 1217 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { (yyval.ParamAttrs) = ParamAttr::NoUnwind; ;} - break; - - case 107: -#line 1221 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { (yyval.ParamAttrs) = ParamAttr::None; ;} - break; - - case 108: -#line 1222 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - (yyval.ParamAttrs) = (yyvsp[(1) - (2)].ParamAttrs) | (yyvsp[(2) - (2)].ParamAttrs); - ;} - break; - - case 109: -#line 1229 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { (yyval.UIntVal) = 0; ;} - break; - - case 110: -#line 1230 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - (yyval.UIntVal) = (yyvsp[(2) - (2)].UInt64Val); - if ((yyval.UIntVal) != 0 && !isPowerOf2_32((yyval.UIntVal))) + ; + break;} +case 97: +#line 1204 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.ParamAttrs = ParamAttr::ZExt; ; + break;} +case 98: +#line 1205 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.ParamAttrs = ParamAttr::SExt; ; + break;} +case 99: +#line 1206 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.ParamAttrs = ParamAttr::InReg; ; + break;} +case 100: +#line 1207 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.ParamAttrs = ParamAttr::StructRet; ; + break;} +case 101: +#line 1210 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.ParamAttrs = ParamAttr::None; ; + break;} +case 102: +#line 1211 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + yyval.ParamAttrs = yyvsp[-1].ParamAttrs | yyvsp[0].ParamAttrs; + ; + break;} +case 103: +#line 1216 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.ParamAttrs = ParamAttr::NoReturn; ; + break;} +case 104: +#line 1217 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.ParamAttrs = ParamAttr::NoUnwind; ; + break;} +case 106: +#line 1221 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.ParamAttrs = ParamAttr::None; ; + break;} +case 107: +#line 1222 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + yyval.ParamAttrs = yyvsp[-1].ParamAttrs | yyvsp[0].ParamAttrs; + ; + break;} +case 108: +#line 1229 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.UIntVal = 0; ; + break;} +case 109: +#line 1230 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + yyval.UIntVal = yyvsp[0].UInt64Val; + if (yyval.UIntVal != 0 && !isPowerOf2_32(yyval.UIntVal)) GEN_ERROR("Alignment must be a power of two"); CHECK_FOR_ERROR -;} - break; - - case 111: -#line 1236 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { (yyval.UIntVal) = 0; ;} - break; - - case 112: -#line 1237 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - (yyval.UIntVal) = (yyvsp[(3) - (3)].UInt64Val); - if ((yyval.UIntVal) != 0 && !isPowerOf2_32((yyval.UIntVal))) +; + break;} +case 110: +#line 1236 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.UIntVal = 0; ; + break;} +case 111: +#line 1237 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + yyval.UIntVal = yyvsp[0].UInt64Val; + if (yyval.UIntVal != 0 && !isPowerOf2_32(yyval.UIntVal)) GEN_ERROR("Alignment must be a power of two"); CHECK_FOR_ERROR -;} - break; - - case 113: -#line 1245 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - for (unsigned i = 0, e = strlen((yyvsp[(2) - (2)].StrVal)); i != e; ++i) - if ((yyvsp[(2) - (2)].StrVal)[i] == '"' || (yyvsp[(2) - (2)].StrVal)[i] == '\\') +; + break;} +case 112: +#line 1245 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + for (unsigned i = 0, e = strlen(yyvsp[0].StrVal); i != e; ++i) + if (yyvsp[0].StrVal[i] == '"' || yyvsp[0].StrVal[i] == '\\') GEN_ERROR("Invalid character in section name"); - (yyval.StrVal) = (yyvsp[(2) - (2)].StrVal); + yyval.StrVal = yyvsp[0].StrVal; CHECK_FOR_ERROR -;} - break; - - case 114: -#line 1253 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { (yyval.StrVal) = 0; ;} - break; - - case 115: -#line 1254 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { (yyval.StrVal) = (yyvsp[(1) - (1)].StrVal); ;} - break; - - case 116: -#line 1259 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - {;} - break; - - case 117: -#line 1260 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - {;} - break; - - case 118: -#line 1261 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - CurGV->setSection((yyvsp[(1) - (1)].StrVal)); - free((yyvsp[(1) - (1)].StrVal)); +; + break;} +case 113: +#line 1253 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.StrVal = 0; ; + break;} +case 114: +#line 1254 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.StrVal = yyvsp[0].StrVal; ; + break;} +case 115: +#line 1259 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{; + break;} +case 116: +#line 1260 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{; + break;} +case 117: +#line 1261 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + CurGV->setSection(yyvsp[0].StrVal); + free(yyvsp[0].StrVal); CHECK_FOR_ERROR - ;} - break; - - case 119: -#line 1266 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - if ((yyvsp[(2) - (2)].UInt64Val) != 0 && !isPowerOf2_32((yyvsp[(2) - (2)].UInt64Val))) + ; + break;} +case 118: +#line 1266 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + if (yyvsp[0].UInt64Val != 0 && !isPowerOf2_32(yyvsp[0].UInt64Val)) GEN_ERROR("Alignment must be a power of two"); - CurGV->setAlignment((yyvsp[(2) - (2)].UInt64Val)); + CurGV->setAlignment(yyvsp[0].UInt64Val); CHECK_FOR_ERROR - ;} - break; - - case 124: -#line 1282 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - (yyval.TypeVal) = new PATypeHolder(OpaqueType::get()); + ; + break;} +case 123: +#line 1282 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + yyval.TypeVal = new PATypeHolder(OpaqueType::get()); CHECK_FOR_ERROR - ;} - break; - - case 125: -#line 1286 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - (yyval.TypeVal) = new PATypeHolder((yyvsp[(1) - (1)].PrimType)); + ; + break;} +case 124: +#line 1286 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + yyval.TypeVal = new PATypeHolder(yyvsp[0].PrimType); CHECK_FOR_ERROR - ;} - break; - - case 126: -#line 1290 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { // Pointer type? - if (*(yyvsp[(1) - (2)].TypeVal) == Type::LabelTy) + ; + break;} +case 125: +#line 1290 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ // Pointer type? + if (*yyvsp[-1].TypeVal == Type::LabelTy) GEN_ERROR("Cannot form a pointer to a basic block"); - (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(PointerType::get(*(yyvsp[(1) - (2)].TypeVal)))); - delete (yyvsp[(1) - (2)].TypeVal); + yyval.TypeVal = new PATypeHolder(HandleUpRefs(PointerType::get(*yyvsp[-1].TypeVal))); + delete yyvsp[-1].TypeVal; CHECK_FOR_ERROR - ;} - break; - - case 127: -#line 1297 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { // Named types are also simple types... - const Type* tmp = getTypeVal((yyvsp[(1) - (1)].ValIDVal)); - CHECK_FOR_ERROR - (yyval.TypeVal) = new PATypeHolder(tmp); - ;} - break; - - case 128: -#line 1302 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { // Type UpReference - if ((yyvsp[(2) - (2)].UInt64Val) > (uint64_t)~0U) GEN_ERROR("Value out of range"); + ; + break;} +case 126: +#line 1297 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ // Named types are also simple types... + const Type* tmp = getTypeVal(yyvsp[0].ValIDVal); + CHECK_FOR_ERROR + yyval.TypeVal = new PATypeHolder(tmp); + ; + break;} +case 127: +#line 1302 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ // Type UpReference + if (yyvsp[0].UInt64Val > (uint64_t)~0U) GEN_ERROR("Value out of range"); OpaqueType *OT = OpaqueType::get(); // Use temporary placeholder - UpRefs.push_back(UpRefRecord((unsigned)(yyvsp[(2) - (2)].UInt64Val), OT)); // Add to vector... - (yyval.TypeVal) = new PATypeHolder(OT); + UpRefs.push_back(UpRefRecord((unsigned)yyvsp[0].UInt64Val, OT)); // Add to vector... + yyval.TypeVal = new PATypeHolder(OT); UR_OUT("New Upreference!\n"); CHECK_FOR_ERROR - ;} - break; - - case 129: -#line 1310 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 128: +#line 1310 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ std::vector Params; ParamAttrsVector Attrs; - if ((yyvsp[(5) - (5)].ParamAttrs) != ParamAttr::None) { - ParamAttrsWithIndex X; X.index = 0; X.attrs = (yyvsp[(5) - (5)].ParamAttrs); + if (yyvsp[0].ParamAttrs != ParamAttr::None) { + ParamAttrsWithIndex X; X.index = 0; X.attrs = yyvsp[0].ParamAttrs; Attrs.push_back(X); } unsigned index = 1; - TypeWithAttrsList::iterator I = (yyvsp[(3) - (5)].TypeWithAttrsList)->begin(), E = (yyvsp[(3) - (5)].TypeWithAttrsList)->end(); + TypeWithAttrsList::iterator I = yyvsp[-2].TypeWithAttrsList->begin(), E = yyvsp[-2].TypeWithAttrsList->end(); for (; I != E; ++I, ++index) { const Type *Ty = I->Ty->get(); Params.push_back(Ty); @@ -3808,24 +2873,23 @@ ParamAttrsList *ActualAttrs = 0; if (!Attrs.empty()) ActualAttrs = ParamAttrsList::get(Attrs); - FunctionType *FT = FunctionType::get(*(yyvsp[(1) - (5)].TypeVal), Params, isVarArg, ActualAttrs); - delete (yyvsp[(3) - (5)].TypeWithAttrsList); // Delete the argument list - delete (yyvsp[(1) - (5)].TypeVal); // Delete the return type handle - (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(FT)); - CHECK_FOR_ERROR - ;} - break; - - case 130: -#line 1340 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { + FunctionType *FT = FunctionType::get(*yyvsp[-4].TypeVal, Params, isVarArg, ActualAttrs); + delete yyvsp[-2].TypeWithAttrsList; // Delete the argument list + delete yyvsp[-4].TypeVal; // Delete the return type handle + yyval.TypeVal = new PATypeHolder(HandleUpRefs(FT)); + CHECK_FOR_ERROR + ; + break;} +case 129: +#line 1340 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ std::vector Params; ParamAttrsVector Attrs; - if ((yyvsp[(5) - (5)].ParamAttrs) != ParamAttr::None) { - ParamAttrsWithIndex X; X.index = 0; X.attrs = (yyvsp[(5) - (5)].ParamAttrs); + if (yyvsp[0].ParamAttrs != ParamAttr::None) { + ParamAttrsWithIndex X; X.index = 0; X.attrs = yyvsp[0].ParamAttrs; Attrs.push_back(X); } - TypeWithAttrsList::iterator I = (yyvsp[(3) - (5)].TypeWithAttrsList)->begin(), E = (yyvsp[(3) - (5)].TypeWithAttrsList)->end(); + TypeWithAttrsList::iterator I = yyvsp[-2].TypeWithAttrsList->begin(), E = yyvsp[-2].TypeWithAttrsList->end(); unsigned index = 1; for ( ; I != E; ++I, ++index) { const Type* Ty = I->Ty->get(); @@ -3843,305 +2907,284 @@ if (!Attrs.empty()) ActualAttrs = ParamAttrsList::get(Attrs); - FunctionType *FT = FunctionType::get((yyvsp[(1) - (5)].PrimType), Params, isVarArg, ActualAttrs); - delete (yyvsp[(3) - (5)].TypeWithAttrsList); // Delete the argument list - (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(FT)); - CHECK_FOR_ERROR - ;} - break; - - case 131: -#line 1371 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { // Sized array type? - (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(ArrayType::get(*(yyvsp[(4) - (5)].TypeVal), (unsigned)(yyvsp[(2) - (5)].UInt64Val)))); - delete (yyvsp[(4) - (5)].TypeVal); - CHECK_FOR_ERROR - ;} - break; - - case 132: -#line 1376 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { // Vector type? - const llvm::Type* ElemTy = (yyvsp[(4) - (5)].TypeVal)->get(); - if ((unsigned)(yyvsp[(2) - (5)].UInt64Val) != (yyvsp[(2) - (5)].UInt64Val)) + FunctionType *FT = FunctionType::get(yyvsp[-4].PrimType, Params, isVarArg, ActualAttrs); + delete yyvsp[-2].TypeWithAttrsList; // Delete the argument list + yyval.TypeVal = new PATypeHolder(HandleUpRefs(FT)); + CHECK_FOR_ERROR + ; + break;} +case 130: +#line 1371 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ // Sized array type? + yyval.TypeVal = new PATypeHolder(HandleUpRefs(ArrayType::get(*yyvsp[-1].TypeVal, (unsigned)yyvsp[-3].UInt64Val))); + delete yyvsp[-1].TypeVal; + CHECK_FOR_ERROR + ; + break;} +case 131: +#line 1376 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ // Vector type? + const llvm::Type* ElemTy = yyvsp[-1].TypeVal->get(); + if ((unsigned)yyvsp[-3].UInt64Val != yyvsp[-3].UInt64Val) GEN_ERROR("Unsigned result not equal to signed result"); if (!ElemTy->isFloatingPoint() && !ElemTy->isInteger()) GEN_ERROR("Element type of a VectorType must be primitive"); - if (!isPowerOf2_32((yyvsp[(2) - (5)].UInt64Val))) + if (!isPowerOf2_32(yyvsp[-3].UInt64Val)) GEN_ERROR("Vector length should be a power of 2"); - (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(VectorType::get(*(yyvsp[(4) - (5)].TypeVal), (unsigned)(yyvsp[(2) - (5)].UInt64Val)))); - delete (yyvsp[(4) - (5)].TypeVal); + yyval.TypeVal = new PATypeHolder(HandleUpRefs(VectorType::get(*yyvsp[-1].TypeVal, (unsigned)yyvsp[-3].UInt64Val))); + delete yyvsp[-1].TypeVal; CHECK_FOR_ERROR - ;} - break; - - case 133: -#line 1388 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { // Structure type? + ; + break;} +case 132: +#line 1388 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ // Structure type? std::vector Elements; - for (std::list::iterator I = (yyvsp[(2) - (3)].TypeList)->begin(), - E = (yyvsp[(2) - (3)].TypeList)->end(); I != E; ++I) + for (std::list::iterator I = yyvsp[-1].TypeList->begin(), + E = yyvsp[-1].TypeList->end(); I != E; ++I) Elements.push_back(*I); - (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(StructType::get(Elements))); - delete (yyvsp[(2) - (3)].TypeList); - CHECK_FOR_ERROR - ;} - break; - - case 134: -#line 1398 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { // Empty structure type? - (yyval.TypeVal) = new PATypeHolder(StructType::get(std::vector())); + yyval.TypeVal = new PATypeHolder(HandleUpRefs(StructType::get(Elements))); + delete yyvsp[-1].TypeList; CHECK_FOR_ERROR - ;} - break; - - case 135: -#line 1402 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 133: +#line 1398 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ // Empty structure type? + yyval.TypeVal = new PATypeHolder(StructType::get(std::vector())); + CHECK_FOR_ERROR + ; + break;} +case 134: +#line 1402 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ std::vector Elements; - for (std::list::iterator I = (yyvsp[(3) - (5)].TypeList)->begin(), - E = (yyvsp[(3) - (5)].TypeList)->end(); I != E; ++I) + for (std::list::iterator I = yyvsp[-2].TypeList->begin(), + E = yyvsp[-2].TypeList->end(); I != E; ++I) Elements.push_back(*I); - (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(StructType::get(Elements, true))); - delete (yyvsp[(3) - (5)].TypeList); + yyval.TypeVal = new PATypeHolder(HandleUpRefs(StructType::get(Elements, true))); + delete yyvsp[-2].TypeList; CHECK_FOR_ERROR - ;} - break; - - case 136: -#line 1412 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { // Empty structure type? - (yyval.TypeVal) = new PATypeHolder(StructType::get(std::vector(), true)); - CHECK_FOR_ERROR - ;} - break; - - case 137: -#line 1419 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - (yyval.TypeWithAttrs).Ty = (yyvsp[(1) - (2)].TypeVal); - (yyval.TypeWithAttrs).Attrs = (yyvsp[(2) - (2)].ParamAttrs); - ;} - break; - - case 138: -#line 1426 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 135: +#line 1412 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ // Empty structure type? + yyval.TypeVal = new PATypeHolder(StructType::get(std::vector(), true)); + CHECK_FOR_ERROR + ; + break;} +case 136: +#line 1419 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + yyval.TypeWithAttrs.Ty = yyvsp[-1].TypeVal; + yyval.TypeWithAttrs.Attrs = yyvsp[0].ParamAttrs; + ; + break;} +case 137: +#line 1426 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ if (!UpRefs.empty()) - GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (1)].TypeVal))->getDescription()); - if (!(*(yyvsp[(1) - (1)].TypeVal))->isFirstClassType()) + GEN_ERROR("Invalid upreference in type: " + (*yyvsp[0].TypeVal)->getDescription()); + if (!(*yyvsp[0].TypeVal)->isFirstClassType()) GEN_ERROR("LLVM functions cannot return aggregate types"); - (yyval.TypeVal) = (yyvsp[(1) - (1)].TypeVal); - ;} - break; - - case 139: -#line 1433 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - (yyval.TypeVal) = new PATypeHolder(Type::VoidTy); - ;} - break; - - case 140: -#line 1438 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - (yyval.TypeWithAttrsList) = new TypeWithAttrsList(); - (yyval.TypeWithAttrsList)->push_back((yyvsp[(1) - (1)].TypeWithAttrs)); + yyval.TypeVal = yyvsp[0].TypeVal; + ; + break;} +case 138: +#line 1433 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + yyval.TypeVal = new PATypeHolder(Type::VoidTy); + ; + break;} +case 139: +#line 1438 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + yyval.TypeWithAttrsList = new TypeWithAttrsList(); + yyval.TypeWithAttrsList->push_back(yyvsp[0].TypeWithAttrs); CHECK_FOR_ERROR - ;} - break; - - case 141: -#line 1443 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - ((yyval.TypeWithAttrsList)=(yyvsp[(1) - (3)].TypeWithAttrsList))->push_back((yyvsp[(3) - (3)].TypeWithAttrs)); + ; + break;} +case 140: +#line 1443 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + (yyval.TypeWithAttrsList=yyvsp[-2].TypeWithAttrsList)->push_back(yyvsp[0].TypeWithAttrs); CHECK_FOR_ERROR - ;} - break; - - case 143: -#line 1451 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - (yyval.TypeWithAttrsList)=(yyvsp[(1) - (3)].TypeWithAttrsList); + ; + break;} +case 142: +#line 1451 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + yyval.TypeWithAttrsList=yyvsp[-2].TypeWithAttrsList; TypeWithAttrs TWA; TWA.Attrs = ParamAttr::None; TWA.Ty = new PATypeHolder(Type::VoidTy); - (yyval.TypeWithAttrsList)->push_back(TWA); + yyval.TypeWithAttrsList->push_back(TWA); CHECK_FOR_ERROR - ;} - break; - - case 144: -#line 1458 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - (yyval.TypeWithAttrsList) = new TypeWithAttrsList; + ; + break;} +case 143: +#line 1458 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + yyval.TypeWithAttrsList = new TypeWithAttrsList; TypeWithAttrs TWA; TWA.Attrs = ParamAttr::None; TWA.Ty = new PATypeHolder(Type::VoidTy); - (yyval.TypeWithAttrsList)->push_back(TWA); - CHECK_FOR_ERROR - ;} - break; - - case 145: -#line 1465 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - (yyval.TypeWithAttrsList) = new TypeWithAttrsList(); + yyval.TypeWithAttrsList->push_back(TWA); CHECK_FOR_ERROR - ;} - break; - - case 146: -#line 1473 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - (yyval.TypeList) = new std::list(); - (yyval.TypeList)->push_back(*(yyvsp[(1) - (1)].TypeVal)); - delete (yyvsp[(1) - (1)].TypeVal); + ; + break;} +case 144: +#line 1465 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + yyval.TypeWithAttrsList = new TypeWithAttrsList(); CHECK_FOR_ERROR - ;} - break; - - case 147: -#line 1479 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - ((yyval.TypeList)=(yyvsp[(1) - (3)].TypeList))->push_back(*(yyvsp[(3) - (3)].TypeVal)); - delete (yyvsp[(3) - (3)].TypeVal); + ; + break;} +case 145: +#line 1473 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + yyval.TypeList = new std::list(); + yyval.TypeList->push_back(*yyvsp[0].TypeVal); + delete yyvsp[0].TypeVal; + CHECK_FOR_ERROR + ; + break;} +case 146: +#line 1479 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + (yyval.TypeList=yyvsp[-2].TypeList)->push_back(*yyvsp[0].TypeVal); + delete yyvsp[0].TypeVal; CHECK_FOR_ERROR - ;} - break; - - case 148: -#line 1491 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { // Nonempty unsized arr + ; + break;} +case 147: +#line 1491 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ // Nonempty unsized arr if (!UpRefs.empty()) - GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (4)].TypeVal))->getDescription()); - const ArrayType *ATy = dyn_cast((yyvsp[(1) - (4)].TypeVal)->get()); + GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription()); + const ArrayType *ATy = dyn_cast(yyvsp[-3].TypeVal->get()); if (ATy == 0) GEN_ERROR("Cannot make array constant with type: '" + - (*(yyvsp[(1) - (4)].TypeVal))->getDescription() + "'"); + (*yyvsp[-3].TypeVal)->getDescription() + "'"); const Type *ETy = ATy->getElementType(); int NumElements = ATy->getNumElements(); // Verify that we have the correct size... - if (NumElements != -1 && NumElements != (int)(yyvsp[(3) - (4)].ConstVector)->size()) + if (NumElements != -1 && NumElements != (int)yyvsp[-1].ConstVector->size()) GEN_ERROR("Type mismatch: constant sized array initialized with " + - utostr((yyvsp[(3) - (4)].ConstVector)->size()) + " arguments, but has size of " + + utostr(yyvsp[-1].ConstVector->size()) + " arguments, but has size of " + itostr(NumElements) + ""); // Verify all elements are correct type! - for (unsigned i = 0; i < (yyvsp[(3) - (4)].ConstVector)->size(); i++) { - if (ETy != (*(yyvsp[(3) - (4)].ConstVector))[i]->getType()) + for (unsigned i = 0; i < yyvsp[-1].ConstVector->size(); i++) { + if (ETy != (*yyvsp[-1].ConstVector)[i]->getType()) GEN_ERROR("Element #" + utostr(i) + " is not of type '" + ETy->getDescription() +"' as required!\nIt is of type '"+ - (*(yyvsp[(3) - (4)].ConstVector))[i]->getType()->getDescription() + "'."); + (*yyvsp[-1].ConstVector)[i]->getType()->getDescription() + "'."); } - (yyval.ConstVal) = ConstantArray::get(ATy, *(yyvsp[(3) - (4)].ConstVector)); - delete (yyvsp[(1) - (4)].TypeVal); delete (yyvsp[(3) - (4)].ConstVector); + yyval.ConstVal = ConstantArray::get(ATy, *yyvsp[-1].ConstVector); + delete yyvsp[-3].TypeVal; delete yyvsp[-1].ConstVector; CHECK_FOR_ERROR - ;} - break; - - case 149: -#line 1519 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 148: +#line 1519 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ if (!UpRefs.empty()) - GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (3)].TypeVal))->getDescription()); - const ArrayType *ATy = dyn_cast((yyvsp[(1) - (3)].TypeVal)->get()); + GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription()); + const ArrayType *ATy = dyn_cast(yyvsp[-2].TypeVal->get()); if (ATy == 0) GEN_ERROR("Cannot make array constant with type: '" + - (*(yyvsp[(1) - (3)].TypeVal))->getDescription() + "'"); + (*yyvsp[-2].TypeVal)->getDescription() + "'"); int NumElements = ATy->getNumElements(); if (NumElements != -1 && NumElements != 0) GEN_ERROR("Type mismatch: constant sized array initialized with 0" " arguments, but has size of " + itostr(NumElements) +""); - (yyval.ConstVal) = ConstantArray::get(ATy, std::vector()); - delete (yyvsp[(1) - (3)].TypeVal); + yyval.ConstVal = ConstantArray::get(ATy, std::vector()); + delete yyvsp[-2].TypeVal; CHECK_FOR_ERROR - ;} - break; - - case 150: -#line 1535 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 149: +#line 1535 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ if (!UpRefs.empty()) - GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (3)].TypeVal))->getDescription()); - const ArrayType *ATy = dyn_cast((yyvsp[(1) - (3)].TypeVal)->get()); + GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription()); + const ArrayType *ATy = dyn_cast(yyvsp[-2].TypeVal->get()); if (ATy == 0) GEN_ERROR("Cannot make array constant with type: '" + - (*(yyvsp[(1) - (3)].TypeVal))->getDescription() + "'"); + (*yyvsp[-2].TypeVal)->getDescription() + "'"); int NumElements = ATy->getNumElements(); const Type *ETy = ATy->getElementType(); - char *EndStr = UnEscapeLexed((yyvsp[(3) - (3)].StrVal), true); - if (NumElements != -1 && NumElements != (EndStr-(yyvsp[(3) - (3)].StrVal))) + char *EndStr = UnEscapeLexed(yyvsp[0].StrVal, true); + if (NumElements != -1 && NumElements != (EndStr-yyvsp[0].StrVal)) GEN_ERROR("Can't build string constant of size " + - itostr((int)(EndStr-(yyvsp[(3) - (3)].StrVal))) + + itostr((int)(EndStr-yyvsp[0].StrVal)) + " when array has size " + itostr(NumElements) + ""); std::vector Vals; if (ETy == Type::Int8Ty) { - for (unsigned char *C = (unsigned char *)(yyvsp[(3) - (3)].StrVal); + for (unsigned char *C = (unsigned char *)yyvsp[0].StrVal; C != (unsigned char*)EndStr; ++C) Vals.push_back(ConstantInt::get(ETy, *C)); } else { - free((yyvsp[(3) - (3)].StrVal)); + free(yyvsp[0].StrVal); GEN_ERROR("Cannot build string arrays of non byte sized elements"); } - free((yyvsp[(3) - (3)].StrVal)); - (yyval.ConstVal) = ConstantArray::get(ATy, Vals); - delete (yyvsp[(1) - (3)].TypeVal); - CHECK_FOR_ERROR - ;} - break; - - case 151: -#line 1564 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { // Nonempty unsized arr + free(yyvsp[0].StrVal); + yyval.ConstVal = ConstantArray::get(ATy, Vals); + delete yyvsp[-2].TypeVal; + CHECK_FOR_ERROR + ; + break;} +case 150: +#line 1564 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ // Nonempty unsized arr if (!UpRefs.empty()) - GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (4)].TypeVal))->getDescription()); - const VectorType *PTy = dyn_cast((yyvsp[(1) - (4)].TypeVal)->get()); + GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription()); + const VectorType *PTy = dyn_cast(yyvsp[-3].TypeVal->get()); if (PTy == 0) GEN_ERROR("Cannot make packed constant with type: '" + - (*(yyvsp[(1) - (4)].TypeVal))->getDescription() + "'"); + (*yyvsp[-3].TypeVal)->getDescription() + "'"); const Type *ETy = PTy->getElementType(); int NumElements = PTy->getNumElements(); // Verify that we have the correct size... - if (NumElements != -1 && NumElements != (int)(yyvsp[(3) - (4)].ConstVector)->size()) + if (NumElements != -1 && NumElements != (int)yyvsp[-1].ConstVector->size()) GEN_ERROR("Type mismatch: constant sized packed initialized with " + - utostr((yyvsp[(3) - (4)].ConstVector)->size()) + " arguments, but has size of " + + utostr(yyvsp[-1].ConstVector->size()) + " arguments, but has size of " + itostr(NumElements) + ""); // Verify all elements are correct type! - for (unsigned i = 0; i < (yyvsp[(3) - (4)].ConstVector)->size(); i++) { - if (ETy != (*(yyvsp[(3) - (4)].ConstVector))[i]->getType()) + for (unsigned i = 0; i < yyvsp[-1].ConstVector->size(); i++) { + if (ETy != (*yyvsp[-1].ConstVector)[i]->getType()) GEN_ERROR("Element #" + utostr(i) + " is not of type '" + ETy->getDescription() +"' as required!\nIt is of type '"+ - (*(yyvsp[(3) - (4)].ConstVector))[i]->getType()->getDescription() + "'."); + (*yyvsp[-1].ConstVector)[i]->getType()->getDescription() + "'."); } - (yyval.ConstVal) = ConstantVector::get(PTy, *(yyvsp[(3) - (4)].ConstVector)); - delete (yyvsp[(1) - (4)].TypeVal); delete (yyvsp[(3) - (4)].ConstVector); + yyval.ConstVal = ConstantVector::get(PTy, *yyvsp[-1].ConstVector); + delete yyvsp[-3].TypeVal; delete yyvsp[-1].ConstVector; CHECK_FOR_ERROR - ;} - break; - - case 152: -#line 1592 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - const StructType *STy = dyn_cast((yyvsp[(1) - (4)].TypeVal)->get()); + ; + break;} +case 151: +#line 1592 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + const StructType *STy = dyn_cast(yyvsp[-3].TypeVal->get()); if (STy == 0) GEN_ERROR("Cannot make struct constant with type: '" + - (*(yyvsp[(1) - (4)].TypeVal))->getDescription() + "'"); + (*yyvsp[-3].TypeVal)->getDescription() + "'"); - if ((yyvsp[(3) - (4)].ConstVector)->size() != STy->getNumContainedTypes()) + if (yyvsp[-1].ConstVector->size() != STy->getNumContainedTypes()) GEN_ERROR("Illegal number of initializers for structure type"); // Check to ensure that constants are compatible with the type initializer! - for (unsigned i = 0, e = (yyvsp[(3) - (4)].ConstVector)->size(); i != e; ++i) - if ((*(yyvsp[(3) - (4)].ConstVector))[i]->getType() != STy->getElementType(i)) + for (unsigned i = 0, e = yyvsp[-1].ConstVector->size(); i != e; ++i) + if ((*yyvsp[-1].ConstVector)[i]->getType() != STy->getElementType(i)) GEN_ERROR("Expected type '" + STy->getElementType(i)->getDescription() + "' for element #" + utostr(i) + @@ -4149,51 +3192,51 @@ // Check to ensure that Type is not packed if (STy->isPacked()) - GEN_ERROR("Unpacked Initializer to vector type '" + STy->getDescription() + "'"); + GEN_ERROR("Unpacked Initializer to vector type '" + + STy->getDescription() + "'"); - (yyval.ConstVal) = ConstantStruct::get(STy, *(yyvsp[(3) - (4)].ConstVector)); - delete (yyvsp[(1) - (4)].TypeVal); delete (yyvsp[(3) - (4)].ConstVector); + yyval.ConstVal = ConstantStruct::get(STy, *yyvsp[-1].ConstVector); + delete yyvsp[-3].TypeVal; delete yyvsp[-1].ConstVector; CHECK_FOR_ERROR - ;} - break; - - case 153: -#line 1617 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 152: +#line 1618 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ if (!UpRefs.empty()) - GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (3)].TypeVal))->getDescription()); - const StructType *STy = dyn_cast((yyvsp[(1) - (3)].TypeVal)->get()); + GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription()); + const StructType *STy = dyn_cast(yyvsp[-2].TypeVal->get()); if (STy == 0) GEN_ERROR("Cannot make struct constant with type: '" + - (*(yyvsp[(1) - (3)].TypeVal))->getDescription() + "'"); + (*yyvsp[-2].TypeVal)->getDescription() + "'"); if (STy->getNumContainedTypes() != 0) GEN_ERROR("Illegal number of initializers for structure type"); // Check to ensure that Type is not packed if (STy->isPacked()) - GEN_ERROR("Unpacked Initializer to vector type '" + STy->getDescription() + "'"); + GEN_ERROR("Unpacked Initializer to vector type '" + + STy->getDescription() + "'"); - (yyval.ConstVal) = ConstantStruct::get(STy, std::vector()); - delete (yyvsp[(1) - (3)].TypeVal); + yyval.ConstVal = ConstantStruct::get(STy, std::vector()); + delete yyvsp[-2].TypeVal; CHECK_FOR_ERROR - ;} - break; - - case 154: -#line 1636 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - const StructType *STy = dyn_cast((yyvsp[(1) - (6)].TypeVal)->get()); + ; + break;} +case 153: +#line 1638 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + const StructType *STy = dyn_cast(yyvsp[-5].TypeVal->get()); if (STy == 0) GEN_ERROR("Cannot make struct constant with type: '" + - (*(yyvsp[(1) - (6)].TypeVal))->getDescription() + "'"); + (*yyvsp[-5].TypeVal)->getDescription() + "'"); - if ((yyvsp[(4) - (6)].ConstVector)->size() != STy->getNumContainedTypes()) + if (yyvsp[-2].ConstVector->size() != STy->getNumContainedTypes()) GEN_ERROR("Illegal number of initializers for structure type"); // Check to ensure that constants are compatible with the type initializer! - for (unsigned i = 0, e = (yyvsp[(4) - (6)].ConstVector)->size(); i != e; ++i) - if ((*(yyvsp[(4) - (6)].ConstVector))[i]->getType() != STy->getElementType(i)) + for (unsigned i = 0, e = yyvsp[-2].ConstVector->size(); i != e; ++i) + if ((*yyvsp[-2].ConstVector)[i]->getType() != STy->getElementType(i)) GEN_ERROR("Expected type '" + STy->getElementType(i)->getDescription() + "' for element #" + utostr(i) + @@ -4204,21 +3247,20 @@ GEN_ERROR("Vector initializer to non-vector type '" + STy->getDescription() + "'"); - (yyval.ConstVal) = ConstantStruct::get(STy, *(yyvsp[(4) - (6)].ConstVector)); - delete (yyvsp[(1) - (6)].TypeVal); delete (yyvsp[(4) - (6)].ConstVector); + yyval.ConstVal = ConstantStruct::get(STy, *yyvsp[-2].ConstVector); + delete yyvsp[-5].TypeVal; delete yyvsp[-2].ConstVector; CHECK_FOR_ERROR - ;} - break; - - case 155: -#line 1662 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 154: +#line 1664 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ if (!UpRefs.empty()) - GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (5)].TypeVal))->getDescription()); - const StructType *STy = dyn_cast((yyvsp[(1) - (5)].TypeVal)->get()); + GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-4].TypeVal)->getDescription()); + const StructType *STy = dyn_cast(yyvsp[-4].TypeVal->get()); if (STy == 0) GEN_ERROR("Cannot make struct constant with type: '" + - (*(yyvsp[(1) - (5)].TypeVal))->getDescription() + "'"); + (*yyvsp[-4].TypeVal)->getDescription() + "'"); if (STy->getNumContainedTypes() != 0) GEN_ERROR("Illegal number of initializers for structure type"); @@ -4228,45 +3270,42 @@ GEN_ERROR("Vector initializer to non-vector type '" + STy->getDescription() + "'"); - (yyval.ConstVal) = ConstantStruct::get(STy, std::vector()); - delete (yyvsp[(1) - (5)].TypeVal); + yyval.ConstVal = ConstantStruct::get(STy, std::vector()); + delete yyvsp[-4].TypeVal; CHECK_FOR_ERROR - ;} - break; - - case 156: -#line 1682 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 155: +#line 1684 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ if (!UpRefs.empty()) - GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (2)].TypeVal))->getDescription()); - const PointerType *PTy = dyn_cast((yyvsp[(1) - (2)].TypeVal)->get()); + GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription()); + const PointerType *PTy = dyn_cast(yyvsp[-1].TypeVal->get()); if (PTy == 0) GEN_ERROR("Cannot make null pointer constant with type: '" + - (*(yyvsp[(1) - (2)].TypeVal))->getDescription() + "'"); + (*yyvsp[-1].TypeVal)->getDescription() + "'"); - (yyval.ConstVal) = ConstantPointerNull::get(PTy); - delete (yyvsp[(1) - (2)].TypeVal); + yyval.ConstVal = ConstantPointerNull::get(PTy); + delete yyvsp[-1].TypeVal; CHECK_FOR_ERROR - ;} - break; - - case 157: -#line 1694 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 156: +#line 1696 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ if (!UpRefs.empty()) - GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (2)].TypeVal))->getDescription()); - (yyval.ConstVal) = UndefValue::get((yyvsp[(1) - (2)].TypeVal)->get()); - delete (yyvsp[(1) - (2)].TypeVal); - CHECK_FOR_ERROR - ;} - break; - - case 158: -#line 1701 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { + GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription()); + yyval.ConstVal = UndefValue::get(yyvsp[-1].TypeVal->get()); + delete yyvsp[-1].TypeVal; + CHECK_FOR_ERROR + ; + break;} +case 157: +#line 1703 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ if (!UpRefs.empty()) - GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (2)].TypeVal))->getDescription()); - const PointerType *Ty = dyn_cast((yyvsp[(1) - (2)].TypeVal)->get()); + GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription()); + const PointerType *Ty = dyn_cast(yyvsp[-1].TypeVal->get()); if (Ty == 0) GEN_ERROR("Global const reference must be a pointer type"); @@ -4280,7 +3319,7 @@ Function *SavedCurFn = CurFun.CurrentFunction; CurFun.CurrentFunction = 0; - Value *V = getExistingVal(Ty, (yyvsp[(2) - (2)].ValIDVal)); + Value *V = getExistingVal(Ty, yyvsp[0].ValIDVal); CHECK_FOR_ERROR CurFun.CurrentFunction = SavedCurFn; @@ -4295,365 +3334,332 @@ // First check to see if the forward references value is already created! PerModuleInfo::GlobalRefsType::iterator I = - CurModule.GlobalRefs.find(std::make_pair(PT, (yyvsp[(2) - (2)].ValIDVal))); + CurModule.GlobalRefs.find(std::make_pair(PT, yyvsp[0].ValIDVal)); if (I != CurModule.GlobalRefs.end()) { V = I->second; // Placeholder already exists, use it... - (yyvsp[(2) - (2)].ValIDVal).destroy(); + yyvsp[0].ValIDVal.destroy(); } else { std::string Name; - if ((yyvsp[(2) - (2)].ValIDVal).Type == ValID::GlobalName) - Name = (yyvsp[(2) - (2)].ValIDVal).Name; - else if ((yyvsp[(2) - (2)].ValIDVal).Type != ValID::GlobalID) + if (yyvsp[0].ValIDVal.Type == ValID::GlobalName) + Name = yyvsp[0].ValIDVal.Name; + else if (yyvsp[0].ValIDVal.Type != ValID::GlobalID) GEN_ERROR("Invalid reference to global"); // Create the forward referenced global. GlobalValue *GV; if (const FunctionType *FTy = dyn_cast(PT->getElementType())) { - GV = new Function(FTy, GlobalValue::ExternalLinkage, Name, + GV = new Function(FTy, GlobalValue::ExternalWeakLinkage, Name, CurModule.CurrentModule); } else { GV = new GlobalVariable(PT->getElementType(), false, - GlobalValue::ExternalLinkage, 0, + GlobalValue::ExternalWeakLinkage, 0, Name, CurModule.CurrentModule); } // Keep track of the fact that we have a forward ref to recycle it - CurModule.GlobalRefs.insert(std::make_pair(std::make_pair(PT, (yyvsp[(2) - (2)].ValIDVal)), GV)); + CurModule.GlobalRefs.insert(std::make_pair(std::make_pair(PT, yyvsp[0].ValIDVal), GV)); V = GV; } } - (yyval.ConstVal) = cast(V); - delete (yyvsp[(1) - (2)].TypeVal); // Free the type handle + yyval.ConstVal = cast(V); + delete yyvsp[-1].TypeVal; // Free the type handle CHECK_FOR_ERROR - ;} - break; - - case 159: -#line 1767 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 158: +#line 1769 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ if (!UpRefs.empty()) - GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (2)].TypeVal))->getDescription()); - if ((yyvsp[(1) - (2)].TypeVal)->get() != (yyvsp[(2) - (2)].ConstVal)->getType()) + GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription()); + if (yyvsp[-1].TypeVal->get() != yyvsp[0].ConstVal->getType()) GEN_ERROR("Mismatched types for constant expression: " + - (*(yyvsp[(1) - (2)].TypeVal))->getDescription() + " and " + (yyvsp[(2) - (2)].ConstVal)->getType()->getDescription()); - (yyval.ConstVal) = (yyvsp[(2) - (2)].ConstVal); - delete (yyvsp[(1) - (2)].TypeVal); - CHECK_FOR_ERROR - ;} - break; - - case 160: -#line 1777 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { + (*yyvsp[-1].TypeVal)->getDescription() + " and " + yyvsp[0].ConstVal->getType()->getDescription()); + yyval.ConstVal = yyvsp[0].ConstVal; + delete yyvsp[-1].TypeVal; + CHECK_FOR_ERROR + ; + break;} +case 159: +#line 1779 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ if (!UpRefs.empty()) - GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (2)].TypeVal))->getDescription()); - const Type *Ty = (yyvsp[(1) - (2)].TypeVal)->get(); + GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription()); + const Type *Ty = yyvsp[-1].TypeVal->get(); if (isa(Ty) || Ty == Type::LabelTy || isa(Ty)) GEN_ERROR("Cannot create a null initialized value of this type"); - (yyval.ConstVal) = Constant::getNullValue(Ty); - delete (yyvsp[(1) - (2)].TypeVal); + yyval.ConstVal = Constant::getNullValue(Ty); + delete yyvsp[-1].TypeVal; CHECK_FOR_ERROR - ;} - break; - - case 161: -#line 1787 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { // integral constants - if (!ConstantInt::isValueValidForType((yyvsp[(1) - (2)].PrimType), (yyvsp[(2) - (2)].SInt64Val))) + ; + break;} +case 160: +#line 1789 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ // integral constants + if (!ConstantInt::isValueValidForType(yyvsp[-1].PrimType, yyvsp[0].SInt64Val)) GEN_ERROR("Constant value doesn't fit in type"); - (yyval.ConstVal) = ConstantInt::get((yyvsp[(1) - (2)].PrimType), (yyvsp[(2) - (2)].SInt64Val), true); + yyval.ConstVal = ConstantInt::get(yyvsp[-1].PrimType, yyvsp[0].SInt64Val, true); CHECK_FOR_ERROR - ;} - break; - - case 162: -#line 1793 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { // arbitrary precision integer constants - uint32_t BitWidth = cast((yyvsp[(1) - (2)].PrimType))->getBitWidth(); - if ((yyvsp[(2) - (2)].APIntVal)->getBitWidth() > BitWidth) { + ; + break;} +case 161: +#line 1795 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ // arbitrary precision integer constants + uint32_t BitWidth = cast(yyvsp[-1].PrimType)->getBitWidth(); + if (yyvsp[0].APIntVal->getBitWidth() > BitWidth) { GEN_ERROR("Constant value does not fit in type"); } - (yyvsp[(2) - (2)].APIntVal)->sextOrTrunc(BitWidth); - (yyval.ConstVal) = ConstantInt::get(*(yyvsp[(2) - (2)].APIntVal)); - delete (yyvsp[(2) - (2)].APIntVal); - CHECK_FOR_ERROR - ;} - break; - - case 163: -#line 1803 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { // integral constants - if (!ConstantInt::isValueValidForType((yyvsp[(1) - (2)].PrimType), (yyvsp[(2) - (2)].UInt64Val))) + yyvsp[0].APIntVal->sextOrTrunc(BitWidth); + yyval.ConstVal = ConstantInt::get(*yyvsp[0].APIntVal); + delete yyvsp[0].APIntVal; + CHECK_FOR_ERROR + ; + break;} +case 162: +#line 1805 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ // integral constants + if (!ConstantInt::isValueValidForType(yyvsp[-1].PrimType, yyvsp[0].UInt64Val)) GEN_ERROR("Constant value doesn't fit in type"); - (yyval.ConstVal) = ConstantInt::get((yyvsp[(1) - (2)].PrimType), (yyvsp[(2) - (2)].UInt64Val), false); + yyval.ConstVal = ConstantInt::get(yyvsp[-1].PrimType, yyvsp[0].UInt64Val, false); CHECK_FOR_ERROR - ;} - break; - - case 164: -#line 1809 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { // arbitrary precision integer constants - uint32_t BitWidth = cast((yyvsp[(1) - (2)].PrimType))->getBitWidth(); - if ((yyvsp[(2) - (2)].APIntVal)->getBitWidth() > BitWidth) { + ; + break;} +case 163: +#line 1811 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ // arbitrary precision integer constants + uint32_t BitWidth = cast(yyvsp[-1].PrimType)->getBitWidth(); + if (yyvsp[0].APIntVal->getBitWidth() > BitWidth) { GEN_ERROR("Constant value does not fit in type"); } - (yyvsp[(2) - (2)].APIntVal)->zextOrTrunc(BitWidth); - (yyval.ConstVal) = ConstantInt::get(*(yyvsp[(2) - (2)].APIntVal)); - delete (yyvsp[(2) - (2)].APIntVal); - CHECK_FOR_ERROR - ;} - break; - - case 165: -#line 1819 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { // Boolean constants - assert(cast((yyvsp[(1) - (2)].PrimType))->getBitWidth() == 1 && "Not Bool?"); - (yyval.ConstVal) = ConstantInt::getTrue(); - CHECK_FOR_ERROR - ;} - break; - - case 166: -#line 1824 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { // Boolean constants - assert(cast((yyvsp[(1) - (2)].PrimType))->getBitWidth() == 1 && "Not Bool?"); - (yyval.ConstVal) = ConstantInt::getFalse(); - CHECK_FOR_ERROR - ;} - break; - - case 167: -#line 1829 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { // Float & Double constants - if (!ConstantFP::isValueValidForType((yyvsp[(1) - (2)].PrimType), (yyvsp[(2) - (2)].FPVal))) + yyvsp[0].APIntVal->zextOrTrunc(BitWidth); + yyval.ConstVal = ConstantInt::get(*yyvsp[0].APIntVal); + delete yyvsp[0].APIntVal; + CHECK_FOR_ERROR + ; + break;} +case 164: +#line 1821 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ // Boolean constants + assert(cast(yyvsp[-1].PrimType)->getBitWidth() == 1 && "Not Bool?"); + yyval.ConstVal = ConstantInt::getTrue(); + CHECK_FOR_ERROR + ; + break;} +case 165: +#line 1826 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ // Boolean constants + assert(cast(yyvsp[-1].PrimType)->getBitWidth() == 1 && "Not Bool?"); + yyval.ConstVal = ConstantInt::getFalse(); + CHECK_FOR_ERROR + ; + break;} +case 166: +#line 1831 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ // Float & Double constants + if (!ConstantFP::isValueValidForType(yyvsp[-1].PrimType, yyvsp[0].FPVal)) GEN_ERROR("Floating point constant invalid for type"); - (yyval.ConstVal) = ConstantFP::get((yyvsp[(1) - (2)].PrimType), (yyvsp[(2) - (2)].FPVal)); + yyval.ConstVal = ConstantFP::get(yyvsp[-1].PrimType, yyvsp[0].FPVal); CHECK_FOR_ERROR - ;} - break; - - case 168: -#line 1837 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 167: +#line 1839 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ if (!UpRefs.empty()) - GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(5) - (6)].TypeVal))->getDescription()); - Constant *Val = (yyvsp[(3) - (6)].ConstVal); - const Type *DestTy = (yyvsp[(5) - (6)].TypeVal)->get(); - if (!CastInst::castIsValid((yyvsp[(1) - (6)].CastOpVal), (yyvsp[(3) - (6)].ConstVal), DestTy)) + GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription()); + Constant *Val = yyvsp[-3].ConstVal; + const Type *DestTy = yyvsp[-1].TypeVal->get(); + if (!CastInst::castIsValid(yyvsp[-5].CastOpVal, yyvsp[-3].ConstVal, DestTy)) GEN_ERROR("invalid cast opcode for cast from '" + Val->getType()->getDescription() + "' to '" + DestTy->getDescription() + "'"); - (yyval.ConstVal) = ConstantExpr::getCast((yyvsp[(1) - (6)].CastOpVal), (yyvsp[(3) - (6)].ConstVal), DestTy); - delete (yyvsp[(5) - (6)].TypeVal); - ;} - break; - - case 169: -#line 1849 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - if (!isa((yyvsp[(3) - (5)].ConstVal)->getType())) + yyval.ConstVal = ConstantExpr::getCast(yyvsp[-5].CastOpVal, yyvsp[-3].ConstVal, DestTy); + delete yyvsp[-1].TypeVal; + ; + break;} +case 168: +#line 1851 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + if (!isa(yyvsp[-2].ConstVal->getType())) GEN_ERROR("GetElementPtr requires a pointer operand"); const Type *IdxTy = - GetElementPtrInst::getIndexedType((yyvsp[(3) - (5)].ConstVal)->getType(), &(*(yyvsp[(4) - (5)].ValueList))[0], (yyvsp[(4) - (5)].ValueList)->size(), + GetElementPtrInst::getIndexedType(yyvsp[-2].ConstVal->getType(), &(*yyvsp[-1].ValueList)[0], yyvsp[-1].ValueList->size(), true); if (!IdxTy) GEN_ERROR("Index list invalid for constant getelementptr"); SmallVector IdxVec; - for (unsigned i = 0, e = (yyvsp[(4) - (5)].ValueList)->size(); i != e; ++i) - if (Constant *C = dyn_cast((*(yyvsp[(4) - (5)].ValueList))[i])) + for (unsigned i = 0, e = yyvsp[-1].ValueList->size(); i != e; ++i) + if (Constant *C = dyn_cast((*yyvsp[-1].ValueList)[i])) IdxVec.push_back(C); else GEN_ERROR("Indices to constant getelementptr must be constants"); - delete (yyvsp[(4) - (5)].ValueList); + delete yyvsp[-1].ValueList; - (yyval.ConstVal) = ConstantExpr::getGetElementPtr((yyvsp[(3) - (5)].ConstVal), &IdxVec[0], IdxVec.size()); + yyval.ConstVal = ConstantExpr::getGetElementPtr(yyvsp[-2].ConstVal, &IdxVec[0], IdxVec.size()); CHECK_FOR_ERROR - ;} - break; - - case 170: -#line 1871 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - if ((yyvsp[(3) - (8)].ConstVal)->getType() != Type::Int1Ty) + ; + break;} +case 169: +#line 1873 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + if (yyvsp[-5].ConstVal->getType() != Type::Int1Ty) GEN_ERROR("Select condition must be of boolean type"); - if ((yyvsp[(5) - (8)].ConstVal)->getType() != (yyvsp[(7) - (8)].ConstVal)->getType()) + if (yyvsp[-3].ConstVal->getType() != yyvsp[-1].ConstVal->getType()) GEN_ERROR("Select operand types must match"); - (yyval.ConstVal) = ConstantExpr::getSelect((yyvsp[(3) - (8)].ConstVal), (yyvsp[(5) - (8)].ConstVal), (yyvsp[(7) - (8)].ConstVal)); + yyval.ConstVal = ConstantExpr::getSelect(yyvsp[-5].ConstVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal); CHECK_FOR_ERROR - ;} - break; - - case 171: -#line 1879 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - if ((yyvsp[(3) - (6)].ConstVal)->getType() != (yyvsp[(5) - (6)].ConstVal)->getType()) + ; + break;} +case 170: +#line 1881 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + if (yyvsp[-3].ConstVal->getType() != yyvsp[-1].ConstVal->getType()) GEN_ERROR("Binary operator types must match"); CHECK_FOR_ERROR; - (yyval.ConstVal) = ConstantExpr::get((yyvsp[(1) - (6)].BinaryOpVal), (yyvsp[(3) - (6)].ConstVal), (yyvsp[(5) - (6)].ConstVal)); - ;} - break; - - case 172: -#line 1885 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - if ((yyvsp[(3) - (6)].ConstVal)->getType() != (yyvsp[(5) - (6)].ConstVal)->getType()) + yyval.ConstVal = ConstantExpr::get(yyvsp[-5].BinaryOpVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal); + ; + break;} +case 171: +#line 1887 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + if (yyvsp[-3].ConstVal->getType() != yyvsp[-1].ConstVal->getType()) GEN_ERROR("Logical operator types must match"); - if (!(yyvsp[(3) - (6)].ConstVal)->getType()->isInteger()) { - if (Instruction::isShift((yyvsp[(1) - (6)].BinaryOpVal)) || !isa((yyvsp[(3) - (6)].ConstVal)->getType()) || - !cast((yyvsp[(3) - (6)].ConstVal)->getType())->getElementType()->isInteger()) + if (!yyvsp[-3].ConstVal->getType()->isInteger()) { + if (Instruction::isShift(yyvsp[-5].BinaryOpVal) || !isa(yyvsp[-3].ConstVal->getType()) || + !cast(yyvsp[-3].ConstVal->getType())->getElementType()->isInteger()) GEN_ERROR("Logical operator requires integral operands"); } - (yyval.ConstVal) = ConstantExpr::get((yyvsp[(1) - (6)].BinaryOpVal), (yyvsp[(3) - (6)].ConstVal), (yyvsp[(5) - (6)].ConstVal)); + yyval.ConstVal = ConstantExpr::get(yyvsp[-5].BinaryOpVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal); CHECK_FOR_ERROR - ;} - break; - - case 173: -#line 1896 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - if ((yyvsp[(4) - (7)].ConstVal)->getType() != (yyvsp[(6) - (7)].ConstVal)->getType()) + ; + break;} +case 172: +#line 1898 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + if (yyvsp[-3].ConstVal->getType() != yyvsp[-1].ConstVal->getType()) GEN_ERROR("icmp operand types must match"); - (yyval.ConstVal) = ConstantExpr::getICmp((yyvsp[(2) - (7)].IPredicate), (yyvsp[(4) - (7)].ConstVal), (yyvsp[(6) - (7)].ConstVal)); - ;} - break; - - case 174: -#line 1901 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - if ((yyvsp[(4) - (7)].ConstVal)->getType() != (yyvsp[(6) - (7)].ConstVal)->getType()) + yyval.ConstVal = ConstantExpr::getICmp(yyvsp[-5].IPredicate, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal); + ; + break;} +case 173: +#line 1903 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + if (yyvsp[-3].ConstVal->getType() != yyvsp[-1].ConstVal->getType()) GEN_ERROR("fcmp operand types must match"); - (yyval.ConstVal) = ConstantExpr::getFCmp((yyvsp[(2) - (7)].FPredicate), (yyvsp[(4) - (7)].ConstVal), (yyvsp[(6) - (7)].ConstVal)); - ;} - break; - - case 175: -#line 1906 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - if (!ExtractElementInst::isValidOperands((yyvsp[(3) - (6)].ConstVal), (yyvsp[(5) - (6)].ConstVal))) + yyval.ConstVal = ConstantExpr::getFCmp(yyvsp[-5].FPredicate, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal); + ; + break;} +case 174: +#line 1908 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + if (!ExtractElementInst::isValidOperands(yyvsp[-3].ConstVal, yyvsp[-1].ConstVal)) GEN_ERROR("Invalid extractelement operands"); - (yyval.ConstVal) = ConstantExpr::getExtractElement((yyvsp[(3) - (6)].ConstVal), (yyvsp[(5) - (6)].ConstVal)); - CHECK_FOR_ERROR - ;} - break; - - case 176: -#line 1912 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - if (!InsertElementInst::isValidOperands((yyvsp[(3) - (8)].ConstVal), (yyvsp[(5) - (8)].ConstVal), (yyvsp[(7) - (8)].ConstVal))) + yyval.ConstVal = ConstantExpr::getExtractElement(yyvsp[-3].ConstVal, yyvsp[-1].ConstVal); + CHECK_FOR_ERROR + ; + break;} +case 175: +#line 1914 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + if (!InsertElementInst::isValidOperands(yyvsp[-5].ConstVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal)) GEN_ERROR("Invalid insertelement operands"); - (yyval.ConstVal) = ConstantExpr::getInsertElement((yyvsp[(3) - (8)].ConstVal), (yyvsp[(5) - (8)].ConstVal), (yyvsp[(7) - (8)].ConstVal)); + yyval.ConstVal = ConstantExpr::getInsertElement(yyvsp[-5].ConstVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal); CHECK_FOR_ERROR - ;} - break; - - case 177: -#line 1918 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - if (!ShuffleVectorInst::isValidOperands((yyvsp[(3) - (8)].ConstVal), (yyvsp[(5) - (8)].ConstVal), (yyvsp[(7) - (8)].ConstVal))) + ; + break;} +case 176: +#line 1920 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + if (!ShuffleVectorInst::isValidOperands(yyvsp[-5].ConstVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal)) GEN_ERROR("Invalid shufflevector operands"); - (yyval.ConstVal) = ConstantExpr::getShuffleVector((yyvsp[(3) - (8)].ConstVal), (yyvsp[(5) - (8)].ConstVal), (yyvsp[(7) - (8)].ConstVal)); + yyval.ConstVal = ConstantExpr::getShuffleVector(yyvsp[-5].ConstVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal); CHECK_FOR_ERROR - ;} - break; - - case 178: -#line 1927 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - ((yyval.ConstVector) = (yyvsp[(1) - (3)].ConstVector))->push_back((yyvsp[(3) - (3)].ConstVal)); + ; + break;} +case 177: +#line 1929 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + (yyval.ConstVector = yyvsp[-2].ConstVector)->push_back(yyvsp[0].ConstVal); CHECK_FOR_ERROR - ;} - break; - - case 179: -#line 1931 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - (yyval.ConstVector) = new std::vector(); - (yyval.ConstVector)->push_back((yyvsp[(1) - (1)].ConstVal)); + ; + break;} +case 178: +#line 1933 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + yyval.ConstVector = new std::vector(); + yyval.ConstVector->push_back(yyvsp[0].ConstVal); CHECK_FOR_ERROR - ;} - break; - - case 180: -#line 1939 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { (yyval.BoolVal) = false; ;} - break; - - case 181: -#line 1939 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { (yyval.BoolVal) = true; ;} - break; - - case 182: -#line 1942 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { (yyval.BoolVal) = true; ;} - break; - - case 183: -#line 1942 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { (yyval.BoolVal) = false; ;} - break; - - case 184: -#line 1953 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - (yyval.ModuleVal) = ParserResult = CurModule.CurrentModule; + ; + break;} +case 179: +#line 1941 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.BoolVal = false; ; + break;} +case 180: +#line 1941 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.BoolVal = true; ; + break;} +case 181: +#line 1944 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.BoolVal = true; ; + break;} +case 182: +#line 1944 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.BoolVal = false; ; + break;} +case 183: +#line 1955 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + yyval.ModuleVal = ParserResult = CurModule.CurrentModule; CurModule.ModuleDone(); CHECK_FOR_ERROR; - ;} - break; - - case 185: -#line 1958 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - (yyval.ModuleVal) = ParserResult = CurModule.CurrentModule; + ; + break;} +case 184: +#line 1960 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + yyval.ModuleVal = ParserResult = CurModule.CurrentModule; CurModule.ModuleDone(); CHECK_FOR_ERROR; - ;} - break; - - case 188: -#line 1971 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { CurFun.isDeclare = false; ;} - break; - - case 189: -#line 1971 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 187: +#line 1973 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ CurFun.isDeclare = false; ; + break;} +case 188: +#line 1973 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ CurFun.FunctionDone(); CHECK_FOR_ERROR - ;} - break; - - case 190: -#line 1975 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { CurFun.isDeclare = true; ;} - break; - - case 191: -#line 1975 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 189: +#line 1977 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ CurFun.isDeclare = true; ; + break;} +case 190: +#line 1977 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ CHECK_FOR_ERROR - ;} - break; - - case 192: -#line 1978 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 191: +#line 1980 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ CHECK_FOR_ERROR - ;} - break; - - case 193: -#line 1981 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 192: +#line 1983 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ if (!UpRefs.empty()) - GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(3) - (3)].TypeVal))->getDescription()); + GEN_ERROR("Invalid upreference in type: " + (*yyvsp[0].TypeVal)->getDescription()); // Eagerly resolve types. This is not an optimization, this is a // requirement that is due to the fact that we could have this: // @@ -4663,284 +3669,261 @@ // If types are not resolved eagerly, then the two types will not be // determined to be the same type! // - ResolveTypeTo((yyvsp[(1) - (3)].StrVal), *(yyvsp[(3) - (3)].TypeVal)); + ResolveTypeTo(yyvsp[-2].StrVal, *yyvsp[0].TypeVal); - if (!setTypeName(*(yyvsp[(3) - (3)].TypeVal), (yyvsp[(1) - (3)].StrVal)) && !(yyvsp[(1) - (3)].StrVal)) { + if (!setTypeName(*yyvsp[0].TypeVal, yyvsp[-2].StrVal) && !yyvsp[-2].StrVal) { CHECK_FOR_ERROR // If this is a named type that is not a redefinition, add it to the slot // table. - CurModule.Types.push_back(*(yyvsp[(3) - (3)].TypeVal)); + CurModule.Types.push_back(*yyvsp[0].TypeVal); } - delete (yyvsp[(3) - (3)].TypeVal); + delete yyvsp[0].TypeVal; CHECK_FOR_ERROR - ;} - break; - - case 194: -#line 2005 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - ResolveTypeTo((yyvsp[(1) - (3)].StrVal), (yyvsp[(3) - (3)].PrimType)); + ; + break;} +case 193: +#line 2007 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + ResolveTypeTo(yyvsp[-2].StrVal, yyvsp[0].PrimType); - if (!setTypeName((yyvsp[(3) - (3)].PrimType), (yyvsp[(1) - (3)].StrVal)) && !(yyvsp[(1) - (3)].StrVal)) { + if (!setTypeName(yyvsp[0].PrimType, yyvsp[-2].StrVal) && !yyvsp[-2].StrVal) { CHECK_FOR_ERROR // If this is a named type that is not a redefinition, add it to the slot // table. - CurModule.Types.push_back((yyvsp[(3) - (3)].PrimType)); + CurModule.Types.push_back(yyvsp[0].PrimType); } CHECK_FOR_ERROR - ;} - break; - - case 195: -#line 2016 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 194: +#line 2018 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ /* "Externally Visible" Linkage */ - if ((yyvsp[(5) - (5)].ConstVal) == 0) + if (yyvsp[0].ConstVal == 0) GEN_ERROR("Global value initializer is not a constant"); - CurGV = ParseGlobalVariable((yyvsp[(1) - (5)].StrVal), GlobalValue::ExternalLinkage, - (yyvsp[(2) - (5)].Visibility), (yyvsp[(4) - (5)].BoolVal), (yyvsp[(5) - (5)].ConstVal)->getType(), (yyvsp[(5) - (5)].ConstVal), (yyvsp[(3) - (5)].BoolVal)); + CurGV = ParseGlobalVariable(yyvsp[-4].StrVal, GlobalValue::ExternalLinkage, + yyvsp[-3].Visibility, yyvsp[-1].BoolVal, yyvsp[0].ConstVal->getType(), yyvsp[0].ConstVal, yyvsp[-2].BoolVal); CHECK_FOR_ERROR - ;} - break; - - case 196: -#line 2023 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 195: +#line 2025 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ CurGV = 0; - ;} - break; - - case 197: -#line 2026 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - if ((yyvsp[(6) - (6)].ConstVal) == 0) + ; + break;} +case 196: +#line 2029 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + if (yyvsp[0].ConstVal == 0) GEN_ERROR("Global value initializer is not a constant"); - CurGV = ParseGlobalVariable((yyvsp[(1) - (6)].StrVal), (yyvsp[(2) - (6)].Linkage), (yyvsp[(3) - (6)].Visibility), (yyvsp[(5) - (6)].BoolVal), (yyvsp[(6) - (6)].ConstVal)->getType(), (yyvsp[(6) - (6)].ConstVal), (yyvsp[(4) - (6)].BoolVal)); + CurGV = ParseGlobalVariable(yyvsp[-5].StrVal, yyvsp[-4].Linkage, yyvsp[-3].Visibility, yyvsp[-1].BoolVal, yyvsp[0].ConstVal->getType(), yyvsp[0].ConstVal, yyvsp[-2].BoolVal); CHECK_FOR_ERROR - ;} - break; - - case 198: -#line 2031 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 197: +#line 2034 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ CurGV = 0; - ;} - break; - - case 199: -#line 2034 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 198: +#line 2038 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ if (!UpRefs.empty()) - GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(6) - (6)].TypeVal))->getDescription()); - CurGV = ParseGlobalVariable((yyvsp[(1) - (6)].StrVal), (yyvsp[(2) - (6)].Linkage), (yyvsp[(3) - (6)].Visibility), (yyvsp[(5) - (6)].BoolVal), *(yyvsp[(6) - (6)].TypeVal), 0, (yyvsp[(4) - (6)].BoolVal)); + GEN_ERROR("Invalid upreference in type: " + (*yyvsp[0].TypeVal)->getDescription()); + CurGV = ParseGlobalVariable(yyvsp[-5].StrVal, yyvsp[-4].Linkage, yyvsp[-3].Visibility, yyvsp[-1].BoolVal, *yyvsp[0].TypeVal, 0, yyvsp[-2].BoolVal); CHECK_FOR_ERROR - delete (yyvsp[(6) - (6)].TypeVal); - ;} - break; - - case 200: -#line 2040 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { + delete yyvsp[0].TypeVal; + ; + break;} +case 199: +#line 2044 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ CurGV = 0; CHECK_FOR_ERROR - ;} - break; - - case 201: -#line 2044 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - std::string Name((yyvsp[(1) - (6)].StrVal)); + ; + break;} +case 200: +#line 2049 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + std::string Name(yyvsp[-5].StrVal); if (Name.empty()) GEN_ERROR("Alias name cannot be empty") const PointerType *PFTy = 0; const FunctionType *Ty = 0; Value* V = 0; const Type* VTy = 0; - if (!(PFTy = dyn_cast((yyvsp[(5) - (6)].TypeVal)->get())) || + if (!(PFTy = dyn_cast(yyvsp[-1].TypeVal->get())) || !(Ty = dyn_cast(PFTy->getElementType()))) { - VTy = (yyvsp[(5) - (6)].TypeVal)->get(); - V = getExistingVal(VTy, (yyvsp[(6) - (6)].ValIDVal)); + VTy = yyvsp[-1].TypeVal->get(); + V = getExistingVal(VTy, yyvsp[0].ValIDVal); } else { VTy = PFTy; - V = getExistingVal(PFTy, (yyvsp[(6) - (6)].ValIDVal)); + V = getExistingVal(PFTy, yyvsp[0].ValIDVal); } if (V == 0) - GEN_ERROR(std::string("Invalid aliasee for alias: ") + (yyvsp[(1) - (6)].StrVal)); - GlobalValue* Aliasee; - if (Aliasee = dyn_cast(V)) { - GlobalAlias* GA = new GlobalAlias(VTy, (yyvsp[(4) - (6)].Linkage), Name, Aliasee, CurModule.CurrentModule); - GA->setVisibility((yyvsp[(2) - (6)].Visibility)); + GEN_ERROR(std::string("Invalid aliasee for alias: ") + yyvsp[-5].StrVal); + if (GlobalValue* Aliasee = dyn_cast(V)) { + GlobalAlias* GA = new GlobalAlias(VTy, yyvsp[-2].Linkage, Name, Aliasee, + CurModule.CurrentModule); + GA->setVisibility(yyvsp[-4].Visibility); InsertValue(GA, CurModule.Values); } else GEN_ERROR("Aliases can be created only to global values"); CHECK_FOR_ERROR - delete (yyvsp[(5) - (6)].TypeVal); - ;} - break; - - case 202: -#line 2072 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - CHECK_FOR_ERROR - ;} - break; - - case 203: -#line 2075 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { + delete yyvsp[-1].TypeVal; + ; + break;} +case 201: +#line 2077 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + CHECK_FOR_ERROR + ; + break;} +case 202: +#line 2080 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ CHECK_FOR_ERROR - ;} - break; - - case 204: -#line 2081 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 203: +#line 2086 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ const std::string &AsmSoFar = CurModule.CurrentModule->getModuleInlineAsm(); - char *EndStr = UnEscapeLexed((yyvsp[(1) - (1)].StrVal), true); - std::string NewAsm((yyvsp[(1) - (1)].StrVal), EndStr); - free((yyvsp[(1) - (1)].StrVal)); + char *EndStr = UnEscapeLexed(yyvsp[0].StrVal, true); + std::string NewAsm(yyvsp[0].StrVal, EndStr); + free(yyvsp[0].StrVal); if (AsmSoFar.empty()) CurModule.CurrentModule->setModuleInlineAsm(NewAsm); else CurModule.CurrentModule->setModuleInlineAsm(AsmSoFar+"\n"+NewAsm); CHECK_FOR_ERROR -;} - break; - - case 205: -#line 2094 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - CurModule.CurrentModule->setTargetTriple((yyvsp[(3) - (3)].StrVal)); - free((yyvsp[(3) - (3)].StrVal)); - ;} - break; - - case 206: -#line 2098 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - CurModule.CurrentModule->setDataLayout((yyvsp[(3) - (3)].StrVal)); - free((yyvsp[(3) - (3)].StrVal)); - ;} - break; - - case 208: -#line 2105 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - CurModule.CurrentModule->addLibrary((yyvsp[(3) - (3)].StrVal)); - free((yyvsp[(3) - (3)].StrVal)); +; + break;} +case 204: +#line 2099 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + CurModule.CurrentModule->setTargetTriple(yyvsp[0].StrVal); + free(yyvsp[0].StrVal); + ; + break;} +case 205: +#line 2103 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + CurModule.CurrentModule->setDataLayout(yyvsp[0].StrVal); + free(yyvsp[0].StrVal); + ; + break;} +case 207: +#line 2110 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + CurModule.CurrentModule->addLibrary(yyvsp[0].StrVal); + free(yyvsp[0].StrVal); CHECK_FOR_ERROR - ;} - break; - - case 209: -#line 2110 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - CurModule.CurrentModule->addLibrary((yyvsp[(1) - (1)].StrVal)); - free((yyvsp[(1) - (1)].StrVal)); + ; + break;} +case 208: +#line 2115 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + CurModule.CurrentModule->addLibrary(yyvsp[0].StrVal); + free(yyvsp[0].StrVal); CHECK_FOR_ERROR - ;} - break; - - case 210: -#line 2115 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 209: +#line 2120 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ CHECK_FOR_ERROR - ;} - break; - - case 211: -#line 2124 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 210: +#line 2129 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ if (!UpRefs.empty()) - GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(3) - (5)].TypeVal))->getDescription()); - if (*(yyvsp[(3) - (5)].TypeVal) == Type::VoidTy) + GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription()); + if (*yyvsp[-2].TypeVal == Type::VoidTy) GEN_ERROR("void typed arguments are invalid"); - ArgListEntry E; E.Attrs = (yyvsp[(4) - (5)].ParamAttrs); E.Ty = (yyvsp[(3) - (5)].TypeVal); E.Name = (yyvsp[(5) - (5)].StrVal); - (yyval.ArgList) = (yyvsp[(1) - (5)].ArgList); - (yyvsp[(1) - (5)].ArgList)->push_back(E); - CHECK_FOR_ERROR - ;} - break; - - case 212: -#line 2134 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { + ArgListEntry E; E.Attrs = yyvsp[-1].ParamAttrs; E.Ty = yyvsp[-2].TypeVal; E.Name = yyvsp[0].StrVal; + yyval.ArgList = yyvsp[-4].ArgList; + yyvsp[-4].ArgList->push_back(E); + CHECK_FOR_ERROR + ; + break;} +case 211: +#line 2139 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ if (!UpRefs.empty()) - GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (3)].TypeVal))->getDescription()); - if (*(yyvsp[(1) - (3)].TypeVal) == Type::VoidTy) + GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription()); + if (*yyvsp[-2].TypeVal == Type::VoidTy) GEN_ERROR("void typed arguments are invalid"); - ArgListEntry E; E.Attrs = (yyvsp[(2) - (3)].ParamAttrs); E.Ty = (yyvsp[(1) - (3)].TypeVal); E.Name = (yyvsp[(3) - (3)].StrVal); - (yyval.ArgList) = new ArgListType; - (yyval.ArgList)->push_back(E); - CHECK_FOR_ERROR - ;} - break; - - case 213: -#line 2145 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - (yyval.ArgList) = (yyvsp[(1) - (1)].ArgList); + ArgListEntry E; E.Attrs = yyvsp[-1].ParamAttrs; E.Ty = yyvsp[-2].TypeVal; E.Name = yyvsp[0].StrVal; + yyval.ArgList = new ArgListType; + yyval.ArgList->push_back(E); + CHECK_FOR_ERROR + ; + break;} +case 212: +#line 2150 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + yyval.ArgList = yyvsp[0].ArgList; CHECK_FOR_ERROR - ;} - break; - - case 214: -#line 2149 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - (yyval.ArgList) = (yyvsp[(1) - (3)].ArgList); + ; + break;} +case 213: +#line 2154 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + yyval.ArgList = yyvsp[-2].ArgList; struct ArgListEntry E; E.Ty = new PATypeHolder(Type::VoidTy); E.Name = 0; E.Attrs = ParamAttr::None; - (yyval.ArgList)->push_back(E); + yyval.ArgList->push_back(E); CHECK_FOR_ERROR - ;} - break; - - case 215: -#line 2158 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - (yyval.ArgList) = new ArgListType; + ; + break;} +case 214: +#line 2163 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + yyval.ArgList = new ArgListType; struct ArgListEntry E; E.Ty = new PATypeHolder(Type::VoidTy); E.Name = 0; E.Attrs = ParamAttr::None; - (yyval.ArgList)->push_back(E); + yyval.ArgList->push_back(E); CHECK_FOR_ERROR - ;} - break; - - case 216: -#line 2167 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - (yyval.ArgList) = 0; + ; + break;} +case 215: +#line 2172 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + yyval.ArgList = 0; CHECK_FOR_ERROR - ;} - break; - - case 217: -#line 2173 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - UnEscapeLexed((yyvsp[(3) - (9)].StrVal)); - std::string FunctionName((yyvsp[(3) - (9)].StrVal)); - free((yyvsp[(3) - (9)].StrVal)); // Free strdup'd memory! + ; + break;} +case 216: +#line 2178 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + UnEscapeLexed(yyvsp[-6].StrVal); + std::string FunctionName(yyvsp[-6].StrVal); + free(yyvsp[-6].StrVal); // Free strdup'd memory! // Check the function result for abstractness if this is a define. We should // have no abstract types at this point - if (!CurFun.isDeclare && CurModule.TypeIsUnresolved((yyvsp[(2) - (9)].TypeVal))) - GEN_ERROR("Reference to abstract result: "+ (yyvsp[(2) - (9)].TypeVal)->get()->getDescription()); + if (!CurFun.isDeclare && CurModule.TypeIsUnresolved(yyvsp[-7].TypeVal)) + GEN_ERROR("Reference to abstract result: "+ yyvsp[-7].TypeVal->get()->getDescription()); std::vector ParamTypeList; ParamAttrsVector Attrs; - if ((yyvsp[(7) - (9)].ParamAttrs) != ParamAttr::None) { - ParamAttrsWithIndex PAWI; PAWI.index = 0; PAWI.attrs = (yyvsp[(7) - (9)].ParamAttrs); + if (yyvsp[-2].ParamAttrs != ParamAttr::None) { + ParamAttrsWithIndex PAWI; PAWI.index = 0; PAWI.attrs = yyvsp[-2].ParamAttrs; Attrs.push_back(PAWI); } - if ((yyvsp[(5) - (9)].ArgList)) { // If there are arguments... + if (yyvsp[-4].ArgList) { // If there are arguments... unsigned index = 1; - for (ArgListType::iterator I = (yyvsp[(5) - (9)].ArgList)->begin(); I != (yyvsp[(5) - (9)].ArgList)->end(); ++I, ++index) { + for (ArgListType::iterator I = yyvsp[-4].ArgList->begin(); I != yyvsp[-4].ArgList->end(); ++I, ++index) { const Type* Ty = I->Ty->get(); if (!CurFun.isDeclare && CurModule.TypeIsUnresolved(I->Ty)) GEN_ERROR("Reference to abstract argument: " + Ty->getDescription()); @@ -4960,9 +3943,9 @@ if (!Attrs.empty()) PAL = ParamAttrsList::get(Attrs); - FunctionType *FT = FunctionType::get(*(yyvsp[(2) - (9)].TypeVal), ParamTypeList, isVarArg, PAL); + FunctionType *FT = FunctionType::get(*yyvsp[-7].TypeVal, ParamTypeList, isVarArg, PAL); const PointerType *PFT = PointerType::get(FT); - delete (yyvsp[(2) - (9)].TypeVal); + delete yyvsp[-7].TypeVal; ValID ID; if (!FunctionName.empty()) { @@ -4981,14 +3964,14 @@ CurModule.CurrentModule->getFunctionList().push_back(Fn); } else if (!FunctionName.empty() && // Merge with an earlier prototype? (Fn = CurModule.CurrentModule->getFunction(FunctionName))) { - if (Fn->getFunctionType() != FT ) { + if (Fn->getFunctionType() != FT) { // The existing function doesn't have the same type. This is an overload // error. GEN_ERROR("Overload of function '" + FunctionName + "' not permitted."); } else if (!CurFun.isDeclare && !Fn->isDeclaration()) { - // Neither the existing or the current function is a declaration and they - // have the same name and same type. Clearly this is a redefinition. - GEN_ERROR("Redefinition of function '" + FunctionName + "'"); + // Neither the existing or the current function is a declaration and they + // have the same name and same type. Clearly this is a redefinition. + GEN_ERROR("Redefinition of function '" + FunctionName + "'"); } if (Fn->isDeclaration()) { // Make sure to strip off any argument names so we can't get conflicts. for (Function::arg_iterator AI = Fn->arg_begin(), AE = Fn->arg_end(); @@ -4996,7 +3979,7 @@ AI->setName(""); } } else { // Not already defined? - Fn = new Function(FT, GlobalValue::ExternalLinkage, FunctionName, + Fn = new Function(FT, GlobalValue::ExternalWeakLinkage, FunctionName, CurModule.CurrentModule); InsertValue(Fn, CurModule.Values); @@ -5011,26 +3994,26 @@ Fn->setLinkage(CurFun.Linkage); Fn->setVisibility(CurFun.Visibility); } - Fn->setCallingConv((yyvsp[(1) - (9)].UIntVal)); - Fn->setAlignment((yyvsp[(9) - (9)].UIntVal)); - if ((yyvsp[(8) - (9)].StrVal)) { - Fn->setSection((yyvsp[(8) - (9)].StrVal)); - free((yyvsp[(8) - (9)].StrVal)); + Fn->setCallingConv(yyvsp[-8].UIntVal); + Fn->setAlignment(yyvsp[0].UIntVal); + if (yyvsp[-1].StrVal) { + Fn->setSection(yyvsp[-1].StrVal); + free(yyvsp[-1].StrVal); } // Add all of the arguments we parsed to the function... - if ((yyvsp[(5) - (9)].ArgList)) { // Is null if empty... + if (yyvsp[-4].ArgList) { // Is null if empty... if (isVarArg) { // Nuke the last entry - assert((yyvsp[(5) - (9)].ArgList)->back().Ty->get() == Type::VoidTy && (yyvsp[(5) - (9)].ArgList)->back().Name == 0 && + assert(yyvsp[-4].ArgList->back().Ty->get() == Type::VoidTy && yyvsp[-4].ArgList->back().Name == 0 && "Not a varargs marker!"); - delete (yyvsp[(5) - (9)].ArgList)->back().Ty; - (yyvsp[(5) - (9)].ArgList)->pop_back(); // Delete the last entry + delete yyvsp[-4].ArgList->back().Ty; + yyvsp[-4].ArgList->pop_back(); // Delete the last entry } Function::arg_iterator ArgIt = Fn->arg_begin(); Function::arg_iterator ArgEnd = Fn->arg_end(); unsigned Idx = 1; - for (ArgListType::iterator I = (yyvsp[(5) - (9)].ArgList)->begin(); - I != (yyvsp[(5) - (9)].ArgList)->end() && ArgIt != ArgEnd; ++I, ++ArgIt) { + for (ArgListType::iterator I = yyvsp[-4].ArgList->begin(); + I != yyvsp[-4].ArgList->end() && ArgIt != ArgEnd; ++I, ++ArgIt) { delete I->Ty; // Delete the typeholder... setValueName(ArgIt, I->Name); // Insert arg into symtab... CHECK_FOR_ERROR @@ -5038,366 +4021,332 @@ Idx++; } - delete (yyvsp[(5) - (9)].ArgList); // We're now done with the argument list + delete yyvsp[-4].ArgList; // We're now done with the argument list } CHECK_FOR_ERROR -;} - break; - - case 220: -#line 2296 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - (yyval.FunctionVal) = CurFun.CurrentFunction; +; + break;} +case 219: +#line 2301 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + yyval.FunctionVal = CurFun.CurrentFunction; // Make sure that we keep track of the linkage type even if there was a // previous "declare". - (yyval.FunctionVal)->setLinkage((yyvsp[(1) - (4)].Linkage)); - (yyval.FunctionVal)->setVisibility((yyvsp[(2) - (4)].Visibility)); -;} - break; - - case 223: -#line 2307 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - (yyval.FunctionVal) = (yyvsp[(1) - (2)].FunctionVal); + yyval.FunctionVal->setLinkage(yyvsp[-3].Linkage); + yyval.FunctionVal->setVisibility(yyvsp[-2].Visibility); +; + break;} +case 222: +#line 2312 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + yyval.FunctionVal = yyvsp[-1].FunctionVal; CHECK_FOR_ERROR -;} - break; - - case 224: -#line 2312 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - CurFun.CurrentFunction->setLinkage((yyvsp[(1) - (3)].Linkage)); - CurFun.CurrentFunction->setVisibility((yyvsp[(2) - (3)].Visibility)); - (yyval.FunctionVal) = CurFun.CurrentFunction; +; + break;} +case 223: +#line 2317 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + CurFun.CurrentFunction->setLinkage(yyvsp[-2].Linkage); + CurFun.CurrentFunction->setVisibility(yyvsp[-1].Visibility); + yyval.FunctionVal = CurFun.CurrentFunction; CurFun.FunctionDone(); CHECK_FOR_ERROR - ;} - break; - - case 225: -#line 2324 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - (yyval.BoolVal) = false; - CHECK_FOR_ERROR - ;} - break; - - case 226: -#line 2328 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - (yyval.BoolVal) = true; - CHECK_FOR_ERROR - ;} - break; - - case 227: -#line 2333 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { // A reference to a direct constant - (yyval.ValIDVal) = ValID::create((yyvsp[(1) - (1)].SInt64Val)); - CHECK_FOR_ERROR - ;} - break; - - case 228: -#line 2337 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - (yyval.ValIDVal) = ValID::create((yyvsp[(1) - (1)].UInt64Val)); + ; + break;} +case 224: +#line 2329 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + yyval.BoolVal = false; CHECK_FOR_ERROR - ;} - break; - - case 229: -#line 2341 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { // Perhaps it's an FP constant? - (yyval.ValIDVal) = ValID::create((yyvsp[(1) - (1)].FPVal)); + ; + break;} +case 225: +#line 2333 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + yyval.BoolVal = true; CHECK_FOR_ERROR - ;} - break; - - case 230: -#line 2345 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - (yyval.ValIDVal) = ValID::create(ConstantInt::getTrue()); + ; + break;} +case 226: +#line 2338 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ // A reference to a direct constant + yyval.ValIDVal = ValID::create(yyvsp[0].SInt64Val); + CHECK_FOR_ERROR + ; + break;} +case 227: +#line 2342 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + yyval.ValIDVal = ValID::create(yyvsp[0].UInt64Val); CHECK_FOR_ERROR - ;} - break; - - case 231: -#line 2349 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - (yyval.ValIDVal) = ValID::create(ConstantInt::getFalse()); + ; + break;} +case 228: +#line 2346 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ // Perhaps it's an FP constant? + yyval.ValIDVal = ValID::create(yyvsp[0].FPVal); + CHECK_FOR_ERROR + ; + break;} +case 229: +#line 2350 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + yyval.ValIDVal = ValID::create(ConstantInt::getTrue()); CHECK_FOR_ERROR - ;} - break; - - case 232: -#line 2353 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - (yyval.ValIDVal) = ValID::createNull(); + ; + break;} +case 230: +#line 2354 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + yyval.ValIDVal = ValID::create(ConstantInt::getFalse()); CHECK_FOR_ERROR - ;} - break; - - case 233: -#line 2357 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - (yyval.ValIDVal) = ValID::createUndef(); + ; + break;} +case 231: +#line 2358 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + yyval.ValIDVal = ValID::createNull(); CHECK_FOR_ERROR - ;} - break; - - case 234: -#line 2361 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { // A vector zero constant. - (yyval.ValIDVal) = ValID::createZeroInit(); + ; + break;} +case 232: +#line 2362 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + yyval.ValIDVal = ValID::createUndef(); CHECK_FOR_ERROR - ;} - break; - - case 235: -#line 2365 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { // Nonempty unsized packed vector - const Type *ETy = (*(yyvsp[(2) - (3)].ConstVector))[0]->getType(); - int NumElements = (yyvsp[(2) - (3)].ConstVector)->size(); + ; + break;} +case 233: +#line 2366 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ // A vector zero constant. + yyval.ValIDVal = ValID::createZeroInit(); + CHECK_FOR_ERROR + ; + break;} +case 234: +#line 2370 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ // Nonempty unsized packed vector + const Type *ETy = (*yyvsp[-1].ConstVector)[0]->getType(); + int NumElements = yyvsp[-1].ConstVector->size(); VectorType* pt = VectorType::get(ETy, NumElements); PATypeHolder* PTy = new PATypeHolder( HandleUpRefs( VectorType::get( ETy, - NumElements) - ) - ); - - // Verify all elements are correct type! - for (unsigned i = 0; i < (yyvsp[(2) - (3)].ConstVector)->size(); i++) { - if (ETy != (*(yyvsp[(2) - (3)].ConstVector))[i]->getType()) - GEN_ERROR("Element #" + utostr(i) + " is not of type '" + - ETy->getDescription() +"' as required!\nIt is of type '" + - (*(yyvsp[(2) - (3)].ConstVector))[i]->getType()->getDescription() + "'."); - } - - (yyval.ValIDVal) = ValID::create(ConstantVector::get(pt, *(yyvsp[(2) - (3)].ConstVector))); - delete PTy; delete (yyvsp[(2) - (3)].ConstVector); - CHECK_FOR_ERROR - ;} - break; - - case 236: -#line 2390 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - (yyval.ValIDVal) = ValID::create((yyvsp[(1) - (1)].ConstVal)); - CHECK_FOR_ERROR - ;} - break; - - case 237: -#line 2394 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - char *End = UnEscapeLexed((yyvsp[(3) - (5)].StrVal), true); - std::string AsmStr = std::string((yyvsp[(3) - (5)].StrVal), End); - End = UnEscapeLexed((yyvsp[(5) - (5)].StrVal), true); - std::string Constraints = std::string((yyvsp[(5) - (5)].StrVal), End); - (yyval.ValIDVal) = ValID::createInlineAsm(AsmStr, Constraints, (yyvsp[(2) - (5)].BoolVal)); - free((yyvsp[(3) - (5)].StrVal)); - free((yyvsp[(5) - (5)].StrVal)); - CHECK_FOR_ERROR - ;} - break; - - case 238: -#line 2408 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { // Is it an integer reference...? - (yyval.ValIDVal) = ValID::createLocalID((yyvsp[(1) - (1)].UIntVal)); - CHECK_FOR_ERROR - ;} - break; - - case 239: -#line 2412 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - (yyval.ValIDVal) = ValID::createGlobalID((yyvsp[(1) - (1)].UIntVal)); - CHECK_FOR_ERROR - ;} - break; - - case 240: -#line 2416 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { // Is it a named reference...? - (yyval.ValIDVal) = ValID::createLocalName((yyvsp[(1) - (1)].StrVal)); - CHECK_FOR_ERROR - ;} - break; - - case 241: -#line 2420 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { // Is it a named reference...? - (yyval.ValIDVal) = ValID::createGlobalName((yyvsp[(1) - (1)].StrVal)); - CHECK_FOR_ERROR - ;} - break; - - case 244: -#line 2432 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - if (!UpRefs.empty()) - GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (2)].TypeVal))->getDescription()); - (yyval.ValueVal) = getVal(*(yyvsp[(1) - (2)].TypeVal), (yyvsp[(2) - (2)].ValIDVal)); - delete (yyvsp[(1) - (2)].TypeVal); - CHECK_FOR_ERROR - ;} - break; - - case 245: -#line 2441 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - (yyval.FunctionVal) = (yyvsp[(1) - (2)].FunctionVal); - CHECK_FOR_ERROR - ;} - break; - - case 246: -#line 2445 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { // Do not allow functions with 0 basic blocks - (yyval.FunctionVal) = (yyvsp[(1) - (2)].FunctionVal); - CHECK_FOR_ERROR - ;} - break; - - case 247: -#line 2454 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - setValueName((yyvsp[(3) - (3)].TermInstVal), (yyvsp[(2) - (3)].StrVal)); - CHECK_FOR_ERROR - InsertValue((yyvsp[(3) - (3)].TermInstVal)); - (yyvsp[(1) - (3)].BasicBlockVal)->getInstList().push_back((yyvsp[(3) - (3)].TermInstVal)); - (yyval.BasicBlockVal) = (yyvsp[(1) - (3)].BasicBlockVal); - CHECK_FOR_ERROR - ;} - break; - - case 248: -#line 2463 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - if (CastInst *CI1 = dyn_cast((yyvsp[(2) - (2)].InstVal))) - if (CastInst *CI2 = dyn_cast(CI1->getOperand(0))) - if (CI2->getParent() == 0) - (yyvsp[(1) - (2)].BasicBlockVal)->getInstList().push_back(CI2); - (yyvsp[(1) - (2)].BasicBlockVal)->getInstList().push_back((yyvsp[(2) - (2)].InstVal)); - (yyval.BasicBlockVal) = (yyvsp[(1) - (2)].BasicBlockVal); - CHECK_FOR_ERROR - ;} - break; - - case 249: -#line 2472 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { // Empty space between instruction lists - (yyval.BasicBlockVal) = defineBBVal(ValID::createLocalID(CurFun.NextValNum)); - CHECK_FOR_ERROR - ;} - break; - - case 250: -#line 2476 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { // Labelled (named) basic block - (yyval.BasicBlockVal) = defineBBVal(ValID::createLocalName((yyvsp[(1) - (1)].StrVal))); - CHECK_FOR_ERROR - ;} - break; - - case 251: -#line 2481 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { // Return with a result... - (yyval.TermInstVal) = new ReturnInst((yyvsp[(2) - (2)].ValueVal)); - CHECK_FOR_ERROR - ;} - break; + NumElements) + ) + ); + + // Verify all elements are correct type! + for (unsigned i = 0; i < yyvsp[-1].ConstVector->size(); i++) { + if (ETy != (*yyvsp[-1].ConstVector)[i]->getType()) + GEN_ERROR("Element #" + utostr(i) + " is not of type '" + + ETy->getDescription() +"' as required!\nIt is of type '" + + (*yyvsp[-1].ConstVector)[i]->getType()->getDescription() + "'."); + } - case 252: -#line 2485 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { // Return with no result... - (yyval.TermInstVal) = new ReturnInst(); + yyval.ValIDVal = ValID::create(ConstantVector::get(pt, *yyvsp[-1].ConstVector)); + delete PTy; delete yyvsp[-1].ConstVector; CHECK_FOR_ERROR - ;} - break; - - case 253: -#line 2489 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { // Unconditional Branch... - BasicBlock* tmpBB = getBBVal((yyvsp[(3) - (3)].ValIDVal)); + ; + break;} +case 235: +#line 2395 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + yyval.ValIDVal = ValID::create(yyvsp[0].ConstVal); CHECK_FOR_ERROR - (yyval.TermInstVal) = new BranchInst(tmpBB); - ;} - break; - - case 254: -#line 2494 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - assert(cast((yyvsp[(2) - (9)].PrimType))->getBitWidth() == 1 && "Not Bool?"); - BasicBlock* tmpBBA = getBBVal((yyvsp[(6) - (9)].ValIDVal)); + ; + break;} +case 236: +#line 2399 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + char *End = UnEscapeLexed(yyvsp[-2].StrVal, true); + std::string AsmStr = std::string(yyvsp[-2].StrVal, End); + End = UnEscapeLexed(yyvsp[0].StrVal, true); + std::string Constraints = std::string(yyvsp[0].StrVal, End); + yyval.ValIDVal = ValID::createInlineAsm(AsmStr, Constraints, yyvsp[-3].BoolVal); + free(yyvsp[-2].StrVal); + free(yyvsp[0].StrVal); + CHECK_FOR_ERROR + ; + break;} +case 237: +#line 2413 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ // Is it an integer reference...? + yyval.ValIDVal = ValID::createLocalID(yyvsp[0].UIntVal); + CHECK_FOR_ERROR + ; + break;} +case 238: +#line 2417 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + yyval.ValIDVal = ValID::createGlobalID(yyvsp[0].UIntVal); CHECK_FOR_ERROR - BasicBlock* tmpBBB = getBBVal((yyvsp[(9) - (9)].ValIDVal)); + ; + break;} +case 239: +#line 2421 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ // Is it a named reference...? + yyval.ValIDVal = ValID::createLocalName(yyvsp[0].StrVal); + CHECK_FOR_ERROR + ; + break;} +case 240: +#line 2425 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ // Is it a named reference...? + yyval.ValIDVal = ValID::createGlobalName(yyvsp[0].StrVal); + CHECK_FOR_ERROR + ; + break;} +case 243: +#line 2437 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + if (!UpRefs.empty()) + GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription()); + yyval.ValueVal = getVal(*yyvsp[-1].TypeVal, yyvsp[0].ValIDVal); + delete yyvsp[-1].TypeVal; + CHECK_FOR_ERROR + ; + break;} +case 244: +#line 2446 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + yyval.FunctionVal = yyvsp[-1].FunctionVal; CHECK_FOR_ERROR - Value* tmpVal = getVal(Type::Int1Ty, (yyvsp[(3) - (9)].ValIDVal)); + ; + break;} +case 245: +#line 2450 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ // Do not allow functions with 0 basic blocks + yyval.FunctionVal = yyvsp[-1].FunctionVal; + CHECK_FOR_ERROR + ; + break;} +case 246: +#line 2459 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + setValueName(yyvsp[0].TermInstVal, yyvsp[-1].StrVal); CHECK_FOR_ERROR - (yyval.TermInstVal) = new BranchInst(tmpBBA, tmpBBB, tmpVal); - ;} - break; - - case 255: -#line 2504 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - Value* tmpVal = getVal((yyvsp[(2) - (9)].PrimType), (yyvsp[(3) - (9)].ValIDVal)); + InsertValue(yyvsp[0].TermInstVal); + yyvsp[-2].BasicBlockVal->getInstList().push_back(yyvsp[0].TermInstVal); + yyval.BasicBlockVal = yyvsp[-2].BasicBlockVal; + CHECK_FOR_ERROR + ; + break;} +case 247: +#line 2468 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + if (CastInst *CI1 = dyn_cast(yyvsp[0].InstVal)) + if (CastInst *CI2 = dyn_cast(CI1->getOperand(0))) + if (CI2->getParent() == 0) + yyvsp[-1].BasicBlockVal->getInstList().push_back(CI2); + yyvsp[-1].BasicBlockVal->getInstList().push_back(yyvsp[0].InstVal); + yyval.BasicBlockVal = yyvsp[-1].BasicBlockVal; + CHECK_FOR_ERROR + ; + break;} +case 248: +#line 2477 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ // Empty space between instruction lists + yyval.BasicBlockVal = defineBBVal(ValID::createLocalID(CurFun.NextValNum)); + CHECK_FOR_ERROR + ; + break;} +case 249: +#line 2481 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ // Labelled (named) basic block + yyval.BasicBlockVal = defineBBVal(ValID::createLocalName(yyvsp[0].StrVal)); + CHECK_FOR_ERROR + ; + break;} +case 250: +#line 2486 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ // Return with a result... + yyval.TermInstVal = new ReturnInst(yyvsp[0].ValueVal); + CHECK_FOR_ERROR + ; + break;} +case 251: +#line 2490 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ // Return with no result... + yyval.TermInstVal = new ReturnInst(); + CHECK_FOR_ERROR + ; + break;} +case 252: +#line 2494 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ // Unconditional Branch... + BasicBlock* tmpBB = getBBVal(yyvsp[0].ValIDVal); + CHECK_FOR_ERROR + yyval.TermInstVal = new BranchInst(tmpBB); + ; + break;} +case 253: +#line 2499 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + assert(cast(yyvsp[-7].PrimType)->getBitWidth() == 1 && "Not Bool?"); + BasicBlock* tmpBBA = getBBVal(yyvsp[-3].ValIDVal); + CHECK_FOR_ERROR + BasicBlock* tmpBBB = getBBVal(yyvsp[0].ValIDVal); + CHECK_FOR_ERROR + Value* tmpVal = getVal(Type::Int1Ty, yyvsp[-6].ValIDVal); + CHECK_FOR_ERROR + yyval.TermInstVal = new BranchInst(tmpBBA, tmpBBB, tmpVal); + ; + break;} +case 254: +#line 2509 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + Value* tmpVal = getVal(yyvsp[-7].PrimType, yyvsp[-6].ValIDVal); CHECK_FOR_ERROR - BasicBlock* tmpBB = getBBVal((yyvsp[(6) - (9)].ValIDVal)); + BasicBlock* tmpBB = getBBVal(yyvsp[-3].ValIDVal); CHECK_FOR_ERROR - SwitchInst *S = new SwitchInst(tmpVal, tmpBB, (yyvsp[(8) - (9)].JumpTable)->size()); - (yyval.TermInstVal) = S; + SwitchInst *S = new SwitchInst(tmpVal, tmpBB, yyvsp[-1].JumpTable->size()); + yyval.TermInstVal = S; - std::vector >::iterator I = (yyvsp[(8) - (9)].JumpTable)->begin(), - E = (yyvsp[(8) - (9)].JumpTable)->end(); + std::vector >::iterator I = yyvsp[-1].JumpTable->begin(), + E = yyvsp[-1].JumpTable->end(); for (; I != E; ++I) { if (ConstantInt *CI = dyn_cast(I->first)) S->addCase(CI, I->second); else GEN_ERROR("Switch case is constant, but not a simple integer"); } - delete (yyvsp[(8) - (9)].JumpTable); + delete yyvsp[-1].JumpTable; CHECK_FOR_ERROR - ;} - break; - - case 256: -#line 2523 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - Value* tmpVal = getVal((yyvsp[(2) - (8)].PrimType), (yyvsp[(3) - (8)].ValIDVal)); + ; + break;} +case 255: +#line 2528 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + Value* tmpVal = getVal(yyvsp[-6].PrimType, yyvsp[-5].ValIDVal); CHECK_FOR_ERROR - BasicBlock* tmpBB = getBBVal((yyvsp[(6) - (8)].ValIDVal)); + BasicBlock* tmpBB = getBBVal(yyvsp[-2].ValIDVal); CHECK_FOR_ERROR SwitchInst *S = new SwitchInst(tmpVal, tmpBB, 0); - (yyval.TermInstVal) = S; + yyval.TermInstVal = S; CHECK_FOR_ERROR - ;} - break; - - case 257: -#line 2533 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 256: +#line 2538 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ // Handle the short syntax const PointerType *PFTy = 0; const FunctionType *Ty = 0; - if (!(PFTy = dyn_cast((yyvsp[(3) - (14)].TypeVal)->get())) || + if (!(PFTy = dyn_cast(yyvsp[-11].TypeVal->get())) || !(Ty = dyn_cast(PFTy->getElementType()))) { // Pull out the types of all of the arguments... std::vector ParamTypes; ParamAttrsVector Attrs; - if ((yyvsp[(8) - (14)].ParamAttrs) != ParamAttr::None) { + if (yyvsp[-6].ParamAttrs != ParamAttr::None) { ParamAttrsWithIndex PAWI; PAWI.index = 0; PAWI.attrs = 8; Attrs.push_back(PAWI); } - ValueRefList::iterator I = (yyvsp[(6) - (14)].ValueRefList)->begin(), E = (yyvsp[(6) - (14)].ValueRefList)->end(); + ValueRefList::iterator I = yyvsp[-8].ValueRefList->begin(), E = yyvsp[-8].ValueRefList->end(); unsigned index = 1; for (; I != E; ++I, ++index) { const Type *Ty = I->Val->getType(); @@ -5413,22 +4362,22 @@ ParamAttrsList *PAL = 0; if (!Attrs.empty()) PAL = ParamAttrsList::get(Attrs); - Ty = FunctionType::get((yyvsp[(3) - (14)].TypeVal)->get(), ParamTypes, false, PAL); + Ty = FunctionType::get(yyvsp[-11].TypeVal->get(), ParamTypes, false, PAL); PFTy = PointerType::get(Ty); } - delete (yyvsp[(3) - (14)].TypeVal); + delete yyvsp[-11].TypeVal; - Value *V = getVal(PFTy, (yyvsp[(4) - (14)].ValIDVal)); // Get the function we're calling... + Value *V = getVal(PFTy, yyvsp[-10].ValIDVal); // Get the function we're calling... CHECK_FOR_ERROR - BasicBlock *Normal = getBBVal((yyvsp[(11) - (14)].ValIDVal)); + BasicBlock *Normal = getBBVal(yyvsp[-3].ValIDVal); CHECK_FOR_ERROR - BasicBlock *Except = getBBVal((yyvsp[(14) - (14)].ValIDVal)); + BasicBlock *Except = getBBVal(yyvsp[0].ValIDVal); CHECK_FOR_ERROR // Check the arguments ValueList Args; - if ((yyvsp[(6) - (14)].ValueRefList)->empty()) { // Has no arguments? + if (yyvsp[-8].ValueRefList->empty()) { // Has no arguments? // Make sure no arguments is a good thing! if (Ty->getNumParams() != 0) GEN_ERROR("No arguments passed to a function that " @@ -5438,7 +4387,7 @@ // correctly! FunctionType::param_iterator I = Ty->param_begin(); FunctionType::param_iterator E = Ty->param_end(); - ValueRefList::iterator ArgI = (yyvsp[(6) - (14)].ValueRefList)->begin(), ArgE = (yyvsp[(6) - (14)].ValueRefList)->end(); + ValueRefList::iterator ArgI = yyvsp[-8].ValueRefList->begin(), ArgE = yyvsp[-8].ValueRefList->end(); for (; ArgI != ArgE && I != E; ++ArgI, ++I) { if (ArgI->Val->getType() != *I) @@ -5457,348 +4406,322 @@ // Create the InvokeInst InvokeInst *II = new InvokeInst(V, Normal, Except, &Args[0], Args.size()); - II->setCallingConv((yyvsp[(2) - (14)].UIntVal)); - (yyval.TermInstVal) = II; - delete (yyvsp[(6) - (14)].ValueRefList); - CHECK_FOR_ERROR - ;} - break; - - case 258: -#line 2612 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - (yyval.TermInstVal) = new UnwindInst(); + II->setCallingConv(yyvsp[-12].UIntVal); + yyval.TermInstVal = II; + delete yyvsp[-8].ValueRefList; + CHECK_FOR_ERROR + ; + break;} +case 257: +#line 2617 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + yyval.TermInstVal = new UnwindInst(); CHECK_FOR_ERROR - ;} - break; - - case 259: -#line 2616 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - (yyval.TermInstVal) = new UnreachableInst(); + ; + break;} +case 258: +#line 2621 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + yyval.TermInstVal = new UnreachableInst(); CHECK_FOR_ERROR - ;} - break; - - case 260: -#line 2623 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - (yyval.JumpTable) = (yyvsp[(1) - (6)].JumpTable); - Constant *V = cast(getExistingVal((yyvsp[(2) - (6)].PrimType), (yyvsp[(3) - (6)].ValIDVal))); + ; + break;} +case 259: +#line 2628 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + yyval.JumpTable = yyvsp[-5].JumpTable; + Constant *V = cast(getExistingVal(yyvsp[-4].PrimType, yyvsp[-3].ValIDVal)); CHECK_FOR_ERROR if (V == 0) GEN_ERROR("May only switch on a constant pool value"); - BasicBlock* tmpBB = getBBVal((yyvsp[(6) - (6)].ValIDVal)); + BasicBlock* tmpBB = getBBVal(yyvsp[0].ValIDVal); CHECK_FOR_ERROR - (yyval.JumpTable)->push_back(std::make_pair(V, tmpBB)); - ;} - break; - - case 261: -#line 2634 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - (yyval.JumpTable) = new std::vector >(); - Constant *V = cast(getExistingVal((yyvsp[(1) - (5)].PrimType), (yyvsp[(2) - (5)].ValIDVal))); + yyval.JumpTable->push_back(std::make_pair(V, tmpBB)); + ; + break;} +case 260: +#line 2639 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + yyval.JumpTable = new std::vector >(); + Constant *V = cast(getExistingVal(yyvsp[-4].PrimType, yyvsp[-3].ValIDVal)); CHECK_FOR_ERROR if (V == 0) GEN_ERROR("May only switch on a constant pool value"); - BasicBlock* tmpBB = getBBVal((yyvsp[(5) - (5)].ValIDVal)); + BasicBlock* tmpBB = getBBVal(yyvsp[0].ValIDVal); CHECK_FOR_ERROR - (yyval.JumpTable)->push_back(std::make_pair(V, tmpBB)); - ;} - break; - - case 262: -#line 2647 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { + yyval.JumpTable->push_back(std::make_pair(V, tmpBB)); + ; + break;} +case 261: +#line 2652 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ // Is this definition named?? if so, assign the name... - setValueName((yyvsp[(2) - (2)].InstVal), (yyvsp[(1) - (2)].StrVal)); + setValueName(yyvsp[0].InstVal, yyvsp[-1].StrVal); CHECK_FOR_ERROR - InsertValue((yyvsp[(2) - (2)].InstVal)); - (yyval.InstVal) = (yyvsp[(2) - (2)].InstVal); + InsertValue(yyvsp[0].InstVal); + yyval.InstVal = yyvsp[0].InstVal; CHECK_FOR_ERROR - ;} - break; - - case 263: -#line 2657 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { // Used for PHI nodes + ; + break;} +case 262: +#line 2662 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ // Used for PHI nodes if (!UpRefs.empty()) - GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (6)].TypeVal))->getDescription()); - (yyval.PHIList) = new std::list >(); - Value* tmpVal = getVal(*(yyvsp[(1) - (6)].TypeVal), (yyvsp[(3) - (6)].ValIDVal)); - CHECK_FOR_ERROR - BasicBlock* tmpBB = getBBVal((yyvsp[(5) - (6)].ValIDVal)); - CHECK_FOR_ERROR - (yyval.PHIList)->push_back(std::make_pair(tmpVal, tmpBB)); - delete (yyvsp[(1) - (6)].TypeVal); - ;} - break; - - case 264: -#line 2668 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - (yyval.PHIList) = (yyvsp[(1) - (7)].PHIList); - Value* tmpVal = getVal((yyvsp[(1) - (7)].PHIList)->front().first->getType(), (yyvsp[(4) - (7)].ValIDVal)); + GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-5].TypeVal)->getDescription()); + yyval.PHIList = new std::list >(); + Value* tmpVal = getVal(*yyvsp[-5].TypeVal, yyvsp[-3].ValIDVal); + CHECK_FOR_ERROR + BasicBlock* tmpBB = getBBVal(yyvsp[-1].ValIDVal); + CHECK_FOR_ERROR + yyval.PHIList->push_back(std::make_pair(tmpVal, tmpBB)); + delete yyvsp[-5].TypeVal; + ; + break;} +case 263: +#line 2673 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + yyval.PHIList = yyvsp[-6].PHIList; + Value* tmpVal = getVal(yyvsp[-6].PHIList->front().first->getType(), yyvsp[-3].ValIDVal); CHECK_FOR_ERROR - BasicBlock* tmpBB = getBBVal((yyvsp[(6) - (7)].ValIDVal)); + BasicBlock* tmpBB = getBBVal(yyvsp[-1].ValIDVal); CHECK_FOR_ERROR - (yyvsp[(1) - (7)].PHIList)->push_back(std::make_pair(tmpVal, tmpBB)); - ;} - break; - - case 265: -#line 2678 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { + yyvsp[-6].PHIList->push_back(std::make_pair(tmpVal, tmpBB)); + ; + break;} +case 264: +#line 2683 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ if (!UpRefs.empty()) - GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (3)].TypeVal))->getDescription()); + GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription()); // Used for call and invoke instructions - (yyval.ValueRefList) = new ValueRefList(); - ValueRefListEntry E; E.Attrs = (yyvsp[(3) - (3)].ParamAttrs); E.Val = getVal((yyvsp[(1) - (3)].TypeVal)->get(), (yyvsp[(2) - (3)].ValIDVal)); - (yyval.ValueRefList)->push_back(E); - delete (yyvsp[(1) - (3)].TypeVal); - ;} - break; - - case 266: -#line 2687 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { + yyval.ValueRefList = new ValueRefList(); + ValueRefListEntry E; E.Attrs = yyvsp[0].ParamAttrs; E.Val = getVal(yyvsp[-2].TypeVal->get(), yyvsp[-1].ValIDVal); + yyval.ValueRefList->push_back(E); + delete yyvsp[-2].TypeVal; + ; + break;} +case 265: +#line 2692 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ if (!UpRefs.empty()) - GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(3) - (5)].TypeVal))->getDescription()); - (yyval.ValueRefList) = (yyvsp[(1) - (5)].ValueRefList); - ValueRefListEntry E; E.Attrs = (yyvsp[(5) - (5)].ParamAttrs); E.Val = getVal((yyvsp[(3) - (5)].TypeVal)->get(), (yyvsp[(4) - (5)].ValIDVal)); - (yyval.ValueRefList)->push_back(E); - delete (yyvsp[(3) - (5)].TypeVal); - CHECK_FOR_ERROR - ;} - break; - - case 267: -#line 2696 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { (yyval.ValueRefList) = new ValueRefList(); ;} - break; - - case 268: -#line 2699 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { (yyval.ValueList) = new std::vector(); ;} - break; - - case 269: -#line 2700 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - (yyval.ValueList) = (yyvsp[(1) - (3)].ValueList); - (yyval.ValueList)->push_back((yyvsp[(3) - (3)].ValueVal)); + GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription()); + yyval.ValueRefList = yyvsp[-4].ValueRefList; + ValueRefListEntry E; E.Attrs = yyvsp[0].ParamAttrs; E.Val = getVal(yyvsp[-2].TypeVal->get(), yyvsp[-1].ValIDVal); + yyval.ValueRefList->push_back(E); + delete yyvsp[-2].TypeVal; + CHECK_FOR_ERROR + ; + break;} +case 266: +#line 2701 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.ValueRefList = new ValueRefList(); ; + break;} +case 267: +#line 2704 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.ValueList = new std::vector(); ; + break;} +case 268: +#line 2705 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + yyval.ValueList = yyvsp[-2].ValueList; + yyval.ValueList->push_back(yyvsp[0].ValueVal); CHECK_FOR_ERROR - ;} - break; - - case 270: -#line 2707 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - (yyval.BoolVal) = true; + ; + break;} +case 269: +#line 2712 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + yyval.BoolVal = true; CHECK_FOR_ERROR - ;} - break; - - case 271: -#line 2711 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - (yyval.BoolVal) = false; + ; + break;} +case 270: +#line 2716 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + yyval.BoolVal = false; CHECK_FOR_ERROR - ;} - break; - - case 272: -#line 2716 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 271: +#line 2721 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ if (!UpRefs.empty()) - GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(2) - (5)].TypeVal))->getDescription()); - if (!(*(yyvsp[(2) - (5)].TypeVal))->isInteger() && !(*(yyvsp[(2) - (5)].TypeVal))->isFloatingPoint() && - !isa((*(yyvsp[(2) - (5)].TypeVal)).get())) + GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription()); + if (!(*yyvsp[-3].TypeVal)->isInteger() && !(*yyvsp[-3].TypeVal)->isFloatingPoint() && + !isa((*yyvsp[-3].TypeVal).get())) GEN_ERROR( "Arithmetic operator requires integer, FP, or packed operands"); - if (isa((*(yyvsp[(2) - (5)].TypeVal)).get()) && - ((yyvsp[(1) - (5)].BinaryOpVal) == Instruction::URem || - (yyvsp[(1) - (5)].BinaryOpVal) == Instruction::SRem || - (yyvsp[(1) - (5)].BinaryOpVal) == Instruction::FRem)) + if (isa((*yyvsp[-3].TypeVal).get()) && + (yyvsp[-4].BinaryOpVal == Instruction::URem || + yyvsp[-4].BinaryOpVal == Instruction::SRem || + yyvsp[-4].BinaryOpVal == Instruction::FRem)) GEN_ERROR("Remainder not supported on vector types"); - Value* val1 = getVal(*(yyvsp[(2) - (5)].TypeVal), (yyvsp[(3) - (5)].ValIDVal)); + Value* val1 = getVal(*yyvsp[-3].TypeVal, yyvsp[-2].ValIDVal); CHECK_FOR_ERROR - Value* val2 = getVal(*(yyvsp[(2) - (5)].TypeVal), (yyvsp[(5) - (5)].ValIDVal)); + Value* val2 = getVal(*yyvsp[-3].TypeVal, yyvsp[0].ValIDVal); CHECK_FOR_ERROR - (yyval.InstVal) = BinaryOperator::create((yyvsp[(1) - (5)].BinaryOpVal), val1, val2); - if ((yyval.InstVal) == 0) + yyval.InstVal = BinaryOperator::create(yyvsp[-4].BinaryOpVal, val1, val2); + if (yyval.InstVal == 0) GEN_ERROR("binary operator returned null"); - delete (yyvsp[(2) - (5)].TypeVal); - ;} - break; - - case 273: -#line 2737 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { + delete yyvsp[-3].TypeVal; + ; + break;} +case 272: +#line 2742 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ if (!UpRefs.empty()) - GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(2) - (5)].TypeVal))->getDescription()); - if (!(*(yyvsp[(2) - (5)].TypeVal))->isInteger()) { - if (Instruction::isShift((yyvsp[(1) - (5)].BinaryOpVal)) || !isa((yyvsp[(2) - (5)].TypeVal)->get()) || - !cast((yyvsp[(2) - (5)].TypeVal)->get())->getElementType()->isInteger()) + GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription()); + if (!(*yyvsp[-3].TypeVal)->isInteger()) { + if (Instruction::isShift(yyvsp[-4].BinaryOpVal) || !isa(yyvsp[-3].TypeVal->get()) || + !cast(yyvsp[-3].TypeVal->get())->getElementType()->isInteger()) GEN_ERROR("Logical operator requires integral operands"); } - Value* tmpVal1 = getVal(*(yyvsp[(2) - (5)].TypeVal), (yyvsp[(3) - (5)].ValIDVal)); + Value* tmpVal1 = getVal(*yyvsp[-3].TypeVal, yyvsp[-2].ValIDVal); CHECK_FOR_ERROR - Value* tmpVal2 = getVal(*(yyvsp[(2) - (5)].TypeVal), (yyvsp[(5) - (5)].ValIDVal)); + Value* tmpVal2 = getVal(*yyvsp[-3].TypeVal, yyvsp[0].ValIDVal); CHECK_FOR_ERROR - (yyval.InstVal) = BinaryOperator::create((yyvsp[(1) - (5)].BinaryOpVal), tmpVal1, tmpVal2); - if ((yyval.InstVal) == 0) + yyval.InstVal = BinaryOperator::create(yyvsp[-4].BinaryOpVal, tmpVal1, tmpVal2); + if (yyval.InstVal == 0) GEN_ERROR("binary operator returned null"); - delete (yyvsp[(2) - (5)].TypeVal); - ;} - break; - - case 274: -#line 2754 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { + delete yyvsp[-3].TypeVal; + ; + break;} +case 273: +#line 2759 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ if (!UpRefs.empty()) - GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(3) - (6)].TypeVal))->getDescription()); - if (isa((*(yyvsp[(3) - (6)].TypeVal)).get())) + GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription()); + if (isa((*yyvsp[-3].TypeVal).get())) GEN_ERROR("Vector types not supported by icmp instruction"); - Value* tmpVal1 = getVal(*(yyvsp[(3) - (6)].TypeVal), (yyvsp[(4) - (6)].ValIDVal)); + Value* tmpVal1 = getVal(*yyvsp[-3].TypeVal, yyvsp[-2].ValIDVal); CHECK_FOR_ERROR - Value* tmpVal2 = getVal(*(yyvsp[(3) - (6)].TypeVal), (yyvsp[(6) - (6)].ValIDVal)); + Value* tmpVal2 = getVal(*yyvsp[-3].TypeVal, yyvsp[0].ValIDVal); CHECK_FOR_ERROR - (yyval.InstVal) = CmpInst::create((yyvsp[(1) - (6)].OtherOpVal), (yyvsp[(2) - (6)].IPredicate), tmpVal1, tmpVal2); - if ((yyval.InstVal) == 0) + yyval.InstVal = CmpInst::create(yyvsp[-5].OtherOpVal, yyvsp[-4].IPredicate, tmpVal1, tmpVal2); + if (yyval.InstVal == 0) GEN_ERROR("icmp operator returned null"); - delete (yyvsp[(3) - (6)].TypeVal); - ;} - break; - - case 275: -#line 2768 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { + delete yyvsp[-3].TypeVal; + ; + break;} +case 274: +#line 2773 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ if (!UpRefs.empty()) - GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(3) - (6)].TypeVal))->getDescription()); - if (isa((*(yyvsp[(3) - (6)].TypeVal)).get())) + GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription()); + if (isa((*yyvsp[-3].TypeVal).get())) GEN_ERROR("Vector types not supported by fcmp instruction"); - Value* tmpVal1 = getVal(*(yyvsp[(3) - (6)].TypeVal), (yyvsp[(4) - (6)].ValIDVal)); + Value* tmpVal1 = getVal(*yyvsp[-3].TypeVal, yyvsp[-2].ValIDVal); CHECK_FOR_ERROR - Value* tmpVal2 = getVal(*(yyvsp[(3) - (6)].TypeVal), (yyvsp[(6) - (6)].ValIDVal)); + Value* tmpVal2 = getVal(*yyvsp[-3].TypeVal, yyvsp[0].ValIDVal); CHECK_FOR_ERROR - (yyval.InstVal) = CmpInst::create((yyvsp[(1) - (6)].OtherOpVal), (yyvsp[(2) - (6)].FPredicate), tmpVal1, tmpVal2); - if ((yyval.InstVal) == 0) + yyval.InstVal = CmpInst::create(yyvsp[-5].OtherOpVal, yyvsp[-4].FPredicate, tmpVal1, tmpVal2); + if (yyval.InstVal == 0) GEN_ERROR("fcmp operator returned null"); - delete (yyvsp[(3) - (6)].TypeVal); - ;} - break; - - case 276: -#line 2782 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { + delete yyvsp[-3].TypeVal; + ; + break;} +case 275: +#line 2787 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ if (!UpRefs.empty()) - GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(4) - (4)].TypeVal))->getDescription()); - Value* Val = (yyvsp[(2) - (4)].ValueVal); - const Type* DestTy = (yyvsp[(4) - (4)].TypeVal)->get(); - if (!CastInst::castIsValid((yyvsp[(1) - (4)].CastOpVal), Val, DestTy)) + GEN_ERROR("Invalid upreference in type: " + (*yyvsp[0].TypeVal)->getDescription()); + Value* Val = yyvsp[-2].ValueVal; + const Type* DestTy = yyvsp[0].TypeVal->get(); + if (!CastInst::castIsValid(yyvsp[-3].CastOpVal, Val, DestTy)) GEN_ERROR("invalid cast opcode for cast from '" + Val->getType()->getDescription() + "' to '" + DestTy->getDescription() + "'"); - (yyval.InstVal) = CastInst::create((yyvsp[(1) - (4)].CastOpVal), Val, DestTy); - delete (yyvsp[(4) - (4)].TypeVal); - ;} - break; - - case 277: -#line 2794 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - if ((yyvsp[(2) - (6)].ValueVal)->getType() != Type::Int1Ty) + yyval.InstVal = CastInst::create(yyvsp[-3].CastOpVal, Val, DestTy); + delete yyvsp[0].TypeVal; + ; + break;} +case 276: +#line 2799 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + if (yyvsp[-4].ValueVal->getType() != Type::Int1Ty) GEN_ERROR("select condition must be boolean"); - if ((yyvsp[(4) - (6)].ValueVal)->getType() != (yyvsp[(6) - (6)].ValueVal)->getType()) + if (yyvsp[-2].ValueVal->getType() != yyvsp[0].ValueVal->getType()) GEN_ERROR("select value types should match"); - (yyval.InstVal) = new SelectInst((yyvsp[(2) - (6)].ValueVal), (yyvsp[(4) - (6)].ValueVal), (yyvsp[(6) - (6)].ValueVal)); + yyval.InstVal = new SelectInst(yyvsp[-4].ValueVal, yyvsp[-2].ValueVal, yyvsp[0].ValueVal); CHECK_FOR_ERROR - ;} - break; - - case 278: -#line 2802 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 277: +#line 2807 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ if (!UpRefs.empty()) - GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(4) - (4)].TypeVal))->getDescription()); - (yyval.InstVal) = new VAArgInst((yyvsp[(2) - (4)].ValueVal), *(yyvsp[(4) - (4)].TypeVal)); - delete (yyvsp[(4) - (4)].TypeVal); - CHECK_FOR_ERROR - ;} - break; - - case 279: -#line 2809 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - if (!ExtractElementInst::isValidOperands((yyvsp[(2) - (4)].ValueVal), (yyvsp[(4) - (4)].ValueVal))) + GEN_ERROR("Invalid upreference in type: " + (*yyvsp[0].TypeVal)->getDescription()); + yyval.InstVal = new VAArgInst(yyvsp[-2].ValueVal, *yyvsp[0].TypeVal); + delete yyvsp[0].TypeVal; + CHECK_FOR_ERROR + ; + break;} +case 278: +#line 2814 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + if (!ExtractElementInst::isValidOperands(yyvsp[-2].ValueVal, yyvsp[0].ValueVal)) GEN_ERROR("Invalid extractelement operands"); - (yyval.InstVal) = new ExtractElementInst((yyvsp[(2) - (4)].ValueVal), (yyvsp[(4) - (4)].ValueVal)); + yyval.InstVal = new ExtractElementInst(yyvsp[-2].ValueVal, yyvsp[0].ValueVal); CHECK_FOR_ERROR - ;} - break; - - case 280: -#line 2815 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - if (!InsertElementInst::isValidOperands((yyvsp[(2) - (6)].ValueVal), (yyvsp[(4) - (6)].ValueVal), (yyvsp[(6) - (6)].ValueVal))) + ; + break;} +case 279: +#line 2820 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + if (!InsertElementInst::isValidOperands(yyvsp[-4].ValueVal, yyvsp[-2].ValueVal, yyvsp[0].ValueVal)) GEN_ERROR("Invalid insertelement operands"); - (yyval.InstVal) = new InsertElementInst((yyvsp[(2) - (6)].ValueVal), (yyvsp[(4) - (6)].ValueVal), (yyvsp[(6) - (6)].ValueVal)); + yyval.InstVal = new InsertElementInst(yyvsp[-4].ValueVal, yyvsp[-2].ValueVal, yyvsp[0].ValueVal); CHECK_FOR_ERROR - ;} - break; - - case 281: -#line 2821 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - if (!ShuffleVectorInst::isValidOperands((yyvsp[(2) - (6)].ValueVal), (yyvsp[(4) - (6)].ValueVal), (yyvsp[(6) - (6)].ValueVal))) + ; + break;} +case 280: +#line 2826 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + if (!ShuffleVectorInst::isValidOperands(yyvsp[-4].ValueVal, yyvsp[-2].ValueVal, yyvsp[0].ValueVal)) GEN_ERROR("Invalid shufflevector operands"); - (yyval.InstVal) = new ShuffleVectorInst((yyvsp[(2) - (6)].ValueVal), (yyvsp[(4) - (6)].ValueVal), (yyvsp[(6) - (6)].ValueVal)); + yyval.InstVal = new ShuffleVectorInst(yyvsp[-4].ValueVal, yyvsp[-2].ValueVal, yyvsp[0].ValueVal); CHECK_FOR_ERROR - ;} - break; - - case 282: -#line 2827 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - const Type *Ty = (yyvsp[(2) - (2)].PHIList)->front().first->getType(); + ; + break;} +case 281: +#line 2832 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + const Type *Ty = yyvsp[0].PHIList->front().first->getType(); if (!Ty->isFirstClassType()) GEN_ERROR("PHI node operands must be of first class type"); - (yyval.InstVal) = new PHINode(Ty); - ((PHINode*)(yyval.InstVal))->reserveOperandSpace((yyvsp[(2) - (2)].PHIList)->size()); - while ((yyvsp[(2) - (2)].PHIList)->begin() != (yyvsp[(2) - (2)].PHIList)->end()) { - if ((yyvsp[(2) - (2)].PHIList)->front().first->getType() != Ty) + yyval.InstVal = new PHINode(Ty); + ((PHINode*)yyval.InstVal)->reserveOperandSpace(yyvsp[0].PHIList->size()); + while (yyvsp[0].PHIList->begin() != yyvsp[0].PHIList->end()) { + if (yyvsp[0].PHIList->front().first->getType() != Ty) GEN_ERROR("All elements of a PHI node must be of the same type"); - cast((yyval.InstVal))->addIncoming((yyvsp[(2) - (2)].PHIList)->front().first, (yyvsp[(2) - (2)].PHIList)->front().second); - (yyvsp[(2) - (2)].PHIList)->pop_front(); + cast(yyval.InstVal)->addIncoming(yyvsp[0].PHIList->front().first, yyvsp[0].PHIList->front().second); + yyvsp[0].PHIList->pop_front(); } - delete (yyvsp[(2) - (2)].PHIList); // Free the list... + delete yyvsp[0].PHIList; // Free the list... CHECK_FOR_ERROR - ;} - break; - - case 283: -#line 2843 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 282: +#line 2848 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ // Handle the short syntax const PointerType *PFTy = 0; const FunctionType *Ty = 0; - if (!(PFTy = dyn_cast((yyvsp[(3) - (8)].TypeVal)->get())) || + if (!(PFTy = dyn_cast(yyvsp[-5].TypeVal->get())) || !(Ty = dyn_cast(PFTy->getElementType()))) { // Pull out the types of all of the arguments... std::vector ParamTypes; ParamAttrsVector Attrs; - if ((yyvsp[(8) - (8)].ParamAttrs) != ParamAttr::None) { - ParamAttrsWithIndex PAWI; PAWI.index = 0; PAWI.attrs = (yyvsp[(8) - (8)].ParamAttrs); + if (yyvsp[0].ParamAttrs != ParamAttr::None) { + ParamAttrsWithIndex PAWI; PAWI.index = 0; PAWI.attrs = yyvsp[0].ParamAttrs; Attrs.push_back(PAWI); } unsigned index = 1; - ValueRefList::iterator I = (yyvsp[(6) - (8)].ValueRefList)->begin(), E = (yyvsp[(6) - (8)].ValueRefList)->end(); + ValueRefList::iterator I = yyvsp[-2].ValueRefList->begin(), E = yyvsp[-2].ValueRefList->end(); for (; I != E; ++I, ++index) { const Type *Ty = I->Val->getType(); if (Ty == Type::VoidTy) @@ -5814,13 +4737,13 @@ if (!Attrs.empty()) PAL = ParamAttrsList::get(Attrs); - Ty = FunctionType::get((yyvsp[(3) - (8)].TypeVal)->get(), ParamTypes, false, PAL); + Ty = FunctionType::get(yyvsp[-5].TypeVal->get(), ParamTypes, false, PAL); PFTy = PointerType::get(Ty); } - - Value *V = getVal(PFTy, (yyvsp[(4) - (8)].ValIDVal)); // Get the function we're calling... + + Value *V = getVal(PFTy, yyvsp[-4].ValIDVal); // Get the function we're calling... CHECK_FOR_ERROR - + // Check for call to invalid intrinsic to avoid crashing later. if (Function *theF = dyn_cast(V)) { if (theF->hasName() && (theF->getValueName()->getKeyLength() >= 5) && @@ -5832,7 +4755,7 @@ // Check the arguments ValueList Args; - if ((yyvsp[(6) - (8)].ValueRefList)->empty()) { // Has no arguments? + if (yyvsp[-2].ValueRefList->empty()) { // Has no arguments? // Make sure no arguments is a good thing! if (Ty->getNumParams() != 0) GEN_ERROR("No arguments passed to a function that " @@ -5843,7 +4766,7 @@ // FunctionType::param_iterator I = Ty->param_begin(); FunctionType::param_iterator E = Ty->param_end(); - ValueRefList::iterator ArgI = (yyvsp[(6) - (8)].ValueRefList)->begin(), ArgE = (yyvsp[(6) - (8)].ValueRefList)->end(); + ValueRefList::iterator ArgI = yyvsp[-2].ValueRefList->begin(), ArgE = yyvsp[-2].ValueRefList->end(); for (; ArgI != ArgE && I != E; ++ArgI, ++I) { if (ArgI->Val->getType() != *I) @@ -5860,371 +4783,365 @@ } // Create the call node CallInst *CI = new CallInst(V, &Args[0], Args.size()); - CI->setTailCall((yyvsp[(1) - (8)].BoolVal)); - CI->setCallingConv((yyvsp[(2) - (8)].UIntVal)); - (yyval.InstVal) = CI; - delete (yyvsp[(6) - (8)].ValueRefList); - delete (yyvsp[(3) - (8)].TypeVal); - CHECK_FOR_ERROR - ;} - break; - - case 284: -#line 2927 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - (yyval.InstVal) = (yyvsp[(1) - (1)].InstVal); + CI->setTailCall(yyvsp[-7].BoolVal); + CI->setCallingConv(yyvsp[-6].UIntVal); + yyval.InstVal = CI; + delete yyvsp[-2].ValueRefList; + delete yyvsp[-5].TypeVal; + CHECK_FOR_ERROR + ; + break;} +case 283: +#line 2932 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + yyval.InstVal = yyvsp[0].InstVal; CHECK_FOR_ERROR - ;} - break; - - case 285: -#line 2932 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - (yyval.BoolVal) = true; + ; + break;} +case 284: +#line 2937 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + yyval.BoolVal = true; CHECK_FOR_ERROR - ;} - break; - - case 286: -#line 2936 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - (yyval.BoolVal) = false; + ; + break;} +case 285: +#line 2941 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + yyval.BoolVal = false; CHECK_FOR_ERROR - ;} - break; - - case 287: -#line 2943 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 286: +#line 2948 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ if (!UpRefs.empty()) - GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(2) - (3)].TypeVal))->getDescription()); - (yyval.InstVal) = new MallocInst(*(yyvsp[(2) - (3)].TypeVal), 0, (yyvsp[(3) - (3)].UIntVal)); - delete (yyvsp[(2) - (3)].TypeVal); - CHECK_FOR_ERROR - ;} - break; - - case 288: -#line 2950 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { + GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription()); + yyval.InstVal = new MallocInst(*yyvsp[-1].TypeVal, 0, yyvsp[0].UIntVal); + delete yyvsp[-1].TypeVal; + CHECK_FOR_ERROR + ; + break;} +case 287: +#line 2955 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ if (!UpRefs.empty()) - GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(2) - (6)].TypeVal))->getDescription()); - Value* tmpVal = getVal((yyvsp[(4) - (6)].PrimType), (yyvsp[(5) - (6)].ValIDVal)); + GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-4].TypeVal)->getDescription()); + Value* tmpVal = getVal(yyvsp[-2].PrimType, yyvsp[-1].ValIDVal); CHECK_FOR_ERROR - (yyval.InstVal) = new MallocInst(*(yyvsp[(2) - (6)].TypeVal), tmpVal, (yyvsp[(6) - (6)].UIntVal)); - delete (yyvsp[(2) - (6)].TypeVal); - ;} - break; - - case 289: -#line 2958 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { + yyval.InstVal = new MallocInst(*yyvsp[-4].TypeVal, tmpVal, yyvsp[0].UIntVal); + delete yyvsp[-4].TypeVal; + ; + break;} +case 288: +#line 2963 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ if (!UpRefs.empty()) - GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(2) - (3)].TypeVal))->getDescription()); - (yyval.InstVal) = new AllocaInst(*(yyvsp[(2) - (3)].TypeVal), 0, (yyvsp[(3) - (3)].UIntVal)); - delete (yyvsp[(2) - (3)].TypeVal); - CHECK_FOR_ERROR - ;} - break; - - case 290: -#line 2965 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { + GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription()); + yyval.InstVal = new AllocaInst(*yyvsp[-1].TypeVal, 0, yyvsp[0].UIntVal); + delete yyvsp[-1].TypeVal; + CHECK_FOR_ERROR + ; + break;} +case 289: +#line 2970 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ if (!UpRefs.empty()) - GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(2) - (6)].TypeVal))->getDescription()); - Value* tmpVal = getVal((yyvsp[(4) - (6)].PrimType), (yyvsp[(5) - (6)].ValIDVal)); + GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-4].TypeVal)->getDescription()); + Value* tmpVal = getVal(yyvsp[-2].PrimType, yyvsp[-1].ValIDVal); CHECK_FOR_ERROR - (yyval.InstVal) = new AllocaInst(*(yyvsp[(2) - (6)].TypeVal), tmpVal, (yyvsp[(6) - (6)].UIntVal)); - delete (yyvsp[(2) - (6)].TypeVal); - ;} - break; - - case 291: -#line 2973 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { - if (!isa((yyvsp[(2) - (2)].ValueVal)->getType())) + yyval.InstVal = new AllocaInst(*yyvsp[-4].TypeVal, tmpVal, yyvsp[0].UIntVal); + delete yyvsp[-4].TypeVal; + ; + break;} +case 290: +#line 2978 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ + if (!isa(yyvsp[0].ValueVal->getType())) GEN_ERROR("Trying to free nonpointer type " + - (yyvsp[(2) - (2)].ValueVal)->getType()->getDescription() + ""); - (yyval.InstVal) = new FreeInst((yyvsp[(2) - (2)].ValueVal)); + yyvsp[0].ValueVal->getType()->getDescription() + ""); + yyval.InstVal = new FreeInst(yyvsp[0].ValueVal); CHECK_FOR_ERROR - ;} - break; - - case 292: -#line 2981 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 291: +#line 2986 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ if (!UpRefs.empty()) - GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(3) - (5)].TypeVal))->getDescription()); - if (!isa((yyvsp[(3) - (5)].TypeVal)->get())) + GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription()); + if (!isa(yyvsp[-2].TypeVal->get())) GEN_ERROR("Can't load from nonpointer type: " + - (*(yyvsp[(3) - (5)].TypeVal))->getDescription()); - if (!cast((yyvsp[(3) - (5)].TypeVal)->get())->getElementType()->isFirstClassType()) + (*yyvsp[-2].TypeVal)->getDescription()); + if (!cast(yyvsp[-2].TypeVal->get())->getElementType()->isFirstClassType()) GEN_ERROR("Can't load from pointer of non-first-class type: " + - (*(yyvsp[(3) - (5)].TypeVal))->getDescription()); - Value* tmpVal = getVal(*(yyvsp[(3) - (5)].TypeVal), (yyvsp[(4) - (5)].ValIDVal)); + (*yyvsp[-2].TypeVal)->getDescription()); + Value* tmpVal = getVal(*yyvsp[-2].TypeVal, yyvsp[-1].ValIDVal); CHECK_FOR_ERROR - (yyval.InstVal) = new LoadInst(tmpVal, "", (yyvsp[(1) - (5)].BoolVal), (yyvsp[(5) - (5)].UIntVal)); - delete (yyvsp[(3) - (5)].TypeVal); - ;} - break; - - case 293: -#line 2995 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { + yyval.InstVal = new LoadInst(tmpVal, "", yyvsp[-4].BoolVal, yyvsp[0].UIntVal); + delete yyvsp[-2].TypeVal; + ; + break;} +case 292: +#line 3000 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ if (!UpRefs.empty()) - GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(5) - (7)].TypeVal))->getDescription()); - const PointerType *PT = dyn_cast((yyvsp[(5) - (7)].TypeVal)->get()); + GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription()); + const PointerType *PT = dyn_cast(yyvsp[-2].TypeVal->get()); if (!PT) GEN_ERROR("Can't store to a nonpointer type: " + - (*(yyvsp[(5) - (7)].TypeVal))->getDescription()); + (*yyvsp[-2].TypeVal)->getDescription()); const Type *ElTy = PT->getElementType(); - if (ElTy != (yyvsp[(3) - (7)].ValueVal)->getType()) - GEN_ERROR("Can't store '" + (yyvsp[(3) - (7)].ValueVal)->getType()->getDescription() + + if (ElTy != yyvsp[-4].ValueVal->getType()) + GEN_ERROR("Can't store '" + yyvsp[-4].ValueVal->getType()->getDescription() + "' into space of type '" + ElTy->getDescription() + "'"); - Value* tmpVal = getVal(*(yyvsp[(5) - (7)].TypeVal), (yyvsp[(6) - (7)].ValIDVal)); + Value* tmpVal = getVal(*yyvsp[-2].TypeVal, yyvsp[-1].ValIDVal); CHECK_FOR_ERROR - (yyval.InstVal) = new StoreInst((yyvsp[(3) - (7)].ValueVal), tmpVal, (yyvsp[(1) - (7)].BoolVal), (yyvsp[(7) - (7)].UIntVal)); - delete (yyvsp[(5) - (7)].TypeVal); - ;} - break; - - case 294: -#line 3012 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" - { + yyval.InstVal = new StoreInst(yyvsp[-4].ValueVal, tmpVal, yyvsp[-6].BoolVal, yyvsp[0].UIntVal); + delete yyvsp[-2].TypeVal; + ; + break;} +case 293: +#line 3017 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +{ if (!UpRefs.empty()) - GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(2) - (4)].TypeVal))->getDescription()); - if (!isa((yyvsp[(2) - (4)].TypeVal)->get())) + GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription()); + if (!isa(yyvsp[-2].TypeVal->get())) GEN_ERROR("getelementptr insn requires pointer operand"); - if (!GetElementPtrInst::getIndexedType(*(yyvsp[(2) - (4)].TypeVal), &(*(yyvsp[(4) - (4)].ValueList))[0], (yyvsp[(4) - (4)].ValueList)->size(), true)) + if (!GetElementPtrInst::getIndexedType(*yyvsp[-2].TypeVal, &(*yyvsp[0].ValueList)[0], yyvsp[0].ValueList->size(), true)) GEN_ERROR("Invalid getelementptr indices for type '" + - (*(yyvsp[(2) - (4)].TypeVal))->getDescription()+ "'"); - Value* tmpVal = getVal(*(yyvsp[(2) - (4)].TypeVal), (yyvsp[(3) - (4)].ValIDVal)); + (*yyvsp[-2].TypeVal)->getDescription()+ "'"); + Value* tmpVal = getVal(*yyvsp[-2].TypeVal, yyvsp[-1].ValIDVal); CHECK_FOR_ERROR - (yyval.InstVal) = new GetElementPtrInst(tmpVal, &(*(yyvsp[(4) - (4)].ValueList))[0], (yyvsp[(4) - (4)].ValueList)->size()); - delete (yyvsp[(2) - (4)].TypeVal); - delete (yyvsp[(4) - (4)].ValueList); - ;} - break; - + yyval.InstVal = new GetElementPtrInst(tmpVal, &(*yyvsp[0].ValueList)[0], yyvsp[0].ValueList->size()); + delete yyvsp[-2].TypeVal; + delete yyvsp[0].ValueList; + ; + break;} +} + /* the action file gets copied in in place of this dollarsign */ +#line 543 "/usr/share/bison.simple" + + yyvsp -= yylen; + yyssp -= yylen; +#ifdef YYLSP_NEEDED + yylsp -= yylen; +#endif -/* Line 1267 of yacc.c. */ -#line 6014 "llvmAsmParser.tab.c" - default: break; - } - YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); - - YYPOPSTACK (yylen); - yylen = 0; - YY_STACK_PRINT (yyss, yyssp); +#if YYDEBUG != 0 + if (yydebug) + { + short *ssp1 = yyss - 1; + fprintf (stderr, "state stack now"); + while (ssp1 != yyssp) + fprintf (stderr, " %d", *++ssp1); + fprintf (stderr, "\n"); + } +#endif *++yyvsp = yyval; +#ifdef YYLSP_NEEDED + yylsp++; + if (yylen == 0) + { + yylsp->first_line = yylloc.first_line; + yylsp->first_column = yylloc.first_column; + yylsp->last_line = (yylsp-1)->last_line; + yylsp->last_column = (yylsp-1)->last_column; + yylsp->text = 0; + } + else + { + yylsp->last_line = (yylsp+yylen-1)->last_line; + yylsp->last_column = (yylsp+yylen-1)->last_column; + } +#endif - /* Now `shift' the result of the reduction. Determine what state - that goes to, based on the state we popped back to and the rule - number reduced by. */ + /* Now "shift" the result of the reduction. + Determine what state that goes to, + based on the state we popped back to + and the rule number reduced by. */ yyn = yyr1[yyn]; - yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; - if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) + yystate = yypgoto[yyn - YYNTBASE] + *yyssp; + if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp) yystate = yytable[yystate]; else - yystate = yydefgoto[yyn - YYNTOKENS]; + yystate = yydefgoto[yyn - YYNTBASE]; goto yynewstate; +yyerrlab: /* here on detecting error */ -/*------------------------------------. -| yyerrlab -- here on detecting error | -`------------------------------------*/ -yyerrlab: - /* If not already recovering from an error, report this error. */ - if (!yyerrstatus) + if (! yyerrstatus) + /* If not already recovering from an error, report this error. */ { ++yynerrs; -#if ! YYERROR_VERBOSE - yyerror (YY_("syntax error")); -#else - { - YYSIZE_T yysize = yysyntax_error (0, yystate, yychar); - if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM) - { - YYSIZE_T yyalloc = 2 * yysize; - if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM)) - yyalloc = YYSTACK_ALLOC_MAXIMUM; - if (yymsg != yymsgbuf) - YYSTACK_FREE (yymsg); - yymsg = (char *) YYSTACK_ALLOC (yyalloc); - if (yymsg) - yymsg_alloc = yyalloc; - else - { - yymsg = yymsgbuf; - yymsg_alloc = sizeof yymsgbuf; - } - } - - if (0 < yysize && yysize <= yymsg_alloc) - { - (void) yysyntax_error (yymsg, yystate, yychar); - yyerror (yymsg); - } - else - { - yyerror (YY_("syntax error")); - if (yysize != 0) - goto yyexhaustedlab; - } - } -#endif - } +#ifdef YYERROR_VERBOSE + yyn = yypact[yystate]; - - if (yyerrstatus == 3) - { - /* If just tried and failed to reuse look-ahead token after an - error, discard it. */ - - if (yychar <= YYEOF) + if (yyn > YYFLAG && yyn < YYLAST) { - /* Return failure if at end of input. */ - if (yychar == YYEOF) - YYABORT; + int size = 0; + char *msg; + int x, count; + + count = 0; + /* Start X at -yyn if nec to avoid negative indexes in yycheck. */ + for (x = (yyn < 0 ? -yyn : 0); + x < (sizeof(yytname) / sizeof(char *)); x++) + if (yycheck[x + yyn] == x) + size += strlen(yytname[x]) + 15, count++; + msg = (char *) malloc(size + 15); + if (msg != 0) + { + strcpy(msg, "parse error"); + + if (count < 5) + { + count = 0; + for (x = (yyn < 0 ? -yyn : 0); + x < (sizeof(yytname) / sizeof(char *)); x++) + if (yycheck[x + yyn] == x) + { + strcat(msg, count == 0 ? ", expecting `" : " or `"); + strcat(msg, yytname[x]); + strcat(msg, "'"); + count++; + } + } + yyerror(msg); + free(msg); + } + else + yyerror ("parse error; also virtual memory exceeded"); } else - { - yydestruct ("Error: discarding", - yytoken, &yylval); - yychar = YYEMPTY; - } +#endif /* YYERROR_VERBOSE */ + yyerror("parse error"); } - /* Else will try to reuse look-ahead token after shifting the error - token. */ goto yyerrlab1; +yyerrlab1: /* here on error raised explicitly by an action */ + + if (yyerrstatus == 3) + { + /* if just tried and failed to reuse lookahead token after an error, discard it. */ + /* return failure if at end of input */ + if (yychar == YYEOF) + YYABORT; -/*---------------------------------------------------. -| yyerrorlab -- error raised explicitly by YYERROR. | -`---------------------------------------------------*/ -yyerrorlab: - - /* Pacify compilers like GCC when the user code never invokes - YYERROR and the label yyerrorlab therefore never appears in user - code. */ - if (/*CONSTCOND*/ 0) - goto yyerrorlab; - - /* Do not reclaim the symbols of the rule which action triggered - this YYERROR. */ - YYPOPSTACK (yylen); - yylen = 0; - YY_STACK_PRINT (yyss, yyssp); - yystate = *yyssp; - goto yyerrlab1; +#if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]); +#endif + + yychar = YYEMPTY; + } + + /* Else will try to reuse lookahead token + after shifting the error token. */ + + yyerrstatus = 3; /* Each real token shifted decrements this */ + goto yyerrhandle; -/*-------------------------------------------------------------. -| yyerrlab1 -- common code for both syntax error and YYERROR. | -`-------------------------------------------------------------*/ -yyerrlab1: - yyerrstatus = 3; /* Each real token shifted decrements this. */ +yyerrdefault: /* current state does not do anything special for the error token. */ - for (;;) +#if 0 + /* This is wrong; only states that explicitly want error tokens + should shift them. */ + yyn = yydefact[yystate]; /* If its default is to accept any token, ok. Otherwise pop it.*/ + if (yyn) goto yydefault; +#endif + +yyerrpop: /* pop the current state because it cannot handle the error token */ + + if (yyssp == yyss) YYABORT; + yyvsp--; + yystate = *--yyssp; +#ifdef YYLSP_NEEDED + yylsp--; +#endif + +#if YYDEBUG != 0 + if (yydebug) { - yyn = yypact[yystate]; - if (yyn != YYPACT_NINF) - { - yyn += YYTERROR; - if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) - { - yyn = yytable[yyn]; - if (0 < yyn) - break; - } - } + short *ssp1 = yyss - 1; + fprintf (stderr, "Error: state stack now"); + while (ssp1 != yyssp) + fprintf (stderr, " %d", *++ssp1); + fprintf (stderr, "\n"); + } +#endif - /* Pop the current state because it cannot handle the error token. */ - if (yyssp == yyss) - YYABORT; +yyerrhandle: + + yyn = yypact[yystate]; + if (yyn == YYFLAG) + goto yyerrdefault; + yyn += YYTERROR; + if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR) + goto yyerrdefault; - yydestruct ("Error: popping", - yystos[yystate], yyvsp); - YYPOPSTACK (1); - yystate = *yyssp; - YY_STACK_PRINT (yyss, yyssp); + yyn = yytable[yyn]; + if (yyn < 0) + { + if (yyn == YYFLAG) + goto yyerrpop; + yyn = -yyn; + goto yyreduce; } + else if (yyn == 0) + goto yyerrpop; if (yyn == YYFINAL) YYACCEPT; - *++yyvsp = yylval; - +#if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Shifting error token, "); +#endif - /* Shift the error token. */ - YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); + *++yyvsp = yylval; +#ifdef YYLSP_NEEDED + *++yylsp = yylloc; +#endif yystate = yyn; goto yynewstate; + yyacceptlab: + /* YYACCEPT comes here. */ + if (yyfree_stacks) + { + free (yyss); + free (yyvs); +#ifdef YYLSP_NEEDED + free (yyls); +#endif + } + return 0; -/*-------------------------------------. -| yyacceptlab -- YYACCEPT comes here. | -`-------------------------------------*/ -yyacceptlab: - yyresult = 0; - goto yyreturn; - -/*-----------------------------------. -| yyabortlab -- YYABORT comes here. | -`-----------------------------------*/ -yyabortlab: - yyresult = 1; - goto yyreturn; - -#ifndef yyoverflow -/*-------------------------------------------------. -| yyexhaustedlab -- memory exhaustion comes here. | -`-------------------------------------------------*/ -yyexhaustedlab: - yyerror (YY_("memory exhausted")); - yyresult = 2; - /* Fall through. */ -#endif - -yyreturn: - if (yychar != YYEOF && yychar != YYEMPTY) - yydestruct ("Cleanup: discarding lookahead", - yytoken, &yylval); - /* Do not reclaim the symbols of the rule which action triggered - this YYABORT or YYACCEPT. */ - YYPOPSTACK (yylen); - YY_STACK_PRINT (yyss, yyssp); - while (yyssp != yyss) + yyabortlab: + /* YYABORT comes here. */ + if (yyfree_stacks) { - yydestruct ("Cleanup: popping", - yystos[*yyssp], yyvsp); - YYPOPSTACK (1); - } -#ifndef yyoverflow - if (yyss != yyssa) - YYSTACK_FREE (yyss); -#endif -#if YYERROR_VERBOSE - if (yymsg != yymsgbuf) - YYSTACK_FREE (yymsg); + free (yyss); + free (yyvs); +#ifdef YYLSP_NEEDED + free (yyls); #endif - /* Make sure YYID is used. */ - return YYID (yyresult); + } + return 1; } - - -#line 3029 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" +#line 3034 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" // common code from the two 'RunVMAsmParser' functions @@ -6305,4 +5222,3 @@ GenerateError(errMsg); return 0; } - Index: llvm/lib/AsmParser/llvmAsmParser.h.cvs diff -u llvm/lib/AsmParser/llvmAsmParser.h.cvs:1.70 llvm/lib/AsmParser/llvmAsmParser.h.cvs:1.71 --- llvm/lib/AsmParser/llvmAsmParser.h.cvs:1.70 Wed Apr 25 09:29:12 2007 +++ llvm/lib/AsmParser/llvmAsmParser.h.cvs Thu Apr 26 00:31:05 2007 @@ -1,321 +1,4 @@ -/* A Bison parser, made by GNU Bison 2.3. */ - -/* Skeleton interface for Bison's Yacc-like parsers in C - - Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 - Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. */ - -/* As a special exception, you may create a larger work that contains - part or all of the Bison parser skeleton and distribute that work - under terms of your choice, so long as that work isn't itself a - parser generator using the skeleton or a modified version thereof - as a parser skeleton. Alternatively, if you modify or redistribute - the parser skeleton itself, you may (at your option) remove this - special exception, which will cause the skeleton and the resulting - Bison output files to be licensed under the GNU General Public - License without this special exception. - - This special exception was added by the Free Software Foundation in - version 2.2 of Bison. */ - -/* Tokens. */ -#ifndef YYTOKENTYPE -# define YYTOKENTYPE - /* Put the tokens into the symbol table, so that GDB and other debuggers - know about them. */ - enum yytokentype { - ESINT64VAL = 258, - EUINT64VAL = 259, - ESAPINTVAL = 260, - EUAPINTVAL = 261, - LOCALVAL_ID = 262, - GLOBALVAL_ID = 263, - FPVAL = 264, - VOID = 265, - INTTYPE = 266, - FLOAT = 267, - DOUBLE = 268, - LABEL = 269, - TYPE = 270, - LOCALVAR = 271, - GLOBALVAR = 272, - LABELSTR = 273, - STRINGCONSTANT = 274, - ATSTRINGCONSTANT = 275, - ZEROINITIALIZER = 276, - TRUETOK = 277, - FALSETOK = 278, - BEGINTOK = 279, - ENDTOK = 280, - DECLARE = 281, - DEFINE = 282, - GLOBAL = 283, - CONSTANT = 284, - SECTION = 285, - ALIAS = 286, - VOLATILE = 287, - THREAD_LOCAL = 288, - TO = 289, - DOTDOTDOT = 290, - NULL_TOK = 291, - UNDEF = 292, - INTERNAL = 293, - LINKONCE = 294, - WEAK = 295, - APPENDING = 296, - DLLIMPORT = 297, - DLLEXPORT = 298, - EXTERN_WEAK = 299, - OPAQUE = 300, - EXTERNAL = 301, - TARGET = 302, - TRIPLE = 303, - ALIGN = 304, - DEPLIBS = 305, - CALL = 306, - TAIL = 307, - ASM_TOK = 308, - MODULE = 309, - SIDEEFFECT = 310, - CC_TOK = 311, - CCC_TOK = 312, - FASTCC_TOK = 313, - COLDCC_TOK = 314, - X86_STDCALLCC_TOK = 315, - X86_FASTCALLCC_TOK = 316, - DATALAYOUT = 317, - RET = 318, - BR = 319, - SWITCH = 320, - INVOKE = 321, - UNWIND = 322, - UNREACHABLE = 323, - ADD = 324, - SUB = 325, - MUL = 326, - UDIV = 327, - SDIV = 328, - FDIV = 329, - UREM = 330, - SREM = 331, - FREM = 332, - AND = 333, - OR = 334, - XOR = 335, - SHL = 336, - LSHR = 337, - ASHR = 338, - ICMP = 339, - FCMP = 340, - EQ = 341, - NE = 342, - SLT = 343, - SGT = 344, - SLE = 345, - SGE = 346, - ULT = 347, - UGT = 348, - ULE = 349, - UGE = 350, - OEQ = 351, - ONE = 352, - OLT = 353, - OGT = 354, - OLE = 355, - OGE = 356, - ORD = 357, - UNO = 358, - UEQ = 359, - UNE = 360, - MALLOC = 361, - ALLOCA = 362, - FREE = 363, - LOAD = 364, - STORE = 365, - GETELEMENTPTR = 366, - TRUNC = 367, - ZEXT = 368, - SEXT = 369, - FPTRUNC = 370, - FPEXT = 371, - BITCAST = 372, - UITOFP = 373, - SITOFP = 374, - FPTOUI = 375, - FPTOSI = 376, - INTTOPTR = 377, - PTRTOINT = 378, - PHI_TOK = 379, - SELECT = 380, - VAARG = 381, - EXTRACTELEMENT = 382, - INSERTELEMENT = 383, - SHUFFLEVECTOR = 384, - NORETURN = 385, - INREG = 386, - SRET = 387, - NOUNWIND = 388, - DEFAULT = 389, - HIDDEN = 390 - }; -#endif -/* Tokens. */ -#define ESINT64VAL 258 -#define EUINT64VAL 259 -#define ESAPINTVAL 260 -#define EUAPINTVAL 261 -#define LOCALVAL_ID 262 -#define GLOBALVAL_ID 263 -#define FPVAL 264 -#define VOID 265 -#define INTTYPE 266 -#define FLOAT 267 -#define DOUBLE 268 -#define LABEL 269 -#define TYPE 270 -#define LOCALVAR 271 -#define GLOBALVAR 272 -#define LABELSTR 273 -#define STRINGCONSTANT 274 -#define ATSTRINGCONSTANT 275 -#define ZEROINITIALIZER 276 -#define TRUETOK 277 -#define FALSETOK 278 -#define BEGINTOK 279 -#define ENDTOK 280 -#define DECLARE 281 -#define DEFINE 282 -#define GLOBAL 283 -#define CONSTANT 284 -#define SECTION 285 -#define ALIAS 286 -#define VOLATILE 287 -#define THREAD_LOCAL 288 -#define TO 289 -#define DOTDOTDOT 290 -#define NULL_TOK 291 -#define UNDEF 292 -#define INTERNAL 293 -#define LINKONCE 294 -#define WEAK 295 -#define APPENDING 296 -#define DLLIMPORT 297 -#define DLLEXPORT 298 -#define EXTERN_WEAK 299 -#define OPAQUE 300 -#define EXTERNAL 301 -#define TARGET 302 -#define TRIPLE 303 -#define ALIGN 304 -#define DEPLIBS 305 -#define CALL 306 -#define TAIL 307 -#define ASM_TOK 308 -#define MODULE 309 -#define SIDEEFFECT 310 -#define CC_TOK 311 -#define CCC_TOK 312 -#define FASTCC_TOK 313 -#define COLDCC_TOK 314 -#define X86_STDCALLCC_TOK 315 -#define X86_FASTCALLCC_TOK 316 -#define DATALAYOUT 317 -#define RET 318 -#define BR 319 -#define SWITCH 320 -#define INVOKE 321 -#define UNWIND 322 -#define UNREACHABLE 323 -#define ADD 324 -#define SUB 325 -#define MUL 326 -#define UDIV 327 -#define SDIV 328 -#define FDIV 329 -#define UREM 330 -#define SREM 331 -#define FREM 332 -#define AND 333 -#define OR 334 -#define XOR 335 -#define SHL 336 -#define LSHR 337 -#define ASHR 338 -#define ICMP 339 -#define FCMP 340 -#define EQ 341 -#define NE 342 -#define SLT 343 -#define SGT 344 -#define SLE 345 -#define SGE 346 -#define ULT 347 -#define UGT 348 -#define ULE 349 -#define UGE 350 -#define OEQ 351 -#define ONE 352 -#define OLT 353 -#define OGT 354 -#define OLE 355 -#define OGE 356 -#define ORD 357 -#define UNO 358 -#define UEQ 359 -#define UNE 360 -#define MALLOC 361 -#define ALLOCA 362 -#define FREE 363 -#define LOAD 364 -#define STORE 365 -#define GETELEMENTPTR 366 -#define TRUNC 367 -#define ZEXT 368 -#define SEXT 369 -#define FPTRUNC 370 -#define FPEXT 371 -#define BITCAST 372 -#define UITOFP 373 -#define SITOFP 374 -#define FPTOUI 375 -#define FPTOSI 376 -#define INTTOPTR 377 -#define PTRTOINT 378 -#define PHI_TOK 379 -#define SELECT 380 -#define VAARG 381 -#define EXTRACTELEMENT 382 -#define INSERTELEMENT 383 -#define SHUFFLEVECTOR 384 -#define NORETURN 385 -#define INREG 386 -#define SRET 387 -#define NOUNWIND 388 -#define DEFAULT 389 -#define HIDDEN 390 - - - - -#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED -typedef union YYSTYPE -#line 938 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y" -{ +typedef union { llvm::Module *ModuleVal; llvm::Function *FunctionVal; llvm::BasicBlock *BasicBlockVal; @@ -360,14 +43,140 @@ llvm::Instruction::OtherOps OtherOpVal; llvm::ICmpInst::Predicate IPredicate; llvm::FCmpInst::Predicate FPredicate; -} -/* Line 1489 of yacc.c. */ -#line 366 "llvmAsmParser.tab.h" - YYSTYPE; -# define yystype YYSTYPE /* obsolescent; will be withdrawn */ -# define YYSTYPE_IS_DECLARED 1 -# define YYSTYPE_IS_TRIVIAL 1 -#endif +} YYSTYPE; +#define ESINT64VAL 257 +#define EUINT64VAL 258 +#define ESAPINTVAL 259 +#define EUAPINTVAL 260 +#define LOCALVAL_ID 261 +#define GLOBALVAL_ID 262 +#define FPVAL 263 +#define VOID 264 +#define INTTYPE 265 +#define FLOAT 266 +#define DOUBLE 267 +#define LABEL 268 +#define TYPE 269 +#define LOCALVAR 270 +#define GLOBALVAR 271 +#define LABELSTR 272 +#define STRINGCONSTANT 273 +#define ATSTRINGCONSTANT 274 +#define ZEROINITIALIZER 275 +#define TRUETOK 276 +#define FALSETOK 277 +#define BEGINTOK 278 +#define ENDTOK 279 +#define DECLARE 280 +#define DEFINE 281 +#define GLOBAL 282 +#define CONSTANT 283 +#define SECTION 284 +#define ALIAS 285 +#define VOLATILE 286 +#define THREAD_LOCAL 287 +#define TO 288 +#define DOTDOTDOT 289 +#define NULL_TOK 290 +#define UNDEF 291 +#define INTERNAL 292 +#define LINKONCE 293 +#define WEAK 294 +#define APPENDING 295 +#define DLLIMPORT 296 +#define DLLEXPORT 297 +#define EXTERN_WEAK 298 +#define OPAQUE 299 +#define EXTERNAL 300 +#define TARGET 301 +#define TRIPLE 302 +#define ALIGN 303 +#define DEPLIBS 304 +#define CALL 305 +#define TAIL 306 +#define ASM_TOK 307 +#define MODULE 308 +#define SIDEEFFECT 309 +#define CC_TOK 310 +#define CCC_TOK 311 +#define FASTCC_TOK 312 +#define COLDCC_TOK 313 +#define X86_STDCALLCC_TOK 314 +#define X86_FASTCALLCC_TOK 315 +#define DATALAYOUT 316 +#define RET 317 +#define BR 318 +#define SWITCH 319 +#define INVOKE 320 +#define UNWIND 321 +#define UNREACHABLE 322 +#define ADD 323 +#define SUB 324 +#define MUL 325 +#define UDIV 326 +#define SDIV 327 +#define FDIV 328 +#define UREM 329 +#define SREM 330 +#define FREM 331 +#define AND 332 +#define OR 333 +#define XOR 334 +#define SHL 335 +#define LSHR 336 +#define ASHR 337 +#define ICMP 338 +#define FCMP 339 +#define EQ 340 +#define NE 341 +#define SLT 342 +#define SGT 343 +#define SLE 344 +#define SGE 345 +#define ULT 346 +#define UGT 347 +#define ULE 348 +#define UGE 349 +#define OEQ 350 +#define ONE 351 +#define OLT 352 +#define OGT 353 +#define OLE 354 +#define OGE 355 +#define ORD 356 +#define UNO 357 +#define UEQ 358 +#define UNE 359 +#define MALLOC 360 +#define ALLOCA 361 +#define FREE 362 +#define LOAD 363 +#define STORE 364 +#define GETELEMENTPTR 365 +#define TRUNC 366 +#define ZEXT 367 +#define SEXT 368 +#define FPTRUNC 369 +#define FPEXT 370 +#define BITCAST 371 +#define UITOFP 372 +#define SITOFP 373 +#define FPTOUI 374 +#define FPTOSI 375 +#define INTTOPTR 376 +#define PTRTOINT 377 +#define PHI_TOK 378 +#define SELECT 379 +#define VAARG 380 +#define EXTRACTELEMENT 381 +#define INSERTELEMENT 382 +#define SHUFFLEVECTOR 383 +#define NORETURN 384 +#define INREG 385 +#define SRET 386 +#define NOUNWIND 387 +#define DEFAULT 388 +#define HIDDEN 389 -extern YYSTYPE llvmAsmlval; +extern YYSTYPE llvmAsmlval; Index: llvm/lib/AsmParser/llvmAsmParser.y.cvs diff -u llvm/lib/AsmParser/llvmAsmParser.y.cvs:1.93 llvm/lib/AsmParser/llvmAsmParser.y.cvs:1.94 --- llvm/lib/AsmParser/llvmAsmParser.y.cvs:1.93 Wed Apr 25 09:29:12 2007 +++ llvm/lib/AsmParser/llvmAsmParser.y.cvs Thu Apr 26 00:31:05 2007 @@ -1146,7 +1146,7 @@ GlobalAssign : GlobalName '=' { $$ = $1; CHECK_FOR_ERROR - } + }; GVInternalLinkage : INTERNAL { $$ = GlobalValue::InternalLinkage; } @@ -1608,7 +1608,8 @@ // Check to ensure that Type is not packed if (STy->isPacked()) - GEN_ERROR("Unpacked Initializer to vector type '" + STy->getDescription() + "'"); + GEN_ERROR("Unpacked Initializer to vector type '" + + STy->getDescription() + "'"); $$ = ConstantStruct::get(STy, *$3); delete $1; delete $3; @@ -1627,7 +1628,8 @@ // Check to ensure that Type is not packed if (STy->isPacked()) - GEN_ERROR("Unpacked Initializer to vector type '" + STy->getDescription() + "'"); + GEN_ERROR("Unpacked Initializer to vector type '" + + STy->getDescription() + "'"); $$ = ConstantStruct::get(STy, std::vector()); delete $1; @@ -1746,11 +1748,11 @@ GlobalValue *GV; if (const FunctionType *FTy = dyn_cast(PT->getElementType())) { - GV = new Function(FTy, GlobalValue::ExternalLinkage, Name, + GV = new Function(FTy, GlobalValue::ExternalWeakLinkage, Name, CurModule.CurrentModule); } else { GV = new GlobalVariable(PT->getElementType(), false, - GlobalValue::ExternalLinkage, 0, + GlobalValue::ExternalWeakLinkage, 0, Name, CurModule.CurrentModule); } @@ -2023,7 +2025,8 @@ } GlobalVarAttributes { CurGV = 0; } - | OptGlobalAssign GVInternalLinkage GVVisibilityStyle ThreadLocal GlobalType ConstVal { + | OptGlobalAssign GVInternalLinkage GVVisibilityStyle ThreadLocal GlobalType + ConstVal { if ($6 == 0) GEN_ERROR("Global value initializer is not a constant"); CurGV = ParseGlobalVariable($1, $2, $3, $5, $6->getType(), $6, $4); @@ -2031,7 +2034,8 @@ } GlobalVarAttributes { CurGV = 0; } - | OptGlobalAssign GVExternalLinkage GVVisibilityStyle ThreadLocal GlobalType Types { + | OptGlobalAssign GVExternalLinkage GVVisibilityStyle ThreadLocal GlobalType + Types { if (!UpRefs.empty()) GEN_ERROR("Invalid upreference in type: " + (*$6)->getDescription()); CurGV = ParseGlobalVariable($1, $2, $3, $5, *$6, 0, $4); @@ -2041,7 +2045,8 @@ CurGV = 0; CHECK_FOR_ERROR } - | OptGlobalAssign GVVisibilityStyle ALIAS AliasLinkage ResultTypes SymbolicValueRef { + | OptGlobalAssign GVVisibilityStyle ALIAS AliasLinkage ResultTypes + SymbolicValueRef { std::string Name($1); if (Name.empty()) GEN_ERROR("Alias name cannot be empty") @@ -2059,9 +2064,9 @@ } if (V == 0) GEN_ERROR(std::string("Invalid aliasee for alias: ") + $1); - GlobalValue* Aliasee; - if (Aliasee = dyn_cast(V)) { - GlobalAlias* GA = new GlobalAlias(VTy, $4, Name, Aliasee, CurModule.CurrentModule); + if (GlobalValue* Aliasee = dyn_cast(V)) { + GlobalAlias* GA = new GlobalAlias(VTy, $4, Name, Aliasee, + CurModule.CurrentModule); GA->setVisibility($2); InsertValue(GA, CurModule.Values); } else @@ -2229,14 +2234,14 @@ CurModule.CurrentModule->getFunctionList().push_back(Fn); } else if (!FunctionName.empty() && // Merge with an earlier prototype? (Fn = CurModule.CurrentModule->getFunction(FunctionName))) { - if (Fn->getFunctionType() != FT ) { + if (Fn->getFunctionType() != FT) { // The existing function doesn't have the same type. This is an overload // error. GEN_ERROR("Overload of function '" + FunctionName + "' not permitted."); } else if (!CurFun.isDeclare && !Fn->isDeclaration()) { - // Neither the existing or the current function is a declaration and they - // have the same name and same type. Clearly this is a redefinition. - GEN_ERROR("Redefinition of function '" + FunctionName + "'"); + // Neither the existing or the current function is a declaration and they + // have the same name and same type. Clearly this is a redefinition. + GEN_ERROR("Redefinition of function '" + FunctionName + "'"); } if (Fn->isDeclaration()) { // Make sure to strip off any argument names so we can't get conflicts. for (Function::arg_iterator AI = Fn->arg_begin(), AE = Fn->arg_end(); @@ -2244,7 +2249,7 @@ AI->setName(""); } } else { // Not already defined? - Fn = new Function(FT, GlobalValue::ExternalLinkage, FunctionName, + Fn = new Function(FT, GlobalValue::ExternalWeakLinkage, FunctionName, CurModule.CurrentModule); InsertValue(Fn, CurModule.Values); @@ -2874,10 +2879,10 @@ Ty = FunctionType::get($3->get(), ParamTypes, false, PAL); PFTy = PointerType::get(Ty); } - + Value *V = getVal(PFTy, $4); // Get the function we're calling... CHECK_FOR_ERROR - + // Check for call to invalid intrinsic to avoid crashing later. if (Function *theF = dyn_cast(V)) { if (theF->hasName() && (theF->getValueName()->getKeyLength() >= 5) && From sabre at nondot.org Thu Apr 26 00:53:23 2007 From: sabre at nondot.org (Chris Lattner) Date: Thu, 26 Apr 2007 00:53:23 -0500 Subject: [llvm-commits] CVS: llvm/include/llvm/Bitcode/LLVMBitCodes.h Message-ID: <200704260553.l3Q5rND7032164@zion.cs.uiuc.edu> Changes in directory llvm/include/llvm/Bitcode: LLVMBitCodes.h updated: 1.7 -> 1.8 --- Log message: start defining codes for instructions --- Diffs of the changes: (+34 -6) LLVMBitCodes.h | 40 ++++++++++++++++++++++++++++++++++------ 1 files changed, 34 insertions(+), 6 deletions(-) Index: llvm/include/llvm/Bitcode/LLVMBitCodes.h diff -u llvm/include/llvm/Bitcode/LLVMBitCodes.h:1.7 llvm/include/llvm/Bitcode/LLVMBitCodes.h:1.8 --- llvm/include/llvm/Bitcode/LLVMBitCodes.h:1.7 Wed Apr 25 22:26:26 2007 +++ llvm/include/llvm/Bitcode/LLVMBitCodes.h Thu Apr 26 00:53:04 2007 @@ -29,11 +29,10 @@ // Module sub-block id's TYPE_BLOCK_ID = 1, - MODULEINFO_BLOCK_ID = 2, - CONSTANTS_BLOCK_ID = 3, - FUNCTION_BLOCK_ID = 4, - TYPE_SYMTAB_BLOCK_ID = 5, - VALUE_SYMTAB_BLOCK_ID = 6 + CONSTANTS_BLOCK_ID = 2, + FUNCTION_BLOCK_ID = 3, + TYPE_SYMTAB_BLOCK_ID = 4, + VALUE_SYMTAB_BLOCK_ID = 5 }; @@ -81,7 +80,6 @@ // Any other type code is assumed to be an unknown type. }; - // The type symbol table only has one code (TST_ENTRY_CODE). enum TypeSymtabCodes { TST_CODE_ENTRY = 1 // TST_ENTRY: [typeid, namelen, namechar x N] @@ -151,6 +149,36 @@ BINOP_XOR = 12 }; + + // The function body block (FUNCTION_BLOCK_ID) describes function bodies. It + // can contain a constant block (CONSTANTS_BLOCK_ID). + enum FunctionCodes { + FUNC_CODE_DECLAREBLOCKS = 1, // DECLAREBLOCKS: [n] + + FUNC_CODE_INST_BINOP = 2, // BINOP: [opcode, ty, opval, opval] + FUNC_CODE_INST_CAST = 3, // CAST: [opcode, ty, opty, opval] + FUNC_CODE_INST_GEP = 4, // GEP: [n, n x operands] + FUNC_CODE_INST_SELECT = 5, // SELECT: [ty, opval, opval, opval] + FUNC_CODE_INST_EXTRACTELT = 6, // EXTRACTELT: [opty, opval, opval] + FUNC_CODE_INST_INSERTELT = 7, // INSERTELT: [ty, opval, opval, opval] + FUNC_CODE_INST_SHUFFLEVEC = 8, // SHUFFLEVEC: [ty, opval, opval, opval] + FUNC_CODE_INST_CMP = 9, // CMP: [opty, opval, opval, pred] + + FUNC_CODE_INST_RET = 10, // RET: [opval] + FUNC_CODE_INST_BR = 11, // BR: [opval, bb#, bb#] or [bb#] + FUNC_CODE_INST_SWITCH = 12, // SWITCH: [opty, opval, n, n x ops] + FUNC_CODE_INST_INVOKE = 13, // INVOKE: + FUNC_CODE_INST_UNWIND = 14, // UNWIND + FUNC_CODE_INST_UNREACHABLE = 15, // UNREACHABLE + + FUNC_CODE_INST_MALLOC = 16, // MALLOC: .. + FUNC_CODE_INST_FREE = 17, // FREE: .. + FUNC_CODE_INST_ALLOCA = 18, // ALLOCA: .. + FUNC_CODE_INST_LOAD = 19, // LOAD: .. + FUNC_CODE_INST_STORE = 20, // STORE: .. + FUNC_CODE_INST_CALL = 21, // CALL: .. + FUNC_CODE_INST_VAARG = 22 // VAARG: .. + }; } // End bitc namespace } // End llvm namespace From sabre at nondot.org Thu Apr 26 00:54:11 2007 From: sabre at nondot.org (Chris Lattner) Date: Thu, 26 Apr 2007 00:54:11 -0500 Subject: [llvm-commits] CVS: llvm/lib/Bitcode/Writer/ValueEnumerator.cpp ValueEnumerator.h Writer.cpp Message-ID: <200704260554.l3Q5sB63032214@zion.cs.uiuc.edu> Changes in directory llvm/lib/Bitcode/Writer: ValueEnumerator.cpp updated: 1.6 -> 1.7 ValueEnumerator.h updated: 1.6 -> 1.7 Writer.cpp updated: 1.12 -> 1.13 --- Log message: start code for writing out instructions. Separate BB#s from normal value #'s. --- Diffs of the changes: (+83 -5) ValueEnumerator.cpp | 10 +++++-- ValueEnumerator.h | 11 +++++++- Writer.cpp | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 83 insertions(+), 5 deletions(-) Index: llvm/lib/Bitcode/Writer/ValueEnumerator.cpp diff -u llvm/lib/Bitcode/Writer/ValueEnumerator.cpp:1.6 llvm/lib/Bitcode/Writer/ValueEnumerator.cpp:1.7 --- llvm/lib/Bitcode/Writer/ValueEnumerator.cpp:1.6 Wed Apr 25 23:42:16 2007 +++ llvm/lib/Bitcode/Writer/ValueEnumerator.cpp Thu Apr 26 00:53:54 2007 @@ -162,13 +162,15 @@ } void ValueEnumerator::incorporateFunction(const Function &F) { - ModuleLevel = Values.size(); + NumModuleValues = Values.size(); // Adding function arguments to the value table. for(Function::const_arg_iterator I = F.arg_begin(), E = F.arg_end(); I != E; ++I) EnumerateValue(I); + FirstFuncConstantID = Values.size(); + // Add all function-level constants to the value table. for (Function::const_iterator BB = F.begin(), E = F.end(); BB != E; ++BB) { for (BasicBlock::const_iterator I = BB->begin(), E = BB->end(); I!=E; ++I) @@ -182,6 +184,8 @@ BasicBlocks.push_back(BB); } + FirstInstID = Values.size(); + // Add all of the instructions. for (Function::const_iterator BB = F.begin(), E = F.end(); BB != E; ++BB) { for (BasicBlock::const_iterator I = BB->begin(), E = BB->end(); I!=E; ++I) { @@ -193,12 +197,12 @@ void ValueEnumerator::purgeFunction() { /// Remove purged values from the ValueMap. - for (unsigned i = ModuleLevel, e = Values.size(); i != e; ++i) + for (unsigned i = NumModuleValues, e = Values.size(); i != e; ++i) ValueMap.erase(Values[i].first); for (unsigned i = 0, e = BasicBlocks.size(); i != e; ++i) ValueMap.erase(BasicBlocks[i]); - Values.resize(ModuleLevel); + Values.resize(NumModuleValues); BasicBlocks.clear(); } Index: llvm/lib/Bitcode/Writer/ValueEnumerator.h diff -u llvm/lib/Bitcode/Writer/ValueEnumerator.h:1.6 llvm/lib/Bitcode/Writer/ValueEnumerator.h:1.7 --- llvm/lib/Bitcode/Writer/ValueEnumerator.h:1.6 Wed Apr 25 23:42:16 2007 +++ llvm/lib/Bitcode/Writer/ValueEnumerator.h Thu Apr 26 00:53:54 2007 @@ -49,7 +49,9 @@ /// When a function is incorporated, this is the size of the Values list /// before incorporation. - unsigned ModuleLevel; + unsigned NumModuleValues; + unsigned FirstFuncConstantID; + unsigned FirstInstID; ValueEnumerator(const ValueEnumerator &); // DO NOT IMPLEMENT void operator=(const ValueEnumerator &); // DO NOT IMPLEMENT @@ -68,6 +70,13 @@ return I->second-1; } + /// getFunctionConstantRange - Return the range of values that corresponds to + /// function-local constants. + void getFunctionConstantRange(unsigned &Start, unsigned &End) const { + Start = FirstFuncConstantID; + End = FirstInstID; + } + const ValueList &getValues() const { return Values; } const TypeList &getTypes() const { return Types; } const std::vector &getBasicBlocks() const { Index: llvm/lib/Bitcode/Writer/Writer.cpp diff -u llvm/lib/Bitcode/Writer/Writer.cpp:1.12 llvm/lib/Bitcode/Writer/Writer.cpp:1.13 --- llvm/lib/Bitcode/Writer/Writer.cpp:1.12 Wed Apr 25 22:50:57 2007 +++ llvm/lib/Bitcode/Writer/Writer.cpp Thu Apr 26 00:53:54 2007 @@ -17,6 +17,7 @@ #include "ValueEnumerator.h" #include "llvm/Constants.h" #include "llvm/DerivedTypes.h" +#include "llvm/Instructions.h" #include "llvm/Module.h" #include "llvm/TypeSymbolTable.h" #include "llvm/ValueSymbolTable.h" @@ -331,7 +332,8 @@ Stream.EnterSubblock(bitc::CONSTANTS_BLOCK_ID, 2); - // FIXME: Install and use abbrevs to reduce size. + // FIXME: Install and use abbrevs to reduce size. Install them globally so + // they don't need to be reemitted for each function body. SmallVector Record; @@ -478,12 +480,75 @@ } } +/// WriteInstruction - Emit an instruction to the specified stream. +static void WriteInstruction(const Instruction &I, ValueEnumerator &VE, + BitstreamWriter &Stream, + SmallVector &Vals) { + return; // FIXME: REMOVE + + + unsigned Code = 0; + unsigned AbbrevToUse = 0; + switch (I.getOpcode()) { + default: + if (Instruction::isCast(I.getOpcode())) { + Code = bitc::FUNC_CODE_INST_BINOP; + Vals.push_back(GetEncodedCastOpcode(I.getOpcode())); + Vals.push_back(VE.getTypeID(I.getType())); + Vals.push_back(VE.getTypeID(I.getOperand(0)->getType())); + Vals.push_back(VE.getValueID(I.getOperand(0))); + } else { + assert(isa(I) && "Unknown instruction!"); + Code = bitc::CST_CODE_CE_BINOP; + Vals.push_back(GetEncodedBinaryOpcode(I.getOpcode())); + Vals.push_back(VE.getTypeID(I.getType())); + Vals.push_back(VE.getValueID(I.getOperand(0))); + Vals.push_back(VE.getValueID(I.getOperand(1))); + } + break; + + + case Instruction::Unwind: + Code = bitc::FUNC_CODE_INST_UNWIND; + break; + case Instruction::Unreachable: + Code = bitc::FUNC_CODE_INST_UNREACHABLE; + break; + + } + + Stream.EmitRecord(Code, Vals, AbbrevToUse); + Vals.clear(); +} + /// WriteFunction - Emit a function body to the module stream. static void WriteFunction(const Function &F, ValueEnumerator &VE, BitstreamWriter &Stream) { + Stream.EnterSubblock(bitc::TYPE_SYMTAB_BLOCK_ID, 3); VE.incorporateFunction(F); + + SmallVector Vals; + + // Emit the number of basic blocks, so the reader can create them ahead of + // time. + Vals.push_back(VE.getBasicBlocks().size()); + Stream.EmitRecord(bitc::FUNC_CODE_DECLAREBLOCKS, Vals); + Vals.clear(); + + // FIXME: Function attributes? + + // If there are function-local constants, emit them now. + unsigned CstStart, CstEnd; + VE.getFunctionConstantRange(CstStart, CstEnd); + WriteConstants(CstStart, CstEnd, VE, Stream); + + // Finally, emit all the instructions, in order. + for (Function::const_iterator BB = F.begin(), E = F.end(); BB != E; ++BB) + for (BasicBlock::const_iterator I = BB->begin(), E = BB->end(); I != E; ++I) + WriteInstruction(*I, VE, Stream, Vals); VE.purgeFunction(); + Stream.ExitBlock(); } /// WriteTypeSymbolTable - Emit a block for the specified type symtab. From evan.cheng at apple.com Thu Apr 26 03:24:43 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Thu, 26 Apr 2007 03:24:43 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/LiveVariables.cpp Message-ID: <200704260824.l3Q8Oh2M011415@zion.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen: LiveVariables.cpp updated: 1.77 -> 1.78 --- Log message: Minor bug. --- Diffs of the changes: (+2 -2) LiveVariables.cpp | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) Index: llvm/lib/CodeGen/LiveVariables.cpp diff -u llvm/lib/CodeGen/LiveVariables.cpp:1.77 llvm/lib/CodeGen/LiveVariables.cpp:1.78 --- llvm/lib/CodeGen/LiveVariables.cpp:1.77 Wed Apr 25 20:40:09 2007 +++ llvm/lib/CodeGen/LiveVariables.cpp Thu Apr 26 03:24:22 2007 @@ -281,7 +281,7 @@ // Add implicit use / kill to last use of a sub-register. addRegisterKilled(Reg, PhysRegPartUse[Reg], true); else - addRegisterDead(Reg, LastRef, true); + addRegisterDead(Reg, LastRef); } PhysRegInfo[Reg] = MI; PhysRegUsed[Reg] = false; @@ -294,7 +294,7 @@ addRegisterKilled(SubReg, LastRef); else if (PhysRegPartUse[SubReg]) // Add implicit use / kill to last use of a sub-register. - addRegisterKilled(SubReg, PhysRegPartUse[SubReg]); + addRegisterKilled(SubReg, PhysRegPartUse[SubReg], true); else addRegisterDead(SubReg, LastRef); } From jeffc at jolt-lang.org Thu Apr 26 09:16:31 2007 From: jeffc at jolt-lang.org (Jeff Cohen) Date: Thu, 26 Apr 2007 07:16:31 -0700 Subject: [llvm-commits] Need better way to build bison files Message-ID: <4630B43F.1090307@jolt-lang.org> My nightly tester failed last night for the following reason: cvs update: conflicts found in lib/AsmParser/llvmAsmParser.cpp.cvs C lib/AsmParser/llvmAsmParser.cpp.cvs Needless to say, the tester is not in the business of modifying source code, but it manages to modify a file under cvs control anyway and do so in a way that conflicts with subsequent changes. The way bison files are managed needs to be fixed so that files under cvs control do not change unless a human wants them to change. -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20070426/3a9d0a62/attachment.html From criswell at cs.uiuc.edu Thu Apr 26 09:45:13 2007 From: criswell at cs.uiuc.edu (John Criswell) Date: Thu, 26 Apr 2007 09:45:13 -0500 Subject: [llvm-commits] CVS: CVSROOT/loginfo Message-ID: <200704261445.JAA10481@choi.cs.uiuc.edu> Changes in directory CVSROOT: loginfo updated: 1.15 -> 1.16 --- Log message: Added entry for paper I'm working on. --- Diffs of the changes: (+1 -0) loginfo | 1 + 1 files changed, 1 insertion(+) Index: CVSROOT/loginfo diff -u CVSROOT/loginfo:1.15 CVSROOT/loginfo:1.16 --- CVSROOT/loginfo:1.15 Wed Mar 14 09:21:10 2007 +++ CVSROOT/loginfo Thu Apr 26 09:44:57 2007 @@ -30,5 +30,6 @@ ^llvm-java /home/vadve/shared/PublicCVS/CVSROOT/commit-diffs.pl %{sVv} llvm-commits at cs.uiuc.edu ^privbracket /home/vadve/shared/InternalCVS/CVSROOT/commit-diffs.pl %{sVv} criswell at cs.uiuc.edu bpankaj2 at cs.uiuc.edu ^llva /home/vadve/shared/InternalCVS/CVSROOT/commit-diffs.pl %{sVv} criswell at cs.uiuc.edu +^Papers/2007-CCS-PrivBracket /home/vadve/shared/InternalCVS/CVSROOT/commit-diffs.pl %{sVv} criswell at cs.uiuc.edu ^safecode /home/vadve/shared/InternalCVS/CVSROOT/commit-diffs.pl %{sVv} criswell at cs.uiuc.edu ^CVSROOT /home/vadve/shared/PublicCVS/CVSROOT/commit-diffs.pl %{sVv} llvm-commits at cs.uiuc.edu From rspencer at reidspencer.com Thu Apr 26 09:47:51 2007 From: rspencer at reidspencer.com (Reid Spencer) Date: Thu, 26 Apr 2007 07:47:51 -0700 Subject: [llvm-commits] Need better way to build bison files In-Reply-To: <4630B43F.1090307@jolt-lang.org> References: <4630B43F.1090307@jolt-lang.org> Message-ID: On Thu, 26 Apr 2007 07:16:31 -0700 Jeff Cohen wrote: > My nightly tester failed last night for the following >reason: > > cvs update: conflicts found in >lib/AsmParser/llvmAsmParser.cpp.cvs > C lib/AsmParser/llvmAsmParser.cpp.cvs > > > Needless to say, the tester is not in the business of >modifying source code, but it manages to modify a file >under cvs control anyway and do so in a way that >conflicts with subsequent changes. The nightly tester doesn't do "update", only "checkout", so I'm not sure how you got this last night. Sure this didn't come from your wrapper script? > > The way bison files are managed needs to be fixed so >that files under cvs control do not change unless a human >wants them to change. That is exactly the current situation. The problem is that someone checked in a new version of the .cvs file while you also had uncommitted changes (from running bison locally). However, I agree in general that these files are awkward to deal with. There's only two solutions I can think of: (a) rewrite the parser to be recursive descent and avoid use of bison, or (b) require all platforms to have bison. Neither are attractive. I'm interested because I'd like to fix this as part of the scons work. Reid. From jeffc at jolt-lang.org Thu Apr 26 10:03:48 2007 From: jeffc at jolt-lang.org (Jeff Cohen) Date: Thu, 26 Apr 2007 08:03:48 -0700 Subject: [llvm-commits] Need better way to build bison files In-Reply-To: References: <4630B43F.1090307@jolt-lang.org> Message-ID: <4630BF54.7020407@jolt-lang.org> Reid Spencer wrote: > On Thu, 26 Apr 2007 07:16:31 -0700 > Jeff Cohen wrote: >> My nightly tester failed last night for the following reason: >> >> cvs update: conflicts found in lib/AsmParser/llvmAsmParser.cpp.cvs >> C lib/AsmParser/llvmAsmParser.cpp.cvs >> >> >> Needless to say, the tester is not in the business of modifying >> source code, but it manages to modify a file under cvs control anyway >> and do so in a way that conflicts with subsequent changes. > > The nightly tester doesn't do "update", only "checkout", so I'm > not sure how you got this last night. Sure this didn't come from > your wrapper script? Yes, it came from my wrapper script, which updates the LLVM tree used to build llvm-gcc. This is an unavoidable task in running the nightly tester unless I want everything using C/C++ to fail. > >> >> The way bison files are managed needs to be fixed so that files under >> cvs control do not change unless a human wants them to change. > > > That is exactly the current situation. The problem is that > someone checked in a new version of the .cvs file while you also > had uncommitted changes (from running bison locally). No, that is not the current situation. No human wanted those files to change, unless the mere act of building LLVM constitutes consent to modify files under cvs control. In that case, why not have it auto-commit the changes as well? Absurd? Exactly. > However, I agree in general that these files are awkward to deal > with. There's only two solutions I can think of: (a) rewrite the > parser to be recursive descent and avoid use of bison, or (b) > require all platforms to have bison. Neither are attractive. Not true. I handle this with Visual Studio. Bison is not required, nor does the act of running it alter a file under source control. It isn't hard to do. Just don't modify the *.cvs files automatically. Have a separate makefile target to do that. Will people sometimes forget to do that? Yes. And someone will notice and point it out. And no one will have to deal with bogus conflicts again, or have to prevent modified *.cvs files from being committed when no changes were made to any *.y files, yet they got modified anyway. > I'm interested because I'd like to fix this as part of the scons > work. > > Reid. > > > > From jeffc at jolt-lang.org Thu Apr 26 10:08:06 2007 From: jeffc at jolt-lang.org (Jeff Cohen) Date: Thu, 26 Apr 2007 10:08:06 -0500 Subject: [llvm-commits] CVS: llvm/include/llvm/ADT/BitVector.h Message-ID: <200704261508.l3QF861a022480@zion.cs.uiuc.edu> Changes in directory llvm/include/llvm/ADT: BitVector.h updated: 1.21 -> 1.22 --- Log message: Rename identifier that GCC uses as a macro, breaking llvm-gcc build. --- Diffs of the changes: (+22 -22) BitVector.h | 44 ++++++++++++++++++++++---------------------- 1 files changed, 22 insertions(+), 22 deletions(-) Index: llvm/include/llvm/ADT/BitVector.h diff -u llvm/include/llvm/ADT/BitVector.h:1.21 llvm/include/llvm/ADT/BitVector.h:1.22 --- llvm/include/llvm/ADT/BitVector.h:1.21 Mon Apr 16 13:10:22 2007 +++ llvm/include/llvm/ADT/BitVector.h Thu Apr 26 10:07:47 2007 @@ -24,7 +24,7 @@ class BitVector { typedef unsigned long BitWord; - enum { BITS_PER_WORD = sizeof(BitWord) * 8 }; + enum { BITWORD_SIZE = sizeof(BitWord) * 8 }; BitWord *Bits; // Actual bits. unsigned Size; // Size of bitvector in bits. @@ -42,8 +42,8 @@ public: reference(BitVector &b, unsigned Idx) { - WordRef = &b.Bits[Idx / BITS_PER_WORD]; - BitPos = Idx % BITS_PER_WORD; + WordRef = &b.Bits[Idx / BITWORD_SIZE]; + BitPos = Idx % BITWORD_SIZE; } ~reference() {} @@ -129,9 +129,9 @@ for (unsigned i = 0; i < NumBitWords(size()); ++i) if (Bits[i] != 0) { if (sizeof(BitWord) == 4) - return i * BITS_PER_WORD + CountTrailingZeros_32(Bits[i]); + return i * BITWORD_SIZE + CountTrailingZeros_32(Bits[i]); else if (sizeof(BitWord) == 8) - return i * BITS_PER_WORD + CountTrailingZeros_64(Bits[i]); + return i * BITWORD_SIZE + CountTrailingZeros_64(Bits[i]); else assert(0 && "Unsupported!"); } @@ -145,17 +145,17 @@ if (Prev >= Size) return -1; - unsigned WordPos = Prev / BITS_PER_WORD; - unsigned BitPos = Prev % BITS_PER_WORD; + unsigned WordPos = Prev / BITWORD_SIZE; + unsigned BitPos = Prev % BITWORD_SIZE; BitWord Copy = Bits[WordPos]; // Mask off previous bits. Copy &= ~0L << BitPos; if (Copy != 0) { if (sizeof(BitWord) == 4) - return WordPos * BITS_PER_WORD + CountTrailingZeros_32(Copy); + return WordPos * BITWORD_SIZE + CountTrailingZeros_32(Copy); else if (sizeof(BitWord) == 8) - return WordPos * BITS_PER_WORD + CountTrailingZeros_64(Copy); + return WordPos * BITWORD_SIZE + CountTrailingZeros_64(Copy); else assert(0 && "Unsupported!"); } @@ -164,9 +164,9 @@ for (unsigned i = WordPos+1; i < NumBitWords(size()); ++i) if (Bits[i] != 0) { if (sizeof(BitWord) == 4) - return i * BITS_PER_WORD + CountTrailingZeros_32(Bits[i]); + return i * BITWORD_SIZE + CountTrailingZeros_32(Bits[i]); else if (sizeof(BitWord) == 8) - return i * BITS_PER_WORD + CountTrailingZeros_64(Bits[i]); + return i * BITWORD_SIZE + CountTrailingZeros_64(Bits[i]); else assert(0 && "Unsupported!"); } @@ -180,7 +180,7 @@ /// resize - Grow or shrink the bitvector. void resize(unsigned N, bool t = false) { - if (N > Capacity * BITS_PER_WORD) { + if (N > Capacity * BITWORD_SIZE) { unsigned OldCapacity = Capacity; grow(N); init_words(&Bits[OldCapacity], (Capacity-OldCapacity), t); @@ -190,7 +190,7 @@ } void reserve(unsigned N) { - if (N > Capacity * BITS_PER_WORD) + if (N > Capacity * BITWORD_SIZE) grow(N); } @@ -202,7 +202,7 @@ } BitVector &set(unsigned Idx) { - Bits[Idx / BITS_PER_WORD] |= 1L << (Idx % BITS_PER_WORD); + Bits[Idx / BITWORD_SIZE] |= 1L << (Idx % BITWORD_SIZE); return *this; } @@ -212,7 +212,7 @@ } BitVector &reset(unsigned Idx) { - Bits[Idx / BITS_PER_WORD] &= ~(1L << (Idx % BITS_PER_WORD)); + Bits[Idx / BITWORD_SIZE] &= ~(1L << (Idx % BITWORD_SIZE)); return *this; } @@ -224,7 +224,7 @@ } BitVector &flip(unsigned Idx) { - Bits[Idx / BITS_PER_WORD] ^= 1L << (Idx % BITS_PER_WORD); + Bits[Idx / BITWORD_SIZE] ^= 1L << (Idx % BITWORD_SIZE); return *this; } @@ -239,8 +239,8 @@ } bool operator[](unsigned Idx) const { - BitWord Mask = 1L << (Idx % BITS_PER_WORD); - return (Bits[Idx / BITS_PER_WORD] & Mask) != 0; + BitWord Mask = 1L << (Idx % BITWORD_SIZE); + return (Bits[Idx / BITWORD_SIZE] & Mask) != 0; } bool test(unsigned Idx) const { @@ -290,7 +290,7 @@ Size = RHS.size(); unsigned RHSWords = NumBitWords(Size); - if (Size <= Capacity * BITS_PER_WORD) { + if (Size <= Capacity * BITWORD_SIZE) { std::copy(RHS.Bits, &RHS.Bits[RHSWords], Bits); clear_unused_bits(); return *this; @@ -310,14 +310,14 @@ private: unsigned NumBitWords(unsigned S) const { - return (S + BITS_PER_WORD-1) / BITS_PER_WORD; + return (S + BITWORD_SIZE-1) / BITWORD_SIZE; } // Clear the unused top bits in the high word. void clear_unused_bits() { - unsigned ExtraBits = Size % BITS_PER_WORD; + unsigned ExtraBits = Size % BITWORD_SIZE; if (ExtraBits) { - unsigned index = Size / BITS_PER_WORD; + unsigned index = Size / BITWORD_SIZE; Bits[index] &= ~(~0L << ExtraBits); } } From rspencer at reidspencer.com Thu Apr 26 10:11:50 2007 From: rspencer at reidspencer.com (Reid Spencer) Date: Thu, 26 Apr 2007 08:11:50 -0700 Subject: [llvm-commits] Need better way to build bison files In-Reply-To: <4630BF54.7020407@jolt-lang.org> References: <4630B43F.1090307@jolt-lang.org> <4630BF54.7020407@jolt-lang.org> Message-ID: On Thu, 26 Apr 2007 08:03:48 -0700 Jeff Cohen wrote: >Reid Spencer wrote: >> On Thu, 26 Apr 2007 07:16:31 -0700 >> Jeff Cohen wrote: >>> My nightly tester failed last night for the following reason: >>> >>> cvs update: conflicts found in lib/AsmParser/llvmAsmParser.cpp.cvs >>> C lib/AsmParser/llvmAsmParser.cpp.cvs >>> >>> >>> Needless to say, the tester is not in the business of modifying >>> source code, but it manages to modify a file under cvs control anyway >>> and do so in a way that conflicts with subsequent changes. >> >> The nightly tester doesn't do "update", only "checkout", so I'm >> not sure how you got this last night. Sure this didn't come from >> your wrapper script? >Yes, it came from my wrapper script, which updates the LLVM tree used to build llvm-gcc. This is an unavoidable task in running the nightly tester unless I want everything using C/C++ to fail. Yes, I understand, but it is also incumbent upon your wrapper script to make sure it doesn't fail. Try removing the *.cvs files in utils/TableGen lib/AsmParser and tools/llvm-upgrade before you do the update. This should avoid the problem. To ensure your bison is used for the build, touch your .y files as well. >> >>> >>> The way bison files are managed needs to be fixed so that files under >>> cvs control do not change unless a human wants them to change. >> >> >> That is exactly the current situation. The problem is that >> someone checked in a new version of the .cvs file while you also >> had uncommitted changes (from running bison locally). > >No, that is not the current situation. No human wanted those files to change, unless the mere act of building LLVM constitutes consent to modify files under cvs control. In that case, why not have it auto-commit the changes as well? Absurd? Exactly. > >> However, I agree in general that these files are awkward to deal >> with. There's only two solutions I can think of: (a) rewrite the >> parser to be recursive descent and avoid use of bison, or (b) >> require all platforms to have bison. Neither are attractive. > >Not true. I handle this with Visual Studio. Bison is not required, nor does the act of running it alter a file under source control. It isn't hard to do. Just don't modify the *.cvs files automatically. Have a separate makefile target to do that. Will people sometimes forget to do that? Yes. And someone will notice and point it out. And no one will have to deal with bogus conflicts again, or have to prevent modified *.cvs files from being committed when no changes were made to any *.y files, yet they got modified anyway. That's not a bad idea. You'll need to convince Chris, however :) > >> I'm interested because I'd like to fix this as part of the scons >> work. >> >> Reid. >> >> >> >> > From clattner at apple.com Thu Apr 26 10:38:23 2007 From: clattner at apple.com (Chris Lattner) Date: Thu, 26 Apr 2007 08:38:23 -0700 Subject: [llvm-commits] Need better way to build bison files In-Reply-To: <4630B43F.1090307@jolt-lang.org> References: <4630B43F.1090307@jolt-lang.org> Message-ID: <90574B16-76BD-45AE-BBE8-4CC7600B9DDC@apple.com> On Apr 26, 2007, at 7:16 AM, Jeff Cohen wrote: > My nightly tester failed last night for the following reason: > > cvs update: conflicts found in lib/AsmParser/llvmAsmParser.cpp.cvs > C lib/AsmParser/llvmAsmParser.cpp.cvs > > Needless to say, the tester is not in the business of modifying > source code, but it manages to modify a file under cvs control > anyway and do so in a way that conflicts with subsequent changes. This is by design. Why does your nightly tester do a cvs up? -Chris From zhousheng00 at gmail.com Thu Apr 26 11:40:43 2007 From: zhousheng00 at gmail.com (Zhou Sheng) Date: Thu, 26 Apr 2007 11:40:43 -0500 Subject: [llvm-commits] CVS: llvm/lib/Support/ConstantRange.cpp Message-ID: <200704261640.l3QGehnP025157@zion.cs.uiuc.edu> Changes in directory llvm/lib/Support: ConstantRange.cpp updated: 1.44 -> 1.45 --- Log message: Using APInt more efficiently. --- Diffs of the changes: (+3 -5) ConstantRange.cpp | 8 +++----- 1 files changed, 3 insertions(+), 5 deletions(-) Index: llvm/lib/Support/ConstantRange.cpp diff -u llvm/lib/Support/ConstantRange.cpp:1.44 llvm/lib/Support/ConstantRange.cpp:1.45 --- llvm/lib/Support/ConstantRange.cpp:1.44 Fri Apr 13 00:57:32 2007 +++ llvm/lib/Support/ConstantRange.cpp Thu Apr 26 11:40:25 2007 @@ -44,22 +44,20 @@ Lower(L), Upper(U) { assert(L.getBitWidth() == U.getBitWidth() && "ConstantRange with unequal bit widths"); - uint32_t BitWidth = L.getBitWidth(); - assert((L != U || (L == APInt::getMaxValue(BitWidth) || - L == APInt::getMinValue(BitWidth))) && + assert((L != U || (L.isMaxValue() || L.isMinValue())) && "Lower == Upper, but they aren't min or max value!"); } /// isFullSet - Return true if this set contains all of the elements possible /// for this data-type bool ConstantRange::isFullSet() const { - return Lower == Upper && Lower == APInt::getMaxValue(getBitWidth()); + return Lower == Upper && Lower.isMaxValue(); } /// isEmptySet - Return true if this set contains no members. /// bool ConstantRange::isEmptySet() const { - return Lower == Upper && Lower == APInt::getMinValue(getBitWidth()); + return Lower == Upper && Lower.isMinValue(); } /// isWrappedSet - Return true if this set wraps around the top of the range, From zhousheng00 at gmail.com Thu Apr 26 11:42:25 2007 From: zhousheng00 at gmail.com (Zhou Sheng) Date: Thu, 26 Apr 2007 11:42:25 -0500 Subject: [llvm-commits] CVS: llvm/lib/Transforms/Scalar/PredicateSimplifier.cpp Message-ID: <200704261642.l3QGgPp7025195@zion.cs.uiuc.edu> Changes in directory llvm/lib/Transforms/Scalar: PredicateSimplifier.cpp updated: 1.70 -> 1.71 --- Log message: Using APInt more efficiently. --- Diffs of the changes: (+4 -5) PredicateSimplifier.cpp | 9 ++++----- 1 files changed, 4 insertions(+), 5 deletions(-) Index: llvm/lib/Transforms/Scalar/PredicateSimplifier.cpp diff -u llvm/lib/Transforms/Scalar/PredicateSimplifier.cpp:1.70 llvm/lib/Transforms/Scalar/PredicateSimplifier.cpp:1.71 --- llvm/lib/Transforms/Scalar/PredicateSimplifier.cpp:1.70 Tue Apr 24 23:18:54 2007 +++ llvm/lib/Transforms/Scalar/PredicateSimplifier.cpp Thu Apr 26 11:42:07 2007 @@ -748,14 +748,13 @@ return ConstantRange(APInt::getSignedMinValue(W), CR.getSignedMax()); case ICmpInst::ICMP_ULE: { APInt UMax(CR.getUnsignedMax()); - if (UMax == APInt::getMaxValue(W)) + if (UMax.isMaxValue()) return ConstantRange(W); return ConstantRange(APInt::getMinValue(W), UMax + 1); } case ICmpInst::ICMP_SLE: { APInt SMax(CR.getSignedMax()); - if (SMax == APInt::getSignedMaxValue(W) || - SMax + 1 == APInt::getSignedMaxValue(W)) + if (SMax.isMaxSignedValue() || (SMax+1).isMaxSignedValue()) return ConstantRange(W); return ConstantRange(APInt::getSignedMinValue(W), SMax + 1); } @@ -766,13 +765,13 @@ APInt::getSignedMinValue(W)); case ICmpInst::ICMP_UGE: { APInt UMin(CR.getUnsignedMin()); - if (UMin == APInt::getMinValue(W)) + if (UMin.isMinValue()) return ConstantRange(W); return ConstantRange(UMin, APInt::getNullValue(W)); } case ICmpInst::ICMP_SGE: { APInt SMin(CR.getSignedMin()); - if (SMin == APInt::getSignedMinValue(W)) + if (SMin.isMinSignedValue()) return ConstantRange(W); return ConstantRange(SMin, APInt::getSignedMinValue(W)); } From zhousheng00 at gmail.com Thu Apr 26 11:45:07 2007 From: zhousheng00 at gmail.com (Zhou Sheng) Date: Thu, 26 Apr 2007 11:45:07 -0500 Subject: [llvm-commits] CVS: llvm/test/Analysis/ScalarEvolution/SolveQuadraticEquation.ll trip-count2.ll Message-ID: <200704261645.l3QGj7XD025258@zion.cs.uiuc.edu> Changes in directory llvm/test/Analysis/ScalarEvolution: SolveQuadraticEquation.ll added (r1.1) trip-count2.ll added (r1.1) --- Log message: Add two test cases to cover apintification change. --- Diffs of the changes: (+67 -0) SolveQuadraticEquation.ll | 32 ++++++++++++++++++++++++++++++++ trip-count2.ll | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 67 insertions(+) Index: llvm/test/Analysis/ScalarEvolution/SolveQuadraticEquation.ll diff -c /dev/null llvm/test/Analysis/ScalarEvolution/SolveQuadraticEquation.ll:1.1 *** /dev/null Thu Apr 26 11:44:58 2007 --- llvm/test/Analysis/ScalarEvolution/SolveQuadraticEquation.ll Thu Apr 26 11:44:48 2007 *************** *** 0 **** --- 1,32 ---- + ; RUN: llvm-as < %s | opt -analyze -scalar-evolution |& \ + ; RUN: grep {100 iterations} + ; PR1101 + + @A = weak global [1000 x i32] zeroinitializer, align 32 + + + define void @test(i32 %N) { + entry: + "alloca point" = bitcast i32 0 to i32 ; [#uses=0] + br label %bb3 + + bb: ; preds = %bb3 + %tmp = getelementptr [1000 x i32]* @A, i32 0, i32 %i.0 ; [#uses=1] + store i32 123, i32* %tmp + %tmp2 = add i32 %i.0, 1 ; [#uses=1] + br label %bb3 + + bb3: ; preds = %bb, %entry + %i.0 = phi i32 [ 2, %entry ], [ %tmp2, %bb ] ; [#uses=3] + %SQ = mul i32 %i.0, %i.0 + %tmp4 = mul i32 %i.0, 2 + %tmp5 = sub i32 %SQ, %tmp4 + %tmp3 = icmp sle i32 %tmp5, 9999 ; [#uses=1] + br i1 %tmp3, label %bb, label %bb5 + + bb5: ; preds = %bb3 + br label %return + + return: ; preds = %bb5 + ret void + } Index: llvm/test/Analysis/ScalarEvolution/trip-count2.ll diff -c /dev/null llvm/test/Analysis/ScalarEvolution/trip-count2.ll:1.1 *** /dev/null Thu Apr 26 11:45:07 2007 --- llvm/test/Analysis/ScalarEvolution/trip-count2.ll Thu Apr 26 11:44:48 2007 *************** *** 0 **** --- 1,35 ---- + ; RUN: llvm-as < %s | opt -analyze -scalar-evolution |& \ + ; RUN: grep {4 iterations} + ; PR1101 + + @A = weak global [1000 x i32] zeroinitializer, align 32 + + + define void @test(i32 %N) { + entry: + "alloca point" = bitcast i32 0 to i32 ; [#uses=0] + br label %bb3 + + bb: ; preds = %bb3 + %tmp = getelementptr [1000 x i32]* @A, i32 0, i32 %i.0 ; [#uses=1] + store i32 123, i32* %tmp + %tmp4 = mul i32 %i.0, 4 ; [#uses=1] + %tmp5 = or i32 %tmp4, 1 + %tmp61 = xor i32 %tmp5, -2147483648 + %tmp6 = trunc i32 %tmp61 to i16 + %tmp71 = shl i16 %tmp6, 2 + %tmp7 = zext i16 %tmp71 to i32 + %tmp2 = add i32 %tmp7, %i.0 + br label %bb3 + + bb3: ; preds = %bb, %entry + %i.0 = phi i32 [ 0, %entry ], [ %tmp2, %bb ] ; [#uses=3] + %tmp3 = icmp sle i32 %i.0, 9999 ; [#uses=1] + br i1 %tmp3, label %bb, label %bb5 + + bb5: ; preds = %bb3 + br label %return + + return: ; preds = %bb5 + ret void + } From lauro.venancio at gmail.com Thu Apr 26 12:03:39 2007 From: lauro.venancio at gmail.com (Lauro Ramos Venancio) Date: Thu, 26 Apr 2007 12:03:39 -0500 Subject: [llvm-commits] CVS: llvm/utils/TableGen/DAGISelEmitter.cpp Message-ID: <200704261703.l3QH3dJx025769@zion.cs.uiuc.edu> Changes in directory llvm/utils/TableGen: DAGISelEmitter.cpp updated: 1.293 -> 1.294 --- Log message: bugfix: remember that ResNode was declared. --- Diffs of the changes: (+3 -2) DAGISelEmitter.cpp | 5 +++-- 1 files changed, 3 insertions(+), 2 deletions(-) Index: llvm/utils/TableGen/DAGISelEmitter.cpp diff -u llvm/utils/TableGen/DAGISelEmitter.cpp:1.293 llvm/utils/TableGen/DAGISelEmitter.cpp:1.294 --- llvm/utils/TableGen/DAGISelEmitter.cpp:1.293 Fri Apr 20 16:38:10 2007 +++ llvm/utils/TableGen/DAGISelEmitter.cpp Thu Apr 26 12:03:22 2007 @@ -2851,9 +2851,10 @@ Code2 = "SDOperand " + NodeName + " = SDOperand("; } else { NodeName = "ResNode"; - if (!ResNodeDecled) + if (!ResNodeDecled) { Code2 = "SDNode *" + NodeName + " = "; - else + ResNodeDecled = true; + } else Code2 = NodeName + " = "; } From alenhar2 at cs.uiuc.edu Thu Apr 26 12:20:26 2007 From: alenhar2 at cs.uiuc.edu (Andrew Lenharth) Date: Thu, 26 Apr 2007 12:20:26 -0500 Subject: [llvm-commits] CVS: llvm-test/GenerateReport.pl TEST.dsgraph.Makefile TEST.dsgraph.gnuplot TEST.dsgraph.report TEST.dsprecision.Makefile TEST.dsprecision.report Message-ID: <200704261720.l3QHKQ9n027043@zion.cs.uiuc.edu> Changes in directory llvm-test: GenerateReport.pl updated: 1.29 -> 1.30 TEST.dsgraph.Makefile (r1.18) removed TEST.dsgraph.gnuplot (r1.1) removed TEST.dsgraph.report (r1.15) removed TEST.dsprecision.Makefile (r1.3) removed TEST.dsprecision.report (r1.5) removed --- Log message: numberic sort should not generate errors in perl, and remove dsa tests --- Diffs of the changes: (+4 -1) GenerateReport.pl | 5 ++++- 1 files changed, 4 insertions(+), 1 deletion(-) Index: llvm-test/GenerateReport.pl diff -u llvm-test/GenerateReport.pl:1.29 llvm-test/GenerateReport.pl:1.30 --- llvm-test/GenerateReport.pl:1.29 Fri Nov 3 20:35:35 2006 +++ llvm-test/GenerateReport.pl Thu Apr 26 12:20:08 2007 @@ -185,7 +185,10 @@ # Sort table now... # if ($SortNumeric) { - @Values = sort { $a->[$SortCol] <=> $b->[$SortCol] } @Values; + @Values = sort { $lhs = $a->[$SortCol]; $rhs = $b->[$SortCol]; + $lhs = 0 if ($lhs eq "*"); + $rhs = 0 if ($rhs eq "*"); + $lhs <=> $rhs } @Values; } else { @Values = sort { $a->[$SortCol] cmp $b->[$SortCol] } @Values; } From alenhar2 at cs.uiuc.edu Thu Apr 26 12:21:00 2007 From: alenhar2 at cs.uiuc.edu (Andrew Lenharth) Date: Thu, 26 Apr 2007 12:21:00 -0500 Subject: [llvm-commits] CVS: llvm-poolalloc/test/TEST.dsgraph.Makefile TEST.dsgraph.gnuplot TEST.dsgraph.report TEST.dsprecision.Makefile TEST.dsprecision.report Message-ID: <200704261721.l3QHL0kM027109@zion.cs.uiuc.edu> Changes in directory llvm-poolalloc/test: TEST.dsgraph.Makefile added (r1.1) TEST.dsgraph.gnuplot added (r1.1) TEST.dsgraph.report added (r1.1) TEST.dsprecision.Makefile added (r1.1) TEST.dsprecision.report added (r1.1) --- Log message: more dsa tests here --- Diffs of the changes: (+545 -0) TEST.dsgraph.Makefile | 78 +++++++++++++++++++++ TEST.dsgraph.gnuplot | 70 +++++++++++++++++++ TEST.dsgraph.report | 164 ++++++++++++++++++++++++++++++++++++++++++++++ TEST.dsprecision.Makefile | 113 +++++++++++++++++++++++++++++++ TEST.dsprecision.report | 120 +++++++++++++++++++++++++++++++++ 5 files changed, 545 insertions(+) Index: llvm-poolalloc/test/TEST.dsgraph.Makefile diff -c /dev/null llvm-poolalloc/test/TEST.dsgraph.Makefile:1.1 *** /dev/null Thu Apr 26 12:20:53 2007 --- llvm-poolalloc/test/TEST.dsgraph.Makefile Thu Apr 26 12:20:42 2007 *************** *** 0 **** --- 1,78 ---- + ##===- TEST.dsgraph.Makefile -------------------------------*- Makefile -*-===## + # + # This recursively traverses the programs, computing DSGraphs for each of the + # programs in the testsuite. + # + ##===----------------------------------------------------------------------===## + + RELDIR := $(subst $(PROJ_OBJ_ROOT),,$(PROJ_OBJ_DIR)) + + # We require the programs to be linked with libdummy + include $(LEVEL)/Makefile.dummylib + + # PASS - The dsgraph pass to run: ds, bu, td + PASS := td + + ANALYZE_OPTS := -stats -time-passes -only-print-main-ds -dsstats + ANALYZE_OPTS += -instcount -disable-verify + MEM := -track-memory -time-passes + + $(PROGRAMS_TO_TEST:%=Output/%.$(TEST).report.txt): \ + Output/%.$(TEST).report.txt: Output/%.lib.bc Output/%.LOC.txt $(LOPT) + @# Gather data + -($(LOPT) -analyze -$(PASS)datastructure $(ANALYZE_OPTS) $<)> $@.time.1 2>&1 + -($(LOPT) -analyze $(MEM) -$(PASS)datastructure -disable-verify $<)> $@.mem.1 2>&1 + -($(LOPT) -steens-aa -time-passes -disable-output $<) > $@.time.2 2>&1 + -($(LOPT) -steens-aa $(MEM) -disable-output $<) > $@.mem.2 2>&1 + @# Emit data. + @echo -n "LOC: " > $@ + @cat Output/$*.LOC.txt >> $@ + @echo -n "MEMINSTS: " >> $@ + - at grep 'Number of memory instructions' $@.time.1 >> $@ + @echo -n "FOLDEDNODES: " >> $@ + - at grep 'Number of folded nodes' $@.time.1 >> $@ + @echo -n "TOTALNODES: " >> $@ + - at grep 'Graphs contain.*nodes total' $@.time.1 >> $@ + @echo -n "MAXGRAPHSIZE: " >> $@ + - at grep 'Maximum graph size' $@.time.1 >> $@ + @echo -n "GLOBALSGRAPH: " >> $@ + - at grep 'td.GlobalsGraph.dot' $@.time.1 >> $@ + @echo -n "SCCSIZE: " >> $@ + - at grep 'Maximum SCC Size in Call Graph' $@.time.1 >> $@ + @echo -n "ACCESSES TYPED: " >> $@ + - at grep 'Number of loads/stores which are fully typed' $@.time.1 >> $@ + @echo -n "ACCESSES UNTYPED: " >> $@ + - at grep 'Number of loads/stores which are untyped' $@.time.1 >> $@ + @# Emit timing data. + @echo -n "TIME: " >> $@ + - at grep ' Local Data Structure' $@.time.1 >> $@ + @echo -n "TIME: " >> $@ + - at grep ' Bottom-up Data Structure' $@.time.1 >> $@ + @echo -n "TIME: " >> $@ + - at grep ' Top-down Data Structure' $@.time.1 >> $@ + @echo -n "TIME: " >> $@ + - at grep ' Steensgaard.s alias analysis' $@.time.2 >> $@ + @# Emit space data. + @echo -n "MEM: " >> $@ + - at grep ' Local Data Structure' $@.mem.1 >> $@ + @echo -n "MEM: " >> $@ + - at grep ' Bottom-up Data Structure' $@.mem.1 >> $@ + @echo -n "MEM: " >> $@ + - at grep ' Top-down Data Structure' $@.mem.1 >> $@ + @echo -n "MEM: " >> $@ + - at grep ' Steensgaard.s alias analysis' $@.mem.2 >> $@ + + + + $(PROGRAMS_TO_TEST:%=test.$(TEST).%): \ + test.$(TEST).%: Output/%.$(TEST).report.txt + @echo "---------------------------------------------------------------" + @echo ">>> ========= '$(RELDIR)/$*' Program" + @echo "---------------------------------------------------------------" + @cat $< + + # Define REPORT_DEPENDENCIES so that the report is regenerated if analyze or + # dummylib is updated. + # + REPORT_DEPENDENCIES := $(DUMMYLIB) $(LOPT) + Index: llvm-poolalloc/test/TEST.dsgraph.gnuplot diff -c /dev/null llvm-poolalloc/test/TEST.dsgraph.gnuplot:1.1 *** /dev/null Thu Apr 26 12:21:00 2007 --- llvm-poolalloc/test/TEST.dsgraph.gnuplot Thu Apr 26 12:20:42 2007 *************** *** 0 **** --- 1,70 ---- + ## set size square 0.5,0.5 + ## set key left top + set nokey + set pointsize 3 + + set terminal postscript + + + ##------- log(Time) vs. log(MemOps) -------- + set output "runtimes.timeVmem.ps" + set logscale xy + #set xrange [5:50000] + #set yrange [0.0005:5] + set xlabel "Total Memory Operations" "TimesRoman,24" + set ylabel "Execution time (sec)" "TimesRoman,24" + plot 'timeVmem.txt' title "Time vs. Memory Ops" + #replot 0.000002 * x * log10(x) + + ##------- log(Time) vs. log(LOC) -------- + set output "runtimes.timeloc.ps" + set logscale xy + #set xrange [10:100000] + #set yrange [0.0005:5] + set xlabel "Lines of Code" "TimesRoman,24" + set ylabel "Execution time (sec)" "TimesRoman,24" + plot 'timeVloc.txt' title "Time vs. LOC" + replot 0.000002 * x * log10(x) + + set terminal png + + ##------- log(Time) vs. log(MemOps) -------- + set output "runtimes.timeVmem.png" + set logscale xy + #set xrange [5:50000] + #set yrange [0.0005:5] + set xlabel "Total Memory Operations" "TimesRoman,24" + set ylabel "Execution time (sec)" "TimesRoman,24" + plot 'timeVmem.txt' title "Time vs. Memory Ops" + #replot 0.000002 * x * log10(x) + + ##------- log(Time) vs. log(LOC) -------- + set output "runtimes.timeloc.png" + set logscale xy + #set xrange [10:100000] + #set yrange [0.0005:5] + set xlabel "Lines of Code" "TimesRoman,24" + set ylabel "Execution time (sec)" "TimesRoman,24" + plot 'timeVloc.txt' title "Time vs. LOC" + replot 0.000002 * x * log10(x) + + + + + ##------- log(Time/LOC) vs. log(LOC) -------- + set nologscale y + set logscale x + set xrange [100:100000] + set yrange [2:20] + set xlabel "Lines of Code" "TimesRoman,24" + set ylabel "Time/Line (microsec/line)" "TimesRoman,24" + #set output "runtimes.timelocratio.ps" + #plot '< ./runtimes.awk -v PlotTimeLOCRatio=1 data.txt' title "Time vs. LOC" + + ##------- log(Memory) vs. log(LOC) -------- + set logscale xy + set yrange [10:10000] + set xlabel "Lines of Code" "TimesRoman,24" + set ylabel "Total Memory (KB)" "TimesRoman,24" + #set output "runtimes.memloc.ps" + #plot '< ./runtimes.awk -v PlotMemLOC=1 data.txt' title "Time vs. LOC" Index: llvm-poolalloc/test/TEST.dsgraph.report diff -c /dev/null llvm-poolalloc/test/TEST.dsgraph.report:1.1 *** /dev/null Thu Apr 26 12:21:00 2007 --- llvm-poolalloc/test/TEST.dsgraph.report Thu Apr 26 12:20:42 2007 *************** *** 0 **** --- 1,164 ---- + ##=== TEST.dsgraph.report - Report description for dsgraph -----*- perl -*-===## + # + # This file defines a report to be generated for the dsgraph test. + # + ##===----------------------------------------------------------------------===## + + $SortNumeric = 1; # Sort numerically, not textually. + $TrimAllDirectories = 1; # Trim off benchmark directories. + $SortCol = 2; # Sort by #MemInstrs + $SortReverse = 1; # Sort in descending order + + + # Helper function + sub Ratio { + my ($Cols, $Col) = @_; + if ($Cols->[$Col-2] ne "*" and + $Cols->[$Col-2] != "0") { + return $Cols->[$Col-1]/$Cols->[$Col-2]; + } else { + return "n/a"; + } + } + + sub TypeSafeRatio { + my ($Cols, $Col) = @_; + my $TS = $Cols->[$Col-2]; + my $NTS = $Cols->[$Col-1]; + $TS = 0 if ($TS eq "*"); + $NTS = 0 if ($NTS eq "*"); + + if ($TS + $NTS != 0) { + return sprintf("%4.1f%%", 100*$TS/($TS+$NTS+0.0)); + } else { + return "n/a"; + } + } + + sub FormatSize { + my $Size = shift; + if ($Size > 10*1024*1024) { + return (int $Size*10 / (1024*1024))/10 . "MB"; + } elsif ($Size > 10*1024) { + return (int $Size / 1024); + } else { + return $Size . "B"; + } + } + + sub NoStar { + return "0" if ($_[0] eq '*'); + return $_[0]; + } + + sub NoCallNodes { + $_[0] =~ m/([0-9]+)\+/; + return $1; + } + + # For latex output, limit benchmarks and rename as appropriate + @LatexRowMapOrder = ( + '-' => '-', + + '181.mcf' => '181.mcf', + '256.bzip2' => '256.bzip2', + '164.gzip' => '164.gzip', + '175.vpr' => '175.vpr', + '197.parser' => '197.parser', + '186.crafty' => '186.crafty', + '300.twolf' => '300.twolf', + '255.vortex' => '255.vortex', + '254.gap' => '254.gap', + '252.eon' => '252.eon', + '253.perlbmk' => '253.perlbmk', + '176.gcc' => '176.gcc', + '-' => '-', + '179.art' => '179.art', + '183.equake' => '183.equake', + '171.swim' => '171.swim', + '172.mgrid' => '172.mgrid', + '168.wupwise' => '168.wupwise', + '173.applu' => '173.applu', + '188.ammp' => '188.ammp', + '177.mesa' => '177.mesa', + '-' => '-', + '129.compress' => '129.compress', + '130.li' => '130.li', + '124.m88ksim' => '124.m88ksim', + '132.ijpeg' => '132.ijpeg', + '099.go' => '099.go', + '134.perl' => '134.perl', + '147.vortex' => '147.vortex', + '126.gcc' => '126.gcc', + '-' => '-', + '102.swim' => '102.swim', + '101.tomcatv' => '101.tomcatv', + '107.mgrid' => '107.mgrid', + '145.fpppp' => '145.fpppp', + '104.hydro2d' => '104.hydro2d', + '110.applu' => '110.applu', + '103.su2cor' => '103.su2cor', + '146.wave5' => '146.wave5', + '-' => '-', + 'fpgrowth' => 'fpgrowth', + 'bsim' => 'boxed-sim', + 'namd' => 'NAMD', + 'povray' => 'povray31', + ); + + @LxxatexColumns = (1, 2, 19, # LOC, #MemInstrs, MaxSCC + 15,16, # Total/Collapsed nodes + 17, 18); # Max Size, GG Size + + @LatexColumns = (2, 21, 22, 23); # Type safety numbers + + + # Specify how to format columns nicely for printing... + %LatexColumnFormat = ( + # 11 => \&FormatSize, + # 12 => \&FormatSize, + 16 => \&NoStar, + 15 => \&NoCallNodes, + 18 => \&NoCallNodes + ); + + @Graphs = (["scatter", "timeVmem.txt", 27, 7], + ["scatter", "timeVloc.txt", 1, 7]); + + + # These are the columns for the report. The first entry is the header for the + # column, the second is the regex to use to match the value. Empty list create + # seperators, and closures may be put in for custom processing. + + my $USERSYSTTIME = '([0-9.]+)[ 0-9.]+\([^)]+\)[ 0-9.]+\([^)]+\) +'; + ( + # Name + ["Name:" , '\'([^\']+)\' Program'], + ["LOC:" , 'LOC: *([0-9]+)'], + ["MemInsts", '([0-9]+).*Number of memory instructions'], + [], + # Times + ["LocTm:", "${USERSYSTTIME}Local"], + ["BUTim:", "${USERSYSTTIME}Bottom"], + ["TDTim:", "${USERSYSTTIME}Top"], + ["SumTm:", sub { return SumCols(@_, 3); }], + ["SteTm:", "${USERSYSTTIME}Steensgaard"], + [], + # Sizes + ["LcSize:" , '([0-9]+) Local'], + ["BUSize:" , '([0-9]+) Bottom-up'], + ["TDSize:" , '([0-9]+) Top-down'], + ["BUTDSz:" , sub { return SumCols(@_, 2); }], + [], + # Misc stuff + ["NumNodes", 'Graphs contain \\[([0-9+]+)\\] nodes total'], + ["NumFold" , '([0-9]+).*Number of folded nodes '], + ["MaxSz" , '([0-9]+).*Maximum graph size'], + ["GlobGr" , '\\.GlobalsGraph\\.dot\'... \\[([0-9+]+)\\]'], + ["MaxSCC" , '([0-9]+).*Maximum SCC Size in Call Graph'], + [], + ["TypeSafe", "ACCESSES TYPED: *([0-9]+)"], + ["NonType", "ACCESSES UNTYPED: *([0-9]+)"], + ["TS %" , sub { return TypeSafeRatio(@_); }], + [] + ); Index: llvm-poolalloc/test/TEST.dsprecision.Makefile diff -c /dev/null llvm-poolalloc/test/TEST.dsprecision.Makefile:1.1 *** /dev/null Thu Apr 26 12:21:00 2007 --- llvm-poolalloc/test/TEST.dsprecision.Makefile Thu Apr 26 12:20:42 2007 *************** *** 0 **** --- 1,113 ---- + ##===- TEST.dsprecision.Makefile ---------------------------*- Makefile -*-===## + # + # This recursively traverses the programs, running -aa-eval on them with various + # different aa implementations. + # + ##===----------------------------------------------------------------------===## + + RELDIR := $(subst $(PROJ_OBJ_ROOT),,$(PROJ_OBJ_DIR)) + + # We require the programs to be linked with libdummy + include $(LEVEL)/Makefile.dummylib + + $(PROGRAMS_TO_TEST:%=Output/%.$(TEST).report.txt): \ + Output/%.$(TEST).report.txt: Output/%.lib.bc $(LOPT) + @echo > $@ + -($(LOPT) -basicaa -aa-eval -disable-output $<) > Output/$*.basicaa.out 2>&1 + @echo -n "BASIC MA: " >> $@ + - at grep 'may alias responses' Output/$*.basicaa.out >> $@ + @echo >> $@ + @echo -n "BASIC NOMR: " >> $@ + - at grep 'no mod/ref responses' Output/$*.basicaa.out >> $@ + @echo >> $@ + @echo -n "BASIC JUSTREF: " >> $@ + - at grep '[0-9] ref responses' Output/$*.basicaa.out >> $@ + @echo >> $@ + @echo -n "BASIC JUSTMOD: " >> $@ + - at grep 'mod responses' Output/$*.basicaa.out >> $@ + @echo >> $@ + @echo -n "BASIC MR: " >> $@ + - at grep 'mod & ref responses' Output/$*.basicaa.out >> $@ + @echo >> $@ + @ + -($(LOPT) -steens-aa -disable-ds-field-sensitivity -aa-eval \ + -disable-output $<) > Output/$*.steensfiaa.out 2>&1 + @echo -n "STEENS-FI MA: " >> $@ + - at grep 'may alias responses' Output/$*.steensfiaa.out >> $@ + @echo >> $@ + @echo -n "STEENS-FI NOMR: " >> $@ + - at grep 'no mod/ref responses' Output/$*.steensfiaa.out >> $@ + @echo >> $@ + @echo -n "STEENS-FI JUSTREF: " >> $@ + - at grep '[0-9] ref responses' Output/$*.steensfiaa.out >> $@ + @echo >> $@ + @echo -n "STEENS-FI JUSTMOD: " >> $@ + - at grep 'mod responses' Output/$*.steensfiaa.out >> $@ + @echo >> $@ + @echo -n "STEENS-FI MR: " >> $@ + - at grep 'mod & ref responses' Output/$*.steensfiaa.out >> $@ + @echo >> $@ + @ + -($(LOPT) -steens-aa -aa-eval -disable-output $<) > Output/$*.steensfsaa.out 2>&1 + @echo -n "STEENS-FS MA: " >> $@ + - at grep 'may alias responses' Output/$*.steensfsaa.out >> $@ + @echo >> $@ + @echo -n "STEENS-FS NOMR: " >> $@ + - at grep 'no mod/ref responses' Output/$*.steensfsaa.out >> $@ + @echo >> $@ + @echo -n "STEENS-FS JUSTREF: " >> $@ + - at grep '[0-9] ref responses' Output/$*.steensfsaa.out >> $@ + @echo >> $@ + @echo -n "STEENS-FS JUSTMOD: " >> $@ + - at grep 'mod responses' Output/$*.steensfsaa.out >> $@ + @echo >> $@ + @echo -n "STEENS-FS MR: " >> $@ + - at grep 'mod & ref responses' Output/$*.steensfsaa.out >> $@ + @echo >> $@ + @ + -($(LOPT) -anders-aa -aa-eval -disable-output $<) > Output/$*.andersaa.out 2>&1 + @echo -n "ANDERS MA: " >> $@ + - at grep 'may alias responses' Output/$*.andersaa.out >> $@ + @echo >> $@ + @echo -n "ANDERS NOMR: " >> $@ + - at grep 'no mod/ref responses' Output/$*.andersaa.out >> $@ + @echo >> $@ + @echo -n "ANDERS JUSTREF: " >> $@ + - at grep '[0-9] ref responses' Output/$*.andersaa.out >> $@ + @echo >> $@ + @echo -n "ANDERS JUSTMOD: " >> $@ + - at grep 'mod responses' Output/$*.andersaa.out >> $@ + @echo >> $@ + @echo -n "ANDERS MR: " >> $@ + - at grep 'mod & ref responses' Output/$*.andersaa.out >> $@ + @echo >> $@ + @ + -($(LOPT) -ds-aa -aa-eval -disable-output $<) > Output/$*.dsaa.out 2>&1 + @echo -n "DS MA: " >> $@ + - at grep 'may alias responses' Output/$*.dsaa.out >> $@ + @echo >> $@ + @echo -n "DS NOMR: " >> $@ + - at grep 'no mod/ref responses' Output/$*.dsaa.out >> $@ + @echo >> $@ + @echo -n "DS JUSTREF: " >> $@ + - at grep '[0-9] ref responses' Output/$*.dsaa.out >> $@ + @echo >> $@ + @echo -n "DS JUSTMOD: " >> $@ + - at grep 'mod responses' Output/$*.dsaa.out >> $@ + @echo >> $@ + @echo -n "DS MR: " >> $@ + - at grep 'mod & ref responses' Output/$*.dsaa.out >> $@ + @echo >> $@ + + $(PROGRAMS_TO_TEST:%=test.$(TEST).%): \ + test.$(TEST).%: Output/%.$(TEST).report.txt + @echo "---------------------------------------------------------------" + @echo ">>> ========= '$(RELDIR)/$*' Program" + @echo "---------------------------------------------------------------" + @cat $< + + # Define REPORT_DEPENDENCIES so that the report is regenerated if analyze or + # dummylib is updated. + # + REPORT_DEPENDENCIES := $(DUMMYLIB) $(LOPT) + Index: llvm-poolalloc/test/TEST.dsprecision.report diff -c /dev/null llvm-poolalloc/test/TEST.dsprecision.report:1.1 *** /dev/null Thu Apr 26 12:21:00 2007 --- llvm-poolalloc/test/TEST.dsprecision.report Thu Apr 26 12:20:42 2007 *************** *** 0 **** --- 1,120 ---- + ##=== TEST.dsprecision.report - Report for precision tests -----*- perl -*-===## + # + # This file defines a report to be generated for the precision comparison + # test. + # + ##===----------------------------------------------------------------------===## + + # Helper function + sub Ratio { + my ($Cols, $Col) = @_; + if ($Cols->[$Col-2] ne "*" and + $Cols->[$Col-2] != "0") { + return $Cols->[$Col-1]/$Cols->[$Col-2]; + } else { + return "n/a"; + } + } + + $SortCol = 0; + #$SortNumeric = 1; + $TrimAllDirectories = 1; # Trim off benchmark directories. + #$TrimRepeatedPrefix = 1; + + # Sort in ascending order + $SortReverse = 0; + + # For latex/csv output, limit benchmarks and rename as appropriate + @LatexRowMapOrder = ( + '-' => '-', + + '181.mcf' => '181.mcf', + '256.bzip2' => '256.bzip2', + '164.gzip' => '164.gzip', + '175.vpr' => '175.vpr', + '197.parser' => '197.parser', + '186.crafty' => '186.crafty', + '300.twolf' => '300.twolf', + '255.vortex' => '255.vortex', + '254.gap' => '254.gap', + '252.eon' => '252.eon', + '253.perlbmk' => '253.perlbmk', + '176.gcc' => '176.gcc', + '-' => '-', + '179.art' => '179.art', + '183.equake' => '183.equake', + '171.swim' => '171.swim', + '172.mgrid' => '172.mgrid', + '168.wupwise' => '168.wupwise', + '173.applu' => '173.applu', + '188.ammp' => '188.ammp', + '177.mesa' => '177.mesa', + '-' => '-', + '129.compress' => '129.compress', + '130.li' => '130.li', + '124.m88ksim' => '124.m88ksim', + '132.ijpeg' => '132.ijpeg', + '099.go' => '099.go', + '134.perl' => '134.perl', + '147.vortex' => '147.vortex', + '126.gcc' => '126.gcc', + '-' => '-', + '102.swim' => '102.swim', + '101.tomcatv' => '101.tomcatv', + '107.mgrid' => '107.mgrid', + '145.fpppp' => '145.fpppp', + '104.hydro2d' => '104.hydro2d', + '110.applu' => '110.applu', + '103.su2cor' => '103.su2cor', + '146.wave5' => '146.wave5', + '-' => '-', + 'fpgrowth' => 'fpgrowth', + 'bsim' => 'boxed-sim', + 'namd' => 'NAMD', + 'povray' => 'povray31', + ); + + + # These are the columns for the report. The first entry is the header for the + # column, the second is the regex to use to match the value. Empty list create + # seperators, and closures may be put in for custom processing. + ( + # Name + ["Name:", '\'([^\']+)\' Program'], + [], + # AA MayAlias Query Percents + ["basic", 'BASIC MA:.* \((.*)\)'], + ["steens-fi", 'STEENS-FI MA:.* \((.*)\)'], + ["steens-fs", 'STEENS-FS MA:.* \((.*)\)'], + ["anders", 'ANDERS MA:.* \((.*)\)'], + ["ds-aa", 'DS MA:.* \((.*)\)'], + [], + # Mod&Ref percents + ["basic", 'BASIC MR:.* \((.*)\)'], + ["steens-fi", 'STEENS-FI MR:.* \((.*)\)'], + ["steens-fs", 'STEENS-FS MR:.* \((.*)\)'], + ["anders", 'ANDERS MR:.* \((.*)\)'], + ["ds-aa", 'DS MR:.* \((.*)\)'], + [], + # Mod Percents + ["basic", 'BASIC JUSTMOD:.* \((.*)\)'], + ["steens-fi", 'STEENS-FI JUSTMOD:.* \((.*)\)'], + ["steens-fs", 'STEENS-FS JUSTMOD:.* \((.*)\)'], + ["anders", 'ANDERS JUSTMOD:.* \((.*)\)'], + ["ds-aa", 'DS JUSTMOD:.* \((.*)\)'], + [], + # Ref Percents + ["basic", 'BASIC JUSTREF:.* \((.*)\)'], + ["steens-fi", 'STEENS-FI JUSTREF:.* \((.*)\)'], + ["steens-fs", 'STEENS-FS JUSTREF:.* \((.*)\)'], + ["anders", 'ANDERS JUSTREF:.* \((.*)\)'], + ["ds-aa", 'DS JUSTREF:.* \((.*)\)'], + [], + # No Mod/Ref Percents + ["basic", 'BASIC NOMR:.* \((.*)\)'], + ["steens-fi", 'STEENS-FI NOMR:.* \((.*)\)'], + ["steens-fs", 'STEENS-FS NOMR:.* \((.*)\)'], + ["anders", 'ANDERS NOMR:.* \((.*)\)'], + ["ds-aa", 'DS NOMR:.* \((.*)\)'], + [], + ); From alenhar2 at cs.uiuc.edu Thu Apr 26 12:39:40 2007 From: alenhar2 at cs.uiuc.edu (Andrew Lenharth) Date: Thu, 26 Apr 2007 12:39:40 -0500 Subject: [llvm-commits] CVS: llvm-test/configure Message-ID: <200704261739.l3QHdesp028407@zion.cs.uiuc.edu> Changes in directory llvm-test: configure updated: 1.45 -> 1.46 --- Log message: removed these from the configure file too --- Diffs of the changes: (+0 -18) configure | 18 ------------------ 1 files changed, 18 deletions(-) Index: llvm-test/configure diff -u llvm-test/configure:1.45 llvm-test/configure:1.46 --- llvm-test/configure:1.45 Fri Feb 16 12:24:03 2007 +++ llvm-test/configure Thu Apr 26 12:39:20 2007 @@ -2003,9 +2003,6 @@ ac_config_commands="$ac_config_commands TEST.aa.Makefile" -ac_config_commands="$ac_config_commands TEST.dsgraph.report" - - ac_config_commands="$ac_config_commands TEST.aa.report" @@ -2024,18 +2021,12 @@ ac_config_commands="$ac_config_commands TEST.nightly.report" -ac_config_commands="$ac_config_commands TEST.dsgraph.Makefile" - - ac_config_commands="$ac_config_commands TEST.jit.report" ac_config_commands="$ac_config_commands TEST.typesafe.Makefile" -ac_config_commands="$ac_config_commands TEST.dsgraph.gnuplot" - - ac_config_commands="$ac_config_commands TEST.vtl.Makefile" @@ -21422,17 +21413,14 @@ "Makefile.programs") CONFIG_COMMANDS="$CONFIG_COMMANDS Makefile.programs" ;; "Makefile.tests") CONFIG_COMMANDS="$CONFIG_COMMANDS Makefile.tests" ;; "TEST.aa.Makefile") CONFIG_COMMANDS="$CONFIG_COMMANDS TEST.aa.Makefile" ;; - "TEST.dsgraph.report") CONFIG_COMMANDS="$CONFIG_COMMANDS TEST.dsgraph.report" ;; "TEST.aa.report") CONFIG_COMMANDS="$CONFIG_COMMANDS TEST.aa.report" ;; "TEST.example.Makefile") CONFIG_COMMANDS="$CONFIG_COMMANDS TEST.example.Makefile" ;; "TEST.nightly.Makefile") CONFIG_COMMANDS="$CONFIG_COMMANDS TEST.nightly.Makefile" ;; "TEST.buildrepo.Makefile") CONFIG_COMMANDS="$CONFIG_COMMANDS TEST.buildrepo.Makefile" ;; "TEST.jit.Makefile") CONFIG_COMMANDS="$CONFIG_COMMANDS TEST.jit.Makefile" ;; "TEST.nightly.report") CONFIG_COMMANDS="$CONFIG_COMMANDS TEST.nightly.report" ;; - "TEST.dsgraph.Makefile") CONFIG_COMMANDS="$CONFIG_COMMANDS TEST.dsgraph.Makefile" ;; "TEST.jit.report") CONFIG_COMMANDS="$CONFIG_COMMANDS TEST.jit.report" ;; "TEST.typesafe.Makefile") CONFIG_COMMANDS="$CONFIG_COMMANDS TEST.typesafe.Makefile" ;; - "TEST.dsgraph.gnuplot") CONFIG_COMMANDS="$CONFIG_COMMANDS TEST.dsgraph.gnuplot" ;; "TEST.vtl.Makefile") CONFIG_COMMANDS="$CONFIG_COMMANDS TEST.vtl.Makefile" ;; "External/Makefile") CONFIG_COMMANDS="$CONFIG_COMMANDS External/Makefile" ;; "External/Makefile.external") CONFIG_COMMANDS="$CONFIG_COMMANDS External/Makefile.external" ;; @@ -21987,8 +21975,6 @@ ${SHELL} ${llvm_src}/autoconf/install-sh -c ${srcdir}/Makefile.tests Makefile.tests ;; "TEST.aa.Makefile":C) ${llvm_src}/autoconf/mkinstalldirs `dirname TEST.aa.Makefile` ${SHELL} ${llvm_src}/autoconf/install-sh -c ${srcdir}/TEST.aa.Makefile TEST.aa.Makefile ;; - "TEST.dsgraph.report":C) ${llvm_src}/autoconf/mkinstalldirs `dirname TEST.dsgraph.report` - ${SHELL} ${llvm_src}/autoconf/install-sh -c ${srcdir}/TEST.dsgraph.report TEST.dsgraph.report ;; "TEST.aa.report":C) ${llvm_src}/autoconf/mkinstalldirs `dirname TEST.aa.report` ${SHELL} ${llvm_src}/autoconf/install-sh -c ${srcdir}/TEST.aa.report TEST.aa.report ;; "TEST.example.Makefile":C) ${llvm_src}/autoconf/mkinstalldirs `dirname TEST.example.Makefile` @@ -22001,14 +21987,10 @@ ${SHELL} ${llvm_src}/autoconf/install-sh -c ${srcdir}/TEST.jit.Makefile TEST.jit.Makefile ;; "TEST.nightly.report":C) ${llvm_src}/autoconf/mkinstalldirs `dirname TEST.nightly.report` ${SHELL} ${llvm_src}/autoconf/install-sh -c ${srcdir}/TEST.nightly.report TEST.nightly.report ;; - "TEST.dsgraph.Makefile":C) ${llvm_src}/autoconf/mkinstalldirs `dirname TEST.dsgraph.Makefile` - ${SHELL} ${llvm_src}/autoconf/install-sh -c ${srcdir}/TEST.dsgraph.Makefile TEST.dsgraph.Makefile ;; "TEST.jit.report":C) ${llvm_src}/autoconf/mkinstalldirs `dirname TEST.jit.report` ${SHELL} ${llvm_src}/autoconf/install-sh -c ${srcdir}/TEST.jit.report TEST.jit.report ;; "TEST.typesafe.Makefile":C) ${llvm_src}/autoconf/mkinstalldirs `dirname TEST.typesafe.Makefile` ${SHELL} ${llvm_src}/autoconf/install-sh -c ${srcdir}/TEST.typesafe.Makefile TEST.typesafe.Makefile ;; - "TEST.dsgraph.gnuplot":C) ${llvm_src}/autoconf/mkinstalldirs `dirname TEST.dsgraph.gnuplot` - ${SHELL} ${llvm_src}/autoconf/install-sh -c ${srcdir}/TEST.dsgraph.gnuplot TEST.dsgraph.gnuplot ;; "TEST.vtl.Makefile":C) ${llvm_src}/autoconf/mkinstalldirs `dirname TEST.vtl.Makefile` ${SHELL} ${llvm_src}/autoconf/install-sh -c ${srcdir}/TEST.vtl.Makefile TEST.vtl.Makefile ;; "External/Makefile":C) ${llvm_src}/autoconf/mkinstalldirs `dirname External/Makefile` From alenhar2 at cs.uiuc.edu Thu Apr 26 12:39:44 2007 From: alenhar2 at cs.uiuc.edu (Andrew Lenharth) Date: Thu, 26 Apr 2007 12:39:44 -0500 Subject: [llvm-commits] CVS: llvm-test/autoconf/configure.ac Message-ID: <200704261739.l3QHdiJQ028412@zion.cs.uiuc.edu> Changes in directory llvm-test/autoconf: configure.ac updated: 1.43 -> 1.44 --- Log message: removed these from the configure file too --- Diffs of the changes: (+0 -3) configure.ac | 3 --- 1 files changed, 3 deletions(-) Index: llvm-test/autoconf/configure.ac diff -u llvm-test/autoconf/configure.ac:1.43 llvm-test/autoconf/configure.ac:1.44 --- llvm-test/autoconf/configure.ac:1.43 Fri Feb 16 12:23:00 2007 +++ llvm-test/autoconf/configure.ac Thu Apr 26 12:39:21 2007 @@ -17,17 +17,14 @@ AC_CONFIG_MAKEFILE(Makefile.programs) AC_CONFIG_MAKEFILE(Makefile.tests) AC_CONFIG_MAKEFILE(TEST.aa.Makefile) -AC_CONFIG_MAKEFILE(TEST.dsgraph.report) AC_CONFIG_MAKEFILE(TEST.aa.report) AC_CONFIG_MAKEFILE(TEST.example.Makefile) AC_CONFIG_MAKEFILE(TEST.nightly.Makefile) AC_CONFIG_MAKEFILE(TEST.buildrepo.Makefile) AC_CONFIG_MAKEFILE(TEST.jit.Makefile) AC_CONFIG_MAKEFILE(TEST.nightly.report) -AC_CONFIG_MAKEFILE(TEST.dsgraph.Makefile) AC_CONFIG_MAKEFILE(TEST.jit.report) AC_CONFIG_MAKEFILE(TEST.typesafe.Makefile) -AC_CONFIG_MAKEFILE(TEST.dsgraph.gnuplot) AC_CONFIG_MAKEFILE(TEST.vtl.Makefile) AC_CONFIG_MAKEFILE(External/Makefile) AC_CONFIG_MAKEFILE(External/Makefile.external) From dpatel at apple.com Thu Apr 26 12:50:37 2007 From: dpatel at apple.com (Devang Patel) Date: Thu, 26 Apr 2007 12:50:37 -0500 Subject: [llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp Message-ID: <200704261750.l3QHobws028799@zion.cs.uiuc.edu> Changes in directory llvm/lib/VMCore: PassManager.cpp updated: 1.152 -> 1.153 --- Log message: Use toplevel function pass manager as OnTheFly manager. --- Diffs of the changes: (+17 -10) PassManager.cpp | 27 +++++++++++++++++---------- 1 files changed, 17 insertions(+), 10 deletions(-) Index: llvm/lib/VMCore/PassManager.cpp diff -u llvm/lib/VMCore/PassManager.cpp:1.152 llvm/lib/VMCore/PassManager.cpp:1.153 --- llvm/lib/VMCore/PassManager.cpp:1.152 Mon Apr 16 15:56:24 2007 +++ llvm/lib/VMCore/PassManager.cpp Thu Apr 26 12:50:19 2007 @@ -183,10 +183,10 @@ // Delete on the fly managers. virtual ~MPPassManager() { - for (std::map::iterator + for (std::map::iterator I = OnTheFlyManagers.begin(), E = OnTheFlyManagers.end(); I != E; ++I) { - FPPassManager *FPP = I->second; + FunctionPassManagerImpl *FPP = I->second; delete FPP; } } @@ -220,7 +220,7 @@ for (unsigned Index = 0; Index < getNumContainedPasses(); ++Index) { ModulePass *MP = getContainedPass(Index); MP->dumpPassStructure(Offset + 1); - if (FPPassManager *FPP = OnTheFlyManagers[MP]) + if (FunctionPassManagerImpl *FPP = OnTheFlyManagers[MP]) FPP->dumpPassStructure(Offset + 2); dumpLastUses(MP, Offset+1); } @@ -239,7 +239,7 @@ private: /// Collection of on the fly FPPassManagers. These managers manage /// function passes that are required by module passes. - std::map OnTheFlyManagers; + std::map OnTheFlyManagers; }; //===----------------------------------------------------------------------===// @@ -1227,13 +1227,20 @@ RequiredPass->getPotentialPassManagerType()) && "Unable to handle Pass that requires lower level Analysis pass"); - FPPassManager *FPP = OnTheFlyManagers[P]; + FunctionPassManagerImpl *FPP = OnTheFlyManagers[P]; if (!FPP) { - FPP = new FPPassManager(getDepth() + 1); + FPP = new FunctionPassManagerImpl(0); + // FPP is the top level manager. + FPP->setTopLevelManager(FPP); + OnTheFlyManagers[P] = FPP; } + FPP->add(RequiredPass); - FPP->add(RequiredPass, false); + // Register P as the last user of RequiredPass. + std::vector LU; + LU.push_back(RequiredPass); + FPP->setLastUser(LU, P); } /// Return function pass corresponding to PassInfo PI, that is @@ -1242,11 +1249,11 @@ Pass* MPPassManager::getOnTheFlyPass(Pass *MP, const PassInfo *PI, Function &F) { AnalysisID AID = PI; - FPPassManager *FPP =OnTheFlyManagers[MP]; + FunctionPassManagerImpl *FPP = OnTheFlyManagers[MP]; assert (FPP && "Unable to find on the fly pass"); - FPP->runOnFunction(F); - return FPP->findAnalysisPass(AID, false); + FPP->run(F); + return (dynamic_cast(FPP))->findAnalysisPass(AID); } From reid at x10sys.com Thu Apr 26 13:19:53 2007 From: reid at x10sys.com (Reid Spencer) Date: Thu, 26 Apr 2007 13:19:53 -0500 Subject: [llvm-commits] CVS: llvm/lib/ExecutionEngine/Interpreter/Execution.cpp Message-ID: <200704261819.l3QIJrHH029560@zion.cs.uiuc.edu> Changes in directory llvm/lib/ExecutionEngine/Interpreter: Execution.cpp updated: 1.179 -> 1.180 --- Log message: 1. Don't swap byte order in scanf. It isn't necessary and leads to incorrect results (canonicalization was dropped several commits ago). 2. Add support for fscanf. 3. Suppress a warning about cast to pointer from non-pointer-sized integer. --- Diffs of the changes: (+1 -1) Execution.cpp | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-) Index: llvm/lib/ExecutionEngine/Interpreter/Execution.cpp diff -u llvm/lib/ExecutionEngine/Interpreter/Execution.cpp:1.179 llvm/lib/ExecutionEngine/Interpreter/Execution.cpp:1.180 --- llvm/lib/ExecutionEngine/Interpreter/Execution.cpp:1.179 Tue Apr 17 12:38:28 2007 +++ llvm/lib/ExecutionEngine/Interpreter/Execution.cpp Thu Apr 26 13:19:35 2007 @@ -1073,7 +1073,7 @@ if (PtrSize != Src.IntVal.getBitWidth()) Src.IntVal = Src.IntVal.zextOrTrunc(PtrSize); - Dest.PointerVal = (PointerTy) Src.IntVal.getZExtValue(); + Dest.PointerVal = PointerTy(intptr_t(Src.IntVal.getZExtValue())); return Dest; } From evan.cheng at apple.com Thu Apr 26 13:59:57 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Thu, 26 Apr 2007 13:59:57 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/LiveIntervalAnalysis.cpp LiveVariables.cpp MachineInstr.cpp RegisterScavenging.cpp VirtRegMap.cpp Message-ID: <200704261859.l3QIxvNO030262@zion.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen: LiveIntervalAnalysis.cpp updated: 1.238 -> 1.239 LiveVariables.cpp updated: 1.78 -> 1.79 MachineInstr.cpp updated: 1.146 -> 1.147 RegisterScavenging.cpp updated: 1.15 -> 1.16 VirtRegMap.cpp updated: 1.110 -> 1.111 --- Log message: Rename findRegisterUseOperand to findRegisterUseOperandIdx to avoid confusion. --- Diffs of the changes: (+11 -10) LiveIntervalAnalysis.cpp | 2 +- LiveVariables.cpp | 3 ++- MachineInstr.cpp | 4 ++-- RegisterScavenging.cpp | 2 +- VirtRegMap.cpp | 10 +++++----- 5 files changed, 11 insertions(+), 10 deletions(-) Index: llvm/lib/CodeGen/LiveIntervalAnalysis.cpp diff -u llvm/lib/CodeGen/LiveIntervalAnalysis.cpp:1.238 llvm/lib/CodeGen/LiveIntervalAnalysis.cpp:1.239 --- llvm/lib/CodeGen/LiveIntervalAnalysis.cpp:1.238 Wed Apr 25 02:30:23 2007 +++ llvm/lib/CodeGen/LiveIntervalAnalysis.cpp Thu Apr 26 13:59:33 2007 @@ -887,7 +887,7 @@ // If the source instruction was killing the source register before the // merge, unset the isKill marker given the live range has been extended. - int UIdx = ValLREndInst->findRegisterUseOperand(IntB.reg, true); + int UIdx = ValLREndInst->findRegisterUseOperandIdx(IntB.reg, true); if (UIdx != -1) ValLREndInst->getOperand(UIdx).unsetIsKill(); Index: llvm/lib/CodeGen/LiveVariables.cpp diff -u llvm/lib/CodeGen/LiveVariables.cpp:1.78 llvm/lib/CodeGen/LiveVariables.cpp:1.79 --- llvm/lib/CodeGen/LiveVariables.cpp:1.78 Thu Apr 26 03:24:22 2007 +++ llvm/lib/CodeGen/LiveVariables.cpp Thu Apr 26 13:59:33 2007 @@ -435,7 +435,8 @@ "Cannot have a live-in virtual register!"); HandlePhysRegUse(*I, Ret); // Add live-out registers as implicit uses. - Ret->addRegOperand(*I, false, true); + if (Ret->findRegisterUseOperandIdx(*I) == -1) + Ret->addRegOperand(*I, false, true); } } Index: llvm/lib/CodeGen/MachineInstr.cpp diff -u llvm/lib/CodeGen/MachineInstr.cpp:1.146 llvm/lib/CodeGen/MachineInstr.cpp:1.147 --- llvm/lib/CodeGen/MachineInstr.cpp:1.146 Mon Mar 26 17:37:45 2007 +++ llvm/lib/CodeGen/MachineInstr.cpp Thu Apr 26 13:59:33 2007 @@ -169,10 +169,10 @@ } } -/// findRegisterUseOperand() - Returns the MachineOperand that is a use of +/// findRegisterUseOperandIdx() - Returns the MachineOperand that is a use of /// the specific register or -1 if it is not found. It further tightening /// the search criteria to a use that kills the register if isKill is true. -int MachineInstr::findRegisterUseOperand(unsigned Reg, bool isKill){ +int MachineInstr::findRegisterUseOperandIdx(unsigned Reg, bool isKill) { for (unsigned i = 0, e = getNumOperands(); i != e; ++i) { MachineOperand &MO = getOperand(i); if (MO.isReg() && MO.isUse() && MO.getReg() == Reg) Index: llvm/lib/CodeGen/RegisterScavenging.cpp diff -u llvm/lib/CodeGen/RegisterScavenging.cpp:1.15 llvm/lib/CodeGen/RegisterScavenging.cpp:1.16 --- llvm/lib/CodeGen/RegisterScavenging.cpp:1.15 Tue Apr 3 01:43:29 2007 +++ llvm/lib/CodeGen/RegisterScavenging.cpp Thu Apr 26 13:59:33 2007 @@ -235,7 +235,7 @@ I = next(I); while (I != MBB->end()) { Dist++; - if (I->findRegisterUseOperand(Reg) != -1) + if (I->findRegisterUseOperandIdx(Reg) != -1) return Dist; I = next(I); } Index: llvm/lib/CodeGen/VirtRegMap.cpp diff -u llvm/lib/CodeGen/VirtRegMap.cpp:1.110 llvm/lib/CodeGen/VirtRegMap.cpp:1.111 --- llvm/lib/CodeGen/VirtRegMap.cpp:1.110 Wed Apr 25 17:11:48 2007 +++ llvm/lib/CodeGen/VirtRegMap.cpp Thu Apr 26 13:59:33 2007 @@ -764,7 +764,7 @@ // necessary. bool WasKill = false; if (SSMI) { - int UIdx = SSMI->findRegisterUseOperand(PhysReg, true); + int UIdx = SSMI->findRegisterUseOperandIdx(PhysReg, true); if (UIdx != -1) { MachineOperand &MOK = SSMI->getOperand(UIdx); WasKill = MOK.isKill(); @@ -849,7 +849,7 @@ // necessary. bool WasKill = false; if (SSMI) { - int UIdx = SSMI->findRegisterUseOperand(PhysReg, true); + int UIdx = SSMI->findRegisterUseOperandIdx(PhysReg, true); if (UIdx != -1) { MachineOperand &MOK = SSMI->getOperand(UIdx); WasKill = MOK.isKill(); @@ -859,7 +859,7 @@ MachineInstr *CopyMI = prior(MII); if (WasKill) { // Transfer kill to the next use. - int UIdx = CopyMI->findRegisterUseOperand(PhysReg); + int UIdx = CopyMI->findRegisterUseOperandIdx(PhysReg); assert(UIdx != -1); MachineOperand &MOU = CopyMI->getOperand(UIdx); MOU.setIsKill(); @@ -957,7 +957,7 @@ // extended. Remove its kill. bool WasKill = false; if (SSMI) { - int UIdx = SSMI->findRegisterUseOperand(InReg, true); + int UIdx = SSMI->findRegisterUseOperandIdx(InReg, true); if (UIdx != -1) { MachineOperand &MOK = SSMI->getOperand(UIdx); WasKill = MOK.isKill(); @@ -967,7 +967,7 @@ if (NextMII != MBB.end()) { // If NextMII uses InReg and the use is not a two address // operand, mark it killed. - int UIdx = NextMII->findRegisterUseOperand(InReg); + int UIdx = NextMII->findRegisterUseOperandIdx(InReg); if (UIdx != -1) { MachineOperand &MOU = NextMII->getOperand(UIdx); if (WasKill) { From evan.cheng at apple.com Thu Apr 26 13:59:56 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Thu, 26 Apr 2007 13:59:56 -0500 Subject: [llvm-commits] CVS: llvm/include/llvm/CodeGen/MachineInstr.h Message-ID: <200704261859.l3QIxuil030251@zion.cs.uiuc.edu> Changes in directory llvm/include/llvm/CodeGen: MachineInstr.h updated: 1.216 -> 1.217 --- Log message: Rename findRegisterUseOperand to findRegisterUseOperandIdx to avoid confusion. --- Diffs of the changes: (+2 -2) MachineInstr.h | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) Index: llvm/include/llvm/CodeGen/MachineInstr.h diff -u llvm/include/llvm/CodeGen/MachineInstr.h:1.216 llvm/include/llvm/CodeGen/MachineInstr.h:1.217 --- llvm/include/llvm/CodeGen/MachineInstr.h:1.216 Wed Apr 25 02:24:13 2007 +++ llvm/include/llvm/CodeGen/MachineInstr.h Thu Apr 26 13:59:33 2007 @@ -390,10 +390,10 @@ delete removeFromParent(); } - /// findRegisterUseOperand() - Returns the operand index that is a use of + /// findRegisterUseOperandIdx() - Returns the operand index that is a use of /// the specific register or -1 if it is not found. It further tightening /// the search criteria to a use that kills the register if isKill is true. - int findRegisterUseOperand(unsigned Reg, bool isKill = false); + int findRegisterUseOperandIdx(unsigned Reg, bool isKill = false); /// findRegisterDefOperand() - Returns the MachineOperand that is a def of /// the specific register or NULL if it is not found. From evan.cheng at apple.com Thu Apr 26 14:00:52 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Thu, 26 Apr 2007 14:00:52 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/ARM/ARMInstrInfo.cpp ARMLoadStoreOptimizer.cpp Message-ID: <200704261900.l3QJ0qCD030303@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/ARM: ARMInstrInfo.cpp updated: 1.21 -> 1.22 ARMLoadStoreOptimizer.cpp updated: 1.7 -> 1.8 --- Log message: Rename findRegisterUseOperand to findRegisterUseOperandIdx to avoid confusion. --- Diffs of the changes: (+2 -2) ARMInstrInfo.cpp | 2 +- ARMLoadStoreOptimizer.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) Index: llvm/lib/Target/ARM/ARMInstrInfo.cpp diff -u llvm/lib/Target/ARM/ARMInstrInfo.cpp:1.21 llvm/lib/Target/ARM/ARMInstrInfo.cpp:1.22 --- llvm/lib/Target/ARM/ARMInstrInfo.cpp:1.21 Wed Apr 25 02:12:13 2007 +++ llvm/lib/Target/ARM/ARMInstrInfo.cpp Thu Apr 26 14:00:32 2007 @@ -278,7 +278,7 @@ for (unsigned j = 0; j < 2; ++j) { // Look at the two new MI's in reverse order. MachineInstr *NewMI = NewMIs[j]; - int NIdx = NewMI->findRegisterUseOperand(Reg); + int NIdx = NewMI->findRegisterUseOperandIdx(Reg); if (NIdx == -1) continue; LV.addVirtualRegisterKilled(Reg, NewMI); Index: llvm/lib/Target/ARM/ARMLoadStoreOptimizer.cpp diff -u llvm/lib/Target/ARM/ARMLoadStoreOptimizer.cpp:1.7 llvm/lib/Target/ARM/ARMLoadStoreOptimizer.cpp:1.8 --- llvm/lib/Target/ARM/ARMLoadStoreOptimizer.cpp:1.7 Mon Mar 26 17:41:48 2007 +++ llvm/lib/Target/ARM/ARMLoadStoreOptimizer.cpp Thu Apr 26 14:00:32 2007 @@ -221,7 +221,7 @@ } } - bool BaseKill = Loc->findRegisterUseOperand(Base, true) != -1; + bool BaseKill = Loc->findRegisterUseOperandIdx(Base, true) != -1; if (mergeOps(MBB, ++Loc, SOffset, Base, BaseKill, Opcode,Scratch,Regs, TII)) { Merges.push_back(prior(Loc)); for (unsigned i = SIndex, e = MemOps.size(); i != e; ++i) { From alenhar2 at cs.uiuc.edu Thu Apr 26 14:28:51 2007 From: alenhar2 at cs.uiuc.edu (Andrew Lenharth) Date: Thu, 26 Apr 2007 14:28:51 -0500 Subject: [llvm-commits] CVS: llvm/test/Feature/alignment.ll Message-ID: <200704261928.l3QJSpP2030889@zion.cs.uiuc.edu> Changes in directory llvm/test/Feature: alignment.ll updated: 1.3 -> 1.4 --- Log message: An example for PR1362: http://llvm.org/PR1362 --- Diffs of the changes: (+1 -0) alignment.ll | 1 + 1 files changed, 1 insertion(+) Index: llvm/test/Feature/alignment.ll diff -u llvm/test/Feature/alignment.ll:1.3 llvm/test/Feature/alignment.ll:1.4 --- llvm/test/Feature/alignment.ll:1.3 Fri Dec 1 22:23:07 2006 +++ llvm/test/Feature/alignment.ll Thu Apr 26 14:28:33 2007 @@ -15,5 +15,6 @@ %X = malloc int, align 4 %Y = malloc int, uint 42, align 16 %Z = malloc int, align 0 + %T = malloc int, align 256 ret int *%X } From djg at cray.com Thu Apr 26 14:39:50 2007 From: djg at cray.com (Dan Gohman) Date: Thu, 26 Apr 2007 14:39:50 -0500 Subject: [llvm-commits] CVS: llvm/include/llvm/Target/TargetData.h Message-ID: <200704261939.l3QJdoZo031125@zion.cs.uiuc.edu> Changes in directory llvm/include/llvm/Target: TargetData.h updated: 1.59 -> 1.60 --- Log message: Fix a typo in a comment. --- Diffs of the changes: (+1 -1) TargetData.h | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-) Index: llvm/include/llvm/Target/TargetData.h diff -u llvm/include/llvm/Target/TargetData.h:1.59 llvm/include/llvm/Target/TargetData.h:1.60 --- llvm/include/llvm/Target/TargetData.h:1.59 Mon Mar 19 09:25:02 2007 +++ llvm/include/llvm/Target/TargetData.h Thu Apr 26 14:39:32 2007 @@ -179,7 +179,7 @@ /// const Type *getIntPtrType() const; - /// getIndexOffset - return the offset from the beginning of the type for the + /// getIndexedOffset - return the offset from the beginning of the type for the /// specified indices. This is used to implement getelementptr. /// uint64_t getIndexedOffset(const Type *Ty, From djg at cray.com Thu Apr 26 14:41:14 2007 From: djg at cray.com (Dan Gohman) Date: Thu, 26 Apr 2007 14:41:14 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp Message-ID: <200704261941.l3QJfEQ3031166@zion.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen/SelectionDAG: ScheduleDAGRRList.cpp updated: 1.29 -> 1.30 --- Log message: Fix a typo in a comment. --- Diffs of the changes: (+1 -1) ScheduleDAGRRList.cpp | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-) Index: llvm/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp diff -u llvm/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp:1.29 llvm/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp:1.30 --- llvm/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp:1.29 Wed Mar 14 17:43:40 2007 +++ llvm/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp Thu Apr 26 14:40:56 2007 @@ -634,7 +634,7 @@ if (LPriority > RPriority) return true; else if (LPriority == RPriority) { - // Try schedule def + use closer whne Sethi-Ullman numbers are the same. + // Try schedule def + use closer when Sethi-Ullman numbers are the same. // e.g. // t1 = op t2, c1 // t3 = op t4, c2 From djg at cray.com Thu Apr 26 14:43:33 2007 From: djg at cray.com (Dan Gohman) Date: Thu, 26 Apr 2007 14:43:33 -0500 Subject: [llvm-commits] CVS: llvm/utils/TableGen/CodeGenIntrinsics.h Message-ID: <200704261943.l3QJhXai031213@zion.cs.uiuc.edu> Changes in directory llvm/utils/TableGen: CodeGenIntrinsics.h updated: 1.12 -> 1.13 --- Log message: Update a comment to reflect recent changes in the type system. --- Diffs of the changes: (+1 -1) CodeGenIntrinsics.h | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-) Index: llvm/utils/TableGen/CodeGenIntrinsics.h diff -u llvm/utils/TableGen/CodeGenIntrinsics.h:1.12 llvm/utils/TableGen/CodeGenIntrinsics.h:1.13 --- llvm/utils/TableGen/CodeGenIntrinsics.h:1.12 Sun Apr 1 02:20:01 2007 +++ llvm/utils/TableGen/CodeGenIntrinsics.h Thu Apr 26 14:43:14 2007 @@ -31,7 +31,7 @@ std::string TargetPrefix; // Target prefix, e.g. "ppc" for t-s intrinsics. /// ArgTypes - The type primitive enum value for the return value and all - /// of the arguments. These are things like Type::Int32TyID. + /// of the arguments. These are things like Type::IntegerTyID. std::vector ArgTypes; /// ArgVTs - The MVT::ValueType for each argument type. Note that this list From alenhar2 at cs.uiuc.edu Thu Apr 26 14:55:09 2007 From: alenhar2 at cs.uiuc.edu (Andrew Lenharth) Date: Thu, 26 Apr 2007 14:55:09 -0500 Subject: [llvm-commits] CVS: llvm-poolalloc/runtime/FL2Allocator/Makefile Message-ID: <200704261955.l3QJt9cW031455@zion.cs.uiuc.edu> Changes in directory llvm-poolalloc/runtime/FL2Allocator: Makefile updated: 1.5 -> 1.6 --- Log message: fix memalign casting --- Diffs of the changes: (+4 -0) Makefile | 4 ++++ 1 files changed, 4 insertions(+) Index: llvm-poolalloc/runtime/FL2Allocator/Makefile diff -u llvm-poolalloc/runtime/FL2Allocator/Makefile:1.5 llvm-poolalloc/runtime/FL2Allocator/Makefile:1.6 --- llvm-poolalloc/runtime/FL2Allocator/Makefile:1.5 Wed May 18 14:56:30 2005 +++ llvm-poolalloc/runtime/FL2Allocator/Makefile Thu Apr 26 14:54:49 2007 @@ -2,6 +2,10 @@ SHARED_LIBRARY=1 LIBRARYNAME=poolalloc_rt +ifdef ENABLE_OPTIMIZED +CXXFLAGS += -DNDEBUG=1 +endif + CXXFLAGS += -fno-exceptions include $(LEVEL)/Makefile.common From alenhar2 at cs.uiuc.edu Thu Apr 26 14:55:11 2007 From: alenhar2 at cs.uiuc.edu (Andrew Lenharth) Date: Thu, 26 Apr 2007 14:55:11 -0500 Subject: [llvm-commits] CVS: llvm-poolalloc/lib/PoolAllocate/Heuristic.cpp TransformFunctionBody.cpp Message-ID: <200704261955.l3QJtBMe031462@zion.cs.uiuc.edu> Changes in directory llvm-poolalloc/lib/PoolAllocate: Heuristic.cpp updated: 1.18 -> 1.19 TransformFunctionBody.cpp updated: 1.64 -> 1.65 --- Log message: fix memalign casting --- Diffs of the changes: (+6 -6) Heuristic.cpp | 2 +- TransformFunctionBody.cpp | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) Index: llvm-poolalloc/lib/PoolAllocate/Heuristic.cpp diff -u llvm-poolalloc/lib/PoolAllocate/Heuristic.cpp:1.18 llvm-poolalloc/lib/PoolAllocate/Heuristic.cpp:1.19 --- llvm-poolalloc/lib/PoolAllocate/Heuristic.cpp:1.18 Wed Apr 11 12:27:53 2007 +++ llvm-poolalloc/lib/PoolAllocate/Heuristic.cpp Thu Apr 26 14:54:49 2007 @@ -78,7 +78,7 @@ return true; } - if (Ty->isPrimitiveType() || isa(Ty)) + if (Ty->isFirstClassType()) return false; if (const StructType *STy = dyn_cast(Ty)) { Index: llvm-poolalloc/lib/PoolAllocate/TransformFunctionBody.cpp diff -u llvm-poolalloc/lib/PoolAllocate/TransformFunctionBody.cpp:1.64 llvm-poolalloc/lib/PoolAllocate/TransformFunctionBody.cpp:1.65 --- llvm-poolalloc/lib/PoolAllocate/TransformFunctionBody.cpp:1.64 Tue Apr 17 19:29:02 2007 +++ llvm-poolalloc/lib/PoolAllocate/TransformFunctionBody.cpp Thu Apr 26 14:54:49 2007 @@ -150,7 +150,7 @@ std::string Name = I->getName(); I->setName(""); if (Size->getType() != Type::Int32Ty) - Size = CastInst::createZExtOrBitCast(Size, Type::Int32Ty, Size->getName(), I); + Size = CastInst::createIntegerCast(Size, Type::Int32Ty, false, Size->getName(), I); // Insert a call to poolalloc Value *PH = getPoolHandle(I); @@ -341,7 +341,7 @@ Value *Size = CS.getArgument(1); if (Size->getType() != Type::Int32Ty) - Size = CastInst::createZExtOrBitCast(Size, Type::Int32Ty, Size->getName(), I); + Size = CastInst::createIntegerCast(Size, Type::Int32Ty, false, Size->getName(), I); static Type *VoidPtrTy = PointerType::get(Type::Int8Ty); if (OldPtr->getType() != VoidPtrTy) @@ -411,9 +411,9 @@ } if (Align->getType() != Type::Int32Ty) - Align = CastInst::createZExtOrBitCast(Align, Type::Int32Ty, Align->getName(), I); + Align = CastInst::createIntegerCast(Align, Type::Int32Ty, false, Align->getName(), I); if (Size->getType() != Type::Int32Ty) - Size = CastInst::createZExtOrBitCast(Size, Type::Int32Ty, Size->getName(), I); + Size = CastInst::createIntegerCast(Size, Type::Int32Ty, false, Size->getName(), I); std::string Name = I->getName(); I->setName(""); Value* Opts[3] = {PH, Align, Size}; @@ -615,7 +615,7 @@ //assert(AI == AE && "Varargs calls not handled yet!"); // Map the return value as well... - if (DS::isPointerType(TheCall->getType())) + if (isa(TheCall->getType())) DSGraph::computeNodeMapping(CalleeGraph->getReturnNodeFor(*CF), getDSNodeHFor(TheCall), NodeMapping, false); From alenhar2 at cs.uiuc.edu Thu Apr 26 14:55:14 2007 From: alenhar2 at cs.uiuc.edu (Andrew Lenharth) Date: Thu, 26 Apr 2007 14:55:14 -0500 Subject: [llvm-commits] CVS: llvm-poolalloc/test/TEST.poolalloc.Makefile Message-ID: <200704261955.l3QJtEak031467@zion.cs.uiuc.edu> Changes in directory llvm-poolalloc/test: TEST.poolalloc.Makefile updated: 1.41 -> 1.42 --- Log message: fix memalign casting --- Diffs of the changes: (+6 -4) TEST.poolalloc.Makefile | 10 ++++++---- 1 files changed, 6 insertions(+), 4 deletions(-) Index: llvm-poolalloc/test/TEST.poolalloc.Makefile diff -u llvm-poolalloc/test/TEST.poolalloc.Makefile:1.41 llvm-poolalloc/test/TEST.poolalloc.Makefile:1.42 --- llvm-poolalloc/test/TEST.poolalloc.Makefile:1.41 Wed May 18 14:56:36 2005 +++ llvm-poolalloc/test/TEST.poolalloc.Makefile Thu Apr 26 14:54:49 2007 @@ -19,18 +19,20 @@ CURDIR := $(shell cd .; pwd) PROGDIR := $(shell cd $(LLVM_SRC_ROOT)/projects/llvm-test; pwd)/ RELDIR := $(subst $(PROGDIR),,$(CURDIR)) +PADIR := /home/andrewl/Research/llvm.orig/projects/llvm-poolalloc # Pool allocator pass shared object -PA_SO := $(PROJECT_DIR)/Debug/lib/poolalloc$(SHLIBEXT) +PA_SO := $(PADIR)/Debug/lib/poolalloc$(SHLIBEXT) +DSA_SO := $(PADIR)/Debug/lib/LLVMDataStructure$(SHLIBEXT) # Pool allocator runtime library -#PA_RT := $(PROJECT_DIR)/lib/Bytecode/libpoolalloc_fl_rt.bc +#PA_RT := $(PADIR)/Debug/lib/libpoolalloc_fl_rt.bc #PA_RT_O := $(PROJECT_DIR)/lib/$(CONFIGURATION)/poolalloc_rt.o -PA_RT_O := $(PROJECT_DIR)/Release/lib/poolalloc_rt.o +PA_RT_O := $(PADIR)/Release/lib/poolalloc_rt.o #PA_RT_O := $(PROJECT_DIR)/lib/Release/poolalloc_fl_rt.o # Command to run opt with the pool allocator pass loaded -OPT_PA := $(LOPT) -load $(PA_SO) +OPT_PA := $(LOPT) -load $(DSA_SO) -load $(PA_SO) # OPT_PA_STATS - Run opt with the -stats and -time-passes options, capturing the # output to a file. From alenhar2 at cs.uiuc.edu Thu Apr 26 14:55:44 2007 From: alenhar2 at cs.uiuc.edu (Andrew Lenharth) Date: Thu, 26 Apr 2007 14:55:44 -0500 Subject: [llvm-commits] CVS: llvm-test/MultiSource/Benchmarks/Olden/voronoi/newvor.c Message-ID: <200704261955.l3QJtilt031506@zion.cs.uiuc.edu> Changes in directory llvm-test/MultiSource/Benchmarks/Olden/voronoi: newvor.c updated: 1.11 -> 1.12 --- Log message: I think the correct thing to do is decide if malloc.h should be included based on OS, not arch --- Diffs of the changes: (+1 -1) newvor.c | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-) Index: llvm-test/MultiSource/Benchmarks/Olden/voronoi/newvor.c diff -u llvm-test/MultiSource/Benchmarks/Olden/voronoi/newvor.c:1.11 llvm-test/MultiSource/Benchmarks/Olden/voronoi/newvor.c:1.12 --- llvm-test/MultiSource/Benchmarks/Olden/voronoi/newvor.c:1.11 Mon Apr 17 12:55:40 2006 +++ llvm-test/MultiSource/Benchmarks/Olden/voronoi/newvor.c Thu Apr 26 14:55:25 2007 @@ -4,7 +4,7 @@ #include #include "defines.h" -#if defined(__alpha__) +#if defined(__alpha__) || defined(__x86_64__) #include #endif From jeffc at jolt-lang.org Thu Apr 26 15:11:58 2007 From: jeffc at jolt-lang.org (Jeff Cohen) Date: Thu, 26 Apr 2007 13:11:58 -0700 Subject: [llvm-commits] CVS: llvm-test/MultiSource/Benchmarks/Olden/voronoi/newvor.c In-Reply-To: <200704261955.l3QJtilt031506@zion.cs.uiuc.edu> References: <200704261955.l3QJtilt031506@zion.cs.uiuc.edu> Message-ID: <4631078E.1090808@jolt-lang.org> Absolutely true. This change will cause the test to fail on the BSDs, which will complain that malloc.h has been replaced by stdlib.h. Please use a different test. Andrew Lenharth wrote: > Changes in directory llvm-test/MultiSource/Benchmarks/Olden/voronoi: > > newvor.c updated: 1.11 -> 1.12 > --- > Log message: > > I think the correct thing to do is decide if malloc.h should be included based on OS, not arch > > --- > Diffs of the changes: (+1 -1) > > newvor.c | 2 +- > 1 files changed, 1 insertion(+), 1 deletion(-) > > > Index: llvm-test/MultiSource/Benchmarks/Olden/voronoi/newvor.c > diff -u llvm-test/MultiSource/Benchmarks/Olden/voronoi/newvor.c:1.11 llvm-test/MultiSource/Benchmarks/Olden/voronoi/newvor.c:1.12 > --- llvm-test/MultiSource/Benchmarks/Olden/voronoi/newvor.c:1.11 Mon Apr 17 12:55:40 2006 > +++ llvm-test/MultiSource/Benchmarks/Olden/voronoi/newvor.c Thu Apr 26 14:55:25 2007 > @@ -4,7 +4,7 @@ > #include > #include "defines.h" > > -#if defined(__alpha__) > +#if defined(__alpha__) || defined(__x86_64__) > #include > #endif > > > > > _______________________________________________ > llvm-commits mailing list > llvm-commits at cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits > > > > From alenhar2 at cs.uiuc.edu Thu Apr 26 15:20:04 2007 From: alenhar2 at cs.uiuc.edu (Andrew Lenharth) Date: Thu, 26 Apr 2007 15:20:04 -0500 Subject: [llvm-commits] CVS: llvm-test/MultiSource/Benchmarks/Olden/voronoi/newvor.c Message-ID: <200704262020.l3QKK4NC032000@zion.cs.uiuc.edu> Changes in directory llvm-test/MultiSource/Benchmarks/Olden/voronoi: newvor.c updated: 1.12 -> 1.13 --- Log message: test os rather than arch --- Diffs of the changes: (+1 -1) newvor.c | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-) Index: llvm-test/MultiSource/Benchmarks/Olden/voronoi/newvor.c diff -u llvm-test/MultiSource/Benchmarks/Olden/voronoi/newvor.c:1.12 llvm-test/MultiSource/Benchmarks/Olden/voronoi/newvor.c:1.13 --- llvm-test/MultiSource/Benchmarks/Olden/voronoi/newvor.c:1.12 Thu Apr 26 14:55:25 2007 +++ llvm-test/MultiSource/Benchmarks/Olden/voronoi/newvor.c Thu Apr 26 15:19:47 2007 @@ -4,7 +4,7 @@ #include #include "defines.h" -#if defined(__alpha__) || defined(__x86_64__) +#if defined(__linux__) #include #endif From asl at math.spbu.ru Thu Apr 26 15:44:27 2007 From: asl at math.spbu.ru (Anton Korobeynikov) Date: Thu, 26 Apr 2007 15:44:27 -0500 Subject: [llvm-commits] CVS: llvm/test/CodeGen/X86/2007-04-27-BitTestsBadMask.ll Message-ID: <200704262044.l3QKiROq032420@zion.cs.uiuc.edu> Changes in directory llvm/test/CodeGen/X86: 2007-04-27-BitTestsBadMask.ll added (r1.1) --- Log message: Fixx off-by-one bug, which prevents llvm-gcc bootstrap on ppc32 --- Diffs of the changes: (+18 -0) 2007-04-27-BitTestsBadMask.ll | 18 ++++++++++++++++++ 1 files changed, 18 insertions(+) Index: llvm/test/CodeGen/X86/2007-04-27-BitTestsBadMask.ll diff -c /dev/null llvm/test/CodeGen/X86/2007-04-27-BitTestsBadMask.ll:1.1 *** /dev/null Thu Apr 26 15:44:14 2007 --- llvm/test/CodeGen/X86/2007-04-27-BitTestsBadMask.ll Thu Apr 26 15:44:04 2007 *************** *** 0 **** --- 1,18 ---- + ; RUN: llvm-as < %s | llc -march=x86 | grep -c je | grep 3 + ; RUN: llvm-as < %s | llc -march=x86-64 | grep 4297064449 + ; PR 1325+ + + define i32 @foo(i8 %bar) { + entry: + switch i8 %bar, label %bb1203 [ + i8 117, label %bb1204 + i8 85, label %bb1204 + i8 106, label %bb1204 + ] + + bb1203: ; preds = %entry + ret i32 1 + + bb1204: ; preds = %entry, %entry, %entry + ret i32 2 + } From asl at math.spbu.ru Thu Apr 26 15:44:27 2007 From: asl at math.spbu.ru (Anton Korobeynikov) Date: Thu, 26 Apr 2007 15:44:27 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp Message-ID: <200704262044.l3QKiRM7032425@zion.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen/SelectionDAG: SelectionDAGISel.cpp updated: 1.428 -> 1.429 --- Log message: Fixx off-by-one bug, which prevents llvm-gcc bootstrap on ppc32 --- Diffs of the changes: (+1 -1) SelectionDAGISel.cpp | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-) Index: llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp diff -u llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.428 llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.429 --- llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.428 Wed Apr 25 13:33:21 2007 +++ llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp Thu Apr 26 15:44:04 2007 @@ -1722,7 +1722,7 @@ << "Low bound: " << cast(minValue)->getSExtValue() << "\n" << "High bound: " << cast(maxValue)->getSExtValue() << "\n"; - if (range>IntPtrBits || + if (range>=IntPtrBits || (!(Dests.size() == 1 && numCmps >= 3) && !(Dests.size() == 2 && numCmps >= 5) && !(Dests.size() >= 3 && numCmps >= 6))) From asl at math.spbu.ru Thu Apr 26 15:49:28 2007 From: asl at math.spbu.ru (Anton Korobeynikov) Date: Thu, 26 Apr 2007 15:49:28 -0500 Subject: [llvm-commits] CVS: llvm/test/CodeGen/Generic/2007-04-27-BitTestsBadMask.ll Message-ID: <200704262049.l3QKnSuY032593@zion.cs.uiuc.edu> Changes in directory llvm/test/CodeGen/Generic: 2007-04-27-BitTestsBadMask.ll added (r1.1) --- Log message: Add test to proper place. Also, XFAIL until ppc bootstrap will be ok. --- Diffs of the changes: (+21 -0) 2007-04-27-BitTestsBadMask.ll | 21 +++++++++++++++++++++ 1 files changed, 21 insertions(+) Index: llvm/test/CodeGen/Generic/2007-04-27-BitTestsBadMask.ll diff -c /dev/null llvm/test/CodeGen/Generic/2007-04-27-BitTestsBadMask.ll:1.1 *** /dev/null Thu Apr 26 15:49:15 2007 --- llvm/test/CodeGen/Generic/2007-04-27-BitTestsBadMask.ll Thu Apr 26 15:49:05 2007 *************** *** 0 **** --- 1,21 ---- + ; RUN: llvm-as < %s | llc -march=x86 | grep -c je | grep 3 + ; RUN: llvm-as < %s | llc -march=x86-64 | grep 4297064449 + ; PR 1325+ + + ; FIXME: this is xfailed until we figure out ppc bootstrap + ; XFAIL: * + + define i32 @foo(i8 %bar) { + entry: + switch i8 %bar, label %bb1203 [ + i8 117, label %bb1204 + i8 85, label %bb1204 + i8 106, label %bb1204 + ] + + bb1203: ; preds = %entry + ret i32 1 + + bb1204: ; preds = %entry, %entry, %entry + ret i32 2 + } From llvm at cs.uiuc.edu Thu Apr 26 15:49:28 2007 From: llvm at cs.uiuc.edu (LLVM) Date: Thu, 26 Apr 2007 15:49:28 -0500 Subject: [llvm-commits] CVS: llvm/test/CodeGen/X86/2007-04-27-BitTestsBadMask.ll Message-ID: <200704262049.l3QKnSSO032598@zion.cs.uiuc.edu> Changes in directory llvm/test/CodeGen/X86: 2007-04-27-BitTestsBadMask.ll (r1.1) removed --- Log message: Add test to proper place. Also, XFAIL until ppc bootstrap will be ok. --- Diffs of the changes: (+0 -0) 0 files changed From isanbard at gmail.com Thu Apr 26 16:01:24 2007 From: isanbard at gmail.com (Bill Wendling) Date: Thu, 26 Apr 2007 16:01:24 -0500 Subject: [llvm-commits] CVS: llvm-www/Users.html Message-ID: <200704262101.l3QL1OG6000404@zion.cs.uiuc.edu> Changes in directory llvm-www: Users.html updated: 1.16 -> 1.17 --- Log message: Use an HTML entity instead of the non-Latin character. Please use entities for non-Latin characters in the future. That way all browsers will be able to render it correctly. --- Diffs of the changes: (+2 -2) Users.html | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) Index: llvm-www/Users.html diff -u llvm-www/Users.html:1.16 llvm-www/Users.html:1.17 --- llvm-www/Users.html:1.16 Mon Apr 23 10:44:54 2007 +++ llvm-www/Users.html Thu Apr 26 16:01:00 2007 @@ -83,7 +83,7 @@ - ?bo Akademi University + Åbo Akademi University Johan Lilius's Research Group, ES Lab NECST project @@ -246,6 +246,6 @@ src="http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01!">
LLVM Development List
- Last modified: $Date: 2007/04/23 15:44:54 $ + Last modified: $Date: 2007/04/26 21:01:00 $ From djg at cray.com Thu Apr 26 16:04:56 2007 From: djg at cray.com (Dan Gohman) Date: Thu, 26 Apr 2007 16:04:56 -0500 Subject: [llvm-commits] CVS: llvm/test/CodeGen/X86/dollar-name.ll Message-ID: <200704262104.l3QL4uoV000479@zion.cs.uiuc.edu> Changes in directory llvm/test/CodeGen/X86: dollar-name.ll added (r1.1) --- Log message: testcase for PR1339: http://llvm.org/PR1339 : http://llvm.org/PR1339: http://llvm.org/PR1339 --- Diffs of the changes: (+17 -0) dollar-name.ll | 17 +++++++++++++++++ 1 files changed, 17 insertions(+) Index: llvm/test/CodeGen/X86/dollar-name.ll diff -c /dev/null llvm/test/CodeGen/X86/dollar-name.ll:1.1 *** /dev/null Thu Apr 26 16:04:49 2007 --- llvm/test/CodeGen/X86/dollar-name.ll Thu Apr 26 16:04:39 2007 *************** *** 0 **** --- 1,17 ---- + ; RUN: llvm-as < %s | llc -march=x86 -x86-asm-syntax=att | grep (\$bar) | wc -l | grep 1 + ; RUN: llvm-as < %s | llc -march=x86 -x86-asm-syntax=att | grep (\$qux) | wc -l | grep 1 + ; RUN: llvm-as < %s | llc -march=x86 -x86-asm-syntax=att | grep (\$hen) | wc -l | grep 1 + ; PR1339 + + @"$bar" = global i32 zeroinitializer + @"$qux" = external global i32 + + define i32 @"$foo"() { + %m = load i32* @"$bar" + %n = load i32* @"$qux" + %t = add i32 %m, %n + %u = call i32 @"$hen"(i32 %t) + ret i32 %u + } + + declare i32 @"$hen"(i32 %a) From dpatel at apple.com Thu Apr 26 16:07:05 2007 From: dpatel at apple.com (Devang Patel) Date: Thu, 26 Apr 2007 16:07:05 -0500 Subject: [llvm-commits] CVS: llvm/include/llvm/Pass.h Message-ID: <200704262107.l3QL75cn000556@zion.cs.uiuc.edu> Changes in directory llvm/include/llvm: Pass.h updated: 1.84 -> 1.85 --- Log message: Delete Analysis Resolver. --- Diffs of the changes: (+1 -1) Pass.h | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-) Index: llvm/include/llvm/Pass.h diff -u llvm/include/llvm/Pass.h:1.84 llvm/include/llvm/Pass.h:1.85 --- llvm/include/llvm/Pass.h:1.84 Mon Apr 16 15:56:24 2007 +++ llvm/include/llvm/Pass.h Thu Apr 26 16:06:41 2007 @@ -88,7 +88,7 @@ Pass(const Pass &); // DO NOT IMPLEMENT public: Pass() : Resolver(0), PassInfoCache(0) {} - virtual ~Pass() {} // Destructor is virtual so we can be subclassed + virtual ~Pass() { delete Resolver; } // Destructor is virtual so we can be subclassed /// getPassName - Return a nice clean name for a pass. This usually /// implemented in terms of the name that is registered by one of the From isanbard at gmail.com Thu Apr 26 16:07:09 2007 From: isanbard at gmail.com (Bill Wendling) Date: Thu, 26 Apr 2007 16:07:09 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/X86/X86InstrX86-64.td Message-ID: <200704262107.l3QL79SF000567@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/X86: X86InstrX86-64.td updated: 1.14 -> 1.15 --- Log message: Have MMX registers clobbered in x86-64 too. --- Diffs of the changes: (+1 -0) X86InstrX86-64.td | 1 + 1 files changed, 1 insertion(+) Index: llvm/lib/Target/X86/X86InstrX86-64.td diff -u llvm/lib/Target/X86/X86InstrX86-64.td:1.14 llvm/lib/Target/X86/X86InstrX86-64.td:1.15 --- llvm/lib/Target/X86/X86InstrX86-64.td:1.14 Fri Dec 15 13:58:58 2006 +++ llvm/lib/Target/X86/X86InstrX86-64.td Thu Apr 26 16:06:48 2007 @@ -115,6 +115,7 @@ // All calls clobber the non-callee saved registers... let Defs = [RAX, RCX, RDX, RSI, RDI, R8, R9, R10, R11, FP0, FP1, FP2, FP3, FP4, FP5, FP6, ST0, + MM0, MM1, MM2, MM3, MM4, MM5, MM6, MM7, XMM0, XMM1, XMM2, XMM3, XMM4, XMM5, XMM6, XMM7, XMM8, XMM9, XMM10, XMM11, XMM12, XMM13, XMM14, XMM15] in { def CALL64pcrel32 : I<0xE8, RawFrm, (ops i64imm:$dst, variable_ops), From djg at cray.com Thu Apr 26 16:07:23 2007 From: djg at cray.com (Dan Gohman) Date: Thu, 26 Apr 2007 16:07:23 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/X86/X86ATTAsmPrinter.cpp Message-ID: <200704262107.l3QL7NEs000578@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/X86: X86ATTAsmPrinter.cpp updated: 1.102 -> 1.103 --- Log message: Fix PR1339: http://llvm.org/PR1339 and CodeGen/X86/dollar-name.ll --- Diffs of the changes: (+32 -3) X86ATTAsmPrinter.cpp | 35 ++++++++++++++++++++++++++++++++--- 1 files changed, 32 insertions(+), 3 deletions(-) Index: llvm/lib/Target/X86/X86ATTAsmPrinter.cpp diff -u llvm/lib/Target/X86/X86ATTAsmPrinter.cpp:1.102 llvm/lib/Target/X86/X86ATTAsmPrinter.cpp:1.103 --- llvm/lib/Target/X86/X86ATTAsmPrinter.cpp:1.102 Sun Apr 22 17:50:52 2007 +++ llvm/lib/Target/X86/X86ATTAsmPrinter.cpp Thu Apr 26 16:07:05 2007 @@ -272,16 +272,24 @@ case MachineOperand::MO_GlobalAddress: { bool isCallOp = Modifier && !strcmp(Modifier, "call"); bool isMemOp = Modifier && !strcmp(Modifier, "mem"); + bool needCloseParen = false; GlobalValue *GV = MO.getGlobal(); GlobalVariable *GVar = dyn_cast(GV); bool isThreadLocal = GVar && GVar->isThreadLocal(); - if (!isMemOp && !isCallOp) O << '$'; - std::string Name = Mang->getValueName(GV); X86SharedAsmPrinter::decorateName(Name, GV); + if (!isMemOp && !isCallOp) + O << '$'; + else if (Name[0] == '$') { + // The name begins with a dollar-sign. In order to avoid having it look + // like an integer immediate to the assembler, enclose it in parens. + O << '('; + needCloseParen = true; + } + if (printStub(TM, Subtarget)) { // Link-once, External, or Weakly-linked global variables need // non-lazily-resolved stubs @@ -352,6 +360,12 @@ GV->hasLinkOnceLinkage()) && TM.getRelocationModel() != Reloc::Static) O << "@GOTPCREL"; + + if (needCloseParen) { + needCloseParen = false; + O << ')'; + } + // Use rip when possible to reduce code size, except when // index or base register are also part of the address. e.g. // foo(%rip)(%rcx,%rax,4) is not legal @@ -359,10 +373,14 @@ } } + if (needCloseParen) + O << ')'; + return; } case MachineOperand::MO_ExternalSymbol: { bool isCallOp = Modifier && !strcmp(Modifier, "call"); + bool needCloseParen = false; std::string Name(TAI->getGlobalPrefix()); Name += MO.getSymbolName(); if (isCallOp && printStub(TM, Subtarget)) { @@ -370,7 +388,15 @@ O << TAI->getPrivateGlobalPrefix() << Name << "$stub"; return; } - if (!isCallOp) O << '$'; + if (!isCallOp) + O << '$'; + else if (Name[0] == '$') { + // The name begins with a dollar-sign. In order to avoid having it look + // like an integer immediate to the assembler, enclose it in parens. + O << '('; + needCloseParen = true; + } + O << Name; if (printGOT(TM, Subtarget)) { @@ -391,6 +417,9 @@ O << "@PLT"; } + if (needCloseParen) + O << ')'; + if (!isCallOp && Subtarget->isPICStyleRIPRel()) O << "(%rip)"; From sabre at nondot.org Thu Apr 26 16:10:01 2007 From: sabre at nondot.org (Chris Lattner) Date: Thu, 26 Apr 2007 16:10:01 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp Message-ID: <200704262110.l3QLA1A7000700@zion.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen/SelectionDAG: SelectionDAGISel.cpp updated: 1.429 -> 1.430 --- Log message: enable Anton's shift/and switch lowering stuff! It now passes ppc bootstrap successfully! woohoo... --- Diffs of the changes: (+0 -1) SelectionDAGISel.cpp | 1 - 1 files changed, 1 deletion(-) Index: llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp diff -u llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.429 llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.430 --- llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.429 Thu Apr 26 15:44:04 2007 +++ llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp Thu Apr 26 16:09:43 2007 @@ -1682,7 +1682,6 @@ CaseRecVector& WorkList, Value* SV, MachineBasicBlock* Default){ - return false; unsigned IntPtrBits = getSizeInBits(TLI.getPointerTy()); Case& FrontCase = *CR.Range.first; From clattner at apple.com Thu Apr 26 16:13:44 2007 From: clattner at apple.com (Chris Lattner) Date: Thu, 26 Apr 2007 14:13:44 -0700 Subject: [llvm-commits] CVS: llvm-test/MultiSource/Benchmarks/Olden/voronoi/newvor.c In-Reply-To: <4631078E.1090808@jolt-lang.org> References: <200704261955.l3QJtilt031506@zion.cs.uiuc.edu> <4631078E.1090808@jolt-lang.org> Message-ID: <9A852608-487D-4257-9B03-15E7F429BF68@apple.com> On Apr 26, 2007, at 1:11 PM, Jeff Cohen wrote: > Absolutely true. This change will cause the test to fail on the BSDs, > which will complain that malloc.h has been replaced by stdlib.h. > Please > use a different test. Better yet, just unconditionally #include and eliminate -Chris > > Andrew Lenharth wrote: >> Changes in directory llvm-test/MultiSource/Benchmarks/Olden/voronoi: >> >> newvor.c updated: 1.11 -> 1.12 >> --- >> Log message: >> >> I think the correct thing to do is decide if malloc.h should be >> included based on OS, not arch >> >> --- >> Diffs of the changes: (+1 -1) >> >> newvor.c | 2 +- >> 1 files changed, 1 insertion(+), 1 deletion(-) >> >> >> Index: llvm-test/MultiSource/Benchmarks/Olden/voronoi/newvor.c >> diff -u llvm-test/MultiSource/Benchmarks/Olden/voronoi/newvor.c: >> 1.11 llvm-test/MultiSource/Benchmarks/Olden/voronoi/newvor.c:1.12 >> --- llvm-test/MultiSource/Benchmarks/Olden/voronoi/newvor.c:1.11 >> Mon Apr 17 12:55:40 2006 >> +++ llvm-test/MultiSource/Benchmarks/Olden/voronoi/newvor.c Thu >> Apr 26 14:55:25 2007 >> @@ -4,7 +4,7 @@ >> #include >> #include "defines.h" >> >> -#if defined(__alpha__) >> +#if defined(__alpha__) || defined(__x86_64__) >> #include >> #endif >> >> >> >> >> _______________________________________________ >> llvm-commits mailing list >> llvm-commits at cs.uiuc.edu >> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits >> >> >> >> > > _______________________________________________ > llvm-commits mailing list > llvm-commits at cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits From clattner at apple.com Thu Apr 26 16:18:33 2007 From: clattner at apple.com (Chris Lattner) Date: Thu, 26 Apr 2007 14:18:33 -0700 Subject: [llvm-commits] CVS: llvm/include/llvm/Pass.h In-Reply-To: <200704262107.l3QL75cn000556@zion.cs.uiuc.edu> References: <200704262107.l3QL75cn000556@zion.cs.uiuc.edu> Message-ID: From IRC: heisenbug: /gdm/llvm/include/llvm/Pass.h: In destructor 'virtual llvm::Pass::~Pass()': heisenbug: /gdm/llvm/include/llvm/Pass.h:91: warning: possible problem detected in invocation of delete operator: heisenbug: /gdm/llvm/include/llvm/Pass.h:91: warning: invalid use of undefined type 'struct llvm::AnalysisResolver' Can you please move the dtor out of line? Thanks, -Chris On Apr 26, 2007, at 2:07 PM, Devang Patel wrote: > > > Changes in directory llvm/include/llvm: > > Pass.h updated: 1.84 -> 1.85 > --- > Log message: > > Delete Analysis Resolver. > > > --- > Diffs of the changes: (+1 -1) > > Pass.h | 2 +- > 1 files changed, 1 insertion(+), 1 deletion(-) > > > Index: llvm/include/llvm/Pass.h > diff -u llvm/include/llvm/Pass.h:1.84 llvm/include/llvm/Pass.h:1.85 > --- llvm/include/llvm/Pass.h:1.84 Mon Apr 16 15:56:24 2007 > +++ llvm/include/llvm/Pass.h Thu Apr 26 16:06:41 2007 > @@ -88,7 +88,7 @@ > Pass(const Pass &); // DO NOT IMPLEMENT > public: > Pass() : Resolver(0), PassInfoCache(0) {} > - virtual ~Pass() {} // Destructor is virtual so we can be subclassed > + virtual ~Pass() { delete Resolver; } // Destructor is virtual so > we can be subclassed > > /// getPassName - Return a nice clean name for a pass. This > usually > /// implemented in terms of the name that is registered by one > of the > > > > _______________________________________________ > llvm-commits mailing list > llvm-commits at cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits From clattner at apple.com Thu Apr 26 16:20:09 2007 From: clattner at apple.com (Chris Lattner) Date: Thu, 26 Apr 2007 14:20:09 -0700 Subject: [llvm-commits] CVS: llvm/lib/Target/X86/X86ATTAsmPrinter.cpp In-Reply-To: <200704262107.l3QL7NEs000578@zion.cs.uiuc.edu> References: <200704262107.l3QL7NEs000578@zion.cs.uiuc.edu> Message-ID: > Fix PR1339: http://llvm.org/PR1339 and CodeGen/X86/dollar-name.ll Nice, thanks Dan! -Chris > > --- > Diffs of the changes: (+32 -3) > > X86ATTAsmPrinter.cpp | 35 ++++++++++++++++++++++++++++++++--- > 1 files changed, 32 insertions(+), 3 deletions(-) > > > Index: llvm/lib/Target/X86/X86ATTAsmPrinter.cpp > diff -u llvm/lib/Target/X86/X86ATTAsmPrinter.cpp:1.102 llvm/lib/ > Target/X86/X86ATTAsmPrinter.cpp:1.103 > --- llvm/lib/Target/X86/X86ATTAsmPrinter.cpp:1.102 Sun Apr 22 > 17:50:52 2007 > +++ llvm/lib/Target/X86/X86ATTAsmPrinter.cpp Thu Apr 26 16:07:05 2007 > @@ -272,16 +272,24 @@ > case MachineOperand::MO_GlobalAddress: { > bool isCallOp = Modifier && !strcmp(Modifier, "call"); > bool isMemOp = Modifier && !strcmp(Modifier, "mem"); > + bool needCloseParen = false; > > GlobalValue *GV = MO.getGlobal(); > GlobalVariable *GVar = dyn_cast(GV); > bool isThreadLocal = GVar && GVar->isThreadLocal(); > > - if (!isMemOp && !isCallOp) O << '$'; > - > std::string Name = Mang->getValueName(GV); > X86SharedAsmPrinter::decorateName(Name, GV); > > + if (!isMemOp && !isCallOp) > + O << '$'; > + else if (Name[0] == '$') { > + // The name begins with a dollar-sign. In order to avoid > having it look > + // like an integer immediate to the assembler, enclose it in > parens. > + O << '('; > + needCloseParen = true; > + } > + > if (printStub(TM, Subtarget)) { > // Link-once, External, or Weakly-linked global variables need > // non-lazily-resolved stubs > @@ -352,6 +360,12 @@ > GV->hasLinkOnceLinkage()) && > TM.getRelocationModel() != Reloc::Static) > O << "@GOTPCREL"; > + > + if (needCloseParen) { > + needCloseParen = false; > + O << ')'; > + } > + > // Use rip when possible to reduce code size, except when > // index or base register are also part of the address. e.g. > // foo(%rip)(%rcx,%rax,4) is not legal > @@ -359,10 +373,14 @@ > } > } > > + if (needCloseParen) > + O << ')'; > + > return; > } > case MachineOperand::MO_ExternalSymbol: { > bool isCallOp = Modifier && !strcmp(Modifier, "call"); > + bool needCloseParen = false; > std::string Name(TAI->getGlobalPrefix()); > Name += MO.getSymbolName(); > if (isCallOp && printStub(TM, Subtarget)) { > @@ -370,7 +388,15 @@ > O << TAI->getPrivateGlobalPrefix() << Name << "$stub"; > return; > } > - if (!isCallOp) O << '$'; > + if (!isCallOp) > + O << '$'; > + else if (Name[0] == '$') { > + // The name begins with a dollar-sign. In order to avoid > having it look > + // like an integer immediate to the assembler, enclose it in > parens. > + O << '('; > + needCloseParen = true; > + } > + > O << Name; > > if (printGOT(TM, Subtarget)) { > @@ -391,6 +417,9 @@ > O << "@PLT"; > } > > + if (needCloseParen) > + O << ')'; > + > if (!isCallOp && Subtarget->isPICStyleRIPRel()) > O << "(%rip)"; > > > > > _______________________________________________ > llvm-commits mailing list > llvm-commits at cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits From asl at math.spbu.ru Thu Apr 26 16:20:23 2007 From: asl at math.spbu.ru (Anton Korobeynikov) Date: Thu, 26 Apr 2007 16:20:23 -0500 Subject: [llvm-commits] CVS: llvm/test/CodeGen/Generic/2007-04-14-BitTestsBadMask.ll 2007-04-27-BitTestsBadMask.ll Message-ID: <200704262120.l3QLKNwA000961@zion.cs.uiuc.edu> Changes in directory llvm/test/CodeGen/Generic: 2007-04-14-BitTestsBadMask.ll updated: 1.4 -> 1.5 2007-04-27-BitTestsBadMask.ll updated: 1.1 -> 1.2 --- Log message: Unxfail tests --- Diffs of the changes: (+0 -6) 2007-04-14-BitTestsBadMask.ll | 3 --- 2007-04-27-BitTestsBadMask.ll | 3 --- 2 files changed, 6 deletions(-) Index: llvm/test/CodeGen/Generic/2007-04-14-BitTestsBadMask.ll diff -u llvm/test/CodeGen/Generic/2007-04-14-BitTestsBadMask.ll:1.4 llvm/test/CodeGen/Generic/2007-04-14-BitTestsBadMask.ll:1.5 --- llvm/test/CodeGen/Generic/2007-04-14-BitTestsBadMask.ll:1.4 Mon Apr 16 12:36:06 2007 +++ llvm/test/CodeGen/Generic/2007-04-14-BitTestsBadMask.ll Thu Apr 26 16:20:04 2007 @@ -2,9 +2,6 @@ ; RUN: llvm-as < %s | llc -march=x86-64 | grep 4294981120 ; PR 1325 -; FIXME: this is xfailed until we figure out ppc bootstrap -; XFAIL: * - ; ModuleID = 'bugpoint.test.bc' target datalayout = "E-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64" target triple = "powerpc-apple-darwin8.8.0" Index: llvm/test/CodeGen/Generic/2007-04-27-BitTestsBadMask.ll diff -u llvm/test/CodeGen/Generic/2007-04-27-BitTestsBadMask.ll:1.1 llvm/test/CodeGen/Generic/2007-04-27-BitTestsBadMask.ll:1.2 --- llvm/test/CodeGen/Generic/2007-04-27-BitTestsBadMask.ll:1.1 Thu Apr 26 15:49:05 2007 +++ llvm/test/CodeGen/Generic/2007-04-27-BitTestsBadMask.ll Thu Apr 26 16:20:04 2007 @@ -2,9 +2,6 @@ ; RUN: llvm-as < %s | llc -march=x86-64 | grep 4297064449 ; PR 1325+ -; FIXME: this is xfailed until we figure out ppc bootstrap -; XFAIL: * - define i32 @foo(i8 %bar) { entry: switch i8 %bar, label %bb1203 [ From jeffc at jolt-lang.org Thu Apr 26 16:23:22 2007 From: jeffc at jolt-lang.org (Jeff Cohen) Date: Thu, 26 Apr 2007 14:23:22 -0700 Subject: [llvm-commits] CVS: llvm-test/MultiSource/Benchmarks/Olden/voronoi/newvor.c In-Reply-To: <9A852608-487D-4257-9B03-15E7F429BF68@apple.com> References: <200704261955.l3QJtilt031506@zion.cs.uiuc.edu> <4631078E.1090808@jolt-lang.org> <9A852608-487D-4257-9B03-15E7F429BF68@apple.com> Message-ID: <4631184A.3090408@jolt-lang.org> Chris Lattner wrote: > > On Apr 26, 2007, at 1:11 PM, Jeff Cohen wrote: > >> Absolutely true. This change will cause the test to fail on the BSDs, >> which will complain that malloc.h has been replaced by stdlib.h. Please >> use a different test. > > Better yet, just unconditionally #include and eliminate > > > -Chris It already does include stdlib.h. I assume it isn't enough on his system. > >> >> Andrew Lenharth wrote: >>> Changes in directory llvm-test/MultiSource/Benchmarks/Olden/voronoi: >>> >>> newvor.c updated: 1.11 -> 1.12 >>> --- >>> Log message: >>> >>> I think the correct thing to do is decide if malloc.h should be >>> included based on OS, not arch >>> >>> --- >>> Diffs of the changes: (+1 -1) >>> >>> newvor.c | 2 +- >>> 1 files changed, 1 insertion(+), 1 deletion(-) >>> >>> >>> Index: llvm-test/MultiSource/Benchmarks/Olden/voronoi/newvor.c >>> diff -u llvm-test/MultiSource/Benchmarks/Olden/voronoi/newvor.c:1.11 >>> llvm-test/MultiSource/Benchmarks/Olden/voronoi/newvor.c:1.12 >>> --- llvm-test/MultiSource/Benchmarks/Olden/voronoi/newvor.c:1.11 >>> Mon Apr 17 12:55:40 2006 >>> +++ llvm-test/MultiSource/Benchmarks/Olden/voronoi/newvor.c Thu >>> Apr 26 14:55:25 2007 >>> @@ -4,7 +4,7 @@ >>> #include >>> #include "defines.h" >>> >>> -#if defined(__alpha__) >>> +#if defined(__alpha__) || defined(__x86_64__) >>> #include >>> #endif >>> >>> >>> >>> >>> _______________________________________________ >>> llvm-commits mailing list >>> llvm-commits at cs.uiuc.edu >>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits >>> >>> >>> >>> >> >> _______________________________________________ >> llvm-commits mailing list >> llvm-commits at cs.uiuc.edu >> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits > > > > From clattner at apple.com Thu Apr 26 16:24:05 2007 From: clattner at apple.com (Chris Lattner) Date: Thu, 26 Apr 2007 14:24:05 -0700 Subject: [llvm-commits] CVS: llvm-test/MultiSource/Benchmarks/Olden/voronoi/newvor.c In-Reply-To: <4631184A.3090408@jolt-lang.org> References: <200704261955.l3QJtilt031506@zion.cs.uiuc.edu> <4631078E.1090808@jolt-lang.org> <9A852608-487D-4257-9B03-15E7F429BF68@apple.com> <4631184A.3090408@jolt-lang.org> Message-ID: <956ADDB7-D767-40A6-B2C1-7A6DF0AB7463@apple.com> On Apr 26, 2007, at 2:23 PM, Jeff Cohen wrote: > Chris Lattner wrote: >> >> On Apr 26, 2007, at 1:11 PM, Jeff Cohen wrote: >> >>> Absolutely true. This change will cause the test to fail on the >>> BSDs, >>> which will complain that malloc.h has been replaced by stdlib.h. >>> Please >>> use a different test. >> >> Better yet, just unconditionally #include and eliminate >> >> >> -Chris > > It already does include stdlib.h. I assume it isn't enough on his > system. Andrew, can alpha drop the malloc.h #include? If not, why not? We should remove all instances of malloc.h from llvm-test. -Chris From dpatel at apple.com Thu Apr 26 16:24:59 2007 From: dpatel at apple.com (Devang Patel) Date: Thu, 26 Apr 2007 14:24:59 -0700 Subject: [llvm-commits] CVS: llvm/include/llvm/Pass.h In-Reply-To: References: <200704262107.l3QL75cn000556@zion.cs.uiuc.edu> Message-ID: On Apr 26, 2007, at 2:18 PM, Chris Lattner wrote: > From IRC: > > heisenbug: /gdm/llvm/include/llvm/Pass.h: In destructor 'virtual > llvm::Pass::~Pass()': > heisenbug: /gdm/llvm/include/llvm/Pass.h:91: warning: possible > problem detected in invocation of delete operator: > heisenbug: > /gdm/llvm/include/llvm/Pass.h:91: warning: invalid use of undefined > type 'struct llvm::AnalysisResolver' > oops.. > Can you please move the dtor out of line? Thanks, sure. - Devang From jeffc at jolt-lang.org Thu Apr 26 16:32:24 2007 From: jeffc at jolt-lang.org (Jeff Cohen) Date: Thu, 26 Apr 2007 14:32:24 -0700 Subject: [llvm-commits] CVS: llvm-test/MultiSource/Benchmarks/Olden/voronoi/newvor.c In-Reply-To: <956ADDB7-D767-40A6-B2C1-7A6DF0AB7463@apple.com> References: <200704261955.l3QJtilt031506@zion.cs.uiuc.edu> <4631078E.1090808@jolt-lang.org> <9A852608-487D-4257-9B03-15E7F429BF68@apple.com> <4631184A.3090408@jolt-lang.org> <956ADDB7-D767-40A6-B2C1-7A6DF0AB7463@apple.com> Message-ID: <46311A68.5020304@jolt-lang.org> Chris Lattner wrote: > > On Apr 26, 2007, at 2:23 PM, Jeff Cohen wrote: > >> Chris Lattner wrote: >>> >>> On Apr 26, 2007, at 1:11 PM, Jeff Cohen wrote: >>> >>>> Absolutely true. This change will cause the test to fail on the BSDs, >>>> which will complain that malloc.h has been replaced by stdlib.h. >>>> Please >>>> use a different test. >>> >>> Better yet, just unconditionally #include and eliminate >>> >>> >>> -Chris >> >> It already does include stdlib.h. I assume it isn't enough on his >> system. > > Andrew, can alpha drop the malloc.h #include? If not, why not? > > We should remove all instances of malloc.h from llvm-test. > > -Chris A more interesting question is why he needed to add it for x86_64. If Linux doesn't need it for x86, it shouldn't need it for x86_64 either. From dpatel at apple.com Thu Apr 26 16:34:10 2007 From: dpatel at apple.com (Devang Patel) Date: Thu, 26 Apr 2007 16:34:10 -0500 Subject: [llvm-commits] CVS: llvm/include/llvm/Pass.h Message-ID: <200704262134.l3QLYAYs001318@zion.cs.uiuc.edu> Changes in directory llvm/include/llvm: Pass.h updated: 1.85 -> 1.86 --- Log message: Move ~Pass() from Pass.h into Pass.cpp --- Diffs of the changes: (+1 -1) Pass.h | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-) Index: llvm/include/llvm/Pass.h diff -u llvm/include/llvm/Pass.h:1.85 llvm/include/llvm/Pass.h:1.86 --- llvm/include/llvm/Pass.h:1.85 Thu Apr 26 16:06:41 2007 +++ llvm/include/llvm/Pass.h Thu Apr 26 16:33:41 2007 @@ -88,7 +88,7 @@ Pass(const Pass &); // DO NOT IMPLEMENT public: Pass() : Resolver(0), PassInfoCache(0) {} - virtual ~Pass() { delete Resolver; } // Destructor is virtual so we can be subclassed + virtual ~Pass(); /// getPassName - Return a nice clean name for a pass. This usually /// implemented in terms of the name that is registered by one of the From dpatel at apple.com Thu Apr 26 16:34:10 2007 From: dpatel at apple.com (Devang Patel) Date: Thu, 26 Apr 2007 16:34:10 -0500 Subject: [llvm-commits] CVS: llvm/lib/VMCore/Pass.cpp Message-ID: <200704262134.l3QLYA54001324@zion.cs.uiuc.edu> Changes in directory llvm/lib/VMCore: Pass.cpp updated: 1.86 -> 1.87 --- Log message: Move ~Pass() from Pass.h into Pass.cpp --- Diffs of the changes: (+5 -0) Pass.cpp | 5 +++++ 1 files changed, 5 insertions(+) Index: llvm/lib/VMCore/Pass.cpp diff -u llvm/lib/VMCore/Pass.cpp:1.86 llvm/lib/VMCore/Pass.cpp:1.87 --- llvm/lib/VMCore/Pass.cpp:1.86 Fri Apr 20 19:12:18 2007 +++ llvm/lib/VMCore/Pass.cpp Thu Apr 26 16:33:42 2007 @@ -28,6 +28,11 @@ // // Force out-of-line virtual method. +Pass::~Pass() { + delete Resolver; +} + +// Force out-of-line virtual method. ModulePass::~ModulePass() { } bool Pass::mustPreserveAnalysisID(const PassInfo *AnalysisID) const { From andrewl at lenharth.org Thu Apr 26 16:42:09 2007 From: andrewl at lenharth.org (Andrew Lenharth) Date: Thu, 26 Apr 2007 16:42:09 -0500 Subject: [llvm-commits] CVS: llvm-test/MultiSource/Benchmarks/Olden/voronoi/newvor.c In-Reply-To: <46311A68.5020304@jolt-lang.org> References: <200704261955.l3QJtilt031506@zion.cs.uiuc.edu> <4631078E.1090808@jolt-lang.org> <9A852608-487D-4257-9B03-15E7F429BF68@apple.com> <4631184A.3090408@jolt-lang.org> <956ADDB7-D767-40A6-B2C1-7A6DF0AB7463@apple.com> <46311A68.5020304@jolt-lang.org> Message-ID: <85dfcd7f0704261442i227c414fxf2dc670318b5fc03@mail.gmail.com> I need it because it isn't defined by stdlib.h on linux. I need it because it is defaulting to: int memalign(...), lacking any other definition. It happens to work in most usage this way, but it isn't correct. Andrew On 4/26/07, Jeff Cohen wrote: > Chris Lattner wrote: > > > > On Apr 26, 2007, at 2:23 PM, Jeff Cohen wrote: > > > >> Chris Lattner wrote: > >>> > >>> On Apr 26, 2007, at 1:11 PM, Jeff Cohen wrote: > >>> > >>>> Absolutely true. This change will cause the test to fail on the BSDs, > >>>> which will complain that malloc.h has been replaced by stdlib.h. > >>>> Please > >>>> use a different test. > >>> > >>> Better yet, just unconditionally #include and eliminate > >>> > >>> > >>> -Chris > >> > >> It already does include stdlib.h. I assume it isn't enough on his > >> system. > > > > Andrew, can alpha drop the malloc.h #include? If not, why not? > > > > We should remove all instances of malloc.h from llvm-test. > > > > -Chris > > A more interesting question is why he needed to add it for x86_64. If > Linux doesn't need it for x86, it shouldn't need it for x86_64 either. > > _______________________________________________ > llvm-commits mailing list > llvm-commits at cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits > From clattner at apple.com Thu Apr 26 16:51:43 2007 From: clattner at apple.com (Chris Lattner) Date: Thu, 26 Apr 2007 14:51:43 -0700 Subject: [llvm-commits] CVS: llvm-test/MultiSource/Benchmarks/Olden/voronoi/newvor.c In-Reply-To: <85dfcd7f0704261442i227c414fxf2dc670318b5fc03@mail.gmail.com> References: <200704261955.l3QJtilt031506@zion.cs.uiuc.edu> <4631078E.1090808@jolt-lang.org> <9A852608-487D-4257-9B03-15E7F429BF68@apple.com> <4631184A.3090408@jolt-lang.org> <956ADDB7-D767-40A6-B2C1-7A6DF0AB7463@apple.com> <46311A68.5020304@jolt-lang.org> <85dfcd7f0704261442i227c414fxf2dc670318b5fc03@mail.gmail.com> Message-ID: On Apr 26, 2007, at 2:42 PM, Andrew Lenharth wrote: > I need it because it isn't defined by stdlib.h on linux. I need it > because it is defaulting to: > int memalign(...), lacking any other definition. It happens to work > in most usage this way, but it isn't correct. Easy solution. In that source file, unconditionally define MEMALIGN_IS_NOT_AVAILABLE -Chris > Andrew > > On 4/26/07, Jeff Cohen wrote: >> Chris Lattner wrote: >> > >> > On Apr 26, 2007, at 2:23 PM, Jeff Cohen wrote: >> > >> >> Chris Lattner wrote: >> >>> >> >>> On Apr 26, 2007, at 1:11 PM, Jeff Cohen wrote: >> >>> >> >>>> Absolutely true. This change will cause the test to fail on >> the BSDs, >> >>>> which will complain that malloc.h has been replaced by stdlib.h. >> >>>> Please >> >>>> use a different test. >> >>> >> >>> Better yet, just unconditionally #include and >> eliminate >> >>> >> >>> >> >>> -Chris >> >> >> >> It already does include stdlib.h. I assume it isn't enough on his >> >> system. >> > >> > Andrew, can alpha drop the malloc.h #include? If not, why not? >> > >> > We should remove all instances of malloc.h from llvm-test. >> > >> > -Chris >> >> A more interesting question is why he needed to add it for >> x86_64. If >> Linux doesn't need it for x86, it shouldn't need it for x86_64 >> either. >> >> _______________________________________________ >> llvm-commits mailing list >> llvm-commits at cs.uiuc.edu >> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits >> From clattner at apple.com Thu Apr 26 19:49:36 2007 From: clattner at apple.com (Chris Lattner) Date: Thu, 26 Apr 2007 17:49:36 -0700 Subject: [llvm-commits] [126488] Fix PR1352 and CFrontend/2007-04-24-VolatileStructCopy.c In-Reply-To: <200704250848.41368.baldrick@free.fr> References: <20070425002605.38CE910426ADF@src> <200704250848.41368.baldrick@free.fr> Message-ID: On Apr 24, 2007, at 11:48 PM, Duncan Sands wrote: > Hi Chris, > >> // Non-bitfield aggregate value. >> - Emit(TREE_OPERAND(exp, 1), LV.Ptr); >> - if (DestLoc) >> + if (DestLoc) { >> + Emit(TREE_OPERAND(exp, 1), LV.Ptr); >> EmitAggregateCopy(DestLoc, LV.Ptr, TREE_TYPE(exp), >> isVolatile, false); > > why is this ^^^ right? Possibly not, I was trying to preserve current behavior, because I don't have a testcase. > Doesn't a non-null DestLoc mean you are doing something > like: A = (B = C), where DestLoc represents A, and the current > MODIFY_EXPR > represents B=C? Yes, something like that. > If so, then the above is bogus: isVolatile says whether writes > to B are volatile, not writes to A: if isVolatile is true, then you > are doing > a volatile write to A, which may or may not need it, and a non- > volatile write > to B when a volatile write is needed! Right, -Chris From sabre at nondot.org Thu Apr 26 20:20:31 2007 From: sabre at nondot.org (Chris Lattner) Date: Thu, 26 Apr 2007 20:20:31 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp Message-ID: <200704270120.l3R1KVpw005370@zion.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen/SelectionDAG: SelectionDAGISel.cpp updated: 1.430 -> 1.431 --- Log message: improve EH global handling, patch by Duncan Sands. --- Diffs of the changes: (+10 -6) SelectionDAGISel.cpp | 16 ++++++++++------ 1 files changed, 10 insertions(+), 6 deletions(-) Index: llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp diff -u llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.430 llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.431 --- llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.430 Thu Apr 26 16:09:43 2007 +++ llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp Thu Apr 26 20:20:11 2007 @@ -2610,14 +2610,18 @@ // MachineModuleInfo. std::vector TyInfo; for (unsigned i = 3, N = I.getNumOperands(); i < N; ++i) { - ConstantExpr *CE = dyn_cast(I.getOperand(i)); - if (CE && CE->getOpcode() == Instruction::BitCast && - isa(CE->getOperand(0))) { + Constant *C = cast(I.getOperand(i)); + if (GlobalVariable *GV = dyn_cast(C)) { + TyInfo.push_back(GV); + } else if (ConstantExpr *CE = dyn_cast(C)) { + assert(CE->getOpcode() == Instruction::BitCast && + isa(CE->getOperand(0)) + && "TypeInfo must be a global variable or NULL"); TyInfo.push_back(cast(CE->getOperand(0))); } else { - ConstantInt *CI = dyn_cast(I.getOperand(i)); - assert(CI && CI->getZExtValue() == 0 && - "TypeInfo must be a global variable typeinfo or NULL"); + ConstantInt *CI = dyn_cast(C); + assert(CI && CI->isNullValue() && + "TypeInfo must be a global variable or NULL"); TyInfo.push_back(NULL); } } From clattner at apple.com Thu Apr 26 20:20:33 2007 From: clattner at apple.com (Chris Lattner) Date: Thu, 26 Apr 2007 18:20:33 -0700 Subject: [llvm-commits] Handle global variables in eh_selector lowering In-Reply-To: <200704141734.53098.baldrick@free.fr> References: <200704141734.53098.baldrick@free.fr> Message-ID: <85FD7697-20CE-402C-917B-95166B42A9A9@apple.com> On Apr 14, 2007, at 8:34 AM, Duncan Sands wrote: > The eh_selector intrinsic wants global variables for its > extra arguments, but wasn't expecting to get... global > variables! Only bitcasts of global variables. Discovered > by the Ada f-e, fix attached. Maybe it can be done more > neatly, but I don't know LLVM well enough to say. Looks good, I applied your revised patch. Please commit the testcase, thanks! -Chris From sabre at nondot.org Thu Apr 26 23:57:25 2007 From: sabre at nondot.org (Chris Lattner) Date: Thu, 26 Apr 2007 23:57:25 -0500 Subject: [llvm-commits] CVS: llvm-www/pubs/2007-07-CAV-StructuralAbstraction.html 2007-07-CAV-StructuralAbstraction.pdf index.html Message-ID: <200704270457.l3R4vPjo008872@zion.cs.uiuc.edu> Changes in directory llvm-www/pubs: 2007-07-CAV-StructuralAbstraction.html added (r1.1) 2007-07-CAV-StructuralAbstraction.pdf added (r1.1) index.html updated: 1.47 -> 1.48 --- Log message: Add Domagoj's paper --- Diffs of the changes: (+87 -0) 2007-07-CAV-StructuralAbstraction.html | 81 +++++++++++++++++++++++++++++++++ 2007-07-CAV-StructuralAbstraction.pdf | 0 index.html | 6 ++ 3 files changed, 87 insertions(+) Index: llvm-www/pubs/2007-07-CAV-StructuralAbstraction.html diff -c /dev/null llvm-www/pubs/2007-07-CAV-StructuralAbstraction.html:1.1 *** /dev/null Thu Apr 26 23:57:17 2007 --- llvm-www/pubs/2007-07-CAV-StructuralAbstraction.html Thu Apr 26 23:57:07 2007 *************** *** 0 **** --- 1,81 ---- + + + + + + Structural Abstraction of Software Verification Conditions + + + + +
+ Structural Abstraction of Software Verification Conditions +
+ + + +

Abstract:

+
+ Precise software analysis and verification require tracking the exact + path along which a statement is executed (path-sensitivity), the different contexts + from which a function is called (context-sensitivity), and the bit-accurate + operations performed. Previously, verification with such precision has been considered + too inefficient to scale to large software. In this paper, we present + a novel approach to solving such verification conditions, based on an automatic + abstraction-checking-refinement framework that exploits natural abstraction + boundaries present in software. Experimental results show that our approach + easily scales to over 200,000 lines of real C/C++ code. +
+ +

Published:

+ +
+ "Structural Abstraction of Software Verification Conditions" +
+ Domagoj Babic and Alan J. Hu. +
+ + Proc. of the 19th International Conference on + Computer Aided Verification (CAV'07) + , + Berlin, Germany, July 3-7, 2007. +
+ +

Download:

+

Paper:

+ + +

BibTeX Entry:

+
+ @inproceedings{bh07structural,
+   author = {Domagoj Babi\'c and Alan J. Hu},
+   title = {{Structural Abstraction of Software Verification Conditions}},
+   booktitle = {Proceedings of the 19th Int. Conf. on Computer Aided Verification
+                (CAV'07), Berlin, Germany}
+   publisher = {Springer},
+   series = {Lecture Notes in Computer Science},
+   year = {2007},
+   month = {July}
+ }
+ 
+ + +
+ Valid CSS! + + Valid HTML 4.01! + + + Index: llvm-www/pubs/2007-07-CAV-StructuralAbstraction.pdf Index: llvm-www/pubs/index.html diff -u llvm-www/pubs/index.html:1.47 llvm-www/pubs/index.html:1.48 --- llvm-www/pubs/index.html:1.47 Sun Apr 8 23:06:31 2007 +++ llvm-www/pubs/index.html Thu Apr 26 23:57:07 2007 @@ -3,6 +3,12 @@
    +
  1. "Structural Abstraction of + Software Verification Conditions"
    + Domagoj Babic and Alan J. Hu.
    + Proc. of the 19th Int. Conf. on Computer Aided Verification + (CAV'07), Berlin, Germany, Jul, 2007.
  2. +
  3. "Making Context-Sensitive Points-to Analysis with Heap Cloning Practical For The Real World"
    Chris Lattner, Andrew Lenharth, and Vikram Adve.
    From sabre at nondot.org Thu Apr 26 23:59:11 2007 From: sabre at nondot.org (Chris Lattner) Date: Thu, 26 Apr 2007 23:59:11 -0500 Subject: [llvm-commits] CVS: llvm-www/pubs/2007-07-CAV-StructuralAbstraction.html Message-ID: <200704270459.l3R4xBmD009044@zion.cs.uiuc.edu> Changes in directory llvm-www/pubs: 2007-07-CAV-StructuralAbstraction.html updated: 1.1 -> 1.2 --- Log message: remove some spaces --- Diffs of the changes: (+1 -3) 2007-07-CAV-StructuralAbstraction.html | 4 +--- 1 files changed, 1 insertion(+), 3 deletions(-) Index: llvm-www/pubs/2007-07-CAV-StructuralAbstraction.html diff -u llvm-www/pubs/2007-07-CAV-StructuralAbstraction.html:1.1 llvm-www/pubs/2007-07-CAV-StructuralAbstraction.html:1.2 --- llvm-www/pubs/2007-07-CAV-StructuralAbstraction.html:1.1 Thu Apr 26 23:57:07 2007 +++ llvm-www/pubs/2007-07-CAV-StructuralAbstraction.html Thu Apr 26 23:58:54 2007 @@ -49,9 +49,7 @@

    Paper:

    From sabre at nondot.org Fri Apr 27 01:45:27 2007 From: sabre at nondot.org (Chris Lattner) Date: Fri, 27 Apr 2007 01:45:27 -0500 Subject: [llvm-commits] CVS: llvm-www/pubs/2007-04-PraherMSThesis.html 2007-04-PraherMSThesis.pdf index.html Message-ID: <200704270645.l3R6jRQi011109@zion.cs.uiuc.edu> Changes in directory llvm-www/pubs: 2007-04-PraherMSThesis.html added (r1.1) 2007-04-PraherMSThesis.pdf added (r1.1) index.html updated: 1.48 -> 1.49 --- Log message: new thesis --- Diffs of the changes: (+36402 -1) 2007-04-PraherMSThesis.html | 55 2007-04-PraherMSThesis.pdf |36339 ++++++++++++++++++++++++++++++++++++++++++++ index.html | 9 3 files changed, 36402 insertions(+), 1 deletion(-) Index: llvm-www/pubs/2007-04-PraherMSThesis.html diff -c /dev/null llvm-www/pubs/2007-04-PraherMSThesis.html:1.1 *** /dev/null Fri Apr 27 01:45:18 2007 --- llvm-www/pubs/2007-04-PraherMSThesis.html Fri Apr 27 01:45:08 2007 *************** *** 0 **** --- 1,55 ---- + + + + + + A Change Framework based on the Low Level + Virtual Machine Compiler Infrastructure + + + +
    + A Change Framework based on the Low Level + Virtual Machine Compiler Infrastructure +
    +
    + Jakob Praher, M.S. Thesis +
    + + +

    Abstract:

    +
    +

    + When developing or deploying large applications, one would like to have more insights + into what an application is doing at runtime. Frequently it is required to change defective + parts of an application as fast as possible. For instance one may wish to replace a certain + function call in a program with another function call whenever a specified condition + holds. This master thesis aims at building the change framework, a system for dynamic + program instrumentation and analysis. This research builds atop of the Low Level Virtual + Machine (LLVM) for representing C/C++ applications in an intermediate form. The + change framework consists of two parts, the application under analysis, and a monitor + process. The application under analysis is a C/C++ application compiled to LLVM + bytecodes. The monitor process communicates with the application process and is able + to dynamically instrument and analyze the application process using a domain specific + language. This change language has powerful constructs for defining and conditionally + applying application changes. An important overall goal of this system is to ease the + analysis as well as alteration of low level system software at run-time. +

    +
    + +

    Published:

    +
    + A Change Framework based on the Low Level + Virtual Machine Compiler Infrastructure, Jakob Praher.
    + Masters Thesis, Institute for System Software + Johannes Kepler University Linz, April 2007. +
    + +

    Download:

    + + + + Index: llvm-www/pubs/2007-04-PraherMSThesis.pdf diff -c /dev/null llvm-www/pubs/2007-04-PraherMSThesis.pdf:1.1 *** /dev/null Fri Apr 27 01:45:26 2007 --- llvm-www/pubs/2007-04-PraherMSThesis.pdf Fri Apr 27 01:45:08 2007 *************** *** 0 **** --- 1,39043 ---- + %PDF-1.4 + 5 0 obj + << /S /GoTo /D (chapter.3) >> + endobj + 8 0 obj + (1 Introduction) + endobj + 9 0 obj + << /S /GoTo /D (section.4) >> + endobj + 12 0 obj + (1.1 Dynamic Program Instrumentation and Analysis) + endobj + 13 0 obj + << /S /GoTo /D (section.7) >> + endobj + 16 0 obj + (1.2 Scenarios for Dynamic Program Analysis) + endobj + 17 0 obj + << /S /GoTo /D (chapter.11) >> + endobj + 20 0 obj + (2 System Architecture) + endobj + 21 0 obj + << /S /GoTo /D (section.12) >> + endobj + 24 0 obj + (2.1 A Framework for Program Analysis) + endobj + 25 0 obj + << /S /GoTo /D (section.15) >> + endobj + 28 0 obj + (2.2 LLVM Intermediate Representation) + endobj + 29 0 obj + << /S /GoTo /D (section.17) >> + endobj + 32 0 obj + (2.3 Change Framework Overview) + endobj + 33 0 obj + << /S /GoTo /D (section.42) >> + endobj + 36 0 obj + (2.4 Compiling Applications to LLVM) + endobj + 37 0 obj + << /S /GoTo /D (section.45) >> + endobj + 40 0 obj + (2.5 Recompiling Instrumented Program Fragments) + endobj + 41 0 obj + << /S /GoTo /D (section.46) >> + endobj + 44 0 obj + (2.6 Summary) + endobj + 45 0 obj + << /S /GoTo /D (chapter.47) >> + endobj + 48 0 obj + (3 Big Picture) + endobj + 49 0 obj + << /S /GoTo /D (section.48) >> + endobj + 52 0 obj + (3.1 Overview) + endobj + 53 0 obj + << /S /GoTo /D (section.49) >> + endobj + 56 0 obj + (3.2 Dynamic Program Analysis) + endobj + 57 0 obj + << /S /GoTo /D (subsection.50) >> + endobj + 60 0 obj + (3.2.1 Example Code Fragment) + endobj + 61 0 obj + << /S /GoTo /D (subsection.84) >> + endobj + 64 0 obj + (3.2.2 Program Analysis) + endobj + 65 0 obj + << /S /GoTo /D (subsection.85) >> + endobj + 68 0 obj + (3.2.3 Function Call Sequence) + endobj + 69 0 obj + << /S /GoTo /D (subsection.181) >> + endobj + 72 0 obj + (3.2.4 Loop Detection) + endobj + 73 0 obj + << /S /GoTo /D (subsection.273) >> + endobj + 76 0 obj + (3.2.5 Memory Usage) + endobj + 77 0 obj + << /S /GoTo /D (section.379) >> + endobj + 80 0 obj + (3.3 Summary) + endobj + 81 0 obj + << /S /GoTo /D (chapter.380) >> + endobj + 84 0 obj + (4 The Low Level Virtual Machine) + endobj + 85 0 obj + << /S /GoTo /D (section.381) >> + endobj + 88 0 obj + (4.1 Overview) + endobj + 89 0 obj + << /S /GoTo /D (section.382) >> + endobj + 92 0 obj + (4.2 The History behind LLVM) + endobj + 93 0 obj + << /S /GoTo /D (section.383) >> + endobj + 96 0 obj + (4.3 Computer Architecture) + endobj + 97 0 obj + << /S /GoTo /D (subsection.384) >> + endobj + 100 0 obj + (4.3.1 Computing Machines and Machine Language) + endobj + 101 0 obj + << /S /GoTo /D (subsection.385) >> + endobj + 104 0 obj + (4.3.2 Programs and Machine Language) + endobj + 105 0 obj + << /S /GoTo /D (subsection.387) >> + endobj + 108 0 obj + (4.3.3 Program Machine Interfaces) + endobj + 109 0 obj + << /S /GoTo /D (section.388) >> + endobj + 112 0 obj + (4.4 The Virtual Machine Concept) + endobj + 113 0 obj + << /S /GoTo /D (subsection.389) >> + endobj + 116 0 obj + (4.4.1 Overview) + endobj + 117 0 obj + << /S /GoTo /D (subsection.390) >> + endobj + 120 0 obj + (4.4.2 Process Virtual Machines) + endobj + 121 0 obj + << /S /GoTo /D (subsubsection.392) >> + endobj + 124 0 obj + (4.4.2.1 Multiprogramming) + endobj + 125 0 obj + << /S /GoTo /D (subsubsection.393) >> + endobj + 128 0 obj + (4.4.2.2 High Level Language Virtual Machines) + endobj + 129 0 obj + << /S /GoTo /D (section.394) >> + endobj + 132 0 obj + (4.5 The Low Level Virtual Machine Architecture) + endobj + 133 0 obj + << /S /GoTo /D (subsection.395) >> + endobj + 136 0 obj + (4.5.1 Overview) + endobj + 137 0 obj + << /S /GoTo /D (subsection.396) >> + endobj + 140 0 obj + (4.5.2 Classifying the LLVM Architecture) + endobj + 141 0 obj + << /S /GoTo /D (subsection.397) >> + endobj + 144 0 obj + (4.5.3 High-Level Type Information, Low-Level Intermediate Language) + endobj + 145 0 obj + << /S /GoTo /D (subsubsection.399) >> + endobj + 148 0 obj + (4.5.3.1 High-Level Type Information) + endobj + 149 0 obj + << /S /GoTo /D (subsection.400) >> + endobj + 152 0 obj + (4.5.4 LLVM Virtual Instruction Set Overview) + endobj + 153 0 obj + << /S /GoTo /D (subsection.401) >> + endobj + 156 0 obj + (4.5.5 Three-address Code Architecture in SSA Form) + endobj + 157 0 obj + << /S /GoTo /D (subsubsection.402) >> + endobj + 160 0 obj + (4.5.5.1 Typed Polymorphic Instructions) + endobj + 161 0 obj + << /S /GoTo /D (subsubsection.403) >> + endobj + 164 0 obj + (4.5.5.2 Explicit Control Flow Information) + endobj + 165 0 obj + << /S /GoTo /D (subsubsection.415) >> + endobj + 168 0 obj + (4.5.5.3 Static Single Assignment Form) + endobj + 169 0 obj + << /S /GoTo /D (subsubsection.465) >> + endobj + 172 0 obj + (4.5.5.4 Type Information) + endobj + 173 0 obj + << /S /GoTo /D (subsubsection.477) >> + endobj + 176 0 obj + (4.5.5.5 LLVM Memory Model) + endobj + 177 0 obj + << /S /GoTo /D (subsubsection.478) >> + endobj + 180 0 obj + (4.5.5.6 Function Calls and Exception Handling) + endobj + 181 0 obj + << /S /GoTo /D (subsection.511) >> + endobj + 184 0 obj + (4.5.6 Graph-Based In-Memory Representation) + endobj + 185 0 obj + << /S /GoTo /D (subsection.520) >> + endobj + 188 0 obj + (4.5.7 Bytecode - Binary Virtual Object Code Representation) + endobj + 189 0 obj + << /S /GoTo /D (subsection.522) >> + endobj + 192 0 obj + (4.5.8 Summary of the LLVA) + endobj + 193 0 obj + << /S /GoTo /D (section.523) >> + endobj + 196 0 obj + (4.6 Summary) + endobj + 197 0 obj + << /S /GoTo /D (chapter.524) >> + endobj + 200 0 obj + (5 The Change Framework) + endobj + 201 0 obj + << /S /GoTo /D (section.525) >> + endobj + 204 0 obj + (5.1 Overview) + endobj + 205 0 obj + << /S /GoTo /D (section.526) >> + endobj + 208 0 obj + (5.2 Change Framework Architecture) + endobj + 209 0 obj + << /S /GoTo /D (subsection.527) >> + endobj + 212 0 obj + (5.2.1 The Change Concept) + endobj + 213 0 obj + << /S /GoTo /D (subsection.529) >> + endobj + 216 0 obj + (5.2.2 Change Application Overview) + endobj + 217 0 obj + << /S /GoTo /D (subsection.531) >> + endobj + 220 0 obj + (5.2.3 Change Unapplication Overview) + endobj + 221 0 obj + << /S /GoTo /D (section.532) >> + endobj + 224 0 obj + (5.3 Change Provider Architecture) + endobj + 225 0 obj + << /S /GoTo /D (subsection.534) >> + endobj + 228 0 obj + (5.3.1 A Sample Application) + endobj + 229 0 obj + << /S /GoTo /D (subsection.558) >> + endobj + 232 0 obj + (5.3.2 Change Points and Change Point Trajectories) + endobj + 233 0 obj + << /S /GoTo /D (subsection.570) >> + endobj + 236 0 obj + (5.3.3 Provider Context Information) + endobj + 237 0 obj + << /S /GoTo /D (subsection.580) >> + endobj + 240 0 obj + (5.3.4 Summary) + endobj + 241 0 obj + << /S /GoTo /D (section.581) >> + endobj + 244 0 obj + (5.4 Change Language) + endobj + 245 0 obj + << /S /GoTo /D (subsection.582) >> + endobj + 248 0 obj + (5.4.1 Overview) + endobj + 249 0 obj + << /S /GoTo /D (subsection.583) >> + endobj + 252 0 obj + (5.4.2 Syntax) + endobj + 253 0 obj + << /S /GoTo /D (subsubsection.643) >> + endobj + 256 0 obj + (5.4.2.1 Lexical Structure) + endobj + 257 0 obj + << /S /GoTo /D (subsubsection.661) >> + endobj + 260 0 obj + (5.4.2.2 Change Specific Syntactic Aspects) + endobj + 261 0 obj + << /S /GoTo /D (subsection.682) >> + endobj + 264 0 obj + (5.4.3 Semantics) + endobj + 265 0 obj + << /S /GoTo /D (subsubsection.683) >> + endobj + 268 0 obj + (5.4.3.1 Value Types) + endobj + 269 0 obj + << /S /GoTo /D (subsubsection.684) >> + endobj + 272 0 obj + (5.4.3.2 The string Type) + endobj + 273 0 obj + << /S /GoTo /D (subsubsection.701) >> + endobj + 276 0 obj + (5.4.3.3 Pointer Types) + endobj + 277 0 obj + << /S /GoTo /D (subsubsection.707) >> + endobj + 280 0 obj + (5.4.3.4 Reference Types) + endobj + 281 0 obj + << /S /GoTo /D (subsubsection.708) >> + endobj + 284 0 obj + (5.4.3.5 Implicit Values) + endobj + 285 0 obj + << /S /GoTo /D (subsubsection.715) >> + endobj + 288 0 obj + (5.4.3.6 Predefined Values) + endobj + 289 0 obj + << /S /GoTo /D (subsubsection.745) >> + endobj + 292 0 obj + (5.4.3.7 Literals) + endobj + 293 0 obj + << /S /GoTo /D (subsubsection.746) >> + endobj + 296 0 obj + (5.4.3.8 Type Equality) + endobj + 297 0 obj + << /S /GoTo /D (subsubsection.747) >> + endobj + 300 0 obj + (5.4.3.9 Type Compatibility) + endobj + 301 0 obj + << /S /GoTo /D (subsubsection.748) >> + endobj + 304 0 obj + (5.4.3.10 Assignment Compatibility) + endobj + 305 0 obj + << /S /GoTo /D (subsubsection.751) >> + endobj + 308 0 obj + (5.4.3.11 Implicit Type Conversions) + endobj + 309 0 obj + << /S /GoTo /D (subsubsection.758) >> + endobj + 312 0 obj + (5.4.3.12 Lexical Scopes) + endobj + 313 0 obj + << /S /GoTo /D (subsection.759) >> + endobj + 316 0 obj + (5.4.4 Context Conditions) + endobj + 317 0 obj + << /S /GoTo /D (subsubsection.762) >> + endobj + 320 0 obj + (5.4.4.1 General Context Conditions) + endobj + 321 0 obj + << /S /GoTo /D (subsubsection.763) >> + endobj + 324 0 obj + (5.4.4.2 Change Specific Context Conditions) + endobj + 325 0 obj + << /S /GoTo /D (section.845) >> + endobj + 328 0 obj + (5.5 Change Detection and Recompilation) + endobj + 329 0 obj + << /S /GoTo /D (subsection.846) >> + endobj + 332 0 obj + (5.5.1 Overview) + endobj + 333 0 obj + << /S /GoTo /D (subsection.847) >> + endobj + 336 0 obj + (5.5.2 Recompilation Checkpoints) + endobj + 337 0 obj + << /S /GoTo /D (subsubsection.848) >> + endobj + 340 0 obj + (5.5.2.1 Recompilation Detection Period) + endobj + 341 0 obj + << /S /GoTo /D (subsection.858) >> + endobj + 344 0 obj + (5.5.3 Checkpoint Testing Overhead) + endobj + 345 0 obj + << /S /GoTo /D (subsection.861) >> + endobj + 348 0 obj + (5.5.4 Alternatives to IR Transformation Based Checkpoints) + endobj + 349 0 obj + << /S /GoTo /D (subsubsection.862) >> + endobj + 352 0 obj + (5.5.4.1 Write a LLVM MachineFunctionPass) + endobj + 353 0 obj + << /S /GoTo /D (subsubsection.882) >> + endobj + 356 0 obj + (5.5.4.2 Implement an Intrisic Function or a Custom Bytecode) + endobj + 357 0 obj + << /S /GoTo /D (subsection.885) >> + endobj + 360 0 obj + (5.5.5 Finer Recompilation Models) + endobj + 361 0 obj + << /S /GoTo /D (section.924) >> + endobj + 364 0 obj + (5.6 Change Protocol) + endobj + 365 0 obj + << /S /GoTo /D (subsection.925) >> + endobj + 368 0 obj + (5.6.1 Overview) + endobj + 369 0 obj + << /S /GoTo /D (subsection.927) >> + endobj + 372 0 obj + (5.6.2 Communication Framework) + endobj + 373 0 obj + << /S /GoTo /D (subsubsection.929) >> + endobj + 376 0 obj + (5.6.2.1 Channel Message Handling) + endobj + 377 0 obj + << /S /GoTo /D (subsection.984) >> + endobj + 380 0 obj + (5.6.3 General Message Wire Format) + endobj + 381 0 obj + << /S /GoTo /D (subsubsection.998) >> + endobj + 384 0 obj + (5.6.3.1 Invoke Messages) + endobj + 385 0 obj + << /S /GoTo /D (subsubsection.999) >> + endobj + 388 0 obj + (5.6.3.2 Return Messages) + endobj + 389 0 obj + << /S /GoTo /D (subsubsection.1008) >> + endobj + 392 0 obj + (5.6.3.3 Oneway Invoke Messages) + endobj + 393 0 obj + << /S /GoTo /D (subsection.1009) >> + endobj + 396 0 obj + (5.6.4 Well Known Change Specific Messages) + endobj + 397 0 obj + << /S /GoTo /D (subsubsection.1010) >> + endobj + 400 0 obj + (5.6.4.1 REGISTER\137CHANGE Message) + endobj + 401 0 obj + << /S /GoTo /D (subsubsection.1032) >> + endobj + 404 0 obj + (5.6.4.2 UNREGISTER\137CHANGE Message) + endobj + 405 0 obj + << /S /GoTo /D (subsubsection.1050) >> + endobj + 408 0 obj + (5.6.4.3 IO\137OUTPUT Message) + endobj + 409 0 obj + << /S /GoTo /D (subsubsection.1066) >> + endobj + 412 0 obj + (5.6.4.4 CLOSE Message) + endobj + 413 0 obj + << /S /GoTo /D (section.1085) >> + endobj + 416 0 obj + (5.7 Summary) + endobj + 417 0 obj + << /S /GoTo /D (chapter.1086) >> + endobj + 420 0 obj + (6 Evaluation) + endobj + 421 0 obj + << /S /GoTo /D (section.1087) >> + endobj + 424 0 obj + (6.1 Overview) + endobj + 425 0 obj + << /S /GoTo /D (section.1088) >> + endobj + 428 0 obj + (6.2 Analysis of the Change Framework) + endobj + 429 0 obj + << /S /GoTo /D (subsection.1090) >> + endobj + 432 0 obj + (6.2.1 Analysis of LLVM) + endobj + 433 0 obj + << /S /GoTo /D (section.1091) >> + endobj + 436 0 obj + (6.3 Evaluation of the Existing Prototype) + endobj + 437 0 obj + << /S /GoTo /D (subsection.1092) >> + endobj + 440 0 obj + (6.3.1 Evaluation of the LLVM Infrastructure) + endobj + 441 0 obj + << /S /GoTo /D (subsubsection.1093) >> + endobj + 444 0 obj + (6.3.1.1 Common LLVM Suffixes) + endobj + 445 0 obj + << /S /GoTo /D (subsubsection.1094) >> + endobj + 448 0 obj + (6.3.1.2 The Test Suites) + endobj + 449 0 obj + << /S /GoTo /D (subsubsection.1095) >> + endobj + 452 0 obj + (6.3.1.3 The Run-Time Environments) + endobj + 453 0 obj + << /S /GoTo /D (subsubsection.1096) >> + endobj + 456 0 obj + (6.3.1.4 Testing Infrastructure) + endobj + 457 0 obj + << /S /GoTo /D (subsubsection.1097) >> + endobj + 460 0 obj + (6.3.1.5 Comparing Overall Run Time) + endobj + 461 0 obj + << /S /GoTo /D (subsubsection.1099) >> + endobj + 464 0 obj + (6.3.1.6 Translation Time vs Overall Execution Time) + endobj + 465 0 obj + << /S /GoTo /D (subsubsection.1102) >> + endobj + 468 0 obj + (6.3.1.7 Results of Run-Time Measurements) + endobj + 469 0 obj + << /S /GoTo /D (subsubsection.1103) >> + endobj + 472 0 obj + (6.3.1.8 Average Resident Set Size Memory) + endobj + 473 0 obj + << /S /GoTo /D (subsubsection.1108) >> + endobj + 476 0 obj + (6.3.1.9 Conclusion of LLVM Run Time Infrastructure) + endobj + 477 0 obj + << /S /GoTo /D (subsection.1109) >> + endobj + 480 0 obj + (6.3.2 Evaluation of the Change Framework) + endobj + 481 0 obj + << /S /GoTo /D (subsubsection.1110) >> + endobj + 484 0 obj + (6.3.2.1 Core Run-Time Overhead) + endobj + 485 0 obj + << /S /GoTo /D (subsubsection.1131) >> + endobj + 488 0 obj + (6.3.2.2 Change Overhead) + endobj + 489 0 obj + << /S /GoTo /D (section.1138) >> + endobj + 492 0 obj + (6.4 Summary) + endobj + 493 0 obj + << /S /GoTo /D (chapter.1139) >> + endobj + 496 0 obj + (7 Related Work) + endobj + 497 0 obj + << /S /GoTo /D (section.1140) >> + endobj + 500 0 obj + (7.1 Overview) + endobj + 501 0 obj + << /S /GoTo /D (section.1141) >> + endobj + 504 0 obj + (7.2 Dyninst API) + endobj + 505 0 obj + << /S /GoTo /D (section.1144) >> + endobj + 508 0 obj + (7.3 Solaris DTrace) + endobj + 509 0 obj + << /S /GoTo /D (section.1145) >> + endobj + 512 0 obj + (7.4 Java Virtual Machine Tool Interface) + endobj + 513 0 obj + << /S /GoTo /D (chapter.1146) >> + endobj + 516 0 obj + (8 Summary) + endobj + 517 0 obj + << /S /GoTo /D (section.1147) >> + endobj + 520 0 obj + (8.1 Conclusions) + endobj + 521 0 obj + << /S /GoTo /D (section.1148) >> + endobj + 524 0 obj + (8.2 Future Work Overview) + endobj + 525 0 obj + << /S /GoTo /D (section.1149) >> + endobj + 528 0 obj + (8.3 LLVM Enhancements) + endobj + 529 0 obj + << /S /GoTo /D (section.1199) >> + endobj + 532 0 obj + (8.4 Language Enhancements) + endobj + 533 0 obj + << /S /GoTo /D (subsection.1200) >> + endobj + 536 0 obj + (8.4.1 Provider Inheritance) + endobj + 537 0 obj + << /S /GoTo /D (subsection.1228) >> + endobj + 540 0 obj + (8.4.2 Type Expressions and Variables) + endobj + 541 0 obj + << /S /GoTo /D (subsection.1277) >> + endobj + 544 0 obj + (8.4.3 Type Expression Pattern Matching) + endobj + 545 0 obj + << /S /GoTo /D (section.1301) >> + endobj + 548 0 obj + (8.5 Framework Enhancements) + endobj + 549 0 obj + << /S /GoTo /D (subsection.1302) >> + endobj + 552 0 obj + (8.5.1 Separate Program Transformation and Information Providers) + endobj + 553 0 obj + << /S /GoTo /D (subsection.1408) >> + endobj + 556 0 obj + (8.5.2 Abstract Provider Language) + endobj + 557 0 obj + << /S /GoTo /D (subsection.1409) >> + endobj + 560 0 obj + (8.5.3 Ahead Of Time Compiled Applications) + endobj + 561 0 obj + << /S /GoTo /D (section.1411) >> + endobj + 564 0 obj + (8.6 Limitations of the Change Framework Prototype) + endobj + 565 0 obj + << /S /GoTo /D (subsection.1412) >> + endobj + 568 0 obj + (8.6.1 Change Framework Limitations) + endobj + 569 0 obj + << /S /GoTo /D (subsection.1413) >> + endobj + 572 0 obj + (8.6.2 Change Language Compiler Limitations) + endobj + 573 0 obj + << /S /GoTo /D (subsection.1414) >> + endobj + 576 0 obj + (8.6.3 Summary) + endobj + 577 0 obj + << /S /GoTo /D (appendix*.1415) >> + endobj + 580 0 obj + (Bibliography) + endobj + 581 0 obj + << /S /GoTo /D [582 0 R /Fit ] >> + endobj + 588 0 obj << + /Length 122 + /Filter /FlateDecode + >> + stream + x???1 + ?0 Ew?B???(??J??!C?P|??JLB?* ?x?KB??`H???hYU?p? ?QG^c????????*=?at?#$PVI?&S?????>n???J?"E????????i????6?endstream + endobj + 582 0 obj << + /Type /Page + /Contents 588 0 R + /Resources 587 0 R + /MediaBox [0 0 595.2757 841.8898] + /Parent 591 0 R + >> endobj + 586 0 obj << + /Type /XObject + /Subtype /Form + /FormType 1 + /PTEX.FileName (../Deckblatt/deckblatt.pdf) + /PTEX.PageNumber 1 + /PTEX.InfoDict 592 0 R + /Matrix [1.00000000 0.00000000 0.00000000 1.00000000 0.00000000 0.00000000] + /BBox [0.00000000 0.00000000 595.27560000 841.88980000] + /Resources << + /Font << /F17 597 0 R /F16 602 0 R /F20 607 0 R /F21 612 0 R /F15 617 0 R /F22 622 0 R /F26 627 0 R /F25 632 0 R /F14 637 0 R >> + /XObject << + /Im1 638 0 R + /Im2 639 0 R + /Im3 640 0 R + >>/ProcSet [ /PDF /Text ] + >> + /Length 1132 + /Filter /FlateDecode + >> + stream + x??V?n?F}?W?????w?7?N9v???????,?,?%???????R[Z?^8s????]????H?c\*?Z0??K&?A??p??)????=D??m? "?X? ?o?o??LZW$Bh???;X???q?????=sN?$w?2??X?:?|.?Iat2?&J VH!????d??gz?????7l??Vg??B?n?@?m?[???d?m~?????M???21?i?m? ???E??}??CZ?@?l???????w?pu?????Q!w ?f?1s? ?{,4??,0?Ui?A???jL??? 3?kT????7u??J?q???f????G??=J???jC????S?????,@~P_H??/ + ??M\5?cJ_????????????$?t????i?W??X?_?lU?? ??C ???????=t? ?????7O???U?[{?|??Vi???*?O?10*?{?ci:????mImTO?8?M??=?\??????]0?<???k0Jm????> + endobj + 595 0 obj + << + /Ascent 694 + /CapHeight 694 + /Descent -195 + /ItalicAngle 0 + /StemV 76 + /XHeight 430 + /FontBBox [ -58 -250 939 758] + /Flags 4 + /FontName 641 0 R + /FontFile 593 0 R + >> + endobj + 597 0 obj + << + /Type /Font + /Subtype /Type1 + /FirstChar 65 + /LastChar 114 + /Widths 642 0 R + /FontDescriptor 595 0 R + /BaseFont 641 0 R + /Encoding 596 0 R + >> + endobj + 600 0 obj + << + /Ascent 694 + /CapHeight 694 + /Descent -194 + /ItalicAngle 0 + /StemV 76 + /XHeight 444 + /FontBBox [ -62 -251 978 758] + /Flags 4 + /FontName 643 0 R + /FontFile 598 0 R + >> + endobj + 602 0 obj + << + /Type /Font + /Subtype /Type1 + /FirstChar 82 + /LastChar 119 + /Widths 644 0 R + /FontDescriptor 600 0 R + /BaseFont 643 0 R + /Encoding 601 0 R + >> + endobj + 605 0 obj + << + /Ascent 694 + /CapHeight 686 + /Descent -194 + /ItalicAngle 0 + /StemV 109 + /XHeight 444 + /FontBBox [ -53 -251 1139 750] + /Flags 4 + /FontName 645 0 R + /FontFile 603 0 R + >> + endobj + 607 0 obj + << + /Type /Font + /Subtype /Type1 + /FirstChar 65 + /LastChar 119 + /Widths 646 0 R + /FontDescriptor 605 0 R + /BaseFont 645 0 R + /Encoding 606 0 R + >> + endobj + 610 0 obj + << + /Ascent 514 + /CapHeight 683 + /Descent 0 + /ItalicAngle 0 + /StemV 72 + /XHeight 431 + /FontBBox [ 14 -250 1077 750] + /Flags 4 + /FontName 647 0 R + /FontFile 608 0 R + >> + endobj + 612 0 obj + << + /Type /Font + /Subtype /Type1 + /FirstChar 45 + /LastChar 117 + /Widths 648 0 R + /FontDescriptor 610 0 R + /BaseFont 647 0 R + /Encoding 611 0 R + >> + endobj + 615 0 obj + << + /Ascent 694 + /CapHeight 683 + /Descent -194 + /ItalicAngle 0 + /StemV 65 + /XHeight 431 + /FontBBox [ -34 -251 988 750] + /Flags 4 + /FontName 649 0 R + /FontFile 613 0 R + >> + endobj + 617 0 obj + << + /Type /Font + /Subtype /Type1 + /FirstChar 44 + /LastChar 122 + /Widths 650 0 R + /FontDescriptor 615 0 R + /BaseFont 649 0 R + /Encoding 616 0 R + >> + endobj + 620 0 obj + << + /Ascent 694 + /CapHeight 683 + /Descent -194 + /ItalicAngle -9.46 + /StemV 72 + /XHeight 431 + /FontBBox [ -56 -251 1102 750] + /Flags 4 + /FontName 651 0 R + /FontFile 618 0 R + >> + endobj + 622 0 obj + << + /Type /Font + /Subtype /Type1 + /FirstChar 45 + /LastChar 127 + /Widths 652 0 R + /FontDescriptor 620 0 R + /BaseFont 651 0 R + /Encoding 621 0 R + >> + endobj + 625 0 obj + << + /Ascent 694 + /CapHeight 694 + /Descent -194 + /ItalicAngle 0 + /StemV 136 + /XHeight 458 + /FontBBox [ -71 -250 1099 780] + /Flags 4 + /FontName 653 0 R + /FontFile 623 0 R + >> + endobj + 627 0 obj + << + /Type /Font + /Subtype /Type1 + /FirstChar 74 + /LastChar 121 + /Widths 654 0 R + /FontDescriptor 625 0 R + /BaseFont 653 0 R + /Encoding 626 0 R + >> + endobj + 630 0 obj + << + /Ascent 694 + /CapHeight 694 + /Descent -194 + /ItalicAngle 0 + /StemV 78 + /XHeight 444 + /FontBBox [ -61 -250 999 759] + /Flags 4 + /FontName 655 0 R + /FontFile 628 0 R + >> + endobj + 632 0 obj + << + /Type /Font + /Subtype /Type1 + /FirstChar 25 + /LastChar 122 + /Widths 656 0 R + /FontDescriptor 630 0 R + /BaseFont 655 0 R + /Encoding 631 0 R + >> + endobj + 635 0 obj + << + /Ascent 750 + /CapHeight 683 + /Descent -194 + /ItalicAngle -14.035 + /StemV 85 + /XHeight 431 + /FontBBox [ -29 -960 1116 775] + /Flags 4 + /FontName 657 0 R + /FontFile 633 0 R + >> + endobj + 637 0 obj + << + /Type /Font + /Subtype /Type1 + /FirstChar 1 + /LastChar 1 + /Widths 658 0 R + /FontDescriptor 635 0 R + /BaseFont 657 0 R + /Encoding 636 0 R + >> + endobj + 638 0 obj + << + /Type /XObject + /Subtype /Form + /FormType 1 + /PTEX.FileName (./tnf-logo-with-arc.pdf) + /PTEX.PageNumber 1 + /PTEX.InfoDict 659 0 R + /Matrix [ 1 0 0 1 0 0] + /BBox [ 0 0 180 119] + /Resources << + /ProcSet [/PDF/ImageB] + /ExtGState << + /R7 660 0 R + >> + /XObject << + /R8 661 0 R + >> + >> + /Length 662 0 R + /Filter /FlateDecode + >> + stream + x?EO1n1 ?? + }??$[??w??t?2$)?? ?~i$w?A?%?ZX?X?{????-???> + /XObject << + /R8 665 0 R + >> + >> + /Length 666 0 R + /Filter /FlateDecode + >> + stream + x????N! ??</`??????????0???]3????8 ??????|??v???~m~?????O????%?l??T?+ endobj + 640 0 obj + << + /Type /XObject + /Subtype /Form + /FormType 1 + /PTEX.FileName (./lborder.pdf) + /PTEX.PageNumber 1 + /PTEX.InfoDict 667 0 R + /Matrix [ 1 0 0 1 0 0] + /BBox [ 0 0 563 34] + /Resources << + /ProcSet [/PDF] + /ExtGState << + /R4 668 0 R + >> + >> + /Length 669 0 R + /Filter /FlateDecode + >> + stream + x?+T0?3T0+ endobj + 642 0 obj + [ 625 0 0 0 561 0 0 663 259 443 651 509 0 663 693 600 0 606 522 641 644 625 0 0 625 575 0 0 0 0 0 0 451 484 0 0 418 0 0 484 0 0 458 0 0 0 470 0 0 320] + endobj + 644 0 obj + [ 630 0 0 0 0 0 0 0 0 0 0 0 0 0 0 469 0 435 502 435 0 490 502 230 0 475 0 0 502 490 0 0 333 375 354 0 0 665] + endobj + 646 0 obj + [ 850 0 813 0 0 707 0 0 419 0 0 676 1067 0 0 0 0 0 0 0 0 850 0 0 0 0 0 0 0 0 0 0 547 625 500 625 513 344 563 625 313 0 594 313 938 625 563 625 0 459 444 438 625 594 813] + endobj + 648 0 obj + [ 378 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 829 0 0 0 0 406 0 0 0 0 0 0 0 0 0 0 786 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 558 0 641 613 302 0 0 513 747 613 636 558 0 602 458 0 613] + endobj + 650 0 obj + [ 272 0 0 0 490 0 490 0 0 0 0 490 0 0 272 0 0 0 0 0 0 734 0 707 0 0 0 0 0 0 503 761 612 897 0 0 666 0 0 544 0 734 0 0 0 0 0 0 0 0 0 0 0 490 544 435 544 435 299 490 544 272 0 0 272 816 544 490 544 517 381 386 381 544 517 0 0 517 435] + endobj + 652 0 obj + [ 326 272 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 748 0 0 0 734 353 0 0 0 897 0 0 666 0 0 544 0 734 0 0 0 0 0 0 0 0 0 0 0 490 544 435 0 435 299 490 544 272 0 517 272 816 544 490 544 0 381 386 381 544 517 707 0 517 0 0 0 0 0 490] + endobj + 654 0 obj + [ 519 764 0 0 0 0 0 0 0 0 0 764 0 0 0 0 0 0 0 0 0 0 0 525 0 0 0 511 0 0 561 256 0 0 256 0 561 550 561 0 372 422 404 0 500 0 0 500] + endobj + 656 0 obj + [ 481 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 333 278 500 500 0 0 500 500 0 500 0 0 500 278 0 0 0 0 0 0 667 0 0 722 0 0 0 0 278 0 0 542 0 0 0 0 0 646 0 0 0 667 0 0 0 0 0 0 0 0 0 0 481 517 444 0 444 0 500 517 239 0 0 239 0 517 0 517 0 342 383 361 517 0 683 0 0 435] + endobj + 658 0 obj + [ 278] + endobj + 659 0 obj + << + /Producer (ESP Ghostscript 7.07) + >> + endobj + 660 0 obj + << + /Type /ExtGState + /Name /R7 + /TR /Identity + /OPM 1 + /SM 0.02 + >> + endobj + 661 0 obj + << + /Subtype /Image + /ColorSpace /DeviceGray + /Width 206 + /Height 205 + /BitsPerComponent 8 + /Filter /DCTDecode + /Length 8537 + >> + stream + ????+  $, !$4.763.22:ASF:=N>22HbINVX]^]8EfmeZlS[]Y??+ ??+ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz???????????????????????????????????????????????????????????????????????????+ ?T39 ?????c?jK?L?O???t.>??y_)?????Q???7}47?U????@??& + Jl?? ???7 ?y4????????P??I???X$m?Y? ??[???????"?$? O$????p????L?4?'?TW??VV PGqU-?}:???6?-??D?u??O?=??#????;????h???c????????z]*??/???\?'?C??1?m??x???UtH??u?!{up?]$?7?????CmE??????+ ?,????I?6??+ ??Q_=???e.?8?m??z??? ?Y?[K;??? ?? ?+ + ??Z??+ o????c ?#?A?????2??$2<???*?d?ds?*??j??i????Z??( kd?????i?I??I????F??Gdh??%_c?F~????w*n.??^."&?6?1???8?????g'*???e???v?;3???_nz?#?????I?????iv)"Z???n??pA??B?C??????~?K?[??(iaW lN2GNMn??%???wyeggm-??? v?0BU??YH}x??O?H5?? ???+ ???H|+??*F?R???+ ???_?-\?+ ??Z??+ ?O??%?4m{}B????Z@?[?T??????;???????Ms?5????? z?2???1?I????#???? ???/??K?+ ??Q???5Az?kh?XGP???O?N8 ~????(?t??i?2-?o??#?????l?o=A?oQX?%?t?+Hb???{?+ ? RV?B2??A~??A<7?+ ??????I??[?Dxp|?T????-???O~??Er~%?L?.??5?????6??]?i?+ }QL??D??! ?2?B.2??$ ?H???uf?fo6@??>????8?'$d??+ t??????5??? + ?$? gp+ ?@????sW????+ ?{z}=OEQEQEQE?????_????+ endobj + 662 0 obj + 200 + endobj + 663 0 obj + << + /Producer (ESP Ghostscript 7.07) + >> + endobj + 664 0 obj + << + /Type /ExtGState + /Name /R4 + /TR /Identity + /OPM 1 + /SM 0.02 + >> + endobj + 665 0 obj + << + /Subtype /Image + /ColorSpace /DeviceRGB + /Width 349 + /Height 385 + /BitsPerComponent 8 + /Filter /DCTDecode + /Length 32947 + >> + stream + ????+  $, !$4.763.22:ASF:=N>22HbINVX]^]8EfmeZlS[]Y??+ ??+ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz???????????????????????????????????????????????????????????????????????????+ ??+ $4?%?&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??????????????????????????????????????????????????????????????????????????+ ??H?@???????'?]???`@??D?%??*??b?????????\1?%&X?`rH????R?n??F??Y????j?TI??>nzu\~?/?m????+ E??]C???????????+ 3?Y???Q/??mg5??`m? ????`?x????g?J?>?+????????R?G?B???qWv?-?z?+ ?u7d^+,????}^????Gs?{??+ ?e???=3???Zv?3%S0??4??k?*k??+ ?!??=??Y???0??????C.?n???lz6I???????O%?c$??>??Lng???????/c??i?m??+ ???]94O??+???Y???y+ ???????W3]5??zC???+ #~q??{???3w`?_?]WN?\?????????`d?s?+??????????? ?????F?p3+ ?????????+ ??c???;F??+ Bq??W4????????d1??1??#!}+??[??? c?I???p??K?*??y?$????1?i??U?8bH?^y?}bR~H?G?Y??Rc??s?+ c + ?r??????*z?e??>?+??G?????&?+ ?VP???0?*{V=???;a?????] #?tea?a?+ju?C????? ???????G??h???:?Uq??%F??8?????k??mm,??o????T??M??f`O#??????=??H?1u?+ ?X????+ ?V???K?!U+???#???=_??Z????/??f?kO??????U?'dz??'?KYZ????+ (?? + (?? + (?? + (?? + (??=????6?|??<???????,k,M??? kJ??8q?8??n?a-??d?-??(?????~/?????V????+ ?+ ?r9?z'?!^?+ ??+ ?????+?+ ?????+?+ ?????+?+ ?+ ???????W3]5??zC???+ ??Z??+ ?X????+ ?V???K?!U+???#???=_???pF?d??+ ?+ ???? |?O??,?i\??V ???qa?q?{{W?y?$?+ ?????6??T??}# ????F??Y?G???X????{???%???ZHN|?? 8?d@?+ X?e')/_?$?n??=F?!6?6?? ?K??r#v3???N+?????Jg???6???#H?@?bH?l{?????My'?Q?@?????eR+ 1rvDU?~????G?????0?+ ? m??Ny`\?+ ??>??????+ ??a? ??????q?\y?NzJp? ??]}?? PVg?6?p?[k?"?;??N????? eNI????4??f???H??nb?+ I??__0w????????????*???>??+ ??*????(?????????L?w??'?%^/?+ RMd?:;i???t?X???tUbX?s??O?s?5im?????h????)`J??3???d{ + ??6;qzY|?W?U?GN???|Yauw'????AgF#?j???+ ????? + 4?,?l1???????????#[?0??::?: ?+ ?+???+ ????iy$/#?%"H?$w? k?&)4?S?2Z??9S??????EW1?????C+ ??hW^!?n?,??$@??) `0???W???z6?5???o ;w???^2???R?Tb?>VUkJR?E?+ ?Z?+ ?sZ|???{h???g<?y?V*/????LI?1@??N+ [??_?8"? + -?u???8?w?a\????m?+ ?+???+ ???c??5{?=CD?MX?yM*?o+ E??8??@?6???-gZ??m.k??6???n??9`?f!??????wJF?p??]?<[??vRY?????cryH??r?S?????I??????k?_????\?????D^O??? ?????N??x??^!?{K=*?#2?-?+ ???]6??}GL_.?}?"???#:c?8g??r?T??N????q????Zj:s\]??F?mk{<;????6?+ ?????$u?l?" W??8n0>??{f????8?V?kY%w??e????a????Zc}???P??????Q??r??7??Z?z??ex??"H??0 + ?#????????g????pG???N2I?0?????????+ (??? + (?? + (?? + (?? + (?? + (?? + (?? + (?? + (?? + (?? + (?? + (?? + (?? + (?? + (?? + (?? + (?? + (?? + (?? + (?? + (?? + (?????endstream + endobj + 666 0 obj + 285 + endobj + 667 0 obj + << + /Producer (ESP Ghostscript 7.07) + >> + endobj + 668 0 obj + << + /Type /ExtGState + /Name /R4 + /TR /Identity + /OPM 1 + /SM 0.02 + >> + endobj + 669 0 obj + 67 + endobj + 636 0 obj << + /Type /Encoding + /Differences [ 0 /.notdef/periodcentered/.notdef 3/.notdef] + >> endobj + 631 0 obj << + /Type /Encoding + /Differences [ 0 /.notdef 1/.notdef 25/germandbls/.notdef 27/.notdef 45/hyphen/period/slash/zero/.notdef 50/.notdef 51/three/four/.notdef/six/.notdef 56/.notdef 57/nine/colon/.notdef 60/.notdef 65/A/.notdef 67/.notdef 68/D/.notdef 70/.notdef 73/I/.notdef 75/.notdef 76/L/.notdef 78/.notdef 82/R/.notdef 84/.notdef 86/V/.notdef 88/.notdef 97/a/b/c/.notdef/e/.notdef/g/h/i/.notdef 107/.notdef 108/l/.notdef/n/.notdef/p/.notdef/r/s/t/u/.notdef/w/.notdef 121/.notdef 122/z/.notdef 124/.notdef] + >> endobj + 626 0 obj << + /Type /Encoding + /Differences [ 0 /.notdef 1/.notdef 74/J/K/.notdef 77/.notdef 85/U/.notdef 87/.notdef 97/a/.notdef 99/.notdef 101/e/.notdef 103/.notdef 104/h/i/.notdef 107/.notdef 108/l/.notdef/n/o/p/.notdef/r/s/t/.notdef/v/.notdef 120/.notdef 121/y/.notdef 123/.notdef] + >> endobj + 621 0 obj << + /Type /Encoding + /Differences [ 0 /.notdef 1/.notdef 45/hyphen/period/.notdef 48/.notdef 68/D/.notdef 70/.notdef 72/H/I/.notdef 75/.notdef 77/M/.notdef 79/.notdef 80/P/.notdef 82/.notdef 83/S/.notdef/U/.notdef 87/.notdef 97/a/b/c/.notdef/e/f/g/h/i/.notdef/k/l/m/n/o/p/.notdef/r/s/t/u/v/w/.notdef/y/.notdef 123/.notdef 127/dieresis/.notdef 129/.notdef] + >> endobj + 616 0 obj << + /Type /Encoding + /Differences [ 0 /.notdef 1/.notdef 44/comma/.notdef 46/.notdef 48/zero/.notdef/two/.notdef 52/.notdef 55/seven/.notdef 57/.notdef 58/colon/.notdef 60/.notdef 65/A/.notdef/C/.notdef 69/.notdef 74/J/K/L/M/.notdef 79/.notdef 80/P/.notdef 82/.notdef 83/S/.notdef/U/.notdef 87/.notdef 97/a/b/c/d/e/f/g/h/i/.notdef 107/.notdef 108/l/m/n/o/p/q/r/s/t/u/v/.notdef 120/.notdef 121/y/z/.notdef 124/.notdef] + >> endobj + 611 0 obj << + /Type /Encoding + /Differences [ 0 /.notdef 1/.notdef 45/hyphen/.notdef 47/.notdef 68/D/.notdef 70/.notdef 73/I/.notdef 75/.notdef 84/T/.notdef 86/.notdef 101/e/.notdef/g/h/i/.notdef 107/.notdef 108/l/m/n/o/p/.notdef/r/s/.notdef/u/.notdef 119/.notdef] + >> endobj + 606 0 obj << + /Type /Encoding + /Differences [ 0 /.notdef 1/.notdef 65/A/.notdef/C/.notdef 69/.notdef 70/F/.notdef 72/.notdef 73/I/.notdef 75/.notdef 76/L/M/.notdef 79/.notdef 86/V/.notdef 88/.notdef 97/a/b/c/d/e/f/g/h/i/.notdef/k/l/m/n/o/p/.notdef/r/s/t/u/v/w/.notdef 121/.notdef] + >> endobj + 601 0 obj << + /Type /Encoding + /Differences [ 0 /.notdef 1/.notdef 82/R/.notdef 84/.notdef 97/a/.notdef/c/d/e/.notdef/g/h/i/.notdef/k/.notdef 109/.notdef 110/n/o/.notdef 113/.notdef 114/r/s/t/.notdef 118/.notdef 119/w/.notdef 121/.notdef] + >> endobj + 596 0 obj << + /Type /Encoding + /Differences [ 0 /.notdef 1/.notdef 65/A/.notdef 67/.notdef 69/E/.notdef 71/.notdef 72/H/I/J/K/L/.notdef/N/O/P/.notdef/R/S/T/U/V/.notdef 88/.notdef 89/Y/Z/.notdef 92/.notdef 97/a/b/.notdef 100/.notdef 101/e/.notdef 103/.notdef 104/h/.notdef 106/.notdef 107/k/.notdef 109/.notdef 111/o/.notdef 113/.notdef 114/r/.notdef 116/.notdef] + >> endobj + 589 0 obj << + /D [582 0 R /FitH 784.0631] + >> endobj + 590 0 obj << + /D [582 0 R /FitH 758.5513] + >> endobj + 587 0 obj << + /XObject << /Im4 586 0 R >> + /ProcSet [ /PDF ] + >> endobj + 672 0 obj << + /Length 2690 + /Filter /FlateDecode + >> + stream + x??Z[???~?_?G??b???N???=m?w&i?+?J???YQV?/??9W? )?v<^?????w???,?ff2?MS????YY????*?=?????e3??uln?9???NM^5H??????l??&k???>? + ??+f7?_????&??????w???7?\???8S?Em??,&????d$?q???P?wG??&-L???5???43???dM?6?????? ?]??k6[+ ?>????[u!}G?p%Y??????#'????c;T??C?,???l?;??Y s3p?D?l????Nh8?\`?36>~T????>??}?????????????E???F???6??i??P???6 M!I?x`?9?f????It????B=???'\?Dq]??g?-? + ??g???{?5p ?usFX?dca?<&,??#?j???8.n?J?#>?}??H??T?4?G?+??t??r+ ??P?????hH$E?65?vi??W??"?yx???????g?~{?Wa~?[ ???????!\?YG?????G6?K"{HDd?>W????p??< ??M??+?yQViQTcU??P??w???R?S?????rbM!dK&^A?P??\?Ur ??????Q(??E?)?z%????`|?m??d$R0?????t?EQJ?G??H??S???x?{)?t?@??U????c$??{?eP???N???c?n??3?)???????????!?{@???Gc?/Z9???????1p^k?L?a??'}}?X?s?M???n?T3a?#?h????4mW???6n\?a??z?x3j|??5????KGD[??w?? ? tz??;?????^.??B?1???E0?KmV??????g? \s?C?^??k????v\???pv??????<$???$?P?0?1?o??i)96w$??9??K???????T???W???????.???l@??????IUnV?9F,6?w????}???j????D??G???a\?????G?'??H??n???b^fia???y?"W&x?/??5x8???P?????????c?d8,?+vP???f?0r? ?I|?t????l???J_?{$)?U?@o?P9??????????V?Q[?VFa?7???JU??.9?(??0?;??+ ????;??????i?????????^?0??n??^?)?Ir?@???????(????????R????b??????W^?ee??0b?? ????g??_???????%???T?&???]7F?(}?;_Y]Q??r??g??v?af?v\3t?q?w??N_o?????:??umf9|????qh~?7_LR?????"?????4????? ???E??*????7'/?/?03U?P?????cy??! ??66(??P[?k{\?Ak??,9??R?l?k??x????(?G????c?k2?a????????q??+???F?~?dF??i?N?W??z?ND??????+ ??!??W|???d?S?????%G?7_?yYN?cH???#??o?==> endobj + 673 0 obj << + /D [671 0 R /FitH 784.0631] + >> endobj + 670 0 obj << + /Font << /F47 676 0 R /F15 679 0 R /F26 624 0 R /F49 683 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 686 0 obj << + /Length 2564 + /Filter /FlateDecode + >> + stream + x???Ms7???kx#f??P*?i?f?g???? ??????????????p????G???????j ?RS??M??\l???R???P[ + ?D#Qm>[r???{??e?htx??U? + ??+????xpLh????3??????i?????????????~?ku???u,|?f*???A?+ \?0g o??U&~?c??\??~????Cd??Cf???????f??????9?????'?W??z?>????.??????*?N??Sx|??w + {u???l??)j+he?&??(?"F+ ??? + ?H$fH?5???58?eN? + ??U??wu}?????????D???w`;$?t? .i_`(?C???+ ??P?aZ*=?:V??????O??Ws0?0?$_???,?$??W?UV??t?y?M??g???k???5??[?W\H?6?]Gl??w?????%8y{{???q??????]??&}0?J?K????!+ ?9$??|?-??Z ??L??P|r?N4???M??l??????=]??H???H?????1?$?J????c??z????2P??r???#?OiJ?6T?-%?e?e?}O?7y????I7$??V????/GD?Qd?g2?|E??? ?P?7?j???p???-?O????M? ?Q???j??)M????k??? 1v?cg??stz?{'????7????;=?_rv?q?F????$? + ???z????N???yu????Y??(?[??'?????{???????$?l? ,???B?"`I?=X\???N2c??+???L??P:???????Y?m???D????????i,?1??S???"???? ???? ??????~?Owl?9endstream + endobj + 685 0 obj << + /Type /Page + /Contents 686 0 R + /Resources 684 0 R + /MediaBox [0 0 595.2757 841.8898] + /Parent 591 0 R + /Annots [ 692 0 R 693 0 R 694 0 R 695 0 R 696 0 R 697 0 R 698 0 R 699 0 R 700 0 R 701 0 R 702 0 R 703 0 R 704 0 R 705 0 R 706 0 R 707 0 R 708 0 R 709 0 R 710 0 R 711 0 R 712 0 R 713 0 R 714 0 R 715 0 R 716 0 R 717 0 R 718 0 R 719 0 R 720 0 R 721 0 R 722 0 R 723 0 R 724 0 R 725 0 R 726 0 R 727 0 R 728 0 R 729 0 R 730 0 R ] + >> endobj + 692 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [514.0612 628.218 522.3155 637.2304] + /Subtype /Link + /A << /S /GoTo /D (chapter.3) >> + >> endobj + 693 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [514.8684 614.4425 522.3155 623.4604] + /Subtype /Link + /A << /S /GoTo /D (section.4) >> + >> endobj + 694 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [514.8684 600.667 522.3155 609.6849] + /Subtype /Link + /A << /S /GoTo /D (section.7) >> + >> endobj + 695 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [514.0612 575.8316 522.3155 584.8441] + /Subtype /Link + /A << /S /GoTo /D (chapter.11) >> + >> endobj + 696 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [514.8684 562.0562 522.3155 571.0741] + /Subtype /Link + /A << /S /GoTo /D (section.12) >> + >> endobj + 697 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [514.8684 548.2807 522.3155 557.2986] + /Subtype /Link + /A << /S /GoTo /D (section.15) >> + >> endobj + 698 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [514.8684 534.5053 522.3155 543.5232] + /Subtype /Link + /A << /S /GoTo /D (section.17) >> + >> endobj + 699 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [514.8684 520.7298 522.3155 529.7477] + /Subtype /Link + /A << /S /GoTo /D (section.42) >> + >> endobj + 700 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 506.9544 522.3155 515.9723] + /Subtype /Link + /A << /S /GoTo /D (section.45) >> + >> endobj + 701 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 493.1789 522.3155 502.1968] + /Subtype /Link + /A << /S /GoTo /D (section.46) >> + >> endobj + 702 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [507.7994 468.3435 522.3155 477.356] + /Subtype /Link + /A << /S /GoTo /D (chapter.47) >> + >> endobj + 703 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 454.5681 522.3155 463.586] + /Subtype /Link + /A << /S /GoTo /D (section.48) >> + >> endobj + 704 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 440.7926 522.3155 449.8105] + /Subtype /Link + /A << /S /GoTo /D (section.49) >> + >> endobj + 705 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 427.0171 522.3155 436.035] + /Subtype /Link + /A << /S /GoTo /D (subsection.50) >> + >> endobj + 706 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 413.2417 522.3155 422.2596] + /Subtype /Link + /A << /S /GoTo /D (subsection.84) >> + >> endobj + 707 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 399.4662 522.3155 408.4841] + /Subtype /Link + /A << /S /GoTo /D (subsection.85) >> + >> endobj + 708 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 385.6908 522.3155 394.7087] + /Subtype /Link + /A << /S /GoTo /D (subsection.181) >> + >> endobj + 709 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 371.9153 522.3155 380.9332] + /Subtype /Link + /A << /S /GoTo /D (subsection.273) >> + >> endobj + 710 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 358.1399 522.3155 367.1578] + /Subtype /Link + /A << /S /GoTo /D (section.379) >> + >> endobj + 711 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [507.7994 333.3045 522.3155 342.3169] + /Subtype /Link + /A << /S /GoTo /D (chapter.380) >> + >> endobj + 712 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 319.529 522.3155 328.5469] + /Subtype /Link + /A << /S /GoTo /D (section.381) >> + >> endobj + 713 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 305.7536 522.3155 314.7715] + /Subtype /Link + /A << /S /GoTo /D (section.382) >> + >> endobj + 714 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 291.9781 522.3155 300.996] + /Subtype /Link + /A << /S /GoTo /D (section.383) >> + >> endobj + 715 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 278.2026 522.3155 287.2205] + /Subtype /Link + /A << /S /GoTo /D (subsection.384) >> + >> endobj + 716 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 264.4272 522.3155 273.4451] + /Subtype /Link + /A << /S /GoTo /D (subsection.385) >> + >> endobj + 717 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 250.6517 522.3155 259.6696] + /Subtype /Link + /A << /S /GoTo /D (subsection.387) >> + >> endobj + 718 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 236.8763 522.3155 245.8942] + /Subtype /Link + /A << /S /GoTo /D (section.388) >> + >> endobj + 719 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 223.1008 522.3155 232.1187] + /Subtype /Link + /A << /S /GoTo /D (subsection.389) >> + >> endobj + 720 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 209.3254 522.3155 218.3433] + /Subtype /Link + /A << /S /GoTo /D (subsection.390) >> + >> endobj + 721 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 195.5499 522.3155 204.5678] + /Subtype /Link + /A << /S /GoTo /D (subsubsection.392) >> + >> endobj + 722 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 181.7744 522.3155 190.7923] + /Subtype /Link + /A << /S /GoTo /D (subsubsection.393) >> + >> endobj + 723 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 167.999 522.3155 177.0169] + /Subtype /Link + /A << /S /GoTo /D (section.394) >> + >> endobj + 724 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 154.2235 522.3155 163.2414] + /Subtype /Link + /A << /S /GoTo /D (subsection.395) >> + >> endobj + 725 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 140.4481 522.3155 149.466] + /Subtype /Link + /A << /S /GoTo /D (subsection.396) >> + >> endobj + 726 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 126.6726 522.3155 135.6905] + /Subtype /Link + /A << /S /GoTo /D (subsection.397) >> + >> endobj + 727 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 112.8971 522.3155 121.9151] + /Subtype /Link + /A << /S /GoTo /D (subsubsection.399) >> + >> endobj + 728 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 99.1217 522.3155 108.1396] + /Subtype /Link + /A << /S /GoTo /D (subsection.400) >> + >> endobj + 729 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 85.3462 522.3155 94.3641] + /Subtype /Link + /A << /S /GoTo /D (subsection.401) >> + >> endobj + 730 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 71.5708 522.3155 80.5887] + /Subtype /Link + /A << /S /GoTo /D (subsubsection.402) >> + >> endobj + 687 0 obj << + /D [685 0 R /FitH 784.0631] + >> endobj + 688 0 obj << + /D [685 0 R /FitH 654.0496] + >> endobj + 684 0 obj << + /Font << /F47 676 0 R /F15 679 0 R /F26 624 0 R /F57 691 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 733 0 obj << + /Length 3049 + /Filter /FlateDecode + >> + stream + x???[wG???)?h=????y4l`?!g???>d??A? L,g?o??=}??L??? 8???4???UW?????X????n?:??Ubq?=?????'"?E?Lws???V?????f?.N?y?????y/?????F-.??xz???Rv?7Kq?)?v??.?;??????^??~w?R?? + ??K^??t?R-W????W S??????3.???<-?W????U? ????_ ?????????wN? ?Q????k?$?W??|?i{?????6??????`/a?????U?2wC!^?g??????I?~????V?1?/W????1?1 #??(B7?? ??]?????:?????ur?o>??????Y?????z?I?b?]MK??,??j z???Tiy,?M ?Q?#o?6J?|e??W??2?&??%????r?? t(x????\?????? g?n(???????sh???7??????N???i?y"R`?"?T????+R\?"5?9??b?D?<?n!??????Tf?\???g??j???q???????5 + z???!iW?????RU=f????T3?;.????-??????QAB?"?9g??n??a????a?++4s??r?f~????? ?^?Y?I?S???????T??X?v???????DR??un????.?U?|E?C?=]?p?4??)?1-????????N???? &???oC??X?Z??N?\?wC???????Z?M?4????|E????$???(??K?)~"??(????S(4?J?/?;m ??u?l?=???\??p_d d????0"?I?._????[?A ?V?!????c???/b+ F?( ??(??k??+ [y??+ 50GQC_???)M???? j??L??l???s?n??????0?7??|?2???x???c?G?FX?? ????3???I?GY???v??9??`??Xg_ s?0t1F?$_ ??????????p??n??JYp???|?D??E }i?Kh?%._Q????O?B (???V1?????.-h?uw/??D5???*0G?B?bTI??*._?*?$?O?BT?S?W????zT?x????l?sm{??&_???eC?oX3I?yQRc???]?XX ??O???iB?s?;t> endobj + 735 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 746.5961 522.3155 755.614] + /Subtype /Link + /A << /S /GoTo /D (subsubsection.403) >> + >> endobj + 736 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 733.0428 522.3155 742.0607] + /Subtype /Link + /A << /S /GoTo /D (subsubsection.415) >> + >> endobj + 737 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 719.4894 522.3155 728.5073] + /Subtype /Link + /A << /S /GoTo /D (subsubsection.465) >> + >> endobj + 738 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 705.9361 522.3155 714.954] + /Subtype /Link + /A << /S /GoTo /D (subsubsection.477) >> + >> endobj + 739 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 692.3828 522.3155 701.4007] + /Subtype /Link + /A << /S /GoTo /D (subsubsection.478) >> + >> endobj + 740 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 678.8294 522.3155 687.8473] + /Subtype /Link + /A << /S /GoTo /D (subsection.511) >> + >> endobj + 741 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 665.2761 522.3155 674.294] + /Subtype /Link + /A << /S /GoTo /D (subsection.520) >> + >> endobj + 742 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 651.7228 522.3155 660.7407] + /Subtype /Link + /A << /S /GoTo /D (subsection.522) >> + >> endobj + 743 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 638.1694 522.3155 647.1873] + /Subtype /Link + /A << /S /GoTo /D (section.523) >> + >> endobj + 744 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [507.7994 613.7042 522.3155 622.7167] + /Subtype /Link + /A << /S /GoTo /D (chapter.524) >> + >> endobj + 745 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 600.1509 522.3155 609.1688] + /Subtype /Link + /A << /S /GoTo /D (section.525) >> + >> endobj + 746 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 586.5976 522.3155 595.6155] + /Subtype /Link + /A << /S /GoTo /D (section.526) >> + >> endobj + 747 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 573.0442 522.3155 582.0621] + /Subtype /Link + /A << /S /GoTo /D (subsection.527) >> + >> endobj + 748 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 559.4909 522.3155 568.5088] + /Subtype /Link + /A << /S /GoTo /D (subsection.529) >> + >> endobj + 749 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 545.9376 522.3155 554.9555] + /Subtype /Link + /A << /S /GoTo /D (subsection.531) >> + >> endobj + 750 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 532.3842 522.3155 541.4021] + /Subtype /Link + /A << /S /GoTo /D (section.532) >> + >> endobj + 751 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 518.8309 522.3155 527.8488] + /Subtype /Link + /A << /S /GoTo /D (subsection.534) >> + >> endobj + 752 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 505.2775 522.3155 514.2955] + /Subtype /Link + /A << /S /GoTo /D (subsection.558) >> + >> endobj + 753 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 491.7242 522.3155 500.7421] + /Subtype /Link + /A << /S /GoTo /D (subsection.570) >> + >> endobj + 754 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 478.1709 522.3155 487.1888] + /Subtype /Link + /A << /S /GoTo /D (subsection.580) >> + >> endobj + 755 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 464.6175 522.3155 473.6354] + /Subtype /Link + /A << /S /GoTo /D (section.581) >> + >> endobj + 756 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 451.0642 522.3155 460.0821] + /Subtype /Link + /A << /S /GoTo /D (subsection.582) >> + >> endobj + 757 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 437.5109 522.3155 446.5288] + /Subtype /Link + /A << /S /GoTo /D (subsection.583) >> + >> endobj + 758 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 423.9575 522.3155 432.9754] + /Subtype /Link + /A << /S /GoTo /D (subsubsection.643) >> + >> endobj + 759 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 410.4042 522.3155 419.4221] + /Subtype /Link + /A << /S /GoTo /D (subsubsection.661) >> + >> endobj + 760 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 396.8508 522.3155 405.8688] + /Subtype /Link + /A << /S /GoTo /D (subsection.682) >> + >> endobj + 761 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 383.2975 522.3155 392.3154] + /Subtype /Link + /A << /S /GoTo /D (subsubsection.683) >> + >> endobj + 765 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 369.7442 522.3155 378.7621] + /Subtype /Link + /A << /S /GoTo /D (subsubsection.684) >> + >> endobj + 766 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 356.1908 522.3155 365.2087] + /Subtype /Link + /A << /S /GoTo /D (subsubsection.701) >> + >> endobj + 767 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 342.6375 522.3155 351.6554] + /Subtype /Link + /A << /S /GoTo /D (subsubsection.707) >> + >> endobj + 768 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 329.0842 522.3155 338.1021] + /Subtype /Link + /A << /S /GoTo /D (subsubsection.708) >> + >> endobj + 769 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 315.5308 522.3155 324.5487] + /Subtype /Link + /A << /S /GoTo /D (subsubsection.715) >> + >> endobj + 770 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 301.9775 522.3155 310.9954] + /Subtype /Link + /A << /S /GoTo /D (subsubsection.745) >> + >> endobj + 771 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 288.4241 522.3155 297.4421] + /Subtype /Link + /A << /S /GoTo /D (subsubsection.746) >> + >> endobj + 772 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 274.8708 522.3155 283.8887] + /Subtype /Link + /A << /S /GoTo /D (subsubsection.747) >> + >> endobj + 773 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 261.3175 522.3155 270.3354] + /Subtype /Link + /A << /S /GoTo /D (subsubsection.748) >> + >> endobj + 774 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 247.7641 522.3155 256.782] + /Subtype /Link + /A << /S /GoTo /D (subsubsection.751) >> + >> endobj + 775 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 234.2108 522.3155 243.2287] + /Subtype /Link + /A << /S /GoTo /D (subsubsection.758) >> + >> endobj + 776 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 220.6575 522.3155 229.6754] + /Subtype /Link + /A << /S /GoTo /D (subsection.759) >> + >> endobj + 777 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 207.1041 522.3155 216.122] + /Subtype /Link + /A << /S /GoTo /D (subsubsection.762) >> + >> endobj + 778 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 193.5508 522.3155 202.5687] + /Subtype /Link + /A << /S /GoTo /D (subsubsection.763) >> + >> endobj + 779 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 179.9975 522.3155 189.0154] + /Subtype /Link + /A << /S /GoTo /D (section.845) >> + >> endobj + 780 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 166.4441 522.3155 175.462] + /Subtype /Link + /A << /S /GoTo /D (subsection.846) >> + >> endobj + 781 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 152.8908 522.3155 161.9087] + /Subtype /Link + /A << /S /GoTo /D (subsection.847) >> + >> endobj + 782 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 139.3375 522.3155 148.3554] + /Subtype /Link + /A << /S /GoTo /D (subsubsection.848) >> + >> endobj + 783 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 125.7841 522.3155 134.802] + /Subtype /Link + /A << /S /GoTo /D (subsection.858) >> + >> endobj + 784 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 112.2308 522.3155 121.2487] + /Subtype /Link + /A << /S /GoTo /D (subsection.861) >> + >> endobj + 785 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 98.6774 522.3155 107.6954] + /Subtype /Link + /A << /S /GoTo /D (subsubsection.862) >> + >> endobj + 786 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 85.1241 522.3155 94.142] + /Subtype /Link + /A << /S /GoTo /D (subsubsection.882) >> + >> endobj + 787 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 71.5708 522.3155 80.5887] + /Subtype /Link + /A << /S /GoTo /D (subsection.885) >> + >> endobj + 734 0 obj << + /D [732 0 R /FitH 784.0631] + >> endobj + 731 0 obj << + /Font << /F47 676 0 R /F15 679 0 R /F57 691 0 R /F63 764 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 790 0 obj << + /Length 3055 + /Filter /FlateDecode + >> + stream + x???[wG???)?(=????#K ?% <$9{?F\???I>?v???$?????H??????L???]}?? ???Dp?T~??f?*199;??????D6?????C?????{&? ??o?G???.?????t??Q????L???g?O?fb??G?????;?^ L???g?.?Z??Yw)??K?>]?????J??u?'s??pz????,????Vug???/????h?????x3???????Hr?? ?????????)???y????Q-A?C? DUH??Uz??c&H?E?????N???}Y???^/gs???IlB.?.m+ F?Or???????Im? ??k???(?dBL??;h??|??:0G??????h??Fw_S^?xGI???)???????Ntc z$??'???W?k??[]?R??G????<M???4?1M?A??k?4?U;???@;???h??. ?B?)y1}?????r??x?f?I?????KL???9J???q?$??4?????ULyc7I?mRX???+ h??b?J_k!????4???];\?]???~??????j??e/?/f?NW?z7???Cv??????u???Z????q}? ??&?[????f?!??K??1~ ?????;=?I %????<0_???9???/KW?Pendstream + endobj + 789 0 obj << + /Type /Page + /Contents 790 0 R + /Resources 788 0 R + /MediaBox [0 0 595.2757 841.8898] + /Parent 591 0 R + /Annots [ 792 0 R 793 0 R 794 0 R 795 0 R 796 0 R 797 0 R 798 0 R 799 0 R 800 0 R 801 0 R 802 0 R 803 0 R 804 0 R 805 0 R 806 0 R 807 0 R 808 0 R 809 0 R 810 0 R 811 0 R 812 0 R 813 0 R 814 0 R 815 0 R 816 0 R 817 0 R 818 0 R 819 0 R 820 0 R 821 0 R 822 0 R 823 0 R 824 0 R 825 0 R 826 0 R 827 0 R 828 0 R 829 0 R 830 0 R 831 0 R 832 0 R 833 0 R 834 0 R 835 0 R 836 0 R 837 0 R 838 0 R 839 0 R ] + >> endobj + 792 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 746.5961 522.3155 755.614] + /Subtype /Link + /A << /S /GoTo /D (section.924) >> + >> endobj + 793 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 732.935 522.3155 741.9529] + /Subtype /Link + /A << /S /GoTo /D (subsection.925) >> + >> endobj + 794 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 719.2738 522.3155 728.2917] + /Subtype /Link + /A << /S /GoTo /D (subsection.927) >> + >> endobj + 795 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 705.6127 522.3155 714.6306] + /Subtype /Link + /A << /S /GoTo /D (subsubsection.929) >> + >> endobj + 796 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 691.9515 522.3155 700.9694] + /Subtype /Link + /A << /S /GoTo /D (subsection.984) >> + >> endobj + 797 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 678.2903 522.3155 687.3083] + /Subtype /Link + /A << /S /GoTo /D (subsubsection.998) >> + >> endobj + 798 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 664.6292 522.3155 673.6471] + /Subtype /Link + /A << /S /GoTo /D (subsubsection.999) >> + >> endobj + 799 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 650.968 522.3155 659.9859] + /Subtype /Link + /A << /S /GoTo /D (subsubsection.1008) >> + >> endobj + 800 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 637.3069 522.3155 646.3248] + /Subtype /Link + /A << /S /GoTo /D (subsection.1009) >> + >> endobj + 801 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 623.6457 522.3155 632.6636] + /Subtype /Link + /A << /S /GoTo /D (subsubsection.1010) >> + >> endobj + 802 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 609.9846 522.3155 619.0025] + /Subtype /Link + /A << /S /GoTo /D (subsubsection.1032) >> + >> endobj + 803 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 596.3234 522.3155 605.3413] + /Subtype /Link + /A << /S /GoTo /D (subsubsection.1050) >> + >> endobj + 804 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 582.6623 522.3155 591.6802] + /Subtype /Link + /A << /S /GoTo /D (subsubsection.1066) >> + >> endobj + 805 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 569.0011 522.3155 578.019] + /Subtype /Link + /A << /S /GoTo /D (section.1085) >> + >> endobj + 806 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [507.7994 544.3562 522.3155 553.3687] + /Subtype /Link + /A << /S /GoTo /D (chapter.1086) >> + >> endobj + 807 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 530.6951 522.3155 539.713] + /Subtype /Link + /A << /S /GoTo /D (section.1087) >> + >> endobj + 808 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 517.0339 522.3155 526.0519] + /Subtype /Link + /A << /S /GoTo /D (section.1088) >> + >> endobj + 809 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 503.3728 522.3155 512.3907] + /Subtype /Link + /A << /S /GoTo /D (subsection.1090) >> + >> endobj + 810 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 489.7116 522.3155 498.7295] + /Subtype /Link + /A << /S /GoTo /D (section.1091) >> + >> endobj + 811 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 476.0505 522.3155 485.0684] + /Subtype /Link + /A << /S /GoTo /D (subsection.1092) >> + >> endobj + 812 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 462.3893 522.3155 471.4072] + /Subtype /Link + /A << /S /GoTo /D (subsubsection.1093) >> + >> endobj + 813 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 448.7282 522.3155 457.7461] + /Subtype /Link + /A << /S /GoTo /D (subsubsection.1094) >> + >> endobj + 814 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 435.067 522.3155 444.0849] + /Subtype /Link + /A << /S /GoTo /D (subsubsection.1095) >> + >> endobj + 815 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 421.4059 522.3155 430.4238] + /Subtype /Link + /A << /S /GoTo /D (subsubsection.1096) >> + >> endobj + 816 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 407.7447 522.3155 416.7626] + /Subtype /Link + /A << /S /GoTo /D (subsubsection.1097) >> + >> endobj + 817 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 394.0836 522.3155 403.1015] + /Subtype /Link + /A << /S /GoTo /D (subsubsection.1099) >> + >> endobj + 818 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 380.4224 522.3155 389.4403] + /Subtype /Link + /A << /S /GoTo /D (subsubsection.1102) >> + >> endobj + 819 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 366.7613 522.3155 375.7792] + /Subtype /Link + /A << /S /GoTo /D (subsubsection.1103) >> + >> endobj + 820 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 353.1001 522.3155 362.118] + /Subtype /Link + /A << /S /GoTo /D (subsubsection.1108) >> + >> endobj + 821 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 339.439 522.3155 348.4569] + /Subtype /Link + /A << /S /GoTo /D (subsection.1109) >> + >> endobj + 822 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 325.7778 522.3155 334.7957] + /Subtype /Link + /A << /S /GoTo /D (subsubsection.1110) >> + >> endobj + 823 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 312.1167 522.3155 321.1346] + /Subtype /Link + /A << /S /GoTo /D (subsubsection.1131) >> + >> endobj + 824 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 298.4555 522.3155 307.4734] + /Subtype /Link + /A << /S /GoTo /D (section.1138) >> + >> endobj + 825 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [507.7994 273.8106 522.3155 282.8231] + /Subtype /Link + /A << /S /GoTo /D (chapter.1139) >> + >> endobj + 826 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 260.1495 522.3155 269.1674] + /Subtype /Link + /A << /S /GoTo /D (section.1140) >> + >> endobj + 827 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 246.4883 522.3155 255.5062] + /Subtype /Link + /A << /S /GoTo /D (section.1141) >> + >> endobj + 828 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 232.8272 522.3155 241.8451] + /Subtype /Link + /A << /S /GoTo /D (section.1144) >> + >> endobj + 829 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [503.9593 219.166 522.3155 228.1839] + /Subtype /Link + /A << /S /GoTo /D (section.1145) >> + >> endobj + 830 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [501.5376 194.5211 522.3155 203.5336] + /Subtype /Link + /A << /S /GoTo /D (chapter.1146) >> + >> endobj + 831 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [503.9593 180.86 522.3155 189.8779] + /Subtype /Link + /A << /S /GoTo /D (section.1147) >> + >> endobj + 832 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [503.9593 167.1988 522.3155 176.2168] + /Subtype /Link + /A << /S /GoTo /D (section.1148) >> + >> endobj + 833 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [503.9593 153.5377 522.3155 162.5556] + /Subtype /Link + /A << /S /GoTo /D (section.1149) >> + >> endobj + 834 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [503.9593 139.8765 522.3155 148.8944] + /Subtype /Link + /A << /S /GoTo /D (section.1199) >> + >> endobj + 835 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [503.9593 126.2154 522.3155 135.2333] + /Subtype /Link + /A << /S /GoTo /D (subsection.1200) >> + >> endobj + 836 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [503.9593 112.5542 522.3155 121.5721] + /Subtype /Link + /A << /S /GoTo /D (subsection.1228) >> + >> endobj + 837 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [503.9593 98.8931 522.3155 107.911] + /Subtype /Link + /A << /S /GoTo /D (subsection.1277) >> + >> endobj + 838 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [503.9593 85.2319 522.3155 94.2498] + /Subtype /Link + /A << /S /GoTo /D (section.1301) >> + >> endobj + 839 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [503.9593 71.5708 522.3155 80.5887] + /Subtype /Link + /A << /S /GoTo /D (subsection.1302) >> + >> endobj + 791 0 obj << + /D [789 0 R /FitH 784.0631] + >> endobj + 788 0 obj << + /Font << /F47 676 0 R /F15 679 0 R /F63 764 0 R /F57 691 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 842 0 obj << + /Length 767 + /Filter /FlateDecode + >> + stream + x???KO?@???>???????G?J%??V?zAR(*&??E|??8?w???HHPEq?1?????\?r?+?]^9??U?????/??c????O??>?{`?sd???p??;???^x?q(??F???i?~sSJWlK(?}?wy?8?>,?(U???X*????T??? ?Q*?Q%p^&??? .+ ^2????E8??16????y + ???=??+ Jn?????:??r?k?k?<7N????X???[??K??^p{?b????`?endstream + endobj + 841 0 obj << + /Type /Page + /Contents 842 0 R + /Resources 840 0 R + /MediaBox [0 0 595.2757 841.8898] + /Parent 591 0 R + /Annots [ 844 0 R 845 0 R 846 0 R 847 0 R 848 0 R 849 0 R 850 0 R ] + >> endobj + 844 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [503.9593 746.5961 522.3155 755.614] + /Subtype /Link + /A << /S /GoTo /D (subsection.1408) >> + >> endobj + 845 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [503.9593 733.0469 522.3155 742.0648] + /Subtype /Link + /A << /S /GoTo /D (subsection.1409) >> + >> endobj + 846 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [503.9593 719.4977 522.3155 728.5156] + /Subtype /Link + /A << /S /GoTo /D (section.1411) >> + >> endobj + 847 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [503.9593 705.9485 522.3155 714.9664] + /Subtype /Link + /A << /S /GoTo /D (subsection.1412) >> + >> endobj + 848 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [503.9593 692.3993 522.3155 701.4172] + /Subtype /Link + /A << /S /GoTo /D (subsection.1413) >> + >> endobj + 849 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [503.9593 678.8501 522.3155 687.868] + /Subtype /Link + /A << /S /GoTo /D (subsection.1414) >> + >> endobj + 850 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [501.5376 654.3918 522.3155 663.4043] + /Subtype /Link + /A << /S /GoTo /D (appendix*.1415) >> + >> endobj + 843 0 obj << + /D [841 0 R /FitH 784.0631] + >> endobj + 840 0 obj << + /Font << /F47 676 0 R /F15 679 0 R /F57 691 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 853 0 obj << + /Length 2679 + /Filter /FlateDecode + >> + stream + x??\?r?H}?W??F?cVE?T?}?L0;???<0<4v??^??z?~???n??X??? p??T)??RVV????l??$?Z3?F???????kw??KFt??I3v?+-t??????????C?]??R?f'?0???????=?????_??wB?????y????????W???z?????O'???0k?6vq???f??X?/n?9q???`9#?Y^???????&???J?E????=Agg???u^2????B?5?????????g?w????$?#?????@i????????Ae?s?p?R?CiM?2 + #i?????P*??}Fm\m?5%?U?? CV#?`??r??????t???gs? + ???N?Z??o?????????x??!G?Wn?????th???]???.????s??=?i??????~????zb????K???2[w?|?Cn5??/'?cz????3Mz'??'??8?2?????????r?q'RO??b?M???????{8??n??Y"?0&??:??s872L??s??I??????G?U???Ye?o?????>W?????G????????=???L z???Af?i?x3?v\?L???[? e?{27"J?????]??>X??+1?}??<2?2?]??4?M??|???hM??$??????}?^lr?*O??t?QHY??? ?@?n????cA???I ??Q????/?s?H#????3v4???????:|?YK8g x?=?$f;????????-?H4????8'|??*?W??f ??y??(?????6??y?????t?n?/D???uO?f?h????e"????;??{F????l?'??z}?????F??y?{?|???o????????q????dwl??^j??W?8?Ms?????{w?{h?hS?stg???[???\?o?????(d^????JL?R?????y??Q3)?2?X????M??v??????H62??=?v??&x ?_?V? + @???a~?/? ?A?m?/??E?;????????5????????w????5??t=, ?,?k???5C????w??=???2??? ??9?6x???????k????)?????1?????????Q??* + ???^Zh?Q??AR? ??(r>?VB?????Q?0?=&$??%??????H;-?&x?D$!(?L ?DNS??!6??7C?????????DZq????X?? ??g?4r?????>=#l?????9SD)????6p??>?>\? O?e?g?-??u|bA?b?? ??h$?W ?????6x ?SA3(??????????6????????"U????2?s????????F ??0z:??:??pcI?, + s?GwG??z?s???t????z?6X<%,&?j! ?,?>%,1?/3?ul8?{??$????c????????x?????*,?{t???5????!????+ ?jW?v?;???CW??CWp2q?!?+?a?tP?F?#'??]G'#%???W?RX?K?????????r?do4=?B? + >)??????$??-?d#?*???5?????:> endobj + 856 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [514.8684 630.0929 522.3155 639.1108] + /Subtype /Link + /A << /S /GoTo /D (figure.13) >> + >> endobj + 857 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [514.8684 616.5437 522.3155 625.5616] + /Subtype /Link + /A << /S /GoTo /D (figure.14) >> + >> endobj + 858 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [514.8684 602.9945 522.3155 612.0124] + /Subtype /Link + /A << /S /GoTo /D (figure.16) >> + >> endobj + 859 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [514.8684 589.4453 522.3155 598.4632] + /Subtype /Link + /A << /S /GoTo /D (figure.18) >> + >> endobj + 860 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 575.8961 522.3155 584.914] + /Subtype /Link + /A << /S /GoTo /D (figure.43) >> + >> endobj + 861 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 562.3469 522.3155 571.3648] + /Subtype /Link + /A << /S /GoTo /D (figure.44) >> + >> endobj + 862 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 538.835 522.3155 547.8529] + /Subtype /Link + /A << /S /GoTo /D (figure.182) >> + >> endobj + 863 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 525.2858 522.3155 534.3037] + /Subtype /Link + /A << /S /GoTo /D (figure.183) >> + >> endobj + 864 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 501.774 522.3155 510.7919] + /Subtype /Link + /A << /S /GoTo /D (figure.386) >> + >> endobj + 865 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 488.2248 522.3155 497.2427] + /Subtype /Link + /A << /S /GoTo /D (figure.391) >> + >> endobj + 866 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 474.6756 522.3155 483.6935] + /Subtype /Link + /A << /S /GoTo /D (figure.398) >> + >> endobj + 867 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 461.1264 522.3155 470.1443] + /Subtype /Link + /A << /S /GoTo /D (figure.414) >> + >> endobj + 868 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 447.5772 522.3155 456.5951] + /Subtype /Link + /A << /S /GoTo /D (figure.510) >> + >> endobj + 869 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 434.028 522.3155 443.0459] + /Subtype /Link + /A << /S /GoTo /D (figure.512) >> + >> endobj + 870 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 420.4788 522.3155 429.4967] + /Subtype /Link + /A << /S /GoTo /D (figure.513) >> + >> endobj + 871 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 406.9296 522.3155 415.9475] + /Subtype /Link + /A << /S /GoTo /D (figure.514) >> + >> endobj + 872 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 393.3804 522.3155 402.3983] + /Subtype /Link + /A << /S /GoTo /D (figure.521) >> + >> endobj + 873 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 369.8686 522.3155 378.8865] + /Subtype /Link + /A << /S /GoTo /D (figure.528) >> + >> endobj + 874 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 356.3194 522.3155 365.3373] + /Subtype /Link + /A << /S /GoTo /D (figure.530) >> + >> endobj + 875 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 342.7702 522.3155 351.7881] + /Subtype /Link + /A << /S /GoTo /D (figure.533) >> + >> endobj + 876 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 329.221 522.3155 338.2389] + /Subtype /Link + /A << /S /GoTo /D (figure.557) >> + >> endobj + 877 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 315.6718 522.3155 324.6897] + /Subtype /Link + /A << /S /GoTo /D (figure.857) >> + >> endobj + 878 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 302.1226 522.3155 311.1405] + /Subtype /Link + /A << /S /GoTo /D (figure.926) >> + >> endobj + 879 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 288.5734 522.3155 297.5913] + /Subtype /Link + /A << /S /GoTo /D (figure.928) >> + >> endobj + 880 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 265.0616 522.3155 274.0795] + /Subtype /Link + /A << /S /GoTo /D (figure.1089) >> + >> endobj + 881 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 237.9632 522.3155 246.9811] + /Subtype /Link + /A << /S /GoTo /D (figure.1098) >> + >> endobj + 882 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 224.414 522.3155 233.4319] + /Subtype /Link + /A << /S /GoTo /D (figure.1100) >> + >> endobj + 883 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 210.8648 522.3155 219.8827] + /Subtype /Link + /A << /S /GoTo /D (figure.1101) >> + >> endobj + 884 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 197.3156 522.3155 206.3335] + /Subtype /Link + /A << /S /GoTo /D (figure.1107) >> + >> endobj + 885 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [371.8078 183.7664 402.1529 193.1225] + /Subtype /Link + /A << /S /GoTo /D (cite.cs469F06:www) >> + >> endobj + 886 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 183.7664 522.3155 192.7843] + /Subtype /Link + /A << /S /GoTo /D (figure.1130) >> + >> endobj + 887 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 160.2546 522.3155 169.2725] + /Subtype /Link + /A << /S /GoTo /D (figure.1142) >> + >> endobj + 888 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [509.4139 146.7054 522.3155 155.7233] + /Subtype /Link + /A << /S /GoTo /D (figure.1143) >> + >> endobj + 889 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [503.9593 123.1935 522.3155 132.2114] + /Subtype /Link + /A << /S /GoTo /D (figure.1410) >> + >> endobj + 854 0 obj << + /D [852 0 R /FitH 784.0631] + >> endobj + 855 0 obj << + /D [852 0 R /FitH 650.5926] + >> endobj + 851 0 obj << + /Font << /F47 676 0 R /F15 679 0 R /F26 624 0 R /F63 764 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 927 0 obj << + /Length 2474 + /Filter /FlateDecode + >> + stream + x???r??????,?po???I??k&??*?`??AQeq A?????z?3U.??????? ?????B+????U?rUZ??vwj?+ ?\a??_??KSg???N?wX?L??a? .???~????w??l ]?u ?9??*#?t??vIe?\???n??\?b?r?+7+??e????(w?% + ????w?X??w + tT???\7?kwgT????????Ow? $??_I?Q?>AY?p???[+ L?w?,? ? ?TxV? + ?T???Ya+W??zf? ????wKS at p&C oQ???O???0???DS????0?????@???M?+???m^8??9?T????;?Z????+?6??"%2?? ?????ZJ8y?C?Bd??????#?????3_*qKeD?Y* UfG?|????A?????d?\???=Jl?B?F?E?y?Bys??h"#m(?K??????K?@Qh?k????ohk???>??C??p????UiH'?H0????(I?????????yW^??G??8??????N?????&<*??Fd??> endobj + 928 0 obj << + /D [926 0 R /FitH 784.0631] + >> endobj + 6 0 obj << + /D [926 0 R /FitH 758.5513] + >> endobj + 925 0 obj << + /Font << /F47 676 0 R /F15 679 0 R /F26 624 0 R /F49 683 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 931 0 obj << + /Length 3109 + /Filter /FlateDecode + >> + stream + x??]????}???z???7?+ ????????&?z?H?p?6??M?? M#?-?????????V?j???? + ??3?w??_?u?>??? ????;xz??-??????w????]??)'dd5?2??#??+i??C??lW??Q????\m??*?*IVy????????_?~?Y?v+ Gv??RQ????????].Zv?w?s?8O?????rA(??g????,??wx???????K? ?I<>0q=?>%c? /I??M?=???Zz%b????0?SZ?1i?p8??s?6?p ??&M/????? _??.A?Gt?? ??5??(:?O 9??\d;?,?????;0???8?=?x???U??~=???q????R4|??#? + 95??-$?.??!?1+????i8?Ci"zx??5? J4M??e%?=?!T(??,?*-?!0b?????@? ?????X???Za?O?@?????P ???????]Z=???'H7?;u&?a1-4$?1?Cys]'??$?.????????v)?F?|FC?,?5??????5?p-? Pa?ej?7:@ ?t??`=??H?H?g?,?$???H??????~???Z??,???? + ??VB?????????sZ??Z?i?D&??? + ?A?TF ??c(?)??* + %Ac?4F??T + mSn??X?O?%?+*( ?+ ?Mk??z?q?r?%]2z??i8b?????3???C?\?? + ??m?_???T?w8?? ???? + |??l??nWi6?xR??K???l2dH5)s???I????I?/?io?U?8Dn k)?g??37??{????[U???[????#??-?Q=?!?88?p??9\J$?v?|?\?6eQ??%DO?C,"???AuD?a?2???Z:b?/??q>$??+?u????]????4????T}?N^??4?B???@2? ????????]?>?'???_????V???]?? ?o????z????"??????"?R?2??4??1?<^?PnR?(1??j89?????+????59;?]??yO??RO?????c?]???^?Tdm?H,{8=i?? ?qSO ??Bw)a?? ?Z!????FR?k1?)E??Y???f???X??  1? + ?k?ad}?@??E'??v~L/?zh?X?zp??tei?, !"?#?M?{y???S%o???x?wP9????????T?+??????K?H??1??5?:?????ItWs????BN ???wOb??r"??K0??|???T?t?g???"?,*o?|2B??^?K>??cA???D1??m??y?h?0qQ????s???Su???kl??&?? ??4??????J?+ ?Zl??N%?# m?e??Zn?C\o+.>_???AI,?5?X+???????K???#T?????O/??2??????+Z?!????\?y?E?????)??C????c8? ???I#z75??z?????Ys???????p>f????d??s?&?xS??????Z??XHi??!b(????????@???q1D??w??{?b? ????@?@.r???//???]&Ek,????q?N?x???$??&>?r???????Y??1r ?\|t??+K?i?[?h?Pm??O??p???????"x??????F?&??????hC??k?V@???? ?q??????F?`???????h????zoi? L??SQ???@u??Q??+???xL?{?h?}?N???????s^?3???~??_?????tE. tK.}??@-2??????f?;2???:?:Ge???Y???qf?zp9h?c?5?h?i?H?nBX?xV???????g?r?|?+ endobj + 930 0 obj << + /Type /Page + /Contents 931 0 R + /Resources 929 0 R + /MediaBox [0 0 595.2757 841.8898] + /Parent 890 0 R + /Annots [ 933 0 R 937 0 R 942 0 R 947 0 R ] + >> endobj + 933 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [235.1967 699.3152 241.9194 712.4518] + /Subtype /Link + /A << /S /GoTo /D (Hfootnote.5) >> + >> endobj + 937 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [187.9038 558.7017 194.6265 571.8383] + /Subtype /Link + /A << /S /GoTo /D (Hfootnote.6) >> + >> endobj + 942 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [112.6119 79.242 340.1232 92.1935] + /Subtype/Link/A<> + >> endobj + 947 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 1] + /Rect [112.6119 68.2831 321.33 81.2345] + /Subtype/Link/A<> + >> endobj + 932 0 obj << + /D [930 0 R /FitH 784.0631] + >> endobj + 10 0 obj << + /D [930 0 R /FitH 758.5513] + >> endobj + 941 0 obj << + /D [930 0 R /FitH 94.4849] + >> endobj + 946 0 obj << + /D [930 0 R /FitH 83.5259] + >> endobj + 929 0 obj << + /Font << /F47 676 0 R /F15 679 0 R /F26 624 0 R /F33 936 0 R /F49 683 0 R /F34 940 0 R /F84 945 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 950 0 obj << + /Length 2816 + /Filter /FlateDecode + >> + stream + x??]s?6???B??L?#?????w??\s?g??????S?rE9i??ow?A$???L,X?.? ?M??F:Wu]ml???Tb????#L??Fx?b?s?J??????\H[#?7w7?N[???E-6wcR+ ?D?1??!?6?????nq?I1??n_?{??????N$6 ?3????? K??oZ?p?%%!6ge?b???x??%?????^???????L6??)?!2B??h??????M??????B??#?2??D????M dOj?fd?O?t??8q????(W?` F????(?!k???????Td?Ve?/[S????)??:FYC?R? ??darH8zyj??a&?PT + 2?`??1b??6?c L?D??'Og?3?,0??????s?????5??+ OW&?.?).|???V7???@U? ???? ?rz????4?q?'O?q?????cK%7?T?$?!DMx?????7???????B??gZ0Q|??????`?.?????8}to?T??2={??Ewp???]?^????0??fp???YU?d8D?sR???G?C???????????????0??????cW???.!?ins?~?O?K?/fr?[?4?F%?|X?R?;S?a=[ + ??????Nev???n?!2<+{?z??Rv?UyaE??(jK+`/??E]????dQ?1_SL??R?M?C? }???e?K?#???@ ??T#??]@????V??A???+ ??n?R?5??D" ??]? ??k??7??*%:??*?(??Rk + ???p? + Z?4!;???,?????S/??????9?M8?!v???(??&P???FZ?8???X??C??B???u? ????#?E}3????}O???;&??u???L] + ?_?????????zB} f + ?Ym??????6"?Em0??6?mL??h#&???????o?P?G?????????P?Q??????????u?????"k?7pDr?z?????DR?y8??> endobj + 951 0 obj << + /D [949 0 R /FitH 784.0631] + >> endobj + 14 0 obj << + /D [949 0 R /FitH 758.5513] + >> endobj + 952 0 obj << + /D [949 0 R /FitH 625.9727] + >> endobj + 956 0 obj << + /D [949 0 R /FitH 542.9616] + >> endobj + 957 0 obj << + /D [949 0 R /FitH 446.4013] + >> endobj + 948 0 obj << + /Font << /F47 676 0 R /F15 679 0 R /F26 624 0 R /F61 955 0 R /F49 683 0 R /F14 634 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 962 0 obj << + /Length 1348 + /Filter /FlateDecode + >> + stream + x??XMs?6??W?(???Dnn?t?S????@K???Q????? ????t??"s????????+??Ya0g???+O?|???r???\5?*?Ip?lV???q?j?$?9p + GL?#|?}???5:??8?V??o8?????S?????????>???? + ????? g?.1???T??`f???k?U??????~_??Ib?\?R?Z0? + ?^Zb?'??H???T???????j???XB??rH??s?+ G???????eM;?????-?x????????????vq?jK?x??r??g?\Lc|??}?N.???2?+ U?v?IY???H? + > endobj + 959 0 obj << + /Type /XObject + /Subtype /Form + /FormType 1 + /PTEX.FileName (../Graphics/Overview_Systemarchitecture.pdf) + /PTEX.PageNumber 1 + /PTEX.InfoDict 965 0 R + /Matrix [1.00000000 0.00000000 0.00000000 1.00000000 0.00000000 0.00000000] + /BBox [0.00000000 0.00000000 467.00000000 439.00000000] + /Resources << + /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] + /ColorSpace << + /Cs2 966 0 R + /Cs1 967 0 R + >>/Font << /F1.0 968 0 R>> + /XObject << + /Im17 969 0 R + /Im2 970 0 R + /Im11 971 0 R + /Im15 972 0 R + /Im9 973 0 R + /Im8 974 0 R + /Im18 975 0 R + /Im6 976 0 R + /Im20 977 0 R + /Im10 978 0 R + /Im1 979 0 R + /Im4 980 0 R + /Im3 981 0 R + /Im16 982 0 R + /Im13 983 0 R + /Im5 984 0 R + /Im7 985 0 R + /Im19 986 0 R + /Im12 987 0 R + /Im14 988 0 R + >>>> + /Length 989 0 R + /Filter /FlateDecode + >> + stream + x??[Ks???W??>p????(I?]qUl????Yy?,E???????n+ ?X?S?6????B???4?&?Q????,???B&?IX??t0?R???]2???t} ??d$?#??B?U???@?g??6m???????!?s?\?]????\J^d???????q???????V???R8?)??^v?^y-??H???i?N?H~?Mb?????????_V????~K??c%M ?p???tO???????]? R?.e?:?4? \H?N???????%?7?L.r?r7???=5???e????eCj?????7?V???%?@B85????|???u????l? *??q6?i?Dy?]?????8??Sm? A?#qw??????+ ????????K?~ W??r]?W + ??g??c;??+???C?????w?Ht??`3?]?|D????????^xA?????wy%:]???????0FS?Do?k?z=??????w?c??TJ??????Xb??????u??`5?????=?????UBz_S[,?P????:)k5??)j?????F?.????6"? ?????@??a X???T??g[?L????}iF?E???A?$?LJ.??lH??1?p??e?????m?@??,?[???^?E??q?KLWh?t?????AQ? ?N?3*2?.j'U'?? yf? ?(?#???E???2??m??????5}1?4?xL?J?a?? ????E???A ???K0r???Z??b??????5?:??Zq???Vc?+ !?4?-Sk'G?-D?BL?M???q?? ?Ap?$i.??C?"?0yY?~??:?? Q???w(???5?YA?jF-?b?g?R???K/p?????? ????? ?GM?q?i????v??u????Gv??%+??y"y?h??$??71????=?e????r???????)??-h?)???X:?\???????q?f ?^???'??j????(u?7S?'??0?9Nd???;r?H?T?<3s??*C>?1?????l+?_??4?????|l.T2c??d4<"?^&??????cN?/??C>??B????v?i????G??zf??????8c????]9n l?????????vH91????????Kv0 ????h???*O?t1t+Hg*?" ???! ??????GA>????h??????R??'?F~?}$? ?Q?9dp??C??B?7?`????????:kE?|?>????&?77??>?89?L?????(,??;?M?N?$??Vi?(bL???=[???=?$??k????e h{Z1??q[?BO?u?GR`?MG?dk(Y??+ endobj + 965 0 obj + << + /Author (Jakob Praher) + /CreationDate (D:20060406162800Z) + /Creator (OmniGraffle 4.1.1) + /ModDate (D:20070406163700Z) + /Producer (Mac OS X 10.4.8 Quartz PDFContext) + /Title (Overview_Systemarchitecture.graffle) + >> + endobj + 966 0 obj + [/ICCBased 990 0 R] + endobj + 967 0 obj + [/ICCBased 991 0 R] + endobj + 968 0 obj + << + /Type /Font + /Subtype /TrueType + /BaseFont /VVCKPQ#2BHelvetica + /FontDescriptor 992 0 R + /Widths 993 0 R + /FirstChar 32 + /LastChar 121 + /Encoding /MacRomanEncoding + >> + endobj + 969 0 obj + << + /Length 994 0 R + /Type /XObject + /Subtype /Image + /Width 75 + /Height 75 + /ColorSpace 966 0 R + /SMask 995 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 970 0 obj + << + /Length 996 0 R + /Type /XObject + /Subtype /Image + /Width 449 + /Height 224 + /ColorSpace 966 0 R + /SMask 997 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 971 0 obj + << + /Length 998 0 R + /Type /XObject + /Subtype /Image + /Width 42 + /Height 36 + /ColorSpace 966 0 R + /SMask 999 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 972 0 obj + << + /Length 1000 0 R + /Type /XObject + /Subtype /Image + /Width 75 + /Height 75 + /ColorSpace 966 0 R + /SMask 1001 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 973 0 obj + << + /Length 1002 0 R + /Type /XObject + /Subtype /Image + /Width 107 + /Height 139 + /ColorSpace 966 0 R + /SMask 1003 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???+ endobj + 974 0 obj + << + /Length 1004 0 R + /Type /XObject + /Subtype /Image + /Width 172 + /Height 98 + /ColorSpace 966 0 R + /SMask 1005 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???+ endobj + 975 0 obj + << + /Length 1006 0 R + /Type /XObject + /Subtype /Image + /Width 37 + /Height 37 + /ColorSpace 966 0 R + /SMask 1007 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???+ endobj + 976 0 obj + << + /Length 1008 0 R + /Type /XObject + /Subtype /Image + /Width 71 + /Height 116 + /ColorSpace 966 0 R + /SMask 1009 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x??? + endobj + 977 0 obj + << + /Length 1010 0 R + /Type /XObject + /Subtype /Image + /Width 37 + /Height 37 + /ColorSpace 966 0 R + /SMask 1011 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???+ endobj + 978 0 obj + << + /Length 1012 0 R + /Type /XObject + /Subtype /Image + /Width 42 + /Height 36 + /ColorSpace 966 0 R + /SMask 1013 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 979 0 obj + << + /Length 1014 0 R + /Type /XObject + /Subtype /Image + /Width 399 + /Height 149 + /ColorSpace 966 0 R + /SMask 1015 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 980 0 obj + << + /Length 1016 0 R + /Type /XObject + /Subtype /Image + /Width 148 + /Height 148 + /ColorSpace 966 0 R + /SMask 1017 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x??? + endobj + 981 0 obj + << + /Length 1018 0 R + /Type /XObject + /Subtype /Image + /Width 316 + /Height 57 + /ColorSpace 966 0 R + /SMask 1019 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 982 0 obj + << + /Length 1020 0 R + /Type /XObject + /Subtype /Image + /Width 75 + /Height 75 + /ColorSpace 966 0 R + /SMask 1021 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 983 0 obj + << + /Length 1022 0 R + /Type /XObject + /Subtype /Image + /Width 111 + /Height 116 + /ColorSpace 966 0 R + /SMask 1023 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x??? + endobj + 984 0 obj + << + /Length 1024 0 R + /Type /XObject + /Subtype /Image + /Width 82 + /Height 102 + /ColorSpace 966 0 R + /SMask 1025 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 985 0 obj + << + /Length 1026 0 R + /Type /XObject + /Subtype /Image + /Width 123 + /Height 148 + /ColorSpace 966 0 R + /SMask 1027 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x??? + endobj + 986 0 obj + << + /Length 1028 0 R + /Type /XObject + /Subtype /Image + /Width 37 + /Height 37 + /ColorSpace 966 0 R + /SMask 1029 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???+ endobj + 987 0 obj + << + /Length 1030 0 R + /Type /XObject + /Subtype /Image + /Width 42 + /Height 36 + /ColorSpace 966 0 R + /SMask 1031 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 988 0 obj + << + /Length 1032 0 R + /Type /XObject + /Subtype /Image + /Width 75 + /Height 75 + /ColorSpace 966 0 R + /SMask 1033 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 989 0 obj + 4211 + endobj + 990 0 obj + << + /Length 1034 0 R + /N 3 + /Alternate /DeviceRGB + /Filter /FlateDecode + >> + stream + x?}?OHQ???%B?e&R?N?W?`???o???k??????????n%B?.A?1?X?I:??b]"?(????73?????7?3????{@](m?z?y???(?;>??7P?A+?Xf$?v?lqd?}????????] ?U???????x????iO:???b??M??1?W?g?>??q?[ + ?2?M?'?"()Y'??ld4?????2??'&??Sg^???}8??&????w????,? \V:k???;?i?R;;\??u????V?????\???\?C9?u?(J?I????]????BS?s_ QP5??Fz?????G?%?t{3qW?D?0vz ?? \}\?+ ?????4?I?????x#?{z?wA??j}????????Q????=??8?m??? + ?(?o{1?c??d5?U???g??t????la??i"??\.5???????^?8tph0?k?!?~D? ?T?hd????6??????:>f??&?m?????x?A4????L?&????%???k???i??????Cq????m?&/?By#???%i??'?W??:?Xl?Err?'?=_???)?i7??????,?F|?N?????6?rm?^?? ???U?HW?????5;?????hendstream + endobj + 991 0 obj + << + /Length 1035 0 R + /N 1 + /Alternate /DeviceGray + /Filter /FlateDecode + >> + stream + x??SMkQ?3V??*??t??E?0~,????i?c??A???d????$??U7nD?n@?.?pQ?FQ(?_??~?(t)?????*?????????????u?uM?Y?/ + ?L?j?;??d??T?s3??B?m??t??????? ??????|????]?HR?O?k?,px\sE?????f?!:t|????04Vj?U??0????????????a???K?#??kIzE???~??u??0?-????9?R????eL???c?? V??t????B?????r=M?????Q???qN???`????> + endobj + 993 0 obj + [ 278 722 722 722 722 722 722 722 333 333 722 722 722 333 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 667 722 722 722 667 611 722 722 278 500 722 556 833 722 722 667 722 722 667 611 722 722 722 722 722 722 722 722 722 722 722 722 556 722 500 556 556 278 556 556 222 722 500 222 833 556 556 556 556 333 500 278 556 722 722 500 500] + endobj + 994 0 obj + 39 + endobj + 995 0 obj + << + /Length 1037 0 R + /Type /XObject + /Subtype /Image + /Width 75 + /Height 75 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????WRi??????x?? + ?*.hb??`.??i?G??H????2 c?4?\&GM?t,s??mB?:?k?^Fs?;#?6??|???????y??9v??k? ?;????l???0?`??%+?3Y?0a`Q?b????q9 ???@???/?????h0??Q?q9*p???Hd?R????B.? ?1?X???k?J q?c+????u?$? + C?? ?#?+5)z?A?KPa?X??`?I?&??????? ??F(:"?*??s + ??S?N ?#23 ??$X\??L??RYZ`H? ???`????? %D??2M?V[m??M?DE,?F?Yl?@,A?2??@? + ?Vo4W????uV?1M?c?'????h?*&VM??????s????????U%?I;#>=;G?????w?W?7?W?????o??????X??*%???????J???????M??????=w?,A????`?4F?_i?? O/?l? ????|???X??b%??V??4????;6????M?O;??W?w??"????? .???^????? ??_?i{ ????h?_ [}??^??P???"?5F&`??[?Xo^> + stream + x????Kk?q3?????L??1E"??@??$.??RA?I?*P\? ?.*~?PC???????????????????????gu~??N[?????H??t??????!7SH?Z8{K?O|M?v??i:?Z??9??????]VTM?2w?n?1???~lt????v?w?U?4L??^????x?~_?S?itj????]q???? ?#C??%?????Hx ??? ??<?I?Swy?B?V,?"?J?FH??.???5???t?|?J???z??h<9:>??d?/I???Lzr|4???=.]???T4??K??_M?? sE??B~v?Uz,{???r??6??i??c???L?4_~_!1{_?/gr?X???T?? ??P411U(??.???&[_[]?X.?&????no???????X.?vayck{g?J"????????6???L????vy?V2=S???Y???????????J3???t??k@????Fs????????i?????^?=9?}?\.s????t\????\????tiq?Z;>?? Q?~v\?n,?????^?#?v ?u?"?'g??m??5?/H??gG{[??g'?G|??=?(?~]^???????e??H??T~??v???R~?N ??;???d??nm?v?8?O`???img?]!??7;?+ ??p?y?u?????????o?~^B((????N??W????!?v??r????????j???{?D???q???X???{]???N?;????_jG'???W?z?????es?\??????q??fW?> + stream + x????K?@?m2?I???f???$)?t?*mu1??lO?(D??S*-z???????("?????;?M?e??????7??y????)?p4???q<+ ??U????(??Z?l?F?(H+ ????n5\? ?_?&?????0> + stream + x????W?Y?x? =?? ???(?8x??L?4?????x?%e???ad?,M + ??4^u2S ????=?@????????Z|?g??>?????????~????n;?{_??uokma???????;++ ?)0S??]???O?[?N:>??????S???*?!)??,#3 ??8?G?AW?kaf?b??K2P*???t?L??w-m??}K? `m.??;t*?N??UB?????C?oW??$?:????vj?W????8?Y?? + M??????P,?g??En:??6??)x??????7v|?r???p?????-?.PB]????-?O????qBO???t?|???-????"?x??uw??_???????????4? ?vn?O5??1???=8???????f6???? ??$???caUS????W>?????G?{[+????j?*?1?q?Z???????L?Y?S5??V~9? .a???`?+?????P`[ ? `/?> + stream + x????ORqp9p??fJq/.????p??RlTn??b+??"]h?i:W??yq?,????r?I^Bv?0????k???p????????~????= ?4??d?R???Q)??$?+?]?+t7?=v??V7?X??kB?????}??}?????F???!?????$?7??????o_/?I$ ???~???6??j??A?P(??$WK?g&?a??????R????M?(??j-?(R??s??'V? ???g?;SK ???r?9?t_?rt?O?RY]3??x????G_7^??*?,?????N?"?T;???Yy???5?V????~I ?n???? ? ?????QE?Y?????.?A?f???!/?n???d?RX&???HR??&??@Y??dN<*?????l??n?B*,Z??w7P@P@P@P@P@P@P@P@P@P@P??????R?k?6?w?????Y????????61i ???XT???5 i??`2?X%s.??F???w?????8???Q__?0t??hox??x1(?c??^Z+ $$???? ?*?X{?\H???y???u?g???sh'??Fa????gC?48&??4[?xTZ???"?f?&????TE?O??m???\.?h??e3?????~J)=??j?????L,?L"Z?$?1&?{?Zvq?$Sh???"D;??P??u? *?????Qt????Y????hJGJ???? + m??dA?)????Z?]5????@??S?.??@??7?w<7endstream + endobj + 1004 0 obj + 71 + endobj + 1005 0 obj + << + /Length 1042 0 R + /Type /XObject + /Subtype /Image + /Width 172 + /Height 98 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????Ok? + ?e??A?+ + ?}?.??Q???ZE??X?F3??>/?S???????fhU?????fO?D??uF?????p?=??F|G????2???L?`??m#??\I?z?Sn ?6?b???$??ss??_7?(??W6?:+ endobj + 1006 0 obj + 26 + endobj + 1007 0 obj + << + /Length 1043 0 R + /Type /XObject + /Subtype /Image + /Width 37 + /Height 37 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????k?@?k2?I:?!U3EQ?EhR????\<???\ZH ?rh???S@K???")?AZJ??\???e???a???9?x?x?}og?(?????+ IS?(U????F?Z):M `?????????q?vZ_[??> + stream + x????3[[???=q !?!??T? n3?$?Q??f?D*3Q?)*b\z?*Su?KS*???FE??????`#T?_?T>????k??z????????B]_@?? ?s XO ?q8,???`qD?J?Q)$"?PWSp2????aF2?d?*P????IJ?$?? + ? + ?P#Y?d~zff:???????@ + -:?+??K$??,7>??P??Lqay?\^Y^(????u ??LH??W&?U???Zy????&=?????*?T???uz??Y]S!??????Qn? + *???NS_???]??,??z??:???V=j6?????A???QU?]~?A_V????????G>L??L}?7>??*??s.??1x=Rd???w?????????? rb?$?????\??i?~ZZu?????OVsg?Jp?p ??dK? ?/??i?????l???i??ek?\?-??0.v?Jl?@$U4h?????w????????????? + ?H?{???????b?cm? P???x}??>???7? v?=V???????U(?????????R??????=?w r?[???????$V?9(R?".???u[?g? ???????? ???qK?N}?D?w! + YP???Z?jh|? ??B + ????W:??pC:~%RJ?!en?9?s??X]?{???`P?$Y??(?D??m?+ ?!??RD?u?^???ifu????+?????E?)Oc??K??7???`?????< ??????an????a?^???6 ?? ???????VC?P{?P???????Z?{?kY8????]???"s?F?:"\p_.C? EH/?1Pn0?=?z?@???B?KEd??GdHva???s? ??o?3??V? + zC???P?> + stream + x????k?@?k?1IC?fDQ??"4D??(??C ??ri!%?rh??O????"?? )H????[?es??.3?o?|????????????0? + #H?? IV + ?r?V?U???"K ?3$q??+ endobj + 1012 0 obj + 27 + endobj + 1013 0 obj + << + /Length 1046 0 R + /Type /XObject + /Subtype /Image + /Width 42 + /Height 36 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????k?P?k??????T??J4!??@????x??\ZH O9?T??S at FK???"?A:Fa?????c???i????=????;8?OH?????_,??????+ ??~??D????CA??Q2???B??N?X ?S7????? + Z??SJE??????????"V??????i??Xf?(?ZVU?%????? ??h?;?(?v?Q3 =O$?mRJ?????[?]?????\?{??W???,??? 8???'????/??????;?IU????oMQ&?Q?]??W?ex|????Fd???+ endobj + 1014 0 obj + 196 + endobj + 1015 0 obj + << + /Length 1047 0 R + /Type /XObject + /Subtype /Image + /Width 399 + /Height 149 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????OR ?qy8p?p??????$???k?X????????t%?t??i?????5?D?q?X?R??Lr?_??s]???sv?????k?s???C??x????v???D?!M??(6?Ps9 #J!&%%?7?(JB?c$???????x&Q?R?????*e"OS???? )9??$??????????O?%kT??"?? D?Qk????\??jClg?Zr???4???%?c<>!??TS???((t:?????+8??,S?FAK???? i?)???(*qUV?=??v????UR?????4I??CD1?{ayu]cs????_?????????~F?a(??y???\?j?;+j???z}}????|?]?M?N?9U%'???g?hM???zo?o?????b????'??.o}E???e???_L?????-=G&?g??s??f?3??#{Zj?Yi*Z??! ?5FkQuS????\`1????Rp1075:??T]d5j?I??P?h3?%?????7????P?b?Phmu%?fj??^[b??2?????*tf??????\???fq?????????F???SH ??L?>_???x:???? n?????6W??NSRG????[??3?????????????m?.????????V??jP???i;??X?x?s?y??Kqr"??>?g???h??/??????????w????Y???ws??5?6c-???@?+ endobj + 1016 0 obj + 87 + endobj + 1017 0 obj + << + /Length 1048 0 R + /Type /XObject + /Subtype /Image + /Width 148 + /Height 148 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????OR{??8_D ??2? fi; ??\i??}?}??N???D?aHwp??q0L,?%?HW9Wp?=R??$?*?S??B&???VaN?H?Z??uz??u?V?V?2???[K? + JC?6Y~b?6??lV?'??4??R?XT??$2RM?????z?>d?zY????7i5)?> ?? z????9w???V>????i7?H)????P?u????u?? + _E?0???.??a?????2?6;?\w?????h?6???7????9??fZ%?M?D?1?=\=z71?L!]r*q7z???Z?FM??M???8?v?7~?|?tNx?r ??????|?Y??V?&??2?X?H|*-??????R.?JHO?G????@??U.??m]??&?/??V??(W?????HO??js?4r??'?h?8;.?y$d???o?J??T?X_???????4*??r???????????o/n? ?Vq???'??????&%5???"??+?[?v??n????Jv?A$??0?&???^???\~c{?????z???F>'> + stream + x????K"q??g??fL? Eeta?????"y?K?!??9)< H??"?D?@?@b??u[????aG??%????D?? ?$p?x???9?jq=?J?Q:?????="????(?> + stream + x????WRi??????x?? + ?*.hb??`.??i?G??H????2 c?4?\&GM?t,s??mB?:?k?^Fs?;#?6??|???????y??9v??k? ?;????l???0?`??%+?3Y?0a`Q?b????q9 ???@???/?????h0??Q?q9*p???Hd?R????B.? ?1?X???k?J q?c+????u?$? + C?? ?#?+5)z?A?KPa?X??`?I?&??????? ??F(:"?*??s + ??S?N ?#23 ??$X\??L??RYZ`H? ???`????? %D??2M?V[m??M?DE,?F?Yl?@,A?2??@? + ?Vo4W????uV?1M?c?'????h?*&VM??????s????????U%?I;#>=;G?????w?W?7?W?????o??????X??*%???????J???????M??????=w?,A????`?4F?_i?? O/?l? ????|???X??b%??V??4????;6????M?O;??W?w??"????? .???^????? ??_?i{ ????h?_ [}??^??P???"?5F&`??[?Xo^> + stream + x????K?p?????????-??a?[ ??????@$O?"x??H??i Q??"u?!????|z|??????????~/???g?K?Qx?|????4?????E??.??01,???6???X?????Nw|YQv??(r??# + ??ko????W????k????h8??E?]z_?!V????%??a???4?zBSC?$???y????t#???%| ?l????"? ?:?B?(G?R??a?????U?Z??|&??E?8/#?CZ??l????f _???n?RZ?/0?????g?U??v?;]|u??v???3????O?CsRP3???t?=??????:M???ZP???o???|?D?\o8???`8??pp?^:?z9??????Q=[???v4???5??n?N??d?h?_sj2g;?????? _????u?9?rIu? r?(Tg?`???x????a2p?????/N???Z?????/??zY????E?V4????6?w???Q?{5?==????????i6????J????&???/??8??8??8??8??8??8??8??8??py at BxC|?Cx?Dx?Ev?FvtGxRHz0IxJx?Jx?Kx?Lz?MxdNzBO?????\|endstream + endobj + 1024 0 obj + 47 + endobj + 1025 0 obj + << + /Length 1052 0 R + /Type /XObject + /Subtype /Image + /Width 82 + /Height 102 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????[Rw?8p?????????cx(&?t!?b??y??????H?U???" ?4??H-??k;'??k?i????y=?????????W?wD?%BU5-}????h??????:]??p????P?Jz??'?????SbJL?)1%????SbJL??q??l?#Ks?.{3??'?{???????/~????3??92?t?~?~????l2???.Wd?8P????w??y???w????=??k15?4???}Y??J????e?@????mC_0!bfr{?v<] >??{k??O??????jt??U*E?\V?'???0?JN????t???l0?r3?????yd-???o?????j:Y??FU,+?CQ)?dI?">???QH?">????o{?bo??}??????<7\?]??S]?J^?"q?H$??<?@??8y??*?n?8:?G(?bss ??-x;????\w9/|w?\?R]R?f????0?b2!|?@? ?#{ + ?s?PSw??kl???z?EbV?j??q?g???:?:?6}??(??#??)a&i??+ endobj + 1026 0 obj + 76 + endobj + 1027 0 obj + << + /Length 1053 0 R + /Type /XObject + /Subtype /Image + /Width 123 + /Height 148 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???MK*a??g??fL? Eela??@C?????\??????,???$????B?R D?W;?O?C??????`~>???????-j??l?P*??\*??i??j>?g?f8QQ???\q?j??{D????n1??????-h//?Fj?b5?????Z?v??l??p@?? ZP4??Ujv???t?D??8??]??L]S?_??}!#S???????s"??^?i?V1c?|"????V??D??h:g??`xM????=s??J6??p Z + ??|?nw???xrK??xt?v?v5o???ZO?}?w1???>izw3??9?V!??e5?.????`|?0{"???~> + stream + x????k?@?kr?$?k??r??DC? "(*B?8???E!%?S?-??A'A?A:???k??jK???~?w??w????????"?bB?=~?+ ?()? ????q0??[?s???&%?W?g?t?lv]?.????4????Y.?cgp?DV????(?-W??j9 F?]?? t)?????????v??^????U/*G?sz?v?????i?{z\??k?n?9 ?7Zo8Yl?????v?? ?N????B4?QN??f???j?t?B?tT?Ke*K?????t?????^+ endobj + 1030 0 obj + 27 + endobj + 1031 0 obj + << + /Length 1055 0 R + /Type /XObject + /Subtype /Image + /Width 42 + /Height 36 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???Ak?@?k2?I:?!U3?? Eh? ?E???xYO??? + ?rh?????,-??P????????;????a\v???o?0o?{{{???w? 4???q<+ endobj + 1032 0 obj + 39 + endobj + 1033 0 obj + << + /Length 1056 0 R + /Type /XObject + /Subtype /Image + /Width 75 + /Height 75 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????_R??G?67??QAQ??$F????x?3??SG?3?6??Miu??P^F??PK-???v??~??9?v? _?{????????????/?3?B??#F/%?Hd2???@R1f1,?P?(?@??"?z"S?t???O?)T?@:?J??/?DGP??2?Y?+p?D?l + ????Pd*?ds1??F%r5?BCPN*???*???D???@( 0?&???4?XO????\?P*W?%B??#d2 < %? + ?T(??H2,???e???????[Cc??i??H????X??l)????NvaeC{??cc???EQ??{l???????????&?????s3a?v????`??^?+ o?U?i?ZxG??Zc*R?7M????R???kk?[???iLd??m??\,???????d??JM???> + stream + x??zy|T???9???f?}???L&?d#??@?? B?E A?  0C?'*?DDY7\ 5CHe??C)??u???V}????f???;!B??????9??s~????9sF)Q'?Px???%DG???u??io?????6??6??????_???714B|??E???g]@HA?=qAK???_???P6?-?????^(??r???m??iJ???gB??E??i????@??'/n?} ??a?B???E????e?????Kn??????C??eK??,??????@?kP??????^?@3k~??5?????0X?!???)?9TRI !i????^A? ??L??,? + e?#r"r?JE^??>?G??(?0GP:??lt?A?!???????I??/N??*????????~?????OG??6t + /D?L??Nc + ??iE???8?x?C?@?6t mF???t???6`_b?????V'??F?{?T ?n@?=???:ME=h/??5?%?h}???9??$s5????? d?r4jW????:?X+ ?M?N?>???T5??A??? + u??H]?ZO?jz,ZO/?????????7?bf43???t2?????m?4?????????????-?z??)???\?rh????_?9??F[@;q3????????D#???&?` /?_??nG+?:j&?????Ag?R?X?h7]???V??](?(??p0#?????????r:?6??l2?:?F?T?e???? + C??4?`?".????? `*+?S ???:? + d??_???&Y>R4?X?M?p(1?????????G):?x??i Q&|??TS???????????f0ko*?jt?????+x~-X???]x???p????????[G???6???$? _?C=*??X+;_???J??i,??:??H??>d3?}??(??_X??JcG`?@[c^n#6????G???$?c???Z<|^???~s???O??N?????/Z[o?X?2?{? &??{???2u?1z???L2??E????e?K?? ????? + ????Z?V??????v??7???`^b?\??g/???d???b?>?]???K? ??A.r?U?????V]?r???1?Vh?wi59V??v)? ?S?2?!???Rd`?F?5FL ?$?? ,?^?7 ,?`/ + ?!?? + {???9?i??g??RZ?? ??????ia??+QJ?y????.--?%?)???/?L??f?[ n?I|QB?x_?r.??&??l????R???^???Q??????{???gO??p?B:/W?Jnn??x?I??d?c?.??w?????.?.??@R??;??^N?f??4A???VlV?{????J?c??? ?Z@??6?C&G[??"d%~$??~,?D?bt"#???F~W ??Pd ???q????V??wM???Se????~??O?M_?9??o?z? ??%? ?7???????a??$??6Xo??|X????b???5Ia F?.?h+?>h??????e????C?i????_y'?'ud&?i)?M??b??L?????&??????8?8??}???????VHq[ -??V?=aW??{N?????S???4?????N?? + yi?b??u? @??k ?U?R?i~?AN?v9ef??F???^?+ m?O????~?n?H?P (E?T???~??O(uB?y??~W\9??$t n??gM5??C^?1&w?*(?U?$~???????~3?????|!~s?p?3??R?o??????M????Y{)????;?? ?n????????????}7m????9?I???? T?????p?????+ ??N?(?X\ ?N + E???MPt'h???????zJ?AW??%/?3?bO??nx<6??~???+???>\2x?Uvp_?@4K????6?Q??W?O???2?2?^\?,m???O3G^?x???????s?c+?ff?3???vn-s?:E??? ??<'??j?0%E?upTcXX??u 5?ch?ae<#^'+ ?cV8?+ ??????wL?-??x???????~??]?? c?K?_?Om???56??h????`????????X?-?x7??`?y??R8=????6?I??3?[?:?? + ??~??rjw+U?`??J7D?A4q).s??~??.??B???/_?????uu sl??????C{???????b???Y?#?[?k|?????1iU?/???f*Vb?x?eE6?Zt}?????T5M?y Q??2e???V???X?????Gq%,?UW,3?????7k???????????85v???%,?A??(??,?M?yy? ?"] #????mc??1l3n?`??|?"?J?N?LK???6????Pu???mim?6?.Ww????d?!=??f???m??(Zy???G|?*9?????p?9??????dj ?P??cs[L??yt?? ??????f4 + ???y}C8\e?k '?[?# + ????Qt??k??8???>?_P?$?s?????d@???:??"`OJ???T???????8????u?-?0xK )J.??.?3 ?\yM ?k?????????{??Q?[Xw]?G??y ?a????Z?>a???????$???3r?O??2 ~j??;??z?????'??2?zgNV????????`K???D??+ L6??;???$\????????v????????y?Uo5????3+ ?w(?*???I?S??x???{+???Y??m???V2Ap??:?R???d??vrG?L.??Q|_X??p,??YN????X???p?W??O????jV?0"4?vB??]?9>T#???K?R??;.?^`?3o???;??O>????kt??~j???T????Q?~ ?I?yYH??S3?<??????????/?????p?_?;????Gxc??7???1>V:?????_t????P"???????s????z?6???f?j?j?F?&M ?5V?O? + ?e??ev?]??bf????l?mT*R??Z &???"??f??W?? ??{?C?????*E$MT?o??+ s???r????0?? + p@?????>? ??dy??E??2??????/1]L?????%?H?YH?J???!-??0)6(??MyH?]???B?]?.?;)??n???`?x? ?}?? Zj=GRV,??i???N??Y??????uN?d??'??Z??>u?t??K??4?}?tDY([??/@?? G?Jz?w,'??;]/??<??ME??tT?f??L??hlf?A(?????2????$ + ???P?u?@??@8??????!??lx\XA?o0X????@????Z>???H?>??>?]'?O?'?\???"^t???????M??-?? ??b??????/?,??1???\4~????l?yQ????Q????Nqu>??o?|?K?&?z?Q?7{????\Q????Qw1?O +?E#w???;'?1?????y?s?9?n????M????rVFB8?{???w????A???68bK?rMz?/?W??j??k??x?/X@~?+?j?F?:.????9+ endobj + 1037 0 obj + 1488 + endobj + 1038 0 obj + 1710 + endobj + 1039 0 obj + 517 + endobj + 1040 0 obj + 2210 + endobj + 1041 0 obj + 796 + endobj + 1042 0 obj + 1310 + endobj + 1043 0 obj + 502 + endobj + 1044 0 obj + 1609 + endobj + 1045 0 obj + 532 + endobj + 1046 0 obj + 516 + endobj + 1047 0 obj + 1621 + endobj + 1048 0 obj + 1322 + endobj + 1049 0 obj + 676 + endobj + 1050 0 obj + 1488 + endobj + 1051 0 obj + 626 + endobj + 1052 0 obj + 1732 + endobj + 1053 0 obj + 652 + endobj + 1054 0 obj + 480 + endobj + 1055 0 obj + 516 + endobj + 1056 0 obj + 2239 + endobj + 1057 0 obj + 9073 + endobj + 964 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [183.0058 515.8828 198.9291 527.5625] + /Subtype /Link + /A << /S /GoTo /D (figure.13) >> + >> endobj + 963 0 obj << + /D [961 0 R /FitH 784.0631] + >> endobj + 18 0 obj << + /D [961 0 R /FitH 758.5513] + >> endobj + 22 0 obj << + /D [961 0 R /FitH 595.8247] + >> endobj + 891 0 obj << + /D [961 0 R /FitH 167.9454] + >> endobj + 960 0 obj << + /Font << /F47 676 0 R /F15 679 0 R /F26 624 0 R /F14 634 0 R /F57 691 0 R /F49 683 0 R >> + /XObject << /Im5 959 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 1061 0 obj << + /Length 2937 + /Filter /FlateDecode + >> + stream + x??Z???? ??Bo?&?z?????m2?8m?\?????h9??x9*??}???Rtf:???],???oA? ?b#?f?????4?V???|?7'???F"??9]??????U??H??????h?Y?k?????:m????n??Nl??_????n????>???N??Gx??h????8??~?????wI# ?,?L?K?&?}NF? + ??;g????T)???*?o??q?tQ%-,?E???i????7?~??#w??l??,?%}?_???eEq?????t8?1FDi?k(?cVq C?H?yn??V?Y?U`?v{W??vS?7??)?~;l??3 6{Yk&?P?h0:??S???AU?m?/????? U?#??w?z???????E??????`6?z?Qb?'op$}???C7V???S8??6??$???}?0???o????=???cs??q>???????3??????????l??+ ??Wh~????y????d????r?????gS: :j????cJ????d???;?.Pb??'B&c???8E~1??Z?z>?`??n_elIO?Xf???????sq7?R??-????????1?+f?[????? ?x????p???S ??>b???[???NN????C ????p?+ ??C??!???????gW+ ?}]t?Zm53?Vc???C???b???]???w???C?????Ye3???I??I?"4??dN?J0????2o!ld??.vf???K*?S7???j]Z?8+ ?? + ??QpT???c??9???x + ?,??k????z*??z???????%O?b???6??????????U~]?!???|??1r?rJ'???????????r4??0O????t??oP????|j???Gt???F?y"C??Y!{??+???WB??L??????Q] ?H?GW??0??\??\????????:_?_????~???a&V?? ????? + ???l ??\q?A?X?N?%?+ endobj + 1060 0 obj << + /Type /Page + /Contents 1061 0 R + /Resources 1059 0 R + /MediaBox [0 0 595.2757 841.8898] + /Parent 890 0 R + /Annots [ 1063 0 R 1064 0 R 1065 0 R 1066 0 R 1067 0 R ] + >> endobj + 1058 0 obj << + /Type /XObject + /Subtype /Form + /FormType 1 + /PTEX.FileName (../Graphics/LLVM_Components.pdf) + /PTEX.PageNumber 1 + /PTEX.InfoDict 1068 0 R + /Matrix [1.00000000 0.00000000 0.00000000 1.00000000 0.00000000 0.00000000] + /BBox [0.00000000 0.00000000 450.00000000 302.00000000] + /Resources << + /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] + /ColorSpace << + /Cs1 1069 0 R + /Cs2 1070 0 R + >>/Font << /F1.0 1071 0 R>> + /XObject << + /Im1 1072 0 R + /Im5 1073 0 R + /Im2 1074 0 R + /Im4 1075 0 R + /Im3 1076 0 R + >>>> + /Length 1077 0 R + /Filter /FlateDecode + >> + stream + x??W?r7}?W???X???6$?U ??'^?0???za?$??????^?1W???V?u???_?[???/????????u???=??v?7???a??w_?Wv?? N????Pw?F?cM????_???i??=U???v?N + ?W(N|!????????uu?^5??T????Z?4kU?*5??4??i??M?u????=7??w????f??.??n????@????9?L.t9W&??".g??????YaS:J>?&??[l????????J;?6??\bIG?H^?.?e??5????l)z,???????|?e??7?z?????`N???????o?w~??O ???mq?\H+ ???R?LA?c?????ke@?????????*????3G?kiV?8U,?H????b?? ?a?????K?[?r0???"????0?w]?kSn??[???U<+ ??I`?@??}?4?W7????????????}?4?;??|????v??v ??????d__???q?9?<F????!???+?}??i(?????V??????F]?N?(!&??U??????n??????ag??#?r?????^uH9 + ?}+?)X"bHI??F?*? -?7??~?F??^rn\G?r?Y??IB?%|???y???1{?xR|:???'M?r?:?1 L?? ?aDsI??????f?????f,.?xi?i?????eFd?????????z?7!@0rLArU?>J???C??*?t@??C???c???2$?&]?R????????v?(?a?Gd? ??G*?%?qFu??|bV??"?Jq6EJ??3?r?zR+?m+?? U2/??x??26?%V~??I;)7{R????fm???@?? + o???d=??????gZ^l???+?nvlo???Q?????H3W?/w???????????Q'p@]?i?2?}>?Y??y?8?"??Ao??M?w??F?_???X? +  + &?q{$i?NF 33j+ endobj + 1068 0 obj + << + /Author (Jakob Praher) + /CreationDate (D:20060402212100Z) + /Creator (OmniGraffle 4.1.1) + /ModDate (D:20060402214100Z) + /Producer (Mac OS X 10.4.5 Quartz PDFContext) + /Title (LLVM_Components) + >> + endobj + 1069 0 obj + [/ICCBased 1078 0 R] + endobj + 1070 0 obj + [/ICCBased 1079 0 R] + endobj + 1071 0 obj + << + /Type /Font + /Subtype /TrueType + /BaseFont /FLTSCI#2BHelvetica + /FontDescriptor 1080 0 R + /Widths 1081 0 R + /FirstChar 32 + /LastChar 121 + /Encoding /MacRomanEncoding + >> + endobj + 1072 0 obj + << + /Length 1082 0 R + /Type /XObject + /Subtype /Image + /Width 365 + /Height 95 + /ColorSpace 1070 0 R + /SMask 1083 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 1073 0 obj + << + /Length 1084 0 R + /Type /XObject + /Subtype /Image + /Width 99 + /Height 87 + /ColorSpace 1070 0 R + /SMask 1085 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????+ endobj + 1074 0 obj + << + /Length 1086 0 R + /Type /XObject + /Subtype /Image + /Width 137 + /Height 283 + /ColorSpace 1070 0 R + /SMask 1087 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x??? + endobj + 1075 0 obj + << + /Length 1088 0 R + /Type /XObject + /Subtype /Image + /Width 101 + /Height 81 + /ColorSpace 1070 0 R + /SMask 1089 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????+ endobj + 1076 0 obj + << + /Length 1090 0 R + /Type /XObject + /Subtype /Image + /Width 179 + /Height 182 + /ColorSpace 1070 0 R + /SMask 1091 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x??? + endobj + 1077 0 obj + 1580 + endobj + 1078 0 obj + << + /Length 1092 0 R + /N 1 + /Alternate /DeviceGray + /Filter /FlateDecode + >> + stream + x??SMkQ?3V??*??t??E?0~,????i?c??A???d????$??U7nD?n@?.?pQ?FQ(?_??~?(t)?????*?????????????u?uM?Y?/ + ?L?j?;??d??T?s3??B?m??t??????? ??????|????]?HR?O?k?,px\sE?????f?!:t|????04Vj?U??0????????????a???K?#??kIzE???~??u??0?-????9?R????eL???c?? V??t????B?????r=M?????Q???qN???`????> + stream + x?}?OHQ???%B?e&R?N?W?`???o???k??????????n%B?.A?1?X?I:??b]"?(????73?????7?3????{@](m?z?y???(?;>??7P?A+?Xf$?v?lqd?}????????] ?U???????x????iO:???b??M??1?W?g?>??q?[ + ?2?M?'?"()Y'??ld4?????2??'&??Sg^???}8??&????w????,? \V:k???;?i?R;;\??u????V?????\???\?C9?u?(J?I????]????BS?s_ QP5??Fz?????G?%?t{3qW?D?0vz ?? \}\?+ ?????4?I?????x#?{z?wA??j}????????Q????=??8?m??? + ?(?o{1?c??d5?U???g??t????la??i"??\.5???????^?8tph0?k?!?~D? ?T?hd????6??????:>f??&?m?????x?A4????L?&????%???k???i??????Cq????m?&/?By#???%i??'?W??:?Xl?Err?'?=_???)?i7??????,?F|?N?????6?rm?^?? ???U?HW?????5;?????hendstream + endobj + 1080 0 obj + << + /Type /FontDescriptor + /Ascent 770 + /CapHeight 727 + /Descent -230 + /Flags 32 + /FontBBox [ -195 -444 1446 1207] + /FontName /FLTSCI#2BHelvetica + /ItalicAngle 0 + /StemV 0 + /MaxWidth 1500 + /XHeight 531 + /FontFile2 1094 0 R + >> + endobj + 1081 0 obj + [ 278 722 722 722 722 722 722 722 333 333 722 584 722 722 722 278 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 667 667 722 722 722 722 778 722 278 722 722 556 722 722 778 722 722 722 667 611 722 667 722 722 722 722 722 722 722 722 722 722 556 556 500 556 556 278 556 556 222 222 500 222 833 556 556 556 722 333 500 278 556 500 722 722 500] + endobj + 1082 0 obj + 124 + endobj + 1083 0 obj + << + /Length 1095 0 R + /Type /XObject + /Subtype /Image + /Width 365 + /Height 95 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???MK*a??g??1{S + ?I%"?@(fZ?B?6F??\U?.?M?n?? N?-1???8_?L?v?g1?`t_? <(m?wOB????$??????!I??h?D?$Ij$??%i??ct,??GJ?gY?GS???W??? k??#&3??i?? XF+q???&iF???F-???j?!yI????e?? ???[? ?:??????.????"yyM???d?,??K?T:[?,?T???-??dX?)_??Ttiv?2???_?^????@l??pQ???????U????X??3??T ?????????????S)?????U?p7?w??7???Z?;:)U???????????}?tr??Zp?#ml?i?-???i?Z{?????zA|?UK??t",?'M?7l?G?$3??rV?pK???|&?7?K:????(??q???q?Oq????}?????????????-Vn|W?;xe??ve???????2?/\???e???A??> + stream + x????k?P??s??????(*?P??A??R?@???`?)CK?N?????E??? )}k????{?v?p??|_@>??????,?????????$+ ?w??@??[?BR8"C K??Ot?,?1>h?)?%9??j*5S???? ~=? )?)e%??d??"T?|6?J(rPt??}^???????W?PUt?|?K?O???-a?8?_?????qq?hB???0jZ?4.??e?4/JJ????y??@??6[uC/?I?????d?>Y?iF??t?^????? C????????? ??T?V7o???p ?ppo???Z) ????`=!%S6Zm?a4????NFV?e?3J???R,????????|???qt?5??lL?!8!????+k0y~Y??Z??n???q????b????g???????j1?;?j1){????;T??&0? L`??&0? L`???_G?????6?????N????????/?? + ?- ?"?`?C?N??X,?(?n$????3'endstream + endobj + 1086 0 obj + 135 + endobj + 1087 0 obj + << + /Length 1097 0 R + /Type /XObject + /Subtype /Image + /Width 137 + /Height 283 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????WR??%P? /Y?I????Z??h6N?M?YYYN?i7???????B???4??^BI???6?r??????y~w?g???9?~????'V?X?b??+V?X?b??+V?????p???r?x|\y??>?T,?A?n?!a?q)Y?g???_?p??B+??H??1rE^?????U??EG??IC?!?m??L?,,???{??n??? + yL? ???/?.K9Z|??????q????};%B????I?SsKn?=kmo}??FInj???3??v?\??W]o?[?(?????FB?v+???O;T?z?Z?_?-3)?!??$????m?T???^?UM??XFj?u? |Pw?????C??e??M?F????Z??H? + NnpX???{6F???a??E????p?$g?l??!??t?]u./-!24?(F>???~T5??X?iN#=?FucC?^>?R?!-?!???i???A??nrr??N i??F32=???????W?n?H???'>??H;iT#?sS#}$?bA#?i?whrn^????3??>?????5N??3?ua~r?(F>O z-?4?) ??e????? ???Q i???`H?i?q???????Pk? K?y??????4.?_?Jv??.*??oX?hZ2L|'??rY? + ??BB??? ?9g*????????H?rZ9x?-D ?B?? ?X,??K?,?P???????y????????\^?@.?.?????bv&$g??c?#???????9i7?#???%??XY|???D???g_jf??o???i????????v0A? i??.?'OJIMS??gl]??s + ?/V>hy??5?-?eiN+?"???%OQd?????/??N?Q??z???_;i0??Y?F?V?in?0?v|??d?Xm6?7?H??Je)Y'?7?7???V?n]j??????????yu?f???q????yFZ?@???;{???6U?f?????jGFu?s??l?|????i?{???g???Ib?????M??MN?Az????a??B?X_???H?????~??LH?????R??????J?ez~aq????d2-?W-kV????b???t7?Hc:?x?-.5???????????ZYY]?.?;?J?= 7???w???n?n??Y? ?]???N+?4???? i~h?n????g?????5??6???u?/??kL???=CS???+ xk4=M26???z |???3x?5?????&?P???:???????,??'tf9]??g?G???}?3_???&?g|L@#3N??????G?? ??17?-Ia + R??[??P`?%< b??6?i=?K??i2mc?W???r???#x???? ?????eX?Ld ????D?8#C{????????J?D?lf?t?/5M????NQR{> + stream + x????k?`???4I?UQT??5??.? :ei?"?S??*?"-u?H;HA + R??????wt?????x?@^> + stream + x???MK*a??g??fL? Eeta??@C?????\?????fQ??p5 Q.????!??????x??vx????? ??ZYA?5????????0^??8n??(??.???Y?DI???K?$Q?9?/???r?(+???i?D?ij????"?y??bARZ(?? ??q= iE??#s??S???4S??6Qe3)3i?a?' ??33,/???afr?b??KT?r????FT?I> + stream + x??zy|TE?vU???????tw:?=$!$?6d?$H0,?a? ?p??@DTv? u ?H2???eD?m\qA???s??e????s:@?2s?c~??k??z????z?? ?R?D???Y?f?K? r^????y???6!?!?m????v??!?F??5}??i??X?B?(B????IS??^?F(?3?}A+d$?av#?e?tJ??y?l?O5?%?~z?]S&=u|?0H ?1?&?3?_*[?Pv6?=??4??q??{!]???w?=?K?AdBsg?m?M/???>???0?#??EG?6????kcE??O1?????C|\N.??=?R?$57???????Y???9???d?P2???GHA?cH?A?L??YP ??wF ?[?_2??F????JK?1??????]OE?ft??Cx?A?a????Q ?B??x?-4 =????h??IE?@?Qh ??A:??hY??n0z+ mC?E????xk?=?f?s?# ?3???N?????&.+ ?u??D3??6?Ut ZM??????????7?"fS???t0?????-?=v ???f?e???r?????0;?Ag{???q + H??~???r<m????'?N???x%?8????%T?m8?~ ??-F?? h[?jz4e&???v?e??l???e?% ??R??/??q????j1???N?Q)r?? M??+|???h?9J|??b?7 2& ?h?z ???:QO?T?s}???????D????X?)A%?? + ?'??r?'???n??C??FO?W??J?G?? + ?^/??Sai-?Dq??"Z???Y?\???F,#]4??????Z kTDm?????W.?Q??IS???*??^o#?A???##}?('zP9?7??XMnc?&4D?I?Q?,?? G????y?9????X???Q?????Y ?#2???LN1????T"???I?U???]=&?Zw?R??g???,??R3J?W?-*?Z]Q|?EY?PF???????????? + 2?????+4%%8P??&??X????Sk????sb#)?gK???&k(-????m?6p???^?E?}??????"ql9??Ft?[?l???a???0Fa???F?s ?>?v@??z?s?r?D?????_?/?_x?9X?????????LfEn???V\???W??0????P?d?He??b?6I?9 ? *cBSr?2%???ml.?1x?QkJ4%?p???5?&??????V??? + ?X??z?-X??v?A????? + ?????=?u??v??~?p??qU*sN8sx?v? ?? ??????O??{?$N?V??~??y?._???1??????'? ???{???????????????f?]|IxS8x&?>?+ }T??g??&?N???Yo??|?8???? r%???-?OQ??k?(r r?-gb???d?l$D&????@?@??? + L,R/H???[?f?iT??w%Sr????d9E;,????!??e????$?S?????????r?~m ?gYsr??????? ??N ?`,?:sQf_^?I?jS3?n??+ 8?????????+#"???o?c????}??????8?E"??X?aMB??}?????]??Ukf??4\?S?({.?"sj???0? ,&??i~??cxG0????????tsAg??8?%\I??????Rl??!????`??a???`2???:?=?w?? ,???V\?????????-)pjA?1a?$y??[??c+ ???f/Lx???5ulJ??q(V?$ [??? ?t?7 ??&Bk?J??618Z??mA??????????;kr?X?3??\???b??????#???~?K??hJ3? + _?w??7u?1>?f??F?V9????|?%c??Qic_?Z]??o?#???+?2_????+7?)?)??3???-&gJ?q&?????&??????8k??????*WrZu0?dl??L.h???x?'???T??>?(Q????zr??J?U"?P sL?n J:?^c?????lO r??)3s?0?X????????[@?T?P?????'-?v????4?*$?p^N'??????QNl??={?\??\??yd?C?d?q7??Yx??W?o??O??H???.???;o=s?3??l*?*~4????m\&?W?????????????j#a????N2?T?Nn? G????:N??v?????j?^?N_??`S? ???`)0??l]aA^.?'q]??dWDx??R??'??B?!?U?s??2??L?Ae?23B?-[????kV??r??H?????i??)???O???K????&?s(??V???$?R?w&p?;??|?AGZE???????????i?Hg?Z ?b0?wb^??????=QT?.}#? + 6/~A???q?s?u??????7? o?e?|?W\?}????_UK????????p???X?[~}d??e$C??e+ ???jxC%lC? ` + ??(+???Nq?]??D???I\&t???U(??G?9?S?If??6'? ??j?m?? + ??/?9}V9??~???T?b?????B???!?q?-$+ ?>}N??A9?g?N??)???j$?$?]4Zm??Sk??W??Lz??Z??b? + br?2??.c?W????????r@/4ugk?D9za?OB??Vh????????e??vot??p?0|???/??2???? ?O + 3? ???????KoB?0?mSbOdI?K??+?? + ??_.???^?N?/?O+??6?E>C??-??? ??N?\?K?????jJ?eF?b?a?0??hL)1%?X^??8???1?V??O??????J?J?|? ?O?f??f.jR2? ?BJ??Y? ???G&???~0??a??l?+?????y1_??iJ??aK?M\?i??0"??wR??X?9q5G?zs???g'yvK????o???G=???g?pX?@?C??|????5??K+ ?I?F x?x?=G??y,E8"?|?^P8 2?=X:?????!WV?&7K? S ?^?nLgM???0????S?^ ?>??U?]y??o????H*?i/r?????p2)f??9???+o?C?????\j?????#OeN?m??cZ??~???m?n??g???;M???x=??@Y3??B8???k?*?p0?j???p(?e????g?????]h??N??????2???W@:???s/:???M? ??T;?$???3s???}???zx???@??A?E!W?+????^?_U???T???[4D?????Tt'????M??3!???j?vL?x????:?> + >> endobj + 1064 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [137.3264 568.3403 153.2497 580.0199] + /Subtype /Link + /A << /S /GoTo /D (figure.13) >> + >> endobj + 1065 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [150.0096 247.7103 188.362 257.0664] + /Subtype /Link + /A << /S /GoTo /D (cite.llvm:www) >> + >> endobj + 1066 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [311.7789 247.7103 339.6805 257.0664] + /Subtype /Link + /A << /S /GoTo /D (cite.llvm:cgo04) >> + >> endobj + 1067 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [446.0096 232.0448 461.9329 243.7245] + /Subtype /Link + /A << /S /GoTo /D (figure.14) >> + >> endobj + 1062 0 obj << + /D [1060 0 R /FitH 784.0631] + >> endobj + 892 0 obj << + /D [1060 0 R /FitH 308.0278] + >> endobj + 1059 0 obj << + /Font << /F47 676 0 R /F15 679 0 R /F49 683 0 R /F57 691 0 R /F14 634 0 R >> + /XObject << /Im6 1058 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 1106 0 obj << + /Length 2027 + /Filter /FlateDecode + >> + stream + x???r?6???????P?E??9m?q?=4????@????????~}???KJ;?DX?.v??? + ??LF???2WQ?Zf????v??v%=P??????6??U??????j???+ l?$ ????D?*?rQku???J????+ ?J dD)QU?( C?r?G^??&??w?H???1? + ?%^????*w?9???+ Z????0????????D?CL????N`??????&??/D???=?s???kq???"???????.8?%???1&J??%?G Cq??Zll?/????????g???{? + AR?.?????C?C?{A?!?4? ?h?.g?x?~???R' AC???????X@;l]?0c?a??_igX????D[~ =/L??????W???a??/????U?=?* $??$?y???-??`???;??? ?S-X?q???+ endobj + 1105 0 obj << + /Type /Page + /Contents 1106 0 R + /Resources 1104 0 R + /MediaBox [0 0 595.2757 841.8898] + /Parent 1110 0 R + /Annots [ 1108 0 R 1109 0 R ] + >> endobj + 1103 0 obj << + /Type /XObject + /Subtype /Form + /FormType 1 + /PTEX.FileName (../Graphics/LLVM_ByteCodeModel.pdf) + /PTEX.PageNumber 1 + /PTEX.InfoDict 1111 0 R + /Matrix [1.00000000 0.00000000 0.00000000 1.00000000 0.00000000 0.00000000] + /BBox [0.00000000 0.00000000 269.00000000 372.00000000] + /Resources << + /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] + /ColorSpace << + /Cs1 1112 0 R + /Cs2 1113 0 R + >>/Font << /F1.0 1114 0 R>> + /XObject << + /Im3 1115 0 R + /Im8 1116 0 R + /Im2 1117 0 R + /Im7 1118 0 R + /Im4 1119 0 R + /Im1 1120 0 R + /Im9 1121 0 R + /Im6 1122 0 R + /Im5 1123 0 R + >>>> + /Length 1124 0 R + /Filter /FlateDecode + >> + stream + x??YKs???W?h?B?1+ z?U????F?h????#?e???w???lw?z??8?????l2?$4???? :???~?????w???????????/?????aK???JS?4?5?xC ?6?;?Jw?? ???????>p?n???&?&??????^w???;??0???^n???????)z?N?RgB!)?Q5??jj?f+ \V? ? D??.?8??H+?'q?}l????!????K???d?m??Ei?5???I$?2?(?????*?}????%f?>???.????5n,'?Z@?"IA?l???b?#F??N?????0#`?????}?b?S??'?Yhs#1.r?C??u?(?@??Vo)6UM? ??^/ ????$??'?? ??}???"SV?V+X?6?D???????W???k?A1?z??r?j?5?yr??[_ ?nw??:?10?%k{?/?p?aX?0_???HTZL????W? + ?UT`M?n????y?? ?>*0???Tm?/}??A?? E?16_%?S??e????L??????C?4?^1??`?????h???+ ?(?; nR?L0?N?RX?@??x?NX???@?x?JYZ???sio??J?_A??????? + 2?s????0;??&_??`CgolA???+?E????^??????T+ endobj + 1111 0 obj + << + /Author (Jakob Praher) + /CreationDate (D:20060403192600Z) + /Creator (OmniGraffle 4.1.1) + /ModDate (D:20060403201900Z) + /Producer (Mac OS X 10.4.5 Quartz PDFContext) + /Title (LLVM_BytecodeModel.graffle) + >> + endobj + 1112 0 obj + [/ICCBased 1125 0 R] + endobj + 1113 0 obj + [/ICCBased 1126 0 R] + endobj + 1114 0 obj + << + /Type /Font + /Subtype /TrueType + /BaseFont /NTHPLS#2BHelvetica + /FontDescriptor 1127 0 R + /Widths 1128 0 R + /FirstChar 32 + /LastChar 121 + /Encoding /MacRomanEncoding + >> + endobj + 1115 0 obj + << + /Length 1129 0 R + /Type /XObject + /Subtype /Image + /Width 250 + /Height 276 + /ColorSpace 1113 0 R + /SMask 1130 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 1116 0 obj + << + /Length 1131 0 R + /Type /XObject + /Subtype /Image + /Width 226 + /Height 37 + /ColorSpace 1113 0 R + /SMask 1132 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 1117 0 obj + << + /Length 1133 0 R + /Type /XObject + /Subtype /Image + /Width 250 + /Height 58 + /ColorSpace 1113 0 R + /SMask 1134 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 1118 0 obj + << + /Length 1135 0 R + /Type /XObject + /Subtype /Image + /Width 226 + /Height 63 + /ColorSpace 1113 0 R + /SMask 1136 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 1119 0 obj + << + /Length 1137 0 R + /Type /XObject + /Subtype /Image + /Width 226 + /Height 101 + /ColorSpace 1113 0 R + /SMask 1138 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 1120 0 obj + << + /Length 1139 0 R + /Type /XObject + /Subtype /Image + /Width 250 + /Height 353 + /ColorSpace 1113 0 R + /SMask 1140 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????+ j+ endobj + 1121 0 obj + << + /Length 1141 0 R + /Type /XObject + /Subtype /Image + /Width 226 + /Height 37 + /ColorSpace 1113 0 R + /SMask 1142 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 1122 0 obj + << + /Length 1143 0 R + /Type /XObject + /Subtype /Image + /Width 75 + /Height 39 + /ColorSpace 1113 0 R + /SMask 1144 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???+ + endobj + 1123 0 obj + << + /Length 1145 0 R + /Type /XObject + /Subtype /Image + /Width 75 + /Height 75 + /ColorSpace 1113 0 R + /SMask 1146 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 1124 0 obj + 2072 + endobj + 1125 0 obj + << + /Length 1147 0 R + /N 1 + /Alternate /DeviceGray + /Filter /FlateDecode + >> + stream + x??SMkQ?3V??*??t??E?0~,????i?c??A???d????$??U7nD?n@?.?pQ?FQ(?_??~?(t)?????*?????????????u?uM?Y?/ + ?L?j?;??d??T?s3??B?m??t??????? ??????|????]?HR?O?k?,px\sE?????f?!:t|????04Vj?U??0????????????a???K?#??kIzE???~??u??0?-????9?R????eL???c?? V??t????B?????r=M?????Q???qN???`????> + stream + x?}?OHQ???%B?e&R?N?W?`???o???k??????????n%B?.A?1?X?I:??b]"?(????73?????7?3????{@](m?z?y???(?;>??7P?A+?Xf$?v?lqd?}????????] ?U???????x????iO:???b??M??1?W?g?>??q?[ + ?2?M?'?"()Y'??ld4?????2??'&??Sg^???}8??&????w????,? \V:k???;?i?R;;\??u????V?????\???\?C9?u?(J?I????]????BS?s_ QP5??Fz?????G?%?t{3qW?D?0vz ?? \}\?+ ?????4?I?????x#?{z?wA??j}????????Q????=??8?m??? + ?(?o{1?c??d5?U???g??t????la??i"??\.5???????^?8tph0?k?!?~D? ?T?hd????6??????:>f??&?m?????x?A4????L?&????%???k???i??????Cq????m?&/?By#???%i??'?W??:?Xl?Err?'?=_???)?i7??????,?F|?N?????6?rm?^?? ???U?HW?????5;?????hendstream + endobj + 1127 0 obj + << + /Type /FontDescriptor + /Ascent 770 + /CapHeight 727 + /Descent -230 + /Flags 32 + /FontBBox [ -195 -444 1446 1207] + /FontName /NTHPLS#2BHelvetica + /ItalicAngle 0 + /StemV 0 + /MaxWidth 1500 + /XHeight 531 + /FontFile2 1149 0 R + >> + endobj + 1128 0 obj + [ 278 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 556 556 556 556 722 722 722 722 722 722 722 722 722 722 722 722 722 667 722 722 722 611 778 722 278 722 722 556 833 722 722 722 722 722 722 722 722 667 722 722 722 722 722 722 722 722 722 722 556 556 500 556 556 722 722 722 222 722 722 222 722 556 556 722 722 333 500 278 556 722 722 722 500] + endobj + 1129 0 obj + 223 + endobj + 1130 0 obj + << + /Length 1150 0 R + /Type /XObject + /Subtype /Image + /Width 250 + /Height 276 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???_K?p????k[[c?[(*????????7^ D?j7?^??H????Dx??!QR Dq???????#???????????8?{ ?}?~P3 ?q??Uj[?8?]\?7GxA?$y??dI?p?} KxQV6?AM?7?L???C?E????\??????x???D??EBz@???kr"??6????d??,?IYI?k?,???3/?z??2?B?\???J?X?e,3???-Gg??h??t??W???}*k???^)???j?H?r??a3?S????Q????G?N?????p@???\Pt??W?N???v{T?=u;-?^?[???r'?!3[?????{? *x???v?R? ?"???|d?I????{?] G7T6^y?n?Y?%#?5??K??U?9??w=?L??l:_{??S+X???-7RE???_?o?gOT6??_????2???????o8yx??S???a2?NZ?r&??_r=??4?g??t6y????l:???lB_????Ms{w??wqs????????^???n.z???????*????A9??C9??C9??C9??C9??C9??C9??C9??C9??C9??C9??C9??C9??C9??C9??C9??C9??C9??C9??C9??C9??C9??C9??C9??C9??C9??C9??C9??C9??C9??C9??C9??C9??C9??C9??C9??C9??C9??C9??C9??C9??C9??C9??C9??C9??C9??C9??C9??C9??C9??C9??C9??C9??C9??C9??C9??C9??CN???F??Or??D??h? F??????^???hp?nT? ]&??\?g????7?<> + stream + x????j?@???d???!UQT??M,*Js???\ZH ??Z???) ?R??^?"??? )?j?v??,?????Lf?9:??"?_?}f??AP + p?fN!???P?y.8eh?!qHPL???B2%B-??d(b??????Y.*?i)#+9?)rFJ?B?ci?YD?)?????/?*????R1/Kb?g)?/"H???e ????7?Pk?Z??\???9??B??Q1{?j-???jC???2Z?z??AG??? RA? ?c?v{P???????$? ?????lDT??a???3Bm??{?eheE??$?????I ???-??wG?)???G??6[j> ??}!JH????:O??|??l??t;F?(%B??P???K??0y~Y???|y?> + stream + x????j?@+ ?????v??,}?ef?o??@?/GG8?s????/?j?p?$+ ?"r4?@Y,*GB??????}???1(+q5???P??j\????????$? + RXQS?\?X*CY???eR???"??N+ ???z}{0?????Y-?(hJ@`??W?{B???hZw??h? ?y????O???+([>?M?????O?9'FS?j???^^?([???F?u?ZLEE?[.??R?u;????-????????U+i1i/'\n??.????t??l?? ?}?Y-??^?^N+~???I?eX??X??X??X??X??X??X??X??X?????/??~uF????%to??EFv9??Z????0t??????]?"??Fw????(???C?OpNTendstream + endobj + 1135 0 obj + 64 + endobj + 1136 0 obj + << + /Length 1153 0 R + /Type /XObject + /Subtype /Image + /Width 226 + /Height 63 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x?????)a?3?????mI??????? aohs???v?J\??,[n??j;??P?)????v??8????s??????g??}??9:ba?_p?e=????\?0?+ -a?:?^??$I + H???>??i5Z?X??vK??(-h???T ?Dc?K ????p(@y]????? + ?"??`?P?h??* ???.??????5+????>?????N(w?"????fJ??`2_???u\?'?N?????3?ho?w??l??? W??6v??l?t??p0??r?c??A^^??^&?%??/O??K?aPo>???Njc?:_??f9?RN??5d YC??5d YC??5d Y??o???!????M3 ?~_??;??-??s?eO?}?????[??y?.??3'?O|??????>?g'???N??K'?????&2?_z+ endobj + 1137 0 obj + 89 + endobj + 1138 0 obj + << + /Length 1154 0 R + /Type /XObject + /Subtype /Image + /Width 226 + /Height 101 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????K?p???[???n??LG"*J^< D??K?!?????E?A?!Q)"??_?o_???K?/??z?>???_kk?A?~E?'?E?i?a?u?[ h????????A?$>Qx?e???.????(my???l???~??$?,??&.?? ??@(?Fc???j$P|??-?_O?p?G?Z\O???D?N%???e??1??Y???5=?????2????\&?ka?#???)????N2[??????kFu??M??e?g?B7+??Zr?b4???? ??????Q?KjA????BNRT=[????u??]??j7?Z%??????h????lY????$????Z-?(????????? ?3?F?????[??? ???d?!?? + ???????}3O??n2????Y????-Ty???]????D7}?]??C#?P???Mk?S{0~|?????q8?^??????? ?m??|{?=9(?j????O?w??B!?B!?B!?B!?B!?B!?B!?B!?B!?B!?B!?B!?B!???!t????oHW????????w????w1??m??4??r?N?????????{??M\???U?/E??{7endstream + endobj + 1139 0 obj + 279 + endobj + 1140 0 obj + << + /Length 1155 0 R + /Type /XObject + /Subtype /Image + /Width 250 + /Height 353 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????K*}?????I?? ?DB| D0T???Dr??????,????"p?m????D????s:??Y??u??? ????-d?O?_??U?dY^?w?$Y?/??[?m?]U?5a?T???d?w???*???c???????????Zwhv?l???????}?`(1?,>??P?w???eEsz?!#?'S?B?J?cQ#??:5E?9?E??N}??%??\??+d?B.?N??M?????????nn%2??r?Z??Z?R??g[?^?]^??6??7;?J?qx?:???a?^)?$ ?[?Yr???b?R??l?????uN?v?Q-eb!??|??%??g???F????? !?{]????S??i?>_???? + D??z?> + stream + x????j?@???d???!UQT??M,*Js???\ZH ??Z???) ?R??^?"??? )?j?v??,?????Lf?9:??"?_?}f??AP + p?fN!???P?y.8eh?!qHPL???B2%B-??d(b??????Y.*?i)#+9?)rFJ?B?ci?YD?)?????/?*????R1/Kb?g)?/"H???e ????7?Pk?Z??\???9??B??Q1{?j-???jC???2Z?z??AG??? RA? ?c?v{P???????$? ?????lDT??a???3Bm??{?eheE??$?????I ???-??wG?)???G??6[j> ??}!JH????:O??|??l??t;F?(%B??P???K??0y~Y???|y?> + stream + x???1k?P?k??$M ???? Eh"?`QQ??!D?,-??????J??HK?A]?"?RA???????|???p????|?8?{?9???????g?7 ? + ??G?H2?7l????&p?????c7?l2?;;?)???????l?l:~p;m??Wbf??R??????K8O????snR?^? + q?d?W?p???Z??zy??+?,?q??R? ?\k??G???u??j1?o????w*???3?z?;??????; o??r>t[?JFz??T?p???#+??B??? + a?????&?y?r?"??7?=?p;??^2(?+?W?? ?+ endobj + 1145 0 obj + 39 + endobj + 1146 0 obj + << + /Length 1158 0 R + /Type /XObject + /Subtype /Image + /Width 75 + /Height 75 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????kq??s?1o?Kd?xIB?RtN+\???Fa?6M? ???r???z?P?k??k????K??iO?\?~>??)??~???h/?73?[m??+ x?Q-r?ok?K????~? G??L6??l&}???}?v=&?-??C??Z ?i"?+????T??B.?8?V?E?7?+? O8~?/Uk???f?Z?????<&?2_U _????h*_?5[???f:?V?V???????Y??W`?Bgs???R???????????n??V?&Cn?N!???w??z?wx#??j?? G?0?:?j??-Ub????2W7????y??????{?4??o?21????*?Di??l?????????ed> + stream + x??zy|??????YgKf?2??'?????????!"+ L??Q??D"???(n??m??2??R??j?????V??o??????3???????_??O?????{???{???+ ??!xv?O?/?r8?4?#?{??\???r???fo???s!_?s??Zj???????K?ufs??+ ??,#????9???5EAP5Pu?????}?m???0Y?tf3??+?;?9???&??6??`??}?=?>v??W?Uq??U\????,?????7???? ??B?0C?A???9?:??KNK???"??Z?+ ???{y??rY!?7&??????? ?2o?c,??\??;??!?a?Be[&g]e??? ???? ?????a?:????Zg???Kk?ut???N????6????????|?????}c???s??????* ??????z??????T?oo?x?g????m???9\?4?U + {??#?9MP?j=H????o?@??(?B???8?#???Z??9??%a-/?[? ???????O[????.Eeb?J?]?m??`K+?W??????????)?N???????+t?????? DqRAN???:?5?W????P}O?j ?@????????b?a?}??"??0 +??UZp \??????I???)??K?#??#4?eD4B?f)C}>)E?\?IHV???$T? ???F?t"????R??????)? ??oG?i??????p?%W7???_????k?EO?>?~/????z??NF????p?%O?n??OD? ??? ??? l??|?oj?s?z?ke- 8?T?aH?=??R????-w_??>u?B?,q?c??G???up?F?YW?C\?+ .???X'? ?h?3M?????0wM??\~ @??l?=??c?Qh.?a?? ? %??t?)%??PR??k 2=??.???z2?73AZ?P4??z?z A?2??~L/?#c?@R?_??? ??i? `?+ |?aB????????2?????????%?0y?Hs?]36?????%tE???????m?}????M???"W?<:?{???M?D?q??^{G[~0??c???F?F !*(??T?U1???"??85???Z!sI???8??,?J?A?:x r? 3???J???????? G?z?0??|_F???7CU)?md3e????F????r!1??X? + ?F+M?t?mizC??h?S?????T?????#?)?g?B?B?79???TG??B???W&K? ??|?s?Zj??U?.??|\*9)h]~o???)?"%?x`?e8V????#?b&8??L7Ypx??f5???/ z?T?n?J? ?'?70?????v~P?r??~5???{?pLl??W??|?/b?^|???$O?>?uc???;b???????#?O????n????4YMV??U???????$?RJYB??? + ~?s?????V?{L??1?Op=????T?@???G?H??S???SQ?w,??^{v*??V?;???????$?y????l?+ I????'??????????@{?U5??????????3m?=??s?/!??9??kZfd??|Wc?`t?+?a6k?_???????D??v?7???^???P?a??]?&&?R????:????????????L08L????1U???KC.?S??U?lp~???W?!iA????V?6'<)z??cJ???MG??f?{?;?????bv??vf??ND????&0???$????m=|X?L??c?Pg?????O????|?????YK?v=Z:???Sp:A??r?H?=??t7?? ;%D???(j?z"?X>??b???^>???I[d??CK???9?.???^??r??e???yt????????t???U???Bb?? + ??Jh????(????O???=???????.?i????)"?? Z?Q? &;STA???!*?f?????, ?? hL*?, ??5N?5?Y+ J????b??eEvZZ"?p2z?~?E%?.??"G?????R>??e?h?????h??9BV?[???F?B?????X%?]H1?P?*???lV:??L&??a???[?> + >> endobj + 1109 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [224.0761 191.4133 231.5232 203.0929] + /Subtype /Link + /A << /S /GoTo /D (chapter.380) >> + >> endobj + 1107 0 obj << + /D [1105 0 R /FitH 784.0631] + >> endobj + 26 0 obj << + /D [1105 0 R /FitH 728.7379] + >> endobj + 893 0 obj << + /D [1105 0 R /FitH 244.8121] + >> endobj + 1104 0 obj << + /Font << /F47 676 0 R /F15 679 0 R /F26 624 0 R /F14 634 0 R /F57 691 0 R >> + /XObject << /Im7 1103 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 1163 0 obj << + /Length 2682 + /Filter /FlateDecode + >> + stream + x??ZKs7??W?-???s+ ???'??f?VW??E??????q????G??+ /? ?6g?;???i????????0????V????,??????e?KMJ=?{?????G?????E?1d??? !D??_??S??-??K\?????H??9 ??"mbI?^qJ? =?~Y???qt?? ?q@??~????????3????????Hm0k;e23????P??cR??4S?cS)?:+?????K?????????9?>??!? ;??D7???r?f&b???{q????1????p???+ ?A???Nj1s?R????#?????#???????b?q?0?????p|???7I??>??wB????C?jk?tfF??jN?Sv????7????e?r"? + ??k???S??@5?jw?k???|?1??9?%?j?K??P???g?z??????YHt?g???|&b???R?????c???/?r???+????xV?~St(?2???M?.H??B>r??Z ?A???zF??l???? + *Gk?%CX?B????MO??d? ??]??`"e|,????)7 + m???71[??t??????h?;?q???Hr? + ?j"hz????????I9?Xfd??1ue?0g/????}?0>n?$iY?m??i`???????/J?u?/H???.`?????G?I_?????m????u??>}?74????F&?????(?7u|?T???0Sv???\??'??b?tjF~????a????t~t$?**&Co/W?cK?#?-???I??L???}?D7?4?)?!?????R??+ 6????4??,?]&C??)??/`?D??t?G.;?2x???c??VQ?? ?z?~1?*?%7f?a&?u?Bg?)?0)b?aq????a???S?C??B2?????;?????G?EH???MC??????????v????w???????z????pBlOj???nad?????(f_?'???]?0&?????5?.?|OYY??R: ?g+ endobj + 1162 0 obj << + /Type /Page + /Contents 1163 0 R + /Resources 1161 0 R + /MediaBox [0 0 595.2757 841.8898] + /Parent 1110 0 R + /Annots [ 1165 0 R 1166 0 R 1167 0 R 1168 0 R 1169 0 R ] + >> endobj + 1160 0 obj << + /Type /XObject + /Subtype /Form + /FormType 1 + /PTEX.FileName (../Graphics/Change_Details.pdf) + /PTEX.PageNumber 1 + /PTEX.InfoDict 1170 0 R + /Matrix [1.00000000 0.00000000 0.00000000 1.00000000 0.00000000 0.00000000] + /BBox [0.00000000 0.00000000 465.00000000 224.00000000] + /Resources << + /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] + /ColorSpace << + /Cs1 1171 0 R + /Cs2 1172 0 R + >>/Font << /F1.0 1173 0 R/F2.0 1174 0 R>> + /XObject << + /Im3 1175 0 R + /Im8 1176 0 R + /Im7 1177 0 R + /Im4 1178 0 R + /Im5 1179 0 R + /Im6 1180 0 R + /Im1 1181 0 R + /Im2 1182 0 R + >>>> + /Length 1183 0 R + /Filter /FlateDecode + >> + stream + x??X?n?}?W?1??????Jl????we> + endobj + 1171 0 obj + [/ICCBased 1184 0 R] + endobj + 1172 0 obj + [/ICCBased 1185 0 R] + endobj + 1173 0 obj + << + /Type /Font + /Subtype /TrueType + /BaseFont /TEJAWF#2BHelvetica + /FontDescriptor 1186 0 R + /Widths 1187 0 R + /FirstChar 32 + /LastChar 121 + /Encoding /MacRomanEncoding + >> + endobj + 1174 0 obj + << + /Type /Font + /Subtype /TrueType + /BaseFont /LYBGPQ#2BLucidaSans-Typewriter + /FontDescriptor 1188 0 R + /Widths 1189 0 R + /FirstChar 32 + /LastChar 125 + /Encoding /MacRomanEncoding + >> + endobj + 1175 0 obj + << + /Length 1190 0 R + /Type /XObject + /Subtype /Image + /Width 224 + /Height 137 + /ColorSpace 1172 0 R + /SMask 1191 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x??? + endobj + 1176 0 obj + << + /Length 1192 0 R + /Type /XObject + /Subtype /Image + /Width 39 + /Height 35 + /ColorSpace 1172 0 R + /SMask 1193 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x??? + endobj + 1177 0 obj + << + /Length 1194 0 R + /Type /XObject + /Subtype /Image + /Width 39 + /Height 35 + /ColorSpace 1172 0 R + /SMask 1195 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x??? + endobj + 1178 0 obj + << + /Length 1196 0 R + /Type /XObject + /Subtype /Image + /Width 233 + /Height 50 + /ColorSpace 1172 0 R + /SMask 1197 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 1179 0 obj + << + /Length 1198 0 R + /Type /XObject + /Subtype /Image + /Width 118 + /Height 105 + /ColorSpace 1172 0 R + /SMask 1199 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 1180 0 obj + << + /Length 1200 0 R + /Type /XObject + /Subtype /Image + /Width 118 + /Height 105 + /ColorSpace 1172 0 R + /SMask 1201 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 1181 0 obj + << + /Length 1202 0 R + /Type /XObject + /Subtype /Image + /Width 136 + /Height 162 + /ColorSpace 1172 0 R + /SMask 1203 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 1182 0 obj + << + /Length 1204 0 R + /Type /XObject + /Subtype /Image + /Width 94 + /Height 85 + /ColorSpace 1172 0 R + /SMask 1205 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???+ endobj + 1183 0 obj + 2251 + endobj + 1184 0 obj + << + /Length 1206 0 R + /N 1 + /Alternate /DeviceGray + /Filter /FlateDecode + >> + stream + x??SMkQ?3V??*??t??E?0~,????i?c??A???d????$??U7nD?n@?.?pQ?FQ(?_??~?(t)?????*?????????????u?uM?Y?/ + ?L?j?;??d??T?s3??B?m??t??????? ??????|????]?HR?O?k?,px\sE?????f?!:t|????04Vj?U??0????????????a???K?#??kIzE???~??u??0?-????9?R????eL???c?? V??t????B?????r=M?????Q???qN???`????> + stream + x?}?OHQ???%B?e&R?N?W?`???o???k??????????n%B?.A?1?X?I:??b]"?(????73?????7?3????{@](m?z?y???(?;>??7P?A+?Xf$?v?lqd?}????????] ?U???????x????iO:???b??M??1?W?g?>??q?[ + ?2?M?'?"()Y'??ld4?????2??'&??Sg^???}8??&????w????,? \V:k???;?i?R;;\??u????V?????\???\?C9?u?(J?I????]????BS?s_ QP5??Fz?????G?%?t{3qW?D?0vz ?? \}\?+ ?????4?I?????x#?{z?wA??j}????????Q????=??8?m??? + ?(?o{1?c??d5?U???g??t????la??i"??\.5???????^?8tph0?k?!?~D? ?T?hd????6??????:>f??&?m?????x?A4????L?&????%???k???i??????Cq????m?&/?By#???%i??'?W??:?Xl?Err?'?=_???)?i7??????,?F|?N?????6?rm?^?? ???U?HW?????5;?????hendstream + endobj + 1186 0 obj + << + /Type /FontDescriptor + /Ascent 770 + /CapHeight 727 + /Descent -230 + /Flags 32 + /FontBBox [ -195 -444 1446 1207] + /FontName /TEJAWF#2BHelvetica + /ItalicAngle 0 + /StemV 0 + /MaxWidth 1500 + /XHeight 531 + /FontFile2 1208 0 R + >> + endobj + 1187 0 obj + [ 278 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 667 722 722 722 722 722 722 278 722 722 556 833 722 722 667 722 722 667 722 722 667 722 722 722 722 722 722 722 722 722 722 556 722 500 556 556 278 556 556 222 722 500 222 833 556 556 556 722 333 500 278 556 722 722 722 500] + endobj + 1188 0 obj + << + /Type /FontDescriptor + /Ascent 964 + /CapHeight 732 + /Descent -211 + /Flags 33 + /FontBBox [ -1 -206 625 928] + /FontName /LYBGPQ#2BLucidaSans-Typewriter + /ItalicAngle 0 + /StemV 0 + /MaxWidth 750 + /XHeight 536 + /FontFile2 1209 0 R + >> + endobj + 1189 0 obj + [ 603 750 750 750 750 750 750 750 750 750 750 750 750 750 603 603 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 603 603 603 603 603 750 603 603 603 750 750 750 750 603 603 603 750 603 750 603 750 750 750 750 603 750 603 750 603] + endobj + 1190 0 obj + 112 + endobj + 1191 0 obj + << + /Length 1210 0 R + /Type /XObject + /Subtype /Image + /Width 224 + /Height 137 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????j?`?qM ??X?."???J?tiA?????I??o@?lV?[J??Q?&xk?????36???y. ????"??XR?d?????dIL?C'HJ&W(???^?X?eI8??,?????Z=??]_Vu-+??y?t??h????9??L????nz>???;?*?Nh???=??l{:???N???J_?S?.Z????? ???Q????? w?4?ZZz??????,?]?A??&??|Q~????Xw?J?}??HY????W~????/?_=[???}??$????Y??_?.|Y9???1??(????G?6T?????3?@?\?=t?AH?kg????????5?CB???[]?p???????}???_???U??|J?v?]?|?bz_+)?wV7m?o ?l?~?}*Y??}e????7?-7??? ??>???>???>???>???>???>???>???>???>???>???>???>???>???>???>???>???>???>???>???>???>?~?G?}Z?? S??????g???>?>??o1!??x??[P??|?e?D?2 ??t ?gH?G??4?;=E?w?z???????%A&?s??j:????A_m{?2?>???!?>%?????r??endstream + endobj + 1192 0 obj + 26 + endobj + 1193 0 obj + << + /Length 1211 0 R + /Type /XObject + /Subtype /Image + /Width 39 + /Height 35 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????k?@?k??$?lH??(*I?"4 + "X?V???@=??BZ?k8?$?e?v?E9????*?U??jU???s???,?`??, Dpj?0???a??l6??il?p$+ ??cx)??E?n???w???.?n?m?f1???|????h"k???????????w?:u#??????q-_?[m?z0z??????n??? + +LI?}?{9?|?L&/??????o?? + ????,?????^?????????;VIWe??!U??????=?Mg?????????????????;%?7?)??tC??p{ ?@?,??????_???5?lendstream + endobj + 1194 0 obj + 26 + endobj + 1195 0 obj + << + /Length 1212 0 R + /Type /XObject + /Subtype /Image + /Width 39 + /Height 35 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????K?@?m2cg ?mFZ??8H!??B)T???K?P?)?hz?A??COE?`?EDQ + ?wv?????a?;????y??????K??F??B8?+ ??? #$??!??????pT%d~?5???$@~?R"?#$?Hi?? ??J?HDF???4?"V??F?F??--?????Z\U??q@@ + IR??K?????J??7 ?$ + ??????&???z?vj5???? ???*Kp????iv?????vcw?????mk9K?,?cL??f,????~??n??M?u???Y??????h?l? ?? ?ON??N?o?v9Gc?~??3?D:o?=?08?^^]]v??C??[?t"<????b?m???^??????;ZM?Z4RQ4?i????wN{7?O//O?7????i?2??U??8?^???^_??VL???uc|c?l??6???n??1n/c???S???????5?+ endobj + 1196 0 obj + 57 + endobj + 1197 0 obj + << + /Length 1213 0 R + /Type /XObject + /Subtype /Image + /Width 233 + /Height 50 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????K?p??s??--??S#?)? ?b#????%|??TQ ? ??i?? K?+?1???_?KKo??c?w???|8_?;?s??_?? ??->w? + #???n?V??_M?A????1?!p???QDw??M+b?p?????????z??q'??tU?;O????f?@0 ?????&}???P?oS?9?n?E??3???(?p?F??Y????<:?+?pz???pt?_^A=??e~)???>9d??XVk??v:Z?^S??E????v??.?? j~i-??/???m??j????V?VK?????<5????????4?o????kZ????O???j??{? ~a???7QY????~??????}????)?r???D?4????^4????>?_??G??#?f??4?_ai?P??XA????F???U|/??V?Z?gd? ???h??B?R??>?N_T??? ? ??>??S???:?q??N??????E??????)p!?????F???]??lz????5????i.????EMR~WQ?m????y??? ?}x3???YZ)?c? ??;??kw???;???6?H?u?1??)?n?d???y????gY?4?7?Y?2?????0+ endobj + 1198 0 obj + 59 + endobj + 1199 0 obj + << + /Length 1214 0 R + /Type /XObject + /Subtype /Image + /Width 118 + /Height 105 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????K"a+ U?B?P?*T? + U?B?P?*T? + U?B?_R???J?w?????[?6??m?????Kx?{ M?!?v0?>g3??$>v??|???h?????u????????nM???F{Dm???L???j??j+??.???;?p?endstream + endobj + 1200 0 obj + 59 + endobj + 1201 0 obj + << + /Length 1215 0 R + /Type /XObject + /Subtype /Image + /Width 118 + /Height 105 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????K"a+ U?B?P?*T? + U?B?P?*T? + U?B?_R???J?w?????[?6??m?????Kx?{ M?!?v0?>g3??$>v??|???h?????u????????nM???F{Dm???L???j??j+??.???;?p?endstream + endobj + 1202 0 obj + 87 + endobj + 1203 0 obj + << + /Length 1216 0 R + /Type /XObject + /Subtype /Image + /Width 136 + /Height 162 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????WR??S?Q%l)J?H??0H?????.?????????t?35?4?D)?h^?f??_?sqQ4?>Y??g????/k?|?9?|???9t??*c?_????8??]??????"e??E#?8??X?5?t[?3?k?60?????????U??6G"?)?6>uy???~}?H???{=?????? ??A?O??u5??k?? K??'???fi???%???m?$?????7??s|?X~?X???T-M??????67???$Fq?2MY??|r????8&??Muej??????????[ phd?r@?9 ???r@?9 ???r@?9 ???r@?9 ???r@?9 ???r@?9 ????? + ?o??#????????6>?z\6Kp?S?p+ 0?r:???W/?,?{{zz?[???????????[sk??mZ?????????+ ? ???83S|\";?uB&? &?L8+ rU + ?8z????a?i2 ??@E$?"??Pt?????????????. ?????^???}`???s???????&?_?_ ???z?p8???b;V??9????S???Ew????NcS]U??0?l?$=????C??Q#;~??>?? `YL:?????:Z?o_?^R+?????8????g??^?#??G?y?y??>2dyjzt??-P??,#9?a?DQ??????s?3????~?:? ??n?k/i at +?*p???w??? !G?xB??|?????&s???????9??7&??w???uh???ljmj???()?d"??C??~???!???*?jeU???'?X???#?G??c???????g?'?G?u=?n?A&?????(HX~??`q?c??????^??????g??????????a2>?n??_J???J?$Xq???:????:?QL_?&U?\(?U? 5 ???ZZ???Z[6??P{?????+y??ri?(I+ endobj + 1204 0 obj + 45 + endobj + 1205 0 obj + << + /Length 1217 0 R + /Type /XObject + /Subtype /Image + /Width 94 + /Height 85 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x??Y?W?Y?}?A EEE C??$q4??(3-Me???\fHm???K??[&jb(? u??????!?|#?sf??????~?}??????_??????X,~N?+ x,:??78????R????? 0????t?@?PD??? b??,?P??I*?L"`Qa?!P?!R?J???U+#%?t??c4?H?L????N?(e"6??;O???_d(*???I? 2?=???? e?%3?????T??-?d? ">???XSS]v??*B?$s?G?Z-?t?8Z?e??kh?7^??*$? ?? ?C????h???d?)?Wj???L ?]?L???????$J?????tJdq]??nkGg??N?>-?,??*9??+ ???G???{????????DY??*}???K ???o?*?? Sb??Ue??^z????????u??G?I9?< vo?.??m?????<???????}?? @?$,v?????Xz???P???2?N?O???og??n?*H???x?H?n???????z?B??N???|]????d?????}v?b2jcB?T?}????@wSe?&Z???U?fa?)0y]? ??A??+^??Q??< 2??z????^??>5A????/oHGB,;???y?v??D??i?:?I????!?7+???s??O??e?????{????D!??6?????D?4!????;??????@?b??w??#=??)8???p???M$??p?[????_z?h?!????f??l???f??g??????1k??|????;0::l???w6p??i??}f}jy??? d^??W??;,?????g??fmCu???????+y??m9N?'P????4?Lwk??????8?2.U?????j???????+??%???? 9?cv?l?b??%?K.???"??ON?? ?J?f??R???~N?1?+??2??????{?n;??T?????r???;?! lj\????x?"J*???n??}???dRI? uQ?X+?? K?B>?A??dF?????8,:??4?kN4:??}? ???x?L???d????4mD?T??? ?Yx> + stream + x??z xT?????Wn???????????????*??W?????73???I ?J????????_???12sJ????5{?J}?RP???.I?????Q???Vom????????;*?Wun??8"???????v,??Q???6???(c???mnt?????4Ij?>????{??,?????s}s??E??U???j?2m?Q?*?e Gm???m?g????j?.?R]???:$?}??f??j??? ???,]??%k???a??I?;?W+w?vz?*_?????? S???g????9 + ???????9j_U!!?Gs???F.+$??d??{??o??(?N~????? ?N??3???l?C`??l^??)?ix5Ds!?36J?g??7?E{?]??& \kgM????qh?n?????Q? ?7?????o??+{??zx??[???A? + ?_?w+?????:????j????u`[&? s?-?0?I?z??#?? 1PMn:D???I??A??(?;???8?#?????9??-a-/?[? ???????6????y;??X?R?????|???&?\?;F???????G?:??:??No3??9?B??.0?? + r& ???MS??=5i?HM3?????M?xp??8?pR,W.??\?0fc?8??4\?h??M?|R?DooZ?,c?v???wD?:b?,??????P?OJSh.?$?Y??d?K??L???)<?-U(\?O?p????D???S?a??)? Fc"???c? + ? ?96?a?S? ??j?4?N{8??M????F?_*'+??r?RN??F???????{??wcc?? ?e????r????1???#e3u3???S?i\A?IB???H??'????c &???&=(??i S + }?l???eu??c???R????4??+ A?n!?2!??Y??!?E?/F3N?-?h ???\ o??L%???76o?:??N#?c,?{V?_!??p}?x??6?6???h???F?????_???????]Y\?^??_ at ns????M???????m?[] ?F?W?"???]???Tr^????'??l???sw$??l???????q??a???)??????4?!h"L??nu??p?cD8,-]????4P^~5K:?????>?H?P???J? ?Xu?????|@???Ul?B[?&-(?5I?b?t??+ ??%??0??hu8??????o??t? ???!{tf???b?Dv??N??zbt?u?N]O?s?0[? ?O*k?_Fn??????3?Qf?75???e??6??m?l?n???=VC=L??????5?+]???]d7???efqv???~?E?Iq?zYA[??d8 m?A?V???$n"z?~???$?(E?|;z????/GL X??L6??#d? ??6/lXyR)D,???j????? ???%r+ c??y^ + ?X,~???H???? ???x^???9?/???????)=F??y??>?C??v7>??gQh?gn?2>qK??????????SZ&yJ??=???H??????.??'??L???????ro????twmp?cd??dG????"??Be[b????Y??Y)?????C=?P]0???? + ???k?"!,d h??4?,?D????Z?0$F???????~?B???,?"#?a'{?P:Y?? ?c???e>C?|?A?a?y^??1r?p??@???5V0P9?I??D??FQr??5??*{?i??????Z?????e'??? ???????"??p7??_W????????w/???|"?????5z_w?=?????\> + stream + x??Y{|U?>?????]????~??Ix? ??I$^?LBH" ! ?41A&jF\??YE;??_?Cg~??? ????3??u7?3?2???=U?D?0???c????:u?=???????+ ?p(??4)2????5)?m?_?v?}?? b???=??_??K?S,??,?????\??=?W???p???kw??R ??p???$??a8L|?z?????????DOr0? &|?&?0[?o%??h?c?-???`{,?^?=??? ?I???d?? ?j???$?2?'????y+ ???6?i???Qd??E(??p??1???%y<=>??t??1?Gq]3????'???a??????7"C??|?B#??Qh?Yt??p?????I??6??jqy??a???s???????+???g?+???????/?????q8 ???-???1??^??a'???1t?#?+ ??? =_?7?,j9 k?!?F?p?B??SYJ??M?>d??&??U???P?!????IMA???R????C=?Z?? + ???4u???? + ?gZK?1L?[?]t+?,}?~?>K?????3?$?2?)@q??m?kd???r;?g???/?qy?(A?????Jp?D?A?BSt?5????Jn?? ?Q?}?????I???P?0?L??F8D??TZ?X???`????d?"??No,???I????????+8A?@?6?c?#r + Q= + O?^=???G17w??)9?Y????2??&z=n?sBjJr??n?Z?&?A????J?s???)Ye??W$?&??{??????Z?????&?????2W?,?/)????H? IqL?.????\e^W???^W?T?U???K?AWdH?/??L?\?b???'\e??RW????"??;?jJ???j?wn?*; zTj??1)?6????D?P?e3{(??8?H?[Z???JS??ie??"???*+Mv???Y2???6?9?O???0vn???q5I?@??'?L???+ \?????3??F??"?V_uE(?W? VM?LM?0S?X?&x]_.?w????????i?? e%"?? ?G??/??)q?????3?-?????G*???+R????*|(8s + B?vK??a-"?wU%?.X?? ?_0B?H-gF[,????????k?H??e?????~z?j*k?!???\?h/????Q?u?w?t?F??k?.???SY??\V3:?h?LgrD?l$3????Dk&?A,?Q0Qb??{??%?E??????S4M??$q?@?????P??_0?_(|?_ ?????a?6m???6???????H?~????AdZ%??? P?d????Q^m??TZ^D?L?)H??!`Z? + ???6????9Z?w???g??Mpb7?=?? ?7?Q?Q?????????y?y??/?U?+?St*RD?c2/?H ??0?#?Ej8?j?????e?????r???m9dy?r??XSZ????????+?N??E??[$?58?/?e ?Q)?J????? I??T??d??;?tv??V?u?0?Y??F E3n?f\?'L????%TH????+?? + %?Xm??":} ??B?9?{O?3OTj4H??Ge?\h ??????3Vu?K?u?? ?}???u???????T?;Q???cu?=?z9%?z7????F.???l????H?9SP???7?F??? ?????S|???G?4???)??zw8??t??????Z???|A?};W?????????/??{ ??)`V?$($3????????r????????8p??????d??kp?I? xb`R'8??]??`?ds? *&?????TmpT???z??:?z?u???3?A??{E???[E?(? ???0|cP?Y'?N??f???3??nt(x??l5Yi??DO??f9??)v?qj???q`n?57?? ?6 (}?????c???_JvX???&??????1W^?F((?/????P?f???aR8Y???z%[B?ByA + + + %????t??Hi??????5=??c?????%??g??'V??????5?kv}???K???tyy???[?\??? ??r??v% ?x?X??|?X?$I???vm ??@%?????pb?e95????!IiQkTxP &??@??PM k5A???6;??YkXa?a?;n=$r?N+ %?$P??????r + u??? + UC?????*9y ?Er???:j?n??k??b???Wn?'??~O?w?&?b?6????Y?s&?t*M???"f?8???%?+ O???? ?nn????WD???W_}?????r?Y??df???pl??????W? \??\_l????s?V ?@M?????J??d|&??1.??#}q?c?????:?~????YQ?8? + l???v????3???l0xp????s??% ???Y at S1?8???w??o?kZW????p???????4m?o????wCd?m????????}?B???0P?3? ??RX+a5??.???[???8%?I???Q*??????????"?DA????@CC????? ?E????8?FIA??y?????*?EI??vJIG[?FIo_?BN{1-p???? + ?zKn)?o??)?}&??%=}E?T?b?????^|???#???!??jAY2? + S['?w$?C= ???????R?c?Q?bz????a&???h?an???K?????+f?a????A???QjC??vg??4u???<\??@???POC:{/Ot???^?G?????6j+4?0;!(?l?>???J?H? {/??=????@%?? D|d??e??{???Q??F?gop??]??=?M|?J?QH??~?M???Y???]?q^??&??`???U?????=#o'??n??w8???J????f} lg???????u[ + ?-???{??????z_?6?????p???????9??E)??????,???????Q????D??R?{ ??????6c???zu???N?E^???????{?w????A ?}?O?3J~?' P?"???v$????m[?|?T`??? F?X????I$K??g???_b?# ????*?/0?12p?z + k????????a??z????t*??T???????:?uup]?r]?q]?\W ????????D???x?'?$??[y3o?^?kx??;2?x;Ex + ????? + ?+q?O????pe?LT?uE?Z???]??w?+?r?{? + ?}????^l?\Z???'b?do?V?ne)a???y???T?l?6?(/?????l??????> + >> endobj + 1166 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [145.8175 595.4386 153.2645 607.1183] + /Subtype /Link + /A << /S /GoTo /D (chapter.380) >> + >> endobj + 1167 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [236.1327 595.4386 249.0343 607.1183] + /Subtype /Link + /A << /S /GoTo /D (chapter.380) >> + >> endobj + 1168 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [315.7892 529.809 354.7525 539.1651] + /Subtype /Link + /A << /S /GoTo /D (cite.llvmbytecodeformat:www) >> + >> endobj + 1169 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [174.6647 405.3756 190.588 417.0552] + /Subtype /Link + /A << /S /GoTo /D (figure.18) >> + >> endobj + 1164 0 obj << + /D [1162 0 R /FitH 784.0631] + >> endobj + 30 0 obj << + /D [1162 0 R /FitH 497.4594] + >> endobj + 894 0 obj << + /D [1162 0 R /FitH 226.2935] + >> endobj + 1161 0 obj << + /Font << /F47 676 0 R /F15 679 0 R /F14 634 0 R /F33 936 0 R /F26 624 0 R /F57 691 0 R /F49 683 0 R >> + /XObject << /Im8 1160 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 1224 0 obj << + /Length 3696 + /Filter /FlateDecode + >> + stream + x??[K?? ????[f?4-??Iq?TRJ?)?|?}??i???;?l????+ ?.?@?NYf???l??P??U??:k??d:T????K?sa:????p?75?V??w? + S???Z?m??Tf?p??*???????w?????I??????EzB??'?????3b?S?{M?????????tB??=??9????/??o?'bItGI???O?n/??V? ??}?=???*j???????# ????Ch8? }??cK?nb?H+ ??& + ?KD + ??cn???>acx???n?????#?g???} + ??3?R?-F?3?>? ?@???E???????r?H??=`x????H?!?&?(Y?&j#MaQ???H5 ?8???oi?&X??????h? -?v?^*&? mb~=?t???D?R?Y?$Pz???*???#hhf? > Y4????????yn .-T'd?;pm?????K ????? + /???)\????I<S?=?Il ??'?@????m?A"?2?D?C?h5?(??%??S??(\?(\P???^F????j?????y??(???kz??(D?|A????Eg? + ?{??JC?diP?2&?q?i?U$??bS;?,x \???d?n?=?????q????[z?#?'M?` ?BD????6?? ?<????gDb$2?&??PZ?? {Q?????)\b?!??Z? + ??BXXAX??+ =+ ?h???(??w??Dg?,S8]???z?>????Z??xn??uV?E?????^4{??V*?L?r??# ?#I???????? s?qm???+?2V????R?b6?????&8????)o3?)?ib??W?$???$cA]? ??????bg?K%=+??K?????A?D?+????ewK???S8z?u?Ze??-??k?z???z.>Rl?nxO?S????r-H4=?????;!?zR5?=]??=???XT??3n#?????c=?jW?5?:?n???????^a??VY[ ??V5??}???k??????aL???s???@??+ $e????1l3?e9?ae+??VpN + "?90j???O??a?Cp???Mx:????[?t??2??A&T'TS???g??@????}=&x #?K??*????3?E??*??((????>?R????a?`???????l-??$[?a?[??2?? ?Vl_?:????t? + 6??L?{j? ?u? 8?t*-???"?i$?K;9?K[?_???S\????FA.??u?O??!WP??K"???5-*??????FB??a??N???Rk????V???4#???0 ??${?KicD???c????Yh? ????(D??????X??}h???qV???";?bu + ??????}?[?{ + ?q`??=u??S??X]?Ty??3???5?;?+??M=???? i?C???< ;-?HS?'???}?4Ns=YC??s?N?}??*?[|RP??6??'pP???????plf'???+ endobj + 1223 0 obj << + /Type /Page + /Contents 1224 0 R + /Resources 1222 0 R + /MediaBox [0 0 595.2757 841.8898] + /Parent 1110 0 R + /Annots [ 1240 0 R 1241 0 R 1242 0 R 1243 0 R ] + >> endobj + 1240 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [140.935 410.9207 156.8583 422.6003] + /Subtype /Link + /A << /S /GoTo /D (lstlisting.19) >> + >> endobj + 1241 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [139.9375 302.1362 155.8608 313.8159] + /Subtype /Link + /A << /S /GoTo /D (lstlisting.19) >> + >> endobj + 1242 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [257.6905 274.6469 273.6138 286.3266] + /Subtype /Link + /A << /S /GoTo /D (lstlisting.19) >> + >> endobj + 1243 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [221.3959 261.0977 237.3192 272.7774] + /Subtype /Link + /A << /S /GoTo /D (lstlisting.34) >> + >> endobj + 1225 0 obj << + /D [1223 0 R /FitH 784.0631] + >> endobj + 1226 0 obj << + /D [1223 0 R /FitH 613.4658] + >> endobj + 1227 0 obj << + /D [1223 0 R /FitH 615.5821] + >> endobj + 1228 0 obj << + /D [1223 0 R /FitH 604.2247] + >> endobj + 1229 0 obj << + /D [1223 0 R /FitH 592.8673] + >> endobj + 1230 0 obj << + /D [1223 0 R /FitH 581.51] + >> endobj + 1231 0 obj << + /D [1223 0 R /FitH 570.1526] + >> endobj + 1232 0 obj << + /D [1223 0 R /FitH 558.7952] + >> endobj + 1233 0 obj << + /D [1223 0 R /FitH 547.4378] + >> endobj + 1234 0 obj << + /D [1223 0 R /FitH 536.0805] + >> endobj + 1235 0 obj << + /D [1223 0 R /FitH 524.7231] + >> endobj + 1236 0 obj << + /D [1223 0 R /FitH 513.3657] + >> endobj + 1237 0 obj << + /D [1223 0 R /FitH 502.0084] + >> endobj + 1238 0 obj << + /D [1223 0 R /FitH 490.651] + >> endobj + 1239 0 obj << + /D [1223 0 R /FitH 479.2936] + >> endobj + 1222 0 obj << + /Font << /F47 676 0 R /F15 679 0 R /F14 634 0 R /F57 691 0 R /F49 683 0 R /F63 764 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 1249 0 obj << + /Length 3522 + /Filter /FlateDecode + >> + stream + x??]o#????B?KW@??o.$?%M?W4E?C.{?????\?>'??3??%w????k?8????{|??_q?Z?\???j??|??]??- ??? ??1???6 ??v]??u????W?+ ?[?_???I??r??????5o????#? ??FJ??>??v-l?n???F???8?]o??`?? ????-??z?( ?2j?f??\B????_?xQ? \(?^??+ ?? ~w?H{?]'?-?|Y3R???? ??>?}; i?8????1????D??@??l q??w k5??uR?3 ??1}?4?v????? ?ZG?y????*??X ?a?[? ????????rG?A ?) ???1I ???????&?>d?1?j?[%n??+?????AV + %?_s4???tU?T??ki?~????-^1G?Vkr?,G?,x?????MJ?y??*-??~???9???i?FX6)?s???i???Z?}????wv????k?N??y???!?q??5??EN??:F4?D??????JL??????_c?[???:O??j?,nQ%r?I?C?}Al??????s?;? j??;?-v??RB$^??.??"??:J?a + ?????+d,?X???? ?)p?b? ??K?%v??M?POa?G? ??Yf??Sf?:9?????3+ ??endstream + endobj + 1248 0 obj << + /Type /Page + /Contents 1249 0 R + /Resources 1247 0 R + /MediaBox [0 0 595.2757 841.8898] + /Parent 1110 0 R + /Annots [ 1261 0 R 1262 0 R 1263 0 R 1264 0 R 1265 0 R 1266 0 R ] + >> endobj + 1261 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [259.1128 523.5844 275.0361 535.264] + /Subtype /Link + /A << /S /GoTo /D (lstlisting.40) >> + >> endobj + 1262 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [263.3368 387.5317 279.2601 399.2114] + /Subtype /Link + /A << /S /GoTo /D (lstlisting.34) >> + >> endobj + 1263 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [354.7668 346.8841 370.6901 358.5638] + /Subtype /Link + /A << /S /GoTo /D (lstlisting.19) >> + >> endobj + 1264 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [138.4496 178.4087 154.3729 190.0884] + /Subtype /Link + /A << /S /GoTo /D (figure.43) >> + >> endobj + 1265 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [103.4035 96.5529 119.3268 108.2325] + /Subtype /Link + /A << /S /GoTo /D (figure.43) >> + >> endobj + 1266 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [348.914 69.4545 364.8374 81.1341] + /Subtype /Link + /A << /S /GoTo /D (figure.44) >> + >> endobj + 1250 0 obj << + /D [1248 0 R /FitH 784.0631] + >> endobj + 1244 0 obj << + /D [1248 0 R /FitH 723.423] + >> endobj + 1251 0 obj << + /D [1248 0 R /FitH 725.5393] + >> endobj + 1252 0 obj << + /D [1248 0 R /FitH 714.1819] + >> endobj + 1256 0 obj << + /D [1248 0 R /FitH 702.8245] + >> endobj + 1257 0 obj << + /D [1248 0 R /FitH 691.4671] + >> endobj + 1258 0 obj << + /D [1248 0 R /FitH 680.1098] + >> endobj + 1259 0 obj << + /D [1248 0 R /FitH 590.2605] + >> endobj + 1260 0 obj << + /D [1248 0 R /FitH 592.3768] + >> endobj + 34 0 obj << + /D [1248 0 R /FitH 326.7602] + >> endobj + 1247 0 obj << + /Font << /F47 676 0 R /F15 679 0 R /F63 764 0 R /F57 691 0 R /F14 634 0 R /F11 1255 0 R /F49 683 0 R /F26 624 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 1269 0 obj << + /Length 1311 + /Filter /FlateDecode + >> + stream + x??X?o?6~?_???????H?m???E?a??????8l+??f?_??#)??l??H?t??w??????(?Ly? + ?4???|3?? + ?LD?e????^Ce?cBZ???f??mA????bv???6??->???|??{??r3??R??;x?O?-?a?+ dop???,_??_???H?????+xz?h??= ????F_q?@?+m0cP?ypR ?b??`?^I?=????o???v,-?1?z???k?{J?^K)1?OPB?#N??IQ?????1??????io?9??z?EN???????h?????????Q6y????g??%SR???f?????N4?'|???5?wy??v ???l???e????S?hk???p???V???"F`???D?*,???????j??g???]??8'?/ska?j?&????T?k??E?LJ?RD?????]1?Rkya?F?rF????Z??#@?M"%???l???~7"? &?????x#?A\? F??????\????,Tc1H4??&???_MF?*????tR???G|?NIZ??Ya|?b?r??g\r????YD????,w??Y???e??W?)??T?w??vfgD??-????y????dd\2 o???G"?m???-j&T?;?}?=????x& + ??}?1?iE?'??????n??m?x??D?I?j????=??qY?h??DNh?? + ????9?Q~?'????????--5???P8iSZ??J + ??T???)???0??+n???#?E2?n?AZ:vb [??m???Dn`Z??V??c%?@8l??~??R???-O ?G\??%?W ?2??4?)??9????`%#?h0??Y???3 + )?'????_?=??;jm?g,?J??HQ*??? ???NY@??>5N??z???fwj?J?7?bx~ + n??????qm??]?4|? ;?}?A?O#%pg?U?w?i?\\???a?????t????h?????_???'????+ endobj + 1268 0 obj << + /Type /Page + /Contents 1269 0 R + /Resources 1267 0 R + /MediaBox [0 0 595.2757 841.8898] + /Parent 1110 0 R + /Annots [ 1271 0 R ] + >> endobj + 1245 0 obj << + /Type /XObject + /Subtype /Form + /FormType 1 + /PTEX.FileName (../Graphics/Overview_Native_Compile_Vert.pdf) + /PTEX.PageNumber 1 + /PTEX.InfoDict 1272 0 R + /Matrix [1.00000000 0.00000000 0.00000000 1.00000000 0.00000000 0.00000000] + /BBox [0.00000000 0.00000000 565.00000000 153.00000000] + /Resources << + /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] + /ColorSpace << + /Cs1 1273 0 R + /Cs2 1274 0 R + >>/Font << /F1.0 1275 0 R>> + /XObject << + /Im4 1276 0 R + /Im3 1277 0 R + /Im1 1278 0 R + /Im6 1279 0 R + /Im9 1280 0 R + /Im5 1281 0 R + /Im7 1282 0 R + /Im10 1283 0 R + /Im2 1284 0 R + /Im8 1285 0 R + >>>> + /Length 1286 0 R + /Filter /FlateDecode + >> + stream + x??Y?o5?_??V????????'?,|??R????&S2A4?H@? ??uU@????h????0?*??7?????4sm?? ?Jc?u?0?????^???r ????&?l?'8&(?,% ??p??6???????e??p??u+??7-???YJ?? ?W?A%#??E,7???????+?*dP)2]???uqu????s???U>????*qK{????Q?[Z%?? + x>(?`?\D?V?? ??#dw??(?e???)?Y????(c?'z???????????U?b?X?q?5?P??m??1?Q"?M?X??????Qp2? ?I????c,??? p6&?????8"m!m???OZto??&,?]b??q?,???g?X?F?zH?@Q????-?k?V.????k ?(?A ??6??'Pi??P?|Y???Z?.E??E;y?,????????Q?d??e??vq???V???C??n????!??j?TpL7S??3E???0?3O?????|O??Z?? ^???Z + ? ????N7????K?E??t?`????%?atE?????;???)" ?~???>?O????o#???Q?pg?|?S_??=jO8??Q?x??eq&?"?r?;?%j???O*8b(?r?VQ(?z/?r]???????H*x???=??t?1?8????? +x???VU??????'N?n8?;W?]*???\:q????????ze>?'?j??]???-t???_/~#V?z??c?qD??Ue?u@G????8!>?? ??]?&?m?t?KC?G?mi??kg%}.???`$?3?*GA?$?Kyv???T??-T?[8?n1D?3?r>0G????z?-?????-???n?p??/??Q??endstream + endobj + 1272 0 obj + << + /Author (Jakob Praher) + /CreationDate (D:20060401190700Z) + /Creator (OmniGraffle 4.1.1) + /ModDate (D:20070406164100Z) + /Producer (Mac OS X 10.4.8 Quartz PDFContext) + /Title (Overview_Native_Compile_Vert.graffle) + >> + endobj + 1273 0 obj + [/ICCBased 1287 0 R] + endobj + 1274 0 obj + [/ICCBased 1288 0 R] + endobj + 1275 0 obj + << + /Type /Font + /Subtype /TrueType + /BaseFont /HKLPLB#2BHelvetica + /FontDescriptor 1289 0 R + /Widths 1290 0 R + /FirstChar 32 + /LastChar 125 + /Encoding /MacRomanEncoding + >> + endobj + 1276 0 obj + << + /Length 1291 0 R + /Type /XObject + /Subtype /Image + /Width 42 + /Height 30 + /ColorSpace 1274 0 R + /SMask 1292 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x??? + endobj + 1277 0 obj + << + /Length 1293 0 R + /Type /XObject + /Subtype /Image + /Width 138 + /Height 72 + /ColorSpace 1274 0 R + /SMask 1294 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 1278 0 obj + << + /Length 1295 0 R + /Type /XObject + /Subtype /Image + /Width 102 + /Height 108 + /ColorSpace 1274 0 R + /SMask 1296 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????+ endobj + 1279 0 obj + << + /Length 1297 0 R + /Type /XObject + /Subtype /Image + /Width 42 + /Height 30 + /ColorSpace 1274 0 R + /SMask 1298 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x??? + endobj + 1280 0 obj + << + /Length 1299 0 R + /Type /XObject + /Subtype /Image + /Width 75 + /Height 75 + /ColorSpace 1274 0 R + /SMask 1300 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 1281 0 obj + << + /Length 1301 0 R + /Type /XObject + /Subtype /Image + /Width 42 + /Height 30 + /ColorSpace 1274 0 R + /SMask 1302 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x??? + endobj + 1282 0 obj + << + /Length 1303 0 R + /Type /XObject + /Subtype /Image + /Width 138 + /Height 72 + /ColorSpace 1274 0 R + /SMask 1304 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 1283 0 obj + << + /Length 1305 0 R + /Type /XObject + /Subtype /Image + /Width 75 + /Height 75 + /ColorSpace 1274 0 R + /SMask 1306 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 1284 0 obj + << + /Length 1307 0 R + /Type /XObject + /Subtype /Image + /Width 161 + /Height 114 + /ColorSpace 1274 0 R + /SMask 1308 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 1285 0 obj + << + /Length 1309 0 R + /Type /XObject + /Subtype /Image + /Width 42 + /Height 31 + /ColorSpace 1274 0 R + /SMask 1310 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????+ endobj + 1286 0 obj + 1907 + endobj + 1287 0 obj + << + /Length 1311 0 R + /N 1 + /Alternate /DeviceGray + /Filter /FlateDecode + >> + stream + x??SMkQ?3V??*??t??E?0~,????i?c??A???d????$??U7nD?n@?.?pQ?FQ(?_??~?(t)?????*?????????????u?uM?Y?/ + ?L?j?;??d??T?s3??B?m??t??????? ??????|????]?HR?O?k?,px\sE?????f?!:t|????04Vj?U??0????????????a???K?#??kIzE???~??u??0?-????9?R????eL???c?? V??t????B?????r=M?????Q???qN???`????> + stream + x?}?OHQ???%B?e&R?N?W?`???o???k??????????n%B?.A?1?X?I:??b]"?(????73?????7?3????{@](m?z?y???(?;>??7P?A+?Xf$?v?lqd?}????????] ?U???????x????iO:???b??M??1?W?g?>??q?[ + ?2?M?'?"()Y'??ld4?????2??'&??Sg^???}8??&????w????,? \V:k???;?i?R;;\??u????V?????\???\?C9?u?(J?I????]????BS?s_ QP5??Fz?????G?%?t{3qW?D?0vz ?? \}\?+ ?????4?I?????x#?{z?wA??j}????????Q????=??8?m??? + ?(?o{1?c??d5?U???g??t????la??i"??\.5???????^?8tph0?k?!?~D? ?T?hd????6??????:>f??&?m?????x?A4????L?&????%???k???i??????Cq????m?&/?By#???%i??'?W??:?Xl?Err?'?=_???)?i7??????,?F|?N?????6?rm?^?? ???U?HW?????5;?????hendstream + endobj + 1289 0 obj + << + /Type /FontDescriptor + /Ascent 770 + /CapHeight 727 + /Descent -230 + /Flags 32 + /FontBBox [ -195 -444 1446 1207] + /FontName /HKLPLB#2BHelvetica + /ItalicAngle 0 + /StemV 0 + /MaxWidth 1500 + /XHeight 531 + /FontFile2 1313 0 R + >> + endobj + 1290 0 obj + [ 278 722 722 722 722 722 722 722 333 333 722 584 278 722 722 278 722 556 556 722 722 722 722 722 722 722 722 722 722 722 722 722 722 667 722 722 722 667 722 722 722 722 722 722 722 833 722 722 667 722 722 667 722 722 722 722 722 722 722 722 722 722 722 722 722 556 556 500 556 556 278 556 556 222 722 500 222 833 556 556 556 722 333 500 278 556 722 722 500 722 722 334 722 334] + endobj + 1291 0 obj + 27 + endobj + 1292 0 obj + << + /Length 1314 0 R + /Type /XObject + /Subtype /Image + /Width 42 + /Height 30 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???Kk?@F5?1&M?# ?J4??F-?/T,?((?V??\D????S??t?t????3?0w?u8? ?w?;????(+ endobj + 1293 0 obj + 52 + endobj + 1294 0 obj + << + /Length 1315 0 R + /Type /XObject + /Subtype /Image + /Width 138 + /Height 72 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1k?@pM ?%??"?Q?tT:??w''?E?_@?lV?[J???8???W??Z??B???????????_$?;Q^?$? ???? R"??? + a%??????Bx?T???C?V*?%UI??1$O?j?f?????0????v????x?r?k?????LsFLs61F?V??\ ????Fg1??jtjj?k>Q?h???z ??ey[Y??? ?_?n??????&?`???j??GH??#k?} + ??Q??"???hmc??T$??0?Z?j'A?rwb???l)???[???D?Uz?%?$??Y????$_?M?dKqL??'??L$???^2??Zq?C??$  H@??$  H@??[??N??=;?Gv??????????e???)?~????a????] + =????p??n?l?O7*?+}>N???s???B?b????A?/P??c'w*?????????DJ??g???????+ endobj + 1295 0 obj + 55 + endobj + 1296 0 obj + << + /Length 1316 0 R + /Type /XObject + /Subtype /Image + /Width 102 + /Height 108 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????WRi?S???A9)??#*`&?G?b?@?k???E??????i(gH???+ ?:?I? ???D??+ y,&??Y|1*W?s? + tE??+??U+?????S??a"a*?'NVh????????Ue(??k?b? + ?($ + ?#D?????Fs n??k?K? + T?aPH! + ??K?????f????V_???d4?h?R> R" *+U???????-??f?????*4?E??????R?%5&K?}t?9?[??Q{??TS?N???????s???>??k???[?Y????????K??#?4+???b{??_?l??gy???f?/???Q??,`q?"?t?(?B??vk??16?r????????C??L`F ????q?????s?S2q???`? Z ??)?v??b}?d????)???r?!?b?)6??]+ |vD ??'A?2U?m^?Sa~?6G???HK???gh???` + -????O at S?32J?J?T*2?i)(?Q?|N????+aF4?+?? RY"? ?x!?????)p!9d??`??. E?y\n ??Q??7???? + ?X?B????????ji???Y?){w?;G??????W> + stream + x???Kk?@F5?1&M?# ?J4??F-?/T,?((?V??\D????S??t??nzv?|??????w8???????h+ endobj + 1299 0 obj + 39 + endobj + 1300 0 obj + << + /Length 1318 0 R + /Type /XObject + /Subtype /Image + /Width 75 + /Height 75 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???}SW??,?.???ApQ??h?PA?B'F?:CJ???jimU2c?6?o-??ZM?2F+?Uc??5?Z/1??e?v??????+ ?r$?m!_???N??ZZ?U??m!iX???H?)???????????????a?B U?????]?\m/?e????.d???,?Jo?Vy?~??\?i ?O???s"?T?P*?)Pi??s???????h?|P??` (|?L??????$?3f??????????r??????(>YTl???Sp????6??u???t??8-?l?>f??e??-? ??? + j/y}?P8??4??!:6N?????????rbe)6s?/pW??B0?4??Z????????`a!_\ZI???%?&?#????@???????????'?+T$??W?76S????????O?Q#?sXG?t???Pd??????6?y???u ?ZO??F"?|Ued????@???|?=??'???-J??wvvw??v?6W?????;i H)?????_??-??v?)y??????g???;???????t????"PzR??~[?i~??????"?????hI????}????=o????)u????I??o^q?@9?? ~ ?c?X ??D4?v?z?@?? ^??? x??'??C?????8~@?h?je? ?t?Z???q??8l??+ {,~z| endstream + endobj + 1301 0 obj + 27 + endobj + 1302 0 obj + << + /Length 1319 0 R + /Type /XObject + /Subtype /Image + /Width 42 + /Height 30 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????k?P?K??\'Y?0T,?+t$A a}1?}?(?AQ?"????v???>???????????sR?G??*?0 '+ B???5#H??0???u{??tl??1 I????e?a;}o8?=#f???w??.?, ?frR??v???^??^Ln?^?8???8??r?r??*???7D?????Xe?gH?bR??T[???????????????"???????x???q??`9??5??33?=??=???Q????????Q???#>+ endobj + 1303 0 obj + 52 + endobj + 1304 0 obj + << + /Length 1320 0 R + /Type /XObject + /Subtype /Image + /Width 138 + /Height 72 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???]O?P??kYiG??Mv!?c???pY??I+ ?|N??????????5??}??h> + stream + x????Ow?{????@?CT??XeeU?8?SR"?ue8?:X????IGck$q??H?2?N??L??E?3?k;???\??n?????????????????A C ? L?F?L??B&?Gb ?pP?E??? ?B?0>??qP?E3Y?/?H?B>???4l????J?r???"4l1??@?(?5?Z)rQ?? &?+J4U?:-?? 1?? &G +??????*\%?S?!E"EYU??l6?q????? + R1P????`??lV?QW??? ??3????B?bU?y?????a3+?El f?c?G.?D??i?\??r9?6?A#???K6????2?\A&??\?#]??^w}v?QW,*:i? ?_"W????r-?*?kM???_????{]?4??y???/?T?V??5?_ S??M??n???Pp??u???T'm?L6&???z??????J????????#?????z????????_????hm?;??n2?\?????{?x????=??????uM???7??o?????????????S??oW?-??????NO 8<"????x$:[?/????z??E??P???:E;?2?_d_d?&Wc?a????R%|c B?2????72??|???kwwoo?P6??8>}????-.???(yy??????Bb+?w@??^?`???Z????????B)|]aO??????Z?Hg?N???!?z??x)x???%?k?I??????$l??????l1??Mu???J,L?~?9x????gE?d?g??????O?5%?":???????C??M?s???:???????s4J??q??Q+ + endobj + 1307 0 obj + 76 + endobj + 1308 0 obj + << + /Length 1322 0 R + /Type /XObject + /Subtype /Image + /Width 161 + /Height 114 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????K"a???mf?i0u&??!?u #/??\ + 9?(????XT???O?????+x?????DJO?LO%???%???_OH? ???????????J?|.??????z???D)???+?Y???j??B6??D??nF???~??[?'???'?V?(?'??O`?+ +???-?V?m?u?8?????e???"??O???<U/V?????+ endobj + 1309 0 obj + 27 + endobj + 1310 0 obj + << + /Length 1323 0 R + /Type /XObject + /Subtype /Image + /Width 42 + /Height 31 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???Kk?@F5?1&M?# ?J4??F-?/T,?((?V??\D????S??t?tSzv?|??????w8???????h+ endobj + 1311 0 obj + 631 + endobj + 1312 0 obj + 706 + endobj + 1313 0 obj + << + /Length 1324 0 R + /Length1 12448 + /Filter /FlateDecode + >> + stream + x??:y|T????}????Y3[&?BBBBr ? ?T$?+ ???sO?[P? !e!G????i_m?????????0??O?B(? c??y ?P???q?7??oj???????f^??m\?lB?>??m??:??{??Tqb?}?/$_?????0??????z4???+ ]BW0 g???R<???8?????X|?"????k|?? a$R???zbq?x??En$?!?@~C?????????S????? + c?????@? + ??u?????a????^x?????m???Q??????p6???????Y?y?K???`???????9?|????'/w?w\???,??)????\x?P?GUP?9?{?K???J?K?&Z?X?>d?J?D???*???[)?h?Z???s???????????7??? + ?v?'?*?"?_??|?>??Z]A??\???h?BMY?? v???kr?* ? l?RJ ??9#T(%E??)?y5??Jp???D?a???d???Qc&??cV?~??a?]KW?Cd?"?t?????????F???c]?}????,]??z???S???_^R?Z??5av7??DN????+? {???U??????&j3????"??4_????t? qD????-@????.5t2??zW + J0ZR?????$ ?S?_??????r???h? + ?J??H?+u????`???l6wX0????f?/'?2z??Md???%?1(/??p?????W?&?T??x?W?Vc????QG?Yw? o?Xx????VG????n?J?????u????????N:?f??????a??lwfFb???K??~??)???c?H???Q!*B? + ??????>??9U?Y?????)ddB6??94 + Ga + ?*????????????^?F????UK/?????6M?/??????)?N???N!c?o????-?N??@??ac???lB?Y?a2Hhm>h????,X???-??/(?????_a?H???>? + #?????M?+ ??a?? ????g1?{&?O???5???'??4?go??_|[?[??`???K?4f?C?h??*??9n??????WY?6}?]???4XT???N?I?<')?w=?r6s]?gL??vq;4?M?-?,uA??A1?cV??????j$?j[?,h??"X?R???J ????Cf* ???si?+ %??B?nn??H??v??qY5?r???*"h??x?t=?D????e?+ym??k??m P?+ ?$???60?$fB??2?II??LV? b?????2??]?f?????2o7?6c???i?O????wM|?P]}????w??wu?N!(k?n??4??4 + "3??-?+6?ZN?+????`?????8???}?|{??f at W`????[lx? + ?A????2??'??1 x?p`?OYQ ??g?z?J,?????m.???????-??????????? ???\????:*j??V??4?)?>???i???:??.?K?e???????Jd |? Q$A?}&?JI?, ?PS:????(?]???j?>??K????2??????r?b?????o?K?v.?/???*j?`a.???F?? ????B at 1?4?????| ?1????????K???g????D??c7?-/[?Z`|??w{[?|??"a?;???_?z??MO?o???o???????G]? ??_?>/Font << /F1.0 1328 0 R>> + /XObject << + /Im5 1329 0 R + /Im7 1330 0 R + /Im10 1331 0 R + /Im9 1332 0 R + /Im11 1333 0 R + /Im6 1334 0 R + /Im3 1335 0 R + /Im14 1336 0 R + /Im15 1337 0 R + /Im16 1338 0 R + /Im2 1339 0 R + /Im1 1340 0 R + /Im12 1341 0 R + /Im4 1342 0 R + /Im8 1343 0 R + /Im13 1344 0 R + >>>> + /Length 1345 0 R + /Filter /FlateDecode + >> + stream + x??\[?? ~??????k?/???-???G???(/f?e????u~on?k??L?~ + pc?^???{?+??y?????V??OE? (D?r?"???\?4?|??brid?6?I?|???|~??;y0?_FuU??SeEQ^??0????:?[?????z*]???%m-?EowkS?{???q?S?0&Y#??????????;z??????????$?h$r1B???_????Y?A??UK?H????F?R][z?????+O???4 ??RP???i?p????b??]?PJ5U?$???ZD?m?c?Dn??dg?"% + ,]?????a%A??}?g??\i??M_ r> + endobj + 1326 0 obj + [/ICCBased 1346 0 R] + endobj + 1327 0 obj + [/ICCBased 1347 0 R] + endobj + 1328 0 obj + << + /Type /Font + /Subtype /TrueType + /BaseFont /BRXRSM#2BHelvetica + /FontDescriptor 1348 0 R + /Widths 1349 0 R + /FirstChar 32 + /LastChar 125 + /Encoding /MacRomanEncoding + >> + endobj + 1329 0 obj + << + /Length 1350 0 R + /Type /XObject + /Subtype /Image + /Width 39 + /Height 35 + /ColorSpace 1327 0 R + /SMask 1351 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x??? + endobj + 1330 0 obj + << + /Length 1352 0 R + /Type /XObject + /Subtype /Image + /Width 39 + /Height 35 + /ColorSpace 1327 0 R + /SMask 1353 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x??? + endobj + 1331 0 obj + << + /Length 1354 0 R + /Type /XObject + /Subtype /Image + /Width 42 + /Height 30 + /ColorSpace 1327 0 R + /SMask 1355 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x??? + endobj + 1332 0 obj + << + /Length 1356 0 R + /Type /XObject + /Subtype /Image + /Width 42 + /Height 30 + /ColorSpace 1327 0 R + /SMask 1357 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x??? + endobj + 1333 0 obj + << + /Length 1358 0 R + /Type /XObject + /Subtype /Image + /Width 102 + /Height 108 + /ColorSpace 1327 0 R + /SMask 1359 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????+ endobj + 1334 0 obj + << + /Length 1360 0 R + /Type /XObject + /Subtype /Image + /Width 121 + /Height 72 + /ColorSpace 1327 0 R + /SMask 1361 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 1335 0 obj + << + /Length 1362 0 R + /Type /XObject + /Subtype /Image + /Width 233 + /Height 175 + /ColorSpace 1327 0 R + /SMask 1363 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????+ endobj + 1336 0 obj + << + /Length 1364 0 R + /Type /XObject + /Subtype /Image + /Width 138 + /Height 72 + /ColorSpace 1327 0 R + /SMask 1365 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 1337 0 obj + << + /Length 1366 0 R + /Type /XObject + /Subtype /Image + /Width 138 + /Height 72 + /ColorSpace 1327 0 R + /SMask 1367 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 1338 0 obj + << + /Length 1368 0 R + /Type /XObject + /Subtype /Image + /Width 42 + /Height 30 + /ColorSpace 1327 0 R + /SMask 1369 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x??? + endobj + 1339 0 obj + << + /Length 1370 0 R + /Type /XObject + /Subtype /Image + /Width 67 + /Height 57 + /ColorSpace 1327 0 R + /SMask 1371 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 1340 0 obj + << + /Length 1372 0 R + /Type /XObject + /Subtype /Image + /Width 102 + /Height 108 + /ColorSpace 1327 0 R + /SMask 1373 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????+ endobj + 1341 0 obj + << + /Length 1374 0 R + /Type /XObject + /Subtype /Image + /Width 67 + /Height 57 + /ColorSpace 1327 0 R + /SMask 1375 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 1342 0 obj + << + /Length 1376 0 R + /Type /XObject + /Subtype /Image + /Width 121 + /Height 72 + /ColorSpace 1327 0 R + /SMask 1377 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 1343 0 obj + << + /Length 1378 0 R + /Type /XObject + /Subtype /Image + /Width 138 + /Height 72 + /ColorSpace 1327 0 R + /SMask 1379 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 1344 0 obj + << + /Length 1380 0 R + /Type /XObject + /Subtype /Image + /Width 233 + /Height 114 + /ColorSpace 1327 0 R + /SMask 1381 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x??? + endobj + 1345 0 obj + 4340 + endobj + 1346 0 obj + << + /Length 1382 0 R + /N 1 + /Alternate /DeviceGray + /Filter /FlateDecode + >> + stream + x??SMkQ?3V??*??t??E?0~,????i?c??A???d????$??U7nD?n@?.?pQ?FQ(?_??~?(t)?????*?????????????u?uM?Y?/ + ?L?j?;??d??T?s3??B?m??t??????? ??????|????]?HR?O?k?,px\sE?????f?!:t|????04Vj?U??0????????????a???K?#??kIzE???~??u??0?-????9?R????eL???c?? V??t????B?????r=M?????Q???qN???`????> + stream + x?}?OHQ???%B?e&R?N?W?`???o???k??????????n%B?.A?1?X?I:??b]"?(????73?????7?3????{@](m?z?y???(?;>??7P?A+?Xf$?v?lqd?}????????] ?U???????x????iO:???b??M??1?W?g?>??q?[ + ?2?M?'?"()Y'??ld4?????2??'&??Sg^???}8??&????w????,? \V:k???;?i?R;;\??u????V?????\???\?C9?u?(J?I????]????BS?s_ QP5??Fz?????G?%?t{3qW?D?0vz ?? \}\?+ ?????4?I?????x#?{z?wA??j}????????Q????=??8?m??? + ?(?o{1?c??d5?U???g??t????la??i"??\.5???????^?8tph0?k?!?~D? ?T?hd????6??????:>f??&?m?????x?A4????L?&????%???k???i??????Cq????m?&/?By#???%i??'?W??:?Xl?Err?'?=_???)?i7??????,?F|?N?????6?rm?^?? ???U?HW?????5;?????hendstream + endobj + 1348 0 obj + << + /Type /FontDescriptor + /Ascent 770 + /CapHeight 727 + /Descent -230 + /Flags 32 + /FontBBox [ -195 -444 1446 1207] + /FontName /BRXRSM#2BHelvetica + /ItalicAngle 0 + /StemV 0 + /MaxWidth 1500 + /XHeight 531 + /FontFile2 1384 0 R + >> + endobj + 1349 0 obj + [ 278 722 722 722 722 722 722 722 333 333 722 584 722 722 722 278 722 556 556 722 722 722 722 722 722 722 722 722 722 722 722 722 722 667 722 722 722 667 722 722 722 722 722 722 556 833 722 722 722 722 722 667 722 722 667 722 722 722 722 722 722 722 722 722 722 556 556 500 556 556 278 556 556 222 722 722 222 833 556 556 556 722 333 500 278 556 722 722 500 500 722 334 722 334] + endobj + 1350 0 obj + 26 + endobj + 1351 0 obj + << + /Length 1385 0 R + /Type /XObject + /Subtype /Image + /Width 39 + /Height 35 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????k?@?k??$?lH??(*I?"4 + "X?V???@=??BZ?k8?$?e?v?E9????*?U??jU???s???,?`??, Dpj?0???a??l6??il?p$+ ??cx)??E?n???w???.?n?m?f1???|????h"k???????????w?:u#??????q-_?[m?z0z??????n??? + +LI?}?{9?|?L&/??????o?? + ????,?????^?????????;VIWe??!U??????=?Mg?????????????????;%?7?)??tC??p{ ?@?,??????_???5?lendstream + endobj + 1352 0 obj + 26 + endobj + 1353 0 obj + << + /Length 1386 0 R + /Type /XObject + /Subtype /Image + /Width 39 + /Height 35 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????K?@?m2cg ?mFZ??8H!??B)T???K?P?)?hz?A??COE?`?EDQ + ?wv?????a?;????y??????K??F??B8?+ ??? #$??!??????pT%d~?5???$@~?R"?#$?Hi?? ??J?HDF???4?"V??F?F??--?????Z\U??q@@ + IR??K?????J??7 ?$ + ??????&???z?vj5???? ???*Kp????iv?????vcw?????mk9K?,?cL??f,????~??n??M?u???Y??????h?l? ?? ?ON??N?o?v9Gc?~??3?D:o?=?08?^^]]v??C??[?t"<????b?m???^??????;ZM?Z4RQ4?i????wN{7?O//O?7????i?2??U??8?^???^_??VL???uc|c?l??6???n??1n/c???S???????5?+ endobj + 1354 0 obj + 27 + endobj + 1355 0 obj + << + /Length 1387 0 R + /Type /XObject + /Subtype /Image + /Width 42 + /Height 30 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???]??@?K?w?R?B??[? ??n ?^h)??????b???C???z?sw????9??bB??)??(?f+ #??H+ endobj + 1356 0 obj + 27 + endobj + 1357 0 obj + << + /Length 1388 0 R + /Type /XObject + /Subtype /Image + /Width 42 + /Height 30 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???Kk?@F5?1&M?# ?J4??F-?/T,?((?V??\D????S??t?t????3?0w?u8? ?w?;????(+ endobj + 1358 0 obj + 55 + endobj + 1359 0 obj + << + /Length 1389 0 R + /Type /XObject + /Subtype /Image + /Width 102 + /Height 108 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????WRi?S???A9)??#*`&?G?b?@?k???E??????i(gH???+ ?:?I? ???D??+ y,&??Y|1*W?s? + tE??+??U+?????S??a"a*?'NVh????????Ue(??k?b? + ?($ + ?#D?????Fs n??k?K? + T?aPH! + ??K?????f????V_???d4?h?R> R" *+U???????-??f?????*4?E??????R?%5&K?}t?9?[??Q{??TS?N???????s???>??k???[?Y????????K??#?4+???b{??_?l??gy???f?/???Q??,`q?"?t?(?B??vk??16?r????????C??L`F ????q?????s?S2q???`? Z ??)?v??b}?d????)???r?!?b?)6??]+ |vD ??'A?2U?m^?Sa~?6G???HK???gh???` + -????O at S?32J?J?T*2?i)(?Q?|N????+aF4?+?? RY"? ?x!?????)p!9d??`??. E?y\n ??Q??7???? + ?X?B????????ji???Y?){w?;G??????W> + stream + x???=k?@pM ?EK?"?)?.?Q?? ?.NN??M?fM'??-?E!`???j ?}?v?? + ????$???b?7q^??? ????)??? %L)?s??$p?.?kX??MLi????"?&R?U??? c?!??p??h*??G??Rnu???df?s ?????????r)|?sJ?m?????]{??9{?G???yj???J?????-????|?? ??=???;???r||a? [}k????_??]X????E????#{?_???U??\j????=? ???LG?2?????+ #r?v?%??i?D?S???'?6 ??f???-q?-B?????^[?k*???~Lo1g??7? =]endstream + endobj + 1362 0 obj + 141 + endobj + 1363 0 obj + << + /Length 1391 0 R + /Type /XObject + /Subtype /Image + /Width 233 + /Height 175 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???AK*m??????i?aRgBQB?1?P1r?b@$W?)0$p5?"????"p?m??????|???s:?/?>????.???????G -}j??0,?B?iii?8v ???^%I??%Y?D?'???+ '?b??????t?@C?????u?z?J??o??)9G??zr?8??????z?9??? ???]i??????y?JC??????k7*vR?C?T???\ ??????????xx?iVs)}e?7?????????????????~??? n????F?\?q;^??hh??^?u?93???'t??? + ????z??> ???n?m? + ??+????P??????{|?9??????rj{Y3???!???w???A?i4i??p??Bv'?)"aVP??T=nZv?X?T?i?Z)??e?uU??4?AV??a?????????????TY ??-ZN?ARBz$?0?)??RI#??!E??cR????l???o???k???"????k?)?^%I??%Y?D?'?????r!d????c?b??1???YC??? ?endstream + endobj + 1364 0 obj + 52 + endobj + 1365 0 obj + << + /Length 1392 0 R + /Type /XObject + /Subtype /Image + /Width 138 + /Height 72 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???=k?P`M ?&??"?Q?8*???w''i?????? n?.?8????V?m?J ?B???_x?? ?=????yAD?T$$ + |?'H?d:???l&??Kw?QBQK???JP)???T%!??!?X???????????w?[????b???Xm??hj?? b???1?5?E?F8?????????????|?!??hi/??a?~????T??bX????????x$?a?nl?x?S???j?m??]??+??q??F??&??F??Z?? _???5lj + "??V??????????WS?dH@??$  H@??$  H?-ae???????#;?Xvv??????2????Z?3>?;?t^?=??z??5????c7**}>F???%}?E!}?E?b????v??????]A???`7 ???????a?&?b>+ endobj + 1366 0 obj + 52 + endobj + 1367 0 obj + << + /Length 1393 0 R + /Type /XObject + /Subtype /Image + /Width 138 + /Height 72 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????kq???????{???=??????P?4ce???????#f??3?????{'<?y??????,++ ?` ?` ?` ?` ?` ?` ?` ?` ?????:{6tv???c??Q????w-(o?L?A??br? ??????^??Y??0:/??c?N??yu{?[k?/?z??PH????zN?????v|???F ?qNE?o?????b?????VS?;?g?:??]?8????? + ?[ ????O.?)?orp??BPendstream + endobj + 1368 0 obj + 27 + endobj + 1369 0 obj + << + /Length 1394 0 R + /Type /XObject + /Subtype /Image + /Width 42 + /Height 30 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????k?P?K??\'Y?0T,?+t$A a}1?}?(?AQ?"????v???>???????????sR?G??*?0 '+ B???5#H??0???u{??tl??1 I????e?a;}o8?=#f???w??.?, ?frR??v???^??^Ln?^?8???8??r?r??*???7D?????Xe?gH?bR??T[???????????????"???????x???q??`9??5??33?=??=???Q????????Q???#>+ endobj + 1370 0 obj + 34 + endobj + 1371 0 obj + << + /Length 1395 0 R + /Type /XObject + /Subtype /Image + /Width 67 + /Height 57 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????OR}?????/????L?e??1h%+1I????JIYj{?a???M?2??YZ??_{?p?????lO?????7???~????S?a?eD????o?N !?D"?? ???????yy?i??????;?|?wz???"h[?g#???'QU???????x> \>W???@?.3!F?Ra?H?1^????/??X????\0j?"L?????0?#????Vop|jqm{?+bo{mqj??G????3?'4?cm?????U??Mv???I??cr??Zu???+ endobj + 1372 0 obj + 55 + endobj + 1373 0 obj + << + /Length 1396 0 R + /Type /XObject + /Subtype /Image + /Width 102 + /Height 108 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????[Ri?U??6"?)?#??1?F??????A?l??@;???)?(f2?f?$:????"I??m? H?4]????^?????f-?g}???I????????????t?<???5???????|jTD??????=6:?r????{???w??|??Z??g??xb?A??RF?> + stream + x????SRy??&?s8r@??B7?0Q?4"1Q??34BH? ?%)?rb? N???w??1???V??????MWm?????`?|??^??y?EE?]0)????'Id2?B)>$?'?LBQg?)T+ RI'#hO?2Z?^O?0?k?????:-F???ND?tV?\o?{???Hll?Xl$ z?f???E'??? + ?#T,n?ql*????LL?G?n?A)?0('#+ ???\-? *??? ????9=?`?7:2?????H?7?y?6?T?V`??????\VD{?[&?)5u&??q??+??70?w?????hGLu?LT?e? ??j?MP?T???7[?^???? + ?|?\W-???B??9&?????px??Zk0!mXd??Zb2h????{>W?P???3\j4??47^2?.(?B???0!_ + ??"ST??:?V]????@8K + ?v?????s?TrN$?s?LlHD?Y?X? V.?? ?gJ???R??+ endobj + 1376 0 obj + 48 + endobj + 1377 0 obj + << + /Length 1398 0 R + /Type /XObject + /Subtype /Image + /Width 121 + /Height 72 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????K?`+ A\??M}u??N??FP0? + ?7?HD?mVo???:?e??_?65 ?????{???>l?9?~H?O??l?????????a '???j??,4?L????????Z??=???r?Fg?v??br/n??5E??Yl??n-??? ?ZNZ??V??}y + ?a ??d? "??^??q? [g"Wu ??\?:??X??QtCK ?? + ?ycf?????????0?! aC??0?! aC???6??f?f??f=?f????6{?u??????}?ko??????????}???V?L??4?O,}?>?m??M????5?M?&_?{???d?%???h+?????0????u???Q???mw)???8 ?P}???z?L?X???7:h[t???5?????k?v????9???_?endstream + endobj + 1378 0 obj + 52 + endobj + 1379 0 obj + << + /Length 1399 0 R + /Type /XObject + /Subtype /Image + /Width 138 + /Height 72 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????kq??6????S?qz??? + a?k??S?YP[DS"d$+?~L??????y???????w???;???;?E???????????/??????B?R??M??s?8???D??+ ?z???3??????,/$?????i.???? I{C1a9?]?> + stream + x???OK*Q??g??fL? Eeta??????"??M?!??Y)-\ H? m#?D-?@? ????????7p?y??????9++??&???????;i#?y?*(?n??u??qN?=??:??]??M]S??P+?BF?d?m??w$4p?=?m[??????k?????d??l9???ptCB???{????\2?_??P)3 5??u???? M'?k???k3???z?h8????????f?????s`S?7TV??r?u?'??g??>L??I?^??U? ?%??F?l0???/?$?2?MG??v??MhK(???il???.n???_?????^???n.z???????*????+ endobj + 1382 0 obj + 631 + endobj + 1383 0 obj + 706 + endobj + 1384 0 obj + << + /Length 1401 0 R + /Length1 12520 + /Filter /FlateDecode + >> + stream + x??Zy|T?????u???e????2?HHHH???%? &@???? + ? + ??$hEl?2???E[?hE?? + ??g_?V????;!@??????9??m???????;a???# + ?f,ln??Z??????%?'?)^?~!j???? ???+ ?? c?E???B"??"t=???}??^('????u??O??s?'???????N????2??Z?????>?????cQ?D2J?U??&????q8?r</???f"??~z5c???*tZ 8?N?????o??RQK?7b?????v????ZW'??fq&?'??i?????;I=y??N????+?}? ??+ (?\?g?iN?3???????9?Me0????????B2a?0??b? n?????]V6???>?[?<3??B?5Lup? ???&~??D???????. t???\P?z?A?vwc??;??(m|#:?9?????}????~??+?lz??#?>+?wS? }?!e?hhZ ????????J?t?r??|??4zI?r?rO%U?J?$I)?jzL???j???Q??L"U?jO?#93Sm????dK?????????]???r]h4j?iH7??i\$JQurP?@?????d?H?&?? + 2?&?>r|??h????R????l?I????JV(?41??&?D???k?FOJj??xQ#Z?(@H?B.;???J ???B???? + ??????4???2Ou?qG?n?w{V???j????~???q/???`7]9??I ????????? ??V?w + pi????????Of?32 #??r6Vj?p????`5R3?B0j8M???$??:??|?5{? N???????Y??d?zA.X}?? ?;7'?UwI??c??e?????????S y??;_??:????+????B?"`???Q + U????c%?|?d?|wb?m??'?p?,?S?????4 L + ?lf??&Mr? c???`z??d??~E??o5gd? ? +  ??N}??? ????4w??.S{?*?????d dj????r???????+ ? ?1?\0????}+?{U(g?#????g?i=????I??? ? N";?F?o?h?????@.z???rh ?????&?3??N???????+?C????|??+1G???????????20)??(3???is???d?????7??c?t%????B???l??7*? ~?*??|?l?L??J-6?YJh??e3?,??D???J?aMu@???+ < ??dR g? y at b???)`F?D???'?r??H??????n????o)1??????9?1??-se(0.?=??????d? ???TJs?|???.?}B?????oA<???w??1????{T? ?-?,}A??N>?gm&Nn??????'?K???7[#X?D??O??D\= #??i%?????9#???:?ad??J????C??#?&w??@?5?? ??q??w?3'??????a???_??^????KpBO??????=O??? ????+8?*8?!?gh??I{a?J?????v???$?wZ?J???X??*KR?????'? + $%???[z??T ?>?!1?C??1?+ J?v 2?+ ?? ???:B5]?.Y?y??G?c?M? + <X?a?C?R?hL,?'??e7h?5???T;=+?.??'j%H? ?i?|????>q?E/???_g??WA39\??qh????3m4?V???4?? ??? ?>?????EI???%I?????-? >5??uU?r?b?? ?;[?ik??????^?R???w?U??F??&5??)?I(??y?~?(???;?~!?e.?o?^{??l @H?????K??_??z?Sh)+ ??? + ~k??hH??)1???????qm??:?M)?5B??2Hz?R? yIx+???!t ?p~??A?S??D?3??a???(?u.?? _?-????<&%?i??dU?N???c + ?"_???X???c/?????FQ?U?w???h?#?_X?C????u??U- ?Z????,?!?kA-?|??+???)J?Kx??QA???=?2T?*?7A??q????????%w???dT??FS?4?AcS#?R.????L???? =?Bs??h?u???D?vC:?????kx??q!??Cgv??2??v???????lF + ?%6?)??6)~??D?S?????d??@`?? ?v?VH??(1?xw?=?q ?!/??7>d??A????"?9N?#4?~n?Z(?q????g???c?????"?ov?86?#xk?c???96?oKm??????.??,?BW???s@?]!?#/?????wd?#?8?kP???????J???> + >> endobj + 1270 0 obj << + /D [1268 0 R /FitH 784.0631] + >> endobj + 895 0 obj << + /D [1268 0 R /FitH 633.4444] + >> endobj + 896 0 obj << + /D [1268 0 R /FitH 251.9048] + >> endobj + 1267 0 obj << + /Font << /F47 676 0 R /F15 679 0 R /F57 691 0 R >> + /XObject << /Im9 1245 0 R /Im10 1246 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 1404 0 obj << + /Length 2955 + /Filter /FlateDecode + >> + stream + x??]s?????Bo?fN @+ :c?wk??LI???c?D??U1?@??X??? ~g??@ Y??????????D??%???l???y @?????!#dI?#????????????N?_q???C?????gP?`X??U?c????'??B ??O????V)????*J???x???^??4?d?Z?u + @???PZH? 2?????!1;W2???&P|?;???7v???w~6??$??'XZ3!????H???"?q???mN>??????yR??B.?????R;?????x?F"3?XBy?$?????ed|?W?,U?Pd/????;q?t??????>??????^??4?Y6\t<"OP$??h?=?3?,??????u???=K??|?N??????.??Z?]???qC?Qi????\Td?9?@??D???X??!????|???ES?t????????? ?9??]????p~%8?=s??????w?6F!??{?g????af???t???y ??(.??w???'o)?J??b?n?]?EY$`rp?-MA#t?5?n?>,??6]*???%T???????E??q??,?? ;??"? {^?"???On??~?P??(??]G??? w\F#? ?Qx+ ?C???? |????'R3?m??"~4?????rN??? + K;?[&vtv?ki?z????h??;?a?M???XHg:=???v?TnF,?:?uA(?l+%z|mSVi??J?/z;;??LYz?+ ???^????o?x?????3s?#@g???`L??t??=4??\?:? .????$?ZS?+T??R?? + }?d??[??.?,t8????:?)?7oL???J*?`?????????bgQX+???1R$?"+ ??????/K??J?sdj??:$;?IS??h????`S?4?;i?h'm???????@G?*??Q??]??oo~??b?????P????`}?l?V|???? ????? ??p=L?U??=??!??B??????ON?]??}?w?&???K?"??Y???? ? ??m????q;??pU?GhYe??;?vx?? ? B`?|D??D?????????w=?????L?z?@????0{??&????/?$?I~ ???]? ????????????5p?s?K"d!?5W???????S?????fi?ZU??}h!"??L=?????????4?U|S??????0??oz??{v?^O?6 ??`???lT?? iL???e???#?????_??d?endstream + endobj + 1403 0 obj << + /Type /Page + /Contents 1404 0 R + /Resources 1402 0 R + /MediaBox [0 0 595.2757 841.8898] + /Parent 1110 0 R + /Annots [ 1406 0 R 1407 0 R ] + >> endobj + 1406 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [422.2636 417.8172 429.7107 429.4969] + /Subtype /Link + /A << /S /GoTo /D (chapter.524) >> + >> endobj + 1407 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [103.4035 406.3844 116.3051 415.4023] + /Subtype /Link + /A << /S /GoTo /D (chapter.524) >> + >> endobj + 1405 0 obj << + /D [1403 0 R /FitH 784.0631] + >> endobj + 38 0 obj << + /D [1403 0 R /FitH 699.5899] + >> endobj + 42 0 obj << + /D [1403 0 R /FitH 388.5928] + >> endobj + 1402 0 obj << + /Font << /F47 676 0 R /F15 679 0 R /F26 624 0 R /F49 683 0 R /F14 634 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 1410 0 obj << + /Length 2267 + /Filter /FlateDecode + >> + stream + x??Z?s?? ?_???35+~?????vz????L_???8??il?,'????+ ?$???V?m?x-?*)???V???????V@??M?i??WxnD?0U[F^n?y???p???rK??? ?R?%<+ ???????(?]?r]?|?????.q??a???8?FV?????7c????(? S?Oo?]?3B??B???~w?^??g???+ " ??s?i Lt??????G?zAo??%?u?*?1 l, + 6v??m ??*3r+m?D.?P5]2????B??d??X9?X???Q??????????????b?7^^??]?? @|::n??c?Vv??JQ?F??M?] J6??U?L~`???A???{??"????]H'????M??u(D5?CJ??????/???_?T)Z?S???.?? x?N3?@$?2?9?6?X?g2??+?????Dsr)%??p?X?(?? F9????\ Wr(??A??Sx? + +5B?v.??l?C?4K]???Z#??.???b\?K?'?P??>??!^??,???s???????U????t?i???}=???U???X?4?f?" &????&Ml?]t??????????N?f?B&?p?,&??J?Mr2?C??xu?J5C_w???"?????X3y?Cw?8??D?}7??v'??? z@??P?.\???P?????|='p??? ????m?}????'e???+ j??^? + ?o???u5??w???%`?Iendstream + endobj + 1409 0 obj << + /Type /Page + /Contents 1410 0 R + /Resources 1408 0 R + /MediaBox [0 0 595.2757 841.8898] + /Parent 1415 0 R + /Annots [ 1412 0 R 1413 0 R 1414 0 R ] + >> endobj + 1412 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [200.4631 521.6844 216.3864 533.364] + /Subtype /Link + /A << /S /GoTo /D (figure.13) >> + >> endobj + 1413 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [235.4514 220.0649 251.3747 231.7446] + /Subtype /Link + /A << /S /GoTo /D (lstlisting.51) >> + >> endobj + 1414 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [263.1105 152.3189 270.5576 163.9986] + /Subtype /Link + /A << /S /GoTo /D (chapter.524) >> + >> endobj + 1411 0 obj << + /D [1409 0 R /FitH 784.0631] + >> endobj + 46 0 obj << + /D [1409 0 R /FitH 758.5513] + >> endobj + 50 0 obj << + /D [1409 0 R /FitH 598.9522] + >> endobj + 54 0 obj << + /D [1409 0 R /FitH 301.3411] + >> endobj + 58 0 obj << + /D [1409 0 R /FitH 143.4385] + >> endobj + 1408 0 obj << + /Font << /F47 676 0 R /F15 679 0 R /F26 624 0 R /F49 683 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 1419 0 obj << + /Length 3114 + /Filter /FlateDecode + >> + stream + x??Z[o+?~???????K?"H?$Mp???>$A?c????,G???????]?$;???].??~s%Wr&?'gR?V?f>?V8-gW? 1????2O33aj??(4>?V*i???|e?m?'??????E???s?-?6?FLQ??Y/t???f???=??T???B?????=1??I???l?z ?????Y.%8??dERx^` ?(a??? ?Y??????d??q???%h?d??e?R!??[q?V'"?:??Jp?pV x???=XG??)NT??^??? #w????&,???M???0 ??????Y??ff|?D???S?D?t????+ ??2?0c???`l?reI?2?*??%#?y?GDu:?Y?i?)Z7??a)?1N???F?ye$v?? z???v??EY!????2?f???22?????H???Z0~-?;?g$??N??J?zed???=?????}q? + ????? ???j??V??S.??bliGO?T?*(???????L??)N?ny?D?i?=?B^??~?u"xNbdj,, %??@?0a@??9??{?UcuR?9+ r?????AZ????G1^??)???O????J?J???U????.??????v?:L???4?o??%]V-???e?3^}??*??SC??-u9?T????#?#?rv???t???????&?????-?bO?? + ????=i?L????OOI??Uz???n?S??,??^Q??-oV? |q?C7k??z?-??-??TkU?o3VY?{J???,??2?4Z?@??>?L??G Y?X"???????-t????O? ? ?J)??P?@?rJ7???*]?}+ ????????????vs?M?qv??}??o? ?n + ?&?:?_??1?Z?;6 ??qd???V???ij?s6?~ps?v?#?{????????D?W??\????????>l??S???foJDa?????L????O?????\9YOcH?+ ??|?fA?}???0??? + ? JJ?+??P/??? ??L`??J?[D{,>???1"5W??????K???]??^q?ZJ]J?J??!?P?m?%|l??@7?=5L?q????}?r` la,?9U:??S???+ endobj + 1418 0 obj << + /Type /Page + /Contents 1419 0 R + /Resources 1417 0 R + /MediaBox [0 0 595.2757 841.8898] + /Parent 1415 0 R + /Annots [ 1453 0 R 1454 0 R ] + >> endobj + 1453 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [141.072 340.3403 156.9953 352.3254] + /Subtype /Link + /A << /S /GoTo /D (lstlisting.51) >> + >> endobj + 1454 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [139.9375 218.4956 155.8608 230.1753] + /Subtype /Link + /A << /S /GoTo /D (lstlisting.51) >> + >> endobj + 1420 0 obj << + /D [1418 0 R /FitH 784.0631] + >> endobj + 1416 0 obj << + /D [1418 0 R /FitH 758.5513] + >> endobj + 1421 0 obj << + /D [1418 0 R /FitH 758.9497] + >> endobj + 1422 0 obj << + /D [1418 0 R /FitH 747.5924] + >> endobj + 1423 0 obj << + /D [1418 0 R /FitH 736.235] + >> endobj + 1424 0 obj << + /D [1418 0 R /FitH 724.8776] + >> endobj + 1425 0 obj << + /D [1418 0 R /FitH 713.5203] + >> endobj + 1426 0 obj << + /D [1418 0 R /FitH 702.1629] + >> endobj + 1427 0 obj << + /D [1418 0 R /FitH 690.8055] + >> endobj + 1428 0 obj << + /D [1418 0 R /FitH 679.4481] + >> endobj + 1429 0 obj << + /D [1418 0 R /FitH 668.0908] + >> endobj + 1430 0 obj << + /D [1418 0 R /FitH 656.7334] + >> endobj + 1431 0 obj << + /D [1418 0 R /FitH 645.376] + >> endobj + 1432 0 obj << + /D [1418 0 R /FitH 634.0186] + >> endobj + 1433 0 obj << + /D [1418 0 R /FitH 622.6613] + >> endobj + 1434 0 obj << + /D [1418 0 R /FitH 611.3039] + >> endobj + 1435 0 obj << + /D [1418 0 R /FitH 599.9465] + >> endobj + 1436 0 obj << + /D [1418 0 R /FitH 588.5891] + >> endobj + 1437 0 obj << + /D [1418 0 R /FitH 577.2318] + >> endobj + 1438 0 obj << + /D [1418 0 R /FitH 565.8744] + >> endobj + 1439 0 obj << + /D [1418 0 R /FitH 554.517] + >> endobj + 1440 0 obj << + /D [1418 0 R /FitH 543.1597] + >> endobj + 1441 0 obj << + /D [1418 0 R /FitH 531.8023] + >> endobj + 1442 0 obj << + /D [1418 0 R /FitH 520.4449] + >> endobj + 1443 0 obj << + /D [1418 0 R /FitH 509.0875] + >> endobj + 1444 0 obj << + /D [1418 0 R /FitH 497.7302] + >> endobj + 1445 0 obj << + /D [1418 0 R /FitH 486.3728] + >> endobj + 1446 0 obj << + /D [1418 0 R /FitH 475.0154] + >> endobj + 1447 0 obj << + /D [1418 0 R /FitH 463.658] + >> endobj + 1448 0 obj << + /D [1418 0 R /FitH 452.3007] + >> endobj + 1449 0 obj << + /D [1418 0 R /FitH 440.9433] + >> endobj + 1450 0 obj << + /D [1418 0 R /FitH 429.5859] + >> endobj + 1451 0 obj << + /D [1418 0 R /FitH 418.2285] + >> endobj + 1452 0 obj << + /D [1418 0 R /FitH 406.8712] + >> endobj + 62 0 obj << + /D [1418 0 R /FitH 291.9348] + >> endobj + 1417 0 obj << + /Font << /F47 676 0 R /F15 679 0 R /F49 683 0 R /F57 691 0 R /F14 634 0 R /F11 1255 0 R /F63 764 0 R /F26 624 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 1457 0 obj << + /Length 2992 + /Filter /FlateDecode + >> + stream + x??[m?#5?>?"B:?H??? ??`'b????p|??0?I?$???~?=U?;?i'av??-(?nwu?\.W=U?U#???HI+L?a???5?/???/?v?2??;j??-??A(?#?}y}???????2???mw(?????o~y?Q????3~?[z??py?o??b????W_]?#6?i??{>5?Z?i???RMW?!;K???Z ???a?h*?T?Ve?????????0?_?~?I?n@????~B3z?)T?X?+-??M?????????,?o/?+}Z?jQ??k/???z?DmY?_<`A????i??????u_?w????}9?esX??t?M?w??s???D??D??oU???*?????u6??d??x??f?`??7???i?g????n|?????=???n????????!X ?^D1O??*?it????? i?dD+ ?o??????Y??$??d??\?????)??????J?pn>?+?L???9R???W?T,???R?L?z??]?_+c??)??+ ??P5?;??\:ao??p2?z?`?????&k???=????n?W??T??????b=?e{V?>/???Yv3>??|?On&$7???????; kXX?x?G5\C???N??+ ]KF?}GPf????????X? ??????))? ?<?'??+ L???gs?Z???f??M?]??d?????;? 4???/?A?????A?(??,}?c ?3P?2?n???(j?%?P?+ ???I?=U1H??V?Gi?{D????????\? Y??Am??r<p[????I??3?????B?|??w?????_?u9?2?B?d????{?:-qk^]???s?s?c??%?\??)> endobj + 1468 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [393.1433 492.9792 409.0666 504.6589] + /Subtype /Link + /A << /S /GoTo /D (section.532) >> + >> endobj + 1458 0 obj << + /D [1456 0 R /FitH 784.0631] + >> endobj + 66 0 obj << + /D [1456 0 R /FitH 719.62] + >> endobj + 1459 0 obj << + /D [1456 0 R /FitH 623.9536] + >> endobj + 1460 0 obj << + /D [1456 0 R /FitH 623.9536] + >> endobj + 1461 0 obj << + /D [1456 0 R /FitH 612.5963] + >> endobj + 1462 0 obj << + /D [1456 0 R /FitH 601.2389] + >> endobj + 1463 0 obj << + /D [1456 0 R /FitH 589.8815] + >> endobj + 1464 0 obj << + /D [1456 0 R /FitH 578.5242] + >> endobj + 1465 0 obj << + /D [1456 0 R /FitH 567.1668] + >> endobj + 1466 0 obj << + /D [1456 0 R /FitH 555.8094] + >> endobj + 1467 0 obj << + /D [1456 0 R /FitH 544.452] + >> endobj + 1469 0 obj << + /D [1456 0 R /FitH 471.9224] + >> endobj + 1470 0 obj << + /D [1456 0 R /FitH 474.0387] + >> endobj + 1471 0 obj << + /D [1456 0 R /FitH 462.6813] + >> endobj + 1472 0 obj << + /D [1456 0 R /FitH 451.3239] + >> endobj + 1473 0 obj << + /D [1456 0 R /FitH 439.9665] + >> endobj + 1474 0 obj << + /D [1456 0 R /FitH 417.2518] + >> endobj + 1475 0 obj << + /D [1456 0 R /FitH 325.3277] + >> endobj + 1476 0 obj << + /D [1456 0 R /FitH 327.444] + >> endobj + 1477 0 obj << + /D [1456 0 R /FitH 241.3651] + >> endobj + 1478 0 obj << + /D [1456 0 R /FitH 243.4814] + >> endobj + 1479 0 obj << + /D [1456 0 R /FitH 232.124] + >> endobj + 1480 0 obj << + /D [1456 0 R /FitH 220.7667] + >> endobj + 1481 0 obj << + /D [1456 0 R /FitH 209.4093] + >> endobj + 1482 0 obj << + /D [1456 0 R /FitH 198.0519] + >> endobj + 1483 0 obj << + /D [1456 0 R /FitH 186.6945] + >> endobj + 1484 0 obj << + /D [1456 0 R /FitH 175.3372] + >> endobj + 1485 0 obj << + /D [1456 0 R /FitH 163.9798] + >> endobj + 1486 0 obj << + /D [1456 0 R /FitH 152.6224] + >> endobj + 1487 0 obj << + /D [1456 0 R /FitH 141.2651] + >> endobj + 1488 0 obj << + /D [1456 0 R /FitH 129.9077] + >> endobj + 1489 0 obj << + /D [1456 0 R /FitH 118.5503] + >> endobj + 1490 0 obj << + /D [1456 0 R /FitH 107.1929] + >> endobj + 1491 0 obj << + /D [1456 0 R /FitH 95.8356] + >> endobj + 1455 0 obj << + /Font << /F47 676 0 R /F15 679 0 R /F26 624 0 R /F63 764 0 R /F57 691 0 R /F14 634 0 R /F11 1255 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 1494 0 obj << + /Length 3848 + /Filter /FlateDecode + >> + stream + x??\?o?????P?D|?}?\?@?:E#IK???(Y?E*?l??}?/????C%qTC?=??fg??3??#??1\3?9??J?N?N???y"2?3?[????s?3!] ??/N>?R;?g?1zq?? + p??????O/'b|1??R??pI???8??? ?g??^|}??E??+ #K??~?g????%?c???z1?nk#?/Jg?.??[???Qq?????^A#??,?l? + ???R??2?0^?p?U2??????4???t?????ql?P?|?b&?0???Uv?mh?X??n?????f;?Ss?u?ym?ad???`??v]?????vw?5???u????L?d???$???6??G?TE}???? ??????^?2??d+ )?$,NVA?v???? ????d???1?Z??B?? c?N-3?,QX$A?EvA?p}?A?q6J y?' 9?? %.?y#[P?-?Y@?q7?bMIqJ?9??|)@?4k)q??????k?(inf??????c?f?`??=???iU?,??????i?5 J??Z5d?5?&?GX? "?M????5=???Ag??H?????5?Y????Du??:?b?Q??Q%?s?m?H??????38T?;f?5M%?qH*?`C%?E??+ ??^??????#b??s&~I4?|??S)?????? 7????Pb?Kq?????uc??x???i??(?E??8?P + ??X];???????E-??2=#-?>??????!8??p??f?1?E???9?3???`? ?????2?,bKz?M> endobj + 1496 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [294.8714 730.9306 310.7947 742.6103] + /Subtype /Link + /A << /S /GoTo /D (lstlisting.51) >> + >> endobj + 1497 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [506.3922 676.7338 522.3155 688.4135] + /Subtype /Link + /A << /S /GoTo /D (lstlisting.95) >> + >> endobj + 1495 0 obj << + /D [1493 0 R /FitH 784.0631] + >> endobj + 1498 0 obj << + /D [1493 0 R /FitH 655.677] + >> endobj + 1499 0 obj << + /D [1493 0 R /FitH 657.7933] + >> endobj + 1500 0 obj << + /D [1493 0 R /FitH 646.4359] + >> endobj + 1501 0 obj << + /D [1493 0 R /FitH 635.0785] + >> endobj + 1502 0 obj << + /D [1493 0 R /FitH 623.7212] + >> endobj + 1503 0 obj << + /D [1493 0 R /FitH 612.3638] + >> endobj + 1504 0 obj << + /D [1493 0 R /FitH 601.0064] + >> endobj + 1505 0 obj << + /D [1493 0 R /FitH 578.2917] + >> endobj + 1506 0 obj << + /D [1493 0 R /FitH 566.9343] + >> endobj + 1507 0 obj << + /D [1493 0 R /FitH 555.5769] + >> endobj + 1508 0 obj << + /D [1493 0 R /FitH 544.2195] + >> endobj + 1509 0 obj << + /D [1493 0 R /FitH 532.8622] + >> endobj + 1510 0 obj << + /D [1493 0 R /FitH 521.5048] + >> endobj + 1511 0 obj << + /D [1493 0 R /FitH 510.1474] + >> endobj + 1512 0 obj << + /D [1493 0 R /FitH 498.79] + >> endobj + 1513 0 obj << + /D [1493 0 R /FitH 487.4327] + >> endobj + 1514 0 obj << + /D [1493 0 R /FitH 464.7179] + >> endobj + 1515 0 obj << + /D [1493 0 R /FitH 453.3606] + >> endobj + 1516 0 obj << + /D [1493 0 R /FitH 350.6667] + >> endobj + 1517 0 obj << + /D [1493 0 R /FitH 350.6667] + >> endobj + 1518 0 obj << + /D [1493 0 R /FitH 339.3093] + >> endobj + 1519 0 obj << + /D [1493 0 R /FitH 327.952] + >> endobj + 1520 0 obj << + /D [1493 0 R /FitH 316.5946] + >> endobj + 1521 0 obj << + /D [1493 0 R /FitH 305.2372] + >> endobj + 1522 0 obj << + /D [1493 0 R /FitH 293.8799] + >> endobj + 1523 0 obj << + /D [1493 0 R /FitH 282.5225] + >> endobj + 1524 0 obj << + /D [1493 0 R /FitH 271.1651] + >> endobj + 1525 0 obj << + /D [1493 0 R /FitH 259.8077] + >> endobj + 1526 0 obj << + /D [1493 0 R /FitH 248.4504] + >> endobj + 1527 0 obj << + /D [1493 0 R /FitH 237.093] + >> endobj + 1528 0 obj << + /D [1493 0 R /FitH 225.7356] + >> endobj + 1529 0 obj << + /D [1493 0 R /FitH 214.3782] + >> endobj + 1530 0 obj << + /D [1493 0 R /FitH 203.0209] + >> endobj + 1531 0 obj << + /D [1493 0 R /FitH 191.6635] + >> endobj + 1532 0 obj << + /D [1493 0 R /FitH 180.3061] + >> endobj + 1492 0 obj << + /Font << /F47 676 0 R /F15 679 0 R /F63 764 0 R /F49 683 0 R /F57 691 0 R /F14 634 0 R /F11 1255 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 1535 0 obj << + /Length 4538 + /Filter /FlateDecode + >> + stream + x??ko???~Q???.?~?H?4H?n??F?! + ??%???~???????=.E9TR??^s??3????? r!?u?a????r??:??p??g2?^3?wm(?(????Gg}aWa?"]9W~???k???[?$?x??!;?p?[??K????+D???h?7???(?`~???*5I?Y??#??>??9? ???3[:?W??????? ?Q?????6n9?Q?x>??4?O?%???V,?w8w?,?/??;??w!?????6???#:??? + ????W??"?lQD; ??z T??E? ????M?????l?y HBT?????7?X?9??MW???????#;X??8a??(Y1S??????h?????&??? iZ?!???4R?`j$$Q. + PI#?`?~?T?i???&?QI?"?\?c06?~{????[~?[?A+ t????X^??|? ',?????????N?+ 7????i???^????i? ?R??????e??? ???? J?O??????6???{??;??8??8?ci??|,M????Gg&???V?? + ??????z?+FVC??!??c??}?Z?????Eh???B? ??????MX>g?? + ???4(?S????`F#6??J?+ ??,??,v?5 ??RQ8X* + ?'?{R??N,?+ ???? ?K?/`?^?\r?7D???O\??????????`???c?:?n(???*?g????(7Q?7h + $X?U?M?n???k??AE??co??r?????????+ 4C??|??J?cO%%X+ ??????+?P?0S? + ?L]"??[=O???'?2?'p*??{T!??5??????[O]ix?$?t?vwZCT5N??.??3 ?????i???????`????P??J???'F`.(?7?sru?KU[=B?gku?1Fmz?i-N\.q*&'???-fG??'?=?J?/7?$??1????<H#m?v??,??.??o#?w=??U?t?E??q??b?????=gnk9z?????s???yD?1??P6i???y1*??BB??m?E??J???AB???aG?B??q?Qv???r??[???"?d&???O??lte^a??M:?$/????N???i??&? P??%??b??j???5?k ?{?@?/l?? s??????1l] T???1?"?#Cg?cC[?!=????zf=?X+ ??6u?G?2}???w?+ endobj + 1534 0 obj << + /Type /Page + /Contents 1535 0 R + /Resources 1533 0 R + /MediaBox [0 0 595.2757 841.8898] + /Parent 1415 0 R + /Annots [ 1537 0 R 1566 0 R 1567 0 R ] + >> endobj + 1537 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [324.9966 717.3814 340.9199 729.0611] + /Subtype /Link + /A << /S /GoTo /D (lstlisting.153) >> + >> endobj + 1566 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [153.1906 259.9841 169.1139 271.6638] + /Subtype /Link + /A << /S /GoTo /D (lstlisting.153) >> + >> endobj + 1567 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [484.9106 192.2381 500.8339 203.9178] + /Subtype /Link + /A << /S /GoTo /D (lstlisting.51) >> + >> endobj + 1536 0 obj << + /D [1534 0 R /FitH 784.0631] + >> endobj + 1538 0 obj << + /D [1534 0 R /FitH 709.8738] + >> endobj + 1539 0 obj << + /D [1534 0 R /FitH 711.9901] + >> endobj + 1540 0 obj << + /D [1534 0 R /FitH 700.6327] + >> endobj + 1541 0 obj << + /D [1534 0 R /FitH 689.2753] + >> endobj + 1542 0 obj << + /D [1534 0 R /FitH 677.9179] + >> endobj + 1543 0 obj << + /D [1534 0 R /FitH 666.5606] + >> endobj + 1544 0 obj << + /D [1534 0 R /FitH 655.2032] + >> endobj + 1545 0 obj << + /D [1534 0 R /FitH 632.4884] + >> endobj + 1546 0 obj << + /D [1534 0 R /FitH 621.1311] + >> endobj + 1547 0 obj << + /D [1534 0 R /FitH 609.7737] + >> endobj + 1548 0 obj << + /D [1534 0 R /FitH 598.4163] + >> endobj + 1549 0 obj << + /D [1534 0 R /FitH 587.059] + >> endobj + 1550 0 obj << + /D [1534 0 R /FitH 575.7016] + >> endobj + 1551 0 obj << + /D [1534 0 R /FitH 564.3442] + >> endobj + 1552 0 obj << + /D [1534 0 R /FitH 552.9868] + >> endobj + 1553 0 obj << + /D [1534 0 R /FitH 541.6295] + >> endobj + 1554 0 obj << + /D [1534 0 R /FitH 518.9147] + >> endobj + 1555 0 obj << + /D [1534 0 R /FitH 507.5573] + >> endobj + 1556 0 obj << + /D [1534 0 R /FitH 418.2114] + >> endobj + 1557 0 obj << + /D [1534 0 R /FitH 420.3277] + >> endobj + 1558 0 obj << + /D [1534 0 R /FitH 408.9704] + >> endobj + 1559 0 obj << + /D [1534 0 R /FitH 397.613] + >> endobj + 1560 0 obj << + /D [1534 0 R /FitH 386.2556] + >> endobj + 1561 0 obj << + /D [1534 0 R /FitH 374.8982] + >> endobj + 1562 0 obj << + /D [1534 0 R /FitH 363.5409] + >> endobj + 1563 0 obj << + /D [1534 0 R /FitH 352.1835] + >> endobj + 1564 0 obj << + /D [1534 0 R /FitH 340.8261] + >> endobj + 1565 0 obj << + /D [1534 0 R /FitH 329.4687] + >> endobj + 1533 0 obj << + /Font << /F47 676 0 R /F15 679 0 R /F63 764 0 R /F34 940 0 R /F57 691 0 R /F14 634 0 R /F11 1255 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 1571 0 obj << + /Length 2456 + /Filter /FlateDecode + >> + stream + x??Z[o??~?_??2?Ux?H?-M?"E????y????+??x??j{????px???R?bS????pn????k?T-?5kmT?Z?????????/+?Al???)??D + mL?????f??Zi?_[f???.g8?????c????W?W)e?; ?q{??????>?????&rl???L$:%?"j???X?????C???????????7?f\??L????V??V?t??>~b??]1??i????jn??a%??Ucu?y\???I???&-ZZ?jP?&???V?a+]7V(??'??+???????!???????#?t???s?B????^mD?d*C??7????_?<?(???K?D?.??????]e?a??+ 7?GAadIi?jx"???L????~?x|???+ B ?J?IC~??Qz??????o?Xa8?4??E???kw(??yUj???3g??'?? \?=??k?'?s????ww~????y??????yH??{???[)d?hbT?l???????+????\???@?:z7IY???;?i(??????dJ???-?????????H??-M????D?=f????*??#4^,.,?Wq??"?O?w?AH???U???!?3?????????x???????J???@????W??H??????3!)?>???0xz{?~?Lp/?1?? e?D???z3??Q??MT??!u?w?QI???@!?n??o??|???M+]?g?P?y!??Z?F.p ?E?3r?????AA?y??????=u?"!??c????.?.YLO?A.?????pA`??? ,?????b??h$??p??m + ?vb?:]4zZ?eZ?@8?=[ GB???HO??S ?.$??o+ ??Z!?va?8??~?D?s??XG??~??So?Xp?Mx?g??"? ??a??????pr??B} ??6o-??J}?]???"V?zv??V??R?]??g?!kI?????m=rk?8?RO?U?}8{????>+ endobj + 1570 0 obj << + /Type /Page + /Contents 1571 0 R + /Resources 1569 0 R + /MediaBox [0 0 595.2757 841.8898] + /Parent 1415 0 R + /Annots [ 1573 0 R 1574 0 R 1575 0 R 1576 0 R 1577 0 R 1578 0 R ] + >> endobj + 1568 0 obj << + /Type /XObject + /Subtype /Form + /FormType 1 + /PTEX.FileName (../Graphics/BigPicture_CFG_Example.pdf) + /PTEX.PageNumber 1 + /PTEX.InfoDict 1579 0 R + /Matrix [1.00000000 0.00000000 0.00000000 1.00000000 0.00000000 0.00000000] + /BBox [0.00000000 0.00000000 398.00000000 477.00000000] + /Resources << + /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] + /ColorSpace << + /Cs2 1580 0 R + /Cs1 1581 0 R + >>/Font << /F2.0 1582 0 R/F1.0 1583 0 R>> + /XObject << + /Im4 1584 0 R + /Im2 1585 0 R + /Im5 1586 0 R + /Im6 1587 0 R + /Im1 1588 0 R + /Im3 1589 0 R + /Im7 1590 0 R + >>>> + /Length 1591 0 R + /Filter /FlateDecode + >> + stream + x??ZKo????????~?+ 9??-??R??.?l?Gl??&H???d??mOODXRz?E???naoi?l??5?/???@?I?G;??"??A?,q????P????????Sgu2?j? ? &???c?#?sScn;?g ?9;?Z???????j?oY??\br??3?\?????Z?8+?tj????g??-????iD7h????????FR\??X??}og???3i???$???}? ???/??=S?dS8??3?????w??DDo?R?????#??y?#O,?ZX?%5n?=kf?B?h???????????iD??]m? ?;??%??DFF?SA O??F?`5?|kxD574?a??6S?????|?p?`??I??????i.GD?????|h?????T*???X??????????p T?????A????7???p ????(m?k???RS?VF??y?4?C(???B?Sm?B??\??X1 ??$??6n.K? ??' + QJ??$??V\v?`?~?????S??XdF?r???R?nhD?J?(*????h?5??K???H? + J?? ?&N\%|?5?y??)F?Y?2v\??x??D? ??"???oO??Ejd!??4?[8?"???PE??ME????qbOu??S??$?8?K???Wd}???\r#45?/???>1o????Q? \c-Rd?????5?p?7????R??$?r?Z}??#??x?fu???N??r???????T??e?E`U? + M?o6?&+?I??)??%??r?4???? +???J?$??xL?k?3?@?2????????xp??-??Ba?Q?????\N?S!. + QH]c9??? + ??\?V?????V:, G?a_?7R??X;???}??????,k?8$O??????}?Xg??spy????O??,??&??:???p?=??2?`??c?*?:??????r'??E??q??W?????X??2???%?????L???yZ?]??N?8??"?\rk> + endobj + 1580 0 obj + [/ICCBased 1592 0 R] + endobj + 1581 0 obj + [/ICCBased 1593 0 R] + endobj + 1582 0 obj + << + /Type /Font + /Subtype /TrueType + /BaseFont /ZTIXUI#2BHelvetica-Bold + /FontDescriptor 1594 0 R + /Widths 1595 0 R + /FirstChar 32 + /LastChar 119 + /Encoding /MacRomanEncoding + >> + endobj + 1583 0 obj + << + /Type /Font + /Subtype /TrueType + /BaseFont /DOMORZ#2BHelvetica + /FontDescriptor 1596 0 R + /Widths 1597 0 R + /FirstChar 32 + /LastChar 114 + /Encoding /MacRomanEncoding + >> + endobj + 1584 0 obj + << + /Length 1598 0 R + /Type /XObject + /Subtype /Image + /Width 114 + /Height 66 + /ColorSpace 1580 0 R + /SMask 1599 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 1585 0 obj + << + /Length 1600 0 R + /Type /XObject + /Subtype /Image + /Width 143 + /Height 74 + /ColorSpace 1580 0 R + /SMask 1601 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 1586 0 obj + << + /Length 1602 0 R + /Type /XObject + /Subtype /Image + /Width 97 + /Height 50 + /ColorSpace 1580 0 R + /SMask 1603 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 1587 0 obj + << + /Length 1604 0 R + /Type /XObject + /Subtype /Image + /Width 122 + /Height 58 + /ColorSpace 1580 0 R + /SMask 1605 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 1588 0 obj + << + /Length 1606 0 R + /Type /XObject + /Subtype /Image + /Width 104 + /Height 58 + /ColorSpace 1580 0 R + /SMask 1607 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????+ endobj + 1589 0 obj + << + /Length 1608 0 R + /Type /XObject + /Subtype /Image + /Width 114 + /Height 58 + /ColorSpace 1580 0 R + /SMask 1609 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x??? + endobj + 1590 0 obj + << + /Length 1610 0 R + /Type /XObject + /Subtype /Image + /Width 114 + /Height 58 + /ColorSpace 1580 0 R + /SMask 1611 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x??? + endobj + 1591 0 obj + 3132 + endobj + 1592 0 obj + << + /Length 1612 0 R + /N 3 + /Alternate /DeviceRGB + /Filter /FlateDecode + >> + stream + x?}?OHQ???%B?e&R?N?W?`???o???k??????????n%B?.A?1?X?I:??b]"?(????73?????7?3????{@](m?z?y???(?;>??7P?A+?Xf$?v?lqd?}????????] ?U???????x????iO:???b??M??1?W?g?>??q?[ + ?2?M?'?"()Y'??ld4?????2??'&??Sg^???}8??&????w????,? \V:k???;?i?R;;\??u????V?????\???\?C9?u?(J?I????]????BS?s_ QP5??Fz?????G?%?t{3qW?D?0vz ?? \}\?+ ?????4?I?????x#?{z?wA??j}????????Q????=??8?m??? + ?(?o{1?c??d5?U???g??t????la??i"??\.5???????^?8tph0?k?!?~D? ?T?hd????6??????:>f??&?m?????x?A4????L?&????%???k???i??????Cq????m?&/?By#???%i??'?W??:?Xl?Err?'?=_???)?i7??????,?F|?N?????6?rm?^?? ???U?HW?????5;?????hendstream + endobj + 1593 0 obj + << + /Length 1613 0 R + /N 1 + /Alternate /DeviceGray + /Filter /FlateDecode + >> + stream + x??SMkQ?3V??*??t??E?0~,????i?c??A???d????$??U7nD?n@?.?pQ?FQ(?_??~?(t)?????*?????????????u?uM?Y?/ + ?L?j?;??d??T?s3??B?m??t??????? ??????|????]?HR?O?k?,px\sE?????f?!:t|????04Vj?U??0????????????a???K?#??kIzE???~??u??0?-????9?R????eL???c?? V??t????B?????r=M?????Q???qN???`????> + endobj + 1595 0 obj + [ 278 722 722 722 722 722 722 722 333 333 722 584 722 722 722 722 556 722 556 722 722 722 722 722 722 722 722 722 584 584 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 556 722 556 611 556 611 556 333 722 722 722 278 556 278 889 611 611 611 722 389 556 333 611 722 778] + endobj + 1596 0 obj + << + /Type /FontDescriptor + /Ascent 770 + /CapHeight 727 + /Descent -230 + /Flags 32 + /FontBBox [ -195 -444 1446 1207] + /FontName /DOMORZ#2BHelvetica + /ItalicAngle 0 + /StemV 0 + /MaxWidth 1500 + /XHeight 531 + /FontFile2 1615 0 R + >> + endobj + 1597 0 obj + [ 278 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 556 556 556 556 556 556 556 556 722 722 722 722 584 584 584 722 722 722 667 722 722 667 722 722 722 278 722 722 722 722 722 722 722 722 722 722 611 722 722 722 667 667 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 222 722 722 722 722 722 722 722 333] + endobj + 1598 0 obj + 45 + endobj + 1599 0 obj + << + /Length 1616 0 R + /Type /XObject + /Subtype /Image + /Width 114 + /Height 66 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????K?`?k?Gs????X?4D???P0P6?.?b4?Q? ??*)??n?,?f?? ? A A#%??????:?\??'????/?y?????c?'0:??.? #??(?C????!?n%?8 at la??P??????`8A?')??v?v:?I;I???}#?Q?6A?nf???x<^ ???Y?MS6?UB0f%?\ ;????? O??!t????????]??n??:?m?K??5???u?!?k?o????n?w?rhh???qh???g4u?0??*???[????+ endobj + 1600 0 obj + 53 + endobj + 1601 0 obj + << + /Length 1617 0 R + /Type /XObject + /Subtype /Image + /Width 143 + /Height 74 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????Ka?????|???%i?%?]??(,??(??2??13{a?V?????? + V??!Dd?-???#[?????%???v????> + stream + x????KZa??\????iG-I3-?????e?.AQh?AE?????Z???E???MC??[?m+G??_??2?`?v???<_??????????g?"@?D?o? A0??a?F??Rz{BP???<??b??+????p???'Eb??XD?#?|c?t???r???He???R?RY?(?I D?+ ?/;??????????????Gfb?[??5?n ?k?2???x?b[?????|??%?x][???u???:?F?cw?u??_53??L??%j~?:? ?????{K&??????i?=@0> + stream + x????Oi?e????A`8R`??r?Z*kukm?E? ?????mR%jT6?4?V4??%???M? wkV6?5?k;???&??>??}?K????}yy?;?hRS??BF(????0?z?3?#L???8.x8?FQB???FyQ6? B,??F,"??|c1O?i?ds??D???R??($I?T?????? 8[M?Q '? + u?V?7?L&3HL&?Q_^V?*?p6??b?`&???2?u??V??fk+ endobj + 1606 0 obj + 40 + endobj + 1607 0 obj + << + /Length 1620 0 R + /Type /XObject + /Subtype /Image + /Width 104 + /Height 58 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????OR{????] ??%S????:?e?(??b????[??N???????Q~a?9?5?0K???_??k?n}l??????y?9;?> + stream + x????O?h?gi????dEC?S?)?VY??HP6]????!?????(;???8?$7?9p?&?f??,Aq????(???,y?K??~n>??6?#??T + P S@?mt>86x?l??%?y?1p?w??B4??+ endobj + 1610 0 obj + 42 + endobj + 1611 0 obj + << + /Length 1622 0 R + /Type /XObject + /Subtype /Image + /Width 114 + /Height 58 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????OY??e``+ ??%e!??X??s??5?S?>h?l<<?,B???idr?'?????'???O?6J5?v?x(?x????e??}?????????xa?0^????1????O}????72?>6"??????s??#???Q???K??sA_??R?'6?&s??Tdi}???mV_)mVH????N??V?esy??c>?}????:???#cq'W?-]3?xr3? rE???n&??????R?????Q)?k????/?J??Jg+ L??????!??l?*0!?U.;?CVH??S???;?U=??|#??~g??p??T?!?q??EP)???l??rt????+??nGW???NKHQ??>????????5?????*$z??????#5 + ????Ri?T`2?ZK64Q?j2?????:?R?U???\???r? $r)V)?s??}'???`?@??1 ?v?&? ?0?>[?2????+ endobj + 1612 0 obj + 706 + endobj + 1613 0 obj + 631 + endobj + 1614 0 obj + << + /Length 1623 0 R + /Length1 9800 + /Filter /FlateDecode + >> + stream + x??Z xT??^?????[??V??$X?j?[?~?*??+" + ??Z s??s&?n???}?_gg??_g?????Zk?+ ??5f h?#?!~??+ Czfc?-?????&?;?P?>????vg? + ????Jf&6? X?Ukq?ZY3?C????C?Z?bT)&E???7??????#,0?]? ??}?q?lyF?g?gX:1?Re? ??r2qW?-???C?Bbu??z??=t?????r/q?t???y?sn:?c???8E??P??B???????? ??q?! ?`?lhQ?6??b?' [2???( ????+.Fn??K?I?~???????p9?aY?##?y?"?h6|S4D*??"R!????` `???"|?????a?u?)PnY]R/???L???S ?P??A????Y?????s?=,????;B??k?% ??W\???? '??2/?t?????????b?y?/5?Z?????n???6o?mS????t?|?????o???9??????+?T?)&??l??]&????o??W;?\~lL^?T?\?W}*??v ?h.???KL??@j) [g?????????2?X.,}%}!?%??T{?; !???|???7??r3S???????d? ?i4:d???Q'??;??????l ?!?c?????,GA^????????]?"?;???Ji\ZHv??,F?`&???zv?Y???+ &???M? ?l"3?P4a8(r?c?????T??U?????C|?p? ??`?? ?P???^a*c?3T? /#u(T2bT????????0???9$}&??$}N???+ ?M?>??)??Y?X`???6?L??e,?8??dlh(GlJ??????d?O?YN?![ ?nI??S????:???????????.70 ??[?d???f?k'????\?>5?U? + &d??E???? N??z?(?08:6??0x?Xv??Ord?Gcx??h???@P??9C6Y??:O?fY-???????? + ???%?U?&?KN-*D?2S%????U?&w??~rf???y}?IiT]????o?F????k: ]?\????t?/?)????3?? ???wN?*?^??Ry_??????????t???1?????:/?J????u?????!0????W?7???o?????Z7S?d?G???N!y???$2vRD9??g???? 0Y-?/9???? + ?Z`?????h??????[????Hb???-)k??????[og?I?}-I#???????X??? ?F?_?????[?????g + Q?nH????l????D?`m7-6???1??0?bU9(?q????\?M??3<??h? ??(N??]^U???? + ??Q?k,??????}PeE??2]?BM?? ?"U?????+ ?Z`??V?? + d?S@?g?:Vd<(????|?(?M???"???? ??7?Z?t??T-??????3?iN??DO5A??N?0?f?? S???LC?nA\?L?j?-?ZqC??0K?Tt????.?JJ???"??"??+ ???/???e??>??x?F=??????W?2???=????V?9?:?,??.???z??????K???f?+ j"?(l$?Kz?M?n?1i|@:??p???# ?????e????1?N?"?) VV?8???"5(/7 }8yL????o?}?f?A?4-%?u?B?? ??????k??E?????>??q?0????x?????t(??5<8?O? + ?@??i???$?0B,XJB??s???!r??k????9?*V6vq7???????lP?????????`??:n?L???.?6h(?K???,?????t??!mQN?????????e?????????Y??S'5-(l??Bm???93?#???{????????,?? ?n?R??Q?b1:N!%?]?X???S??P???-??S.?Q?w:?/^?????]??he?w???{ ?C?????'J'??$?}p ?9|$?L???={?????8;??Vb?*????>?n???8?NU???-??s?/????a??~???PQ?v?KUlt:]a2??jG?~U ?*????a? + , at R??/?O+???u???????l???)????n?I,??^??wxx???E?d??g?}U?hl]??u????o???>???m?? ???3k&~?N?^??X?=}?5????_?w?u?5???????a?[3?}x??W=?*????v?o??o?j????????d5?d??Z-???n??[????????Z?e????%mU?????endstream + endobj + 1615 0 obj + << + /Length 1624 0 R + /Length1 8840 + /Filter /FlateDecode + >> + stream + x??Yy|T?????????d?Y???d? ????"B6? + H?$??`? ?ZQ?? + ??? fA?>H]jk???]?`??n??O 3?;?M@?????O?????e?=?{?{?<@+ ?j6??????????>&$|0?Vm???]????3?? + ?W?N|????l??$??!?!???????8??7??????[???D???ZCR???B7=???A2?Df?T??u?>?????6V??a??'?Ln>??{????? ?U1?K???s?w??p;???$?+?6 ???\)??IX? ????? ??'X????A?~??&?X??2?J??b????v?Q?;???K?d? ???*??A?%?5?VdR???gd?8I3e0B3I??pIq??>?? ?????1??|F(+ ?e?&??~????_?p%?\!#\??C?????s??_?p q;]Ax?? ??????????_?p?|???-?9?g]??r;? d??????d?SPe????8?|?1?Z%f!X$???o?32f???Jf?.???B%PZ*?SNv????R???^??p???A?v?h?????Ov??&???6 X)%? )??P?-7???Ru???????t?t('{?>$k=??z?n??g??????d?(??(Sl???2?&?z?? ?`???hS?^'2?????O08 ??|?Jc?SR???i???o??????X?{`???vfU?/??x$?F???????8i?+?????I?w???`?|)?? ???0??]G$ b?????X^?%??J- 5?n?JK????6L? yz?~??=?g?????_,?.+s?a?? O@??,?+??????lkmq3??J?,wZ????r?"@??)q??b?{||?QS`?U??X?}bQ???8o?{Q??*W??!??? Q? ? ?YS1Ri(.?S? + ?)?%?????|?N \^???PJ?????p?BC)N(,????D??"??kHLU???g?s????l???k??*?+[??????I(?????O????js? ?bA????[??t??h?rfOwl??,?*?:T(W ?@}??????(?fe[???>?Q$??(?9? 3O?V?u% + b3l?YA^?^n8?X`????`??aL?am??+ e? ?'?'?A + ????b??\c?g?Uq?~nf??s??n}???B?S?gN?Y?!??]:|L?)%2???:?????f???6_?0 ??h??APq*?'?*A??L??*??"J[? ?E7h?eS q7???)?g????? ?? ??K??h?D5&b + ??+??K#????@????|?lj>??_?*??????P?`U????????.UY?C?M?H?M?_>2?G???g? ?>t?F??????k??p?,%?d?8^?O%?#?J?$0?R??*!/p?z)M??$?MpM??:??R?????Y???R?_O?lI??x:?h ?\?~?>3?[3??W???A???9????E ??? ???\??PnJ?84?c??}??????{?5dy3 + ???q?s??>??!?A?Wz??h???????M#???X?v6Im??$7X?qA?9?|t?"?????E?'JK???CO???????????.w??+?.?? ????????a?|??L????Y?Q:]\?????iI?z?=?L??:[??D.?0~X???????'??R?~?????9 B??s??9{kze??X2??C9??^R????tIQ&?oE? D?Kj?? + #?s ???"m_`???????3+Z???Q+?9(??I?B?????a?p???? q}Q[Kx?+6????????????wpw??l???c?1??Hj2???$QR?n?JPQ)??M??!??m+ ?p2??R?t?y?X40~zM???4?M??Co?????/?LX5?? B?J > + >> endobj + 1574 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [145.8175 513.753 153.2645 525.4326] + /Subtype /Link + /A << /S /GoTo /D (chapter.380) >> + >> endobj + 1575 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [106.4252 434.5741 135.0795 443.9302] + /Subtype /Link + /A << /S /GoTo /D (cite.Cooper-Torczon04) >> + >> endobj + 1576 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [156.1156 434.5741 189.9078 443.9302] + /Subtype /Link + /A << /S /GoTo /D (cite.Much98) >> + >> endobj + 1577 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [138.2508 110.1021 154.1741 121.7817] + /Subtype /Link + /A << /S /GoTo /D (figure.182) >> + >> endobj + 1578 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [436.4162 110.1021 460.8158 121.7817] + /Subtype /Link + /A << /S /GoTo /D (lstlisting.86) >> + >> endobj + 1572 0 obj << + /D [1570 0 R /FitH 784.0631] + >> endobj + 70 0 obj << + /D [1570 0 R /FitH 722.6841] + >> endobj + 897 0 obj << + /D [1570 0 R /FitH 161.4948] + >> endobj + 1569 0 obj << + /Font << /F47 676 0 R /F15 679 0 R /F63 764 0 R /F26 624 0 R /F57 691 0 R >> + /XObject << /Im11 1568 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 1630 0 obj << + /Length 2631 + /Filter /FlateDecode + >> + stream + x??ZKoG??W?H???????Yg?]X@?h??K???????W?????(2 gj????]?? |?????na????|q~{?Wx?? OHl!;g?n?[?V??? e??????????g?/?.kR?c?????o????|yu??R.??[z?????????i?l?b????????+?u" ??????????0???7<` + B?'??Nio3???????????+m?4K`UKC?????4L"??4{G?vK????[\??????U8?&dW?d.??]92?+ ? + ?$%i??,m??????PM???o?X??E??*6?2?? + E????ks?:)4??????R??;oP??$?? + ??r????G??KI?)??? Si?#QMG?}?? 2?? + ?>?Z+???`?~)+ [% |}?B?(?A??x?g?D?????9D.aO!m?D???C???0?+ ????????\?f?W??C??SL??It)?N???a%(???[??$ + ?!I??+J?3??v(???? ??t?rply6?? ??'=??m??Iy?K + $&?o7?%+?:v?n?/M? ??}?I?????(?l??+U!G'?L?5?(F?aNH??I?? D?U???0A??}??? 4.???????q9O??X'jPbk:??:?? W?N0W:?E???_?~??p??Bk???? ???? F?+??!,?o??? ??;?XN(WM?-?|????T1(??????%???|?_s';?endstream + endobj + 1629 0 obj << + /Type /Page + /Contents 1630 0 R + /Resources 1628 0 R + /MediaBox [0 0 595.2757 841.8898] + /Parent 1638 0 R + /Annots [ 1632 0 R 1633 0 R ] + >> endobj + 1627 0 obj << + /Type /XObject + /Subtype /Form + /FormType 1 + /PTEX.FileName (../Graphics/BigPicture_CFG_visit.pdf) + /PTEX.PageNumber 1 + /PTEX.InfoDict 1639 0 R + /Matrix [1.00000000 0.00000000 0.00000000 1.00000000 0.00000000 0.00000000] + /BBox [0.00000000 0.00000000 505.00000000 532.00000000] + /Resources << + /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] + /ColorSpace << + /Cs2 1640 0 R + /Cs1 1641 0 R + >>/Font << /F2.0 1642 0 R/F1.0 1643 0 R>> + /XObject << + /Im22 1644 0 R + /Im21 1645 0 R + /Im31 1646 0 R + /Im25 1647 0 R + /Im17 1648 0 R + /Im30 1649 0 R + /Im29 1650 0 R + /Im20 1651 0 R + /Im10 1652 0 R + /Im24 1653 0 R + /Im18 1654 0 R + /Im8 1655 0 R + /Im4 1656 0 R + /Im6 1657 0 R + /Im11 1658 0 R + /Im5 1659 0 R + /Im12 1660 0 R + /Im19 1661 0 R + /Im28 1662 0 R + /Im23 1663 0 R + /Im27 1664 0 R + /Im15 1665 0 R + /Im1 1666 0 R + /Im7 1667 0 R + /Im3 1668 0 R + /Im9 1669 0 R + /Im2 1670 0 R + /Im26 1671 0 R + /Im14 1672 0 R + /Im16 1673 0 R + /Im13 1674 0 R + >>>> + /Length 1675 0 R + /Filter /FlateDecode + >> + stream + x??}M?$?????"?????or???F?????ZG_???'?%[????x@@??????#?z^$?$ A???????????????????????????????o????O?^?????????????%????m1?Kv????e?????????????Is?|?????(?PC?@(}??z??Q?????.?r???:???s',?b???AZ??>??}yHb??????BK??v'][t?3]J$*???K?9,??;B7 S????_c??l2?K?1?E????!$=+ ?X?????q???k??r?~)l??>o????n????>?????~?????_a1???aa???d./?G??gj????nw#?D????Id?E?????`??? ?f|????_Z/????4R(v%C??&J?ol??K??)???X?tW?????Yd?Oy ?$??u?????[R?????k(???????{???~?-L ?a???}?<m??:I?????)?M????3-?b??!X?]???????9?c? ?EiX F???????a?I=?????l?t?jP?fJ? ???+ ]7O??^??n????c?y?,?[,6E?im`C????z$m?N/?k5w??o??@??????_%c|??P?Z???6????FZ!H?~?D?e'?4?HR????`My? [????D,?&f???/m?UPc -.????hX????D?EO??0? m?!?Y8??L?>???V?!?A?hy??V?????O'I?????\ ?oh{?o????o??~?????O?????/?7????7?????M???|%???s?????????~??????r?Mi{w?????_?X + $Z(?]?/?:?+ d Hl????hPO{]$:??.?[[Y ??2?? ,O?Ay?X?$Ta?n???NT6? ???4??A???N?f??ZTD?Yt??>? + #?`??N5???n? /??????????6?Q??<9'??GQ,?IH?(??-T&???4?2??H???=??????Lh???+m??4??E?? + ?f??P + ??jU"5 ??ZF???g? EF??LT???#V????L?P??ub???? )*??fQY??F???G??????PJ??????y?]??Y????Ps`Q??????p|t????q??S?+-???X???*=?H??MAr!s??2?6??????|???????4L:??5 j?ZT??ik??I[?? ???2I?7???H9?S??6Jfb???4O????????^??Qk?[A*??T?)?#????5i?? Y??I? %?4?Q??h??{i4?T(?~ ??h#??Iv??1??Q??bH#???p{?3E?????2h?d? ? ??P???/????@?? + phk'???????1????????S?X&?y??en???m??6??3 + uL ????6s?????[???I"????@???????^%b}r ??D?c5 ?C?pS/???=o? 0i?T + ?F9TO???7??v?H? M??:0i(r&?"?.`?$????A??;?????@e6xU0??r???c?c6?e???c?P??0????0&2???5?4????4???U8???@A?0???c?Pg??bc ??s0?"??^?????????WO?`|???VcZ?F,???j???T?em2?qt!f???1??_=zkP??{h4????vg?0 + Y[??5??q1???XI??T?ZT??3?[U?&>????'?;????*i??%?x3??Vi?h??S???i????????7?d????s?}???/[????\?Dn??C?O Q???8??,???4Ej??(?0??M???.?n???{????S??x?D~?5(V?+?n? x; u?>?????;?F??^c??- + ?+c H??5??7??y??????|??V>??-w?U',0???x????4J[??????xS?.?7V=w???#?@??iN0fy??I???-b?V???g??>????C{??'_??,?????XN?#????N????Y?.??????s?????C???+????_|?H?fSB???gC???PE?????|?sbs=? + CY???????N?:$Sa????c?Li$??L|??W??\???????? ??QL$?ZtI ???S????D????zvV?/c?c8i?4o"????pv???3?? ??Ii??????qD?D????c8???PPe?WE:??e} ?GO??hE {?????_???? + ????????>??/N??oD?v.=?-h?WA????l??-x???eB?O'-,Z?1?y????????|?Z + ???8>? ?S?????$j??:??mQrNW?q?? $TKGr???????o??{@?R?:???=???]??????dr?.N?Q?1`???C5?L??b}'??????????(?i???[???`P>^??%eel??}?r(G?X??6?A V6?W? ??T + ?5??N?????gs?_?N8?C??4&????66%??Swn ??S??w?}X??w=???X>Y?5to?? + ?/C? 1??P9????t???'%mW{??Q o???.??$??_gQ?H??*???F"??M???& ??!?8????!MB??P?\??a?j???B?h?_?vV?/??p? ?q?yXP?%8EGYJcu)?iM0??? ? ?!NJ?H1??3?PB K%??Sa?8n??E?%P$?YP??9LJ#?`W?0?{I??7?v????,?f?\|,6%%$ ?ot???}?DN1^[?z~?M7,m??.b?kg?C?DV??7^???(?'%????I??Iw??d?ZDo?B??;P?g???H?+???P??7d??P?????R?X?h????7E????}?4???g?h???p9X?)??v?????????o + ?>Z?,???X?y???`-????(?"?XE?EX?3A??EP??"??4??B??????? + ??1X?6]?????J???ZH??h????"???{j;^??lmp?o??7?[_?cs?????p'??????y?X?l?&z2id?R?I8kT??i?R f?TEWL??m???F?*??RM?D?&?,?IL ?I?? j?T??~>??j???Cb??~?R[?;$?M?j??ibZ#??9?*??T?D??G?O??F??FV?&????????TMb?D???t&?-?0?m?T????H??Nl??'??"O??????Q?'??z_???j??????;M??@&??=P? *GF,???@?>???LaW???H??B{???6?q??@K?????eP?????h?@?*?g$??K? n???????C???q>?T?%?????JEP[{5? `?a?J??o????????jX~?????)????Q)?e???R???A??q?o-?????-?s?????o? ?k7{?? ?4X ??? ??E???0????\!????3?*jw8???Y??`Es??????(u??%T? + ?????+ .#??+ ???to?"?g??0??c??+? + ??84???p?uUHY?s????Z???UYN?6?????Bqq?5?_??J1!Ql](W??????hg(?o?}? #??????????X ??E??????w???j??t??u???N>????j?R??{>fE??eq???J??z???A?Fn9H?Vh?kR ?3F?r??rn?Gg?p + ?F"???? j??????=$?s??iSP??f??d?)?S2?P?????????????y`f>?#?O?X ??u\???7???%?9|??????*:?D?->Q$?#?????y?8??E?0??%E??????$?G?%?? K*????~>???)6??????????Sn&?B?~m?;k{???B? ?U1???|?)v-^?_?(+ ???{??hg??H???l?????/?,`7?)?E=R???t??s:??h???[???tNV"?@Pc+ ????Kz?HE???G?d$:$?D?K?S?????&>^B??????gL???gL??3?M0)*??GD"?b???!? &?/??8?????!?$?Iy]-?I0YT??|$ g$:$??????$??c???Y?c0/*??w????S?h???E???x?k???gLfU?C?W?$??j????????h????/>zD~$?^YQ>{??3?\=?(QU?;?2??UQ|???G??|?_??I???Z|H?R%R??/??@?^0?m???????? ??1??????*????O?????b???L??????&~8!????G1?D?0?????V?t ?4???@?JdW??v?=????!??A=??TC?X7m.?Y??? + c0E"c ?w?J???1*lo????MiZcB???;>????, ?E?Y?`he? + ]?"?? ??>????4~?J + J?YW??L ?3?1]vO???R????'*~?US?????u'???N??f~n],????178???Z?Z??[?w(?]o?B1h?????????*????/8d?b???P?LO4?G???E"????j?i??u@?v?`]????Y???A)?y0??S??>?Jt??z~V?B|?4???Y?d;?AQ(?oR ???P??\+F g??!?ex;?k?6ka;#?? ???C ?.$\~??R4?+ endobj + 1639 0 obj + << + /Author (Jakob Praher) + /CreationDate (D:20060818093200Z) + /Creator (OmniGraffle 4.1.1) + /ModDate (D:20070409120500Z) + /Producer (Mac OS X 10.4.9 Quartz PDFContext) + /Title (BigPicture_CFG_visit.graffle) + >> + endobj + 1640 0 obj + [/ICCBased 1676 0 R] + endobj + 1641 0 obj + [/ICCBased 1677 0 R] + endobj + 1642 0 obj + << + /Type /Font + /Subtype /TrueType + /BaseFont /NTTNDD#2BVerdana + /FontDescriptor 1678 0 R + /Widths 1679 0 R + /FirstChar 40 + /LastChar 51 + /Encoding /MacRomanEncoding + >> + endobj + 1643 0 obj + << + /Type /Font + /Subtype /TrueType + /BaseFont /VRMACN#2BHelvetica + /FontDescriptor 1680 0 R + /Widths 1681 0 R + /FirstChar 32 + /LastChar 119 + /Encoding /MacRomanEncoding + >> + endobj + 1644 0 obj + << + /Length 1682 0 R + /Type /XObject + /Subtype /Image + /Width 72 + /Height 44 + /ColorSpace 1640 0 R + /SMask 1683 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x??? + endobj + 1645 0 obj + << + /Length 1684 0 R + /Type /XObject + /Subtype /Image + /Width 73 + /Height 44 + /ColorSpace 1640 0 R + /SMask 1685 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ ??+ endobj + 1646 0 obj + << + /Length 1686 0 R + /Type /XObject + /Subtype /Image + /Width 93 + /Height 54 + /ColorSpace 1640 0 R + /SMask 1687 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 1647 0 obj + << + /Length 1688 0 R + /Type /XObject + /Subtype /Image + /Width 73 + /Height 44 + /ColorSpace 1640 0 R + /SMask 1689 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ ??+ endobj + 1648 0 obj + << + /Length 1690 0 R + /Type /XObject + /Subtype /Image + /Width 73 + /Height 44 + /ColorSpace 1640 0 R + /SMask 1691 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ ??+ endobj + 1649 0 obj + << + /Length 1692 0 R + /Type /XObject + /Subtype /Image + /Width 93 + /Height 54 + /ColorSpace 1640 0 R + /SMask 1693 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 1650 0 obj + << + /Length 1694 0 R + /Type /XObject + /Subtype /Image + /Width 93 + /Height 54 + /ColorSpace 1640 0 R + /SMask 1695 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 1651 0 obj + << + /Length 1696 0 R + /Type /XObject + /Subtype /Image + /Width 73 + /Height 44 + /ColorSpace 1640 0 R + /SMask 1697 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ ??+ endobj + 1652 0 obj + << + /Length 1698 0 R + /Type /XObject + /Subtype /Image + /Width 48 + /Height 44 + /ColorSpace 1640 0 R + /SMask 1699 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 1653 0 obj + << + /Length 1700 0 R + /Type /XObject + /Subtype /Image + /Width 73 + /Height 44 + /ColorSpace 1640 0 R + /SMask 1701 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ ??+ endobj + 1654 0 obj + << + /Length 1702 0 R + /Type /XObject + /Subtype /Image + /Width 74 + /Height 45 + /ColorSpace 1640 0 R + /SMask 1703 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x??? + endobj + 1655 0 obj + << + /Length 1704 0 R + /Type /XObject + /Subtype /Image + /Width 93 + /Height 54 + /ColorSpace 1640 0 R + /SMask 1705 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 1656 0 obj + << + /Length 1706 0 R + /Type /XObject + /Subtype /Image + /Width 93 + /Height 54 + /ColorSpace 1640 0 R + /SMask 1707 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 1657 0 obj + << + /Length 1708 0 R + /Type /XObject + /Subtype /Image + /Width 92 + /Height 53 + /ColorSpace 1640 0 R + /SMask 1709 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x??? + endobj + 1658 0 obj + << + /Length 1710 0 R + /Type /XObject + /Subtype /Image + /Width 48 + /Height 44 + /ColorSpace 1640 0 R + /SMask 1711 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 1659 0 obj + << + /Length 1712 0 R + /Type /XObject + /Subtype /Image + /Width 92 + /Height 53 + /ColorSpace 1640 0 R + /SMask 1713 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x??? + endobj + 1660 0 obj + << + /Length 1714 0 R + /Type /XObject + /Subtype /Image + /Width 73 + /Height 49 + /ColorSpace 1640 0 R + /SMask 1715 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 1661 0 obj + << + /Length 1716 0 R + /Type /XObject + /Subtype /Image + /Width 73 + /Height 44 + /ColorSpace 1640 0 R + /SMask 1717 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ ??+ endobj + 1662 0 obj + << + /Length 1718 0 R + /Type /XObject + /Subtype /Image + /Width 93 + /Height 54 + /ColorSpace 1640 0 R + /SMask 1719 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 1663 0 obj + << + /Length 1720 0 R + /Type /XObject + /Subtype /Image + /Width 73 + /Height 44 + /ColorSpace 1640 0 R + /SMask 1721 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ ??+ endobj + 1664 0 obj + << + /Length 1722 0 R + /Type /XObject + /Subtype /Image + /Width 73 + /Height 44 + /ColorSpace 1640 0 R + /SMask 1723 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ ??+ endobj + 1665 0 obj + << + /Length 1724 0 R + /Type /XObject + /Subtype /Image + /Width 72 + /Height 44 + /ColorSpace 1640 0 R + /SMask 1725 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x??? + endobj + 1666 0 obj + << + /Length 1726 0 R + /Type /XObject + /Subtype /Image + /Width 163 + /Height 108 + /ColorSpace 1640 0 R + /SMask 1727 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x??? + endobj + 1667 0 obj + << + /Length 1728 0 R + /Type /XObject + /Subtype /Image + /Width 92 + /Height 53 + /ColorSpace 1640 0 R + /SMask 1729 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x??? + endobj + 1668 0 obj + << + /Length 1730 0 R + /Type /XObject + /Subtype /Image + /Width 91 + /Height 53 + /ColorSpace 1640 0 R + /SMask 1731 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????+ endobj + 1669 0 obj + << + /Length 1732 0 R + /Type /XObject + /Subtype /Image + /Width 48 + /Height 44 + /ColorSpace 1640 0 R + /SMask 1733 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 1670 0 obj + << + /Length 1734 0 R + /Type /XObject + /Subtype /Image + /Width 92 + /Height 53 + /ColorSpace 1640 0 R + /SMask 1735 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x??? + endobj + 1671 0 obj + << + /Length 1736 0 R + /Type /XObject + /Subtype /Image + /Width 73 + /Height 44 + /ColorSpace 1640 0 R + /SMask 1737 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ ??+ endobj + 1672 0 obj + << + /Length 1738 0 R + /Type /XObject + /Subtype /Image + /Width 74 + /Height 45 + /ColorSpace 1640 0 R + /SMask 1739 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x??? + endobj + 1673 0 obj + << + /Length 1740 0 R + /Type /XObject + /Subtype /Image + /Width 73 + /Height 44 + /ColorSpace 1640 0 R + /SMask 1741 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ ??+ endobj + 1674 0 obj + << + /Length 1742 0 R + /Type /XObject + /Subtype /Image + /Width 73 + /Height 50 + /ColorSpace 1640 0 R + /SMask 1743 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 1675 0 obj + 10674 + endobj + 1676 0 obj + << + /Length 1744 0 R + /N 3 + /Alternate /DeviceRGB + /Filter /FlateDecode + >> + stream + x?}?OHQ???%B?e&R?N?W?`???o???k??????????n%B?.A?1?X?I:??b]"?(????73?????7?3????{@](m?z?y???(?;>??7P?A+?Xf$?v?lqd?}????????] ?U???????x????iO:???b??M??1?W?g?>??q?[ + ?2?M?'?"()Y'??ld4?????2??'&??Sg^???}8??&????w????,? \V:k???;?i?R;;\??u????V?????\???\?C9?u?(J?I????]????BS?s_ QP5??Fz?????G?%?t{3qW?D?0vz ?? \}\?+ ?????4?I?????x#?{z?wA??j}????????Q????=??8?m??? + ?(?o{1?c??d5?U???g??t????la??i"??\.5???????^?8tph0?k?!?~D? ?T?hd????6??????:>f??&?m?????x?A4????L?&????%???k???i??????Cq????m?&/?By#???%i??'?W??:?Xl?Err?'?=_???)?i7??????,?F|?N?????6?rm?^?? ???U?HW?????5;?????hendstream + endobj + 1677 0 obj + << + /Length 1745 0 R + /N 1 + /Alternate /DeviceGray + /Filter /FlateDecode + >> + stream + x??SMkQ?3V??*??t??E?0~,????i?c??A???d????$??U7nD?n@?.?pQ?FQ(?_??~?(t)?????*?????????????u?uM?Y?/ + ?L?j?;??d??T?s3??B?m??t??????? ??????|????]?HR?O?k?,px\sE?????f?!:t|????04Vj?U??0????????????a???K?#??kIzE???~??u??0?-????9?R????eL???c?? V??t????B?????r=M?????Q???qN???`????> + endobj + 1679 0 obj + [ 454 454 1000 1000 1000 1000 1000 1000 1000 636 636 636] + endobj + 1680 0 obj + << + /Type /FontDescriptor + /Ascent 770 + /CapHeight 727 + /Descent -230 + /Flags 32 + /FontBBox [ -195 -444 1446 1207] + /FontName /VRMACN#2BHelvetica + /ItalicAngle 0 + /StemV 0 + /MaxWidth 1500 + /XHeight 531 + /FontFile2 1747 0 R + >> + endobj + 1681 0 obj + [ 278 722 722 722 722 722 722 722 333 333 722 722 722 722 278 722 722 556 556 556 556 556 556 556 722 722 278 722 722 722 722 722 722 722 667 722 722 722 722 722 722 722 722 722 556 722 722 722 722 722 722 722 611 722 722 722 722 722 722 722 722 722 722 722 722 556 722 722 556 556 722 556 722 222 722 722 222 722 556 556 556 722 333 500 278 556 500 722] + endobj + 1682 0 obj + 32 + endobj + 1683 0 obj + << + /Length 1748 0 R + /Type /XObject + /Subtype /Image + /Width 72 + /Height 44 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????Sy???eVW at pe!?'|??C?S;L'C? + ?3-??/\?????/???@?0? h??Y@FD??0 &?B??+ ????Ls?^?????2?*!????WX?C???????+]%v??@)??Le<?DS???????kn??J??vc}M?3?j???"???!Q?B??]\U??z?aw?#vz{~????^w?-?HB 3??QiHwTz?????? F???n??????h!t??\c?s?5w?????#x???l???7U??Z??O?EP??W?O??B[o???{l??????K/F?[j??ze4{b?E??????SK?{?????n;4?{_[???I????cr???}?{tz?Ux???????o????w??e'?R?x?4GusO`fu;??????#?????????.????'??????>{>?????85?????$D?ry>?z?<??S?|?9????^??+?\?v????mf??q?Y?|?????t??y1&????nw?L/o????a????????O?=?,?3s??!e??h?N.?????s????{?z?$???????"?)6W?????????????l??'???T;,?8 r???2Kj}]C????????k+?/?;??&??9?}6E?<"????????OEA?^?3??hT???/?jo?????bgp???????8?H?e??? %2??j/s{?Z?:?~gd????[?xk+?m&?R? + + e> + stream + x????[i??0?????r?qPE5 E) u=?n&?V?cW??,]????[2|>???+s???+???a?????`???k?O^?y?vv)????^??o??f%?"PP??Y?m???/?l??L????????????gTR?n"Q??j;??=??{??+ 4???A??????'+?mm,=?????x??``? k???V7w?m?i?????????C?,????????}$Gd?????[??B?2|??P?6^??}?????$??>??????????6U?311/t??lT??Udo??;?ta?o?{??Y]y1;9|?????V??]?? ??Wz?????????7?????1wwC?E?$E?@????\?\?m?p?zo?{8Jy?????p???~????@?1BL#?K3U?5w^?????????Y]?????0?"4??????V]??K??bu??Z??V?6Y.B fxB?b?Iq??d).???;H'??a??,+)> + stream + x????Oi?????0? ????PV ??Q`?V[ZQW???U#7;?j#j=\hU<\?F???hR??&J?v???*?6fgh??>??3_f?{????@???wxA??d????^?d???52Y???\?\?@?????j6#?(_? ?"????-F`??b??? ?P?H"?+?*??**?R!?J?????v?tsK0?L]???? ??? + }?NS??K0?{???I+?z???b?q??? + ???l2h+db>?a]?w?I????:????r?;??v??{??l?(?????[YE%"???????eo???H???????|f5ibf_n`B> + stream + x????Oi??2????e??E??U?%?^????T + ?5k[??m??-ac?IE??M???5???EVw????_??m???>g&ON???9????J* ??(?wP?4:@? %???6~?0 & ??R?l???@?N??{h+ EbD"??6 "T??:??? + ?Ry)?R????V??R?T??8,?b??A"???j??`0??`4 :mM?J!A?5Qh ?J?*]}??????<??[??7??j??????+ ????????o;'f???%?{?o-qg????J?????T-'n??b?K??????\????G?9???7WCsS#v??????GT?#TjL?N??\????d[???./???6k1f'$+ BD????{?G?=^???y=?OF?:?k1q13;????$*Mc{??9<2?"YG????a??o???|?Q.$?HU5u&?vO?}?#??t8????.?\_???t? ???U+?(+4?FSK?wg?????????a1h9)?Jc09> + stream + x????WW?f?e??e?" + Y?????????F???D?Hkc)J?6!?M??RS??z????GG{Kc?????? + 9,?z?!?P??(??o?t? ??+ ?????Knwz|??????[dl?.?M ?Z?????H?Lc??,K?????Z`{o????????Q?Ou?i*1? ?E??d?w???????r??z??????4C?e?? $Jn0W???Y ??H9??Y_?p6[??n?g"?0.?\?????o&??M?? >???L?H??????H ~??\???^}I?:??@?0_??,o??????????=??_???|??y??-JU?9g?Z??F?????????7?@`??@?????????R?gP?s#???h????729?riy???W?????????D)???#????um????I?? ????>oOgcE~?2? ?oH*?? ??+ endobj + 1692 0 obj + 37 + endobj + 1693 0 obj + << + /Length 1753 0 R + /Type /XObject + /Subtype /Image + /Width 93 + /Height 54 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????SW?????e??.!jA*???I?5?&X/4?&Zo |??R5?????3*?V??31U???????uimmw??/y????9{??>???uuH?4?ZxL?????L???A? b??rQZ?"f?+ ??R?Lhz?????]??T(???sY\?\[V??????\xa)?????????3W?K?R??O? ?'Q*???pde-??A]????hxz??a?5??q + ????n???iy???v|$?????{[k?S?{e?? ??????????>?&?cK?a?7??i?Xm??#???x?2??zd&????jq&??;=??? ?????%endstream + endobj + 1694 0 obj + 37 + endobj + 1695 0 obj + << + /Length 1754 0 R + /Type /XObject + /Subtype /Image + /Width 93 + /Height 54 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????Oi?????0? ????PV ??Q`?V[ZQW???U#7;?j#j=\hU<\?F???hR??&J?v???*?6fgh??>??3_f?{????@???wxA??d????^?d???52Y???\?\?@?????j6#?(_? ?"????-F`??b??? ?P?H"?+?*??**?R!?J?????v?tsK0?L]???? ??? + }?NS??K0?{???I+?z???b?q??? + ???l2h+db>?a]?w?I????:????r?;??v??{??l?(?????[YE%"???????eo???H???????|f5ibf_n`B> + stream + x????Oi?e`?@`?? x- ??? ??1h??~??n]V@?I?-F%??I???M??????.?5U?-?_????~??q2yr?}???+*??a?+ &???5+ ??`n?5??iim?Y-???R?+ ???p#?1?o????~8????h?(?x??$??zk?k?=1?? ?1;?????h?????+ ?}?.??J)F?????V]S????:?????7??p???z\&?f????\??o??????1O?hd?p:?F?B?r?????x?M???~???????[?%z\???E?S`?\A???U+??+?u?????? ????J???l&?"?l.O(U?uUw ?d?0S???r\)??????G?I??*u*???H?e?T,@??/R*?!> + stream + x????OY?f``??022?EA???\????4???z ??D??QlM???nkT"j??.???h[??5?k;\???v???a2~??3????????EI??T???P*?+ H?yH???Uh?????????[x?8??" ??|TF?i?k ? ???j?:??"d?b*???bL??S????.????m?Z?:?????rB*?B??T??C?R?????????=8Dj???w?,???jB?3? Ph?)u?-???#??)?LR?????~[??????? ?_ at T?k???x????/&???9???m?4V+eB????l+?????z_,.?? ??V???w?l5?q????y?+*??#?WK???P8?K* + mo??g=?????]?|iI???5?bic????a$rt????V|????w?d??a?%??jZ?#O?;{G_?????????sc? ?S<??Es????????I?4?x?????????z ????????v???|=???I? ?6???j???^?k?\S???a4~v?x, + ??n?QK??,?FZ????C?X??O(???f????> + stream + x????SW??ew?,, ( + ?bIP?R?D???h?(k?T%?\?*'?*?0??1i???cb?????u55?]???<??? ??n?????P?]?????~?u???????mZ?6???&G{?^)???'Dx????Z???oko??yK????/?g>wm??s?EbB[T??M??D?v?b???n?G??uV]??????t]??3 G??wD?????n?Z]x??~k5(??EVG????D??g??????$???O?????????????#?}??U9?C????f?3N?P????]?????g???H88?q??%?"?????;:??????]Zv?_?=??o?[??!!?P??P?|c84??bcsk???????_F???j3g+?G????T???N??????/???:???????Wc??|??s$b??R????vsh|2???J????' S?{=???W????<\?e??w??%453?anf*4~????*???b????@??/?5?n ??y,0?d"0>:???i????RE(r4j???j??V?????7???? ????????P]f?&?|v|???#*H"????????k.??C??????]M?5O?? ?Lp??? + ???z?????j{M-%5v????8???!????2???W?Z?k2Z,E?X + ?&?>[E$?a?'Bj??L??:????juThs4?j?2-EJ????? ?d?I%? -i + ?,I,?>H H?5??%?Q ???"?a?b?E?x???(???|??&-??%ZD???+ endobj + 1702 0 obj + 33 + endobj + 1703 0 obj + << + /Length 1758 0 R + /Type /XObject + /Subtype /Image + /Width 74 + /Height 45 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????Sg??Xv?YAW.EQ???#!4T bj?5*q?Xc??I????j?xd?-c??????*??? + ????L?????g????y?oD? + ? + ????_?_R(?k??1`A?? ?? ??\"?C0?????5?y\6a?i\* ?Y\~???H?22?1%Dyl??ZDG ??q ???5)?$?B.?By,:?"&?? ?Z?M}???M??h4d????$">???B?n?X?????c??H?g??o34JY?? ???%?a*??d????WV??:???~\Qr??l???Q|?YQT?%???^V???????IHGG[kKS]e?5/]%q?pQ??????U ??>?????!?=:24????QV??????????(u??UM??????YRf????_:?J???X????????;]?????????D,-?{3??u:?M:e ?/???F)?yE????9???? R?WW????WX ??H62!??^????ix`??Gs!??dT? {W????9::??qea????? %???&:???6G?{vic??8+ ??X?J??c?k?g+?Rh??m???S'HE<?F?8 8h?T??9?d? C??????r B???b???Dz4????2??? ?qx(???29 ?$&???b? ?:?L??$?xL??J?,??+??"!?X??&?p??S4??`??"E???????endstream + endobj + 1704 0 obj + 37 + endobj + 1705 0 obj + << + /Length 1759 0 R + /Type /XObject + /Subtype /Image + /Width 93 + /Height 54 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????3y?%??l?6?l???? FD?!?'?R*?e?JQZE??*wQ?T?V??V'??m6?i?p???L???????d?????@?P1h4@???4?b3?@?? &?0 ?!?]??R??`?.??L+ ???Cf??????lm#Nk???????9F?J?"0p"?+ 2??(??????38:1?v?? ?y9>??j?c?6?e(?~*???,??[???o?=;?YXxC??gnfb?QS?5]? ???9??"????????????7H?n??????{?YzU8? ??4?'V?????????????]?||??8;????K?? + X??|???ko~21????xD?????w?????4?e???i\j~M??{a????c?}?Zz5?j(6i#B8'r???5iu??g7w???bx ?;?e??????????????F?]?????????^\??:????vS?!?P?M/?w??.??^/i?x?}[???????1???{?W"??Q + ?FhM???????$?????????????P?~*???~???????>?????]??????k???"u??????????Y}W???O???????(???]???????????????H??a0??1g?t?M???sG?{??????:?1^!<s4?? ??2G???gmk??|?&??????O???R?d(+ ??? ?????3??5r?bc}uq????Q??}-????X*;????zHd"_*??c?YwsM?)Av?@?^3?U???gc?S?????&F??u?9??ra ???h?"??UX???|?G&?bI?????AmY?1!J?x?+?????U??on!??Z?M?u??-???H?X??AA??????????????W? + ???:??P?QhA????iY???r?+ endobj + 1706 0 obj + 37 + endobj + 1707 0 obj + << + /Length 1760 0 R + /Type /XObject + /Subtype /Image + /Width 93 + /Height 54 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????Wy?f???? ?!(HJ ??? I???#Q;?e??h[fjZ??#?J???????:>????im????{????L???g???{+.?:???r + ???N??h??Z\Y???"???Z`vr???k?N??<+/YY?? M?R?(?0i???(????Ry?B?T??C?T*R???b!?` %?)`x:???B?(C????"???ec?9?}w??#{?`?a"????:?\?+ endobj + 1708 0 obj + 37 + endobj + 1709 0 obj + << + /Length 1761 0 R + /Type /XObject + /Subtype /Image + /Width 92 + /Height 53 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????Sw??ea?? + ??(j?D??51?VD????V?&S<[????x???gcD'2??Q[;?k????v???/:???????|??????_?C!A????P?+ d d??l?????Vm??!??^]???V?1S?Jy0???6??S?r??jG????n!??????????)J ?I;v "V??|Q?h??????K?o???x?? [???'N??|YR??????30??7??`????A?iw?????>?/??^???oy? ?>??7?;???U???Y? ???nl?ZC36H~?~8??Z??;r7.?????x~L>???=??-b;m??N?? + ,????`;-I?O??[?????_VA???????o&;????]L9Ru?????7>?g?5??,???y\Wn??'?>??d?????:9=G&?,??NM ?iu??i?*N?????l?????;0<?l?????^?GY?^-?B??K?84?Xl??|?????Op?5?<-?5????B6???T6????r????.????jjp?J ?hdF? + V?j???????j?? ?????snV + ?g????LD(C?????????q?N??Y?N????PD'????$? I)X???J+ endobj + 1710 0 obj + 29 + endobj + 1711 0 obj + << + /Length 1762 0 R + /Type /XObject + /Subtype /Image + /Width 48 + /Height 44 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????SW?????r???. + E3x?????qj4j4u?j4^p?2&5"6I,6&?t&Fh?hZ3??Z???2??N?????9??????s?p??}?????V?E???#???7??l??y{?.??^?/? w????@? (W?ov%??<>a8>J???y???J???^?,?h?>?%?R??i}2????6?????????F?????????o????????O??'?>?????12{?????,??a??s>?%?TQ??tG????'[/_1??~{???owZ????qs?W??~????????????pir????~S??5V6???-?~{??H&s???k$?0???6?E???))?W??????O?b?xn>?7#k?)_w???a?????????????It#;????Pp?f_??"U??C?Hk???z}s?{+??? + ?????o^?4V??c??b??X?3W]i??nzv>?enfr|???Tg?? ?/?T?&-U?????????ox??????f(?????ADr i?XG75?uz?i?z=?-?g??????????j?`???u+ endobj + 1712 0 obj + 37 + endobj + 1713 0 obj + << + /Length 1763 0 R + /Type /XObject + /Subtype /Image + /Width 92 + /Height 53 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????Wi???af.??(??S$b$???,?j%l?????Ej?[^N?nTR?n?Z.?+e%e??m7?????????_g????ax??;{?|p8?????|? ????0??y?>7s? #|L ?q\?z?P?????=C_ "???R???B? ?8????.?Cb??T??5????h?RU?B*?Z???0?*T?Zj???{?9?F?AOe??! + ??+ ?F?6U)"?fU?B?5zS??v??t???f??U}?T?????H???+ ????n??:???.~??Yd?[???g????OB?wVY?y?0u???w?????KTT???????????{VD???M?vy??2?"$?,??????F?g?^???? ??_> N??7TYr4?g1??????????1\X ?`qan??h??ZG?^-??!???Z_p???9p?????, f?&?F?????e???OtfK???*?7???{,???{?C=?=?b?&Q??f6??i?C?U?MWov???b+ endobj + 1714 0 obj + 33 + endobj + 1715 0 obj + << + /Length 1764 0 R + /Type /XObject + /Subtype /Image + /Width 73 + /Height 49 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????SQ+ 6?(T:??(?}???i2??1 at og )?8?T??!??xe|??????l??aa1?? ?????2?D???9b?&?T`????646a?h????u3??S???r~+ ?C??????~A???P?=???O???y?/>?G?endstream + endobj + 1716 0 obj + 32 + endobj + 1717 0 obj + << + /Length 1765 0 R + /Type /XObject + /Subtype /Image + /Width 73 + /Height 44 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????Sy?cw?eVVVW??/??qb???0a????? ?Y?Xzh??w?iZfYj?? ?h????;?7?????m??JR$$???=??~{&???f?- ??k???{7{|??????/?b??h???&?????+F"???K?G???C?r?&E?[\Q??ymxbf?ih???????c????I??#?k? J[???t]?9619E3?+????{??\??<2 N\l+ ulj????L\???o"R??????,?~J.W0#??l)I?S?m???P, ??% I:.????"??????A?A0m?@???4iA?)O??n?v;?????_ ??endstream + endobj + 1718 0 obj + 37 + endobj + 1719 0 obj + << + /Length 1766 0 R + /Type /XObject + /Subtype /Image + /Width 93 + /Height 54 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????SW?????e??.!jA*???I?5?&X/4?&Zo |??R5?????3*?V??31U???????uimmw??/y????9{??>???uuH?4?ZxL?????L???A? b??rQZ?"f?+ ??R?Lhz?????]??T(???sY\?\[V??????\xa)?????????3W?K?R??O? ?'Q*???pde-??A]????hxz??a?5??q + ????n???iy???v|$?????{[k?S?{e?? ??????????>?&?cK?a?7??i?Xm??#???x?2??zd&????jq&??;=??? ?????%endstream + endobj + 1720 0 obj + 32 + endobj + 1721 0 obj + << + /Length 1767 0 R + /Type /XObject + /Subtype /Image + /Width 73 + /Height 44 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????SW?va??Up?W?AQ1?? ??P?H ???w????x??`m??4/??FD?XP??F??k&???:m????g????g?=???/?yN ?g%L& + r=?%K0 + s@?Y???P,KU(U??"?L?*????6?|????7????-N8m? ?41??9zs??ga=???q????????i??F???9O???Xl??%0tt*:?$|??`o?;?????I??gE??????w??????w????Et??DaJ?%& + ???ad?k:?4;LUN??h?l??l6!??,E?7?z?}???h??????????#??$?? ?Z???/??h9|?j{m??????S?xQ,??????g?|?{???_B.?? lx{?h?V??c??? Uh?u]C????^? w????g????:?,1&?Pq????????tium?O???????G???? + ???GL?g?.??????g??hX???????n?,?M?PtB??@???????t??2>1I???gld????\???a?^??BE?L????l??r:????\t??go?7u*\?+ "3????P?/? + ???j???:m^?'=?E?<"X ????4Ef?*'7WMEn?*[? R??B2??lNM* s?2???"?I%"a??)? ll?? d??D4`X??4gq?t?Q??d?A ?+0?L~??D- ??y+ endobj + 1722 0 obj + 32 + endobj + 1723 0 obj + << + /Length 1768 0 R + /Type /XObject + /Subtype /Image + /Width 73 + /Height 44 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????Wi???a??AAIE??????(E?t??4P???i????+ ??????J?SJ?Z?jy??v@???l?????9???~???_B?WNb + ?? + ?F??0??D?????P? + D?)2 KS?(q'?~?~Xz0????W?fD?b9e?N?w?|??m?X?????O?GE?r?s?w(???O4??`??????$??W???? ??]?8??=?r?????7??7[??D??-?????=?????w?_'?;?+B?????Y????7>??r3?r????gs???\?&bGE _?.?\?9:??????\{?????K%Z,6kC[?????^>??S ?????????"?L0????Z{F??K+?~?5???????[????* ??G&?k + ????????_?c?=??p5[Kr?P??V-O??[fmr????????N? ?u???5d??h????B??`?^nu???/?!?@ow???"m?F??????P~????????:??d?PQ????????6?S????Y?k??????km?*??Ze + ?b?????????\Cq??? ???.?k?`T??Ae?8> + stream + x????SW?I??nv?&????a?@.??D4I?E3"?*7nqP* + X?46 + #????P0(??8?k??????C?}>??y?=??s?_B?????x?:?P(A?  ???q}i??!??EQ)(?(A??H(8jbjBp??O?*?????A?tX??N?)]??`4?X0 ?-E*?(1UT?)=+?>?ka%???i6??JL?????0?LI???.=gw8?????????t?QC?D???P"N?3-?vgu]?e;W?/?V???f?! ?W?@?`I????????utv???~???U[~:??UJ???x+ endobj + 1726 0 obj + 74 + endobj + 1727 0 obj + << + /Length 1770 0 R + /Type /XObject + /Subtype /Image + /Width 163 + /Height 108 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????O???;???@?????+ ?(?z??????? ??'??k">:????{?=!? b?????u??M%f???57????lk?+Y??e??\?? ???xba)?ZW*???????????e? ?(b????c???jzmmmL?????bbl ??P]?)???E??'??qxj!?????lk#?Z??????V?'?"??j?????????Nd;??K???p???R_?4???D??g???O????k?G??'|?J'g??#-uK?*??? ????Zf???c?|?Nf-9?|????B??}????\*G?W?????u?|n??L??n??R??hw?Z?c????2Y???????V??nT???9???'?g?{`?f??D?!!!!!!!!!!!!!!!!!!?W$????3c??f?$????]?g??S??L???M??'?gii+w^???g??vv????19???9+?:2?????????l?/pe???????=<:?MY?|?????oV????6?2???7/Gzn5?NK??(uLE???wc???+@-??|Xy;r??5?N??18???b???[o?O?^|????w??'?{o???b-?,??Fk?????G#?f???ka~????????sUV#??L"?UTI???p3?7?t|rr + X/^L????sS?)/?T??!T?5?\|??????????????> + stream + x????7y??2?$???Fa"??6???$Xu Z?6????????Mk???.???6???m?U???v??????aO?_3????????y???P0?$?n=?K???+ 4???'/Ne@?0??h?)?Q??ol"AC}Me???+*????B??(ERz?????]??\??q??????????8?i??@?}?q?|k7??`?q???\qlbFiC???S?????&a6^??\???rYd"??Y??x?U????Y????)?n?x??]M??y?????EJ^e????_n????bw{????????81?E;vC?H??^?98?]}???)??|??l?a{eN?""?-?R_.pvy??????w??>?????????????B?]??G?????w??f???>????r?#?????:?=?^\?&?>8tO tbn?D???r?^?????ix/?2??=?-???$???o?I???b?.??3?Lk?V???????_?`?????Z???AC`??????T)9 ???~???'??????QW?eTHf+ 6? {?z??o??da> + stream + x????SW????*7Q?"*D??? + ??D!(&Q[iT"jj?5Q?MR%?fh 6???*j4??6?k=o?tw????????3{????3g???+ /???H#??0??????W>>?iGf?s??z?O???????> + stream + x????SW?eaaa?-,??@????`?XH??"T?Z?XmbB%81!?1?M?k?????K??6???eA@?N??????&98?=]y5?????????rs???|~ms?????>???e??????B.??rm]?m??O????>e8?? + ?>?? + ?i?),?bv?/ + o?&?c??G????Nq?W?0G???b$??????Y??:J?3'>8???~????I?????????????????Ls????????v??N8?a??+ endobj + 1734 0 obj + 37 + endobj + 1735 0 obj + << + /Length 1774 0 R + /Type /XObject + /Subtype /Image + /Width 92 + /Height 53 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????[y?f```DQt+ y,m?HP?$N?WR??}????????:<8`?j?;??,eC?n&W?N/?k??w<|<5=C???'.?={WSU?1!J?? + ??rmnYc???????y^??????:O[MB?c????????V??????????J????o~_??{???Y?c?/n???T??_?wN?_?mx)???Yx2jo?)H??Av??T?im????{????H????????NKM????F?????s?C o?7?}?????l}???????s??>cIWE??~?0F?]???c????m?I|??u?3?`O?? ?T???S?tm???{?<;??G?W?Z3?????M???@I?7??S?l?|??A???????Xln??=2?>??*p'J??????2?{?7x???????????K??R??h???:j,i@???????????6Y?? ???Z?~???i at o???|:v???0M?? ??E)???/ 8g?o?mx? ???~??89j??=b???"?8?x??????o/?]p/????{a?5l??P??D??g:?'??dZN????????????fOs??4???>`fD??e?????8?;???t:G??.??,??*"????5C?Db????????F?yn?????q??$????0dw??1X?@?H?((??o???? ???????OUX???`+ i z?V???E?? ??d@???%RB?P?????\?P?b?1?E?z_??/????k8@|??rX?$c?!?"7??Q?n6??|U?????[@?w??????';?@v??endstream + endobj + 1736 0 obj + 32 + endobj + 1737 0 obj + << + /Length 1775 0 R + /Type /XObject + /Subtype /Image + /Width 73 + /Height 44 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????Si?c?eW?/?(. + j"z ?rrI6t?Y????,?????, M???2???(???_?%???]?{????k>??y????O??+ ??*???^?[??w???i??u.GeiA??p?$+ \+ ?????j???????s?fg&G???rY Ut???p??-?????;}???????Ijut8???r?s?T+??o???M?d????K7?D????p??7?}58?,????3F+ ?n2@/_???G?????8O???)???(.?5X?.?I?|Sss??=?/456??k??B"B??? D$?k + ??CG\?cu???x??.???d?*??XK?l??2I?V?T^a?Ub???Vi5 T???> + stream + x????WY?f????DA # c??"q5|-[??e?(W4??, ???,?D???4=ifo?v?????P???????????y?????MH?O?b?b?;Y??5??\E1 ???PE`?X?? ?p>!??xln??r???#2???q??UR1????g????> + stream + x????SW?]???? + ,"??T?KD?RG??!???D???`?(j5/???xAmb?hZ jc1??????(`jv??K??{v?y?={??????+ + C*U??????????r?nokun?a???-?1yRMa???? ?>??0? ???"M*??S5&??7?????q?D?;???>g?I+K?????N????????????):>z"?:????#???????I???@p?c????9?( + ???V?&V?mv???;1???J?&??????)??????/V6w? 9??{???Q?C?cH??d?W?tO/?v??a?S?-??? .?????%?????C????????Y^?s+ + m? + ??+???XWcy^??}~h?1?$?Y???g?V??????4?zp?j?? "??De?R??+?????3s ?f???z??7 *ibt?? ?-L?V7vt?=???21>???}G??tM!???Q ?4?'Q???o?:??=?^????`???=???jK??R~<=2???f'I3s??f[S????????????Ri?S??&? D/H?#?fh?????Z????\]YV??.S&DZ???J??,N?$M??? + ??B|?}?6K!p?L? ???? %2EF?J????#[??R*?)?|,?Pb???x#l,???`CH?D,L?q???k0I???#+ endobj + 1742 0 obj + 33 + endobj + 1743 0 obj + << + /Length 1778 0 R + /Type /XObject + /Subtype /Image + /Width 73 + /Height 50 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????WY?e^`````?et?0??R1??4 mu-s?????%5[?????r}?JOf???Kiu??v? r????9}~???9????y?7&??``?#??+ ?h??n?/=4x?????????p=S???5?zN??ed???l?YY??t6:?D????%gY?.????/?2??????????????XA????P?d,(op?>x??@?k6????iy?5?]???????{6?x?^O????LM??C???'(m?? + ??????1?~4???v]?.1?U2!jG+ endobj + 1744 0 obj + 706 + endobj + 1745 0 obj + 631 + endobj + 1746 0 obj + << + /Length 1779 0 R + /Length1 3180 + /Filter /FlateDecode + >> + stream + x?mV{T?G?3?$H?%????KHA!@H(?????!p?n??????@)*g?-????????vu?????T+??v??[?==?v{jw??={h???}??_???:pg??????;??+ ?d??zz[/?'???v????????????_??????Y??Y??l?:?\?o???0?`42ufQE???????|??{\?i????Cw?:??bk)j|?Q?`???????g???????*-??^??"5%???j?I?=:??Y?/)?b?_??9?i`j?:2????d?|7??| ???k????l?? %?|?????"??k0????^???L?C?G"??+ endobj + 1747 0 obj + << + /Length 1780 0 R + /Length1 11708 + /Filter /FlateDecode + >> + stream + x??zy|T???s?>kf?2??d?? ?H C??.? $@ ?"D??AA *.h at p?Y? !?+ ???[??????m?O[?????k?Q????Y???.b?M??????8F@???#Ik@???????^>?f?nP?T???????{?`?]????; rm?f,?o?b;8?? + Np?$n?A>3?q?I$N?lx?_ + o?????H?8?D????`{?M<?P + ??(?U7Abwb????M????N|?>??x5qq??k???S?q?n?}T?D] G??>?h?}?#uO?3?~ + &???D[?=?^????1?U?????f?KF?DR??9 )O???R?u???5T?W?#(?????$|$ldH?s??P???-???????" ??\??b*bH???????U???A?HCZ????$p_?&???8D??"???P??G,g?????k; ~?3`i?dkkoM????N????.?v?????=H?o?_?x?]??? MyK?m?]U+?]?????????]9*?U???+*?&>??+?1<5??,??c?7t?t?????e??@?Y???c?&?/???_???????K?i@?~R?"???*??k??9 J(.??? + ?????&?"??0?%r?g?.&?? ???$9???S?(R\b$?%?7v?m f?O&????{Wj???-?4?^???|?Q?^??? FrF?????t?????)(??i?h_bv??~?D??t ?\?QI??*6??? ? ?*???=??%UWM+ ??3???=??2??S?Bl* ?X?? + ?2U9.??2\??`?X%I-????!??o??j??v???y?^y???????~?9?~???????Q%C?c)?????@????LAY?8?8P???~??,?"?????G|6(???L???H H4%t?h?U??? ??^)8?D?q`7c??o?5?'??}}?1I??pY?,V??r(r??_????t?? ??2???S?Q??^2?U????G???X???$'?P?b+?ex????5? ????b?X?^?9}Jpv???r?r?rm?oi?R???N??,#????fr??0?Z?6s?)'???+??~???Q2?F?[N??g\9?2U??B??x?s????`????u?!?c????????$?h?[??R + ???_????i???q$? + ?????????"??0???M$.???l"???? ?i5BP)??_?$???qa??z?H?g2?J?r??A???????` WrU.IZ?'3gY|??m???~7`??c????Za|-?????M83?O^2?NZ?SaM3???????v?pu??2????,??????0DkZlT?B??>%n?y<>?X|?{i+?v?"D?????Rodu?G??'??h?z?SX???G????R?T?f???V?\U;?\hW.W??;UJ?^????b?)!K??)'??C?!?S0?VQ4??Y?4TE?J-n?g????))E? + ?v?]#an?D?????5??7??$??,b?s??Z?b??2????P*e??1??/??n?x??P + ????0?J???J?#??u??l??[??Jw\n?_???2?86-^???T?0U?R?p~??S???'????O?8?s???w? ]w?=?????/??L???T\+ ????(???I0:A+?? |???S????P????/p??Wq?9L^?_9 0%?`?%~?+??)F????6^??#??O??0R??'t?TSI???@?E??1?Y?+m???????V5_Wg???F\?????{\????p5^????????j??????E?f??M?jZ?4G?oo?E;fx???-?&,?a??'~??endstream + endobj + 1748 0 obj + 1266 + endobj + 1749 0 obj + 1254 + endobj + 1750 0 obj + 1235 + endobj + 1751 0 obj + 1183 + endobj + 1752 0 obj + 1253 + endobj + 1753 0 obj + 1240 + endobj + 1754 0 obj + 1235 + endobj + 1755 0 obj + 1166 + endobj + 1756 0 obj + 1187 + endobj + 1757 0 obj + 1210 + endobj + 1758 0 obj + 1250 + endobj + 1759 0 obj + 1278 + endobj + 1760 0 obj + 1365 + endobj + 1761 0 obj + 1226 + endobj + 1762 0 obj + 1135 + endobj + 1763 0 obj + 1294 + endobj + 1764 0 obj + 845 + endobj + 1765 0 obj + 1219 + endobj + 1766 0 obj + 1240 + endobj + 1767 0 obj + 1209 + endobj + 1768 0 obj + 1174 + endobj + 1769 0 obj + 1225 + endobj + 1770 0 obj + 1342 + endobj + 1771 0 obj + 1245 + endobj + 1772 0 obj + 1251 + endobj + 1773 0 obj + 1152 + endobj + 1774 0 obj + 1265 + endobj + 1775 0 obj + 1262 + endobj + 1776 0 obj + 1233 + endobj + 1777 0 obj + 1206 + endobj + 1778 0 obj + 1297 + endobj + 1779 0 obj + 2481 + endobj + 1780 0 obj + 8131 + endobj + 1632 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [137.9232 288.4965 153.8465 300.1762] + /Subtype /Link + /A << /S /GoTo /D (figure.183) >> + >> endobj + 1633 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [402.8209 288.4965 418.7442 300.1762] + /Subtype /Link + /A << /S /GoTo /D (figure.182) >> + >> endobj + 1631 0 obj << + /D [1629 0 R /FitH 784.0631] + >> endobj + 898 0 obj << + /D [1629 0 R /FitH 343.0365] + >> endobj + 1634 0 obj << + /D [1629 0 R /FitH 106.6392] + >> endobj + 1635 0 obj << + /D [1629 0 R /FitH 106.6392] + >> endobj + 1636 0 obj << + /D [1629 0 R /FitH 95.2818] + >> endobj + 1637 0 obj << + /D [1629 0 R /FitH 83.9244] + >> endobj + 1628 0 obj << + /Font << /F47 676 0 R /F15 679 0 R /F49 683 0 R /F57 691 0 R /F11 1255 0 R /F33 936 0 R /F14 634 0 R >> + /XObject << /Im12 1627 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 1783 0 obj << + /Length 3069 + /Filter /FlateDecode + >> + stream + x??ko7???p@ 81|?R??????;?@h?A????H?Yv???????]Jvm??N`.w8$?3???,%&????????y??Ub?\???4??D$$>Q?[ajm?v?????-??8;y??v0> i?? @p??@??????(??????Im?DC?????????QL??:W?? G ???KA)???j?)5=????T??+?c?"? -? ?!w!??tr|???? 5?T????c??#?ZPA??s?(?g??;?$???>CW??M|?o?PWC?*?????!?+??_%?qV???`??0N#?qG?&?1!?3??~??}^??C?c?A????v=?C?j???v??I??J?c~F????????e??h{S??H???R???????,???k??7feYs??9?,#?]???/?0 + ????u????" 2/P?%?8?CM???SN-????;?In?d??.???= &*vzQ2???=????R??? ??`????y??#Z??xN????????E/@???;?[X?La?7cz!???i/???v? ]????$????E?g?L???s??2???6d?wn?????fu0?*??????|?e ?b?hME$I???^?S ? E????:o??#V?8 !h???^?O???D???q?????K???Y?z ax?=??0?????-?6??# + ????3?????? g????d? x@? ?I??@?*@E?#?????3?L??]:0?w> endobj + 1784 0 obj << + /D [1782 0 R /FitH 784.0631] + >> endobj + 1785 0 obj << + /D [1782 0 R /FitH 758.9497] + >> endobj + 1786 0 obj << + /D [1782 0 R /FitH 747.5924] + >> endobj + 1787 0 obj << + /D [1782 0 R /FitH 736.235] + >> endobj + 1788 0 obj << + /D [1782 0 R /FitH 724.8776] + >> endobj + 1789 0 obj << + /D [1782 0 R /FitH 713.5203] + >> endobj + 1790 0 obj << + /D [1782 0 R /FitH 702.1629] + >> endobj + 1791 0 obj << + /D [1782 0 R /FitH 522.1705] + >> endobj + 1792 0 obj << + /D [1782 0 R /FitH 524.2868] + >> endobj + 1793 0 obj << + /D [1782 0 R /FitH 512.9295] + >> endobj + 1794 0 obj << + /D [1782 0 R /FitH 501.5721] + >> endobj + 1795 0 obj << + /D [1782 0 R /FitH 490.2147] + >> endobj + 1796 0 obj << + /D [1782 0 R /FitH 467.5] + >> endobj + 1797 0 obj << + /D [1782 0 R /FitH 382.5868] + >> endobj + 1798 0 obj << + /D [1782 0 R /FitH 384.7031] + >> endobj + 1799 0 obj << + /D [1782 0 R /FitH 373.3458] + >> endobj + 1800 0 obj << + /D [1782 0 R /FitH 361.9884] + >> endobj + 1801 0 obj << + /D [1782 0 R /FitH 350.631] + >> endobj + 1802 0 obj << + /D [1782 0 R /FitH 339.2737] + >> endobj + 1803 0 obj << + /D [1782 0 R /FitH 327.9163] + >> endobj + 1804 0 obj << + /D [1782 0 R /FitH 316.5589] + >> endobj + 1805 0 obj << + /D [1782 0 R /FitH 305.2015] + >> endobj + 1806 0 obj << + /D [1782 0 R /FitH 293.8442] + >> endobj + 1807 0 obj << + /D [1782 0 R /FitH 282.4868] + >> endobj + 1808 0 obj << + /D [1782 0 R /FitH 184.0245] + >> endobj + 1809 0 obj << + /D [1782 0 R /FitH 186.1408] + >> endobj + 1810 0 obj << + /D [1782 0 R /FitH 174.7834] + >> endobj + 1811 0 obj << + /D [1782 0 R /FitH 163.426] + >> endobj + 1812 0 obj << + /D [1782 0 R /FitH 152.0686] + >> endobj + 1813 0 obj << + /D [1782 0 R /FitH 140.7113] + >> endobj + 1814 0 obj << + /D [1782 0 R /FitH 129.3539] + >> endobj + 1815 0 obj << + /D [1782 0 R /FitH 117.9965] + >> endobj + 1816 0 obj << + /D [1782 0 R /FitH 106.6392] + >> endobj + 1817 0 obj << + /D [1782 0 R /FitH 95.2818] + >> endobj + 1818 0 obj << + /D [1782 0 R /FitH 83.9244] + >> endobj + 1781 0 obj << + /Font << /F47 676 0 R /F15 679 0 R /F57 691 0 R /F14 634 0 R /F63 764 0 R /F11 1255 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 1821 0 obj << + /Length 3029 + /Filter /FlateDecode + >> + stream + x??\mo???_A@?????o????q`}?i>????HU????>?{w?;?y?)?0?w\?ng?y??Y?D?MH?c ??N????LN?????QI$'ZG??????????c???g/?l*????_}?}?nF???Bk=?+n???????????????~?????Z???Z5U?$K???4^k}8~-%??Hh?????B + ???? 9)? ?~??????+?~{&??`'?CD?????W??9V?i/K+M?T,?":??Z?L?x?? C???h?K?*?M?< + G??L?o)eIC +|P???}I?|f??t( ng ????|Y??L??7?B???Y????_? + 7}????\??](%19?????{???|??}yK??p?????Y???6? X~???J?t????Y)?uszm?I?????r????S9#=?yF??_???_kuN???r?K???P?D???z?:?????8??????W$?? ?K#?W+0??????B5?u?DP?t???v?U?U??Y m ?W??X?4?t[9????:?j%???????*e??K?E?2w.??5l???G YC`???????Vu???3g????Wk??0???? }??Vq7? ???Sh??`??H?^?]:?y{??m?ZAnc??????f ?;?\?D\??a? ,>Y???J?!?.? + x??u????????L?.????sB{j h?m? !??O??)\fS???n??U???I??T?\L[ie?tH?2?????L 6'? ?k?U??/?|??z???5 ?+???B?W??YN???]? ???Kv?2??o?K???I???I+ ????9]??xv??t?L????"?xNP????N)?p????o3?(??V? (?????????S{Qr~?u?e???C? + ???7???H??????p??? ^,V? ??1?0???????E??????JCe?{?????,??n??H~?J???/o??1/p]v????_?,:???{`??4??mp?K?-?1 + ??]a?Yc]=?y??ZnGZ?????+???O?:??`????(?c]???I??O??k?>o?` ??B??4?E5^?????^x??W?-?3??Cz?E??szH??z~?(k?????????? ????xa???}?#???m ? 1??c?????????C???1???M??O?=???p1??C?:????HH2v??L?}!X?C??('???f+K? + ??6KG8'/8`oz??5p$a??6????0]?5tJ?:?q????xl??c#?t?u?9$?2p??????N(???ApOe??Y???pH&????0V + ?????<&/??Sr ?{L??0f?DL'??=???0?Q??Hz?M??.S?9?????@t?"?8?[??y???g???=u?YrT=qR 'N??Pi?y R???'?8`?t?=???/M?\??kA |VM?r?????*??~?????f??D??O????*????D?????#?vO????? + ?7\r]??'???l*l?\Ur?\?o?h??g+ ??[c??UT'??W?6.T??????h??N^???k?JX????V?m??J??@Xop[em??_???{????????????)c/endstream + endobj + 1820 0 obj << + /Type /Page + /Contents 1821 0 R + /Resources 1819 0 R + /MediaBox [0 0 595.2757 841.8898] + /Parent 1638 0 R + >> endobj + 1822 0 obj << + /D [1820 0 R /FitH 784.0631] + >> endobj + 1823 0 obj << + /D [1820 0 R /FitH 758.9497] + >> endobj + 1824 0 obj << + /D [1820 0 R /FitH 736.235] + >> endobj + 1825 0 obj << + /D [1820 0 R /FitH 724.8776] + >> endobj + 1826 0 obj << + /D [1820 0 R /FitH 664.3277] + >> endobj + 1827 0 obj << + /D [1820 0 R /FitH 666.444] + >> endobj + 1828 0 obj << + /D [1820 0 R /FitH 655.0866] + >> endobj + 1829 0 obj << + /D [1820 0 R /FitH 643.7292] + >> endobj + 1830 0 obj << + /D [1820 0 R /FitH 632.3719] + >> endobj + 1831 0 obj << + /D [1820 0 R /FitH 621.0145] + >> endobj + 1832 0 obj << + /D [1820 0 R /FitH 609.6571] + >> endobj + 1833 0 obj << + /D [1820 0 R /FitH 598.2997] + >> endobj + 1834 0 obj << + /D [1820 0 R /FitH 586.9424] + >> endobj + 1835 0 obj << + /D [1820 0 R /FitH 575.585] + >> endobj + 1836 0 obj << + /D [1820 0 R /FitH 564.2276] + >> endobj + 1837 0 obj << + /D [1820 0 R /FitH 503.6777] + >> endobj + 1838 0 obj << + /D [1820 0 R /FitH 505.794] + >> endobj + 1839 0 obj << + /D [1820 0 R /FitH 494.4366] + >> endobj + 1840 0 obj << + /D [1820 0 R /FitH 483.0792] + >> endobj + 1841 0 obj << + /D [1820 0 R /FitH 471.7219] + >> endobj + 1842 0 obj << + /D [1820 0 R /FitH 460.3645] + >> endobj + 1843 0 obj << + /D [1820 0 R /FitH 449.0071] + >> endobj + 1844 0 obj << + /D [1820 0 R /FitH 437.6498] + >> endobj + 1845 0 obj << + /D [1820 0 R /FitH 426.2924] + >> endobj + 1846 0 obj << + /D [1820 0 R /FitH 414.935] + >> endobj + 1847 0 obj << + /D [1820 0 R /FitH 403.5776] + >> endobj + 1848 0 obj << + /D [1820 0 R /FitH 392.2203] + >> endobj + 1849 0 obj << + /D [1820 0 R /FitH 380.8629] + >> endobj + 1850 0 obj << + /D [1820 0 R /FitH 369.5055] + >> endobj + 1851 0 obj << + /D [1820 0 R /FitH 358.1481] + >> endobj + 1852 0 obj << + /D [1820 0 R /FitH 346.7908] + >> endobj + 1853 0 obj << + /D [1820 0 R /FitH 324.076] + >> endobj + 1854 0 obj << + /D [1820 0 R /FitH 312.7186] + >> endobj + 1855 0 obj << + /D [1820 0 R /FitH 301.3613] + >> endobj + 1856 0 obj << + /D [1820 0 R /FitH 290.0039] + >> endobj + 1857 0 obj << + /D [1820 0 R /FitH 278.6465] + >> endobj + 1858 0 obj << + /D [1820 0 R /FitH 267.2892] + >> endobj + 1859 0 obj << + /D [1820 0 R /FitH 255.9318] + >> endobj + 1860 0 obj << + /D [1820 0 R /FitH 244.5744] + >> endobj + 1861 0 obj << + /D [1820 0 R /FitH 233.217] + >> endobj + 1862 0 obj << + /D [1820 0 R /FitH 172.6671] + >> endobj + 1863 0 obj << + /D [1820 0 R /FitH 174.7834] + >> endobj + 1864 0 obj << + /D [1820 0 R /FitH 163.426] + >> endobj + 1865 0 obj << + /D [1820 0 R /FitH 152.0686] + >> endobj + 1866 0 obj << + /D [1820 0 R /FitH 140.7113] + >> endobj + 1867 0 obj << + /D [1820 0 R /FitH 129.3539] + >> endobj + 1868 0 obj << + /D [1820 0 R /FitH 117.9965] + >> endobj + 1869 0 obj << + /D [1820 0 R /FitH 106.6392] + >> endobj + 1870 0 obj << + /D [1820 0 R /FitH 95.2818] + >> endobj + 1871 0 obj << + /D [1820 0 R /FitH 83.9244] + >> endobj + 1819 0 obj << + /Font << /F47 676 0 R /F15 679 0 R /F14 634 0 R /F11 1255 0 R /F57 691 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 1874 0 obj << + /Length 2687 + /Filter /FlateDecode + >> + stream + x????#??>_?K??M????+ !??~(?j?8"5"???????Y?JV(f4he1l??&?G??nq*9-AS?+ ???'?&A??A?#=? O?????m???Kb??o..m8`3?$f?J:?????h?'?????Vr\R?8H???>>-"?JW]Y????? ???5}???F??? ?G9?i?E????u?a?w?Z???????????a???g?DKpe?2+Q????????B?fR;!P?W^?zf-7???!???#???x?M?C?.B'[B?"??W????\ :???jy?;$????>???h ?q??P"?k\?L?@vCa + v?:?)?R#????by????d\'d?z? ?]\2?md0??8g?[?|e?????C?? ?O},??`%???V*?;?????F?2???}??Ex??S??e???1 ???f?????`s???CC + ??H? ?u??v??E???.,?6 at WQ????%?`?m|???}|;T??B????s???> endobj + 1875 0 obj << + /D [1873 0 R /FitH 784.0631] + >> endobj + 1876 0 obj << + /D [1873 0 R /FitH 758.9497] + >> endobj + 74 0 obj << + /D [1873 0 R /FitH 686.4935] + >> endobj + 1877 0 obj << + /D [1873 0 R /FitH 578.1152] + >> endobj + 1878 0 obj << + /D [1873 0 R /FitH 580.2315] + >> endobj + 1879 0 obj << + /D [1873 0 R /FitH 522.5097] + >> endobj + 1880 0 obj << + /D [1873 0 R /FitH 524.626] + >> endobj + 1881 0 obj << + /D [1873 0 R /FitH 513.2686] + >> endobj + 1882 0 obj << + /D [1873 0 R /FitH 455.5467] + >> endobj + 1883 0 obj << + /D [1873 0 R /FitH 457.663] + >> endobj + 1884 0 obj << + /D [1873 0 R /FitH 332.0533] + >> endobj + 1885 0 obj << + /D [1873 0 R /FitH 334.1696] + >> endobj + 1886 0 obj << + /D [1873 0 R /FitH 322.8122] + >> endobj + 1887 0 obj << + /D [1873 0 R /FitH 265.0904] + >> endobj + 1888 0 obj << + /D [1873 0 R /FitH 267.2067] + >> endobj + 1889 0 obj << + /D [1873 0 R /FitH 255.8493] + >> endobj + 1890 0 obj << + /D [1873 0 R /FitH 186.6945] + >> endobj + 1891 0 obj << + /D [1873 0 R /FitH 186.6945] + >> endobj + 1892 0 obj << + /D [1873 0 R /FitH 175.3372] + >> endobj + 1893 0 obj << + /D [1873 0 R /FitH 163.9798] + >> endobj + 1894 0 obj << + /D [1873 0 R /FitH 152.6224] + >> endobj + 1895 0 obj << + /D [1873 0 R /FitH 141.2651] + >> endobj + 1896 0 obj << + /D [1873 0 R /FitH 129.9077] + >> endobj + 1897 0 obj << + /D [1873 0 R /FitH 118.5503] + >> endobj + 1898 0 obj << + /D [1873 0 R /FitH 107.1929] + >> endobj + 1899 0 obj << + /D [1873 0 R /FitH 95.8356] + >> endobj + 1872 0 obj << + /Font << /F47 676 0 R /F15 679 0 R /F26 624 0 R /F57 691 0 R /F14 634 0 R /F63 764 0 R /F11 1255 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 1902 0 obj << + /Length 3612 + /Filter /FlateDecode + >> + stream + x??[Yo#?~?? ?s?G?#?? ?????%? ?+Q?`I?H?7?_?????Cr(?r A??3}TW??E;1??k????I?????????L.??oG?v2?Fy????a?r??K??}qr??J??+?????p)???''g?M??2??9??[?s???w5_????2w??.?AA????Q?x??????d!??PlP?z? ?7??????L.???0+ G?Jp??5V????Z??o?????H?????>????`?&??8!?B$[?c?I??x,?_I?J?L?A??Z???J?2v@???ZW??????? 6#??s.C??{m-??Z &0???#?0?l1RM?c?????t56?=*?w???(;%?rH_???|??g}H? k??f+ ???1??`???J??f???i?Wr]&??????R???r???\hq???W???(ec??T?i+A????????d?Ud,?~?)?W#r??0EY4??Dq??b?7?????}C?1??!f?t?Ap?Sb???5?. ,???R??mI1 ?#t%???M??????5?g?|???M, ?=a8??Z/??????m @b0#8oO?J???N??(s?Qs?)e?`?a?|?5?3???rV?; ??D8W???G?V4?-?????D??;^?w@]??W:?~??O??@q???1???h?P?_???B;E?xQ??^?q??8B???Q?(?c?Q\ ?"l?B???Q?X??|xs/?y??!????c??d?K ?'8y?8?9??@? g?w ????3???!????0???>?V_?D + ??????????sN???????!??*?V??hY??O?iG?dc?????B???I?[W?Zh????????O?9~??c+!>???<9?W4??a???%oA0?T??? F???`j?Kqa?bj?B???^ + N?Py?????v#f?|????"? ??F?.:O?H{?????)?D|?a??n?l.g;?v?w1?Y??X??X?FK?q,e??+??R?#(B?RL? + ?b??9???p??7?????t?2??Gq?/??Zi???A?K='q????t???? -8??z??T%?FS??^[?s??gZ?#????o?????????8?9? + ?b?j? dt????*?]????\??K-jO?????wZ,???}??o?b@?!?7?H?q??a???V???I?y??FC??Ea(?FM??????b??>"?6v?s?HT????r:?C?+ 9?W? ?? R????????9??Z}U|W?????1??S?+ endobj + 1901 0 obj << + /Type /Page + /Contents 1902 0 R + /Resources 1900 0 R + /MediaBox [0 0 595.2757 841.8898] + /Parent 1638 0 R + >> endobj + 1903 0 obj << + /D [1901 0 R /FitH 784.0631] + >> endobj + 1904 0 obj << + /D [1901 0 R /FitH 736.9721] + >> endobj + 1905 0 obj << + /D [1901 0 R /FitH 739.0884] + >> endobj + 1906 0 obj << + /D [1901 0 R /FitH 727.7311] + >> endobj + 1907 0 obj << + /D [1901 0 R /FitH 716.3737] + >> endobj + 1908 0 obj << + /D [1901 0 R /FitH 705.0163] + >> endobj + 1909 0 obj << + /D [1901 0 R /FitH 693.659] + >> endobj + 1910 0 obj << + /D [1901 0 R /FitH 682.3016] + >> endobj + 1911 0 obj << + /D [1901 0 R /FitH 670.9442] + >> endobj + 1912 0 obj << + /D [1901 0 R /FitH 659.5868] + >> endobj + 1913 0 obj << + /D [1901 0 R /FitH 648.2295] + >> endobj + 1914 0 obj << + /D [1901 0 R /FitH 560.6545] + >> endobj + 1915 0 obj << + /D [1901 0 R /FitH 562.7708] + >> endobj + 1916 0 obj << + /D [1901 0 R /FitH 551.4134] + >> endobj + 1917 0 obj << + /D [1901 0 R /FitH 540.0561] + >> endobj + 1918 0 obj << + /D [1901 0 R /FitH 528.6987] + >> endobj + 1919 0 obj << + /D [1901 0 R /FitH 517.3413] + >> endobj + 1920 0 obj << + /D [1901 0 R /FitH 505.984] + >> endobj + 1921 0 obj << + /D [1901 0 R /FitH 494.6266] + >> endobj + 1922 0 obj << + /D [1901 0 R /FitH 483.2692] + >> endobj + 1923 0 obj << + /D [1901 0 R /FitH 471.9118] + >> endobj + 1924 0 obj << + /D [1901 0 R /FitH 460.5545] + >> endobj + 1925 0 obj << + /D [1901 0 R /FitH 449.1971] + >> endobj + 1926 0 obj << + /D [1901 0 R /FitH 437.8397] + >> endobj + 1927 0 obj << + /D [1901 0 R /FitH 426.4823] + >> endobj + 1928 0 obj << + /D [1901 0 R /FitH 415.125] + >> endobj + 1929 0 obj << + /D [1901 0 R /FitH 403.7676] + >> endobj + 1930 0 obj << + /D [1901 0 R /FitH 392.4102] + >> endobj + 1931 0 obj << + /D [1901 0 R /FitH 381.0528] + >> endobj + 1932 0 obj << + /D [1901 0 R /FitH 369.6955] + >> endobj + 1933 0 obj << + /D [1901 0 R /FitH 358.3381] + >> endobj + 1934 0 obj << + /D [1901 0 R /FitH 346.9807] + >> endobj + 1935 0 obj << + /D [1901 0 R /FitH 335.6234] + >> endobj + 1936 0 obj << + /D [1901 0 R /FitH 324.266] + >> endobj + 1937 0 obj << + /D [1901 0 R /FitH 312.9086] + >> endobj + 1938 0 obj << + /D [1901 0 R /FitH 301.5512] + >> endobj + 1939 0 obj << + /D [1901 0 R /FitH 290.1939] + >> endobj + 1940 0 obj << + /D [1901 0 R /FitH 278.8365] + >> endobj + 1941 0 obj << + /D [1901 0 R /FitH 267.4791] + >> endobj + 1942 0 obj << + /D [1901 0 R /FitH 256.1217] + >> endobj + 1943 0 obj << + /D [1901 0 R /FitH 244.7644] + >> endobj + 1944 0 obj << + /D [1901 0 R /FitH 233.407] + >> endobj + 1945 0 obj << + /D [1901 0 R /FitH 222.0496] + >> endobj + 1946 0 obj << + /D [1901 0 R /FitH 210.6922] + >> endobj + 1947 0 obj << + /D [1901 0 R /FitH 199.3349] + >> endobj + 1948 0 obj << + /D [1901 0 R /FitH 187.9775] + >> endobj + 1949 0 obj << + /D [1901 0 R /FitH 176.6201] + >> endobj + 1900 0 obj << + /Font << /F47 676 0 R /F15 679 0 R /F63 764 0 R /F57 691 0 R /F14 634 0 R /F49 683 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 1952 0 obj << + /Length 3088 + /Filter /FlateDecode + >> + stream + x??\[o?~?? + , ??K + ??"?P?]??A????-???n???;????Hc?J?(E?? ?sx???HGL8????????y??Ub??:??s?????????i????(4?{&? ?????g/?}x??w???N59={=??b&???F)5}?[z\??????????O~:?z4???k:Clu??~???0}???[Rmu+S"???O??pz?'-, "h?1mU?????o?? ?>?????8}]?H??6?????_N???\?=$??? ???//??'[;f????? m47??L?)=??$?v???B??[?????F?i{??k??.???%?Z/g?OIlV???_?????q~E?[?o3?kb???"w?y?.?TM/????."????~??wY??E?3 ??V??? ?????Y?VL???]?'V???y??!??qE?HP??2??ok?X??A?U??*??p??,?{?)?"\X?\?"??s}6?K??u???????U:^$#J??i???K????D????2h?y+?X??????2^????8Y????u[#??O?0$?]?I???"U?LO??n?? ? + ?s*T(???fds + ?C?D?*o?#? 4l?X???%?{6k??(???4?[???L)J???? ????d??9?mD??a??"`?v6(??i#??cq? + ?K??+ ]???a r?kuw??LC?w?x???C,ciW??s ?? + [9?{{N;??????c??"PP????n ??/????}3???_???????X????v??X????????S????????"c8,.]?[?@^?u?r??WQ????6 + c?????W?Z???ep]??????t?q??''???SK??P??? ??K3??Q??? t?cYu=VSp?w??????z?Uxtgmm?b?R?A??0???\f?WaD?????j;??Z:f4,Su??1???2?> endobj + 1972 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [103.4035 370.2396 110.8506 381.9193] + /Subtype /Link + /A << /S /GoTo /D (chapter.524) >> + >> endobj + 1953 0 obj << + /D [1951 0 R /FitH 784.0631] + >> endobj + 1954 0 obj << + /D [1951 0 R /FitH 723.423] + >> endobj + 1955 0 obj << + /D [1951 0 R /FitH 725.5393] + >> endobj + 1956 0 obj << + /D [1951 0 R /FitH 714.1819] + >> endobj + 1957 0 obj << + /D [1951 0 R /FitH 702.8245] + >> endobj + 1958 0 obj << + /D [1951 0 R /FitH 691.4671] + >> endobj + 1959 0 obj << + /D [1951 0 R /FitH 668.7524] + >> endobj + 1960 0 obj << + /D [1951 0 R /FitH 657.395] + >> endobj + 1961 0 obj << + /D [1951 0 R /FitH 646.0376] + >> endobj + 1962 0 obj << + /D [1951 0 R /FitH 634.6803] + >> endobj + 1963 0 obj << + /D [1951 0 R /FitH 623.3229] + >> endobj + 1964 0 obj << + /D [1951 0 R /FitH 611.9655] + >> endobj + 1965 0 obj << + /D [1951 0 R /FitH 589.2508] + >> endobj + 1966 0 obj << + /D [1951 0 R /FitH 524.7463] + >> endobj + 1967 0 obj << + /D [1951 0 R /FitH 526.8626] + >> endobj + 1968 0 obj << + /D [1951 0 R /FitH 515.5053] + >> endobj + 1969 0 obj << + /D [1951 0 R /FitH 504.1479] + >> endobj + 1970 0 obj << + /D [1951 0 R /FitH 492.7905] + >> endobj + 1971 0 obj << + /D [1951 0 R /FitH 481.4332] + >> endobj + 1973 0 obj << + /D [1951 0 R /FitH 349.1827] + >> endobj + 1974 0 obj << + /D [1951 0 R /FitH 351.299] + >> endobj + 1975 0 obj << + /D [1951 0 R /FitH 339.9417] + >> endobj + 1976 0 obj << + /D [1951 0 R /FitH 328.5843] + >> endobj + 1977 0 obj << + /D [1951 0 R /FitH 317.2269] + >> endobj + 1978 0 obj << + /D [1951 0 R /FitH 283.1548] + >> endobj + 1979 0 obj << + /D [1951 0 R /FitH 271.7974] + >> endobj + 1980 0 obj << + /D [1951 0 R /FitH 260.4401] + >> endobj + 1981 0 obj << + /D [1951 0 R /FitH 249.0827] + >> endobj + 1982 0 obj << + /D [1951 0 R /FitH 237.7253] + >> endobj + 1983 0 obj << + /D [1951 0 R /FitH 226.3679] + >> endobj + 1984 0 obj << + /D [1951 0 R /FitH 203.6532] + >> endobj + 1985 0 obj << + /D [1951 0 R /FitH 139.1488] + >> endobj + 1986 0 obj << + /D [1951 0 R /FitH 141.2651] + >> endobj + 1987 0 obj << + /D [1951 0 R /FitH 129.9077] + >> endobj + 1988 0 obj << + /D [1951 0 R /FitH 118.5503] + >> endobj + 1989 0 obj << + /D [1951 0 R /FitH 107.1929] + >> endobj + 1990 0 obj << + /D [1951 0 R /FitH 95.8356] + >> endobj + 1950 0 obj << + /Font << /F47 676 0 R /F15 679 0 R /F63 764 0 R /F57 691 0 R /F14 634 0 R /F11 1255 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 1993 0 obj << + /Length 1880 + /Filter /FlateDecode + >> + stream + x??YYo?F~???#T??x????A?????4(h?R\??C?u?_?9v?Ki%7@?&gggfg?9?QK ??RI+L]W???BF-7?B.????B9&??5[???A???*?tY#???????????Z^?bU?gs???~?^??T?_??1?/?????z??~????w?7WAc2??z??2+p?c62K??Y???,mO?j%??/????R?6i?U??Um?I????/????r ???S??'x?B???[hY ?????->,~ "???SoMz?;a?%??)??y?-y??]e????Wk]@??el[Gn???t??????@\|&L?k???c???;?v?Ke??]??g??????????AK ??X??w??Ve;?{??V8y??0??M^??XN?c?8?n?n????????? 6K? + c??,?"#??,!???-???e?m??????=Q?????Zr???l???O?,?e????&???#? V?F?oH???Y ?!) ?????Bvq`? ??s??>??3 + ?ci?[r?B?}?c??f???;???8d??:??????ov?p(-L? + ?C?C;?"?u?%?>?L|??? ?(?o?Q??D?)l@?? h??w-??I?5z??)??(?????iw????9:?,#???Y? n???p??z?lH`??????8*????g?|???TXHV????/?? ?;??g&N + ??;?rxpv??(?_.????'e$???E??+ .r????;47 ??c???(?H ??R;????(Wx???'RQ?`h?,?-????J?9????.??9v??8x$?;?????? ??)$????&?????k??zU????OC??eZ? ?h??i??????Pn?D@?c????????????'6??K??y??y73?IME?+G?0#}?banT?t?T?>?55??\qjM??? ???sEa|C??p?L?? M??D??#???l;?B?y????>??3??O?? ?|??endstream + endobj + 1992 0 obj << + /Type /Page + /Contents 1993 0 R + /Resources 1991 0 R + /MediaBox [0 0 595.2757 841.8898] + /Parent 1995 0 R + >> endobj + 1994 0 obj << + /D [1992 0 R /FitH 784.0631] + >> endobj + 78 0 obj << + /D [1992 0 R /FitH 523.4503] + >> endobj + 1991 0 obj << + /Font << /F47 676 0 R /F15 679 0 R /F63 764 0 R /F57 691 0 R /F26 624 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 1998 0 obj << + /Length 2497 + /Filter /FlateDecode + >> + stream + x??Z?s???_q?'j&d+ 5H?[??JC2Z?,??L??bT1?d????X?IE&???:iYf??5?e????>????`???|???d.??2]?????x?w?r???S???4??^ $?? + D9???de??(?Jc???l????9>?'???L4?M[??Jq??v?Pw???h??????,8??~?_??4REV?J-x?P:_Y~a??????????P??=?Lg???(???? + yNE;?U?v(???????i???q????jm?M??L?e1?=N?/S&??9???8? ????G?j?s??\:xo????{; ???(??+48?<[h??BC???B??;?#)???^I??A???k?'p??<+tm?? + ??$?]?N??N]????W??L2$)?????zxj??z??&9???(??????]+1y3v?(?r?ZC?Jee5? ??JC??2;eGev*???(?5?L?.u??~ (D?1?? ?mtOn??FC??G1?l??w?K?R@???r????r???I ?A?P??? $?+ >|????2????A?9?>e?p<@w????a^?f9???????E???????4?$G??C??;?|&i??F??+????O??4?????p????T?'??????rMmw ??l?m??l???J?z????srGF??????[??????Dc9?r?S?:??Y*??K?,e'? x.N??,'?????_?? ????W?%+ j??SK?p! 8????l??N???=??D~-3?cE??Z??a????C??*?R??d&e?' \??j|????;?1???????W?q@????[~????9?w?f?NA*9.#????Q?,?bR ?x|?p??^u$%??EiS??(m??m????>??l%????4???IgC|@?Ve ?U[ \?J2?'??????? #s!`?9?a'???r??,W?????yC?D{??]??+? + X9Z+ ??p$F-!r? n??pX?????????P??)?b`g?-i&???????T?<8??????~??? :*7?gB??w?????>? ?;?????-9J??+ ?B??????@ : ??F?N?????3xi???#?x?????@???????%:#???????????o?3??SId?q?_`^?R + + endobj + 1997 0 obj << + /Type /Page + /Contents 1998 0 R + /Resources 1996 0 R + /MediaBox [0 0 595.2757 841.8898] + /Parent 1995 0 R + /Annots [ 2000 0 R 2001 0 R ] + >> endobj + 2000 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [372.946 518.9646 380.393 531.7626] + /Subtype /Link + /A << /S /GoTo /D (chapter.11) >> + >> endobj + 2001 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [465.9523 241.1442 492.021 250.7075] + /Subtype /Link + /A << /S /GoTo /D (cite.lifelongopt:www) >> + >> endobj + 1999 0 obj << + /D [1997 0 R /FitH 784.0631] + >> endobj + 82 0 obj << + /D [1997 0 R /FitH 758.5513] + >> endobj + 86 0 obj << + /D [1997 0 R /FitH 601.8238] + >> endobj + 90 0 obj << + /D [1997 0 R /FitH 418.022] + >> endobj + 1996 0 obj << + /Font << /F47 676 0 R /F15 679 0 R /F26 624 0 R /F14 634 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 2006 0 obj << + /Length 2548 + /Filter /FlateDecode + >> + stream + x??ZYs??~?_???U^s+ ?}?? ?`IWR*??L_??????bY????.???????%????Zna?o ???%??67? + V?mK!?E?ooo?k?K[Y???OU??????????J??J)U\??)??????l?n?????????????????7?????@??a??M??K??d??[L?Z?d?Q???????f?V?R {Ym?\Ue%????ESZa5?{,r??r?2?S?uW???I???k??? d?&82???`??$??(?,F?C?,??Hw????l????&?S??? ?/?$????.?X??{??e?1??F???l??}?9+ endobj + 2005 0 obj << + /Type /Page + /Contents 2006 0 R + /Resources 2004 0 R + /MediaBox [0 0 595.2757 841.8898] + /Parent 1995 0 R + /Annots [ 2008 0 R ] + >> endobj + 2003 0 obj << + /Type /XObject + /Subtype /Form + /FormType 1 + /PTEX.FileName (../Graphics/Compiler_Program_Representation.pdf) + /PTEX.PageNumber 1 + /PTEX.InfoDict 2009 0 R + /Matrix [1.00000000 0.00000000 0.00000000 1.00000000 0.00000000 0.00000000] + /BBox [0.00000000 0.00000000 607.00000000 251.00000000] + /Resources << + /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] + /ColorSpace << + /Cs2 2010 0 R + /Cs1 2011 0 R + >>/Font << /F2.0 2012 0 R /F1.0 2013 0 R/F3.1 2014 0 R>> + /XObject << + /Im1 2015 0 R + /Im3 2016 0 R + /Im5 2017 0 R + /Im4 2018 0 R + /Im6 2019 0 R + /Im2 2020 0 R + >>>> + /Length 2021 0 R + /Filter /FlateDecode + >> + stream + x??X?n#7}?W?q?9?_??^?.&? Lb?-/?Fck ???I~??x?fK-??1cwU??bU??b???????W/\???\;?? ????? ??i??Z???m?????:b????h???{???????S6??/#???0?P???3 ?????H?O???z?? lK?2N + /???????v???c?x?>=ov?????! ???I?b0.`??BR?R(?*)?4??V?? #?]b@????0??[?????? r5?^*~)1?? /a????7R + 8jD??D?$?v???????m??%?H0W? c]H?>?????J???H?"H?hO??;???JHx???????????[~?? 5?O????w????????????u9??d?8??rZHV?[?{???????|Y-?B????3M???1? + ?G???g?T?d??q?R? ie?SIS_????.Ol??>pNxg?X?v.p?K!N?Tw??????]???\!?|6???ay??LrT}~x???_QW?7?HvX????1JT??y`7???????I?v???!?O?v?aE~8?0????_??c???.?Y?,W??;7{?aG??"??N?????? ????z?s??iQ??f!t?????jb'??6h?Z?'Xy;???(?????+ :?????G????+}W??B?? >?? _???F?& + ??kt?JU?GY?????}?2?Qe?O?;??L/??V?G;.?tn?&:~'??5??;??+ endobj + 2009 0 obj + << + /Author (Jakob Praher) + /CreationDate (D:20060723081600Z) + /Creator (OmniGraffle 4.1.1) + /ModDate (D:20070407082800Z) + /Producer (Mac OS X 10.4.8 Quartz PDFContext) + /Title (Compiler_Program_Representation.graffle) + >> + endobj + 2010 0 obj + [/ICCBased 2022 0 R] + endobj + 2011 0 obj + [/ICCBased 2023 0 R] + endobj + 2012 0 obj + << + /Type /Font + /Subtype /Type1 + /BaseFont /Helvetica-Oblique + /Widths 2024 0 R + /FirstChar 32 + /LastChar 119 + /Encoding /MacRomanEncoding + >> + endobj + 2013 0 obj + << + /Type /Font + /Subtype /TrueType + /BaseFont /JHGNGU#2BHelvetica + /FontDescriptor 2025 0 R + /Widths 2026 0 R + /FirstChar 32 + /LastChar 118 + /Encoding /MacRomanEncoding + >> + endobj + 2014 0 obj + << + /Type /Font + /Subtype /Type0 + /Encoding /Identity-H + /BaseFont /ZVTJBH#2BHiraKakuPro-W3 + /DescendantFonts [ 2027 0 R] + >> + endobj + 2015 0 obj + << + /Length 2028 0 R + /Type /XObject + /Subtype /Image + /Width 227 + /Height 75 + /ColorSpace 2010 0 R + /SMask 2029 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???+ endobj + 2016 0 obj + << + /Length 2030 0 R + /Type /XObject + /Subtype /Image + /Width 227 + /Height 75 + /ColorSpace 2010 0 R + /SMask 2031 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???+ endobj + 2017 0 obj + << + /Length 2032 0 R + /Type /XObject + /Subtype /Image + /Width 183 + /Height 75 + /ColorSpace 2010 0 R + /SMask 2033 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 2018 0 obj + << + /Length 2034 0 R + /Type /XObject + /Subtype /Image + /Width 183 + /Height 75 + /ColorSpace 2010 0 R + /SMask 2035 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 2019 0 obj + << + /Length 2036 0 R + /Type /XObject + /Subtype /Image + /Width 183 + /Height 75 + /ColorSpace 2010 0 R + /SMask 2037 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 2020 0 obj + << + /Length 2038 0 R + /Type /XObject + /Subtype /Image + /Width 227 + /Height 75 + /ColorSpace 2010 0 R + /SMask 2039 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???+ endobj + 2021 0 obj + 1996 + endobj + 2022 0 obj + << + /Length 2040 0 R + /N 3 + /Alternate /DeviceRGB + /Filter /FlateDecode + >> + stream + x?}?OHQ???%B?e&R?N?W?`???o???k??????????n%B?.A?1?X?I:??b]"?(????73?????7?3????{@](m?z?y???(?;>??7P?A+?Xf$?v?lqd?}????????] ?U???????x????iO:???b??M??1?W?g?>??q?[ + ?2?M?'?"()Y'??ld4?????2??'&??Sg^???}8??&????w????,? \V:k???;?i?R;;\??u????V?????\???\?C9?u?(J?I????]????BS?s_ QP5??Fz?????G?%?t{3qW?D?0vz ?? \}\?+ ?????4?I?????x#?{z?wA??j}????????Q????=??8?m??? + ?(?o{1?c??d5?U???g??t????la??i"??\.5???????^?8tph0?k?!?~D? ?T?hd????6??????:>f??&?m?????x?A4????L?&????%???k???i??????Cq????m?&/?By#???%i??'?W??:?Xl?Err?'?=_???)?i7??????,?F|?N?????6?rm?^?? ???U?HW?????5;?????hendstream + endobj + 2023 0 obj + << + /Length 2041 0 R + /N 1 + /Alternate /DeviceGray + /Filter /FlateDecode + >> + stream + x??SMkQ?3V??*??t??E?0~,????i?c??A???d????$??U7nD?n@?.?pQ?FQ(?_??~?(t)?????*?????????????u?uM?Y?/ + ?L?j?;??d??T?s3??B?m??t??????? ??????|????]?HR?O?k?,px\sE?????f?!:t|????04Vj?U??0????????????a???K?#??kIzE???~??u??0?-????9?R????eL???c?? V??t????B?????r=M?????Q???qN???`????> + endobj + 2026 0 obj + [ 278 722 722 722 722 722 722 722 333 333 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 667 722 722 722 722 722 722 722 722 722 722 556 833 722 722 722 722 722 667 722 722 722 722 722 722 722 722 722 722 722 722 722 556 556 500 556 556 722 556 556 222 722 722 222 833 556 556 556 722 333 500 722 556 500] + endobj + 2027 0 obj + << + /Type /Font + /Subtype /CIDFontType0 + /BaseFont /ZVTJBH#2BHiraKakuPro-W3 + /CIDSystemInfo << + /Registry (Adobe) + /Ordering (Japan1) + /Supplement 5 + >> + /FontDescriptor 2043 0 R + /W 2044 0 R + /DW 1000 + >> + endobj + 2028 0 obj + 71 + endobj + 2029 0 obj + << + /Length 2045 0 R + /Type /XObject + /Subtype /Image + /Width 227 + /Height 75 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???OK*Q???43?4?:#?????:????l\ ??j6??fQ??p5 R.??"??!???????????????????@[??g??b|??(7M#?v?o??i?????F ?????}?s,???.??N?~I?X'???{ + ??_?k!??>9?*???u?? e???k??#"V?H!EMh????:=????<??>#E3?G??Z:?/???XW.????Fd???g?'J??T?xR1??S??U??I1?:?H"?6D7#?Bj??0???E??u??s?nG)5???????????h?W?.?u??v??9M?E??Es???M?iw{N?u}?????Y??????7.?? '?F?a?8w???F?;??n??l"??C"??j????8???l?u???????J^???/D%Y0??????q??u????m?>3 I? Q?b?R?q? ?O??W?[>?M??e?ZJ?$??(??r?y??????-?Q??Y+?qyC?v?j????L?/????{_???'?n??8??w?o?XD ?@"?D ?@"?D ?@"?D ?@"????? v7D?????d??=???? ?????'?N??kn??|#?~??+Tn??????????endstream + endobj + 2030 0 obj + 71 + endobj + 2031 0 obj + << + /Length 2046 0 R + /Type /XObject + /Subtype /Image + /Width 227 + /Height 75 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???OK*Q???43?4?:#?????:????l\ ??j6??fQ??p5 R.??"??!???????????????????@[??g??b|??(7M#?v?o??i?????F ?????}?s,???.??N?~I?X'???{ + ??_?k!??>9?*???u?? e???k??#"V?H!EMh????:=????<??>#E3?G??Z:?/???XW.????Fd???g?'J??T?xR1??S??U??I1?:?H"?6D7#?Bj??0???E??u??s?nG)5???????????h?W?.?u??v??9M?E??Es???M?iw{N?u}?????Y??????7.?? '?F?a?8w???F?;??n??l"??C"??j????8???l?u???????J^???/D%Y0??????q??u????m?>3 I? Q?b?R?q? ?O??W?[>?M??e?ZJ?$??(??r?y??????-?Q??Y+?qyC?v?j????L?/????{_???'?n??8??w?o?XD ?@"?D ?@"?D ?@"?D ?@"????? v7D?????d??=???? ?????'?N??kn??|#?~??+Tn??????????endstream + endobj + 2032 0 obj + 63 + endobj + 2033 0 obj + << + /Length 2047 0 R + /Type /XObject + /Subtype /Image + /Width 183 + /Height 75 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????Oq+ M?x?????a?Thed?.A?R5e?o??x337????w?_=???TW?SJ?6?]Tna\?#??????2PE#K ???????v?PX???O???W]h?????]??,? + N,?5???????y?Z???,%%???????|???7?????%~=>?{???D.?>?)???mh{9????}+Z[????w?GZ/?tJ??U?????O?Fb??????v~?Y?6????O> + stream + x????Oq+ M?x?????a?Thed?.A?R5e?o??x337????w?_=???TW?SJ?6?]Tna\?#??????2PE#K ???????v?PX???O???W]h?????]??,? + N,?5???????y?Z???,%%???????|???7?????%~=>?{???D.?>?)???mh{9????}+Z[????w?GZ/?tJ??U?????O?Fb??????v~?Y?6????O> + stream + x????Oq+ M?x?????a?Thed?.A?R5e?o??x337????w?_=???TW?SJ?6?]Tna\?#??????2PE#K ???????v?PX???O???W]h?????]??,? + N,?5???????y?Z???,%%???????|???7?????%~=>?{???D.?>?)???mh{9????}+Z[????w?GZ/?tJ??U?????O?Fb??????v~?Y?6????O> + stream + x???OK*Q???43?4?:#?????:????l\ ??j6??fQ??p5 R.??"??!???????????????????@[??g??b|??(7M#?v?o??i?????F ?????}?s,???.??N?~I?X'???{ + ??_?k!??>9?*???u?? e???k??#"V?H!EMh????:=????<??>#E3?G??Z:?/???XW.????Fd???g?'J??T?xR1??S??U??I1?:?H"?6D7#?Bj??0???E??u??s?nG)5???????????h?W?.?u??v??9M?E??Es???M?iw{N?u}?????Y??????7.?? '?F?a?8w???F?;??n??l"??C"??j????8???l?u???????J^???/D%Y0??????q??u????m?>3 I? Q?b?R?q? ?O??W?[>?M??e?ZJ?$??(??r?y??????-?Q??Y+?qyC?v?j????L?/????{_???'?n??8??w?o?XD ?@"?D ?@"?D ?@"?D ?@"????? v7D?????d??=???? ?????'?N??kn??|#?~??+Tn??????????endstream + endobj + 2040 0 obj + 706 + endobj + 2041 0 obj + 631 + endobj + 2042 0 obj + << + /Length 2051 0 R + /Length1 10828 + /Filter /FlateDecode + >> + stream + x??Z xTU?>?????}M??RY* ?R?l?($H0a ???QA "?(??(j??!#4 ??????*?Kk -:???uH???*??0=?????r?[?????V+ ?????????n????????=jQ??B??1l????S??????? ?`;????:?????????%m??v??H?????x?D??5`?`? + ???????C-n??A6G?7?/R?5?S@Z?Wz0?LX7?s+????a?B:? 6&?+ ?H?#}??DW????? 8??e??|N?cH??????I%?u???d???!??????8'?/?W? e?5t'?r?0????Z??LGGr?82?,#?? ??Tu#?H?A?I????g?K??2?1??Zv3???8?8?x????` ,??????\$4?? ~RB??L|??V??NQ??q?????|A?!?(?RRF*?????R'?7????q?w???X?b???8??Q|V|M??DI????$ ?E??C=? ?x???S???>??Ix^??/???? :b#???zr=?K??m?0>?$Z??????Rf?A5P??ET7??M?? z=????????%??2z??T3?a-?????f?????c?zv*???a??????????:???????O?o??"w^C????G???|?'?M*?,????NZ??kY?4v at z??^NWS?( ??n??-? ??3`{?z?FIY?ku?N???&??}??R?| ???4_???v9v??b6 z?V?R*?2??X??dU??ZO???,???????????????!Y??+?. q;??]?oW?`?g???m???!?_;???4aG 2?jc ?????uM1?X? + ?!?v??3q8K????6???#???p?? + ?e???????S?iGab?R?m=M9?`C#?7???&?P???i4??#??H??4? + WX ?? ????ZJ?=H???CQD)hAoDz??)z?$?x!I2?j0~?-K???dz??"?&? \??"F ???O??D*?\? ?,9?I???&^???c???mm?.,?p~C?S??b??????????H? ????l????d19?.'?s?? 39?,YKh?c???:?3??_? + ????% + ??@?x!F?"2 59??f??+?S????6?MnU??{????Y?/X?????*,PfF?"?J??eD?+.??mq??p?2M-?:s?eN6? + [;h??O6e?]?)-?1!?????(????h/?#???????2??0p??????????;????X?FBcz? ??=??? ?GJ??&???????GV?k?l?@???j??h'?m??(??J?Q%??m???m?????x????:?=?sd???????????nz???G???q?:y2??????6pf\O??4U?ZP"?M?J?&??8h????F?w?G?????rF??*?(f2???B?t?(?(U55???x????u4?J? ?&3l?l???nZ? ( 5?r???%=X "(????? ???g9+R??mQ?u???)K???1???BlX??(z[?k?Yvr?,?r?y?b??y??+#?vDQ!???d??6'?A?%??L????t?{?R?9sq=;??;.????E?????d?[?1?????}2?J ??"u??:0+p???4?-?Em?SM?v??TZ????*???CNN?c??fFg?r)?Z?????ss??y??O?????????????]?fP5. S?u?0%?"???????????n?+ ?:???s?? 3F???H?^??{?E?a2?D?) ????H+?g?>??R9??lr?s????5??b??????9??????/??#)y7??n?^??&??????????????e??=c??? ???U8??+??}?Uv?c??{rsRK????????Q?vzJ?c???(?R?$2*#??5(??`A?f?l??/tJm???dN??Y?I?C%K??? ?N???#?jv?HO?gv???3?????R???a?C??lc?!????(????$?? ??F??MgN???~????f4???p?h???b?Q?E#??@?~R????????n(FR^?9?^b?b?C?'aoN?`C?$???2?"? ?9????? 1?pn?F+?.X,??E#?D?????????E??H?X????*??w???{??v?_??fd?3L??o?????M=oN?????S?9??B!??=?abF?+[kj6lr???J%W???,?????????t%>e?? ??????w?;?t????X+ Dq? + 5P?S?a??Y??? ???w?o?????w.???>zz???=???5w??2)????,b0*q??G?*??????VOS?dv?Y?`?R??N^/??f??5!???VmV?{?wI???#??[??!?!???X?+ k0?u)FCD1!?U?D?"??????w?;o>?S????Q3??????L+?x??u:x??????;Q?)??`?r%?US?A?L ?A?5|??#)??$??H????4? ???OBV>??Y?%,??1??i??????T{Z+ ?dt?%FY?8@?[?)?v?W ??\y?:^?C#??do??M?&S?v?l????????!}?d??[q??$???2 Q>B<-^s??@?????Wn|?eu?R8??}+?????>{?u??k0#???)i9????@[v?U??? + ?????o?W???L5`e??x5?b?jsJP?*?X?*?)?>????Y?c?{?f?????;??^??{jC?!??:A[???X??1??Y??? ?C1/??R?'W7"n????A??q?72?iqw}VZ?3m?g??n??m???;???????)K????? ?FR?o??n??#??E????9C%?????of$? w???? ]\'?????A??E!??6(C2???-!+X???O??%? ?????H??L?5j?-?b??=?g'et?.??&??????H??)OM{F??Y?sT??????Db??%?/?k%X???#?????M?`v ;4?M1?U?4sN??A9Z??^??)???j??)6?,h???1"C???S;?T5????qyC?)V_?5#.?j?]??d?``???&??U+ ??7b?????>&g?x???]???????6&??????>???/^x?fr+ S ?1?V?SRZ?sW?mL??.\o ?/?z7??o??=p?L g(5?z?^??`^ak?>n9?????W?ra??$[-{C??BPl????-?????????/?F%?<?c0??????????]m??g?J1??I?A?5?q?Kq???SFE??/cEP?P%??3Az??z?]?)???0?)?3cP??Sf?u?&;?aLOc?a>y?bZ??qL?Pm7?C??^F?&K?F&D????m?+??`????????#? + *??X{U ?NN?&O?p?_???.?,?l9Z?n??????-????u????,?3?+ ?&?:>????Q????7:A#?? ????{???????N@??"v2G? R? F? ??g}??a???O#???'??y?@?????k?4????J?!E + E(J?q???Uf)???WU?oY?Uy????gtcmCct??)?/V????????y;fm??!=???`??*??? SK???vK?{???A??{*??Y?????-??k??.?Ux?w????\q??W??V???n????+?%??r`V?????Z3????k,V..?D?kV?5????Y?^??^??^?"????sV?o(????S9??Mo???> + endobj + 2044 0 obj + [ 15464 15464 656] + endobj + 2045 0 obj + 635 + endobj + 2046 0 obj + 635 + endobj + 2047 0 obj + 941 + endobj + 2048 0 obj + 941 + endobj + 2049 0 obj + 941 + endobj + 2050 0 obj + 635 + endobj + 2051 0 obj + 7366 + endobj + 2052 0 obj + << + /Length 2053 0 R + /Subtype /CIDFontType0C + /Filter /FlateDecode + >> + stream + x?cd`ab`dd? + ?r????,J?N?. (?? 7????!3?G??,?9?n?n??b8eX.??|b?ef`8+????L?M???eh????,c???$???GE??MP???GU??????????{????)?I?^??y????E??% + ?? + ?????FF + .??y??y + ??E??y + ?i?z + ??z: + >%)z + ?99 + A }? + A???Ee?)z /?g??+d+$*?%???&e+???4??? ???E?=|l2?}????f?????}?3???A?_??-?B???E??#???q??Z?+ endobj + 2053 0 obj + 509 + endobj + 2008 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [336.5902 83.0037 352.5136 94.6833] + /Subtype /Link + /A << /S /GoTo /D (figure.386) >> + >> endobj + 2007 0 obj << + /D [2005 0 R /FitH 784.0631] + >> endobj + 94 0 obj << + /D [2005 0 R /FitH 758.5513] + >> endobj + 98 0 obj << + /D [2005 0 R /FitH 615.9407] + >> endobj + 102 0 obj << + /D [2005 0 R /FitH 368.128] + >> endobj + 899 0 obj << + /D [2005 0 R /FitH 190.8854] + >> endobj + 2004 0 obj << + /Font << /F47 676 0 R /F15 679 0 R /F26 624 0 R /F57 691 0 R >> + /XObject << /Im13 2003 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 2056 0 obj << + /Length 2788 + /Filter /FlateDecode + >> + stream + x??]o?????b?"? + )R?7_??&?}????+??X^w?>???;$EI?dAp??Dg??????F????B?????4:???]{!6?????@b?s??????4&?YY!??????%?O+Q???]H + ?t?67??????L???R*???2+?W??|??L??=+ ?=??!8}??E??? ??*D??G???+A??Z?)l5?,?eLs&?4?ub?????Y??p|6:3f + &Yr??:?$?,?????p|???5???? ?:^M{"` ??R i?}`=bUh????r{???%???U??+??Y?:!E2?]?m?? ????'F??y?\p??N???w]??0??q?-???[??e??y?d??3 ? X?UK??Z?Y?`??+????+CB]s?I????[0? 7v?j?&???B ?W*?+ ^??????,???X-E????L???????u????????T??=M:?*?-??+ cC;?B????e??s??+ ???>M?9?[<????%JZ???&> endobj + 2058 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [365.3462 243.2223 392.4841 252.5784] + /Subtype /Link + /A << /S /GoTo /D (cite.Nair-Smith05) >> + >> endobj + 2059 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [206.6565 144.5776 233.7944 153.9337] + /Subtype /Link + /A << /S /GoTo /D (cite.Nair-Smith05) >> + >> endobj + 2057 0 obj << + /D [2055 0 R /FitH 784.0631] + >> endobj + 106 0 obj << + /D [2055 0 R /FitH 758.5513] + >> endobj + 110 0 obj << + /D [2055 0 R /FitH 398.3172] + >> endobj + 114 0 obj << + /D [2055 0 R /FitH 357.2133] + >> endobj + 2054 0 obj << + /Font << /F47 676 0 R /F15 679 0 R /F26 624 0 R /F14 634 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 2064 0 obj << + /Length 2319 + /Filter /FlateDecode + >> + stream + x??ZKs?6????c?*?????????SmWA????-O??"?O???xR+0D???,?vT??S ?18?@?????.(# ???E??>`dGf????k?_????)j????AK????C?- ??????? /H?9- + + ?_,u??????)?*!)6!?MJ*?vM1HK(6?2P??z}????Q??,?*?SkXAx?r?I?? ?K??????*??a??<????@??j*?? ?F??V at Y??????????-X9[??\?????3l??YZ + vug <3fwiw??r?????????????????????y????'s??z???????c/ ?w&?T????7??F'???P???K}?#?:?z?\?R?@?-???4x?p???H?????????&h?Y??*1S????8?aa???f5?A6?Jb7?????????`???nFA?N?~? Y??xK???\??J??.??K?????|?]???Ig????I?:?z7B?1D???W?0????W???N7#????Q89@??Y + ??????.V ?b?}?_? s?? T]m?Z?3'?:? ?{???+ endobj + 2063 0 obj << + /Type /Page + /Contents 2064 0 R + /Resources 2062 0 R + /MediaBox [0 0 595.2757 841.8898] + /Parent 1995 0 R + /Annots [ 2066 0 R ] + >> endobj + 2061 0 obj << + /Type /XObject + /Subtype /Form + /FormType 1 + /PTEX.FileName (../Graphics/ProcessVirtualMachine.pdf) + /PTEX.PageNumber 1 + /PTEX.InfoDict 2067 0 R + /Matrix [1.00000000 0.00000000 0.00000000 1.00000000 0.00000000 0.00000000] + /BBox [0.00000000 0.00000000 491.00000000 249.00000000] + /Resources << + /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] + /ColorSpace << + /Cs1 2068 0 R + /Cs2 2069 0 R + >>/Font << /F1.0 2070 0 R>> + /XObject << + /Im5 2071 0 R + /Im3 2072 0 R + /Im1 2073 0 R + /Im4 2074 0 R + /Im2 2075 0 R + >>>> + /Length 2076 0 R + /Filter /FlateDecode + >> + stream + x??V?n#7 }?W???`E$u}l??(??6??p?f?8k;-??/????x|?&H`???x????????a??? ?M`?$X/??>-?????u?????$@b?N;??C??Z?W??fs??a?j_?????fc{q[*8???CT??~???p????Xu?t???C??4v?Hc????T??????????!G[Y?9p?8????f{???j??+e??????e?vA?L?5???Zr0u?0uU?Hlb?6???u.w???$?X??g4?1??C,??q??????{???/??M????|?????1:Xo?d??YET??T?}?xl?oz?xE??????????!n?v??:?m?? z-L?'^\v???1{ ;?6?????'t,?d9?????e?????gK??kw9r????> + endobj + 2068 0 obj + [/ICCBased 2077 0 R] + endobj + 2069 0 obj + [/ICCBased 2078 0 R] + endobj + 2070 0 obj + << + /Type /Font + /Subtype /TrueType + /BaseFont /LGIZDP#2BHelvetica + /FontDescriptor 2079 0 R + /Widths 2080 0 R + /FirstChar 32 + /LastChar 122 + /Encoding /MacRomanEncoding + >> + endobj + 2071 0 obj + << + /Length 2081 0 R + /Type /XObject + /Subtype /Image + /Width 184 + /Height 75 + /ColorSpace 2069 0 R + /SMask 2082 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 2072 0 obj + << + /Length 2083 0 R + /Type /XObject + /Subtype /Image + /Width 184 + /Height 75 + /ColorSpace 2069 0 R + /SMask 2084 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 2073 0 obj + << + /Length 2085 0 R + /Type /XObject + /Subtype /Image + /Width 184 + /Height 123 + /ColorSpace 2069 0 R + /SMask 2086 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????+ endobj + 2074 0 obj + << + /Length 2087 0 R + /Type /XObject + /Subtype /Image + /Width 184 + /Height 177 + /ColorSpace 2069 0 R + /SMask 2088 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x??? + endobj + 2075 0 obj + << + /Length 2089 0 R + /Type /XObject + /Subtype /Image + /Width 184 + /Height 75 + /ColorSpace 2069 0 R + /SMask 2090 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 2076 0 obj + 959 + endobj + 2077 0 obj + << + /Length 2091 0 R + /N 1 + /Alternate /DeviceGray + /Filter /FlateDecode + >> + stream + x??SMkQ?3V??*??t??E?0~,????i?c??A???d????$??U7nD?n@?.?pQ?FQ(?_??~?(t)?????*?????????????u?uM?Y?/ + ?L?j?;??d??T?s3??B?m??t??????? ??????|????]?HR?O?k?,px\sE?????f?!:t|????04Vj?U??0????????????a???K?#??kIzE???~??u??0?-????9?R????eL???c?? V??t????B?????r=M?????Q???qN???`????> + stream + x?}?OHQ???%B?e&R?N?W?`???o???k??????????n%B?.A?1?X?I:??b]"?(????73?????7?3????{@](m?z?y???(?;>??7P?A+?Xf$?v?lqd?}????????] ?U???????x????iO:???b??M??1?W?g?>??q?[ + ?2?M?'?"()Y'??ld4?????2??'&??Sg^???}8??&????w????,? \V:k???;?i?R;;\??u????V?????\???\?C9?u?(J?I????]????BS?s_ QP5??Fz?????G?%?t{3qW?D?0vz ?? \}\?+ ?????4?I?????x#?{z?wA??j}????????Q????=??8?m??? + ?(?o{1?c??d5?U???g??t????la??i"??\.5???????^?8tph0?k?!?~D? ?T?hd????6??????:>f??&?m?????x?A4????L?&????%???k???i??????Cq????m?&/?By#???%i??'?W??:?Xl?Err?'?=_???)?i7??????,?F|?N?????6?rm?^?? ???U?HW?????5;?????hendstream + endobj + 2079 0 obj + << + /Type /FontDescriptor + /Ascent 770 + /CapHeight 727 + /Descent -230 + /Flags 32 + /FontBBox [ -195 -444 1446 1207] + /FontName /LGIZDP#2BHelvetica + /ItalicAngle 0 + /StemV 0 + /MaxWidth 1500 + /XHeight 531 + /FontFile2 2093 0 R + >> + endobj + 2080 0 obj + [ 278 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 667 722 722 722 722 722 778 722 722 722 722 722 833 722 778 667 722 722 667 722 722 667 722 722 722 722 722 722 722 722 722 722 556 722 500 556 556 278 556 556 222 722 722 222 833 556 556 556 722 333 500 278 556 722 722 722 722 500] + endobj + 2081 0 obj + 63 + endobj + 2082 0 obj + << + /Length 2094 0 R + /Type /XObject + /Subtype /Image + /Width 184 + /Height 75 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????K?p?????????M??a?.?PQ???@$O?"x??H??i Q??u?!???|z|??????~??_??;}?????Q?Q?????LQ^?Fmb??F????5???ya???X???=?1? ????1LQ??oG8y??%??E????xB??D\?EB?_??%???+HrX??z*c?a??I?IM ????_N? /)QM?d??R??a?R!???ZT?x?^=8?8Q???s???U?bX?fU???nT9?r{????????OZm k?? ??Oka??xWnVTT=g??f?9??0?{?t?v????"?????B?Q???????K ?????????$???0=h?If?F??p???[  ?? ??0???o ??| ???v????'?{ ?N?7n?cW?z,???j?`9???????fw???sdR??-??L??????????$u?I?>??=2??oR?????@??$?_??+?endstream + endobj + 2083 0 obj + 63 + endobj + 2084 0 obj + << + /Length 2095 0 R + /Type /XObject + /Subtype /Image + /Width 184 + /Height 75 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????K?p?????????M??a?.?PQ???@$O?"x??H??i Q??u?!???|z|??????~??_??;}?????Q?Q?????LQ^?Fmb??F????5???ya???X???=?1? ????1LQ??oG8y??%??E????xB??D\?EB?_??%???+HrX??z*c?a??I?IM ????_N? /)QM?d??R??a?R!???ZT?x?^=8?8Q???s???U?bX?fU???nT9?r{????????OZm k?? ??Oka??xWnVTT=g??f?9??0?{?t?v????"?????B?Q???????K ?????????$???0=h?If?F??p???[  ?? ??0???o ??| ???v????'?{ ?N?7n?cW?z,???j?`9???????fw???sdR??-??L??????????$u?I?>??=2??oR?????@??$?_??+?endstream + endobj + 2085 0 obj + 89 + endobj + 2086 0 obj + << + /Length 2096 0 R + /Type /XObject + /Subtype /Image + /Width 184 + /Height 123 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????K"a??u?if?i0u&??!?"*F^< ??i.???P?t?4 Q??u?!????u[????vy?????z?h?;????????fw7????oS??[V??r?u?'??'???O??q?^??U???%??F?t0????/?> + stream + x????K"q??u?if?i0u&??!?"*F^< ??i.???P?t?4 Q??u?!????u[??%???????????o?????#???q_?????????????5???(I????$ + 5?I3??nX6?2??V}???:8???O?f&W(?+;V) ??iD5?????3?????t??[???=k???n)??????-?^^???v?j???#k?M???6???.????f?Z?[???#????i??j??5E?????/ddK??vz}wpN`??s??U?!??????[?G??j???????5???????jVs???[??`?,??N??O??6????n???XP?t??????/?7w?G????/???UL??nY?g????;?????l?p????z9W????V???h:?????|6 N??J6?-????????w?;??}|zy}#?????????????????|?~#0???n???n???n???n???n???n???n???n???n???n???n???n???n???n???n???n???n???n???n???n???n???n???n???n??_7-;?????cC?n?;M??bQ?CF???;{????#I?n'?;??????L??2?;????}f?endstream + endobj + 2089 0 obj + 63 + endobj + 2090 0 obj + << + /Length 2098 0 R + /Type /XObject + /Subtype /Image + /Width 184 + /Height 75 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????K?p?????????M??a?.?PQ???@$O?"x??H??i Q??u?!???|z|??????~??_??;}?????Q?Q?????LQ^?Fmb??F????5???ya???X???=?1? ????1LQ??oG8y??%??E????xB??D\?EB?_??%???+HrX??z*c?a??I?IM ????_N? /)QM?d??R??a?R!???ZT?x?^=8?8Q???s???U?bX?fU???nT9?r{????????OZm k?? ??Oka??xWnVTT=g??f?9??0?{?t?v????"?????B?Q???????K ?????????$???0=h?If?F??p???[  ?? ??0???o ??| ???v????'?{ ?N?7n?cW?z,???j?`9???????fw???sdR??-??L??????????$u?I?>??=2??oR?????@??$?_??+?endstream + endobj + 2091 0 obj + 631 + endobj + 2092 0 obj + 706 + endobj + 2093 0 obj + << + /Length 2099 0 R + /Length1 11752 + /Filter /FlateDecode + >> + stream + x??z |T???????f??d&?//???d_H $?1$!l?E!? ~bZ?E??? ??Z????!?2H?O-?????????[???~?????7!@??????{???????=?????+ ????I??r+YA???4J????z??L?"0?&? ?C ?S???7??3Ff?B?"?q& ? + '?????6#O? OJ?2??!?????4??L[??t%??iff1??_???}?&n?M~?:?:?z w???[k????5?+ @??I??$????d>YH'????J??)n?P?Q7?F??%???E{???gf2??z?9?\b.???Z???8??.aw????????rU?h?????p?M?\?u?,??????_?r???m?&??3???\?9,?A????`.?'s`??n????y?>?q)??????XZ?hx??h? k`#3 v??a?????8W?e?P????? %????H^$7 + ??e???q???-?j?4??z?V???? %P?hl??B?16hj*T??l????=??????????0??#?8r?????GF?F??j + ? ?????????????Z???R?z,?2>?o?w??c???k???mh????ESUX??(h??c0?cM?o????3P?s??>&??1/6yJKC?K?[? ????? :?~??????Q????:f?????mW?2??l???m?????+??M?t?h?????EpS????:6am?4?NK??????A"???? 4(M???1M?.????? S[??QgC???5?[?Q?Z),8f_[-#?? + o(?A?W??????????8?U???+ ???h?\tri!]????????KqM\?s%?*j4?I pdaX?E??fl?p\???Z??H,?-% P? ?IkT?n??k??f??fsr???%?N?[?4?w4_?OJ$? ???4??????#C?SU-1?????TU??(?q?+{?cO?n(?60???j???XS#`*-!mm?F?$??? f?o?H???&??e??I7&?d?^C??&UsS?*>8dC+ j??????????????U?%? + ??M?????g?$?3???nz??1?Pb???v ?m?^&?????????Ct?????u??4?????? + ???????_?A*??=6??d?????~???H???h?,???&???p ?y????u????;Z???v?2????Y?VF?fY??9'???%x?4?v?????bJ3??1 K???Yy??kO?I?? 5??6?f??d??b??????T?? S?b?2%??/??,[?????????+ ??^\:?o??'O?t?&b??)s?(] K?P?? ?1?R3???l?r ?#?#???I|????h=?G? ??=?????6+??????+!??w????P??(T?f??q? 9?Q????E??????,/h6 + ??g??q? ?<>!?)?RO??F??q[?H???hW?=>#?Ad?????@AR?!????@??"9?S??L?2f???U?????E $??Qo%? + ?//F?rE?M?K?9??? ?U9m????6????e?q?5\?8???????l?:? + ?9???A[-z?%????e?(z?[???\?? + ???rln?v????o?V?n?,J?G????|y????T?<*Y?|?X?A!????J?8q??El??????????????LVv?pJ?F????C2{??"???s3EYE??Y?3???Ca?????0P??p??4]?????+lr?^?)'h ???:13i 2dt??';D??? :??[?)?SQn??? + ???e?QvBCV?1???]^??fi???0??G??j4?T?X???%"??F???.?b~??lC + gGG?-/Y?&S?82?\?N?m???^km?j??GY?uy?????'?m????Ok?L)?gn?r???- t???????E?|??;P?7??rx~????;??~YvdN??????8???????N?l???????nS??(k?)k?)k???Q?R?lX8????N?? ?X????)3[b????8??|?p?Lht?endstream + endobj + 2094 0 obj + 627 + endobj + 2095 0 obj + 627 + endobj + 2096 0 obj + 675 + endobj + 2097 0 obj + 720 + endobj + 2098 0 obj + 627 + endobj + 2099 0 obj + 8113 + endobj + 2066 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [231.4331 344.6447 247.3564 356.3243] + /Subtype /Link + /A << /S /GoTo /D (figure.391) >> + >> endobj + 2065 0 obj << + /D [2063 0 R /FitH 784.0631] + >> endobj + 118 0 obj << + /D [2063 0 R /FitH 758.5513] + >> endobj + 900 0 obj << + /D [2063 0 R /FitH 402.6028] + >> endobj + 122 0 obj << + /D [2063 0 R /FitH 175.7239] + >> endobj + 2062 0 obj << + /Font << /F47 676 0 R /F15 679 0 R /F26 624 0 R /F14 634 0 R /F57 691 0 R >> + /XObject << /Im14 2061 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 2102 0 obj << + /Length 3090 + /Filter /FlateDecode + >> + stream + x???r?6????qT?????k?8?d?km.???OY3?Jv?_??? ?Tm?$@????P?9??k???4M}]?6?K??w???z??^)??q?????????:S?j??????`+??5y???>??+ E??O??+ d+ ??? + j???????B?o??!#??T ???? ??"?eyUH??5y`??rp??Z???5!;#????????qD??(???s?s/?O1a? ?f??B+???j??E?9?U?-??B???ZH?q??I '??????/ + ???7j?2?E?9?U?-??B???ZHv???X?? r$F2?}?8??]C??-??n???6?-J???Jv???????dC??P?xb???|??????.p??b???"95?t?????2?a!E??2o?? ?6K?-?????5/&??????Wh;?U?tH?=:>?_??K??!????69o???Ag ?J?`??A??J1@???????vy1??3???b?\a5?3UV?s?|??(W?>????C'???????+ ?\???i7:???????C?!T?????+?u??TsP????????5F?[??zs??k?? $z6???????+ ?9u??tfS???I?????+ ??C6??e????!?r?F??&??%??^?+ ?&??v?q?? + I?{?????gY!???'? ?M#F??? ?C?9W?!|?F???(.W + ??4?????}M1?6????YLe-??a?t ?x?? *???]?t????v\?OEjpt??9???e?I??s?[s?????j?z + ??????B???Pm???????Rq??????????|???t??+ endobj + 2101 0 obj << + /Type /Page + /Contents 2102 0 R + /Resources 2100 0 R + /MediaBox [0 0 595.2757 841.8898] + /Parent 1995 0 R + /Annots [ 2104 0 R ] + >> endobj + 2104 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [106.4252 501.6134 133.5631 510.9695] + /Subtype /Link + /A << /S /GoTo /D (cite.Nair-Smith05) >> + >> endobj + 2103 0 obj << + /D [2101 0 R /FitH 784.0631] + >> endobj + 126 0 obj << + /D [2101 0 R /FitH 430.5561] + >> endobj + 2100 0 obj << + /Font << /F47 676 0 R /F15 679 0 R /F14 634 0 R /F26 624 0 R /F49 683 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 2107 0 obj << + /Length 2700 + /Filter /FlateDecode + >> + stream + x??ZKs????W?-??? ?Wnr?NvK?T"?/?=P3?#? q?k???h?q"rB?q?z????[?g?h?fNzl1?j???bT?/f?????Jr?,?M7?4IU??:iU&?j4<%?????/?|M7 ?t??u??/i??u???:?ES???????[?n????FQv??EPu.???h2M?>????d??nH.wE??w???B??{t???? 9?8???? ?!??73????????????i-N??8g???S?$???i7t'??DJZ????Wru? ? C?I?:??r???~??N???"z~|31?Ht??p3w^??H???E????f??$?x%?X?%Y???XC??>???????/??f???> endobj + 2109 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [340.2501 85.12 367.388 94.4761] + /Subtype /Link + /A << /S /GoTo /D (cite.Nair-Smith05) >> + >> endobj + 2108 0 obj << + /D [2106 0 R /FitH 784.0631] + >> endobj + 2105 0 obj << + /Font << /F47 676 0 R /F15 679 0 R /F14 634 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 2114 0 obj << + /Length 2991 + /Filter /FlateDecode + >> + stream + x???n????_1@*U???on?m$H?1????2?'nf???????=?"%j4??^?!??? ????t???Z??N?B??f???0?? a????*6?v?eU?B?5?????o????uV????O + ?t?V7????o?"i/?J??]w)???t??KY%??2?tp?;??#?5f?=?7?1!?a?r???7n?9?D?L?c?qPk?#r?0Stx%&d?H??O??V?,?D??{??HkQkh??P?????_??-+ ??9???h?? D?> endobj + 2116 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [155.9521 570.5421 171.8754 582.2218] + /Subtype /Link + /A << /S /GoTo /D (section.388) >> + >> endobj + 2117 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [153.2655 556.9929 169.1888 568.6726] + /Subtype /Link + /A << /S /GoTo /D (section.382) >> + >> endobj + 2118 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [477.9071 419.0505 493.8304 430.7302] + /Subtype /Link + /A << /S /GoTo /D (figure.391) >> + >> endobj + 2119 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [259.8546 390.7269 275.7779 402.4065] + /Subtype /Link + /A << /S /GoTo /D (section.388) >> + >> endobj + 2120 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [446.451 155.3164 480.2433 164.6725] + /Subtype /Link + /A << /S /GoTo /D (cite.Much98) >> + >> endobj + 2121 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [103.4035 139.04 119.3268 151.8379] + /Subtype /Link + /A << /S /GoTo /D (figure.398) >> + >> endobj + 2115 0 obj << + /D [2113 0 R /FitH 784.0631] + >> endobj + 130 0 obj << + /D [2113 0 R /FitH 758.5513] + >> endobj + 134 0 obj << + /D [2113 0 R /FitH 733.1646] + >> endobj + 138 0 obj << + /D [2113 0 R /FitH 633.3073] + >> endobj + 142 0 obj << + /D [2113 0 R /FitH 314.1512] + >> endobj + 2112 0 obj << + /Font << /F47 676 0 R /F15 679 0 R /F26 624 0 R /F49 683 0 R /F14 634 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 2124 0 obj << + /Length 1595 + /Filter /FlateDecode + >> + stream + x??XK??6??W?(1????H?n?A???%?A?????jcy??wf8?([?7@?X???L?Z?b?ri0??0?O?j%??/???B + ?J;??U??Um?%laH????O2[??????V.?)T ?v3-+a]]???????Q?0???K/G??pJM????e??5??}???? ?mr|H ???A?^w?^?x?a???B)jUN?X?RT??y ?T????2?E]?????? "o???3?+?[h + ?W? ????a?+ -EY?E9L$?m?5?=xIS?G??\|O&?9?gqBS?? P?D??????%~?r????????f??qd?ct???L??S?"K??4YZ??D1????X????X?ms??pU?B???6????o?d? d=?v??/7^.??4i?>^f?B????~No?????= znn ?p?)?.5?????K O????\)?x?]???M=??????j??d"N?ZEA at C??3?H??-? + 1c?K+ ?H?^8P???$?d?^N? + ???a??m%???]?qz????LG?=?82NzOz??,?T?>%IZu??H8???l?<1Qt?xx? Od?n?M???G????+ endobj + 2123 0 obj << + /Type /Page + /Contents 2124 0 R + /Resources 2122 0 R + /MediaBox [0 0 595.2757 841.8898] + /Parent 2110 0 R + >> endobj + 2111 0 obj << + /Type /XObject + /Subtype /Form + /FormType 1 + /PTEX.FileName (../Graphics/ProgramRepresentations.pdf) + /PTEX.PageNumber 1 + /PTEX.InfoDict 2126 0 R + /Matrix [1.00000000 0.00000000 0.00000000 1.00000000 0.00000000 0.00000000] + /BBox [0.00000000 0.00000000 479.00000000 473.00000000] + /Resources << + /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] + /ColorSpace << + /Cs2 2127 0 R + /Cs1 2128 0 R + >>/Font << /F1.0 2129 0 R>> + /XObject << + /Im2 2130 0 R + /Im4 2131 0 R + /Im1 2132 0 R + /Im3 2133 0 R + >>>> + /Length 2134 0 R + /Filter /FlateDecode + >> + stream + x??XMs?8 ??W`f/?4Q?)R???N????un?=?????Tv???$%Y?(??&ceS?@?;~??x9?p?m??f? ??????-??????f???)_`U?*????j?Y?1??/????=$W?o?????$?=b????G[??E?h????0*?aI????/??|[>??b]??b[?3 ?)B"?!J?L???K??C???^??????p:q??[^p????g?;9? + ?KTw??_( + f?? + ?y?k?????:5?????kiR????%???/8??k??=?\&`??+ K?*Z??a1;k/??????c+ ?5?,K]; ?$????G?R?Jd{s ?????1????nx?=~???q????I8??-b??????{?s????????????x?d?'?:??'?????tEoYt???????w??????H??r??>bV???z?~?Q?M ?D?n? {?T?C????????s??7?|q????'?'I??G?l$?E?J?j??VO?m?^m??-???e???P?Nct???^;??Vw??^??K?4?GHw?vt??3?I????x{ + ??)?0_-'????.??0j ? }a????]X&xFG??ht[L???{???'???P?F#Y?#G????h, ?(??e????a?A?\z???u?Vi???g ?G\?? ?c?? 8?????{6?b?p?T?y?-fNu???S??????Y?????aUr???L???<+F????7?k??*?6v?c???V?????5R?c??b??????T??? ??U?i?+~??????Ap??a??iO? X?|+y?J???_??rc:??> + endobj + 2127 0 obj + [/ICCBased 2135 0 R] + endobj + 2128 0 obj + [/ICCBased 2136 0 R] + endobj + 2129 0 obj + << + /Type /Font + /Subtype /TrueType + /BaseFont /LCAYEG#2BHelvetica + /FontDescriptor 2137 0 R + /Widths 2138 0 R + /FirstChar 32 + /LastChar 222 + /Encoding /MacRomanEncoding + >> + endobj + 2130 0 obj + << + /Length 2139 0 R + /Type /XObject + /Subtype /Image + /Width 146 + /Height 140 + /ColorSpace 2127 0 R + /SMask 2140 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x??? + endobj + 2131 0 obj + << + /Length 2141 0 R + /Type /XObject + /Subtype /Image + /Width 146 + /Height 157 + /ColorSpace 2127 0 R + /SMask 2142 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 2132 0 obj + << + /Length 2143 0 R + /Type /XObject + /Subtype /Image + /Width 460 + /Height 454 + /ColorSpace 2127 0 R + /SMask 2144 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ ??+ endobj + 2133 0 obj + << + /Length 2145 0 R + /Type /XObject + /Subtype /Image + /Width 146 + /Height 113 + /ColorSpace 2127 0 R + /SMask 2146 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x??? + endobj + 2134 0 obj + 1423 + endobj + 2135 0 obj + << + /Length 2147 0 R + /N 3 + /Alternate /DeviceRGB + /Filter /FlateDecode + >> + stream + x?}?OHQ???%B?e&R?N?W?`???o???k??????????n%B?.A?1?X?I:??b]"?(????73?????7?3????{@](m?z?y???(?;>??7P?A+?Xf$?v?lqd?}????????] ?U???????x????iO:???b??M??1?W?g?>??q?[ + ?2?M?'?"()Y'??ld4?????2??'&??Sg^???}8??&????w????,? \V:k???;?i?R;;\??u????V?????\???\?C9?u?(J?I????]????BS?s_ QP5??Fz?????G?%?t{3qW?D?0vz ?? \}\?+ ?????4?I?????x#?{z?wA??j}????????Q????=??8?m??? + ?(?o{1?c??d5?U???g??t????la??i"??\.5???????^?8tph0?k?!?~D? ?T?hd????6??????:>f??&?m?????x?A4????L?&????%???k???i??????Cq????m?&/?By#???%i??'?W??:?Xl?Err?'?=_???)?i7??????,?F|?N?????6?rm?^?? ???U?HW?????5;?????hendstream + endobj + 2136 0 obj + << + /Length 2148 0 R + /N 1 + /Alternate /DeviceGray + /Filter /FlateDecode + >> + stream + x??SMkQ?3V??*??t??E?0~,????i?c??A???d????$??U7nD?n@?.?pQ?FQ(?_??~?(t)?????*?????????????u?uM?Y?/ + ?L?j?;??d??T?s3??B?m??t??????? ??????|????]?HR?O?k?,px\sE?????f?!:t|????04Vj?U??0????????????a???K?#??kIzE???~??u??0?-????9?R????eL???c?? V??t????B?????r=M?????Q???qN???`????> + endobj + 2138 0 obj + [ 278 722 722 556 722 722 722 722 333 333 722 584 278 722 278 278 722 722 556 556 556 722 556 722 722 722 722 722 722 722 722 722 722 667 667 722 722 722 611 722 722 278 500 722 556 833 722 722 667 722 722 667 611 722 722 722 722 722 722 722 722 722 722 722 722 556 556 500 556 556 722 556 556 222 722 722 222 833 556 556 556 722 333 500 278 556 500 722 500 500 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 500] + endobj + 2139 0 obj + 82 + endobj + 2140 0 obj + << + /Length 2150 0 R + /Type /XObject + /Subtype /Image + /Width 146 + /Height 140 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????K"a??g??fL? Eela?????"y?K?!??9)< H??"?D?@? ?m?n? ?????????\???%?y?????W??0??e9?[&???,???~??/??$??N?$Q?9????r?(+k???i?$?45?_Sd???Hs? )-??? ?dq= iE???'????u#a&??-?e?I3a?a?' ??GbX^?iQ?Lg??Ry?d?R!?M?FT?I???k{?$??4???{9^?l8?t??f??MD?+?B$cf?j?;??h?lzw3??9?V!??j<]?5?????a?D????x?7k?t\??E?F?\o????????d???d??m??? m!b?W???????????????^_?o???G{;[???2????dADADADADADADADADADADADADADAD?S???^?????+h?.?????nq??U??+(\??o?????t?[?p????* + ??h\?C? ????endstream + endobj + 2141 0 obj + 90 + endobj + 2142 0 obj + << + /Length 2151 0 R + /Type /XObject + /Subtype /Image + /Width 146 + /Height 157 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????K"a??g??fL? Eela?????"y?K?!??9)< H??"?D?@? ?m?n? {y???????????YZB??k ??????a?,?q?2??o??w.???r? J??J:Y?D???_L????????????L???M?E??~ ?A???P$??7 ?m??X$?I???O? ?O ?F?L?3[$???f????O??GbX^?iQ?Lg??Ry?d?R!?M?FT?I8l??ux`7??v?d?? ????J?n???N?d????k???k??C?aE_??-??t{n??d}??uZ?U?!??~??n?Id+??s?^??$.?3???d? + ?I???????{5OnI6???N????XP? ??k??]?n???$????.z??UH?D?O?j?cw0??=?l?p????Z)W?w???)?[???d:{~!??l:?O[?rfC[????uckg??{~}?????F?????????????????|*z#DADADADADADADADADADADADADADADADAD?W??7B?& ??5?m???D?Fu;Z?m?Q??F?f}?~?m??I??&};?n???W????U?Sendstream + endobj + 2143 0 obj + 630 + endobj + 2144 0 obj + << + /Length 2152 0 R + /Type /XObject + /Subtype /Image + /Width 460 + /Height 454 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????KS??q??i[g?????2=?0?-?P1???!y??????E???W?"?B?B?.?@? ???????C?<^???????I??F?Qj? ??L&a^Sj?? + ?????A????xC??E?|. ??9????B?tsl???????21v?T,????%e>*????????D?h~?:;=????%??Y??b?2UMj?????F}???T?*?b>?g?? ????V_^]????T?????\?%3q9??af?B?2s{ie??V???@?h???????t{?R*?C?l?8>?,?m?v:???(??????w????b.;????jm???tw?????????w??vs?V?K?_??A??????????N??b?????R??????~w???0=v=ZF????????????{?????7?????jmv"???.???^???p?Y??????W???????e?2W?hw??N?~???Tt??????i??Q??[?????????????????^??>?mo6???e???[??{???|????o???????????????????k??Y:S:b?R,?R,Y?d)?b)?,?R,??%K?b)?b??%K?K?d)?b)?,Y?K?K?b)?b??%K?K?d???X??X?K?K?,Y??X?%K?K?d???X??X?d?R,?R,Y??X?%K?,?R,???X??X?d?R,?R,Y?d)?b)?,?R,??%K?b)?b???X??X?d?R,?R,Y?d)?b)?,?R,??%K?b)?b??%K?K?d)?b)?,Y?K?K?b)?b??%K?K?d???X??X?K?K?,Y??X?%K?K?d???X??X?d?R,?R,Y??X?%K?,?R,???X??X?d?R,?R,Y?d)?b)?,?R,??%K?b)?b?R,?R,Y?d)?b)?,Y?K?K?b)?b??%K?K?d?J,?R,Y?d)?b)?,Y?K?K?b)?b??%K?K?d???X??X?K?K?,Y??X?%K?K?d???X??X?d?R,?R,Y??X?%K?,?R,???X??X?d?R,?R,Y?d)?b)?,?R,??%K?b)?b?R,?R,Y?d)?b)?,Y?K?K?b)?b??%K! ?K?d)?b)?,Y?K?K?,Y??X?%K?K?d???X??X?t%?b)?,Y?K?K?,Y??X?%K?K?d???X??X?d?R,?R,Y??X?%K?,?R,???X??X?d?R,?R,Y?d)?b)?,?R,???????) }???hX????????g?_?)}?8?;>|???l???pthY??o??OG??]|Q*?????h??????U~[F?????????w??+?xw???????X???,gk?[?????????JEg?'o{??????????????N??b?????R??????~w???0=v}h??Ic??????/????^???H&?????H6_????f???????W*?{???v???Z5.??#?,s???d?n???y???D????Qg?????L?sC?LX(Ufn/????j??(m?[[??W?n?TJ?03? rQ9?Ij??????{JE?k???Z2??\0????b?2UMj?????F}???T?*?b>??z}.?? ?Qi?Q???A????.?? ?????G???`#?????^/-endstream + endobj + 2145 0 obj + 70 + endobj + 2146 0 obj + << + /Length 2153 0 R + /Type /XObject + /Subtype /Image + /Width 146 + /Height 113 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????k?P??sL?????(*?P??o ?E?R??H???`?)CK?N?????E??? ?R??]?????r?.?3?Y?T?gS?V$??w?D!N????\??j???8????I1?< ?"?v"'#x?Z??b4???Vg??s?aT??Z?+0???U?Ujf?c]u{8?^Y??Y??tU?_"?I-]4??????!?v?g?L???G???h??g+??uc???S??Gw???lT???g?D?/???f?k?Of??????????????Dj?`?Y?????r???????o????I$??T????G????g??????l?J??,|??X?\o]?????g/??|> + stream + x??{w|TU??9????{??LK/??@??B R$H U0??????X?@(?? ???.????Xp??? + .???}?CwW???9wB+ ?(??l??@;}???%o?7???h????iS>{??8?:???MY2_X?z??C;p??y??+?.??eh?????f'??J?^9a?|?A7??+ Z?5???hO}]G?7??~??-Gk??hW???}?C??;a?hS???V8?@3z/?e???p(=?&?>???r:?6??l2???x?eh + ???`??@Gxr?M??)?1???????yNG`?2-p??8????????x?LlT????@M0????` ?'?n??#???@G?R?W??)u-?% ~?q??t???????Y?j&W?rG?@1;?(?8R??;??)?g9? 3j:\???g?Z?C5S?w??PS???F???1 ?Gv?l'zX3=8??DM?LjS&6t?S;??d-cf?=X?a_v?q?y?V????*T;?y]-???!??d???Z??`YjUcC^? ?qNu + ??` ??<'?? + Vg??3???4t????????4???w*???#???%??H???A?,??????????Z?w??P?G+ 8;??M?+ szW???+ J'??s?#2?j'0?aG??#???? ?b?2?"(??KA ?j$4?,}??????p??.h? + ??/Q???P??O?p??S?`.'??????(\??S8~#??q??U?K?S(\??(\????k???}r????v#???? + ??_?p?O????D?[~???+ #???? b?h`\b?\pL>?F"???4?Rq|.FNA?F??3Gf?????????*? ? + TY?? )???(#?v1W???~p???r????Y+ ?G???jC|?8??\h?? i%?A%?J + A??j?%?????~??MK?v?W?/????D????D*7??r????E??????6c7???)??'??Uf???R?;?????q]?`F?V???;?8|?*r????O]??w??i??UV?? v?9??#?H??PRl?&=?[7?`?????R????????c?????? ?? ???D??[p???pH ??;?cF?q?`Df+????? HeH*?i??C?L1V=@?? p?M%?FC$L???????????%Pl??M*?*O??>?????}wO??? ??_?,??0??n? + QYI?C/c???^&?Z??[???? 95?c?# ???_????+ ?"\h?1R/?E?w???c??{_??&?,??Ao?z?S?s)??{>f???`?"ho?l? ???q68B??_'?RD*??,?i???F??b???R??v????????`????c?,?u?A??39??k??/??6??????akzy?P#g??o??8d?D??9kEp?`?????P?Y????i ?PX?X-T0  %&??{?V????;?iZ??S8i??.???rF?d?r??q?????T?,??} ??}?x?n.v?i!???:???6?????DoW(L q?????r?-?l2?4{?K?jON'{\?i??2. *MQ ?D^`????X ????h??Z??&?B%???(?UB3?i + ????v????9?d??????;?L?'G+8??l?"??????j?d?B? D????:?3g?(F????y0?????qNn?z??b?0X?bL?v#?2???*?xp?x?!i???????AMQJ ??Dai5??Jf?z??cs?h??????cA?L?A??OI*?)?X????KWGJo??@?qv?????pP?XE?????f??-j?f??c?%????M?!R???OM?=n!??C6:_???? ?PDtFc???7?? ??M???d + ?2c??'?? ?LbZq?u[T at lqY?v?OJ?l+ .\q??X?E2W????|wr?dr??w`?rQ???b?H0.?Iu???e??????CgQ??Y?}i??????&?????%77???B3?3Uy????i?h^???BQW??d?B????g?9? ???2??J? ??|N??i?????9F??0?q!W??B?(;G)? ??^?????L?t?l&?"?LR???1?|& ?????m?^~?/??????????#7>??? ??U4????m?????w?r??g????????&?K?}?x?/????#?@K?+b?+?S ???zE?/)??T?????????????????+ ?[?M,p!y??wQ"r?Dr?s?????????%?4??!\???????-`????J( ??v ? ]?z??t?H`VBa?Mq?@???~t???'d ???????????N!??=q????o?2d[r?'??Wi??`|??W?l~??/????b_GF? ??sv?{<z?4A??X??^?7?>?Zm???+???c???j?x?5Us?B????<|?z??m?%?M"dV??f?/??????R??$J + X??}A?Dk{? ????w???ZP?????????H??u???_?G???eY?(??]~?????zv????m(???~??\=????q?m?6a??&wXh??y]?? ??w???? ????????M`???p?u??????????~?)?4V1?tfC8??:?~????j?6 ~.d*&~??#~??/???ry%>?($?@P!O????nXx??ayk6???????w????=????=?6??]??]??)\?%v??,????>!^D?M?ZdX??X?2????l?NJs??Q+ W??E?Z??I??r9} ????Q:?/? ???F??^w?wodw??:.??????????b^?h???>'???9???????"???????w#^?.S?? ??????m?}??Q?OmL?A_8??.??j???:?6?M ??;??1I]??k:?phQ?1??G + {????? Q?O:A?c??I?E?+??g^????62????a?x????+????_??k??M??~K?|????j?[??w?8$R?q??cF?^-??w???c?+????????g%??? ??gw + v?.D??y?H?Z?lE???x?F??D?[c???;?;$M???>?????a????U?Mx??0Wv? ??????#????_?%??h?????????[K??K???7????g[?q??9Z$n?G???c?}?!9??8??'(w?I?Fn?< &??9??[ + ?k!?????????? ??&???????vu?n??????:F??????8?]?????Q?????C??t?cI^?W???s{B?Y?????%?q?+?A????y??hko$??????@<?P??K?n??(n??????????????k\?bdVz?s???qln??'?b?g??br???>?2?v????nH?P?????;?8ul^????&'C???? ?oR???"?????rLm4?[?????u ? ?NeTi"aC?(?????i2'p ??}7???????D?????k??)??????o}a.????5AT?????h?}ar?????W??`?rqN??R?6v??I?6?? .??K?R]z]d\??????????????`KzK?%????e??$??L???n??a???D???y??P?Vd2??7<^3?xs?g?sy??@?(W?u?6G?>0?#QW??1 D?g^~g?*$e?? P#????@$??(???Th:gSa+????/!U??0D?D?P????mqH8?O????? + Q???J?(UB\ 2??#??T??L?!T???2>??k??BSE???l + ???o?Pu??m"?w0?? |r???????W????oN??05!o???k??K?z??_l?0k at A??xm??????y??w>z??????J?N+ ??????x+?v??zn????>9r??^a???|}N?a??z>Ud?4?b&?fP??q?????E??-+??VfyC&|????????R??}8??|? y?{u=??Y?F?? j??W??S???Z~?z5?NX%??:I???????3?9B?8[??/Z???U?:?H?Ru?b????GmQ3??3??GN?`ZM?,?a'?j?u???!??I?R?T#?C???;G???jv7{Y?????PH?Q?? ?????R?*AL???f&??0,???*A% + ?_gb p?+ ???j ???;??w????;??1?7@?.z??#t????????????P?? ???p????w??X???~)'??R&W^????+???F?.*?R??U???s?u??u?5?=???\?i???4?_L/??[????6?V?V{j?????:?+S???R???h7??????(???m??Z5j?W?G??&;???VG??Q???$+ ??C{??????????|Q????9x>~???Q.j7=?~?)f^gk?s\)7?{?;?]????SMT?o_S??4?Z??.?N?k???-z?~?? ?n?w?Q?/MO??????????Ow"$?+ ?e+ endobj + 2150 0 obj + 672 + endobj + 2151 0 obj + 682 + endobj + 2152 0 obj + 1704 + endobj + 2153 0 obj + 647 + endobj + 2154 0 obj + 10652 + endobj + 2125 0 obj << + /D [2123 0 R /FitH 784.0631] + >> endobj + 901 0 obj << + /D [2123 0 R /FitH 496.6657] + >> endobj + 146 0 obj << + /D [2123 0 R /FitH 200.033] + >> endobj + 2122 0 obj << + /Font << /F47 676 0 R /F15 679 0 R /F57 691 0 R /F14 634 0 R /F26 624 0 R >> + /XObject << /Im15 2111 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 2157 0 obj << + /Length 2758 + /Filter /FlateDecode + >> + stream + x??[Ks?6??W?r?kG |?????N?S?]{?2?-Q?7????8???n??$H@?M???F?@?-3??-Y&????eY?4+r?\??r?_0#?-?MTSm+????????F??7?????O??f??-?9!????Krsw???b??yru??e?b~??.x????'??A?'?{???4|??5??=???????O????qJ?`???&??VTLM?I:?;?L?{???9????r??+???+????RQ????_?f? ?????J._?G???? ?U??ui?<,??t]??f_??? ?"eV? I????p??b???r/RP???X ,/?LlI;???T????+ 0?^.+?Ie?U????N??a?jz7??~??R-????8??& q+ Z}A?3iL0????Hq? gC??F?)?9p>?}????%P????? ?S??}??Jt?p?So?j9???jm`??p?:?icOsk_?dYw?b??*??0?????????+ z???XT!P??s?~?i _%?f?D:Y??n??6W?y?Za?&???kl&3?.??V?}V*?????"??t???(????Yu???s???2???S??E?+ ???)?rQ + ???Bv?B + ?(??M?????$>v??e??5 at UA??? ?T?6??g.k?)>/?c?5????P?g,?H*R???)2?k??N+r+ {??Q ?>Q7]??1)?}{x?Z?*?%?:??#T,H????u?{?3?S?3?7?{;??H?}j??+ ???????b?T,hV.jA\g??]P??S?????|?????`i"?I???X?(/A\??;? ??:????? %L?> endobj + 2159 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [225.6548 700.3424 268.3646 711.1091] + /Subtype /Link + /A << /S /GoTo /D (cite.adve-llva) >> + >> endobj + 2160 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [106.4252 617.0219 135.8321 626.378] + /Subtype /Link + /A << /S /GoTo /D (cite.lattner:msthesis02) >> + >> endobj + 2158 0 obj << + /D [2156 0 R /FitH 784.0631] + >> endobj + 150 0 obj << + /D [2156 0 R /FitH 758.5513] + >> endobj + 154 0 obj << + /D [2156 0 R /FitH 326.0184] + >> endobj + 2155 0 obj << + /Font << /F47 676 0 R /F15 679 0 R /F26 624 0 R /F33 936 0 R /F14 634 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 2166 0 obj << + /Length 3092 + /Filter /FlateDecode + >> + stream + x??io[???~[ + ???c??K?Z?J?j+kh?7?? R?Vq?????Y??+{??&?@s8???_?+???_???T??*?>?;?[.??[|?D$ \<@/?N??h?H?????EpM??yD4w??????P?hPh?A?n??$M?.?? 8???~??????Z Y,p?m?? + ???~F?+ ?@\D?y????C3? + ??"?? ?2j?tb((Mlo?T?M + .%hE?- v?#AL?Q5?h??GX?p??8??b???AI???K?> ????CP{???G??W??? &?OX???????z??q?i?W?mwJz&1?f~C? "???E^D?V??cM$h??????8?????????7"?P5??z???L#????m???p?B}?B??*S@?z???????G??H*????bQ?_??&???p??W/? ??b>????Q?CKwJ?iLv?O???+ ?2??3?k?%? WBPk??????B?? aZr3?r???D ????????RX?x? ???????????~?BQ?[?LqSx???b??v#????$?l?fV?W?? ????????-???2???????? ?????{?9??%Z????s?TX*??7?+ ??r%?W&????.?~???????????[?f?]???f?CS>?? ??? u?? u??:??Y+ ??Z??e??????]V?U ??'n??????? b0Tiu?K?=?E?{H {|?'{(q???(???`?E?2????e??4U?5{?-Z??S?/??.??$-u??O?fa????7h?7C???6?tHC??m?-quG????t?h??????B???21?????k?G????}?????-??????? ?[ }ocF???? ? 4?"D???j????9mYBO=?o?!dtrc Q 6`???t?);???4??h??a????????i??wX?}??}?"???2?z?g???Lzp?f7/@??T?-???=q/P] ?? ???49?r{6??8?C?+ E??E!E??-???]?!d?%??,?a??*5?sH&b??\??7?5?Y_ + ??{ + ?????+'d + J?(??????6??f c!oq+!(?y??(z??`?&??v?7-$?G!?[?S????(v:4?wh ????1-`?????-??? S?<M? ???? ??b?&;!??f??m??h&u&?*;q,8^??C ?:9X?b + ?o? ????? ?6? * ???*??#9??&?_P??Aj??{???.{?~n??`E???????hl???? ?[???Ixs???h?co????????y?W:??y:.P??=Y?n{D?xYG?W??:tr?jJ???1ot???T?0PXhc??C????m0??B??? ??/x?aV?G??n??W.;/]??zX??8?????????e??5?X? + > j?(??av????dj\ ???**.?B??L??z? ?eP??????+ a???????a{?O?????xqh&g?? ?LM8?????++?1{PuA`"Wu????:?> endobj + 2168 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [233.3612 418.665 271.7136 428.0211] + /Subtype /Link + /A << /S /GoTo /D (cite.llvmlangref:www) >> + >> endobj + 2167 0 obj << + /D [2165 0 R /FitH 784.0631] + >> endobj + 158 0 obj << + /D [2165 0 R /FitH 536.0843] + >> endobj + 162 0 obj << + /D [2165 0 R /FitH 397.6723] + >> endobj + 2172 0 obj << + /D [2165 0 R /FitH 202.6921] + >> endobj + 2173 0 obj << + /D [2165 0 R /FitH 204.8084] + >> endobj + 2174 0 obj << + /D [2165 0 R /FitH 193.451] + >> endobj + 2175 0 obj << + /D [2165 0 R /FitH 182.0936] + >> endobj + 2176 0 obj << + /D [2165 0 R /FitH 170.7363] + >> endobj + 2177 0 obj << + /D [2165 0 R /FitH 159.3789] + >> endobj + 2178 0 obj << + /D [2165 0 R /FitH 148.0215] + >> endobj + 2179 0 obj << + /D [2165 0 R /FitH 136.6641] + >> endobj + 2180 0 obj << + /D [2165 0 R /FitH 125.3068] + >> endobj + 2181 0 obj << + /D [2165 0 R /FitH 113.9494] + >> endobj + 2164 0 obj << + /Font << /F47 676 0 R /F15 679 0 R /F63 764 0 R /F11 1255 0 R /F26 624 0 R /F14 634 0 R /F36 2171 0 R /F57 691 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 2185 0 obj << + /Length 2465 + /Filter /FlateDecode + >> + stream + x??ZKs?F??W????g??7??r?j?*???+ ?e$q????g???_?X??? Q3U???:gw:N???????jQ????X;=N~h??_?YY????qUw ????%_C?W\?T?Q??Ap??!?07?;}???Q?p;??c??Rx];??AIW??=??e??W??r?48?W? ?h?!bB?6(????W\??0?(M??????o6?c?C?? ?VCo???e.FV??J+ ??\??E???OQ?]V?7S?|y?S??R??,?&Hk??M?o?S??N?|??)n?x????~?1?#"--???R?/3U/??iu?S"&PU?6E?T>?u$5&'??C oM?"?{???,??`1??8?i4X???U??y?? ?3Ys?N?u?d?.$??????mN:??l [??b? Y>?JTuNV????R???????^ZZ??G?E???>2?H? ,T???N??0??????<5???$?dR???97?3?x "??sP?p\???"?)??$????K??TT?:.??T?J??????X? ??h??c??0Z4+ A?????????]??DGS?gqz8???_)??{????u?I? ?>?Y??e Tx? n?~#?E??+??.l?H???WR,t??6??79?W3:?qO?????cq???:d? ???p6uop=irX?o????9l&'?K?iu"??:'+??O?QW?????y??mZ?B?mw+???9"?G)[????\9??|^\+ !??G????????? + ???'E?J o?,???=8?d?$?vj??6?????H?????0?????endstream + endobj + 2184 0 obj << + /Type /Page + /Contents 2185 0 R + /Resources 2183 0 R + /MediaBox [0 0 595.2757 841.8898] + /Parent 2110 0 R + /Annots [ 2187 0 R 2188 0 R 2189 0 R 2190 0 R 2191 0 R ] + >> endobj + 2163 0 obj << + /Type /XObject + /Subtype /Form + /FormType 1 + /PTEX.FileName (../Graphics/LLVM_CFG_Example.pdf) + /PTEX.PageNumber 1 + /PTEX.InfoDict 2192 0 R + /Matrix [1.00000000 0.00000000 0.00000000 1.00000000 0.00000000 0.00000000] + /BBox [0.00000000 0.00000000 283.00000000 412.00000000] + /Resources << + /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] + /ColorSpace << + /Cs2 2193 0 R + /Cs1 2194 0 R + >>/Font << /F1.0 2195 0 R>> + /XObject << + /Im5 2196 0 R + /Im1 2197 0 R + /Im4 2198 0 R + /Im6 2199 0 R + /Im3 2200 0 R + /Im2 2201 0 R + >>>> + /Length 2202 0 R + /Filter /FlateDecode + >> + stream + x??X_?? ?? Hx,??(?K?h????y ?g????}v???????o?w5??)???"?S?9~??^?x?!~>?3`?F??7?}|???????/????[??Tdc??F???HT??.??????V?m?l?R?o? [???S} ? [????SM??????yP?A???$???E ??V]QZjJ??6???f????_7????????/?? ?K???0`??????????5"???????+?*??k+ ??X?S|?Z/??????f?]????;#??? ???1K?yA1???\K?d???%? +?4??W?D?$8?M?? ??E???y?V?T'[???7???P????>?b?,%$+ ?z?h(?&?6iL?????L1b?*?n???]???????1????r???????7??"?? '?????'Q???;?>?s???f??r? ?l????b;\????????$?j? ???P?j!IR?????P??g??Xp????*K?]. + ,ml},?;qI5?????p']7????\#f?<?.?V{a?8V+ ???G%????Uf???????????????(??B?j??e??? W?"@?k?B??e(e???08?m.?~+O?MT?>o??Q_??????_??n?$???t?5z????c?/? i?o????&????sv2???z?~???z??0?W?? D?????)????=g???[?+???????_p? + ?uK?i??1???????H?nnk?0^?`-?B?????8?????L?P?????j?@Ke?yx?????Y??mR?1???+ endobj + 2192 0 obj + << + /Author (Jakob Praher) + /CreationDate (D:20060815220900Z) + /Creator (OmniGraffle 4.1.1) + /ModDate (D:20060815222500Z) + /Producer (Mac OS X 10.4.7 Quartz PDFContext) + /Title (LLVM_CFG_Example.graffle) + >> + endobj + 2193 0 obj + [/ICCBased 2203 0 R] + endobj + 2194 0 obj + [/ICCBased 2204 0 R] + endobj + 2195 0 obj + << + /Type /Font + /Subtype /TrueType + /BaseFont /NFGHMI#2BHelvetica-Bold + /FontDescriptor 2205 0 R + /Widths 2206 0 R + /FirstChar 32 + /LastChar 118 + /Encoding /MacRomanEncoding + >> + endobj + 2196 0 obj + << + /Length 2207 0 R + /Type /XObject + /Subtype /Image + /Width 97 + /Height 66 + /ColorSpace 2193 0 R + /SMask 2208 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 2197 0 obj + << + /Length 2209 0 R + /Type /XObject + /Subtype /Image + /Width 104 + /Height 66 + /ColorSpace 2193 0 R + /SMask 2210 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x??? + endobj + 2198 0 obj + << + /Length 2211 0 R + /Type /XObject + /Subtype /Image + /Width 114 + /Height 66 + /ColorSpace 2193 0 R + /SMask 2212 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 2199 0 obj + << + /Length 2213 0 R + /Type /XObject + /Subtype /Image + /Width 153 + /Height 66 + /ColorSpace 2193 0 R + /SMask 2214 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 2200 0 obj + << + /Length 2215 0 R + /Type /XObject + /Subtype /Image + /Width 114 + /Height 66 + /ColorSpace 2193 0 R + /SMask 2216 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 2201 0 obj + << + /Length 2217 0 R + /Type /XObject + /Subtype /Image + /Width 114 + /Height 66 + /ColorSpace 2193 0 R + /SMask 2218 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 2202 0 obj + 2006 + endobj + 2203 0 obj + << + /Length 2219 0 R + /N 3 + /Alternate /DeviceRGB + /Filter /FlateDecode + >> + stream + x?}?OHQ???%B?e&R?N?W?`???o???k??????????n%B?.A?1?X?I:??b]"?(????73?????7?3????{@](m?z?y???(?;>??7P?A+?Xf$?v?lqd?}????????] ?U???????x????iO:???b??M??1?W?g?>??q?[ + ?2?M?'?"()Y'??ld4?????2??'&??Sg^???}8??&????w????,? \V:k???;?i?R;;\??u????V?????\???\?C9?u?(J?I????]????BS?s_ QP5??Fz?????G?%?t{3qW?D?0vz ?? \}\?+ ?????4?I?????x#?{z?wA??j}????????Q????=??8?m??? + ?(?o{1?c??d5?U???g??t????la??i"??\.5???????^?8tph0?k?!?~D? ?T?hd????6??????:>f??&?m?????x?A4????L?&????%???k???i??????Cq????m?&/?By#???%i??'?W??:?Xl?Err?'?=_???)?i7??????,?F|?N?????6?rm?^?? ???U?HW?????5;?????hendstream + endobj + 2204 0 obj + << + /Length 2220 0 R + /N 1 + /Alternate /DeviceGray + /Filter /FlateDecode + >> + stream + x??SMkQ?3V??*??t??E?0~,????i?c??A???d????$??U7nD?n@?.?pQ?FQ(?_??~?(t)?????*?????????????u?uM?Y?/ + ?L?j?;??d??T?s3??B?m??t??????? ??????|????]?HR?O?k?,px\sE?????f?!:t|????04Vj?U??0????????????a???K?#??kIzE???~??u??0?-????9?R????eL???c?? V??t????B?????r=M?????Q???qN???`????> + endobj + 2206 0 obj + [ 278 722 474 722 722 889 722 722 333 333 722 584 722 722 722 722 556 556 556 722 722 722 722 722 722 722 722 722 584 584 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 556 611 556 333 722 722 278 722 722 278 889 611 611 611 722 389 556 333 611 556] + endobj + 2207 0 obj + 41 + endobj + 2208 0 obj + << + /Length 2222 0 R + /Type /XObject + /Subtype /Image + /Width 97 + /Height 66 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????K?p?sn?9[?|!Y?TDR?DP?z!j7??!???? ?F??n?^?8?v?h????YZz??/W??s??||??????0d?@? ??? ArFG??a?h????A?? + ?????q\?)QDt???rD???f????P?:-9?!pL!*d/??(??#???2?b2?? ?u+?2??'?? + ?m?`??X0P??fw2 ??@`Y?q?m?2,*8?7:k0???v??????}Vpuq????Y?av?_1????????^?f(\S?T0LS?T? )_?????^$??????C??[~?_????? ??"? ???=?#pt??&v?n?> + stream + x????K?`?s???5_? ?????&?? ???????oj]??^?7Qt3? ??? F?Q?kgG?N?sn?c;??s?<~?a{????}iL??+ ?????e?yw????Y?5?\??>??S????H???H?w=?Q??a=?Q??a=?Q??a=?q??q?1??G??endstream + endobj + 2211 0 obj + 45 + endobj + 2212 0 obj + << + /Length 2224 0 R + /Type /XObject + /Subtype /Image + /Width 114 + /Height 66 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????K?`?k?Gs????X?4D???P0P6?.?b4?Q? ??*)??n?,?f?? ? A A#%??????:?\??'????/?y?????c?'0:??.? #??(?C????!?n%?8 at la??P??????`8A?')??v?v:?I;I???}#?Q?6A?nf???x<^ ???Y?MS6?UB0f%?\ ;????? O??!t????????]??n??:?m?K??5???u?!?k?o????n?w?rhh???qh???g4u?0??*???[????+ endobj + 2213 0 obj + 52 + endobj + 2214 0 obj + << + /Length 2225 0 R + /Type /XObject + /Subtype /Image + /Width 153 + /Height 66 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????K?`?????????b??4EEH(Ay!?n??FH??? ?"? ???A?Gp]b)??v???:'?????w??g??????C?K???f8?}'??? (?b?Q?"?A5?SK?B?1?H??q??H?H?a???v['H???&C~7?#?????Y??????@$?????<.?n???8?r7u?HYfX?7??G?? ? Q?E#?b??fg,?3?V?G ????xq9_??5?$?j??/?9?61Z?#i?;$??s???a?z ?j???T??????N???N1??_Iew??5?~z???\+??d?+??e(?I?0f?v)S????fK?+ m? oY??x?@|??CG?#^??endstream + endobj + 2215 0 obj + 45 + endobj + 2216 0 obj + << + /Length 2226 0 R + /Type /XObject + /Subtype /Image + /Width 114 + /Height 66 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????K?`?k?Gs????X?4D???P0P6?.?b4?Q? ??*)??n?,?f?? ? A A#%??????:?\??'????/?y?????c?'0:??.? #??(?C????!?n%?8 at la??P??????`8A?')??v?v:?I;I???}#?Q?6A?nf???x<^ ???Y?MS6?UB0f%?\ ;????? O??!t????????]??n??:?m?K??5???u?!?k?o????n?w?rhh???qh???g4u?0??*???[????+ endobj + 2217 0 obj + 45 + endobj + 2218 0 obj + << + /Length 2227 0 R + /Type /XObject + /Subtype /Image + /Width 114 + /Height 66 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????K?`?k?Gs????X?4D???P0P6?.?b4?Q? ??*)??n?,?f?? ? A A#%??????:?\??'????/?y?????c?'0:??.? #??(?C????!?n%?8 at la??P??????`8A?')??v?v:?I;I???}#?Q?6A?nf???x<^ ???Y?MS6?UB0f%?\ ;????? O??!t????????]??n??:?m?K??5???u?!?k?o????n?w?rhh???qh???g4u?0??*???[????+ endobj + 2219 0 obj + 706 + endobj + 2220 0 obj + 631 + endobj + 2221 0 obj + << + /Length 2228 0 R + /Length1 9576 + /Filter /FlateDecode + >> + stream + x??Z{xT??_?DkK??9?Ci%??`7?\??K??4+ ?t%???d?A+ tav??]?+?????{?z??93rf?t??vO?~?9????8e???m?}?9y?I????-??%Y??Go ???0?u ?r?sC?!Sb??|Z}wpc???K??-???y ]U4?kP7???x??=?%?f???]??=?"????(??? Q?D?_Ffg?.???_=^????j?:5rB???uK?0?C!????? .????;K6?ebG??lj??P????<5?e??????5??dR\?B??w?#?+ b???4E??`???& ?;-V!??i?!?`7?(]??$b??Cbu???OP??9??W#\B?+?~G?}????S???T?y??p???i? ??^w^q?*???-V??f~??G?[o/?-?Pc?????4????????e,|!{??P^.???iYt?\?Wu??UPR\??M?&K?O????X?0?XPRl?? ???aggUe\????N?:?|k??|[??9?F???????o&?d??5????Nt?:?8?????Q??W????P??MO??q3z???=???????{g?Gg?D?G??9?f<? + ?Q?|9r????t???I?6%?c????]?$?$??zV??>?F???????o???M???Q???Q??*????vN??\?&d???(?*{ + 8?I$?L@?c?*?}????% 7?%???b?j?~???????9?Yw?????????????.[p???7????d??@?%P??F?????A????,?j?y?eX?I5 ?S?9?EN???C???????????V>4??>?C??1\^N?h??Za(?r?T?????3???G+7t?E?????x8?I?d?"??a???a???nW??l???2b? 2????f?????F?z???BWy????-H?r??\z??z?Uv;m1?#?i???)??[NH?[???-?Y??d?7?????3???55?l??9??|)?????^??Lq)??D??X????jw??(h?>M??u]???s??$????????j ???t??????I??ry ??*??????,?? ??q?0????9?m????\B?q???T_?0???5??j^????FW?~+ ????????{??,?B}n?????W~?t???9?????G??#??9?W>??dmF}??m"_v?[@?????b?~&1^a?d7???V?f?v??r??$?????p?~O?? 38 ?;e_@??U?????5??1?????????QW5?e#?+ ?6?y:??So?w& ???|v???9?z?? ??y?q?f?l??s??v??3?\??a???Y?????5 X?5??.?d?#??D???M*M ??$?k?????r ?4?sB?&e?;????P?3?t?#??I?IeP?T *?J?R??bT?2????d?4 :?????????Ll?2?b?F p????Vi??/? \??5????g?????c ???}??`?\?:;???_o=f???{????wMou/?????????En???u?m???,?iwop??7> + >> endobj + 2188 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [449.953 446.8443 465.8763 458.524] + /Subtype /Link + /A << /S /GoTo /D (lstlisting.404) >> + >> endobj + 2189 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [320.3065 419.7459 336.2298 431.4256] + /Subtype /Link + /A << /S /GoTo /D (lstlisting.404) >> + >> endobj + 2190 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [230.9722 286.0271 255.3717 295.5904] + /Subtype /Link + /A << /S /GoTo /D (subsection.511) >> + >> endobj + 2191 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [106.4252 153.2091 149.4294 163.9758] + /Subtype /Link + /A << /S /GoTo /D (cite.cytron91efficiently) >> + >> endobj + 2186 0 obj << + /D [2184 0 R /FitH 784.0631] + >> endobj + 902 0 obj << + /D [2184 0 R /FitH 500.9718] + >> endobj + 166 0 obj << + /D [2184 0 R /FitH 270.5687] + >> endobj + 2183 0 obj << + /Font << /F47 676 0 R /F15 679 0 R /F57 691 0 R /F11 1255 0 R /F26 624 0 R /F33 936 0 R >> + /XObject << /Im16 2163 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 2231 0 obj << + /Length 3423 + /Filter /FlateDecode + >> + stream + x??[YoG~???# gz?>?M?$p6(Y,"?%?MQ?I????????>?g??? ??04?????????b???X?? + ?/???[%???????8??/?V????p??w,Hm??????}??g??8?????;gg??-??X??v?)?????t?w?b?v%?r{??r???????=??:=? ?7?"rB?[??????WgEN?h?e?zK?B??d? ?_)3e??(;V + ?D8<,_t? ??"iaYA????N~{??@?? ?z?x?"?@7'?{?Mp????/'?. ???W|?i?l????I????$2)?;??V|?ve?r}???_?a???!??V/+???P?h?)Z?x??????wq??x?L??}?X#0?? ??j|????? ??eW??1??????iCx??p?,?X+ R?`??@?qG??OXksPR?3????r??XNk?3?%??t??W?L7?D???`??9?1&??5bG?????[rQ?h??*u???"L?? if?60?G?b????X??X??>ef??9S????^???5???K???????????7??>u:*,?7?g??w?j-??4??gq??wGL????7?I?@VhW??S???D^?N?D????3R??? q ?VF??a?.???=*?7?Z??????z?s??&8?q~?1?TdM?????.wCx?O?8?:n?C?K;????B??D???B?5?A?dPXI ???A3??Aa?e]???U??{Wv??L??[G?F{????L=)???8???L?v9???2[W???I???7?? + ??+]???o?9???0H?/4N?-??????)$?~n???C? ???m}?s??I?G?fgU?a?T?.?~?RS1g|??4????J??>'??Dw????yB??3???Z??7?+?O???G.?9g?T,+??&??8)????G??P ^????{)F@? + + ?????@???I????/??????A?aJC? 0?y??d????@$?Q$W<|T?`a??g,?u3FW?P + + ?}??????$m?D ??, a`?B??P?S?z???\ehq??'&?????)?D??Z,5??fp????? E?????*NUuP???6x????2"???,? 0?){l?? :????$????)G??j??vR????0-?>2t?::? ?1?C???K???4???a?Qm????.P|??@????}[???1Y???zK??4?%?W??^+ ??????????*?z(G?(Z?Z)Zk?E?????=??j02=i????-???????t???T7?U????z????:]????/?*"?r??b?]???????|+ W9?????????,J #W??mE?????'r?? `\? ????M?? ?y???f??e> endobj + 2235 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [302.2262 543.9274 318.1495 555.6071] + /Subtype /Link + /A << /S /GoTo /D (lstlisting.418) >> + >> endobj + 2246 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [140.4853 350.1371 156.4086 361.8168] + /Subtype /Link + /A << /S /GoTo /D (lstlisting.428) >> + >> endobj + 2232 0 obj << + /D [2230 0 R /FitH 784.0631] + >> endobj + 2233 0 obj << + /D [2230 0 R /FitH 608.7771] + >> endobj + 2234 0 obj << + /D [2230 0 R /FitH 608.7771] + >> endobj + 2236 0 obj << + /D [2230 0 R /FitH 509.3213] + >> endobj + 2237 0 obj << + /D [2230 0 R /FitH 511.4376] + >> endobj + 2238 0 obj << + /D [2230 0 R /FitH 500.0803] + >> endobj + 2239 0 obj << + /D [2230 0 R /FitH 488.7229] + >> endobj + 2240 0 obj << + /D [2230 0 R /FitH 477.3655] + >> endobj + 2241 0 obj << + /D [2230 0 R /FitH 466.0081] + >> endobj + 2242 0 obj << + /D [2230 0 R /FitH 454.6508] + >> endobj + 2243 0 obj << + /D [2230 0 R /FitH 443.2934] + >> endobj + 2244 0 obj << + /D [2230 0 R /FitH 431.936] + >> endobj + 2245 0 obj << + /D [2230 0 R /FitH 420.5787] + >> endobj + 2247 0 obj << + /D [2230 0 R /FitH 274.8834] + >> endobj + 2248 0 obj << + /D [2230 0 R /FitH 276.9997] + >> endobj + 2249 0 obj << + /D [2230 0 R /FitH 265.6424] + >> endobj + 2250 0 obj << + /D [2230 0 R /FitH 254.285] + >> endobj + 2251 0 obj << + /D [2230 0 R /FitH 242.9276] + >> endobj + 2252 0 obj << + /D [2230 0 R /FitH 231.5703] + >> endobj + 2253 0 obj << + /D [2230 0 R /FitH 220.2129] + >> endobj + 2254 0 obj << + /D [2230 0 R /FitH 208.8555] + >> endobj + 2255 0 obj << + /D [2230 0 R /FitH 197.4981] + >> endobj + 2256 0 obj << + /D [2230 0 R /FitH 186.1408] + >> endobj + 2257 0 obj << + /D [2230 0 R /FitH 174.7834] + >> endobj + 2258 0 obj << + /D [2230 0 R /FitH 163.426] + >> endobj + 2259 0 obj << + /D [2230 0 R /FitH 152.0686] + >> endobj + 2260 0 obj << + /D [2230 0 R /FitH 140.7113] + >> endobj + 2261 0 obj << + /D [2230 0 R /FitH 129.3539] + >> endobj + 2262 0 obj << + /D [2230 0 R /FitH 117.9965] + >> endobj + 2263 0 obj << + /D [2230 0 R /FitH 106.6392] + >> endobj + 2264 0 obj << + /D [2230 0 R /FitH 95.2818] + >> endobj + 2265 0 obj << + /D [2230 0 R /FitH 83.9244] + >> endobj + 2229 0 obj << + /Font << /F47 676 0 R /F15 679 0 R /F11 1255 0 R /F36 2171 0 R /F63 764 0 R /F57 691 0 R /F14 634 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 2269 0 obj << + /Length 2691 + /Filter /FlateDecode + >> + stream + x??ZYoG~???K?!`??}???a?:p?,$???%R2QT4?????cz83?,??5u|U]]]C???'?k?B? ?5?V?????/n`??g"??i?6?*V?{&? H??????????X\\???N????o.>.E?]??R???R??s??~ZJ?lo?V6?v@?+ ??&#c????Cc????)N???g\8=???4\1mq??????+ *??????a??@???f ??p?Yv2i???s%???????J?7(?N[????xB+ ?il?a~?n????N???f?9)??3;P-??a?????x$????1V?????>????tT + ???a?????n??r3?C?????*???L?????}???N???f?>)??=;av-6?t?????\x????C5?I?3???'??b',??R???? ?m????u??;??5??7???R?Op??$+?C?:?/???t?\?>?????&;?z??E?????@?????|??M? + ??R?_?2?T?y??Q2R??Qc????????@?????e?o&e+ ??2?9(????????????,^? ??1?[?W~S???+ endobj + 2268 0 obj << + /Type /Page + /Contents 2269 0 R + /Resources 2267 0 R + /MediaBox [0 0 595.2757 841.8898] + /Parent 2266 0 R + /Annots [ 2272 0 R 2273 0 R 2274 0 R 2275 0 R ] + >> endobj + 2272 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [177.6661 687.7501 193.5894 699.4297] + /Subtype /Link + /A << /S /GoTo /D (lstlisting.448) >> + >> endobj + 2273 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [140.3536 674.2009 156.2769 685.8805] + /Subtype /Link + /A << /S /GoTo /D (lstlisting.428) >> + >> endobj + 2274 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [280.1791 646.797 296.1024 658.7821] + /Subtype /Link + /A << /S /GoTo /D (lstlisting.448) >> + >> endobj + 2275 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [405.2795 646.797 421.2028 658.7821] + /Subtype /Link + /A << /S /GoTo /D (lstlisting.428) >> + >> endobj + 2270 0 obj << + /D [2268 0 R /FitH 784.0631] + >> endobj + 2271 0 obj << + /D [2268 0 R /FitH 758.9497] + >> endobj + 2276 0 obj << + /D [2268 0 R /FitH 625.7401] + >> endobj + 2277 0 obj << + /D [2268 0 R /FitH 628.1619] + >> endobj + 2278 0 obj << + /D [2268 0 R /FitH 616.8046] + >> endobj + 2279 0 obj << + /D [2268 0 R /FitH 605.4472] + >> endobj + 2280 0 obj << + /D [2268 0 R /FitH 594.0898] + >> endobj + 2281 0 obj << + /D [2268 0 R /FitH 582.7324] + >> endobj + 2282 0 obj << + /D [2268 0 R /FitH 571.3751] + >> endobj + 2283 0 obj << + /D [2268 0 R /FitH 560.0177] + >> endobj + 2284 0 obj << + /D [2268 0 R /FitH 548.6603] + >> endobj + 2285 0 obj << + /D [2268 0 R /FitH 537.3029] + >> endobj + 2286 0 obj << + /D [2268 0 R /FitH 525.9456] + >> endobj + 2287 0 obj << + /D [2268 0 R /FitH 514.5882] + >> endobj + 2288 0 obj << + /D [2268 0 R /FitH 503.2308] + >> endobj + 2289 0 obj << + /D [2268 0 R /FitH 491.8734] + >> endobj + 2290 0 obj << + /D [2268 0 R /FitH 480.5161] + >> endobj + 2291 0 obj << + /D [2268 0 R /FitH 469.1587] + >> endobj + 2292 0 obj << + /D [2268 0 R /FitH 457.8013] + >> endobj + 170 0 obj << + /D [2268 0 R /FitH 395.8287] + >> endobj + 2267 0 obj << + /Font << /F47 676 0 R /F15 679 0 R /F14 634 0 R /F57 691 0 R /F63 764 0 R /F26 624 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 2295 0 obj << + /Length 2890 + /Filter /FlateDecode + >> + stream + x??Z?o7?_???V@?????>???pEr@#@??A????,+?????ofH?r??]?P???!??3???+b%?f*?r^3n?X??W|u/?y%_?;?k?6? ?=?$??????k????X]????N???y?\\??]o?R???Z??Kzh?XK???(?7?@w??'?? ?????w8gB?G????/W?]wr?D .{?5e:?MIF?S*3??Q~?V + ?D?g?W??p?*??4????f????{???_?8X???x?L?????3m??=W??~??????s??U?f#lJ/?X?w?? R?\dw?????3:???W????H???L?~pB?8=E??-?d??G?w}???P?Fd??Lw???????NY?[o????i???~Z?????O?r? + l?L???l?+ m8?+i???W?????+?y#??w4????<|5??@???#?dFl?JG$??^?s???Ilg0I"?$? ?E^(t????Ag??? + ?ci??$9???g?0?_P? ??C??1?*??D2,????lU >J?U+ ,X?7i?f?x???"??0??e?a????????O???si ???~p`$?|???'??? :0?a2???t1??;??\??7Pd?-?u?q:?5?`???W??P_9?g??B8?|Wc+ 7#????r?P!?1S??5??? l?E?Yl???!?????Y:???RD?b?}q/?hm?????? ?D??5n??????\Nv'g?+??????"g??:???# J???"+ ?:6d?A????5??s?,??>U?}??@????H@??(?????????=???F??>a ??1??????ZBU?C???? + *? ??E?rR?&????1?%f?P?p+ _: + r?? dCL??8o??j?8???u?#?*0??8'?E?ZB?,????????h6??V??N???????i????>?g?Q??Y ????)?*??K????? .??V+ ???M?????Z?U<5?e????????U:#??M?P;G c? ?0P??T?<3?h1??????!%????????0??^??-???????B???-?P???? ???S> ?v??: + ???8b?N/?'t?#?}??{O??????dQ??U4???> endobj + 2308 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [139.7445 374.4857 155.6678 386.1654] + /Subtype /Link + /A << /S /GoTo /D (lstlisting.466) >> + >> endobj + 2309 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [424.2049 374.4857 440.1282 386.1654] + /Subtype /Link + /A << /S /GoTo /D (lstlisting.474) >> + >> endobj + 2296 0 obj << + /D [2294 0 R /FitH 784.0631] + >> endobj + 2297 0 obj << + /D [2294 0 R /FitH 568.5123] + >> endobj + 2298 0 obj << + /D [2294 0 R /FitH 571.2395] + >> endobj + 2299 0 obj << + /D [2294 0 R /FitH 559.8821] + >> endobj + 2300 0 obj << + /D [2294 0 R /FitH 548.5248] + >> endobj + 2301 0 obj << + /D [2294 0 R /FitH 537.1674] + >> endobj + 2302 0 obj << + /D [2294 0 R /FitH 525.81] + >> endobj + 2303 0 obj << + /D [2294 0 R /FitH 514.4527] + >> endobj + 2304 0 obj << + /D [2294 0 R /FitH 503.0953] + >> endobj + 2305 0 obj << + /D [2294 0 R /FitH 453.9159] + >> endobj + 2306 0 obj << + /D [2294 0 R /FitH 455.8486] + >> endobj + 2307 0 obj << + /D [2294 0 R /FitH 444.4912] + >> endobj + 174 0 obj << + /D [2294 0 R /FitH 343.022] + >> endobj + 2293 0 obj << + /Font << /F47 676 0 R /F15 679 0 R /F14 634 0 R /F63 764 0 R /F57 691 0 R /F26 624 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 2312 0 obj << + /Length 3615 + /Filter /FlateDecode + >> + stream + x???r[??]_?????0?%}J??g?m4?C???d5??T?}???n???3?$c]\?????T ????V???"D+?7j??;??k??Le ??1??V?*?(? ??zq??k+ ???!??1?W?S?|?"??????-?%??d}G?S??? zp?e???L??A + m???#????????C?z{J? ???/p'????U??eg??.?Ma??&????y??9?,W??E????gP?g?v??'?("?U^g72??`_???AGj?g(???(?^O?g???B?????u????)????? ??k?l?P????J????a?T?H??[?Y?nm?l8? ???L???g???? J??c?[x?@??3)}]p ?JJu?p?y|?~?=?????? ?L&?I?b???????(? ??xl??7X|?v%?K???2???T2??x????????G}Kn?^????0?jE"?????L ?.Q#x????????9??Q=??}?#F?"_h???X Q????d??zFT?RF????@???!x?n?W%????wS?4?r???R??=RX???`G\????????sV???>???N!??e????Y????gL?`d??{???-?RlBA??rh??????????t??i8? u???}?Vf]6?7?S???j?6?lj?????9+ ?u?]?L???i?r?????2?P??<???y?F_??y?9?]=q ????;???=?$??????D?l?A^,??(??)dz?N?R?>?? N9???y?}&?5a?S??F????X ?4Th?? gY?3)_??Xu{???#?~'?o=F??1????????$?4?7????S#?I?2a?- ??l??@?Vo??????QO??|W?n???r?"[P) ????m??)????i?k??????6-?H^{b?????ID??r?sHR??$)?x$?$???????o7 ??7+ ???#"{? 1%?Pop????1W????@??u^?"Hx?OpxdI???????"??W|h??(?????XCX????????????&8?%?.pz+ ?R\~?????? 2?^??:#???p???3????Vx?9?'??k???2[??w????4???np?8??y> endobj + 2314 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [234.9264 746.5961 264.3333 755.9522] + /Subtype /Link + /A << /S /GoTo /D (cite.lattner:msthesis02) >> + >> endobj + 2313 0 obj << + /D [2311 0 R /FitH 784.0631] + >> endobj + 178 0 obj << + /D [2311 0 R /FitH 581.5889] + >> endobj + 2315 0 obj << + /D [2311 0 R /FitH 213.7605] + >> endobj + 2316 0 obj << + /D [2311 0 R /FitH 215.8768] + >> endobj + 2317 0 obj << + /D [2311 0 R /FitH 204.5194] + >> endobj + 2318 0 obj << + /D [2311 0 R /FitH 193.162] + >> endobj + 2319 0 obj << + /D [2311 0 R /FitH 181.8047] + >> endobj + 2320 0 obj << + /D [2311 0 R /FitH 170.4473] + >> endobj + 2321 0 obj << + /D [2311 0 R /FitH 159.0899] + >> endobj + 2322 0 obj << + /D [2311 0 R /FitH 147.7325] + >> endobj + 2323 0 obj << + /D [2311 0 R /FitH 136.3752] + >> endobj + 2324 0 obj << + /D [2311 0 R /FitH 125.0178] + >> endobj + 2325 0 obj << + /D [2311 0 R /FitH 113.6604] + >> endobj + 2326 0 obj << + /D [2311 0 R /FitH 102.303] + >> endobj + 2310 0 obj << + /Font << /F47 676 0 R /F15 679 0 R /F14 634 0 R /F63 764 0 R /F26 624 0 R /F49 683 0 R /F57 691 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 2331 0 obj << + /Length 2852 + /Filter /FlateDecode + >> + stream + x??ZKoG??Wp0@!?????x?A?l?\?F??"? + I?I~?~U?=?I???imhz?????]]C9?/gR?J?f>?J8-g????????2???0??h1,|?T>?WW??2??(??]?????zvu???????7? ?????R?????<^?0o??Q???{?=??? ????^$L?f??_}{???v?;1R??)fZ?E??????1c???????4Y1[?JHo&?d????w?q?1?z???bv?o/???D%#h?.????????.?oQV?J\???([Y)?? ??????d|e?2,??????c????FU2sxqrj?????@?~D??J????,i??(l???< ???ra???4???D???=????????p????rs???7e???f?????5?" ???k???,?m:c??=d,?>6???J:?2Z???/??7 ????????@?pPv???te ???&????d???????h+?}???????????y??? ??\???M???W??(??V?U;_?w???63???v a?Q?(?LOM?3 ?I???{???ia??)?^??O??:??R?????-??l???N92T??% ?+V??&??\?u(j???+ ????Ir?7?6<5i C b?|Z?????p8K???|m?!(H? 2w???A?i `???! ??}????P5??G ???b?4????EFM#m1r??,?RE?6??,JuC)}#????? + 6`R? 2?7? T??;???]?P)?>pB??T,??????????x??I?;IQ'?a???L'?=m?kM???Q]i ?9H??W???????t?= ?v?lH??i????n=V[a?X?1 at p P'c+ ???kx??6?????fb?|? + ?M?8????)E???+ ?Yz2?*??(?(M??8??[??T?}?w??????S??G??%%?????W ?DQ?d??5???R???#?????yZg+?r??|?????Qq P??g]I/??Tqp? PZUAt??)d??)k?_E'???N????????F???? ????1y?>???cU????Y??j?????0q??????8*+ ?????T> endobj + 2327 0 obj << + /Type /XObject + /Subtype /Form + /FormType 1 + /PTEX.FileName (../Graphics/LLVM_CFG_Call_Invoke_Example.pdf) + /PTEX.PageNumber 1 + /PTEX.InfoDict 2356 0 R + /Matrix [1.00000000 0.00000000 0.00000000 1.00000000 0.00000000 0.00000000] + /BBox [0.00000000 0.00000000 283.00000000 258.00000000] + /Resources << + /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] + /ColorSpace << + /Cs2 2357 0 R + /Cs1 2358 0 R + >>/Font << /F1.0 2359 0 R>> + /XObject << + /Im3 2360 0 R + /Im2 2361 0 R + /Im1 2362 0 R + >>>> + /Length 2363 0 R + /Filter /FlateDecode + >> + stream + x??V?n#7 }?W + ??????i ?O??? l??q?q?E???H3??? 6@?C yDR$?'?Ops??0>??\,???k?-?????i?~9??Op???L?R??X?p??????b?????N??*??Je????n?d???n??N??????q:?????????????Wr) ?+ {aq?7~FWU??J???K???????&c????W??`3{?b?tGF??u????????1????}???? ?}n?h>E???N????W????0\}?j> + endobj + 2357 0 obj + [/ICCBased 2364 0 R] + endobj + 2358 0 obj + [/ICCBased 2365 0 R] + endobj + 2359 0 obj + << + /Type /Font + /Subtype /TrueType + /BaseFont /FHXPFH#2BHelvetica-Bold + /FontDescriptor 2366 0 R + /Widths 2367 0 R + /FirstChar 32 + /LastChar 120 + /Encoding /MacRomanEncoding + >> + endobj + 2360 0 obj + << + /Length 2368 0 R + /Type /XObject + /Subtype /Image + /Width 171 + /Height 66 + /ColorSpace 2357 0 R + /SMask 2369 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 2361 0 obj + << + /Length 2370 0 R + /Type /XObject + /Subtype /Image + /Width 171 + /Height 66 + /ColorSpace 2357 0 R + /SMask 2371 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 2362 0 obj + << + /Length 2372 0 R + /Type /XObject + /Subtype /Image + /Width 136 + /Height 66 + /ColorSpace 2357 0 R + /SMask 2373 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ ??+ endobj + 2363 0 obj + 1055 + endobj + 2364 0 obj + << + /Length 2374 0 R + /N 3 + /Alternate /DeviceRGB + /Filter /FlateDecode + >> + stream + x?}?OHQ???%B?e&R?N?W?`???o???k??????????n%B?.A?1?X?I:??b]"?(????73?????7?3????{@](m?z?y???(?;>??7P?A+?Xf$?v?lqd?}????????] ?U???????x????iO:???b??M??1?W?g?>??q?[ + ?2?M?'?"()Y'??ld4?????2??'&??Sg^???}8??&????w????,? \V:k???;?i?R;;\??u????V?????\???\?C9?u?(J?I????]????BS?s_ QP5??Fz?????G?%?t{3qW?D?0vz ?? \}\?+ ?????4?I?????x#?{z?wA??j}????????Q????=??8?m??? + ?(?o{1?c??d5?U???g??t????la??i"??\.5???????^?8tph0?k?!?~D? ?T?hd????6??????:>f??&?m?????x?A4????L?&????%???k???i??????Cq????m?&/?By#???%i??'?W??:?Xl?Err?'?=_???)?i7??????,?F|?N?????6?rm?^?? ???U?HW?????5;?????hendstream + endobj + 2365 0 obj + << + /Length 2375 0 R + /N 1 + /Alternate /DeviceGray + /Filter /FlateDecode + >> + stream + x??SMkQ?3V??*??t??E?0~,????i?c??A???d????$??U7nD?n@?.?pQ?FQ(?_??~?(t)?????*?????????????u?uM?Y?/ + ?L?j?;??d??T?s3??B?m??t??????? ??????|????]?HR?O?k?,px\sE?????f?!:t|????04Vj?U??0????????????a???K?#??kIzE???~??u??0?-????9?R????eL???c?? V??t????B?????r=M?????Q???qN???`????> + endobj + 2367 0 obj + [ 278 722 474 722 722 889 722 722 722 722 722 722 722 722 278 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 556 722 556 722 556 333 722 722 278 722 556 278 722 611 611 611 722 389 556 333 611 556 722 556] + endobj + 2368 0 obj + 56 + endobj + 2369 0 obj + << + /Length 2377 0 R + /Type /XObject + /Subtype /Image + /Width 171 + /Height 66 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????KZQ+ E?L*?1??P?)I?*??VK?$YG)qB[?Q+e??E??`@0??$??BWo06?L?fJ? 4 ???FU&.B???B????(?I}ck{g??b????b?ho1>?V??B.??X?$ + ?????7???p?R??a???t?6??2\??nTY?@$???:zm????97+ endobj + 2370 0 obj + 56 + endobj + 2371 0 obj + << + /Length 2378 0 R + /Type /XObject + /Subtype /Image + /Width 171 + /Height 66 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????KZQ+ E?L*?1??P?)I?*??VK?$YG)qB[?Q+e??E??`@0??$??BWo06?L?fJ? 4 ???FU&.B???B????(?I}ck{g??b????b?ho1>?V??B.??X?$ + ?????7???p?R??a???t?6??2\??nTY?@$???:zm????97+ endobj + 2372 0 obj + 49 + endobj + 2373 0 obj + << + /Length 2379 0 R + /Type /XObject + /Subtype /Image + /Width 136 + /Height 66 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????K?P?sn?9??t?X, ??l$?F?C=??%|?z?(}?^?4?e?? \?AFI?????????;??????????o:?????"?V@#?b?G[E???w M????$???????0?????F?D??}?v8`????S$a?L ?4P???hf?3??{?^@?????g??mVG?AP???vy??E.???? ?|?[\`=?i?bBG??`?-??????H4&???|,Y ???AYp??!Fh>n9"??I9??+ ?z????W?LH?~M?????Z??X=S???h(g???Bz-`???a4?gB???;?)W7M?0j??J???d1?0c7??%??%?A?1?p?|,?/??7[???=?+ endobj + 2374 0 obj + 706 + endobj + 2375 0 obj + 631 + endobj + 2376 0 obj + << + /Length 2380 0 R + /Length1 8852 + /Filter /FlateDecode + >> + stream + x??Y{|T????????#??$?L6???d?~???@??y@?@" ??KJ?h X?V?-ZiE??????C-???#*Vy(m?j??/Bv?w?????~???;?;s??=s?;g????(X N??????j?*I?!dW?j:??N?Ks???????]?0:?b?\????T?9????? ???7??{?'?P????v9?G|.G+ ????|G??@??31g?\?;?wD?O?G?o?*??????WqAy$?dR???????H????{,??K????4?E??$?G???????]??3F?????*??7??X?9tV?Q??~?8???\??/?V?5?????Q????????WM????W(????]=?????]??kD??????+ i;YA??;B??? ???n?1?SI?&????i? ?-g?.??????s??)?6:?0???F`6???jQ?!XT?]?%???????`E??BE?.X?? + 9???z??D?????'??K?F?1?]?????&s??<??d>??x???D?dQ??4?FG?#?S?h???}L?4?c ?R?D?????{r?????.9G?My??G?.?+????E?y??jOF???;f??n???Q?@?g????s??M?9?VKk???????????}????})>W ?p-|??%??u?{_8?z?z?v?u????DZ?x?;?F????0?????B?n??n?+??????)?o?S5L????v?l?)?}????M??Fa??q|?[45fn??1|LL??NqJ???D???R????????Q\????cL?????"2.??b??kl??X7+/'?1?s??]?m?M+4???B????z{??:xX8?xm?????=?]b??Y??kws??b+ ???KX??S??hf^?"???"w?I,?Y5??s?41SS??4?l?f&k??g.?cp??4?????|?0???up???74?;]???????????6]?????eau?X?M7hn???????????????XYY??fT????Tendstream + endobj + 2377 0 obj + 935 + endobj + 2378 0 obj + 935 + endobj + 2379 0 obj + 810 + endobj + 2380 0 obj + 5904 + endobj + 2333 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [141.1841 744.4798 157.1074 756.1595] + /Subtype /Link + /A << /S /GoTo /D (lstlisting.479) >> + >> endobj + 2353 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [139.3493 451.0755 155.2726 462.7551] + /Subtype /Link + /A << /S /GoTo /D (lstlisting.491) >> + >> endobj + 2354 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [137.2976 179.1638 153.2209 190.8435] + /Subtype /Link + /A << /S /GoTo /D (figure.510) >> + >> endobj + 2355 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [326.4265 179.1638 342.3498 190.8435] + /Subtype /Link + /A << /S /GoTo /D (lstlisting.491) >> + >> endobj + 2332 0 obj << + /D [2330 0 R /FitH 784.0631] + >> endobj + 2334 0 obj << + /D [2330 0 R /FitH 709.8738] + >> endobj + 2335 0 obj << + /D [2330 0 R /FitH 711.9901] + >> endobj + 2336 0 obj << + /D [2330 0 R /FitH 700.6327] + >> endobj + 2337 0 obj << + /D [2330 0 R /FitH 689.2753] + >> endobj + 2338 0 obj << + /D [2330 0 R /FitH 677.9179] + >> endobj + 2339 0 obj << + /D [2330 0 R /FitH 666.5606] + >> endobj + 2340 0 obj << + /D [2330 0 R /FitH 655.2032] + >> endobj + 2341 0 obj << + /D [2330 0 R /FitH 643.8458] + >> endobj + 2342 0 obj << + /D [2330 0 R /FitH 632.4884] + >> endobj + 2343 0 obj << + /D [2330 0 R /FitH 621.1311] + >> endobj + 2344 0 obj << + /D [2330 0 R /FitH 609.7737] + >> endobj + 2345 0 obj << + /D [2330 0 R /FitH 598.4163] + >> endobj + 2346 0 obj << + /D [2330 0 R /FitH 587.059] + >> endobj + 2347 0 obj << + /D [2330 0 R /FitH 575.7016] + >> endobj + 2348 0 obj << + /D [2330 0 R /FitH 564.3442] + >> endobj + 2349 0 obj << + /D [2330 0 R /FitH 552.9868] + >> endobj + 2350 0 obj << + /D [2330 0 R /FitH 541.6295] + >> endobj + 2351 0 obj << + /D [2330 0 R /FitH 530.2721] + >> endobj + 2352 0 obj << + /D [2330 0 R /FitH 518.9147] + >> endobj + 903 0 obj << + /D [2330 0 R /FitH 246.6958] + >> endobj + 182 0 obj << + /D [2330 0 R /FitH 143.304] + >> endobj + 2329 0 obj << + /Font << /F47 676 0 R /F15 679 0 R /F14 634 0 R /F57 691 0 R /F63 764 0 R /F26 624 0 R >> + /XObject << /Im17 2327 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 2384 0 obj << + /Length 2819 + /Filter /FlateDecode + >> + stream + x????G??_?????Ve???????3?p? + ??ahIX?@0_?o???ER3C8pge?|???z?????????? + ?P?????J-n???+- at j?g.????uB?MU#?O?W???[???????$ ???????Z??.o`y8??r???N?Q at 14x??u?*?am??Y??^h????????m?[???Yq????-??6r{s+ ??[8?????\????f???????F?'???Jc???"? :???UHF?6?? ?D?k?P? Zy??%??'??Gi?L?6?,?wc?? ?v? p ??????uu??????q???}??<?V? + #?;P?? .P?l??ct?&@????Pi!?^ ?.??UQ??????????X?y????=?n?}LZ1 ?n??V???`????`V??}_??_J????g??.kne??D6??{??_????? Y?+ ??8????G$F??x!???)M?:? ?g? jN=?p????z?W?W9T??x????????????^?F????q????zi?q???6o???S%?????? ?????J?'?O&???????????9{???F?t???v)????5?B???#?(?^>;_????4?i???w??oNu?????IJp???a!?c???+????i?s?~:u??h?q?T????E??E??????Zh???C?.??D2??????????*>???B?%ag? + ??)j?_J?|$d7??? ?x??P2?jj_?U?????_f?N? + ?k????7??mL>x?1X?bz?xd??+ ??,}????CT????? + H=~??(? t? j[??=i?????T????$????%d?M?u??#g?a?G?M3>?M?'wb ?u??g<MY!????? g?ox???fX?????Z?|??8??6??4??!??!%???:(??4?i???^:*l???Hkc????I?}b ?f7=??y????t?[???lEW??_?k)???8???}??B?B7\g? ?zL_8?v????????g???d????%?sIp??=RmuV????%??_}?Z?8"|~??H??{g?}YB?T9???+@??? ????7??yO??e?p??C ?f??gj*@?: |9'??K?x????)???V?????(??#?'?8?:Mz??N#q??&1?A??n1c?+ ?????T??c#?(???!?|???+ dM9$?L???~??bA??q????UH?????t?B?dO)$'?S?????????ce??? ??B"?E????2&{J!9????_w~?B??????B2?? + ?pr?nR???)??dc7t??i2?4?>??VR??A????2?s*?`?4t?hT??? ??4???????*UT??2???:?????s?FOh!#}?sVd?Vm?}???%L'?N??????V=?endstream + endobj + 2383 0 obj << + /Type /Page + /Contents 2384 0 R + /Resources 2382 0 R + /MediaBox [0 0 595.2757 841.8898] + /Parent 2266 0 R + /Annots [ 2386 0 R 2387 0 R 2388 0 R ] + >> endobj + 2328 0 obj << + /Type /XObject + /Subtype /Form + /FormType 1 + /PTEX.FileName (../Graphics/LLVM_Graphical_ValueUser.pdf) + /PTEX.PageNumber 1 + /PTEX.InfoDict 2389 0 R + /Matrix [1.00000000 0.00000000 0.00000000 1.00000000 0.00000000 0.00000000] + /BBox [0.00000000 0.00000000 490.00000000 323.00000000] + /Resources << + /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] + /ColorSpace << + /Cs2 2390 0 R + /Cs1 2391 0 R + >>/Font << /F1.0 2392 0 R/F2.0 2393 0 R>> + /XObject << + /Im4 2394 0 R + /Im1 2395 0 R + /Im9 2396 0 R + /Im5 2397 0 R + /Im10 2398 0 R + /Im3 2399 0 R + /Im11 2400 0 R + /Im12 2401 0 R + /Im2 2402 0 R + /Im8 2403 0 R + /Im7 2404 0 R + /Im6 2405 0 R + >>>> + /Length 2406 0 R + /Filter /FlateDecode + >> + stream + x??YKs$? ??W???J?????v??T%?*???qf?#i=?\??+ M????46T?4??? |?????@?J?F5?@6|z???I?g+???SH??5?F?36iB?*?Js???t? + ?o&^??:???i7(?+??)????pQ+\?au? l + ?hx?L??A}?????^??o?NO?????|?g3'???P\b???rV??+??/??KYq?Y?????"????1v??5x????:?Q?T???0??L?=?O=N?E??#~???Lo??7???w??Zv???????o_????/?????O?????n?ZE + z@???6???M????+,?CO????(?F,?Y1?Qk??????????=v?x_t??7????=?r?.c?=???-?e??bN?O??!???R?????L4????? )*???S j??h-???03L?1?!??\W?M??????T????R*9??z??b?'?n'? ??=????????n????M?:[??o????AWV]??=?7?*??t?F???:}b???u?kT?????????a?????oC?VM%???q??0?? ?Q??????W?u??0'?X???&??s????y?]??F?k?X? uZNr????H\???3?V+g??''?iD#?m??3?V?Y???qt??;?bq??eFp?F,?u?iq??sh7??+ ???}`r??????:(7t??5U?9R?g?-?1?S?Eg?5`??J ??? + ?wTVE??? ??????+Z??????Abh? p???????/ ???h ?%k]?x?|K???l?BR???:6????hG?L?`P??9?c)?? ?????+??M??1M???y??Q?ml?{e>q>U8l?>?+Wg?_???>j*???m-?R Ha????yY0???I?? d????????d? + ?5??e??V?'(? ???v%?h?K4?E#O?+ ?D?%?f??d?]d?A??T????HW\5yp?J?b=???G\??^W#I+??s???+??6W???U[#?`???BY{?"???59?pg@?(??? ???z?6??tycL!P?l?5Ox??9!_??h?,w?????{?1???> + endobj + 2390 0 obj + [/ICCBased 2407 0 R] + endobj + 2391 0 obj + [/ICCBased 2408 0 R] + endobj + 2392 0 obj + << + /Type /Font + /Subtype /TrueType + /BaseFont /NZYPDE#2BHelvetica + /FontDescriptor 2409 0 R + /Widths 2410 0 R + /FirstChar 32 + /LastChar 121 + /Encoding /MacRomanEncoding + >> + endobj + 2393 0 obj + << + /Type /Font + /Subtype /TrueType + /BaseFont /NVUIUW#2BHelvetica-Bold + /FontDescriptor 2411 0 R + /Widths 2412 0 R + /FirstChar 66 + /LastChar 121 + /Encoding /MacRomanEncoding + >> + endobj + 2394 0 obj + << + /Length 2413 0 R + /Type /XObject + /Subtype /Image + /Width 111 + /Height 63 + /ColorSpace 2390 0 R + /SMask 2414 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 2395 0 obj + << + /Length 2415 0 R + /Type /XObject + /Subtype /Image + /Width 134 + /Height 35 + /ColorSpace 2390 0 R + /SMask 2416 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 2396 0 obj + << + /Length 2417 0 R + /Type /XObject + /Subtype /Image + /Width 134 + /Height 33 + /ColorSpace 2390 0 R + /SMask 2418 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 2397 0 obj + << + /Length 2419 0 R + /Type /XObject + /Subtype /Image + /Width 111 + /Height 35 + /ColorSpace 2390 0 R + /SMask 2420 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 2398 0 obj + << + /Length 2421 0 R + /Type /XObject + /Subtype /Image + /Width 134 + /Height 33 + /ColorSpace 2390 0 R + /SMask 2422 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 2399 0 obj + << + /Length 2423 0 R + /Type /XObject + /Subtype /Image + /Width 111 + /Height 35 + /ColorSpace 2390 0 R + /SMask 2424 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 2400 0 obj + << + /Length 2425 0 R + /Type /XObject + /Subtype /Image + /Width 134 + /Height 33 + /ColorSpace 2390 0 R + /SMask 2426 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 2401 0 obj + << + /Length 2427 0 R + /Type /XObject + /Subtype /Image + /Width 134 + /Height 33 + /ColorSpace 2390 0 R + /SMask 2428 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 2402 0 obj + << + /Length 2429 0 R + /Type /XObject + /Subtype /Image + /Width 111 + /Height 49 + /ColorSpace 2390 0 R + /SMask 2430 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 2403 0 obj + << + /Length 2431 0 R + /Type /XObject + /Subtype /Image + /Width 134 + /Height 33 + /ColorSpace 2390 0 R + /SMask 2432 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 2404 0 obj + << + /Length 2433 0 R + /Type /XObject + /Subtype /Image + /Width 134 + /Height 33 + /ColorSpace 2390 0 R + /SMask 2434 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 2405 0 obj + << + /Length 2435 0 R + /Type /XObject + /Subtype /Image + /Width 111 + /Height 49 + /ColorSpace 2390 0 R + /SMask 2436 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 2406 0 obj + 2340 + endobj + 2407 0 obj + << + /Length 2437 0 R + /N 3 + /Alternate /DeviceRGB + /Filter /FlateDecode + >> + stream + x?}?OHQ???%B?e&R?N?W?`???o???k??????????n%B?.A?1?X?I:??b]"?(????73?????7?3????{@](m?z?y???(?;>??7P?A+?Xf$?v?lqd?}????????] ?U???????x????iO:???b??M??1?W?g?>??q?[ + ?2?M?'?"()Y'??ld4?????2??'&??Sg^???}8??&????w????,? \V:k???;?i?R;;\??u????V?????\???\?C9?u?(J?I????]????BS?s_ QP5??Fz?????G?%?t{3qW?D?0vz ?? \}\?+ ?????4?I?????x#?{z?wA??j}????????Q????=??8?m??? + ?(?o{1?c??d5?U???g??t????la??i"??\.5???????^?8tph0?k?!?~D? ?T?hd????6??????:>f??&?m?????x?A4????L?&????%???k???i??????Cq????m?&/?By#???%i??'?W??:?Xl?Err?'?=_???)?i7??????,?F|?N?????6?rm?^?? ???U?HW?????5;?????hendstream + endobj + 2408 0 obj + << + /Length 2438 0 R + /N 1 + /Alternate /DeviceGray + /Filter /FlateDecode + >> + stream + x??SMkQ?3V??*??t??E?0~,????i?c??A???d????$??U7nD?n@?.?pQ?FQ(?_??~?(t)?????*?????????????u?uM?Y?/ + ?L?j?;??d??T?s3??B?m??t??????? ??????|????]?HR?O?k?,px\sE?????f?!:t|????04Vj?U??0????????????a???K?#??kIzE???~??u??0?-????9?R????eL???c?? V??t????B?????r=M?????Q???qN???`????> + endobj + 2410 0 obj + [ 278 722 722 722 722 722 722 722 722 722 389 722 722 722 722 722 722 556 722 722 722 722 722 722 722 722 278 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 556 722 722 778 722 722 722 667 722 722 722 722 722 722 722 722 722 722 722 722 722 556 722 722 556 556 722 556 722 222 722 722 722 833 556 556 556 722 333 500 278 556 500 722 500 500] + endobj + 2411 0 obj + << + /Type /FontDescriptor + /Ascent 770 + /CapHeight 731 + /Descent -230 + /Flags 32 + /FontBBox [ -205 -443 1437 1254] + /FontName /NVUIUW#2BHelvetica-Bold + /ItalicAngle 0 + /StemV 0 + /MaxWidth 1500 + /XHeight 540 + /FontFile2 2440 0 R + >> + endobj + 2412 0 obj + [ 722 722 722 722 611 778 722 278 722 722 722 722 722 722 722 722 722 722 611 722 667 722 722 722 722 722 722 722 722 722 722 556 611 556 722 556 722 722 722 278 722 556 278 722 611 611 611 722 389 556 333 611 722 722 722 556] + endobj + 2413 0 obj + 43 + endobj + 2414 0 obj + << + /Length 2441 0 R + /Type /XObject + /Subtype /Image + /Width 111 + /Height 63 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???Mk?@???dL??!U3??DC????x??)?,"x???J?"-?E("?A*R????n??????,?????@y?98?Or|?@???_PAR+ ? ?q??x?cP???4? ?.??]J????4 ??Vc8? }???(????P???l????%??D?X"?BW2S????D???GP4'???&??\?XBW??????"GS?????I?g?'AI`??#i??W???^7..?-t5//??????????PV3Z?h???N]?k??0*ZF?????+??d^7?f?g???[???4?|R??,???8??+Mk??yk?Gt???????k?h?uv? ?????X??l???t?`u?F9??> + stream + x???AK?@?m2?I???f???$)?T(?J[]???@(?S. + ???S*-z??????????"??m???e?:e?????x3???y??o???R? ???~? Q!+ f?????E???B??i?????g?l4j??eY? L??AIV?+?J}????/?i?Ns?^)?dUY?S ^???Q\???????J?????v????N`??Z?2????z~7??????????S#???"$%e???? ????u??A??xN?d? ??g .?3???????txqI???ix?m??????%sf??u{??h|??:7??Y??z???K???V?9[??dt}???:????A??? + ?????p??p8?{|?P???n< ?|?a?*~? ????=8:????????????`??n??? 6???7???????ad???/??Zl?N628#??#w*+7?;?+ endobj + 2417 0 obj + 36 + endobj + 2418 0 obj + << + /Length 2443 0 R + /Type /XObject + /Subtype /Image + /Width 134 + /Height 33 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????KA?sw??m?eSwBQ?BX?G ??Q????f????+ endobj + 2419 0 obj + 34 + endobj + 2420 0 obj + << + /Length 2444 0 R + /Type /XObject + /Subtype /Image + /Width 111 + /Height 35 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????KA???Lw??.k?????] ,$!"I????????? + 9?A%?CN+R!??)??!????MM)=Sh???}> + stream + x????KA?sw??m?eSwBQ?BX?G ??Q????f????+ endobj + 2423 0 obj + 34 + endobj + 2424 0 obj + << + /Length 2446 0 R + /Type /XObject + /Subtype /Image + /Width 111 + /Height 35 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????KA???Lw??.k?????] ,$!"I????????? + 9?A%?CN+R!??)??!????MM)=Sh???}> + stream + x????KA?sw??m?eSwBQ?BX?G ??Q????f????+ endobj + 2427 0 obj + 36 + endobj + 2428 0 obj + << + /Length 2448 0 R + /Type /XObject + /Subtype /Image + /Width 134 + /Height 33 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????KA?sw??m?eSwBQ?BX?G ??Q????f????+ endobj + 2429 0 obj + 39 + endobj + 2430 0 obj + << + /Length 2449 0 R + /Type /XObject + /Subtype /Image + /Width 111 + /Height 49 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???Ak?@?k??????QT??5???x??S.-??S-Uz?i)xP/BiRA???~??]?.K??s????????? ?h????? ?$ + ?]?w?wt?u{?^????????D?>?0Os?? + ?M ???y???0' ??sz???q_0?Up_?????M>+ endobj + 2431 0 obj + 36 + endobj + 2432 0 obj + << + /Length 2450 0 R + /Type /XObject + /Subtype /Image + /Width 134 + /Height 33 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????KA?sw??m?eSwBQ?BX?G ??Q????f????+ endobj + 2433 0 obj + 36 + endobj + 2434 0 obj + << + /Length 2451 0 R + /Type /XObject + /Subtype /Image + /Width 134 + /Height 33 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????KA?sw??m?eSwBQ?BX?G ??Q????f????+ endobj + 2435 0 obj + 39 + endobj + 2436 0 obj + << + /Length 2452 0 R + /Type /XObject + /Subtype /Image + /Width 111 + /Height 49 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???Ak?@?k??????QT??5???x??S.-??S-Uz?i)xP/BiRA???~??]?.K??s????????? ?h????? ?$ + ?]?w?wt?u{?^????????D?>?0Os?? + ?M ???y???0' ??sz???q_0?Up_?????Q>+ endobj + 2437 0 obj + 706 + endobj + 2438 0 obj + 631 + endobj + 2439 0 obj + << + /Length 2453 0 R + /Length1 10208 + /Filter /FlateDecode + >> + stream + x??Zy|??????????d?%3???d?M????!+!1?B??@B@??1+4*D?dxV??? + ?b4jm]??????j???}H_?????M at hi??????{?2???=??{??+ ??{??N????C94b? + 8I????? ????)"_G?G?????p,??????\?K???l?C?I9??O??F%;?Q???"oQ{?o???+r?b)%????j??:M???Oo???K?????=?y?_E?#k"??G???/j?+ !x?&Vmkmk?V7???R+??Bd?"? *b?v?+??????]??X??????AK?R?n?hAc??9h?*?GM??]????d?"??.??X??#??wN)?qCcY7?+ ?Q???;gcw??j?+p}?d?cC? ??tgN\%??s?9P;w?Y??BebQ MDg + ?(^???*?9??h?7U?f?9?????????~4?P?Q?;(+3??????Fk,?*??&,S?,??`???"-?B?F???x_????GN?M9?j?#+:??:? {??????I?K/avO?'?~??????I? + $Lr?J??? ??y?L?;dzo?????????RR??qk?^??]w??8???????EIF?????$????M??T?x? 7????(??????S???????N??wk0}?6~??? gc2?8??C???L+ ?a???????(????????F?l + m6mI4e+???3??1?GP??G?Ed~? y???K??xd?kP?r0???????C????? + 3????4?????C?F?F?S.???Qh]??S?; 4:??f?_?k(?1????'Ob?g?C?O8??/D?b?_z)?V???(||?L"????gI????D?#o^?dg??Z??1q??"???x????W??????TK?ew &??C5??T{?h?j|Rr??fl?Gu?@?m??f????(?J?$'9R??4&??V??XrM-x???g\ ??au!??/???HL1??A="jx?hn?b ???L??Ky3??0??H*?7t??????Q?ggo?C???????F???i9P?x??@ :?Gi1??l4=???}3E,iA3???mK?S&?k&.?S????;?_?}4?6?ve-5?=q???????z??????G.?zO??????C1??G???,"W+?J?/?F=_?@? Z??????2?Zi/N?2??G????T?V?????d???+ (X?F??0ubLbj??,?5??H????.?n?/??????Q&jR??-?Y?/?x????7g???|Bo?Tq??AN?? + 63!S??h-??bNt?r-)?Fe?8?;?(?i?41-&?L??^??03??U??LIhiE$p8=?+#*?;OD??is/???l??V?!??&???G??\??7????x?g/??:U0.???_*?8??d\???@]???e,?k6HQ?6 OYv9hVE??:?J???A????:???0y???>???8?????[1??R?????`O.?x????x??????m?lGl??!?cc?r%?Q???>??K??}f????kgK ??s??zw?H[????(?r?`??%??dU?fX??X????V????N?I?&{? v/I????z?????6?? &?????.Q'%?LMK}?,n??--?????HD-?U?IN???Kb? + ?????k?W?b??????t?[????2?????_??H?????,q3?w?>e??g?{?%?????F??? G(R??W??????o?"???(d@& ???j?ZY??,[??c?m????v?? + ?!???'?g8??,?????|f&k?3 ?~???T??J?>?9?u?"^)?=????3^6"??7??bITh?=j?;??? f???*e????%>?? ?J?,??????U???\???\I^_????No?? H?\??LB=8;7ogIw???_????&T??t?^?5??7mz?}?x%???"W??3?????4??+????g#_F.DF#/??+x?Y?So?v??[WA?????T???iT?]??s*?M???|&K???6?$?{??????K??H?>;.Q???[>??'????6?V&(?N&<4?zy?t??G????Y????????U%Kt??.?[J???*9pqrm??7???_??X?_d???????z?(+)?\??7D3?.v^?4Rh?z?'??! {)??y?O? ??h??q??g??????Ro{j???E!??8??"'???\p?b??+ endobj + 2440 0 obj + << + /Length 2454 0 R + /Length1 9276 + /Filter /FlateDecode + >> + stream + x??Z{tT????>???L2?d2s3?L2y2?!???L?AL4B J?(?G[???????`q??????Y?????S??'??o?;????]??????>???>??? + ? `C?f?C+ ?)???H*?exnA)_??D '??q???l???3 ??Q??H? ?F? <?A???!aQ?r?(?.?|?+Da???g?+ ?C????????%?? ?lcog??????Q? ?C????~LK?:?? + ? ?(??= '??H)!?d??|???{?n?$y??"??P??Ey?"j??Hm?????8m?W???C???????aa:????t???#?H:/????z?`?B.? ? ?+`3jr+b?v??????9?#?'??/p?@??cH))'mdJ??? ???(?^????o?J???!5+^E????4??*F})I????????L???p??9?6????b2???:?F??9??)?aO]?;??a?= r??? }?4?F??Tw????W??|??#???H11R?8???PY??{????w?,??????z???q?????Q?z, ???j???G??F???????S5?p+ ??x???^??y??-??????? ~K8k???-?=?i\U?? ?f?.Gh?|v??I???e???-???T?W?L??X????@1 + ?????l?\ + *E????D!I?#?Y???-?]??X,?????????????U?V?S??????????s?jG???l?.{??M?????c?nrpa?ew?5v{cx?s??????????J?t.aV???#?c??g???oRo??c;????`???q?T]???M??????? ?!$3?n?A???????K7??O??k?D ? ??????m?X?l\&eN?LA????m$???8??U?????e?????????")??????????{????b???@????_~?,t?'?????~??7??x???????3????VqC???UYj?F%????G/??)?J???8?O???9???ck??aI1??8???oR?7???->o{??M???R}??J`r?!??d?2o??v~?V?hL?'\I??dS?q?&???????RLzo?AOZ??? ?,>?f?fE??????^??? ??h?????D?? ??M?V?+ wb.????????>?v??PoG?Ly(u????R#;???1*?E"?9????????9?)L[d?!W2?7??T/?(?????s3????D???????.1EL???U??Y?;lT?l?? ??b/???p?b?V?\?p + ???????$?-???r/ 5n?n?n??H?a??^w??u????C?7?=??4=?_c???T???R??2?[JH? ?8?eP4?R??) Qb?Y?~????+j5L????+????C+M!v??0o?? ?=u(-B?.?M6??@?B?%???(??w?$?HD?????R|aE?]???? ??nqvUXK??? ?????$?Y + ?G?'????B????i3?,??\?_??/?NKi???ie???JGKZ????^Q?{bG}7??L?Kt??4??????????d?7?BD?r????$?L?????E?G?)`Y(Eg??? V?PH?m??]6?L + ?nZ?X\???3??!?????{??34???~%I??mE??K/?5tEK??????_ R&?Y?3X}?????>?IvgN)????????g$??Y?9z?0-K,({???????Y?????n???nm?Iv???j?^Vk?L92?.?K??????B[??n?8????x????????'? ?l???)??Q??@?~??g_n/ I??@u????2B>4-??[????I?X????=?h?)=?j??U??|?i???????7???w'????-{,?p:i4w?Lk4kMQ?s)??U6?c?/3? oI?? O???? C ?? ???V?v?{Xhh??L?M(g??1 + ?S?????? k??q??? 0????????)KO?????????w?????????q???4???????oY??e??????????G?"??.???L???Q?~?Q??N5??+ B^Z?D?????f????b??bng0?J??+???\?+BO\???=*T?`??W:I?Df?^Z}?i?nD??} + ?pV?:??>?$?4?v+{??.?3???7?????Zg???"&?-??t9?L7p=t??^??a?0??????e?r{??t?y?~?q4q????f????? ? ??M??U????ZFE?X?9VC?i?? c5CS G?5 ?ix + ????"???Fa#??E?O?D???H??????@vH?????I??Xm??%?S?T???|???U??????J?H?g"?F????-`?&??%f?E??S;???????hXI???????nL?%?m????}d2?+R??????t??????^???|??k??V????t?I ?t/e?G??2???[W?c???e?????A????G[?? Z?+MT?-?-???%/??????k?IZ?ME??*`??Q2??r'?>e2?Do?Vz????fB?T?i&??;?X?~xx=U(},? ??$]????^yal????????H??????/??D?r?4???,+ ??????P5??????p???;;??k?_>??j???????/??????|^?g???? ~?gA(W?????Za6??y?B???????????b?????'?=??3!?????u?????L(?)uzP/?T?Z?iSCn???A?8?H? + ??>???c^?? B??H at T??Xp??|0?"b??K?]_`??[???[???{)X?:^??c???(??Eo?!b??y?m??s]?+\c>ls?V#????????J??? + ????c???d??a??&?????dp?2???r??(??~? + o?k!?HD??????? ??UGI????????;?j?V8??? ?e^E?????????? ??h1???6???????c?5?j??y?!??m???? e??? ?%?"?S?WP?dd??5?????1?&$;?5?????????????9?9 sG??????|????s?l^?3?4>UeRTI*?J?R?8??*P?F??d?L? 2???(e???M?"* + fA???-CU?*? c??? + ???g?7???e????4?3???)? qgW???_???????????|????1?F? ?"?????N~???]?h@?}???????iO?{?}????????Q???9:_??k???x]??? ??????\ ?+0 ?????Z???*w??s??s??s??m?\yy??sk??????endstream + endobj + 2441 0 obj + 596 + endobj + 2442 0 obj + 538 + endobj + 2443 0 obj + 497 + endobj + 2444 0 obj + 532 + endobj + 2445 0 obj + 497 + endobj + 2446 0 obj + 532 + endobj + 2447 0 obj + 497 + endobj + 2448 0 obj + 497 + endobj + 2449 0 obj + 586 + endobj + 2450 0 obj + 497 + endobj + 2451 0 obj + 497 + endobj + 2452 0 obj + 586 + endobj + 2453 0 obj + 6950 + endobj + 2454 0 obj + 6322 + endobj + 2386 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [313.5541 467.7455 341.7501 477.1016] + /Subtype /Link + /A << /S /GoTo /D (cite.click95simple) >> + >> endobj + 2387 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [317.6145 452.08 333.5378 463.7597] + /Subtype /Link + /A << /S /GoTo /D (figure.512) >> + >> endobj + 2388 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [138.7185 258.192 154.6418 269.8716] + /Subtype /Link + /A << /S /GoTo /D (figure.513) >> + >> endobj + 2385 0 obj << + /D [2383 0 R /FitH 784.0631] + >> endobj + 904 0 obj << + /D [2383 0 R /FitH 580.4108] + >> endobj + 2382 0 obj << + /Font << /F47 676 0 R /F15 679 0 R /F57 691 0 R /F63 764 0 R /F14 634 0 R >> + /XObject << /Im18 2328 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 2459 0 obj << + /Length 1382 + /Filter /FlateDecode + >> + stream + x??XKs7 ??W?q5?2?l??>????V?K??*?????XN\??+ ????????????M?? ??q?5|??? ?%??L$?ls?) ?Y???A}Y???>??W9H?O]i??(+,?h"Y%?5?0?vN???z???2???????x??y??5????s??XD??i?(P& ??(??C??o"Z????0 + ???Y?????A????????D?*K?a + IVqr2??????????????.nr~o/???Hg?2O?h??0??v?????I?????..$s????D?n?\? i;????l??[?D ?/?????9v??]??q?fKha ?C???M?7U???B????B,??T??R?7??????.&VL??Vz?H?? c&???z~:"??$?]g??????%p?of???H4?)D????a??^??v?f????6????#????+Z?m~?\?'S?G?h0??`;J5?/?Z??0u??$?N????6O???s??t? ??0? 8?jd?b? ?M?g???? ?Vv?y??wTa?+a??(???L?Y ?A??Uru??b??&Q?V?w?$??f[??? ????!????.??qb???6?wU*E?W:R???i??????S?p?}??:????gIGM????(???iq???1???L??h^?3??ig?M*q?+???66%?6?y?w???#??o5????@c?a=???.??????2?*Z???(?wu?VC????`????????????M??)+ endobj + 2458 0 obj << + /Type /Page + /Contents 2459 0 R + /Resources 2457 0 R + /MediaBox [0 0 595.2757 841.8898] + /Parent 2466 0 R + >> endobj + 2381 0 obj << + /Type /XObject + /Subtype /Form + /FormType 1 + /PTEX.FileName (../Graphics/Instruction_GraphicalIR.pdf) + /PTEX.PageNumber 1 + /PTEX.InfoDict 2467 0 R + /Matrix [1.00000000 0.00000000 0.00000000 1.00000000 0.00000000 0.00000000] + /BBox [0.00000000 0.00000000 540.00000000 445.00000000] + /Resources << + /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] + /ColorSpace << + /Cs2 2468 0 R + /Cs1 2469 0 R + >>/Font << /F1.0 2470 0 R/F2.0 2471 0 R>> + /XObject << + /Im13 2472 0 R + /Im27 2473 0 R + /Im5 2474 0 R + /Im28 2475 0 R + /Im19 2476 0 R + /Im1 2477 0 R + /Im2 2478 0 R + /Im3 2479 0 R + /Im7 2480 0 R + /Im24 2481 0 R + /Im17 2482 0 R + /Im8 2483 0 R + /Im22 2484 0 R + /Im9 2485 0 R + /Im11 2486 0 R + /Im4 2487 0 R + /Im20 2488 0 R + /Im6 2489 0 R + /Im16 2490 0 R + /Im12 2491 0 R + /Im10 2492 0 R + /Im14 2493 0 R + /Im18 2494 0 R + /Im23 2495 0 R + /Im25 2496 0 R + /Im26 2497 0 R + /Im21 2498 0 R + /Im29 2499 0 R + /Im15 2500 0 R + >>>> + /Length 2501 0 R + /Filter /FlateDecode + >> + stream + x??\????q}?W?Qr?pq??mg,??P?+????=?????G=?+??}2? V???1$+?+ 3?Oh;?6Btafv?Y)?|4?x2I|\?+ ???XE??? =????r???????????????pO??]???r?W?X??????y5???k~??G]??d??8?`8?c2?j?? ??3????????W?J9<1? + 9d??B?m??x?? %???????? + }? ?+ ? 2????+ _1???]3?'"?K????????/?)?& N??0OC???D?G??-? N?Y???7?.??M?v??O????????N???U?]???T?????8???voL?K?1E??/?+ .\0???U?8jB??ZL?????@F`?????a?C?W?T?V?????W??H=??{ g{?m?!?L?????Pz`????F ?%Oc?'?*?)?????(?j?(:??N#??i5,?a-e-?l????R?67????????_6?JCK?l???3{??t?_??e????-??:???~m?.o?????N{B??????????@??????\?)???P?xSQ^o???#?e?????Z??y(s??;?=F?????o?????+??? :??| + + 4?EI3????9{?U + 35&{PC?????? ??X?b at s?%!y?H?m??5?Fc??+ ?T?f6 Su??:`+ ?4????6?bev???]?P?e?W??O??5???4F??C,?s?6?pq ???t????[4G>?L? ??8?}3p???? + B??R[?p?????17?Q??Ra,? ????*??stP??j?B?? ??^???v?+q??H?????p? ?A?8?e??^+?U?yp??>?18????u ???Je?????)?;|?? + 3 ?3=f????o???r??I???????t??N??U.L??01Qr????x???T? ?? e?:P-L?na??h???KY??,>????tCi1??tD7????{??:w{??{??k?0?Z4 f=???0UO>0{J?? ??#3??? }??????95?Z???????????|?]9?? + n3VZ|???-+ C???{B I\l???l???????#????m??g?????????]?GK-#S?l?W/]?z?|hZQe?h?Z%V$,????r?#}?@0M?w + ??G>???9?$?5-xb???????9t?Q???Z?X???x.???q???@?OZ9???A??b? }?'?r`?Ug?+o??n4#???g?w5?C>???E?[?C???{???_?????S?]?|??Z????@?+ ?"?????`?j + 7?!N2 1e???z*u?e??V????|?????????c?A}?9??????r??B-a???p???G??Q> + endobj + 2468 0 obj + [/ICCBased 2502 0 R] + endobj + 2469 0 obj + [/ICCBased 2503 0 R] + endobj + 2470 0 obj + << + /Type /Font + /Subtype /TrueType + /BaseFont /BLACHP#2BHelvetica + /FontDescriptor 2504 0 R + /Widths 2505 0 R + /FirstChar 32 + /LastChar 121 + /Encoding /MacRomanEncoding + >> + endobj + 2471 0 obj + << + /Type /Font + /Subtype /TrueType + /BaseFont /BFXWRQ#2BHelvetica-Bold + /FontDescriptor 2506 0 R + /Widths 2507 0 R + /FirstChar 65 + /LastChar 121 + /Encoding /MacRomanEncoding + >> + endobj + 2472 0 obj + << + /Length 2508 0 R + /Type /XObject + /Subtype /Image + /Width 90 + /Height 33 + /ColorSpace 2468 0 R + /SMask 2509 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 2473 0 obj + << + /Length 2510 0 R + /Type /XObject + /Subtype /Image + /Width 104 + /Height 35 + /ColorSpace 2468 0 R + /SMask 2511 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 2474 0 obj + << + /Length 2512 0 R + /Type /XObject + /Subtype /Image + /Width 111 + /Height 35 + /ColorSpace 2468 0 R + /SMask 2513 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 2475 0 obj + << + /Length 2514 0 R + /Type /XObject + /Subtype /Image + /Width 125 + /Height 33 + /ColorSpace 2468 0 R + /SMask 2515 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???+ endobj + 2476 0 obj + << + /Length 2516 0 R + /Type /XObject + /Subtype /Image + /Width 100 + /Height 35 + /ColorSpace 2468 0 R + /SMask 2517 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x??? + endobj + 2477 0 obj + << + /Length 2518 0 R + /Type /XObject + /Subtype /Image + /Width 134 + /Height 35 + /ColorSpace 2468 0 R + /SMask 2519 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 2478 0 obj + << + /Length 2520 0 R + /Type /XObject + /Subtype /Image + /Width 111 + /Height 35 + /ColorSpace 2468 0 R + /SMask 2521 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 2479 0 obj + << + /Length 2522 0 R + /Type /XObject + /Subtype /Image + /Width 111 + /Height 49 + /ColorSpace 2468 0 R + /SMask 2523 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 2480 0 obj + << + /Length 2524 0 R + /Type /XObject + /Subtype /Image + /Width 136 + /Height 35 + /ColorSpace 2468 0 R + /SMask 2525 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ ??+ endobj + 2481 0 obj + << + /Length 2526 0 R + /Type /XObject + /Subtype /Image + /Width 95 + /Height 33 + /ColorSpace 2468 0 R + /SMask 2527 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 2482 0 obj + << + /Length 2528 0 R + /Type /XObject + /Subtype /Image + /Width 104 + /Height 35 + /ColorSpace 2468 0 R + /SMask 2529 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 2483 0 obj + << + /Length 2530 0 R + /Type /XObject + /Subtype /Image + /Width 111 + /Height 33 + /ColorSpace 2468 0 R + /SMask 2531 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 2484 0 obj + << + /Length 2532 0 R + /Type /XObject + /Subtype /Image + /Width 116 + /Height 33 + /ColorSpace 2468 0 R + /SMask 2533 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 2485 0 obj + << + /Length 2534 0 R + /Type /XObject + /Subtype /Image + /Width 84 + /Height 33 + /ColorSpace 2468 0 R + /SMask 2535 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 2486 0 obj + << + /Length 2536 0 R + /Type /XObject + /Subtype /Image + /Width 84 + /Height 33 + /ColorSpace 2468 0 R + /SMask 2537 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 2487 0 obj + << + /Length 2538 0 R + /Type /XObject + /Subtype /Image + /Width 111 + /Height 63 + /ColorSpace 2468 0 R + /SMask 2539 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 2488 0 obj + << + /Length 2540 0 R + /Type /XObject + /Subtype /Image + /Width 94 + /Height 33 + /ColorSpace 2468 0 R + /SMask 2541 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 2489 0 obj + << + /Length 2542 0 R + /Type /XObject + /Subtype /Image + /Width 111 + /Height 49 + /ColorSpace 2468 0 R + /SMask 2543 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 2490 0 obj + << + /Length 2544 0 R + /Type /XObject + /Subtype /Image + /Width 104 + /Height 33 + /ColorSpace 2468 0 R + /SMask 2545 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???+ endobj + 2491 0 obj + << + /Length 2546 0 R + /Type /XObject + /Subtype /Image + /Width 84 + /Height 35 + /ColorSpace 2468 0 R + /SMask 2547 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 2492 0 obj + << + /Length 2548 0 R + /Type /XObject + /Subtype /Image + /Width 84 + /Height 35 + /ColorSpace 2468 0 R + /SMask 2549 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 2493 0 obj + << + /Length 2550 0 R + /Type /XObject + /Subtype /Image + /Width 90 + /Height 35 + /ColorSpace 2468 0 R + /SMask 2551 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 2494 0 obj + << + /Length 2552 0 R + /Type /XObject + /Subtype /Image + /Width 100 + /Height 33 + /ColorSpace 2468 0 R + /SMask 2553 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ ??+ endobj + 2495 0 obj + << + /Length 2554 0 R + /Type /XObject + /Subtype /Image + /Width 116 + /Height 35 + /ColorSpace 2468 0 R + /SMask 2555 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 2496 0 obj + << + /Length 2556 0 R + /Type /XObject + /Subtype /Image + /Width 95 + /Height 35 + /ColorSpace 2468 0 R + /SMask 2557 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x??? + endobj + 2497 0 obj + << + /Length 2558 0 R + /Type /XObject + /Subtype /Image + /Width 104 + /Height 33 + /ColorSpace 2468 0 R + /SMask 2559 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???+ endobj + 2498 0 obj + << + /Length 2560 0 R + /Type /XObject + /Subtype /Image + /Width 94 + /Height 35 + /ColorSpace 2468 0 R + /SMask 2561 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 2499 0 obj + << + /Length 2562 0 R + /Type /XObject + /Subtype /Image + /Width 125 + /Height 35 + /ColorSpace 2468 0 R + /SMask 2563 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x??? + endobj + 2500 0 obj + << + /Length 2564 0 R + /Type /XObject + /Subtype /Image + /Width 100 + /Height 49 + /ColorSpace 2468 0 R + /SMask 2565 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???+ endobj + 2501 0 obj + 5337 + endobj + 2502 0 obj + << + /Length 2566 0 R + /N 3 + /Alternate /DeviceRGB + /Filter /FlateDecode + >> + stream + x?}?OHQ???%B?e&R?N?W?`???o???k??????????n%B?.A?1?X?I:??b]"?(????73?????7?3????{@](m?z?y???(?;>??7P?A+?Xf$?v?lqd?}????????] ?U???????x????iO:???b??M??1?W?g?>??q?[ + ?2?M?'?"()Y'??ld4?????2??'&??Sg^???}8??&????w????,? \V:k???;?i?R;;\??u????V?????\???\?C9?u?(J?I????]????BS?s_ QP5??Fz?????G?%?t{3qW?D?0vz ?? \}\?+ ?????4?I?????x#?{z?wA??j}????????Q????=??8?m??? + ?(?o{1?c??d5?U???g??t????la??i"??\.5???????^?8tph0?k?!?~D? ?T?hd????6??????:>f??&?m?????x?A4????L?&????%???k???i??????Cq????m?&/?By#???%i??'?W??:?Xl?Err?'?=_???)?i7??????,?F|?N?????6?rm?^?? ???U?HW?????5;?????hendstream + endobj + 2503 0 obj + << + /Length 2567 0 R + /N 1 + /Alternate /DeviceGray + /Filter /FlateDecode + >> + stream + x??SMkQ?3V??*??t??E?0~,????i?c??A???d????$??U7nD?n@?.?pQ?FQ(?_??~?(t)?????*?????????????u?uM?Y?/ + ?L?j?;??d??T?s3??B?m??t??????? ??????|????]?HR?O?k?,px\sE?????f?!:t|????04Vj?U??0????????????a???K?#??kIzE???~??u??0?-????9?R????eL???c?? V??t????B?????r=M?????Q???qN???`????> + endobj + 2505 0 obj + [ 278 722 722 722 722 722 722 722 722 722 389 722 722 722 278 722 722 556 722 722 722 722 722 722 722 722 278 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 556 722 722 778 722 722 722 667 722 722 722 722 722 722 722 722 722 722 722 722 722 556 722 500 556 556 722 556 722 222 722 722 722 833 556 556 556 722 333 500 278 556 500 722 500 500] + endobj + 2506 0 obj + << + /Type /FontDescriptor + /Ascent 770 + /CapHeight 731 + /Descent -230 + /Flags 32 + /FontBBox [ -205 -443 1437 1254] + /FontName /BFXWRQ#2BHelvetica-Bold + /ItalicAngle 0 + /StemV 0 + /MaxWidth 1500 + /XHeight 540 + /FontFile2 2569 0 R + >> + endobj + 2507 0 obj + [ 722 722 722 722 667 611 778 722 278 722 722 611 722 722 722 667 722 722 667 611 722 667 722 722 722 722 722 722 722 722 722 722 556 611 556 611 556 333 611 611 278 722 556 278 889 611 611 611 722 389 556 333 611 556 778 722 556] + endobj + 2508 0 obj + 32 + endobj + 2509 0 obj + << + /Length 2570 0 R + /Type /XObject + /Subtype /Image + /Width 90 + /Height 33 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????KA?sw??m?e?? Emka?+??(????D????!?????xZ?R???RDHBbV??&?w?y??y?-,?k?"K????XD??Q}m?P???G?A?W?8U? EY?B:??Tz??t*a???TY??Is@@*?#???wv??????2)?D??0K????E6??B?d??8([?b!???h?gf^??!??2??}|R???~rlW,s+IB~Y?gfQ???5?v????*?-?Q??f???"~?=@R?$]??????g?T????S??B?U ???.????Y?9]wxusK?????:?????}KpfF???+???{9?{S?x7?t? ??3?47??????????????????E?y??_?n?y??????? ??????T?|B???Y?3??`V??? ?????????f + ?9?pv??7?H,???+???#endstream + endobj + 2510 0 obj + 33 + endobj + 2511 0 obj + << + /Length 2571 0 R + /Type /XObject + /Subtype /Image + /Width 104 + /Height 35 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???AK?@?m2?I???f???$R??B)T??b.=B??rQ???TZ??x?n??W?????? ?C??hendstream + endobj + 2512 0 obj + 34 + endobj + 2513 0 obj + << + /Length 2572 0 R + /Type /XObject + /Subtype /Image + /Width 111 + /Height 35 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????KA???Lw??.k?????] ,$!"I????????? + 9?A%?CN+R!??)??!????MM)=Sh???}> + stream + x???MKA?uw??m?eSwBQ?DX?#??(????D????"???K??xZ?,???RDHB?1+? ??????y???x??x_?h?j?A?q<+ endobj + 2516 0 obj + 33 + endobj + 2517 0 obj + << + /Length 2574 0 R + /Type /XObject + /Subtype /Image + /Width 100 + /Height 35 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???AK?@?m2?I???f??-?A + ?6J??Vs?!????B?=????????"T?^?"?????v?u?vY?6e`??????y??7???7? ??>??+ ?n?p<$,/D?*!????? 2??O%c???I?2??dP??k?T??d$?%m@+jR3?f?*?PR?rf?????E??H!i????Jm? %??J?h?F?(H+ endobj + 2518 0 obj + 37 + endobj + 2519 0 obj + << + /Length 2575 0 R + /Type /XObject + /Subtype /Image + /Width 134 + /Height 35 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???AK?@?m2?I???f???$)?T(?J[]???@(?S. + ???S*-z??????????"??m???e?:e?????x3???y??o???R? ???~? Q!+ f?????E???B??i?????g?l4j??eY? L??AIV?+?J}????/?i?Ns?^)?dUY?S ^???Q\???????J?????v????N`??Z?2????z~7??????????S#???"$%e???? ????u??A??xN?d? ??g .?3???????txqI???ix?m??????%sf??u{??h|??:7??Y??z???K???V?9[??dt}???:????A??? + ?????p??p8?{|?P???n< ?|?a?*~? ????=8:????????????`??n??? 6???7???????ad???/??Zl?N628#??#w*+7?;?+ endobj + 2520 0 obj + 34 + endobj + 2521 0 obj + << + /Length 2576 0 R + /Type /XObject + /Subtype /Image + /Width 111 + /Height 35 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????KA???Lw??.k?????] ,$!"I????????? + 9?A%?CN+R!??)??!????MM)=Sh???}> + stream + x???Ak?@?k??????QT??5???x??S.-??S-Uz?i)xP/BiRA???~??]?.K??s????????? ?h????? ?$ + ?]?w?wt?u{?^????????D?>?0Os?? + ?M ???y???0' ??sz???q_0?Up_?????M>+ endobj + 2524 0 obj + 37 + endobj + 2525 0 obj + << + /Length 2578 0 R + /Type /XObject + /Subtype /Image + /Width 136 + /Height 35 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???AK?@?m2?I???f??-?A + ?6J??V?\z??=??- =???????,?P?z)??"?"??m???e??s??????y?77???????[?8p+ ???p@@ + ??U???Xo??e?4?DA??AIV???J}????/h?Ns?^).gUY??/?D?(??N????|?@gg?k;?j?H'??G?L4?b??? ?{} + ??????v???,???II???u?? > + stream + x???MKA?sw??m?eSwBQ?BX?%A?(????D??P?"???K?DxZ?4???R?HB13{!:?LP??{????<33??+?t???9?+ |-??x(H????k/?????.(?$@?????H??@(?/G =?e= + `?????#<eU ?$f???5zR??#zPSe?????T&F2??oln??????? c `?????W?B?d?wv??)[?b!?X k?'z^?}A???V?>???????e?$??~???lW?q?EO??iT???1t??oz??+ endobj + 2528 0 obj + 33 + endobj + 2529 0 obj + << + /Length 2580 0 R + /Type /XObject + /Subtype /Image + /Width 104 + /Height 35 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???OK?@?m2?I???f??-?A + ?6J??Vs?!????B?=????????"T?^?"?????v??????m?|>???23?????K??l?Y????~? ?J+ ???8 ?? ?*?+??/???*??ei? L??$???|??Qw??Wz?S?????iU???? 8?4???????[???????c???d ??#?D3K????`??????}??K?Fd??'$%a??? + ????????? Z?S- E?.B?GS????????yE?e?,< ??]????p?A??Y?{?Nx>???s;????W/??8??h????N7?O/?e?X?f??Ue????> ?d??Yendstream + endobj + 2530 0 obj + 34 + endobj + 2531 0 obj + << + /Length 2581 0 R + /Type /XObject + /Subtype /Image + /Width 111 + /Height 33 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???MKA?sw??m?eSwB?eka??@K?p/? y?C?d/??i!*?K!}?????8LP????33???????? + G?i?T?+ ???Y??u??j???t?U?lf +???$5 at Ry??9??{~A?s??vj??O??*??]??o(?6+U?????o?q????N?b?c!?????bd?v?????#zu????A??rp7z??it7?> + stream + x???[KA?uw??m?eSwB??5???%?R)???|?? |?} ??? A??RDHB1????????????????}???K??|?+ ???"'??CLr?|?$?????y?+ endobj + 2534 0 obj + 31 + endobj + 2535 0 obj + << + /Length 2583 0 R + /Type /XObject + /Subtype /Image + /Width 84 + /Height 33 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????KA?sw??m?eSwBQ?BX?#??(????D??P?!???K?DxZ?4????HHBbf?]F????x???13?????M?0???+ ??4?(?ZP'Q#?H?S?L??(???*??3QH?ab$R????%?[?L*a?0V?+ endobj + 2536 0 obj + 31 + endobj + 2537 0 obj + << + /Length 2584 0 R + /Type /XObject + /Subtype /Image + /Width 84 + /Height 33 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????KA?uw??m?eSwB??5???#?R)????H????!???K?DxZ??????????a/? 4P????c?????? G?K?O>?????3?????D !y?!I ?b?r<$Y??4???X ??Y ?I:Q?H??`8?/.:??h8?? + '??4?(?ZH'q#?J???N%?8?C?*??=QH?b?2?|qc???b>?I$?U$?i??-????JV??MG?b?? + ??rDS$8u??????i?????>??]?f?kI???u? + ???Y?-?????}??v??:V?7?Hj?? ??t:]??????q??UH??*??"y??/????s?^\????_]?GN?ff?a?,?:Q j?Jv??^n??t?? .?v?.??h+ endobj + 2538 0 obj + 43 + endobj + 2539 0 obj + << + /Length 2585 0 R + /Type /XObject + /Subtype /Image + /Width 111 + /Height 63 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???Mk?@???dL??!U3??DC????x??)?,"x???J?"-?E("?A*R????n??????,?????@y?98?Or|?@???_PAR+ ? ?q??x?cP???4? ?.??]J????4 ??Vc8? }???(????P???l????%??D?X"?BW2S????D???GP4'???&??\?XBW??????"GS?????I?g?'AI`??#i??W???^7..?-t5//??????????PV3Z?h???N]?k??0*ZF?????+??d^7?f?g???[???4?|R??,???8??+Mk??yk?Gt???????k?h?uv? ?????X??l???t?`u?F9??> + stream + x???MKA?sw??m?eSwBQ?BX?%A?(????D??P?"???K?DxZ?4???R?HB13{!:?LP????3?> + stream + x???Ak?@?k??????QT??5???x??S.-??S-Uz?i)xP/BiRA???~??]?.K??s????????? ?h????? ?$ + ?]?w?wt?u{?^????????D?>?0Os?? + ?M ???y???0' ??sz???q_0?Up_?????Q>+ endobj + 2544 0 obj + 32 + endobj + 2545 0 obj + << + /Length 2588 0 R + /Type /XObject + /Subtype /Image + /Width 104 + /Height 33 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???]KA?sw??m?eSwBQ[BX?#?R1????? ??? ???!(?I$$???}???L????a??????[?X k?'^?}A?X7???P???~?oW,s=A?>Y?'Q???1?v??7[?4??F?.?C?????+ endobj + 2546 0 obj + 31 + endobj + 2547 0 obj + << + /Length 2589 0 R + /Type /XObject + /Subtype /Image + /Width 84 + /Height 35 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????K?@?m2?I???f???$R??B)T??b.=B??rQ???TZ??7??ww?{??]???L?endstream + endobj + 2548 0 obj + 31 + endobj + 2549 0 obj + << + /Length 2590 0 R + /Type /XObject + /Subtype /Image + /Width 84 + /Height 35 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????K?@?m2?I???f??-?A + ?6J??Vs?!????B?=????????"T?^?"????????v???e + ???}> + stream + x???AK?@?m2?I???f???$R??B)T??b.=B??rQ???TZ> + stream + x????KA?sw??m?eSwBQ?BX?G ??Q????(yzl????]??;??6wN/?w??K???^??yqz????4??cY??i?????+%??n??p?lLg??????]1?,?9?y?b???,? ?}??.aq_1?????7?5??endstream + endobj + 2554 0 obj + 35 + endobj + 2555 0 obj + << + /Length 2593 0 R + /Type /XObject + /Subtype /Image + /Width 116 + /Height 35 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???OK?@?m2?I???f???$R??B)T??b.=B??rQ???TZ> + stream + x???OK?@?m2?I???f??-?A + ?6J??V?\z??=??- =???????,?P?z)??"?"??m???e???Y?}>??????????'D??????j???~???+ U?k?^x?????? Z?S- Eow???T?h7??0??????,]??z?[k?????????WzF/W?G??5K'?/u?????????e> + stream + x????KA?sw??m?e????????@K?p/B y?C?d/?"?i!J ??K!??YYFt&????y??wa???y???{?_?+ ???Y?k ???P??r5?lf +???$5H???;??{vN?3??q??UH??*??A??%_8?1+5???nn)ps5t?N?bfba??yP j?Jv??^???x?]???]??+ endobj + 2560 0 obj + 32 + endobj + 2561 0 obj + << + /Length 2596 0 R + /Type /XObject + /Subtype /Image + /Width 94 + /Height 35 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???AK?@?m2?I???f??-?A + ?6J??V?\z??=??- =???????,?P?z)??"?"??m???e???Y??}????????,]??v?[k?????????WjF/W?G??5K'???????? ?~g?W???3??|g????U???q?a???H??????/?endstream + endobj + 2562 0 obj + 35 + endobj + 2563 0 obj + << + /Length 2597 0 R + /Type /XObject + /Subtype /Image + /Width 125 + /Height 35 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????k?@?5?[??-?jn(*I?"4D???h^|?Oyi!? |?C[?>??RFK?B?????RJW + ??????1?z?`????/????X????w?<? + endobj + 2564 0 obj + 36 + endobj + 2565 0 obj + << + /Length 2598 0 R + /Type /XObject + /Subtype /Image + /Width 100 + /Height 49 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???Mk?P?k?k?&?T?E%?? D??(??E at DW??`?U-U?pi)?P7BiRA?????:?Cw?sa?p?y?98??????> + }Q? H?+ endobj + 2566 0 obj + 706 + endobj + 2567 0 obj + 631 + endobj + 2568 0 obj + << + /Length 2599 0 R + /Length1 10548 + /Filter /FlateDecode + >> + stream + x??Zy|??????????d?%3????2??l$$c? + $pI?`??(V|QP "U?E?V????A??bmm]?J?? + j?y?????y???????????r?=w?{???s?=w?+ `rtwu???~?.+ yJ?????v-?@iH?&0?i+???c?e?B&?6& .????NJe????? ??&?L??7K??WU?1x??+ \ {`/~???C?g??$N!?q???FbRb+ f?>?'Ct?????j1???4?N??V)?? M????u????(??44?JuO'6t^??ucS??c??y????9?oFF?##G??*rs??w?W5w?L?????5?6wtX??d?!?NAZ? ?ZKw?;J:???????????pDrJ?9????J?8 + ?;?u[??F?Fm?????S#???????????5vQl?6l???k????????=??E`f?DuNo???mQ?C?K?5{j??;O[.U/P?k.??R?????:????d?C?u?????n?????5J?eB?q~M??.O???1?Ux?=???;\??:h??j=?5mQhi?F?r%7????r???{U?URY.Z?N??-O??yL%????S.@??L?*(V??~`??n>S?4R?????I;RU#R??+???+ ?RP?/p%z?e8?"MJ? C?1xbRT>Q M?` + ?(^?4??9??l?7M?&?5??????=??~8?\?U?)TUY??_??eD?7?I?Y?d ??/ + ?M0H???vh'?3o?|?$Pb."?Of?\9k??9???|?=??I??????0???cY????$?????,Z?"wd6Xv?8?K???gM??y%?F??o?v????d4??????????i???????Y????e?%7^0?M??cy??r8T?|??n?WY??????$yF?l??????*?}??H?R?????~??R??c}? Hi9??jcI?0?*??c0??????`6??<%?~??D/??H ? ??"?l=?n?P|C|??}??Y????&?d??ZDY[!??X??h??TXPR\4&??_4?[X?=Hz28??lrIc???)!$?3?????'m????5D?32?Hj? '?[????? ??????m?JSM????u??'?(,???M??R????V??????pF???3o?y????w?$??????JE?cfl??V???*L??dP??6 ??f???E?e???Ft?Q?t?Ic??V"?????????????k?k?k???G??<1??}3~L?9"??u?o?rI??p?LI| ??S?*??HiVQjUv?#P?????????ZA? x???U;???P??P9U^???kyVp2???Gq?.>? ?(g?????p?`?.???tLH ?Z?U??l??p????????QR?\?u???ph=l:Z?p2?K?@?>R?*?%?.??m??%?6?Y$F3?&F?!i?^?qDCR ?sFR,?+ ?Z!O???y@????'??Z?h?u ????y???r0??wg-????m????I???F???Ai?$=?8??HA??^s?f'?????????t?iJ?iV????6???\?????Z).??\??S?+ u?3????CO?`^ A?_????u?????????Rs(%0n?k?]?y?3?s???????$)$?vl??-?=:0k????`?|?Pq?? ?8Z?? OK?qf?h(74R1t!F????4)??q?!?0Y??a??*??87?c???E?1??p?f??1??+ ??????j???O??????????]t???f??????3??????R0????/?? =z + ??????}y??????O?C?????a???8? ?????6$3R??J?h?E?$u#?')f??:Lv`m~?v?5aF???fn????+ ?B7?M??V2?????????e&??3???????yk&/??v??O'NYK,:????????hz??"?t$???q%?chBX??h?XF)H???#R??+ ?? ?7???????d?=q???? + ?i?????????$,\??? ??ff??f???1?l_?? ??}@?I??????1?????so BI?>F + ??B;1+??H????o????O??????R&_I??#?F~K??o?|?oj??r?(?n????o\e?i?y??????????????f??n6n2m2??]&mL4??_125?K,???;?Nv???f??????Q?Ju + ?04??_?Pn??2??? ????ZB?NY??!iZ?M?5l??????+j3?7?dZ?7?-,!?-+?eCr!`I?g??Pr4?S??/????JR?H??x??|f?c}?????,mAX?Vj?=?a?s???|&>? '???????N?????j/??x9?cO?o?\x3K.?I|??V?[????=??2????`n?!,???1? Z?????????RL ??????+?????K???8??0c?i?h2?zc?y^???????????2??8?????????Z(UX????V?*???n??hh9Z|??? {??{ ?Ge???']5??%??kAoW??Y??? JtA?w??c??3)x2???(?R??:?-? 0I~?e + ?{-\?C+?? 0=??1??T?);?* ????'0?0?<+ A-(A?c???*w???*?e?????????On?wH`J+ endobj + 2569 0 obj + << + /Length 2600 0 R + /Length1 12220 + /Filter /FlateDecode + >> + stream + x??z{|T?????$ ?[????|???O + ??L2? H???? ??{\ _?>#?????????bX ex] r[?EWG?G?? + ??cD ?$9z+ H i$????d??lG?????Ar?&o?A?$?S??7?????????e?L:???1S?g?c?2_?>v&??]???????$n 7???-???s'???.q|2???????Da??]?H*??">x??mec? ????t8???/? | G?i? #K3-???Q???w?P + ??? ?2f7?"??8V?K?B???4????v9S??v??bN?7 qz?V?V??? %?]??nw?????i?????????k*?{]XU}}?^W???u}????O=C????=??U + ?9??*???T??&3'7c??JO???_?7(????n7>???uU?zI????zYWOU{%w $[??l@??

    `?s?A9?S?S.??n??1???X??G4J?cFZ?t"???l?????q=?k?|?,??9%? -W9??KQ?_/????v?]?C?-??S???+Z?{?aN?? W?W????~}M?P ?3|rV??U????2y:??K??????VuM???2' ??uaP56?%???0?????x?0?n??,Y??W?tX????L7?p?j?Z? W??g??W?? U??):{Z??f??6?{C-?W??--?p?\yV??GX04?e ???u????????k+{C?-:j?????#(????w?S?k???x?G??21Se + ??C????Jw?????y???a?\??2+ ?M?)????????????)??3? ? + G??A??/??+?dd$?7?$dI?DA?G?,?H0?v/??*(Y?L?U1?@U"??84??S???0I??nz?Z}8e1U????:?N?I??????#RDz. + ??r$}??-wAy?pO????????[7?A????:[?y??e???oT?x?)??S?gb?=N?$???*O?)??cR?=????38|Bq??? ?????[y??N ???&k00&`S?[???X5??1? (4?Y???????%g? V???l?o????????Uz??;?l?Y?'?w?/?D*??L?GV0_o+uK????????????Yx~V???d6?w????????????( ?d?R?(r?Op???v????i?? +???TAy??5? ?4D + ??F?pG#????GnQ???l???? y!#K)Y- >b??I?I???????B????d?>????I?????a???|s??J?9?q?????b???=?&??????D?L???=H??ZC`=?? X3???E?G??h%????JzE?#]???}?4q??R?L?o??s?`??%??c??P???h3s??44????A??b?+5???????G6?}????0I?g?????A?!R??h??F????Y?????t2I@;f? Y?????u??5???`?{O??+Y?j?4Q?-=???(?9???[?-??Km?w????TW?l?1?Df????tz??????????9rX9??E???h?s!+ ???p$?P??=oF??rs?{($d?>?n????C?M;?7?B\??/Jg????^~u?O???m?NH???K??d?Jg?M??5???)??c???2?/_????>}????>???????p?M?}??}x??$?%|?@YQ????????'i?x????eD^?@$?l??V?*?W.??T#?&UqG???q?!??|v?|d?$?#J????r??b1??u-6?????a FS0b?????)???O?B???%??X?%??????7?????W?m??????L??e?????LO?Np?F>xXB?Y????B|&???%@*??t + $L?} ???q?k??'6??? Z + ??a???p?x`?[??A?T?????'!??D???{??~????@A?&???E+?&??I!i?8???G??(p??,?'?M?M???+?DMj?%{?S?Tk? 4???!wTa??4G??!1Gl(??.?=???k?o?:?=g ?????3-r*(?r??D?r??\=?#x?)IQ??HVb?Yt???w????Rn?\?{?????????B3??G?>?<7)uL????????YB??m?L??$?5??????g?????S????????? ???s?Q?+{??????$?? %??L?(_(????^??o&?c??????N?=L????O???MZ?{M?F??r??HMv??:???N??n?8d?? Y`??????`2'PO*??fY?q?#L1c?C?y?_?????>#IE? ?}?R??>6*??????k_IR_??qw$2P?^pei?CK???n??p??????H???_?[BU?Zv[hwon6u?V?W???W???E???7Yo?C???Z? Zo?&?P???k??%Y?NW??v?u~fd at 1J???&[&??2]2????Q\^?a??+ ?o??nM(^C#?c????+?hfn???t?8?I`???`?O.???cm?}?*2 + ?:?>N?x?'???M5??7so??.`??l??&??8 &??bO ???? + 1??/b?Z+80???t?????9?gz{???'=J?? ???sh{KO(?W?,?/)?o???=?\??7?0{P+????nc?a~???w ??0?2?*???'????z?w\|?y?}_xW?p*?q?F??T???sj?b?&??U,CY???,??5+ ????k????R? hO?WSZ*???/s?@??ffH??????n?? ?3d?)???`?AM?? i???X????WeZQ!???)?4?u?Li^??,?N)^?L??M??=r|d9???=iRNKd1z|?7T??????f_$K?%?!?+ ?rDQ&rm?.???+?T?5y??????$?g]?qk?~95@>g+"???, ???! ?? + ?K??~?>???9???`+?~?<4??O???O???9t? ??V???r??!????=???g>%???q????g,u?W?{*??'??_????.1??????y???f??mDY????Z?WOW?S????~K?N??$???\?1B??Nh?d??R?????U5?5a ???u????M???S?&?J???f?F%?? + ?4;?i?K,??z?F????5??6?a??i?<??e?G?lW0????)e ?"??b???? ???b?K#?????[???+ ???!?|???J?R?????TC?S*??R??H7>???j?????;0????Vn:?t??1???v???Hk??! ?=`?|?nc??C?YH??r?P?&?a[?P?5?w??z???H8JF?_?3TM??#??g?3;Y-?k?,??n?-?-?Y?HxM????t?a??{??????hNkgjwi????v? ???1fc`!zbc94???P6 a???WT7?h??U??pY???s:r*n]8W?_???.???/9?~_??w???8??P?>_1?(_NVA5?@-?? P?0??F??M?i0f at 3??Lh?????Ff?;u?z?< m!q??q????0??:8??{InH??????9???f??H??q?*?*?????3L??y=H???+NF!U??)???RI(???????????9???;??~??8O?c{??Df?"y?fI(?y?{??w????G;??X???[?d?sW???'7(5??T??0?????L?;????W?=?.FoP&?u?Bn????w.??9g??$?q?y:[?A???0??9??|??S??re?Pl?????^??????????? ?r?P????w&???????7;?3?d? ????Z???0P???#1rK???"O?\3?L??G??f ???>?z$;???????????_???????0??? s?i?!K????"$ + ?I4?zQ+?EQ?E??D?????d?M? 2?Y??*y?#j?P"RT?0?X????Lc????????Y??l??Ir???)??{?[z ?L4?%??????[]??}M+/NW???Tubj???????v??????????g???iGg?JOge?EO?ko??4O???>/Font << /F1.0 2604 0 R/F2.0 2605 0 R>> + /XObject << + /Im3 2606 0 R + /Im2 2607 0 R + /Im7 2608 0 R + /Im1 2609 0 R + /Im5 2610 0 R + /Im4 2611 0 R + /Im6 2612 0 R + >>>> + /Length 2613 0 R + /Filter /FlateDecode + >> + stream + x??Y?n7 }?W?1I???????-????S^\{o??&???/Ei??????@?%?:G?!9?.>????????@?x#?????Z????N|??nv??~\??????Q????1???`Ge/b???u??j^r?8? ??F^?[endstream + endobj + 2601 0 obj + << + /Author (Jakob Praher) + /CreationDate (D:20060805084900Z) + /Creator (OmniGraffle 4.1.1) + /ModDate (D:20060811145300Z) + /Producer (Mac OS X 10.4.7 Quartz PDFContext) + /Title (InMemoryExpressionGraph.graffle) + >> + endobj + 2602 0 obj + [/ICCBased 2614 0 R] + endobj + 2603 0 obj + [/ICCBased 2615 0 R] + endobj + 2604 0 obj + << + /Type /Font + /Subtype /TrueType + /BaseFont /RZRGLP#2BHelvetica + /FontDescriptor 2616 0 R + /Widths 2617 0 R + /FirstChar 32 + /LastChar 116 + /Encoding /MacRomanEncoding + >> + endobj + 2605 0 obj + << + /Type /Font + /Subtype /TrueType + /BaseFont /LOURDX#2BHelvetica-Bold + /FontDescriptor 2618 0 R + /Widths 2619 0 R + /FirstChar 32 + /LastChar 117 + /Encoding /MacRomanEncoding + >> + endobj + 2606 0 obj + << + /Length 2620 0 R + /Type /XObject + /Subtype /Image + /Width 92 + /Height 35 + /ColorSpace 2602 0 R + /SMask 2621 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 2607 0 obj + << + /Length 2622 0 R + /Type /XObject + /Subtype /Image + /Width 92 + /Height 35 + /ColorSpace 2602 0 R + /SMask 2623 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 2608 0 obj + << + /Length 2624 0 R + /Type /XObject + /Subtype /Image + /Width 108 + /Height 35 + /ColorSpace 2602 0 R + /SMask 2625 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???+ endobj + 2609 0 obj + << + /Length 2626 0 R + /Type /XObject + /Subtype /Image + /Width 92 + /Height 49 + /ColorSpace 2602 0 R + /SMask 2627 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 2610 0 obj + << + /Length 2628 0 R + /Type /XObject + /Subtype /Image + /Width 92 + /Height 49 + /ColorSpace 2602 0 R + /SMask 2629 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 2611 0 obj + << + /Length 2630 0 R + /Type /XObject + /Subtype /Image + /Width 92 + /Height 49 + /ColorSpace 2602 0 R + /SMask 2631 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 2612 0 obj + << + /Length 2632 0 R + /Type /XObject + /Subtype /Image + /Width 114 + /Height 35 + /ColorSpace 2602 0 R + /SMask 2633 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 2613 0 obj + 1761 + endobj + 2614 0 obj + << + /Length 2634 0 R + /N 3 + /Alternate /DeviceRGB + /Filter /FlateDecode + >> + stream + x?}?OHQ???%B?e&R?N?W?`???o???k??????????n%B?.A?1?X?I:??b]"?(????73?????7?3????{@](m?z?y???(?;>??7P?A+?Xf$?v?lqd?}????????] ?U???????x????iO:???b??M??1?W?g?>??q?[ + ?2?M?'?"()Y'??ld4?????2??'&??Sg^???}8??&????w????,? \V:k???;?i?R;;\??u????V?????\???\?C9?u?(J?I????]????BS?s_ QP5??Fz?????G?%?t{3qW?D?0vz ?? \}\?+ ?????4?I?????x#?{z?wA??j}????????Q????=??8?m??? + ?(?o{1?c??d5?U???g??t????la??i"??\.5???????^?8tph0?k?!?~D? ?T?hd????6??????:>f??&?m?????x?A4????L?&????%???k???i??????Cq????m?&/?By#???%i??'?W??:?Xl?Err?'?=_???)?i7??????,?F|?N?????6?rm?^?? ???U?HW?????5;?????hendstream + endobj + 2615 0 obj + << + /Length 2635 0 R + /N 1 + /Alternate /DeviceGray + /Filter /FlateDecode + >> + stream + x??SMkQ?3V??*??t??E?0~,????i?c??A???d????$??U7nD?n@?.?pQ?FQ(?_??~?(t)?????*?????????????u?uM?Y?/ + ?L?j?;??d??T?s3??B?m??t??????? ??????|????]?HR?O?k?,px\sE?????f?!:t|????04Vj?U??0????????????a???K?#??kIzE???~??u??0?-????9?R????eL???c?? V??t????B?????r=M?????Q???qN???`????> + endobj + 2617 0 obj + [ 278 722 722 722 722 722 722 722 722 722 389 722 278 722 722 722 556 556 722 556 722 722 722 556 556 722 278 722 722 722 722 722 722 722 722 722 722 722 722 722 722 278 722 722 722 722 722 722 722 722 722 722 722 722 667 722 722 722 722 722 722 722 722 722 722 556 556 500 556 556 722 722 722 222 722 722 722 722 556 556 556 722 333 722 278] + endobj + 2618 0 obj + << + /Type /FontDescriptor + /Ascent 770 + /CapHeight 731 + /Descent -230 + /Flags 32 + /FontBBox [ -205 -443 1437 1254] + /FontName /LOURDX#2BHelvetica-Bold + /ItalicAngle 0 + /StemV 0 + /MaxWidth 1500 + /XHeight 540 + /FontFile2 2637 0 R + >> + endobj + 2619 0 obj + [ 278 722 722 722 722 722 722 722 333 333 389 584 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 833 722 722 722 722 722 667 722 722 722 722 722 722 722 722 722 722 722 722 722 556 722 556 611 556 722 722 722 722 722 722 278 722 611 611 722 722 389 556 333 611] + endobj + 2620 0 obj + 32 + endobj + 2621 0 obj + << + /Length 2638 0 R + /Type /XObject + /Subtype /Image + /Width 92 + /Height 35 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????K?@?m2?I???f???$R??P + ????K?P??\?e??TZ?w?}u|4?endstream + endobj + 2622 0 obj + 32 + endobj + 2623 0 obj + << + /Length 2639 0 R + /Type /XObject + /Subtype /Image + /Width 92 + /Height 35 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????K?@?m2?I???f??-?A + ?6J??V?\z??=??- =???????,?P?z)??"?"?????????)??s?g~????ss??O?x???q<+ ??q??EJQ??K????ZDr?$RM_2(Y??L*Ab2????P???????? + +????5???`??)$m?V?\??oP?^????i???0 ?AIV???Ru????/?4\??Y-????,???p,i?Wm??m???R????????7?1,??(?,??????N???~??=?.???_????Q?:^+????o???n???j?H(x??????E????i??????ix?M??ME??????\????l0????f88 ;m?^63q4uk????N?w???> + stream + x???OK?@?m2?I???f???$R??P + ????K?P??\?e??TZ> + stream + x????k?P?k?1IC?&??DC?,*J?8Dt??BJ?2?T??i)8??PD?A*R????^o?\:??=?? ?}?{t???~?????/??q+ l?v?q????????+??qu??U?,.?? a??IV??R???y?jC??1??VQ2?(??o? ?8?????a?;V?I???MCS?I??Q?????cW ?V??yg=?#H?????J:p??????lYk????x2?d2>Z??V??!?u???zav??O??9$????}??Ps1q?f?p?P??????u??d??2?[?z?????[?$?U??;??o+H????{kT????qc?WJ?j?vo4?/W?P???????n?J)??t`??? 9???{???s????h?7????^"??? ?\?4???(?7????? ?i(?%?^???????oendstream + endobj + 2628 0 obj + 36 + endobj + 2629 0 obj + << + /Length 2642 0 R + /Type /XObject + /Subtype /Image + /Width 92 + /Height 49 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????k?P?k?1IC?&??DC?,*J?8Dt??BJ?2?T??i)8??PD?A*R????^o?\:??=?? ?}?{t???~?????/??q+ l?v?q????????+??qu??U?,.?? a??IV??R???y?jC??1??VQ2?(??o? ?8?????a?;V?I???MCS?I??Q?????cW ?V??yg=?#H?????J:p??????lYk????x2?d2>Z??V??!?u???zav??O??9$????}??Ps1q?f?p?P??????u??d??2?[?z?????[?$?U??;??o+H????{kT????qc?WJ?j?vo4?/W?P???????n?J)??t`??? 9???{???s????h?7????^"??? ?\?4???(?7????? ?i(?%?^???????oendstream + endobj + 2630 0 obj + 36 + endobj + 2631 0 obj + << + /Length 2643 0 R + /Type /XObject + /Subtype /Image + /Width 92 + /Height 49 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????k?P?k?1IC???? E?"XT?fq?)K ?2?T??i)8??PD?A*R????o??N?{?g?O^???wt???~@????w^???$+ endobj + 2632 0 obj + 34 + endobj + 2633 0 obj + << + /Length 2644 0 R + /Type /XObject + /Subtype /Image + /Width 114 + /Height 35 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???OK?@?m2?I???f???$)?t?*mu1??lO?(D??S*-z???????("???v??????q????????y??,,?W?????{???8?+ ???I??w4!DM??d, ??SN?"?$??i??A?e]?eR$!#q?|m?XQ???7 V?=MJV??ZZU?5?)$k?V?Zk???z?V-[??% + ??IJ??])V?M?m}?I?u??Jq%???y'?Fq?v???vg?&??-????E#???3?2????z~7???i??????S#?????2Ju???Ax??&???t???r?U??> + stream + x??Yy|TE?>u?^???=??n:?d?7I??C"?0??`@?1Fe?????Sqa "M???8?Qd\??q???7I?;?v@????c~soj9U??S?9u???@+ ????1???????1H??+ ??!??????X?? ?G??O?#?H#'?w?g?????J?:? ?N?0?&=???~??????R?????n ? ?)?|? ?W+ i???XN??+ ?gf????6g#?c?? ? ??q?????l??E?k?S?/?X?=4?6????h\?k???+ ??n0Do???G??????, ?V??B0????\^?+??? ??vM??????!(*??.?@??K???`2j5?@???&gO?Dj??????O?????? ??g????{?@B$;?d^???,?+e???.D??y#3#6w ??????/m??;D?????? ???\????? ?0p?S???%?L?)??T??K&?rs?^E?=S???`??ks5??T?q? ,???2????!2>#/H?O9???>*?2+ + ??!?C?K+ ?? ?? iu??J???gX? c?v?(/?Z?????????c???~??c??C???]+ ??? uA??t? ??? ?s*?/R?_??T( ~D??Ii6??H???z?(??~"? ~???1?O i&???0?m???N?"?KR?M?A0"n??????>onN^?????U?a??SO???????Yk??[y????~&??????M???!???????-]BVN?Y?jZ[?p??Uw?????S?&?t???G?W???&??>z0?????S?;'P??K?Y+???I??r?7??2??hu-Z*9 ?p?? p5 $e?F?????4?es4|??S???,>Af?(?E?TZb??"?(+?????`??2?B?'?6?????????b???????'X??%???? + ,W?y?l?'? *,????????(?!?E?c#?o?P?????0%=???F?xH^? ??q.0:?.??? ?v??\???K.1X F?<]A?$???6??????]??Z?h?? j?????BT??X???tmC??=k^KfcP????"?|;???v?d?(??I)??$?,????|nc???????`??*[?ud??bN?^71?????6 o?????J??????????%'E???|?x????xXH??o?}`?G 1? `???VoW(?>????i?H"h-?j????????"??-??m?6??Yg??FN?%:9f??%??x/H?\? U[?B?O/"`p'\8?h??v=????3=^?>??i=g??*?^????4>A?????>??f~??c???H1Z?? ?????"x??????6F?[?b?v??????B?3??????\?}CU?%?'K?F?;???a?jE??T??y?? ?nM????g??w?????x?,??gc&??y??y?n?x????L??"V2?E + "??!???ps +_]???????c=????k@???X9e7)???4M?Vgu(|VK?c?????????Q?V?M&B? + ?? 3?P^?? ^2"]???m????EK?+n rst????e???K?? =uW?z????{?g???\{??????????? ?????g???????hC?"?+?$??(?7 + X?9hVM??z?Zc????h%??G?+?????d??O?N?G?Gt?t?u%?l6? + 9?7??6^n7*<?????????}1vk?%??>???{??5?????? ??+?9jG?=A7 ?Dd?fX???3?????4??????Qq ^p??K??2??A????mua??`F?Ri0????FR???????FX?(??? ]??HT 1?@???D????&B +??i?}??????3?{??2k_Y?j?b??8????ng????~????{???????i56 ?w?@i?{S??{{????|?????T^???b?Qq??q|"O?????R:b1?????b????J?q?>|?????_??7=????i?????(??s>}???z%?7k?JgV???? + ?D??F???????????????g?????E??x?G?7?nm?/j??)?b?????5)????? R??6&}???G?>6q?X??/??_?+?x yZ?A?D??????{?:??k,?????rBv??g9^ )?????x!?!?:????8??H???/?`?b?????h???'??????B??&?p??????t_H H??':?2?p$??aN???:l? ???o/???t???!?{?3?? ???ln( ???o?7????Dendstream + endobj + 2637 0 obj + << + /Length 2646 0 R + /Length1 8884 + /Filter /FlateDecode + >> + stream + x??Y{xSU?_?nZ ?^??|?\Q?;??*&?????|~??7??g??Yk??Z{??{?+ ????????$> ??C>???6?#???3?;??K??c?[a;<+???$?:???z???? |?N?N*???w??L?-r?hAy?????????????a???V?s?M???S??/?4?P??#u+ &e???3??? ?????I??? ?????rm ?0T?"????p? ?`[?q????`?F+?jI?????,?? v^??x???M?&???)?iO??E?????c?;???H{?8??=??Q+,??? ;f??? + _"?? +??6-????L? ???oKW+)?????[??????????G?kw?$S???? ?????Z???/$?"D5???|??/???D?/NA??\W??Vo??8????????z:?^??? o????ke?owV??'?v??A?$?$????v>vI??_D`1????v??8j????J^n:??+???K??x??B??`?z_6Kt$?xI??W????;q*F0?C,e6i?}?hz?G?G7Sto?$?+?~ ?nP8?????p???????????{??H?7???>x$?Lm????l\wh???hN????R%???L7?? `?_??&2?:?:5m?1???????+?*??(?<?Y???L? Y???E?kn4?????? ??`$y?S + ???SG??w??|y?r*'?U? L_?x\R&z????;w?? ?MZ???~?+???X??^b??l?a??f?G??)????????|-??)?????~???co?? ???Q?MU??EM???t ??G?????g?????+?W2???O?T_???y????i??q?2?!??tA&d? + ?d??K5??r??P? u???V?~??Y?mJ??g2zsV??g??YY?:?f?7$??l?!???KCl64d??s??p#?+ )???)?v?4H?&?????9K?Tt_????pd??????"$.?gr/?????????????i?h+???5???T?Wn????^[i?+Oo(N?????#??i???;???E_??W?kUfi^$ ?r???????????F? ~?v2?j??S4???Sx?/?????9\?!??E???@??D?8???4???<8?|C?E????\z??$7???????c???j?gy? ????f????f}??X????93/+ ?*?????b?5?D?? + JI??z'S??e??N? ?????K?5???F:??X3dh5?&+ ?? + ???TC ??d??R[`?+ ?? C|????????[???Y?\?6d?d?u??.??k???2$??3H? Y?^???y???)???(?[# ?e?D? RO???w?Zg?????v8?Y??%??qA?2dmpI?&??X??I|QA?(?"??q~Tl?s?5-*!Y??????????f???:.#Hv?P????um???$C$??dA??r?L??6L'?!?> endobj + 905 0 obj << + /D [2458 0 R /FitH 491.6224] + >> endobj + 906 0 obj << + /D [2458 0 R /FitH 151.1913] + >> endobj + 2461 0 obj << + /D [2458 0 R /FitH 115.8802] + >> endobj + 2462 0 obj << + /D [2458 0 R /FitH 117.9965] + >> endobj + 2463 0 obj << + /D [2458 0 R /FitH 106.6392] + >> endobj + 2464 0 obj << + /D [2458 0 R /FitH 95.2818] + >> endobj + 2465 0 obj << + /D [2458 0 R /FitH 83.9244] + >> endobj + 2457 0 obj << + /Font << /F47 676 0 R /F15 679 0 R /F57 691 0 R /F63 764 0 R /F14 634 0 R >> + /XObject << /Im19 2381 0 R /Im20 2456 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 2650 0 obj << + /Length 2390 + /Filter /FlateDecode + >> + stream + x???n???]_?G + ??{'y???9H?? ???4?D?i,??&????^?$W???2;?s?YE,9?K?5Su]-?J3n?Xn? ??????%??*????eU1!??^?,~|?K??j^???}J + ??Q????????(??Z)U??V?,??I??JVE??SY?~?#|N?y?O?7~??"&?:??7?.~???4p-?????P???&ef???jFV + ?D}?,_?9????;iaY-j #??" _>???]p?je?_a?????~!y????????c?>?v??????H??W ?T?qN??!???Z??!??,?;?????"\????????bT??7?f????8??-z4?????6??Vp??[?oQ?? 3l???Z?rpda??????f???&??a???C???b???z???l??R??>?c?w???y???et??i? u???Z_??(??f??+ v??n?u+ ??35?H???A?????$??\?6(7??%???-9??v??,q?#(?n'?>'?*????r??2=???p"??q???#=?e?oy????;J5w????g/?????"??? ?????g??{ + ?=?)^??+?X]"?D??????`H??g???z?? ??t?O????m?J??K?c??P??u0??{"}??%????1L?o?&yC?I???Tp&?????)??LR?????C??D??;???}?>?d[99R?$?Iq????W????Ik??m?]??5F?M@^????+ Q?p? "?? /??c?_U?y w)k??+ ??!??R + UN??7h??_????????????w?endstream + endobj + 2649 0 obj << + /Type /Page + /Contents 2650 0 R + /Resources 2648 0 R + /MediaBox [0 0 595.2757 841.8898] + /Parent 2466 0 R + /Annots [ 2652 0 R 2653 0 R 2654 0 R 2655 0 R ] + >> endobj + 2647 0 obj << + /Type /XObject + /Subtype /Form + /FormType 1 + /PTEX.FileName (../Graphics/LLVM_InstructionFormat.pdf) + /PTEX.PageNumber 1 + /PTEX.InfoDict 2656 0 R + /Matrix [1.00000000 0.00000000 0.00000000 1.00000000 0.00000000 0.00000000] + /BBox [0.00000000 0.00000000 329.00000000 448.00000000] + /Resources << + /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] + /ColorSpace << + /Cs1 2657 0 R + /Cs2 2658 0 R + >>/Font << /F1.0 2659 0 R>> + /XObject << + /Im3 2660 0 R + /Im9 2661 0 R + /Im14 2662 0 R + /Im7 2663 0 R + /Im5 2664 0 R + /Im4 2665 0 R + /Im16 2666 0 R + /Im2 2667 0 R + /Im1 2668 0 R + /Im8 2669 0 R + /Im6 2670 0 R + /Im12 2671 0 R + /Im13 2672 0 R + /Im10 2673 0 R + /Im11 2674 0 R + /Im15 2675 0 R + >>>> + /Length 2676 0 R + /Filter /FlateDecode + >> + stream + x??Z??????+dc/Ff??m?HVq??7s?c?\??????}_???n???]??XU??????????g?w????\k?? ?&?x?????????{?~;??v??????yL????4? ??d?l&}gdpN?q?&?#?j???*???S??$?>?P?L?W?Y??8[??p$?C????j???R?=?????K??K???[??a6?uzx?Y`??a9;?s at R??HAt{????H??PDT???*?;??Gy!j+ 3??a?%??*)?????7??"4????(?5#?? + ???I?/?A ?$??>??y????C0R??E?l + VH]?? ?R??????=_??????Q? + ????!?? + (~2 ?X?X?U"?[??<????S? ??ZY??q??xM&?hBh?? ?u>??N$ZT?(??????KH?N??+??????Oi?UM?{?fX?!2??Iw???b???=??s2`??=?W??Fmty?S,???/ B????b?'???W????6???b????????[+k?? ???H?/4?:X + ???,+??^??W??w?I???1??].K?Mf???u2?U?X-??%?????l??";Z?????W?D?]??d`=1B[??.2??????L??a .f??F;?~?Il?9j^?Iy[??ck?i?rJX??deE?T{?|??d??Dh????R???@?+ ??MP??q?J0?=)R)u!2?L????Xq????i%?U?X?1????????Kr~ ?VPj?F??x?4???4?Y?|H)?V???u?4?+ ?V?l?\??("l??j[????M9!??????a?e?t???B?a???#OA?$?q??N]??? ?%???? ?W????????H?{?}?{D0$???\????K* U???`9?/rL9???n?9;9do?:.u?tPG??X?? V?K?ii?em???$?[??D}?`?????? ??????+?|b?Or???O??? + ?wC\qV%=?rS?5?7s|?p#^?k????7?J?????Tc=??5?`[?K9?s???^?0?YG"??????????oO??k???????# 7>~=T???????"?g?V?????&1???8KM??gKm?xY?4"?dg?L?eC*6??? ?? \?????[?VAa????l??S??>?)?B??wQfXM???Vb????D??\Z.?zs???JM F??????X????E~?????E<,Ek???7G,?%AgG29??x}?????'????~????????n_???q|??~??__?e^S=W?i?r?v????; ?8/r4?c?)??rTll?? ????I?????????a??Y8e????????Y????????endstream + endobj + 2656 0 obj + << + /Author (Jakob Praher) + /CreationDate (D:20060405185500Z) + /Creator (OmniGraffle 4.1.1) + /ModDate (D:20060405185800Z) + /Producer (Mac OS X 10.4.6 Quartz PDFContext) + /Title (LLVM_InstructionFormat) + >> + endobj + 2657 0 obj + [/ICCBased 2677 0 R] + endobj + 2658 0 obj + [/ICCBased 2678 0 R] + endobj + 2659 0 obj + << + /Type /Font + /Subtype /TrueType + /BaseFont /VLTAYF#2BHelvetica + /FontDescriptor 2679 0 R + /Widths 2680 0 R + /FirstChar 32 + /LastChar 121 + /Encoding /MacRomanEncoding + >> + endobj + 2660 0 obj + << + /Length 2681 0 R + /Type /XObject + /Subtype /Image + /Width 75 + /Height 58 + /ColorSpace 2658 0 R + /SMask 2682 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 2661 0 obj + << + /Length 2683 0 R + /Type /XObject + /Subtype /Image + /Width 40 + /Height 58 + /ColorSpace 2658 0 R + /SMask 2684 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???+ endobj + 2662 0 obj + << + /Length 2685 0 R + /Type /XObject + /Subtype /Image + /Width 237 + /Height 58 + /ColorSpace 2658 0 R + /SMask 2686 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x??? + endobj + 2663 0 obj + << + /Length 2687 0 R + /Type /XObject + /Subtype /Image + /Width 93 + /Height 58 + /ColorSpace 2658 0 R + /SMask 2688 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x??? + endobj + 2664 0 obj + << + /Length 2689 0 R + /Type /XObject + /Subtype /Image + /Width 40 + /Height 58 + /ColorSpace 2658 0 R + /SMask 2690 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???+ endobj + 2665 0 obj + << + /Length 2691 0 R + /Type /XObject + /Subtype /Image + /Width 130 + /Height 58 + /ColorSpace 2658 0 R + /SMask 2692 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x??? + endobj + 2666 0 obj + << + /Length 2693 0 R + /Type /XObject + /Subtype /Image + /Width 310 + /Height 58 + /ColorSpace 2658 0 R + /SMask 2694 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 2667 0 obj + << + /Length 2695 0 R + /Type /XObject + /Subtype /Image + /Width 40 + /Height 58 + /ColorSpace 2658 0 R + /SMask 2696 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???+ endobj + 2668 0 obj + << + /Length 2697 0 R + /Type /XObject + /Subtype /Image + /Width 309 + /Height 58 + /ColorSpace 2658 0 R + /SMask 2698 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 2669 0 obj + << + /Length 2699 0 R + /Type /XObject + /Subtype /Image + /Width 309 + /Height 58 + /ColorSpace 2658 0 R + /SMask 2700 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 2670 0 obj + << + /Length 2701 0 R + /Type /XObject + /Subtype /Image + /Width 75 + /Height 58 + /ColorSpace 2658 0 R + /SMask 2702 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 2671 0 obj + << + /Length 2703 0 R + /Type /XObject + /Subtype /Image + /Width 75 + /Height 58 + /ColorSpace 2658 0 R + /SMask 2704 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 2672 0 obj + << + /Length 2705 0 R + /Type /XObject + /Subtype /Image + /Width 291 + /Height 58 + /ColorSpace 2658 0 R + /SMask 2706 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 2673 0 obj + << + /Length 2707 0 R + /Type /XObject + /Subtype /Image + /Width 76 + /Height 58 + /ColorSpace 2658 0 R + /SMask 2708 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 2674 0 obj + << + /Length 2709 0 R + /Type /XObject + /Subtype /Image + /Width 75 + /Height 58 + /ColorSpace 2658 0 R + /SMask 2710 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 2675 0 obj + << + /Length 2711 0 R + /Type /XObject + /Subtype /Image + /Width 310 + /Height 58 + /ColorSpace 2658 0 R + /SMask 2712 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 2676 0 obj + 2689 + endobj + 2677 0 obj + << + /Length 2713 0 R + /N 1 + /Alternate /DeviceGray + /Filter /FlateDecode + >> + stream + x??SMkQ?3V??*??t??E?0~,????i?c??A???d????$??U7nD?n@?.?pQ?FQ(?_??~?(t)?????*?????????????u?uM?Y?/ + ?L?j?;??d??T?s3??B?m??t??????? ??????|????]?HR?O?k?,px\sE?????f?!:t|????04Vj?U??0????????????a???K?#??kIzE???~??u??0?-????9?R????eL???c?? V??t????B?????r=M?????Q???qN???`????> + stream + x?}?OHQ???%B?e&R?N?W?`???o???k??????????n%B?.A?1?X?I:??b]"?(????73?????7?3????{@](m?z?y???(?;>??7P?A+?Xf$?v?lqd?}????????] ?U???????x????iO:???b??M??1?W?g?>??q?[ + ?2?M?'?"()Y'??ld4?????2??'&??Sg^???}8??&????w????,? \V:k???;?i?R;;\??u????V?????\???\?C9?u?(J?I????]????BS?s_ QP5??Fz?????G?%?t{3qW?D?0vz ?? \}\?+ ?????4?I?????x#?{z?wA??j}????????Q????=??8?m??? + ?(?o{1?c??d5?U???g??t????la??i"??\.5???????^?8tph0?k?!?~D? ?T?hd????6??????:>f??&?m?????x?A4????L?&????%???k???i??????Cq????m?&/?By#???%i??'?W??:?Xl?Err?'?=_???)?i7??????,?F|?N?????6?rm?^?? ???U?HW?????5;?????hendstream + endobj + 2679 0 obj + << + /Type /FontDescriptor + /Ascent 770 + /CapHeight 727 + /Descent -230 + /Flags 32 + /FontBBox [ -195 -444 1446 1207] + /FontName /VLTAYF#2BHelvetica + /ItalicAngle 0 + /StemV 0 + /MaxWidth 1500 + /XHeight 531 + /FontFile2 2715 0 R + >> + endobj + 2680 0 obj + [ 278 722 722 556 722 722 722 722 333 333 722 722 722 333 278 722 556 556 556 556 556 556 556 556 556 556 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 556 556 500 556 556 278 722 556 222 722 722 222 833 556 556 556 722 333 500 278 556 500 722 722 500] + endobj + 2681 0 obj + 36 + endobj + 2682 0 obj + << + /Length 2716 0 R + /Type /XObject + /Subtype /Image + /Width 75 + /Height 58 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???Mk?P?k??$M ???? Eh"?`QQ???@]e??EWY?T??U@???B?E?]HA + R????p? ]\?;0 >????.?y????W0h????0? + ??B.?V9,? Il??+ endobj + 2683 0 obj + 29 + endobj + 2684 0 obj + << + /Length 2717 0 R + /Type /XObject + /Subtype /Image + /Width 40 + /Height 58 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????k?`???5I??T?+?J????YAt???E? -5tp + ???E("? )H?_?w?W???;?p}?w??@?????????!?????!??+ ??[?? ?X^??2?*?D2?J%1%?d?$? ????hN?A?$??\?X*???\6?PP?M????I???Q?*!???XN;7;w????|>?==?:?????{?????^???????r?\?u????}?????>p? ?~q?+ 3?p?;?q???p?????????????;??0endstream + endobj + 2685 0 obj + 62 + endobj + 2686 0 obj + << + /Length 2718 0 R + /Type /XObject + /Subtype /Image + /Width 237 + /Height 58 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????j?@+ ?????v??,}?ef?o?c ??/GG8?s????/?P?p?$+ endobj + 2687 0 obj + 39 + endobj + 2688 0 obj + << + /Length 2719 0 R + /Type /XObject + /Subtype /Image + /Width 93 + /Height 58 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???Ak?@?k?i?&?&??DC,*J?x??)?R??)??*=x + ??> + stream + x????k?`???5I??T?+?J????YAt???E? -5tp + ???E("? )H?_?w?W?????-?gz?dx????q|b;???? ) + + ??3????W??jE??g?L?$( ,?9???~?U??qq?h6??? ????q?w?4?s?+ endobj + 2691 0 obj + 45 + endobj + 2692 0 obj + << + /Length 2721 0 R + /Type /XObject + /Subtype /Image + /Width 130 + /Height 58 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????k?P?k?1IC?&??DCj,*J?8?????NZ?tp + ???E("? )H?W????z/?.?{?|??????{??l?p|??????1???+ ??(??St?cO(?Q? ??z?&0 ?;?QW3???? h_D?U?v?zOgs????G??6*99??? ?D^?0{?????&????}???? q??????????????&??????n??T?g> ??R?6o???b?????j1?o???v??????Z?;??????`b???m`???m`?????'??+???~gB?7"?????;????wi??D??*?^?+ endobj + 2693 0 obj + 75 + endobj + 2694 0 obj + << + /Length 2722 0 R + /Type /XObject + /Subtype /Image + /Width 310 + /Height 58 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???MK*a??g??fSgBQB?%?P1r?b@$W?)0$p5?"????"p?m????D??v6??%???t6_(?w?T.????GT???????D??J??{U?V?R?fV????VD????????!=?S1??Q?H??C?aVvRz?/??E5??jF?R??m???R??n7?Z%gh?G?]??????)?V???????N?k?,????^???s???|?D??h????`x????9???J6??q?jR j??V??\???; M??k????y#???i??y`?.G???' M?oG?=??,$??j?K?j?g0~x?=i??08'?Z)S??jj> + stream + x????k?@?k?1I??T??? E? D??(??! ??\ZH ??Z???) ?R??^?"??? )?k;???e??\v/??4??{?98?k??C8?_>q??(+ "?#?+ ???q??E)(+q5?Jg?TB?+rPy?HP4'??????B?\A?K?|6?*a(r4? $+ ?????<>-W??????o?k????x)?*??+{4{~Yo??????2??TT??<K???`<_?_????r>???r:?p??L??? ???f????m7??t?k7+??&>?v?/???????????/n?? f^a?n?b?3n???n??v_??/v????9?+ endobj + 2697 0 obj + 75 + endobj + 2698 0 obj + << + /Length 2724 0 R + /Type /XObject + /Subtype /Image + /Width 309 + /Height 58 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????K?p???[???n??LG"*F^< D??K?!?????E?A?!Q)"???k_?}?V??????|_????`????????~????2_?(7M3 ? ?????{?C2?a9^?U?L?c?}6?fX^???~YQ???(???&??I?ZX?,???(????F2[????.?jU??S?&7???3?hnV???V????????f?(o%??Od??h???z?\5m???R??j7?j9????????yO at K ?iu{v?H}?????QHkO?? \??7??? ??> /?4??'V?^??C?fM?G?\?lw???xr ??xtaw?f%?G??[45?7??????fz??????g????M???b?qh??w? ??n???Q-????M??K??q8?????8?N???f???)?h??????????^^??<=???????/O????Mm}u??*2}?h??h??h??h??h??h??h??h??h??h??h???D?? + ????|pP??? ??NNq$??H??N??q?????/? 7 ??endstream + endobj + 2699 0 obj + 75 + endobj + 2700 0 obj + << + /Length 2725 0 R + /Type /XObject + /Subtype /Image + /Width 309 + /Height 58 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????K?p???[???n??LG"*F^< D??K?!?????E?A?!Q)"??_????7???4?~/???Ox2???z??+ %???L._,??T??2)] +???????Jf {?Z?B?jT? + ??VX?xf???????)u????B??????????{??U???f?m?t?@??X??Y-guU??_?\4? h??a6?n????o??V?4 + i-?????? ?3?z?:?/?k ??????3??w?YD?=W1??j4??a2]???Y????MM???w1???>azw3??YF>?.E?h?Xm?????? ?????>nT???,?GSb?R?y?N??? > + stream + x???Ak?@?k???IC?fDQ??"?"XT???!DO??`?S-Uz?i)xP/BiRA?????u?n]?v??????1???????????/4?$I+ ????P ???"?>4 ??c?c(???6&??=? K???F4"??~??Yz??\ + ?? $9???j + 5Wb????"H?`HV??l?P,?Q,????"???R?v-0?:Id?ge??T??z?,?I??D?[???<9q??5????D?qya?t?4!<???hJJF3?z??nw?h_[??ihE?> + stream + x???Mk?P?k??$M ???? Eh"?`QQ???@]e??EWY?T??U@???B?E?]HA + R????p? ]\?;00>????.?y?????W0h????0? + ??B.?V9,? Il??+ endobj + 2705 0 obj + 72 + endobj + 2706 0 obj + << + /Length 2728 0 R + /Type /XObject + /Subtype /Image + /Width 291 + /Height 58 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????k?`???4I??&EQ??"?D??(uq?)K ?2?T??i)8h?HiiA()???????+<??????????????????k?}c?????4??$?%M??T???a9???O?y?e? ??r#???_??]??e????A?5????>9?(??Jt?? d???K?????G + *j\K??}??S -?*A?#???gD? ?????Jgs?b????\6??????z?Q???^2???f?FtU???3???$rhE?f_PM???u|?l]???????? ?{E????e???h?g?.?u??v?2?M?E????<U?V????????N?k7-#??G??v?-o(?.???s5??hx?\??z9y?????G?l?jw???dzGt???????JV???5"%?3??????~?Dt????e?>2r e?H?????8u?????3??&C??aRQIx'?cz??,Cp????E?R???`???:?b????5vw ?}?zn@?7 pI??$?{4?=\5???6??????+ endobj + 2707 0 obj + 36 + endobj + 2708 0 obj + << + /Length 2729 0 R + /Type /XObject + /Subtype /Image + /Width 76 + /Height 58 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???Mk?P?k??$M ???? Eh"?`QQ???@]e??EWY?T??U@???B?E?]HA + R????p? ]\? 30>????.?y???? + ?W0x????0? + ??B.?V9,? Il?+ endobj + 2709 0 obj + 36 + endobj + 2710 0 obj + << + /Length 2730 0 R + /Type /XObject + /Subtype /Image + /Width 75 + /Height 58 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???Ak?@?k???IC?fDQ??"?"XT???!DO??`?S-Uz?i)xP/BiRA?????u?n]?v?????1????????????/4?$I+ ????P ???"?>4 ??c?c(???6&??=? K???F4"??~??Yz??\ + ?? $9???j + 5Wb????"H?`HV??l?P,?Q,????"???R?v-0?:Id?ge??T??z?,?I??D?[???<9q??5????D?qya?t?4!<???hJJF3?z??nw?h_[??ihE?> + stream + x???MK*a??g??fSgBQB?%?P1r?b@$W?)0$p5?"????"p?m????D??v6??%???t6_(?w?T.????GT???????D??J??{U?V?R?fV????VD????????!=?S1??Q?H??C?aVvRz?/??E5??jF?R??m???R??n7?Z%gh?G?]??????)?V???????N?k?,????^???s???|?D??h????`x????9???J6??q?jR j??V??\???; M??k????y#???i??y`?.G???' M?oG?=??,$??j?K?j?g0~x?=i??08'?Z)S??jj> + stream + x??Zw|TU???????L????I!?\b? E a ?BG?!??Xh?`?!duY??v????????o?????;w~|??c?;wN?s??|???#??? ?H?6?B?,5+ i???M????$Q??2t??v????P?I??????x"?B?c7?^3(????q2?6????-?E??h>?9m???rh?P???$????yT?nD??'??`t4?????????:???$???`?50?vrx?+ ?????????F4 W??h+pc???A????@?BN6????[?@?oi??V? ?D?+?!?}+ ?b?wnC@?R#?p(H????????????h???*?B.x?eh + ??*?do,89????????S?uL?y????91?di????"?????bj?xy&?z?PYv??????????? ??~w???????R?^???????VYgUzcx??*V?:??jr%,w??gyv1"R??c??)+gY? 3?bveU??????@???????*>_#?A???Gv?lB'?S9???????N&?)b???5?????Y??1??s?+??Z?]?cT?zJs{5 at pgm?9??????1^X?Z???k{? 4??L????"]??xc2?V???+ s?`??4 ???0?!?V????????#b??q??0+?2?P??m??9h???JAj?1?,????j?}?????v?c?v??w??q$-+ ??????!@?(!\?oB??_?p??B???????5?9?k?Bx??FxX????a???M???G?*???e?G???G???a?? N?p6???2X??\.& ?K#9???4e?q|.F6A??7?kf?? e?=e#????k{?PyYOIy + t>]?.fc??????6??_??u,?LQ ???*}1??Z?p????????????a?k???C?{P`?f?5 ???C?????Ei + c?M? #Y&|pf?g5jB?N?S>o(?X??? u)?3Z???b??U??%?f???h????~xSn?3l???????.??/??? p?O???G_???3??>YK?+ q~???joU???t?????[C??8&j??9 (O???Q5??P?\<+ ?9D?C + S? z??)??@?????:?-??V???N??h?QoG?+ ??V??u ,r?L??g???%`zJV???yy??W?Bt????@??????wM?a?4@??fh???s(?\z??NH???h?j?6?l???+|?i%????d?\?|???d??N??I??tae??^I|:d%???U?[<|7???k????&q?7??????x???X????g????S?w?O??:I???? Y??*V R?????R????^?B??:??)V?! #SR*?j?X??ZW??`?q?????s????m???m^??:~l??O?v???O&O?+??m??????kb?8<^6A?h???es5? K???[l?????B+?V?????? ??Y??aS??B at M?Q?.???YK4KEC?{?uqdA?P???acq????~????.?u??9N??L????0Rf??X?@?]?1*?M9?0Re@?;?0??l?K???????????????3?G???t?+??????Z??X???????3q8???g???28???????\???Ny????????{7???1????m?|??}w????D???|???>??h??????#??! ?????\;??`[o????? + E?r?/?e????U?Se?;??cE? + E???U}?"A?S?2?-?-?ZQ@?4?%^h mT@??E? ?v0e???%?!NY???D? ????2i?ht?V?[T???`??o??_???????8???T???oY?c??.si???L*'Rz??*????<+8Cig??~????\9 + ?U??eeN#???n??8?iB??k?oC>toE????n8S???9???u?Z!r?h|s?s?%cIA.,2?!l ?B?Y?2{???"???.??|??+v?????????????e?O?? ?L?p ?"V/qC?V????S?????&????.?????x???%?????? + 6e?eEo????s?????5t?}&'?V9sg?yB?5{???c^?Q[?????F?k?\?_??sx??? ?,?????L?}??-sv?{?8?4A??X?,.????.???^{?6G?+ ???0A??H?F?e?U.???;mH?!d??]????t?1??xe??Hgp?b??%*??3?M(M? R??K?F????"??1?? + ?*?4z?dV.a??sYDXRy?$/?l?? SJ* + R??E1?I????I?l ?????V???|???}??k?~?????}?9???????[?RE?u????[?5?????????&?f?`C?(?R\?Mx???C?jJ?Mj??d??Q??q??Y?~?>??P?H???C?y?y???????(??t?v?+???y?????.?"?os?q`fM????J^gW????s??? ?????{2M?>D7??#?y?M????&u???],d?? + NJ+ ?8S]?????c??v??????F/2?t?[l??(???^???~?f??Q??=????????rF:???9L??DpI?m?????x? Jga??(?^??]??Ec??????r??*]?????GM?/mV?%??U?6?????{$A?|?w?*?'???b"z??HxW? z?_??K?8m??????-[???)?q + ?}f??????{%????!:`??, ?,Xx?bB?%?A0?(? !???MJ?*"?[?)??6?5??C?????V&i@ & ???_C?? ?????.?`?m???>??[???.0V????\??\?Pt?? ???2? p??4y$?? + %'z?N\?Izb ~@f??0?g?]????????????*T?6??w???< + ??6tu???}?q??Z??x5???EB???q?? + ?? ???69?X>????x8?8?A?{?"??N{ +?f?"Ad ??X???? ???X??tw?.?DH!n?E???A?^??q?S???mDVz?????86?~?G???3?t1???_S?^=n???7?Q???????>???????$??Rr6???1I?;???(?3r!c+???F%e?j?3"????y?)#2??X#6ds8&>)?????+"DX??m%???Zx????f??u?5`?V????{??I??(???e?U?????=o?????G???Y??{??a????^a??Is\8-|??ScT8??W?? + o????????L6;??2?~MW???'??,da? + ? ,?? + b?5V5?QDX ?`gG?? ????t}??G$j??&J9?/???[?>?>v_J????%??3??5??N?|?s?Y???_???$???? ???kM?e?u5JC-b??? ?N??s?x ?v9ij*d???!r?E?46?/F.?{???S?fb?A&??1? ?????p??-??h%?3)^?????i????F??^??~?XU+ ??>???dA???,8/?Ps???a???W??C?4?J?}8??q6?C\2????6?3uHtRv?Sb??}kB?\???S?????TH????y'?? ????;? ?t??!-????k?}lp?3fW?G,}?b?G?w??G?? ???MU:D2iCWw?v??Y?????3lWnV??{????G?%K?;J?N+ ???aH>Q??b??)?[9]U?????z?&_sZ?q+ wz^ ?(~?????w=???k??H?SC?"q??']??e???a??? + ?=44R?5?o9T? ??r??6?5R + D?{??P??N?k???C?|>??t??(?????\>???,?p??~T???$p??g??9???:?>"0% ?O~?E????????g9??????R]O???i at K??J?5? + C1|w?Ck????r?`]Iu???M?*????V??m????j???J??xy0????,???B + ?.?3Cz??_? ir???Y?X?T????????'O?6??S?c ????9?J????0> + >> endobj + 2653 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [137.9241 191.8226 153.8474 203.5023] + /Subtype /Link + /A << /S /GoTo /D (figure.521) >> + >> endobj + 2654 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [366.2363 166.8405 405.1997 176.1966] + /Subtype /Link + /A << /S /GoTo /D (cite.llvmbytecodeformat:www) >> + >> endobj + 2655 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [103.4035 110.5274 119.3268 122.2071] + /Subtype /Link + /A << /S /GoTo /D (figure.521) >> + >> endobj + 2651 0 obj << + /D [2649 0 R /FitH 784.0631] + >> endobj + 186 0 obj << + /D [2649 0 R /FitH 667.146] + >> endobj + 907 0 obj << + /D [2649 0 R /FitH 246.7263] + >> endobj + 2648 0 obj << + /Font << /F47 676 0 R /F15 679 0 R /F11 1255 0 R /F63 764 0 R /F26 624 0 R /F57 691 0 R /F14 634 0 R >> + /XObject << /Im21 2647 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 2735 0 obj << + /Length 1757 + /Filter /FlateDecode + >> + stream + x??YIo?F??W?H!!3+??k4??ha'?$Zfl?R??t\???-3??HJ.P?Br?:????\ + ?'?R?LWU?,J??\??z?? ?[H?$?H3?- ??,3?? + ?~?\?yk + ??U????o?)?3V//??'??+?4?Tk???V?H??C?}??????J>???:?=??v?x?FA??\??????_?-xb?P?????4f??Hof?7c???????a?b??L??L?dd?U?2p??\???????50?_@???'x????v?D?[~e??X?T???S????3S??X"?"??2=?f?HJdE??2?!?_+ S)???j?n?4??+ ?^???\GM??M7???-?2E??S?????&a???.;?,?~Y???? + }?}`jH??89E3???S????k???X'??O????"????wu"??$j?:D?--Ub?4O)??m\??w??????U\?#g????#?]_??o|J??QM???1Y7m????CO? E?@???.64N?!???H???????1??"r???D?]?O?#]1??(?Cw?+ 4??????????p???h??J\??V "????m????m(?m8 ??/? + 7i?+ ???????Tr?????????(????/t?W?????????2?(???L#$?v?B???@???+?&???d???n?8?)????y?E ?>????#B:???S?? 2? '/????Z??:>')8??J??#(r???> endobj + 2736 0 obj << + /D [2734 0 R /FitH 784.0631] + >> endobj + 190 0 obj << + /D [2734 0 R /FitH 656.9033] + >> endobj + 194 0 obj << + /D [2734 0 R /FitH 536.4578] + >> endobj + 2733 0 obj << + /Font << /F47 676 0 R /F15 679 0 R /F14 634 0 R /F63 764 0 R /F26 624 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 2739 0 obj << + /Length 2518 + /Filter /FlateDecode + >> + stream + x??]s?6???Bo?? ?? ?-?4?f??????4??8?H?+:q??o ?+ ?d??? S?%?A??n?~|- ?/???????IU?n??7???h?????kloO?????^??8???}Z St????p???????2?31??q?61??????):?T? Y???7?????????Ir]6???*??,????`?;+ @?C???5 ??yRd5?@?`??a????3zv`??C?}V\??*?E"????{??JW6????4?wvv?C + ?}???j??vK???Hm??*5?z+ ?j????U? ???=K)??o???i=-???F?,,k???Y?NY??d?5F?l)"e???W{?DQx????3{?3|???s?????,??[??Y?JN???SP????T>8??Pz,6B????-??A?6+????o?*@N*??6???2????l??M??0??'?$B1f?l?]w|p?\?Gx/m?????]????(?o?(???? @?j?2MM????,?y??????v??O?r?4/F??3Qm??/#j??Z??+ Juh\=X?GZ5???6????2??%E> endobj + 2741 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [461.7852 520.6867 469.2322 533.4846] + /Subtype /Link + /A << /S /GoTo /D (chapter.380) >> + >> endobj + 2742 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [204.8253 453.5517 212.2724 465.2313] + /Subtype /Link + /A << /S /GoTo /D (chapter.11) >> + >> endobj + 2743 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[0 1 0] + /Rect [195.4419 211.1857 212.445 220.5418] + /Subtype /Link + /A << /S /GoTo /D (cite.brian-cs) >> + >> endobj + 2744 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [150.4973 110.6987 166.4206 122.3784] + /Subtype /Link + /A << /S /GoTo /D (figure.13) >> + >> endobj + 2740 0 obj << + /D [2738 0 R /FitH 784.0631] + >> endobj + 198 0 obj << + /D [2738 0 R /FitH 758.5513] + >> endobj + 202 0 obj << + /D [2738 0 R /FitH 598.7437] + >> endobj + 206 0 obj << + /D [2738 0 R /FitH 189.4259] + >> endobj + 2737 0 obj << + /Font << /F47 676 0 R /F15 679 0 R /F26 624 0 R /F14 634 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 2749 0 obj << + /Length 2785 + /Filter /FlateDecode + >> + stream + x?????????-$`????MQ?@????>?>P??J??\?\??????1=3=???gz????]?K????????y??Ub??/??>?c!_?7?[?6??y??t??z????v?????CM + ??Q???_Vw?b??7J??k|??????f????????Z??_~_?v????w? d???G???@mj0?T???):?T? Y)??:Y??p???M???,????i????/???=+ ?????5??^?J??w????J2??=bYn?????-3?B??_o???@?^?L??]45??????Jk?????3??@??C??????:.6K0??S????Ei?G???K?i?#5?P?$d???=???? ?~[? 3fdT??x?????????~??Os65??k??p??2[s???:{?(.?/9??T;???F?????}??r???????????Wp: ?p3?)?!????^3?y??? ,X????Ip eE??! i??d??p??]Qv?????g?y?S^R?a??TR??o8?? ?^,???O$??c{????*p?T?N2H^???T???b??[?L0??:S???????4?????2G?????y#???z?:r&p????l??????fl???*?endstream + endobj + 2748 0 obj << + /Type /Page + /Contents 2749 0 R + /Resources 2747 0 R + /MediaBox [0 0 595.2757 841.8898] + /Parent 2466 0 R + /Annots [ 2751 0 R 2752 0 R 2753 0 R ] + >> endobj + 2746 0 obj << + /Type /XObject + /Subtype /Form + /FormType 1 + /PTEX.FileName (../Graphics/Change_Components.pdf) + /PTEX.PageNumber 1 + /PTEX.InfoDict 2754 0 R + /Matrix [1.00000000 0.00000000 0.00000000 1.00000000 0.00000000 0.00000000] + /BBox [0.00000000 0.00000000 438.00000000 213.00000000] + /Resources << + /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] + /ColorSpace << + /Cs2 2755 0 R + /Cs1 2756 0 R + >>/Font << /F1.0 2757 0 R/F2.0 2758 0 R >> + /XObject << + /Im2 2759 0 R + /Im3 2760 0 R + /Im1 2761 0 R + /Im5 2762 0 R + /Im4 2763 0 R + >>>> + /Length 2764 0 R + /Filter /FlateDecode + >> + stream + x??X[o#?~?_?O$2??{#?B?H ??D??? ????mgut???????Yvw?????{U3?_????fr?K??I?R??FyE?Y>?????4??????O(eq?(!X???=?(?Gy??#?o?,Z)?M?0?Fk?q?L?T????????T?b??u??#o?(od?Z?R??}"?????}Y^???1?p?????N1????%??E?\???U??U1?????F???Z^?:o???7??v?~???D9?+??8????,@???)????1???B???&eG)?:q????g??4?M??!EB`~??`C/?6d=!???: 1kL?'??Z&???a"?Q?????%?CuO???K?$V?!?????O????l???s ?x??U???x??))|????Ra??L$Q?,?????t????b??{???2>?!g?????*F'"??I???M??rd??N?t(?S?hW8?9:?;??XR?h????X?X??B????u? ?IWV??h?m2?X/???CV??Rx}??+ ???d??????? ?O??A~~???c???=l?w??wwG?\????+ ?Bg???bh?td??`? ??,?\?h?D?b????n???o4?^qFo^G?N?? ?K`F?n?d0???+?+??zdi??l?rG& ?"]??N?>}?M?*?/??]???f??5?qg?B??o??(@?X?hX?j?*??????{?ff?n?????8????fNd?R??+????2J!?:??L?no0p8#N??? S???S??U?)??D8????W{ ??)`-???\?N^????0.??/???O?&?209o?$? I????hC????h???????N$?????a?O??^?????8?f?????? D#??? G?E?????????]?.Z????f???????l?8??????|N???HKQS?????B??8l??g.?7?k?D??i??????P~I{?? ???4??E????? + ?U,????{.gL??A?1c??K_???????~??O??/??????????$?C????y??????K??:???endstream + endobj + 2754 0 obj + << + /Author (Jakob Praher) + /CreationDate (D:20060513145000Z) + /Creator (OmniGraffle 4.1.1) + /ModDate (D:20070406172800Z) + /Producer (Mac OS X 10.4.8 Quartz PDFContext) + /Title (Change_Components) + >> + endobj + 2755 0 obj + [/ICCBased 2765 0 R] + endobj + 2756 0 obj + [/ICCBased 2766 0 R] + endobj + 2757 0 obj + << + /Type /Font + /Subtype /TrueType + /BaseFont /VREAWY#2BHelvetica + /FontDescriptor 2767 0 R + /Widths 2768 0 R + /FirstChar 32 + /LastChar 121 + /Encoding /MacRomanEncoding + >> + endobj + 2758 0 obj + << + /Type /Font + /Subtype /Type1 + /BaseFont /Helvetica-Oblique + /Widths 2769 0 R + /FirstChar 32 + /LastChar 125 + /Encoding /MacRomanEncoding + >> + endobj + 2759 0 obj + << + /Length 2770 0 R + /Type /XObject + /Subtype /Image + /Width 222 + /Height 49 + /ColorSpace 2755 0 R + /SMask 2771 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 2760 0 obj + << + /Length 2772 0 R + /Type /XObject + /Subtype /Image + /Width 222 + /Height 86 + /ColorSpace 2755 0 R + /SMask 2773 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???+ endobj + 2761 0 obj + << + /Length 2774 0 R + /Type /XObject + /Subtype /Image + /Width 224 + /Height 185 + /ColorSpace 2755 0 R + /SMask 2775 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x??? + endobj + 2762 0 obj + << + /Length 2776 0 R + /Type /XObject + /Subtype /Image + /Width 222 + /Height 86 + /ColorSpace 2755 0 R + /SMask 2777 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???+ endobj + 2763 0 obj + << + /Length 2778 0 R + /Type /XObject + /Subtype /Image + /Width 39 + /Height 35 + /ColorSpace 2755 0 R + /SMask 2779 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x??? + endobj + 2764 0 obj + 2041 + endobj + 2765 0 obj + << + /Length 2780 0 R + /N 3 + /Alternate /DeviceRGB + /Filter /FlateDecode + >> + stream + x?}?OHQ???%B?e&R?N?W?`???o???k??????????n%B?.A?1?X?I:??b]"?(????73?????7?3????{@](m?z?y???(?;>??7P?A+?Xf$?v?lqd?}????????] ?U???????x????iO:???b??M??1?W?g?>??q?[ + ?2?M?'?"()Y'??ld4?????2??'&??Sg^???}8??&????w????,? \V:k???;?i?R;;\??u????V?????\???\?C9?u?(J?I????]????BS?s_ QP5??Fz?????G?%?t{3qW?D?0vz ?? \}\?+ ?????4?I?????x#?{z?wA??j}????????Q????=??8?m??? + ?(?o{1?c??d5?U???g??t????la??i"??\.5???????^?8tph0?k?!?~D? ?T?hd????6??????:>f??&?m?????x?A4????L?&????%???k???i??????Cq????m?&/?By#???%i??'?W??:?Xl?Err?'?=_???)?i7??????,?F|?N?????6?rm?^?? ???U?HW?????5;?????hendstream + endobj + 2766 0 obj + << + /Length 2781 0 R + /N 1 + /Alternate /DeviceGray + /Filter /FlateDecode + >> + stream + x??SMkQ?3V??*??t??E?0~,????i?c??A???d????$??U7nD?n@?.?pQ?FQ(?_??~?(t)?????*?????????????u?uM?Y?/ + ?L?j?;??d??T?s3??B?m??t??????? ??????|????]?HR?O?k?,px\sE?????f?!:t|????04Vj?U??0????????????a???K?#??kIzE???~??u??0?-????9?R????eL???c?? V??t????B?????r=M?????Q???qN???`????> + endobj + 2768 0 obj + [ 278 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 667 722 722 722 722 722 722 278 722 722 556 833 722 722 667 722 722 667 722 722 667 722 722 722 722 722 722 722 722 722 722 556 722 500 556 556 278 556 556 222 722 722 722 833 556 556 556 722 333 500 278 722 722 722 722 500] + endobj + 2769 0 obj + [ 278 722 722 722 722 722 667 722 722 722 722 722 278 722 278 278 722 722 722 722 722 722 722 722 722 722 278 722 722 584 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 833 722 722 722 722 722 667 611 722 722 722 722 722 722 722 722 722 722 722 722 556 556 500 556 556 278 556 556 222 722 722 222 833 556 556 556 722 333 500 278 556 722 722 500 500 722 334 722 334] + endobj + 2770 0 obj + 54 + endobj + 2771 0 obj + << + /Length 2783 0 R + /Type /XObject + /Subtype /Image + /Width 222 + /Height 49 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???MK*Q?s???QGe)2_A?W?(?@)4W& ???MB[? ? + j!h?-??"#?jW??F??.*8S???0o??????_X?&???qa? L:K???a7?>:?aB?L?B E??|/?PL?Ke??$ B?rB&?E?k? ?q?@,%?J?Z??R???j?*?????(?????b81??? Fm6??@??f?d4???1?P????`>&?OPzz?b[???K??^???:?M? R??0???<N*u?Y???c??vo?????p?/?fM:%? xo??bbBG[V??7??p(??z?+?~??p?B0?e????????ALR?X??Z???1)??nM?/"& s+??H"????A????&?;??9?$!????(??h??Ie g?R?D???Y!????6?R?(????J??3??`"{R?\^Uk R???O???gyF?.???q?Li?_??2??E???^??z???vQ,db???R&@zv?2Z?x??R?}h????u?,?;?F?1vr???H???7???0i>??\???????3vBRC?]??B????????????+~??twU*?\vZC + ???f?;?>*W?????????k????t?m7k??k?Xd?D + jjik/}|^?7^+ endobj + 2772 0 obj + 77 + endobj + 2773 0 obj + << + /Length 2784 0 R + /Type /XObject + /Subtype /Image + /Width 222 + /Height 86 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????K"a?????q??????!??J? 3? je?"?u*)=D?0 ?iB??1???_?YM??????>????????y???$??"????I?2? I?B4??!???DI)h%??VM?0JZA?"????H9??5??V?7 ?^?e?5j???>?'A??5Vo4oq????\????-?Q???h???'%?J??????.????"???v???l?P+????)?QJ?????^_`???y??C?|^??3i?JJ??<)I?8?c/ ??h,?B?x<???B`?ay4)]\?\?a?:?B(?H??3??f???D,$?]V??J>???oZ????? R???6??n???7?[?T?m7???Vo8B?6????V?\??x??^??Y<|<[???S????v?R??y????M?}???Z5X=??I????7#?{~?+???au?Wl?? + 3??p[?n??5?X?Ec=??e?;^??]??$???$??a??????e???i???I??^??Y?|???0??7:p_???~+ endobj + 2774 0 obj + 143 + endobj + 2775 0 obj + << + /Length 2785 0 R + /Type /XObject + /Subtype /Image + /Width 224 + /Height 185 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x??????@+ ? M?6\9?s?u????Y 5Y??A?A??_???? ???????????tN$????????h?)I?? ??{s?I??O(?&?{??w^\??Un>???m(??? 5>?/???go?? k??s> + stream + x???MK*aGs?????G?LsH?1z???" + ?.?+??Tzq%?????B?"P[DEF???^??%?]T?g????afv??tt+ x??V?WE?W?*?~???ges{??L??Q*?8??Z?????i??i'&??s?????Y:?=G?l&}?:?m???(Iq???TiM#3????I:w?/Q?????Ow????V??????y|??O?/?????z?J????tj??_?0?zdD?????I?j4q?+???Q???*w????&-z??????W0?L_^?> + stream + x????k?@?k??$?lH??(*I?"4 + "X?V???@=??BZ?k8?$?e?v?E9????*?U??jU???s???,?`??, Dpj?0???a??l6??il?p$+ ??cx)??E?n???w???.?n?m?f1???|????h"k???????????w?:u#??????q-_?[m?z0z??????n??? + +LI?}?{9?|?L&/??????o?? + ????,?????^?????????;VIWe??!U??????=?Mg?????????????????;%?7?)??tC??p{ ?@?,??????_???5?lendstream + endobj + 2780 0 obj + 706 + endobj + 2781 0 obj + 631 + endobj + 2782 0 obj + << + /Length 2788 0 R + /Length1 10968 + /Filter /FlateDecode + >> + stream + x??z xT?????=??L??>??L&?wHHH cHBxE + L?@? Ah???@DT???V??TB*\???Hk?ZE?????????m/03?u??+ `9???:???~????K??#m? ??`;?}a??KZ??c[Z???????M: + (?v???{???????~?ua???5???3???????oa???]????@P????H?Hq???????]?s?b???wH?I+ ??`?>?s??2?????????j?erB?+ @ ?N??D???d? ???x?*??g + 7?RPz?B9???lj!??z?ZE;?lz=?>???Y?2}?a?t???a??zf!??]???y?-gG? ?4v??]O?a???Vr?>???|????_??se?'7hC2??"??!5d6l???IZ??k.Y?4vAV??^I?? + P^????n???? ;????????*??T?????s???n???CY?????!z=n??a?Y-f?1???i?*?B?9??)9???o4?e???\??k????:Z?^???qN??"O??83?3????Hjfdh&?y+?27?[??FQ???????X????????r?1????(??Zk{?7JZ?????????\?HD2U?9????JZ8 + ?[W?[??f?F??????W#???????I?kk???}?5?????!? ????>?????:?1J?6E?i-}8j??D-???^k^????n0J??Z?z????S????[??zqY????(yp??????m?Z????U??}???-.Li??G??????(Lj??Elr#7??ue?????%????+S?H??{B%?;?;,?O?Ho??E:??9?K|Hl????A??2??WA6;???Q + e??GY??????W?h?I??Y????%Z??p~K?n???|??o??7???=??=?_?-HUi??d???{d`??Y}??????}???:?-A#?5F??Oj??&??A8g| ???)F????uO=??Y8?#?ZG ??9??-b-/?[? ?I?????????????01~??????|Dpj#???#M??j[S?\'_Z????m?:W??W??8? g?i'?!v????K?c????$????R???Qb?M??O???}?????????????$???_??^?E?%????x?7?????{??It???f??????&??O?^??Dk???{?V??????%?lid;???{Y?| q8?3R????"?#mp{?N-??F&`???A?p?np:?????????=$?A?-+tV?|?!?8??(`?U?;?z?l?????paA?s??Iv????C??XL?_?$ ??1??_V???"&-????????X5?J ??Rm?8&0;?\?4Sq?`?Z?T??]?/?VjGddf(i?i}???v?0??????Rj}f?'??@o?[? + ?,{??? ?|[a??b???U?f? zD+ ??O"e?D?C?? ??:?:?\0?????T?tjWE?? U??*???? + ?`??#???????<?*QU???N#???i?9???l#G?+? + "![?;?5t?U ?tI?%)[?@???|????e?7e+ -???@P*P?J?????;????E gN%??L???R!*??y?x??_??g??????o?`???[{???3v??&'??8???B?5w?? ?S_?Q_?-???A???j_????k7??N?K??"?)??+ +?? + ?&~??-?S^??B?X??*?A1O???r@?x??? + ?n?z?v???c?^"???LC??9?Y?????-}?5R???,bP??i?i5S`????fWf9??f????.???ou?vv~?d??4???)??^LsY{03??l??{??????l???Kg[???o??D??????ai?B??p? ?t?Q?pj?#3+ ?5pm????u?S~??`????a_??I9?]+#?qe??~???5??????`v?\???dQG?m$%?"?#?????X?x??E???G?a?n?9&?!|?|????!p.+?vT6?f3Q?4?C4???Q?'?|?? C:?Rm?0U???? + ??5V?5?Q+ ??,{?????`????o?7A?:??uX??-???T*E ?II??H.0a?)j="(?H0?1?????}?U$?? ? ?F*E?+?????0s???y????t??YJ?_?s??>?????cO?@?|#?k???62x???n??????5???F=9??6?a?????~??i?&?fL?~Gm&zu?c????f??,???????sj?x??????e????R?3?:L??&OyBKb?*?g????*?v4?4?B`???hM?W?6???7?[?S???.~^>E$o?h? J$?e?+??L???3:?r????3?o??????A!?7?zm?|??ce?E?^??|??????J???+3? ????R~?qle?????Z???????X????u?Z???]d7???ff?V?????I?Js Z????%??,&???f?y??3rx?zC+ ??????|;J??~?x????x?????9? 'Z?'2??+??????H?u???L?????>Y9?y?4%*8??96C_/a??!+ endobj + 2783 0 obj + 876 + endobj + 2784 0 obj + 848 + endobj + 2785 0 obj + 873 + endobj + 2786 0 obj + 933 + endobj + 2787 0 obj + 525 + endobj + 2788 0 obj + 7552 + endobj + 2751 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [248.2703 703.2213 255.7174 716.0192] + /Subtype /Link + /A << /S /GoTo /D (chapter.380) >> + >> endobj + 2752 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [205.377 594.2535 221.3003 605.9332] + /Subtype /Link + /A << /S /GoTo /D (figure.13) >> + >> endobj + 2753 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [316.9196 512.813 332.8429 524.4926] + /Subtype /Link + /A << /S /GoTo /D (figure.528) >> + >> endobj + 2750 0 obj << + /D [2748 0 R /FitH 784.0631] + >> endobj + 210 0 obj << + /D [2748 0 R /FitH 670.1501] + >> endobj + 908 0 obj << + /D [2748 0 R /FitH 286.3552] + >> endobj + 2747 0 obj << + /Font << /F47 676 0 R /F15 679 0 R /F49 683 0 R /F26 624 0 R /F57 691 0 R /F14 634 0 R >> + /XObject << /Im22 2746 0 R >> + /ProcSet [ /PDF /Text ] + >> endobj + 2792 0 obj << + /Length 2025 + /Filter /FlateDecode + >> + stream + x??YKs7 ??W???L???eni?t?K??gzH{XKk??Hr?~4?????u??B? + ????k?????J!?+ ""B@?B???Xgo?`?\??se ???/MTq???_$?????????. + ?',?0?ge\???!??????J??2A?w?4?+ ?W> ?U?M}??]/???'??{???x????n7???:???;??nu?????0??V2u?6`?`?']%????+ ??Qn?M?p? 5?t$???????euo??f?????????O???"8&??C??pig|?????N??T?;?.??????????DD??N?h??3??bI S????}???????? ??zendstream + endobj + 2791 0 obj << + /Type /Page + /Contents 2792 0 R + /Resources 2790 0 R + /MediaBox [0 0 595.2757 841.8898] + /Parent 2466 0 R + /Annots [ 2794 0 R 2795 0 R ] + >> endobj + 2789 0 obj << + /Type /XObject + /Subtype /Form + /FormType 1 + /PTEX.FileName (../Graphics/Change_Application1.pdf) + /PTEX.PageNumber 1 + /PTEX.InfoDict 2796 0 R + /Matrix [1.00000000 0.00000000 0.00000000 1.00000000 0.00000000 0.00000000] + /BBox [0.00000000 0.00000000 508.00000000 491.00000000] + /Resources << + /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] + /ColorSpace << + /Cs1 2797 0 R + /Cs2 2798 0 R + >>/Font << /F1.0 2799 0 R>> + /XObject << + /Im5 2800 0 R + /Im2 2801 0 R + /Im17 2802 0 R + /Im13 2803 0 R + /Im18 2804 0 R + /Im9 2805 0 R + /Im3 2806 0 R + /Im14 2807 0 R + /Im10 2808 0 R + /Im8 2809 0 R + /Im15 2810 0 R + /Im12 2811 0 R + /Im7 2812 0 R + /Im4 2813 0 R + /Im1 2814 0 R + /Im16 2815 0 R + /Im6 2816 0 R + /Im11 2817 0 R + >>>> + /Length 2818 0 R + /Filter /FlateDecode + >> + stream + x??ZK?5??W??p???%???.??}#8L???@???C????L?J?]??,&?N?R?????????~?????Y[?7??F? ??**4??#A???%????B???l+?x?r1??*G??;????s?r ??,?Y?R????u???????? ????6??s??u'I?p$?\on!(?r5?=???z?????\???,???}@????Q?RjON<???:??y?Kj^F??#/?|\???v?d?#????S:???Y??H??????"K?(;?y???~???O:+5OU?q$?fr?+ ??z????#%?1??????a?????{?PT???L{v??w??>?w???IU?=??>&?Dx,(?Fz_a(B?JF= e?B ?`C??]??? ???\ ?Cb'K + $??? > + endobj + 2797 0 obj + [/ICCBased 2819 0 R] + endobj + 2798 0 obj + [/ICCBased 2820 0 R] + endobj + 2799 0 obj + << + /Type /Font + /Subtype /TrueType + /BaseFont /JLUZYN#2BHelvetica + /FontDescriptor 2821 0 R + /Widths 2822 0 R + /FirstChar 32 + /LastChar 121 + /Encoding /MacRomanEncoding + >> + endobj + 2800 0 obj + << + /Length 2823 0 R + /Type /XObject + /Subtype /Image + /Width 95 + /Height 75 + /ColorSpace 2798 0 R + /SMask 2824 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x??? + endobj + 2801 0 obj + << + /Length 2825 0 R + /Type /XObject + /Subtype /Image + /Width 75 + /Height 61 + /ColorSpace 2798 0 R + /SMask 2826 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 2802 0 obj + << + /Length 2827 0 R + /Type /XObject + /Subtype /Image + /Width 105 + /Height 57 + /ColorSpace 2798 0 R + /SMask 2828 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 2803 0 obj + << + /Length 2829 0 R + /Type /XObject + /Subtype /Image + /Width 75 + /Height 61 + /ColorSpace 2798 0 R + /SMask 2830 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 2804 0 obj + << + /Length 2831 0 R + /Type /XObject + /Subtype /Image + /Width 105 + /Height 61 + /ColorSpace 2798 0 R + /SMask 2832 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 2805 0 obj + << + /Length 2833 0 R + /Type /XObject + /Subtype /Image + /Width 75 + /Height 61 + /ColorSpace 2798 0 R + /SMask 2834 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 2806 0 obj + << + /Length 2835 0 R + /Type /XObject + /Subtype /Image + /Width 375 + /Height 112 + /ColorSpace 2798 0 R + /SMask 2836 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ ??+ endobj + 2807 0 obj + << + /Length 2837 0 R + /Type /XObject + /Subtype /Image + /Width 87 + /Height 79 + /ColorSpace 2798 0 R + /SMask 2838 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???+ endobj + 2808 0 obj + << + /Length 2839 0 R + /Type /XObject + /Subtype /Image + /Width 75 + /Height 61 + /ColorSpace 2798 0 R + /SMask 2840 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 2809 0 obj + << + /Length 2841 0 R + /Type /XObject + /Subtype /Image + /Width 75 + /Height 61 + /ColorSpace 2798 0 R + /SMask 2842 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 2810 0 obj + << + /Length 2843 0 R + /Type /XObject + /Subtype /Image + /Width 123 + /Height 127 + /ColorSpace 2798 0 R + /SMask 2844 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x??? + endobj + 2811 0 obj + << + /Length 2845 0 R + /Type /XObject + /Subtype /Image + /Width 75 + /Height 61 + /ColorSpace 2798 0 R + /SMask 2846 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 2812 0 obj + << + /Length 2847 0 R + /Type /XObject + /Subtype /Image + /Width 75 + /Height 61 + /ColorSpace 2798 0 R + /SMask 2848 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 2813 0 obj + << + /Length 2849 0 R + /Type /XObject + /Subtype /Image + /Width 268 + /Height 50 + /ColorSpace 2798 0 R + /SMask 2850 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x??? + endobj + 2814 0 obj + << + /Length 2851 0 R + /Type /XObject + /Subtype /Image + /Width 429 + /Height 286 + /ColorSpace 2798 0 R + /SMask 2852 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x??? + endobj + 2815 0 obj + << + /Length 2853 0 R + /Type /XObject + /Subtype /Image + /Width 123 + /Height 127 + /ColorSpace 2798 0 R + /SMask 2854 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x??? + endobj + 2816 0 obj + << + /Length 2855 0 R + /Type /XObject + /Subtype /Image + /Width 75 + /Height 61 + /ColorSpace 2798 0 R + /SMask 2856 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1+ endobj + 2817 0 obj + << + /Length 2857 0 R + /Type /XObject + /Subtype /Image + /Width 139 + /Height 71 + /ColorSpace 2798 0 R + /SMask 2858 0 R + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x??? + endobj + 2818 0 obj + 3270 + endobj + 2819 0 obj + << + /Length 2859 0 R + /N 1 + /Alternate /DeviceGray + /Filter /FlateDecode + >> + stream + x??SMkQ?3V??*??t??E?0~,????i?c??A???d????$??U7nD?n@?.?pQ?FQ(?_??~?(t)?????*?????????????u?uM?Y?/ + ?L?j?;??d??T?s3??B?m??t??????? ??????|????]?HR?O?k?,px\sE?????f?!:t|????04Vj?U??0????????????a???K?#??kIzE???~??u??0?-????9?R????eL???c?? V??t????B?????r=M?????Q???qN???`????> + stream + x?}?OHQ???%B?e&R?N?W?`???o???k??????????n%B?.A?1?X?I:??b]"?(????73?????7?3????{@](m?z?y???(?;>??7P?A+?Xf$?v?lqd?}????????] ?U???????x????iO:???b??M??1?W?g?>??q?[ + ?2?M?'?"()Y'??ld4?????2??'&??Sg^???}8??&????w????,? \V:k???;?i?R;;\??u????V?????\???\?C9?u?(J?I????]????BS?s_ QP5??Fz?????G?%?t{3qW?D?0vz ?? \}\?+ ?????4?I?????x#?{z?wA??j}????????Q????=??8?m??? + ?(?o{1?c??d5?U???g??t????la??i"??\.5???????^?8tph0?k?!?~D? ?T?hd????6??????:>f??&?m?????x?A4????L?&????%???k???i??????Cq????m?&/?By#???%i??'?W??:?Xl?Err?'?=_???)?i7??????,?F|?N?????6?rm?^?? ???U?HW?????5;?????hendstream + endobj + 2821 0 obj + << + /Type /FontDescriptor + /Ascent 770 + /CapHeight 727 + /Descent -230 + /Flags 32 + /FontBBox [ -195 -444 1446 1207] + /FontName /JLUZYN#2BHelvetica + /ItalicAngle 0 + /StemV 0 + /MaxWidth 1500 + /XHeight 531 + /FontFile2 2861 0 R + >> + endobj + 2822 0 obj + [ 278 722 722 722 722 722 722 191 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 667 667 722 722 722 611 778 722 278 722 722 722 833 722 722 667 722 722 667 722 722 722 722 722 722 722 722 722 722 722 722 722 556 722 500 556 556 278 556 556 222 722 500 222 833 556 556 556 722 333 500 278 556 500 722 722 500] + endobj + 2823 0 obj + 43 + endobj + 2824 0 obj + << + /Length 2862 0 R + /Type /XObject + /Subtype /Image + /Width 95 + /Height 75 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????k?P+ |??g???yx at sN?/?Q%?P??????%???h???I?N1(+?T&?/?+???TB???????? ??B?$????5?R???k??\:~xly;???r???????F????Q?J?q???(???yQR?%?????v?????z)?H"O??m$???jN3f?k?????n?lZN?}N????6p? + DS?Z?????1|???uk?k?T4?:[????L?h????d:?o:=X??Q?(!???XV;7?w??????????k?k????9!????+k0y~Y??[??n???> + stream + x???1k?P?k?c?&?TMDQ??"?"XT??8?????NZ?tp + ???E("? )H?_???[/????g???8?_`?|????0? + s?|r?Tku??r?y???}?^?'?n?VJ?>??I????U??V?*[u8?????3???0? ?W?R?,?0!????????y!??([*?????#?g80>????endstream + endobj + 2827 0 obj + 40 + endobj + 2828 0 obj + << + /Length 2864 0 R + /Type /XObject + /Subtype /Image + /Width 105 + /Height 57 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????SRi??+ K?s[?4#sO??M?[??'{m???M?c????A?%m??????+ endobj + 2829 0 obj + 36 + endobj + 2830 0 obj + << + /Length 2865 0 R + /Type /XObject + /Subtype /Image + /Width 75 + /Height 61 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1k?P?k?c?&?TMDQ??"?"XT??8?????NZ?tp + ???E("? )H?_???[/????g???8?_`?|????0? + s?|r?Tku??r?y???}?^?'?n?VJ?>??I????U??V?*[u8?????3???0? ?W?R?,?0!????????y!??([*?????#?g80>????endstream + endobj + 2831 0 obj + 41 + endobj + 2832 0 obj + << + /Length 2866 0 R + /Type /XObject + /Subtype /Image + /Width 105 + /Height 61 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????[Zw???\?\D???%??H4A1FS%uIyJB?&????????H????5?4(&j?Q????^M+ ???$????@(L?VB?+ ?4?cg?????X?g6=?4?U?9?d ???G? $Ej???e??|?&'?_???z????r`??\???1??B?=C??????????7?kyiq~?::`j7?S??%2?a!apD !ET??:???????X??????u????Z??D),??iHX? ??}?ydf????????rG)???a{???o????????_t?0Jr???????V?'?I?P???%g???&????Nb??HG{[k??}m?????kd\ w????|?58??{???/FL??CC?mz??A?M1?E%`?%???\???42gw:? +  ?i?15k??0?,????ee ?}K?????g????v,M??6???!F?HX239S^????3wzz??????X:u???d&9+ :???m??0??????-??x?/AA??????`D??Ck?l?{?L?a5?SxH?5=G&P?jn?_.???????? OYc?x???t?{??U??W??????v?.??2?(?????|?{?R??????,S???m??~????????}y???q?Z????t?F?=$$X???????m??M??p?tMl8l?SC?V]?BC? ?f?J5?v?ebv?f_s????Ev?;?????I??]?)?er??? ???e?U??????????????"???f&G?{Z??*y6?M????????r?F??i?????7?5\???c#??M?-:?J.?CL?y+ + endobj + 2833 0 obj + 36 + endobj + 2834 0 obj + << + /Length 2867 0 R + /Type /XObject + /Subtype /Image + /Width 75 + /Height 61 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1k?P?k?c?&?TMDQ??"?"XT??8?????NZ?tp + ???E("? )H?_???[/????g???8?_`?|????0? + s?|r?Tku??r?y???}?^?'?n?VJ?>??I????U??V?*[u8?????3???0? ?W?R?,?0!????????y!??([*?????#?g80>????endstream + endobj + 2835 0 obj + 145 + endobj + 2836 0 obj + << + /Length 2868 0 R + /Type /XObject + /Subtype /Image + /Width 375 + /Height 112 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????Oy?qf?#???+ ??B?`0??rYmi?JB??N????P????????X,??a???F?]???r?`???cg8M??k????&????+ ?]?.;?}?D?????????o??66?????4????3?'C?#W?????ck?/?;?Sa~????????????n?0??/?o???]V????????????h?w?X]|?,?? ('??????????6w??T????????????am?85??T?#v??c??tqimko???_?*?{[???t& ?l'?]?X*??].U??E??>?????_??;v@f?8?nbu??Lvw(6????]??;+ #B?B?`?w????d?C???u?rb??v????.???H?r?J??a??&?Z???g ? ??r???fk?eK?$?F??V/??h????A4!????sFVC?J?r?????a?4R??k?g??/G!?UH??n?JA?$endstream + endobj + 2837 0 obj + 42 + endobj + 2838 0 obj + << + /Length 2869 0 R + /Type /XObject + /Subtype /Image + /Width 87 + /Height 79 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????Sg????6,?Cb6l!r???p?$BXj + ????T?I???#? ???r4??:?k}?j?u:??L>??g?g?of??????)$?????G?d2?J? ??e?'?T + ??R!:? ???/? ?L?????d#\?@(??# <.?f?!??X0?Id + T??'A?*d????,?`s?RS%k??i?I?k?U*r? ho\2?sDr,Yo????/ N~nN?A???E?N?? 1????}^??f1?b??}f$???? ?*???#??P???qT? *??ja?"9???n??N??gfbt????g%+????X?'?q;o???J?y???4?D?B&??'6??a&?p?F??r?????u???q`p(8???p08??I8??M wn?]?,+.?O&% ??ID`:? ?? + ?(c???/??F*????+????z?7??47???]?n?T?1??g??i??(8>?Y ????x + 1?K1d?|s?V[g?;?? ??U ?? L??T? + Ce!????J?3?-?Jc/???yEKJ?????\:_???i+ ???.?J0???$^?1????X.?/??????q%?1???^e??]@???????|?????6T + ???????????? ???endstream + endobj + 2839 0 obj + 36 + endobj + 2840 0 obj + << + /Length 2870 0 R + /Type /XObject + /Subtype /Image + /Width 75 + /Height 61 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1k?P?k?c?&?TMDQ??"?"XT??8?????NZ?tp + ???E("? )H?_???[/????g???8?_`?|????0? + s?|r?Tku??r?y???}?^?'?n?VJ?>??I????U??V?*[u8?????3???0? ?W?R?,?0!????????y!??([*?????#?g80>????endstream + endobj + 2841 0 obj + 36 + endobj + 2842 0 obj + << + /Length 2871 0 R + /Type /XObject + /Subtype /Image + /Width 75 + /Height 61 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1k?P?k?c?&?TMDQ??"?"XT??8?????NZ?tp + ???E("? )H?_???[/????g???8?_`?|????0? + s?|r?Tku??r?y???}?^?'?n?VJ?>??I????U??V?*[u8?????3???0? ?W?R?,?0!????????y!??([*?????#?g80>????endstream + endobj + 2843 0 obj + 68 + endobj + 2844 0 obj + << + /Length 2872 0 R + /Type /XObject + /Subtype /Image + /Width 123 + /Height 127 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????K"????qL????b?@"?@APf:?A?.Jx???????????? ?#?>???B?AP??v.?????3??(&??!??Fd!?%???7?b??/(I?Z??>??T.? \???72??2?Y??Rz??`?6?D=??[?? + ?!??BD,?/ju?i?b??'?q8?v?e?D???r???s???U????ty?>??n?N?y=.??L-??RL4^[???l?lx?-  + ?w?M8 + ?[?g?bdm?????V7?????dj?????x,?f?6???L??6??BKY???h<}?????'????????Bi???A??L`7u??9-???O?xz??L?? ??$?WZ,?PV?v4yt\?(W?W??Z)_????m?????/?H??dr????q?\?7?7?????????x?v??$??W??J??k+??????V????6???m??\??#[?5?G???+ endobj + 2845 0 obj + 36 + endobj + 2846 0 obj + << + /Length 2873 0 R + /Type /XObject + /Subtype /Image + /Width 75 + /Height 61 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1k?P?k?c?&?TMDQ??"?"XT??8?????NZ?tp + ???E("? )H?_???[/????g???8?_`?|????0? + s?|r?Tku??r?y???}?^?'?n?VJ?>??I????U??V?*[u8?????3???0? ?W?R?,?0!????????y!??([*?????#?g80>????endstream + endobj + 2847 0 obj + 36 + endobj + 2848 0 obj + << + /Length 2874 0 R + /Type /XObject + /Subtype /Image + /Width 75 + /Height 61 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1k?P?k?c?&?TMDQ??"?"XT??8?????NZ?tp + ???E("? )H?_???[/????g???8?_`?|????0? + s?|r?Tku??r?y???}?^?'?n?VJ?>??I????U??V?*[u8?????3???0? ?W?R?,?0!????????y!??([*?????#?g80>????endstream + endobj + 2849 0 obj + 61 + endobj + 2850 0 obj + << + /Length 2875 0 R + /Type /XObject + /Subtype /Image + /Width 268 + /Height 50 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???Mk?P?k??$M VMDQ??"?,*??q?U6-XDp?EK?.\DZ + .??PD??T? ??N?i?Ng??.???{{+ ' + ??uo8?/_?????O???F??K[????$O??N<[???oX??^-f?~?Y=I*?>???7L+ endobj + 2851 0 obj + 380 + endobj + 2852 0 obj + << + /Length 2876 0 R + /Type /XObject + /Subtype /Image + /Width 429 + /Height 286 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????K*k+ ???b6=???????i??????????????V?D?W??\[?-?>N?T_w{ZVIq?G????????n????????SZ/|N%?G?nEz????j81?????;????????T???7???DX???_?l?=#q-?[?.W?/??+2?Z???R?^?????@O???}!???????Jq?rQ??7?/dl?A??vQ?+?dg&?????zaXD?=J?-?????7?wd?no?????????_CnE|?????Tns?ry}s??Df?????????KMET?V???_?????o???y?5??=???^=??Z?????m,?w8?????I?q??~?????x????????:??1-S(??ZX??)?t???A???b??,.?ZO???J]?`??????Z:_,?T[Xp????U=)?i-:????????????j??????T???m?z???4?U??6?G?L?r????????'2C??7?????\j*?z???C???????y?~s! {Gf???^;??Y]?K????X????????*??z???B????k???Jvfb??+ -?[g??H\K?????????+2?Z???R?^?????@O??e?a???j81??ol?UNN???NO*G{????DX?????X?????'S? ??????!?Ayw??^??J???????%??>54?1??[Y??*????[?k+???????????X???7?L&g????R??LFW?/?????d88????^??i?> + stream + x????K"????qL????b?@"?@APf:?A?.Jx???????????? ?#?>???B?AP??v.?????3??(&??!??Fd!?%???7?b??/(I?Z??>??T.? \???72??2?Y??Rz??`?6?D=??[?? + ?!??BD,?/ju?i?b??'?q8?v?e?D???r???s???U????ty?>??n?N?y=.??L-??RL4^[???l?lx?-  + ?w?M8 + ?[?g?bdm?????V7?????dj?????x,?f?6???L??6??BKY???h<}?????'????????Bi???A??L`7u??9-???O?xz??L?? ??$?WZ,?PV?v4yt\?(W?W??Z)_????m?????/?H??dr????q?\?7?7?????????x?v??$??W??J??k+??????V????6???m??\??#[?5?G???+ endobj + 2855 0 obj + 36 + endobj + 2856 0 obj + << + /Length 2878 0 R + /Type /XObject + /Subtype /Image + /Width 75 + /Height 61 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x???1k?P?k?c?&?TMDQ??"?"XT??8?????NZ?tp + ???E("? )H?_???[/????g???8?_`?|????0? + s?|r?Tku??r?y???}?^?'?n?VJ?>??I????U??V?*[u8?????3???0? ?W?R?,?0!????????y!??([*?????#?g80>????endstream + endobj + 2857 0 obj + 52 + endobj + 2858 0 obj + << + /Length 2879 0 R + /Type /XObject + /Subtype /Image + /Width 139 + /Height 71 + /ColorSpace /DeviceGray + /BitsPerComponent 8 + /Filter /FlateDecode + >> + stream + x????K"q?s^?7u??????4?????????j??CB?j?????? +?zP:?D?nY[j????v??b???????????g???? A~? O: ?b?C??"?c%???$I? 0h?"I#?i6L3????r? ??A8??04???'(??`u??D? Qt?;F?k??\??-??91????????Sn??3?]CA??Es{?R?Y$]^???' ??Y?h??> ??&~l????+/?U$q%&??}n;g"?? + N???%YYMg6??M??j&?T?E?hc????&?????i5?],??P*n??T\?> + stream + x??z xTU???Tcj???JU?R?C!??! aHdPH?h?eAh???@D?AP[?!-?4^?ADm?VQZ[???i???v_???:?B+ + ?M????m?n[y?}??\x???.??5???pq?B?'??`?BF=Ez^ZM???!???C?X??!ra?_!?@/R!?????e ?#2"?????????-'r!7? /?(?cH?E?lr0??R@:#??kS_?'?.? ?????IVU?c?n???>?@=????Sx:??G}?=?A??k??x?N??B??0???6?@E6Z+ ?x???qt????? ??+ ?????x6?????????? 0?(??X??L&3??E?%]?Is?X:????2}?????12ff43m`0?????az?7?rv$??Na????:?}?}?[?m?z?o?????x?f~p??? Wh??`???h&??3???N<u?t???`? Qv?????I!H???? ???J??^?v?????i????V??T#7??s;*)J_(? g???,???z?.??n?Z?&?A???UJ??s,C F????V_,?c????+6abSm?S???&5?=?r?J?Dw?g?g????Rm??M1:?9FZ??????_????v?y?V???? ?Mo????O7[??? ?7???5?M1?f`??????????Z??b + ???{^+??&5?:??Z???????k???F^?a?? + ???wU?URY!?V????????J?w?S(?M+ ???9???? + v???!?R0@??e??R?T?d8???xx!??? + p?8?????5h4?O???????7?+ ? ????????????`?9c??????? + ?xsd`?Z]e% ?niA-X??%?OE??t???|F?g6'???5r/?F?'???????d???V)???b?lt{t?4?4?<2O3O??,?1?z=q ? ?k C??JT???9?f?9 + s ?b????????3???\??JT?? ?mE???G 6+?\??1?:?F?Dn? (??C?J???~QY??>??9??.??_U?????'?Oj,?g??????e?,?^nX4lf???'?Mt??=?????i?F???po??*??x?(?CH&p7a?? + dW??x?Aq?G + )??Y ?R??B?h?R????^#o% + N?G???=?Y?=???@?)Q&????#???x ?n?e???]???????-T????B2,z sg?N?1 f~x&5 ???????c??qQe?h?.`t?E{V ???-??G ]??"?d>?*?]?-?(?-?)"?+? ???????q?)??????)F + /_?Y??(?E???bd?X?eK?0??Q!????Nd?????_??????!dMWa[??$????/???E?? K?????|=?V?????c?????92v?;x1^t?M"??d??Zn?9???+ Tc?????9?z???????b?p=??m?X\V?C6??{?$?O??[??$;??;w?G?~??Tbsx?7I?+????-????Q????f???eg?na?\????]?j?? ??????5??T?XLL??? ???{T$?r + ????????NGXBJ{v?=q????\?;p??^Y?H?S???_??)?J?W??^7W1O?? ??:??,?[?vWDH~??P?(? t<+?B?VWwG?V????U?]???++]&>??'?1?v?? ???[???0???`?????s??8$?G????~I?A?eFe? 5g"l?? ???????0?(TkC?????^Px????/??????/???????v????J????`e; ???"???5wf??a?j???t?e-?4??D??? ? ~?e??8???V?1&??PR??ra??????F??F4H???|&y????'~?|]`??/^??|?????B?k?gv?(????Hb"y?sh???/????????g9eQ????R2r???g???OT;???L?A?V??s?=??k2?]@?????D??L?p? (?????a?s??k???=C?,? ??d5y+ +????????????????c?+?_??m???3&?????A???h0D???t4?h?*? + uH??P?F,?|?n0?q-?????OR???????!?~??.???y ?????M???s????r?l??S??8?M????i?,3????g?b????i?y[????u?????)YSC??????k?k;?Y???.??\#W??c???avZ]6s?)?;C5"??+ %D?"???y?.Q?p??W:??,-??/??|?_??v???c\?`+j???6"????Wu|x??nE??????[???????|??I??N?z]mx??9cn??????G?n??????????y??G??,YS?; ????h????8????Rn??V?w???? #???A??? ???????? + ??]?.qV><$??d?/K%?n?????E??;*?j?}?????nJ?3?0??n?CNl????????g????????MDaLv????-????E?V?8???e?m6???a????ai?o_4??????????v?7 + ?? ???Z??a??;~[??G?C?l?br?a + ???????0????9?<8i=y?!??????+ 8?????????????????,???\YZ????GN$?K.e + .l?????02??PSc_t?hf?????1???[X?|??/??????T???ws?X??????????c)dm??3p?s????????6H???:?m??>??y ?? ????.???b ?m5?y??????1<[???@?k?i:0;?V??????<8?zq??Z?x?????X???b?^3Z~b?E?!??E?W?t????$:k?N?^?????;???3qZS?7??&?wI?-E??Tendstream + endobj + 2862 0 obj + 598 + endobj + 2863 0 obj + 585 + endobj + 2864 0 obj + 1227 + endobj + 2865 0 obj + 585 + endobj + 2866 0 obj + 1973 + endobj + 2867 0 obj + 585 + endobj + 2868 0 obj + 1310 + endobj + 2869 0 obj + 1709 + endobj + 2870 0 obj + 585 + endobj + 2871 0 obj + 585 + endobj + 2872 0 obj + 858 + endobj + 2873 0 obj + 585 + endobj + 2874 0 obj + 585 + endobj + 2875 0 obj + 638 + endobj + 2876 0 obj + 1765 + endobj + 2877 0 obj + 858 + endobj + 2878 0 obj + 585 + endobj + 2879 0 obj + 838 + endobj + 2880 0 obj + 8798 + endobj + 2794 0 obj << + /Type /Annot + /Border[0 0 0]/H/I/C[1 0 0] + /Rect [277.453 300.2367 293.3763 311.9164] + /Subtype /Link + /A << /S /GoTo /D (figure.530) >> + >> endob