From asl at math.spbu.ru Mon Sep 3 02:43:07 2007 From: asl at math.spbu.ru (Anton Korobeynikov) Date: Mon, 03 Sep 2007 07:43:07 -0000 Subject: [llvm-commits] [llvm-gcc-4.2] r41682 - /llvm-gcc-4.2/trunk/gcc/convert.c Message-ID: <200709030743.l837h8kh031870@zion.cs.uiuc.edu> Author: asl Date: Mon Sep 3 02:43:05 2007 New Revision: 41682 URL: http://llvm.org/viewvc/llvm-project?rev=41682&view=rev Log: Typo Modified: llvm-gcc-4.2/trunk/gcc/convert.c Modified: llvm-gcc-4.2/trunk/gcc/convert.c URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/convert.c?rev=41682&r1=41681&r2=41682&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/convert.c (original) +++ llvm-gcc-4.2/trunk/gcc/convert.c Mon Sep 3 02:43:05 2007 @@ -415,7 +415,7 @@ if (!TARGET_C99_FUNCTIONS) break; /* LLVM LOCAL begin */ - #ifdef ENABLER_LLVM + #ifdef ENABLE_LLVM break; #endif if (outprec < TYPE_PRECISION (long_integer_type_node) From gordonhenriksen at mac.com Tue Sep 4 01:18:41 2007 From: gordonhenriksen at mac.com (Gordon Henriksen) Date: Tue, 4 Sep 2007 02:18:41 -0400 Subject: [llvm-commits] Garbage collection patch series Message-ID: <13858288-5288-498B-A3A0-2E464219BD3A@mac.com> As followups to this post, I will post a series of six patches which significantly improve LLVM's garbage collection support. These patches are not all fully independent, but I have broken them up into more digestible units for review. ? gc-1-registry.patch (+288 lines) My previous Registry.h header, as well as Collectors.h, which is the registry for dynamically-loaded garbage collectors. ? gc-2-metadata.patch (+303 lines) CollectorMetadata is the data structure populated by back-ends during code-generation. ? gc-3-collector.patch (+401 lines) Collector is the base class for garbage collector code generators. It provides its subclasses with both static configuration and callbacks through which they can exert its will upon all relevant stages of code generation. ? gc-4-integration.patch (+113, -17 lines) In this patch, Collector winds its tendrils throughout the compiler. Overhead should be minimal when disabled. ? gc-5-shadowstack.patch (+59, -406 lines) With this patch, the LowerGC transformation is adapted to become the ShadowStackCollector. ? gc-6-ocaml.patch (+190 lines) Finally, the new OcamlCollector emits the Ocaml frametable data structure and related symbols. Hopefully I can get feedback so that this can be rolled into 2.2 early in the development cycle. ? Gordon -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20070904/486c742f/attachment.html From gordonhenriksen at mac.com Tue Sep 4 01:20:01 2007 From: gordonhenriksen at mac.com (Gordon Henriksen) Date: Tue, 4 Sep 2007 02:20:01 -0400 Subject: [llvm-commits] gc-1-registry.patch [1 of 6] In-Reply-To: <13858288-5288-498B-A3A0-2E464219BD3A@mac.com> References: <13858288-5288-498B-A3A0-2E464219BD3A@mac.com> Message-ID: <862E0338-124D-402E-80D2-F8F6C874FC34@mac.com> ? gc-1-registry.patch (+288 lines) My previous Registry.h header, as well as Collectors.h, which is the registry for dynamically-loaded garbage collectors. ? Gordon ? -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20070904/721fd41c/attachment.html -------------- next part -------------- A non-text attachment was scrubbed... Name: gc-1-registry.patch Type: application/octet-stream Size: 9592 bytes Desc: not available Url : http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20070904/721fd41c/attachment.obj -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20070904/721fd41c/attachment-0001.html From gordonhenriksen at mac.com Tue Sep 4 01:21:38 2007 From: gordonhenriksen at mac.com (Gordon Henriksen) Date: Tue, 4 Sep 2007 02:21:38 -0400 Subject: [llvm-commits] gc-2-metadata.patch [2 of 6] In-Reply-To: <13858288-5288-498B-A3A0-2E464219BD3A@mac.com> References: <13858288-5288-498B-A3A0-2E464219BD3A@mac.com> Message-ID: <86362F08-05F9-4425-8BA5-70FAAB32C180@mac.com> ? gc-2-metadata.patch (+303 lines) CollectorMetadata is the data structure populated by back-ends during code-generation. ? Gordon ? -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20070904/cd556d78/attachment.html -------------- next part -------------- A non-text attachment was scrubbed... Name: gc-2-metadata.patch Type: application/octet-stream Size: 10436 bytes Desc: not available Url : http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20070904/cd556d78/attachment.obj -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20070904/cd556d78/attachment-0001.html From gordonhenriksen at mac.com Tue Sep 4 01:22:41 2007 From: gordonhenriksen at mac.com (Gordon Henriksen) Date: Tue, 4 Sep 2007 02:22:41 -0400 Subject: [llvm-commits] gc-3-collector.patch [3 of 6] In-Reply-To: <13858288-5288-498B-A3A0-2E464219BD3A@mac.com> References: <13858288-5288-498B-A3A0-2E464219BD3A@mac.com> Message-ID: <165D99AB-CFDA-4006-BEAC-C6C566A0D433@mac.com> ? gc-3-collector.patch (+401 lines) Collector is the base class for garbage collector code generators. It provides its subclasses with both static configuration and callbacks through which they can exert its will upon all relevant stages of code generation. ? Gordon ? -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20070904/0c586be5/attachment.html -------------- next part -------------- A non-text attachment was scrubbed... Name: gc-3-collector.patch Type: application/octet-stream Size: 16373 bytes Desc: not available Url : http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20070904/0c586be5/attachment.obj -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20070904/0c586be5/attachment-0001.html From gordonhenriksen at mac.com Tue Sep 4 01:36:17 2007 From: gordonhenriksen at mac.com (Gordon Henriksen) Date: Tue, 4 Sep 2007 02:36:17 -0400 Subject: [llvm-commits] gc-4-integration.patch [4 of 6] In-Reply-To: <13858288-5288-498B-A3A0-2E464219BD3A@mac.com> References: <13858288-5288-498B-A3A0-2E464219BD3A@mac.com> Message-ID: ? gc-4-integration.patch (+113, -17 lines) In this patch, Collector winds its tendrils throughout the compiler. Overhead should be minimal when disabled. I would particularly appreciate any feedback on this interface. The primary item of concern to me is that the desired collector is exposed to the system using a global. I haven't decided on a better approach. In the meantime, it works and is simple. As a less concrete concern, the interaction between TargetMachine et al. and Collector is of some concern. Collector and TargetMachine have no way of sniffing each others' capabilities and requirements. So llc -march=c -gc=ocaml with silently do the wrong thing; likewise the JIT, object writers, and MSIL backend. Finally, the -gc option is mandatory if collector intrinsics are used. This is somewhat sensible since there is no default collector runtime (excluding the MSIL target), but I'd rather stuff any necessary information inside the LLVM representation somehow so that the .bc/.ll remain self-contained. ? Gordon -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20070904/90ff7381/attachment.html From gordonhenriksen at mac.com Tue Sep 4 01:37:52 2007 From: gordonhenriksen at mac.com (Gordon Henriksen) Date: Tue, 4 Sep 2007 02:37:52 -0400 Subject: [llvm-commits] gc-5-shadowstack.patch [5 of 6] In-Reply-To: <13858288-5288-498B-A3A0-2E464219BD3A@mac.com> References: <13858288-5288-498B-A3A0-2E464219BD3A@mac.com> Message-ID: ? gc-5-shadowstack.patch (+59, -406 lines) With this patch, the LowerGC transformation is adapted to become the ShadowStackCollector. $ llvm-as < simple_ocaml.ll | llc -gc=shadow-stack .text .align 4,0x90 .globl _fun _fun: subl $44, %esp movl L_llvm_gc_root_chain$non_lazy_ptr, %eax movl (%eax), %ecx movl %ecx, 16(%esp) movl $2, 20(%esp) movl $0, 28(%esp) movl $0, 24(%esp) movl $0, 12(%esp) leal 12(%esp), %ecx movl %ecx, 24(%esp) movl $0, 36(%esp) movl $0, 32(%esp) leal 16(%esp), %ecx movl %ecx, (%eax) movl $0, 8(%esp) leal 8(%esp), %eax movl %eax, 32(%esp) movl 48(%esp), %eax movl %eax, 12(%esp) LBB1_1: # bb.loop movl 12(%esp), %eax movl 4(%eax), %eax testl %eax, %eax je LBB1_1 # bb.loop LBB1_2: # bb.end movl $8, (%esp) call L_malloc$stub movl 12(%esp), %ecx movl %ecx, 4(%ecx) movl L_llvm_gc_root_chain$non_lazy_ptr, %ecx movl 16(%esp), %edx movl %edx, (%ecx) addl $44, %esp ret .data .comm _llvm_gc_root_chain,4 # llvm_gc_root_chain .section __IMPORT,__jump_table,symbol_stubs,self_modifying_code +pure_instructions,5 L_malloc$stub: .indirect_symbol _malloc hlt ; hlt ; hlt ; hlt ; hlt .section __IMPORT,__pointers,non_lazy_symbol_pointers L_llvm_gc_root_chain$non_lazy_ptr: .indirect_symbol _llvm_gc_root_chain .long 0 .subsections_via_symbols ? Gordon -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20070904/a4c08798/attachment.html From gordonhenriksen at mac.com Tue Sep 4 01:45:55 2007 From: gordonhenriksen at mac.com (Gordon Henriksen) Date: Tue, 4 Sep 2007 02:45:55 -0400 Subject: [llvm-commits] gc-6-ocaml.patch [last of 6] In-Reply-To: <13858288-5288-498B-A3A0-2E464219BD3A@mac.com> References: <13858288-5288-498B-A3A0-2E464219BD3A@mac.com> Message-ID: <036125C7-295C-4ADB-B2EE-B9215A5558C9@mac.com> ? gc-6-ocaml.patch (+190 lines) Finally, the new OcamlCollector emits the Ocaml frametable data structure and related symbols. $ llvm-as -o simple_ocaml.bc simple_ocaml.ll $ llc -asm-verbose -gc=ocaml -o - simple_ocaml.bc .text _camlSimple_ocaml__code_begin: .data _camlSimple_ocaml__data_begin: .text .align 4,0x90 .globl _fun _fun: subl $12, %esp movl 16(%esp), %eax movl %eax, 8(%esp) LBB1_1: # bb.loop movl 8(%esp), %eax movl 4(%eax), %eax testl %eax, %eax je LBB1_1 # bb.loop LBB1_2: # bb.end movl $8, (%esp) call L_malloc$stub Llabel1: movl 8(%esp), %ecx movl %ecx, 4(%ecx) addl $12, %esp ret .section __IMPORT,__jump_table,symbol_stubs,self_modifying_code +pure_instructions,5 L_malloc$stub: .indirect_symbol _malloc hlt ; hlt ; hlt ; hlt ; hlt .subsections_via_symbols .text _camlSimple_ocaml__code_end: .data _camlSimple_ocaml__data_end: .long 0 _camlSimple_ocaml__frametable: # live roots for fun .long Llabel1 # call return address .short 0x0 # stack frame size .short 0x2 # live root count .word 8 # stack offset .word 4 # stack offset .align 2 (Oops, just noticed that the stack frame size is incorrect here. I think the machine code pass simply needs to be moved after epilogue/ prologue generation a couple patches back.) ? Gordon ? -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20070904/870f1191/attachment.html -------------- next part -------------- A non-text attachment was scrubbed... Name: gc-6-ocaml.patch Type: application/octet-stream Size: 7507 bytes Desc: not available Url : http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20070904/870f1191/attachment.obj -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20070904/870f1191/attachment-0001.html From gordonhenriksen at mac.com Tue Sep 4 01:47:11 2007 From: gordonhenriksen at mac.com (Gordon Henriksen) Date: Tue, 4 Sep 2007 02:47:11 -0400 Subject: [llvm-commits] gc-4-integration.patch [4 of 6] In-Reply-To: References: <13858288-5288-498B-A3A0-2E464219BD3A@mac.com> Message-ID: Doh. Missing attachments from #4 and #5. ? Gordon ?? -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20070904/7e66a91e/attachment.html -------------- next part -------------- A non-text attachment was scrubbed... Name: gc-4-integration.patch Type: application/octet-stream Size: 15806 bytes Desc: not available Url : http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20070904/7e66a91e/attachment.obj -------------- next part -------------- A non-text attachment was scrubbed... Name: gc-5-shadowstack.patch Type: application/octet-stream Size: 27708 bytes Desc: not available Url : http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20070904/7e66a91e/attachment-0001.obj -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20070904/7e66a91e/attachment-0001.html From greened at obbligato.org Tue Sep 4 11:14:57 2007 From: greened at obbligato.org (David Greene) Date: Tue, 04 Sep 2007 16:14:57 -0000 Subject: [llvm-commits] [llvm-gcc-4.0] r41698 - /llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp Message-ID: <200709041614.l84GEv5V031490@zion.cs.uiuc.edu> Author: greened Date: Tue Sep 4 11:14:57 2007 New Revision: 41698 URL: http://llvm.org/viewvc/llvm-project?rev=41698&view=rev Log: Update for new GEP interface. Modified: llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp Modified: llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp?rev=41698&r1=41697&r2=41698&view=diff ============================================================================== --- llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp (original) +++ llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp Tue Sep 4 11:14:57 2007 @@ -478,7 +478,7 @@ ConstantInt::get(Type::Int32Ty, FieldNo) }; - Loc = Builder.CreateGEP(Loc, Idxs, 2, "tmp"); + Loc = Builder.CreateGEP(Loc, Idxs, Idxs + 2, "tmp"); LocStack.push_back(Loc); } void ExitField() { @@ -1165,8 +1165,9 @@ if (isPaddingElement(STy, i)) continue; Constant *Idx = ConstantInt::get(Type::Int32Ty, i); - Value *DElPtr = Builder.CreateGEP(DestPtr, Zero, Idx, "tmp"); - Value *SElPtr = Builder.CreateGEP(SrcPtr, Zero, Idx, "tmp"); + Value *Idxs[2] = { Zero, Idx }; + Value *DElPtr = Builder.CreateGEP(DestPtr, Idxs, Idxs + 2, "tmp"); + Value *SElPtr = Builder.CreateGEP(SrcPtr, Idxs, Idxs + 2, "tmp"); CopyAggregate(DElPtr, SElPtr, isDstVolatile, isSrcVolatile, Alignment, Builder); } @@ -1175,8 +1176,9 @@ Constant *Zero = ConstantInt::get(Type::Int32Ty, 0); for (unsigned i = 0, e = ATy->getNumElements(); i != e; ++i) { Constant *Idx = ConstantInt::get(Type::Int32Ty, i); - Value *DElPtr = Builder.CreateGEP(DestPtr, Zero, Idx, "tmp"); - Value *SElPtr = Builder.CreateGEP(SrcPtr, Zero, Idx, "tmp"); + Value *Idxs[2] = { Zero, Idx }; + Value *DElPtr = Builder.CreateGEP(DestPtr, Idxs, Idxs + 2, "tmp"); + Value *SElPtr = Builder.CreateGEP(SrcPtr, Idxs, Idxs + 2, "tmp"); CopyAggregate(DElPtr, SElPtr, isDstVolatile, isSrcVolatile, Alignment, Builder); } @@ -1246,14 +1248,18 @@ Constant *Zero = ConstantInt::get(Type::Int32Ty, 0); for (unsigned i = 0, e = STy->getNumElements(); i != e; ++i) { Constant *Idx = ConstantInt::get(Type::Int32Ty, i); - ZeroAggregate(Builder.CreateGEP(DestPtr, Zero, Idx, "tmp"), Builder); + Value *Idxs[2] = { Zero, Idx }; + ZeroAggregate(Builder.CreateGEP(DestPtr, Idxs, Idxs + 2, "tmp"), + Builder); } } else { const ArrayType *ATy = cast(ElTy); Constant *Zero = ConstantInt::get(Type::Int32Ty, 0); for (unsigned i = 0, e = ATy->getNumElements(); i != e; ++i) { Constant *Idx = ConstantInt::get(Type::Int32Ty, i); - ZeroAggregate(Builder.CreateGEP(DestPtr, Zero, Idx, "tmp"), Builder); + Value *Idxs[2] = { Zero, Idx }; + ZeroAggregate(Builder.CreateGEP(DestPtr, Idxs, Idxs + 2, "tmp"), + Builder); } } } @@ -2708,8 +2714,9 @@ if (cast(Loc->getType())->getElementType() != StructTy) // This always deals with pointer types so BitCast is appropriate Loc = Builder.CreateBitCast(Loc, PointerType::get(StructTy), "tmp"); - - LocStack.push_back(Builder.CreateGEP(Loc, Zero, FIdx, "tmp")); + + Value *Idxs[2] = { Zero, FIdx }; + LocStack.push_back(Builder.CreateGEP(Loc, Idxs, Idxs + 2, "tmp")); } void ExitField() { LocStack.pop_back(); @@ -4973,23 +4980,27 @@ Value *SrcComplex, bool isVolatile) { Value *I0 = ConstantInt::get(Type::Int32Ty, 0); Value *I1 = ConstantInt::get(Type::Int32Ty, 1); + Value *Idxs[2] = { I0, I0 }; - Value *RealPtr = Builder.CreateGEP(SrcComplex, I0, I0, "real"); + Value *RealPtr = Builder.CreateGEP(SrcComplex, Idxs, Idxs + 2, "real"); Real = Builder.CreateLoad(RealPtr, isVolatile, "real"); - - Value *ImagPtr = Builder.CreateGEP(SrcComplex, I0, I1, "real"); + + Idxs[1] = I1; + Value *ImagPtr = Builder.CreateGEP(SrcComplex, Idxs, Idxs + 2, "real"); Imag = Builder.CreateLoad(ImagPtr, isVolatile, "imag"); } void TreeToLLVM::EmitStoreToComplex(Value *DestComplex, Value *Real, Value *Imag, bool isVolatile) { Value *I0 = ConstantInt::get(Type::Int32Ty, 0); - Value *I1 = ConstantInt::get(Type::Int32Ty, 1); - - Value *RealPtr = Builder.CreateGEP(DestComplex, I0, I0, "real"); + Value *I1 = ConstantInt::get(Type::Int32Ty, 1); + Value *Idxs[2] = { I0, I0 }; + + Value *RealPtr = Builder.CreateGEP(DestComplex, Idxs, Idxs + 2, "real"); Builder.CreateStore(Real, RealPtr, isVolatile); - Value *ImagPtr = Builder.CreateGEP(DestComplex, I0, I1, "real"); + Idxs[1] = I1; + Value *ImagPtr = Builder.CreateGEP(DestComplex, Idxs, Idxs + 2, "real"); Builder.CreateStore(Imag, ImagPtr, isVolatile); } @@ -5198,8 +5209,8 @@ // If this is an index into an LLVM array, codegen as a GEP. if (isArrayCompatible(ArrayType)) { - Value *Ptr = Builder.CreateGEP(ArrayAddr,ConstantInt::get(Type::Int32Ty, 0), - IndexVal, "tmp"); + Value *Idxs[2] = { ConstantInt::get(Type::Int32Ty, 0), IndexVal }; + Value *Ptr = Builder.CreateGEP(ArrayAddr, Idxs, Idxs + 2, "tmp"); return BitCastToType(Ptr, PointerType::get(ConvertType(TREE_TYPE(exp)))); } @@ -5282,9 +5293,8 @@ uint32_t MemberIndex = CI->getZExtValue(); assert(MemberIndex < StructTy->getNumContainedTypes() && "Field Idx out of range!"); - FieldPtr = Builder.CreateGEP(StructAddrLV.Ptr, - Constant::getNullValue(Type::Int32Ty), CI, - "tmp"); + Value *Idxs[2] = { Constant::getNullValue(Type::Int32Ty), CI }; + FieldPtr = Builder.CreateGEP(StructAddrLV.Ptr, Idxs, Idxs + 2, "tmp"); // Now that we did an offset from the start of the struct, subtract off // the offset from BitStart. @@ -5435,9 +5445,9 @@ LValue Ptr = EmitLV(TREE_OPERAND(exp, 0)); assert(!Ptr.isBitfield() && "BIT_FIELD_REF operands cannot be bitfields!"); - return LValue(Builder.CreateGEP(Ptr.Ptr, - ConstantInt::get(Type::Int32Ty, 0), - ConstantInt::get(Type::Int32Ty, Idx), "tmp")); + Value *Idxs[2] = { ConstantInt::get(Type::Int32Ty, 0), + ConstantInt::get(Type::Int32Ty, Idx) }; + return LValue(Builder.CreateGEP(Ptr.Ptr, Idxs, Idxs + 2, "tmp")); } LValue TreeToLLVM::EmitLV_VIEW_CONVERT_EXPR(tree exp) { From greened at obbligato.org Tue Sep 4 11:15:40 2007 From: greened at obbligato.org (David Greene) Date: Tue, 04 Sep 2007 16:15:40 -0000 Subject: [llvm-commits] [llvm-gcc-4.2] r41699 - /llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp Message-ID: <200709041615.l84GFe7L031545@zion.cs.uiuc.edu> Author: greened Date: Tue Sep 4 11:15:40 2007 New Revision: 41699 URL: http://llvm.org/viewvc/llvm-project?rev=41699&view=rev Log: Update for new GEP interface. Modified: llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp Modified: llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp?rev=41699&r1=41698&r2=41699&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp (original) +++ llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp Tue Sep 4 11:15:40 2007 @@ -506,7 +506,7 @@ ConstantInt::get(Type::Int32Ty, FieldNo) }; - Loc = Builder.CreateGEP(Loc, Idxs, 2, "tmp"); + Loc = Builder.CreateGEP(Loc, Idxs, Idxs + 2, "tmp"); LocStack.push_back(Loc); } void ExitField() { @@ -1197,8 +1197,9 @@ if (isPaddingElement(STy, i)) continue; Constant *Idx = ConstantInt::get(Type::Int32Ty, i); - Value *DElPtr = Builder.CreateGEP(DestPtr, Zero, Idx, "tmp"); - Value *SElPtr = Builder.CreateGEP(SrcPtr, Zero, Idx, "tmp"); + Value *Idxs[2] = { Zero, Idx }; + Value *DElPtr = Builder.CreateGEP(DestPtr, Idxs, Idxs + 2, "tmp"); + Value *SElPtr = Builder.CreateGEP(SrcPtr, Idxs, Idxs + 2, "tmp"); CopyAggregate(DElPtr, SElPtr, isDstVolatile, isSrcVolatile, Alignment, Builder); } @@ -1207,8 +1208,9 @@ Constant *Zero = ConstantInt::get(Type::Int32Ty, 0); for (unsigned i = 0, e = ATy->getNumElements(); i != e; ++i) { Constant *Idx = ConstantInt::get(Type::Int32Ty, i); - Value *DElPtr = Builder.CreateGEP(DestPtr, Zero, Idx, "tmp"); - Value *SElPtr = Builder.CreateGEP(SrcPtr, Zero, Idx, "tmp"); + Value *Idxs[2] = { Zero, Idx }; + Value *DElPtr = Builder.CreateGEP(DestPtr, Idxs, Idxs + 2, "tmp"); + Value *SElPtr = Builder.CreateGEP(SrcPtr, Idxs, Idxs + 2, "tmp"); CopyAggregate(DElPtr, SElPtr, isDstVolatile, isSrcVolatile, Alignment, Builder); } @@ -1278,14 +1280,18 @@ Constant *Zero = ConstantInt::get(Type::Int32Ty, 0); for (unsigned i = 0, e = STy->getNumElements(); i != e; ++i) { Constant *Idx = ConstantInt::get(Type::Int32Ty, i); - ZeroAggregate(Builder.CreateGEP(DestPtr, Zero, Idx, "tmp"), Builder); + Value *Idxs[2] = { Zero, Idx }; + ZeroAggregate(Builder.CreateGEP(DestPtr, Idxs, Idxs + 2, "tmp"), + Builder); } } else { const ArrayType *ATy = cast(ElTy); Constant *Zero = ConstantInt::get(Type::Int32Ty, 0); for (unsigned i = 0, e = ATy->getNumElements(); i != e; ++i) { Constant *Idx = ConstantInt::get(Type::Int32Ty, i); - ZeroAggregate(Builder.CreateGEP(DestPtr, Zero, Idx, "tmp"), Builder); + Value *Idxs[2] = { Zero, Idx }; + ZeroAggregate(Builder.CreateGEP(DestPtr, Idxs, Idxs + 2, "tmp"), + Builder); } } } @@ -2231,7 +2237,8 @@ // This always deals with pointer types so BitCast is appropriate Loc = Builder.CreateBitCast(Loc, PointerType::get(StructTy), "tmp"); - LocStack.push_back(Builder.CreateGEP(Loc, Zero, FIdx, "tmp")); + Value *Idxs[2] = { Zero, FIdx }; + LocStack.push_back(Builder.CreateGEP(Loc, Idxs, Idxs + 2, "tmp")); } void ExitField() { LocStack.pop_back(); @@ -4550,23 +4557,27 @@ Value *SrcComplex, bool isVolatile) { Value *I0 = ConstantInt::get(Type::Int32Ty, 0); Value *I1 = ConstantInt::get(Type::Int32Ty, 1); - - Value *RealPtr = Builder.CreateGEP(SrcComplex, I0, I0, "real"); + Value *Idxs[2] = { I0, I0 }; + + Value *RealPtr = Builder.CreateGEP(SrcComplex, Idxs, Idxs + 2, "real"); Real = Builder.CreateLoad(RealPtr, isVolatile, "real"); - Value *ImagPtr = Builder.CreateGEP(SrcComplex, I0, I1, "real"); + Idxs[1] = I1; + Value *ImagPtr = Builder.CreateGEP(SrcComplex, Idxs, Idxs + 2, "real"); Imag = Builder.CreateLoad(ImagPtr, isVolatile, "imag"); } void TreeToLLVM::EmitStoreToComplex(Value *DestComplex, Value *Real, Value *Imag, bool isVolatile) { Value *I0 = ConstantInt::get(Type::Int32Ty, 0); - Value *I1 = ConstantInt::get(Type::Int32Ty, 1); - - Value *RealPtr = Builder.CreateGEP(DestComplex, I0, I0, "real"); + Value *I1 = ConstantInt::get(Type::Int32Ty, 1); + Value *Idxs[2] = { I0, I0 }; + + Value *RealPtr = Builder.CreateGEP(DestComplex, Idxs, Idxs + 2, "real"); Builder.CreateStore(Real, RealPtr, isVolatile); - Value *ImagPtr = Builder.CreateGEP(DestComplex, I0, I1, "real"); + Idxs[1] = I1; + Value *ImagPtr = Builder.CreateGEP(DestComplex, Idxs, Idxs + 2, "real"); Builder.CreateStore(Imag, ImagPtr, isVolatile); } @@ -4777,8 +4788,8 @@ // If this is an index into an LLVM array, codegen as a GEP. if (isArrayCompatible(ArrayType)) { - Value *Ptr = Builder.CreateGEP(ArrayAddr,ConstantInt::get(Type::Int32Ty, 0), - IndexVal, "tmp"); + Value *Idxs[2] = { ConstantInt::get(Type::Int32Ty, 0), IndexVal }; + Value *Ptr = Builder.CreateGEP(ArrayAddr, Idxs, Idxs + 2, "tmp"); return BitCastToType(Ptr, PointerType::get(ConvertType(TREE_TYPE(exp)))); } @@ -4859,10 +4870,9 @@ unsigned int MemberIndex = GetFieldIndex(FieldDecl); assert(MemberIndex < StructTy->getNumContainedTypes() && "Field Idx out of range!"); - FieldPtr = Builder.CreateGEP(StructAddrLV.Ptr, - Constant::getNullValue(Type::Int32Ty), - ConstantInt::get(Type::Int32Ty, MemberIndex), - "tmp"); + Value *Idxs[2] = { Constant::getNullValue(Type::Int32Ty), + ConstantInt::get(Type::Int32Ty, MemberIndex) }; + FieldPtr = Builder.CreateGEP(StructAddrLV.Ptr, Idxs, Idxs + 2, "tmp"); // Now that we did an offset from the start of the struct, subtract off // the offset from BitStart. @@ -5013,9 +5023,9 @@ LValue Ptr = EmitLV(TREE_OPERAND(exp, 0)); assert(!Ptr.isBitfield() && "BIT_FIELD_REF operands cannot be bitfields!"); - return LValue(Builder.CreateGEP(Ptr.Ptr, - ConstantInt::get(Type::Int32Ty, 0), - ConstantInt::get(Type::Int32Ty, Idx), "tmp")); + Value *Idxs[2] = { ConstantInt::get(Type::Int32Ty, 0), + ConstantInt::get(Type::Int32Ty, Idx) }; + return LValue(Builder.CreateGEP(Ptr.Ptr, Idxs, Idxs + 2, "tmp")); } LValue TreeToLLVM::EmitLV_VIEW_CONVERT_EXPR(tree exp) { From evan.cheng at apple.com Tue Sep 4 11:31:42 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Tue, 4 Sep 2007 09:31:42 -0700 Subject: [llvm-commits] [llvm] r41642 - /llvm/trunk/lib/Target/X86/X86Subtarget.h In-Reply-To: <200708311223.l7VCNxKR021042@zion.cs.uiuc.edu> References: <200708311223.l7VCNxKR021042@zion.cs.uiuc.edu> Message-ID: <5A299083-2522-4E73-A1A1-47500DE5E794@apple.com> Hi Rafael, Thanks for catching this! As far as I know Darwin follows the ABI exactly. I'll fix that. BTW, is it possible for you to add a test case? Thanks, Evan On Aug 31, 2007, at 5:23 AM, Rafael Espindola wrote: > Author: rafael > Date: Fri Aug 31 07:23:58 2007 > New Revision: 41642 > > URL: http://llvm.org/viewvc/llvm-project?rev=41642&view=rev > Log: > Align i64 and f64 at 8 byte on x86-64. > This is mandated table 3.1 at > http://www.x86-64.org/documentation/abi.pdf > > > Modified: > llvm/trunk/lib/Target/X86/X86Subtarget.h > > Modified: llvm/trunk/lib/Target/X86/X86Subtarget.h > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/ > X86Subtarget.h?rev=41642&r1=41641&r2=41642&view=diff > > ====================================================================== > ======== > --- llvm/trunk/lib/Target/X86/X86Subtarget.h (original) > +++ llvm/trunk/lib/Target/X86/X86Subtarget.h Fri Aug 31 07:23:58 2007 > @@ -145,12 +145,18 @@ > > std::string getDataLayout() const { > const char *p; > - if (is64Bit()) > - p = "e-p:64:64-f64:32:64-i64:32:64-f80:128:128"; > - else if (isTargetDarwin()) > - p = "e-p:32:32-f64:32:64-i64:32:64-f80:128:128"; > - else > - p = "e-p:32:32-f64:32:64-i64:32:64-f80:32:32"; > + if (is64Bit()) { > + if (isTargetDarwin()) > + p = "e-p:64:64-f64:32:64-i64:32:64-f80:128:128"; > + else > + p = "e-p:64:64-f64:64:64-i64:64:64-f80:128:128"; > + } > + else { > + if (isTargetDarwin()) > + p = "e-p:32:32-f64:32:64-i64:32:64-f80:128:128"; > + else > + p = "e-p:32:32-f64:32:64-i64:32:64-f80:32:32"; > + } > return std::string(p); > } > > > > _______________________________________________ > llvm-commits mailing list > llvm-commits at cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits From evan.cheng at apple.com Tue Sep 4 11:44:42 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Tue, 04 Sep 2007 16:44:42 -0000 Subject: [llvm-commits] [llvm] r41700 - /llvm/trunk/lib/Target/X86/X86Subtarget.h Message-ID: <200709041644.l84Gigat000652@zion.cs.uiuc.edu> Author: evancheng Date: Tue Sep 4 11:44:41 2007 New Revision: 41700 URL: http://llvm.org/viewvc/llvm-project?rev=41700&view=rev Log: Mac OS X X86-64 ABI is same as the standard. Modified: llvm/trunk/lib/Target/X86/X86Subtarget.h Modified: llvm/trunk/lib/Target/X86/X86Subtarget.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86Subtarget.h?rev=41700&r1=41699&r2=41700&view=diff ============================================================================== --- llvm/trunk/lib/Target/X86/X86Subtarget.h (original) +++ llvm/trunk/lib/Target/X86/X86Subtarget.h Tue Sep 4 11:44:41 2007 @@ -145,12 +145,8 @@ std::string getDataLayout() const { const char *p; - if (is64Bit()) { - if (isTargetDarwin()) - p = "e-p:64:64-f64:32:64-i64:32:64-f80:128:128"; - else - p = "e-p:64:64-f64:64:64-i64:64:64-f80:128:128"; - } + if (is64Bit()) + p = "e-p:64:64-f64:64:64-i64:64:64-f80:128:128"; else { if (isTargetDarwin()) p = "e-p:32:32-f64:32:64-i64:32:64-f80:128:128"; From gordonhenriksen at mac.com Tue Sep 4 11:57:26 2007 From: gordonhenriksen at mac.com (Gordon Henriksen) Date: Tue, 4 Sep 2007 12:57:26 -0400 Subject: [llvm-commits] [llvm-gcc-4.0] r41698 - /llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp In-Reply-To: <200709041614.l84GEv5V031490@zion.cs.uiuc.edu> References: <200709041614.l84GEv5V031490@zion.cs.uiuc.edu> Message-ID: Hm. Did revision 41697 not get mailed, or is it just me? On 2007-09-04, at 12:14, David Greene wrote: > Author: greened > Date: Tue Sep 4 11:14:57 2007 > New Revision: 41698 > > URL: http://llvm.org/viewvc/llvm-project?rev=41698&view=rev > Log: > Update for new GEP interface. > > > Modified: > llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp > > Modified: llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp > URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.0/trunk/gcc/ > llvm-convert.cpp?rev=41698&r1=41697&r2=41698&view=diff > > ====================================================================== > ======== > --- llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp (original) > +++ llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp Tue Sep 4 11:14:57 2007 > @@ -478,7 +478,7 @@ > ConstantInt::get(Type::Int32Ty, FieldNo) > }; > > - Loc = Builder.CreateGEP(Loc, Idxs, 2, "tmp"); > + Loc = Builder.CreateGEP(Loc, Idxs, Idxs + 2, "tmp"); > LocStack.push_back(Loc); > } > void ExitField() { > @@ -1165,8 +1165,9 @@ > if (isPaddingElement(STy, i)) > continue; > Constant *Idx = ConstantInt::get(Type::Int32Ty, i); > - Value *DElPtr = Builder.CreateGEP(DestPtr, Zero, Idx, "tmp"); > - Value *SElPtr = Builder.CreateGEP(SrcPtr, Zero, Idx, "tmp"); > + Value *Idxs[2] = { Zero, Idx }; > + Value *DElPtr = Builder.CreateGEP(DestPtr, Idxs, Idxs + 2, > "tmp"); > + Value *SElPtr = Builder.CreateGEP(SrcPtr, Idxs, Idxs + 2, > "tmp"); > CopyAggregate(DElPtr, SElPtr, isDstVolatile, isSrcVolatile, > Alignment, > Builder); > } > @@ -1175,8 +1176,9 @@ > Constant *Zero = ConstantInt::get(Type::Int32Ty, 0); > for (unsigned i = 0, e = ATy->getNumElements(); i != e; ++i) { > Constant *Idx = ConstantInt::get(Type::Int32Ty, i); > - Value *DElPtr = Builder.CreateGEP(DestPtr, Zero, Idx, "tmp"); > - Value *SElPtr = Builder.CreateGEP(SrcPtr, Zero, Idx, "tmp"); > + Value *Idxs[2] = { Zero, Idx }; > + Value *DElPtr = Builder.CreateGEP(DestPtr, Idxs, Idxs + 2, > "tmp"); > + Value *SElPtr = Builder.CreateGEP(SrcPtr, Idxs, Idxs + 2, > "tmp"); > CopyAggregate(DElPtr, SElPtr, isDstVolatile, isSrcVolatile, > Alignment, > Builder); > } > @@ -1246,14 +1248,18 @@ > Constant *Zero = ConstantInt::get(Type::Int32Ty, 0); > for (unsigned i = 0, e = STy->getNumElements(); i != e; ++i) { > Constant *Idx = ConstantInt::get(Type::Int32Ty, i); > - ZeroAggregate(Builder.CreateGEP(DestPtr, Zero, Idx, "tmp"), > Builder); > + Value *Idxs[2] = { Zero, Idx }; > + ZeroAggregate(Builder.CreateGEP(DestPtr, Idxs, Idxs + 2, > "tmp"), > + Builder); > } > } else { > const ArrayType *ATy = cast(ElTy); > Constant *Zero = ConstantInt::get(Type::Int32Ty, 0); > for (unsigned i = 0, e = ATy->getNumElements(); i != e; ++i) { > Constant *Idx = ConstantInt::get(Type::Int32Ty, i); > - ZeroAggregate(Builder.CreateGEP(DestPtr, Zero, Idx, "tmp"), > Builder); > + Value *Idxs[2] = { Zero, Idx }; > + ZeroAggregate(Builder.CreateGEP(DestPtr, Idxs, Idxs + 2, > "tmp"), > + Builder); > } > } > } > @@ -2708,8 +2714,9 @@ > if (cast(Loc->getType())->getElementType() != > StructTy) > // This always deals with pointer types so BitCast is > appropriate > Loc = Builder.CreateBitCast(Loc, PointerType::get > (StructTy), "tmp"); > - > - LocStack.push_back(Builder.CreateGEP(Loc, Zero, FIdx, "tmp")); > + > + Value *Idxs[2] = { Zero, FIdx }; > + LocStack.push_back(Builder.CreateGEP(Loc, Idxs, Idxs + 2, > "tmp")); > } > void ExitField() { > LocStack.pop_back(); > @@ -4973,23 +4980,27 @@ > Value *SrcComplex, bool > isVolatile) { > Value *I0 = ConstantInt::get(Type::Int32Ty, 0); > Value *I1 = ConstantInt::get(Type::Int32Ty, 1); > + Value *Idxs[2] = { I0, I0 }; > > - Value *RealPtr = Builder.CreateGEP(SrcComplex, I0, I0, "real"); > + Value *RealPtr = Builder.CreateGEP(SrcComplex, Idxs, Idxs + 2, > "real"); > Real = Builder.CreateLoad(RealPtr, isVolatile, "real"); > - > - Value *ImagPtr = Builder.CreateGEP(SrcComplex, I0, I1, "real"); > + > + Idxs[1] = I1; > + Value *ImagPtr = Builder.CreateGEP(SrcComplex, Idxs, Idxs + 2, > "real"); > Imag = Builder.CreateLoad(ImagPtr, isVolatile, "imag"); > } > > void TreeToLLVM::EmitStoreToComplex(Value *DestComplex, Value *Real, > Value *Imag, bool isVolatile) { > Value *I0 = ConstantInt::get(Type::Int32Ty, 0); > - Value *I1 = ConstantInt::get(Type::Int32Ty, 1); > - > - Value *RealPtr = Builder.CreateGEP(DestComplex, I0, I0, "real"); > + Value *I1 = ConstantInt::get(Type::Int32Ty, 1); > + Value *Idxs[2] = { I0, I0 }; > + > + Value *RealPtr = Builder.CreateGEP(DestComplex, Idxs, Idxs + 2, > "real"); > Builder.CreateStore(Real, RealPtr, isVolatile); > > - Value *ImagPtr = Builder.CreateGEP(DestComplex, I0, I1, "real"); > + Idxs[1] = I1; > + Value *ImagPtr = Builder.CreateGEP(DestComplex, Idxs, Idxs + 2, > "real"); > Builder.CreateStore(Imag, ImagPtr, isVolatile); > } > > @@ -5198,8 +5209,8 @@ > > // If this is an index into an LLVM array, codegen as a GEP. > if (isArrayCompatible(ArrayType)) { > - Value *Ptr = Builder.CreateGEP(ArrayAddr,ConstantInt::get > (Type::Int32Ty, 0), > - IndexVal, "tmp"); > + Value *Idxs[2] = { ConstantInt::get(Type::Int32Ty, 0), > IndexVal }; > + Value *Ptr = Builder.CreateGEP(ArrayAddr, Idxs, Idxs + 2, "tmp"); > return BitCastToType(Ptr, PointerType::get(ConvertType > (TREE_TYPE(exp)))); > } > > @@ -5282,9 +5293,8 @@ > uint32_t MemberIndex = CI->getZExtValue(); > assert(MemberIndex < StructTy->getNumContainedTypes() && > "Field Idx out of range!"); > - FieldPtr = Builder.CreateGEP(StructAddrLV.Ptr, > - Constant::getNullValue > (Type::Int32Ty), CI, > - "tmp"); > + Value *Idxs[2] = { Constant::getNullValue(Type::Int32Ty), CI }; > + FieldPtr = Builder.CreateGEP(StructAddrLV.Ptr, Idxs, Idxs + 2, > "tmp"); > > // Now that we did an offset from the start of the struct, > subtract off > // the offset from BitStart. > @@ -5435,9 +5445,9 @@ > LValue Ptr = EmitLV(TREE_OPERAND(exp, 0)); > assert(!Ptr.isBitfield() && "BIT_FIELD_REF operands cannot be > bitfields!"); > > - return LValue(Builder.CreateGEP(Ptr.Ptr, > - ConstantInt::get(Type::Int32Ty, 0), > - ConstantInt::get(Type::Int32Ty, > Idx), "tmp")); > + Value *Idxs[2] = { ConstantInt::get(Type::Int32Ty, 0), > + ConstantInt::get(Type::Int32Ty, Idx) }; > + return LValue(Builder.CreateGEP(Ptr.Ptr, Idxs, Idxs + 2, "tmp")); > } > > LValue TreeToLLVM::EmitLV_VIEW_CONVERT_EXPR(tree exp) { > > > _______________________________________________ > llvm-commits mailing list > llvm-commits at cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits ? Gordon -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20070904/4cfae00f/attachment.html From greened at obbligato.org Tue Sep 4 12:00:44 2007 From: greened at obbligato.org (David Greene) Date: Tue, 04 Sep 2007 17:00:44 -0000 Subject: [llvm-commits] [llvm] r41702 - /llvm/trunk/tools/llvm2cpp/CppWriter.cpp Message-ID: <200709041700.l84H0jHl001711@zion.cs.uiuc.edu> Author: greened Date: Tue Sep 4 12:00:44 2007 New Revision: 41702 URL: http://llvm.org/viewvc/llvm-project?rev=41702&view=rev Log: Fix typo. Modified: llvm/trunk/tools/llvm2cpp/CppWriter.cpp Modified: llvm/trunk/tools/llvm2cpp/CppWriter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm2cpp/CppWriter.cpp?rev=41702&r1=41701&r2=41702&view=diff ============================================================================== --- llvm/trunk/tools/llvm2cpp/CppWriter.cpp (original) +++ llvm/trunk/tools/llvm2cpp/CppWriter.cpp Tue Sep 4 12:00:44 2007 @@ -788,7 +788,7 @@ << " = ConstantExpr::getGetElementPtr(" << getCppName(CE->getOperand(0)) << ", " << constName << "_indices.begin(), " - << constName << "_indices.end(), " + << constName << "_indices.end()" << " );"; } else if (CE->isCast()) { printConstant(CE->getOperand(0)); From greened at obbligato.org Tue Sep 4 10:46:09 2007 From: greened at obbligato.org (David Greene) Date: Tue, 04 Sep 2007 15:46:09 -0000 Subject: [llvm-commits] [llvm] r41697 - in /llvm/trunk: include/llvm/ include/llvm/Support/ lib/AsmParser/ lib/Bitcode/Reader/ lib/Transforms/IPO/ lib/Transforms/Scalar/ lib/Transforms/Utils/ lib/VMCore/ tools/llvm-upgrade/ tools/llvm2cpp/ Message-ID: <200709041546.l84FkAJK030048@zion.cs.uiuc.edu> Author: greened Date: Tue Sep 4 10:46:09 2007 New Revision: 41697 URL: http://llvm.org/viewvc/llvm-project?rev=41697&view=rev Log: Update GEP constructors to use an iterator interface to fix GLIBCXX_DEBUG issues. Modified: llvm/trunk/include/llvm/Instructions.h llvm/trunk/include/llvm/Support/LLVMBuilder.h llvm/trunk/lib/AsmParser/llvmAsmParser.y llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp llvm/trunk/lib/Transforms/IPO/ArgumentPromotion.cpp llvm/trunk/lib/Transforms/IPO/GlobalOpt.cpp llvm/trunk/lib/Transforms/Scalar/GVNPRE.cpp llvm/trunk/lib/Transforms/Scalar/IndVarSimplify.cpp llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp llvm/trunk/lib/Transforms/Scalar/LowerGC.cpp llvm/trunk/lib/Transforms/Scalar/LowerPacked.cpp llvm/trunk/lib/Transforms/Scalar/ScalarReplAggregates.cpp llvm/trunk/lib/Transforms/Utils/CodeExtractor.cpp llvm/trunk/lib/Transforms/Utils/LowerInvoke.cpp llvm/trunk/lib/VMCore/ConstantFold.cpp llvm/trunk/lib/VMCore/ConstantFold.h llvm/trunk/lib/VMCore/Constants.cpp llvm/trunk/lib/VMCore/Instructions.cpp llvm/trunk/lib/VMCore/Verifier.cpp llvm/trunk/tools/llvm-upgrade/UpgradeParser.y llvm/trunk/tools/llvm2cpp/CppWriter.cpp Modified: llvm/trunk/include/llvm/Instructions.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Instructions.h?rev=41697&r1=41696&r2=41697&view=diff ============================================================================== --- llvm/trunk/include/llvm/Instructions.h (original) +++ llvm/trunk/include/llvm/Instructions.h Tue Sep 4 10:46:09 2007 @@ -367,6 +367,14 @@ // GetElementPtrInst Class //===----------------------------------------------------------------------===// +// checkType - Simple wrapper function to give a better assertion failure +// message on bad indexes for a gep instruction. +// +static inline const Type *checkType(const Type *Ty) { + assert(Ty && "Invalid GetElementPtrInst indices for type!"); + return Ty; +} + /// GetElementPtrInst - an instruction for type-safe pointer arithmetic to /// access elements of arrays and structs /// @@ -380,28 +388,94 @@ OL[i].init(GEPIOL[i], this); } void init(Value *Ptr, Value* const *Idx, unsigned NumIdx); - void init(Value *Ptr, Value *Idx0, Value *Idx1); void init(Value *Ptr, Value *Idx); + + template + void init(Value *Ptr, InputIterator IdxBegin, InputIterator IdxEnd, + const std::string &Name, + // This argument ensures that we have an iterator we can + // do arithmetic on in constant time + std::random_access_iterator_tag) { + typename std::iterator_traits::difference_type NumIdx = + std::distance(IdxBegin, IdxEnd); + + if (NumIdx > 0) { + // This requires that the itoerator points to contiguous memory. + init(Ptr, &*IdxBegin, NumIdx); + } + else { + init(Ptr, 0, NumIdx); + } + + setName(Name); + } + + /// getIndexedType - Returns the type of the element that would be loaded with + /// a load instruction with the specified parameters. + /// + /// A null type is returned if the indices are invalid for the specified + /// pointer type. + /// + static const Type *getIndexedType(const Type *Ptr, + Value* const *Idx, unsigned NumIdx, + bool AllowStructLeaf = false); + + template + static const Type *getIndexedType(const Type *Ptr, + InputIterator IdxBegin, + InputIterator IdxEnd, + bool AllowStructLeaf, + // This argument ensures that we + // have an iterator we can do + // arithmetic on in constant time + std::random_access_iterator_tag) { + typename std::iterator_traits::difference_type NumIdx = + std::distance(IdxBegin, IdxEnd); + + if (NumIdx > 0) { + // This requires that the iterator points to contiguous memory. + return(getIndexedType(Ptr, (Value *const *)&*IdxBegin, NumIdx, + AllowStructLeaf)); + } + else { + return(getIndexedType(Ptr, (Value *const*)0, NumIdx, AllowStructLeaf)); + } + } + public: /// Constructors - Create a getelementptr instruction with a base pointer an /// list of indices. The first ctor can optionally insert before an existing /// instruction, the second appends the new instruction to the specified /// BasicBlock. - GetElementPtrInst(Value *Ptr, Value* const *Idx, unsigned NumIdx, - const std::string &Name = "", Instruction *InsertBefore =0); - GetElementPtrInst(Value *Ptr, Value* const *Idx, unsigned NumIdx, - const std::string &Name, BasicBlock *InsertAtEnd); - + template + GetElementPtrInst(Value *Ptr, InputIterator IdxBegin, + InputIterator IdxEnd, + const std::string &Name = "", + Instruction *InsertBefore =0) + : Instruction(PointerType::get( + checkType(getIndexedType(Ptr->getType(), + IdxBegin, IdxEnd, true))), + GetElementPtr, 0, 0, InsertBefore) { + init(Ptr, IdxBegin, IdxEnd, Name, + typename std::iterator_traits::iterator_category()); + } + template + GetElementPtrInst(Value *Ptr, InputIterator IdxBegin, InputIterator IdxEnd, + const std::string &Name, BasicBlock *InsertAtEnd) + : Instruction(PointerType::get( + checkType(getIndexedType(Ptr->getType(), + IdxBegin, IdxEnd, true))), + GetElementPtr, 0, 0, InsertAtEnd) { + init(Ptr, IdxBegin, IdxEnd, Name, + typename std::iterator_traits::iterator_category()); + } + /// Constructors - These two constructors are convenience methods because one /// and two index getelementptr instructions are so common. GetElementPtrInst(Value *Ptr, Value *Idx, const std::string &Name = "", Instruction *InsertBefore =0); GetElementPtrInst(Value *Ptr, Value *Idx, const std::string &Name, BasicBlock *InsertAtEnd); - GetElementPtrInst(Value *Ptr, Value *Idx0, Value *Idx1, - const std::string &Name = "", Instruction *InsertBefore =0); - GetElementPtrInst(Value *Ptr, Value *Idx0, Value *Idx1, - const std::string &Name, BasicBlock *InsertAtEnd); ~GetElementPtrInst(); virtual GetElementPtrInst *clone() const; @@ -417,12 +491,15 @@ /// A null type is returned if the indices are invalid for the specified /// pointer type. /// + template static const Type *getIndexedType(const Type *Ptr, - Value* const *Idx, unsigned NumIdx, - bool AllowStructLeaf = false); - - static const Type *getIndexedType(const Type *Ptr, Value *Idx0, Value *Idx1, - bool AllowStructLeaf = false); + InputIterator IdxBegin, + InputIterator IdxEnd, + bool AllowStructLeaf = false) { + return(getIndexedType(Ptr, IdxBegin, IdxEnd, AllowStructLeaf, + typename std::iterator_traits:: + iterator_category())); + } static const Type *getIndexedType(const Type *Ptr, Value *Idx); inline op_iterator idx_begin() { return op_begin()+1; } Modified: llvm/trunk/include/llvm/Support/LLVMBuilder.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/LLVMBuilder.h?rev=41697&r1=41696&r2=41697&view=diff ============================================================================== --- llvm/trunk/include/llvm/Support/LLVMBuilder.h (original) +++ llvm/trunk/include/llvm/Support/LLVMBuilder.h Tue Sep 4 10:46:09 2007 @@ -217,16 +217,13 @@ StoreInst *CreateStore(Value *Val, Value *Ptr, bool isVolatile = false) { return Insert(new StoreInst(Val, Ptr, isVolatile)); } - GetElementPtrInst *CreateGEP(Value *Ptr, Value* const *Idx, unsigned NumIdx, - const char *Name = "") { - return Insert(new GetElementPtrInst(Ptr, Idx, NumIdx, Name)); + template + GetElementPtrInst *CreateGEP(Value *Ptr, InputIterator IdxBegin, + InputIterator IdxEnd, const char *Name = "") { + return(Insert(new GetElementPtrInst(Ptr, IdxBegin, IdxEnd, Name))); } GetElementPtrInst *CreateGEP(Value *Ptr, Value *Idx, const char *Name = "") { - return Insert(new GetElementPtrInst(Ptr, &Idx, 1, Name)); - } - GetElementPtrInst *CreateGEP(Value *Ptr, Value *Idx0, Value *Idx1, - const char *Name = "") { - return Insert(new GetElementPtrInst(Ptr, Idx0, Idx1, Name)); + return Insert(new GetElementPtrInst(Ptr, Idx, Name)); } //===--------------------------------------------------------------------===// Modified: llvm/trunk/lib/AsmParser/llvmAsmParser.y URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/AsmParser/llvmAsmParser.y?rev=41697&r1=41696&r2=41697&view=diff ============================================================================== --- llvm/trunk/lib/AsmParser/llvmAsmParser.y (original) +++ llvm/trunk/lib/AsmParser/llvmAsmParser.y Tue Sep 4 10:46:09 2007 @@ -1886,7 +1886,7 @@ GEN_ERROR("GetElementPtr requires a pointer operand"); const Type *IdxTy = - GetElementPtrInst::getIndexedType($3->getType(), &(*$4)[0], $4->size(), + GetElementPtrInst::getIndexedType($3->getType(), $4->begin(), $4->end(), true); if (!IdxTy) GEN_ERROR("Index list invalid for constant getelementptr"); @@ -3064,12 +3064,12 @@ if (!isa($2->get())) GEN_ERROR("getelementptr insn requires pointer operand"); - if (!GetElementPtrInst::getIndexedType(*$2, &(*$4)[0], $4->size(), true)) + if (!GetElementPtrInst::getIndexedType(*$2, $4->begin(), $4->end(), true)) GEN_ERROR("Invalid getelementptr indices for type '" + (*$2)->getDescription()+ "'"); Value* tmpVal = getVal(*$2, $3); CHECK_FOR_ERROR - $$ = new GetElementPtrInst(tmpVal, &(*$4)[0], $4->size()); + $$ = new GetElementPtrInst(tmpVal, $4->begin(), $4->end()); delete $2; delete $4; }; Modified: llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp?rev=41697&r1=41696&r2=41697&view=diff ============================================================================== --- llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp (original) +++ llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp Tue Sep 4 10:46:09 2007 @@ -1234,7 +1234,7 @@ GEPIdx.push_back(Op); } - I = new GetElementPtrInst(BasePtr, &GEPIdx[0], GEPIdx.size()); + I = new GetElementPtrInst(BasePtr, GEPIdx.begin(), GEPIdx.end()); break; } Modified: llvm/trunk/lib/Transforms/IPO/ArgumentPromotion.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/ArgumentPromotion.cpp?rev=41697&r1=41696&r2=41697&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/IPO/ArgumentPromotion.cpp (original) +++ llvm/trunk/lib/Transforms/IPO/ArgumentPromotion.cpp Tue Sep 4 10:46:09 2007 @@ -376,8 +376,8 @@ for (ScalarizeTable::iterator SI = ArgIndices.begin(), E = ArgIndices.end(); SI != E; ++SI) Params.push_back(GetElementPtrInst::getIndexedType(I->getType(), - &(*SI)[0], - SI->size())); + SI->begin(), + SI->end())); if (ArgIndices.size() == 1 && ArgIndices.begin()->empty()) ++NumArgumentsPromoted; @@ -428,7 +428,7 @@ Value *V = *AI; LoadInst *OrigLoad = OriginalLoads[*SI]; if (!SI->empty()) { - V = new GetElementPtrInst(V, &(*SI)[0], SI->size(), + V = new GetElementPtrInst(V, SI->begin(), SI->end(), V->getName()+".idx", Call); AA.copyValue(OrigLoad->getOperand(0), V); } Modified: llvm/trunk/lib/Transforms/IPO/GlobalOpt.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/GlobalOpt.cpp?rev=41697&r1=41696&r2=41697&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/IPO/GlobalOpt.cpp (original) +++ llvm/trunk/lib/Transforms/IPO/GlobalOpt.cpp Tue Sep 4 10:46:09 2007 @@ -464,7 +464,7 @@ Idxs.push_back(NullInt); for (unsigned i = 3, e = GEPI->getNumOperands(); i != e; ++i) Idxs.push_back(GEPI->getOperand(i)); - NewPtr = new GetElementPtrInst(NewPtr, &Idxs[0], Idxs.size(), + NewPtr = new GetElementPtrInst(NewPtr, Idxs.begin(), Idxs.end(), GEPI->getName()+"."+utostr(Val), GEPI); } GEP->replaceAllUsesWith(NewPtr); @@ -698,7 +698,7 @@ MI->getAlignment(), MI->getName(), MI); Value* Indices[2]; Indices[0] = Indices[1] = Constant::getNullValue(Type::Int32Ty); - Value *NewGEP = new GetElementPtrInst(NewMI, Indices, 2, + Value *NewGEP = new GetElementPtrInst(NewMI, Indices, Indices + 2, NewMI->getName()+".el0", MI); MI->replaceAllUsesWith(NewGEP); MI->eraseFromParent(); @@ -926,7 +926,7 @@ GEPIdx.push_back(GEPI->getOperand(1)); GEPIdx.append(GEPI->op_begin()+3, GEPI->op_end()); - Value *NGEPI = new GetElementPtrInst(NewPtr, &GEPIdx[0], GEPIdx.size(), + Value *NGEPI = new GetElementPtrInst(NewPtr, GEPIdx.begin(), GEPIdx.end(), GEPI->getName(), GEPI); GEPI->replaceAllUsesWith(NGEPI); GEPI->eraseFromParent(); Modified: llvm/trunk/lib/Transforms/Scalar/GVNPRE.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/GVNPRE.cpp?rev=41697&r1=41696&r2=41697&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/Scalar/GVNPRE.cpp (original) +++ llvm/trunk/lib/Transforms/Scalar/GVNPRE.cpp Tue Sep 4 10:46:09 2007 @@ -945,7 +945,7 @@ if (newOp1 != U->getPointerOperand() || changed_idx) { Instruction* newVal = new GetElementPtrInst(newOp1, - &newIdx[0], newIdx.size(), + newIdx.begin(), newIdx.end(), U->getName()+".expr"); uint32_t v = VN.lookup_or_add(newVal); @@ -1675,7 +1675,7 @@ C->getName()+".gvnpre", (*PI)->getTerminator()); else if (GetElementPtrInst* G = dyn_cast(U)) - newVal = new GetElementPtrInst(s1, &sVarargs[0], sVarargs.size(), + newVal = new GetElementPtrInst(s1, sVarargs.begin(), sVarargs.end(), G->getName()+".gvnpre", (*PI)->getTerminator()); Modified: llvm/trunk/lib/Transforms/Scalar/IndVarSimplify.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/IndVarSimplify.cpp?rev=41697&r1=41696&r2=41697&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/Scalar/IndVarSimplify.cpp (original) +++ llvm/trunk/lib/Transforms/Scalar/IndVarSimplify.cpp Tue Sep 4 10:46:09 2007 @@ -178,8 +178,11 @@ Constant *NCE = ConstantExpr::getGetElementPtr(CE->getOperand(0), &CEIdxs[0], CEIdxs.size()); + Value *Idx[2]; + Idx[0] = Constant::getNullValue(Type::Int32Ty); + Idx[1] = NewAdd; GetElementPtrInst *NGEPI = new GetElementPtrInst( - NCE, Constant::getNullValue(Type::Int32Ty), NewAdd, + NCE, Idx, Idx + 2, GEPI->getName(), GEPI); SE->deleteValueFromRecords(GEPI); GEPI->replaceAllUsesWith(NGEPI); Modified: llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp?rev=41697&r1=41696&r2=41697&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp (original) +++ llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp Tue Sep 4 10:46:09 2007 @@ -6564,8 +6564,9 @@ // If we were able to index down into an element, create the GEP // and bitcast the result. This eliminates one bitcast, potentially // two. - Instruction *NGEP = new GetElementPtrInst(OrigBase, &NewIndices[0], - NewIndices.size(), ""); + Instruction *NGEP = new GetElementPtrInst(OrigBase, + NewIndices.begin(), + NewIndices.end(), ""); InsertNewInstBefore(NGEP, CI); NGEP->takeName(GEP); @@ -7057,7 +7058,7 @@ // If we found a path from the src to dest, create the getelementptr now. if (SrcElTy == DstElTy) { SmallVector Idxs(NumZeros+1, ZeroUInt); - return new GetElementPtrInst(Src, &Idxs[0], Idxs.size()); + return new GetElementPtrInst(Src, Idxs.begin(), Idxs.end()); } } @@ -8502,8 +8503,8 @@ } if (!Indices.empty()) - return new GetElementPtrInst(SrcGEPOperands[0], &Indices[0], - Indices.size(), GEP.getName()); + return new GetElementPtrInst(SrcGEPOperands[0], Indices.begin(), + Indices.end(), GEP.getName()); } else if (GlobalValue *GV = dyn_cast(PtrOp)) { // GEP of global variable. If all of the indices for this GEP are @@ -8554,9 +8555,11 @@ if (isa(SrcElTy) && TD->getTypeSize(cast(SrcElTy)->getElementType()) == TD->getTypeSize(ResElTy)) { + Value *Idx[2]; + Idx[0] = Constant::getNullValue(Type::Int32Ty); + Idx[1] = GEP.getOperand(1); Value *V = InsertNewInstBefore( - new GetElementPtrInst(X, Constant::getNullValue(Type::Int32Ty), - GEP.getOperand(1), GEP.getName()), GEP); + new GetElementPtrInst(X, Idx, Idx + 2, GEP.getName()), GEP); // V and GEP are both pointer types --> BitCast return new BitCastInst(V, GEP.getType()); } @@ -8609,9 +8612,11 @@ } // Insert the new GEP instruction. + Value *Idx[2]; + Idx[0] = Constant::getNullValue(Type::Int32Ty); + Idx[1] = NewIdx; Instruction *NewGEP = - new GetElementPtrInst(X, Constant::getNullValue(Type::Int32Ty), - NewIdx, GEP.getName()); + new GetElementPtrInst(X, Idx, Idx + 2, GEP.getName()); NewGEP = InsertNewInstBefore(NewGEP, GEP); // The NewGEP must be pointer typed, so must the old one -> BitCast return new BitCastInst(NewGEP, GEP.getType()); @@ -8651,7 +8656,10 @@ // insert our getelementptr instruction... // Value *NullIdx = Constant::getNullValue(Type::Int32Ty); - Value *V = new GetElementPtrInst(New, NullIdx, NullIdx, + Value *Idx[2]; + Idx[0] = NullIdx; + Idx[1] = NullIdx; + Value *V = new GetElementPtrInst(New, Idx, Idx + 2, New->getName()+".sub", It); // Now make everything use the getelementptr instead of the original Modified: llvm/trunk/lib/Transforms/Scalar/LowerGC.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/LowerGC.cpp?rev=41697&r1=41696&r2=41697&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/Scalar/LowerGC.cpp (original) +++ llvm/trunk/lib/Transforms/Scalar/LowerGC.cpp Tue Sep 4 10:46:09 2007 @@ -242,8 +242,11 @@ Constant *Zero = ConstantInt::get(Type::Int32Ty, 0); Constant *One = ConstantInt::get(Type::Int32Ty, 1); + Value *Idx[2] = { Zero, Zero }; + // Get a pointer to the prev pointer. - Value *PrevPtrPtr = new GetElementPtrInst(AI, Zero, Zero, "prevptrptr", IP); + Value *PrevPtrPtr = new GetElementPtrInst(AI, Idx, Idx + 2, + "prevptrptr", IP); // Load the previous pointer. Value *PrevPtr = new LoadInst(RootChain, "prevptr", IP); @@ -251,7 +254,9 @@ new StoreInst(PrevPtr, PrevPtrPtr, IP); // Set the number of elements in this record. - Value *NumEltsPtr = new GetElementPtrInst(AI, Zero, One, "numeltsptr", IP); + Idx[1] = One; + Value *NumEltsPtr = new GetElementPtrInst(AI, Idx, Idx + 2, + "numeltsptr", IP); new StoreInst(ConstantInt::get(Type::Int32Ty, GCRoots.size()), NumEltsPtr,IP); Value* Par[4]; @@ -267,13 +272,15 @@ // Initialize the meta-data pointer. Par[2] = ConstantInt::get(Type::Int32Ty, i); Par[3] = One; - Value *MetaDataPtr = new GetElementPtrInst(AI, Par, 4, "MetaDataPtr", IP); + Value *MetaDataPtr = new GetElementPtrInst(AI, Par, Par + 4, + "MetaDataPtr", IP); assert(isa(GCRoots[i]->getOperand(2)) && "Must be a constant"); new StoreInst(GCRoots[i]->getOperand(2), MetaDataPtr, IP); // Initialize the root pointer to null on entry to the function. Par[3] = Zero; - Value *RootPtrPtr = new GetElementPtrInst(AI, Par, 4, "RootEntPtr", IP); + Value *RootPtrPtr = new GetElementPtrInst(AI, Par, Par + 4, + "RootEntPtr", IP); new StoreInst(Null, RootPtrPtr, IP); // Each occurrance of the llvm.gcroot intrinsic now turns into an Modified: llvm/trunk/lib/Transforms/Scalar/LowerPacked.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/LowerPacked.cpp?rev=41697&r1=41696&r2=41697&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/Scalar/LowerPacked.cpp (original) +++ llvm/trunk/lib/Transforms/Scalar/LowerPacked.cpp Tue Sep 4 10:46:09 2007 @@ -235,7 +235,7 @@ // Get the pointer Value* val = new GetElementPtrInst(array, - &Idx[0], Idx.size(), + Idx.begin(), Idx.end(), LI.getName() + ".ge." + utostr(i), &LI); @@ -333,7 +333,7 @@ // Generate the indices for getelementptr Idx[1] = ConstantInt::get(Type::Int32Ty,i); Value* val = new GetElementPtrInst(array, - &Idx[0], Idx.size(), + Idx.begin(), Idx.end(), "store.ge." + utostr(i) + ".", &SI); Modified: llvm/trunk/lib/Transforms/Scalar/ScalarReplAggregates.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/ScalarReplAggregates.cpp?rev=41697&r1=41696&r2=41697&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/Scalar/ScalarReplAggregates.cpp (original) +++ llvm/trunk/lib/Transforms/Scalar/ScalarReplAggregates.cpp Tue Sep 4 10:46:09 2007 @@ -319,8 +319,8 @@ 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 = new GetElementPtrInst(AllocaToUse, NewArgs.begin(), + NewArgs.end(), "", GEPI); RepValue->takeName(GEPI); } @@ -626,8 +626,10 @@ // If this is a memcpy/memmove, emit a GEP of the other element address. Value *OtherElt = 0; if (OtherPtr) { - OtherElt = new GetElementPtrInst(OtherPtr, Zero, - ConstantInt::get(Type::Int32Ty, i), + Value *Idx[2]; + Idx[0] = Zero; + Idx[1] = ConstantInt::get(Type::Int32Ty, i); + OtherElt = new GetElementPtrInst(OtherPtr, Idx, Idx + 2, OtherPtr->getNameStr()+"."+utostr(i), MI); } @@ -829,11 +831,13 @@ SmallVector Indices(GEPI->op_begin()+1, GEPI->op_end()); Indices[1] = Constant::getNullValue(Type::Int32Ty); Value *ZeroIdx = new GetElementPtrInst(GEPI->getOperand(0), - &Indices[0], Indices.size(), + Indices.begin(), + Indices.end(), GEPI->getName()+".0", GEPI); Indices[1] = ConstantInt::get(Type::Int32Ty, 1); Value *OneIdx = new GetElementPtrInst(GEPI->getOperand(0), - &Indices[0], Indices.size(), + Indices.begin(), + Indices.end(), GEPI->getName()+".1", GEPI); // Replace all loads of the variable index GEP with loads from both // indexes and a select. Modified: llvm/trunk/lib/Transforms/Utils/CodeExtractor.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/CodeExtractor.cpp?rev=41697&r1=41696&r2=41697&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/Utils/CodeExtractor.cpp (original) +++ llvm/trunk/lib/Transforms/Utils/CodeExtractor.cpp Tue Sep 4 10:46:09 2007 @@ -294,11 +294,12 @@ for (unsigned i = 0, e = inputs.size(); i != e; ++i) { Value *RewriteVal; if (AggregateArgs) { - Value *Idx0 = Constant::getNullValue(Type::Int32Ty); - Value *Idx1 = ConstantInt::get(Type::Int32Ty, i); + Value *Idx[2]; + Idx[0] = Constant::getNullValue(Type::Int32Ty); + Idx[1] = ConstantInt::get(Type::Int32Ty, i); std::string GEPname = "gep_" + inputs[i]->getName(); TerminatorInst *TI = newFunction->begin()->getTerminator(); - GetElementPtrInst *GEP = new GetElementPtrInst(AI, Idx0, Idx1, + GetElementPtrInst *GEP = new GetElementPtrInst(AI, Idx, Idx+2, GEPname, TI); RewriteVal = new LoadInst(GEP, "load" + GEPname, TI); } else @@ -381,10 +382,11 @@ params.push_back(Struct); for (unsigned i = 0, e = inputs.size(); i != e; ++i) { - Value *Idx0 = Constant::getNullValue(Type::Int32Ty); - Value *Idx1 = ConstantInt::get(Type::Int32Ty, i); + Value *Idx[2]; + Idx[0] = Constant::getNullValue(Type::Int32Ty); + Idx[1] = ConstantInt::get(Type::Int32Ty, i); GetElementPtrInst *GEP = - new GetElementPtrInst(Struct, Idx0, Idx1, + new GetElementPtrInst(Struct, Idx, Idx + 2, "gep_" + StructValues[i]->getName()); codeReplacer->getInstList().push_back(GEP); StoreInst *SI = new StoreInst(StructValues[i], GEP); @@ -406,10 +408,11 @@ for (unsigned i = 0, e = outputs.size(); i != e; ++i) { Value *Output = 0; if (AggregateArgs) { - Value *Idx0 = Constant::getNullValue(Type::Int32Ty); - Value *Idx1 = ConstantInt::get(Type::Int32Ty, FirstOut + i); + Value *Idx[2]; + Idx[0] = Constant::getNullValue(Type::Int32Ty); + Idx[1] = ConstantInt::get(Type::Int32Ty, FirstOut + i); GetElementPtrInst *GEP - = new GetElementPtrInst(Struct, Idx0, Idx1, + = new GetElementPtrInst(Struct, Idx, Idx + 2, "gep_reload_" + outputs[i]->getName()); codeReplacer->getInstList().push_back(GEP); Output = GEP; @@ -506,10 +509,11 @@ if (DominatesDef) { if (AggregateArgs) { - Value *Idx0 = Constant::getNullValue(Type::Int32Ty); - Value *Idx1 = ConstantInt::get(Type::Int32Ty,FirstOut+out); + Value *Idx[2]; + Idx[0] = Constant::getNullValue(Type::Int32Ty); + Idx[1] = ConstantInt::get(Type::Int32Ty,FirstOut+out); GetElementPtrInst *GEP = - new GetElementPtrInst(OAI, Idx0, Idx1, + new GetElementPtrInst(OAI, Idx, Idx + 2, "gep_" + outputs[out]->getName(), NTRet); new StoreInst(outputs[out], GEP, NTRet); Modified: llvm/trunk/lib/Transforms/Utils/LowerInvoke.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/LowerInvoke.cpp?rev=41697&r1=41696&r2=41697&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/Utils/LowerInvoke.cpp (original) +++ llvm/trunk/lib/Transforms/Utils/LowerInvoke.cpp Tue Sep 4 10:46:09 2007 @@ -450,8 +450,8 @@ std::vector Idx; Idx.push_back(Constant::getNullValue(Type::Int32Ty)); Idx.push_back(ConstantInt::get(Type::Int32Ty, 1)); - OldJmpBufPtr = new GetElementPtrInst(JmpBuf, &Idx[0], 2, "OldBuf", - EntryBB->getTerminator()); + OldJmpBufPtr = new GetElementPtrInst(JmpBuf, Idx.begin(), Idx.end(), + "OldBuf", EntryBB->getTerminator()); // Copy the JBListHead to the alloca. Value *OldBuf = new LoadInst(JBListHead, "oldjmpbufptr", true, @@ -489,7 +489,7 @@ "setjmp.cont"); Idx[1] = ConstantInt::get(Type::Int32Ty, 0); - Value *JmpBufPtr = new GetElementPtrInst(JmpBuf, &Idx[0], Idx.size(), + Value *JmpBufPtr = new GetElementPtrInst(JmpBuf, Idx.begin(), Idx.end(), "TheJmpBuf", EntryBB->getTerminator()); Value *SJRet = new CallInst(SetJmpFn, JmpBufPtr, "sjret", @@ -540,7 +540,8 @@ std::vector Idx; Idx.push_back(Constant::getNullValue(Type::Int32Ty)); Idx.push_back(ConstantInt::get(Type::Int32Ty, 0)); - Idx[0] = new GetElementPtrInst(BufPtr, &Idx[0], 2, "JmpBuf", UnwindBlock); + Idx[0] = new GetElementPtrInst(BufPtr, Idx.begin(), Idx.end(), "JmpBuf", + UnwindBlock); Idx[1] = ConstantInt::get(Type::Int32Ty, 1); new CallInst(LongJmpFn, Idx.begin(), Idx.end(), "", UnwindBlock); new UnreachableInst(UnwindBlock); Modified: llvm/trunk/lib/VMCore/ConstantFold.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/ConstantFold.cpp?rev=41697&r1=41696&r2=41697&view=diff ============================================================================== --- llvm/trunk/lib/VMCore/ConstantFold.cpp (original) +++ llvm/trunk/lib/VMCore/ConstantFold.cpp Tue Sep 4 10:46:09 2007 @@ -1350,7 +1350,7 @@ } Constant *llvm::ConstantFoldGetElementPtr(const Constant *C, - Constant* const *Idxs, + Constant* const *Idxs, unsigned NumIdx) { if (NumIdx == 0 || (NumIdx == 1 && Idxs[0]->isNullValue())) @@ -1358,7 +1358,8 @@ if (isa(C)) { const Type *Ty = GetElementPtrInst::getIndexedType(C->getType(), - (Value**)Idxs, NumIdx, + (Value **)Idxs, + (Value **)Idxs+NumIdx, true); assert(Ty != 0 && "Invalid indices for GEP!"); return UndefValue::get(PointerType::get(Ty)); @@ -1374,7 +1375,8 @@ } if (isNull) { const Type *Ty = GetElementPtrInst::getIndexedType(C->getType(), - (Value**)Idxs, NumIdx, + (Value**)Idxs, + (Value**)Idxs+NumIdx, true); assert(Ty != 0 && "Invalid indices for GEP!"); return ConstantPointerNull::get(PointerType::get(Ty)); Modified: llvm/trunk/lib/VMCore/ConstantFold.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/ConstantFold.h?rev=41697&r1=41696&r2=41697&view=diff ============================================================================== --- llvm/trunk/lib/VMCore/ConstantFold.h (original) +++ llvm/trunk/lib/VMCore/ConstantFold.h Tue Sep 4 10:46:09 2007 @@ -19,6 +19,8 @@ #ifndef CONSTANTFOLDING_H #define CONSTANTFOLDING_H +#include + namespace llvm { class Value; class Constant; @@ -46,6 +48,7 @@ Constant *ConstantFoldCompareInstruction(unsigned short predicate, const Constant *C1, const Constant *C2); + Constant *ConstantFoldGetElementPtr(const Constant *C, Constant* const *Idxs, unsigned NumIdx); } // End llvm namespace Modified: llvm/trunk/lib/VMCore/Constants.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/Constants.cpp?rev=41697&r1=41696&r2=41697&view=diff ============================================================================== --- llvm/trunk/lib/VMCore/Constants.cpp (original) +++ llvm/trunk/lib/VMCore/Constants.cpp Tue Sep 4 10:46:09 2007 @@ -1799,7 +1799,7 @@ Constant *ConstantExpr::getGetElementPtrTy(const Type *ReqTy, Constant *C, Value* const *Idxs, unsigned NumIdx) { - assert(GetElementPtrInst::getIndexedType(C->getType(), Idxs, NumIdx, true) && + assert(GetElementPtrInst::getIndexedType(C->getType(), Idxs, Idxs+NumIdx, true) && "GEP indices invalid!"); if (Constant *FC = ConstantFoldGetElementPtr(C, (Constant**)Idxs, NumIdx)) @@ -1821,7 +1821,7 @@ unsigned NumIdx) { // Get the result type of the getelementptr! const Type *Ty = - GetElementPtrInst::getIndexedType(C->getType(), Idxs, NumIdx, true); + GetElementPtrInst::getIndexedType(C->getType(), Idxs, Idxs+NumIdx, true); assert(Ty && "GEP indices invalid!"); return getGetElementPtrTy(PointerType::get(Ty), C, Idxs, NumIdx); } Modified: llvm/trunk/lib/VMCore/Instructions.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/Instructions.cpp?rev=41697&r1=41696&r2=41697&view=diff ============================================================================== --- llvm/trunk/lib/VMCore/Instructions.cpp (original) +++ llvm/trunk/lib/VMCore/Instructions.cpp Tue Sep 4 10:46:09 2007 @@ -864,14 +864,6 @@ // GetElementPtrInst Implementation //===----------------------------------------------------------------------===// -// checkType - Simple wrapper function to give a better assertion failure -// message on bad indexes for a gep instruction. -// -static inline const Type *checkType(const Type *Ty) { - assert(Ty && "Invalid GetElementPtrInst indices for type!"); - return Ty; -} - void GetElementPtrInst::init(Value *Ptr, Value* const *Idx, unsigned NumIdx) { NumOperands = 1+NumIdx; Use *OL = OperandList = new Use[NumOperands]; @@ -881,14 +873,6 @@ OL[i+1].init(Idx[i], this); } -void GetElementPtrInst::init(Value *Ptr, Value *Idx0, Value *Idx1) { - NumOperands = 3; - Use *OL = OperandList = new Use[3]; - OL[0].init(Ptr, this); - OL[1].init(Idx0, this); - OL[2].init(Idx1, this); -} - void GetElementPtrInst::init(Value *Ptr, Value *Idx) { NumOperands = 2; Use *OL = OperandList = new Use[2]; @@ -896,27 +880,6 @@ OL[1].init(Idx, this); } - -GetElementPtrInst::GetElementPtrInst(Value *Ptr, Value* const *Idx, - unsigned NumIdx, - const std::string &Name, Instruction *InBe) -: Instruction(PointerType::get(checkType(getIndexedType(Ptr->getType(), - Idx, NumIdx, true))), - GetElementPtr, 0, 0, InBe) { - init(Ptr, Idx, NumIdx); - setName(Name); -} - -GetElementPtrInst::GetElementPtrInst(Value *Ptr, Value* const *Idx, - unsigned NumIdx, - const std::string &Name, BasicBlock *IAE) -: Instruction(PointerType::get(checkType(getIndexedType(Ptr->getType(), - Idx, NumIdx, true))), - GetElementPtr, 0, 0, IAE) { - init(Ptr, Idx, NumIdx); - setName(Name); -} - GetElementPtrInst::GetElementPtrInst(Value *Ptr, Value *Idx, const std::string &Name, Instruction *InBe) : Instruction(PointerType::get(checkType(getIndexedType(Ptr->getType(),Idx))), @@ -933,24 +896,6 @@ setName(Name); } -GetElementPtrInst::GetElementPtrInst(Value *Ptr, Value *Idx0, Value *Idx1, - const std::string &Name, Instruction *InBe) - : Instruction(PointerType::get(checkType(getIndexedType(Ptr->getType(), - Idx0, Idx1, true))), - GetElementPtr, 0, 0, InBe) { - init(Ptr, Idx0, Idx1); - setName(Name); -} - -GetElementPtrInst::GetElementPtrInst(Value *Ptr, Value *Idx0, Value *Idx1, - const std::string &Name, BasicBlock *IAE) - : Instruction(PointerType::get(checkType(getIndexedType(Ptr->getType(), - Idx0, Idx1, true))), - GetElementPtr, 0, 0, IAE) { - init(Ptr, Idx0, Idx1); - setName(Name); -} - GetElementPtrInst::~GetElementPtrInst() { delete[] OperandList; } @@ -999,24 +944,6 @@ return CurIdx == NumIdx ? Ptr : 0; } -const Type* GetElementPtrInst::getIndexedType(const Type *Ptr, - Value *Idx0, Value *Idx1, - bool AllowCompositeLeaf) { - const PointerType *PTy = dyn_cast(Ptr); - if (!PTy) return 0; // Type isn't a pointer type! - - // Check the pointer index. - if (!PTy->indexValid(Idx0)) return 0; - - const CompositeType *CT = dyn_cast(PTy->getElementType()); - if (!CT || !CT->indexValid(Idx1)) return 0; - - const Type *ElTy = CT->getTypeAtIndex(Idx1); - if (AllowCompositeLeaf || ElTy->isFirstClassType()) - return ElTy; - return 0; -} - const Type* GetElementPtrInst::getIndexedType(const Type *Ptr, Value *Idx) { const PointerType *PTy = dyn_cast(Ptr); if (!PTy) return 0; // Type isn't a pointer type! Modified: llvm/trunk/lib/VMCore/Verifier.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/Verifier.cpp?rev=41697&r1=41696&r2=41697&view=diff ============================================================================== --- llvm/trunk/lib/VMCore/Verifier.cpp (original) +++ llvm/trunk/lib/VMCore/Verifier.cpp Tue Sep 4 10:46:09 2007 @@ -913,7 +913,7 @@ SmallVector Idxs(GEP.idx_begin(), GEP.idx_end()); const Type *ElTy = GetElementPtrInst::getIndexedType(GEP.getOperand(0)->getType(), - &Idxs[0], Idxs.size(), true); + Idxs.begin(), Idxs.end(), true); Assert1(ElTy, "Invalid indices for GEP pointer type!", &GEP); Assert2(isa(GEP.getType()) && cast(GEP.getType())->getElementType() == ElTy, Modified: llvm/trunk/tools/llvm-upgrade/UpgradeParser.y URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-upgrade/UpgradeParser.y?rev=41697&r1=41696&r2=41697&view=diff ============================================================================== --- llvm/trunk/tools/llvm-upgrade/UpgradeParser.y (original) +++ llvm/trunk/tools/llvm-upgrade/UpgradeParser.y Tue Sep 4 10:46:09 2007 @@ -1533,8 +1533,8 @@ } } Result.push_back(Index); - Ty = GetElementPtrInst::getIndexedType(PTy, (Value**)&Result[0], - Result.size(),true); + Ty = GetElementPtrInst::getIndexedType(PTy, Result.begin(), + Result.end(),true); if (!Ty) error("Index list invalid for constant getelementptr"); } @@ -1579,7 +1579,8 @@ } } Result.push_back(Index); - Ty = GetElementPtrInst::getIndexedType(PTy, &Result[0], Result.size(),true); + Ty = GetElementPtrInst::getIndexedType(PTy, Result.begin(), + Result.end(),true); if (!Ty) error("Index list invalid for constant getelementptr"); } @@ -3890,7 +3891,7 @@ upgradeGEPInstIndices(Ty, $4, VIndices); Value* tmpVal = getVal(Ty, $3); - $$.I = new GetElementPtrInst(tmpVal, &VIndices[0], VIndices.size()); + $$.I = new GetElementPtrInst(tmpVal, VIndices.begin(), VIndices.end()); ValueInfo VI; VI.V = tmpVal; VI.S.copy($2.S); $$.S.copy(getElementSign(VI, VIndices)); delete $2.PAT; Modified: llvm/trunk/tools/llvm2cpp/CppWriter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm2cpp/CppWriter.cpp?rev=41697&r1=41696&r2=41697&view=diff ============================================================================== --- llvm/trunk/tools/llvm2cpp/CppWriter.cpp (original) +++ llvm/trunk/tools/llvm2cpp/CppWriter.cpp Tue Sep 4 10:46:09 2007 @@ -787,7 +787,8 @@ Out << "Constant* " << constName << " = ConstantExpr::getGetElementPtr(" << getCppName(CE->getOperand(0)) << ", " - << "&" << constName << "_indices[0], " << CE->getNumOperands() - 1 + << constName << "_indices.begin(), " + << constName << "_indices.end(), " << " );"; } else if (CE->isCast()) { printConstant(CE->getOperand(0)); @@ -1253,8 +1254,8 @@ nl(Out); } Out << "Instruction* " << iName << " = new GetElementPtrInst(" - << opNames[0] << ", &" << iName << "_indices[0], " - << gep->getNumOperands() - 1; + << opNames[0] << ", " << iName << "_indices.begin(), " + << iName << "_indices.end()"; } Out << ", \""; printEscapedString(gep->getName()); From greened at obbligato.org Tue Sep 4 12:15:07 2007 From: greened at obbligato.org (David Greene) Date: Tue, 04 Sep 2007 17:15:07 -0000 Subject: [llvm-commits] [llvm] r41703 - /llvm/trunk/tools/llvm2cpp/CppWriter.cpp Message-ID: <200709041715.l84HF7JV002328@zion.cs.uiuc.edu> Author: greened Date: Tue Sep 4 12:15:07 2007 New Revision: 41703 URL: http://llvm.org/viewvc/llvm-project?rev=41703&view=rev Log: Revert this because the interface hasn't been updated yet. Modified: llvm/trunk/tools/llvm2cpp/CppWriter.cpp Modified: llvm/trunk/tools/llvm2cpp/CppWriter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm2cpp/CppWriter.cpp?rev=41703&r1=41702&r2=41703&view=diff ============================================================================== --- llvm/trunk/tools/llvm2cpp/CppWriter.cpp (original) +++ llvm/trunk/tools/llvm2cpp/CppWriter.cpp Tue Sep 4 12:15:07 2007 @@ -787,8 +787,8 @@ Out << "Constant* " << constName << " = ConstantExpr::getGetElementPtr(" << getCppName(CE->getOperand(0)) << ", " - << constName << "_indices.begin(), " - << constName << "_indices.end()" + << "&" << constName << "_indices[0], " + << constName << "_indices.size()" << " );"; } else if (CE->isCast()) { printConstant(CE->getOperand(0)); From dalej at apple.com Tue Sep 4 12:32:27 2007 From: dalej at apple.com (Dale Johannesen) Date: Tue, 04 Sep 2007 17:32:27 -0000 Subject: [llvm-commits] [llvm] r41705 - /llvm/trunk/include/llvm/ADT/StringExtras.h Message-ID: <200709041732.l84HWRxv003478@zion.cs.uiuc.edu> Author: johannes Date: Tue Sep 4 12:32:27 2007 New Revision: 41705 URL: http://llvm.org/viewvc/llvm-project?rev=41705&view=rev Log: fix reversal bug in preceding checkin Modified: llvm/trunk/include/llvm/ADT/StringExtras.h Modified: llvm/trunk/include/llvm/ADT/StringExtras.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/StringExtras.h?rev=41705&r1=41704&r2=41705&view=diff ============================================================================== --- llvm/trunk/include/llvm/ADT/StringExtras.h (original) +++ llvm/trunk/include/llvm/ADT/StringExtras.h Tue Sep 4 12:32:27 2007 @@ -94,9 +94,9 @@ } static inline std::string ftostr(const APFloat& V) { - if (&V.getSemantics() == &APFloat::IEEEsingle) + if (&V.getSemantics() == &APFloat::IEEEdouble) return ftostr(V.convertToDouble()); - else if (&V.getSemantics() == &APFloat::IEEEdouble) + else if (&V.getSemantics() == &APFloat::IEEEsingle) return ftostr((double)V.convertToFloat()); return 0; // error } From espindola at google.com Tue Sep 4 12:42:07 2007 From: espindola at google.com (Rafael Espindola) Date: Tue, 4 Sep 2007 18:42:07 +0100 Subject: [llvm-commits] [llvm] r41642 - /llvm/trunk/lib/Target/X86/X86Subtarget.h In-Reply-To: <5A299083-2522-4E73-A1A1-47500DE5E794@apple.com> References: <200708311223.l7VCNxKR021042@zion.cs.uiuc.edu> <5A299083-2522-4E73-A1A1-47500DE5E794@apple.com> Message-ID: <38a0d8450709041042u60b9580cjeb87cd8061eadca5@mail.gmail.com> On 04/09/07, Evan Cheng wrote: > Hi Rafael, > > Thanks for catching this! > > As far as I know Darwin follows the ABI exactly. I'll fix that. BTW, > is it possible for you to add a test case? In a sense, I have one: test/CodeGen/X86/byval2.ll If (Align & 3) != 0 the MEMCPY node will not be inlined. Once I implement call frame alignment information, this will no longer depend on the ABI alignment. I am not sure how to write a more direct test. > Thanks, > > Evan Cheers, -- Rafael Avila de Espindola Google Ireland Ltd. Gordon House Barrow Street Dublin 4 Ireland Registered in Dublin, Ireland Registration Number: 368047 From dag at cray.com Tue Sep 4 12:01:50 2007 From: dag at cray.com (David Greene) Date: Tue, 4 Sep 2007 12:01:50 -0500 Subject: [llvm-commits] [llvm-gcc-4.0] r41698 - /llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp In-Reply-To: References: <200709041614.l84GEv5V031490@zion.cs.uiuc.edu> Message-ID: <200709041201.50731.dag@cray.com> On Tuesday 04 September 2007 11:57, Gordon Henriksen wrote: > Hm. Did revision 41697 not get mailed, or is it just me? It did not get mailed. Dunno why. I just committed a fix to that revision, BTW. -Dave From gordonhenriksen at mac.com Tue Sep 4 13:19:02 2007 From: gordonhenriksen at mac.com (Gordon Henriksen) Date: Tue, 4 Sep 2007 14:19:02 -0400 Subject: [llvm-commits] Garbage collection patch series In-Reply-To: <13858288-5288-498B-A3A0-2E464219BD3A@mac.com> References: <13858288-5288-498B-A3A0-2E464219BD3A@mac.com> Message-ID: <0E95A4AE-E087-4D77-802F-E193795B221F@mac.com> These are already starting to bitrot. :) I'll be maintaining and bugfixing them, but won't be re-slicing the patches and spamming the list continuously. Please let me know if you want an up-to-date version. ? Gordon On 2007-09-04, at 02:18, Gordon Henriksen wrote: > As followups to this post, I will post a series of six patches > which significantly improve LLVM's garbage collection support. > These patches are not all fully independent, but I have broken them > up into more digestible units for review. > > ? gc-1-registry.patch (+288 lines) > My previous Registry.h header, as well as Collectors.h, which is > the registry for dynamically-loaded garbage collectors. > > ? gc-2-metadata.patch (+303 lines) > CollectorMetadata is the data structure populated by back-ends > during code-generation. > > ? gc-3-collector.patch (+401 lines) > Collector is the base class for garbage collector code generators. > It provides its subclasses with both static configuration and > callbacks through which they can exert its will upon all relevant > stages of code generation. > > ? gc-4-integration.patch (+113, -17 lines) > In this patch, Collector winds its tendrils throughout the > compiler. Overhead should be minimal when disabled. > > ? gc-5-shadowstack.patch (+59, -406 lines) > With this patch, the LowerGC transformation is adapted to become > the ShadowStackCollector. > > ? gc-6-ocaml.patch (+190 lines) > Finally, the new OcamlCollector emits the Ocaml frametable data > structure and related symbols. > > Hopefully I can get feedback so that this can be rolled into 2.2 > early in the development cycle. -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20070904/b17fc503/attachment.html From greened at obbligato.org Tue Sep 4 13:46:50 2007 From: greened at obbligato.org (David Greene) Date: Tue, 04 Sep 2007 18:46:50 -0000 Subject: [llvm-commits] [llvm] r41706 - in /llvm/trunk: lib/AsmParser/llvmAsmParser.cpp.cvs lib/AsmParser/llvmAsmParser.h.cvs lib/AsmParser/llvmAsmParser.y.cvs tools/llvm-upgrade/UpgradeParser.cpp.cvs tools/llvm-upgrade/UpgradeParser.h.cvs tools/llvm-upgrade/UpgradeParser.y.cvs Message-ID: <200709041846.l84Ikpon008063@zion.cs.uiuc.edu> Author: greened Date: Tue Sep 4 13:46:50 2007 New Revision: 41706 URL: http://llvm.org/viewvc/llvm-project?rev=41706&view=rev Log: Update generated files. Modified: llvm/trunk/lib/AsmParser/llvmAsmParser.cpp.cvs llvm/trunk/lib/AsmParser/llvmAsmParser.h.cvs llvm/trunk/lib/AsmParser/llvmAsmParser.y.cvs llvm/trunk/tools/llvm-upgrade/UpgradeParser.cpp.cvs llvm/trunk/tools/llvm-upgrade/UpgradeParser.h.cvs llvm/trunk/tools/llvm-upgrade/UpgradeParser.y.cvs Modified: llvm/trunk/lib/AsmParser/llvmAsmParser.cpp.cvs URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/AsmParser/llvmAsmParser.cpp.cvs?rev=41706&r1=41705&r2=41706&view=diff ============================================================================== --- llvm/trunk/lib/AsmParser/llvmAsmParser.cpp.cvs (original) +++ llvm/trunk/lib/AsmParser/llvmAsmParser.cpp.cvs Tue Sep 4 13:46:50 2007 @@ -1,161 +1,361 @@ +/* A Bison parser, made by GNU Bison 1.875c. */ -/* A Bison parser, made from /Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y - by GNU Bison version 1.28 */ +/* Skeleton parser for Yacc-like parsing with Bison, + Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003 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., 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. */ + +/* 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 + +/* Skeleton name. */ +#define YYSKELETON_NAME "yacc.c" + +/* Pure parsers. */ +#define YYPURE 0 + +/* Using locations. */ +#define YYLSP_NEEDED 0 + +/* If NAME_PREFIX is specified substitute the variables and functions + 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 X86_FP80 268 -#define FP128 269 -#define PPC_FP128 270 -#define LABEL 271 -#define TYPE 272 -#define LOCALVAR 273 -#define GLOBALVAR 274 -#define LABELSTR 275 -#define STRINGCONSTANT 276 -#define ATSTRINGCONSTANT 277 -#define PCTSTRINGCONSTANT 278 -#define ZEROINITIALIZER 279 -#define TRUETOK 280 -#define FALSETOK 281 -#define BEGINTOK 282 -#define ENDTOK 283 -#define DECLARE 284 -#define DEFINE 285 -#define GLOBAL 286 -#define CONSTANT 287 -#define SECTION 288 -#define ALIAS 289 -#define VOLATILE 290 -#define THREAD_LOCAL 291 -#define TO 292 -#define DOTDOTDOT 293 -#define NULL_TOK 294 -#define UNDEF 295 -#define INTERNAL 296 -#define LINKONCE 297 -#define WEAK 298 -#define APPENDING 299 -#define DLLIMPORT 300 -#define DLLEXPORT 301 -#define EXTERN_WEAK 302 -#define OPAQUE 303 -#define EXTERNAL 304 -#define TARGET 305 -#define TRIPLE 306 -#define ALIGN 307 -#define DEPLIBS 308 -#define CALL 309 -#define TAIL 310 -#define ASM_TOK 311 -#define MODULE 312 -#define SIDEEFFECT 313 -#define CC_TOK 314 -#define CCC_TOK 315 -#define FASTCC_TOK 316 -#define COLDCC_TOK 317 -#define X86_STDCALLCC_TOK 318 -#define X86_FASTCALLCC_TOK 319 -#define DATALAYOUT 320 -#define RET 321 -#define BR 322 -#define SWITCH 323 -#define INVOKE 324 -#define UNWIND 325 -#define UNREACHABLE 326 -#define ADD 327 -#define SUB 328 -#define MUL 329 -#define UDIV 330 -#define SDIV 331 -#define FDIV 332 -#define UREM 333 -#define SREM 334 -#define FREM 335 -#define AND 336 -#define OR 337 -#define XOR 338 -#define SHL 339 -#define LSHR 340 -#define ASHR 341 -#define ICMP 342 -#define FCMP 343 -#define EQ 344 -#define NE 345 -#define SLT 346 -#define SGT 347 -#define SLE 348 -#define SGE 349 -#define ULT 350 -#define UGT 351 -#define ULE 352 -#define UGE 353 -#define OEQ 354 -#define ONE 355 -#define OLT 356 -#define OGT 357 -#define OLE 358 -#define OGE 359 -#define ORD 360 -#define UNO 361 -#define UEQ 362 -#define UNE 363 -#define MALLOC 364 -#define ALLOCA 365 -#define FREE 366 -#define LOAD 367 -#define STORE 368 -#define GETELEMENTPTR 369 -#define TRUNC 370 -#define ZEXT 371 -#define SEXT 372 -#define FPTRUNC 373 -#define FPEXT 374 -#define BITCAST 375 -#define UITOFP 376 -#define SITOFP 377 -#define FPTOUI 378 -#define FPTOSI 379 -#define INTTOPTR 380 -#define PTRTOINT 381 -#define PHI_TOK 382 -#define SELECT 383 -#define VAARG 384 -#define EXTRACTELEMENT 385 -#define INSERTELEMENT 386 -#define SHUFFLEVECTOR 387 -#define SIGNEXT 388 -#define ZEROEXT 389 -#define NORETURN 390 -#define INREG 391 -#define SRET 392 -#define NOUNWIND 393 -#define NOALIAS 394 -#define BYVAL 395 -#define NEST 396 -#define DEFAULT 397 -#define HIDDEN 398 -#define PROTECTED 399 -#line 14 "/Volumes/ProjectsDisk/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, + X86_FP80 = 269, + FP128 = 270, + PPC_FP128 = 271, + LABEL = 272, + TYPE = 273, + LOCALVAR = 274, + GLOBALVAR = 275, + LABELSTR = 276, + STRINGCONSTANT = 277, + ATSTRINGCONSTANT = 278, + PCTSTRINGCONSTANT = 279, + ZEROINITIALIZER = 280, + TRUETOK = 281, + FALSETOK = 282, + BEGINTOK = 283, + ENDTOK = 284, + DECLARE = 285, + DEFINE = 286, + GLOBAL = 287, + CONSTANT = 288, + SECTION = 289, + ALIAS = 290, + VOLATILE = 291, + THREAD_LOCAL = 292, + TO = 293, + DOTDOTDOT = 294, + NULL_TOK = 295, + UNDEF = 296, + INTERNAL = 297, + LINKONCE = 298, + WEAK = 299, + APPENDING = 300, + DLLIMPORT = 301, + DLLEXPORT = 302, + EXTERN_WEAK = 303, + OPAQUE = 304, + EXTERNAL = 305, + TARGET = 306, + TRIPLE = 307, + ALIGN = 308, + DEPLIBS = 309, + CALL = 310, + TAIL = 311, + ASM_TOK = 312, + MODULE = 313, + SIDEEFFECT = 314, + CC_TOK = 315, + CCC_TOK = 316, + FASTCC_TOK = 317, + COLDCC_TOK = 318, + X86_STDCALLCC_TOK = 319, + X86_FASTCALLCC_TOK = 320, + DATALAYOUT = 321, + RET = 322, + BR = 323, + SWITCH = 324, + INVOKE = 325, + UNWIND = 326, + UNREACHABLE = 327, + ADD = 328, + SUB = 329, + MUL = 330, + UDIV = 331, + SDIV = 332, + FDIV = 333, + UREM = 334, + SREM = 335, + FREM = 336, + AND = 337, + OR = 338, + XOR = 339, + SHL = 340, + LSHR = 341, + ASHR = 342, + ICMP = 343, + FCMP = 344, + EQ = 345, + NE = 346, + SLT = 347, + SGT = 348, + SLE = 349, + SGE = 350, + ULT = 351, + UGT = 352, + ULE = 353, + UGE = 354, + OEQ = 355, + ONE = 356, + OLT = 357, + OGT = 358, + OLE = 359, + OGE = 360, + ORD = 361, + UNO = 362, + UEQ = 363, + UNE = 364, + MALLOC = 365, + ALLOCA = 366, + FREE = 367, + LOAD = 368, + STORE = 369, + GETELEMENTPTR = 370, + TRUNC = 371, + ZEXT = 372, + SEXT = 373, + FPTRUNC = 374, + FPEXT = 375, + BITCAST = 376, + UITOFP = 377, + SITOFP = 378, + FPTOUI = 379, + FPTOSI = 380, + INTTOPTR = 381, + PTRTOINT = 382, + PHI_TOK = 383, + SELECT = 384, + VAARG = 385, + EXTRACTELEMENT = 386, + INSERTELEMENT = 387, + SHUFFLEVECTOR = 388, + SIGNEXT = 389, + ZEROEXT = 390, + NORETURN = 391, + INREG = 392, + SRET = 393, + NOUNWIND = 394, + NOALIAS = 395, + BYVAL = 396, + NEST = 397, + DEFAULT = 398, + HIDDEN = 399, + PROTECTED = 400 + }; +#endif +#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 X86_FP80 269 +#define FP128 270 +#define PPC_FP128 271 +#define LABEL 272 +#define TYPE 273 +#define LOCALVAR 274 +#define GLOBALVAR 275 +#define LABELSTR 276 +#define STRINGCONSTANT 277 +#define ATSTRINGCONSTANT 278 +#define PCTSTRINGCONSTANT 279 +#define ZEROINITIALIZER 280 +#define TRUETOK 281 +#define FALSETOK 282 +#define BEGINTOK 283 +#define ENDTOK 284 +#define DECLARE 285 +#define DEFINE 286 +#define GLOBAL 287 +#define CONSTANT 288 +#define SECTION 289 +#define ALIAS 290 +#define VOLATILE 291 +#define THREAD_LOCAL 292 +#define TO 293 +#define DOTDOTDOT 294 +#define NULL_TOK 295 +#define UNDEF 296 +#define INTERNAL 297 +#define LINKONCE 298 +#define WEAK 299 +#define APPENDING 300 +#define DLLIMPORT 301 +#define DLLEXPORT 302 +#define EXTERN_WEAK 303 +#define OPAQUE 304 +#define EXTERNAL 305 +#define TARGET 306 +#define TRIPLE 307 +#define ALIGN 308 +#define DEPLIBS 309 +#define CALL 310 +#define TAIL 311 +#define ASM_TOK 312 +#define MODULE 313 +#define SIDEEFFECT 314 +#define CC_TOK 315 +#define CCC_TOK 316 +#define FASTCC_TOK 317 +#define COLDCC_TOK 318 +#define X86_STDCALLCC_TOK 319 +#define X86_FASTCALLCC_TOK 320 +#define DATALAYOUT 321 +#define RET 322 +#define BR 323 +#define SWITCH 324 +#define INVOKE 325 +#define UNWIND 326 +#define UNREACHABLE 327 +#define ADD 328 +#define SUB 329 +#define MUL 330 +#define UDIV 331 +#define SDIV 332 +#define FDIV 333 +#define UREM 334 +#define SREM 335 +#define FREM 336 +#define AND 337 +#define OR 338 +#define XOR 339 +#define SHL 340 +#define LSHR 341 +#define ASHR 342 +#define ICMP 343 +#define FCMP 344 +#define EQ 345 +#define NE 346 +#define SLT 347 +#define SGT 348 +#define SLE 349 +#define SGE 350 +#define ULT 351 +#define UGT 352 +#define ULE 353 +#define UGE 354 +#define OEQ 355 +#define ONE 356 +#define OLT 357 +#define OGT 358 +#define OLE 359 +#define OGE 360 +#define ORD 361 +#define UNO 362 +#define UEQ 363 +#define UNE 364 +#define MALLOC 365 +#define ALLOCA 366 +#define FREE 367 +#define LOAD 368 +#define STORE 369 +#define GETELEMENTPTR 370 +#define TRUNC 371 +#define ZEXT 372 +#define SEXT 373 +#define FPTRUNC 374 +#define FPEXT 375 +#define BITCAST 376 +#define UITOFP 377 +#define SITOFP 378 +#define FPTOUI 379 +#define FPTOSI 380 +#define INTTOPTR 381 +#define PTRTOINT 382 +#define PHI_TOK 383 +#define SELECT 384 +#define VAARG 385 +#define EXTRACTELEMENT 386 +#define INSERTELEMENT 387 +#define SHUFFLEVECTOR 388 +#define SIGNEXT 389 +#define ZEROEXT 390 +#define NORETURN 391 +#define INREG 392 +#define SRET 393 +#define NOUNWIND 394 +#define NOALIAS 395 +#define BYVAL 396 +#define NEST 397 +#define DEFAULT 398 +#define HIDDEN 399 +#define PROTECTED 400 + + + + +/* Copy the first part of user declarations. */ +#line 14 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" #include "ParserInternals.h" #include "llvm/CallingConv.h" @@ -1104,8 +1304,23 @@ } -#line 963 "/Volumes/ProjectsDisk/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 + +#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED) +#line 963 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" +typedef union YYSTYPE { llvm::Module *ModuleVal; llvm::Function *FunctionVal; llvm::BasicBlock *BasicBlockVal; @@ -1151,1137 +1366,1496 @@ llvm::ICmpInst::Predicate IPredicate; llvm::FCmpInst::Predicate FPredicate; } YYSTYPE; -#include - -#ifndef __cplusplus -#ifndef __STDC__ -#define const -#endif +/* Line 191 of yacc.c. */ +#line 1371 "llvmAsmParser.tab.c" +# define yystype YYSTYPE /* obsolescent; will be withdrawn */ +# define YYSTYPE_IS_DECLARED 1 +# define YYSTYPE_IS_TRIVIAL 1 #endif -#define YYFINAL 594 -#define YYFLAG -32768 -#define YYNTBASE 160 - -#define YYTRANSLATE(x) ((unsigned)(x) <= 399 ? yytranslate[x] : 241) - -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, 150, - 151, 148, 2, 147, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 155, - 146, 156, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 152, 149, 154, 2, 2, 2, 2, 2, 159, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 153, - 2, 2, 157, 2, 158, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 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, 136, - 137, 138, 139, 140, 141, 142, 143, 144, 145 -}; +/* Copy the second part of user declarations. */ + + +/* Line 214 of yacc.c. */ +#line 1383 "llvmAsmParser.tab.c" + +#if ! defined (yyoverflow) || YYERROR_VERBOSE + +/* The parser invokes alloca or malloc; define the necessary symbols. */ + +# ifdef YYSTACK_USE_ALLOCA +# if YYSTACK_USE_ALLOCA +# define YYSTACK_ALLOC alloca +# endif +# else +# if defined (alloca) || defined (_ALLOCA_H) +# define YYSTACK_ALLOC alloca +# else +# ifdef __GNUC__ +# define YYSTACK_ALLOC __builtin_alloca +# endif +# endif +# endif + +# ifdef YYSTACK_ALLOC + /* Pacify GCC's `empty if-body' warning. */ +# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0) +# else +# if defined (__STDC__) || defined (__cplusplus) +# include /* INFRINGES ON USER NAME SPACE */ +# define YYSIZE_T size_t +# endif +# define YYSTACK_ALLOC malloc +# define YYSTACK_FREE free +# endif +#endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */ + + +#if (! defined (yyoverflow) \ + && (! defined (__cplusplus) \ + || (defined (YYSTYPE_IS_TRIVIAL) && YYSTYPE_IS_TRIVIAL))) -#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, - 120, 122, 124, 126, 127, 130, 131, 133, 135, 137, - 138, 141, 143, 145, 147, 149, 151, 153, 155, 157, - 158, 160, 162, 164, 165, 167, 169, 170, 172, 174, - 176, 178, 179, 181, 183, 184, 186, 188, 190, 192, - 194, 197, 199, 201, 203, 205, 207, 209, 211, 213, - 215, 216, 219, 221, 223, 225, 227, 228, 231, 232, - 235, 236, 240, 243, 244, 246, 247, 251, 253, 256, - 258, 260, 262, 264, 266, 268, 270, 272, 274, 277, - 279, 282, 288, 294, 300, 306, 310, 313, 319, 324, - 327, 329, 331, 333, 337, 339, 343, 345, 346, 348, - 352, 357, 361, 365, 370, 375, 379, 386, 392, 395, - 398, 401, 404, 407, 410, 413, 416, 419, 422, 425, - 428, 435, 441, 450, 457, 464, 472, 480, 487, 496, - 505, 509, 511, 513, 515, 517, 518, 521, 528, 530, - 531, 533, 536, 537, 541, 542, 546, 550, 554, 558, - 559, 567, 568, 577, 578, 587, 593, 596, 600, 602, - 606, 610, 614, 618, 620, 621, 627, 631, 633, 637, - 639, 640, 650, 652, 654, 659, 661, 663, 666, 670, - 671, 673, 675, 677, 679, 681, 683, 685, 687, 689, - 693, 695, 701, 703, 705, 707, 709, 711, 713, 716, - 719, 722, 726, 729, 730, 732, 735, 738, 742, 752, - 762, 771, 786, 788, 790, 797, 803, 806, 813, 821, - 825, 831, 832, 833, 837, 840, 842, 848, 854, 861, - 868, 873, 880, 885, 890, 897, 904, 907, 916, 918, - 920, 921, 925, 932, 936, 943, 946, 952, 960 -}; +/* A type that is properly aligned for any stack member. */ +union yyalloc +{ + short yyss; + YYSTYPE yyvs; + }; -static const short yyrhs[] = { 73, - 0, 74, 0, 75, 0, 76, 0, 77, 0, 78, - 0, 79, 0, 80, 0, 81, 0, 85, 0, 86, - 0, 87, 0, 82, 0, 83, 0, 84, 0, 116, - 0, 117, 0, 118, 0, 119, 0, 120, 0, 121, - 0, 122, 0, 123, 0, 124, 0, 125, 0, 126, - 0, 127, 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, 106, 0, 107, 0, 108, - 0, 109, 0, 96, 0, 97, 0, 98, 0, 99, - 0, 26, 0, 27, 0, 11, 0, 12, 0, 13, - 0, 16, 0, 15, 0, 14, 0, 19, 0, 22, - 0, 24, 0, 167, 0, 0, 167, 146, 0, 0, - 20, 0, 23, 0, 172, 0, 0, 170, 146, 0, - 42, 0, 44, 0, 43, 0, 45, 0, 47, 0, - 46, 0, 48, 0, 50, 0, 0, 143, 0, 144, - 0, 145, 0, 0, 46, 0, 48, 0, 0, 42, - 0, 43, 0, 44, 0, 47, 0, 0, 44, 0, - 42, 0, 0, 61, 0, 62, 0, 63, 0, 64, - 0, 65, 0, 60, 4, 0, 135, 0, 117, 0, - 134, 0, 118, 0, 137, 0, 138, 0, 140, 0, - 141, 0, 142, 0, 0, 181, 180, 0, 136, 0, - 139, 0, 135, 0, 134, 0, 0, 183, 182, 0, - 0, 53, 4, 0, 0, 147, 53, 4, 0, 34, - 22, 0, 0, 186, 0, 0, 147, 189, 188, 0, - 186, 0, 53, 4, 0, 11, 0, 12, 0, 13, - 0, 16, 0, 15, 0, 14, 0, 17, 0, 49, - 0, 190, 0, 191, 148, 0, 225, 0, 149, 4, - 0, 191, 150, 195, 151, 183, 0, 10, 150, 195, - 151, 183, 0, 152, 4, 153, 191, 154, 0, 155, - 4, 153, 191, 156, 0, 157, 196, 158, 0, 157, - 158, 0, 155, 157, 196, 158, 156, 0, 155, 157, - 158, 156, 0, 191, 181, 0, 191, 0, 10, 0, - 192, 0, 194, 147, 192, 0, 194, 0, 194, 147, - 39, 0, 39, 0, 0, 191, 0, 196, 147, 191, - 0, 191, 152, 199, 154, 0, 191, 152, 154, 0, - 191, 159, 22, 0, 191, 155, 199, 156, 0, 191, - 157, 199, 158, 0, 191, 157, 158, 0, 191, 155, - 157, 199, 158, 156, 0, 191, 155, 157, 158, 156, - 0, 191, 40, 0, 191, 41, 0, 191, 225, 0, - 191, 198, 0, 191, 25, 0, 165, 3, 0, 165, - 5, 0, 165, 4, 0, 165, 6, 0, 11, 26, - 0, 11, 27, 0, 166, 9, 0, 162, 150, 197, - 38, 191, 151, 0, 115, 150, 197, 236, 151, 0, - 129, 150, 197, 147, 197, 147, 197, 151, 0, 160, - 150, 197, 147, 197, 151, 0, 161, 150, 197, 147, - 197, 151, 0, 88, 163, 150, 197, 147, 197, 151, - 0, 89, 164, 150, 197, 147, 197, 151, 0, 131, - 150, 197, 147, 197, 151, 0, 132, 150, 197, 147, - 197, 147, 197, 151, 0, 133, 150, 197, 147, 197, - 147, 197, 151, 0, 199, 147, 197, 0, 197, 0, - 32, 0, 33, 0, 37, 0, 0, 193, 225, 0, - 121, 150, 202, 38, 191, 151, 0, 204, 0, 0, - 205, 0, 204, 205, 0, 0, 31, 206, 221, 0, - 0, 30, 207, 222, 0, 58, 57, 211, 0, 169, - 18, 191, 0, 169, 18, 10, 0, 0, 171, 175, - 201, 200, 197, 208, 188, 0, 0, 171, 173, 175, - 201, 200, 197, 209, 188, 0, 0, 171, 174, 175, - 201, 200, 191, 210, 188, 0, 171, 175, 35, 178, - 202, 0, 51, 212, 0, 54, 146, 213, 0, 22, - 0, 52, 146, 22, 0, 66, 146, 22, 0, 152, - 214, 154, 0, 214, 147, 22, 0, 22, 0, 0, - 215, 147, 191, 181, 168, 0, 191, 181, 168, 0, - 215, 0, 215, 147, 39, 0, 39, 0, 0, 179, - 193, 170, 150, 216, 151, 183, 187, 184, 0, 28, - 0, 157, 0, 177, 175, 217, 218, 0, 29, 0, - 158, 0, 228, 220, 0, 176, 175, 217, 0, 0, - 59, 0, 3, 0, 4, 0, 9, 0, 26, 0, - 27, 0, 40, 0, 41, 0, 25, 0, 155, 199, - 156, 0, 198, 0, 57, 223, 22, 147, 22, 0, - 7, 0, 8, 0, 167, 0, 170, 0, 225, 0, - 224, 0, 191, 226, 0, 228, 229, 0, 219, 229, - 0, 230, 169, 231, 0, 230, 233, 0, 0, 21, - 0, 67, 227, 0, 67, 10, 0, 68, 17, 226, - 0, 68, 11, 226, 147, 17, 226, 147, 17, 226, - 0, 69, 165, 226, 147, 17, 226, 152, 232, 154, - 0, 69, 165, 226, 147, 17, 226, 152, 154, 0, - 70, 179, 193, 226, 150, 235, 151, 183, 38, 17, - 226, 71, 17, 226, 0, 71, 0, 72, 0, 232, - 165, 224, 147, 17, 226, 0, 165, 224, 147, 17, - 226, 0, 169, 238, 0, 191, 152, 226, 147, 226, - 154, 0, 234, 147, 152, 226, 147, 226, 154, 0, - 191, 226, 181, 0, 235, 147, 191, 226, 181, 0, - 0, 0, 236, 147, 227, 0, 56, 55, 0, 55, - 0, 160, 191, 226, 147, 226, 0, 161, 191, 226, - 147, 226, 0, 88, 163, 191, 226, 147, 226, 0, - 89, 164, 191, 226, 147, 226, 0, 162, 227, 38, - 191, 0, 129, 227, 147, 227, 147, 227, 0, 130, - 227, 147, 191, 0, 131, 227, 147, 227, 0, 132, - 227, 147, 227, 147, 227, 0, 133, 227, 147, 227, - 147, 227, 0, 128, 234, 0, 237, 179, 193, 226, - 150, 235, 151, 183, 0, 240, 0, 36, 0, 0, - 110, 191, 185, 0, 110, 191, 147, 11, 226, 185, - 0, 111, 191, 185, 0, 111, 191, 147, 11, 226, - 185, 0, 112, 227, 0, 239, 113, 191, 226, 185, - 0, 239, 114, 227, 147, 191, 226, 185, 0, 115, - 191, 226, 236, 0 -}; +/* The size of the maximum gap between one aligned stack and the next. */ +# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) -#endif +/* The size of an array large to enough to hold all stacks, each with + N elements. */ +# define YYSTACK_BYTES(N) \ + ((N) * (sizeof (short) + 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 \ + { \ + register YYSIZE_T yyi; \ + for (yyi = 0; yyi < (Count); yyi++) \ + (To)[yyi] = (From)[yyi]; \ + } \ + while (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 (0) -#if YYDEBUG != 0 -static const short yyrline[] = { 0, - 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1123, - 1123, 1123, 1123, 1123, 1123, 1124, 1124, 1124, 1124, 1124, - 1124, 1124, 1125, 1125, 1125, 1125, 1125, 1128, 1128, 1129, - 1129, 1130, 1130, 1131, 1131, 1132, 1132, 1136, 1136, 1137, - 1137, 1138, 1138, 1139, 1139, 1140, 1140, 1141, 1141, 1142, - 1142, 1143, 1144, 1149, 1150, 1150, 1150, 1150, 1150, 1152, - 1152, 1152, 1153, 1153, 1157, 1161, 1166, 1166, 1168, 1169, - 1174, 1180, 1181, 1182, 1183, 1184, 1188, 1189, 1190, 1194, - 1195, 1196, 1197, 1201, 1202, 1203, 1207, 1208, 1209, 1210, - 1211, 1215, 1216, 1217, 1220, 1220, 1221, 1222, 1223, 1224, - 1225, 1233, 1234, 1235, 1236, 1237, 1238, 1239, 1240, 1241, - 1244, 1245, 1250, 1251, 1252, 1253, 1256, 1257, 1264, 1264, - 1271, 1271, 1280, 1288, 1288, 1294, 1294, 1296, 1301, 1314, - 1314, 1314, 1314, 1314, 1314, 1314, 1317, 1321, 1325, 1332, - 1337, 1345, 1375, 1406, 1411, 1423, 1433, 1437, 1447, 1454, - 1461, 1468, 1473, 1478, 1485, 1486, 1493, 1500, 1508, 1514, - 1526, 1554, 1570, 1597, 1625, 1651, 1671, 1697, 1717, 1729, - 1736, 1802, 1812, 1822, 1828, 1838, 1844, 1854, 1859, 1864, - 1872, 1884, 1906, 1914, 1920, 1931, 1936, 1941, 1947, 1953, - 1962, 1966, 1974, 1974, 1977, 1977, 1980, 1992, 2013, 2018, - 2026, 2027, 2031, 2031, 2035, 2035, 2038, 2041, 2065, 2076, - 2083, 2086, 2092, 2095, 2102, 2106, 2125, 2128, 2134, 2144, - 2148, 2153, 2155, 2160, 2165, 2174, 2184, 2195, 2199, 2208, - 2217, 2222, 2343, 2343, 2345, 2354, 2354, 2356, 2361, 2373, - 2377, 2382, 2386, 2390, 2394, 2398, 2402, 2406, 2410, 2414, - 2439, 2443, 2453, 2457, 2461, 2466, 2473, 2473, 2479, 2488, - 2492, 2501, 2510, 2519, 2523, 2530, 2534, 2538, 2543, 2553, - 2572, 2581, 2661, 2665, 2672, 2683, 2696, 2706, 2717, 2727, - 2736, 2745, 2748, 2749, 2756, 2760, 2765, 2786, 2803, 2817, - 2831, 2843, 2851, 2858, 2864, 2870, 2876, 2891, 2976, 2981, - 2985, 2992, 2999, 3007, 3014, 3022, 3030, 3044, 3061 -}; #endif - -#if YYDEBUG != 0 || defined (YYERROR_VERBOSE) - -static const char * const yytname[] = { "$","error","$undefined.","ESINT64VAL", -"EUINT64VAL","ESAPINTVAL","EUAPINTVAL","LOCALVAL_ID","GLOBALVAL_ID","FPVAL", -"VOID","INTTYPE","FLOAT","DOUBLE","X86_FP80","FP128","PPC_FP128","LABEL","TYPE", -"LOCALVAR","GLOBALVAR","LABELSTR","STRINGCONSTANT","ATSTRINGCONSTANT","PCTSTRINGCONSTANT", -"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","SIGNEXT","ZEROEXT","NORETURN","INREG","SRET","NOUNWIND","NOALIAS", -"BYVAL","NEST","DEFAULT","HIDDEN","PROTECTED","'='","','","'*'","'\\\\'","'('", -"')'","'['","'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","AliaseeRef", -"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 -}; +#if defined (__STDC__) || defined (__cplusplus) + typedef signed char yysigned_char; +#else + typedef short yysigned_char; #endif -static const short yyr1[] = { 0, - 160, 160, 160, 160, 160, 160, 160, 160, 160, 161, - 161, 161, 161, 161, 161, 162, 162, 162, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 163, 163, 163, - 163, 163, 163, 163, 163, 163, 163, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 165, 166, 166, 166, 166, 166, 167, - 167, 167, 168, 168, 169, 169, 170, 170, 171, 171, - 172, 173, 173, 173, 173, 173, 174, 174, 174, 175, - 175, 175, 175, 176, 176, 176, 177, 177, 177, 177, - 177, 178, 178, 178, 179, 179, 179, 179, 179, 179, - 179, 180, 180, 180, 180, 180, 180, 180, 180, 180, - 181, 181, 182, 182, 182, 182, 183, 183, 184, 184, - 185, 185, 186, 187, 187, 188, 188, 189, 189, 190, - 190, 190, 190, 190, 190, 190, 191, 191, 191, 191, - 191, 191, 191, 191, 191, 191, 191, 191, 191, 192, - 193, 193, 194, 194, 195, 195, 195, 195, 196, 196, - 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, - 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, - 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, - 199, 199, 200, 200, 201, 201, 202, 202, 203, 203, - 204, 204, 206, 205, 207, 205, 205, 205, 205, 208, - 205, 209, 205, 210, 205, 205, 205, 205, 211, 212, - 212, 213, 214, 214, 214, 215, 215, 216, 216, 216, - 216, 217, 218, 218, 219, 220, 220, 221, 222, 223, - 223, 224, 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 225, 225, 225, 225, 226, 226, 227, 228, - 228, 229, 230, 230, 230, 231, 231, 231, 231, 231, - 231, 231, 231, 231, 232, 232, 233, 234, 234, 235, - 235, 235, 236, 236, 237, 237, 238, 238, 238, 238, - 238, 238, 238, 238, 238, 238, 238, 238, 238, 239, - 239, 240, 240, 240, 240, 240, 240, 240, 240 +/* YYFINAL -- State number of the termination state. */ +#define YYFINAL 43 +/* YYLAST -- Last index in YYTABLE. */ +#define YYLAST 1685 + +/* YYNTOKENS -- Number of terminals. */ +#define YYNTOKENS 160 +/* YYNNTS -- Number of nonterminals. */ +#define YYNNTS 82 +/* YYNRULES -- Number of rules. */ +#define YYNRULES 310 +/* YYNRULES -- Number of states. */ +#define YYNSTATES 594 + +/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ +#define YYUNDEFTOK 2 +#define YYMAXUTOK 400 + +#define YYTRANSLATE(YYX) \ + ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) + +/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ +static const unsigned char 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, + 150, 151, 148, 2, 147, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 155, 146, 156, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 152, 149, 154, 2, 2, 2, 2, 2, 159, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 153, 2, 2, 157, 2, 158, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 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, 136, 137, 138, 139, 140, 141, 142, 143, 144, + 145 }; -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, 1, - 1, 1, 1, 0, 2, 0, 1, 1, 1, 0, - 2, 1, 1, 1, 1, 1, 1, 1, 1, 0, - 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, - 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, - 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 0, 2, 1, 1, 1, 1, 0, 2, 0, 2, - 0, 3, 2, 0, 1, 0, 3, 1, 2, 1, - 1, 1, 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, 2, 6, 1, 0, - 1, 2, 0, 3, 0, 3, 3, 3, 3, 0, - 7, 0, 8, 0, 8, 5, 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 +#if YYDEBUG +/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in + YYRHS. */ +static const unsigned short 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, 123, 125, 127, 129, 130, 133, 134, 136, + 138, 140, 141, 144, 146, 148, 150, 152, 154, 156, + 158, 160, 161, 163, 165, 167, 168, 170, 172, 173, + 175, 177, 179, 181, 182, 184, 186, 187, 189, 191, + 193, 195, 197, 200, 202, 204, 206, 208, 210, 212, + 214, 216, 218, 219, 222, 224, 226, 228, 230, 231, + 234, 235, 238, 239, 243, 246, 247, 249, 250, 254, + 256, 259, 261, 263, 265, 267, 269, 271, 273, 275, + 277, 280, 282, 285, 291, 297, 303, 309, 313, 316, + 322, 327, 330, 332, 334, 336, 340, 342, 346, 348, + 349, 351, 355, 360, 364, 368, 373, 378, 382, 389, + 395, 398, 401, 404, 407, 410, 413, 416, 419, 422, + 425, 428, 431, 438, 444, 453, 460, 467, 475, 483, + 490, 499, 508, 512, 514, 516, 518, 520, 521, 524, + 531, 533, 534, 536, 539, 540, 544, 545, 549, 553, + 557, 561, 562, 570, 571, 580, 581, 590, 596, 599, + 603, 605, 609, 613, 617, 621, 623, 624, 630, 634, + 636, 640, 642, 643, 653, 655, 657, 662, 664, 666, + 669, 673, 674, 676, 678, 680, 682, 684, 686, 688, + 690, 692, 696, 698, 704, 706, 708, 710, 712, 714, + 716, 719, 722, 725, 729, 732, 733, 735, 738, 741, + 745, 755, 765, 774, 789, 791, 793, 800, 806, 809, + 816, 824, 828, 834, 835, 836, 840, 843, 845, 851, + 857, 864, 871, 876, 883, 888, 893, 900, 907, 910, + 919, 921, 923, 924, 928, 935, 939, 946, 949, 955, + 963 }; -static const short yydefact[] = { 70, - 60, 67, 61, 68, 62, 205, 203, 0, 0, 0, - 0, 0, 0, 80, 69, 70, 201, 84, 87, 0, - 0, 217, 0, 0, 65, 0, 71, 72, 74, 73, - 75, 77, 76, 78, 79, 81, 82, 83, 80, 80, - 196, 202, 85, 86, 80, 206, 88, 89, 90, 91, - 80, 264, 204, 264, 0, 0, 225, 218, 219, 207, - 253, 254, 209, 130, 131, 132, 135, 134, 133, 136, - 137, 0, 0, 0, 0, 255, 256, 138, 208, 140, - 196, 196, 92, 195, 0, 95, 95, 265, 261, 66, - 236, 237, 238, 260, 220, 221, 224, 0, 158, 141, - 0, 0, 0, 0, 147, 159, 0, 139, 158, 0, - 0, 94, 93, 0, 193, 194, 0, 0, 96, 97, - 98, 99, 100, 0, 239, 0, 301, 263, 0, 222, - 157, 111, 153, 155, 0, 0, 0, 0, 0, 0, - 146, 0, 0, 0, 152, 0, 151, 0, 216, 130, - 131, 132, 135, 134, 133, 0, 0, 0, 210, 101, - 0, 233, 234, 235, 300, 286, 0, 0, 0, 0, - 95, 273, 274, 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, 262, 95, 277, 0, 299, - 223, 150, 0, 117, 0, 0, 149, 0, 160, 117, - 212, 214, 0, 197, 178, 179, 174, 176, 175, 177, - 180, 173, 169, 170, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 172, 171, - 126, 0, 285, 267, 0, 266, 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, 121, - 121, 306, 0, 0, 297, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 103, 105, 104, 102, - 106, 107, 108, 109, 110, 112, 156, 154, 143, 144, - 145, 148, 142, 126, 126, 0, 0, 0, 0, 0, - 0, 0, 0, 162, 192, 0, 0, 0, 166, 0, - 163, 0, 0, 0, 0, 211, 231, 242, 243, 244, - 249, 245, 246, 247, 248, 240, 0, 251, 258, 257, - 259, 0, 268, 0, 0, 0, 0, 0, 302, 0, - 304, 283, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 116, 115, 113, 114, 118, - 213, 215, 0, 0, 0, 283, 0, 0, 0, 0, - 0, 161, 147, 159, 0, 164, 165, 0, 0, 0, - 0, 0, 128, 126, 230, 111, 228, 0, 241, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 309, - 0, 0, 0, 293, 294, 0, 0, 0, 0, 291, - 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 191, 168, 0, 0, 0, 0, 123, 129, 127, - 64, 0, 117, 0, 250, 0, 0, 282, 0, 0, - 121, 122, 121, 0, 0, 0, 0, 0, 0, 287, - 288, 282, 0, 307, 0, 198, 0, 0, 182, 0, - 0, 0, 0, 167, 0, 0, 0, 63, 227, 229, - 111, 124, 0, 0, 0, 0, 0, 289, 290, 303, - 305, 284, 0, 0, 292, 295, 296, 0, 121, 0, - 0, 0, 188, 0, 0, 184, 185, 181, 64, 125, - 119, 252, 0, 0, 111, 0, 117, 278, 0, 117, - 308, 186, 187, 0, 0, 0, 226, 0, 232, 0, - 271, 0, 0, 280, 0, 0, 279, 298, 183, 189, - 190, 120, 269, 0, 270, 0, 111, 0, 0, 0, - 281, 0, 0, 0, 0, 276, 0, 0, 275, 0, - 272, 0, 0, 0 +/* YYRHS -- A `-1'-separated list of the rules' RHS. */ +static const short yyrhs[] = +{ + 204, 0, -1, 73, -1, 74, -1, 75, -1, 76, + -1, 77, -1, 78, -1, 79, -1, 80, -1, 81, + -1, 85, -1, 86, -1, 87, -1, 82, -1, 83, + -1, 84, -1, 116, -1, 117, -1, 118, -1, 119, + -1, 120, -1, 121, -1, 122, -1, 123, -1, 124, + -1, 125, -1, 126, -1, 127, -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, 106, + -1, 107, -1, 108, -1, 109, -1, 96, -1, 97, + -1, 98, -1, 99, -1, 26, -1, 27, -1, 11, + -1, 12, -1, 13, -1, 16, -1, 15, -1, 14, + -1, 19, -1, 22, -1, 24, -1, 168, -1, -1, + 168, 146, -1, -1, 20, -1, 23, -1, 173, -1, + -1, 171, 146, -1, 42, -1, 44, -1, 43, -1, + 45, -1, 47, -1, 46, -1, 48, -1, 50, -1, + -1, 143, -1, 144, -1, 145, -1, -1, 46, -1, + 48, -1, -1, 42, -1, 43, -1, 44, -1, 47, + -1, -1, 44, -1, 42, -1, -1, 61, -1, 62, + -1, 63, -1, 64, -1, 65, -1, 60, 4, -1, + 135, -1, 117, -1, 134, -1, 118, -1, 137, -1, + 138, -1, 140, -1, 141, -1, 142, -1, -1, 182, + 181, -1, 136, -1, 139, -1, 135, -1, 134, -1, + -1, 184, 183, -1, -1, 53, 4, -1, -1, 147, + 53, 4, -1, 34, 22, -1, -1, 187, -1, -1, + 147, 190, 189, -1, 187, -1, 53, 4, -1, 11, + -1, 12, -1, 13, -1, 16, -1, 15, -1, 14, + -1, 17, -1, 49, -1, 191, -1, 192, 148, -1, + 226, -1, 149, 4, -1, 192, 150, 196, 151, 184, + -1, 10, 150, 196, 151, 184, -1, 152, 4, 153, + 192, 154, -1, 155, 4, 153, 192, 156, -1, 157, + 197, 158, -1, 157, 158, -1, 155, 157, 197, 158, + 156, -1, 155, 157, 158, 156, -1, 192, 182, -1, + 192, -1, 10, -1, 193, -1, 195, 147, 193, -1, + 195, -1, 195, 147, 39, -1, 39, -1, -1, 192, + -1, 197, 147, 192, -1, 192, 152, 200, 154, -1, + 192, 152, 154, -1, 192, 159, 22, -1, 192, 155, + 200, 156, -1, 192, 157, 200, 158, -1, 192, 157, + 158, -1, 192, 155, 157, 200, 158, 156, -1, 192, + 155, 157, 158, 156, -1, 192, 40, -1, 192, 41, + -1, 192, 226, -1, 192, 199, -1, 192, 25, -1, + 166, 3, -1, 166, 5, -1, 166, 4, -1, 166, + 6, -1, 11, 26, -1, 11, 27, -1, 167, 9, + -1, 163, 150, 198, 38, 192, 151, -1, 115, 150, + 198, 237, 151, -1, 129, 150, 198, 147, 198, 147, + 198, 151, -1, 161, 150, 198, 147, 198, 151, -1, + 162, 150, 198, 147, 198, 151, -1, 88, 164, 150, + 198, 147, 198, 151, -1, 89, 165, 150, 198, 147, + 198, 151, -1, 131, 150, 198, 147, 198, 151, -1, + 132, 150, 198, 147, 198, 147, 198, 151, -1, 133, + 150, 198, 147, 198, 147, 198, 151, -1, 200, 147, + 198, -1, 198, -1, 32, -1, 33, -1, 37, -1, + -1, 194, 226, -1, 121, 150, 203, 38, 192, 151, + -1, 205, -1, -1, 206, -1, 205, 206, -1, -1, + 31, 207, 222, -1, -1, 30, 208, 223, -1, 58, + 57, 212, -1, 170, 18, 192, -1, 170, 18, 10, + -1, -1, 172, 176, 202, 201, 198, 209, 189, -1, + -1, 172, 174, 176, 202, 201, 198, 210, 189, -1, + -1, 172, 175, 176, 202, 201, 192, 211, 189, -1, + 172, 176, 35, 179, 203, -1, 51, 213, -1, 54, + 146, 214, -1, 22, -1, 52, 146, 22, -1, 66, + 146, 22, -1, 152, 215, 154, -1, 215, 147, 22, + -1, 22, -1, -1, 216, 147, 192, 182, 169, -1, + 192, 182, 169, -1, 216, -1, 216, 147, 39, -1, + 39, -1, -1, 180, 194, 171, 150, 217, 151, 184, + 188, 185, -1, 28, -1, 157, -1, 178, 176, 218, + 219, -1, 29, -1, 158, -1, 229, 221, -1, 177, + 176, 218, -1, -1, 59, -1, 3, -1, 4, -1, + 9, -1, 26, -1, 27, -1, 40, -1, 41, -1, + 25, -1, 155, 200, 156, -1, 199, -1, 57, 224, + 22, 147, 22, -1, 7, -1, 8, -1, 168, -1, + 171, -1, 226, -1, 225, -1, 192, 227, -1, 229, + 230, -1, 220, 230, -1, 231, 170, 232, -1, 231, + 234, -1, -1, 21, -1, 67, 228, -1, 67, 10, + -1, 68, 17, 227, -1, 68, 11, 227, 147, 17, + 227, 147, 17, 227, -1, 69, 166, 227, 147, 17, + 227, 152, 233, 154, -1, 69, 166, 227, 147, 17, + 227, 152, 154, -1, 70, 180, 194, 227, 150, 236, + 151, 184, 38, 17, 227, 71, 17, 227, -1, 71, + -1, 72, -1, 233, 166, 225, 147, 17, 227, -1, + 166, 225, 147, 17, 227, -1, 170, 239, -1, 192, + 152, 227, 147, 227, 154, -1, 235, 147, 152, 227, + 147, 227, 154, -1, 192, 227, 182, -1, 236, 147, + 192, 227, 182, -1, -1, -1, 237, 147, 228, -1, + 56, 55, -1, 55, -1, 161, 192, 227, 147, 227, + -1, 162, 192, 227, 147, 227, -1, 88, 164, 192, + 227, 147, 227, -1, 89, 165, 192, 227, 147, 227, + -1, 163, 228, 38, 192, -1, 129, 228, 147, 228, + 147, 228, -1, 130, 228, 147, 192, -1, 131, 228, + 147, 228, -1, 132, 228, 147, 228, 147, 228, -1, + 133, 228, 147, 228, 147, 228, -1, 128, 235, -1, + 238, 180, 194, 227, 150, 236, 151, 184, -1, 241, + -1, 36, -1, -1, 110, 192, 186, -1, 110, 192, + 147, 11, 227, 186, -1, 111, 192, 186, -1, 111, + 192, 147, 11, 227, 186, -1, 112, 228, -1, 240, + 113, 192, 227, 186, -1, 240, 114, 228, 147, 192, + 227, 186, -1, 115, 192, 227, 237, -1 }; -static const short yydefgoto[] = { 256, - 257, 258, 282, 299, 156, 157, 76, 509, 12, 77, - 14, 15, 39, 40, 41, 45, 51, 114, 124, 326, - 222, 400, 329, 559, 379, 423, 541, 356, 424, 78, - 158, 133, 148, 134, 135, 107, 345, 368, 346, 117, - 85, 149, 592, 16, 17, 19, 18, 261, 334, 335, - 60, 22, 58, 98, 427, 428, 125, 164, 52, 93, - 53, 46, 430, 369, 80, 371, 266, 54, 89, 90, - 216, 563, 128, 305, 517, 440, 217, 218, 219, 220 +/* YYRLINE[YYN] -- source line where rule number YYN was defined. */ +static const unsigned short yyrline[] = +{ + 0, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, + 1122, 1123, 1123, 1123, 1123, 1123, 1123, 1124, 1124, 1124, + 1124, 1124, 1124, 1125, 1125, 1125, 1125, 1125, 1125, 1128, + 1128, 1129, 1129, 1130, 1130, 1131, 1131, 1132, 1132, 1136, + 1136, 1137, 1137, 1138, 1138, 1139, 1139, 1140, 1140, 1141, + 1141, 1142, 1142, 1143, 1144, 1149, 1150, 1150, 1150, 1150, + 1150, 1152, 1152, 1152, 1153, 1153, 1157, 1161, 1166, 1166, + 1168, 1169, 1174, 1180, 1181, 1182, 1183, 1184, 1188, 1189, + 1190, 1194, 1195, 1196, 1197, 1201, 1202, 1203, 1207, 1208, + 1209, 1210, 1211, 1215, 1216, 1217, 1220, 1221, 1222, 1223, + 1224, 1225, 1226, 1233, 1234, 1235, 1236, 1237, 1238, 1239, + 1240, 1241, 1244, 1245, 1250, 1251, 1252, 1253, 1256, 1257, + 1264, 1265, 1271, 1272, 1280, 1288, 1289, 1294, 1295, 1296, + 1301, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1317, 1321, + 1325, 1332, 1337, 1345, 1375, 1406, 1411, 1423, 1433, 1437, + 1447, 1454, 1461, 1468, 1473, 1478, 1485, 1486, 1493, 1500, + 1508, 1514, 1526, 1554, 1570, 1597, 1625, 1651, 1671, 1697, + 1717, 1729, 1736, 1802, 1812, 1822, 1828, 1838, 1844, 1854, + 1859, 1864, 1872, 1884, 1906, 1914, 1920, 1931, 1936, 1941, + 1947, 1953, 1962, 1966, 1974, 1974, 1977, 1977, 1980, 1992, + 2013, 2018, 2026, 2027, 2031, 2031, 2035, 2035, 2038, 2041, + 2065, 2076, 2076, 2087, 2086, 2096, 2095, 2106, 2125, 2128, + 2134, 2144, 2148, 2153, 2155, 2160, 2165, 2174, 2184, 2195, + 2199, 2208, 2217, 2222, 2343, 2343, 2345, 2354, 2354, 2356, + 2361, 2373, 2377, 2382, 2386, 2390, 2394, 2398, 2402, 2406, + 2410, 2414, 2439, 2443, 2453, 2457, 2461, 2466, 2473, 2473, + 2479, 2488, 2492, 2501, 2510, 2519, 2523, 2530, 2534, 2538, + 2543, 2553, 2572, 2581, 2661, 2665, 2672, 2683, 2696, 2706, + 2717, 2727, 2736, 2745, 2748, 2749, 2756, 2760, 2765, 2786, + 2803, 2817, 2831, 2843, 2851, 2858, 2864, 2870, 2876, 2891, + 2976, 2981, 2985, 2992, 2999, 3007, 3014, 3022, 3030, 3044, + 3061 }; +#endif -static const short yypact[] = { 42, --32768,-32768,-32768,-32768,-32768,-32768,-32768, -21, -131, 60, - -93, 105, -22, 182,-32768, 525,-32768, 46, 168, -12, - 19,-32768, 1, 152,-32768, 1277,-32768,-32768,-32768,-32768, --32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 90, 90, - 100,-32768,-32768,-32768, 90,-32768,-32768,-32768,-32768,-32768, - 90, 186,-32768, 12, 187, 201, 209,-32768,-32768,-32768, --32768,-32768, 93,-32768,-32768,-32768,-32768,-32768,-32768,-32768, --32768, 252, 254, 2, 907,-32768,-32768,-32768, 13,-32768, - 225, 225, 150,-32768, 76, 116, 116,-32768,-32768, 108, --32768,-32768,-32768,-32768,-32768,-32768,-32768, -79, 1027,-32768, - 111, 114, 947, 93,-32768, 13, -104,-32768, 1027, 76, - 76,-32768,-32768, 1067,-32768,-32768, 1299, 266,-32768,-32768, --32768,-32768,-32768, 1330,-32768, -16, 1572,-32768, 256,-32768, --32768, 13,-32768, 139, 144, 1370, 1370, 132, -95, 1370, --32768, 145, 1299, 1370, 93, 147, 13, 311,-32768, 43, - 290, 293, 298, 299, 302, 247, 303, 724,-32768,-32768, - 35,-32768,-32768,-32768,-32768,-32768, 258, 1450, 70, 305, - 116,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, --32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 317, 405, - 1370, 1370, 1370, 1370,-32768,-32768,-32768,-32768,-32768,-32768, --32768,-32768,-32768,-32768,-32768,-32768, 1370, 1370, 1370, 1370, - 1370, 1370, 1370, 1370, 1370,-32768, 116,-32768, 34,-32768, --32768, 131, 1107,-32768, 6, -46,-32768, 164, 13,-32768, --32768, 13, 1067,-32768,-32768,-32768,-32768,-32768,-32768,-32768, --32768,-32768,-32768,-32768, 317, 405, 173, 178, 179, 189, - 192, 1179, 1481, 987, 314, 193, 197, 198,-32768,-32768, - 202, 203,-32768, 93, 565,-32768, 699, 699,-32768, 699, - 1330,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, --32768, 1370,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, --32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 1370, 113, - 137,-32768, 565, -10, 205, 207, 208, 210, 218, 219, - 565, 565, 330, 1330, 1370, 1370,-32768,-32768,-32768,-32768, --32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 106,-32768, --32768,-32768, 106, 202, 202, 331, 220, 221, 1299, 1299, - 1299, 1299, 1299,-32768,-32768, -41, 1005, -61,-32768, -91, --32768, 1299, 1299, 1299, -13,-32768, 1219,-32768,-32768,-32768, --32768,-32768,-32768,-32768,-32768, 313, 1299,-32768,-32768,-32768, --32768, 226,-32768, 227, 699, 565, 565, 23,-32768, 24, --32768,-32768, 699, 223, 1370, 1370, 1370, 1370, 1370, 232, - 233, 1370, 699, 565, 234,-32768,-32768,-32768,-32768,-32768, --32768,-32768, 1370, 1299, 1299,-32768, 235, 236, 237, 239, - 1299,-32768, 231, 724, -76,-32768,-32768, 241, 242, 352, - 369, 388,-32768, 202,-32768, 13, 246, 243,-32768, 374, - -59, 380, 385, 253, 257, 270, 699, 414, 699, 272, - 273, 699, 278, 13,-32768, 280, 282, 699, 699, 13, - 283, 287, 1370, -112, 288, 289, -33, 1299, 1299, 1299, - 1299,-32768,-32768, 294, 1299, 1299, 1370,-32768,-32768,-32768, - 79, 1259,-32768, 292,-32768, 699, 699, 1370, 699, 699, - 287,-32768, 287, 1370, 699, 307, 1370, 1370, 1370,-32768, --32768, 1370, 392,-32768, 565,-32768, 1299, 1299,-32768, 308, - 295, 309, 310,-32768, 301, 315, 7,-32768,-32768,-32768, - 13, 10, 427, 318, 306, 565, 52,-32768,-32768,-32768, --32768,-32768, 316, 699,-32768,-32768,-32768, 71, 287, 322, - 325, 1299,-32768, 1299, 1299,-32768,-32768,-32768, 79,-32768, - 407,-32768, 444, -4,-32768, 1370,-32768,-32768, 323,-32768, --32768,-32768,-32768, 327, 328, 329,-32768, 464,-32768, 699, --32768, 859, -3, 131, 565, -14,-32768, 106,-32768,-32768, --32768,-32768,-32768, 334,-32768, 859,-32768, 452, 465, 336, - 131, 699, 699, 468, 416,-32768, 699, 471,-32768, 699, --32768, 490, 491,-32768 +#if YYDEBUG || YYERROR_VERBOSE +/* YYTNME[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", "X86_FP80", "FP128", "PPC_FP128", "LABEL", "TYPE", + "LOCALVAR", "GLOBALVAR", "LABELSTR", "STRINGCONSTANT", + "ATSTRINGCONSTANT", "PCTSTRINGCONSTANT", "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", "SIGNEXT", "ZEROEXT", "NORETURN", + "INREG", "SRET", "NOUNWIND", "NOALIAS", "BYVAL", "NEST", "DEFAULT", + "HIDDEN", "PROTECTED", "'='", "','", "'*'", "'\\\\'", "'('", "')'", + "'['", "'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", "AliaseeRef", "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 -static const short yypgoto[] = { 365, - 366, 367, 255, 251, -168,-32768, 0, -40, 408, 14, --32768,-32768,-32768,-32768, 40,-32768,-32768,-32768, -158,-32768, - -406,-32768, -226,-32768, -290, 3,-32768, -317,-32768,-32768, - -25, 296, -119,-32768, 409, 413, -60, -155, -231, 166, - 119, 284,-32768,-32768, 504,-32768,-32768,-32768,-32768,-32768, --32768,-32768,-32768,-32768,-32768,-32768, 435,-32768,-32768,-32768, --32768,-32768,-32768, -525, -139, 47, -183,-32768, 474,-32768, --32768,-32768,-32768,-32768, 37, 124,-32768,-32768,-32768,-32768 +# ifdef YYPRINT +/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to + token YYLEX-NUM. */ +static const unsigned short 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, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 61, 44, 42, 92, + 40, 41, 91, 120, 93, 60, 62, 123, 125, 99 }; +# endif +/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ +static const unsigned char yyr1[] = +{ + 0, 160, 161, 161, 161, 161, 161, 161, 161, 161, + 161, 162, 162, 162, 162, 162, 162, 163, 163, 163, + 163, 163, 163, 163, 163, 163, 163, 163, 163, 164, + 164, 164, 164, 164, 164, 164, 164, 164, 164, 165, + 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, + 165, 165, 165, 165, 165, 166, 167, 167, 167, 167, + 167, 168, 168, 168, 169, 169, 170, 170, 171, 171, + 172, 172, 173, 174, 174, 174, 174, 174, 175, 175, + 175, 176, 176, 176, 176, 177, 177, 177, 178, 178, + 178, 178, 178, 179, 179, 179, 180, 180, 180, 180, + 180, 180, 180, 181, 181, 181, 181, 181, 181, 181, + 181, 181, 182, 182, 183, 183, 183, 183, 184, 184, + 185, 185, 186, 186, 187, 188, 188, 189, 189, 190, + 190, 191, 191, 191, 191, 191, 191, 191, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, + 192, 193, 194, 194, 195, 195, 196, 196, 196, 196, + 197, 197, 198, 198, 198, 198, 198, 198, 198, 198, + 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, + 198, 198, 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 200, 200, 201, 201, 202, 202, 203, 203, + 204, 204, 205, 205, 207, 206, 208, 206, 206, 206, + 206, 209, 206, 210, 206, 211, 206, 206, 206, 206, + 212, 213, 213, 214, 215, 215, 215, 216, 216, 217, + 217, 217, 217, 218, 219, 219, 220, 221, 221, 222, + 223, 224, 224, 225, 225, 225, 225, 225, 225, 225, + 225, 225, 225, 225, 226, 226, 226, 226, 227, 227, + 228, 229, 229, 230, 231, 231, 231, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 233, 233, 234, 235, + 235, 236, 236, 236, 237, 237, 238, 238, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 239, 240, 240, 241, 241, 241, 241, 241, 241, 241, + 241 +}; -#define YYLAST 1705 - +/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ +static const unsigned char 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, 1, 1, 1, 1, 0, 2, 0, 1, 1, + 1, 0, 2, 1, 1, 1, 1, 1, 1, 1, + 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, + 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, + 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 0, 2, 1, 1, 1, 1, 0, 2, + 0, 2, 0, 3, 2, 0, 1, 0, 3, 1, + 2, 1, 1, 1, 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, 2, 6, + 1, 0, 1, 2, 0, 3, 0, 3, 3, 3, + 3, 0, 7, 0, 8, 0, 8, 5, 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 +}; -static const short yytable[] = { 11, - 79, 270, 259, 333, 161, 102, 269, 269, 234, 302, - 381, 162, 271, 13, 23, 11, 401, 402, 260, 471, - 421, 348, 350, 578, 306, 307, 308, 309, 310, 13, - 20, 313, 88, 437, 439, 108, 574, 109, 496, 422, - 91, -200, 140, 421, 21, -54, -54, -54, -54, 106, - 580, 140, 25, 141, 2, 411, 159, 4, 314, -66, - 1, 2, 228, 3, 4, 5, 417, 129, 235, 236, - 411, 6, 7, 132, 130, 438, 438, 106, 81, 82, - 267, 464, 231, 132, 86, 411, 268, 411, 147, 11, - 87, 43, 8, 44, 416, 9, 475, 1, 147, 10, - 3, 108, 5, 109, 539, 411, 470, 115, 116, 331, - 225, 226, 412, 484, 229, 415, 24, 499, 232, 396, - 397, 398, 26, 27, 399, 370, 1, 370, 370, 3, - 370, 5, 395, 55, 83, 431, 84, 108, 564, 109, - 163, 383, 265, 396, 397, 398, 315, 316, 399, 561, - 575, 375, 57, 108, 108, 109, 109, 538, 103, 330, - 108, 494, 109, 370, 56, 300, 301, 265, 303, 92, - 581, 370, 370, 59, 262, 118, 119, 120, 121, 122, - 123, 304, 265, 265, 265, 265, 265, 311, 312, 265, - 520, 112, 521, 113, 393, 317, 318, 132, 546, 110, - 111, 443, 547, 445, 446, 447, 88, 147, 95, 47, - 48, 49, 319, 320, 50, 321, 322, 546, 323, 324, - 325, 550, 96, 28, 29, 30, 31, 32, 33, 34, - 97, 35, 36, 37, 38, 370, 370, 370, 551, 396, - 397, 398, 99, 370, 399, 147, 512, 317, 318, 237, - 238, 239, 240, 370, 370, 100, 376, 101, 259, 378, - 108, 84, 109, 136, 319, 320, 137, 321, 322, 160, - 323, 324, 325, 377, 260, 143, 144, 221, 406, 407, - 408, 409, 410, 380, 108, 223, 109, 227, 147, 394, - 265, 418, 419, 420, 224, 230, 233, 370, -55, 370, - 522, -56, 370, 525, 526, 527, -59, -58, 370, 370, - -57, 241, 263, 372, 373, 269, 374, 61, 62, 332, - 566, 414, 339, 568, 36, 37, 38, 340, 341, 1, - 2, 426, 3, 4, 5, 351, 370, 370, 342, 370, - 370, 343, 352, 455, 456, 370, 353, 354, 355, 382, - 462, 384, 357, 385, 386, 370, 387, 390, 391, 265, - 444, 265, 265, 265, 388, 389, 450, 392, 403, 404, - 405, 429, 432, 433, 442, 562, 370, 454, 448, 449, - 453, 458, 459, 460, 370, 461, 463, 465, 466, 467, - 468, 469, 472, 473, 576, 474, 476, 500, 501, 502, - 503, 477, 478, 479, 505, 506, 272, 273, 274, 275, - 276, 277, 278, 279, 280, 281, 480, 482, 484, 485, - 370, 434, 435, 436, 487, 370, 488, 495, 489, 441, - 283, 284, 492, 493, 497, 498, 530, 531, 513, 451, - 452, 507, 370, 370, 438, 533, 511, 370, 542, 504, - 370, 536, 516, 524, 532, 534, 535, 544, 265, 558, - 560, 265, 265, 265, 543, 537, 516, 572, 582, 548, - 508, 554, 552, 555, 556, 553, 567, 569, 570, 571, - 579, 583, 584, 481, 587, 483, 588, 590, 486, 593, - 594, 213, 214, 215, 490, 491, 338, 127, 557, 337, - 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, - 295, 296, 297, 298, 540, 139, 336, 142, 328, 42, - 565, 126, 514, 515, -199, 518, 519, 94, 528, 457, - 0, 523, 0, 0, 0, 0, 0, 0, 508, 0, - 0, 529, -66, 1, 2, 0, 3, 4, 5, 0, - 0, 0, 0, 0, 6, 7, 0, 0, 0, 0, - 0, 0, 545, 0, 0, 0, 0, 358, 359, 0, - 549, 61, 62, 360, 0, 8, 0, 0, 9, 0, - 0, 0, 10, 1, 2, 0, 3, 4, 5, 361, - 362, 363, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 364, 365, 573, 0, 0, 0, - 0, 577, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 366, 0, 0, 0, 0, 0, 0, 585, 586, - 0, 0, 0, 589, 0, 0, 591, 174, 175, 176, - 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, - 187, 188, 245, 246, 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, 247, - 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, - 205, 206, 0, 248, 0, 249, 250, 251, 0, 0, - 0, 358, 359, 0, 0, 61, 62, 360, 0, 0, - 0, 0, 108, 0, 109, 0, 0, 1, 2, 367, - 3, 4, 5, 361, 362, 363, 0, 0, 0, 0, - 61, 62, 0, 0, 0, 0, 0, 0, 364, 365, - 0, 0, 1, 2, 0, 3, 4, 5, 242, 0, - 0, 0, 0, 0, 0, 366, 0, 0, 0, 0, - 0, 0, 0, 243, 244, 0, 0, 0, 0, 0, - 0, 174, 175, 176, 177, 178, 179, 180, 181, 182, - 183, 184, 185, 186, 187, 188, 245, 246, 0, 0, - 0, 0, 0, 0, 0, 0, 174, 175, 176, 177, - 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, - 188, 245, 246, 247, 195, 196, 197, 198, 199, 200, - 201, 202, 203, 204, 205, 206, 0, 248, 0, 249, - 250, 251, 0, 0, 0, 0, 0, 0, 247, 195, - 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, - 206, 0, 248, 367, 249, 250, 251, 0, 0, 0, - 0, 358, 359, 0, 0, 0, 0, 360, 0, 0, - 0, 108, 0, 109, 0, 252, 0, 0, 253, 0, - 254, 0, 255, 361, 362, 363, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 364, 365, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 61, 62, 366, 104, 64, 65, 66, - 67, 68, 69, 70, 0, 1, 2, 0, 3, 4, - 5, 174, 175, 176, 177, 178, 179, 180, 181, 182, - 183, 184, 185, 186, 187, 188, 245, 246, 0, 0, - 0, 0, 0, 61, 62, 71, 104, 64, 65, 66, - 67, 68, 69, 70, 0, 1, 2, 0, 3, 4, - 5, 0, 0, 247, 195, 196, 197, 198, 199, 200, - 201, 202, 203, 204, 205, 206, 0, 248, 0, 249, - 250, 251, 0, 61, 62, 71, 104, 150, 151, 152, - 153, 154, 155, 70, 0, 1, 2, 0, 3, 4, - 5, 61, 62, 367, 104, 150, 151, 152, 153, 154, - 155, 70, 0, 1, 2, 0, 3, 4, 5, 0, - 0, 0, 0, 61, 62, 71, 104, 64, 65, 66, - 67, 68, 69, 70, 0, 1, 2, 0, 3, 4, - 5, 0, 0, 71, 0, 72, 0, 0, 73, 0, - 0, 74, 0, 75, 105, 131, 0, 0, 0, 0, - 0, 0, 0, 61, 62, 71, 145, 64, 65, 66, - 67, 68, 69, 70, 0, 1, 2, 0, 3, 4, - 5, 0, 0, 0, 0, 72, 0, 0, 73, 0, - 0, 74, 0, 75, 138, 0, 0, 0, 0, 0, - 0, 0, 0, 61, 62, 71, 104, 64, 65, 66, - 67, 68, 69, 70, 0, 1, 2, 0, 3, 4, - 5, 0, 0, 0, 0, 72, 0, 0, 73, 0, - 0, 74, 0, 75, 349, 327, 0, 0, 0, 0, - 0, 0, 0, 72, 0, 71, 73, 0, 0, 74, - 0, 75, 413, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 72, 0, 0, 73, 0, - 0, 74, 0, 75, 0, 61, 62, 146, 104, 150, - 151, 152, 153, 154, 155, 70, 0, 1, 2, 0, - 3, 4, 5, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 72, 0, 0, 73, 0, - 0, 74, 0, 75, 0, 61, 62, 71, 104, 64, - 65, 66, 67, 68, 69, 70, 0, 1, 2, 0, - 3, 4, 5, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 72, 0, 425, 73, 0, - 0, 74, 0, 75, 0, 61, 62, 71, 104, 64, - 65, 66, 67, 68, 69, 70, 0, 1, 2, 0, - 3, 4, 5, 61, 62, 0, 63, 64, 65, 66, - 67, 68, 69, 70, 0, 1, 2, 510, 3, 4, - 5, 0, 0, 0, 0, 61, 62, 71, 104, 150, - 151, 152, 153, 154, 155, 70, 0, 1, 2, 0, - 3, 4, 5, 0, 0, 71, 0, 72, 0, 0, - 73, 0, 344, 74, 0, 75, 61, 62, 0, 145, - 64, 65, 66, 67, 68, 69, 70, 71, 1, 2, - 0, 3, 4, 5, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, - 73, 0, 0, 74, 0, 75, 61, 62, 71, 104, - 64, 65, 66, 67, 68, 69, 70, 0, 1, 2, - 0, 3, 4, 5, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, - 73, 0, 0, 74, 0, 75, 0, 0, 71, 0, - 0, 0, 0, 0, 0, 72, 0, 0, 73, 0, - 0, 74, 0, 75, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, - 73, 0, 0, 74, 0, 75, 61, 62, 0, 264, - 64, 65, 66, 67, 68, 69, 70, 0, 1, 2, - 0, 3, 4, 5, 0, 0, 0, 0, 72, 0, - 0, 73, 0, 0, 74, 0, 75, 61, 62, 0, - 104, 150, 151, 152, 153, 154, 155, 70, 71, 1, - 2, 0, 3, 4, 5, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, - 0, 73, 0, 0, 74, 0, 75, 0, 0, 71, - 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, 0, 0, 0, 0, 72, 0, - 0, 73, 0, 0, 74, 0, 75, 165, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 166, 167, 0, 72, - 0, 0, 73, 0, 0, 74, 0, 347, 168, 169, - 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, - 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, - 190, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 191, 192, 193, 0, 0, 194, 195, 196, 197, - 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, - 208, 209, 210, 211, 212 +/* 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 unsigned short yydefact[] = +{ + 71, 61, 68, 62, 69, 63, 206, 204, 0, 0, + 0, 0, 0, 0, 81, 70, 0, 71, 202, 85, + 88, 0, 0, 218, 0, 0, 66, 0, 72, 73, + 75, 74, 76, 78, 77, 79, 80, 82, 83, 84, + 81, 81, 197, 1, 203, 86, 87, 81, 207, 89, + 90, 91, 92, 81, 265, 205, 265, 0, 0, 226, + 219, 220, 208, 254, 255, 210, 131, 132, 133, 136, + 135, 134, 137, 138, 0, 0, 0, 0, 256, 257, + 139, 209, 141, 197, 197, 93, 196, 0, 96, 96, + 266, 262, 67, 237, 238, 239, 261, 221, 222, 225, + 0, 159, 142, 0, 0, 0, 0, 148, 160, 0, + 140, 159, 0, 0, 95, 94, 0, 194, 195, 0, + 0, 97, 98, 99, 100, 101, 0, 240, 0, 302, + 264, 0, 223, 158, 112, 154, 156, 0, 0, 0, + 0, 0, 0, 147, 0, 0, 0, 153, 0, 152, + 0, 217, 131, 132, 133, 136, 135, 134, 0, 0, + 0, 211, 102, 0, 234, 235, 236, 301, 287, 0, + 0, 0, 0, 96, 274, 275, 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, 263, 96, + 278, 0, 300, 224, 151, 0, 118, 0, 0, 150, + 0, 161, 118, 213, 215, 0, 198, 179, 180, 175, + 177, 176, 178, 181, 174, 170, 171, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 173, 172, 127, 0, 286, 268, 0, 267, 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, 122, 122, 307, 0, 0, 298, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, + 106, 105, 103, 107, 108, 109, 110, 111, 113, 157, + 155, 144, 145, 146, 149, 143, 127, 127, 0, 0, + 0, 0, 0, 0, 0, 0, 163, 193, 0, 0, + 0, 167, 0, 164, 0, 0, 0, 0, 212, 232, + 243, 244, 245, 250, 246, 247, 248, 249, 241, 0, + 252, 259, 258, 260, 0, 269, 0, 0, 0, 0, + 0, 303, 0, 305, 284, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 117, 116, + 114, 115, 119, 214, 216, 0, 0, 0, 284, 0, + 0, 0, 0, 0, 162, 148, 160, 0, 165, 166, + 0, 0, 0, 0, 0, 129, 127, 231, 112, 229, + 0, 242, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 310, 0, 0, 0, 294, 295, 0, 0, + 0, 0, 292, 0, 122, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 192, 169, 0, 0, 0, 0, + 124, 130, 128, 65, 0, 118, 0, 251, 0, 0, + 283, 0, 0, 122, 123, 122, 0, 0, 0, 0, + 0, 0, 288, 289, 283, 0, 308, 0, 199, 0, + 0, 183, 0, 0, 0, 0, 168, 0, 0, 0, + 64, 228, 230, 112, 125, 0, 0, 0, 0, 0, + 290, 291, 304, 306, 285, 0, 0, 293, 296, 297, + 0, 122, 0, 0, 0, 189, 0, 0, 185, 186, + 182, 65, 126, 120, 253, 0, 0, 112, 0, 118, + 279, 0, 118, 309, 187, 188, 0, 0, 0, 227, + 0, 233, 0, 272, 0, 0, 281, 0, 0, 280, + 299, 184, 190, 191, 121, 270, 0, 271, 0, 112, + 0, 0, 0, 282, 0, 0, 0, 0, 277, 0, + 0, 276, 0, 273 }; -static const short yycheck[] = { 0, - 26, 170, 158, 230, 124, 4, 11, 11, 148, 193, - 301, 28, 171, 0, 146, 16, 334, 335, 158, 426, - 34, 253, 254, 38, 208, 209, 210, 211, 212, 16, - 52, 215, 21, 11, 11, 148, 562, 150, 151, 53, - 29, 0, 147, 34, 66, 3, 4, 5, 6, 75, - 576, 147, 146, 158, 20, 147, 117, 23, 217, 18, - 19, 20, 158, 22, 23, 24, 158, 147, 26, 27, - 147, 30, 31, 99, 154, 53, 53, 103, 39, 40, - 11, 158, 143, 109, 45, 147, 17, 147, 114, 90, - 51, 46, 51, 48, 156, 54, 156, 19, 124, 58, - 22, 148, 24, 150, 511, 147, 424, 32, 33, 156, - 136, 137, 154, 147, 140, 347, 57, 151, 144, 134, - 135, 136, 18, 146, 139, 265, 19, 267, 268, 22, - 270, 24, 316, 146, 35, 367, 37, 148, 545, 150, - 157, 152, 168, 134, 135, 136, 113, 114, 139, 154, - 154, 271, 152, 148, 148, 150, 150, 151, 157, 154, - 148, 452, 150, 303, 146, 191, 192, 193, 194, 158, - 577, 311, 312, 22, 161, 60, 61, 62, 63, 64, - 65, 207, 208, 209, 210, 211, 212, 213, 214, 215, - 481, 42, 483, 44, 314, 117, 118, 223, 147, 81, - 82, 385, 151, 387, 388, 389, 21, 233, 22, 42, - 43, 44, 134, 135, 47, 137, 138, 147, 140, 141, - 142, 151, 22, 42, 43, 44, 45, 46, 47, 48, - 22, 50, 143, 144, 145, 375, 376, 377, 529, 134, - 135, 136, 150, 383, 139, 271, 473, 117, 118, 3, - 4, 5, 6, 393, 394, 4, 282, 4, 414, 147, - 148, 37, 150, 153, 134, 135, 153, 137, 138, 4, - 140, 141, 142, 299, 414, 110, 111, 22, 339, 340, - 341, 342, 343, 147, 148, 147, 150, 156, 314, 315, - 316, 352, 353, 354, 151, 151, 150, 437, 9, 439, - 484, 9, 442, 487, 488, 489, 9, 9, 448, 449, - 9, 9, 55, 267, 268, 11, 270, 7, 8, 156, - 547, 347, 150, 550, 143, 144, 145, 150, 150, 19, - 20, 357, 22, 23, 24, 22, 476, 477, 150, 479, - 480, 150, 150, 404, 405, 485, 150, 150, 147, 303, - 411, 147, 150, 147, 147, 495, 147, 311, 312, 385, - 386, 387, 388, 389, 147, 147, 392, 38, 38, 150, - 150, 59, 147, 147, 152, 544, 516, 403, 147, 147, - 147, 147, 147, 147, 524, 147, 156, 147, 147, 38, - 22, 4, 147, 151, 563, 22, 17, 458, 459, 460, - 461, 17, 150, 147, 465, 466, 90, 91, 92, 93, - 94, 95, 96, 97, 98, 99, 147, 4, 147, 147, - 560, 375, 376, 377, 147, 565, 147, 453, 147, 383, - 26, 27, 150, 147, 147, 147, 497, 498, 147, 393, - 394, 467, 582, 583, 53, 151, 472, 587, 22, 156, - 590, 151, 478, 147, 147, 147, 147, 152, 484, 53, - 17, 487, 488, 489, 147, 151, 492, 4, 17, 154, - 471, 532, 151, 534, 535, 151, 154, 151, 151, 151, - 147, 17, 147, 437, 17, 439, 71, 17, 442, 0, - 0, 127, 127, 127, 448, 449, 246, 90, 539, 245, - 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, - 106, 107, 108, 109, 512, 103, 233, 109, 223, 16, - 546, 87, 476, 477, 0, 479, 480, 54, 492, 406, - -1, 485, -1, -1, -1, -1, -1, -1, 539, -1, - -1, 495, 18, 19, 20, -1, 22, 23, 24, -1, - -1, -1, -1, -1, 30, 31, -1, -1, -1, -1, - -1, -1, 516, -1, -1, -1, -1, 3, 4, -1, - 524, 7, 8, 9, -1, 51, -1, -1, 54, -1, - -1, -1, 58, 19, 20, -1, 22, 23, 24, 25, - 26, 27, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 40, 41, 560, -1, -1, -1, - -1, 565, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 57, -1, -1, -1, -1, -1, -1, 582, 583, - -1, -1, -1, 587, -1, -1, 590, 73, 74, 75, - 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, - 86, 87, 88, 89, -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, 115, - 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, - 126, 127, -1, 129, -1, 131, 132, 133, -1, -1, - -1, 3, 4, -1, -1, 7, 8, 9, -1, -1, - -1, -1, 148, -1, 150, -1, -1, 19, 20, 155, - 22, 23, 24, 25, 26, 27, -1, -1, -1, -1, - 7, 8, -1, -1, -1, -1, -1, -1, 40, 41, - -1, -1, 19, 20, -1, 22, 23, 24, 25, -1, - -1, -1, -1, -1, -1, 57, -1, -1, -1, -1, - -1, -1, -1, 40, 41, -1, -1, -1, -1, -1, - -1, 73, 74, 75, 76, 77, 78, 79, 80, 81, - 82, 83, 84, 85, 86, 87, 88, 89, -1, -1, - -1, -1, -1, -1, -1, -1, 73, 74, 75, 76, - 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, - 87, 88, 89, 115, 116, 117, 118, 119, 120, 121, - 122, 123, 124, 125, 126, 127, -1, 129, -1, 131, - 132, 133, -1, -1, -1, -1, -1, -1, 115, 116, - 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, - 127, -1, 129, 155, 131, 132, 133, -1, -1, -1, - -1, 3, 4, -1, -1, -1, -1, 9, -1, -1, - -1, 148, -1, 150, -1, 152, -1, -1, 155, -1, - 157, -1, 159, 25, 26, 27, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 40, 41, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 7, 8, 57, 10, 11, 12, 13, - 14, 15, 16, 17, -1, 19, 20, -1, 22, 23, - 24, 73, 74, 75, 76, 77, 78, 79, 80, 81, - 82, 83, 84, 85, 86, 87, 88, 89, -1, -1, - -1, -1, -1, 7, 8, 49, 10, 11, 12, 13, - 14, 15, 16, 17, -1, 19, 20, -1, 22, 23, - 24, -1, -1, 115, 116, 117, 118, 119, 120, 121, - 122, 123, 124, 125, 126, 127, -1, 129, -1, 131, - 132, 133, -1, 7, 8, 49, 10, 11, 12, 13, - 14, 15, 16, 17, -1, 19, 20, -1, 22, 23, - 24, 7, 8, 155, 10, 11, 12, 13, 14, 15, - 16, 17, -1, 19, 20, -1, 22, 23, 24, -1, - -1, -1, -1, 7, 8, 49, 10, 11, 12, 13, - 14, 15, 16, 17, -1, 19, 20, -1, 22, 23, - 24, -1, -1, 49, -1, 149, -1, -1, 152, -1, - -1, 155, -1, 157, 158, 39, -1, -1, -1, -1, - -1, -1, -1, 7, 8, 49, 10, 11, 12, 13, - 14, 15, 16, 17, -1, 19, 20, -1, 22, 23, - 24, -1, -1, -1, -1, 149, -1, -1, 152, -1, - -1, 155, -1, 157, 158, -1, -1, -1, -1, -1, - -1, -1, -1, 7, 8, 49, 10, 11, 12, 13, - 14, 15, 16, 17, -1, 19, 20, -1, 22, 23, - 24, -1, -1, -1, -1, 149, -1, -1, 152, -1, - -1, 155, -1, 157, 158, 39, -1, -1, -1, -1, - -1, -1, -1, 149, -1, 49, 152, -1, -1, 155, - -1, 157, 158, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 149, -1, -1, 152, -1, - -1, 155, -1, 157, -1, 7, 8, 121, 10, 11, - 12, 13, 14, 15, 16, 17, -1, 19, 20, -1, - 22, 23, 24, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 149, -1, -1, 152, -1, - -1, 155, -1, 157, -1, 7, 8, 49, 10, 11, - 12, 13, 14, 15, 16, 17, -1, 19, 20, -1, - 22, 23, 24, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 149, -1, 39, 152, -1, - -1, 155, -1, 157, -1, 7, 8, 49, 10, 11, - 12, 13, 14, 15, 16, 17, -1, 19, 20, -1, - 22, 23, 24, 7, 8, -1, 10, 11, 12, 13, - 14, 15, 16, 17, -1, 19, 20, 39, 22, 23, - 24, -1, -1, -1, -1, 7, 8, 49, 10, 11, - 12, 13, 14, 15, 16, 17, -1, 19, 20, -1, - 22, 23, 24, -1, -1, 49, -1, 149, -1, -1, - 152, -1, 154, 155, -1, 157, 7, 8, -1, 10, - 11, 12, 13, 14, 15, 16, 17, 49, 19, 20, - -1, 22, 23, 24, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 149, -1, -1, - 152, -1, -1, 155, -1, 157, 7, 8, 49, 10, - 11, 12, 13, 14, 15, 16, 17, -1, 19, 20, - -1, 22, 23, 24, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 149, -1, -1, - 152, -1, -1, 155, -1, 157, -1, -1, 49, -1, - -1, -1, -1, -1, -1, 149, -1, -1, 152, -1, - -1, 155, -1, 157, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 149, -1, -1, - 152, -1, -1, 155, -1, 157, 7, 8, -1, 10, - 11, 12, 13, 14, 15, 16, 17, -1, 19, 20, - -1, 22, 23, 24, -1, -1, -1, -1, 149, -1, - -1, 152, -1, -1, 155, -1, 157, 7, 8, -1, - 10, 11, 12, 13, 14, 15, 16, 17, 49, 19, - 20, -1, 22, 23, 24, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 149, -1, - -1, 152, -1, -1, 155, -1, 157, -1, -1, 49, - -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, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 149, -1, - -1, 152, -1, -1, 155, -1, 157, 36, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 55, 56, -1, 149, - -1, -1, 152, -1, -1, 155, -1, 157, 67, 68, - 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, - 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, - 89, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 110, 111, 112, -1, -1, 115, 116, 117, 118, - 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, - 129, 130, 131, 132, 133 +/* YYDEFGOTO[NTERM-NUM]. */ +static const short yydefgoto[] = +{ + -1, 258, 259, 260, 284, 301, 158, 159, 78, 511, + 12, 79, 14, 15, 40, 41, 42, 47, 53, 116, + 126, 328, 224, 402, 331, 561, 381, 425, 543, 358, + 426, 80, 160, 135, 150, 136, 137, 109, 347, 370, + 348, 119, 87, 151, 16, 17, 18, 20, 19, 263, + 336, 337, 62, 23, 60, 100, 429, 430, 127, 166, + 54, 95, 55, 48, 432, 371, 82, 373, 268, 56, + 91, 92, 218, 565, 130, 307, 519, 442, 219, 220, + 221, 222 }; -/* -*-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. +/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing + STATE-NUM. */ +#define YYPACT_NINF -529 +static const short yypact[] = +{ + 40, -529, -529, -529, -529, -529, -529, -529, -17, -107, + 12, -64, 78, -40, 183, -529, 150, 370, -529, 147, + 115, -5, 26, -529, 14, 132, -529, 1319, -529, -529, + -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, + -90, -90, 173, -529, -529, -529, -529, -90, -529, -529, + -529, -529, -529, -90, 154, -529, -7, 179, 197, 214, + -529, -529, -529, -529, -529, 96, -529, -529, -529, -529, + -529, -529, -529, -529, 253, 258, 3, 791, -529, -529, + -529, 145, -529, 228, 228, 287, -529, 191, 189, 189, + -529, -529, 109, -529, -529, -529, -529, -529, -529, -529, + -66, 1052, -529, 125, 135, 835, 96, -529, 145, -110, + -529, 1052, 191, 191, -529, -529, 1092, -529, -529, 1359, + 285, -529, -529, -529, -529, -529, 1377, -529, -12, 1525, + -529, 272, -529, -529, 145, -529, 153, 152, 1430, 1430, + 168, -106, 1430, -529, 157, 1359, 1430, 96, 159, 145, + 102, -529, 39, 321, 323, 325, 326, 327, 266, 328, + 750, -529, -529, 141, -529, -529, -529, -529, -529, 288, + 1470, 94, 329, 189, -529, -529, -529, -529, -529, -529, + -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, + -529, 222, 625, 1430, 1430, 1430, 1430, -529, -529, -529, + -529, -529, -529, -529, -529, -529, -529, -529, -529, 1430, + 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, -529, 189, + -529, 128, -529, -529, 126, 1110, -529, -53, -72, -529, + 188, 145, -529, -529, 145, 1092, -529, -529, -529, -529, + -529, -529, -529, -529, -529, -529, -529, 222, 625, 195, + 196, 200, 201, 202, 1204, 1528, 1012, 331, 204, 206, + 208, -529, -529, 212, 210, -529, 96, 486, -529, 623, + 623, -529, 623, 1377, -529, -529, -529, -529, -529, -529, + -529, -529, -529, -529, 1430, -529, -529, -529, -529, -529, + -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, + -529, 1430, -1, 32, -529, 486, 52, 219, 220, 224, + 227, 230, 233, 486, 486, 343, 1377, 1430, 1430, -529, + -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, + -529, 77, -529, -529, -529, 77, 212, 212, 344, 234, + 235, 1359, 1359, 1359, 1359, 1359, -529, -529, -61, 1031, + -100, -529, -101, -529, 1359, 1359, 1359, -19, -529, 1261, + -529, -529, -529, -529, -529, -529, -529, -529, 310, 1359, + -529, -529, -529, -529, 236, -529, 240, 623, 486, 486, + 20, -529, 21, -529, -529, 623, 239, 1430, 1430, 1430, + 1430, 1430, 249, 250, 1430, 623, 486, 251, -529, -529, + -529, -529, -529, -529, -529, 1430, 1359, 1359, -529, 252, + 259, 260, 264, 1359, -529, 256, 750, -75, -529, -529, + 267, 268, 375, 396, 415, -529, 212, -529, 145, 273, + 274, -529, 401, -79, 409, 413, 281, 286, 289, 623, + 428, 623, 290, 291, 623, 292, 145, -529, 293, 299, + 623, 623, 145, 284, 300, 1430, 84, 303, 304, -44, + 1359, 1359, 1359, 1359, -529, -529, 279, 1359, 1359, 1430, + -529, -529, -529, 80, 1279, -529, 306, -529, 623, 623, + 1430, 623, 623, 300, -529, 300, 1430, 623, 308, 1430, + 1430, 1430, -529, -529, 1430, 403, -529, 486, -529, 1359, + 1359, -529, 311, 315, 312, 314, -529, 316, 318, 129, + -529, -529, -529, 145, 4, 435, 324, 320, 486, -33, + -529, -529, -529, -529, -529, 330, 623, -529, -529, -529, + -32, 300, 319, 332, 1359, -529, 1359, 1359, -529, -529, + -529, 80, -529, 421, -529, 445, -2, -529, 1430, -529, + -529, 333, -529, -529, -529, -529, 334, 335, 340, -529, + 471, -529, 623, -529, 885, 2, 126, 486, 42, -529, + 77, -529, -529, -529, -529, -529, 345, -529, 885, -529, + 460, 479, 350, 126, 623, 623, 483, 430, -529, 623, + 485, -529, 623, -529 +}; - 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. +/* YYPGOTO[NTERM-NUM]. */ +static const short yypgoto[] = +{ + -529, 374, 378, 385, 257, 269, -170, -529, 0, -25, + 423, 8, -529, -529, -529, -529, 95, -529, -529, -529, + -152, -529, -424, -529, -227, -529, -291, 5, -529, -318, + -529, -529, -26, 295, -120, -529, 407, 416, -58, -157, + -232, 161, 198, 294, -529, -529, 506, -529, -529, -529, + -529, -529, -529, -529, -529, -529, -529, -529, 436, -529, + -529, -529, -529, -529, -529, -528, -140, 103, -184, -529, + 468, -529, -529, -529, -529, -529, 34, 122, -529, -529, + -529, -529 +}; - 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. +/* 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 -202 +static const short yytable[] = +{ + 11, 81, 272, 261, 473, 335, 163, 104, 13, 271, + 236, 304, 383, 271, 90, 423, 164, 11, 403, 404, + 262, 273, 93, 350, 352, 13, 308, 309, 310, 311, + 312, 439, 441, 315, 424, 21, 576, 142, 423, 24, + -201, 142, -55, -55, -55, -55, 413, 413, 143, 22, + 582, 108, 230, 37, 38, 39, 418, 419, -67, 1, + 2, 161, 3, 4, 5, 237, 238, 316, 413, 25, + 6, 7, 413, 440, 440, 134, 110, 477, 111, 108, + 580, 131, 26, 466, 333, 134, 413, 233, 132, 541, + 149, 8, 11, 414, 9, 110, 27, 111, 10, 1, + 149, 332, 3, 486, 5, 269, 28, 501, 472, 63, + 64, 270, 227, 228, 548, 548, 231, 417, 549, 552, + 234, 1, 2, 566, 3, 4, 5, 372, 1, 372, + 372, 3, 372, 5, 397, 83, 84, 433, 398, 399, + 400, 57, 88, 401, 267, 165, 380, 110, 89, 111, + 43, 94, 563, 377, 61, 583, 577, 49, 50, 51, + 105, 2, 52, 496, 4, 372, 59, 302, 303, 267, + 305, 264, 58, 372, 372, 90, 398, 399, 400, 382, + 110, 401, 111, 306, 267, 267, 267, 267, 267, 313, + 314, 267, 522, 45, 523, 46, 395, 319, 320, 134, + 110, 97, 111, 445, 385, 447, 448, 449, 85, 149, + 86, 398, 399, 400, 321, 322, 401, 323, 324, 98, + 325, 326, 327, 117, 118, 29, 30, 31, 32, 33, + 34, 35, 110, 36, 111, 498, 99, 372, 372, 372, + 553, 317, 318, 319, 320, 372, 101, 149, 514, 120, + 121, 122, 123, 124, 125, 372, 372, 102, 378, 261, + 321, 322, 103, 323, 324, 86, 325, 326, 327, 239, + 240, 241, 242, 145, 146, 379, 262, 110, 138, 111, + 540, 112, 113, 408, 409, 410, 411, 412, 139, 162, + 149, 396, 267, 110, 223, 111, 420, 421, 422, 372, + 225, 372, 524, 226, 372, 527, 528, 529, 232, 235, + 372, 372, 274, 275, 276, 277, 278, 279, 280, 281, + 282, 283, 568, 416, 229, 570, 37, 38, 39, 114, + -56, 115, -57, 428, -60, -59, -58, 243, 372, 372, + 271, 372, 372, 265, 334, 341, 342, 372, 457, 458, + 343, 344, 345, 353, 354, 464, 355, 372, 356, 357, + 359, 267, 446, 267, 267, 267, 386, 387, 452, 431, + -200, 388, 374, 375, 389, 376, 564, 390, 372, 456, + 391, 394, 405, 434, 406, 407, 372, 435, -67, 1, + 2, 444, 3, 4, 5, 578, 450, 451, 455, 460, + 6, 7, 502, 503, 504, 505, 461, 462, 384, 507, + 508, 463, 465, 469, 467, 468, 392, 393, 470, 471, + 474, 8, 372, 476, 9, 475, 478, 372, 10, 497, + 479, 480, 484, 481, 494, 506, 482, 486, 487, 489, + 490, 532, 533, 509, 372, 372, 491, 495, 513, 372, + 499, 500, 372, 515, 518, 526, 440, 544, 534, 536, + 267, 537, 562, 267, 267, 267, 535, 538, 518, 539, + 554, 545, 546, 510, 560, 574, 556, 584, 557, 558, + 436, 437, 438, 555, 550, 571, 572, 569, 443, 360, + 361, 573, 581, 63, 64, 362, 585, 586, 453, 454, + 589, 590, 592, 215, 339, 1, 2, 216, 3, 4, + 5, 363, 364, 365, 217, 129, 559, 340, 144, 542, + 330, 141, 567, 44, 96, 128, 366, 367, 530, 338, + 459, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 510, 483, 368, 485, 0, 0, 488, 0, 0, + 0, 0, 0, 492, 493, 0, 0, 0, 0, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 247, 248, 0, 0, 0, 0, + 0, 516, 517, 0, 520, 521, 0, 0, 0, 0, + 525, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 531, 249, 197, 198, 199, 200, 201, 202, 203, 204, + 205, 206, 207, 208, 0, 250, 0, 251, 252, 253, + 0, 547, 0, 0, 0, 0, 360, 361, 0, 551, + 63, 64, 362, 0, 110, 0, 111, 0, 0, 0, + 0, 369, 1, 2, 0, 3, 4, 5, 363, 364, + 365, 285, 286, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 366, 367, 575, 0, 0, 0, 0, + 579, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 368, 0, 0, 0, 0, 0, 0, 587, 588, 0, + 0, 0, 591, 0, 0, 593, 176, 177, 178, 179, + 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, + 190, 247, 248, 0, 0, 0, 0, 0, 0, 0, + 0, 287, 288, 289, 290, 291, 292, 293, 294, 295, + 296, 297, 298, 299, 300, 0, 0, 0, 249, 197, + 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, + 208, 0, 250, 0, 251, 252, 253, 63, 64, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, + 2, 0, 3, 4, 5, 244, 0, 0, 369, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 245, 246, 0, 0, 0, 0, 0, 0, 63, 64, + 0, 106, 66, 67, 68, 69, 70, 71, 72, 0, + 1, 2, 0, 3, 4, 5, 0, 0, 0, 0, + 0, 0, 0, 176, 177, 178, 179, 180, 181, 182, + 183, 184, 185, 186, 187, 188, 189, 190, 247, 248, + 73, 0, 63, 64, 0, 106, 66, 67, 68, 69, + 70, 71, 72, 0, 1, 2, 0, 3, 4, 5, + 0, 0, 0, 0, 0, 249, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 0, 250, + 0, 251, 252, 253, 73, 0, 0, 0, 360, 361, + 0, 0, 0, 0, 362, 0, 0, 0, 110, 0, + 111, 0, 254, 0, 0, 255, 0, 256, 0, 257, + 363, 364, 365, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 366, 367, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 74, 0, 368, 75, 0, 0, 76, 0, 77, 107, + 0, 0, 0, 0, 0, 0, 0, 0, 176, 177, + 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, + 188, 189, 190, 247, 248, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 74, 0, 0, 75, 0, 0, + 76, 0, 77, 140, 0, 0, 0, 0, 0, 0, + 249, 197, 198, 199, 200, 201, 202, 203, 204, 205, + 206, 207, 208, 0, 250, 0, 251, 252, 253, 63, + 64, 0, 106, 152, 153, 154, 155, 156, 157, 72, + 0, 1, 2, 0, 3, 4, 5, 0, 63, 64, + 369, 106, 152, 153, 154, 155, 156, 157, 72, 0, + 1, 2, 0, 3, 4, 5, 0, 0, 0, 63, + 64, 73, 106, 66, 67, 68, 69, 70, 71, 72, + 0, 1, 2, 0, 3, 4, 5, 0, 0, 0, + 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 133, 0, 0, 0, 0, 0, 0, 0, 63, + 64, 73, 147, 66, 67, 68, 69, 70, 71, 72, + 0, 1, 2, 0, 3, 4, 5, 63, 64, 0, + 106, 66, 67, 68, 69, 70, 71, 72, 0, 1, + 2, 0, 3, 4, 5, 0, 0, 0, 0, 0, + 0, 73, 0, 0, 0, 0, 0, 0, 0, 329, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, + 0, 74, 0, 0, 75, 0, 0, 76, 0, 77, + 351, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 74, 0, 0, 75, 0, 0, 76, 0, 77, 415, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 74, 0, 0, 75, 0, 0, 76, 0, 77, + 0, 63, 64, 148, 106, 152, 153, 154, 155, 156, + 157, 72, 0, 1, 2, 0, 3, 4, 5, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 74, 0, 0, 75, 0, 0, 76, 0, 77, + 0, 0, 0, 73, 0, 0, 0, 0, 0, 74, + 0, 0, 75, 0, 0, 76, 0, 77, 63, 64, + 0, 106, 66, 67, 68, 69, 70, 71, 72, 0, + 1, 2, 0, 3, 4, 5, 63, 64, 0, 106, + 66, 67, 68, 69, 70, 71, 72, 0, 1, 2, + 427, 3, 4, 5, 0, 0, 0, 0, 0, 0, + 73, 0, 0, 0, 0, 0, 0, 0, 512, 0, + 0, 0, 0, 0, 0, 0, 63, 64, 73, 65, + 66, 67, 68, 69, 70, 71, 72, 0, 1, 2, + 0, 3, 4, 5, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 74, 0, 0, 75, 0, 346, 76, + 0, 77, 0, 0, 0, 0, 63, 64, 73, 106, + 152, 153, 154, 155, 156, 157, 72, 0, 1, 2, + 0, 3, 4, 5, 63, 64, 0, 147, 66, 67, + 68, 69, 70, 71, 72, 0, 1, 2, 0, 3, + 4, 5, 0, 0, 0, 0, 0, 0, 73, 0, + 74, 0, 0, 75, 0, 0, 76, 0, 77, 0, + 0, 0, 0, 0, 0, 0, 73, 0, 74, 0, + 0, 75, 0, 0, 76, 0, 77, 63, 64, 0, + 106, 66, 67, 68, 69, 70, 71, 72, 0, 1, + 2, 0, 3, 4, 5, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 74, 0, + 0, 75, 0, 0, 76, 0, 77, 63, 64, 73, + 266, 66, 67, 68, 69, 70, 71, 72, 0, 1, + 2, 0, 3, 4, 5, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 74, 0, + 0, 75, 0, 0, 76, 0, 77, 0, 0, 73, + 0, 0, 0, 0, 0, 0, 74, 0, 0, 75, + 0, 0, 76, 0, 77, 63, 64, 0, 106, 152, + 153, 154, 155, 156, 157, 72, 0, 1, 2, 0, + 3, 4, 5, 0, 0, 0, 0, 0, 0, 0, + 0, 167, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 73, 0, 74, + 168, 169, 75, 0, 0, 76, 0, 77, 0, 0, + 0, 0, 170, 171, 172, 173, 174, 175, 176, 177, + 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, + 188, 189, 190, 191, 192, 0, 0, 0, 0, 74, + 0, 0, 75, 0, 0, 76, 0, 77, 0, 0, + 0, 0, 0, 0, 0, 193, 194, 195, 0, 0, + 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, + 206, 207, 208, 209, 210, 211, 212, 213, 214, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 74, 0, 0, + 75, 0, 0, 76, 0, 349 +}; - 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. */ +static const short yycheck[] = +{ + 0, 27, 172, 160, 428, 232, 126, 4, 0, 11, + 150, 195, 303, 11, 21, 34, 28, 17, 336, 337, + 160, 173, 29, 255, 256, 17, 210, 211, 212, 213, + 214, 11, 11, 217, 53, 52, 564, 147, 34, 146, + 0, 147, 3, 4, 5, 6, 147, 147, 158, 66, + 578, 77, 158, 143, 144, 145, 156, 158, 18, 19, + 20, 119, 22, 23, 24, 26, 27, 219, 147, 57, + 30, 31, 147, 53, 53, 101, 148, 156, 150, 105, + 38, 147, 146, 158, 156, 111, 147, 145, 154, 513, + 116, 51, 92, 154, 54, 148, 18, 150, 58, 19, + 126, 154, 22, 147, 24, 11, 146, 151, 426, 7, + 8, 17, 138, 139, 147, 147, 142, 349, 151, 151, + 146, 19, 20, 547, 22, 23, 24, 267, 19, 269, + 270, 22, 272, 24, 318, 40, 41, 369, 134, 135, + 136, 146, 47, 139, 170, 157, 147, 148, 53, 150, + 0, 158, 154, 273, 22, 579, 154, 42, 43, 44, + 157, 20, 47, 454, 23, 305, 152, 193, 194, 195, + 196, 163, 146, 313, 314, 21, 134, 135, 136, 147, + 148, 139, 150, 209, 210, 211, 212, 213, 214, 215, + 216, 217, 483, 46, 485, 48, 316, 117, 118, 225, + 148, 22, 150, 387, 152, 389, 390, 391, 35, 235, + 37, 134, 135, 136, 134, 135, 139, 137, 138, 22, + 140, 141, 142, 32, 33, 42, 43, 44, 45, 46, + 47, 48, 148, 50, 150, 151, 22, 377, 378, 379, + 531, 113, 114, 117, 118, 385, 150, 273, 475, 60, + 61, 62, 63, 64, 65, 395, 396, 4, 284, 416, + 134, 135, 4, 137, 138, 37, 140, 141, 142, 3, + 4, 5, 6, 112, 113, 301, 416, 148, 153, 150, + 151, 83, 84, 341, 342, 343, 344, 345, 153, 4, + 316, 317, 318, 148, 22, 150, 354, 355, 356, 439, + 147, 441, 486, 151, 444, 489, 490, 491, 151, 150, + 450, 451, 90, 91, 92, 93, 94, 95, 96, 97, + 98, 99, 549, 349, 156, 552, 143, 144, 145, 42, + 9, 44, 9, 359, 9, 9, 9, 9, 478, 479, + 11, 481, 482, 55, 156, 150, 150, 487, 406, 407, + 150, 150, 150, 22, 150, 413, 150, 497, 150, 147, + 150, 387, 388, 389, 390, 391, 147, 147, 394, 59, + 0, 147, 269, 270, 147, 272, 546, 147, 518, 405, + 147, 38, 38, 147, 150, 150, 526, 147, 18, 19, + 20, 152, 22, 23, 24, 565, 147, 147, 147, 147, + 30, 31, 460, 461, 462, 463, 147, 147, 305, 467, + 468, 147, 156, 38, 147, 147, 313, 314, 22, 4, + 147, 51, 562, 22, 54, 151, 17, 567, 58, 455, + 17, 150, 4, 147, 150, 156, 147, 147, 147, 147, + 147, 499, 500, 469, 584, 585, 147, 147, 474, 589, + 147, 147, 592, 147, 480, 147, 53, 22, 147, 147, + 486, 147, 17, 489, 490, 491, 151, 151, 494, 151, + 151, 147, 152, 473, 53, 4, 534, 17, 536, 537, + 377, 378, 379, 151, 154, 151, 151, 154, 385, 3, + 4, 151, 147, 7, 8, 9, 17, 147, 395, 396, + 17, 71, 17, 129, 247, 19, 20, 129, 22, 23, + 24, 25, 26, 27, 129, 92, 541, 248, 111, 514, + 225, 105, 548, 17, 56, 89, 40, 41, 494, 235, + 408, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 541, 439, 57, 441, -1, -1, 444, -1, -1, + -1, -1, -1, 450, 451, -1, -1, -1, -1, 73, + 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, + 84, 85, 86, 87, 88, 89, -1, -1, -1, -1, + -1, 478, 479, -1, 481, 482, -1, -1, -1, -1, + 487, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 497, 115, 116, 117, 118, 119, 120, 121, 122, 123, + 124, 125, 126, 127, -1, 129, -1, 131, 132, 133, + -1, 518, -1, -1, -1, -1, 3, 4, -1, 526, + 7, 8, 9, -1, 148, -1, 150, -1, -1, -1, + -1, 155, 19, 20, -1, 22, 23, 24, 25, 26, + 27, 26, 27, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 40, 41, 562, -1, -1, -1, -1, + 567, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 57, -1, -1, -1, -1, -1, -1, 584, 585, -1, + -1, -1, 589, -1, -1, 592, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, + 87, 88, 89, -1, -1, -1, -1, -1, -1, -1, + -1, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, -1, -1, -1, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, + 127, -1, 129, -1, 131, 132, 133, 7, 8, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 19, + 20, -1, 22, 23, 24, 25, -1, -1, 155, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 40, 41, -1, -1, -1, -1, -1, -1, 7, 8, + -1, 10, 11, 12, 13, 14, 15, 16, 17, -1, + 19, 20, -1, 22, 23, 24, -1, -1, -1, -1, + -1, -1, -1, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + 49, -1, 7, 8, -1, 10, 11, 12, 13, 14, + 15, 16, 17, -1, 19, 20, -1, 22, 23, 24, + -1, -1, -1, -1, -1, 115, 116, 117, 118, 119, + 120, 121, 122, 123, 124, 125, 126, 127, -1, 129, + -1, 131, 132, 133, 49, -1, -1, -1, 3, 4, + -1, -1, -1, -1, 9, -1, -1, -1, 148, -1, + 150, -1, 152, -1, -1, 155, -1, 157, -1, 159, + 25, 26, 27, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 40, 41, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 149, -1, 57, 152, -1, -1, 155, -1, 157, 158, + -1, -1, -1, -1, -1, -1, -1, -1, 73, 74, + 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, + 85, 86, 87, 88, 89, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 149, -1, -1, 152, -1, -1, + 155, -1, 157, 158, -1, -1, -1, -1, -1, -1, + 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, -1, 129, -1, 131, 132, 133, 7, + 8, -1, 10, 11, 12, 13, 14, 15, 16, 17, + -1, 19, 20, -1, 22, 23, 24, -1, 7, 8, + 155, 10, 11, 12, 13, 14, 15, 16, 17, -1, + 19, 20, -1, 22, 23, 24, -1, -1, -1, 7, + 8, 49, 10, 11, 12, 13, 14, 15, 16, 17, + -1, 19, 20, -1, 22, 23, 24, -1, -1, -1, + 49, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 39, -1, -1, -1, -1, -1, -1, -1, 7, + 8, 49, 10, 11, 12, 13, 14, 15, 16, 17, + -1, 19, 20, -1, 22, 23, 24, 7, 8, -1, + 10, 11, 12, 13, 14, 15, 16, 17, -1, 19, + 20, -1, 22, 23, 24, -1, -1, -1, -1, -1, + -1, 49, -1, -1, -1, -1, -1, -1, -1, 39, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 49, + -1, 149, -1, -1, 152, -1, -1, 155, -1, 157, + 158, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 149, -1, -1, 152, -1, -1, 155, -1, 157, 158, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 149, -1, -1, 152, -1, -1, 155, -1, 157, + -1, 7, 8, 121, 10, 11, 12, 13, 14, 15, + 16, 17, -1, 19, 20, -1, 22, 23, 24, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 149, -1, -1, 152, -1, -1, 155, -1, 157, + -1, -1, -1, 49, -1, -1, -1, -1, -1, 149, + -1, -1, 152, -1, -1, 155, -1, 157, 7, 8, + -1, 10, 11, 12, 13, 14, 15, 16, 17, -1, + 19, 20, -1, 22, 23, 24, 7, 8, -1, 10, + 11, 12, 13, 14, 15, 16, 17, -1, 19, 20, + 39, 22, 23, 24, -1, -1, -1, -1, -1, -1, + 49, -1, -1, -1, -1, -1, -1, -1, 39, -1, + -1, -1, -1, -1, -1, -1, 7, 8, 49, 10, + 11, 12, 13, 14, 15, 16, 17, -1, 19, 20, + -1, 22, 23, 24, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 149, -1, -1, 152, -1, 154, 155, + -1, 157, -1, -1, -1, -1, 7, 8, 49, 10, + 11, 12, 13, 14, 15, 16, 17, -1, 19, 20, + -1, 22, 23, 24, 7, 8, -1, 10, 11, 12, + 13, 14, 15, 16, 17, -1, 19, 20, -1, 22, + 23, 24, -1, -1, -1, -1, -1, -1, 49, -1, + 149, -1, -1, 152, -1, -1, 155, -1, 157, -1, + -1, -1, -1, -1, -1, -1, 49, -1, 149, -1, + -1, 152, -1, -1, 155, -1, 157, 7, 8, -1, + 10, 11, 12, 13, 14, 15, 16, 17, -1, 19, + 20, -1, 22, 23, 24, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 149, -1, + -1, 152, -1, -1, 155, -1, 157, 7, 8, 49, + 10, 11, 12, 13, 14, 15, 16, 17, -1, 19, + 20, -1, 22, 23, 24, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 149, -1, + -1, 152, -1, -1, 155, -1, 157, -1, -1, 49, + -1, -1, -1, -1, -1, -1, 149, -1, -1, 152, + -1, -1, 155, -1, 157, 7, 8, -1, 10, 11, + 12, 13, 14, 15, 16, 17, -1, 19, 20, -1, + 22, 23, 24, -1, -1, -1, -1, -1, -1, -1, + -1, 36, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 49, -1, 149, + 55, 56, 152, -1, -1, 155, -1, 157, -1, -1, + -1, -1, 67, 68, 69, 70, 71, 72, 73, 74, + 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, + 85, 86, 87, 88, 89, -1, -1, -1, -1, 149, + -1, -1, 152, -1, -1, 155, -1, 157, -1, -1, + -1, -1, -1, -1, -1, 110, 111, 112, -1, -1, + 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 149, -1, -1, + 152, -1, -1, 155, -1, 157 +}; -/* 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. */ +/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing + symbol of state STATE-NUM. */ +static const unsigned char yystos[] = +{ + 0, 19, 20, 22, 23, 24, 30, 31, 51, 54, + 58, 168, 170, 171, 172, 173, 204, 205, 206, 208, + 207, 52, 66, 213, 146, 57, 146, 18, 146, 42, + 43, 44, 45, 46, 47, 48, 50, 143, 144, 145, + 174, 175, 176, 0, 206, 46, 48, 177, 223, 42, + 43, 44, 47, 178, 220, 222, 229, 146, 146, 152, + 214, 22, 212, 7, 8, 10, 11, 12, 13, 14, + 15, 16, 17, 49, 149, 152, 155, 157, 168, 171, + 191, 192, 226, 176, 176, 35, 37, 202, 176, 176, + 21, 230, 231, 29, 158, 221, 230, 22, 22, 22, + 215, 150, 4, 4, 4, 157, 10, 158, 192, 197, + 148, 150, 202, 202, 42, 44, 179, 32, 33, 201, + 60, 61, 62, 63, 64, 65, 180, 218, 218, 170, + 234, 147, 154, 39, 192, 193, 195, 196, 153, 153, + 158, 197, 147, 158, 196, 201, 201, 10, 121, 192, + 194, 203, 11, 12, 13, 14, 15, 16, 166, 167, + 192, 198, 4, 194, 28, 157, 219, 36, 55, 56, + 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, + 87, 88, 89, 110, 111, 112, 115, 116, 117, 118, + 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 161, 162, 163, 232, 238, + 239, 240, 241, 22, 182, 147, 151, 192, 192, 156, + 158, 192, 151, 198, 192, 150, 226, 26, 27, 3, + 4, 5, 6, 9, 25, 40, 41, 88, 89, 115, + 129, 131, 132, 133, 152, 155, 157, 159, 161, 162, + 163, 199, 226, 209, 171, 55, 10, 192, 228, 11, + 17, 11, 166, 180, 90, 91, 92, 93, 94, 95, + 96, 97, 98, 99, 164, 26, 27, 96, 97, 98, + 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, + 109, 165, 192, 192, 228, 192, 192, 235, 228, 228, + 228, 228, 228, 192, 192, 228, 180, 113, 114, 117, + 118, 134, 135, 137, 138, 140, 141, 142, 181, 39, + 193, 184, 154, 156, 156, 184, 210, 211, 203, 164, + 165, 150, 150, 150, 150, 150, 154, 198, 200, 157, + 200, 158, 200, 22, 150, 150, 150, 147, 189, 150, + 3, 4, 9, 25, 26, 27, 40, 41, 57, 155, + 199, 225, 226, 227, 227, 227, 227, 194, 192, 192, + 147, 186, 147, 186, 227, 152, 147, 147, 147, 147, + 147, 147, 227, 227, 38, 194, 192, 228, 134, 135, + 136, 139, 183, 189, 189, 38, 150, 150, 198, 198, + 198, 198, 198, 147, 154, 158, 192, 200, 156, 158, + 198, 198, 198, 34, 53, 187, 190, 39, 192, 216, + 217, 59, 224, 200, 147, 147, 227, 227, 227, 11, + 53, 11, 237, 227, 152, 228, 192, 228, 228, 228, + 147, 147, 192, 227, 227, 147, 192, 198, 198, 237, + 147, 147, 147, 147, 198, 156, 158, 147, 147, 38, + 22, 4, 189, 182, 147, 151, 22, 156, 17, 17, + 150, 147, 147, 227, 4, 227, 147, 147, 227, 147, + 147, 147, 227, 227, 150, 147, 186, 192, 151, 147, + 147, 151, 198, 198, 198, 198, 156, 198, 198, 192, + 168, 169, 39, 192, 184, 147, 227, 227, 192, 236, + 227, 227, 186, 186, 228, 227, 147, 228, 228, 228, + 236, 227, 198, 198, 147, 151, 147, 147, 151, 151, + 151, 182, 187, 188, 22, 147, 152, 227, 147, 151, + 154, 227, 151, 186, 151, 151, 198, 198, 198, 169, + 53, 185, 17, 154, 166, 233, 182, 192, 184, 154, + 184, 151, 151, 151, 4, 227, 225, 154, 166, 227, + 38, 147, 225, 182, 17, 17, 147, 227, 227, 17, + 71, 227, 17, 227 +}; -/* 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 +#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__) +# define YYSIZE_T __SIZE_TYPE__ #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 */ +#if ! defined (YYSIZE_T) && defined (size_t) +# define YYSIZE_T size_t #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 +#if ! defined (YYSIZE_T) +# if defined (__STDC__) || defined (__cplusplus) +# include /* INFRINGES ON USER NAME SPACE */ +# define YYSIZE_T size_t +# endif +#endif +#if ! defined (YYSIZE_T) +# define YYSIZE_T unsigned int #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 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); \ + { \ + yychar = (Token); \ + yylval = (Value); \ + yytoken = YYTRANSLATE (yychar); \ YYPOPSTACK; \ goto yybackup; \ } \ else \ - { yyerror ("syntax error: cannot back up"); YYERROR; } \ + { \ + yyerror ("syntax error: cannot back up");\ + YYERROR; \ + } \ while (0) #define YYTERROR 1 #define YYERRCODE 256 -#ifndef YYPURE -#define YYLEX yylex() -#endif +/* YYLLOC_DEFAULT -- Compute the default location (before the actions + are run). */ -#ifdef YYPURE -#ifdef YYLSP_NEEDED -#ifdef YYLEX_PARAM -#define YYLEX yylex(&yylval, &yylloc, YYLEX_PARAM) -#else -#define YYLEX yylex(&yylval, &yylloc) +#ifndef YYLLOC_DEFAULT +# define YYLLOC_DEFAULT(Current, Rhs, N) \ + ((Current).first_line = (Rhs)[1].first_line, \ + (Current).first_column = (Rhs)[1].first_column, \ + (Current).last_line = (Rhs)[N].last_line, \ + (Current).last_column = (Rhs)[N].last_column) #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) -#endif -#endif /* not YYLSP_NEEDED */ +# define YYLEX yylex () #endif -/* If nonreentrant, generate the variables here */ +/* Enable debugging if requested. */ +#if YYDEBUG -#ifndef YYPURE +# ifndef YYFPRINTF +# include /* INFRINGES ON USER NAME SPACE */ +# define YYFPRINTF fprintf +# endif + +# define YYDPRINTF(Args) \ +do { \ + if (yydebug) \ + YYFPRINTF Args; \ +} while (0) + +# define YYDSYMPRINT(Args) \ +do { \ + if (yydebug) \ + yysymprint Args; \ +} while (0) + +# define YYDSYMPRINTF(Title, Token, Value, Location) \ +do { \ + if (yydebug) \ + { \ + YYFPRINTF (stderr, "%s ", Title); \ + yysymprint (stderr, \ + Token, Value); \ + YYFPRINTF (stderr, "\n"); \ + } \ +} while (0) -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 (__cplusplus) +static void +yy_stack_print (short *bottom, short *top) +#else +static void +yy_stack_print (bottom, top) + short *bottom; + short *top; #endif +{ + YYFPRINTF (stderr, "Stack now"); + for (/* Nothing. */; 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 (0) -int yynerrs; /* number of parse errors so far */ -#endif /* not YYPURE */ -#if YYDEBUG != 0 -int yydebug; /* nonzero means print parse trace */ -/* Since this is uninitialized, it does not stop multiple parsers - from coexisting. */ +/*------------------------------------------------. +| Report that the YYRULE is going to be reduced. | +`------------------------------------------------*/ + +#if defined (__STDC__) || defined (__cplusplus) +static void +yy_reduce_print (int yyrule) +#else +static void +yy_reduce_print (yyrule) + int yyrule; #endif +{ + int yyi; + unsigned int yylno = yyrline[yyrule]; + YYFPRINTF (stderr, "Reducing stack by rule %d (line %u), ", + yyrule - 1, yylno); + /* Print the symbols being reduced, and their result. */ + for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++) + YYFPRINTF (stderr, "%s ", yytname [yyrhs[yyi]]); + YYFPRINTF (stderr, "-> %s\n", yytname [yyr1[yyrule]]); +} -/* YYINITDEPTH indicates the initial size of the parser's stacks */ +# define YY_REDUCE_PRINT(Rule) \ +do { \ + if (yydebug) \ + yy_reduce_print (Rule); \ +} while (0) + +/* Nonzero means print parse trace. It is left uninitialized so that + multiple parsers can coexist. */ +int yydebug; +#else /* !YYDEBUG */ +# define YYDPRINTF(Args) +# define YYDSYMPRINT(Args) +# define YYDSYMPRINTF(Title, Token, 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). + + Do not make this value too large; the results are undefined if + SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH) + evaluated with infinite-precision integer arithmetic. */ -#if YYMAXDEPTH == 0 -#undef YYMAXDEPTH +#if defined (YYMAXDEPTH) && 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 -/* 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. */ +static YYSIZE_T +# if defined (__STDC__) || defined (__cplusplus) +yystrlen (const char *yystr) +# else +yystrlen (yystr) + const char *yystr; +# endif +{ + register const char *yys = yystr; + + while (*yys++ != '\0') + continue; + + return yys - yystr - 1; +} +# 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. */ +static char * +# if defined (__STDC__) || defined (__cplusplus) +yystpcpy (char *yydest, const char *yysrc) +# else +yystpcpy (yydest, yysrc) + char *yydest; + const char *yysrc; +# endif { - register char *f = from; - register char *t = to; - register int i = count; + register char *yyd = yydest; + register const char *yys = yysrc; - while (i-- > 0) - *t++ = *f++; + while ((*yyd++ = *yys++) != '\0') + continue; + + return yyd - 1; } +# endif +# endif + +#endif /* !YYERROR_VERBOSE */ + + -#else /* __cplusplus */ +#if YYDEBUG +/*--------------------------------. +| Print this symbol on YYOUTPUT. | +`--------------------------------*/ -/* This is the most reliable way to avoid incompatibilities - in available built-in functions on various systems. */ +#if defined (__STDC__) || defined (__cplusplus) +static void +yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep) +#else static void -__yy_memcpy (char *to, char *from, unsigned int count) +yysymprint (yyoutput, yytype, yyvaluep) + FILE *yyoutput; + int yytype; + YYSTYPE *yyvaluep; +#endif { - register char *t = to; - register char *f = from; - register int i = count; + /* Pacify ``unused variable'' warnings. */ + (void) yyvaluep; + + if (yytype < YYNTOKENS) + { + YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); +# ifdef YYPRINT + YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); +# endif + } + else + YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); - while (i-- > 0) - *t++ = *f++; + switch (yytype) + { + default: + break; + } + YYFPRINTF (yyoutput, ")"); } +#endif /* ! YYDEBUG */ +/*-----------------------------------------------. +| Release the memory associated to this symbol. | +`-----------------------------------------------*/ + +#if defined (__STDC__) || defined (__cplusplus) +static void +yydestruct (int yytype, YYSTYPE *yyvaluep) +#else +static void +yydestruct (yytype, yyvaluep) + int yytype; + YYSTYPE *yyvaluep; #endif -#endif +{ + /* Pacify ``unused variable'' warnings. */ + (void) yyvaluep; + + switch (yytype) + { + + default: + break; + } +} -#line 217 "/usr/share/bison.simple" -/* 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. */ +/* Prevent warnings from -Wmissing-prototypes. */ #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 */ +# if defined (__STDC__) || defined (__cplusplus) +int yyparse (void *YYPARSE_PARAM); +# else +int yyparse (); +# endif +#else /* ! YYPARSE_PARAM */ +#if defined (__STDC__) || defined (__cplusplus) +int yyparse (void); +#else +int yyparse (); +#endif +#endif /* ! YYPARSE_PARAM */ + + + +/* The lookahead symbol. */ +int yychar; + +/* The semantic value of the lookahead symbol. */ +YYSTYPE yylval; + +/* Number of syntax errors so far. */ +int yynerrs; + + + +/*----------. +| yyparse. | +`----------*/ -/* 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 (YYPARSE_PARAM) + void *YYPARSE_PARAM; +# endif +#else /* ! YYPARSE_PARAM */ +#if defined (__STDC__) || defined (__cplusplus) +int +yyparse (void) #else -int yyparse (void); +int +yyparse () + #endif #endif - -int -yyparse(YYPARSE_PARAM_ARG) - YYPARSE_PARAM_DECL { + register int yystate; register int yyn; + int yyresult; + /* Number of tokens to shift before error messages enabled. */ + int yyerrstatus; + /* Lookahead token as an internal (translated) token number. */ + int yytoken = 0; + + /* 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. */ + short yyssa[YYINITDEPTH]; + short *yyss = yyssa; 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 */ + /* The semantic value stack. */ + YYSTYPE yyvsa[YYINITDEPTH]; + YYSTYPE *yyvs = yyvsa; + register YYSTYPE *yyvsp; - 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 #define YYPOPSTACK (yyvsp--, yyssp--) -#endif - int yystacksize = YYINITDEPTH; - int yyfree_stacks = 0; + YYSIZE_T yystacksize = YYINITDEPTH; -#ifdef YYPURE - int yychar; - YYSTYPE yylval; - int yynerrs; -#ifdef YYLSP_NEEDED - YYLTYPE yylloc; -#endif -#endif + /* 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 */ + /* When reducing, the number of symbols on the RHS of the reduced + rule. */ int yylen; -#if YYDEBUG != 0 - if (yydebug) - fprintf(stderr, "Starting parse\n"); -#endif + YYDPRINTF ((stderr, "Starting parse\n")); yystate = 0; yyerrstatus = 0; @@ -2293,110 +2867,96 @@ 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: - - *++yyssp = yystate; - - 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 + 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++; + 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; + short *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 ("parser stack overflow", + &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 yyoverflowlab; +# 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 yyoverflowlab; 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 + + { + short *yyss1 = yyss; + union yyalloc *yyptr = + (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); + if (! yyptr) + goto yyoverflowlab; + 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: + +/*-----------. +| yybackup. | +`-----------*/ +yybackup: /* Do appropriate processing given the current state. */ /* Read a lookahead token if we need one and don't already have one. */ @@ -2405,580 +2965,638 @@ /* First try to decide what to do without reference to lookahead 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. */ - + /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead 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); - -#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 + yytoken = YYTRANSLATE (yychar); + YYDSYMPRINTF ("Next token is", yytoken, &yylval, &yylloc); } - 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. */ - -#if YYDEBUG != 0 - if (yydebug) - fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]); -#endif + YYDPRINTF ((stderr, "Shifting token %s, ", yytname[yytoken])); /* Discard the token being shifted unless it is eof. */ if (yychar != YYEOF) yychar = YYEMPTY; *++yyvsp = yylval; -#ifdef YYLSP_NEEDED - *++yylsp = yylloc; -#endif - /* count tokens shifted since error; after three, turn off error status. */ - if (yyerrstatus) yyerrstatus--; + + /* 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 1128 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.IPredicate = ICmpInst::ICMP_EQ; ;} + break; - fprintf (stderr, "Reducing via rule %d (line %d), ", - yyn, yyrline[yyn]); + case 30: +#line 1128 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.IPredicate = ICmpInst::ICMP_NE; ;} + break; - /* 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 + case 31: +#line 1129 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.IPredicate = ICmpInst::ICMP_SLT; ;} + break; + case 32: +#line 1129 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.IPredicate = ICmpInst::ICMP_SGT; ;} + break; - switch (yyn) { + case 33: +#line 1130 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.IPredicate = ICmpInst::ICMP_SLE; ;} + break; -case 28: -#line 1128 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.IPredicate = ICmpInst::ICMP_EQ; ; - break;} -case 29: -#line 1128 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.IPredicate = ICmpInst::ICMP_NE; ; - break;} -case 30: -#line 1129 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.IPredicate = ICmpInst::ICMP_SLT; ; - break;} -case 31: -#line 1129 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.IPredicate = ICmpInst::ICMP_SGT; ; - break;} -case 32: -#line 1130 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.IPredicate = ICmpInst::ICMP_SLE; ; - break;} -case 33: -#line 1130 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.IPredicate = ICmpInst::ICMP_SGE; ; - break;} -case 34: -#line 1131 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.IPredicate = ICmpInst::ICMP_ULT; ; - break;} -case 35: -#line 1131 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.IPredicate = ICmpInst::ICMP_UGT; ; - break;} -case 36: -#line 1132 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.IPredicate = ICmpInst::ICMP_ULE; ; - break;} -case 37: -#line 1132 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.IPredicate = ICmpInst::ICMP_UGE; ; - break;} -case 38: -#line 1136 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.FPredicate = FCmpInst::FCMP_OEQ; ; - break;} -case 39: -#line 1136 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.FPredicate = FCmpInst::FCMP_ONE; ; - break;} -case 40: -#line 1137 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.FPredicate = FCmpInst::FCMP_OLT; ; - break;} -case 41: -#line 1137 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.FPredicate = FCmpInst::FCMP_OGT; ; - break;} -case 42: -#line 1138 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.FPredicate = FCmpInst::FCMP_OLE; ; - break;} -case 43: -#line 1138 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.FPredicate = FCmpInst::FCMP_OGE; ; - break;} -case 44: -#line 1139 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.FPredicate = FCmpInst::FCMP_ORD; ; - break;} -case 45: -#line 1139 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.FPredicate = FCmpInst::FCMP_UNO; ; - break;} -case 46: -#line 1140 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.FPredicate = FCmpInst::FCMP_UEQ; ; - break;} -case 47: -#line 1140 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.FPredicate = FCmpInst::FCMP_UNE; ; - break;} -case 48: -#line 1141 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.FPredicate = FCmpInst::FCMP_ULT; ; - break;} -case 49: -#line 1141 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.FPredicate = FCmpInst::FCMP_UGT; ; - break;} -case 50: -#line 1142 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.FPredicate = FCmpInst::FCMP_ULE; ; - break;} -case 51: -#line 1142 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.FPredicate = FCmpInst::FCMP_UGE; ; - break;} -case 52: -#line 1143 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.FPredicate = FCmpInst::FCMP_TRUE; ; - break;} -case 53: -#line 1144 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.FPredicate = FCmpInst::FCMP_FALSE; ; - break;} -case 64: -#line 1153 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.StrVal = 0; ; - break;} -case 65: -#line 1157 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - yyval.StrVal = yyvsp[-1].StrVal; - CHECK_FOR_ERROR - ; - break;} -case 66: -#line 1161 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - yyval.StrVal = 0; - CHECK_FOR_ERROR - ; - break;} -case 70: -#line 1169 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - yyval.StrVal = 0; - CHECK_FOR_ERROR - ; - break;} -case 71: -#line 1174 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - yyval.StrVal = yyvsp[-1].StrVal; - CHECK_FOR_ERROR - ; - break;} -case 72: -#line 1180 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.Linkage = GlobalValue::InternalLinkage; ; - break;} -case 73: -#line 1181 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.Linkage = GlobalValue::WeakLinkage; ; - break;} -case 74: -#line 1182 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.Linkage = GlobalValue::LinkOnceLinkage; ; - break;} -case 75: -#line 1183 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.Linkage = GlobalValue::AppendingLinkage; ; - break;} -case 76: -#line 1184 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.Linkage = GlobalValue::DLLExportLinkage; ; - break;} -case 77: -#line 1188 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.Linkage = GlobalValue::DLLImportLinkage; ; - break;} -case 78: -#line 1189 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.Linkage = GlobalValue::ExternalWeakLinkage; ; - break;} -case 79: -#line 1190 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.Linkage = GlobalValue::ExternalLinkage; ; - break;} -case 80: -#line 1194 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.Visibility = GlobalValue::DefaultVisibility; ; - break;} -case 81: -#line 1195 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.Visibility = GlobalValue::DefaultVisibility; ; - break;} -case 82: -#line 1196 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.Visibility = GlobalValue::HiddenVisibility; ; - break;} -case 83: -#line 1197 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.Visibility = GlobalValue::ProtectedVisibility; ; - break;} -case 84: -#line 1201 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.Linkage = GlobalValue::ExternalLinkage; ; - break;} -case 85: -#line 1202 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.Linkage = GlobalValue::DLLImportLinkage; ; - break;} -case 86: -#line 1203 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.Linkage = GlobalValue::ExternalWeakLinkage; ; - break;} -case 87: -#line 1207 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.Linkage = GlobalValue::ExternalLinkage; ; - break;} -case 88: -#line 1208 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.Linkage = GlobalValue::InternalLinkage; ; - break;} -case 89: -#line 1209 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.Linkage = GlobalValue::LinkOnceLinkage; ; - break;} -case 90: -#line 1210 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.Linkage = GlobalValue::WeakLinkage; ; - break;} -case 91: -#line 1211 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.Linkage = GlobalValue::DLLExportLinkage; ; - break;} -case 92: -#line 1215 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.Linkage = GlobalValue::ExternalLinkage; ; - break;} -case 93: -#line 1216 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.Linkage = GlobalValue::WeakLinkage; ; - break;} -case 94: -#line 1217 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.Linkage = GlobalValue::InternalLinkage; ; - break;} -case 95: -#line 1220 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.UIntVal = CallingConv::C; ; - break;} -case 96: -#line 1221 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.UIntVal = CallingConv::C; ; - break;} -case 97: -#line 1222 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.UIntVal = CallingConv::Fast; ; - break;} -case 98: -#line 1223 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.UIntVal = CallingConv::Cold; ; - break;} -case 99: -#line 1224 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.UIntVal = CallingConv::X86_StdCall; ; - break;} -case 100: -#line 1225 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.UIntVal = CallingConv::X86_FastCall; ; - break;} -case 101: -#line 1226 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - if ((unsigned)yyvsp[0].UInt64Val != yyvsp[0].UInt64Val) - GEN_ERROR("Calling conv too large"); - yyval.UIntVal = yyvsp[0].UInt64Val; - CHECK_FOR_ERROR - ; - break;} -case 102: -#line 1233 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.ParamAttrs = ParamAttr::ZExt; ; - break;} -case 103: -#line 1234 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.ParamAttrs = ParamAttr::ZExt; ; - break;} -case 104: -#line 1235 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.ParamAttrs = ParamAttr::SExt; ; - break;} -case 105: -#line 1236 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.ParamAttrs = ParamAttr::SExt; ; - break;} -case 106: -#line 1237 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.ParamAttrs = ParamAttr::InReg; ; - break;} -case 107: -#line 1238 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.ParamAttrs = ParamAttr::StructRet; ; - break;} -case 108: -#line 1239 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.ParamAttrs = ParamAttr::NoAlias; ; - break;} -case 109: -#line 1240 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.ParamAttrs = ParamAttr::ByVal; ; - break;} -case 110: -#line 1241 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.ParamAttrs = ParamAttr::Nest; ; - break;} -case 111: -#line 1244 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.ParamAttrs = ParamAttr::None; ; - break;} -case 112: -#line 1245 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - yyval.ParamAttrs = yyvsp[-1].ParamAttrs | yyvsp[0].ParamAttrs; - ; - break;} -case 113: -#line 1250 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.ParamAttrs = ParamAttr::NoReturn; ; - break;} -case 114: -#line 1251 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.ParamAttrs = ParamAttr::NoUnwind; ; - break;} -case 115: -#line 1252 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.ParamAttrs = ParamAttr::ZExt; ; - break;} -case 116: -#line 1253 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.ParamAttrs = ParamAttr::SExt; ; - break;} -case 117: -#line 1256 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.ParamAttrs = ParamAttr::None; ; - break;} -case 118: -#line 1257 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - yyval.ParamAttrs = yyvsp[-1].ParamAttrs | yyvsp[0].ParamAttrs; - ; - break;} -case 119: -#line 1264 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.UIntVal = 0; ; - break;} -case 120: -#line 1265 "/Volumes/ProjectsDisk/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 121: -#line 1271 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.UIntVal = 0; ; - break;} -case 122: -#line 1272 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + case 34: +#line 1130 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.IPredicate = ICmpInst::ICMP_SGE; ;} + break; + + case 35: +#line 1131 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.IPredicate = ICmpInst::ICMP_ULT; ;} + break; + + case 36: +#line 1131 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.IPredicate = ICmpInst::ICMP_UGT; ;} + break; + + case 37: +#line 1132 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.IPredicate = ICmpInst::ICMP_ULE; ;} + break; + + case 38: +#line 1132 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.IPredicate = ICmpInst::ICMP_UGE; ;} + break; + + case 39: +#line 1136 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.FPredicate = FCmpInst::FCMP_OEQ; ;} + break; + + case 40: +#line 1136 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.FPredicate = FCmpInst::FCMP_ONE; ;} + break; + + case 41: +#line 1137 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.FPredicate = FCmpInst::FCMP_OLT; ;} + break; + + case 42: +#line 1137 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.FPredicate = FCmpInst::FCMP_OGT; ;} + break; + + case 43: +#line 1138 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.FPredicate = FCmpInst::FCMP_OLE; ;} + break; + + case 44: +#line 1138 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.FPredicate = FCmpInst::FCMP_OGE; ;} + break; + + case 45: +#line 1139 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.FPredicate = FCmpInst::FCMP_ORD; ;} + break; + + case 46: +#line 1139 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.FPredicate = FCmpInst::FCMP_UNO; ;} + break; + + case 47: +#line 1140 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.FPredicate = FCmpInst::FCMP_UEQ; ;} + break; + + case 48: +#line 1140 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.FPredicate = FCmpInst::FCMP_UNE; ;} + break; + + case 49: +#line 1141 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.FPredicate = FCmpInst::FCMP_ULT; ;} + break; + + case 50: +#line 1141 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.FPredicate = FCmpInst::FCMP_UGT; ;} + break; + + case 51: +#line 1142 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.FPredicate = FCmpInst::FCMP_ULE; ;} + break; + + case 52: +#line 1142 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.FPredicate = FCmpInst::FCMP_UGE; ;} + break; + + case 53: +#line 1143 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.FPredicate = FCmpInst::FCMP_TRUE; ;} + break; + + case 54: +#line 1144 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.FPredicate = FCmpInst::FCMP_FALSE; ;} + break; + + case 65: +#line 1153 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.StrVal = 0; ;} + break; + + case 66: +#line 1157 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { + yyval.StrVal = yyvsp[-1].StrVal; + CHECK_FOR_ERROR + ;} + break; + + case 67: +#line 1161 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { + yyval.StrVal = 0; + CHECK_FOR_ERROR + ;} + break; + + case 71: +#line 1169 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { + yyval.StrVal = 0; + CHECK_FOR_ERROR + ;} + break; + + case 72: +#line 1174 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { + yyval.StrVal = yyvsp[-1].StrVal; + CHECK_FOR_ERROR + ;} + break; + + case 73: +#line 1180 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.Linkage = GlobalValue::InternalLinkage; ;} + break; + + case 74: +#line 1181 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.Linkage = GlobalValue::WeakLinkage; ;} + break; + + case 75: +#line 1182 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.Linkage = GlobalValue::LinkOnceLinkage; ;} + break; + + case 76: +#line 1183 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.Linkage = GlobalValue::AppendingLinkage; ;} + break; + + case 77: +#line 1184 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.Linkage = GlobalValue::DLLExportLinkage; ;} + break; + + case 78: +#line 1188 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.Linkage = GlobalValue::DLLImportLinkage; ;} + break; + + case 79: +#line 1189 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.Linkage = GlobalValue::ExternalWeakLinkage; ;} + break; + + case 80: +#line 1190 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.Linkage = GlobalValue::ExternalLinkage; ;} + break; + + case 81: +#line 1194 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.Visibility = GlobalValue::DefaultVisibility; ;} + break; + + case 82: +#line 1195 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.Visibility = GlobalValue::DefaultVisibility; ;} + break; + + case 83: +#line 1196 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.Visibility = GlobalValue::HiddenVisibility; ;} + break; + + case 84: +#line 1197 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.Visibility = GlobalValue::ProtectedVisibility; ;} + break; + + case 85: +#line 1201 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.Linkage = GlobalValue::ExternalLinkage; ;} + break; + + case 86: +#line 1202 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.Linkage = GlobalValue::DLLImportLinkage; ;} + break; + + case 87: +#line 1203 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.Linkage = GlobalValue::ExternalWeakLinkage; ;} + break; + + case 88: +#line 1207 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.Linkage = GlobalValue::ExternalLinkage; ;} + break; + + case 89: +#line 1208 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.Linkage = GlobalValue::InternalLinkage; ;} + break; + + case 90: +#line 1209 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.Linkage = GlobalValue::LinkOnceLinkage; ;} + break; + + case 91: +#line 1210 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.Linkage = GlobalValue::WeakLinkage; ;} + break; + + case 92: +#line 1211 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.Linkage = GlobalValue::DLLExportLinkage; ;} + break; + + case 93: +#line 1215 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.Linkage = GlobalValue::ExternalLinkage; ;} + break; + + case 94: +#line 1216 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.Linkage = GlobalValue::WeakLinkage; ;} + break; + + case 95: +#line 1217 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.Linkage = GlobalValue::InternalLinkage; ;} + break; + + case 96: +#line 1220 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.UIntVal = CallingConv::C; ;} + break; + + case 97: +#line 1221 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.UIntVal = CallingConv::C; ;} + break; + + case 98: +#line 1222 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.UIntVal = CallingConv::Fast; ;} + break; + + case 99: +#line 1223 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.UIntVal = CallingConv::Cold; ;} + break; + + case 100: +#line 1224 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.UIntVal = CallingConv::X86_StdCall; ;} + break; + + case 101: +#line 1225 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.UIntVal = CallingConv::X86_FastCall; ;} + break; + + case 102: +#line 1226 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { + if ((unsigned)yyvsp[0].UInt64Val != yyvsp[0].UInt64Val) + GEN_ERROR("Calling conv too large"); + yyval.UIntVal = yyvsp[0].UInt64Val; + CHECK_FOR_ERROR + ;} + break; + + case 103: +#line 1233 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.ParamAttrs = ParamAttr::ZExt; ;} + break; + + case 104: +#line 1234 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.ParamAttrs = ParamAttr::ZExt; ;} + break; + + case 105: +#line 1235 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.ParamAttrs = ParamAttr::SExt; ;} + break; + + case 106: +#line 1236 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.ParamAttrs = ParamAttr::SExt; ;} + break; + + case 107: +#line 1237 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.ParamAttrs = ParamAttr::InReg; ;} + break; + + case 108: +#line 1238 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.ParamAttrs = ParamAttr::StructRet; ;} + break; + + case 109: +#line 1239 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.ParamAttrs = ParamAttr::NoAlias; ;} + break; + + case 110: +#line 1240 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.ParamAttrs = ParamAttr::ByVal; ;} + break; + + case 111: +#line 1241 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.ParamAttrs = ParamAttr::Nest; ;} + break; + + case 112: +#line 1244 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.ParamAttrs = ParamAttr::None; ;} + break; + + case 113: +#line 1245 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { + yyval.ParamAttrs = yyvsp[-1].ParamAttrs | yyvsp[0].ParamAttrs; + ;} + break; + + case 114: +#line 1250 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.ParamAttrs = ParamAttr::NoReturn; ;} + break; + + case 115: +#line 1251 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.ParamAttrs = ParamAttr::NoUnwind; ;} + break; + + case 116: +#line 1252 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.ParamAttrs = ParamAttr::ZExt; ;} + break; + + case 117: +#line 1253 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.ParamAttrs = ParamAttr::SExt; ;} + break; + + case 118: +#line 1256 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.ParamAttrs = ParamAttr::None; ;} + break; + + case 119: +#line 1257 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { + yyval.ParamAttrs = yyvsp[-1].ParamAttrs | yyvsp[0].ParamAttrs; + ;} + break; + + case 120: +#line 1264 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.UIntVal = 0; ;} + break; + + case 121: +#line 1265 "/users/dag/projects/cascade/llvm.modified/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 123: -#line 1280 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ +;} + break; + + case 122: +#line 1271 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.UIntVal = 0; ;} + break; + + case 123: +#line 1272 "/users/dag/projects/cascade/llvm.modified/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 124: +#line 1280 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { for (unsigned i = 0, e = yyvsp[0].StrVal->length(); i != e; ++i) if ((*yyvsp[0].StrVal)[i] == '"' || (*yyvsp[0].StrVal)[i] == '\\') GEN_ERROR("Invalid character in section name"); yyval.StrVal = yyvsp[0].StrVal; CHECK_FOR_ERROR -; - break;} -case 124: -#line 1288 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.StrVal = 0; ; - break;} -case 125: -#line 1289 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.StrVal = yyvsp[0].StrVal; ; - break;} -case 126: -#line 1294 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{; - break;} -case 127: -#line 1295 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{; - break;} -case 128: -#line 1296 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ +;} + break; + + case 125: +#line 1288 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.StrVal = 0; ;} + break; + + case 126: +#line 1289 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.StrVal = yyvsp[0].StrVal; ;} + break; + + case 127: +#line 1294 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + {;} + break; + + case 128: +#line 1295 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + {;} + break; + + case 129: +#line 1296 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { CurGV->setSection(*yyvsp[0].StrVal); delete yyvsp[0].StrVal; CHECK_FOR_ERROR - ; - break;} -case 129: -#line 1301 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 130: +#line 1301 "/users/dag/projects/cascade/llvm.modified/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[0].UInt64Val); CHECK_FOR_ERROR - ; - break;} -case 137: -#line 1317 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 138: +#line 1317 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.TypeVal = new PATypeHolder(OpaqueType::get()); CHECK_FOR_ERROR - ; - break;} -case 138: -#line 1321 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 139: +#line 1321 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.TypeVal = new PATypeHolder(yyvsp[0].PrimType); CHECK_FOR_ERROR - ; - break;} -case 139: -#line 1325 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ // Pointer type? + ;} + break; + + case 140: +#line 1325 "/users/dag/projects/cascade/llvm.modified/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].TypeVal))); delete yyvsp[-1].TypeVal; CHECK_FOR_ERROR - ; - break;} -case 140: -#line 1332 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ // Named types are also simple types... + ;} + break; + + case 141: +#line 1332 "/users/dag/projects/cascade/llvm.modified/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 141: -#line 1337 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ // Type UpReference + ;} + break; + + case 142: +#line 1337 "/users/dag/projects/cascade/llvm.modified/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[0].UInt64Val, OT)); // Add to vector... yyval.TypeVal = new PATypeHolder(OT); UR_OUT("New Upreference!\n"); CHECK_FOR_ERROR - ; - break;} -case 142: -#line 1345 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 143: +#line 1345 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { std::vector Params; ParamAttrsVector Attrs; if (yyvsp[0].ParamAttrs != ParamAttr::None) { @@ -3007,11 +3625,12 @@ delete yyvsp[-4].TypeVal; // Delete the return type handle yyval.TypeVal = new PATypeHolder(HandleUpRefs(FT)); CHECK_FOR_ERROR - ; - break;} -case 143: -#line 1375 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 144: +#line 1375 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { std::vector Params; ParamAttrsVector Attrs; if (yyvsp[0].ParamAttrs != ParamAttr::None) { @@ -3040,19 +3659,21 @@ delete yyvsp[-2].TypeWithAttrsList; // Delete the argument list yyval.TypeVal = new PATypeHolder(HandleUpRefs(FT)); CHECK_FOR_ERROR - ; - break;} -case 144: -#line 1406 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ // Sized array type? + ;} + break; + + case 145: +#line 1406 "/users/dag/projects/cascade/llvm.modified/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 145: -#line 1411 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ // Vector type? + ;} + break; + + case 146: +#line 1411 "/users/dag/projects/cascade/llvm.modified/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"); @@ -3063,11 +3684,12 @@ yyval.TypeVal = new PATypeHolder(HandleUpRefs(VectorType::get(*yyvsp[-1].TypeVal, (unsigned)yyvsp[-3].UInt64Val))); delete yyvsp[-1].TypeVal; CHECK_FOR_ERROR - ; - break;} -case 146: -#line 1423 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ // Structure type? + ;} + break; + + case 147: +#line 1423 "/users/dag/projects/cascade/llvm.modified/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) @@ -3076,18 +3698,20 @@ yyval.TypeVal = new PATypeHolder(HandleUpRefs(StructType::get(Elements))); delete yyvsp[-1].TypeList; CHECK_FOR_ERROR - ; - break;} -case 147: -#line 1433 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ // Empty structure type? + ;} + break; + + case 148: +#line 1433 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { // Empty structure type? yyval.TypeVal = new PATypeHolder(StructType::get(std::vector())); CHECK_FOR_ERROR - ; - break;} -case 148: -#line 1437 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 149: +#line 1437 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { std::vector Elements; for (std::list::iterator I = yyvsp[-2].TypeList->begin(), E = yyvsp[-2].TypeList->end(); I != E; ++I) @@ -3096,100 +3720,112 @@ yyval.TypeVal = new PATypeHolder(HandleUpRefs(StructType::get(Elements, true))); delete yyvsp[-2].TypeList; CHECK_FOR_ERROR - ; - break;} -case 149: -#line 1447 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ // Empty structure type? + ;} + break; + + case 150: +#line 1447 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { // Empty structure type? yyval.TypeVal = new PATypeHolder(StructType::get(std::vector(), true)); CHECK_FOR_ERROR - ; - break;} -case 150: -#line 1454 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 151: +#line 1454 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.TypeWithAttrs.Ty = yyvsp[-1].TypeVal; yyval.TypeWithAttrs.Attrs = yyvsp[0].ParamAttrs; - ; - break;} -case 151: -#line 1461 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 152: +#line 1461 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { if (!UpRefs.empty()) 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[0].TypeVal; - ; - break;} -case 152: -#line 1468 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 153: +#line 1468 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.TypeVal = new PATypeHolder(Type::VoidTy); - ; - break;} -case 153: -#line 1473 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 154: +#line 1473 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.TypeWithAttrsList = new TypeWithAttrsList(); yyval.TypeWithAttrsList->push_back(yyvsp[0].TypeWithAttrs); CHECK_FOR_ERROR - ; - break;} -case 154: -#line 1478 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 155: +#line 1478 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { (yyval.TypeWithAttrsList=yyvsp[-2].TypeWithAttrsList)->push_back(yyvsp[0].TypeWithAttrs); CHECK_FOR_ERROR - ; - break;} -case 156: -#line 1486 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 157: +#line 1486 "/users/dag/projects/cascade/llvm.modified/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); CHECK_FOR_ERROR - ; - break;} -case 157: -#line 1493 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 158: +#line 1493 "/users/dag/projects/cascade/llvm.modified/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 158: -#line 1500 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 159: +#line 1500 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.TypeWithAttrsList = new TypeWithAttrsList(); CHECK_FOR_ERROR - ; - break;} -case 159: -#line 1508 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 160: +#line 1508 "/users/dag/projects/cascade/llvm.modified/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 160: -#line 1514 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 161: +#line 1514 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { (yyval.TypeList=yyvsp[-2].TypeList)->push_back(*yyvsp[0].TypeVal); delete yyvsp[0].TypeVal; CHECK_FOR_ERROR - ; - break;} -case 161: -#line 1526 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ // Nonempty unsized arr + ;} + break; + + case 162: +#line 1526 "/users/dag/projects/cascade/llvm.modified/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()); @@ -3216,11 +3852,12 @@ yyval.ConstVal = ConstantArray::get(ATy, *yyvsp[-1].ConstVector); delete yyvsp[-3].TypeVal; delete yyvsp[-1].ConstVector; CHECK_FOR_ERROR - ; - break;} -case 162: -#line 1554 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 163: +#line 1554 "/users/dag/projects/cascade/llvm.modified/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()); @@ -3235,11 +3872,12 @@ yyval.ConstVal = ConstantArray::get(ATy, std::vector()); delete yyvsp[-2].TypeVal; CHECK_FOR_ERROR - ; - break;} -case 163: -#line 1570 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 164: +#line 1570 "/users/dag/projects/cascade/llvm.modified/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()); @@ -3265,11 +3903,12 @@ yyval.ConstVal = ConstantArray::get(ATy, Vals); delete yyvsp[-2].TypeVal; CHECK_FOR_ERROR - ; - break;} -case 164: -#line 1597 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ // Nonempty unsized arr + ;} + break; + + case 165: +#line 1597 "/users/dag/projects/cascade/llvm.modified/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()); @@ -3296,11 +3935,12 @@ yyval.ConstVal = ConstantVector::get(PTy, *yyvsp[-1].ConstVector); delete yyvsp[-3].TypeVal; delete yyvsp[-1].ConstVector; CHECK_FOR_ERROR - ; - break;} -case 165: -#line 1625 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 166: +#line 1625 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { const StructType *STy = dyn_cast(yyvsp[-3].TypeVal->get()); if (STy == 0) GEN_ERROR("Cannot make struct constant with type: '" + @@ -3325,11 +3965,12 @@ yyval.ConstVal = ConstantStruct::get(STy, *yyvsp[-1].ConstVector); delete yyvsp[-3].TypeVal; delete yyvsp[-1].ConstVector; CHECK_FOR_ERROR - ; - break;} -case 166: -#line 1651 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 167: +#line 1651 "/users/dag/projects/cascade/llvm.modified/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()); @@ -3348,11 +3989,12 @@ yyval.ConstVal = ConstantStruct::get(STy, std::vector()); delete yyvsp[-2].TypeVal; CHECK_FOR_ERROR - ; - break;} -case 167: -#line 1671 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 168: +#line 1671 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { const StructType *STy = dyn_cast(yyvsp[-5].TypeVal->get()); if (STy == 0) GEN_ERROR("Cannot make struct constant with type: '" + @@ -3377,11 +4019,12 @@ yyval.ConstVal = ConstantStruct::get(STy, *yyvsp[-2].ConstVector); delete yyvsp[-5].TypeVal; delete yyvsp[-2].ConstVector; CHECK_FOR_ERROR - ; - break;} -case 168: -#line 1697 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 169: +#line 1697 "/users/dag/projects/cascade/llvm.modified/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()); @@ -3400,11 +4043,12 @@ yyval.ConstVal = ConstantStruct::get(STy, std::vector()); delete yyvsp[-4].TypeVal; CHECK_FOR_ERROR - ; - break;} -case 169: -#line 1717 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 170: +#line 1717 "/users/dag/projects/cascade/llvm.modified/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()); @@ -3415,21 +4059,23 @@ yyval.ConstVal = ConstantPointerNull::get(PTy); delete yyvsp[-1].TypeVal; CHECK_FOR_ERROR - ; - break;} -case 170: -#line 1729 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 171: +#line 1729 "/users/dag/projects/cascade/llvm.modified/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 171: -#line 1736 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 172: +#line 1736 "/users/dag/projects/cascade/llvm.modified/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()); @@ -3494,11 +4140,12 @@ yyval.ConstVal = cast(V); delete yyvsp[-1].TypeVal; // Free the type handle CHECK_FOR_ERROR - ; - break;} -case 172: -#line 1802 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 173: +#line 1802 "/users/dag/projects/cascade/llvm.modified/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()) @@ -3507,11 +4154,12 @@ yyval.ConstVal = yyvsp[0].ConstVal; delete yyvsp[-1].TypeVal; CHECK_FOR_ERROR - ; - break;} -case 173: -#line 1812 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 174: +#line 1812 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { if (!UpRefs.empty()) GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription()); const Type *Ty = yyvsp[-1].TypeVal->get(); @@ -3520,20 +4168,22 @@ yyval.ConstVal = Constant::getNullValue(Ty); delete yyvsp[-1].TypeVal; CHECK_FOR_ERROR - ; - break;} -case 174: -#line 1822 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ // integral constants + ;} + break; + + case 175: +#line 1822 "/users/dag/projects/cascade/llvm.modified/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].PrimType, yyvsp[0].SInt64Val, true); CHECK_FOR_ERROR - ; - break;} -case 175: -#line 1828 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ // arbitrary precision integer constants + ;} + break; + + case 176: +#line 1828 "/users/dag/projects/cascade/llvm.modified/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"); @@ -3542,20 +4192,22 @@ yyval.ConstVal = ConstantInt::get(*yyvsp[0].APIntVal); delete yyvsp[0].APIntVal; CHECK_FOR_ERROR - ; - break;} -case 176: -#line 1838 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ // integral constants + ;} + break; + + case 177: +#line 1838 "/users/dag/projects/cascade/llvm.modified/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].PrimType, yyvsp[0].UInt64Val, false); CHECK_FOR_ERROR - ; - break;} -case 177: -#line 1844 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ // arbitrary precision integer constants + ;} + break; + + case 178: +#line 1844 "/users/dag/projects/cascade/llvm.modified/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"); @@ -3564,36 +4216,40 @@ yyval.ConstVal = ConstantInt::get(*yyvsp[0].APIntVal); delete yyvsp[0].APIntVal; CHECK_FOR_ERROR - ; - break;} -case 178: -#line 1854 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ // Boolean constants + ;} + break; + + case 179: +#line 1854 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { // Boolean constants assert(cast(yyvsp[-1].PrimType)->getBitWidth() == 1 && "Not Bool?"); yyval.ConstVal = ConstantInt::getTrue(); CHECK_FOR_ERROR - ; - break;} -case 179: -#line 1859 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ // Boolean constants + ;} + break; + + case 180: +#line 1859 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { // Boolean constants assert(cast(yyvsp[-1].PrimType)->getBitWidth() == 1 && "Not Bool?"); yyval.ConstVal = ConstantInt::getFalse(); CHECK_FOR_ERROR - ; - break;} -case 180: -#line 1864 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ // Float & Double constants + ;} + break; + + case 181: +#line 1864 "/users/dag/projects/cascade/llvm.modified/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].PrimType, yyvsp[0].FPVal); CHECK_FOR_ERROR - ; - break;} -case 181: -#line 1872 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 182: +#line 1872 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { if (!UpRefs.empty()) GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription()); Constant *Val = yyvsp[-3].ConstVal; @@ -3604,16 +4260,17 @@ DestTy->getDescription() + "'"); yyval.ConstVal = ConstantExpr::getCast(yyvsp[-5].CastOpVal, yyvsp[-3].ConstVal, DestTy); delete yyvsp[-1].TypeVal; - ; - break;} -case 182: -#line 1884 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 183: +#line 1884 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { if (!isa(yyvsp[-2].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[-2].ConstVal->getType(), yyvsp[-1].ValueList->begin(), yyvsp[-1].ValueList->end(), true); if (!IdxTy) GEN_ERROR("Index list invalid for constant getelementptr"); @@ -3629,31 +4286,34 @@ yyval.ConstVal = ConstantExpr::getGetElementPtr(yyvsp[-2].ConstVal, &IdxVec[0], IdxVec.size()); CHECK_FOR_ERROR - ; - break;} -case 183: -#line 1906 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 184: +#line 1906 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { if (yyvsp[-5].ConstVal->getType() != Type::Int1Ty) GEN_ERROR("Select condition must be of boolean type"); if (yyvsp[-3].ConstVal->getType() != yyvsp[-1].ConstVal->getType()) GEN_ERROR("Select operand types must match"); yyval.ConstVal = ConstantExpr::getSelect(yyvsp[-5].ConstVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal); CHECK_FOR_ERROR - ; - break;} -case 184: -#line 1914 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 185: +#line 1914 "/users/dag/projects/cascade/llvm.modified/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[-5].BinaryOpVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal); - ; - break;} -case 185: -#line 1920 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 186: +#line 1920 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { if (yyvsp[-3].ConstVal->getType() != yyvsp[-1].ConstVal->getType()) GEN_ERROR("Logical operator types must match"); if (!yyvsp[-3].ConstVal->getType()->isInteger()) { @@ -3663,85 +4323,97 @@ } yyval.ConstVal = ConstantExpr::get(yyvsp[-5].BinaryOpVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal); CHECK_FOR_ERROR - ; - break;} -case 186: -#line 1931 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 187: +#line 1931 "/users/dag/projects/cascade/llvm.modified/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[-5].IPredicate, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal); - ; - break;} -case 187: -#line 1936 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 188: +#line 1936 "/users/dag/projects/cascade/llvm.modified/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[-5].FPredicate, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal); - ; - break;} -case 188: -#line 1941 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 189: +#line 1941 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { if (!ExtractElementInst::isValidOperands(yyvsp[-3].ConstVal, yyvsp[-1].ConstVal)) GEN_ERROR("Invalid extractelement operands"); yyval.ConstVal = ConstantExpr::getExtractElement(yyvsp[-3].ConstVal, yyvsp[-1].ConstVal); CHECK_FOR_ERROR - ; - break;} -case 189: -#line 1947 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 190: +#line 1947 "/users/dag/projects/cascade/llvm.modified/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[-5].ConstVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal); CHECK_FOR_ERROR - ; - break;} -case 190: -#line 1953 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 191: +#line 1953 "/users/dag/projects/cascade/llvm.modified/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[-5].ConstVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal); CHECK_FOR_ERROR - ; - break;} -case 191: -#line 1962 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 192: +#line 1962 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { (yyval.ConstVector = yyvsp[-2].ConstVector)->push_back(yyvsp[0].ConstVal); CHECK_FOR_ERROR - ; - break;} -case 192: -#line 1966 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 193: +#line 1966 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.ConstVector = new std::vector(); yyval.ConstVector->push_back(yyvsp[0].ConstVal); CHECK_FOR_ERROR - ; - break;} -case 193: -#line 1974 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.BoolVal = false; ; - break;} -case 194: -#line 1974 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.BoolVal = true; ; - break;} -case 195: -#line 1977 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.BoolVal = true; ; - break;} -case 196: -#line 1977 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.BoolVal = false; ; - break;} -case 197: -#line 1980 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 194: +#line 1974 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.BoolVal = false; ;} + break; + + case 195: +#line 1974 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.BoolVal = true; ;} + break; + + case 196: +#line 1977 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.BoolVal = true; ;} + break; + + case 197: +#line 1977 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.BoolVal = false; ;} + break; + + case 198: +#line 1980 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { const Type* VTy = yyvsp[-1].TypeVal->get(); Value *V = getVal(VTy, yyvsp[0].ValIDVal); CHECK_FOR_ERROR @@ -3752,11 +4424,12 @@ yyval.ConstVal = Aliasee; CHECK_FOR_ERROR delete yyvsp[-1].TypeVal; - ; - break;} -case 198: -#line 1992 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 199: +#line 1992 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { Constant *Val = yyvsp[-3].ConstVal; const Type *DestTy = yyvsp[-1].TypeVal->get(); if (!CastInst::castIsValid(yyvsp[-5].CastOpVal, yyvsp[-3].ConstVal, DestTy)) @@ -3767,54 +4440,62 @@ yyval.ConstVal = ConstantExpr::getCast(yyvsp[-5].CastOpVal, yyvsp[-3].ConstVal, DestTy); CHECK_FOR_ERROR delete yyvsp[-1].TypeVal; - ; - break;} -case 199: -#line 2013 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 200: +#line 2013 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.ModuleVal = ParserResult = CurModule.CurrentModule; CurModule.ModuleDone(); CHECK_FOR_ERROR; - ; - break;} -case 200: -#line 2018 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 201: +#line 2018 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.ModuleVal = ParserResult = CurModule.CurrentModule; CurModule.ModuleDone(); CHECK_FOR_ERROR; - ; - break;} -case 203: -#line 2031 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ CurFun.isDeclare = false; ; - break;} -case 204: -#line 2031 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 204: +#line 2031 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { CurFun.isDeclare = false; ;} + break; + + case 205: +#line 2031 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { CurFun.FunctionDone(); CHECK_FOR_ERROR - ; - break;} -case 205: -#line 2035 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ CurFun.isDeclare = true; ; - break;} -case 206: -#line 2035 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 206: +#line 2035 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { CurFun.isDeclare = true; ;} + break; + + case 207: +#line 2035 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { CHECK_FOR_ERROR - ; - break;} -case 207: -#line 2038 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 208: +#line 2038 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { CHECK_FOR_ERROR - ; - break;} -case 208: -#line 2041 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 209: +#line 2041 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { if (!UpRefs.empty()) GEN_ERROR("Invalid upreference in type: " + (*yyvsp[0].TypeVal)->getDescription()); // Eagerly resolve types. This is not an optimization, this is a @@ -3837,11 +4518,12 @@ delete yyvsp[0].TypeVal; CHECK_FOR_ERROR - ; - break;} -case 209: -#line 2065 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 210: +#line 2065 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { ResolveTypeTo(yyvsp[-2].StrVal, yyvsp[0].PrimType); if (!setTypeName(yyvsp[0].PrimType, yyvsp[-2].StrVal) && !yyvsp[-2].StrVal) { @@ -3851,60 +4533,67 @@ CurModule.Types.push_back(yyvsp[0].PrimType); } CHECK_FOR_ERROR - ; - break;} -case 210: -#line 2076 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 211: +#line 2076 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { /* "Externally Visible" Linkage */ if (yyvsp[0].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); CHECK_FOR_ERROR - ; - break;} -case 211: -#line 2083 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 212: +#line 2083 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { CurGV = 0; - ; - break;} -case 212: -#line 2087 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 213: +#line 2087 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { if (yyvsp[0].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); CHECK_FOR_ERROR - ; - break;} -case 213: -#line 2092 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 214: +#line 2092 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { CurGV = 0; - ; - break;} -case 214: -#line 2096 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 215: +#line 2096 "/users/dag/projects/cascade/llvm.modified/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); CHECK_FOR_ERROR delete yyvsp[0].TypeVal; - ; - break;} -case 215: -#line 2102 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 216: +#line 2102 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { CurGV = 0; CHECK_FOR_ERROR - ; - break;} -case 216: -#line 2106 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 217: +#line 2106 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { std::string Name; if (yyvsp[-4].StrVal) { Name = *yyvsp[-4].StrVal; @@ -3922,23 +4611,26 @@ GA->setVisibility(yyvsp[-3].Visibility); InsertValue(GA, CurModule.Values); CHECK_FOR_ERROR - ; - break;} -case 217: -#line 2125 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ - CHECK_FOR_ERROR - ; - break;} -case 218: -#line 2128 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 218: +#line 2125 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { CHECK_FOR_ERROR - ; - break;} -case 219: -#line 2134 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 219: +#line 2128 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { + CHECK_FOR_ERROR + ;} + break; + + case 220: +#line 2134 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { const std::string &AsmSoFar = CurModule.CurrentModule->getModuleInlineAsm(); if (AsmSoFar.empty()) CurModule.CurrentModule->setModuleInlineAsm(*yyvsp[0].StrVal); @@ -3946,47 +4638,53 @@ CurModule.CurrentModule->setModuleInlineAsm(AsmSoFar+"\n"+*yyvsp[0].StrVal); delete yyvsp[0].StrVal; CHECK_FOR_ERROR -; - break;} -case 220: -#line 2144 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ +;} + break; + + case 221: +#line 2144 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { CurModule.CurrentModule->setTargetTriple(*yyvsp[0].StrVal); delete yyvsp[0].StrVal; - ; - break;} -case 221: -#line 2148 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 222: +#line 2148 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { CurModule.CurrentModule->setDataLayout(*yyvsp[0].StrVal); delete yyvsp[0].StrVal; - ; - break;} -case 223: -#line 2155 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 224: +#line 2155 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { CurModule.CurrentModule->addLibrary(*yyvsp[0].StrVal); delete yyvsp[0].StrVal; CHECK_FOR_ERROR - ; - break;} -case 224: -#line 2160 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 225: +#line 2160 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { CurModule.CurrentModule->addLibrary(*yyvsp[0].StrVal); delete yyvsp[0].StrVal; CHECK_FOR_ERROR - ; - break;} -case 225: -#line 2165 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 226: +#line 2165 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { CHECK_FOR_ERROR - ; - break;} -case 226: -#line 2174 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 227: +#line 2174 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { if (!UpRefs.empty()) GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription()); if (*yyvsp[-2].TypeVal == Type::VoidTy) @@ -3995,11 +4693,12 @@ yyval.ArgList = yyvsp[-4].ArgList; yyvsp[-4].ArgList->push_back(E); CHECK_FOR_ERROR - ; - break;} -case 227: -#line 2184 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 228: +#line 2184 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { if (!UpRefs.empty()) GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription()); if (*yyvsp[-2].TypeVal == Type::VoidTy) @@ -4008,18 +4707,20 @@ yyval.ArgList = new ArgListType; yyval.ArgList->push_back(E); CHECK_FOR_ERROR - ; - break;} -case 228: -#line 2195 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 229: +#line 2195 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.ArgList = yyvsp[0].ArgList; CHECK_FOR_ERROR - ; - break;} -case 229: -#line 2199 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 230: +#line 2199 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.ArgList = yyvsp[-2].ArgList; struct ArgListEntry E; E.Ty = new PATypeHolder(Type::VoidTy); @@ -4027,11 +4728,12 @@ E.Attrs = ParamAttr::None; yyval.ArgList->push_back(E); CHECK_FOR_ERROR - ; - break;} -case 230: -#line 2208 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 231: +#line 2208 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.ArgList = new ArgListType; struct ArgListEntry E; E.Ty = new PATypeHolder(Type::VoidTy); @@ -4039,18 +4741,20 @@ E.Attrs = ParamAttr::None; yyval.ArgList->push_back(E); CHECK_FOR_ERROR - ; - break;} -case 231: -#line 2217 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 232: +#line 2217 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.ArgList = 0; CHECK_FOR_ERROR - ; - break;} -case 232: -#line 2223 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 233: +#line 2223 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { std::string FunctionName(*yyvsp[-6].StrVal); delete yyvsp[-6].StrVal; // Free strdup'd memory! @@ -4168,109 +4872,123 @@ delete yyvsp[-4].ArgList; // We're now done with the argument list } CHECK_FOR_ERROR -; - break;} -case 235: -#line 2345 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ +;} + break; + + case 236: +#line 2345 "/users/dag/projects/cascade/llvm.modified/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 238: -#line 2356 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ +;} + break; + + case 239: +#line 2356 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.FunctionVal = yyvsp[-1].FunctionVal; CHECK_FOR_ERROR -; - break;} -case 239: -#line 2361 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ +;} + break; + + case 240: +#line 2361 "/users/dag/projects/cascade/llvm.modified/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 240: -#line 2373 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 241: +#line 2373 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.BoolVal = false; CHECK_FOR_ERROR - ; - break;} -case 241: -#line 2377 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 242: +#line 2377 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.BoolVal = true; CHECK_FOR_ERROR - ; - break;} -case 242: -#line 2382 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ // A reference to a direct constant + ;} + break; + + case 243: +#line 2382 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { // A reference to a direct constant yyval.ValIDVal = ValID::create(yyvsp[0].SInt64Val); CHECK_FOR_ERROR - ; - break;} -case 243: -#line 2386 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 244: +#line 2386 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.ValIDVal = ValID::create(yyvsp[0].UInt64Val); CHECK_FOR_ERROR - ; - break;} -case 244: -#line 2390 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ // Perhaps it's an FP constant? + ;} + break; + + case 245: +#line 2390 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { // Perhaps it's an FP constant? yyval.ValIDVal = ValID::create(yyvsp[0].FPVal); CHECK_FOR_ERROR - ; - break;} -case 245: -#line 2394 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 246: +#line 2394 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.ValIDVal = ValID::create(ConstantInt::getTrue()); CHECK_FOR_ERROR - ; - break;} -case 246: -#line 2398 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 247: +#line 2398 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.ValIDVal = ValID::create(ConstantInt::getFalse()); CHECK_FOR_ERROR - ; - break;} -case 247: -#line 2402 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 248: +#line 2402 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.ValIDVal = ValID::createNull(); CHECK_FOR_ERROR - ; - break;} -case 248: -#line 2406 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 249: +#line 2406 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.ValIDVal = ValID::createUndef(); CHECK_FOR_ERROR - ; - break;} -case 249: -#line 2410 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ // A vector zero constant. + ;} + break; + + case 250: +#line 2410 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { // A vector zero constant. yyval.ValIDVal = ValID::createZeroInit(); CHECK_FOR_ERROR - ; - break;} -case 250: -#line 2414 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ // Nonempty unsized packed vector + ;} + break; + + case 251: +#line 2414 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { // Nonempty unsized packed vector const Type *ETy = (*yyvsp[-1].ConstVector)[0]->getType(); int NumElements = yyvsp[-1].ConstVector->size(); @@ -4294,92 +5012,103 @@ yyval.ValIDVal = ValID::create(ConstantVector::get(pt, *yyvsp[-1].ConstVector)); delete PTy; delete yyvsp[-1].ConstVector; CHECK_FOR_ERROR - ; - break;} -case 251: -#line 2439 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 252: +#line 2439 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.ValIDVal = ValID::create(yyvsp[0].ConstVal); CHECK_FOR_ERROR - ; - break;} -case 252: -#line 2443 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 253: +#line 2443 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.ValIDVal = ValID::createInlineAsm(*yyvsp[-2].StrVal, *yyvsp[0].StrVal, yyvsp[-3].BoolVal); delete yyvsp[-2].StrVal; delete yyvsp[0].StrVal; CHECK_FOR_ERROR - ; - break;} -case 253: -#line 2453 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ // Is it an integer reference...? + ;} + break; + + case 254: +#line 2453 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { // Is it an integer reference...? yyval.ValIDVal = ValID::createLocalID(yyvsp[0].UIntVal); CHECK_FOR_ERROR - ; - break;} -case 254: -#line 2457 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 255: +#line 2457 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.ValIDVal = ValID::createGlobalID(yyvsp[0].UIntVal); CHECK_FOR_ERROR - ; - break;} -case 255: -#line 2461 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ // Is it a named reference...? + ;} + break; + + case 256: +#line 2461 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { // Is it a named reference...? yyval.ValIDVal = ValID::createLocalName(*yyvsp[0].StrVal); delete yyvsp[0].StrVal; CHECK_FOR_ERROR - ; - break;} -case 256: -#line 2466 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ // Is it a named reference...? + ;} + break; + + case 257: +#line 2466 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { // Is it a named reference...? yyval.ValIDVal = ValID::createGlobalName(*yyvsp[0].StrVal); delete yyvsp[0].StrVal; CHECK_FOR_ERROR - ; - break;} -case 259: -#line 2479 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 260: +#line 2479 "/users/dag/projects/cascade/llvm.modified/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 260: -#line 2488 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 261: +#line 2488 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.FunctionVal = yyvsp[-1].FunctionVal; CHECK_FOR_ERROR - ; - break;} -case 261: -#line 2492 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ // Do not allow functions with 0 basic blocks + ;} + break; + + case 262: +#line 2492 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { // Do not allow functions with 0 basic blocks yyval.FunctionVal = yyvsp[-1].FunctionVal; CHECK_FOR_ERROR - ; - break;} -case 262: -#line 2501 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 263: +#line 2501 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { setValueName(yyvsp[0].TermInstVal, yyvsp[-1].StrVal); 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 263: -#line 2510 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 264: +#line 2510 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { if (CastInst *CI1 = dyn_cast(yyvsp[0].InstVal)) if (CastInst *CI2 = dyn_cast(CI1->getOperand(0))) if (CI2->getParent() == 0) @@ -4387,49 +5116,55 @@ yyvsp[-1].BasicBlockVal->getInstList().push_back(yyvsp[0].InstVal); yyval.BasicBlockVal = yyvsp[-1].BasicBlockVal; CHECK_FOR_ERROR - ; - break;} -case 264: -#line 2519 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ // Empty space between instruction lists + ;} + break; + + case 265: +#line 2519 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { // Empty space between instruction lists yyval.BasicBlockVal = defineBBVal(ValID::createLocalID(CurFun.NextValNum)); CHECK_FOR_ERROR - ; - break;} -case 265: -#line 2523 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ // Labelled (named) basic block + ;} + break; + + case 266: +#line 2523 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { // Labelled (named) basic block yyval.BasicBlockVal = defineBBVal(ValID::createLocalName(*yyvsp[0].StrVal)); delete yyvsp[0].StrVal; CHECK_FOR_ERROR - ; - break;} -case 266: -#line 2530 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ // Return with a result... + ;} + break; + + case 267: +#line 2530 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { // Return with a result... yyval.TermInstVal = new ReturnInst(yyvsp[0].ValueVal); CHECK_FOR_ERROR - ; - break;} -case 267: -#line 2534 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ // Return with no result... + ;} + break; + + case 268: +#line 2534 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { // Return with no result... yyval.TermInstVal = new ReturnInst(); CHECK_FOR_ERROR - ; - break;} -case 268: -#line 2538 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ // Unconditional Branch... + ;} + break; + + case 269: +#line 2538 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { // Unconditional Branch... BasicBlock* tmpBB = getBBVal(yyvsp[0].ValIDVal); CHECK_FOR_ERROR yyval.TermInstVal = new BranchInst(tmpBB); - ; - break;} -case 269: -#line 2543 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 270: +#line 2543 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { assert(cast(yyvsp[-7].PrimType)->getBitWidth() == 1 && "Not Bool?"); BasicBlock* tmpBBA = getBBVal(yyvsp[-3].ValIDVal); CHECK_FOR_ERROR @@ -4438,11 +5173,12 @@ Value* tmpVal = getVal(Type::Int1Ty, yyvsp[-6].ValIDVal); CHECK_FOR_ERROR yyval.TermInstVal = new BranchInst(tmpBBA, tmpBBB, tmpVal); - ; - break;} -case 270: -#line 2553 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 271: +#line 2553 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { Value* tmpVal = getVal(yyvsp[-7].PrimType, yyvsp[-6].ValIDVal); CHECK_FOR_ERROR BasicBlock* tmpBB = getBBVal(yyvsp[-3].ValIDVal); @@ -4460,11 +5196,12 @@ } delete yyvsp[-1].JumpTable; CHECK_FOR_ERROR - ; - break;} -case 271: -#line 2572 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 272: +#line 2572 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { Value* tmpVal = getVal(yyvsp[-6].PrimType, yyvsp[-5].ValIDVal); CHECK_FOR_ERROR BasicBlock* tmpBB = getBBVal(yyvsp[-2].ValIDVal); @@ -4472,11 +5209,12 @@ SwitchInst *S = new SwitchInst(tmpVal, tmpBB, 0); yyval.TermInstVal = S; CHECK_FOR_ERROR - ; - break;} -case 272: -#line 2582 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 273: +#line 2582 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { // Handle the short syntax const PointerType *PFTy = 0; @@ -4554,25 +5292,28 @@ yyval.TermInstVal = II; delete yyvsp[-8].ValueRefList; CHECK_FOR_ERROR - ; - break;} -case 273: -#line 2661 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 274: +#line 2661 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.TermInstVal = new UnwindInst(); CHECK_FOR_ERROR - ; - break;} -case 274: -#line 2665 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 275: +#line 2665 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.TermInstVal = new UnreachableInst(); CHECK_FOR_ERROR - ; - break;} -case 275: -#line 2672 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 276: +#line 2672 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.JumpTable = yyvsp[-5].JumpTable; Constant *V = cast(getExistingVal(yyvsp[-4].PrimType, yyvsp[-3].ValIDVal)); CHECK_FOR_ERROR @@ -4582,11 +5323,12 @@ BasicBlock* tmpBB = getBBVal(yyvsp[0].ValIDVal); CHECK_FOR_ERROR yyval.JumpTable->push_back(std::make_pair(V, tmpBB)); - ; - break;} -case 276: -#line 2683 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 277: +#line 2683 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.JumpTable = new std::vector >(); Constant *V = cast(getExistingVal(yyvsp[-4].PrimType, yyvsp[-3].ValIDVal)); CHECK_FOR_ERROR @@ -4597,22 +5339,24 @@ BasicBlock* tmpBB = getBBVal(yyvsp[0].ValIDVal); CHECK_FOR_ERROR yyval.JumpTable->push_back(std::make_pair(V, tmpBB)); - ; - break;} -case 277: -#line 2696 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 278: +#line 2696 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { // Is this definition named?? if so, assign the name... setValueName(yyvsp[0].InstVal, yyvsp[-1].StrVal); CHECK_FOR_ERROR InsertValue(yyvsp[0].InstVal); yyval.InstVal = yyvsp[0].InstVal; CHECK_FOR_ERROR - ; - break;} -case 278: -#line 2706 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ // Used for PHI nodes + ;} + break; + + case 279: +#line 2706 "/users/dag/projects/cascade/llvm.modified/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 >(); @@ -4622,22 +5366,24 @@ CHECK_FOR_ERROR yyval.PHIList->push_back(std::make_pair(tmpVal, tmpBB)); delete yyvsp[-5].TypeVal; - ; - break;} -case 279: -#line 2717 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 280: +#line 2717 "/users/dag/projects/cascade/llvm.modified/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[-1].ValIDVal); CHECK_FOR_ERROR yyvsp[-6].PHIList->push_back(std::make_pair(tmpVal, tmpBB)); - ; - break;} -case 280: -#line 2727 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 281: +#line 2727 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { if (!UpRefs.empty()) GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription()); // Used for call and invoke instructions @@ -4645,11 +5391,12 @@ 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 281: -#line 2736 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 282: +#line 2736 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { if (!UpRefs.empty()) GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription()); yyval.ValueRefList = yyvsp[-4].ValueRefList; @@ -4657,41 +5404,47 @@ yyval.ValueRefList->push_back(E); delete yyvsp[-2].TypeVal; CHECK_FOR_ERROR - ; - break;} -case 282: -#line 2745 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.ValueRefList = new ValueRefList(); ; - break;} -case 283: -#line 2748 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ yyval.ValueList = new std::vector(); ; - break;} -case 284: -#line 2749 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 283: +#line 2745 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.ValueRefList = new ValueRefList(); ;} + break; + + case 284: +#line 2748 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.ValueList = new std::vector(); ;} + break; + + case 285: +#line 2749 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.ValueList = yyvsp[-2].ValueList; yyval.ValueList->push_back(yyvsp[0].ValueVal); CHECK_FOR_ERROR - ; - break;} -case 285: -#line 2756 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 286: +#line 2756 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.BoolVal = true; CHECK_FOR_ERROR - ; - break;} -case 286: -#line 2760 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 287: +#line 2760 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.BoolVal = false; CHECK_FOR_ERROR - ; - break;} -case 287: -#line 2765 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 288: +#line 2765 "/users/dag/projects/cascade/llvm.modified/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() && @@ -4711,11 +5464,12 @@ if (yyval.InstVal == 0) GEN_ERROR("binary operator returned null"); delete yyvsp[-3].TypeVal; - ; - break;} -case 288: -#line 2786 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 289: +#line 2786 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { if (!UpRefs.empty()) GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription()); if (!(*yyvsp[-3].TypeVal)->isInteger()) { @@ -4731,11 +5485,12 @@ if (yyval.InstVal == 0) GEN_ERROR("binary operator returned null"); delete yyvsp[-3].TypeVal; - ; - break;} -case 289: -#line 2803 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 290: +#line 2803 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { if (!UpRefs.empty()) GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription()); if (isa((*yyvsp[-3].TypeVal).get())) @@ -4748,11 +5503,12 @@ if (yyval.InstVal == 0) GEN_ERROR("icmp operator returned null"); delete yyvsp[-3].TypeVal; - ; - break;} -case 290: -#line 2817 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 291: +#line 2817 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { if (!UpRefs.empty()) GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription()); if (isa((*yyvsp[-3].TypeVal).get())) @@ -4765,11 +5521,12 @@ if (yyval.InstVal == 0) GEN_ERROR("fcmp operator returned null"); delete yyvsp[-3].TypeVal; - ; - break;} -case 291: -#line 2831 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 292: +#line 2831 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { if (!UpRefs.empty()) GEN_ERROR("Invalid upreference in type: " + (*yyvsp[0].TypeVal)->getDescription()); Value* Val = yyvsp[-2].ValueVal; @@ -4780,59 +5537,65 @@ DestTy->getDescription() + "'"); yyval.InstVal = CastInst::create(yyvsp[-3].CastOpVal, Val, DestTy); delete yyvsp[0].TypeVal; - ; - break;} -case 292: -#line 2843 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 293: +#line 2843 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { if (yyvsp[-4].ValueVal->getType() != Type::Int1Ty) GEN_ERROR("select condition must be boolean"); if (yyvsp[-2].ValueVal->getType() != yyvsp[0].ValueVal->getType()) GEN_ERROR("select value types should match"); yyval.InstVal = new SelectInst(yyvsp[-4].ValueVal, yyvsp[-2].ValueVal, yyvsp[0].ValueVal); CHECK_FOR_ERROR - ; - break;} -case 293: -#line 2851 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 294: +#line 2851 "/users/dag/projects/cascade/llvm.modified/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 294: -#line 2858 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 295: +#line 2858 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { if (!ExtractElementInst::isValidOperands(yyvsp[-2].ValueVal, yyvsp[0].ValueVal)) GEN_ERROR("Invalid extractelement operands"); yyval.InstVal = new ExtractElementInst(yyvsp[-2].ValueVal, yyvsp[0].ValueVal); CHECK_FOR_ERROR - ; - break;} -case 295: -#line 2864 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 296: +#line 2864 "/users/dag/projects/cascade/llvm.modified/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[-4].ValueVal, yyvsp[-2].ValueVal, yyvsp[0].ValueVal); CHECK_FOR_ERROR - ; - break;} -case 296: -#line 2870 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 297: +#line 2870 "/users/dag/projects/cascade/llvm.modified/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[-4].ValueVal, yyvsp[-2].ValueVal, yyvsp[0].ValueVal); CHECK_FOR_ERROR - ; - break;} -case 297: -#line 2876 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 298: +#line 2876 "/users/dag/projects/cascade/llvm.modified/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"); @@ -4846,11 +5609,12 @@ } delete yyvsp[0].PHIList; // Free the list... CHECK_FOR_ERROR - ; - break;} -case 298: -#line 2892 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 299: +#line 2892 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { // Handle the short syntax const PointerType *PFTy = 0; @@ -4933,84 +5697,93 @@ delete yyvsp[-2].ValueRefList; delete yyvsp[-5].TypeVal; CHECK_FOR_ERROR - ; - break;} -case 299: -#line 2976 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 300: +#line 2976 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.InstVal = yyvsp[0].InstVal; CHECK_FOR_ERROR - ; - break;} -case 300: -#line 2981 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 301: +#line 2981 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.BoolVal = true; CHECK_FOR_ERROR - ; - break;} -case 301: -#line 2985 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 302: +#line 2985 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { yyval.BoolVal = false; CHECK_FOR_ERROR - ; - break;} -case 302: -#line 2992 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 303: +#line 2992 "/users/dag/projects/cascade/llvm.modified/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 303: -#line 2999 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 304: +#line 2999 "/users/dag/projects/cascade/llvm.modified/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); CHECK_FOR_ERROR yyval.InstVal = new MallocInst(*yyvsp[-4].TypeVal, tmpVal, yyvsp[0].UIntVal); delete yyvsp[-4].TypeVal; - ; - break;} -case 304: -#line 3007 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 305: +#line 3007 "/users/dag/projects/cascade/llvm.modified/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 305: -#line 3014 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 306: +#line 3014 "/users/dag/projects/cascade/llvm.modified/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); CHECK_FOR_ERROR yyval.InstVal = new AllocaInst(*yyvsp[-4].TypeVal, tmpVal, yyvsp[0].UIntVal); delete yyvsp[-4].TypeVal; - ; - break;} -case 306: -#line 3022 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 307: +#line 3022 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { if (!isa(yyvsp[0].ValueVal->getType())) GEN_ERROR("Trying to free nonpointer type " + yyvsp[0].ValueVal->getType()->getDescription() + ""); yyval.InstVal = new FreeInst(yyvsp[0].ValueVal); CHECK_FOR_ERROR - ; - break;} -case 307: -#line 3030 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 308: +#line 3030 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" + { if (!UpRefs.empty()) GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription()); if (!isa(yyvsp[-2].TypeVal->get())) @@ -5023,11 +5796,12 @@ CHECK_FOR_ERROR yyval.InstVal = new LoadInst(tmpVal, "", yyvsp[-4].BoolVal, yyvsp[0].UIntVal); delete yyvsp[-2].TypeVal; - ; - break;} -case 308: -#line 3044 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 309: +#line 3044 "/users/dag/projects/cascade/llvm.modified/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()); @@ -5043,249 +5817,258 @@ CHECK_FOR_ERROR yyval.InstVal = new StoreInst(yyvsp[-4].ValueVal, tmpVal, yyvsp[-6].BoolVal, yyvsp[0].UIntVal); delete yyvsp[-2].TypeVal; - ; - break;} -case 309: -#line 3061 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" -{ + ;} + break; + + case 310: +#line 3061 "/users/dag/projects/cascade/llvm.modified/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("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].TypeVal, yyvsp[0].ValueList->begin(), yyvsp[0].ValueList->end(), true)) GEN_ERROR("Invalid getelementptr indices for type '" + (*yyvsp[-2].TypeVal)->getDescription()+ "'"); Value* tmpVal = getVal(*yyvsp[-2].TypeVal, yyvsp[-1].ValIDVal); CHECK_FOR_ERROR - yyval.InstVal = new GetElementPtrInst(tmpVal, &(*yyvsp[0].ValueList)[0], yyvsp[0].ValueList->size()); + yyval.InstVal = new GetElementPtrInst(tmpVal, yyvsp[0].ValueList->begin(), yyvsp[0].ValueList->end()); 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" + ;} + break; + + + } + +/* Line 993 of yacc.c. */ +#line 5847 "llvmAsmParser.tab.c" yyvsp -= yylen; yyssp -= yylen; -#ifdef YYLSP_NEEDED - yylsp -= yylen; -#endif -#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 + + 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 +#if YYERROR_VERBOSE yyn = yypact[yystate]; - if (yyn > YYFLAG && yyn < YYLAST) + if (YYPACT_NINF < yyn && 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) + YYSIZE_T yysize = 0; + int yytype = YYTRANSLATE (yychar); + const char* yyprefix; + char *yymsg; + int yyx; + + /* 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; + int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; + int yycount = 0; + + yyprefix = ", expecting "; + for (yyx = yyxbegin; yyx < yyxend; ++yyx) + if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) + { + yysize += yystrlen (yyprefix) + yystrlen (yytname [yyx]); + yycount += 1; + if (yycount == 5) + { + yysize = 0; + break; + } + } + yysize += (sizeof ("syntax error, unexpected ") + + yystrlen (yytname[yytype])); + yymsg = (char *) YYSTACK_ALLOC (yysize); + if (yymsg != 0) { - strcpy(msg, "parse error"); + char *yyp = yystpcpy (yymsg, "syntax error, unexpected "); + yyp = yystpcpy (yyp, yytname[yytype]); - if (count < 5) + if (yycount < 5) { - count = 0; - for (x = (yyn < 0 ? -yyn : 0); - x < (sizeof(yytname) / sizeof(char *)); x++) - if (yycheck[x + yyn] == x) + yyprefix = ", expecting "; + for (yyx = yyxbegin; yyx < yyxend; ++yyx) + if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) { - strcat(msg, count == 0 ? ", expecting `" : " or `"); - strcat(msg, yytname[x]); - strcat(msg, "'"); - count++; + yyp = yystpcpy (yyp, yyprefix); + yyp = yystpcpy (yyp, yytname[yyx]); + yyprefix = " or "; } } - yyerror(msg); - free(msg); + yyerror (yymsg); + YYSTACK_FREE (yymsg); } else - yyerror ("parse error; also virtual memory exceeded"); + yyerror ("syntax error; also virtual memory exhausted"); } else #endif /* YYERROR_VERBOSE */ - yyerror("parse error"); + yyerror ("syntax error"); } - 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. */ + /* 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 YYDEBUG != 0 - if (yydebug) - fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]); -#endif + if (yychar <= YYEOF) + { + /* If at end of input, pop the error token, + then the rest of the stack, then return failure. */ + if (yychar == YYEOF) + for (;;) + { + YYPOPSTACK; + if (yyssp == yyss) + YYABORT; + YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp); + yydestruct (yystos[*yyssp], yyvsp); + } + } + else + { + YYDSYMPRINTF ("Error: discarding", yytoken, &yylval, &yylloc); + yydestruct (yytoken, &yylval); + yychar = YYEMPTY; - yychar = YYEMPTY; + } } - /* Else will try to reuse lookahead token - after shifting the error token. */ - - yyerrstatus = 3; /* Each real token shifted decrements this */ + /* Else will try to reuse lookahead token after shifting the error + token. */ + goto yyerrlab1; - goto yyerrhandle; -yyerrdefault: /* current state does not do anything special for the error token. */ +/*---------------------------------------------------. +| yyerrorlab -- error raised explicitly by YYERROR. | +`---------------------------------------------------*/ +yyerrorlab: -#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; +#ifdef __GNUC__ + /* Pacify GCC when the user code never invokes YYERROR and the label + yyerrorlab therefore never appears in user code. */ + if (0) + goto yyerrorlab; #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 + yyvsp -= yylen; + yyssp -= yylen; + yystate = *yyssp; + goto yyerrlab1; -#if YYDEBUG != 0 - if (yydebug) - { - short *ssp1 = yyss - 1; - fprintf (stderr, "Error: state stack now"); - while (ssp1 != yyssp) - fprintf (stderr, " %d", *++ssp1); - fprintf (stderr, "\n"); - } -#endif -yyerrhandle: +/*-------------------------------------------------------------. +| yyerrlab1 -- common code for both syntax error and YYERROR. | +`-------------------------------------------------------------*/ +yyerrlab1: + yyerrstatus = 3; /* Each real token shifted decrements this. */ - yyn = yypact[yystate]; - if (yyn == YYFLAG) - goto yyerrdefault; + for (;;) + { + 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 += YYTERROR; - if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR) - goto yyerrdefault; + /* Pop the current state because it cannot handle the error token. */ + if (yyssp == yyss) + YYABORT; - yyn = yytable[yyn]; - if (yyn < 0) - { - if (yyn == YYFLAG) - goto yyerrpop; - yyn = -yyn; - goto yyreduce; + YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp); + yydestruct (yystos[yystate], yyvsp); + YYPOPSTACK; + 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 + YYDPRINTF ((stderr, "Shifting error token, ")); *++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; - yyabortlab: - /* YYABORT comes here. */ - if (yyfree_stacks) - { - free (yyss); - free (yyvs); -#ifdef YYLSP_NEEDED - free (yyls); +/*-------------------------------------. +| yyacceptlab -- YYACCEPT comes here. | +`-------------------------------------*/ +yyacceptlab: + yyresult = 0; + goto yyreturn; + +/*-----------------------------------. +| yyabortlab -- YYABORT comes here. | +`-----------------------------------*/ +yyabortlab: + yyresult = 1; + goto yyreturn; + +#ifndef yyoverflow +/*----------------------------------------------. +| yyoverflowlab -- parser overflow comes here. | +`----------------------------------------------*/ +yyoverflowlab: + yyerror ("parser stack overflow"); + yyresult = 2; + /* Fall through. */ +#endif + +yyreturn: +#ifndef yyoverflow + if (yyss != yyssa) + YYSTACK_FREE (yyss); #endif - } - return 1; + return yyresult; } -#line 3078 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" + + +#line 3078 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" // common code from the two 'RunVMAsmParser' functions @@ -5366,3 +6149,4 @@ GenerateError(errMsg); return 0; } + Modified: llvm/trunk/lib/AsmParser/llvmAsmParser.h.cvs URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/AsmParser/llvmAsmParser.h.cvs?rev=41706&r1=41705&r2=41706&view=diff ============================================================================== --- llvm/trunk/lib/AsmParser/llvmAsmParser.h.cvs (original) +++ llvm/trunk/lib/AsmParser/llvmAsmParser.h.cvs Tue Sep 4 13:46:50 2007 @@ -1,4 +1,329 @@ -typedef union { +/* A Bison parser, made by GNU Bison 1.875c. */ + +/* Skeleton parser for Yacc-like parsing with Bison, + Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003 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., 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. */ + +/* 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, + X86_FP80 = 269, + FP128 = 270, + PPC_FP128 = 271, + LABEL = 272, + TYPE = 273, + LOCALVAR = 274, + GLOBALVAR = 275, + LABELSTR = 276, + STRINGCONSTANT = 277, + ATSTRINGCONSTANT = 278, + PCTSTRINGCONSTANT = 279, + ZEROINITIALIZER = 280, + TRUETOK = 281, + FALSETOK = 282, + BEGINTOK = 283, + ENDTOK = 284, + DECLARE = 285, + DEFINE = 286, + GLOBAL = 287, + CONSTANT = 288, + SECTION = 289, + ALIAS = 290, + VOLATILE = 291, + THREAD_LOCAL = 292, + TO = 293, + DOTDOTDOT = 294, + NULL_TOK = 295, + UNDEF = 296, + INTERNAL = 297, + LINKONCE = 298, + WEAK = 299, + APPENDING = 300, + DLLIMPORT = 301, + DLLEXPORT = 302, + EXTERN_WEAK = 303, + OPAQUE = 304, + EXTERNAL = 305, + TARGET = 306, + TRIPLE = 307, + ALIGN = 308, + DEPLIBS = 309, + CALL = 310, + TAIL = 311, + ASM_TOK = 312, + MODULE = 313, + SIDEEFFECT = 314, + CC_TOK = 315, + CCC_TOK = 316, + FASTCC_TOK = 317, + COLDCC_TOK = 318, + X86_STDCALLCC_TOK = 319, + X86_FASTCALLCC_TOK = 320, + DATALAYOUT = 321, + RET = 322, + BR = 323, + SWITCH = 324, + INVOKE = 325, + UNWIND = 326, + UNREACHABLE = 327, + ADD = 328, + SUB = 329, + MUL = 330, + UDIV = 331, + SDIV = 332, + FDIV = 333, + UREM = 334, + SREM = 335, + FREM = 336, + AND = 337, + OR = 338, + XOR = 339, + SHL = 340, + LSHR = 341, + ASHR = 342, + ICMP = 343, + FCMP = 344, + EQ = 345, + NE = 346, + SLT = 347, + SGT = 348, + SLE = 349, + SGE = 350, + ULT = 351, + UGT = 352, + ULE = 353, + UGE = 354, + OEQ = 355, + ONE = 356, + OLT = 357, + OGT = 358, + OLE = 359, + OGE = 360, + ORD = 361, + UNO = 362, + UEQ = 363, + UNE = 364, + MALLOC = 365, + ALLOCA = 366, + FREE = 367, + LOAD = 368, + STORE = 369, + GETELEMENTPTR = 370, + TRUNC = 371, + ZEXT = 372, + SEXT = 373, + FPTRUNC = 374, + FPEXT = 375, + BITCAST = 376, + UITOFP = 377, + SITOFP = 378, + FPTOUI = 379, + FPTOSI = 380, + INTTOPTR = 381, + PTRTOINT = 382, + PHI_TOK = 383, + SELECT = 384, + VAARG = 385, + EXTRACTELEMENT = 386, + INSERTELEMENT = 387, + SHUFFLEVECTOR = 388, + SIGNEXT = 389, + ZEROEXT = 390, + NORETURN = 391, + INREG = 392, + SRET = 393, + NOUNWIND = 394, + NOALIAS = 395, + BYVAL = 396, + NEST = 397, + DEFAULT = 398, + HIDDEN = 399, + PROTECTED = 400 + }; +#endif +#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 X86_FP80 269 +#define FP128 270 +#define PPC_FP128 271 +#define LABEL 272 +#define TYPE 273 +#define LOCALVAR 274 +#define GLOBALVAR 275 +#define LABELSTR 276 +#define STRINGCONSTANT 277 +#define ATSTRINGCONSTANT 278 +#define PCTSTRINGCONSTANT 279 +#define ZEROINITIALIZER 280 +#define TRUETOK 281 +#define FALSETOK 282 +#define BEGINTOK 283 +#define ENDTOK 284 +#define DECLARE 285 +#define DEFINE 286 +#define GLOBAL 287 +#define CONSTANT 288 +#define SECTION 289 +#define ALIAS 290 +#define VOLATILE 291 +#define THREAD_LOCAL 292 +#define TO 293 +#define DOTDOTDOT 294 +#define NULL_TOK 295 +#define UNDEF 296 +#define INTERNAL 297 +#define LINKONCE 298 +#define WEAK 299 +#define APPENDING 300 +#define DLLIMPORT 301 +#define DLLEXPORT 302 +#define EXTERN_WEAK 303 +#define OPAQUE 304 +#define EXTERNAL 305 +#define TARGET 306 +#define TRIPLE 307 +#define ALIGN 308 +#define DEPLIBS 309 +#define CALL 310 +#define TAIL 311 +#define ASM_TOK 312 +#define MODULE 313 +#define SIDEEFFECT 314 +#define CC_TOK 315 +#define CCC_TOK 316 +#define FASTCC_TOK 317 +#define COLDCC_TOK 318 +#define X86_STDCALLCC_TOK 319 +#define X86_FASTCALLCC_TOK 320 +#define DATALAYOUT 321 +#define RET 322 +#define BR 323 +#define SWITCH 324 +#define INVOKE 325 +#define UNWIND 326 +#define UNREACHABLE 327 +#define ADD 328 +#define SUB 329 +#define MUL 330 +#define UDIV 331 +#define SDIV 332 +#define FDIV 333 +#define UREM 334 +#define SREM 335 +#define FREM 336 +#define AND 337 +#define OR 338 +#define XOR 339 +#define SHL 340 +#define LSHR 341 +#define ASHR 342 +#define ICMP 343 +#define FCMP 344 +#define EQ 345 +#define NE 346 +#define SLT 347 +#define SGT 348 +#define SLE 349 +#define SGE 350 +#define ULT 351 +#define UGT 352 +#define ULE 353 +#define UGE 354 +#define OEQ 355 +#define ONE 356 +#define OLT 357 +#define OGT 358 +#define OLE 359 +#define OGE 360 +#define ORD 361 +#define UNO 362 +#define UEQ 363 +#define UNE 364 +#define MALLOC 365 +#define ALLOCA 366 +#define FREE 367 +#define LOAD 368 +#define STORE 369 +#define GETELEMENTPTR 370 +#define TRUNC 371 +#define ZEXT 372 +#define SEXT 373 +#define FPTRUNC 374 +#define FPEXT 375 +#define BITCAST 376 +#define UITOFP 377 +#define SITOFP 378 +#define FPTOUI 379 +#define FPTOSI 380 +#define INTTOPTR 381 +#define PTRTOINT 382 +#define PHI_TOK 383 +#define SELECT 384 +#define VAARG 385 +#define EXTRACTELEMENT 386 +#define INSERTELEMENT 387 +#define SHUFFLEVECTOR 388 +#define SIGNEXT 389 +#define ZEROEXT 390 +#define NORETURN 391 +#define INREG 392 +#define SRET 393 +#define NOUNWIND 394 +#define NOALIAS 395 +#define BYVAL 396 +#define NEST 397 +#define DEFAULT 398 +#define HIDDEN 399 +#define PROTECTED 400 + + + + +#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED) +#line 963 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" +typedef union YYSTYPE { llvm::Module *ModuleVal; llvm::Function *FunctionVal; llvm::BasicBlock *BasicBlockVal; @@ -44,149 +369,14 @@ 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 X86_FP80 268 -#define FP128 269 -#define PPC_FP128 270 -#define LABEL 271 -#define TYPE 272 -#define LOCALVAR 273 -#define GLOBALVAR 274 -#define LABELSTR 275 -#define STRINGCONSTANT 276 -#define ATSTRINGCONSTANT 277 -#define PCTSTRINGCONSTANT 278 -#define ZEROINITIALIZER 279 -#define TRUETOK 280 -#define FALSETOK 281 -#define BEGINTOK 282 -#define ENDTOK 283 -#define DECLARE 284 -#define DEFINE 285 -#define GLOBAL 286 -#define CONSTANT 287 -#define SECTION 288 -#define ALIAS 289 -#define VOLATILE 290 -#define THREAD_LOCAL 291 -#define TO 292 -#define DOTDOTDOT 293 -#define NULL_TOK 294 -#define UNDEF 295 -#define INTERNAL 296 -#define LINKONCE 297 -#define WEAK 298 -#define APPENDING 299 -#define DLLIMPORT 300 -#define DLLEXPORT 301 -#define EXTERN_WEAK 302 -#define OPAQUE 303 -#define EXTERNAL 304 -#define TARGET 305 -#define TRIPLE 306 -#define ALIGN 307 -#define DEPLIBS 308 -#define CALL 309 -#define TAIL 310 -#define ASM_TOK 311 -#define MODULE 312 -#define SIDEEFFECT 313 -#define CC_TOK 314 -#define CCC_TOK 315 -#define FASTCC_TOK 316 -#define COLDCC_TOK 317 -#define X86_STDCALLCC_TOK 318 -#define X86_FASTCALLCC_TOK 319 -#define DATALAYOUT 320 -#define RET 321 -#define BR 322 -#define SWITCH 323 -#define INVOKE 324 -#define UNWIND 325 -#define UNREACHABLE 326 -#define ADD 327 -#define SUB 328 -#define MUL 329 -#define UDIV 330 -#define SDIV 331 -#define FDIV 332 -#define UREM 333 -#define SREM 334 -#define FREM 335 -#define AND 336 -#define OR 337 -#define XOR 338 -#define SHL 339 -#define LSHR 340 -#define ASHR 341 -#define ICMP 342 -#define FCMP 343 -#define EQ 344 -#define NE 345 -#define SLT 346 -#define SGT 347 -#define SLE 348 -#define SGE 349 -#define ULT 350 -#define UGT 351 -#define ULE 352 -#define UGE 353 -#define OEQ 354 -#define ONE 355 -#define OLT 356 -#define OGT 357 -#define OLE 358 -#define OGE 359 -#define ORD 360 -#define UNO 361 -#define UEQ 362 -#define UNE 363 -#define MALLOC 364 -#define ALLOCA 365 -#define FREE 366 -#define LOAD 367 -#define STORE 368 -#define GETELEMENTPTR 369 -#define TRUNC 370 -#define ZEXT 371 -#define SEXT 372 -#define FPTRUNC 373 -#define FPEXT 374 -#define BITCAST 375 -#define UITOFP 376 -#define SITOFP 377 -#define FPTOUI 378 -#define FPTOSI 379 -#define INTTOPTR 380 -#define PTRTOINT 381 -#define PHI_TOK 382 -#define SELECT 383 -#define VAARG 384 -#define EXTRACTELEMENT 385 -#define INSERTELEMENT 386 -#define SHUFFLEVECTOR 387 -#define SIGNEXT 388 -#define ZEROEXT 389 -#define NORETURN 390 -#define INREG 391 -#define SRET 392 -#define NOUNWIND 393 -#define NOALIAS 394 -#define BYVAL 395 -#define NEST 396 -#define DEFAULT 397 -#define HIDDEN 398 -#define PROTECTED 399 - +/* Line 1268 of yacc.c. */ +#line 374 "llvmAsmParser.tab.h" +# define yystype YYSTYPE /* obsolescent; will be withdrawn */ +# define YYSTYPE_IS_DECLARED 1 +# define YYSTYPE_IS_TRIVIAL 1 +#endif extern YYSTYPE llvmAsmlval; + + + Modified: llvm/trunk/lib/AsmParser/llvmAsmParser.y.cvs URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/AsmParser/llvmAsmParser.y.cvs?rev=41706&r1=41705&r2=41706&view=diff ============================================================================== --- llvm/trunk/lib/AsmParser/llvmAsmParser.y.cvs (original) +++ llvm/trunk/lib/AsmParser/llvmAsmParser.y.cvs Tue Sep 4 13:46:50 2007 @@ -1886,7 +1886,7 @@ GEN_ERROR("GetElementPtr requires a pointer operand"); const Type *IdxTy = - GetElementPtrInst::getIndexedType($3->getType(), &(*$4)[0], $4->size(), + GetElementPtrInst::getIndexedType($3->getType(), $4->begin(), $4->end(), true); if (!IdxTy) GEN_ERROR("Index list invalid for constant getelementptr"); @@ -3064,12 +3064,12 @@ if (!isa($2->get())) GEN_ERROR("getelementptr insn requires pointer operand"); - if (!GetElementPtrInst::getIndexedType(*$2, &(*$4)[0], $4->size(), true)) + if (!GetElementPtrInst::getIndexedType(*$2, $4->begin(), $4->end(), true)) GEN_ERROR("Invalid getelementptr indices for type '" + (*$2)->getDescription()+ "'"); Value* tmpVal = getVal(*$2, $3); CHECK_FOR_ERROR - $$ = new GetElementPtrInst(tmpVal, &(*$4)[0], $4->size()); + $$ = new GetElementPtrInst(tmpVal, $4->begin(), $4->end()); delete $2; delete $4; }; Modified: llvm/trunk/tools/llvm-upgrade/UpgradeParser.cpp.cvs URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-upgrade/UpgradeParser.cpp.cvs?rev=41706&r1=41705&r2=41706&view=diff ============================================================================== --- llvm/trunk/tools/llvm-upgrade/UpgradeParser.cpp.cvs (original) +++ llvm/trunk/tools/llvm-upgrade/UpgradeParser.cpp.cvs Tue Sep 4 13:46:50 2007 @@ -1,9 +1,7 @@ -/* A Bison parser, made by GNU Bison 2.3. */ +/* A Bison parser, made by GNU Bison 1.875c. */ -/* Skeleton implementation for Bison's Yacc-like parsers in C - - Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 - Free Software Foundation, Inc. +/* Skeleton parser for Yacc-like parsing with Bison, + Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003 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 @@ -17,24 +15,16 @@ 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. + Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ - This special exception was added by the Free Software Foundation in - version 2.2 of Bison. */ +/* 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. */ -/* C LALR(1) parser skeleton written by Richard Stallman, by - simplifying the original so-called "semantic" parser. */ +/* 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 @@ -46,9 +36,6 @@ /* Identify Bison output. */ #define YYBISON 1 -/* Bison version. */ -#define YYBISON_VERSION "2.3" - /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" @@ -58,7 +45,8 @@ /* Using locations. */ #define YYLSP_NEEDED 0 -/* Substitute the variable and function names. */ +/* If NAME_PREFIX is specified substitute the variables and functions + names. */ #define yyparse Upgradeparse #define yylex Upgradelex #define yyerror Upgradeerror @@ -225,7 +213,6 @@ BITCAST = 406 }; #endif -/* Tokens. */ #define ESINT64VAL 258 #define EUINT64VAL 259 #define SINTVAL 260 @@ -380,7 +367,7 @@ /* Copy the first part of user declarations. */ -#line 14 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 14 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" #include "UpgradeInternals.h" #include "llvm/CallingConv.h" @@ -1903,8 +1890,8 @@ } } Result.push_back(Index); - Ty = GetElementPtrInst::getIndexedType(PTy, (Value**)&Result[0], - Result.size(),true); + Ty = GetElementPtrInst::getIndexedType(PTy, Result.begin(), + Result.end(),true); if (!Ty) error("Index list invalid for constant getelementptr"); } @@ -1949,7 +1936,8 @@ } } Result.push_back(Index); - Ty = GetElementPtrInst::getIndexedType(PTy, &Result[0], Result.size(),true); + Ty = GetElementPtrInst::getIndexedType(PTy, Result.begin(), + Result.end(),true); if (!Ty) error("Index list invalid for constant getelementptr"); } @@ -2093,11 +2081,12 @@ while (!F->use_empty()) { CallInst* CI = cast(F->use_back()); - SmallVector Args; - Args.push_back(new AllocaInst(ArgTy, 0, "vacopy.fix.1", CI)); - Args.push_back(new AllocaInst(ArgTy, 0, "vacopy.fix.2", CI)); + Value *Args[2] = { + new AllocaInst(ArgTy, 0, "vacopy.fix.1", CI), + new AllocaInst(ArgTy, 0, "vacopy.fix.2", CI) + }; new StoreInst(CI->getOperand(1), Args[1], CI); - new CallInst(NF, Args.begin(), Args.end(), "", CI); + new CallInst(NF, Args, Args + 2, "", CI); Value* foo = new LoadInst(Args[0], "vacopy.fix.3", CI); CI->replaceAllUsesWith(foo); CI->getParent()->getInstList().erase(CI); @@ -2128,15 +2117,9 @@ # 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 1748 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" -{ +#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED) +#line 1750 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" +typedef union YYSTYPE { llvm::Module *ModuleVal; llvm::Function *FunctionVal; std::pair *ArgVal; @@ -2176,10 +2159,9 @@ llvm::ICmpInst::Predicate IPred; llvm::FCmpInst::Predicate FPred; llvm::Module::Endianness Endianness; -} -/* Line 187 of yacc.c. */ -#line 2182 "UpgradeParser.tab.c" - YYSTYPE; +} YYSTYPE; +/* Line 191 of yacc.c. */ +#line 2165 "UpgradeParser.tab.c" # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 # define YYSTYPE_IS_TRIVIAL 1 @@ -2190,171 +2172,49 @@ /* Copy the second part of user declarations. */ -/* Line 216 of yacc.c. */ -#line 2195 "UpgradeParser.tab.c" - -#ifdef short -# undef short -#endif - -#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 - -#ifdef YYTYPE_UINT16 -typedef YYTYPE_UINT16 yytype_uint16; -#else -typedef unsigned short int yytype_uint16; -#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 - -/* 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 +/* Line 214 of yacc.c. */ +#line 2177 "UpgradeParser.tab.c" -#if ! defined yyoverflow || YYERROR_VERBOSE +#if ! defined (yyoverflow) || YYERROR_VERBOSE /* The parser invokes alloca or malloc; define the necessary symbols. */ # ifdef YYSTACK_USE_ALLOCA # if YYSTACK_USE_ALLOCA +# define YYSTACK_ALLOC alloca +# endif +# else +# if defined (alloca) || defined (_ALLOCA_H) +# define YYSTACK_ALLOC alloca +# else # 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 + /* Pacify GCC's `empty if-body' warning. */ +# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0) # 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))) +# if defined (__STDC__) || defined (__cplusplus) # 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 +# define YYSIZE_T size_t # endif +# define YYSTACK_ALLOC malloc +# define YYSTACK_FREE free # endif -#endif /* ! defined yyoverflow || YYERROR_VERBOSE */ +#endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */ -#if (! defined yyoverflow \ - && (! defined __cplusplus \ - || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) +#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; + short yyss; YYSTYPE yyvs; }; @@ -2364,24 +2224,24 @@ /* 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)) \ + ((N) * (sizeof (short) + 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__ +# 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; \ + register YYSIZE_T yyi; \ for (yyi = 0; yyi < (Count); yyi++) \ (To)[yyi] = (From)[yyi]; \ } \ - while (YYID (0)) + while (0) # endif # endif @@ -2399,33 +2259,39 @@ yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ yyptr += yynewbytes / sizeof (*yyptr); \ } \ - while (YYID (0)) + while (0) + +#endif +#if defined (__STDC__) || defined (__cplusplus) + typedef signed char yysigned_char; +#else + typedef short yysigned_char; #endif -/* YYFINAL -- State number of the termination state. */ +/* YYFINAL -- State number of the termination state. */ #define YYFINAL 4 /* YYLAST -- Last index in YYTABLE. */ #define YYLAST 1630 -/* YYNTOKENS -- Number of terminals. */ +/* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 166 -/* YYNNTS -- Number of nonterminals. */ +/* YYNNTS -- Number of nonterminals. */ #define YYNNTS 81 -/* YYNRULES -- Number of rules. */ +/* YYNRULES -- Number of rules. */ #define YYNRULES 310 -/* YYNRULES -- Number of states. */ +/* YYNRULES -- Number of states. */ #define YYNSTATES 606 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 #define YYMAXUTOK 406 -#define YYTRANSLATE(YYX) \ +#define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ -static const yytype_uint8 yytranslate[] = +static const unsigned char yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -2473,7 +2339,7 @@ #if YYDEBUG /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in YYRHS. */ -static const yytype_uint16 yyprhs[] = +static const unsigned short yyprhs[] = { 0, 0, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, @@ -2509,8 +2375,8 @@ 969 }; -/* YYRHS -- A `-1'-separated list of the rules' RHS. */ -static const yytype_int16 yyrhs[] = +/* YYRHS -- A `-1'-separated list of the rules' RHS. */ +static const short yyrhs[] = { 200, 0, -1, 5, -1, 6, -1, 3, -1, 4, -1, 79, -1, 80, -1, 81, -1, 82, -1, 83, @@ -2613,46 +2479,46 @@ }; /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ -static const yytype_uint16 yyrline[] = +static const unsigned short yyrline[] = { - 0, 1888, 1888, 1889, 1897, 1898, 1908, 1908, 1908, 1908, - 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1912, 1912, 1912, - 1916, 1916, 1916, 1916, 1916, 1916, 1920, 1920, 1921, 1921, - 1922, 1922, 1923, 1923, 1924, 1924, 1928, 1928, 1929, 1929, - 1930, 1930, 1931, 1931, 1932, 1932, 1933, 1933, 1934, 1934, - 1935, 1936, 1939, 1939, 1939, 1939, 1943, 1943, 1943, 1943, - 1943, 1943, 1943, 1944, 1944, 1944, 1944, 1944, 1944, 1950, - 1950, 1950, 1950, 1954, 1954, 1954, 1954, 1958, 1958, 1962, - 1962, 1967, 1970, 1975, 1976, 1977, 1978, 1979, 1980, 1981, - 1982, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 2003, - 2004, 2012, 2013, 2021, 2030, 2031, 2038, 2039, 2043, 2047, - 2063, 2064, 2071, 2072, 2079, 2087, 2087, 2087, 2087, 2087, - 2087, 2087, 2088, 2088, 2088, 2088, 2088, 2093, 2097, 2101, - 2106, 2115, 2142, 2148, 2161, 2172, 2176, 2189, 2193, 2207, - 2211, 2218, 2219, 2225, 2232, 2244, 2274, 2287, 2310, 2338, - 2360, 2371, 2393, 2404, 2413, 2418, 2477, 2484, 2492, 2499, - 2506, 2510, 2514, 2523, 2538, 2550, 2559, 2587, 2600, 2609, - 2615, 2621, 2632, 2638, 2644, 2655, 2656, 2665, 2666, 2678, - 2687, 2688, 2689, 2690, 2691, 2707, 2727, 2729, 2731, 2731, - 2738, 2738, 2746, 2746, 2754, 2754, 2763, 2765, 2767, 2772, - 2786, 2787, 2791, 2794, 2802, 2806, 2813, 2817, 2821, 2825, - 2833, 2833, 2837, 2838, 2842, 2850, 2855, 2863, 2864, 2871, - 2878, 2882, 3072, 3072, 3076, 3076, 3086, 3086, 3090, 3095, - 3096, 3097, 3101, 3102, 3101, 3114, 3115, 3120, 3121, 3122, - 3123, 3127, 3131, 3132, 3133, 3134, 3155, 3159, 3173, 3174, - 3179, 3179, 3187, 3197, 3200, 3209, 3220, 3225, 3234, 3245, - 3245, 3248, 3252, 3256, 3261, 3271, 3289, 3298, 3371, 3375, - 3382, 3394, 3409, 3439, 3449, 3459, 3463, 3470, 3471, 3475, - 3478, 3484, 3503, 3521, 3537, 3551, 3565, 3576, 3594, 3603, - 3612, 3619, 3640, 3664, 3670, 3676, 3682, 3698, 3791, 3799, - 3800, 3804, 3805, 3809, 3815, 3822, 3828, 3835, 3842, 3855, - 3881 + 0, 1890, 1890, 1891, 1899, 1900, 1910, 1910, 1910, 1910, + 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1914, 1914, 1914, + 1918, 1918, 1918, 1918, 1918, 1918, 1922, 1922, 1923, 1923, + 1924, 1924, 1925, 1925, 1926, 1926, 1930, 1930, 1931, 1931, + 1932, 1932, 1933, 1933, 1934, 1934, 1935, 1935, 1936, 1936, + 1937, 1938, 1941, 1941, 1941, 1941, 1945, 1945, 1945, 1945, + 1945, 1945, 1945, 1946, 1946, 1946, 1946, 1946, 1946, 1952, + 1952, 1952, 1952, 1956, 1956, 1956, 1956, 1960, 1960, 1964, + 1964, 1969, 1972, 1977, 1978, 1979, 1980, 1981, 1982, 1983, + 1984, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 2005, + 2006, 2014, 2015, 2023, 2032, 2033, 2040, 2041, 2045, 2049, + 2065, 2066, 2073, 2074, 2081, 2089, 2089, 2089, 2089, 2089, + 2089, 2089, 2090, 2090, 2090, 2090, 2090, 2095, 2099, 2103, + 2108, 2117, 2144, 2150, 2163, 2174, 2178, 2191, 2195, 2209, + 2213, 2220, 2221, 2227, 2234, 2246, 2276, 2289, 2312, 2340, + 2362, 2373, 2395, 2406, 2415, 2420, 2479, 2486, 2494, 2501, + 2508, 2512, 2516, 2525, 2540, 2552, 2561, 2589, 2602, 2611, + 2617, 2623, 2634, 2640, 2646, 2657, 2658, 2667, 2668, 2680, + 2689, 2690, 2691, 2692, 2693, 2709, 2729, 2731, 2733, 2733, + 2740, 2740, 2748, 2748, 2756, 2756, 2765, 2767, 2769, 2774, + 2788, 2789, 2793, 2796, 2804, 2808, 2815, 2819, 2823, 2827, + 2835, 2835, 2839, 2840, 2844, 2852, 2857, 2865, 2866, 2873, + 2880, 2884, 3074, 3074, 3078, 3078, 3088, 3088, 3092, 3097, + 3098, 3099, 3103, 3104, 3103, 3116, 3117, 3122, 3123, 3124, + 3125, 3129, 3133, 3134, 3135, 3136, 3157, 3161, 3175, 3176, + 3181, 3181, 3189, 3199, 3202, 3211, 3222, 3227, 3236, 3247, + 3247, 3250, 3254, 3258, 3263, 3273, 3291, 3300, 3374, 3378, + 3385, 3397, 3412, 3442, 3452, 3462, 3466, 3473, 3474, 3478, + 3481, 3487, 3506, 3524, 3540, 3554, 3568, 3579, 3597, 3606, + 3615, 3622, 3643, 3667, 3673, 3679, 3685, 3701, 3794, 3802, + 3803, 3807, 3808, 3812, 3818, 3825, 3831, 3838, 3845, 3858, + 3884 }; #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. */ +#if YYDEBUG || YYERROR_VERBOSE +/* YYTNME[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", "SINTVAL", @@ -2701,7 +2567,7 @@ # ifdef YYPRINT /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to token YYLEX-NUM. */ -static const yytype_uint16 yytoknum[] = +static const unsigned short yytoknum[] = { 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, @@ -2724,7 +2590,7 @@ # endif /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ -static const yytype_uint8 yyr1[] = +static const unsigned char yyr1[] = { 0, 166, 167, 167, 168, 168, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 170, 170, 170, @@ -2761,7 +2627,7 @@ }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ -static const yytype_uint8 yyr2[] = +static const unsigned char yyr2[] = { 0, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -2800,7 +2666,7 @@ /* 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[] = +static const unsigned short yydefact[] = { 198, 0, 90, 184, 1, 183, 232, 83, 84, 85, 86, 87, 88, 89, 0, 224, 257, 180, 181, 257, @@ -2865,8 +2731,8 @@ 0, 271, 0, 0, 270, 267 }; -/* YYDEFGOTO[NTERM-NUM]. */ -static const yytype_int16 yydefgoto[] = +/* YYDEFGOTO[NTERM-NUM]. */ +static const short yydefgoto[] = { -1, 94, 312, 329, 330, 331, 255, 272, 332, 333, 219, 220, 243, 221, 25, 15, 63, 555, 359, 454, @@ -2882,7 +2748,7 @@ /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ #define YYPACT_NINF -542 -static const yytype_int16 yypact[] = +static const short yypact[] = { -542, 13, 162, 567, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, 83, -542, 19, -542, -542, -14, @@ -2948,7 +2814,7 @@ }; /* YYPGOTO[NTERM-NUM]. */ -static const yytype_int16 yypgoto[] = +static const short yypgoto[] = { -542, -542, -542, 435, 439, 441, 191, 197, 442, 445, -119, -116, -541, -542, 478, 489, -107, -542, -267, 37, @@ -2966,7 +2832,7 @@ number is the opposite. If zero, do what YYDEFACT says. If YYTABLE_NINF, syntax error. */ #define YYTABLE_NINF -180 -static const yytype_int16 yytable[] = +static const short yytable[] = { 97, 241, 227, 110, 242, 230, 223, 361, 197, 31, 111, 26, 449, 4, 244, 204, 34, 578, 97, 201, @@ -3134,7 +3000,7 @@ 175 }; -static const yytype_int16 yycheck[] = +static const short yycheck[] = { 45, 120, 115, 63, 120, 118, 107, 274, 4, 23, 29, 3, 161, 0, 121, 164, 30, 558, 63, 93, @@ -3304,7 +3170,7 @@ /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ -static const yytype_uint8 yystos[] = +static const unsigned char yystos[] = { 0, 200, 201, 202, 0, 25, 31, 41, 42, 43, 44, 45, 46, 47, 62, 181, 219, 222, 224, 232, @@ -3369,6 +3235,22 @@ 235, 230, 21, 21, 230, 230 }; +#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__) +# define YYSIZE_T __SIZE_TYPE__ +#endif +#if ! defined (YYSIZE_T) && defined (size_t) +# define YYSIZE_T size_t +#endif +#if ! defined (YYSIZE_T) +# if defined (__STDC__) || defined (__cplusplus) +# include /* INFRINGES ON USER NAME SPACE */ +# define YYSIZE_T size_t +# endif +#endif +#if ! defined (YYSIZE_T) +# define YYSIZE_T unsigned int +#endif + #define yyerrok (yyerrstatus = 0) #define yyclearin (yychar = YYEMPTY) #define YYEMPTY (-2) @@ -3394,63 +3276,30 @@ yychar = (Token); \ yylval = (Value); \ yytoken = YYTRANSLATE (yychar); \ - YYPOPSTACK (1); \ + YYPOPSTACK; \ goto yybackup; \ } \ else \ - { \ - yyerror (YY_("syntax error: cannot back up")); \ + { \ + yyerror ("syntax error: cannot back up");\ YYERROR; \ } \ -while (YYID (0)) - +while (0) #define YYTERROR 1 #define YYERRCODE 256 +/* YYLLOC_DEFAULT -- Compute the default location (before the actions + are run). */ -/* 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 +# define YYLLOC_DEFAULT(Current, Rhs, N) \ + ((Current).first_line = (Rhs)[1].first_line, \ + (Current).first_column = (Rhs)[1].first_column, \ + (Current).last_line = (Rhs)[N].last_line, \ + (Current).last_column = (Rhs)[N].last_column) #endif - /* YYLEX -- calling `yylex' with the right arguments. */ #ifdef YYLEX_PARAM @@ -3471,96 +3320,42 @@ 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)) +} while (0) +# define YYDSYMPRINT(Args) \ +do { \ + if (yydebug) \ + yysymprint Args; \ +} while (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; - } -} - - -/*--------------------------------. -| 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, ")"); -} +# define YYDSYMPRINTF(Title, Token, Value, Location) \ +do { \ + if (yydebug) \ + { \ + YYFPRINTF (stderr, "%s ", Title); \ + yysymprint (stderr, \ + Token, Value); \ + YYFPRINTF (stderr, "\n"); \ + } \ +} while (0) /*------------------------------------------------------------------. | yy_stack_print -- Print the state stack from its BOTTOM up to its | | TOP (included). | `------------------------------------------------------------------*/ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) +#if defined (__STDC__) || defined (__cplusplus) static void -yy_stack_print (yytype_int16 *bottom, yytype_int16 *top) +yy_stack_print (short *bottom, short *top) #else static void yy_stack_print (bottom, top) - yytype_int16 *bottom; - yytype_int16 *top; + short *bottom; + short *top; #endif { YYFPRINTF (stderr, "Stack now"); - for (; bottom <= top; ++bottom) + for (/* Nothing. */; bottom <= top; ++bottom) YYFPRINTF (stderr, " %d", *bottom); YYFPRINTF (stderr, "\n"); } @@ -3569,52 +3364,45 @@ do { \ if (yydebug) \ yy_stack_print ((Bottom), (Top)); \ -} while (YYID (0)) +} while (0) /*------------------------------------------------. | Report that the YYRULE is going to be reduced. | `------------------------------------------------*/ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) +#if defined (__STDC__) || defined (__cplusplus) static void -yy_reduce_print (YYSTYPE *yyvsp, int yyrule) +yy_reduce_print (int yyrule) #else static void -yy_reduce_print (yyvsp, yyrule) - YYSTYPE *yyvsp; +yy_reduce_print (yyrule) 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"); - } + unsigned int yylno = yyrline[yyrule]; + YYFPRINTF (stderr, "Reducing stack by rule %d (line %u), ", + yyrule - 1, yylno); + /* Print the symbols being reduced, and their result. */ + for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++) + YYFPRINTF (stderr, "%s ", yytname [yyrhs[yyi]]); + YYFPRINTF (stderr, "-> %s\n", yytname [yyr1[yyrule]]); } # define YY_REDUCE_PRINT(Rule) \ do { \ if (yydebug) \ - yy_reduce_print (yyvsp, Rule); \ -} while (YYID (0)) + yy_reduce_print (Rule); \ +} while (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 YYDSYMPRINT(Args) +# define YYDSYMPRINTF(Title, Token, Value, Location) # define YY_STACK_PRINT(Bottom, Top) # define YY_REDUCE_PRINT(Rule) #endif /* !YYDEBUG */ @@ -3629,9 +3417,13 @@ 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) + SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH) evaluated with infinite-precision integer arithmetic. */ +#if defined (YYMAXDEPTH) && YYMAXDEPTH == 0 +# undef YYMAXDEPTH +#endif + #ifndef YYMAXDEPTH # define YYMAXDEPTH 10000 #endif @@ -3641,47 +3433,45 @@ #if YYERROR_VERBOSE # ifndef yystrlen -# if defined __GLIBC__ && defined _STRING_H +# 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 +# if defined (__STDC__) || defined (__cplusplus) yystrlen (const char *yystr) -#else -static YYSIZE_T +# else yystrlen (yystr) - const char *yystr; -#endif + const char *yystr; +# endif { - YYSIZE_T yylen; - for (yylen = 0; yystr[yylen]; yylen++) + register const char *yys = yystr; + + while (*yys++ != '\0') continue; - return yylen; + + return yys - yystr - 1; } # endif # endif # ifndef yystpcpy -# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE +# 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 * +# if defined (__STDC__) || defined (__cplusplus) yystpcpy (char *yydest, const char *yysrc) -#else -static char * +# else yystpcpy (yydest, yysrc) - char *yydest; - const char *yysrc; -#endif + char *yydest; + const char *yysrc; +# endif { - char *yyd = yydest; - const char *yys = yysrc; + register char *yyd = yydest; + register const char *yys = yysrc; while ((*yyd++ = *yys++) != '\0') continue; @@ -3691,192 +3481,70 @@ # 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: ; - } +#endif /* !YYERROR_VERBOSE */ - if (! yyres) - return yystrlen (yystr); + - return yystpcpy (yyres, yystr) - yyres; -} -# endif +#if YYDEBUG +/*--------------------------------. +| Print this symbol on YYOUTPUT. | +`--------------------------------*/ -/* 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) +#if defined (__STDC__) || defined (__cplusplus) +static void +yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep) +#else +static void +yysymprint (yyoutput, yytype, yyvaluep) + FILE *yyoutput; + int yytype; + YYSTYPE *yyvaluep; +#endif { - int yyn = yypact[yystate]; + /* Pacify ``unused variable'' warnings. */ + (void) yyvaluep; - if (! (YYPACT_NINF < yyn && yyn <= YYLAST)) - return 0; - else + if (yytype < YYNTOKENS) { - 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"); + YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); +# ifdef YYPRINT + YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); # 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; + } + else + YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); - 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; + switch (yytype) + { + default: + break; } + YYFPRINTF (yyoutput, ")"); } -#endif /* YYERROR_VERBOSE */ - +#endif /* ! YYDEBUG */ /*-----------------------------------------------. | Release the memory associated to this symbol. | `-----------------------------------------------*/ -/*ARGSUSED*/ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) +#if defined (__STDC__) || defined (__cplusplus) static void -yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep) +yydestruct (int yytype, YYSTYPE *yyvaluep) #else static void -yydestruct (yymsg, yytype, yyvaluep) - const char *yymsg; +yydestruct (yytype, yyvaluep) int yytype; YYSTYPE *yyvaluep; #endif { - YYUSE (yyvaluep); - - if (!yymsg) - yymsg = "Deleting"; - YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); + /* Pacify ``unused variable'' warnings. */ + (void) yyvaluep; switch (yytype) { default: - break; + break; } } @@ -3884,13 +3552,13 @@ /* Prevent warnings from -Wmissing-prototypes. */ #ifdef YYPARSE_PARAM -#if defined __STDC__ || defined __cplusplus +# if defined (__STDC__) || defined (__cplusplus) int yyparse (void *YYPARSE_PARAM); -#else +# else int yyparse (); -#endif +# endif #else /* ! YYPARSE_PARAM */ -#if defined __STDC__ || defined __cplusplus +#if defined (__STDC__) || defined (__cplusplus) int yyparse (void); #else int yyparse (); @@ -3899,10 +3567,10 @@ -/* The look-ahead symbol. */ +/* The lookahead symbol. */ int yychar; -/* The semantic value of the look-ahead symbol. */ +/* The semantic value of the lookahead symbol. */ YYSTYPE yylval; /* Number of syntax errors so far. */ @@ -3915,18 +3583,14 @@ `----------*/ #ifdef YYPARSE_PARAM -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -int -yyparse (void *YYPARSE_PARAM) -#else -int -yyparse (YYPARSE_PARAM) - void *YYPARSE_PARAM; -#endif +# if defined (__STDC__) || defined (__cplusplus) +int yyparse (void *YYPARSE_PARAM) +# else +int yyparse (YYPARSE_PARAM) + void *YYPARSE_PARAM; +# endif #else /* ! YYPARSE_PARAM */ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) +#if defined (__STDC__) || defined (__cplusplus) int yyparse (void) #else @@ -3937,19 +3601,13 @@ #endif { - int yystate; - int yyn; + register int yystate; + register int yyn; int yyresult; /* Number of tokens to shift before error messages enabled. */ int yyerrstatus; - /* Look-ahead token as an internal (translated) token number. */ + /* Lookahead 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, @@ -3960,18 +3618,18 @@ to reallocate them elsewhere. */ /* The state stack. */ - yytype_int16 yyssa[YYINITDEPTH]; - yytype_int16 *yyss = yyssa; - yytype_int16 *yyssp; + short yyssa[YYINITDEPTH]; + short *yyss = yyssa; + register short *yyssp; /* The semantic value stack. */ YYSTYPE yyvsa[YYINITDEPTH]; YYSTYPE *yyvs = yyvsa; - YYSTYPE *yyvsp; + register YYSTYPE *yyvsp; -#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) +#define YYPOPSTACK (yyvsp--, yyssp--) YYSIZE_T yystacksize = YYINITDEPTH; @@ -3980,9 +3638,9 @@ YYSTYPE yyval; - /* The number of symbols on the RHS of the reduced rule. - Keep to zero when no symbol should be popped. */ - int yylen = 0; + /* When reducing, the number of symbols on the RHS of the reduced + rule. */ + int yylen; YYDPRINTF ((stderr, "Starting parse\n")); @@ -4006,7 +3664,8 @@ `------------------------------------------------------------*/ 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. */ + have just been pushed. so pushing a state here evens the stacks. + */ yyssp++; yysetstate: @@ -4019,18 +3678,18 @@ #ifdef yyoverflow { - /* Give user a chance to reallocate the stack. Use copies of + /* 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; + short *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"), + yyoverflow ("parser stack overflow", &yyss1, yysize * sizeof (*yyssp), &yyvs1, yysize * sizeof (*yyvsp), @@ -4041,21 +3700,21 @@ } #else /* no yyoverflow */ # ifndef YYSTACK_RELOCATE - goto yyexhaustedlab; + goto yyoverflowlab; # else /* Extend the stack our own way. */ if (YYMAXDEPTH <= yystacksize) - goto yyexhaustedlab; + goto yyoverflowlab; yystacksize *= 2; if (YYMAXDEPTH < yystacksize) yystacksize = YYMAXDEPTH; { - yytype_int16 *yyss1 = yyss; + short *yyss1 = yyss; union yyalloc *yyptr = (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); if (! yyptr) - goto yyexhaustedlab; + goto yyoverflowlab; YYSTACK_RELOCATE (yyss); YYSTACK_RELOCATE (yyvs); @@ -4086,17 +3745,19 @@ `-----------*/ yybackup: - /* Do appropriate processing given the current state. Read a - look-ahead token if we need one and don't already have one. */ +/* Do appropriate processing given the current state. */ +/* Read a lookahead token if we need one and don't already have one. */ +/* yyresume: */ + + /* 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) 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 look-ahead symbol. */ + /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ if (yychar == YYEMPTY) { YYDPRINTF ((stderr, "Reading a token: ")); @@ -4111,7 +3772,7 @@ else { yytoken = YYTRANSLATE (yychar); - YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); + YYDSYMPRINTF ("Next token is", yytoken, &yylval, &yylloc); } /* If the proper action on seeing token YYTOKEN is to reduce or to @@ -4131,21 +3792,22 @@ if (yyn == YYFINAL) YYACCEPT; - /* Count tokens shifted since error; after three, turn off error - status. */ - if (yyerrstatus) - yyerrstatus--; - - /* Shift the look-ahead token. */ - YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); + /* Shift the lookahead token. */ + YYDPRINTF ((stderr, "Shifting token %s, ", yytname[yytoken])); - /* 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; + + /* Count tokens shifted since error; after three, turn off error + status. */ + if (yyerrstatus) + yyerrstatus--; + + yystate = yyn; goto yynewstate; @@ -4181,399 +3843,399 @@ switch (yyn) { case 3: -#line 1889 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 1891 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - if ((yyvsp[(1) - (1)].UIntVal) > (uint32_t)INT32_MAX) // Outside of my range! + if (yyvsp[0].UIntVal > (uint32_t)INT32_MAX) // Outside of my range! error("Value too large for type"); - (yyval.SIntVal) = (int32_t)(yyvsp[(1) - (1)].UIntVal); + yyval.SIntVal = (int32_t)yyvsp[0].UIntVal; ;} break; case 5: -#line 1898 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 1900 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - if ((yyvsp[(1) - (1)].UInt64Val) > (uint64_t)INT64_MAX) // Outside of my range! + if (yyvsp[0].UInt64Val > (uint64_t)INT64_MAX) // Outside of my range! error("Value too large for type"); - (yyval.SInt64Val) = (int64_t)(yyvsp[(1) - (1)].UInt64Val); + yyval.SInt64Val = (int64_t)yyvsp[0].UInt64Val; ;} break; case 26: -#line 1920 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.IPred) = ICmpInst::ICMP_EQ; ;} +#line 1922 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" + { yyval.IPred = ICmpInst::ICMP_EQ; ;} break; case 27: -#line 1920 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.IPred) = ICmpInst::ICMP_NE; ;} +#line 1922 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" + { yyval.IPred = ICmpInst::ICMP_NE; ;} break; case 28: -#line 1921 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.IPred) = ICmpInst::ICMP_SLT; ;} +#line 1923 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" + { yyval.IPred = ICmpInst::ICMP_SLT; ;} break; case 29: -#line 1921 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.IPred) = ICmpInst::ICMP_SGT; ;} +#line 1923 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" + { yyval.IPred = ICmpInst::ICMP_SGT; ;} break; case 30: -#line 1922 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.IPred) = ICmpInst::ICMP_SLE; ;} +#line 1924 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" + { yyval.IPred = ICmpInst::ICMP_SLE; ;} break; case 31: -#line 1922 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.IPred) = ICmpInst::ICMP_SGE; ;} +#line 1924 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" + { yyval.IPred = ICmpInst::ICMP_SGE; ;} break; case 32: -#line 1923 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.IPred) = ICmpInst::ICMP_ULT; ;} +#line 1925 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" + { yyval.IPred = ICmpInst::ICMP_ULT; ;} break; case 33: -#line 1923 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.IPred) = ICmpInst::ICMP_UGT; ;} +#line 1925 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" + { yyval.IPred = ICmpInst::ICMP_UGT; ;} break; case 34: -#line 1924 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.IPred) = ICmpInst::ICMP_ULE; ;} +#line 1926 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" + { yyval.IPred = ICmpInst::ICMP_ULE; ;} break; case 35: -#line 1924 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.IPred) = ICmpInst::ICMP_UGE; ;} +#line 1926 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" + { yyval.IPred = ICmpInst::ICMP_UGE; ;} break; case 36: -#line 1928 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.FPred) = FCmpInst::FCMP_OEQ; ;} +#line 1930 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" + { yyval.FPred = FCmpInst::FCMP_OEQ; ;} break; case 37: -#line 1928 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.FPred) = FCmpInst::FCMP_ONE; ;} +#line 1930 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" + { yyval.FPred = FCmpInst::FCMP_ONE; ;} break; case 38: -#line 1929 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.FPred) = FCmpInst::FCMP_OLT; ;} +#line 1931 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" + { yyval.FPred = FCmpInst::FCMP_OLT; ;} break; case 39: -#line 1929 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.FPred) = FCmpInst::FCMP_OGT; ;} +#line 1931 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" + { yyval.FPred = FCmpInst::FCMP_OGT; ;} break; case 40: -#line 1930 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.FPred) = FCmpInst::FCMP_OLE; ;} +#line 1932 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" + { yyval.FPred = FCmpInst::FCMP_OLE; ;} break; case 41: -#line 1930 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.FPred) = FCmpInst::FCMP_OGE; ;} +#line 1932 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" + { yyval.FPred = FCmpInst::FCMP_OGE; ;} break; case 42: -#line 1931 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.FPred) = FCmpInst::FCMP_ORD; ;} +#line 1933 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" + { yyval.FPred = FCmpInst::FCMP_ORD; ;} break; case 43: -#line 1931 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.FPred) = FCmpInst::FCMP_UNO; ;} +#line 1933 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" + { yyval.FPred = FCmpInst::FCMP_UNO; ;} break; case 44: -#line 1932 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.FPred) = FCmpInst::FCMP_UEQ; ;} +#line 1934 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" + { yyval.FPred = FCmpInst::FCMP_UEQ; ;} break; case 45: -#line 1932 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.FPred) = FCmpInst::FCMP_UNE; ;} +#line 1934 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" + { yyval.FPred = FCmpInst::FCMP_UNE; ;} break; case 46: -#line 1933 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.FPred) = FCmpInst::FCMP_ULT; ;} +#line 1935 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" + { yyval.FPred = FCmpInst::FCMP_ULT; ;} break; case 47: -#line 1933 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.FPred) = FCmpInst::FCMP_UGT; ;} +#line 1935 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" + { yyval.FPred = FCmpInst::FCMP_UGT; ;} break; case 48: -#line 1934 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.FPred) = FCmpInst::FCMP_ULE; ;} +#line 1936 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" + { yyval.FPred = FCmpInst::FCMP_ULE; ;} break; case 49: -#line 1934 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.FPred) = FCmpInst::FCMP_UGE; ;} +#line 1936 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" + { yyval.FPred = FCmpInst::FCMP_UGE; ;} break; case 50: -#line 1935 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.FPred) = FCmpInst::FCMP_TRUE; ;} +#line 1937 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" + { yyval.FPred = FCmpInst::FCMP_TRUE; ;} break; case 51: -#line 1936 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.FPred) = FCmpInst::FCMP_FALSE; ;} +#line 1938 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" + { yyval.FPred = FCmpInst::FCMP_FALSE; ;} break; case 81: -#line 1967 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 1969 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - (yyval.StrVal) = (yyvsp[(1) - (2)].StrVal); + yyval.StrVal = yyvsp[-1].StrVal; ;} break; case 82: -#line 1970 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 1972 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - (yyval.StrVal) = 0; + yyval.StrVal = 0; ;} break; case 83: -#line 1975 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.Linkage) = GlobalValue::InternalLinkage; ;} +#line 1977 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" + { yyval.Linkage = GlobalValue::InternalLinkage; ;} break; case 84: -#line 1976 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.Linkage) = GlobalValue::LinkOnceLinkage; ;} +#line 1978 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" + { yyval.Linkage = GlobalValue::LinkOnceLinkage; ;} break; case 85: -#line 1977 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.Linkage) = GlobalValue::WeakLinkage; ;} +#line 1979 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" + { yyval.Linkage = GlobalValue::WeakLinkage; ;} break; case 86: -#line 1978 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.Linkage) = GlobalValue::AppendingLinkage; ;} +#line 1980 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" + { yyval.Linkage = GlobalValue::AppendingLinkage; ;} break; case 87: -#line 1979 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.Linkage) = GlobalValue::DLLImportLinkage; ;} +#line 1981 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" + { yyval.Linkage = GlobalValue::DLLImportLinkage; ;} break; case 88: -#line 1980 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.Linkage) = GlobalValue::DLLExportLinkage; ;} +#line 1982 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" + { yyval.Linkage = GlobalValue::DLLExportLinkage; ;} break; case 89: -#line 1981 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.Linkage) = GlobalValue::ExternalWeakLinkage; ;} +#line 1983 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" + { yyval.Linkage = GlobalValue::ExternalWeakLinkage; ;} break; case 90: -#line 1982 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;} +#line 1984 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" + { yyval.Linkage = GlobalValue::ExternalLinkage; ;} break; case 91: -#line 1986 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.UIntVal) = lastCallingConv = OldCallingConv::C; ;} +#line 1988 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" + { yyval.UIntVal = lastCallingConv = OldCallingConv::C; ;} break; case 92: -#line 1987 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.UIntVal) = lastCallingConv = OldCallingConv::C; ;} +#line 1989 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" + { yyval.UIntVal = lastCallingConv = OldCallingConv::C; ;} break; case 93: -#line 1988 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.UIntVal) = lastCallingConv = OldCallingConv::CSRet; ;} +#line 1990 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" + { yyval.UIntVal = lastCallingConv = OldCallingConv::CSRet; ;} break; case 94: -#line 1989 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.UIntVal) = lastCallingConv = OldCallingConv::Fast; ;} +#line 1991 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" + { yyval.UIntVal = lastCallingConv = OldCallingConv::Fast; ;} break; case 95: -#line 1990 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.UIntVal) = lastCallingConv = OldCallingConv::Cold; ;} +#line 1992 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" + { yyval.UIntVal = lastCallingConv = OldCallingConv::Cold; ;} break; case 96: -#line 1991 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.UIntVal) = lastCallingConv = OldCallingConv::X86_StdCall; ;} +#line 1993 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" + { yyval.UIntVal = lastCallingConv = OldCallingConv::X86_StdCall; ;} break; case 97: -#line 1992 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.UIntVal) = lastCallingConv = OldCallingConv::X86_FastCall; ;} +#line 1994 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" + { yyval.UIntVal = lastCallingConv = OldCallingConv::X86_FastCall; ;} break; case 98: -#line 1993 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 1995 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - if ((unsigned)(yyvsp[(2) - (2)].UInt64Val) != (yyvsp[(2) - (2)].UInt64Val)) + if ((unsigned)yyvsp[0].UInt64Val != yyvsp[0].UInt64Val) error("Calling conv too large"); - (yyval.UIntVal) = lastCallingConv = (yyvsp[(2) - (2)].UInt64Val); + yyval.UIntVal = lastCallingConv = yyvsp[0].UInt64Val; ;} break; case 99: -#line 2003 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.UIntVal) = 0; ;} +#line 2005 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" + { yyval.UIntVal = 0; ;} break; case 100: -#line 2004 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2006 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - (yyval.UIntVal) = (yyvsp[(2) - (2)].UInt64Val); - if ((yyval.UIntVal) != 0 && !isPowerOf2_32((yyval.UIntVal))) + yyval.UIntVal = yyvsp[0].UInt64Val; + if (yyval.UIntVal != 0 && !isPowerOf2_32(yyval.UIntVal)) error("Alignment must be a power of two"); ;} break; case 101: -#line 2012 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.UIntVal) = 0; ;} +#line 2014 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" + { yyval.UIntVal = 0; ;} break; case 102: -#line 2013 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2015 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - (yyval.UIntVal) = (yyvsp[(3) - (3)].UInt64Val); - if ((yyval.UIntVal) != 0 && !isPowerOf2_32((yyval.UIntVal))) + yyval.UIntVal = yyvsp[0].UInt64Val; + if (yyval.UIntVal != 0 && !isPowerOf2_32(yyval.UIntVal)) error("Alignment must be a power of two"); ;} break; case 103: -#line 2021 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2023 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.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] == '\\') + for (unsigned i = 0, e = strlen(yyvsp[0].StrVal); i != e; ++i) + if (yyvsp[0].StrVal[i] == '"' || yyvsp[0].StrVal[i] == '\\') error("Invalid character in section name"); - (yyval.StrVal) = (yyvsp[(2) - (2)].StrVal); + yyval.StrVal = yyvsp[0].StrVal; ;} break; case 104: -#line 2030 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.StrVal) = 0; ;} +#line 2032 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" + { yyval.StrVal = 0; ;} break; case 105: -#line 2031 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.StrVal) = (yyvsp[(1) - (1)].StrVal); ;} +#line 2033 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" + { yyval.StrVal = yyvsp[0].StrVal; ;} break; case 106: -#line 2038 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2040 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" {;} break; case 107: -#line 2039 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2041 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" {;} break; case 108: -#line 2043 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2045 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - CurGV->setSection((yyvsp[(1) - (1)].StrVal)); - free((yyvsp[(1) - (1)].StrVal)); + CurGV->setSection(yyvsp[0].StrVal); + free(yyvsp[0].StrVal); ;} break; case 109: -#line 2047 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2049 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - if ((yyvsp[(2) - (2)].UInt64Val) != 0 && !isPowerOf2_32((yyvsp[(2) - (2)].UInt64Val))) + if (yyvsp[0].UInt64Val != 0 && !isPowerOf2_32(yyvsp[0].UInt64Val)) error("Alignment must be a power of two"); - CurGV->setAlignment((yyvsp[(2) - (2)].UInt64Val)); + CurGV->setAlignment(yyvsp[0].UInt64Val); ;} break; case 111: -#line 2064 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2066 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - (yyval.TypeVal).PAT = new PATypeHolder((yyvsp[(1) - (1)].PrimType).T); - (yyval.TypeVal).S.makeSignless(); + yyval.TypeVal.PAT = new PATypeHolder(yyvsp[0].PrimType.T); + yyval.TypeVal.S.makeSignless(); ;} break; case 113: -#line 2072 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2074 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - (yyval.TypeVal).PAT = new PATypeHolder((yyvsp[(1) - (1)].PrimType).T); - (yyval.TypeVal).S.makeSignless(); + yyval.TypeVal.PAT = new PATypeHolder(yyvsp[0].PrimType.T); + yyval.TypeVal.S.makeSignless(); ;} break; case 114: -#line 2079 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2081 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { if (!UpRefs.empty()) - error("Invalid upreference in type: " + (*(yyvsp[(1) - (1)].TypeVal).PAT)->getDescription()); - (yyval.TypeVal) = (yyvsp[(1) - (1)].TypeVal); + error("Invalid upreference in type: " + (*yyvsp[0].TypeVal.PAT)->getDescription()); + yyval.TypeVal = yyvsp[0].TypeVal; ;} break; case 127: -#line 2093 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2095 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - (yyval.TypeVal).PAT = new PATypeHolder((yyvsp[(1) - (1)].PrimType).T); - (yyval.TypeVal).S.copy((yyvsp[(1) - (1)].PrimType).S); + yyval.TypeVal.PAT = new PATypeHolder(yyvsp[0].PrimType.T); + yyval.TypeVal.S.copy(yyvsp[0].PrimType.S); ;} break; case 128: -#line 2097 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2099 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - (yyval.TypeVal).PAT = new PATypeHolder(OpaqueType::get()); - (yyval.TypeVal).S.makeSignless(); + yyval.TypeVal.PAT = new PATypeHolder(OpaqueType::get()); + yyval.TypeVal.S.makeSignless(); ;} break; case 129: -#line 2101 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2103 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { // Named types are also simple types... - (yyval.TypeVal).S.copy(getTypeSign((yyvsp[(1) - (1)].ValIDVal))); - const Type* tmp = getType((yyvsp[(1) - (1)].ValIDVal)); - (yyval.TypeVal).PAT = new PATypeHolder(tmp); + yyval.TypeVal.S.copy(getTypeSign(yyvsp[0].ValIDVal)); + const Type* tmp = getType(yyvsp[0].ValIDVal); + yyval.TypeVal.PAT = new PATypeHolder(tmp); ;} break; case 130: -#line 2106 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2108 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { // Type UpReference - if ((yyvsp[(2) - (2)].UInt64Val) > (uint64_t)~0U) + if (yyvsp[0].UInt64Val > (uint64_t)~0U) 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).PAT = new PATypeHolder(OT); - (yyval.TypeVal).S.makeSignless(); + UpRefs.push_back(UpRefRecord((unsigned)yyvsp[0].UInt64Val, OT)); // Add to vector... + yyval.TypeVal.PAT = new PATypeHolder(OT); + yyval.TypeVal.S.makeSignless(); UR_OUT("New Upreference!\n"); ;} break; case 131: -#line 2115 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2117 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { // Function derived type? - (yyval.TypeVal).S.makeComposite((yyvsp[(1) - (4)].TypeVal).S); + yyval.TypeVal.S.makeComposite(yyvsp[-3].TypeVal.S); std::vector Params; - for (std::list::iterator I = (yyvsp[(3) - (4)].TypeList)->begin(), - E = (yyvsp[(3) - (4)].TypeList)->end(); I != E; ++I) { + for (std::list::iterator I = yyvsp[-1].TypeList->begin(), + E = yyvsp[-1].TypeList->end(); I != E; ++I) { Params.push_back(I->PAT->get()); - (yyval.TypeVal).S.add(I->S); + yyval.TypeVal.S.add(I->S); } bool isVarArg = Params.size() && Params.back() == Type::VoidTy; if (isVarArg) Params.pop_back(); @@ -4588,164 +4250,164 @@ } const FunctionType *FTy = - FunctionType::get((yyvsp[(1) - (4)].TypeVal).PAT->get(), Params, isVarArg, PAL); + FunctionType::get(yyvsp[-3].TypeVal.PAT->get(), Params, isVarArg, PAL); - (yyval.TypeVal).PAT = new PATypeHolder( HandleUpRefs(FTy, (yyval.TypeVal).S) ); - delete (yyvsp[(1) - (4)].TypeVal).PAT; // Delete the return type handle - delete (yyvsp[(3) - (4)].TypeList); // Delete the argument list + yyval.TypeVal.PAT = new PATypeHolder( HandleUpRefs(FTy, yyval.TypeVal.S) ); + delete yyvsp[-3].TypeVal.PAT; // Delete the return type handle + delete yyvsp[-1].TypeList; // Delete the argument list ;} break; case 132: -#line 2142 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2144 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { // Sized array type? - (yyval.TypeVal).S.makeComposite((yyvsp[(4) - (5)].TypeVal).S); - (yyval.TypeVal).PAT = new PATypeHolder(HandleUpRefs(ArrayType::get((yyvsp[(4) - (5)].TypeVal).PAT->get(), - (unsigned)(yyvsp[(2) - (5)].UInt64Val)), (yyval.TypeVal).S)); - delete (yyvsp[(4) - (5)].TypeVal).PAT; + yyval.TypeVal.S.makeComposite(yyvsp[-1].TypeVal.S); + yyval.TypeVal.PAT = new PATypeHolder(HandleUpRefs(ArrayType::get(yyvsp[-1].TypeVal.PAT->get(), + (unsigned)yyvsp[-3].UInt64Val), yyval.TypeVal.S)); + delete yyvsp[-1].TypeVal.PAT; ;} break; case 133: -#line 2148 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2150 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { // Vector type? - const llvm::Type* ElemTy = (yyvsp[(4) - (5)].TypeVal).PAT->get(); - if ((unsigned)(yyvsp[(2) - (5)].UInt64Val) != (yyvsp[(2) - (5)].UInt64Val)) + const llvm::Type* ElemTy = yyvsp[-1].TypeVal.PAT->get(); + if ((unsigned)yyvsp[-3].UInt64Val != yyvsp[-3].UInt64Val) error("Unsigned result not equal to signed result"); if (!(ElemTy->isInteger() || ElemTy->isFloatingPoint())) error("Elements of a VectorType must be integer or floating point"); - if (!isPowerOf2_32((yyvsp[(2) - (5)].UInt64Val))) + if (!isPowerOf2_32(yyvsp[-3].UInt64Val)) error("VectorType length should be a power of 2"); - (yyval.TypeVal).S.makeComposite((yyvsp[(4) - (5)].TypeVal).S); - (yyval.TypeVal).PAT = new PATypeHolder(HandleUpRefs(VectorType::get(ElemTy, - (unsigned)(yyvsp[(2) - (5)].UInt64Val)), (yyval.TypeVal).S)); - delete (yyvsp[(4) - (5)].TypeVal).PAT; + yyval.TypeVal.S.makeComposite(yyvsp[-1].TypeVal.S); + yyval.TypeVal.PAT = new PATypeHolder(HandleUpRefs(VectorType::get(ElemTy, + (unsigned)yyvsp[-3].UInt64Val), yyval.TypeVal.S)); + delete yyvsp[-1].TypeVal.PAT; ;} break; case 134: -#line 2161 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2163 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { // Structure type? std::vector Elements; - (yyval.TypeVal).S.makeComposite(); - for (std::list::iterator I = (yyvsp[(2) - (3)].TypeList)->begin(), - E = (yyvsp[(2) - (3)].TypeList)->end(); I != E; ++I) { + yyval.TypeVal.S.makeComposite(); + for (std::list::iterator I = yyvsp[-1].TypeList->begin(), + E = yyvsp[-1].TypeList->end(); I != E; ++I) { Elements.push_back(I->PAT->get()); - (yyval.TypeVal).S.add(I->S); + yyval.TypeVal.S.add(I->S); } - (yyval.TypeVal).PAT = new PATypeHolder(HandleUpRefs(StructType::get(Elements), (yyval.TypeVal).S)); - delete (yyvsp[(2) - (3)].TypeList); + yyval.TypeVal.PAT = new PATypeHolder(HandleUpRefs(StructType::get(Elements), yyval.TypeVal.S)); + delete yyvsp[-1].TypeList; ;} break; case 135: -#line 2172 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2174 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { // Empty structure type? - (yyval.TypeVal).PAT = new PATypeHolder(StructType::get(std::vector())); - (yyval.TypeVal).S.makeComposite(); + yyval.TypeVal.PAT = new PATypeHolder(StructType::get(std::vector())); + yyval.TypeVal.S.makeComposite(); ;} break; case 136: -#line 2176 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2178 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { // Packed Structure type? - (yyval.TypeVal).S.makeComposite(); + yyval.TypeVal.S.makeComposite(); 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->PAT->get()); - (yyval.TypeVal).S.add(I->S); + yyval.TypeVal.S.add(I->S); delete I->PAT; } - (yyval.TypeVal).PAT = new PATypeHolder(HandleUpRefs(StructType::get(Elements, true), - (yyval.TypeVal).S)); - delete (yyvsp[(3) - (5)].TypeList); + yyval.TypeVal.PAT = new PATypeHolder(HandleUpRefs(StructType::get(Elements, true), + yyval.TypeVal.S)); + delete yyvsp[-2].TypeList; ;} break; case 137: -#line 2189 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2191 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { // Empty packed structure type? - (yyval.TypeVal).PAT = new PATypeHolder(StructType::get(std::vector(),true)); - (yyval.TypeVal).S.makeComposite(); + yyval.TypeVal.PAT = new PATypeHolder(StructType::get(std::vector(),true)); + yyval.TypeVal.S.makeComposite(); ;} break; case 138: -#line 2193 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2195 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { // Pointer type? - if ((yyvsp[(1) - (2)].TypeVal).PAT->get() == Type::LabelTy) + if (yyvsp[-1].TypeVal.PAT->get() == Type::LabelTy) error("Cannot form a pointer to a basic block"); - (yyval.TypeVal).S.makeComposite((yyvsp[(1) - (2)].TypeVal).S); - (yyval.TypeVal).PAT = new PATypeHolder(HandleUpRefs(PointerType::get((yyvsp[(1) - (2)].TypeVal).PAT->get()), - (yyval.TypeVal).S)); - delete (yyvsp[(1) - (2)].TypeVal).PAT; + yyval.TypeVal.S.makeComposite(yyvsp[-1].TypeVal.S); + yyval.TypeVal.PAT = new PATypeHolder(HandleUpRefs(PointerType::get(yyvsp[-1].TypeVal.PAT->get()), + yyval.TypeVal.S)); + delete yyvsp[-1].TypeVal.PAT; ;} break; case 139: -#line 2207 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2209 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - (yyval.TypeList) = new std::list(); - (yyval.TypeList)->push_back((yyvsp[(1) - (1)].TypeVal)); + yyval.TypeList = new std::list(); + yyval.TypeList->push_back(yyvsp[0].TypeVal); ;} break; case 140: -#line 2211 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2213 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - ((yyval.TypeList)=(yyvsp[(1) - (3)].TypeList))->push_back((yyvsp[(3) - (3)].TypeVal)); + (yyval.TypeList=yyvsp[-2].TypeList)->push_back(yyvsp[0].TypeVal); ;} break; case 142: -#line 2219 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2221 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { PATypeInfo VoidTI; VoidTI.PAT = new PATypeHolder(Type::VoidTy); VoidTI.S.makeSignless(); - ((yyval.TypeList)=(yyvsp[(1) - (3)].TypeList))->push_back(VoidTI); + (yyval.TypeList=yyvsp[-2].TypeList)->push_back(VoidTI); ;} break; case 143: -#line 2225 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2227 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - (yyval.TypeList) = new std::list(); + yyval.TypeList = new std::list(); PATypeInfo VoidTI; VoidTI.PAT = new PATypeHolder(Type::VoidTy); VoidTI.S.makeSignless(); - (yyval.TypeList)->push_back(VoidTI); + yyval.TypeList->push_back(VoidTI); ;} break; case 144: -#line 2232 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2234 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - (yyval.TypeList) = new std::list(); + yyval.TypeList = new std::list(); ;} break; case 145: -#line 2244 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2246 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { // Nonempty unsized arr - const ArrayType *ATy = dyn_cast((yyvsp[(1) - (4)].TypeVal).PAT->get()); + const ArrayType *ATy = dyn_cast(yyvsp[-3].TypeVal.PAT->get()); if (ATy == 0) error("Cannot make array constant with type: '" + - (yyvsp[(1) - (4)].TypeVal).PAT->get()->getDescription() + "'"); + yyvsp[-3].TypeVal.PAT->get()->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()) 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! std::vector Elems; - for (unsigned i = 0; i < (yyvsp[(3) - (4)].ConstVector)->size(); i++) { - Constant *C = (*(yyvsp[(3) - (4)].ConstVector))[i].C; + for (unsigned i = 0; i < yyvsp[-1].ConstVector->size(); i++) { + Constant *C = (*yyvsp[-1].ConstVector)[i].C; const Type* ValTy = C->getType(); if (ETy != ValTy) error("Element #" + utostr(i) + " is not of type '" + @@ -4753,75 +4415,75 @@ ValTy->getDescription() + "'"); Elems.push_back(C); } - (yyval.ConstVal).C = ConstantArray::get(ATy, Elems); - (yyval.ConstVal).S.copy((yyvsp[(1) - (4)].TypeVal).S); - delete (yyvsp[(1) - (4)].TypeVal).PAT; - delete (yyvsp[(3) - (4)].ConstVector); + yyval.ConstVal.C = ConstantArray::get(ATy, Elems); + yyval.ConstVal.S.copy(yyvsp[-3].TypeVal.S); + delete yyvsp[-3].TypeVal.PAT; + delete yyvsp[-1].ConstVector; ;} break; case 146: -#line 2274 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2276 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - const ArrayType *ATy = dyn_cast((yyvsp[(1) - (3)].TypeVal).PAT->get()); + const ArrayType *ATy = dyn_cast(yyvsp[-2].TypeVal.PAT->get()); if (ATy == 0) error("Cannot make array constant with type: '" + - (yyvsp[(1) - (3)].TypeVal).PAT->get()->getDescription() + "'"); + yyvsp[-2].TypeVal.PAT->get()->getDescription() + "'"); int NumElements = ATy->getNumElements(); if (NumElements != -1 && NumElements != 0) error("Type mismatch: constant sized array initialized with 0" " arguments, but has size of " + itostr(NumElements) +""); - (yyval.ConstVal).C = ConstantArray::get(ATy, std::vector()); - (yyval.ConstVal).S.copy((yyvsp[(1) - (3)].TypeVal).S); - delete (yyvsp[(1) - (3)].TypeVal).PAT; + yyval.ConstVal.C = ConstantArray::get(ATy, std::vector()); + yyval.ConstVal.S.copy(yyvsp[-2].TypeVal.S); + delete yyvsp[-2].TypeVal.PAT; ;} break; case 147: -#line 2287 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2289 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - const ArrayType *ATy = dyn_cast((yyvsp[(1) - (3)].TypeVal).PAT->get()); + const ArrayType *ATy = dyn_cast(yyvsp[-2].TypeVal.PAT->get()); if (ATy == 0) error("Cannot make array constant with type: '" + - (yyvsp[(1) - (3)].TypeVal).PAT->get()->getDescription() + "'"); + yyvsp[-2].TypeVal.PAT->get()->getDescription() + "'"); int NumElements = ATy->getNumElements(); const Type *ETy = dyn_cast(ATy->getElementType()); if (!ETy || cast(ETy)->getBitWidth() != 8) error("String arrays require type i8, not '" + ETy->getDescription() + "'"); - 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)) error("Can't build string constant of size " + - itostr((int)(EndStr-(yyvsp[(3) - (3)].StrVal))) + " when array has size " + + itostr((int)(EndStr-yyvsp[0].StrVal)) + " when array has size " + itostr(NumElements) + ""); std::vector Vals; - for (char *C = (char *)(yyvsp[(3) - (3)].StrVal); C != (char *)EndStr; ++C) + for (char *C = (char *)yyvsp[0].StrVal; C != (char *)EndStr; ++C) Vals.push_back(ConstantInt::get(ETy, *C)); - free((yyvsp[(3) - (3)].StrVal)); - (yyval.ConstVal).C = ConstantArray::get(ATy, Vals); - (yyval.ConstVal).S.copy((yyvsp[(1) - (3)].TypeVal).S); - delete (yyvsp[(1) - (3)].TypeVal).PAT; + free(yyvsp[0].StrVal); + yyval.ConstVal.C = ConstantArray::get(ATy, Vals); + yyval.ConstVal.S.copy(yyvsp[-2].TypeVal.S); + delete yyvsp[-2].TypeVal.PAT; ;} break; case 148: -#line 2310 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2312 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { // Nonempty unsized arr - const VectorType *PTy = dyn_cast((yyvsp[(1) - (4)].TypeVal).PAT->get()); + const VectorType *PTy = dyn_cast(yyvsp[-3].TypeVal.PAT->get()); if (PTy == 0) error("Cannot make packed constant with type: '" + - (yyvsp[(1) - (4)].TypeVal).PAT->get()->getDescription() + "'"); + yyvsp[-3].TypeVal.PAT->get()->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()) 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! std::vector Elems; - for (unsigned i = 0; i < (yyvsp[(3) - (4)].ConstVector)->size(); i++) { - Constant *C = (*(yyvsp[(3) - (4)].ConstVector))[i].C; + for (unsigned i = 0; i < yyvsp[-1].ConstVector->size(); i++) { + Constant *C = (*yyvsp[-1].ConstVector)[i].C; const Type* ValTy = C->getType(); if (ETy != ValTy) error("Element #" + utostr(i) + " is not of type '" + @@ -4829,124 +4491,124 @@ ValTy->getDescription() + "'"); Elems.push_back(C); } - (yyval.ConstVal).C = ConstantVector::get(PTy, Elems); - (yyval.ConstVal).S.copy((yyvsp[(1) - (4)].TypeVal).S); - delete (yyvsp[(1) - (4)].TypeVal).PAT; - delete (yyvsp[(3) - (4)].ConstVector); + yyval.ConstVal.C = ConstantVector::get(PTy, Elems); + yyval.ConstVal.S.copy(yyvsp[-3].TypeVal.S); + delete yyvsp[-3].TypeVal.PAT; + delete yyvsp[-1].ConstVector; ;} break; case 149: -#line 2338 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2340 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - const StructType *STy = dyn_cast((yyvsp[(1) - (4)].TypeVal).PAT->get()); + const StructType *STy = dyn_cast(yyvsp[-3].TypeVal.PAT->get()); if (STy == 0) error("Cannot make struct constant with type: '" + - (yyvsp[(1) - (4)].TypeVal).PAT->get()->getDescription() + "'"); - if ((yyvsp[(3) - (4)].ConstVector)->size() != STy->getNumContainedTypes()) + yyvsp[-3].TypeVal.PAT->get()->getDescription() + "'"); + if (yyvsp[-1].ConstVector->size() != STy->getNumContainedTypes()) error("Illegal number of initializers for structure type"); // Check to ensure that constants are compatible with the type initializer! std::vector Fields; - for (unsigned i = 0, e = (yyvsp[(3) - (4)].ConstVector)->size(); i != e; ++i) { - Constant *C = (*(yyvsp[(3) - (4)].ConstVector))[i].C; + for (unsigned i = 0, e = yyvsp[-1].ConstVector->size(); i != e; ++i) { + Constant *C = (*yyvsp[-1].ConstVector)[i].C; if (C->getType() != STy->getElementType(i)) error("Expected type '" + STy->getElementType(i)->getDescription() + "' for element #" + utostr(i) + " of structure initializer"); Fields.push_back(C); } - (yyval.ConstVal).C = ConstantStruct::get(STy, Fields); - (yyval.ConstVal).S.copy((yyvsp[(1) - (4)].TypeVal).S); - delete (yyvsp[(1) - (4)].TypeVal).PAT; - delete (yyvsp[(3) - (4)].ConstVector); + yyval.ConstVal.C = ConstantStruct::get(STy, Fields); + yyval.ConstVal.S.copy(yyvsp[-3].TypeVal.S); + delete yyvsp[-3].TypeVal.PAT; + delete yyvsp[-1].ConstVector; ;} break; case 150: -#line 2360 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2362 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - const StructType *STy = dyn_cast((yyvsp[(1) - (3)].TypeVal).PAT->get()); + const StructType *STy = dyn_cast(yyvsp[-2].TypeVal.PAT->get()); if (STy == 0) error("Cannot make struct constant with type: '" + - (yyvsp[(1) - (3)].TypeVal).PAT->get()->getDescription() + "'"); + yyvsp[-2].TypeVal.PAT->get()->getDescription() + "'"); if (STy->getNumContainedTypes() != 0) error("Illegal number of initializers for structure type"); - (yyval.ConstVal).C = ConstantStruct::get(STy, std::vector()); - (yyval.ConstVal).S.copy((yyvsp[(1) - (3)].TypeVal).S); - delete (yyvsp[(1) - (3)].TypeVal).PAT; + yyval.ConstVal.C = ConstantStruct::get(STy, std::vector()); + yyval.ConstVal.S.copy(yyvsp[-2].TypeVal.S); + delete yyvsp[-2].TypeVal.PAT; ;} break; case 151: -#line 2371 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2373 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - const StructType *STy = dyn_cast((yyvsp[(1) - (6)].TypeVal).PAT->get()); + const StructType *STy = dyn_cast(yyvsp[-5].TypeVal.PAT->get()); if (STy == 0) error("Cannot make packed struct constant with type: '" + - (yyvsp[(1) - (6)].TypeVal).PAT->get()->getDescription() + "'"); - if ((yyvsp[(4) - (6)].ConstVector)->size() != STy->getNumContainedTypes()) + yyvsp[-5].TypeVal.PAT->get()->getDescription() + "'"); + if (yyvsp[-2].ConstVector->size() != STy->getNumContainedTypes()) error("Illegal number of initializers for packed structure type"); // Check to ensure that constants are compatible with the type initializer! std::vector Fields; - for (unsigned i = 0, e = (yyvsp[(4) - (6)].ConstVector)->size(); i != e; ++i) { - Constant *C = (*(yyvsp[(4) - (6)].ConstVector))[i].C; + for (unsigned i = 0, e = yyvsp[-2].ConstVector->size(); i != e; ++i) { + Constant *C = (*yyvsp[-2].ConstVector)[i].C; if (C->getType() != STy->getElementType(i)) error("Expected type '" + STy->getElementType(i)->getDescription() + "' for element #" + utostr(i) + " of packed struct initializer"); Fields.push_back(C); } - (yyval.ConstVal).C = ConstantStruct::get(STy, Fields); - (yyval.ConstVal).S.copy((yyvsp[(1) - (6)].TypeVal).S); - delete (yyvsp[(1) - (6)].TypeVal).PAT; - delete (yyvsp[(4) - (6)].ConstVector); + yyval.ConstVal.C = ConstantStruct::get(STy, Fields); + yyval.ConstVal.S.copy(yyvsp[-5].TypeVal.S); + delete yyvsp[-5].TypeVal.PAT; + delete yyvsp[-2].ConstVector; ;} break; case 152: -#line 2393 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2395 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - const StructType *STy = dyn_cast((yyvsp[(1) - (5)].TypeVal).PAT->get()); + const StructType *STy = dyn_cast(yyvsp[-4].TypeVal.PAT->get()); if (STy == 0) error("Cannot make packed struct constant with type: '" + - (yyvsp[(1) - (5)].TypeVal).PAT->get()->getDescription() + "'"); + yyvsp[-4].TypeVal.PAT->get()->getDescription() + "'"); if (STy->getNumContainedTypes() != 0) error("Illegal number of initializers for packed structure type"); - (yyval.ConstVal).C = ConstantStruct::get(STy, std::vector()); - (yyval.ConstVal).S.copy((yyvsp[(1) - (5)].TypeVal).S); - delete (yyvsp[(1) - (5)].TypeVal).PAT; + yyval.ConstVal.C = ConstantStruct::get(STy, std::vector()); + yyval.ConstVal.S.copy(yyvsp[-4].TypeVal.S); + delete yyvsp[-4].TypeVal.PAT; ;} break; case 153: -#line 2404 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2406 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - const PointerType *PTy = dyn_cast((yyvsp[(1) - (2)].TypeVal).PAT->get()); + const PointerType *PTy = dyn_cast(yyvsp[-1].TypeVal.PAT->get()); if (PTy == 0) error("Cannot make null pointer constant with type: '" + - (yyvsp[(1) - (2)].TypeVal).PAT->get()->getDescription() + "'"); - (yyval.ConstVal).C = ConstantPointerNull::get(PTy); - (yyval.ConstVal).S.copy((yyvsp[(1) - (2)].TypeVal).S); - delete (yyvsp[(1) - (2)].TypeVal).PAT; + yyvsp[-1].TypeVal.PAT->get()->getDescription() + "'"); + yyval.ConstVal.C = ConstantPointerNull::get(PTy); + yyval.ConstVal.S.copy(yyvsp[-1].TypeVal.S); + delete yyvsp[-1].TypeVal.PAT; ;} break; case 154: -#line 2413 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2415 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - (yyval.ConstVal).C = UndefValue::get((yyvsp[(1) - (2)].TypeVal).PAT->get()); - (yyval.ConstVal).S.copy((yyvsp[(1) - (2)].TypeVal).S); - delete (yyvsp[(1) - (2)].TypeVal).PAT; + yyval.ConstVal.C = UndefValue::get(yyvsp[-1].TypeVal.PAT->get()); + yyval.ConstVal.S.copy(yyvsp[-1].TypeVal.S); + delete yyvsp[-1].TypeVal.PAT; ;} break; case 155: -#line 2418 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2420 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - const PointerType *Ty = dyn_cast((yyvsp[(1) - (2)].TypeVal).PAT->get()); + const PointerType *Ty = dyn_cast(yyvsp[-1].TypeVal.PAT->get()); if (Ty == 0) error("Global const reference must be a pointer type, not" + - (yyvsp[(1) - (2)].TypeVal).PAT->get()->getDescription()); + yyvsp[-1].TypeVal.PAT->get()->getDescription()); // ConstExprs can exist in the body of a function, thus creating // GlobalValues whenever they refer to a variable. Because we are in @@ -4957,8 +4619,8 @@ // Function *SavedCurFn = CurFun.CurrentFunction; CurFun.CurrentFunction = 0; - (yyvsp[(2) - (2)].ValIDVal).S.copy((yyvsp[(1) - (2)].TypeVal).S); - Value *V = getExistingValue(Ty, (yyvsp[(2) - (2)].ValIDVal)); + yyvsp[0].ValIDVal.S.copy(yyvsp[-1].TypeVal.S); + Value *V = getExistingValue(Ty, yyvsp[0].ValIDVal); CurFun.CurrentFunction = SavedCurFn; // If this is an initializer for a constant pointer, which is referencing a @@ -4971,14 +4633,14 @@ // 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::NameVal) Name = (yyvsp[(2) - (2)].ValIDVal).Name; + if (yyvsp[0].ValIDVal.Type == ValID::NameVal) Name = yyvsp[0].ValIDVal.Name; // Create the forward referenced global. GlobalValue *GV; @@ -4993,151 +4655,151 @@ } // 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).C = cast(V); - (yyval.ConstVal).S.copy((yyvsp[(1) - (2)].TypeVal).S); - delete (yyvsp[(1) - (2)].TypeVal).PAT; // Free the type handle + yyval.ConstVal.C = cast(V); + yyval.ConstVal.S.copy(yyvsp[-1].TypeVal.S); + delete yyvsp[-1].TypeVal.PAT; // Free the type handle ;} break; case 156: -#line 2477 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2479 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - if ((yyvsp[(1) - (2)].TypeVal).PAT->get() != (yyvsp[(2) - (2)].ConstVal).C->getType()) + if (yyvsp[-1].TypeVal.PAT->get() != yyvsp[0].ConstVal.C->getType()) error("Mismatched types for constant expression"); - (yyval.ConstVal) = (yyvsp[(2) - (2)].ConstVal); - (yyval.ConstVal).S.copy((yyvsp[(1) - (2)].TypeVal).S); - delete (yyvsp[(1) - (2)].TypeVal).PAT; + yyval.ConstVal = yyvsp[0].ConstVal; + yyval.ConstVal.S.copy(yyvsp[-1].TypeVal.S); + delete yyvsp[-1].TypeVal.PAT; ;} break; case 157: -#line 2484 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2486 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - const Type *Ty = (yyvsp[(1) - (2)].TypeVal).PAT->get(); + const Type *Ty = yyvsp[-1].TypeVal.PAT->get(); if (isa(Ty) || Ty == Type::LabelTy || isa(Ty)) error("Cannot create a null initialized value of this type"); - (yyval.ConstVal).C = Constant::getNullValue(Ty); - (yyval.ConstVal).S.copy((yyvsp[(1) - (2)].TypeVal).S); - delete (yyvsp[(1) - (2)].TypeVal).PAT; + yyval.ConstVal.C = Constant::getNullValue(Ty); + yyval.ConstVal.S.copy(yyvsp[-1].TypeVal.S); + delete yyvsp[-1].TypeVal.PAT; ;} break; case 158: -#line 2492 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2494 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { // integral constants - const Type *Ty = (yyvsp[(1) - (2)].PrimType).T; - if (!ConstantInt::isValueValidForType(Ty, (yyvsp[(2) - (2)].SInt64Val))) + const Type *Ty = yyvsp[-1].PrimType.T; + if (!ConstantInt::isValueValidForType(Ty, yyvsp[0].SInt64Val)) error("Constant value doesn't fit in type"); - (yyval.ConstVal).C = ConstantInt::get(Ty, (yyvsp[(2) - (2)].SInt64Val)); - (yyval.ConstVal).S.makeSigned(); + yyval.ConstVal.C = ConstantInt::get(Ty, yyvsp[0].SInt64Val); + yyval.ConstVal.S.makeSigned(); ;} break; case 159: -#line 2499 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2501 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { // integral constants - const Type *Ty = (yyvsp[(1) - (2)].PrimType).T; - if (!ConstantInt::isValueValidForType(Ty, (yyvsp[(2) - (2)].UInt64Val))) + const Type *Ty = yyvsp[-1].PrimType.T; + if (!ConstantInt::isValueValidForType(Ty, yyvsp[0].UInt64Val)) error("Constant value doesn't fit in type"); - (yyval.ConstVal).C = ConstantInt::get(Ty, (yyvsp[(2) - (2)].UInt64Val)); - (yyval.ConstVal).S.makeUnsigned(); + yyval.ConstVal.C = ConstantInt::get(Ty, yyvsp[0].UInt64Val); + yyval.ConstVal.S.makeUnsigned(); ;} break; case 160: -#line 2506 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2508 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { // Boolean constants - (yyval.ConstVal).C = ConstantInt::get(Type::Int1Ty, true); - (yyval.ConstVal).S.makeUnsigned(); + yyval.ConstVal.C = ConstantInt::get(Type::Int1Ty, true); + yyval.ConstVal.S.makeUnsigned(); ;} break; case 161: -#line 2510 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2512 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { // Boolean constants - (yyval.ConstVal).C = ConstantInt::get(Type::Int1Ty, false); - (yyval.ConstVal).S.makeUnsigned(); + yyval.ConstVal.C = ConstantInt::get(Type::Int1Ty, false); + yyval.ConstVal.S.makeUnsigned(); ;} break; case 162: -#line 2514 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2516 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { // Float & Double constants - if (!ConstantFP::isValueValidForType((yyvsp[(1) - (2)].PrimType).T, (yyvsp[(2) - (2)].FPVal))) + if (!ConstantFP::isValueValidForType(yyvsp[-1].PrimType.T, yyvsp[0].FPVal)) error("Floating point constant invalid for type"); - (yyval.ConstVal).C = ConstantFP::get((yyvsp[(1) - (2)].PrimType).T, (yyvsp[(2) - (2)].FPVal)); - (yyval.ConstVal).S.makeSignless(); + yyval.ConstVal.C = ConstantFP::get(yyvsp[-1].PrimType.T, yyvsp[0].FPVal); + yyval.ConstVal.S.makeSignless(); ;} break; case 163: -#line 2523 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2525 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - const Type* SrcTy = (yyvsp[(3) - (6)].ConstVal).C->getType(); - const Type* DstTy = (yyvsp[(5) - (6)].TypeVal).PAT->get(); - Signedness SrcSign((yyvsp[(3) - (6)].ConstVal).S); - Signedness DstSign((yyvsp[(5) - (6)].TypeVal).S); + const Type* SrcTy = yyvsp[-3].ConstVal.C->getType(); + const Type* DstTy = yyvsp[-1].TypeVal.PAT->get(); + Signedness SrcSign(yyvsp[-3].ConstVal.S); + Signedness DstSign(yyvsp[-1].TypeVal.S); if (!SrcTy->isFirstClassType()) error("cast constant expression from a non-primitive type: '" + SrcTy->getDescription() + "'"); if (!DstTy->isFirstClassType()) error("cast constant expression to a non-primitive type: '" + DstTy->getDescription() + "'"); - (yyval.ConstVal).C = cast(getCast((yyvsp[(1) - (6)].CastOpVal), (yyvsp[(3) - (6)].ConstVal).C, SrcSign, DstTy, DstSign)); - (yyval.ConstVal).S.copy(DstSign); - delete (yyvsp[(5) - (6)].TypeVal).PAT; + yyval.ConstVal.C = cast(getCast(yyvsp[-5].CastOpVal, yyvsp[-3].ConstVal.C, SrcSign, DstTy, DstSign)); + yyval.ConstVal.S.copy(DstSign); + delete yyvsp[-1].TypeVal.PAT; ;} break; case 164: -#line 2538 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2540 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - const Type *Ty = (yyvsp[(3) - (5)].ConstVal).C->getType(); + const Type *Ty = yyvsp[-2].ConstVal.C->getType(); if (!isa(Ty)) error("GetElementPtr requires a pointer operand"); std::vector CIndices; - upgradeGEPCEIndices((yyvsp[(3) - (5)].ConstVal).C->getType(), (yyvsp[(4) - (5)].ValueList), CIndices); + upgradeGEPCEIndices(yyvsp[-2].ConstVal.C->getType(), yyvsp[-1].ValueList, CIndices); - delete (yyvsp[(4) - (5)].ValueList); - (yyval.ConstVal).C = ConstantExpr::getGetElementPtr((yyvsp[(3) - (5)].ConstVal).C, &CIndices[0], CIndices.size()); - (yyval.ConstVal).S.copy(getElementSign((yyvsp[(3) - (5)].ConstVal), CIndices)); + delete yyvsp[-1].ValueList; + yyval.ConstVal.C = ConstantExpr::getGetElementPtr(yyvsp[-2].ConstVal.C, &CIndices[0], CIndices.size()); + yyval.ConstVal.S.copy(getElementSign(yyvsp[-2].ConstVal, CIndices)); ;} break; case 165: -#line 2550 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2552 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - if (!(yyvsp[(3) - (8)].ConstVal).C->getType()->isInteger() || - cast((yyvsp[(3) - (8)].ConstVal).C->getType())->getBitWidth() != 1) + if (!yyvsp[-5].ConstVal.C->getType()->isInteger() || + cast(yyvsp[-5].ConstVal.C->getType())->getBitWidth() != 1) error("Select condition must be bool type"); - if ((yyvsp[(5) - (8)].ConstVal).C->getType() != (yyvsp[(7) - (8)].ConstVal).C->getType()) + if (yyvsp[-3].ConstVal.C->getType() != yyvsp[-1].ConstVal.C->getType()) error("Select operand types must match"); - (yyval.ConstVal).C = ConstantExpr::getSelect((yyvsp[(3) - (8)].ConstVal).C, (yyvsp[(5) - (8)].ConstVal).C, (yyvsp[(7) - (8)].ConstVal).C); - (yyval.ConstVal).S.copy((yyvsp[(5) - (8)].ConstVal).S); + yyval.ConstVal.C = ConstantExpr::getSelect(yyvsp[-5].ConstVal.C, yyvsp[-3].ConstVal.C, yyvsp[-1].ConstVal.C); + yyval.ConstVal.S.copy(yyvsp[-3].ConstVal.S); ;} break; case 166: -#line 2559 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2561 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - const Type *Ty = (yyvsp[(3) - (6)].ConstVal).C->getType(); - if (Ty != (yyvsp[(5) - (6)].ConstVal).C->getType()) + const Type *Ty = yyvsp[-3].ConstVal.C->getType(); + if (Ty != yyvsp[-1].ConstVal.C->getType()) error("Binary operator types must match"); // First, make sure we're dealing with the right opcode by upgrading from // obsolete versions. - Instruction::BinaryOps Opcode = getBinaryOp((yyvsp[(1) - (6)].BinaryOpVal), Ty, (yyvsp[(3) - (6)].ConstVal).S); + Instruction::BinaryOps Opcode = getBinaryOp(yyvsp[-5].BinaryOpVal, Ty, yyvsp[-3].ConstVal.S); // HACK: llvm 1.3 and earlier used to emit invalid pointer constant exprs. // To retain backward compatibility with these early compilers, we emit a // cast to the appropriate integer type automatically if we are in the // broken case. See PR424 for more information. if (!isa(Ty)) { - (yyval.ConstVal).C = ConstantExpr::get(Opcode, (yyvsp[(3) - (6)].ConstVal).C, (yyvsp[(5) - (6)].ConstVal).C); + yyval.ConstVal.C = ConstantExpr::get(Opcode, yyvsp[-3].ConstVal.C, yyvsp[-1].ConstVal.C); } else { const Type *IntPtrTy = 0; switch (CurModule.CurrentModule->getPointerSize()) { @@ -5145,165 +4807,165 @@ case Module::Pointer64: IntPtrTy = Type::Int64Ty; break; default: error("invalid pointer binary constant expr"); } - (yyval.ConstVal).C = ConstantExpr::get(Opcode, - ConstantExpr::getCast(Instruction::PtrToInt, (yyvsp[(3) - (6)].ConstVal).C, IntPtrTy), - ConstantExpr::getCast(Instruction::PtrToInt, (yyvsp[(5) - (6)].ConstVal).C, IntPtrTy)); - (yyval.ConstVal).C = ConstantExpr::getCast(Instruction::IntToPtr, (yyval.ConstVal).C, Ty); + yyval.ConstVal.C = ConstantExpr::get(Opcode, + ConstantExpr::getCast(Instruction::PtrToInt, yyvsp[-3].ConstVal.C, IntPtrTy), + ConstantExpr::getCast(Instruction::PtrToInt, yyvsp[-1].ConstVal.C, IntPtrTy)); + yyval.ConstVal.C = ConstantExpr::getCast(Instruction::IntToPtr, yyval.ConstVal.C, Ty); } - (yyval.ConstVal).S.copy((yyvsp[(3) - (6)].ConstVal).S); + yyval.ConstVal.S.copy(yyvsp[-3].ConstVal.S); ;} break; case 167: -#line 2587 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2589 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - const Type* Ty = (yyvsp[(3) - (6)].ConstVal).C->getType(); - if (Ty != (yyvsp[(5) - (6)].ConstVal).C->getType()) + const Type* Ty = yyvsp[-3].ConstVal.C->getType(); + if (Ty != yyvsp[-1].ConstVal.C->getType()) error("Logical operator types must match"); if (!Ty->isInteger()) { if (!isa(Ty) || !cast(Ty)->getElementType()->isInteger()) error("Logical operator requires integer operands"); } - Instruction::BinaryOps Opcode = getBinaryOp((yyvsp[(1) - (6)].BinaryOpVal), Ty, (yyvsp[(3) - (6)].ConstVal).S); - (yyval.ConstVal).C = ConstantExpr::get(Opcode, (yyvsp[(3) - (6)].ConstVal).C, (yyvsp[(5) - (6)].ConstVal).C); - (yyval.ConstVal).S.copy((yyvsp[(3) - (6)].ConstVal).S); + Instruction::BinaryOps Opcode = getBinaryOp(yyvsp[-5].BinaryOpVal, Ty, yyvsp[-3].ConstVal.S); + yyval.ConstVal.C = ConstantExpr::get(Opcode, yyvsp[-3].ConstVal.C, yyvsp[-1].ConstVal.C); + yyval.ConstVal.S.copy(yyvsp[-3].ConstVal.S); ;} break; case 168: -#line 2600 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2602 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - const Type* Ty = (yyvsp[(3) - (6)].ConstVal).C->getType(); - if (Ty != (yyvsp[(5) - (6)].ConstVal).C->getType()) + const Type* Ty = yyvsp[-3].ConstVal.C->getType(); + if (Ty != yyvsp[-1].ConstVal.C->getType()) error("setcc operand types must match"); unsigned short pred; - Instruction::OtherOps Opcode = getCompareOp((yyvsp[(1) - (6)].BinaryOpVal), pred, Ty, (yyvsp[(3) - (6)].ConstVal).S); - (yyval.ConstVal).C = ConstantExpr::getCompare(Opcode, (yyvsp[(3) - (6)].ConstVal).C, (yyvsp[(5) - (6)].ConstVal).C); - (yyval.ConstVal).S.makeUnsigned(); + Instruction::OtherOps Opcode = getCompareOp(yyvsp[-5].BinaryOpVal, pred, Ty, yyvsp[-3].ConstVal.S); + yyval.ConstVal.C = ConstantExpr::getCompare(Opcode, yyvsp[-3].ConstVal.C, yyvsp[-1].ConstVal.C); + yyval.ConstVal.S.makeUnsigned(); ;} break; case 169: -#line 2609 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2611 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - if ((yyvsp[(4) - (7)].ConstVal).C->getType() != (yyvsp[(6) - (7)].ConstVal).C->getType()) + if (yyvsp[-3].ConstVal.C->getType() != yyvsp[-1].ConstVal.C->getType()) error("icmp operand types must match"); - (yyval.ConstVal).C = ConstantExpr::getCompare((yyvsp[(2) - (7)].IPred), (yyvsp[(4) - (7)].ConstVal).C, (yyvsp[(6) - (7)].ConstVal).C); - (yyval.ConstVal).S.makeUnsigned(); + yyval.ConstVal.C = ConstantExpr::getCompare(yyvsp[-5].IPred, yyvsp[-3].ConstVal.C, yyvsp[-1].ConstVal.C); + yyval.ConstVal.S.makeUnsigned(); ;} break; case 170: -#line 2615 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2617 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - if ((yyvsp[(4) - (7)].ConstVal).C->getType() != (yyvsp[(6) - (7)].ConstVal).C->getType()) + if (yyvsp[-3].ConstVal.C->getType() != yyvsp[-1].ConstVal.C->getType()) error("fcmp operand types must match"); - (yyval.ConstVal).C = ConstantExpr::getCompare((yyvsp[(2) - (7)].FPred), (yyvsp[(4) - (7)].ConstVal).C, (yyvsp[(6) - (7)].ConstVal).C); - (yyval.ConstVal).S.makeUnsigned(); + yyval.ConstVal.C = ConstantExpr::getCompare(yyvsp[-5].FPred, yyvsp[-3].ConstVal.C, yyvsp[-1].ConstVal.C); + yyval.ConstVal.S.makeUnsigned(); ;} break; case 171: -#line 2621 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2623 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - if (!(yyvsp[(5) - (6)].ConstVal).C->getType()->isInteger() || - cast((yyvsp[(5) - (6)].ConstVal).C->getType())->getBitWidth() != 8) + if (!yyvsp[-1].ConstVal.C->getType()->isInteger() || + cast(yyvsp[-1].ConstVal.C->getType())->getBitWidth() != 8) error("Shift count for shift constant must be unsigned byte"); - const Type* Ty = (yyvsp[(3) - (6)].ConstVal).C->getType(); - if (!(yyvsp[(3) - (6)].ConstVal).C->getType()->isInteger()) + const Type* Ty = yyvsp[-3].ConstVal.C->getType(); + if (!yyvsp[-3].ConstVal.C->getType()->isInteger()) error("Shift constant expression requires integer operand"); - Constant *ShiftAmt = ConstantExpr::getZExt((yyvsp[(5) - (6)].ConstVal).C, Ty); - (yyval.ConstVal).C = ConstantExpr::get(getBinaryOp((yyvsp[(1) - (6)].BinaryOpVal), Ty, (yyvsp[(3) - (6)].ConstVal).S), (yyvsp[(3) - (6)].ConstVal).C, ShiftAmt); - (yyval.ConstVal).S.copy((yyvsp[(3) - (6)].ConstVal).S); + Constant *ShiftAmt = ConstantExpr::getZExt(yyvsp[-1].ConstVal.C, Ty); + yyval.ConstVal.C = ConstantExpr::get(getBinaryOp(yyvsp[-5].BinaryOpVal, Ty, yyvsp[-3].ConstVal.S), yyvsp[-3].ConstVal.C, ShiftAmt); + yyval.ConstVal.S.copy(yyvsp[-3].ConstVal.S); ;} break; case 172: -#line 2632 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2634 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - if (!ExtractElementInst::isValidOperands((yyvsp[(3) - (6)].ConstVal).C, (yyvsp[(5) - (6)].ConstVal).C)) + if (!ExtractElementInst::isValidOperands(yyvsp[-3].ConstVal.C, yyvsp[-1].ConstVal.C)) error("Invalid extractelement operands"); - (yyval.ConstVal).C = ConstantExpr::getExtractElement((yyvsp[(3) - (6)].ConstVal).C, (yyvsp[(5) - (6)].ConstVal).C); - (yyval.ConstVal).S.copy((yyvsp[(3) - (6)].ConstVal).S.get(0)); + yyval.ConstVal.C = ConstantExpr::getExtractElement(yyvsp[-3].ConstVal.C, yyvsp[-1].ConstVal.C); + yyval.ConstVal.S.copy(yyvsp[-3].ConstVal.S.get(0)); ;} break; case 173: -#line 2638 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2640 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - if (!InsertElementInst::isValidOperands((yyvsp[(3) - (8)].ConstVal).C, (yyvsp[(5) - (8)].ConstVal).C, (yyvsp[(7) - (8)].ConstVal).C)) + if (!InsertElementInst::isValidOperands(yyvsp[-5].ConstVal.C, yyvsp[-3].ConstVal.C, yyvsp[-1].ConstVal.C)) error("Invalid insertelement operands"); - (yyval.ConstVal).C = ConstantExpr::getInsertElement((yyvsp[(3) - (8)].ConstVal).C, (yyvsp[(5) - (8)].ConstVal).C, (yyvsp[(7) - (8)].ConstVal).C); - (yyval.ConstVal).S.copy((yyvsp[(3) - (8)].ConstVal).S); + yyval.ConstVal.C = ConstantExpr::getInsertElement(yyvsp[-5].ConstVal.C, yyvsp[-3].ConstVal.C, yyvsp[-1].ConstVal.C); + yyval.ConstVal.S.copy(yyvsp[-5].ConstVal.S); ;} break; case 174: -#line 2644 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2646 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - if (!ShuffleVectorInst::isValidOperands((yyvsp[(3) - (8)].ConstVal).C, (yyvsp[(5) - (8)].ConstVal).C, (yyvsp[(7) - (8)].ConstVal).C)) + if (!ShuffleVectorInst::isValidOperands(yyvsp[-5].ConstVal.C, yyvsp[-3].ConstVal.C, yyvsp[-1].ConstVal.C)) error("Invalid shufflevector operands"); - (yyval.ConstVal).C = ConstantExpr::getShuffleVector((yyvsp[(3) - (8)].ConstVal).C, (yyvsp[(5) - (8)].ConstVal).C, (yyvsp[(7) - (8)].ConstVal).C); - (yyval.ConstVal).S.copy((yyvsp[(3) - (8)].ConstVal).S); + yyval.ConstVal.C = ConstantExpr::getShuffleVector(yyvsp[-5].ConstVal.C, yyvsp[-3].ConstVal.C, yyvsp[-1].ConstVal.C); + yyval.ConstVal.S.copy(yyvsp[-5].ConstVal.S); ;} break; case 175: -#line 2655 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" - { ((yyval.ConstVector) = (yyvsp[(1) - (3)].ConstVector))->push_back((yyvsp[(3) - (3)].ConstVal)); ;} +#line 2657 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" + { (yyval.ConstVector = yyvsp[-2].ConstVector)->push_back(yyvsp[0].ConstVal); ;} break; case 176: -#line 2656 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2658 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - (yyval.ConstVector) = new std::vector(); - (yyval.ConstVector)->push_back((yyvsp[(1) - (1)].ConstVal)); + yyval.ConstVector = new std::vector(); + yyval.ConstVector->push_back(yyvsp[0].ConstVal); ;} break; case 177: -#line 2665 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.BoolVal) = false; ;} +#line 2667 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" + { yyval.BoolVal = false; ;} break; case 178: -#line 2666 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.BoolVal) = true; ;} +#line 2668 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" + { yyval.BoolVal = true; ;} break; case 179: -#line 2678 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2680 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - (yyval.ModuleVal) = ParserResult = (yyvsp[(1) - (1)].ModuleVal); + yyval.ModuleVal = ParserResult = yyvsp[0].ModuleVal; CurModule.ModuleDone(); ;} break; case 180: -#line 2687 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.ModuleVal) = (yyvsp[(1) - (2)].ModuleVal); CurFun.FunctionDone(); ;} +#line 2689 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" + { yyval.ModuleVal = yyvsp[-1].ModuleVal; CurFun.FunctionDone(); ;} break; case 181: -#line 2688 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.ModuleVal) = (yyvsp[(1) - (2)].ModuleVal); ;} +#line 2690 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" + { yyval.ModuleVal = yyvsp[-1].ModuleVal; ;} break; case 182: -#line 2689 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.ModuleVal) = (yyvsp[(1) - (4)].ModuleVal); ;} +#line 2691 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" + { yyval.ModuleVal = yyvsp[-3].ModuleVal; ;} break; case 183: -#line 2690 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.ModuleVal) = (yyvsp[(1) - (2)].ModuleVal); ;} +#line 2692 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" + { yyval.ModuleVal = yyvsp[-1].ModuleVal; ;} break; case 184: -#line 2691 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2693 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - (yyval.ModuleVal) = CurModule.CurrentModule; + yyval.ModuleVal = CurModule.CurrentModule; // Emit an error if there are any unresolved types left. if (!CurModule.LateResolveTypes.empty()) { const ValID &DID = CurModule.LateResolveTypes.begin()->first; @@ -5317,7 +4979,7 @@ break; case 185: -#line 2707 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2709 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { // Eagerly resolve types. This is not an optimization, this is a // requirement that is due to the fact that we could have this: @@ -5328,123 +4990,123 @@ // If types are not resolved eagerly, then the two types will not be // determined to be the same type! // - ResolveTypeTo((yyvsp[(2) - (4)].StrVal), (yyvsp[(4) - (4)].TypeVal).PAT->get(), (yyvsp[(4) - (4)].TypeVal).S); + ResolveTypeTo(yyvsp[-2].StrVal, yyvsp[0].TypeVal.PAT->get(), yyvsp[0].TypeVal.S); - if (!setTypeName((yyvsp[(4) - (4)].TypeVal), (yyvsp[(2) - (4)].StrVal)) && !(yyvsp[(2) - (4)].StrVal)) { + if (!setTypeName(yyvsp[0].TypeVal, yyvsp[-2].StrVal) && !yyvsp[-2].StrVal) { // If this is a numbered type that is not a redefinition, add it to the // slot table. - CurModule.Types.push_back((yyvsp[(4) - (4)].TypeVal).PAT->get()); - CurModule.TypeSigns.push_back((yyvsp[(4) - (4)].TypeVal).S); + CurModule.Types.push_back(yyvsp[0].TypeVal.PAT->get()); + CurModule.TypeSigns.push_back(yyvsp[0].TypeVal.S); } - delete (yyvsp[(4) - (4)].TypeVal).PAT; + delete yyvsp[0].TypeVal.PAT; ;} break; case 186: -#line 2727 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2729 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { // Function prototypes can be in const pool ;} break; case 187: -#line 2729 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2731 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { // Asm blocks can be in the const pool ;} break; case 188: -#line 2731 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2733 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - if ((yyvsp[(5) - (5)].ConstVal).C == 0) + if (yyvsp[0].ConstVal.C == 0) error("Global value initializer is not a constant"); - CurGV = ParseGlobalVariable((yyvsp[(2) - (5)].StrVal), (yyvsp[(3) - (5)].Linkage), (yyvsp[(4) - (5)].BoolVal), (yyvsp[(5) - (5)].ConstVal).C->getType(), (yyvsp[(5) - (5)].ConstVal).C, (yyvsp[(5) - (5)].ConstVal).S); + CurGV = ParseGlobalVariable(yyvsp[-3].StrVal, yyvsp[-2].Linkage, yyvsp[-1].BoolVal, yyvsp[0].ConstVal.C->getType(), yyvsp[0].ConstVal.C, yyvsp[0].ConstVal.S); ;} break; case 189: -#line 2735 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2737 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { CurGV = 0; ;} break; case 190: -#line 2738 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2740 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - const Type *Ty = (yyvsp[(5) - (5)].TypeVal).PAT->get(); - CurGV = ParseGlobalVariable((yyvsp[(2) - (5)].StrVal), GlobalValue::ExternalLinkage, (yyvsp[(4) - (5)].BoolVal), Ty, 0, - (yyvsp[(5) - (5)].TypeVal).S); - delete (yyvsp[(5) - (5)].TypeVal).PAT; + const Type *Ty = yyvsp[0].TypeVal.PAT->get(); + CurGV = ParseGlobalVariable(yyvsp[-3].StrVal, GlobalValue::ExternalLinkage, yyvsp[-1].BoolVal, Ty, 0, + yyvsp[0].TypeVal.S); + delete yyvsp[0].TypeVal.PAT; ;} break; case 191: -#line 2743 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2745 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { CurGV = 0; ;} break; case 192: -#line 2746 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2748 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - const Type *Ty = (yyvsp[(5) - (5)].TypeVal).PAT->get(); - CurGV = ParseGlobalVariable((yyvsp[(2) - (5)].StrVal), GlobalValue::DLLImportLinkage, (yyvsp[(4) - (5)].BoolVal), Ty, 0, - (yyvsp[(5) - (5)].TypeVal).S); - delete (yyvsp[(5) - (5)].TypeVal).PAT; + const Type *Ty = yyvsp[0].TypeVal.PAT->get(); + CurGV = ParseGlobalVariable(yyvsp[-3].StrVal, GlobalValue::DLLImportLinkage, yyvsp[-1].BoolVal, Ty, 0, + yyvsp[0].TypeVal.S); + delete yyvsp[0].TypeVal.PAT; ;} break; case 193: -#line 2751 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2753 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { CurGV = 0; ;} break; case 194: -#line 2754 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2756 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - const Type *Ty = (yyvsp[(5) - (5)].TypeVal).PAT->get(); + const Type *Ty = yyvsp[0].TypeVal.PAT->get(); CurGV = - ParseGlobalVariable((yyvsp[(2) - (5)].StrVal), GlobalValue::ExternalWeakLinkage, (yyvsp[(4) - (5)].BoolVal), Ty, 0, - (yyvsp[(5) - (5)].TypeVal).S); - delete (yyvsp[(5) - (5)].TypeVal).PAT; + ParseGlobalVariable(yyvsp[-3].StrVal, GlobalValue::ExternalWeakLinkage, yyvsp[-1].BoolVal, Ty, 0, + yyvsp[0].TypeVal.S); + delete yyvsp[0].TypeVal.PAT; ;} break; case 195: -#line 2760 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2762 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { CurGV = 0; ;} break; case 196: -#line 2763 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2765 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { ;} break; case 197: -#line 2765 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2767 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { ;} break; case 198: -#line 2767 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2769 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { ;} break; case 199: -#line 2772 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2774 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.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); @@ -5454,149 +5116,149 @@ break; case 200: -#line 2786 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.Endianness) = Module::BigEndian; ;} +#line 2788 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" + { yyval.Endianness = Module::BigEndian; ;} break; case 201: -#line 2787 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.Endianness) = Module::LittleEndian; ;} +#line 2789 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" + { yyval.Endianness = Module::LittleEndian; ;} break; case 202: -#line 2791 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2793 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - CurModule.setEndianness((yyvsp[(3) - (3)].Endianness)); + CurModule.setEndianness(yyvsp[0].Endianness); ;} break; case 203: -#line 2794 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2796 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - if ((yyvsp[(3) - (3)].UInt64Val) == 32) + if (yyvsp[0].UInt64Val == 32) CurModule.setPointerSize(Module::Pointer32); - else if ((yyvsp[(3) - (3)].UInt64Val) == 64) + else if (yyvsp[0].UInt64Val == 64) CurModule.setPointerSize(Module::Pointer64); else - error("Invalid pointer size: '" + utostr((yyvsp[(3) - (3)].UInt64Val)) + "'"); + error("Invalid pointer size: '" + utostr(yyvsp[0].UInt64Val) + "'"); ;} break; case 204: -#line 2802 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2804 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - CurModule.CurrentModule->setTargetTriple((yyvsp[(3) - (3)].StrVal)); - free((yyvsp[(3) - (3)].StrVal)); + CurModule.CurrentModule->setTargetTriple(yyvsp[0].StrVal); + free(yyvsp[0].StrVal); ;} break; case 205: -#line 2806 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2808 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - CurModule.CurrentModule->setDataLayout((yyvsp[(3) - (3)].StrVal)); - free((yyvsp[(3) - (3)].StrVal)); + CurModule.CurrentModule->setDataLayout(yyvsp[0].StrVal); + free(yyvsp[0].StrVal); ;} break; case 207: -#line 2817 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2819 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - CurModule.CurrentModule->addLibrary((yyvsp[(3) - (3)].StrVal)); - free((yyvsp[(3) - (3)].StrVal)); + CurModule.CurrentModule->addLibrary(yyvsp[0].StrVal); + free(yyvsp[0].StrVal); ;} break; case 208: -#line 2821 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2823 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - CurModule.CurrentModule->addLibrary((yyvsp[(1) - (1)].StrVal)); - free((yyvsp[(1) - (1)].StrVal)); + CurModule.CurrentModule->addLibrary(yyvsp[0].StrVal); + free(yyvsp[0].StrVal); ;} break; case 209: -#line 2825 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2827 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { ;} break; case 213: -#line 2838 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.StrVal) = 0; ;} +#line 2840 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" + { yyval.StrVal = 0; ;} break; case 214: -#line 2842 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2844 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - if ((yyvsp[(1) - (2)].TypeVal).PAT->get() == Type::VoidTy) + if (yyvsp[-1].TypeVal.PAT->get() == Type::VoidTy) error("void typed arguments are invalid"); - (yyval.ArgVal) = new std::pair((yyvsp[(1) - (2)].TypeVal), (yyvsp[(2) - (2)].StrVal)); + yyval.ArgVal = new std::pair(yyvsp[-1].TypeVal, yyvsp[0].StrVal); ;} break; case 215: -#line 2850 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2852 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - (yyval.ArgList) = (yyvsp[(1) - (3)].ArgList); - (yyval.ArgList)->push_back(*(yyvsp[(3) - (3)].ArgVal)); - delete (yyvsp[(3) - (3)].ArgVal); + yyval.ArgList = yyvsp[-2].ArgList; + yyval.ArgList->push_back(*yyvsp[0].ArgVal); + delete yyvsp[0].ArgVal; ;} break; case 216: -#line 2855 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2857 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - (yyval.ArgList) = new std::vector >(); - (yyval.ArgList)->push_back(*(yyvsp[(1) - (1)].ArgVal)); - delete (yyvsp[(1) - (1)].ArgVal); + yyval.ArgList = new std::vector >(); + yyval.ArgList->push_back(*yyvsp[0].ArgVal); + delete yyvsp[0].ArgVal; ;} break; case 217: -#line 2863 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.ArgList) = (yyvsp[(1) - (1)].ArgList); ;} +#line 2865 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" + { yyval.ArgList = yyvsp[0].ArgList; ;} break; case 218: -#line 2864 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2866 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - (yyval.ArgList) = (yyvsp[(1) - (3)].ArgList); + yyval.ArgList = yyvsp[-2].ArgList; PATypeInfo VoidTI; VoidTI.PAT = new PATypeHolder(Type::VoidTy); VoidTI.S.makeSignless(); - (yyval.ArgList)->push_back(std::pair(VoidTI, 0)); + yyval.ArgList->push_back(std::pair(VoidTI, 0)); ;} break; case 219: -#line 2871 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2873 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - (yyval.ArgList) = new std::vector >(); + yyval.ArgList = new std::vector >(); PATypeInfo VoidTI; VoidTI.PAT = new PATypeHolder(Type::VoidTy); VoidTI.S.makeSignless(); - (yyval.ArgList)->push_back(std::pair(VoidTI, 0)); + yyval.ArgList->push_back(std::pair(VoidTI, 0)); ;} break; case 220: -#line 2878 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.ArgList) = 0; ;} +#line 2880 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" + { yyval.ArgList = 0; ;} break; case 221: -#line 2882 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 2884 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - UnEscapeLexed((yyvsp[(3) - (8)].StrVal)); - std::string FunctionName((yyvsp[(3) - (8)].StrVal)); - free((yyvsp[(3) - (8)].StrVal)); // Free strdup'd memory! + UnEscapeLexed(yyvsp[-5].StrVal); + std::string FunctionName(yyvsp[-5].StrVal); + free(yyvsp[-5].StrVal); // Free strdup'd memory! - const Type* RetTy = (yyvsp[(2) - (8)].TypeVal).PAT->get(); + const Type* RetTy = yyvsp[-6].TypeVal.PAT->get(); if (!RetTy->isFirstClassType() && RetTy != Type::VoidTy) error("LLVM functions cannot return aggregate types"); Signedness FTySign; - FTySign.makeComposite((yyvsp[(2) - (8)].TypeVal).S); + FTySign.makeComposite(yyvsp[-6].TypeVal.S); std::vector ParamTyList; // In LLVM 2.0 the signatures of three varargs intrinsics changed to take @@ -5607,9 +5269,9 @@ } else if (FunctionName == "llvm.va_copy") { ParamTyList.push_back(PointerType::get(Type::Int8Ty)); ParamTyList.push_back(PointerType::get(Type::Int8Ty)); - } else if ((yyvsp[(5) - (8)].ArgList)) { // If there are arguments... + } else if (yyvsp[-3].ArgList) { // If there are arguments... for (std::vector >::iterator - I = (yyvsp[(5) - (8)].ArgList)->begin(), E = (yyvsp[(5) - (8)].ArgList)->end(); I != E; ++I) { + I = yyvsp[-3].ArgList->begin(), E = yyvsp[-3].ArgList->end(); I != E; ++I) { const Type *Ty = I->first.PAT->get(); ParamTyList.push_back(Ty); FTySign.add(I->first.S); @@ -5623,7 +5285,7 @@ // Convert the CSRet calling convention into the corresponding parameter // attribute. ParamAttrsList *PAL = 0; - if ((yyvsp[(1) - (8)].UIntVal) == OldCallingConv::CSRet) { + if (yyvsp[-7].UIntVal == OldCallingConv::CSRet) { ParamAttrsVector Attrs; ParamAttrsWithIndex PAWI; PAWI.index = 1; PAWI.attrs = ParamAttr::StructRet; // first arg @@ -5634,7 +5296,7 @@ const FunctionType *FT = FunctionType::get(RetTy, ParamTyList, isVarArg, PAL); const PointerType *PFT = PointerType::get(FT); - delete (yyvsp[(2) - (8)].TypeVal).PAT; + delete yyvsp[-6].TypeVal.PAT; ValID ID; if (!FunctionName.empty()) { @@ -5743,163 +5405,163 @@ // argument to another function. Fn->setLinkage(CurFun.Linkage); } - Fn->setCallingConv(upgradeCallingConv((yyvsp[(1) - (8)].UIntVal))); - Fn->setAlignment((yyvsp[(8) - (8)].UIntVal)); - if ((yyvsp[(7) - (8)].StrVal)) { - Fn->setSection((yyvsp[(7) - (8)].StrVal)); - free((yyvsp[(7) - (8)].StrVal)); + Fn->setCallingConv(upgradeCallingConv(yyvsp[-7].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) - (8)].ArgList)) { // Is null if empty... + if (yyvsp[-3].ArgList) { // Is null if empty... if (isVarArg) { // Nuke the last entry - assert((yyvsp[(5) - (8)].ArgList)->back().first.PAT->get() == Type::VoidTy && - (yyvsp[(5) - (8)].ArgList)->back().second == 0 && "Not a varargs marker"); - delete (yyvsp[(5) - (8)].ArgList)->back().first.PAT; - (yyvsp[(5) - (8)].ArgList)->pop_back(); // Delete the last entry + assert(yyvsp[-3].ArgList->back().first.PAT->get() == Type::VoidTy && + yyvsp[-3].ArgList->back().second == 0 && "Not a varargs marker"); + delete yyvsp[-3].ArgList->back().first.PAT; + yyvsp[-3].ArgList->pop_back(); // Delete the last entry } Function::arg_iterator ArgIt = Fn->arg_begin(); Function::arg_iterator ArgEnd = Fn->arg_end(); - std::vector >::iterator I = (yyvsp[(5) - (8)].ArgList)->begin(); - std::vector >::iterator E = (yyvsp[(5) - (8)].ArgList)->end(); + std::vector >::iterator I = yyvsp[-3].ArgList->begin(); + std::vector >::iterator E = yyvsp[-3].ArgList->end(); for ( ; I != E && ArgIt != ArgEnd; ++I, ++ArgIt) { delete I->first.PAT; // Delete the typeholder... ValueInfo VI; VI.V = ArgIt; VI.S.copy(I->first.S); setValueName(VI, I->second); // Insert arg into symtab... InsertValue(ArgIt); } - delete (yyvsp[(5) - (8)].ArgList); // We're now done with the argument list + delete yyvsp[-3].ArgList; // We're now done with the argument list } lastCallingConv = OldCallingConv::C; ;} break; case 224: -#line 3076 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" - { CurFun.Linkage = (yyvsp[(1) - (1)].Linkage); ;} +#line 3078 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" + { CurFun.Linkage = yyvsp[0].Linkage; ;} break; case 225: -#line 3076 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 3078 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - (yyval.FunctionVal) = CurFun.CurrentFunction; + 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->setLinkage(yyvsp[-3].Linkage); ;} break; case 228: -#line 3090 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 3092 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - (yyval.FunctionVal) = (yyvsp[(1) - (2)].FunctionVal); + yyval.FunctionVal = yyvsp[-1].FunctionVal; ;} break; case 229: -#line 3095 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;} +#line 3097 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" + { yyval.Linkage = GlobalValue::ExternalLinkage; ;} break; case 230: -#line 3096 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.Linkage) = GlobalValue::DLLImportLinkage; ;} +#line 3098 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" + { yyval.Linkage = GlobalValue::DLLImportLinkage; ;} break; case 231: -#line 3097 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.Linkage) = GlobalValue::ExternalWeakLinkage; ;} +#line 3099 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" + { yyval.Linkage = GlobalValue::ExternalWeakLinkage; ;} break; case 232: -#line 3101 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 3103 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { CurFun.isDeclare = true; ;} break; case 233: -#line 3102 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" - { CurFun.Linkage = (yyvsp[(3) - (3)].Linkage); ;} +#line 3104 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" + { CurFun.Linkage = yyvsp[0].Linkage; ;} break; case 234: -#line 3102 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 3104 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - (yyval.FunctionVal) = CurFun.CurrentFunction; + yyval.FunctionVal = CurFun.CurrentFunction; CurFun.FunctionDone(); ;} break; case 235: -#line 3114 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.BoolVal) = false; ;} +#line 3116 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" + { yyval.BoolVal = false; ;} break; case 236: -#line 3115 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.BoolVal) = true; ;} +#line 3117 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" + { yyval.BoolVal = true; ;} break; case 237: -#line 3120 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.ValIDVal) = ValID::create((yyvsp[(1) - (1)].SInt64Val)); ;} +#line 3122 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" + { yyval.ValIDVal = ValID::create(yyvsp[0].SInt64Val); ;} break; case 238: -#line 3121 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.ValIDVal) = ValID::create((yyvsp[(1) - (1)].UInt64Val)); ;} +#line 3123 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" + { yyval.ValIDVal = ValID::create(yyvsp[0].UInt64Val); ;} break; case 239: -#line 3122 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.ValIDVal) = ValID::create((yyvsp[(1) - (1)].FPVal)); ;} +#line 3124 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" + { yyval.ValIDVal = ValID::create(yyvsp[0].FPVal); ;} break; case 240: -#line 3123 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 3125 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - (yyval.ValIDVal) = ValID::create(ConstantInt::get(Type::Int1Ty, true)); - (yyval.ValIDVal).S.makeUnsigned(); + yyval.ValIDVal = ValID::create(ConstantInt::get(Type::Int1Ty, true)); + yyval.ValIDVal.S.makeUnsigned(); ;} break; case 241: -#line 3127 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 3129 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - (yyval.ValIDVal) = ValID::create(ConstantInt::get(Type::Int1Ty, false)); - (yyval.ValIDVal).S.makeUnsigned(); + yyval.ValIDVal = ValID::create(ConstantInt::get(Type::Int1Ty, false)); + yyval.ValIDVal.S.makeUnsigned(); ;} break; case 242: -#line 3131 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.ValIDVal) = ValID::createNull(); ;} +#line 3133 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" + { yyval.ValIDVal = ValID::createNull(); ;} break; case 243: -#line 3132 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.ValIDVal) = ValID::createUndef(); ;} +#line 3134 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" + { yyval.ValIDVal = ValID::createUndef(); ;} break; case 244: -#line 3133 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.ValIDVal) = ValID::createZeroInit(); ;} +#line 3135 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" + { yyval.ValIDVal = ValID::createZeroInit(); ;} break; case 245: -#line 3134 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 3136 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { // Nonempty unsized packed vector - const Type *ETy = (*(yyvsp[(2) - (3)].ConstVector))[0].C->getType(); - int NumElements = (yyvsp[(2) - (3)].ConstVector)->size(); + const Type *ETy = (*yyvsp[-1].ConstVector)[0].C->getType(); + int NumElements = yyvsp[-1].ConstVector->size(); VectorType* pt = VectorType::get(ETy, NumElements); - (yyval.ValIDVal).S.makeComposite((*(yyvsp[(2) - (3)].ConstVector))[0].S); - PATypeHolder* PTy = new PATypeHolder(HandleUpRefs(pt, (yyval.ValIDVal).S)); + yyval.ValIDVal.S.makeComposite((*yyvsp[-1].ConstVector)[0].S); + PATypeHolder* PTy = new PATypeHolder(HandleUpRefs(pt, yyval.ValIDVal.S)); // Verify all elements are correct type! std::vector Elems; - for (unsigned i = 0; i < (yyvsp[(2) - (3)].ConstVector)->size(); i++) { - Constant *C = (*(yyvsp[(2) - (3)].ConstVector))[i].C; + for (unsigned i = 0; i < yyvsp[-1].ConstVector->size(); i++) { + Constant *C = (*yyvsp[-1].ConstVector)[i].C; const Type *CTy = C->getType(); if (ETy != CTy) error("Element #" + utostr(i) + " is not of type '" + @@ -5907,209 +5569,209 @@ CTy->getDescription() + "'"); Elems.push_back(C); } - (yyval.ValIDVal) = ValID::create(ConstantVector::get(pt, Elems)); - delete PTy; delete (yyvsp[(2) - (3)].ConstVector); + yyval.ValIDVal = ValID::create(ConstantVector::get(pt, Elems)); + delete PTy; delete yyvsp[-1].ConstVector; ;} break; case 246: -#line 3155 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 3157 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - (yyval.ValIDVal) = ValID::create((yyvsp[(1) - (1)].ConstVal).C); - (yyval.ValIDVal).S.copy((yyvsp[(1) - (1)].ConstVal).S); + yyval.ValIDVal = ValID::create(yyvsp[0].ConstVal.C); + yyval.ValIDVal.S.copy(yyvsp[0].ConstVal.S); ;} break; case 247: -#line 3159 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 3161 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.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)); + 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); ;} break; case 248: -#line 3173 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.ValIDVal) = ValID::create((yyvsp[(1) - (1)].SIntVal)); (yyval.ValIDVal).S.makeSignless(); ;} +#line 3175 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" + { yyval.ValIDVal = ValID::create(yyvsp[0].SIntVal); yyval.ValIDVal.S.makeSignless(); ;} break; case 249: -#line 3174 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.ValIDVal) = ValID::create((yyvsp[(1) - (1)].StrVal)); (yyval.ValIDVal).S.makeSignless(); ;} +#line 3176 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" + { yyval.ValIDVal = ValID::create(yyvsp[0].StrVal); yyval.ValIDVal.S.makeSignless(); ;} break; case 252: -#line 3187 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 3189 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - const Type *Ty = (yyvsp[(1) - (2)].TypeVal).PAT->get(); - (yyvsp[(2) - (2)].ValIDVal).S.copy((yyvsp[(1) - (2)].TypeVal).S); - (yyval.ValueVal).V = getVal(Ty, (yyvsp[(2) - (2)].ValIDVal)); - (yyval.ValueVal).S.copy((yyvsp[(1) - (2)].TypeVal).S); - delete (yyvsp[(1) - (2)].TypeVal).PAT; + const Type *Ty = yyvsp[-1].TypeVal.PAT->get(); + yyvsp[0].ValIDVal.S.copy(yyvsp[-1].TypeVal.S); + yyval.ValueVal.V = getVal(Ty, yyvsp[0].ValIDVal); + yyval.ValueVal.S.copy(yyvsp[-1].TypeVal.S); + delete yyvsp[-1].TypeVal.PAT; ;} break; case 253: -#line 3197 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 3199 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - (yyval.FunctionVal) = (yyvsp[(1) - (2)].FunctionVal); + yyval.FunctionVal = yyvsp[-1].FunctionVal; ;} break; case 254: -#line 3200 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 3202 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { // Do not allow functions with 0 basic blocks - (yyval.FunctionVal) = (yyvsp[(1) - (2)].FunctionVal); + yyval.FunctionVal = yyvsp[-1].FunctionVal; ;} break; case 255: -#line 3209 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 3211 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - ValueInfo VI; VI.V = (yyvsp[(3) - (3)].TermInstVal).TI; VI.S.copy((yyvsp[(3) - (3)].TermInstVal).S); - setValueName(VI, (yyvsp[(2) - (3)].StrVal)); - InsertValue((yyvsp[(3) - (3)].TermInstVal).TI); - (yyvsp[(1) - (3)].BasicBlockVal)->getInstList().push_back((yyvsp[(3) - (3)].TermInstVal).TI); - InsertValue((yyvsp[(1) - (3)].BasicBlockVal)); - (yyval.BasicBlockVal) = (yyvsp[(1) - (3)].BasicBlockVal); + ValueInfo VI; VI.V = yyvsp[0].TermInstVal.TI; VI.S.copy(yyvsp[0].TermInstVal.S); + setValueName(VI, yyvsp[-1].StrVal); + InsertValue(yyvsp[0].TermInstVal.TI); + yyvsp[-2].BasicBlockVal->getInstList().push_back(yyvsp[0].TermInstVal.TI); + InsertValue(yyvsp[-2].BasicBlockVal); + yyval.BasicBlockVal = yyvsp[-2].BasicBlockVal; ;} break; case 256: -#line 3220 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 3222 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - if ((yyvsp[(2) - (2)].InstVal).I) - (yyvsp[(1) - (2)].BasicBlockVal)->getInstList().push_back((yyvsp[(2) - (2)].InstVal).I); - (yyval.BasicBlockVal) = (yyvsp[(1) - (2)].BasicBlockVal); + if (yyvsp[0].InstVal.I) + yyvsp[-1].BasicBlockVal->getInstList().push_back(yyvsp[0].InstVal.I); + yyval.BasicBlockVal = yyvsp[-1].BasicBlockVal; ;} break; case 257: -#line 3225 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 3227 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - (yyval.BasicBlockVal) = CurBB = getBBVal(ValID::create((int)CurFun.NextBBNum++),true); + yyval.BasicBlockVal = CurBB = getBBVal(ValID::create((int)CurFun.NextBBNum++),true); // Make sure to move the basic block to the correct location in the // function, instead of leaving it inserted wherever it was first // referenced. Function::BasicBlockListType &BBL = CurFun.CurrentFunction->getBasicBlockList(); - BBL.splice(BBL.end(), BBL, (yyval.BasicBlockVal)); + BBL.splice(BBL.end(), BBL, yyval.BasicBlockVal); ;} break; case 258: -#line 3234 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 3236 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - (yyval.BasicBlockVal) = CurBB = getBBVal(ValID::create((yyvsp[(1) - (1)].StrVal)), true); + yyval.BasicBlockVal = CurBB = getBBVal(ValID::create(yyvsp[0].StrVal), true); // Make sure to move the basic block to the correct location in the // function, instead of leaving it inserted wherever it was first // referenced. Function::BasicBlockListType &BBL = CurFun.CurrentFunction->getBasicBlockList(); - BBL.splice(BBL.end(), BBL, (yyval.BasicBlockVal)); + BBL.splice(BBL.end(), BBL, yyval.BasicBlockVal); ;} break; case 261: -#line 3248 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 3250 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { // Return with a result... - (yyval.TermInstVal).TI = new ReturnInst((yyvsp[(2) - (2)].ValueVal).V); - (yyval.TermInstVal).S.makeSignless(); + yyval.TermInstVal.TI = new ReturnInst(yyvsp[0].ValueVal.V); + yyval.TermInstVal.S.makeSignless(); ;} break; case 262: -#line 3252 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 3254 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { // Return with no result... - (yyval.TermInstVal).TI = new ReturnInst(); - (yyval.TermInstVal).S.makeSignless(); + yyval.TermInstVal.TI = new ReturnInst(); + yyval.TermInstVal.S.makeSignless(); ;} break; case 263: -#line 3256 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 3258 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { // Unconditional Branch... - BasicBlock* tmpBB = getBBVal((yyvsp[(3) - (3)].ValIDVal)); - (yyval.TermInstVal).TI = new BranchInst(tmpBB); - (yyval.TermInstVal).S.makeSignless(); + BasicBlock* tmpBB = getBBVal(yyvsp[0].ValIDVal); + yyval.TermInstVal.TI = new BranchInst(tmpBB); + yyval.TermInstVal.S.makeSignless(); ;} break; case 264: -#line 3261 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 3263 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - (yyvsp[(6) - (9)].ValIDVal).S.makeSignless(); - (yyvsp[(9) - (9)].ValIDVal).S.makeSignless(); - BasicBlock* tmpBBA = getBBVal((yyvsp[(6) - (9)].ValIDVal)); - BasicBlock* tmpBBB = getBBVal((yyvsp[(9) - (9)].ValIDVal)); - (yyvsp[(3) - (9)].ValIDVal).S.makeUnsigned(); - Value* tmpVal = getVal(Type::Int1Ty, (yyvsp[(3) - (9)].ValIDVal)); - (yyval.TermInstVal).TI = new BranchInst(tmpBBA, tmpBBB, tmpVal); - (yyval.TermInstVal).S.makeSignless(); + yyvsp[-3].ValIDVal.S.makeSignless(); + yyvsp[0].ValIDVal.S.makeSignless(); + BasicBlock* tmpBBA = getBBVal(yyvsp[-3].ValIDVal); + BasicBlock* tmpBBB = getBBVal(yyvsp[0].ValIDVal); + yyvsp[-6].ValIDVal.S.makeUnsigned(); + Value* tmpVal = getVal(Type::Int1Ty, yyvsp[-6].ValIDVal); + yyval.TermInstVal.TI = new BranchInst(tmpBBA, tmpBBB, tmpVal); + yyval.TermInstVal.S.makeSignless(); ;} break; case 265: -#line 3271 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 3273 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - (yyvsp[(3) - (9)].ValIDVal).S.copy((yyvsp[(2) - (9)].PrimType).S); - Value* tmpVal = getVal((yyvsp[(2) - (9)].PrimType).T, (yyvsp[(3) - (9)].ValIDVal)); - (yyvsp[(6) - (9)].ValIDVal).S.makeSignless(); - BasicBlock* tmpBB = getBBVal((yyvsp[(6) - (9)].ValIDVal)); - SwitchInst *S = new SwitchInst(tmpVal, tmpBB, (yyvsp[(8) - (9)].JumpTable)->size()); - (yyval.TermInstVal).TI = S; - (yyval.TermInstVal).S.makeSignless(); - std::vector >::iterator I = (yyvsp[(8) - (9)].JumpTable)->begin(), - E = (yyvsp[(8) - (9)].JumpTable)->end(); + yyvsp[-6].ValIDVal.S.copy(yyvsp[-7].PrimType.S); + Value* tmpVal = getVal(yyvsp[-7].PrimType.T, yyvsp[-6].ValIDVal); + yyvsp[-3].ValIDVal.S.makeSignless(); + BasicBlock* tmpBB = getBBVal(yyvsp[-3].ValIDVal); + SwitchInst *S = new SwitchInst(tmpVal, tmpBB, yyvsp[-1].JumpTable->size()); + yyval.TermInstVal.TI = S; + yyval.TermInstVal.S.makeSignless(); + 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 error("Switch case is constant, but not a simple integer"); } - delete (yyvsp[(8) - (9)].JumpTable); + delete yyvsp[-1].JumpTable; ;} break; case 266: -#line 3289 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 3291 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - (yyvsp[(3) - (8)].ValIDVal).S.copy((yyvsp[(2) - (8)].PrimType).S); - Value* tmpVal = getVal((yyvsp[(2) - (8)].PrimType).T, (yyvsp[(3) - (8)].ValIDVal)); - (yyvsp[(6) - (8)].ValIDVal).S.makeSignless(); - BasicBlock* tmpBB = getBBVal((yyvsp[(6) - (8)].ValIDVal)); + yyvsp[-5].ValIDVal.S.copy(yyvsp[-6].PrimType.S); + Value* tmpVal = getVal(yyvsp[-6].PrimType.T, yyvsp[-5].ValIDVal); + yyvsp[-2].ValIDVal.S.makeSignless(); + BasicBlock* tmpBB = getBBVal(yyvsp[-2].ValIDVal); SwitchInst *S = new SwitchInst(tmpVal, tmpBB, 0); - (yyval.TermInstVal).TI = S; - (yyval.TermInstVal).S.makeSignless(); + yyval.TermInstVal.TI = S; + yyval.TermInstVal.S.makeSignless(); ;} break; case 267: -#line 3299 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 3301 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { const PointerType *PFTy; const FunctionType *Ty; Signedness FTySign; - if (!(PFTy = dyn_cast((yyvsp[(3) - (13)].TypeVal).PAT->get())) || + if (!(PFTy = dyn_cast(yyvsp[-10].TypeVal.PAT->get())) || !(Ty = dyn_cast(PFTy->getElementType()))) { // Pull out the types of all of the arguments... std::vector ParamTypes; - FTySign.makeComposite((yyvsp[(3) - (13)].TypeVal).S); - if ((yyvsp[(6) - (13)].ValueList)) { - for (std::vector::iterator I = (yyvsp[(6) - (13)].ValueList)->begin(), E = (yyvsp[(6) - (13)].ValueList)->end(); + FTySign.makeComposite(yyvsp[-10].TypeVal.S); + if (yyvsp[-7].ValueList) { + for (std::vector::iterator I = yyvsp[-7].ValueList->begin(), E = yyvsp[-7].ValueList->end(); I != E; ++I) { ParamTypes.push_back((*I).V->getType()); FTySign.add(I->S); } } ParamAttrsList *PAL = 0; - if ((yyvsp[(2) - (13)].UIntVal) == OldCallingConv::CSRet) { + if (yyvsp[-11].UIntVal == OldCallingConv::CSRet) { ParamAttrsVector Attrs; ParamAttrsWithIndex PAWI; PAWI.index = 1; PAWI.attrs = ParamAttr::StructRet; // first arg @@ -6118,32 +5780,33 @@ } bool isVarArg = ParamTypes.size() && ParamTypes.back() == Type::VoidTy; if (isVarArg) ParamTypes.pop_back(); - Ty = FunctionType::get((yyvsp[(3) - (13)].TypeVal).PAT->get(), ParamTypes, isVarArg, PAL); + Ty = FunctionType::get(yyvsp[-10].TypeVal.PAT->get(), ParamTypes, isVarArg, PAL); PFTy = PointerType::get(Ty); - (yyval.TermInstVal).S.copy((yyvsp[(3) - (13)].TypeVal).S); + yyval.TermInstVal.S.copy(yyvsp[-10].TypeVal.S); } else { - FTySign = (yyvsp[(3) - (13)].TypeVal).S; + FTySign = yyvsp[-10].TypeVal.S; // Get the signedness of the result type. $3 is the pointer to the // function type so we get the 0th element to extract the function type, // and then the 0th element again to get the result type. - (yyval.TermInstVal).S.copy((yyvsp[(3) - (13)].TypeVal).S.get(0).get(0)); + yyval.TermInstVal.S.copy(yyvsp[-10].TypeVal.S.get(0).get(0)); } - (yyvsp[(4) - (13)].ValIDVal).S.makeComposite(FTySign); - Value *V = getVal(PFTy, (yyvsp[(4) - (13)].ValIDVal)); // Get the function we're calling... - BasicBlock *Normal = getBBVal((yyvsp[(10) - (13)].ValIDVal)); - BasicBlock *Except = getBBVal((yyvsp[(13) - (13)].ValIDVal)); + yyvsp[-9].ValIDVal.S.makeComposite(FTySign); + Value *V = getVal(PFTy, yyvsp[-9].ValIDVal); // Get the function we're calling... + BasicBlock *Normal = getBBVal(yyvsp[-3].ValIDVal); + BasicBlock *Except = getBBVal(yyvsp[0].ValIDVal); // Create the call node... - if (!(yyvsp[(6) - (13)].ValueList)) { // Has no arguments? - (yyval.TermInstVal).TI = new InvokeInst(V, Normal, Except, 0, 0); + if (!yyvsp[-7].ValueList) { // Has no arguments? + std::vector Args; + yyval.TermInstVal.TI = new InvokeInst(V, Normal, Except, Args.begin(), Args.end()); } else { // Has arguments? // Loop through FunctionType's arguments and ensure they are specified // correctly! // FunctionType::param_iterator I = Ty->param_begin(); FunctionType::param_iterator E = Ty->param_end(); - std::vector::iterator ArgI = (yyvsp[(6) - (13)].ValueList)->begin(), ArgE = (yyvsp[(6) - (13)].ValueList)->end(); + std::vector::iterator ArgI = yyvsp[-7].ValueList->begin(), ArgE = yyvsp[-7].ValueList->end(); std::vector Args; for (; ArgI != ArgE && I != E; ++ArgI, ++I) { @@ -6156,71 +5819,71 @@ if (I != E || (ArgI != ArgE && !Ty->isVarArg())) error("Invalid number of parameters detected"); - (yyval.TermInstVal).TI = new InvokeInst(V, Normal, Except, &Args[0], Args.size()); + yyval.TermInstVal.TI = new InvokeInst(V, Normal, Except, Args.begin(), Args.end()); } - cast((yyval.TermInstVal).TI)->setCallingConv(upgradeCallingConv((yyvsp[(2) - (13)].UIntVal))); - delete (yyvsp[(3) - (13)].TypeVal).PAT; - delete (yyvsp[(6) - (13)].ValueList); + cast(yyval.TermInstVal.TI)->setCallingConv(upgradeCallingConv(yyvsp[-11].UIntVal)); + delete yyvsp[-10].TypeVal.PAT; + delete yyvsp[-7].ValueList; lastCallingConv = OldCallingConv::C; ;} break; case 268: -#line 3371 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 3374 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - (yyval.TermInstVal).TI = new UnwindInst(); - (yyval.TermInstVal).S.makeSignless(); + yyval.TermInstVal.TI = new UnwindInst(); + yyval.TermInstVal.S.makeSignless(); ;} break; case 269: -#line 3375 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 3378 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - (yyval.TermInstVal).TI = new UnreachableInst(); - (yyval.TermInstVal).S.makeSignless(); + yyval.TermInstVal.TI = new UnreachableInst(); + yyval.TermInstVal.S.makeSignless(); ;} break; case 270: -#line 3382 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 3385 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - (yyval.JumpTable) = (yyvsp[(1) - (6)].JumpTable); - (yyvsp[(3) - (6)].ValIDVal).S.copy((yyvsp[(2) - (6)].PrimType).S); - Constant *V = cast(getExistingValue((yyvsp[(2) - (6)].PrimType).T, (yyvsp[(3) - (6)].ValIDVal))); + yyval.JumpTable = yyvsp[-5].JumpTable; + yyvsp[-3].ValIDVal.S.copy(yyvsp[-4].PrimType.S); + Constant *V = cast(getExistingValue(yyvsp[-4].PrimType.T, yyvsp[-3].ValIDVal)); if (V == 0) error("May only switch on a constant pool value"); - (yyvsp[(6) - (6)].ValIDVal).S.makeSignless(); - BasicBlock* tmpBB = getBBVal((yyvsp[(6) - (6)].ValIDVal)); - (yyval.JumpTable)->push_back(std::make_pair(V, tmpBB)); + yyvsp[0].ValIDVal.S.makeSignless(); + BasicBlock* tmpBB = getBBVal(yyvsp[0].ValIDVal); + yyval.JumpTable->push_back(std::make_pair(V, tmpBB)); ;} break; case 271: -#line 3394 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 3397 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - (yyval.JumpTable) = new std::vector >(); - (yyvsp[(2) - (5)].ValIDVal).S.copy((yyvsp[(1) - (5)].PrimType).S); - Constant *V = cast(getExistingValue((yyvsp[(1) - (5)].PrimType).T, (yyvsp[(2) - (5)].ValIDVal))); + yyval.JumpTable = new std::vector >(); + yyvsp[-3].ValIDVal.S.copy(yyvsp[-4].PrimType.S); + Constant *V = cast(getExistingValue(yyvsp[-4].PrimType.T, yyvsp[-3].ValIDVal)); if (V == 0) error("May only switch on a constant pool value"); - (yyvsp[(5) - (5)].ValIDVal).S.makeSignless(); - BasicBlock* tmpBB = getBBVal((yyvsp[(5) - (5)].ValIDVal)); - (yyval.JumpTable)->push_back(std::make_pair(V, tmpBB)); + yyvsp[0].ValIDVal.S.makeSignless(); + BasicBlock* tmpBB = getBBVal(yyvsp[0].ValIDVal); + yyval.JumpTable->push_back(std::make_pair(V, tmpBB)); ;} break; case 272: -#line 3409 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 3412 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { bool omit = false; - if ((yyvsp[(1) - (2)].StrVal)) - if (BitCastInst *BCI = dyn_cast((yyvsp[(2) - (2)].InstVal).I)) + if (yyvsp[-1].StrVal) + if (BitCastInst *BCI = dyn_cast(yyvsp[0].InstVal.I)) if (BCI->getSrcTy() == BCI->getDestTy() && - BCI->getOperand(0)->getName() == (yyvsp[(1) - (2)].StrVal)) + BCI->getOperand(0)->getName() == yyvsp[-1].StrVal) // This is a useless bit cast causing a name redefinition. It is // a bit cast from a type to the same type of an operand with the // same name as the name we would give this instruction. Since this @@ -6235,258 +5898,258 @@ // The bitcast is clearly useless so we omit it. omit = true; if (omit) { - (yyval.InstVal).I = 0; - (yyval.InstVal).S.makeSignless(); + yyval.InstVal.I = 0; + yyval.InstVal.S.makeSignless(); } else { - ValueInfo VI; VI.V = (yyvsp[(2) - (2)].InstVal).I; VI.S.copy((yyvsp[(2) - (2)].InstVal).S); - setValueName(VI, (yyvsp[(1) - (2)].StrVal)); - InsertValue((yyvsp[(2) - (2)].InstVal).I); - (yyval.InstVal) = (yyvsp[(2) - (2)].InstVal); + ValueInfo VI; VI.V = yyvsp[0].InstVal.I; VI.S.copy(yyvsp[0].InstVal.S); + setValueName(VI, yyvsp[-1].StrVal); + InsertValue(yyvsp[0].InstVal.I); + yyval.InstVal = yyvsp[0].InstVal; } ;} break; case 273: -#line 3439 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 3442 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { // Used for PHI nodes - (yyval.PHIList).P = new std::list >(); - (yyval.PHIList).S.copy((yyvsp[(1) - (6)].TypeVal).S); - (yyvsp[(3) - (6)].ValIDVal).S.copy((yyvsp[(1) - (6)].TypeVal).S); - Value* tmpVal = getVal((yyvsp[(1) - (6)].TypeVal).PAT->get(), (yyvsp[(3) - (6)].ValIDVal)); - (yyvsp[(5) - (6)].ValIDVal).S.makeSignless(); - BasicBlock* tmpBB = getBBVal((yyvsp[(5) - (6)].ValIDVal)); - (yyval.PHIList).P->push_back(std::make_pair(tmpVal, tmpBB)); - delete (yyvsp[(1) - (6)].TypeVal).PAT; + yyval.PHIList.P = new std::list >(); + yyval.PHIList.S.copy(yyvsp[-5].TypeVal.S); + yyvsp[-3].ValIDVal.S.copy(yyvsp[-5].TypeVal.S); + Value* tmpVal = getVal(yyvsp[-5].TypeVal.PAT->get(), yyvsp[-3].ValIDVal); + yyvsp[-1].ValIDVal.S.makeSignless(); + BasicBlock* tmpBB = getBBVal(yyvsp[-1].ValIDVal); + yyval.PHIList.P->push_back(std::make_pair(tmpVal, tmpBB)); + delete yyvsp[-5].TypeVal.PAT; ;} break; case 274: -#line 3449 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 3452 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - (yyval.PHIList) = (yyvsp[(1) - (7)].PHIList); - (yyvsp[(4) - (7)].ValIDVal).S.copy((yyvsp[(1) - (7)].PHIList).S); - Value* tmpVal = getVal((yyvsp[(1) - (7)].PHIList).P->front().first->getType(), (yyvsp[(4) - (7)].ValIDVal)); - (yyvsp[(6) - (7)].ValIDVal).S.makeSignless(); - BasicBlock* tmpBB = getBBVal((yyvsp[(6) - (7)].ValIDVal)); - (yyvsp[(1) - (7)].PHIList).P->push_back(std::make_pair(tmpVal, tmpBB)); + yyval.PHIList = yyvsp[-6].PHIList; + yyvsp[-3].ValIDVal.S.copy(yyvsp[-6].PHIList.S); + Value* tmpVal = getVal(yyvsp[-6].PHIList.P->front().first->getType(), yyvsp[-3].ValIDVal); + yyvsp[-1].ValIDVal.S.makeSignless(); + BasicBlock* tmpBB = getBBVal(yyvsp[-1].ValIDVal); + yyvsp[-6].PHIList.P->push_back(std::make_pair(tmpVal, tmpBB)); ;} break; case 275: -#line 3459 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 3462 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { // Used for call statements, and memory insts... - (yyval.ValueList) = new std::vector(); - (yyval.ValueList)->push_back((yyvsp[(1) - (1)].ValueVal)); + yyval.ValueList = new std::vector(); + yyval.ValueList->push_back(yyvsp[0].ValueVal); ;} break; case 276: -#line 3463 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 3466 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - (yyval.ValueList) = (yyvsp[(1) - (3)].ValueList); - (yyvsp[(1) - (3)].ValueList)->push_back((yyvsp[(3) - (3)].ValueVal)); + yyval.ValueList = yyvsp[-2].ValueList; + yyvsp[-2].ValueList->push_back(yyvsp[0].ValueVal); ;} break; case 278: -#line 3471 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.ValueList) = 0; ;} +#line 3474 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" + { yyval.ValueList = 0; ;} break; case 279: -#line 3475 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 3478 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - (yyval.BoolVal) = true; + yyval.BoolVal = true; ;} break; case 280: -#line 3478 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 3481 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - (yyval.BoolVal) = false; + yyval.BoolVal = false; ;} break; case 281: -#line 3484 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 3487 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - (yyvsp[(3) - (5)].ValIDVal).S.copy((yyvsp[(2) - (5)].TypeVal).S); - (yyvsp[(5) - (5)].ValIDVal).S.copy((yyvsp[(2) - (5)].TypeVal).S); - const Type* Ty = (yyvsp[(2) - (5)].TypeVal).PAT->get(); + yyvsp[-2].ValIDVal.S.copy(yyvsp[-3].TypeVal.S); + yyvsp[0].ValIDVal.S.copy(yyvsp[-3].TypeVal.S); + const Type* Ty = yyvsp[-3].TypeVal.PAT->get(); if (!Ty->isInteger() && !Ty->isFloatingPoint() && !isa(Ty)) error("Arithmetic operator requires integer, FP, or packed operands"); if (isa(Ty) && - ((yyvsp[(1) - (5)].BinaryOpVal) == URemOp || (yyvsp[(1) - (5)].BinaryOpVal) == SRemOp || (yyvsp[(1) - (5)].BinaryOpVal) == FRemOp || (yyvsp[(1) - (5)].BinaryOpVal) == RemOp)) + (yyvsp[-4].BinaryOpVal == URemOp || yyvsp[-4].BinaryOpVal == SRemOp || yyvsp[-4].BinaryOpVal == FRemOp || yyvsp[-4].BinaryOpVal == RemOp)) error("Remainder not supported on vector types"); // Upgrade the opcode from obsolete versions before we do anything with it. - Instruction::BinaryOps Opcode = getBinaryOp((yyvsp[(1) - (5)].BinaryOpVal), Ty, (yyvsp[(2) - (5)].TypeVal).S); - Value* val1 = getVal(Ty, (yyvsp[(3) - (5)].ValIDVal)); - Value* val2 = getVal(Ty, (yyvsp[(5) - (5)].ValIDVal)); - (yyval.InstVal).I = BinaryOperator::create(Opcode, val1, val2); - if ((yyval.InstVal).I == 0) + Instruction::BinaryOps Opcode = getBinaryOp(yyvsp[-4].BinaryOpVal, Ty, yyvsp[-3].TypeVal.S); + Value* val1 = getVal(Ty, yyvsp[-2].ValIDVal); + Value* val2 = getVal(Ty, yyvsp[0].ValIDVal); + yyval.InstVal.I = BinaryOperator::create(Opcode, val1, val2); + if (yyval.InstVal.I == 0) error("binary operator returned null"); - (yyval.InstVal).S.copy((yyvsp[(2) - (5)].TypeVal).S); - delete (yyvsp[(2) - (5)].TypeVal).PAT; + yyval.InstVal.S.copy(yyvsp[-3].TypeVal.S); + delete yyvsp[-3].TypeVal.PAT; ;} break; case 282: -#line 3503 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 3506 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - (yyvsp[(3) - (5)].ValIDVal).S.copy((yyvsp[(2) - (5)].TypeVal).S); - (yyvsp[(5) - (5)].ValIDVal).S.copy((yyvsp[(2) - (5)].TypeVal).S); - const Type *Ty = (yyvsp[(2) - (5)].TypeVal).PAT->get(); + yyvsp[-2].ValIDVal.S.copy(yyvsp[-3].TypeVal.S); + yyvsp[0].ValIDVal.S.copy(yyvsp[-3].TypeVal.S); + const Type *Ty = yyvsp[-3].TypeVal.PAT->get(); if (!Ty->isInteger()) { if (!isa(Ty) || !cast(Ty)->getElementType()->isInteger()) error("Logical operator requires integral operands"); } - Instruction::BinaryOps Opcode = getBinaryOp((yyvsp[(1) - (5)].BinaryOpVal), Ty, (yyvsp[(2) - (5)].TypeVal).S); - Value* tmpVal1 = getVal(Ty, (yyvsp[(3) - (5)].ValIDVal)); - Value* tmpVal2 = getVal(Ty, (yyvsp[(5) - (5)].ValIDVal)); - (yyval.InstVal).I = BinaryOperator::create(Opcode, tmpVal1, tmpVal2); - if ((yyval.InstVal).I == 0) + Instruction::BinaryOps Opcode = getBinaryOp(yyvsp[-4].BinaryOpVal, Ty, yyvsp[-3].TypeVal.S); + Value* tmpVal1 = getVal(Ty, yyvsp[-2].ValIDVal); + Value* tmpVal2 = getVal(Ty, yyvsp[0].ValIDVal); + yyval.InstVal.I = BinaryOperator::create(Opcode, tmpVal1, tmpVal2); + if (yyval.InstVal.I == 0) error("binary operator returned null"); - (yyval.InstVal).S.copy((yyvsp[(2) - (5)].TypeVal).S); - delete (yyvsp[(2) - (5)].TypeVal).PAT; + yyval.InstVal.S.copy(yyvsp[-3].TypeVal.S); + delete yyvsp[-3].TypeVal.PAT; ;} break; case 283: -#line 3521 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 3524 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - (yyvsp[(3) - (5)].ValIDVal).S.copy((yyvsp[(2) - (5)].TypeVal).S); - (yyvsp[(5) - (5)].ValIDVal).S.copy((yyvsp[(2) - (5)].TypeVal).S); - const Type* Ty = (yyvsp[(2) - (5)].TypeVal).PAT->get(); + yyvsp[-2].ValIDVal.S.copy(yyvsp[-3].TypeVal.S); + yyvsp[0].ValIDVal.S.copy(yyvsp[-3].TypeVal.S); + const Type* Ty = yyvsp[-3].TypeVal.PAT->get(); if(isa(Ty)) error("VectorTypes currently not supported in setcc instructions"); unsigned short pred; - Instruction::OtherOps Opcode = getCompareOp((yyvsp[(1) - (5)].BinaryOpVal), pred, Ty, (yyvsp[(2) - (5)].TypeVal).S); - Value* tmpVal1 = getVal(Ty, (yyvsp[(3) - (5)].ValIDVal)); - Value* tmpVal2 = getVal(Ty, (yyvsp[(5) - (5)].ValIDVal)); - (yyval.InstVal).I = CmpInst::create(Opcode, pred, tmpVal1, tmpVal2); - if ((yyval.InstVal).I == 0) + Instruction::OtherOps Opcode = getCompareOp(yyvsp[-4].BinaryOpVal, pred, Ty, yyvsp[-3].TypeVal.S); + Value* tmpVal1 = getVal(Ty, yyvsp[-2].ValIDVal); + Value* tmpVal2 = getVal(Ty, yyvsp[0].ValIDVal); + yyval.InstVal.I = CmpInst::create(Opcode, pred, tmpVal1, tmpVal2); + if (yyval.InstVal.I == 0) error("binary operator returned null"); - (yyval.InstVal).S.makeUnsigned(); - delete (yyvsp[(2) - (5)].TypeVal).PAT; + yyval.InstVal.S.makeUnsigned(); + delete yyvsp[-3].TypeVal.PAT; ;} break; case 284: -#line 3537 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 3540 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - (yyvsp[(4) - (6)].ValIDVal).S.copy((yyvsp[(3) - (6)].TypeVal).S); - (yyvsp[(6) - (6)].ValIDVal).S.copy((yyvsp[(3) - (6)].TypeVal).S); - const Type *Ty = (yyvsp[(3) - (6)].TypeVal).PAT->get(); + yyvsp[-2].ValIDVal.S.copy(yyvsp[-3].TypeVal.S); + yyvsp[0].ValIDVal.S.copy(yyvsp[-3].TypeVal.S); + const Type *Ty = yyvsp[-3].TypeVal.PAT->get(); if (isa(Ty)) error("VectorTypes currently not supported in icmp instructions"); else if (!Ty->isInteger() && !isa(Ty)) error("icmp requires integer or pointer typed operands"); - Value* tmpVal1 = getVal(Ty, (yyvsp[(4) - (6)].ValIDVal)); - Value* tmpVal2 = getVal(Ty, (yyvsp[(6) - (6)].ValIDVal)); - (yyval.InstVal).I = new ICmpInst((yyvsp[(2) - (6)].IPred), tmpVal1, tmpVal2); - (yyval.InstVal).S.makeUnsigned(); - delete (yyvsp[(3) - (6)].TypeVal).PAT; + Value* tmpVal1 = getVal(Ty, yyvsp[-2].ValIDVal); + Value* tmpVal2 = getVal(Ty, yyvsp[0].ValIDVal); + yyval.InstVal.I = new ICmpInst(yyvsp[-4].IPred, tmpVal1, tmpVal2); + yyval.InstVal.S.makeUnsigned(); + delete yyvsp[-3].TypeVal.PAT; ;} break; case 285: -#line 3551 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 3554 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - (yyvsp[(4) - (6)].ValIDVal).S.copy((yyvsp[(3) - (6)].TypeVal).S); - (yyvsp[(6) - (6)].ValIDVal).S.copy((yyvsp[(3) - (6)].TypeVal).S); - const Type *Ty = (yyvsp[(3) - (6)].TypeVal).PAT->get(); + yyvsp[-2].ValIDVal.S.copy(yyvsp[-3].TypeVal.S); + yyvsp[0].ValIDVal.S.copy(yyvsp[-3].TypeVal.S); + const Type *Ty = yyvsp[-3].TypeVal.PAT->get(); if (isa(Ty)) error("VectorTypes currently not supported in fcmp instructions"); else if (!Ty->isFloatingPoint()) error("fcmp instruction requires floating point operands"); - Value* tmpVal1 = getVal(Ty, (yyvsp[(4) - (6)].ValIDVal)); - Value* tmpVal2 = getVal(Ty, (yyvsp[(6) - (6)].ValIDVal)); - (yyval.InstVal).I = new FCmpInst((yyvsp[(2) - (6)].FPred), tmpVal1, tmpVal2); - (yyval.InstVal).S.makeUnsigned(); - delete (yyvsp[(3) - (6)].TypeVal).PAT; + Value* tmpVal1 = getVal(Ty, yyvsp[-2].ValIDVal); + Value* tmpVal2 = getVal(Ty, yyvsp[0].ValIDVal); + yyval.InstVal.I = new FCmpInst(yyvsp[-4].FPred, tmpVal1, tmpVal2); + yyval.InstVal.S.makeUnsigned(); + delete yyvsp[-3].TypeVal.PAT; ;} break; case 286: -#line 3565 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 3568 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { warning("Use of obsolete 'not' instruction: Replacing with 'xor"); - const Type *Ty = (yyvsp[(2) - (2)].ValueVal).V->getType(); + const Type *Ty = yyvsp[0].ValueVal.V->getType(); Value *Ones = ConstantInt::getAllOnesValue(Ty); if (Ones == 0) error("Expected integral type for not instruction"); - (yyval.InstVal).I = BinaryOperator::create(Instruction::Xor, (yyvsp[(2) - (2)].ValueVal).V, Ones); - if ((yyval.InstVal).I == 0) + yyval.InstVal.I = BinaryOperator::create(Instruction::Xor, yyvsp[0].ValueVal.V, Ones); + if (yyval.InstVal.I == 0) error("Could not create a xor instruction"); - (yyval.InstVal).S.copy((yyvsp[(2) - (2)].ValueVal).S); + yyval.InstVal.S.copy(yyvsp[0].ValueVal.S); ;} break; case 287: -#line 3576 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 3579 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - if (!(yyvsp[(4) - (4)].ValueVal).V->getType()->isInteger() || - cast((yyvsp[(4) - (4)].ValueVal).V->getType())->getBitWidth() != 8) + if (!yyvsp[0].ValueVal.V->getType()->isInteger() || + cast(yyvsp[0].ValueVal.V->getType())->getBitWidth() != 8) error("Shift amount must be int8"); - const Type* Ty = (yyvsp[(2) - (4)].ValueVal).V->getType(); + const Type* Ty = yyvsp[-2].ValueVal.V->getType(); if (!Ty->isInteger()) error("Shift constant expression requires integer operand"); Value* ShiftAmt = 0; if (cast(Ty)->getBitWidth() > Type::Int8Ty->getBitWidth()) - if (Constant *C = dyn_cast((yyvsp[(4) - (4)].ValueVal).V)) + if (Constant *C = dyn_cast(yyvsp[0].ValueVal.V)) ShiftAmt = ConstantExpr::getZExt(C, Ty); else - ShiftAmt = new ZExtInst((yyvsp[(4) - (4)].ValueVal).V, Ty, makeNameUnique("shift"), CurBB); + ShiftAmt = new ZExtInst(yyvsp[0].ValueVal.V, Ty, makeNameUnique("shift"), CurBB); else - ShiftAmt = (yyvsp[(4) - (4)].ValueVal).V; - (yyval.InstVal).I = BinaryOperator::create(getBinaryOp((yyvsp[(1) - (4)].BinaryOpVal), Ty, (yyvsp[(2) - (4)].ValueVal).S), (yyvsp[(2) - (4)].ValueVal).V, ShiftAmt); - (yyval.InstVal).S.copy((yyvsp[(2) - (4)].ValueVal).S); + ShiftAmt = yyvsp[0].ValueVal.V; + yyval.InstVal.I = BinaryOperator::create(getBinaryOp(yyvsp[-3].BinaryOpVal, Ty, yyvsp[-2].ValueVal.S), yyvsp[-2].ValueVal.V, ShiftAmt); + yyval.InstVal.S.copy(yyvsp[-2].ValueVal.S); ;} break; case 288: -#line 3594 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 3597 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - const Type *DstTy = (yyvsp[(4) - (4)].TypeVal).PAT->get(); + const Type *DstTy = yyvsp[0].TypeVal.PAT->get(); if (!DstTy->isFirstClassType()) error("cast instruction to a non-primitive type: '" + DstTy->getDescription() + "'"); - (yyval.InstVal).I = cast(getCast((yyvsp[(1) - (4)].CastOpVal), (yyvsp[(2) - (4)].ValueVal).V, (yyvsp[(2) - (4)].ValueVal).S, DstTy, (yyvsp[(4) - (4)].TypeVal).S, true)); - (yyval.InstVal).S.copy((yyvsp[(4) - (4)].TypeVal).S); - delete (yyvsp[(4) - (4)].TypeVal).PAT; + yyval.InstVal.I = cast(getCast(yyvsp[-3].CastOpVal, yyvsp[-2].ValueVal.V, yyvsp[-2].ValueVal.S, DstTy, yyvsp[0].TypeVal.S, true)); + yyval.InstVal.S.copy(yyvsp[0].TypeVal.S); + delete yyvsp[0].TypeVal.PAT; ;} break; case 289: -#line 3603 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 3606 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - if (!(yyvsp[(2) - (6)].ValueVal).V->getType()->isInteger() || - cast((yyvsp[(2) - (6)].ValueVal).V->getType())->getBitWidth() != 1) + if (!yyvsp[-4].ValueVal.V->getType()->isInteger() || + cast(yyvsp[-4].ValueVal.V->getType())->getBitWidth() != 1) error("select condition must be bool"); - if ((yyvsp[(4) - (6)].ValueVal).V->getType() != (yyvsp[(6) - (6)].ValueVal).V->getType()) + if (yyvsp[-2].ValueVal.V->getType() != yyvsp[0].ValueVal.V->getType()) error("select value types should match"); - (yyval.InstVal).I = new SelectInst((yyvsp[(2) - (6)].ValueVal).V, (yyvsp[(4) - (6)].ValueVal).V, (yyvsp[(6) - (6)].ValueVal).V); - (yyval.InstVal).S.copy((yyvsp[(4) - (6)].ValueVal).S); + yyval.InstVal.I = new SelectInst(yyvsp[-4].ValueVal.V, yyvsp[-2].ValueVal.V, yyvsp[0].ValueVal.V); + yyval.InstVal.S.copy(yyvsp[-2].ValueVal.S); ;} break; case 290: -#line 3612 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 3615 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - const Type *Ty = (yyvsp[(4) - (4)].TypeVal).PAT->get(); + const Type *Ty = yyvsp[0].TypeVal.PAT->get(); NewVarArgs = true; - (yyval.InstVal).I = new VAArgInst((yyvsp[(2) - (4)].ValueVal).V, Ty); - (yyval.InstVal).S.copy((yyvsp[(4) - (4)].TypeVal).S); - delete (yyvsp[(4) - (4)].TypeVal).PAT; + yyval.InstVal.I = new VAArgInst(yyvsp[-2].ValueVal.V, Ty); + yyval.InstVal.S.copy(yyvsp[0].TypeVal.S); + delete yyvsp[0].TypeVal.PAT; ;} break; case 291: -#line 3619 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 3622 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - const Type* ArgTy = (yyvsp[(2) - (4)].ValueVal).V->getType(); - const Type* DstTy = (yyvsp[(4) - (4)].TypeVal).PAT->get(); + const Type* ArgTy = yyvsp[-2].ValueVal.V->getType(); + const Type* DstTy = yyvsp[0].TypeVal.PAT->get(); ObsoleteVarArgs = true; Function* NF = cast(CurModule.CurrentModule-> getOrInsertFunction("llvm.va_copy", ArgTy, ArgTy, (Type *)0)); @@ -6498,20 +6161,20 @@ //b = vaarg foo, t AllocaInst* foo = new AllocaInst(ArgTy, 0, "vaarg.fix"); CurBB->getInstList().push_back(foo); - CallInst* bar = new CallInst(NF, (yyvsp[(2) - (4)].ValueVal).V); + CallInst* bar = new CallInst(NF, yyvsp[-2].ValueVal.V); CurBB->getInstList().push_back(bar); CurBB->getInstList().push_back(new StoreInst(bar, foo)); - (yyval.InstVal).I = new VAArgInst(foo, DstTy); - (yyval.InstVal).S.copy((yyvsp[(4) - (4)].TypeVal).S); - delete (yyvsp[(4) - (4)].TypeVal).PAT; + yyval.InstVal.I = new VAArgInst(foo, DstTy); + yyval.InstVal.S.copy(yyvsp[0].TypeVal.S); + delete yyvsp[0].TypeVal.PAT; ;} break; case 292: -#line 3640 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 3643 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - const Type* ArgTy = (yyvsp[(2) - (4)].ValueVal).V->getType(); - const Type* DstTy = (yyvsp[(4) - (4)].TypeVal).PAT->get(); + const Type* ArgTy = yyvsp[-2].ValueVal.V->getType(); + const Type* DstTy = yyvsp[0].TypeVal.PAT->get(); ObsoleteVarArgs = true; Function* NF = cast(CurModule.CurrentModule-> getOrInsertFunction("llvm.va_copy", ArgTy, ArgTy, (Type *)0)); @@ -6524,81 +6187,81 @@ //b = load foo AllocaInst* foo = new AllocaInst(ArgTy, 0, "vanext.fix"); CurBB->getInstList().push_back(foo); - CallInst* bar = new CallInst(NF, (yyvsp[(2) - (4)].ValueVal).V); + CallInst* bar = new CallInst(NF, yyvsp[-2].ValueVal.V); CurBB->getInstList().push_back(bar); CurBB->getInstList().push_back(new StoreInst(bar, foo)); Instruction* tmp = new VAArgInst(foo, DstTy); CurBB->getInstList().push_back(tmp); - (yyval.InstVal).I = new LoadInst(foo); - (yyval.InstVal).S.copy((yyvsp[(4) - (4)].TypeVal).S); - delete (yyvsp[(4) - (4)].TypeVal).PAT; + yyval.InstVal.I = new LoadInst(foo); + yyval.InstVal.S.copy(yyvsp[0].TypeVal.S); + delete yyvsp[0].TypeVal.PAT; ;} break; case 293: -#line 3664 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 3667 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - if (!ExtractElementInst::isValidOperands((yyvsp[(2) - (4)].ValueVal).V, (yyvsp[(4) - (4)].ValueVal).V)) + if (!ExtractElementInst::isValidOperands(yyvsp[-2].ValueVal.V, yyvsp[0].ValueVal.V)) error("Invalid extractelement operands"); - (yyval.InstVal).I = new ExtractElementInst((yyvsp[(2) - (4)].ValueVal).V, (yyvsp[(4) - (4)].ValueVal).V); - (yyval.InstVal).S.copy((yyvsp[(2) - (4)].ValueVal).S.get(0)); + yyval.InstVal.I = new ExtractElementInst(yyvsp[-2].ValueVal.V, yyvsp[0].ValueVal.V); + yyval.InstVal.S.copy(yyvsp[-2].ValueVal.S.get(0)); ;} break; case 294: -#line 3670 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 3673 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - if (!InsertElementInst::isValidOperands((yyvsp[(2) - (6)].ValueVal).V, (yyvsp[(4) - (6)].ValueVal).V, (yyvsp[(6) - (6)].ValueVal).V)) + if (!InsertElementInst::isValidOperands(yyvsp[-4].ValueVal.V, yyvsp[-2].ValueVal.V, yyvsp[0].ValueVal.V)) error("Invalid insertelement operands"); - (yyval.InstVal).I = new InsertElementInst((yyvsp[(2) - (6)].ValueVal).V, (yyvsp[(4) - (6)].ValueVal).V, (yyvsp[(6) - (6)].ValueVal).V); - (yyval.InstVal).S.copy((yyvsp[(2) - (6)].ValueVal).S); + yyval.InstVal.I = new InsertElementInst(yyvsp[-4].ValueVal.V, yyvsp[-2].ValueVal.V, yyvsp[0].ValueVal.V); + yyval.InstVal.S.copy(yyvsp[-4].ValueVal.S); ;} break; case 295: -#line 3676 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 3679 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - if (!ShuffleVectorInst::isValidOperands((yyvsp[(2) - (6)].ValueVal).V, (yyvsp[(4) - (6)].ValueVal).V, (yyvsp[(6) - (6)].ValueVal).V)) + if (!ShuffleVectorInst::isValidOperands(yyvsp[-4].ValueVal.V, yyvsp[-2].ValueVal.V, yyvsp[0].ValueVal.V)) error("Invalid shufflevector operands"); - (yyval.InstVal).I = new ShuffleVectorInst((yyvsp[(2) - (6)].ValueVal).V, (yyvsp[(4) - (6)].ValueVal).V, (yyvsp[(6) - (6)].ValueVal).V); - (yyval.InstVal).S.copy((yyvsp[(2) - (6)].ValueVal).S); + yyval.InstVal.I = new ShuffleVectorInst(yyvsp[-4].ValueVal.V, yyvsp[-2].ValueVal.V, yyvsp[0].ValueVal.V); + yyval.InstVal.S.copy(yyvsp[-4].ValueVal.S); ;} break; case 296: -#line 3682 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 3685 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - const Type *Ty = (yyvsp[(2) - (2)].PHIList).P->front().first->getType(); + const Type *Ty = yyvsp[0].PHIList.P->front().first->getType(); if (!Ty->isFirstClassType()) error("PHI node operands must be of first class type"); PHINode *PHI = new PHINode(Ty); - PHI->reserveOperandSpace((yyvsp[(2) - (2)].PHIList).P->size()); - while ((yyvsp[(2) - (2)].PHIList).P->begin() != (yyvsp[(2) - (2)].PHIList).P->end()) { - if ((yyvsp[(2) - (2)].PHIList).P->front().first->getType() != Ty) + PHI->reserveOperandSpace(yyvsp[0].PHIList.P->size()); + while (yyvsp[0].PHIList.P->begin() != yyvsp[0].PHIList.P->end()) { + if (yyvsp[0].PHIList.P->front().first->getType() != Ty) error("All elements of a PHI node must be of the same type"); - PHI->addIncoming((yyvsp[(2) - (2)].PHIList).P->front().first, (yyvsp[(2) - (2)].PHIList).P->front().second); - (yyvsp[(2) - (2)].PHIList).P->pop_front(); + PHI->addIncoming(yyvsp[0].PHIList.P->front().first, yyvsp[0].PHIList.P->front().second); + yyvsp[0].PHIList.P->pop_front(); } - (yyval.InstVal).I = PHI; - (yyval.InstVal).S.copy((yyvsp[(2) - (2)].PHIList).S); - delete (yyvsp[(2) - (2)].PHIList).P; // Free the list... + yyval.InstVal.I = PHI; + yyval.InstVal.S.copy(yyvsp[0].PHIList.S); + delete yyvsp[0].PHIList.P; // Free the list... ;} break; case 297: -#line 3698 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 3701 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { // Handle the short call syntax const PointerType *PFTy; const FunctionType *FTy; Signedness FTySign; - if (!(PFTy = dyn_cast((yyvsp[(3) - (7)].TypeVal).PAT->get())) || + if (!(PFTy = dyn_cast(yyvsp[-4].TypeVal.PAT->get())) || !(FTy = dyn_cast(PFTy->getElementType()))) { // Pull out the types of all of the arguments... std::vector ParamTypes; - FTySign.makeComposite((yyvsp[(3) - (7)].TypeVal).S); - if ((yyvsp[(6) - (7)].ValueList)) { - for (std::vector::iterator I = (yyvsp[(6) - (7)].ValueList)->begin(), E = (yyvsp[(6) - (7)].ValueList)->end(); + FTySign.makeComposite(yyvsp[-4].TypeVal.S); + if (yyvsp[-1].ValueList) { + for (std::vector::iterator I = yyvsp[-1].ValueList->begin(), E = yyvsp[-1].ValueList->end(); I != E; ++I) { ParamTypes.push_back((*I).V->getType()); FTySign.add(I->S); @@ -6608,13 +6271,13 @@ bool isVarArg = ParamTypes.size() && ParamTypes.back() == Type::VoidTy; if (isVarArg) ParamTypes.pop_back(); - const Type *RetTy = (yyvsp[(3) - (7)].TypeVal).PAT->get(); + const Type *RetTy = yyvsp[-4].TypeVal.PAT->get(); if (!RetTy->isFirstClassType() && RetTy != Type::VoidTy) error("Functions cannot return aggregate types"); // Deal with CSRetCC ParamAttrsList *PAL = 0; - if ((yyvsp[(2) - (7)].UIntVal) == OldCallingConv::CSRet) { + if (yyvsp[-5].UIntVal == OldCallingConv::CSRet) { ParamAttrsVector Attrs; ParamAttrsWithIndex PAWI; PAWI.index = 1; PAWI.attrs = ParamAttr::StructRet; // first arg @@ -6624,32 +6287,32 @@ FTy = FunctionType::get(RetTy, ParamTypes, isVarArg, PAL); PFTy = PointerType::get(FTy); - (yyval.InstVal).S.copy((yyvsp[(3) - (7)].TypeVal).S); + yyval.InstVal.S.copy(yyvsp[-4].TypeVal.S); } else { - FTySign = (yyvsp[(3) - (7)].TypeVal).S; + FTySign = yyvsp[-4].TypeVal.S; // Get the signedness of the result type. $3 is the pointer to the // function type so we get the 0th element to extract the function type, // and then the 0th element again to get the result type. - (yyval.InstVal).S.copy((yyvsp[(3) - (7)].TypeVal).S.get(0).get(0)); + yyval.InstVal.S.copy(yyvsp[-4].TypeVal.S.get(0).get(0)); } - (yyvsp[(4) - (7)].ValIDVal).S.makeComposite(FTySign); + yyvsp[-3].ValIDVal.S.makeComposite(FTySign); // First upgrade any intrinsic calls. std::vector Args; - if ((yyvsp[(6) - (7)].ValueList)) - for (unsigned i = 0, e = (yyvsp[(6) - (7)].ValueList)->size(); i < e; ++i) - Args.push_back((*(yyvsp[(6) - (7)].ValueList))[i].V); - Instruction *Inst = upgradeIntrinsicCall(FTy->getReturnType(), (yyvsp[(4) - (7)].ValIDVal), Args); + if (yyvsp[-1].ValueList) + for (unsigned i = 0, e = yyvsp[-1].ValueList->size(); i < e; ++i) + Args.push_back((*yyvsp[-1].ValueList)[i].V); + Instruction *Inst = upgradeIntrinsicCall(FTy->getReturnType(), yyvsp[-3].ValIDVal, Args); // If we got an upgraded intrinsic if (Inst) { - (yyval.InstVal).I = Inst; + yyval.InstVal.I = Inst; } else { // Get the function we're calling - Value *V = getVal(PFTy, (yyvsp[(4) - (7)].ValIDVal)); + Value *V = getVal(PFTy, yyvsp[-3].ValIDVal); // Check the argument values match - if (!(yyvsp[(6) - (7)].ValueList)) { // Has no arguments? + if (!yyvsp[-1].ValueList) { // Has no arguments? // Make sure no arguments is a good thing! if (FTy->getNumParams() != 0) error("No arguments passed to a function that expects arguments"); @@ -6659,7 +6322,7 @@ // FunctionType::param_iterator I = FTy->param_begin(); FunctionType::param_iterator E = FTy->param_end(); - std::vector::iterator ArgI = (yyvsp[(6) - (7)].ValueList)->begin(), ArgE = (yyvsp[(6) - (7)].ValueList)->end(); + std::vector::iterator ArgI = yyvsp[-1].ValueList->begin(), ArgE = yyvsp[-1].ValueList->end(); for (; ArgI != ArgE && I != E; ++ArgI, ++I) if ((*ArgI).V->getType() != *I) @@ -6672,128 +6335,128 @@ // Create the call instruction CallInst *CI = new CallInst(V, Args.begin(), Args.end()); - CI->setTailCall((yyvsp[(1) - (7)].BoolVal)); - CI->setCallingConv(upgradeCallingConv((yyvsp[(2) - (7)].UIntVal))); - (yyval.InstVal).I = CI; + CI->setTailCall(yyvsp[-6].BoolVal); + CI->setCallingConv(upgradeCallingConv(yyvsp[-5].UIntVal)); + yyval.InstVal.I = CI; } - delete (yyvsp[(3) - (7)].TypeVal).PAT; - delete (yyvsp[(6) - (7)].ValueList); + delete yyvsp[-4].TypeVal.PAT; + delete yyvsp[-1].ValueList; lastCallingConv = OldCallingConv::C; ;} break; case 298: -#line 3791 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 3794 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - (yyval.InstVal) = (yyvsp[(1) - (1)].InstVal); + yyval.InstVal = yyvsp[0].InstVal; ;} break; case 299: -#line 3799 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.ValueList) = (yyvsp[(2) - (2)].ValueList); ;} +#line 3802 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" + { yyval.ValueList = yyvsp[0].ValueList; ;} break; case 300: -#line 3800 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.ValueList) = new std::vector(); ;} +#line 3803 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" + { yyval.ValueList = new std::vector(); ;} break; case 301: -#line 3804 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.BoolVal) = true; ;} +#line 3807 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" + { yyval.BoolVal = true; ;} break; case 302: -#line 3805 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.BoolVal) = false; ;} +#line 3808 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" + { yyval.BoolVal = false; ;} break; case 303: -#line 3809 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 3812 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - const Type *Ty = (yyvsp[(2) - (3)].TypeVal).PAT->get(); - (yyval.InstVal).S.makeComposite((yyvsp[(2) - (3)].TypeVal).S); - (yyval.InstVal).I = new MallocInst(Ty, 0, (yyvsp[(3) - (3)].UIntVal)); - delete (yyvsp[(2) - (3)].TypeVal).PAT; + const Type *Ty = yyvsp[-1].TypeVal.PAT->get(); + yyval.InstVal.S.makeComposite(yyvsp[-1].TypeVal.S); + yyval.InstVal.I = new MallocInst(Ty, 0, yyvsp[0].UIntVal); + delete yyvsp[-1].TypeVal.PAT; ;} break; case 304: -#line 3815 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 3818 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - const Type *Ty = (yyvsp[(2) - (6)].TypeVal).PAT->get(); - (yyvsp[(5) - (6)].ValIDVal).S.makeUnsigned(); - (yyval.InstVal).S.makeComposite((yyvsp[(2) - (6)].TypeVal).S); - (yyval.InstVal).I = new MallocInst(Ty, getVal((yyvsp[(4) - (6)].PrimType).T, (yyvsp[(5) - (6)].ValIDVal)), (yyvsp[(6) - (6)].UIntVal)); - delete (yyvsp[(2) - (6)].TypeVal).PAT; + const Type *Ty = yyvsp[-4].TypeVal.PAT->get(); + yyvsp[-1].ValIDVal.S.makeUnsigned(); + yyval.InstVal.S.makeComposite(yyvsp[-4].TypeVal.S); + yyval.InstVal.I = new MallocInst(Ty, getVal(yyvsp[-2].PrimType.T, yyvsp[-1].ValIDVal), yyvsp[0].UIntVal); + delete yyvsp[-4].TypeVal.PAT; ;} break; case 305: -#line 3822 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 3825 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - const Type *Ty = (yyvsp[(2) - (3)].TypeVal).PAT->get(); - (yyval.InstVal).S.makeComposite((yyvsp[(2) - (3)].TypeVal).S); - (yyval.InstVal).I = new AllocaInst(Ty, 0, (yyvsp[(3) - (3)].UIntVal)); - delete (yyvsp[(2) - (3)].TypeVal).PAT; + const Type *Ty = yyvsp[-1].TypeVal.PAT->get(); + yyval.InstVal.S.makeComposite(yyvsp[-1].TypeVal.S); + yyval.InstVal.I = new AllocaInst(Ty, 0, yyvsp[0].UIntVal); + delete yyvsp[-1].TypeVal.PAT; ;} break; case 306: -#line 3828 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 3831 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - const Type *Ty = (yyvsp[(2) - (6)].TypeVal).PAT->get(); - (yyvsp[(5) - (6)].ValIDVal).S.makeUnsigned(); - (yyval.InstVal).S.makeComposite((yyvsp[(4) - (6)].PrimType).S); - (yyval.InstVal).I = new AllocaInst(Ty, getVal((yyvsp[(4) - (6)].PrimType).T, (yyvsp[(5) - (6)].ValIDVal)), (yyvsp[(6) - (6)].UIntVal)); - delete (yyvsp[(2) - (6)].TypeVal).PAT; + const Type *Ty = yyvsp[-4].TypeVal.PAT->get(); + yyvsp[-1].ValIDVal.S.makeUnsigned(); + yyval.InstVal.S.makeComposite(yyvsp[-2].PrimType.S); + yyval.InstVal.I = new AllocaInst(Ty, getVal(yyvsp[-2].PrimType.T, yyvsp[-1].ValIDVal), yyvsp[0].UIntVal); + delete yyvsp[-4].TypeVal.PAT; ;} break; case 307: -#line 3835 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 3838 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - const Type *PTy = (yyvsp[(2) - (2)].ValueVal).V->getType(); + const Type *PTy = yyvsp[0].ValueVal.V->getType(); if (!isa(PTy)) error("Trying to free nonpointer type '" + PTy->getDescription() + "'"); - (yyval.InstVal).I = new FreeInst((yyvsp[(2) - (2)].ValueVal).V); - (yyval.InstVal).S.makeSignless(); + yyval.InstVal.I = new FreeInst(yyvsp[0].ValueVal.V); + yyval.InstVal.S.makeSignless(); ;} break; case 308: -#line 3842 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 3845 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - const Type* Ty = (yyvsp[(3) - (4)].TypeVal).PAT->get(); - (yyvsp[(4) - (4)].ValIDVal).S.copy((yyvsp[(3) - (4)].TypeVal).S); + const Type* Ty = yyvsp[-1].TypeVal.PAT->get(); + yyvsp[0].ValIDVal.S.copy(yyvsp[-1].TypeVal.S); if (!isa(Ty)) error("Can't load from nonpointer type: " + Ty->getDescription()); if (!cast(Ty)->getElementType()->isFirstClassType()) error("Can't load from pointer of non-first-class type: " + Ty->getDescription()); - Value* tmpVal = getVal(Ty, (yyvsp[(4) - (4)].ValIDVal)); - (yyval.InstVal).I = new LoadInst(tmpVal, "", (yyvsp[(1) - (4)].BoolVal)); - (yyval.InstVal).S.copy((yyvsp[(3) - (4)].TypeVal).S.get(0)); - delete (yyvsp[(3) - (4)].TypeVal).PAT; + Value* tmpVal = getVal(Ty, yyvsp[0].ValIDVal); + yyval.InstVal.I = new LoadInst(tmpVal, "", yyvsp[-3].BoolVal); + yyval.InstVal.S.copy(yyvsp[-1].TypeVal.S.get(0)); + delete yyvsp[-1].TypeVal.PAT; ;} break; case 309: -#line 3855 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 3858 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - (yyvsp[(6) - (6)].ValIDVal).S.copy((yyvsp[(5) - (6)].TypeVal).S); - const PointerType *PTy = dyn_cast((yyvsp[(5) - (6)].TypeVal).PAT->get()); + yyvsp[0].ValIDVal.S.copy(yyvsp[-1].TypeVal.S); + const PointerType *PTy = dyn_cast(yyvsp[-1].TypeVal.PAT->get()); if (!PTy) error("Can't store to a nonpointer type: " + - (yyvsp[(5) - (6)].TypeVal).PAT->get()->getDescription()); + yyvsp[-1].TypeVal.PAT->get()->getDescription()); const Type *ElTy = PTy->getElementType(); - Value *StoreVal = (yyvsp[(3) - (6)].ValueVal).V; - Value* tmpVal = getVal(PTy, (yyvsp[(6) - (6)].ValIDVal)); - if (ElTy != (yyvsp[(3) - (6)].ValueVal).V->getType()) { - StoreVal = handleSRetFuncTypeMerge((yyvsp[(3) - (6)].ValueVal).V, ElTy); + Value *StoreVal = yyvsp[-3].ValueVal.V; + Value* tmpVal = getVal(PTy, yyvsp[0].ValIDVal); + if (ElTy != yyvsp[-3].ValueVal.V->getType()) { + StoreVal = handleSRetFuncTypeMerge(yyvsp[-3].ValueVal.V, ElTy); if (!StoreVal) - error("Can't store '" + (yyvsp[(3) - (6)].ValueVal).V->getType()->getDescription() + + error("Can't store '" + yyvsp[-3].ValueVal.V->getType()->getDescription() + "' into space of type '" + ElTy->getDescription() + "'"); else { PTy = PointerType::get(StoreVal->getType()); @@ -6803,41 +6466,42 @@ tmpVal = new BitCastInst(tmpVal, PTy, "upgrd.cast", CurBB); } } - (yyval.InstVal).I = new StoreInst(StoreVal, tmpVal, (yyvsp[(1) - (6)].BoolVal)); - (yyval.InstVal).S.makeSignless(); - delete (yyvsp[(5) - (6)].TypeVal).PAT; + yyval.InstVal.I = new StoreInst(StoreVal, tmpVal, yyvsp[-5].BoolVal); + yyval.InstVal.S.makeSignless(); + delete yyvsp[-1].TypeVal.PAT; ;} break; case 310: -#line 3881 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 3884 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" { - (yyvsp[(3) - (4)].ValIDVal).S.copy((yyvsp[(2) - (4)].TypeVal).S); - const Type* Ty = (yyvsp[(2) - (4)].TypeVal).PAT->get(); + yyvsp[-1].ValIDVal.S.copy(yyvsp[-2].TypeVal.S); + const Type* Ty = yyvsp[-2].TypeVal.PAT->get(); if (!isa(Ty)) error("getelementptr insn requires pointer operand"); std::vector VIndices; - upgradeGEPInstIndices(Ty, (yyvsp[(4) - (4)].ValueList), VIndices); + upgradeGEPInstIndices(Ty, yyvsp[0].ValueList, VIndices); - Value* tmpVal = getVal(Ty, (yyvsp[(3) - (4)].ValIDVal)); - (yyval.InstVal).I = new GetElementPtrInst(tmpVal, &VIndices[0], VIndices.size()); - ValueInfo VI; VI.V = tmpVal; VI.S.copy((yyvsp[(2) - (4)].TypeVal).S); - (yyval.InstVal).S.copy(getElementSign(VI, VIndices)); - delete (yyvsp[(2) - (4)].TypeVal).PAT; - delete (yyvsp[(4) - (4)].ValueList); + Value* tmpVal = getVal(Ty, yyvsp[-1].ValIDVal); + yyval.InstVal.I = new GetElementPtrInst(tmpVal, VIndices.begin(), VIndices.end()); + ValueInfo VI; VI.V = tmpVal; VI.S.copy(yyvsp[-2].TypeVal.S); + yyval.InstVal.S.copy(getElementSign(VI, VIndices)); + delete yyvsp[-2].TypeVal.PAT; + delete yyvsp[0].ValueList; ;} break; -/* Line 1267 of yacc.c. */ -#line 6835 "UpgradeParser.tab.c" - default: break; } - YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); - YYPOPSTACK (yylen); - yylen = 0; +/* Line 993 of yacc.c. */ +#line 6500 "UpgradeParser.tab.c" + + yyvsp -= yylen; + yyssp -= yylen; + + YY_STACK_PRINT (yyss, yyssp); *++yyvsp = yyval; @@ -6866,65 +6530,99 @@ if (!yyerrstatus) { ++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 +#if YYERROR_VERBOSE + yyn = yypact[yystate]; + + if (YYPACT_NINF < yyn && yyn < YYLAST) + { + YYSIZE_T yysize = 0; + int yytype = YYTRANSLATE (yychar); + const char* yyprefix; + char *yymsg; + int yyx; + + /* 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; + int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; + int yycount = 0; + + yyprefix = ", expecting "; + for (yyx = yyxbegin; yyx < yyxend; ++yyx) + if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) { - yymsg = yymsgbuf; - yymsg_alloc = sizeof yymsgbuf; + yysize += yystrlen (yyprefix) + yystrlen (yytname [yyx]); + yycount += 1; + if (yycount == 5) + { + yysize = 0; + break; + } } - } + yysize += (sizeof ("syntax error, unexpected ") + + yystrlen (yytname[yytype])); + yymsg = (char *) YYSTACK_ALLOC (yysize); + if (yymsg != 0) + { + char *yyp = yystpcpy (yymsg, "syntax error, unexpected "); + yyp = yystpcpy (yyp, yytname[yytype]); - 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 + if (yycount < 5) + { + yyprefix = ", expecting "; + for (yyx = yyxbegin; yyx < yyxend; ++yyx) + if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) + { + yyp = yystpcpy (yyp, yyprefix); + yyp = yystpcpy (yyp, yytname[yyx]); + yyprefix = " or "; + } + } + yyerror (yymsg); + YYSTACK_FREE (yymsg); + } + else + yyerror ("syntax error; also virtual memory exhausted"); + } + else +#endif /* YYERROR_VERBOSE */ + yyerror ("syntax error"); } if (yyerrstatus == 3) { - /* If just tried and failed to reuse look-ahead token after an + /* If just tried and failed to reuse lookahead token after an error, discard it. */ if (yychar <= YYEOF) - { - /* Return failure if at end of input. */ + { + /* If at end of input, pop the error token, + then the rest of the stack, then return failure. */ if (yychar == YYEOF) - YYABORT; - } + for (;;) + { + YYPOPSTACK; + if (yyssp == yyss) + YYABORT; + YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp); + yydestruct (yystos[*yyssp], yyvsp); + } + } else { - yydestruct ("Error: discarding", - yytoken, &yylval); + YYDSYMPRINTF ("Error: discarding", yytoken, &yylval, &yylloc); + yydestruct (yytoken, &yylval); yychar = YYEMPTY; + } } - /* Else will try to reuse look-ahead token after shifting the error + /* Else will try to reuse lookahead token after shifting the error token. */ goto yyerrlab1; @@ -6934,17 +6632,15 @@ `---------------------------------------------------*/ 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) +#ifdef __GNUC__ + /* Pacify GCC when the user code never invokes YYERROR and the label + yyerrorlab therefore never appears in user code. */ + if (0) goto yyerrorlab; +#endif - /* Do not reclaim the symbols of the rule which action triggered - this YYERROR. */ - YYPOPSTACK (yylen); - yylen = 0; - YY_STACK_PRINT (yyss, yyssp); + yyvsp -= yylen; + yyssp -= yylen; yystate = *yyssp; goto yyerrlab1; @@ -6973,10 +6669,9 @@ if (yyssp == yyss) YYABORT; - - yydestruct ("Error: popping", - yystos[yystate], yyvsp); - YYPOPSTACK (1); + YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp); + yydestruct (yystos[yystate], yyvsp); + YYPOPSTACK; yystate = *yyssp; YY_STACK_PRINT (yyss, yyssp); } @@ -6984,11 +6679,10 @@ if (yyn == YYFINAL) YYACCEPT; - *++yyvsp = yylval; + YYDPRINTF ((stderr, "Shifting error token, ")); + *++yyvsp = yylval; - /* Shift the error token. */ - YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); yystate = yyn; goto yynewstate; @@ -7009,43 +6703,25 @@ goto yyreturn; #ifndef yyoverflow -/*-------------------------------------------------. -| yyexhaustedlab -- memory exhaustion comes here. | -`-------------------------------------------------*/ -yyexhaustedlab: - yyerror (YY_("memory exhausted")); +/*----------------------------------------------. +| yyoverflowlab -- parser overflow comes here. | +`----------------------------------------------*/ +yyoverflowlab: + yyerror ("parser stack overflow"); 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) - { - 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 - /* Make sure YYID is used. */ - return YYID (yyresult); + return yyresult; } -#line 3899 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" +#line 3902 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" int yyerror(const char *ErrorMsg) { Modified: llvm/trunk/tools/llvm-upgrade/UpgradeParser.h.cvs URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-upgrade/UpgradeParser.h.cvs?rev=41706&r1=41705&r2=41706&view=diff ============================================================================== --- llvm/trunk/tools/llvm-upgrade/UpgradeParser.h.cvs (original) +++ llvm/trunk/tools/llvm-upgrade/UpgradeParser.h.cvs Tue Sep 4 13:46:50 2007 @@ -1,9 +1,7 @@ -/* A Bison parser, made by GNU Bison 2.3. */ +/* A Bison parser, made by GNU Bison 1.875c. */ -/* 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. +/* Skeleton parser for Yacc-like parsing with Bison, + Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003 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 @@ -17,21 +15,13 @@ 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. + Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ - This special exception was added by the Free Software Foundation in - version 2.2 of Bison. */ +/* 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. */ /* Tokens. */ #ifndef YYTOKENTYPE @@ -190,7 +180,6 @@ BITCAST = 406 }; #endif -/* Tokens. */ #define ESINT64VAL 258 #define EUINT64VAL 259 #define SINTVAL 260 @@ -344,10 +333,9 @@ -#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED -typedef union YYSTYPE -#line 1748 "/home/chandlerc/code/compilers/llvm/tools/llvm-upgrade/UpgradeParser.y" -{ +#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED) +#line 1750 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" +typedef union YYSTYPE { llvm::Module *ModuleVal; llvm::Function *FunctionVal; std::pair *ArgVal; @@ -387,10 +375,9 @@ llvm::ICmpInst::Predicate IPred; llvm::FCmpInst::Predicate FPred; llvm::Module::Endianness Endianness; -} -/* Line 1489 of yacc.c. */ -#line 393 "UpgradeParser.tab.h" - YYSTYPE; +} YYSTYPE; +/* Line 1268 of yacc.c. */ +#line 381 "UpgradeParser.tab.h" # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 # define YYSTYPE_IS_TRIVIAL 1 @@ -398,3 +385,5 @@ extern YYSTYPE Upgradelval; + + Modified: llvm/trunk/tools/llvm-upgrade/UpgradeParser.y.cvs URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-upgrade/UpgradeParser.y.cvs?rev=41706&r1=41705&r2=41706&view=diff ============================================================================== --- llvm/trunk/tools/llvm-upgrade/UpgradeParser.y.cvs (original) +++ llvm/trunk/tools/llvm-upgrade/UpgradeParser.y.cvs Tue Sep 4 13:46:50 2007 @@ -1533,8 +1533,8 @@ } } Result.push_back(Index); - Ty = GetElementPtrInst::getIndexedType(PTy, (Value**)&Result[0], - Result.size(),true); + Ty = GetElementPtrInst::getIndexedType(PTy, Result.begin(), + Result.end(),true); if (!Ty) error("Index list invalid for constant getelementptr"); } @@ -1579,7 +1579,8 @@ } } Result.push_back(Index); - Ty = GetElementPtrInst::getIndexedType(PTy, &Result[0], Result.size(),true); + Ty = GetElementPtrInst::getIndexedType(PTy, Result.begin(), + Result.end(),true); if (!Ty) error("Index list invalid for constant getelementptr"); } @@ -3342,7 +3343,8 @@ // Create the call node... if (!$6) { // Has no arguments? - $$.TI = new InvokeInst(V, Normal, Except, 0, 0); + std::vector Args; + $$.TI = new InvokeInst(V, Normal, Except, Args.begin(), Args.end()); } else { // Has arguments? // Loop through FunctionType's arguments and ensure they are specified // correctly! @@ -3362,7 +3364,7 @@ if (I != E || (ArgI != ArgE && !Ty->isVarArg())) error("Invalid number of parameters detected"); - $$.TI = new InvokeInst(V, Normal, Except, &Args[0], Args.size()); + $$.TI = new InvokeInst(V, Normal, Except, Args.begin(), Args.end()); } cast($$.TI)->setCallingConv(upgradeCallingConv($2)); delete $3.PAT; @@ -3889,7 +3891,7 @@ upgradeGEPInstIndices(Ty, $4, VIndices); Value* tmpVal = getVal(Ty, $3); - $$.I = new GetElementPtrInst(tmpVal, &VIndices[0], VIndices.size()); + $$.I = new GetElementPtrInst(tmpVal, VIndices.begin(), VIndices.end()); ValueInfo VI; VI.V = tmpVal; VI.S.copy($2.S); $$.S.copy(getElementSign(VI, VIndices)); delete $2.PAT; From evan.cheng at apple.com Tue Sep 4 15:18:29 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Tue, 04 Sep 2007 20:18:29 -0000 Subject: [llvm-commits] [llvm] r41710 - /llvm/trunk/utils/TableGen/DAGISelEmitter.cpp Message-ID: <200709042018.l84KITco012694@zion.cs.uiuc.edu> Author: evancheng Date: Tue Sep 4 15:18:28 2007 New Revision: 41710 URL: http://llvm.org/viewvc/llvm-project?rev=41710&view=rev Log: Always check the type of node. This prevents situations such as selecting 32-bit rotate target instruction for a 64-bit node when 64-bit pattern is missing. Modified: llvm/trunk/utils/TableGen/DAGISelEmitter.cpp Modified: llvm/trunk/utils/TableGen/DAGISelEmitter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/DAGISelEmitter.cpp?rev=41710&r1=41709&r2=41710&view=diff ============================================================================== --- llvm/trunk/utils/TableGen/DAGISelEmitter.cpp (original) +++ llvm/trunk/utils/TableGen/DAGISelEmitter.cpp Tue Sep 4 15:18:28 2007 @@ -3811,47 +3811,41 @@ OpcodeVTMap.find(OpName); std::vector &OpVTs = OpVTI->second; OS << " case " << OpName << ": {\n"; - if (OpVTs.size() == 1) { - std::string &VTStr = OpVTs[0]; - OS << " return Select_" << getLegalCName(OpName) - << VTStr << "(N);\n"; - } else { - // Keep track of whether we see a pattern that has an iPtr result. - bool HasPtrPattern = false; - bool HasDefaultPattern = false; - - OS << " switch (NVT) {\n"; - for (unsigned i = 0, e = OpVTs.size(); i < e; ++i) { - std::string &VTStr = OpVTs[i]; - if (VTStr.empty()) { - HasDefaultPattern = true; - continue; - } - - // If this is a match on iPTR: don't emit it directly, we need special - // code. - if (VTStr == "_iPTR") { - HasPtrPattern = true; - continue; - } - OS << " case MVT::" << VTStr.substr(1) << ":\n" - << " return Select_" << getLegalCName(OpName) - << VTStr << "(N);\n"; - } - OS << " default:\n"; + // Keep track of whether we see a pattern that has an iPtr result. + bool HasPtrPattern = false; + bool HasDefaultPattern = false; - // If there is an iPTR result version of this pattern, emit it here. - if (HasPtrPattern) { - OS << " if (NVT == TLI.getPointerTy())\n"; - OS << " return Select_" << getLegalCName(OpName) <<"_iPTR(N);\n"; + OS << " switch (NVT) {\n"; + for (unsigned i = 0, e = OpVTs.size(); i < e; ++i) { + std::string &VTStr = OpVTs[i]; + if (VTStr.empty()) { + HasDefaultPattern = true; + continue; } - if (HasDefaultPattern) { - OS << " return Select_" << getLegalCName(OpName) << "(N);\n"; + + // If this is a match on iPTR: don't emit it directly, we need special + // code. + if (VTStr == "_iPTR") { + HasPtrPattern = true; + continue; } - OS << " break;\n"; - OS << " }\n"; - OS << " break;\n"; + OS << " case MVT::" << VTStr.substr(1) << ":\n" + << " return Select_" << getLegalCName(OpName) + << VTStr << "(N);\n"; + } + OS << " default:\n"; + + // If there is an iPTR result version of this pattern, emit it here. + if (HasPtrPattern) { + OS << " if (NVT == TLI.getPointerTy())\n"; + OS << " return Select_" << getLegalCName(OpName) <<"_iPTR(N);\n"; + } + if (HasDefaultPattern) { + OS << " return Select_" << getLegalCName(OpName) << "(N);\n"; } + OS << " break;\n"; + OS << " }\n"; + OS << " break;\n"; OS << " }\n"; } From evan.cheng at apple.com Tue Sep 4 15:20:30 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Tue, 04 Sep 2007 20:20:30 -0000 Subject: [llvm-commits] [llvm] r41711 - in /llvm/trunk: lib/Target/PowerPC/PPCInstr64Bit.td test/CodeGen/PowerPC/rotl-64.ll Message-ID: <200709042020.l84KKUar012766@zion.cs.uiuc.edu> Author: evancheng Date: Tue Sep 4 15:20:29 2007 New Revision: 41711 URL: http://llvm.org/viewvc/llvm-project?rev=41711&view=rev Log: Fix for PR1613: added 64-bit rotate left PPC instructions and patterns. Added: llvm/trunk/test/CodeGen/PowerPC/rotl-64.ll Modified: llvm/trunk/lib/Target/PowerPC/PPCInstr64Bit.td Modified: llvm/trunk/lib/Target/PowerPC/PPCInstr64Bit.td URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/PPCInstr64Bit.td?rev=41711&r1=41710&r2=41711&view=diff ============================================================================== --- llvm/trunk/lib/Target/PowerPC/PPCInstr64Bit.td (original) +++ llvm/trunk/lib/Target/PowerPC/PPCInstr64Bit.td Tue Sep 4 15:20:29 2007 @@ -338,6 +338,10 @@ } // Rotate instructions. +def RLDCL : MDForm_1<30, 0, + (outs G8RC:$rA), (ins G8RC:$rS, GPRC:$rB, u6imm:$MB), + "rldcl $rA, $rS, $rB, $MB", IntRotateD, + []>, isPPC64; def RLDICL : MDForm_1<30, 0, (outs G8RC:$rA), (ins G8RC:$rS, u6imm:$SH, u6imm:$MB), "rldicl $rA, $rS, $SH, $MB", IntRotateD, @@ -579,6 +583,12 @@ def : Pat<(srl G8RC:$in, (i32 imm:$imm)), (RLDICL G8RC:$in, (SRL64 imm:$imm), imm:$imm)>; +// ROTL +def : Pat<(rotl G8RC:$in, GPRC:$sh), + (RLDCL G8RC:$in, GPRC:$sh, 0)>; +def : Pat<(rotl G8RC:$in, (i32 imm:$imm)), + (RLDICL G8RC:$in, imm:$imm, 0)>; + // Hi and Lo for Darwin Global Addresses. def : Pat<(PPChi tglobaladdr:$in, 0), (LIS8 tglobaladdr:$in)>; def : Pat<(PPClo tglobaladdr:$in, 0), (LI8 tglobaladdr:$in)>; Added: llvm/trunk/test/CodeGen/PowerPC/rotl-64.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/PowerPC/rotl-64.ll?rev=41711&view=auto ============================================================================== --- llvm/trunk/test/CodeGen/PowerPC/rotl-64.ll (added) +++ llvm/trunk/test/CodeGen/PowerPC/rotl-64.ll Tue Sep 4 15:20:29 2007 @@ -0,0 +1,20 @@ +; RUN: llvm-as < %s | llc -march=ppc64 | grep rldicl +; RUN: llvm-as < %s | llc -march=ppc64 | grep rldcl +; PR1613 + +define i64 @t1(i64 %A) { + %tmp1 = lshr i64 %A, 57 + %tmp2 = shl i64 %A, 7 + %tmp3 = or i64 %tmp1, %tmp2 + ret i64 %tmp3 +} + +define i64 @t2(i64 %A, i8 zeroext %Amt) { + %Amt1 = zext i8 %Amt to i64 + %tmp1 = lshr i64 %A, %Amt1 + %Amt2 = sub i8 64, %Amt + %Amt3 = zext i8 %Amt2 to i64 + %tmp2 = shl i64 %A, %Amt3 + %tmp3 = or i64 %tmp1, %tmp2 + ret i64 %tmp3 +} From evan.cheng at apple.com Tue Sep 4 15:39:26 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Tue, 04 Sep 2007 20:39:26 -0000 Subject: [llvm-commits] [llvm] r41712 - in /llvm/trunk: lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp test/CodeGen/X86/2007-09-03-X86-64-EhSelector.ll Message-ID: <200709042039.l84KdQ4P013607@zion.cs.uiuc.edu> Author: evancheng Date: Tue Sep 4 15:39:26 2007 New Revision: 41712 URL: http://llvm.org/viewvc/llvm-project?rev=41712&view=rev Log: Fix for PR1632. EHSELECTION always produces a i32 value. Added: llvm/trunk/test/CodeGen/X86/2007-09-03-X86-64-EhSelector.ll Modified: llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp Modified: llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp?rev=41712&r1=41711&r2=41712&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp (original) +++ llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp Tue Sep 4 15:39:26 2007 @@ -2703,7 +2703,7 @@ } // Insert the EHSELECTION instruction. - SDVTList VTs = DAG.getVTList(TLI.getPointerTy(), MVT::Other); + SDVTList VTs = DAG.getVTList(MVT::i32, MVT::Other); SDOperand Ops[2]; Ops[0] = getValue(I.getOperand(1)); Ops[1] = getRoot(); Added: llvm/trunk/test/CodeGen/X86/2007-09-03-X86-64-EhSelector.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/2007-09-03-X86-64-EhSelector.ll?rev=41712&view=auto ============================================================================== --- llvm/trunk/test/CodeGen/X86/2007-09-03-X86-64-EhSelector.ll (added) +++ llvm/trunk/test/CodeGen/X86/2007-09-03-X86-64-EhSelector.ll Tue Sep 4 15:39:26 2007 @@ -0,0 +1,38 @@ +; RUN: llvm-as < %s | llc -march=x86-64 -enable-eh +; PR1632 + +define void @_Z1fv() { +entry: + invoke void @_Z1gv( ) + to label %return unwind label %unwind + +unwind: ; preds = %entry + br i1 false, label %eh_then, label %cleanup20 + +eh_then: ; preds = %unwind + invoke void @__cxa_end_catch( ) + to label %return unwind label %unwind10 + +unwind10: ; preds = %eh_then + %eh_select13 = tail call i32 (i8*, i8*, ...)* @llvm.eh.selector( i8* null, i8* bitcast (void ()* @__gxx_personality_v0 to i8*), i32 1 ) ; [#uses=2] + %tmp18 = icmp slt i32 %eh_select13, 0 ; [#uses=1] + br i1 %tmp18, label %filter, label %cleanup20 + +filter: ; preds = %unwind10 + unreachable + +cleanup20: ; preds = %unwind10, %unwind + %eh_selector.0 = phi i32 [ 0, %unwind ], [ %eh_select13, %unwind10 ] ; [#uses=0] + ret void + +return: ; preds = %eh_then, %entry + ret void +} + +declare void @_Z1gv() + +declare i32 @llvm.eh.selector(i8*, i8*, ...) + +declare void @__gxx_personality_v0() + +declare void @__cxa_end_catch() From dpatel at apple.com Tue Sep 4 15:46:35 2007 From: dpatel at apple.com (Devang Patel) Date: Tue, 04 Sep 2007 20:46:35 -0000 Subject: [llvm-commits] [llvm] r41713 - /llvm/trunk/lib/Transforms/Utils/CloneLoop.cpp Message-ID: <200709042046.l84KkZ54013895@zion.cs.uiuc.edu> Author: dpatel Date: Tue Sep 4 15:46:35 2007 New Revision: 41713 URL: http://llvm.org/viewvc/llvm-project?rev=41713&view=rev Log: Insert cloned loop basic blocks before original loop header. Modified: llvm/trunk/lib/Transforms/Utils/CloneLoop.cpp Modified: llvm/trunk/lib/Transforms/Utils/CloneLoop.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/CloneLoop.cpp?rev=41713&r1=41712&r2=41713&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/Utils/CloneLoop.cpp (original) +++ llvm/trunk/lib/Transforms/Utils/CloneLoop.cpp Tue Sep 4 15:46:35 2007 @@ -145,7 +145,9 @@ BasicBlock *Latch = OrigL->getLoopLatch(); Function *F = Latch->getParent(); - F->getBasicBlockList().insert(Latch, NewBlocks.begin(), NewBlocks.end()); + F->getBasicBlockList().insert(OrigL->getHeader(), + NewBlocks.begin(), NewBlocks.end()); + return NewParentLoop; } From dpatel at apple.com Tue Sep 4 15:46:58 2007 From: dpatel at apple.com (Devang Patel) Date: Tue, 04 Sep 2007 20:46:58 -0000 Subject: [llvm-commits] [llvm] r41714 - /llvm/trunk/tools/opt/opt.cpp Message-ID: <200709042046.l84KkxHb013919@zion.cs.uiuc.edu> Author: dpatel Date: Tue Sep 4 15:46:58 2007 New Revision: 41714 URL: http://llvm.org/viewvc/llvm-project?rev=41714&view=rev Log: Enable loop index split pass. Modified: llvm/trunk/tools/opt/opt.cpp Modified: llvm/trunk/tools/opt/opt.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/opt/opt.cpp?rev=41714&r1=41713&r2=41714&view=diff ============================================================================== --- llvm/trunk/tools/opt/opt.cpp (original) +++ llvm/trunk/tools/opt/opt.cpp Tue Sep 4 15:46:58 2007 @@ -277,6 +277,7 @@ addPass(PM, createLoopRotatePass()); addPass(PM, createLICMPass()); // Hoist loop invariants addPass(PM, createLoopUnswitchPass()); // Unswitch loops. + addPass(PM, createLoopIndexSplitPass()); // Index split loops. addPass(PM, createInstructionCombiningPass()); // Clean up after LICM/reassoc addPass(PM, createIndVarSimplifyPass()); // Canonicalize indvars addPass(PM, createLoopUnrollPass()); // Unroll small loops From isanbard at gmail.com Tue Sep 4 23:05:20 2007 From: isanbard at gmail.com (Bill Wendling) Date: Wed, 05 Sep 2007 04:05:20 -0000 Subject: [llvm-commits] [llvm] r41717 - in /llvm/trunk: lib/Target/PowerPC/PPCInstrAltivec.td test/CodeGen/PowerPC/2007-09-04-AltivecDST.ll Message-ID: <200709050405.l8545KKC028530@zion.cs.uiuc.edu> Author: void Date: Tue Sep 4 23:05:20 2007 New Revision: 41717 URL: http://llvm.org/viewvc/llvm-project?rev=41717&view=rev Log: Add the 64-bit versions of the DS* Altivec instructions. Added: llvm/trunk/test/CodeGen/PowerPC/2007-09-04-AltivecDST.ll Modified: llvm/trunk/lib/Target/PowerPC/PPCInstrAltivec.td Modified: llvm/trunk/lib/Target/PowerPC/PPCInstrAltivec.td URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/PPCInstrAltivec.td?rev=41717&r1=41716&r2=41717&view=diff ============================================================================== --- llvm/trunk/lib/Target/PowerPC/PPCInstrAltivec.td (original) +++ llvm/trunk/lib/Target/PowerPC/PPCInstrAltivec.td Tue Sep 4 23:05:20 2007 @@ -163,18 +163,37 @@ def IMPLICIT_DEF_VRRC : Pseudo<(outs VRRC:$rD), (ins),"; IMPLICIT_DEF_VRRC $rD", [(set VRRC:$rD, (v4i32 (undef)))]>; -def DSS : DSS_Form<822, (outs), (ins u5imm:$ZERO0, u5imm:$STRM,u5imm:$ZERO1,u5imm:$ZERO2), - "dss $STRM", LdStGeneral /*FIXME*/, []>; -def DSSALL: DSS_Form<822, (outs), (ins u5imm:$ONE, u5imm:$ZERO0,u5imm:$ZERO1,u5imm:$ZERO2), - "dssall", LdStGeneral /*FIXME*/, []>; -def DST : DSS_Form<342, (outs), (ins u5imm:$ZERO, u5imm:$STRM, GPRC:$rA, GPRC:$rB), - "dst $rA, $rB, $STRM", LdStGeneral /*FIXME*/, []>; -def DSTT : DSS_Form<342, (outs), (ins u5imm:$ONE, u5imm:$STRM, GPRC:$rA, GPRC:$rB), - "dstt $rA, $rB, $STRM", LdStGeneral /*FIXME*/, []>; -def DSTST : DSS_Form<374, (outs), (ins u5imm:$ZERO, u5imm:$STRM, GPRC:$rA, GPRC:$rB), - "dstst $rA, $rB, $STRM", LdStGeneral /*FIXME*/, []>; -def DSTSTT: DSS_Form<374, (outs), (ins u5imm:$ONE, u5imm:$STRM, GPRC:$rA, GPRC:$rB), - "dststt $rA, $rB, $STRM", LdStGeneral /*FIXME*/, []>; +def DSS : DSS_Form<822, (outs), + (ins u5imm:$ZERO0, u5imm:$STRM,u5imm:$ZERO1,u5imm:$ZERO2), + "dss $STRM", LdStGeneral /*FIXME*/, []>; +def DSSALL : DSS_Form<822, (outs), + (ins u5imm:$ONE, u5imm:$ZERO0,u5imm:$ZERO1,u5imm:$ZERO2), + "dssall", LdStGeneral /*FIXME*/, []>; +def DST : DSS_Form<342, (outs), + (ins u5imm:$ZERO, u5imm:$STRM, GPRC:$rA, GPRC:$rB), + "dst $rA, $rB, $STRM", LdStGeneral /*FIXME*/, []>; +def DSTT : DSS_Form<342, (outs), + (ins u5imm:$ONE, u5imm:$STRM, GPRC:$rA, GPRC:$rB), + "dstt $rA, $rB, $STRM", LdStGeneral /*FIXME*/, []>; +def DSTST : DSS_Form<374, (outs), + (ins u5imm:$ZERO, u5imm:$STRM, GPRC:$rA, GPRC:$rB), + "dstst $rA, $rB, $STRM", LdStGeneral /*FIXME*/, []>; +def DSTSTT : DSS_Form<374, (outs), + (ins u5imm:$ONE, u5imm:$STRM, GPRC:$rA, GPRC:$rB), + "dststt $rA, $rB, $STRM", LdStGeneral /*FIXME*/, []>; + +def DST64 : DSS_Form<342, (outs), + (ins u5imm:$ZERO, u5imm:$STRM, G8RC:$rA, GPRC:$rB), + "dst $rA, $rB, $STRM", LdStGeneral /*FIXME*/, []>; +def DSTT64 : DSS_Form<342, (outs), + (ins u5imm:$ONE, u5imm:$STRM, G8RC:$rA, GPRC:$rB), + "dstt $rA, $rB, $STRM", LdStGeneral /*FIXME*/, []>; +def DSTST64 : DSS_Form<374, (outs), + (ins u5imm:$ZERO, u5imm:$STRM, G8RC:$rA, GPRC:$rB), + "dstst $rA, $rB, $STRM", LdStGeneral /*FIXME*/, []>; +def DSTSTT64 : DSS_Form<374, (outs), + (ins u5imm:$ONE, u5imm:$STRM, G8RC:$rA, GPRC:$rB), + "dststt $rA, $rB, $STRM", LdStGeneral /*FIXME*/, []>; def MFVSCR : VXForm_4<1540, (outs VRRC:$vD), (ins), "mfvscr $vD", LdStGeneral, @@ -536,9 +555,11 @@ // Additional Altivec Patterns // -// DS* intrinsics. -def : Pat<(int_ppc_altivec_dss imm:$STRM), (DSS 0, imm:$STRM, 0, 0)>; +// DS* intrinsics def : Pat<(int_ppc_altivec_dssall), (DSSALL 1, 0, 0, 0)>; +def : Pat<(int_ppc_altivec_dss imm:$STRM), (DSS 0, imm:$STRM, 0, 0)>; + +// * 32-bit def : Pat<(int_ppc_altivec_dst GPRC:$rA, GPRC:$rB, imm:$STRM), (DST 0, imm:$STRM, GPRC:$rA, GPRC:$rB)>; def : Pat<(int_ppc_altivec_dstt GPRC:$rA, GPRC:$rB, imm:$STRM), @@ -548,6 +569,16 @@ def : Pat<(int_ppc_altivec_dststt GPRC:$rA, GPRC:$rB, imm:$STRM), (DSTSTT 1, imm:$STRM, GPRC:$rA, GPRC:$rB)>; +// * 64-bit +def : Pat<(int_ppc_altivec_dst G8RC:$rA, GPRC:$rB, imm:$STRM), + (DST64 0, imm:$STRM, (i64 G8RC:$rA), GPRC:$rB)>; +def : Pat<(int_ppc_altivec_dstt G8RC:$rA, GPRC:$rB, imm:$STRM), + (DSTT64 1, imm:$STRM, (i64 G8RC:$rA), GPRC:$rB)>; +def : Pat<(int_ppc_altivec_dstst G8RC:$rA, GPRC:$rB, imm:$STRM), + (DSTST64 0, imm:$STRM, (i64 G8RC:$rA), GPRC:$rB)>; +def : Pat<(int_ppc_altivec_dststt G8RC:$rA, GPRC:$rB, imm:$STRM), + (DSTSTT64 1, imm:$STRM, (i64 G8RC:$rA), GPRC:$rB)>; + // Undef. def : Pat<(v16i8 (undef)), (IMPLICIT_DEF_VRRC)>; def : Pat<(v8i16 (undef)), (IMPLICIT_DEF_VRRC)>; Added: llvm/trunk/test/CodeGen/PowerPC/2007-09-04-AltivecDST.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/PowerPC/2007-09-04-AltivecDST.ll?rev=41717&view=auto ============================================================================== --- llvm/trunk/test/CodeGen/PowerPC/2007-09-04-AltivecDST.ll (added) +++ llvm/trunk/test/CodeGen/PowerPC/2007-09-04-AltivecDST.ll Tue Sep 4 23:05:20 2007 @@ -0,0 +1,15 @@ +; RUN: llvm-as < %s | llc -march=ppc64 | grep dst | count 4 + +define hidden void @_Z4borkPc(i8* %image) { +entry: + tail call void @llvm.ppc.altivec.dst( i8* %image, i32 8, i32 0 ) + tail call void @llvm.ppc.altivec.dstt( i8* %image, i32 8, i32 0 ) + tail call void @llvm.ppc.altivec.dstst( i8* %image, i32 8, i32 0 ) + tail call void @llvm.ppc.altivec.dststt( i8* %image, i32 8, i32 0 ) + ret void +} + +declare void @llvm.ppc.altivec.dst(i8*, i32, i32) +declare void @llvm.ppc.altivec.dstt(i8*, i32, i32) +declare void @llvm.ppc.altivec.dstst(i8*, i32, i32) +declare void @llvm.ppc.altivec.dststt(i8*, i32, i32) From stein at duvel.ir.iit.edu Wed Sep 5 00:44:48 2007 From: stein at duvel.ir.iit.edu (S3) Date: Wed, 05 Sep 2007 00:44:48 -0500 Subject: [llvm-commits] sizeof In-Reply-To: References: Message-ID: <46DE4250.1010307@ir.iit.edu> -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Here is my first attempt at a patch. It introduces a new header file where people can put templates to be used wherever. I have put "endof" and "lengthof" which replace most uses of sizeof. This should make the code a little neater. -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.7-ecc0.1.6 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iD8DBQFG3kJQxzVgPqtIcfsRAjWIAJ0a1ROkY5i7pVfogeBshUiunw2eVwCeOpwC i+7a/sV92dlhlNBbnRTks28= =Qe8f -----END PGP SIGNATURE----- -------------- next part -------------- An embedded and charset-unspecified text was scrubbed... Name: patch Url: http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20070905/a3719bfe/attachment.pl From baldrick at free.fr Wed Sep 5 06:27:53 2007 From: baldrick at free.fr (Duncan Sands) Date: Wed, 05 Sep 2007 11:27:53 -0000 Subject: [llvm-commits] [llvm] r41718 - in /llvm/trunk/lib/CodeGen: DwarfWriter.cpp MachineModuleInfo.cpp SelectionDAG/SelectionDAGISel.cpp Message-ID: <200709051127.l85BRrob001067@zion.cs.uiuc.edu> Author: baldrick Date: Wed Sep 5 06:27:52 2007 New Revision: 41718 URL: http://llvm.org/viewvc/llvm-project?rev=41718&view=rev Log: Fix PR1628. When exception handling is turned on, labels are generated bracketing each call (not just invokes). This is used to generate entries in the exception table required by the C++ personality. However it gets in the way of tail-merging. This patch solves the problem by no longer placing labels around ordinary calls. Instead we generate entries in the exception table that cover every instruction in the function that wasn't covered by an invoke range (the range given by the labels around the invoke). As an optimization, such entries are only generated for parts of the function that contain a call, since for the moment those are the only instructions that can throw an exception [1]. As a happy consequence, we now get a smaller exception table, since the same region can cover many calls. While there, I also implemented folding of invoke ranges - successive ranges are merged when safe to do so. Finally, if a selector contains only a cleanup, there's a special shorthand for it - place a 0 in the call-site entry. I implemented this while there. As a result, the exception table output (excluding filters) is now optimal - it cannot be made smaller [2]. The problem with throw filters is that folding them optimally is hard, and the benefit of folding them is minimal. [1] I tested that having trapping instructions (eg divide by zero) in such a region doesn't cause trouble. [2] It could be made smaller with the help of higher layers, eg by having branch folding reorder basic blocks ending in invokes with the same landing pad so they follow each other. I don't know if this is worth doing. Modified: llvm/trunk/lib/CodeGen/DwarfWriter.cpp llvm/trunk/lib/CodeGen/MachineModuleInfo.cpp llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp Modified: llvm/trunk/lib/CodeGen/DwarfWriter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/DwarfWriter.cpp?rev=41718&r1=41717&r2=41718&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/DwarfWriter.cpp (original) +++ llvm/trunk/lib/CodeGen/DwarfWriter.cpp Wed Sep 5 06:27:52 2007 @@ -2896,7 +2896,7 @@ O << UsedDirective << EHFrameInfo.FnName << ".eh\n\n"; } - /// EmitExceptionTable - Emit landpads and actions. + /// EmitExceptionTable - Emit landing pads and actions. /// /// The general organization of the table is complex, but the basic concepts /// are easy. First there is a header which describes the location and @@ -2951,19 +2951,31 @@ static bool isPod() { return true; } }; - struct PadSite { - unsigned PadIndex; - unsigned SiteIndex; - }; - - typedef DenseMap PadMapType; - + /// ActionEntry - Structure describing an entry in the actions table. struct ActionEntry { int ValueForTypeID; // The value to write - may not be equal to the type id. int NextAction; struct ActionEntry *Previous; }; + /// PadRange - Structure holding a try-range and the associated landing pad. + struct PadRange { + // The index of the landing pad. + unsigned PadIndex; + // The index of the begin and end labels in the landing pad's label lists. + unsigned RangeIndex; + }; + + typedef DenseMap RangeMapType; + + /// CallSiteEntry - Structure describing an entry in the call-site table. + struct CallSiteEntry { + unsigned BeginLabel; // zero indicates the start of the function. + unsigned EndLabel; // zero indicates the end of the function. + unsigned PadLabel; // zero indicates that there is no landing pad. + unsigned Action; + }; + void EmitExceptionTable() { // Map all labels and get rid of any dead landing pads. MMI->TidyLandingPads(); @@ -2981,13 +2993,6 @@ LandingPads.push_back(&PadInfos[i]); std::sort(LandingPads.begin(), LandingPads.end(), PadLT); - // Gather first action index for each landing pad site. - SmallVector FirstActions; - FirstActions.reserve(PadInfos.size()); - - // The actions table. - SmallVector Actions; - // Negative type ids index into FilterIds, positive type ids index into // TypeInfos. The value written for a positive type id is just the type // id itself. For a negative type id, however, the value written is the @@ -3007,14 +3012,14 @@ Offset -= Asm->SizeULEB128(*I); } - // Compute sizes for exception table. - unsigned SizeSites = 0; - unsigned SizeActions = 0; + // Compute the actions table and gather the first action index for each + // landing pad site. + SmallVector Actions; + SmallVector FirstActions; + FirstActions.reserve(LandingPads.size()); - // Look at each landing pad site to compute size. We need the size of each - // landing pad site info and the size of the landing pad's actions. int FirstAction = 0; - + unsigned SizeActions = 0; for (unsigned i = 0, N = LandingPads.size(); i != N; ++i) { const LandingPadInfo *LP = LandingPads[i]; const std::vector &TypeIds = LP->TypeIds; @@ -3063,14 +3068,96 @@ // Compute this sites contribution to size. SizeActions += SizeSiteActions; - unsigned M = LP->BeginLabels.size(); - SizeSites += M*(sizeof(int32_t) + // Site start. - sizeof(int32_t) + // Site length. - sizeof(int32_t) + // Landing pad. - Asm->SizeULEB128(FirstAction)); // Action. } - + + // Compute the call-site table. Entries must be ordered by address. + SmallVector CallSites; + + RangeMapType PadMap; + for (unsigned i = 0, N = LandingPads.size(); i != N; ++i) { + const LandingPadInfo *LandingPad = LandingPads[i]; + for (unsigned j=0, E = LandingPad->BeginLabels.size(); j != E; ++j) { + unsigned BeginLabel = LandingPad->BeginLabels[j]; + assert(!PadMap.count(BeginLabel) && "Duplicate landing pad labels!"); + PadRange P = { i, j }; + PadMap[BeginLabel] = P; + } + } + + bool MayThrow = false; + unsigned LastLabel = 0; + const TargetInstrInfo *TII = MF->getTarget().getInstrInfo(); + for (MachineFunction::const_iterator I = MF->begin(), E = MF->end(); + I != E; ++I) { + for (MachineBasicBlock::const_iterator MI = I->begin(), E = I->end(); + MI != E; ++MI) { + if (MI->getOpcode() != TargetInstrInfo::LABEL) { + MayThrow |= TII->isCall(MI->getOpcode()); + continue; + } + + unsigned BeginLabel = MI->getOperand(0).getImmedValue(); + assert(BeginLabel && "Invalid label!"); + if (BeginLabel == LastLabel) { + MayThrow = false; + continue; + } + + RangeMapType::iterator L = PadMap.find(BeginLabel); + + if (L == PadMap.end()) + continue; + + PadRange P = L->second; + const LandingPadInfo *LandingPad = LandingPads[P.PadIndex]; + + assert(BeginLabel == LandingPad->BeginLabels[P.RangeIndex] && + "Inconsistent landing pad map!"); + + // If some instruction between the previous try-range and this one may + // throw, create a call-site entry with no landing pad for the region + // between the try-ranges. + if (MayThrow) { + CallSiteEntry Site = {LastLabel, BeginLabel, 0, 0}; + CallSites.push_back(Site); + } + + LastLabel = LandingPad->EndLabels[P.RangeIndex]; + CallSiteEntry Site = {BeginLabel, LastLabel, + LandingPad->LandingPadLabel, FirstActions[P.PadIndex]}; + + assert(Site.BeginLabel && Site.EndLabel && Site.PadLabel && + "Invalid landing pad!"); + + // Try to merge with the previous call-site. + if (CallSites.size()) { + CallSiteEntry &Prev = CallSites[CallSites.size()-1]; + if (Site.PadLabel == Prev.PadLabel && Site.Action == Prev.Action) { + // Extend the range of the previous entry. + Prev.EndLabel = Site.EndLabel; + continue; + } + } + + // Otherwise, create a new call-site. + CallSites.push_back(Site); + } + } + // If some instruction between the previous try-range and the end of the + // function may throw, create a call-site entry with no landing pad for the + // region following the try-range. + if (MayThrow) { + CallSiteEntry Site = {LastLabel, 0, 0, 0}; + CallSites.push_back(Site); + } + // Final tallies. + unsigned SizeSites = CallSites.size() * (sizeof(int32_t) + // Site start. + sizeof(int32_t) + // Site length. + sizeof(int32_t)); // Landing pad. + for (unsigned i = 0, e = CallSites.size(); i < e; ++i) + SizeSites += Asm->SizeULEB128(CallSites[i].Action); + unsigned SizeTypes = TypeInfos.size() * TAI->getAddressSize(); unsigned TypeOffset = sizeof(int8_t) + // Call site format @@ -3106,61 +3193,44 @@ Asm->EmitULEB128Bytes(SizeSites); Asm->EOL("Call-site table length"); - // Emit the landing pad site information in order of address. - PadMapType PadMap; - - for (unsigned i = 0, N = LandingPads.size(); i != N; ++i) { - const LandingPadInfo *LandingPad = LandingPads[i]; - for (unsigned j=0, E = LandingPad->BeginLabels.size(); j != E; ++j) { - unsigned BeginLabel = LandingPad->BeginLabels[j]; - assert(!PadMap.count(BeginLabel) && "duplicate landing pad labels!"); - PadSite P = { i, j }; - PadMap[BeginLabel] = P; + // Emit the landing pad site information. + for (unsigned i = 0; i < CallSites.size(); ++i) { + CallSiteEntry &S = CallSites[i]; + const char *BeginTag; + unsigned BeginNumber; + + if (!S.BeginLabel) { + BeginTag = "eh_func_begin"; + BeginNumber = SubprogramCount; + } else { + BeginTag = "label"; + BeginNumber = S.BeginLabel; } - } - for (MachineFunction::const_iterator I = MF->begin(), E = MF->end(); - I != E; ++I) { - for (MachineBasicBlock::const_iterator MI = I->begin(), E = I->end(); - MI != E; ++MI) { - if (MI->getOpcode() != TargetInstrInfo::LABEL) - continue; - - unsigned BeginLabel = MI->getOperand(0).getImmedValue(); - PadMapType::iterator L = PadMap.find(BeginLabel); - - if (L == PadMap.end()) - continue; - - PadSite P = L->second; - const LandingPadInfo *LandingPad = LandingPads[P.PadIndex]; - - assert(BeginLabel == LandingPad->BeginLabels[P.SiteIndex] && - "Inconsistent landing pad map!"); + EmitSectionOffset(BeginTag, "eh_func_begin", BeginNumber, SubprogramCount, + false, true); + Asm->EOL("Region start"); + + if (!S.EndLabel) { + EmitDifference("eh_func_end", SubprogramCount, BeginTag, BeginNumber); + } else { + EmitDifference("label", S.EndLabel, BeginTag, BeginNumber); + } + Asm->EOL("Region length"); - EmitSectionOffset("label", "eh_func_begin", BeginLabel, SubprogramCount, + if (!S.PadLabel) { + if (TAI->getAddressSize() == sizeof(int32_t)) + Asm->EmitInt32(0); + else + Asm->EmitInt64(0); + } else { + EmitSectionOffset("label", "eh_func_begin", S.PadLabel, SubprogramCount, false, true); - Asm->EOL("Region start"); - - EmitDifference("label", LandingPad->EndLabels[P.SiteIndex], - "label", BeginLabel); - Asm->EOL("Region length"); - - if (LandingPad->TypeIds.empty()) { - if (TAI->getAddressSize() == sizeof(int32_t)) - Asm->EmitInt32(0); - else - Asm->EmitInt64(0); - } else { - EmitSectionOffset("label", "eh_func_begin", - LandingPad->LandingPadLabel, SubprogramCount, - false, true); - } - Asm->EOL("Landing pad"); - - Asm->EmitULEB128Bytes(FirstActions[P.PadIndex]); - Asm->EOL("Action"); } + Asm->EOL("Landing pad"); + + Asm->EmitULEB128Bytes(S.Action); + Asm->EOL("Action"); } // Emit the actions. @@ -3183,7 +3253,7 @@ O << Asm->getGlobalLinkName(GV); else O << "0"; - + Asm->EOL("TypeInfo"); } @@ -3193,7 +3263,7 @@ Asm->EmitULEB128Bytes(TypeID); Asm->EOL("Filter TypeInfo index"); } - + Asm->EmitAlignment(2); } Modified: llvm/trunk/lib/CodeGen/MachineModuleInfo.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/MachineModuleInfo.cpp?rev=41718&r1=41717&r2=41718&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/MachineModuleInfo.cpp (original) +++ llvm/trunk/lib/CodeGen/MachineModuleInfo.cpp Wed Sep 5 06:27:52 2007 @@ -1740,22 +1740,18 @@ LandingPadInfo &LandingPad = LandingPads[i]; LandingPad.LandingPadLabel = MappedLabel(LandingPad.LandingPadLabel); - if (!LandingPad.LandingPadBlock) - // Must not have cleanups if no landing pad. - LandingPad.TypeIds.clear(); - // Special case: we *should* emit LPs with null LP MBB. This indicates // "rethrow" case. if (!LandingPad.LandingPadLabel && LandingPad.LandingPadBlock) { LandingPads.erase(LandingPads.begin() + i); continue; } - + for (unsigned j=0; j != LandingPads[i].BeginLabels.size(); ) { unsigned BeginLabel = MappedLabel(LandingPad.BeginLabels[j]); unsigned EndLabel = MappedLabel(LandingPad.EndLabels[j]); - - + + if (!BeginLabel || !EndLabel) { LandingPad.BeginLabels.erase(LandingPad.BeginLabels.begin() + j); LandingPad.EndLabels.erase(LandingPad.EndLabels.begin() + j); @@ -1766,7 +1762,19 @@ LandingPad.EndLabels[j] = EndLabel; ++j; } - + + // Remove landing pads with no try-ranges. + if (!LandingPads[i].BeginLabels.size()) { + LandingPads.erase(LandingPads.begin() + i); + continue; + } + + // If there is no landing pad, ensure that the list of typeids is empty. + // If the only typeid is a cleanup, this is the same as having no typeids. + if (!LandingPad.LandingPadBlock || + (LandingPad.TypeIds.size() == 1 && !LandingPad.TypeIds[0])) + LandingPad.TypeIds.clear(); + ++i; } } Modified: llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp?rev=41718&r1=41717&r2=41718&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp (original) +++ llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp Wed Sep 5 06:27:52 2007 @@ -2928,7 +2928,7 @@ Args.push_back(Entry); } - if (ExceptionHandling && MMI) { + if (ExceptionHandling && MMI && LandingPad) { // Insert a label before the invoke call to mark the try range. This can be // used to detect deletion of the invoke via the MachineModuleInfo. BeginLabel = MMI->NextLabelID(); @@ -2945,7 +2945,7 @@ setValue(&I, Result.first); DAG.setRoot(Result.second); - if (ExceptionHandling && MMI) { + if (ExceptionHandling && MMI && LandingPad) { // Insert a label at the end of the invoke call to mark the try range. This // can be used to detect deletion of the invoke via the MachineModuleInfo. EndLabel = MMI->NextLabelID(); From baldrick at free.fr Wed Sep 5 06:53:05 2007 From: baldrick at free.fr (Duncan Sands) Date: Wed, 05 Sep 2007 11:53:05 -0000 Subject: [llvm-commits] [llvm] r41719 - in /llvm/trunk/test/CodeGen/ARM: 2007-05-07-tailmerge-1.ll 2007-05-09-tailmerge-2.ll 2007-05-22-tailmerge-3.ll Message-ID: <200709051153.l85Br5o8002505@zion.cs.uiuc.edu> Author: baldrick Date: Wed Sep 5 06:53:04 2007 New Revision: 41719 URL: http://llvm.org/viewvc/llvm-project?rev=41719&view=rev Log: Testcases for PR1628. Modified: llvm/trunk/test/CodeGen/ARM/2007-05-07-tailmerge-1.ll llvm/trunk/test/CodeGen/ARM/2007-05-09-tailmerge-2.ll llvm/trunk/test/CodeGen/ARM/2007-05-22-tailmerge-3.ll Modified: llvm/trunk/test/CodeGen/ARM/2007-05-07-tailmerge-1.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/ARM/2007-05-07-tailmerge-1.ll?rev=41719&r1=41718&r2=41719&view=diff ============================================================================== --- llvm/trunk/test/CodeGen/ARM/2007-05-07-tailmerge-1.ll (original) +++ llvm/trunk/test/CodeGen/ARM/2007-05-07-tailmerge-1.ll Wed Sep 5 06:53:04 2007 @@ -1,6 +1,9 @@ ; RUN: llvm-as < %s | llc -march=arm -enable-tail-merge | grep bl.*baz | count 1 ; RUN: llvm-as < %s | llc -march=arm -enable-tail-merge | grep bl.*quux | count 1 +; RUN: llvm-as < %s | llc -march=arm -enable-tail-merge -enable-eh | grep bl.*baz | count 1 +; RUN: llvm-as < %s | llc -march=arm -enable-tail-merge -enable-eh | grep bl.*quux | count 1 ; Check that calls to baz and quux are tail-merged. +; PR1628 ; ModuleID = 'tail.c' 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" Modified: llvm/trunk/test/CodeGen/ARM/2007-05-09-tailmerge-2.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/ARM/2007-05-09-tailmerge-2.ll?rev=41719&r1=41718&r2=41719&view=diff ============================================================================== --- llvm/trunk/test/CodeGen/ARM/2007-05-09-tailmerge-2.ll (original) +++ llvm/trunk/test/CodeGen/ARM/2007-05-09-tailmerge-2.ll Wed Sep 5 06:53:04 2007 @@ -1,6 +1,9 @@ ; RUN: llvm-as < %s | llc -march=arm -enable-tail-merge | grep bl.*baz | count 1 ; RUN: llvm-as < %s | llc -march=arm -enable-tail-merge | grep bl.*quux | count 1 +; RUN: llvm-as < %s | llc -march=arm -enable-tail-merge -enable-eh | grep bl.*baz | count 1 +; RUN: llvm-as < %s | llc -march=arm -enable-tail-merge -enable-eh | grep bl.*quux | count 1 ; Check that calls to baz and quux are tail-merged. +; PR1628 ; ModuleID = 'tail.c' 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" Modified: llvm/trunk/test/CodeGen/ARM/2007-05-22-tailmerge-3.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/ARM/2007-05-22-tailmerge-3.ll?rev=41719&r1=41718&r2=41719&view=diff ============================================================================== --- llvm/trunk/test/CodeGen/ARM/2007-05-22-tailmerge-3.ll (original) +++ llvm/trunk/test/CodeGen/ARM/2007-05-22-tailmerge-3.ll Wed Sep 5 06:53:04 2007 @@ -2,7 +2,12 @@ ; RUN: llvm-as < %s | llc -march=arm | grep bl.*quux | count 1 ; RUN: llvm-as < %s | llc -march=arm -enable-tail-merge=0 | grep bl.*baz | count 2 ; RUN: llvm-as < %s | llc -march=arm -enable-tail-merge=0 | grep bl.*quux | count 2 +; RUN: llvm-as < %s | llc -march=arm -enable-eh | grep bl.*baz | count 1 +; RUN: llvm-as < %s | llc -march=arm -enable-eh | grep bl.*quux | count 1 +; RUN: llvm-as < %s | llc -march=arm -enable-tail-merge=0 -enable-eh | grep bl.*baz | count 2 +; RUN: llvm-as < %s | llc -march=arm -enable-tail-merge=0 -enable-eh | grep bl.*quux | count 2 ; Check that tail merging is the default on ARM, and that -enable-tail-merge=0 works. +; PR1628 ; ModuleID = 'tail.c' 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" From baldrick at free.fr Wed Sep 5 09:12:46 2007 From: baldrick at free.fr (Duncan Sands) Date: Wed, 05 Sep 2007 14:12:46 -0000 Subject: [llvm-commits] [llvm] r41720 - /llvm/trunk/lib/CodeGen/DwarfWriter.cpp Message-ID: <200709051412.l85ECkej009101@zion.cs.uiuc.edu> Author: baldrick Date: Wed Sep 5 09:12:46 2007 New Revision: 41720 URL: http://llvm.org/viewvc/llvm-project?rev=41720&view=rev Log: Due to label merging, the last label for an invoke may be the same as the first label for the following invoke. Remove a micro-optimization which was wrong in this case. Modified: llvm/trunk/lib/CodeGen/DwarfWriter.cpp Modified: llvm/trunk/lib/CodeGen/DwarfWriter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/DwarfWriter.cpp?rev=41720&r1=41719&r2=41720&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/DwarfWriter.cpp (original) +++ llvm/trunk/lib/CodeGen/DwarfWriter.cpp Wed Sep 5 09:12:46 2007 @@ -3098,10 +3098,9 @@ unsigned BeginLabel = MI->getOperand(0).getImmedValue(); assert(BeginLabel && "Invalid label!"); - if (BeginLabel == LastLabel) { + + if (BeginLabel == LastLabel) MayThrow = false; - continue; - } RangeMapType::iterator L = PadMap.find(BeginLabel); From clattner at apple.com Wed Sep 5 11:40:21 2007 From: clattner at apple.com (Chris Lattner) Date: Wed, 5 Sep 2007 09:40:21 -0700 Subject: [llvm-commits] sizeof In-Reply-To: <46DE4250.1010307@ir.iit.edu> References: <46DE4250.1010307@ir.iit.edu> Message-ID: <6E626952-6E2F-4647-980E-117FD16F9386@apple.com> > Here is my first attempt at a patch. > It introduces a new header file where > people can put templates to be used wherever. > I have put "endof" and "lengthof" > which replace most uses of sizeof. > This should make the code a little neater. This is a nifty idea. Some specific requests: 1. Please merge this into the existing STLExtras.h header. I don't think we need to introduce a new header just for these little helpers. 2. All the .cpp files already are 'using namespace llvm', so they don't need the llvm:: qualifier. 3. Removing the qualifiers make it non-obvious what these do. Please rename them to array_endof and array_lengthof. I agree with you that this makes the code significantly nicer, particularly for endof :) -Chris From cfr at adobe.com Wed Sep 5 11:54:39 2007 From: cfr at adobe.com (Chuck Rose III) Date: Wed, 05 Sep 2007 16:54:39 -0000 Subject: [llvm-commits] [llvm] r41721 - /llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp Message-ID: <200709051654.l85Gsdqd015331@zion.cs.uiuc.edu> Author: cfr Date: Wed Sep 5 11:54:38 2007 New Revision: 41721 URL: http://llvm.org/viewvc/llvm-project?rev=41721&view=rev Log: Added default parameters to GetElementPtrInstr constructor call. Visual Studio 2k5 was getting confused and was unable to compile it. Suspected compiler error. Modified: llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp Modified: llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp?rev=41721&r1=41720&r2=41721&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp (original) +++ llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp Wed Sep 5 11:54:38 2007 @@ -7058,7 +7058,7 @@ // If we found a path from the src to dest, create the getelementptr now. if (SrcElTy == DstElTy) { SmallVector Idxs(NumZeros+1, ZeroUInt); - return new GetElementPtrInst(Src, Idxs.begin(), Idxs.end()); + return new GetElementPtrInst(Src, Idxs.begin(), Idxs.end(), "", ((Instruction*) NULL)); } } From clattner at apple.com Wed Sep 5 11:56:01 2007 From: clattner at apple.com (Chris Lattner) Date: Wed, 5 Sep 2007 09:56:01 -0700 Subject: [llvm-commits] [llvm-gcc-4.0] r41698 - /llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp In-Reply-To: References: <200709041614.l84GEv5V031490@zion.cs.uiuc.edu> Message-ID: On Sep 4, 2007, at 9:57 AM, Gordon Henriksen wrote: > Hm. Did revision 41697 not get mailed, or is it just me? Not sure. What was that revision? Note that various repositories go to different commits lists, for example r41696 was a clang commit. -Chris From dalej at apple.com Wed Sep 5 12:50:41 2007 From: dalej at apple.com (Dale Johannesen) Date: Wed, 05 Sep 2007 17:50:41 -0000 Subject: [llvm-commits] [llvm] r41722 - in /llvm/trunk/test: Assembler/ CodeGen/ARM/ CodeGen/CBackend/ CodeGen/Generic/ CodeGen/PowerPC/ CodeGen/X86/ Feature/ Integer/ Transforms/ConstProp/ Transforms/InstCombine/ Transforms/SCCP/ Message-ID: <200709051750.l85Hofjg017424@zion.cs.uiuc.edu> Author: johannes Date: Wed Sep 5 12:50:36 2007 New Revision: 41722 URL: http://llvm.org/viewvc/llvm-project?rev=41722&view=rev Log: Change all floating constants that are not exactly representable to use hex format. Modified: llvm/trunk/test/Assembler/2002-04-07-InfConstant.llx llvm/trunk/test/CodeGen/ARM/illegal-vector-bitcast.ll llvm/trunk/test/CodeGen/CBackend/2006-12-11-Float-Bitcast.ll llvm/trunk/test/CodeGen/Generic/2006-07-03-schedulers.ll llvm/trunk/test/CodeGen/Generic/constindices.ll llvm/trunk/test/CodeGen/Generic/sched.ll llvm/trunk/test/CodeGen/Generic/select.ll llvm/trunk/test/CodeGen/Generic/vector.ll llvm/trunk/test/CodeGen/PowerPC/vector.ll llvm/trunk/test/CodeGen/X86/peep-vector-extract-insert.ll llvm/trunk/test/CodeGen/X86/store-fp-constant.ll llvm/trunk/test/CodeGen/X86/v4f32-immediate.ll llvm/trunk/test/CodeGen/X86/vector.ll llvm/trunk/test/Feature/fold-fpcast.ll llvm/trunk/test/Feature/weirdnames.ll llvm/trunk/test/Integer/BitCast.ll llvm/trunk/test/Integer/fold-fpcast_bt.ll llvm/trunk/test/Transforms/ConstProp/remtest.ll llvm/trunk/test/Transforms/InstCombine/load.ll llvm/trunk/test/Transforms/SCCP/apint-load.ll llvm/trunk/test/Transforms/SCCP/loadtest.ll Modified: llvm/trunk/test/Assembler/2002-04-07-InfConstant.llx URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Assembler/2002-04-07-InfConstant.llx?rev=41722&r1=41721&r2=41722&view=diff ============================================================================== --- llvm/trunk/test/Assembler/2002-04-07-InfConstant.llx (original) +++ llvm/trunk/test/Assembler/2002-04-07-InfConstant.llx Wed Sep 5 12:50:36 2007 @@ -6,6 +6,6 @@ float "test"() begin - %tmp = mul float 1.0e100, 1.0e1 + %tmp = mul float 0x7FF0000000000000, 1.0e1 ret float %tmp end Modified: llvm/trunk/test/CodeGen/ARM/illegal-vector-bitcast.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/ARM/illegal-vector-bitcast.ll?rev=41722&r1=41721&r2=41722&view=diff ============================================================================== --- llvm/trunk/test/CodeGen/ARM/illegal-vector-bitcast.ll (original) +++ llvm/trunk/test/CodeGen/ARM/illegal-vector-bitcast.ll Wed Sep 5 12:50:36 2007 @@ -3,7 +3,7 @@ define void @foo(<8 x float>* %f, <8 x float>* %g, <4 x i64>* %y) { %h = load <8 x float>* %f - %i = mul <8 x float> %h, + %i = mul <8 x float> %h, %m = bitcast <8 x float> %i to <4 x i64> %z = load <4 x i64>* %y %n = mul <4 x i64> %z, %m Modified: llvm/trunk/test/CodeGen/CBackend/2006-12-11-Float-Bitcast.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/CBackend/2006-12-11-Float-Bitcast.ll?rev=41722&r1=41721&r2=41722&view=diff ============================================================================== --- llvm/trunk/test/CodeGen/CBackend/2006-12-11-Float-Bitcast.ll (original) +++ llvm/trunk/test/CodeGen/CBackend/2006-12-11-Float-Bitcast.ll Wed Sep 5 12:50:36 2007 @@ -38,9 +38,9 @@ } int %main(int %argc, sbyte** %argv) { - %a = call int %test1(float 3.1415926) + %a = call int %test1(float 0x400921FB40000000) %b = call float %test2(int %a) - %c = call long %test3(double 3.1415926) + %c = call long %test3(double 0x400921FB4D12D84A) %d = call double %test4(long %c) %e = call double %test5(double 7.0) %f = call float %test6(float 7.0) Modified: llvm/trunk/test/CodeGen/Generic/2006-07-03-schedulers.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/Generic/2006-07-03-schedulers.ll?rev=41722&r1=41721&r2=41722&view=diff ============================================================================== --- llvm/trunk/test/CodeGen/Generic/2006-07-03-schedulers.ll (original) +++ llvm/trunk/test/CodeGen/Generic/2006-07-03-schedulers.ll Wed Sep 5 12:50:36 2007 @@ -20,7 +20,7 @@ %z1 = add float %x1, %y1 ;; z1 = x1 + y1 %x2 = mul float %x, 0.5 ;; x2 - %y2 = mul float %y, 0.9 ;; y2 + %y2 = mul float %y, 0x3FECCCCCC0000000 ;; y2 %z2 = add float %x2, %y2 ;; z2 = x2 + y2 %z3 = add float %z1, %z2 ;; z3 = z1 + z2 Modified: llvm/trunk/test/CodeGen/Generic/constindices.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/Generic/constindices.ll?rev=41722&r1=41721&r2=41722&view=diff ============================================================================== --- llvm/trunk/test/CodeGen/Generic/constindices.ll (original) +++ llvm/trunk/test/CodeGen/Generic/constindices.ll Wed Sep 5 12:50:36 2007 @@ -21,14 +21,14 @@ %ArrayB = alloca %MixedB, uint 3 %I1 = getelementptr %MixedA* %ScalarA, long 0, uint 0 - store float 1.4142, float *%I1 + store float 0x3FF6A09020000000, float *%I1 %I2 = getelementptr %MixedB* %ScalarB, long 0, uint 1, uint 0 - store float 2.7183, float *%I2 + store float 0x4005BF1420000000, float *%I2 %fptrA = getelementptr %MixedA* %ArrayA, long 1, uint 0 %fptrB = getelementptr %MixedB* %ArrayB, long 2, uint 1, uint 0 - store float 3.1415, float* %fptrA + store float 0x400921CAC0000000, float* %fptrA store float 5.0, float* %fptrB ;; Test that a sequence of GEPs with constant indices are folded right Modified: llvm/trunk/test/CodeGen/Generic/sched.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/Generic/sched.ll?rev=41722&r1=41721&r2=41722&view=diff ============================================================================== --- llvm/trunk/test/CodeGen/Generic/sched.ll (original) +++ llvm/trunk/test/CodeGen/Generic/sched.ll Wed Sep 5 12:50:36 2007 @@ -13,7 +13,7 @@ %z1 = add float %x1, %y1 ;; z1 = x1 + y1 %x2 = mul float %x, 0.5 ;; x2 - %y2 = mul float %y, 0.9 ;; y2 + %y2 = mul float %y, 0x3FECCCCCC0000000 ;; y2 %z2 = add float %x2, %y2 ;; z2 = x2 + y2 %z3 = add float %z1, %z2 ;; z3 = z1 + z2 Modified: llvm/trunk/test/CodeGen/Generic/select.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/Generic/select.ll?rev=41722&r1=41721&r2=41722&view=diff ============================================================================== --- llvm/trunk/test/CodeGen/Generic/select.ll (original) +++ llvm/trunk/test/CodeGen/Generic/select.ll Wed Sep 5 12:50:36 2007 @@ -15,7 +15,7 @@ %i = add int %N, 12345678 ; constant has to be loaded %b = add short 4, 3 ; one of the operands shd be immed %c = add float %X, 0.0 ; will this be optimzzed? - %d = add float %X, 3.1415 ; constant has to be loaded + %d = add float %X, 0x400921CAC0000000 ; constant has to be loaded %f = add uint 4294967295, 10 ; result shd be 9 (not in immed fld) %g = add ushort 20, 65535 ; result shd be 19 (65536 in immed fld) %j = add ushort 65535, 30 ; result shd be 29 (not in immed fld) Modified: llvm/trunk/test/CodeGen/Generic/vector.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/Generic/vector.ll?rev=41722&r1=41721&r2=41722&view=diff ============================================================================== --- llvm/trunk/test/CodeGen/Generic/vector.ll (original) +++ llvm/trunk/test/CodeGen/Generic/vector.ll Wed Sep 5 12:50:36 2007 @@ -64,7 +64,7 @@ void %test_cst(%f4 *%P, %f4 *%S) { %p = load %f4* %P - %R = add %f4 %p, + %R = add %f4 %p, store %f4 %R, %f4 *%S ret void } Modified: llvm/trunk/test/CodeGen/PowerPC/vector.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/PowerPC/vector.ll?rev=41722&r1=41721&r2=41722&view=diff ============================================================================== --- llvm/trunk/test/CodeGen/PowerPC/vector.ll (original) +++ llvm/trunk/test/CodeGen/PowerPC/vector.ll Wed Sep 5 12:50:36 2007 @@ -65,7 +65,7 @@ void %test_cst(%f4 *%P, %f4 *%S) { %p = load %f4* %P - %R = add %f4 %p, + %R = add %f4 %p, store %f4 %R, %f4 *%S ret void } Modified: llvm/trunk/test/CodeGen/X86/peep-vector-extract-insert.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/peep-vector-extract-insert.ll?rev=41722&r1=41721&r2=41722&view=diff ============================================================================== --- llvm/trunk/test/CodeGen/X86/peep-vector-extract-insert.ll (original) +++ llvm/trunk/test/CodeGen/X86/peep-vector-extract-insert.ll Wed Sep 5 12:50:36 2007 @@ -6,7 +6,7 @@ ret float %c } define float @bar(float %a) { - %b = insertelement <4 x float> , float %a, i32 3 + %b = insertelement <4 x float> , float %a, i32 3 %c = extractelement <4 x float> %b, i32 2 ret float %c } Modified: llvm/trunk/test/CodeGen/X86/store-fp-constant.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/store-fp-constant.ll?rev=41722&r1=41721&r2=41722&view=diff ============================================================================== --- llvm/trunk/test/CodeGen/X86/store-fp-constant.ll (original) +++ llvm/trunk/test/CodeGen/X86/store-fp-constant.ll Wed Sep 5 12:50:36 2007 @@ -12,9 +12,9 @@ implementation void %testfloatstore() { - call void %extfloat(float 1234.4) - call void %extdouble(double 1234.4123) - store float 13.0123, float* %G + call void %extfloat(float 0x40934999A0000000) + call void %extdouble(double 0x409349A631F8A090) + store float 0x402A064C20000000, float* %G ret void } Modified: llvm/trunk/test/CodeGen/X86/v4f32-immediate.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/v4f32-immediate.ll?rev=41722&r1=41721&r2=41722&view=diff ============================================================================== --- llvm/trunk/test/CodeGen/X86/v4f32-immediate.ll (original) +++ llvm/trunk/test/CodeGen/X86/v4f32-immediate.ll Wed Sep 5 12:50:36 2007 @@ -1,5 +1,5 @@ ; RUN: llvm-as < %s | llc -march=x86 -mattr=+sse | grep movaps define <4 x float> @foo() { - ret <4 x float> + ret <4 x float> } Modified: llvm/trunk/test/CodeGen/X86/vector.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/vector.ll?rev=41722&r1=41721&r2=41722&view=diff ============================================================================== --- llvm/trunk/test/CodeGen/X86/vector.ll (original) +++ llvm/trunk/test/CodeGen/X86/vector.ll Wed Sep 5 12:50:36 2007 @@ -65,7 +65,7 @@ void %test_cst(%f4 *%P, %f4 *%S) { %p = load %f4* %P - %R = add %f4 %p, + %R = add %f4 %p, store %f4 %R, %f4 *%S ret void } Modified: llvm/trunk/test/Feature/fold-fpcast.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Feature/fold-fpcast.ll?rev=41722&r1=41721&r2=41722&view=diff ============================================================================== --- llvm/trunk/test/Feature/fold-fpcast.ll (original) +++ llvm/trunk/test/Feature/fold-fpcast.ll Wed Sep 5 12:50:36 2007 @@ -1,7 +1,7 @@ ; RUN: llvm-upgrade < %s | llvm-as | llvm-dis | not grep bitcast int %test1() { - ret int bitcast(float 3.7 to int) + ret int bitcast(float 0x400D9999A0000000 to int) } float %test2() { @@ -9,7 +9,7 @@ } long %test3() { - ret long bitcast (double 3.1415926 to long) + ret long bitcast (double 0x400921FB4D12D84A to long) } double %test4() { Modified: llvm/trunk/test/Feature/weirdnames.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Feature/weirdnames.ll?rev=41722&r1=41721&r2=41722&view=diff ============================================================================== --- llvm/trunk/test/Feature/weirdnames.ll (original) +++ llvm/trunk/test/Feature/weirdnames.ll Wed Sep 5 12:50:36 2007 @@ -7,4 +7,4 @@ "&^ " = type { int } "%.*+ foo" = global "&^ " { int 5 } "0" = global float 0.0 ; This CANNOT be %0 -"\03foo" = global float 0.1 ; Make sure funny char gets round trip +"\03foo" = global float 0x3FB99999A0000000 ; Make sure funny char gets round trip Modified: llvm/trunk/test/Integer/BitCast.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Integer/BitCast.ll?rev=41722&r1=41721&r2=41722&view=diff ============================================================================== --- llvm/trunk/test/Integer/BitCast.ll (original) +++ llvm/trunk/test/Integer/BitCast.ll Wed Sep 5 12:50:36 2007 @@ -14,10 +14,10 @@ %t3 = zext i31 %i to i1280 %t4 = sext i31 %i to i1280 - %t5 = fptoui float 3.14159 to i31 + %t5 = fptoui float 0x400921FA00000000 to i31 %t6 = uitofp i31 %t5 to double - %t7 = fptosi double -1234.5678 to i28 + %t7 = fptosi double 0xC0934A456D5CFAAD to i28 %t8 = sitofp i8 -1 to double %t9 = uitofp i8 255 to double Modified: llvm/trunk/test/Integer/fold-fpcast_bt.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Integer/fold-fpcast_bt.ll?rev=41722&r1=41721&r2=41722&view=diff ============================================================================== --- llvm/trunk/test/Integer/fold-fpcast_bt.ll (original) +++ llvm/trunk/test/Integer/fold-fpcast_bt.ll Wed Sep 5 12:50:36 2007 @@ -1,7 +1,7 @@ ; RUN: llvm-as < %s | llvm-dis | not grep bitcast define i60 @test1() { - ret i60 fptoui(float 3.7 to i60) + ret i60 fptoui(float 0x400D9999A0000000 to i60) } define float @test2() { @@ -9,7 +9,7 @@ } define i64 @test3() { - ret i64 bitcast (double 3.1415926 to i64) + ret i64 bitcast (double 0x400921FB4D12D84A to i64) } define double @test4() { @@ -17,7 +17,7 @@ } define i30 @test5() { - ret i30 fptoui(float 3.7 to i30) + ret i30 fptoui(float 0x400D9999A0000000 to i30) } define float @test6() { @@ -25,7 +25,7 @@ } define i64 @test7() { - ret i64 bitcast (double 3.1415926 to i64) + ret i64 bitcast (double 0x400921FB4D12D84A to i64) } define double @test8() { Modified: llvm/trunk/test/Transforms/ConstProp/remtest.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/ConstProp/remtest.ll?rev=41722&r1=41721&r2=41722&view=diff ============================================================================== --- llvm/trunk/test/Transforms/ConstProp/remtest.ll (original) +++ llvm/trunk/test/Transforms/ConstProp/remtest.ll Wed Sep 5 12:50:36 2007 @@ -13,11 +13,11 @@ } float %test3() { - %R = rem float 12.45, 123.213 + %R = rem float 0x4028E66660000000, 0x405ECDA1C0000000 ret float %R } double %test4() { - %R = rem double 312.20213123, 12.3333412 + %R = rem double 0x4073833BEE07AFF8, 0x4028AAABB2A0D19C ret double %R } Modified: llvm/trunk/test/Transforms/InstCombine/load.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstCombine/load.ll?rev=41722&r1=41721&r2=41722&view=diff ============================================================================== --- llvm/trunk/test/Transforms/InstCombine/load.ll (original) +++ llvm/trunk/test/Transforms/InstCombine/load.ll Wed Sep 5 12:50:36 2007 @@ -5,7 +5,7 @@ %X = constant int 42 %X2 = constant int 47 %Y = constant [2 x { int, float }] [ { int, float } { int 12, float 1.0 }, - { int, float } { int 37, float 1.2312 } ] + { int, float } { int 37, float 0x3FF3B2FEC0000000 } ] %Z = constant [2 x { int, float }] zeroinitializer int %test1() { Modified: llvm/trunk/test/Transforms/SCCP/apint-load.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/SCCP/apint-load.ll?rev=41722&r1=41721&r2=41722&view=diff ============================================================================== --- llvm/trunk/test/Transforms/SCCP/apint-load.ll (original) +++ llvm/trunk/test/Transforms/SCCP/apint-load.ll Wed Sep 5 12:50:36 2007 @@ -5,7 +5,7 @@ @X = constant i212 42 @Y = constant [2 x { i212, float }] [ { i212, float } { i212 12, float 1.0 }, - { i212, float } { i212 37, float 1.2312 } ] + { i212, float } { i212 37, float 0x3FF3B2FEC0000000 } ] define i212 @test1() { %B = load i212* @X ret i212 %B Modified: llvm/trunk/test/Transforms/SCCP/loadtest.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/SCCP/loadtest.ll?rev=41722&r1=41721&r2=41722&view=diff ============================================================================== --- llvm/trunk/test/Transforms/SCCP/loadtest.ll (original) +++ llvm/trunk/test/Transforms/SCCP/loadtest.ll Wed Sep 5 12:50:36 2007 @@ -5,7 +5,7 @@ %X = constant int 42 %Y = constant [2 x { int, float }] [ { int, float } { int 12, float 1.0 }, - { int, float } { int 37, float 1.2312 } ] + { int, float } { int 37, float 0x3FF3B2FEC0000000 } ] int %test1() { %B = load int* %X ret int %B From clattner at apple.com Wed Sep 5 14:21:30 2007 From: clattner at apple.com (Chris Lattner) Date: Wed, 5 Sep 2007 12:21:30 -0700 Subject: [llvm-commits] [llvm] r41721 - /llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp In-Reply-To: <200709051654.l85Gsdqd015331@zion.cs.uiuc.edu> References: <200709051654.l85Gsdqd015331@zion.cs.uiuc.edu> Message-ID: On Sep 5, 2007, at 9:54 AM, Chuck Rose III wrote: > Author: cfr > Date: Wed Sep 5 11:54:38 2007 > New Revision: 41721 > > URL: http://llvm.org/viewvc/llvm-project?rev=41721&view=rev > Log: > Added default parameters to GetElementPtrInstr constructor call. > Visual Studio 2k5 was getting confused and was unable to compile > it. Suspected compiler error. Hi Chuck, The patch is fine, but please wrap it to fit in 80 columns, thanks! -Chris > Modified: > llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp > > Modified: llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/ > Scalar/InstructionCombining.cpp?rev=41721&r1=41720&r2=41721&view=diff > > ====================================================================== > ======== > --- llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp > (original) > +++ llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp Wed > Sep 5 11:54:38 2007 > @@ -7058,7 +7058,7 @@ > // If we found a path from the src to dest, create the > getelementptr now. > if (SrcElTy == DstElTy) { > SmallVector Idxs(NumZeros+1, ZeroUInt); > - return new GetElementPtrInst(Src, Idxs.begin(), Idxs.end()); > + return new GetElementPtrInst(Src, Idxs.begin(), Idxs.end(), > "", ((Instruction*) NULL)); > } > } > > > > _______________________________________________ > llvm-commits mailing list > llvm-commits at cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits From cfr at adobe.com Wed Sep 5 15:36:41 2007 From: cfr at adobe.com (Chuck Rose III) Date: Wed, 05 Sep 2007 20:36:41 -0000 Subject: [llvm-commits] [llvm] r41725 - /llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp Message-ID: <200709052036.l85KagiC022831@zion.cs.uiuc.edu> Author: cfr Date: Wed Sep 5 15:36:41 2007 New Revision: 41725 URL: http://llvm.org/viewvc/llvm-project?rev=41725&view=rev Log: Forgot to obey 80 column rule. Fixing that. Modified: llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp Modified: llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp?rev=41725&r1=41724&r2=41725&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp (original) +++ llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp Wed Sep 5 15:36:41 2007 @@ -7058,7 +7058,8 @@ // If we found a path from the src to dest, create the getelementptr now. if (SrcElTy == DstElTy) { SmallVector Idxs(NumZeros+1, ZeroUInt); - return new GetElementPtrInst(Src, Idxs.begin(), Idxs.end(), "", ((Instruction*) NULL)); + return new GetElementPtrInst(Src, Idxs.begin(), Idxs.end(), "", + ((Instruction*) NULL)); } } From dalej at apple.com Wed Sep 5 15:39:49 2007 From: dalej at apple.com (Dale Johannesen) Date: Wed, 05 Sep 2007 20:39:49 -0000 Subject: [llvm-commits] [llvm] r41726 - /llvm/trunk/lib/Support/APFloat.cpp Message-ID: <200709052039.l85KdnXt022956@zion.cs.uiuc.edu> Author: johannes Date: Wed Sep 5 15:39:49 2007 New Revision: 41726 URL: http://llvm.org/viewvc/llvm-project?rev=41726&view=rev Log: Fix mod so it actually works. Fix conversions to native types to handle denormals correctly. Modified: llvm/trunk/lib/Support/APFloat.cpp Modified: llvm/trunk/lib/Support/APFloat.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/APFloat.cpp?rev=41726&r1=41725&r2=41726&view=diff ============================================================================== --- llvm/trunk/lib/Support/APFloat.cpp (original) +++ llvm/trunk/lib/Support/APFloat.cpp Wed Sep 5 15:39:49 2007 @@ -1168,21 +1168,30 @@ { opStatus fs; APFloat V = *this; + unsigned int origSign = sign; fs = V.divide(rhs, rmNearestTiesToEven); if (fs == opDivByZero) return fs; - integerPart x; - fs = V.convertToInteger(&x, integerPartWidth, true, rmNearestTiesToEven); + int parts = partCount(); + integerPart *x = new integerPart[parts]; + fs = V.convertToInteger(x, parts * integerPartWidth, true, + rmNearestTiesToEven); if (fs==opInvalidOp) return fs; - fs = V.convertFromInteger(&x, integerPartWidth, true, rmNearestTiesToEven); + fs = V.convertFromInteger(x, parts, true, rmNearestTiesToEven); assert(fs==opOK); // should always work + fs = V.multiply(rhs, rounding_mode); - assert(fs==opOK); // should not overflow or underflow + assert(fs==opOK || fs==opInexact); // should not overflow or underflow + fs = subtract(V, rounding_mode); - assert(fs==opOK); + assert(fs==opOK || fs==opInexact); // likewise + + if (isZero()) + sign = origSign; // IEEE754 requires this + delete[] x; return fs; } @@ -1581,6 +1590,9 @@ // Current implementation requires partCount()==1, which is correct at the // moment but could be made more general. +// Denormals have exponent minExponent in APFloat, but minExponent-1 in +// the actual IEEE respresentation. We compensate for that here. + double APFloat::convertToDouble() const { assert(semantics == (const llvm::fltSemantics* const)&IEEEdouble); @@ -1589,8 +1601,10 @@ uint64_t myexponent, mysignificand; if (category==fcNormal) { - mysignificand = *significandParts(); myexponent = exponent+1023; //bias + mysignificand = *significandParts(); + if (myexponent==1 && !(mysignificand & 0x10000000000000LL)) + myexponent = 0; // denormal } else if (category==fcZero) { myexponent = 0; mysignificand = 0; @@ -1618,6 +1632,8 @@ if (category==fcNormal) { myexponent = exponent+127; //bias mysignificand = *significandParts(); + if (myexponent == 1 && !(mysignificand & 0x400000)) + myexponent = 0; // denormal } else if (category==fcZero) { myexponent = 0; mysignificand = 0; @@ -1625,7 +1641,7 @@ myexponent = 0xff; mysignificand = 0; } else if (category==fcNaN) { - myexponent = 0x7ff; + myexponent = 0xff; mysignificand = *significandParts(); } else assert(0); @@ -1656,7 +1672,11 @@ } else { category = fcNormal; exponent = myexponent - 1023; - *significandParts() = mysignificand | 0x10000000000000LL; + *significandParts() = mysignificand; + if (myexponent==0) // denormal + exponent = -1022; + else + *significandParts() |= 0x10000000000000LL; // integer bit } } @@ -1682,6 +1702,10 @@ } else { category = fcNormal; exponent = myexponent - 127; //bias - *significandParts() = mysignificand | 0x800000; // integer bit + *significandParts() = mysignificand; + if (myexponent==0) // denormal + exponent = -126; + else + *significandParts() |= 0x800000; // integer bit } } From evan.cheng at apple.com Wed Sep 5 16:14:02 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Wed, 5 Sep 2007 14:14:02 -0700 Subject: [llvm-commits] sizeof In-Reply-To: <46DE4250.1010307@ir.iit.edu> References: <46DE4250.1010307@ir.iit.edu> Message-ID: <565277DE-FF68-443D-8EBE-5691338E3BD9@apple.com> Hi S3 (or whoever you are :-), It's probably a good idea to post it to llvmdev first so more people can comment on it. Thanks, Evan On Sep 4, 2007, at 10:44 PM, S3 wrote: > -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA1 > > Here is my first attempt at a patch. > It introduces a new header file where > people can put templates to be used wherever. > I have put "endof" and "lengthof" > which replace most uses of sizeof. > This should make the code a little neater. > -----BEGIN PGP SIGNATURE----- > Version: GnuPG v1.4.7-ecc0.1.6 (GNU/Linux) > Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org > > iD8DBQFG3kJQxzVgPqtIcfsRAjWIAJ0a1ROkY5i7pVfogeBshUiunw2eVwCeOpwC > i+7a/sV92dlhlNBbnRTks28= > =Qe8f > -----END PGP SIGNATURE----- > Index: include/llvm/Target/TargetLowering.h > =================================================================== > --- include/llvm/Target/TargetLowering.h (revision 41716) > +++ include/llvm/Target/TargetLowering.h (working copy) > @@ -22,6 +22,7 @@ > #ifndef LLVM_TARGET_TARGETLOWERING_H > #define LLVM_TARGET_TARGETLOWERING_H > > +#include "llvm/Templates.h" > #include "llvm/CodeGen/SelectionDAGNodes.h" > #include "llvm/CodeGen/RuntimeLibcalls.h" > #include "llvm/ADT/APFloat.h" > @@ -155,7 +156,7 @@ > void setTypeAction(MVT::ValueType VT, LegalizeAction Action) { > assert(!MVT::isExtendedVT(VT)); > assert(unsigned(VT >> 4) < > - sizeof(ValueTypeActions)/sizeof(ValueTypeActions[0])); > + llvm::lengthof(ValueTypeActions)); > ValueTypeActions[VT>>4] |= Action << ((VT*2) & 31); > } > }; > @@ -711,7 +712,7 @@ > /// with the specified type and indicate what to do about it. > void setOperationAction(unsigned Op, MVT::ValueType VT, > LegalizeAction Action) { > - assert(VT < 32 && Op < sizeof(OpActions)/sizeof(OpActions[0]) && > + assert(VT < 32 && Op < llvm::lengthof(OpActions) && > "Table isn't big enough!"); > OpActions[Op] &= ~(uint64_t(3UL) << VT*2); > OpActions[Op] |= (uint64_t)Action << VT*2; > @@ -721,7 +722,7 @@ > /// work with the with specified type and indicate what to do > about it. > void setLoadXAction(unsigned ExtType, MVT::ValueType VT, > LegalizeAction Action) { > - assert(VT < 32 && ExtType < sizeof(LoadXActions)/ > sizeof(LoadXActions[0]) && > + assert(VT < 32 && ExtType < llvm::lengthof(LoadXActions) && > "Table isn't big enough!"); > LoadXActions[ExtType] &= ~(uint64_t(3UL) << VT*2); > LoadXActions[ExtType] |= (uint64_t)Action << VT*2; > @@ -742,7 +743,7 @@ > void setIndexedLoadAction(unsigned IdxMode, MVT::ValueType VT, > LegalizeAction Action) { > assert(VT < 32 && IdxMode < > - sizeof(IndexedModeActions[0]) / > sizeof(IndexedModeActions[0][0]) && > + llvm::lengthof(IndexedModeActions[0]) && > "Table isn't big enough!"); > IndexedModeActions[0][IdxMode] &= ~(uint64_t(3UL) << VT*2); > IndexedModeActions[0][IdxMode] |= (uint64_t)Action << VT*2; > @@ -755,7 +756,7 @@ > void setIndexedStoreAction(unsigned IdxMode, MVT::ValueType VT, > LegalizeAction Action) { > assert(VT < 32 && IdxMode < > - sizeof(IndexedModeActions[1]) / > sizeof(IndexedModeActions[1][0]) && > + llvm::lengthof(IndexedModeActions[1]) && > "Table isn't big enough!"); > IndexedModeActions[1][IdxMode] &= ~(uint64_t(3UL) << VT*2); > IndexedModeActions[1][IdxMode] |= (uint64_t)Action << VT*2; > Index: include/llvm/Templates.h > =================================================================== > --- include/llvm/Templates.h (revision 0) > +++ include/llvm/Templates.h (revision 0) > @@ -0,0 +1,39 @@ > +//===- Templates.h - Miscellaneous Templates ------------------*- C+ > + -*-===// > +// > +// The LLVM Compiler Infrastructure > +// > +// This file was developed by Sterling Stein and is distributed > under the > +// University of Illinois Open Source License. See LICENSE.TXT for > details. > +// > +// > = > = > =-------------------------------------------------------------------- > ===// > +// > +// This file provides miscellaneous templates. > +// > +// > = > = > =-------------------------------------------------------------------- > ===// > + > +#ifndef LLVM_TEMPLATES_H > +#define LLVM_TEMPLATES_H > + > +#include //For size_t > + > +namespace llvm { > + > + /// Find where an array ends (for ending iterators) > + /// This returns a pointer to the byte immediately > + /// after the end of an array. > + template > + inline T *endof(T (&x)[N]) > + { > + return x+N; > + } > + > + /// Find the length of an array. > + template > + inline size_t lengthof(T (&x)[N]) > + { > + return N; > + } > + > +} > + > +#endif > Index: lib/Analysis/BasicAliasAnalysis.cpp > =================================================================== > --- lib/Analysis/BasicAliasAnalysis.cpp (revision 41716) > +++ lib/Analysis/BasicAliasAnalysis.cpp (working copy) > @@ -23,6 +23,7 @@ > #include "llvm/Instructions.h" > #include "llvm/Intrinsics.h" > #include "llvm/Pass.h" > +#include "llvm/Templates.h" > #include "llvm/Target/TargetData.h" > #include "llvm/ADT/SmallVector.h" > #include "llvm/ADT/StringMap.h" > @@ -888,14 +889,10 @@ > static bool Initialized = false; > if (!Initialized) { > NoMemoryTable->insert(NoMemoryTable->end(), > - DoesntAccessMemoryFns, > - DoesntAccessMemoryFns+ > - sizeof(DoesntAccessMemoryFns)/ > sizeof(DoesntAccessMemoryFns[0])); > + DoesntAccessMemoryFns, > endof(DoesntAccessMemoryFns)); > > OnlyReadsMemoryTable->insert(OnlyReadsMemoryTable->end(), > - OnlyReadsMemoryFns, > - OnlyReadsMemoryFns+ > - sizeof(OnlyReadsMemoryFns)/ > sizeof(OnlyReadsMemoryFns[0])); > + OnlyReadsMemoryFns, > endof(OnlyReadsMemoryFns)); > > // Sort the table the first time through. > std::sort(NoMemoryTable->begin(), NoMemoryTable->end(), > StringCompare()); > Index: lib/CodeGen/IntrinsicLowering.cpp > =================================================================== > --- lib/CodeGen/IntrinsicLowering.cpp (revision 41716) > +++ lib/CodeGen/IntrinsicLowering.cpp (working copy) > @@ -15,6 +15,7 @@ > #include "llvm/DerivedTypes.h" > #include "llvm/Module.h" > #include "llvm/Instructions.h" > +#include "llvm/Templates.h" > #include "llvm/Type.h" > #include "llvm/CodeGen/IntrinsicLowering.h" > #include "llvm/Support/Streams.h" > @@ -421,7 +422,7 @@ > CI->getOperand(2), > CI->getOperand(3) > }; > - return new CallInst(F, Args, Args+sizeof(Args)/sizeof(Args[0]), > CI->getName(), CI); > + return new CallInst(F, Args, endof(Args), CI->getName(), CI); > } > > /// Convert the llvm.part.set.iX.iY.iZ intrinsic. This intrinsic takes > @@ -587,7 +588,7 @@ > CI->getOperand(3), > CI->getOperand(4) > }; > - return new CallInst(F, Args, Args+sizeof(Args)/sizeof(Args[0]), > CI->getName(), CI); > + return new CallInst(F, Args, endof(Args), CI->getName(), CI); > } > > > Index: lib/CodeGen/SelectionDAG/TargetLowering.cpp > =================================================================== > --- lib/CodeGen/SelectionDAG/TargetLowering.cpp (revision 41716) > +++ lib/CodeGen/SelectionDAG/TargetLowering.cpp (working copy) > @@ -145,8 +145,7 @@ > ShiftAmountTy = SetCCResultTy = PointerTy = getValueType(TD- > >getIntPtrType()); > ShiftAmtHandling = Undefined; > memset(RegClassForVT, > 0,MVT::LAST_VALUETYPE*sizeof(TargetRegisterClass*)); > - memset(TargetDAGCombineArray, 0, > - sizeof(TargetDAGCombineArray)/ > sizeof(TargetDAGCombineArray[0])); > + memset(TargetDAGCombineArray, 0, lengthof(TargetDAGCombineArray)); > maxStoresPerMemset = maxStoresPerMemcpy = maxStoresPerMemmove = 8; > allowUnalignedMemoryAccesses = false; > UseUnderscoreSetJmp = false; > Index: lib/System/Unix/Signals.inc > =================================================================== > --- lib/System/Unix/Signals.inc (revision 41716) > +++ lib/System/Unix/Signals.inc (working copy) > @@ -13,6 +13,7 @@ > // > = > = > = > ----------------------------------------------------------------------= > ==// > > #include "Unix.h" > +#include "llvm/Templates.h" > #include > #include > #if HAVE_EXECINFO_H > @@ -40,7 +41,7 @@ > const int IntSigs[] = { > SIGHUP, SIGINT, SIGQUIT, SIGPIPE, SIGTERM, SIGUSR1, SIGUSR2 > }; > -const int *IntSigsEnd = IntSigs + sizeof(IntSigs)/sizeof(IntSigs[0]); > +const int *IntSigsEnd = endof(IntSigs); > > // KillSigs - Signals that are synchronous with the program that > will cause it > // to die. > @@ -50,7 +51,7 @@ > , SIGEMT > #endif > }; > -const int *KillSigsEnd = KillSigs + sizeof(KillSigs)/ > sizeof(KillSigs[0]); > +const int *KillSigsEnd = endof(KillSigs); > > #ifdef HAVE_BACKTRACE > void* StackTrace[256]; > @@ -68,7 +69,7 @@ > void PrintStackTrace() { > #ifdef HAVE_BACKTRACE > // Use backtrace() to output a backtrace on Linux systems with > glibc. > - int depth = backtrace(StackTrace, sizeof(StackTrace)/ > sizeof(StackTrace[0])); > + int depth = backtrace(StackTrace, lengthof(StackTrace)); > > // Create a one-way unix pipe. The backtracing process writes to > PipeFDs[1], > // the c++filt process reads from PipeFDs[0]. > Index: lib/Target/PowerPC/PPCISelLowering.cpp > =================================================================== > --- lib/Target/PowerPC/PPCISelLowering.cpp (revision 41716) > +++ lib/Target/PowerPC/PPCISelLowering.cpp (working copy) > @@ -16,6 +16,7 @@ > #include "PPCPredicates.h" > #include "PPCTargetMachine.h" > #include "PPCPerfectShuffle.h" > +#include "llvm/Templates.h" > #include "llvm/ADT/VectorExtras.h" > #include "llvm/Analysis/ScalarEvolutionExpressions.h" > #include "llvm/CodeGen/CallingConvLower.h" > @@ -1264,9 +1265,9 @@ > PPC::V9, PPC::V10, PPC::V11, PPC::V12, PPC::V13 > }; > > - const unsigned Num_GPR_Regs = sizeof(GPR_32)/sizeof(GPR_32[0]); > + const unsigned Num_GPR_Regs = lengthof(GPR_32); > const unsigned Num_FPR_Regs = isMachoABI ? 13 : 8; > - const unsigned Num_VR_Regs = sizeof( VR)/sizeof( VR[0]); > + const unsigned Num_VR_Regs = lengthof( VR); > > unsigned GPR_idx = 0, FPR_idx = 0, VR_idx = 0; > > @@ -1583,9 +1584,9 @@ > PPC::V2, PPC::V3, PPC::V4, PPC::V5, PPC::V6, PPC::V7, PPC::V8, > PPC::V9, PPC::V10, PPC::V11, PPC::V12, PPC::V13 > }; > - const unsigned NumGPRs = sizeof(GPR_32)/sizeof(GPR_32[0]); > + const unsigned NumGPRs = lengthof(GPR_32); > const unsigned NumFPRs = isMachoABI ? 13 : 8; > - const unsigned NumVRs = sizeof( VR)/sizeof( VR[0]); > + const unsigned NumVRs = lengthof( VR); > > const unsigned *GPR = isPPC64 ? GPR_64 : GPR_32; > > @@ -2399,7 +2400,7 @@ > -8, 8, -9, 9, -10, 10, -11, 11, -12, 12, -13, 13, 14, -14, 15, > -15, -16 > }; > > - for (unsigned idx = 0; idx < sizeof(SplatCsts)/ > sizeof(SplatCsts[0]); ++idx){ > + for (unsigned idx = 0; idx < lengthof(SplatCsts); ++idx){ > // Indirect through the SplatCsts array so that we favor > 'vsplti -1' for > // cases which are ambiguous (e.g. formation of 0x8000_0000). > 'vsplti -1' > int i = SplatCsts[idx]; > Index: lib/Target/PowerPC/PPCInstrInfo.cpp > =================================================================== > --- lib/Target/PowerPC/PPCInstrInfo.cpp (revision 41716) > +++ lib/Target/PowerPC/PPCInstrInfo.cpp (working copy) > @@ -15,11 +15,12 @@ > #include "PPCPredicates.h" > #include "PPCGenInstrInfo.inc" > #include "PPCTargetMachine.h" > +#include "llvm/Templates.h" > #include "llvm/CodeGen/MachineInstrBuilder.h" > using namespace llvm; > > PPCInstrInfo::PPCInstrInfo(PPCTargetMachine &tm) > - : TargetInstrInfo(PPCInsts, sizeof(PPCInsts)/ > sizeof(PPCInsts[0])), TM(tm), > + : TargetInstrInfo(PPCInsts, lengthof(PPCInsts)), TM(tm), > RI(*TM.getSubtargetImpl(), *this) {} > > /// getPointerRegClass - Return the register class to use to hold > pointers. > Index: lib/Target/ARM/ARMInstrInfo.cpp > =================================================================== > --- lib/Target/ARM/ARMInstrInfo.cpp (revision 41716) > +++ lib/Target/ARM/ARMInstrInfo.cpp (working copy) > @@ -17,6 +17,7 @@ > #include "ARMAddressingModes.h" > #include "ARMGenInstrInfo.inc" > #include "ARMMachineFunctionInfo.h" > +#include "llvm/Templates.h" > #include "llvm/CodeGen/LiveVariables.h" > #include "llvm/CodeGen/MachineInstrBuilder.h" > #include "llvm/CodeGen/MachineJumpTableInfo.h" > @@ -28,7 +29,7 @@ > cl::desc("Enable ARM 2-addr to 3- > addr conv")); > > ARMInstrInfo::ARMInstrInfo(const ARMSubtarget &STI) > - : TargetInstrInfo(ARMInsts, sizeof(ARMInsts)/sizeof(ARMInsts[0])), > + : TargetInstrInfo(ARMInsts, lengthof(ARMInsts)), > RI(*this, STI) { > } > > Index: lib/Target/Alpha/AlphaInstrInfo.cpp > =================================================================== > --- lib/Target/Alpha/AlphaInstrInfo.cpp (revision 41716) > +++ lib/Target/Alpha/AlphaInstrInfo.cpp (working copy) > @@ -14,11 +14,12 @@ > #include "Alpha.h" > #include "AlphaInstrInfo.h" > #include "AlphaGenInstrInfo.inc" > +#include "llvm/Templates.h" > #include "llvm/CodeGen/MachineInstrBuilder.h" > using namespace llvm; > > AlphaInstrInfo::AlphaInstrInfo() > - : TargetInstrInfo(AlphaInsts, sizeof(AlphaInsts)/ > sizeof(AlphaInsts[0])), > + : TargetInstrInfo(AlphaInsts, lengthof(AlphaInsts)), > RI(*this) { } > > > Index: lib/Target/X86/X86RegisterInfo.cpp > =================================================================== > --- lib/Target/X86/X86RegisterInfo.cpp (revision 41716) > +++ lib/Target/X86/X86RegisterInfo.cpp (working copy) > @@ -20,6 +20,7 @@ > #include "X86TargetMachine.h" > #include "llvm/Constants.h" > #include "llvm/Function.h" > +#include "llvm/Templates.h" > #include "llvm/Type.h" > #include "llvm/CodeGen/ValueTypes.h" > #include "llvm/CodeGen/MachineInstrBuilder.h" > @@ -392,16 +393,13 @@ > return NULL; > } > > -#define ARRAY_SIZE(TABLE) \ > - (sizeof(TABLE)/sizeof(TABLE[0])) > - > #ifdef NDEBUG > #define ASSERT_SORTED(TABLE) > #else > #define > ASSERT_SORTED(TABLE) \ > { static bool TABLE##Checked = > false; \ > if (!TABLE##Checked) > { \ > - assert(TableIsSorted(TABLE, ARRAY_SIZE(TABLE)) > && \ > + assert(TableIsSorted(TABLE, lengthof(TABLE)) > && \ > "All lookup tables must be sorted for efficient > access!"); \ > TABLE##Checked = > true; \ > } \ > @@ -590,7 +588,7 @@ > }; > ASSERT_SORTED(OpcodeTable); > OpcodeTablePtr = OpcodeTable; > - OpcodeTableSize = ARRAY_SIZE(OpcodeTable); > + OpcodeTableSize = lengthof(OpcodeTable); > isTwoAddrFold = true; > } else if (i == 0) { // If operand 0 > if (MI->getOpcode() == X86::MOV16r0) > @@ -675,7 +673,7 @@ > > ASSERT_SORTED(OpcodeTable); > OpcodeTablePtr = OpcodeTable; > - OpcodeTableSize = ARRAY_SIZE(OpcodeTable); > + OpcodeTableSize = lengthof(OpcodeTable); > } else if (i == 1) { > static const TableEntry OpcodeTable[] = { > { X86::CMP16rr, X86::CMP16rm }, > @@ -784,7 +782,7 @@ > > ASSERT_SORTED(OpcodeTable); > OpcodeTablePtr = OpcodeTable; > - OpcodeTableSize = ARRAY_SIZE(OpcodeTable); > + OpcodeTableSize = lengthof(OpcodeTable); > } else if (i == 2) { > static const TableEntry OpcodeTable[] = { > { X86::ADC32rr, X86::ADC32rm }, > @@ -979,7 +977,7 @@ > > ASSERT_SORTED(OpcodeTable); > OpcodeTablePtr = OpcodeTable; > - OpcodeTableSize = ARRAY_SIZE(OpcodeTable); > + OpcodeTableSize = lengthof(OpcodeTable); > } > > // If table selected... > Index: lib/Target/X86/X86InstrInfo.cpp > =================================================================== > --- lib/Target/X86/X86InstrInfo.cpp (revision 41716) > +++ lib/Target/X86/X86InstrInfo.cpp (working copy) > @@ -17,13 +17,14 @@ > #include "X86InstrBuilder.h" > #include "X86Subtarget.h" > #include "X86TargetMachine.h" > +#include "llvm/Templates.h" > #include "llvm/CodeGen/MachineInstrBuilder.h" > #include "llvm/CodeGen/LiveVariables.h" > #include "llvm/CodeGen/SSARegMap.h" > using namespace llvm; > > X86InstrInfo::X86InstrInfo(X86TargetMachine &tm) > - : TargetInstrInfo(X86Insts, sizeof(X86Insts)/sizeof(X86Insts[0])), > + : TargetInstrInfo(X86Insts, lengthof(X86Insts)), > TM(tm), RI(tm, *this) { > } > > Index: lib/Target/X86/X86FloatingPoint.cpp > =================================================================== > --- lib/Target/X86/X86FloatingPoint.cpp (revision 41716) > +++ lib/Target/X86/X86FloatingPoint.cpp (working copy) > @@ -31,6 +31,7 @@ > #define DEBUG_TYPE "x86-codegen" > #include "X86.h" > #include "X86InstrInfo.h" > +#include "llvm/Templates.h" > #include "llvm/CodeGen/MachineFunctionPass.h" > #include "llvm/CodeGen/MachineInstrBuilder.h" > #include "llvm/CodeGen/LiveVariables.h" > @@ -299,16 +300,13 @@ > return -1; > } > > -#define ARRAY_SIZE(TABLE) \ > - (sizeof(TABLE)/sizeof(TABLE[0])) > - > #ifdef NDEBUG > #define ASSERT_SORTED(TABLE) > #else > #define > ASSERT_SORTED(TABLE) \ > { static bool TABLE##Checked = > false; \ > if (!TABLE##Checked) > { \ > - assert(TableIsSorted(TABLE, ARRAY_SIZE(TABLE)) > && \ > + assert(TableIsSorted(TABLE, lengthof(TABLE)) > && \ > "All lookup tables must be sorted for efficient > access!"); \ > TABLE##Checked = > true; \ > } \ > @@ -487,7 +485,7 @@ > > static unsigned getConcreteOpcode(unsigned Opcode) { > ASSERT_SORTED(OpcodeTable); > - int Opc = Lookup(OpcodeTable, ARRAY_SIZE(OpcodeTable), Opcode); > + int Opc = Lookup(OpcodeTable, lengthof(OpcodeTable), Opcode); > assert(Opc != -1 && "FP Stack instruction not in OpcodeTable!"); > return Opc; > } > @@ -535,7 +533,7 @@ > RegMap[Stack[--StackTop]] = ~0; // Update state > > // Check to see if there is a popping version of this instruction... > - int Opcode = Lookup(PopTable, ARRAY_SIZE(PopTable), I- > >getOpcode()); > + int Opcode = Lookup(PopTable, lengthof(PopTable), I->getOpcode()); > if (Opcode != -1) { > I->setInstrDescriptor(TII->get(Opcode)); > if (Opcode == X86::UCOM_FPPr) > @@ -830,7 +828,7 @@ > InstTable = ReverseSTiTable; > } > > - int Opcode = Lookup(InstTable, ARRAY_SIZE(ForwardST0Table), MI- > >getOpcode()); > + int Opcode = Lookup(InstTable, lengthof(ForwardST0Table), MI- > >getOpcode()); > assert(Opcode != -1 && "Unknown TwoArgFP pseudo instruction!"); > > // NotTOS - The register which is not on the top of stack... > Index: lib/Target/IA64/IA64InstrInfo.cpp > =================================================================== > --- lib/Target/IA64/IA64InstrInfo.cpp (revision 41716) > +++ lib/Target/IA64/IA64InstrInfo.cpp (working copy) > @@ -14,12 +14,13 @@ > #include "IA64InstrInfo.h" > #include "IA64.h" > #include "IA64InstrBuilder.h" > +#include "llvm/Templates.h" > #include "llvm/CodeGen/MachineInstrBuilder.h" > #include "IA64GenInstrInfo.inc" > using namespace llvm; > > IA64InstrInfo::IA64InstrInfo() > - : TargetInstrInfo(IA64Insts, sizeof(IA64Insts)/ > sizeof(IA64Insts[0])), > + : TargetInstrInfo(IA64Insts, lengthof(IA64Insts)), > RI(*this) { > } > > Index: lib/Target/Mips/MipsInstrInfo.cpp > =================================================================== > --- lib/Target/Mips/MipsInstrInfo.cpp (revision 41716) > +++ lib/Target/Mips/MipsInstrInfo.cpp (working copy) > @@ -13,6 +13,7 @@ > > #include "Mips.h" > #include "MipsInstrInfo.h" > +#include "llvm/Templates.h" > #include "llvm/CodeGen/MachineInstrBuilder.h" > #include "MipsGenInstrInfo.inc" > > @@ -20,7 +21,7 @@ > > // TODO: Add the subtarget support on this constructor > MipsInstrInfo::MipsInstrInfo(MipsTargetMachine &tm) > - : TargetInstrInfo(MipsInsts, sizeof(MipsInsts)/ > sizeof(MipsInsts[0])), > + : TargetInstrInfo(MipsInsts, lengthof(MipsInsts)), > TM(tm), RI(*this) {} > > static bool isZeroImm(const MachineOperand &op) { > Index: lib/Target/Sparc/SparcInstrInfo.cpp > =================================================================== > --- lib/Target/Sparc/SparcInstrInfo.cpp (revision 41716) > +++ lib/Target/Sparc/SparcInstrInfo.cpp (working copy) > @@ -13,12 +13,13 @@ > > #include "SparcInstrInfo.h" > #include "Sparc.h" > +#include "llvm/Templates.h" > #include "llvm/CodeGen/MachineInstrBuilder.h" > #include "SparcGenInstrInfo.inc" > using namespace llvm; > > SparcInstrInfo::SparcInstrInfo(SparcSubtarget &ST) > - : TargetInstrInfo(SparcInsts, sizeof(SparcInsts)/ > sizeof(SparcInsts[0])), > + : TargetInstrInfo(SparcInsts, lengthof(SparcInsts)), > RI(ST, *this) { > } > > Index: lib/VMCore/Mangler.cpp > =================================================================== > --- lib/VMCore/Mangler.cpp (revision 41716) > +++ lib/VMCore/Mangler.cpp (working copy) > @@ -14,6 +14,7 @@ > #include "llvm/Support/Mangler.h" > #include "llvm/DerivedTypes.h" > #include "llvm/Module.h" > +#include "llvm/Templates.h" > #include "llvm/ADT/StringExtras.h" > using namespace llvm; > > @@ -185,9 +186,7 @@ > Mangler::Mangler(Module &M, const char *prefix) > : Prefix(prefix), UseQuotes(false), PreserveAsmNames(false), > Count(0), TypeCounter(0) { > - std::fill(AcceptableChars, > - AcceptableChars+sizeof(AcceptableChars)/ > sizeof(AcceptableChars[0]), > - 0); > + std::fill(AcceptableChars, endof(AcceptableChars), 0); > > // Letters and numbers are acceptable. > for (unsigned char X = 'a'; X <= 'z'; ++X) > _______________________________________________ > llvm-commits mailing list > llvm-commits at cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits From evan.cheng at apple.com Wed Sep 5 16:36:15 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Wed, 05 Sep 2007 21:36:15 -0000 Subject: [llvm-commits] [llvm] r41727 - /llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp Message-ID: <200709052136.l85LaFib024868@zion.cs.uiuc.edu> Author: evancheng Date: Wed Sep 5 16:36:14 2007 New Revision: 41727 URL: http://llvm.org/viewvc/llvm-project?rev=41727&view=rev Log: Missing break. Patch by Wojciech Matyjewicz. Modified: llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp Modified: llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp?rev=41727&r1=41726&r2=41727&view=diff ============================================================================== --- llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp (original) +++ llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp Wed Sep 5 16:36:14 2007 @@ -220,6 +220,7 @@ case Instruction::GetElementPtr: if (AddressMightEscape(I)) return true; + break; // next use. case Instruction::BitCast: if (!isa(I->getType())) return true; From evan.cheng at apple.com Wed Sep 5 16:41:34 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Wed, 05 Sep 2007 21:41:34 -0000 Subject: [llvm-commits] [llvm] r41728 - in /llvm/trunk: include/llvm/Support/Allocator.h lib/Support/Allocator.cpp Message-ID: <200709052141.l85LfYBD025217@zion.cs.uiuc.edu> Author: evancheng Date: Wed Sep 5 16:41:34 2007 New Revision: 41728 URL: http://llvm.org/viewvc/llvm-project?rev=41728&view=rev Log: Added Reset() to free all allocated memory regions and reset state to be the same as right after ctor. Modified: llvm/trunk/include/llvm/Support/Allocator.h llvm/trunk/lib/Support/Allocator.cpp Modified: llvm/trunk/include/llvm/Support/Allocator.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/Allocator.h?rev=41728&r1=41727&r2=41728&view=diff ============================================================================== --- llvm/trunk/include/llvm/Support/Allocator.h (original) +++ llvm/trunk/include/llvm/Support/Allocator.h Wed Sep 5 16:41:34 2007 @@ -23,6 +23,7 @@ MallocAllocator() {} ~MallocAllocator() {} + void Reset() {} void *Allocate(unsigned Size, unsigned Alignment) { return malloc(Size); } void Deallocate(void *Ptr) { free(Ptr); } void PrintStats() const {} @@ -38,6 +39,7 @@ BumpPtrAllocator(); ~BumpPtrAllocator(); + void Reset(); void *Allocate(unsigned Size, unsigned Alignment); void Deallocate(void *Ptr) {} void PrintStats() const; Modified: llvm/trunk/lib/Support/Allocator.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Allocator.cpp?rev=41728&r1=41727&r2=41728&view=diff ============================================================================== --- llvm/trunk/lib/Support/Allocator.cpp (original) +++ llvm/trunk/lib/Support/Allocator.cpp Wed Sep 5 16:41:34 2007 @@ -92,6 +92,12 @@ ((MemRegion*)TheMemory)->Deallocate(); } +void BumpPtrAllocator::Reset() { + ((MemRegion*)TheMemory)->Deallocate(); + TheMemory = malloc(4096); + ((MemRegion*)TheMemory)->Init(4096, 1, 0); +} + void *BumpPtrAllocator::Allocate(unsigned Size, unsigned Align) { MemRegion *MRP = (MemRegion*)TheMemory; void *Ptr = MRP->Allocate(Size, Align, &MRP); From evan.cheng at apple.com Wed Sep 5 16:46:52 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Wed, 05 Sep 2007 21:46:52 -0000 Subject: [llvm-commits] [llvm] r41729 - in /llvm/trunk: include/llvm/CodeGen/LiveInterval.h include/llvm/CodeGen/LiveIntervalAnalysis.h lib/CodeGen/LiveInterval.cpp lib/CodeGen/LiveIntervalAnalysis.cpp lib/CodeGen/SimpleRegisterCoalescing.cpp Message-ID: <200709052146.l85Lkr24025397@zion.cs.uiuc.edu> Author: evancheng Date: Wed Sep 5 16:46:51 2007 New Revision: 41729 URL: http://llvm.org/viewvc/llvm-project?rev=41729&view=rev Log: Use pool allocator for all the VNInfo's to improve memory access locality. This reduces coalescing time on siod Mac OS X PPC by 35%. Also remove the back ptr from VNInfo to LiveInterval and other tweaks. Modified: llvm/trunk/include/llvm/CodeGen/LiveInterval.h llvm/trunk/include/llvm/CodeGen/LiveIntervalAnalysis.h llvm/trunk/lib/CodeGen/LiveInterval.cpp llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp llvm/trunk/lib/CodeGen/SimpleRegisterCoalescing.cpp Modified: llvm/trunk/include/llvm/CodeGen/LiveInterval.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/LiveInterval.h?rev=41729&r1=41728&r2=41729&view=diff ============================================================================== --- llvm/trunk/include/llvm/CodeGen/LiveInterval.h (original) +++ llvm/trunk/include/llvm/CodeGen/LiveInterval.h Wed Sep 5 16:46:51 2007 @@ -22,6 +22,7 @@ #define LLVM_CODEGEN_LIVEINTERVAL_H #include "llvm/ADT/SmallVector.h" +#include "llvm/Support/Allocator.h" #include "llvm/Support/Streams.h" #include #include @@ -35,20 +36,18 @@ /// VNInfo - If the value number definition is undefined (e.g. phi /// merge point), it contains ~0u,x. If the value number is not in use, it /// contains ~1u,x to indicate that the value # is not used. - /// parent- LiveInterval parent. /// def - Instruction # of the definition. /// reg - Source reg iff val# is defined by a copy; zero otherwise. /// kills - Instruction # of the kills. If a kill is an odd #, it means /// the kill is a phi join point. struct VNInfo { - LiveInterval *parent; unsigned id; unsigned def; unsigned reg; SmallVector kills; - VNInfo() : parent(0), id(~1U), def(~1U), reg(0) {} - VNInfo(LiveInterval *p, unsigned i, unsigned d, unsigned r) - : parent(p), id(i), def(d), reg(r) {} + VNInfo() : id(~1U), def(~1U), reg(0) {} + VNInfo(unsigned i, unsigned d, unsigned r) + : id(i), def(d), reg(r) {} }; /// LiveRange structure - This represents a simple register range in the @@ -129,15 +128,6 @@ const_vni_iterator vni_begin() const { return valnos.begin(); } const_vni_iterator vni_end() const { return valnos.end(); } - ~LiveInterval() { - for (vni_iterator i = vni_begin(), e = vni_end(); i != e; ++i) { - VNInfo *VNI = *i; - if (VNI->parent == this) - delete VNI; - } - valnos.clear(); - } - /// advanceTo - Advance the specified iterator to point to the LiveRange /// containing the specified position, or end() if the position is past the /// end of the interval. If no LiveRange contains this position, but the @@ -154,35 +144,43 @@ unsigned getNumValNums() const { return valnos.size(); } - /// getFirstValNumInfo - Returns pointer to the first val#. + /// getValNumInfo - Returns pointer to the specified val#. /// - inline VNInfo *getFirstValNumInfo() { - return valnos.front(); + inline VNInfo *getValNumInfo(unsigned ValNo) { + return valnos[ValNo]; } - inline const VNInfo *getFirstValNumInfo() const { - return valnos.front(); + inline const VNInfo *getValNumInfo(unsigned ValNo) const { + return valnos[ValNo]; } /// copyValNumInfo - Copy the value number info for one value number to /// another. - void copyValNumInfo(VNInfo &DstValNo, VNInfo &SrcValNo) { - DstValNo.def = SrcValNo.def; - DstValNo.reg = SrcValNo.reg; - DstValNo.kills = SrcValNo.kills; + void copyValNumInfo(VNInfo *DstValNo, VNInfo *SrcValNo) { + DstValNo->def = SrcValNo->def; + DstValNo->reg = SrcValNo->reg; + DstValNo->kills = SrcValNo->kills; } /// getNextValue - Create a new value number and return it. MIIdx specifies /// the instruction that defines the value number. VNInfo *getNextValue(unsigned MIIdx, unsigned SrcReg) { - VNInfo *VNI = new VNInfo(this, valnos.size(), MIIdx, SrcReg); +#ifdef __GNUC__ + unsigned Alignment = __alignof__(VNInfo); +#else + // FIXME: ugly. + unsigned Alignment = 8; +#endif + VNInfo *VNI= static_cast(VNInfoAllocator.Allocate(sizeof(VNInfo), + Alignment)); + new (VNI) VNInfo(valnos.size(), MIIdx, SrcReg); valnos.push_back(VNI); return VNI; } /// addKillForValNum - Add a kill instruction index to the specified value /// number. - static void addKill(VNInfo &VNI, unsigned KillIdx) { - SmallVector &kills = VNI.kills; + static void addKill(VNInfo *VNI, unsigned KillIdx) { + SmallVector &kills = VNI->kills; if (kills.empty()) { kills.push_back(KillIdx); } else { @@ -194,21 +192,21 @@ /// addKills - Add a number of kills into the VNInfo kill vector. If this /// interval is live at a kill point, then the kill is not added. - void addKills(VNInfo &VNI, const SmallVector &kills) { + void addKills(VNInfo *VNI, const SmallVector &kills) { for (unsigned i = 0, e = kills.size(); i != e; ++i) { unsigned KillIdx = kills[i]; if (!liveAt(KillIdx)) { SmallVector::iterator - I = std::lower_bound(VNI.kills.begin(), VNI.kills.end(), KillIdx); - VNI.kills.insert(I, KillIdx); + I = std::lower_bound(VNI->kills.begin(), VNI->kills.end(), KillIdx); + VNI->kills.insert(I, KillIdx); } } } /// removeKill - Remove the specified kill from the list of kills of /// the specified val#. - static bool removeKill(VNInfo &VNI, unsigned KillIdx) { - SmallVector &kills = VNI.kills; + static bool removeKill(VNInfo *VNI, unsigned KillIdx) { + SmallVector &kills = VNI->kills; SmallVector::iterator I = std::lower_bound(kills.begin(), kills.end(), KillIdx); if (I != kills.end() && *I == KillIdx) { @@ -220,8 +218,8 @@ /// removeKills - Remove all the kills in specified range /// [Start, End] of the specified val#. - void removeKills(VNInfo &VNI, unsigned Start, unsigned End) { - SmallVector &kills = VNI.kills; + void removeKills(VNInfo *VNI, unsigned Start, unsigned End) { + SmallVector &kills = VNI->kills; SmallVector::iterator I = std::lower_bound(kills.begin(), kills.end(), Start); SmallVector::iterator @@ -237,10 +235,11 @@ /// MergeInClobberRanges - For any live ranges that are not defined in the /// current interval, but are defined in the Clobbers interval, mark them - /// used with an unknown definition value. - void MergeInClobberRanges(const LiveInterval &Clobbers); + /// used with an unknown definition value. Caller must pass in reference to + /// VNInfoAllocator since it will create a new val#. + void MergeInClobberRanges(const LiveInterval &Clobbers, + BumpPtrAllocator &VNInfoAllocator); - /// MergeRangesInAsValue - Merge all of the intervals in RHS into this live /// interval as the specified value number. The LiveRanges in RHS are /// allowed to overlap with LiveRanges in the current interval, but only if Modified: llvm/trunk/include/llvm/CodeGen/LiveIntervalAnalysis.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/LiveIntervalAnalysis.h?rev=41729&r1=41728&r2=41729&view=diff ============================================================================== --- llvm/trunk/include/llvm/CodeGen/LiveIntervalAnalysis.h (original) +++ llvm/trunk/include/llvm/CodeGen/LiveIntervalAnalysis.h Wed Sep 5 16:46:51 2007 @@ -27,6 +27,7 @@ #include "llvm/ADT/IndexedMap.h" #include "llvm/ADT/SmallPtrSet.h" #include "llvm/ADT/SmallVector.h" +#include "llvm/Support/Allocator.h" namespace llvm { @@ -43,6 +44,10 @@ const TargetInstrInfo* tii_; LiveVariables* lv_; + /// Special pool allocator for VNInfo's (LiveInterval val#). + /// + BumpPtrAllocator VNInfoAllocator; + /// MBB2IdxMap - The indexes of the first and last instructions in the /// specified basic block. std::vector > MBB2IdxMap; @@ -194,6 +199,8 @@ } } + BumpPtrAllocator& getVNInfoAllocator() { return VNInfoAllocator; } + virtual void getAnalysisUsage(AnalysisUsage &AU) const; virtual void releaseMemory(); Modified: llvm/trunk/lib/CodeGen/LiveInterval.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/LiveInterval.cpp?rev=41729&r1=41728&r2=41729&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/LiveInterval.cpp (original) +++ llvm/trunk/lib/CodeGen/LiveInterval.cpp Wed Sep 5 16:46:51 2007 @@ -124,7 +124,7 @@ ranges.erase(next(I), MergeTo); // Update kill info. - removeKills(*ValNo, OldEnd, I->end-1); + removeKills(ValNo, OldEnd, I->end-1); // If the newly formed range now touches the range after it and if they have // the same value number, merge the two ranges into one range. @@ -233,7 +233,7 @@ // If the span we are removing is at the start of the LiveRange, adjust it. if (I->start == Start) { if (I->end == End) { - removeKills(*I->valno, Start, End); + removeKills(I->valno, Start, End); ranges.erase(I); // Removed the whole LiveRange. } else I->start = End; @@ -243,7 +243,7 @@ // Otherwise if the span we are removing is at the end of the LiveRange, // adjust the other way. if (I->end == End) { - removeKills(*I->valno, Start, End); + removeKills(I->valno, Start, End); I->end = Start; return; } @@ -296,17 +296,8 @@ for (unsigned i = 0; i != NumVals; ++i) { unsigned LHSValID = LHSValNoAssignments[i]; if (i != LHSValID || - (NewVNInfo[LHSValID] && NewVNInfo[LHSValID]->parent != this)) + (NewVNInfo[LHSValID] && NewVNInfo[LHSValID] != getValNumInfo(i))) MustMapCurValNos = true; - - // There might be some dead val#, create VNInfo for them. - if (i < NumNewVals) { - VNInfo *VNI = NewVNInfo[i]; - if (!VNI) { - VNI = new VNInfo(this, i, ~1U, 0); - NewVNInfo[i] = VNI; - } - } } // If we have to apply a mapping to our base interval assignment, rewrite it @@ -345,26 +336,17 @@ OtherAssignments.push_back(RHSValNoAssignments[I->valno->id]); // Update val# info. Renumber them and make sure they all belong to this - // LiveInterval now. - for (unsigned i = 0; i != NumVals; ++i) { - if (i == NumNewVals) - break; - VNInfo *VNI = NewVNInfo[i]; - if (VNI->parent != this || VNI->id != i) { - VNI->parent = this; - VNI->id = i; // Renumber val#. - valnos[i] = VNI; - } - } - for (unsigned i = NumVals; i < NumNewVals; ++i) { + // LiveInterval now. Also remove dead val#'s. + unsigned NumValNos = 0; + for (unsigned i = 0; i < NumNewVals; ++i) { VNInfo *VNI = NewVNInfo[i]; - if (!VNI) - VNI = new VNInfo(this, i, ~1U, 0); - else { - VNI->parent = this; - VNI->id = i; // Renumber val#. + if (VNI) { + if (i >= NumVals) + valnos.push_back(VNI); + else + valnos[NumValNos] = VNI; + VNI->id = NumValNos++; // Renumber val#. } - valnos.push_back(VNI); } if (NumNewVals < NumVals) valnos.resize(NumNewVals); // shrinkify @@ -375,6 +357,7 @@ for (iterator I = Other.begin(), E = Other.end(); I != E; ++I, ++RangeNo) { // Map the valno in the other live range to the current live range. I->valno = NewVNInfo[OtherAssignments[RangeNo]]; + assert(I->valno && "Adding a dead range?"); InsertPos = addRangeFrom(*I, InsertPos); } @@ -403,13 +386,14 @@ /// MergeInClobberRanges - For any live ranges that are not defined in the /// current interval, but are defined in the Clobbers interval, mark them /// used with an unknown definition value. -void LiveInterval::MergeInClobberRanges(const LiveInterval &Clobbers) { +void LiveInterval::MergeInClobberRanges(const LiveInterval &Clobbers, + BumpPtrAllocator &VNInfoAllocator) { if (Clobbers.begin() == Clobbers.end()) return; // Find a value # to use for the clobber ranges. If there is already a value# // for unknown values, use it. // FIXME: Use a single sentinal number for these! - VNInfo *ClobberValNo = getNextValue(~0U, 0); + VNInfo *ClobberValNo = getNextValue(~0U, 0, VNInfoAllocator); iterator IP = begin(); for (const_iterator I = Clobbers.begin(), E = Clobbers.end(); I != E; ++I) { @@ -448,7 +432,7 @@ // Make sure V2 is smaller than V1. if (V1->id < V2->id) { - copyValNumInfo(*V1, *V2); + copyValNumInfo(V1, V2); std::swap(V1, V2); } @@ -492,9 +476,7 @@ // ~1U so it can be nuked later. if (V1->id == getNumValNums()-1) { do { - VNInfo *VNI = valnos.back(); valnos.pop_back(); - delete VNI; } while (valnos.back()->def == ~1U); } else { V1->def = ~1U; Modified: llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp?rev=41729&r1=41728&r2=41729&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp (original) +++ llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp Wed Sep 5 16:46:51 2007 @@ -62,6 +62,7 @@ } void LiveIntervals::releaseMemory() { + VNInfoAllocator.Reset(); mi2iMap_.clear(); i2miMap_.clear(); r2iMap_.clear(); @@ -448,13 +449,13 @@ if (HasUse) { LiveRange LR(getLoadIndex(index), getUseIndex(index), - nI.getNextValue(~0U, 0)); + nI.getNextValue(~0U, 0, VNInfoAllocator)); DOUT << " +" << LR; nI.addRange(LR); } if (HasDef) { LiveRange LR(getDefIndex(index), getStoreIndex(index), - nI.getNextValue(~0U, 0)); + nI.getNextValue(~0U, 0, VNInfoAllocator)); DOUT << " +" << LR; nI.addRange(LR); } @@ -500,9 +501,9 @@ VNInfo *ValNo; unsigned SrcReg, DstReg; if (!tii_->isMoveInstr(*mi, SrcReg, DstReg)) - ValNo = interval.getNextValue(defIndex, 0); + ValNo = interval.getNextValue(defIndex, 0, VNInfoAllocator); else - ValNo = interval.getNextValue(defIndex, SrcReg); + ValNo = interval.getNextValue(defIndex, SrcReg, VNInfoAllocator); assert(ValNo->id == 0 && "First value in interval is not 0?"); @@ -526,7 +527,7 @@ LiveRange LR(defIndex, killIdx, ValNo); interval.addRange(LR); DOUT << " +" << LR << "\n"; - interval.addKill(*ValNo, killIdx); + interval.addKill(ValNo, killIdx); return; } } @@ -565,7 +566,7 @@ LiveRange LR(getMBBStartIdx(Kill->getParent()), killIdx, ValNo); interval.addRange(LR); - interval.addKill(*ValNo, killIdx); + interval.addKill(ValNo, killIdx); DOUT << " +" << LR; } @@ -597,8 +598,8 @@ // The new value number (#1) is defined by the instruction we claimed // defined value #0. - VNInfo *ValNo = interval.getNextValue(0, 0); - interval.copyValNumInfo(*ValNo, *OldValNo); + VNInfo *ValNo = interval.getNextValue(0, 0, VNInfoAllocator); + interval.copyValNumInfo(ValNo, OldValNo); // Value#0 is now defined by the 2-addr instruction. OldValNo->def = RedefIndex; @@ -608,8 +609,8 @@ LiveRange LR(DefIndex, RedefIndex, ValNo); DOUT << " replace range with " << LR; interval.addRange(LR); - interval.addKill(*ValNo, RedefIndex); - interval.removeKills(*ValNo, RedefIndex, OldEnd); + interval.addKill(ValNo, RedefIndex); + interval.removeKills(ValNo, RedefIndex, OldEnd); // If this redefinition is dead, we need to add a dummy unit live // range covering the def slot. @@ -628,22 +629,22 @@ "PHI elimination vreg should have one kill, the PHI itself!"); // Remove the old range that we now know has an incorrect number. - VNInfo *VNI = interval.getFirstValNumInfo(); + VNInfo *VNI = interval.getValNumInfo(0); MachineInstr *Killer = vi.Kills[0]; unsigned Start = getMBBStartIdx(Killer->getParent()); unsigned End = getUseIndex(getInstructionIndex(Killer))+1; DOUT << " Removing [" << Start << "," << End << "] from: "; interval.print(DOUT, mri_); DOUT << "\n"; interval.removeRange(Start, End); - interval.addKill(*VNI, Start+1); // odd # means phi node + interval.addKill(VNI, Start+1); // odd # means phi node DOUT << " RESULT: "; interval.print(DOUT, mri_); // Replace the interval with one of a NEW value number. Note that this // value number isn't actually defined by an instruction, weird huh? :) - LiveRange LR(Start, End, interval.getNextValue(~0, 0)); + LiveRange LR(Start, End, interval.getNextValue(~0, 0, VNInfoAllocator)); DOUT << " replace range with " << LR; interval.addRange(LR); - interval.addKill(*LR.valno, End); + interval.addKill(LR.valno, End); DOUT << " RESULT: "; interval.print(DOUT, mri_); } @@ -655,14 +656,14 @@ VNInfo *ValNo; unsigned SrcReg, DstReg; if (!tii_->isMoveInstr(*mi, SrcReg, DstReg)) - ValNo = interval.getNextValue(defIndex, 0); + ValNo = interval.getNextValue(defIndex, 0, VNInfoAllocator); else - ValNo = interval.getNextValue(defIndex, SrcReg); + ValNo = interval.getNextValue(defIndex, SrcReg, VNInfoAllocator); unsigned killIndex = getInstructionIndex(&mbb->back()) + InstrSlots::NUM; LiveRange LR(defIndex, killIndex, ValNo); interval.addRange(LR); - interval.addKill(*ValNo, killIndex-1); // odd # means phi node + interval.addKill(ValNo, killIndex-1); // odd # means phi node DOUT << " +" << LR; } } @@ -724,10 +725,10 @@ // Already exists? Extend old live interval. LiveInterval::iterator OldLR = interval.FindLiveRangeContaining(start); VNInfo *ValNo = (OldLR != interval.end()) - ? OldLR->valno : interval.getNextValue(start, SrcReg); + ? OldLR->valno : interval.getNextValue(start, SrcReg, VNInfoAllocator); LiveRange LR(start, end, ValNo); interval.addRange(LR); - interval.addKill(*LR.valno, end); + interval.addKill(LR.valno, end); DOUT << " +" << LR << '\n'; } @@ -792,9 +793,9 @@ } } - LiveRange LR(start, end, interval.getNextValue(start, 0)); + LiveRange LR(start, end, interval.getNextValue(start, 0, VNInfoAllocator)); interval.addRange(LR); - interval.addKill(*LR.valno, end); + interval.addKill(LR.valno, end); DOUT << " +" << LR << '\n'; } Modified: llvm/trunk/lib/CodeGen/SimpleRegisterCoalescing.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SimpleRegisterCoalescing.cpp?rev=41729&r1=41728&r2=41729&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/SimpleRegisterCoalescing.cpp (original) +++ llvm/trunk/lib/CodeGen/SimpleRegisterCoalescing.cpp Wed Sep 5 16:46:51 2007 @@ -158,7 +158,7 @@ for (const unsigned *AS = mri_->getSubRegisters(IntB.reg); *AS; ++AS) { LiveInterval &AliasLI = li_->getInterval(*AS); AliasLI.addRange(LiveRange(FillerStart, FillerEnd, - AliasLI.getNextValue(FillerStart, 0))); + AliasLI.getNextValue(FillerStart, 0, li_->getVNInfoAllocator()))); } } @@ -366,7 +366,8 @@ // Update the liveintervals of sub-registers. for (const unsigned *AS = mri_->getSubRegisters(repDstReg); *AS; ++AS) - li_->getInterval(*AS).MergeInClobberRanges(*ResSrcInt); + li_->getInterval(*AS).MergeInClobberRanges(*ResSrcInt, + li_->getVNInfoAllocator()); } else { // Merge use info if the destination is a virtual register. LiveVariables::VarInfo& dVI = lv_->getVarInfo(repDstReg); @@ -564,13 +565,13 @@ // Okay, now that there is a single LHS value number that we're merging the // RHS into, update the value number info for the LHS to indicate that the // value number is defined where the RHS value number was. - const VNInfo *VNI = RHS.getFirstValNumInfo(); + const VNInfo *VNI = RHS.getValNumInfo(0); LHSValNo->def = VNI->def; LHSValNo->reg = VNI->reg; // Okay, the final step is to loop over the RHS live intervals, adding them to // the LHS. - LHS.addKills(*LHSValNo, VNI->kills); + LHS.addKills(LHSValNo, VNI->kills); LHS.MergeRangesInAsValue(RHS, LHSValNo); LHS.weight += RHS.weight; if (RHS.preference && !LHS.preference) @@ -625,7 +626,7 @@ int RHSVal0DefinedFromLHS = -1; int RHSValID = -1; VNInfo *RHSValNoInfo = NULL; - VNInfo *RHSValNoInfo0 = RHS.getFirstValNumInfo(); + VNInfo *RHSValNoInfo0 = RHS.getValNumInfo(0); unsigned RHSSrcReg = RHSValNoInfo0->reg; if ((RHSSrcReg == 0 || rep(RHSSrcReg) != LHS.reg)) { // If RHS is not defined as a copy from the LHS, we can use simpler and @@ -809,8 +810,8 @@ E = LHSValsDefinedFromRHS.end(); I != E; ++I) { VNInfo *VNI = I->first; unsigned LHSValID = LHSValNoAssignments[VNI->id]; - LiveInterval::removeKill(*NewVNInfo[LHSValID], VNI->def); - RHS.addKills(*NewVNInfo[LHSValID], VNI->kills); + LiveInterval::removeKill(NewVNInfo[LHSValID], VNI->def); + RHS.addKills(NewVNInfo[LHSValID], VNI->kills); } RHS.join(LHS, &RHSValNoAssignments[0], &LHSValNoAssignments[0], NewVNInfo); @@ -821,8 +822,8 @@ E = RHSValsDefinedFromLHS.end(); I != E; ++I) { VNInfo *VNI = I->first; unsigned RHSValID = RHSValNoAssignments[VNI->id]; - LiveInterval::removeKill(*NewVNInfo[RHSValID], VNI->def); - LHS.addKills(*NewVNInfo[RHSValID], VNI->kills); + LiveInterval::removeKill(NewVNInfo[RHSValID], VNI->def); + LHS.addKills(NewVNInfo[RHSValID], VNI->kills); } LHS.join(RHS, &LHSValNoAssignments[0], &RHSValNoAssignments[0], NewVNInfo); From evan.cheng at apple.com Wed Sep 5 16:58:19 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Wed, 05 Sep 2007 21:58:19 -0000 Subject: [llvm-commits] [llvm] r41730 - /llvm/trunk/include/llvm/CodeGen/LiveInterval.h Message-ID: <200709052158.l85LwJvf025751@zion.cs.uiuc.edu> Author: evancheng Date: Wed Sep 5 16:58:18 2007 New Revision: 41730 URL: http://llvm.org/viewvc/llvm-project?rev=41730&view=rev Log: Accidentially left this out. Modified: llvm/trunk/include/llvm/CodeGen/LiveInterval.h Modified: llvm/trunk/include/llvm/CodeGen/LiveInterval.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/LiveInterval.h?rev=41730&r1=41729&r2=41730&view=diff ============================================================================== --- llvm/trunk/include/llvm/CodeGen/LiveInterval.h (original) +++ llvm/trunk/include/llvm/CodeGen/LiveInterval.h Wed Sep 5 16:58:18 2007 @@ -163,7 +163,8 @@ /// getNextValue - Create a new value number and return it. MIIdx specifies /// the instruction that defines the value number. - VNInfo *getNextValue(unsigned MIIdx, unsigned SrcReg) { + VNInfo *getNextValue(unsigned MIIdx, unsigned SrcReg, + BumpPtrAllocator &VNInfoAllocator) { #ifdef __GNUC__ unsigned Alignment = __alignof__(VNInfo); #else From isanbard at gmail.com Wed Sep 5 18:47:14 2007 From: isanbard at gmail.com (Bill Wendling) Date: Wed, 05 Sep 2007 23:47:14 -0000 Subject: [llvm-commits] [llvm] r41733 - /llvm/trunk/lib/Target/PowerPC/PPCHazardRecognizers.cpp Message-ID: <200709052347.l85NlGsb029085@zion.cs.uiuc.edu> Author: void Date: Wed Sep 5 18:47:12 2007 New Revision: 41733 URL: http://llvm.org/viewvc/llvm-project?rev=41733&view=rev Log: LVXL and STVXL are also a load and store resp. Modified: llvm/trunk/lib/Target/PowerPC/PPCHazardRecognizers.cpp Modified: llvm/trunk/lib/Target/PowerPC/PPCHazardRecognizers.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/PPCHazardRecognizers.cpp?rev=41733&r1=41732&r2=41733&view=diff ============================================================================== --- llvm/trunk/lib/Target/PowerPC/PPCHazardRecognizers.cpp (original) +++ llvm/trunk/lib/Target/PowerPC/PPCHazardRecognizers.cpp Wed Sep 5 18:47:12 2007 @@ -204,6 +204,7 @@ LoadSize = 8; break; case PPC::LVX: + case PPC::LVXL: LoadSize = 16; break; } @@ -268,6 +269,7 @@ ThisStoreSize = 8; break; case PPC::STVX: + case PPC::STVXL: ThisStoreSize = 16; break; } From clattner at apple.com Wed Sep 5 19:03:02 2007 From: clattner at apple.com (Chris Lattner) Date: Wed, 5 Sep 2007 17:03:02 -0700 Subject: [llvm-commits] [llvm] r41728 - in /llvm/trunk: include/llvm/Support/Allocator.h lib/Support/Allocator.cpp In-Reply-To: <200709052141.l85LfYBD025217@zion.cs.uiuc.edu> References: <200709052141.l85LfYBD025217@zion.cs.uiuc.edu> Message-ID: On Sep 5, 2007, at 2:41 PM, Evan Cheng wrote: > ====================================================================== > ======== > --- llvm/trunk/lib/Support/Allocator.cpp (original) > +++ llvm/trunk/lib/Support/Allocator.cpp Wed Sep 5 16:41:34 2007 > @@ -92,6 +92,12 @@ > ((MemRegion*)TheMemory)->Deallocate(); > } > > +void BumpPtrAllocator::Reset() { > + ((MemRegion*)TheMemory)->Deallocate(); > + TheMemory = malloc(4096); > + ((MemRegion*)TheMemory)->Init(4096, 1, 0); > +} > + This is correct, but it would be more efficient to avoid deallocating the first chunk, which is what requires reallocating it immediately. -Chris From clattner at apple.com Wed Sep 5 19:05:15 2007 From: clattner at apple.com (Chris Lattner) Date: Wed, 5 Sep 2007 17:05:15 -0700 Subject: [llvm-commits] [llvm] r41729 - in /llvm/trunk: include/llvm/CodeGen/LiveInterval.h include/llvm/CodeGen/LiveIntervalAnalysis.h lib/CodeGen/LiveInterval.cpp lib/CodeGen/LiveIntervalAnalysis.cpp lib/CodeGen/SimpleRegisterCoalescing.cpp In-Reply-To: <200709052146.l85Lkr24025397@zion.cs.uiuc.edu> References: <200709052146.l85Lkr24025397@zion.cs.uiuc.edu> Message-ID: On Sep 5, 2007, at 2:46 PM, Evan Cheng wrote: > Author: evancheng > Date: Wed Sep 5 16:46:51 2007 > New Revision: 41729 > > URL: http://llvm.org/viewvc/llvm-project?rev=41729&view=rev > Log: > Use pool allocator for all the VNInfo's to improve memory access > locality. This reduces coalescing time on siod Mac OS X PPC by 35%. > Also remove the back ptr from VNInfo to LiveInterval and other tweaks. Nice! To verify, you *are* running the destructors on the VNInfo objects before you nuke the memory region, right? Not destroying the VNInfo would cause the VNInfo::kills smallvector to leak memory. -Chris From evan.cheng at apple.com Wed Sep 5 19:14:42 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Thu, 06 Sep 2007 00:14:42 -0000 Subject: [llvm-commits] [llvm] r41735 - in /llvm/trunk: lib/Target/X86/X86InstrInfo.cpp test/CodeGen/X86/2007-09-05-InvalidAsm.ll Message-ID: <200709060014.l860EgjR029727@zion.cs.uiuc.edu> Author: evancheng Date: Wed Sep 5 19:14:41 2007 New Revision: 41735 URL: http://llvm.org/viewvc/llvm-project?rev=41735&view=rev Log: Fix a bug in X86InstrInfo::convertToThreeAddress that caused it to codegen: leal (,%rcx,8), %rcx It should be leal (,%rcx,8), %ecx Added: llvm/trunk/test/CodeGen/X86/2007-09-05-InvalidAsm.ll Modified: llvm/trunk/lib/Target/X86/X86InstrInfo.cpp Modified: llvm/trunk/lib/Target/X86/X86InstrInfo.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86InstrInfo.cpp?rev=41735&r1=41734&r2=41735&view=diff ============================================================================== --- llvm/trunk/lib/Target/X86/X86InstrInfo.cpp (original) +++ llvm/trunk/lib/Target/X86/X86InstrInfo.cpp Wed Sep 5 19:14:41 2007 @@ -210,39 +210,30 @@ } case X86::SHL16ri: { assert(MI->getNumOperands() == 3 && "Unknown shift instruction!"); - // NOTE: LEA doesn't produce flags like shift does, but LLVM never uses - // the flags produced by a shift yet, so this is safe. - unsigned Dest = MI->getOperand(0).getReg(); - unsigned Src = MI->getOperand(1).getReg(); - unsigned ShAmt = MI->getOperand(2).getImm(); - if (ShAmt == 0 || ShAmt >= 4) return 0; + // NOTE: LEA doesn't produce flags like shift does, but LLVM never uses + // the flags produced by a shift yet, so this is safe. + unsigned Dest = MI->getOperand(0).getReg(); + unsigned Src = MI->getOperand(1).getReg(); + unsigned ShAmt = MI->getOperand(2).getImm(); + if (ShAmt == 0 || ShAmt >= 4) return 0; if (DisableLEA16) { // If 16-bit LEA is disabled, use 32-bit LEA via subregisters. SSARegMap *RegMap = MFI->getParent()->getSSARegMap(); - unsigned Opc, leaInReg, leaOutReg; - MVT::ValueType leaVT; - if (TM.getSubtarget().is64Bit()) { - Opc = X86::LEA64_32r; - leaVT = MVT::i64; - leaInReg = RegMap->createVirtualRegister(&X86::GR64RegClass); - leaOutReg = RegMap->createVirtualRegister(&X86::GR64RegClass); - } else { - Opc = X86::LEA32r; - leaVT = MVT::i32; - leaInReg = RegMap->createVirtualRegister(&X86::GR32RegClass); - leaOutReg = RegMap->createVirtualRegister(&X86::GR32RegClass); - } + unsigned Opc = TM.getSubtarget().is64Bit() + ? X86::LEA64_32r : X86::LEA32r; + unsigned leaInReg = RegMap->createVirtualRegister(&X86::GR32RegClass); + unsigned leaOutReg = RegMap->createVirtualRegister(&X86::GR32RegClass); - MachineInstr *Ins = NULL, *Ext = NULL; - - Ins = BuildMI(get(X86::INSERT_SUBREG), leaInReg).addReg(Src).addImm(2); + MachineInstr *Ins = + BuildMI(get(X86::INSERT_SUBREG), leaInReg).addReg(Src).addImm(2); Ins->copyKillDeadInfo(MI); NewMI = BuildMI(get(Opc), leaOutReg) .addReg(0).addImm(1 << ShAmt).addReg(leaInReg).addImm(0); - Ext = BuildMI(get(X86::EXTRACT_SUBREG), Dest).addReg(leaOutReg).addImm(2); + MachineInstr *Ext = + BuildMI(get(X86::EXTRACT_SUBREG), Dest).addReg(leaOutReg).addImm(2); Ext->copyKillDeadInfo(MI); MFI->insert(MBBI, Ins); // Insert the insert_subreg @@ -250,8 +241,7 @@ LV.addVirtualRegisterKilled(leaInReg, NewMI); MFI->insert(MBBI, NewMI); // Insert the new inst LV.addVirtualRegisterKilled(leaOutReg, Ext); - MFI->insert(MBBI, Ext); // Insert the extract_subreg - + MFI->insert(MBBI, Ext); // Insert the extract_subreg return Ext; } else { NewMI = BuildMI(get(X86::LEA16r), Dest) Added: llvm/trunk/test/CodeGen/X86/2007-09-05-InvalidAsm.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/2007-09-05-InvalidAsm.ll?rev=41735&view=auto ============================================================================== --- llvm/trunk/test/CodeGen/X86/2007-09-05-InvalidAsm.ll (added) +++ llvm/trunk/test/CodeGen/X86/2007-09-05-InvalidAsm.ll Wed Sep 5 19:14:41 2007 @@ -0,0 +1,49 @@ +; RUN: llvm-as < %s | llc -mtriple=x86_64-apple-darwin -x86-asm-syntax=intel | not grep {lea\[\[:space:\]\]R} + + %struct.AGenericCall = type { %struct.AGenericManager*, %struct.ComponentParameters*, i32* } + %struct.AGenericManager = type <{ i8 }> + %struct.ComponentInstanceRecord = type opaque + %struct.ComponentParameters = type { [1 x i64] } + +define i32 @_ZN12AGenericCall10MapIDPtrAtEsRP23ComponentInstanceRecord(%struct.AGenericCall* %this, i16 signext %param, %struct.ComponentInstanceRecord** %instance) { +entry: + %tmp4 = icmp slt i16 %param, 0 ; [#uses=1] + br i1 %tmp4, label %cond_true, label %cond_next + +cond_true: ; preds = %entry + %tmp1415 = shl i16 %param, 3 ; [#uses=1] + %tmp17 = getelementptr %struct.AGenericCall* %this, i32 0, i32 1 ; <%struct.ComponentParameters**> [#uses=1] + %tmp18 = load %struct.ComponentParameters** %tmp17, align 8 ; <%struct.ComponentParameters*> [#uses=1] + %tmp1920 = bitcast %struct.ComponentParameters* %tmp18 to i8* ; [#uses=1] + %tmp212223 = sext i16 %tmp1415 to i64 ; [#uses=1] + %tmp24 = getelementptr i8* %tmp1920, i64 %tmp212223 ; [#uses=1] + %tmp2425 = bitcast i8* %tmp24 to i64* ; [#uses=1] + %tmp28 = load i64* %tmp2425, align 8 ; [#uses=1] + %tmp2829 = inttoptr i64 %tmp28 to i32* ; [#uses=1] + %tmp31 = getelementptr %struct.AGenericCall* %this, i32 0, i32 2 ; [#uses=1] + store i32* %tmp2829, i32** %tmp31, align 8 + br label %cond_next + +cond_next: ; preds = %cond_true, %entry + %tmp4243 = shl i16 %param, 3 ; [#uses=1] + %tmp46 = getelementptr %struct.AGenericCall* %this, i32 0, i32 1 ; <%struct.ComponentParameters**> [#uses=1] + %tmp47 = load %struct.ComponentParameters** %tmp46, align 8 ; <%struct.ComponentParameters*> [#uses=1] + %tmp4849 = bitcast %struct.ComponentParameters* %tmp47 to i8* ; [#uses=1] + %tmp505152 = sext i16 %tmp4243 to i64 ; [#uses=1] + %tmp53 = getelementptr i8* %tmp4849, i64 %tmp505152 ; [#uses=1] + %tmp5354 = bitcast i8* %tmp53 to i64* ; [#uses=1] + %tmp58 = load i64* %tmp5354, align 8 ; [#uses=1] + %tmp59 = icmp eq i64 %tmp58, 0 ; [#uses=1] + br i1 %tmp59, label %UnifiedReturnBlock, label %cond_true63 + +cond_true63: ; preds = %cond_next + %tmp65 = getelementptr %struct.AGenericCall* %this, i32 0, i32 0 ; <%struct.AGenericManager**> [#uses=1] + %tmp66 = load %struct.AGenericManager** %tmp65, align 8 ; <%struct.AGenericManager*> [#uses=1] + %tmp69 = tail call i32 @_ZN15AGenericManager24DefaultComponentInstanceERP23ComponentInstanceRecord( %struct.AGenericManager* %tmp66, %struct.ComponentInstanceRecord** %instance ) ; [#uses=1] + ret i32 %tmp69 + +UnifiedReturnBlock: ; preds = %cond_next + ret i32 undef +} + +declare i32 @_ZN15AGenericManager24DefaultComponentInstanceERP23ComponentInstanceRecord(%struct.AGenericManager*, %struct.ComponentInstanceRecord**) From dpatel at apple.com Wed Sep 5 19:26:47 2007 From: dpatel at apple.com (Devang Patel) Date: Thu, 06 Sep 2007 00:26:47 -0000 Subject: [llvm-commits] [llvm-gcc-4.2] r41738 - in /llvm-gcc-4.2/trunk/gcc: llvm-backend.cpp llvm-convert.cpp llvm-internal.h Message-ID: <200709060026.l860QmQi030081@zion.cs.uiuc.edu> Author: dpatel Date: Wed Sep 5 19:26:45 2007 New Revision: 41738 URL: http://llvm.org/viewvc/llvm-project?rev=41738&view=rev Log: Replace GV from AttributeUsedGlobals list. Modified: llvm-gcc-4.2/trunk/gcc/llvm-backend.cpp llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp llvm-gcc-4.2/trunk/gcc/llvm-internal.h Modified: llvm-gcc-4.2/trunk/gcc/llvm-backend.cpp URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/llvm-backend.cpp?rev=41738&r1=41737&r2=41738&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/llvm-backend.cpp (original) +++ llvm-gcc-4.2/trunk/gcc/llvm-backend.cpp Wed Sep 5 19:26:45 2007 @@ -85,7 +85,7 @@ static cl::opt DisableLLVMOptimizations("disable-llvm-optzns"); std::vector > StaticCtors, StaticDtors; -std::vector AttributeUsedGlobals; +SmallPtrSet AttributeUsedGlobals; std::vector AttributeNoinlineFunctions; std::vector AttributeAnnotateGlobals; @@ -440,6 +440,7 @@ createOptimizationPasses(); + AttributeUsedGlobals.clear(); timevar_pop(TV_LLVM_INIT); } @@ -480,9 +481,16 @@ CreateStructorsList(StaticDtors, "llvm.global_dtors"); if (!AttributeUsedGlobals.empty()) { - const Type *SBP = PointerType::get(Type::Int8Ty); - ArrayType *AT = ArrayType::get(SBP, AttributeUsedGlobals.size()); - Constant *Init = ConstantArray::get(AT, AttributeUsedGlobals); + std::vector AUGs; + const Type *SBP= PointerType::get(Type::Int8Ty); + for (SmallPtrSet::iterator AI = AttributeUsedGlobals.begin(), + AE = AttributeUsedGlobals.end(); AI != AE; ++AI) { + Constant *C = *AI; + AUGs.push_back(ConstantExpr::getBitCast(C, SBP)); + } + + ArrayType *AT = ArrayType::get(SBP, AUGs.size()); + Constant *Init = ConstantArray::get(AT, AUGs); GlobalValue *gv = new GlobalVariable(AT, false, GlobalValue::AppendingLinkage, Init, "llvm.used", TheModule); @@ -806,6 +814,10 @@ GlobalValue::ExternalLinkage, 0, GV->getName(), TheModule); GV->replaceAllUsesWith(ConstantExpr::getBitCast(NGV, GV->getType())); + if (AttributeUsedGlobals.count(GV)) { + AttributeUsedGlobals.erase(GV); + AttributeUsedGlobals.insert(NGV); + } delete GV; SET_DECL_LLVM(decl, NGV); GV = NGV; @@ -865,10 +877,8 @@ } // Handle used decls - if (DECL_PRESERVE_P (decl)) { - const Type *SBP= PointerType::get(Type::Int8Ty); - AttributeUsedGlobals.push_back(ConstantExpr::getBitCast(GV, SBP)); - } + if (DECL_PRESERVE_P (decl)) + AttributeUsedGlobals.insert(GV); // Add annotate attributes for globals if (DECL_ATTRIBUTES(decl)) Modified: llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp?rev=41738&r1=41737&r2=41738&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp (original) +++ llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp Wed Sep 5 19:26:45 2007 @@ -622,10 +622,8 @@ Fn->setSection(TREE_STRING_POINTER(DECL_SECTION_NAME(FnDecl))); // Handle used Functions - if (DECL_PRESERVE_P (FnDecl)) { - const Type *SBP= PointerType::get(Type::Int8Ty); - AttributeUsedGlobals.push_back(ConstantExpr::getBitCast(Fn,SBP)); - } + if (DECL_PRESERVE_P (FnDecl)) + AttributeUsedGlobals.insert(Fn); // Handle noinline Functions if (lookup_attribute ("noinline", DECL_ATTRIBUTES (FnDecl))) { Modified: llvm-gcc-4.2/trunk/gcc/llvm-internal.h URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/llvm-internal.h?rev=41738&r1=41737&r2=41738&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/llvm-internal.h (original) +++ llvm-gcc-4.2/trunk/gcc/llvm-internal.h Wed Sep 5 19:26:45 2007 @@ -35,6 +35,7 @@ #include "llvm/Intrinsics.h" #include "llvm/ADT/IndexedMap.h" #include "llvm/ADT/SmallVector.h" +#include "llvm/ADT/SmallPtrSet.h" #include "llvm/Support/DataTypes.h" #include "llvm/Support/LLVMBuilder.h" #include "llvm/Support/Streams.h" @@ -91,7 +92,7 @@ extern std::vector > StaticCtors, StaticDtors; /// AttributeUsedGlobals - The list of globals that are marked attribute(used). -extern std::vector AttributeUsedGlobals; +extern SmallPtrSet AttributeUsedGlobals; /// AttributeNoinlineFunctions - The list of functions that are /// marked attribute(noinline) From evan.cheng at apple.com Wed Sep 5 20:07:28 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Thu, 06 Sep 2007 01:07:28 -0000 Subject: [llvm-commits] [llvm] r41739 - in /llvm/trunk/lib/CodeGen: LiveInterval.cpp LiveIntervalAnalysis.cpp Message-ID: <200709060107.l8617TAb032078@zion.cs.uiuc.edu> Author: evancheng Date: Wed Sep 5 20:07:24 2007 New Revision: 41739 URL: http://llvm.org/viewvc/llvm-project?rev=41739&view=rev Log: Fix a memory leak. Modified: llvm/trunk/lib/CodeGen/LiveInterval.cpp llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp Modified: llvm/trunk/lib/CodeGen/LiveInterval.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/LiveInterval.cpp?rev=41739&r1=41738&r2=41739&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/LiveInterval.cpp (original) +++ llvm/trunk/lib/CodeGen/LiveInterval.cpp Wed Sep 5 20:07:24 2007 @@ -476,7 +476,9 @@ // ~1U so it can be nuked later. if (V1->id == getNumValNums()-1) { do { + VNInfo *VNI = valnos.back(); valnos.pop_back(); + VNI->~VNInfo(); } while (valnos.back()->def == ~1U); } else { V1->def = ~1U; Modified: llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp?rev=41739&r1=41738&r2=41739&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp (original) +++ llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp Wed Sep 5 20:07:24 2007 @@ -62,10 +62,11 @@ } void LiveIntervals::releaseMemory() { - VNInfoAllocator.Reset(); mi2iMap_.clear(); i2miMap_.clear(); r2iMap_.clear(); + // Release VNInfo memroy regions after all VNInfo objects are dtor'd. + VNInfoAllocator.Reset(); for (unsigned i = 0, e = ClonedMIs.size(); i != e; ++i) delete ClonedMIs[i]; } From evan.cheng at apple.com Wed Sep 5 20:07:52 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Wed, 5 Sep 2007 18:07:52 -0700 Subject: [llvm-commits] [llvm] r41729 - in /llvm/trunk: include/llvm/CodeGen/LiveInterval.h include/llvm/CodeGen/LiveIntervalAnalysis.h lib/CodeGen/LiveInterval.cpp lib/CodeGen/LiveIntervalAnalysis.cpp lib/CodeGen/SimpleRegisterCoalescing.cpp In-Reply-To: References: <200709052146.l85Lkr24025397@zion.cs.uiuc.edu> Message-ID: <87E48761-DED1-40AB-A3B7-DDADF11501F8@apple.com> On Sep 5, 2007, at 5:05 PM, Chris Lattner wrote: > > On Sep 5, 2007, at 2:46 PM, Evan Cheng wrote: > >> Author: evancheng >> Date: Wed Sep 5 16:46:51 2007 >> New Revision: 41729 >> >> URL: http://llvm.org/viewvc/llvm-project?rev=41729&view=rev >> Log: >> Use pool allocator for all the VNInfo's to improve memory access >> locality. This reduces coalescing time on siod Mac OS X PPC by 35%. >> Also remove the back ptr from VNInfo to LiveInterval and other >> tweaks. > > Nice! To verify, you *are* running the destructors on the VNInfo > objects before you nuke the memory region, right? Not destroying the > VNInfo would cause the VNInfo::kills smallvector to leak memory. Ugh, no. It's leaky like a broken lawn sprinkler. :-) I've fixed it with this patch: http://lists.cs.uiuc.edu/pipermail/llvm-commits/Week-of-Mon-20070903/053284.html Evan > > > -Chris > _______________________________________________ > llvm-commits mailing list > llvm-commits at cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits From nicholas at mxc.ca Wed Sep 5 20:10:22 2007 From: nicholas at mxc.ca (Nick Lewycky) Date: Thu, 06 Sep 2007 01:10:22 -0000 Subject: [llvm-commits] [llvm] r41740 - in /llvm/trunk: lib/Transforms/Scalar/InstructionCombining.cpp test/Transforms/InstCombine/2007-09-05-EqualGEP.ll Message-ID: <200709060110.l861AMEm032252@zion.cs.uiuc.edu> Author: nicholas Date: Wed Sep 5 20:10:22 2007 New Revision: 41740 URL: http://llvm.org/viewvc/llvm-project?rev=41740&view=rev Log: When the two operands of an icmp are equal, there are five possible predicates that would make the icmp true. Fixes PR1637. Added: llvm/trunk/test/Transforms/InstCombine/2007-09-05-EqualGEP.ll Modified: llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp Modified: llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp?rev=41740&r1=41739&r2=41740&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp (original) +++ llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp Wed Sep 5 20:10:22 2007 @@ -4563,7 +4563,9 @@ if (NumDifferences == 0) // SAME GEP? return ReplaceInstUsesWith(I, // No comparison is needed here. ConstantInt::get(Type::Int1Ty, - Cond == ICmpInst::ICMP_EQ)); + Cond == ICmpInst::ICMP_EQ || + Cond == ICmpInst::ICMP_ULE || Cond == ICmpInst::ICMP_UGE || + Cond == ICmpInst::ICMP_SLE || Cond == ICmpInst::ICMP_SGE)); else if (NumDifferences == 1) { Value *LHSV = GEPLHS->getOperand(DiffOperand); Value *RHSV = GEPRHS->getOperand(DiffOperand); Added: llvm/trunk/test/Transforms/InstCombine/2007-09-05-EqualGEP.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstCombine/2007-09-05-EqualGEP.ll?rev=41740&view=auto ============================================================================== --- llvm/trunk/test/Transforms/InstCombine/2007-09-05-EqualGEP.ll (added) +++ llvm/trunk/test/Transforms/InstCombine/2007-09-05-EqualGEP.ll Wed Sep 5 20:10:22 2007 @@ -0,0 +1,10 @@ +; RUN: llvm-as < %s | opt -instcombine | llvm-dis | grep {ret i1 true} +; PR1637 + +define i1 @f(i8* %arr) { + %X = getelementptr i8* %arr, i32 1 + %Y = getelementptr i8* %arr, i32 1 + %test = icmp uge i8* %X, %Y + ret i1 %test +} + From clattner at apple.com Wed Sep 5 21:01:16 2007 From: clattner at apple.com (Chris Lattner) Date: Wed, 5 Sep 2007 19:01:16 -0700 Subject: [llvm-commits] [llvm] r41740 - in /llvm/trunk: lib/Transforms/Scalar/InstructionCombining.cpp test/Transforms/InstCombine/2007-09-05-EqualGEP.ll In-Reply-To: <200709060110.l861AMEm032252@zion.cs.uiuc.edu> References: <200709060110.l861AMEm032252@zion.cs.uiuc.edu> Message-ID: On Sep 5, 2007, at 6:10 PM, Nick Lewycky wrote: > Author: nicholas > Date: Wed Sep 5 20:10:22 2007 > New Revision: 41740 > > URL: http://llvm.org/viewvc/llvm-project?rev=41740&view=rev > Log: > When the two operands of an icmp are equal, there are five possible > predicates > that would make the icmp true. Fixes PR1637. Thanks for fixing this Nicholas! Instead of enumerating the ICMP opcodes, please use the isTrueWhenEqual function in InstCombine.cpp Thanks! -Chris > Added: > llvm/trunk/test/Transforms/InstCombine/2007-09-05-EqualGEP.ll > Modified: > llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp > > Modified: llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/ > Scalar/InstructionCombining.cpp?rev=41740&r1=41739&r2=41740&view=diff > > ====================================================================== > ======== > --- llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp > (original) > +++ llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp Wed > Sep 5 20:10:22 2007 > @@ -4563,7 +4563,9 @@ > if (NumDifferences == 0) // SAME GEP? > return ReplaceInstUsesWith(I, // No comparison is needed > here. > ConstantInt::get(Type::Int1Ty, > - Cond == > ICmpInst::ICMP_EQ)); > + Cond == > ICmpInst::ICMP_EQ || > + Cond == ICmpInst::ICMP_ULE || Cond == > ICmpInst::ICMP_UGE || > + Cond == ICmpInst::ICMP_SLE || Cond == > ICmpInst::ICMP_SGE)); > else if (NumDifferences == 1) { > Value *LHSV = GEPLHS->getOperand(DiffOperand); > Value *RHSV = GEPRHS->getOperand(DiffOperand); > > Added: llvm/trunk/test/Transforms/InstCombine/2007-09-05-EqualGEP.ll > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/ > InstCombine/2007-09-05-EqualGEP.ll?rev=41740&view=auto > > ====================================================================== > ======== > --- llvm/trunk/test/Transforms/InstCombine/2007-09-05-EqualGEP.ll > (added) > +++ llvm/trunk/test/Transforms/InstCombine/2007-09-05-EqualGEP.ll > Wed Sep 5 20:10:22 2007 > @@ -0,0 +1,10 @@ > +; RUN: llvm-as < %s | opt -instcombine | llvm-dis | grep {ret i1 > true} > +; PR1637 > + > +define i1 @f(i8* %arr) { > + %X = getelementptr i8* %arr, i32 1 > + %Y = getelementptr i8* %arr, i32 1 > + %test = icmp uge i8* %X, %Y > + ret i1 %test > +} > + > > > _______________________________________________ > 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 Sep 5 21:02:26 2007 From: clattner at apple.com (Chris Lattner) Date: Wed, 5 Sep 2007 19:02:26 -0700 Subject: [llvm-commits] [llvm] r41729 - in /llvm/trunk: include/llvm/CodeGen/LiveInterval.h include/llvm/CodeGen/LiveIntervalAnalysis.h lib/CodeGen/LiveInterval.cpp lib/CodeGen/LiveIntervalAnalysis.cpp lib/CodeGen/SimpleRegisterCoalescing.cpp In-Reply-To: <87E48761-DED1-40AB-A3B7-DDADF11501F8@apple.com> References: <200709052146.l85Lkr24025397@zion.cs.uiuc.edu> <87E48761-DED1-40AB-A3B7-DDADF11501F8@apple.com> Message-ID: <8585DA35-ED07-494D-9C2A-EAA2301EEEE7@apple.com> On Sep 5, 2007, at 6:07 PM, Evan Cheng wrote: >> Nice! To verify, you *are* running the destructors on the VNInfo >> objects before you nuke the memory region, right? Not destroying the >> VNInfo would cause the VNInfo::kills smallvector to leak memory. > > Ugh, no. It's leaky like a broken lawn sprinkler. :-) I've fixed it > with this patch: > http://lists.cs.uiuc.edu/pipermail/llvm-commits/Week-of- > Mon-20070903/053284.html Thanks Evan! -Chris From nicholas at mxc.ca Wed Sep 5 21:40:28 2007 From: nicholas at mxc.ca (Nick Lewycky) Date: Thu, 06 Sep 2007 02:40:28 -0000 Subject: [llvm-commits] [llvm] r41741 - /llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp Message-ID: <200709060240.l862eUWx003916@zion.cs.uiuc.edu> Author: nicholas Date: Wed Sep 5 21:40:25 2007 New Revision: 41741 URL: http://llvm.org/viewvc/llvm-project?rev=41741&view=rev Log: Use isTrueWhenEqual. Thanks Chris! Modified: llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp Modified: llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp?rev=41741&r1=41740&r2=41741&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp (original) +++ llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp Wed Sep 5 21:40:25 2007 @@ -1663,16 +1663,22 @@ return MadeChange ? I : 0; } -/// @returns true if the specified compare instruction is +/// @returns true if the specified compare predicate is /// true when both operands are equal... -/// @brief Determine if the ICmpInst returns true if both operands are equal -static bool isTrueWhenEqual(ICmpInst &ICI) { - ICmpInst::Predicate pred = ICI.getPredicate(); +/// @brief Determine if the icmp Predicate is true when both operands are equal +static bool isTrueWhenEqual(ICmpInst::Predicate pred) { return pred == ICmpInst::ICMP_EQ || pred == ICmpInst::ICMP_UGE || pred == ICmpInst::ICMP_SGE || pred == ICmpInst::ICMP_ULE || pred == ICmpInst::ICMP_SLE; } +/// @returns true if the specified compare instruction is +/// true when both operands are equal... +/// @brief Determine if the ICmpInst returns true when both operands are equal +static bool isTrueWhenEqual(ICmpInst &ICI) { + return isTrueWhenEqual(ICI.getPredicate()); +} + /// AssociativeOpt - Perform an optimization on an associative operator. This /// function is designed to check a chain of associative operators for a /// potential to apply a certain optimization. Since the optimization may be @@ -4562,10 +4568,9 @@ if (NumDifferences == 0) // SAME GEP? return ReplaceInstUsesWith(I, // No comparison is needed here. - ConstantInt::get(Type::Int1Ty, - Cond == ICmpInst::ICMP_EQ || - Cond == ICmpInst::ICMP_ULE || Cond == ICmpInst::ICMP_UGE || - Cond == ICmpInst::ICMP_SLE || Cond == ICmpInst::ICMP_SGE)); + ConstantInt::get(Type::Int1Ty, + isTrueWhenEqual(Cond))); + else if (NumDifferences == 1) { Value *LHSV = GEPLHS->getOperand(DiffOperand); Value *RHSV = GEPRHS->getOperand(DiffOperand); From nicholas at mxc.ca Wed Sep 5 21:40:41 2007 From: nicholas at mxc.ca (Nick Lewycky) Date: Wed, 05 Sep 2007 22:40:41 -0400 Subject: [llvm-commits] [llvm] r41740 - in /llvm/trunk: lib/Transforms/Scalar/InstructionCombining.cpp test/Transforms/InstCombine/2007-09-05-EqualGEP.ll In-Reply-To: References: <200709060110.l861AMEm032252@zion.cs.uiuc.edu> Message-ID: <46DF68A9.3060807@mxc.ca> Chris Lattner wrote: > On Sep 5, 2007, at 6:10 PM, Nick Lewycky wrote: > >> Author: nicholas >> Date: Wed Sep 5 20:10:22 2007 >> New Revision: 41740 >> >> URL: http://llvm.org/viewvc/llvm-project?rev=41740&view=rev >> Log: >> When the two operands of an icmp are equal, there are five possible >> predicates >> that would make the icmp true. Fixes PR1637. > > Thanks for fixing this Nicholas! Instead of enumerating the ICMP > opcodes, please use the isTrueWhenEqual function in InstCombine.cpp Done. I had to break it up so that it would take a Predicate instead of a whole ICmpInst. Is there a place in common code that this could be moved to? I've had need of this function before. Nick From asl at math.spbu.ru Thu Sep 6 01:41:30 2007 From: asl at math.spbu.ru (Anton Korobeynikov) Date: Thu, 06 Sep 2007 10:41:30 +0400 Subject: [llvm-commits] [llvm-gcc-4.2] r41738 - in /llvm-gcc-4.2/trunk/gcc: llvm-backend.cpp llvm-convert.cpp llvm-internal.h In-Reply-To: <200709060026.l860QmQi030081.SS4918SS@zion.cs.uiuc.edu> References: <200709060026.l860QmQi030081.SS4918SS@zion.cs.uiuc.edu> Message-ID: <1189060890.11114.27.camel@asl.dorms.spbu.ru> Hello, Devang. > Replace GV from AttributeUsedGlobals list. This makes libojc compilable with llvm-gcc 4.2. Shouldn't same patch be applied to 4.0 also? -- With best regards, Anton Korobeynikov. Faculty of Mathematics & Mechanics, Saint Petersburg State University. From clattner at apple.com Thu Sep 6 02:20:30 2007 From: clattner at apple.com (Chris Lattner) Date: Thu, 6 Sep 2007 00:20:30 -0700 Subject: [llvm-commits] [llvm] r41740 - in /llvm/trunk: lib/Transforms/Scalar/InstructionCombining.cpp test/Transforms/InstCombine/2007-09-05-EqualGEP.ll In-Reply-To: <46DF68A9.3060807@mxc.ca> References: <200709060110.l861AMEm032252@zion.cs.uiuc.edu> <46DF68A9.3060807@mxc.ca> Message-ID: <0BE274AA-69BB-4E1F-B34E-6B29B8DB985C@apple.com> On Sep 5, 2007, at 7:40 PM, Nick Lewycky wrote: > Chris Lattner wrote: >> On Sep 5, 2007, at 6:10 PM, Nick Lewycky wrote: >> >>> Author: nicholas >>> Date: Wed Sep 5 20:10:22 2007 >>> New Revision: 41740 >>> >>> URL: http://llvm.org/viewvc/llvm-project?rev=41740&view=rev >>> Log: >>> When the two operands of an icmp are equal, there are five possible >>> predicates >>> that would make the icmp true. Fixes PR1637. >> >> Thanks for fixing this Nicholas! Instead of enumerating the ICMP >> opcodes, please use the isTrueWhenEqual function in InstCombine.cpp > > Done. I had to break it up so that it would take a Predicate > instead of > a whole ICmpInst. Sounds good, thanks! > Is there a place in common code that this could be moved to? I've had > need of this function before. Moving it to be a method on ICmpInst would make sense to me! -Chris From dpatel at apple.com Thu Sep 6 10:46:30 2007 From: dpatel at apple.com (Devang Patel) Date: Thu, 6 Sep 2007 08:46:30 -0700 Subject: [llvm-commits] [llvm-gcc-4.2] r41738 - in /llvm-gcc-4.2/trunk/gcc: llvm-backend.cpp llvm-convert.cpp llvm-internal.h In-Reply-To: <1189060890.11114.27.camel@asl.dorms.spbu.ru> References: <200709060026.l860QmQi030081.SS4918SS@zion.cs.uiuc.edu> <1189060890.11114.27.camel@asl.dorms.spbu.ru> Message-ID: <63C5E1A1-7BB8-443D-A635-1172CAB33131@apple.com> On Sep 5, 2007, at 11:41 PM, Anton Korobeynikov wrote: > Hello, Devang. > >> Replace GV from AttributeUsedGlobals list. > This makes libojc compilable with llvm-gcc 4.2. Cool. > Shouldn't same patch be > applied to 4.0 also? Do we see this error in 4.0 or we're just lucky ? I'll prepare a patch. I think, AttributeAnnotateGlobals and AttributeNoinlineFunctions also needs similar treatment. - Devang From greened at obbligato.org Thu Sep 6 11:18:45 2007 From: greened at obbligato.org (David Greene) Date: Thu, 06 Sep 2007 16:18:45 -0000 Subject: [llvm-commits] [llvm] r41743 - in /llvm/trunk: include/llvm/CodeGen/LinkAllCodegenComponents.h include/llvm/CodeGen/Passes.h include/llvm/CodeGen/RegisterCoalescer.h include/llvm/CodeGen/SimpleRegisterCoalescing.h lib/CodeGen/RegAllocLinearScan.cpp lib/CodeGen/RegisterCoalescer.cpp lib/CodeGen/SimpleRegisterCoalescing.cpp Message-ID: <200709061618.l86GIkT1015117@zion.cs.uiuc.edu> Author: greened Date: Thu Sep 6 11:18:45 2007 New Revision: 41743 URL: http://llvm.org/viewvc/llvm-project?rev=41743&view=rev Log: Pluggable coalescers inplementation. Added: llvm/trunk/include/llvm/CodeGen/RegisterCoalescer.h (with props) llvm/trunk/lib/CodeGen/RegisterCoalescer.cpp (with props) Modified: llvm/trunk/include/llvm/CodeGen/LinkAllCodegenComponents.h llvm/trunk/include/llvm/CodeGen/Passes.h llvm/trunk/include/llvm/CodeGen/SimpleRegisterCoalescing.h llvm/trunk/lib/CodeGen/RegAllocLinearScan.cpp llvm/trunk/lib/CodeGen/SimpleRegisterCoalescing.cpp Modified: llvm/trunk/include/llvm/CodeGen/LinkAllCodegenComponents.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/LinkAllCodegenComponents.h?rev=41743&r1=41742&r2=41743&view=diff ============================================================================== --- llvm/trunk/include/llvm/CodeGen/LinkAllCodegenComponents.h (original) +++ llvm/trunk/include/llvm/CodeGen/LinkAllCodegenComponents.h Thu Sep 6 11:18:45 2007 @@ -32,6 +32,8 @@ (void) llvm::createLocalRegisterAllocator(); (void) llvm::createBigBlockRegisterAllocator(); (void) llvm::createLinearScanRegisterAllocator(); + + (void) llvm::createSimpleRegisterCoalescer(); (void) llvm::createBFS_DAGScheduler(NULL, NULL, NULL); (void) llvm::createSimpleDAGScheduler(NULL, NULL, NULL); Modified: llvm/trunk/include/llvm/CodeGen/Passes.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/Passes.h?rev=41743&r1=41742&r2=41743&view=diff ============================================================================== --- llvm/trunk/include/llvm/CodeGen/Passes.h (original) +++ llvm/trunk/include/llvm/CodeGen/Passes.h Thu Sep 6 11:18:45 2007 @@ -23,6 +23,7 @@ class FunctionPass; class PassInfo; class TargetMachine; + class RegisterCoalescer; /// createUnreachableBlockEliminationPass - The LLVM code generator does not /// work well with unreachable basic blocks (what live ranges make sense for a @@ -84,6 +85,11 @@ /// FunctionPass *createLinearScanRegisterAllocator(); + /// SimpleRegisterCoalescing Pass - Coalesce all copies possible. Can run + /// independently of the register allocator. + /// + RegisterCoalescer *createSimpleRegisterCoalescer(); + /// PrologEpilogCodeInserter Pass - This pass inserts prolog and epilog code, /// and eliminates abstract frame references. /// Added: llvm/trunk/include/llvm/CodeGen/RegisterCoalescer.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/RegisterCoalescer.h?rev=41743&view=auto ============================================================================== --- llvm/trunk/include/llvm/CodeGen/RegisterCoalescer.h (added) +++ llvm/trunk/include/llvm/CodeGen/RegisterCoalescer.h Thu Sep 6 11:18:45 2007 @@ -0,0 +1,159 @@ +//===-- RegisterCoalescer.h - Register Coalescing Interface ------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file was developed by the LLVM research group and is distributed under +// the University of Illinois Open Source License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This file contains the abstract interface for register coalescers, +// allowing them to interact with and query register allocators. +// +//===----------------------------------------------------------------------===// + +#include "llvm/System/IncludeFile.h" +#include "llvm/CodeGen/MachineInstr.h" +#include "llvm/CodeGen/LiveIntervalAnalysis.h" +#include "llvm/CodeGen/LiveVariables.h" +#include "llvm/Target/MRegisterInfo.h" +#include "llvm/Support/Debug.h" + +#ifndef LLVM_CODEGEN_REGISTER_COALESCER_H +#define LLVM_CODEGEN_REGISTER_COALESCER_H + +namespace llvm +{ + class MachineFunction; + class RegallocQuery; + class AnalysisUsage; + class LiveIntervals; + class MachineInstr; + class MRegisterInfo; + + /// An abstract interface for register coalescers. Coalescers must + /// implement this interface to be part of the coalescer analysis + /// group. + class RegisterCoalescer { + public: + static char ID; // Class identification, replacement for typeinfo + RegisterCoalescer() {} + virtual ~RegisterCoalescer(); // We want to be subclassed + + /// Run the coalescer on this function, providing interference + /// data to query. Return whether we removed any copies. + virtual bool coalesceFunction(MachineFunction &mf, + RegallocQuery &ifd) = 0; + + /// Reset state. Can be used to allow a coalescer run by + /// PassManager to be run again by the register allocator. + virtual void reset(MachineFunction &mf) {}; + + /// Register allocators must call this from their own + /// getAnalysisUsage to cover the case where the coalescer is not + /// a Pass in the proper sense and isn't managed by PassManager. + /// PassManager needs to know which analyses to make available and + /// which to invalidate when running the register allocator or any + /// pass that might call coalescing. The long-term solution is to + /// allow hierarchies of PassManagers. + virtual void getAnalysisUsage(AnalysisUsage &AU) const {}; + }; + + /// An abstract interface for register allocators to interact with + /// coalescers + /// + /// Example: + /// + /// This is simply an example of how to use the RegallocQuery + /// interface. It is not meant to be used in production. + /// + /// class LinearScanRegallocQuery : public RegallocQuery { + /// private: + /// const LiveIntervals &li; + /// + /// public: + /// LinearScanRegallocQuery(LiveIntervals &intervals) + /// : li(intervals) {}; + /// + /// /// This is pretty slow and conservative, but since linear scan + /// /// allocation doesn't pre-compute interference information it's + /// /// the best we can do. Coalescers are always free to ignore this + /// /// and implement their own discovery strategy. See + /// /// SimpleRegisterCoalescing for an example. + /// void getInterferences(IntervalSet &interferences, + /// const LiveInterval &a) const { + /// for(LiveIntervals::const_iterator iv = li.begin(), + /// ivend = li.end(); + /// iv != ivend; + /// ++iv) { + /// if (interfere(a, iv->second)) { + /// interferences.insert(&iv->second); + /// } + /// } + /// }; + /// + /// /// This is *really* slow and stupid. See above. + /// int getNumberOfInterferences(const LiveInterval &a) const { + /// IntervalSet intervals; + /// getInterferences(intervals, a); + /// return(intervals.size()); + /// }; + /// }; + /// + /// In the allocator: + /// + /// RegisterCoalescer &coalescer = getAnalysis(); + /// + /// // We don't reset the coalescer so if it's already been run this + /// // takes almost no time. + /// LinearScanRegallocQuery ifd(*li_); + /// coalescer.coalesceFunction(fn, ifd); + /// + class RegallocQuery { + public: + typedef SmallPtrSet IntervalSet; + + virtual ~RegallocQuery() {}; + + /// Return whether two live ranges interfere. + virtual bool interfere(const LiveInterval &a, + const LiveInterval &b) const { + // A naive test + return(a.overlaps(b)); + }; + + /// Return the set of intervals that interfere with this one. + virtual void getInterferences(IntervalSet &interferences, + const LiveInterval &a) const = 0; + + /// This can often be cheaper than actually returning the + /// interferences. + virtual int getNumberOfInterferences(const LiveInterval &a) const = 0; + + /// Make any data structure updates necessary to reflect + /// coalescing or other modifications. + virtual void updateDataForMerge(const LiveInterval &a, + const LiveInterval &b, + const MachineInstr ©) {}; + + /// Allow the register allocator to communicate when it doesn't + /// want a copy coalesced. This may be due to assumptions made by + /// the allocator about various invariants and so this question is + /// a matter of legality, not performance. Performance decisions + /// about which copies to coalesce should be made by the + /// coalescer. + virtual bool isLegalToCoalesce(const MachineInstr &inst) const { + return(true); + } + }; +} + +// Because of the way .a files work, we must force the SimpleRC +// implementation to be pulled in if the RegisterCoalescing header is +// included. Otherwise we run the risk of RegisterCoalescing being +// used, but the default implementation not being linked into the tool +// that uses it. +FORCE_DEFINING_FILE_TO_BE_LINKED(RegisterCoalescer) +FORCE_DEFINING_FILE_TO_BE_LINKED(SimpleRegisterCoalescing) + +#endif Propchange: llvm/trunk/include/llvm/CodeGen/RegisterCoalescer.h ------------------------------------------------------------------------------ svn:eol-style = LF Modified: llvm/trunk/include/llvm/CodeGen/SimpleRegisterCoalescing.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/SimpleRegisterCoalescing.h?rev=41743&r1=41742&r2=41743&view=diff ============================================================================== --- llvm/trunk/include/llvm/CodeGen/SimpleRegisterCoalescing.h (original) +++ llvm/trunk/include/llvm/CodeGen/SimpleRegisterCoalescing.h Thu Sep 6 11:18:45 2007 @@ -17,6 +17,7 @@ #include "llvm/CodeGen/MachineFunctionPass.h" #include "llvm/CodeGen/LiveInterval.h" #include "llvm/CodeGen/LiveIntervalAnalysis.h" +#include "llvm/CodeGen/RegisterCoalescer.h" #include "llvm/ADT/BitVector.h" #include "llvm/ADT/IndexedMap.h" @@ -27,7 +28,8 @@ class TargetInstrInfo; class VirtRegMap; - class SimpleRegisterCoalescing : public MachineFunctionPass { + class SimpleRegisterCoalescing : public MachineFunctionPass, + public RegisterCoalescer { MachineFunction* mf_; const TargetMachine* tm_; const MRegisterInfo* mri_; @@ -76,6 +78,11 @@ /// runOnMachineFunction - pass entry point virtual bool runOnMachineFunction(MachineFunction&); + bool coalesceFunction(MachineFunction &mf, RegallocQuery &) { + // This runs as an independent pass, so don't do anything. + return(false); + }; + /// print - Implement the dump method. virtual void print(std::ostream &O, const Module* = 0) const; void print(std::ostream *O, const Module* M = 0) const { Modified: llvm/trunk/lib/CodeGen/RegAllocLinearScan.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/RegAllocLinearScan.cpp?rev=41743&r1=41742&r2=41743&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/RegAllocLinearScan.cpp (original) +++ llvm/trunk/lib/CodeGen/RegAllocLinearScan.cpp Thu Sep 6 11:18:45 2007 @@ -21,6 +21,7 @@ #include "llvm/CodeGen/MachineInstr.h" #include "llvm/CodeGen/Passes.h" #include "llvm/CodeGen/RegAllocRegistry.h" +#include "llvm/CodeGen/RegisterCoalescer.h" #include "llvm/CodeGen/SSARegMap.h" #include "llvm/Target/MRegisterInfo.h" #include "llvm/Target/TargetMachine.h" @@ -96,7 +97,9 @@ virtual void getAnalysisUsage(AnalysisUsage &AU) const { AU.addRequired(); - AU.addRequiredID(SimpleRegisterCoalescingID); + // Make sure PassManager knows which analyses to make available + // to coalescing and which analyses coalescing invalidates. + AU.addRequiredTransitive(); MachineFunctionPass::getAnalysisUsage(AU); } @@ -194,6 +197,11 @@ mri_ = tm_->getRegisterInfo(); li_ = &getAnalysis(); + // We don't run the coalescer here because we have no reason to + // interact with it. If the coalescer requires interaction, it + // won't do anything. If it doesn't require interaction, we assume + // it was run as a separate pass. + // If this is the first function compiled, compute the related reg classes. if (RelatedRegClasses.empty()) ComputeRelatedRegClasses(); Added: llvm/trunk/lib/CodeGen/RegisterCoalescer.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/RegisterCoalescer.cpp?rev=41743&view=auto ============================================================================== --- llvm/trunk/lib/CodeGen/RegisterCoalescer.cpp (added) +++ llvm/trunk/lib/CodeGen/RegisterCoalescer.cpp Thu Sep 6 11:18:45 2007 @@ -0,0 +1,43 @@ +//===- RegisterCoalescer.cpp - Generic Register Coalescing Interface -------==// +// +// The LLVM Compiler Infrastructure +// +// This file was developed by the LLVM research group and is distributed under +// the University of Illinois Open Source License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This file implements the generic RegisterCoalescer interface which +// is used as the common interface used by all clients and +// implementations of register coalescing. +// +//===----------------------------------------------------------------------===// + +#include "llvm/CodeGen/RegisterCoalescer.h" +#include "llvm/CodeGen/LiveIntervalAnalysis.h" +#include "llvm/CodeGen/MachineInstr.h" +#include "llvm/Target/MRegisterInfo.h" +#include "llvm/Pass.h" + +using namespace llvm; + +// Register the RegisterCoalescer interface, providing a nice name to refer to. +namespace { + RegisterAnalysisGroup Z("Register Coalescer"); +} +char RegisterCoalescer::ID = 0; + +// RegisterCoalescer destructor: DO NOT move this to the header file +// for RegisterCoalescer or else clients of the RegisterCoalescer +// class may not depend on the RegisterCoalescer.o file in the current +// .a file, causing alias analysis support to not be included in the +// tool correctly! +// +RegisterCoalescer::~RegisterCoalescer() {} + +// Because of the way .a files work, we must force the SimpleRC +// implementation to be pulled in if the RegisterCoalescer classes are +// pulled in. Otherwise we run the risk of RegisterCoalescer being +// used, but the default implementation not being linked into the tool +// that uses it. +DEFINING_FILE_FOR(RegisterCoalescer) Propchange: llvm/trunk/lib/CodeGen/RegisterCoalescer.cpp ------------------------------------------------------------------------------ svn:eol-style = LF Modified: llvm/trunk/lib/CodeGen/SimpleRegisterCoalescing.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SimpleRegisterCoalescing.cpp?rev=41743&r1=41742&r2=41743&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/SimpleRegisterCoalescing.cpp (original) +++ llvm/trunk/lib/CodeGen/SimpleRegisterCoalescing.cpp Thu Sep 6 11:18:45 2007 @@ -23,6 +23,7 @@ #include "llvm/CodeGen/MachineInstr.h" #include "llvm/CodeGen/Passes.h" #include "llvm/CodeGen/SSARegMap.h" +#include "llvm/CodeGen/RegisterCoalescer.h" #include "llvm/Target/MRegisterInfo.h" #include "llvm/Target/TargetInstrInfo.h" #include "llvm/Target/TargetMachine.h" @@ -48,6 +49,9 @@ RegisterPass X("simple-register-coalescing", "Simple Register Coalescing"); + + // Declare that we implement the RegisterCoalescer interface + RegisterAnalysisGroup V(X); } const PassInfo *llvm::SimpleRegisterCoalescingID = X.getPassInfo(); @@ -1191,3 +1195,10 @@ void SimpleRegisterCoalescing::print(std::ostream &O, const Module* m) const { li_->print(O, m); } + +RegisterCoalescer* llvm::createSimpleRegisterCoalescer() { + return new SimpleRegisterCoalescing(); +} + +// Make sure that anything that uses RegisterCoalescer pulls in this file... +DEFINING_FILE_FOR(SimpleRegisterCoalescing) From greened at obbligato.org Thu Sep 6 11:36:39 2007 From: greened at obbligato.org (David Greene) Date: Thu, 06 Sep 2007 16:36:39 -0000 Subject: [llvm-commits] [llvm] r41744 - /llvm/trunk/lib/CodeGen/VirtRegMap.cpp Message-ID: <200709061636.l86Gad1B016137@zion.cs.uiuc.edu> Author: greened Date: Thu Sep 6 11:36:39 2007 New Revision: 41744 URL: http://llvm.org/viewvc/llvm-project?rev=41744&view=rev Log: Add instruction dump output. This helps find bugs. Modified: llvm/trunk/lib/CodeGen/VirtRegMap.cpp Modified: llvm/trunk/lib/CodeGen/VirtRegMap.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/VirtRegMap.cpp?rev=41744&r1=41743&r2=41744&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/VirtRegMap.cpp (original) +++ llvm/trunk/lib/CodeGen/VirtRegMap.cpp Thu Sep 6 11:36:39 2007 @@ -250,10 +250,16 @@ TII = MF.getTarget().getInstrInfo(); DOUT << "\n**** Local spiller rewriting function '" << MF.getFunction()->getName() << "':\n"; + DOUT << "**** Machine Instrs (NOTE! Does not include spills and reloads!) ****\n"; + DEBUG(MF.dump()); for (MachineFunction::iterator MBB = MF.begin(), E = MF.end(); MBB != E; ++MBB) RewriteMBB(*MBB, VRM); + + DOUT << "**** Post Machine Instrs ****\n"; + DEBUG(MF.dump()); + return true; } private: From stein at duvel.ir.iit.edu Thu Sep 6 12:03:31 2007 From: stein at duvel.ir.iit.edu (S3) Date: Thu, 06 Sep 2007 12:03:31 -0500 Subject: [llvm-commits] BrainF compiler Message-ID: <46E032E3.2030401@ir.iit.edu> -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 This is a new BrainF compiler to replace the old one. It uses the C++ API so it will generate code in the proper format. It consolidates similar commands (blocks of ('+' and '-') and ('<' and '>')). It has an option for array bounds checking. It requires my sizeof patch for the modification to STLExtras.h. (Recently posted to llvmdev list.) -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.7-ecc0.1.6 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iD8DBQFG4DLjxzVgPqtIcfsRAk2/AJ9LgdtQZMIlgClF4HBxnnReGZMXHwCeKC70 EVoF1r/HlxBhq1XoaiJ3TMM= =BLCw -----END PGP SIGNATURE----- -------------- next part -------------- An embedded and charset-unspecified text was scrubbed... Name: patch Url: http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20070906/bd53ac33/attachment.pl From asl at math.spbu.ru Thu Sep 6 12:21:48 2007 From: asl at math.spbu.ru (Anton Korobeynikov) Date: Thu, 06 Sep 2007 17:21:48 -0000 Subject: [llvm-commits] [llvm] r41746 - in /llvm/trunk: lib/CodeGen/AsmPrinter.cpp test/CodeGen/X86/2007-09-06-ExtWeakAliasee.ll Message-ID: <200709061721.l86HLm2i017647@zion.cs.uiuc.edu> Author: asl Date: Thu Sep 6 12:21:48 2007 New Revision: 41746 URL: http://llvm.org/viewvc/llvm-project?rev=41746&view=rev Log: Proper handle case, when aliasee is external weak symbol referenced only by alias itself. Also, fix a case, when target doesn't have weak symbols supported. Added: llvm/trunk/test/CodeGen/X86/2007-09-06-ExtWeakAliasee.ll Modified: llvm/trunk/lib/CodeGen/AsmPrinter.cpp Modified: llvm/trunk/lib/CodeGen/AsmPrinter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter.cpp?rev=41746&r1=41745&r2=41746&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/AsmPrinter.cpp (original) +++ llvm/trunk/lib/CodeGen/AsmPrinter.cpp Thu Sep 6 12:21:48 2007 @@ -132,13 +132,11 @@ I!=E; ++I) { std::string Name = Mang->getValueName(I); std::string Target; + + const GlobalValue *GV = cast(I->getAliasedGlobal()); + Target = Mang->getValueName(GV); - if (const GlobalValue *GV = I->getAliasedGlobal()) - Target = Mang->getValueName(GV); - else - assert(0 && "Unsupported aliasee"); - - if (I->hasExternalLinkage()) + if (I->hasExternalLinkage() || !TAI->getWeakRefDirective()) O << "\t.globl\t" << Name << "\n"; else if (I->hasWeakLinkage()) O << TAI->getWeakRefDirective() << Name << "\n"; @@ -146,6 +144,15 @@ assert(0 && "Invalid alias linkage"); O << TAI->getSetDirective() << Name << ", " << Target << "\n"; + + // If the aliasee has external weak linkage it can be referenced only by + // alias itself. In this case it can be not in ExtWeakSymbols list. Emit + // weak reference in such case. + if (GV->hasExternalWeakLinkage()) + if (TAI->getWeakRefDirective()) + O << TAI->getWeakRefDirective() << Target << "\n"; + else + O << "\t.globl\t" << Target << "\n"; } } Added: llvm/trunk/test/CodeGen/X86/2007-09-06-ExtWeakAliasee.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/2007-09-06-ExtWeakAliasee.ll?rev=41746&view=auto ============================================================================== --- llvm/trunk/test/CodeGen/X86/2007-09-06-ExtWeakAliasee.ll (added) +++ llvm/trunk/test/CodeGen/X86/2007-09-06-ExtWeakAliasee.ll Thu Sep 6 12:21:48 2007 @@ -0,0 +1,4 @@ +; RUN: llvm-as < %s | llc -march=x86 | grep weak | count 2 + at __gthrw_pthread_once = alias weak i32 (i32*, void ()*)* @pthread_once ; [#uses=0] + +declare extern_weak i32 @pthread_once(i32*, void ()*) From dalej at apple.com Thu Sep 6 13:13:45 2007 From: dalej at apple.com (Dale Johannesen) Date: Thu, 06 Sep 2007 18:13:45 -0000 Subject: [llvm-commits] [llvm] r41747 - in /llvm/trunk: include/llvm/ lib/Analysis/ lib/AsmParser/ lib/Bitcode/Reader/ lib/Bitcode/Writer/ lib/CodeGen/ lib/CodeGen/SelectionDAG/ lib/ExecutionEngine/ lib/ExecutionEngine/JIT/ lib/Target/CBackend/ lib/Target/MSIL/ lib/Target/X86/ lib/Transforms/IPO/ lib/Transforms/Scalar/ lib/VMCore/ tools/llvm-upgrade/ tools/llvm2cpp/ Message-ID: <200709061813.l86IDkT2019696@zion.cs.uiuc.edu> Author: johannes Date: Thu Sep 6 13:13:44 2007 New Revision: 41747 URL: http://llvm.org/viewvc/llvm-project?rev=41747&view=rev Log: Next round of APFloat changes. Use APFloat in UpgradeParser and AsmParser. Change all references to ConstantFP to use the APFloat interface rather than double. Remove the ConstantFP double interfaces. Use APFloat functions for constant folding arithmetic and comparisons. (There are still way too many places APFloat is just a wrapper around host float/double, but we're getting there.) Modified: llvm/trunk/include/llvm/Constants.h llvm/trunk/lib/Analysis/ConstantFolding.cpp llvm/trunk/lib/Analysis/ScalarEvolution.cpp llvm/trunk/lib/AsmParser/Lexer.cpp.cvs llvm/trunk/lib/AsmParser/Lexer.l llvm/trunk/lib/AsmParser/Lexer.l.cvs llvm/trunk/lib/AsmParser/ParserInternals.h llvm/trunk/lib/AsmParser/llvmAsmParser.h.cvs llvm/trunk/lib/AsmParser/llvmAsmParser.y llvm/trunk/lib/AsmParser/llvmAsmParser.y.cvs llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp llvm/trunk/lib/CodeGen/AsmPrinter.cpp llvm/trunk/lib/CodeGen/MachOWriter.cpp llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp llvm/trunk/lib/ExecutionEngine/ExecutionEngine.cpp llvm/trunk/lib/ExecutionEngine/JIT/JIT.cpp llvm/trunk/lib/Target/CBackend/CBackend.cpp llvm/trunk/lib/Target/MSIL/MSILWriter.cpp llvm/trunk/lib/Target/X86/X86ISelLowering.cpp llvm/trunk/lib/Transforms/IPO/SimplifyLibCalls.cpp llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp llvm/trunk/lib/VMCore/AsmWriter.cpp llvm/trunk/lib/VMCore/ConstantFold.cpp llvm/trunk/lib/VMCore/Constants.cpp llvm/trunk/tools/llvm-upgrade/UpgradeInternals.h llvm/trunk/tools/llvm-upgrade/UpgradeLexer.cpp.cvs llvm/trunk/tools/llvm-upgrade/UpgradeLexer.l llvm/trunk/tools/llvm-upgrade/UpgradeLexer.l.cvs llvm/trunk/tools/llvm-upgrade/UpgradeParser.y llvm/trunk/tools/llvm-upgrade/UpgradeParser.y.cvs llvm/trunk/tools/llvm2cpp/CppWriter.cpp Modified: llvm/trunk/include/llvm/Constants.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Constants.h?rev=41747&r1=41746&r2=41747&view=diff ============================================================================== --- llvm/trunk/include/llvm/Constants.h (original) +++ llvm/trunk/include/llvm/Constants.h Thu Sep 6 13:13:44 2007 @@ -217,29 +217,13 @@ APFloat Val; ConstantFP(const ConstantFP &); // DO NOT IMPLEMENT protected: - ConstantFP(const Type *Ty, double V); ConstantFP(const Type *Ty, const APFloat& V); public: /// get() - Static factory methods - Return objects of the specified value - static ConstantFP *get(const Type *Ty, double V); static ConstantFP *get(const Type *Ty, const APFloat& V); /// isValueValidForType - return true if Ty is big enough to represent V. static bool isValueValidForType(const Type *Ty, const APFloat& V); - static bool isValueValidForType(const Type *Ty, double V) { - if (Ty == Type::FloatTy) - return isValueValidForType(Ty, APFloat((float)V)); - else - return isValueValidForType(Ty, APFloat(V)); - } - inline double getValue() const { - if (&Val.getSemantics() == &APFloat::IEEEdouble) - return Val.convertToDouble(); - else if (&Val.getSemantics() == &APFloat::IEEEsingle) - return (double)Val.convertToFloat(); - else - assert(0); - } inline const APFloat& getValueAPF() const { return Val; } /// isNullValue - Return true if this is the value that would be returned by @@ -250,8 +234,11 @@ /// isExactlyValue - We don't rely on operator== working on double values, as /// it returns true for things that are clearly not equal, like -0.0 and 0.0. /// As such, this method can be used to do an exact bit-for-bit comparison of - /// two floating point values. + /// two floating point values. The version with a double operand is retained + /// because it's so convenient to write isExactlyValue(2.0), but please use + /// it only for constants. bool isExactlyValue(const APFloat& V) const; + bool isExactlyValue(double V) const { if (&Val.getSemantics() == &APFloat::IEEEdouble) return isExactlyValue(APFloat(V)); Modified: llvm/trunk/lib/Analysis/ConstantFolding.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/ConstantFolding.cpp?rev=41747&r1=41746&r2=41747&view=diff ============================================================================== --- llvm/trunk/lib/Analysis/ConstantFolding.cpp (original) +++ llvm/trunk/lib/Analysis/ConstantFolding.cpp Thu Sep 6 13:13:44 2007 @@ -407,8 +407,14 @@ const Type *Ty) { errno = 0; V = NativeFP(V); - if (errno == 0) - return ConstantFP::get(Ty, V); + if (errno == 0) { + if (Ty==Type::FloatTy) + return ConstantFP::get(Ty, APFloat((float)V)); + else if (Ty==Type::DoubleTy) + return ConstantFP::get(Ty, APFloat(V)); + else + assert(0); + } errno = 0; return 0; } @@ -418,14 +424,21 @@ const Type *Ty) { errno = 0; V = NativeFP(V, W); - if (errno == 0) - return ConstantFP::get(Ty, V); + if (errno == 0) { + if (Ty==Type::FloatTy) + return ConstantFP::get(Ty, APFloat((float)V)); + else if (Ty==Type::DoubleTy) + return ConstantFP::get(Ty, APFloat(V)); + else + assert(0); + } errno = 0; return 0; } /// ConstantFoldCall - Attempt to constant fold a call to the specified function /// with the specified arguments, returning null if unsuccessful. + Constant * llvm::ConstantFoldCall(Function *F, Constant** Operands, unsigned NumOperands) { const ValueName *NameVal = F->getValueName(); @@ -436,7 +449,14 @@ const Type *Ty = F->getReturnType(); if (NumOperands == 1) { if (ConstantFP *Op = dyn_cast(Operands[0])) { - double V = Op->getValue(); + if (Ty!=Type::FloatTy && Ty!=Type::DoubleTy) + return 0; + /// Currently APFloat versions of these functions do not exist, so we use + /// the host native double versions. Float versions are not called + /// directly but for all these it is true (float)(f((double)arg)) == + /// f(arg). Long double not supported yet. + double V = Ty==Type::FloatTy ? (double)Op->getValueAPF().convertToFloat(): + Op->getValueAPF().convertToDouble(); switch (Str[0]) { case 'a': if (Len == 4 && !strcmp(Str, "acos")) @@ -460,7 +480,7 @@ break; case 'f': if (Len == 4 && !strcmp(Str, "fabs")) - return ConstantFP::get(Ty, fabs(V)); + return ConstantFoldFP(fabs, V, Ty); else if (Len == 5 && !strcmp(Str, "floor")) return ConstantFoldFP(floor, V, Ty); break; @@ -472,9 +492,10 @@ else if (!strcmp(Str, "llvm.sqrt.f32") || !strcmp(Str, "llvm.sqrt.f64")) { if (V >= -0.0) - return ConstantFP::get(Ty, sqrt(V)); + return ConstantFoldFP(sqrt, V, Ty); else // Undefined - return ConstantFP::get(Ty, 0.0); + return ConstantFP::get(Ty, Ty==Type::FloatTy ? APFloat(0.0f) : + APFloat(0.0)); } break; case 's': @@ -512,9 +533,15 @@ } } else if (NumOperands == 2) { if (ConstantFP *Op1 = dyn_cast(Operands[0])) { - double Op1V = Op1->getValue(); + double Op1V = Ty==Type::FloatTy ? + (double)Op1->getValueAPF().convertToFloat(): + Op1->getValueAPF().convertToDouble(); if (ConstantFP *Op2 = dyn_cast(Operands[1])) { - double Op2V = Op2->getValue(); + if (Ty!=Type::FloatTy && Ty!=Type::DoubleTy) + return 0; + double Op2V = Ty==Type::FloatTy ? + (double)Op2->getValueAPF().convertToFloat(): + Op2->getValueAPF().convertToDouble(); if (Len == 3 && !strcmp(Str, "pow")) { return ConstantFoldBinaryFP(pow, Op1V, Op2V, Ty); @@ -525,11 +552,11 @@ } } else if (ConstantInt *Op2C = dyn_cast(Operands[1])) { if (!strcmp(Str, "llvm.powi.f32")) { - return ConstantFP::get(Ty, std::pow((float)Op1V, - (int)Op2C->getZExtValue())); + return ConstantFP::get(Ty, APFloat((float)std::pow((float)Op1V, + (int)Op2C->getZExtValue()))); } else if (!strcmp(Str, "llvm.powi.f64")) { - return ConstantFP::get(Ty, std::pow((double)Op1V, - (int)Op2C->getZExtValue())); + return ConstantFP::get(Ty, APFloat((double)std::pow((double)Op1V, + (int)Op2C->getZExtValue()))); } } } Modified: llvm/trunk/lib/Analysis/ScalarEvolution.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/ScalarEvolution.cpp?rev=41747&r1=41746&r2=41747&view=diff ============================================================================== --- llvm/trunk/lib/Analysis/ScalarEvolution.cpp (original) +++ llvm/trunk/lib/Analysis/ScalarEvolution.cpp Thu Sep 6 13:13:44 2007 @@ -485,7 +485,8 @@ if (Val == 0) C = Constant::getNullValue(Ty); else if (Ty->isFloatingPoint()) - C = ConstantFP::get(Ty, Val); + C = ConstantFP::get(Ty, APFloat(Ty==Type::FloatTy ? APFloat::IEEEsingle : + APFloat::IEEEdouble, Val)); else C = ConstantInt::get(Ty, Val); return SCEVUnknown::get(C); Modified: llvm/trunk/lib/AsmParser/Lexer.cpp.cvs URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/AsmParser/Lexer.cpp.cvs?rev=41747&r1=41746&r2=41747&view=diff ============================================================================== --- llvm/trunk/lib/AsmParser/Lexer.cpp.cvs (original) +++ llvm/trunk/lib/AsmParser/Lexer.cpp.cvs Thu Sep 6 13:13:44 2007 @@ -2129,15 +2129,17 @@ case 145: YY_RULE_SETUP #line 440 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/Lexer.l" -{ llvmAsmlval.FPVal = atof(yytext); return FPVAL; } +{ llvmAsmlval.FPVal = new APFloat(atof(yytext)); return FPVAL; } YY_BREAK case 146: YY_RULE_SETUP #line 441 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/Lexer.l" -{ llvmAsmlval.FPVal = HexToFP(yytext); return FPVAL; } +{ llvmAsmlval.FPVal = new APFloat(HexToFP(yytext)); + return FPVAL; + } YY_BREAK case YY_STATE_EOF(INITIAL): -#line 443 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/Lexer.l" +#line 445 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/Lexer.l" { /* Make sure to free the internal buffers for flex when we are * done reading our input! @@ -2148,20 +2150,20 @@ YY_BREAK case 147: YY_RULE_SETUP -#line 451 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/Lexer.l" +#line 453 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/Lexer.l" { /* Ignore whitespace */ } YY_BREAK case 148: YY_RULE_SETUP -#line 452 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/Lexer.l" +#line 454 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/Lexer.l" { return yytext[0]; } YY_BREAK case 149: YY_RULE_SETUP -#line 454 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/Lexer.l" +#line 456 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/Lexer.l" YY_FATAL_ERROR( "flex scanner jammed" ); YY_BREAK -#line 2165 "Lexer.cpp" +#line 2167 "Lexer.cpp" case YY_END_OF_BUFFER: { @@ -3043,5 +3045,5 @@ return 0; } #endif -#line 454 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/Lexer.l" +#line 456 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/Lexer.l" Modified: llvm/trunk/lib/AsmParser/Lexer.l URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/AsmParser/Lexer.l?rev=41747&r1=41746&r2=41747&view=diff ============================================================================== --- llvm/trunk/lib/AsmParser/Lexer.l (original) +++ llvm/trunk/lib/AsmParser/Lexer.l Thu Sep 6 13:13:44 2007 @@ -437,8 +437,10 @@ return GLOBALVAL_ID; } -{FPConstant} { llvmAsmlval.FPVal = atof(yytext); return FPVAL; } -{HexFPConstant} { llvmAsmlval.FPVal = HexToFP(yytext); return FPVAL; } +{FPConstant} { llvmAsmlval.FPVal = new APFloat(atof(yytext)); return FPVAL; } +{HexFPConstant} { llvmAsmlval.FPVal = new APFloat(HexToFP(yytext)); + return FPVAL; + } <> { /* Make sure to free the internal buffers for flex when we are Modified: llvm/trunk/lib/AsmParser/Lexer.l.cvs URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/AsmParser/Lexer.l.cvs?rev=41747&r1=41746&r2=41747&view=diff ============================================================================== --- llvm/trunk/lib/AsmParser/Lexer.l.cvs (original) +++ llvm/trunk/lib/AsmParser/Lexer.l.cvs Thu Sep 6 13:13:44 2007 @@ -437,8 +437,10 @@ return GLOBALVAL_ID; } -{FPConstant} { llvmAsmlval.FPVal = atof(yytext); return FPVAL; } -{HexFPConstant} { llvmAsmlval.FPVal = HexToFP(yytext); return FPVAL; } +{FPConstant} { llvmAsmlval.FPVal = new APFloat(atof(yytext)); return FPVAL; } +{HexFPConstant} { llvmAsmlval.FPVal = new APFloat(HexToFP(yytext)); + return FPVAL; + } <> { /* Make sure to free the internal buffers for flex when we are Modified: llvm/trunk/lib/AsmParser/ParserInternals.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/AsmParser/ParserInternals.h?rev=41747&r1=41746&r2=41747&view=diff ============================================================================== --- llvm/trunk/lib/AsmParser/ParserInternals.h (original) +++ llvm/trunk/lib/AsmParser/ParserInternals.h Thu Sep 6 13:13:44 2007 @@ -22,7 +22,7 @@ #include "llvm/Instructions.h" #include "llvm/Assembly/Parser.h" #include "llvm/ADT/StringExtras.h" - +#include "llvm/ADT/APFloat.h" // Global variables exported from the lexer... @@ -93,10 +93,10 @@ std::string *Name; // If it's a named reference. Memory must be deleted. int64_t ConstPool64; // Constant pool reference. This is the value uint64_t UConstPool64;// Unsigned constant pool reference. - double ConstPoolFP; // Floating point constant pool reference + APFloat *ConstPoolFP; // Floating point constant pool reference Constant *ConstantValue; // Fully resolved constant for ConstantVal case. InlineAsmDescriptor *IAD; - }; + }; static ValID createLocalID(unsigned Num) { ValID D; D.Type = LocalID; D.Num = Num; return D; @@ -119,7 +119,7 @@ ValID D; D.Type = ConstUIntVal; D.UConstPool64 = Val; return D; } - static ValID create(double Val) { + static ValID create(APFloat *Val) { ValID D; D.Type = ConstFPVal; D.ConstPoolFP = Val; return D; } @@ -168,7 +168,7 @@ case GlobalID : return '@' + utostr(Num); case LocalName : return *Name; case GlobalName : return *Name; - case ConstFPVal : return ftostr(ConstPoolFP); + case ConstFPVal : return ftostr(*ConstPoolFP); case ConstNullVal : return "null"; case ConstUndefVal : return "undef"; case ConstZeroVal : return "zeroinitializer"; @@ -194,7 +194,8 @@ case GlobalName: return *Name < *V.Name; case ConstSIntVal: return ConstPool64 < V.ConstPool64; case ConstUIntVal: return UConstPool64 < V.UConstPool64; - case ConstFPVal: return ConstPoolFP < V.ConstPoolFP; + case ConstFPVal: return ConstPoolFP->compare(*V.ConstPoolFP) == + APFloat::cmpLessThan; case ConstNullVal: return false; case ConstUndefVal: return false; case ConstZeroVal: return false; @@ -212,7 +213,8 @@ case GlobalName: return *Name == *(V.Name); case ConstSIntVal: return ConstPool64 == V.ConstPool64; case ConstUIntVal: return UConstPool64 == V.UConstPool64; - case ConstFPVal: return ConstPoolFP == V.ConstPoolFP; + case ConstFPVal: return ConstPoolFP->compare(*V.ConstPoolFP) == + APFloat::cmpEqual; case ConstantVal: return ConstantValue == V.ConstantValue; case ConstNullVal: return true; case ConstUndefVal: return true; Modified: llvm/trunk/lib/AsmParser/llvmAsmParser.h.cvs URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/AsmParser/llvmAsmParser.h.cvs?rev=41747&r1=41746&r2=41747&view=diff ============================================================================== --- llvm/trunk/lib/AsmParser/llvmAsmParser.h.cvs (original) +++ llvm/trunk/lib/AsmParser/llvmAsmParser.h.cvs Thu Sep 6 13:13:44 2007 @@ -355,7 +355,7 @@ uint64_t UInt64Val; int SIntVal; unsigned UIntVal; - double FPVal; + llvm::APFloat *FPVal; bool BoolVal; std::string *StrVal; // This memory must be deleted Modified: llvm/trunk/lib/AsmParser/llvmAsmParser.y URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/AsmParser/llvmAsmParser.y?rev=41747&r1=41746&r2=41747&view=diff ============================================================================== --- llvm/trunk/lib/AsmParser/llvmAsmParser.y (original) +++ llvm/trunk/lib/AsmParser/llvmAsmParser.y Thu Sep 6 13:13:44 2007 @@ -412,11 +412,15 @@ } case ValID::ConstFPVal: // Is it a floating point const pool reference? - if (!ConstantFP::isValueValidForType(Ty, D.ConstPoolFP)) { + if (!ConstantFP::isValueValidForType(Ty, *D.ConstPoolFP)) { GenerateError("FP constant invalid for type"); return 0; } - return ConstantFP::get(Ty, D.ConstPoolFP); + // Lexer has no type info, so builds all FP constants as double. + // Fix this here. + if (Ty==Type::FloatTy) + D.ConstPoolFP->convert(APFloat::IEEEsingle, APFloat::rmNearestTiesToEven); + return ConstantFP::get(Ty, *D.ConstPoolFP); case ValID::ConstNullVal: // Is it a null value? if (!isa(Ty)) { @@ -992,7 +996,7 @@ uint64_t UInt64Val; int SIntVal; unsigned UIntVal; - double FPVal; + llvm::APFloat *FPVal; bool BoolVal; std::string *StrVal; // This memory must be deleted @@ -1862,9 +1866,13 @@ CHECK_FOR_ERROR } | FPType FPVAL { // Float & Double constants - if (!ConstantFP::isValueValidForType($1, $2)) + if (!ConstantFP::isValueValidForType($1, *$2)) GEN_ERROR("Floating point constant invalid for type"); - $$ = ConstantFP::get($1, $2); + // Lexer has no type info, so builds all FP constants as double. + // Fix this here. + if ($1==Type::FloatTy) + $2->convert(APFloat::IEEEsingle, APFloat::rmNearestTiesToEven); + $$ = ConstantFP::get($1, *$2); CHECK_FOR_ERROR }; Modified: llvm/trunk/lib/AsmParser/llvmAsmParser.y.cvs URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/AsmParser/llvmAsmParser.y.cvs?rev=41747&r1=41746&r2=41747&view=diff ============================================================================== --- llvm/trunk/lib/AsmParser/llvmAsmParser.y.cvs (original) +++ llvm/trunk/lib/AsmParser/llvmAsmParser.y.cvs Thu Sep 6 13:13:44 2007 @@ -412,11 +412,15 @@ } case ValID::ConstFPVal: // Is it a floating point const pool reference? - if (!ConstantFP::isValueValidForType(Ty, D.ConstPoolFP)) { + if (!ConstantFP::isValueValidForType(Ty, *D.ConstPoolFP)) { GenerateError("FP constant invalid for type"); return 0; } - return ConstantFP::get(Ty, D.ConstPoolFP); + // Lexer has no type info, so builds all FP constants as double. + // Fix this here. + if (Ty==Type::FloatTy) + D.ConstPoolFP->convert(APFloat::IEEEsingle, APFloat::rmNearestTiesToEven); + return ConstantFP::get(Ty, *D.ConstPoolFP); case ValID::ConstNullVal: // Is it a null value? if (!isa(Ty)) { @@ -992,7 +996,7 @@ uint64_t UInt64Val; int SIntVal; unsigned UIntVal; - double FPVal; + llvm::APFloat *FPVal; bool BoolVal; std::string *StrVal; // This memory must be deleted @@ -1862,9 +1866,13 @@ CHECK_FOR_ERROR } | FPType FPVAL { // Float & Double constants - if (!ConstantFP::isValueValidForType($1, $2)) + if (!ConstantFP::isValueValidForType($1, *$2)) GEN_ERROR("Floating point constant invalid for type"); - $$ = ConstantFP::get($1, $2); + // Lexer has no type info, so builds all FP constants as double. + // Fix this here. + if ($1==Type::FloatTy) + $2->convert(APFloat::IEEEsingle, APFloat::rmNearestTiesToEven); + $$ = ConstantFP::get($1, *$2); CHECK_FOR_ERROR }; Modified: llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp?rev=41747&r1=41746&r2=41747&view=diff ============================================================================== --- llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp (original) +++ llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp Thu Sep 6 13:13:44 2007 @@ -626,13 +626,16 @@ if (Record.empty()) return Error("Invalid FLOAT record"); if (CurTy == Type::FloatTy) - V = ConstantFP::get(CurTy, BitsToFloat(Record[0])); + V = ConstantFP::get(CurTy, APFloat((float)BitsToDouble(Record[0]))); else if (CurTy == Type::DoubleTy) - V = ConstantFP::get(CurTy, BitsToDouble(Record[0])); - // FIXME: Make long double constants work. - else if (CurTy == Type::X86_FP80Ty || - CurTy == Type::FP128Ty || CurTy == Type::PPC_FP128Ty) - assert(0 && "Long double constants not handled yet."); + V = ConstantFP::get(CurTy, APFloat(BitsToDouble(Record[0]))); + // FIXME: Make long double constants work. BitsToDouble does not make it. + else if (CurTy == Type::X86_FP80Ty) + V = ConstantFP::get(CurTy, APFloat(BitsToDouble(Record[0]))); + else if (CurTy == Type::FP128Ty) + V = ConstantFP::get(CurTy, APFloat(BitsToDouble(Record[0]))); + else if (CurTy == Type::PPC_FP128Ty) + assert(0 && "PowerPC long double constants not handled yet."); else V = UndefValue::get(CurTy); break; Modified: llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp?rev=41747&r1=41746&r2=41747&view=diff ============================================================================== --- llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp (original) +++ llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp Thu Sep 6 13:13:44 2007 @@ -527,9 +527,10 @@ Code = bitc::CST_CODE_FLOAT; const Type *Ty = CFP->getType(); if (Ty == Type::FloatTy) { - Record.push_back(FloatToBits((float)CFP->getValue())); + Record.push_back(DoubleToBits((double)CFP->getValueAPF(). + convertToFloat())); } else if (Ty == Type::DoubleTy) { - Record.push_back(DoubleToBits((double)CFP->getValue())); + Record.push_back(DoubleToBits(CFP->getValueAPF().convertToDouble())); // FIXME: make long double constants work. } else if (Ty == Type::X86_FP80Ty || Ty == Type::FP128Ty || Ty == Type::PPC_FP128Ty) { Modified: llvm/trunk/lib/CodeGen/AsmPrinter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter.cpp?rev=41747&r1=41746&r2=41747&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/AsmPrinter.cpp (original) +++ llvm/trunk/lib/CodeGen/AsmPrinter.cpp Thu Sep 6 13:13:44 2007 @@ -829,8 +829,8 @@ } else if (const ConstantFP *CFP = dyn_cast(CV)) { // FP Constants are printed as integer constants to avoid losing // precision... - double Val = CFP->getValue(); if (CFP->getType() == Type::DoubleTy) { + double Val = CFP->getValueAPF().convertToDouble(); if (TAI->getData64bitsDirective()) O << TAI->getData64bitsDirective() << DoubleToBits(Val) << "\t" << TAI->getCommentString() << " double value: " << Val << "\n"; @@ -851,6 +851,7 @@ } return; } else { + float Val = CFP->getValueAPF().convertToFloat(); O << TAI->getData32bitsDirective() << FloatToBits(Val) << "\t" << TAI->getCommentString() << " float " << Val << "\n"; return; Modified: llvm/trunk/lib/CodeGen/MachOWriter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/MachOWriter.cpp?rev=41747&r1=41746&r2=41747&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/MachOWriter.cpp (original) +++ llvm/trunk/lib/CodeGen/MachOWriter.cpp Thu Sep 6 13:13:44 2007 @@ -861,7 +861,8 @@ break; } case Type::FloatTyID: { - uint64_t val = FloatToBits(cast(PC)->getValue()); + uint64_t val = FloatToBits(cast(PC)-> + getValueAPF().convertToFloat()); if (TD->isBigEndian()) val = ByteSwap_32(val); ptr[0] = val; @@ -871,7 +872,8 @@ break; } case Type::DoubleTyID: { - uint64_t val = DoubleToBits(cast(PC)->getValue()); + uint64_t val = DoubleToBits(cast(PC)-> + getValueAPF().convertToDouble()); if (TD->isBigEndian()) val = ByteSwap_64(val); ptr[0] = val; Modified: llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp?rev=41747&r1=41746&r2=41747&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp (original) +++ llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp Thu Sep 6 13:13:44 2007 @@ -840,7 +840,7 @@ return N = DAG.getNode(ISD::BUILD_VECTOR, VT, &Ops[0], Ops.size()); } else if (ConstantFP *CFP = dyn_cast(C)) { - return N = DAG.getConstantFP(CFP->getValue(), VT); + return N = DAG.getConstantFP(CFP->getValueAPF(), VT); } else if (const VectorType *PTy = dyn_cast(VTy)) { unsigned NumElements = PTy->getNumElements(); MVT::ValueType PVT = TLI.getValueType(PTy->getElementType()); @@ -2003,7 +2003,8 @@ const Type *ElTy = DestTy->getElementType(); if (ElTy->isFloatingPoint()) { unsigned VL = DestTy->getNumElements(); - std::vector NZ(VL, ConstantFP::get(ElTy, -0.0)); + std::vector NZ(VL, ConstantFP::get(ElTy, + ElTy==Type::FloatTy ? APFloat(-0.0f) : APFloat(-0.0))); Constant *CNZ = ConstantVector::get(&NZ[0], NZ.size()); if (CV == CNZ) { SDOperand Op2 = getValue(I.getOperand(1)); Modified: llvm/trunk/lib/ExecutionEngine/ExecutionEngine.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/ExecutionEngine.cpp?rev=41747&r1=41746&r2=41747&view=diff ============================================================================== --- llvm/trunk/lib/ExecutionEngine/ExecutionEngine.cpp (original) +++ llvm/trunk/lib/ExecutionEngine/ExecutionEngine.cpp Thu Sep 6 13:13:44 2007 @@ -525,10 +525,10 @@ GenericValue Result; switch (C->getType()->getTypeID()) { case Type::FloatTyID: - Result.FloatVal = (float)cast(C)->getValue(); + Result.FloatVal = cast(C)->getValueAPF().convertToFloat(); break; case Type::DoubleTyID: - Result.DoubleVal = (double)cast(C)->getValue(); + Result.DoubleVal = cast(C)->getValueAPF().convertToDouble(); break; case Type::IntegerTyID: Result.IntVal = cast(C)->getValue(); Modified: llvm/trunk/lib/ExecutionEngine/JIT/JIT.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/JIT/JIT.cpp?rev=41747&r1=41746&r2=41747&view=diff ============================================================================== --- llvm/trunk/lib/ExecutionEngine/JIT/JIT.cpp (original) +++ llvm/trunk/lib/ExecutionEngine/JIT/JIT.cpp Thu Sep 6 13:13:44 2007 @@ -206,8 +206,10 @@ switch (ArgTy->getTypeID()) { default: assert(0 && "Unknown argument type for function call!"); case Type::IntegerTyID: C = ConstantInt::get(AV.IntVal); break; - case Type::FloatTyID: C = ConstantFP ::get(ArgTy, AV.FloatVal); break; - case Type::DoubleTyID: C = ConstantFP ::get(ArgTy, AV.DoubleVal); break; + case Type::FloatTyID: C = ConstantFP ::get(ArgTy, APFloat(AV.FloatVal)); + break; + case Type::DoubleTyID: C = ConstantFP ::get(ArgTy, APFloat(AV.DoubleVal)); + break; case Type::PointerTyID: void *ArgPtr = GVTOP(AV); if (sizeof(void*) == 4) { Modified: llvm/trunk/lib/Target/CBackend/CBackend.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/CBackend/CBackend.cpp?rev=41747&r1=41746&r2=41747&view=diff ============================================================================== --- llvm/trunk/lib/Target/CBackend/CBackend.cpp (original) +++ llvm/trunk/lib/Target/CBackend/CBackend.cpp Thu Sep 6 13:13:44 2007 @@ -604,17 +604,19 @@ // only deal in IEEE FP). // static bool isFPCSafeToPrint(const ConstantFP *CFP) { + APFloat APF = APFloat(CFP->getValueAPF()); // copy + if (CFP->getType()==Type::FloatTy) + APF.convert(APFloat::IEEEdouble, APFloat::rmNearestTiesToEven); #if HAVE_PRINTF_A && ENABLE_CBE_PRINTF_A char Buffer[100]; - sprintf(Buffer, "%a", CFP->getValue()); - + sprintf(Buffer, "%a", APF.convertToDouble()); if (!strncmp(Buffer, "0x", 2) || !strncmp(Buffer, "-0x", 3) || !strncmp(Buffer, "+0x", 3)) - return atof(Buffer) == CFP->getValue(); + return APF.bitwiseIsEqual(APFloat(atof(Buffer))); return false; #else - std::string StrVal = ftostr(CFP->getValue()); + std::string StrVal = ftostr(APF); while (StrVal[0] == ' ') StrVal.erase(StrVal.begin()); @@ -625,7 +627,7 @@ ((StrVal[0] == '-' || StrVal[0] == '+') && (StrVal[1] >= '0' && StrVal[1] <= '9'))) // Reparse stringized version! - return atof(StrVal.c_str()) == CFP->getValue(); + return APF.bitwiseIsEqual(APFloat(atof(StrVal.c_str()))); return false; #endif } @@ -882,9 +884,13 @@ Out << "(*(" << (FPC->getType() == Type::FloatTy ? "float" : "double") << "*)&FPConstant" << I->second << ')'; } else { - if (IsNAN(FPC->getValue())) { + double V = FPC->getType() == Type::FloatTy ? + FPC->getValueAPF().convertToFloat() : + FPC->getValueAPF().convertToDouble(); + if (IsNAN(V)) { // The value is NaN + // FIXME the actual NaN bits should be emitted. // The prefix for a quiet NaN is 0x7FF8. For a signalling NaN, // it's 0x7ff4. const unsigned long QuietNaN = 0x7ff8UL; @@ -893,7 +899,7 @@ // We need to grab the first part of the FP # char Buffer[100]; - uint64_t ll = DoubleToBits(FPC->getValue()); + uint64_t ll = DoubleToBits(V); sprintf(Buffer, "0x%llx", static_cast(ll)); std::string Num(&Buffer[0], &Buffer[6]); @@ -905,9 +911,9 @@ else Out << "LLVM_NAN" << (Val == QuietNaN ? "" : "S") << "(\"" << Buffer << "\") /*nan*/ "; - } else if (IsInf(FPC->getValue())) { + } else if (IsInf(V)) { // The value is Inf - if (FPC->getValue() < 0) Out << '-'; + if (V < 0) Out << '-'; Out << "LLVM_INF" << (FPC->getType() == Type::FloatTy ? "F" : "") << " /*inf*/ "; } else { @@ -915,12 +921,12 @@ #if HAVE_PRINTF_A && ENABLE_CBE_PRINTF_A // Print out the constant as a floating point number. char Buffer[100]; - sprintf(Buffer, "%a", FPC->getValue()); + sprintf(Buffer, "%a", V); Num = Buffer; #else - Num = ftostr(FPC->getValue()); + Num = ftostr(FPC->getValueAPF()); #endif - Out << Num; + Out << Num; } } break; @@ -1715,15 +1721,15 @@ if (const ConstantFP *FPC = dyn_cast(*I)) if (!isFPCSafeToPrint(FPC) && // Do not put in FPConstantMap if safe. !FPConstantMap.count(FPC)) { - double Val = FPC->getValue(); - FPConstantMap[FPC] = FPCounter; // Number the FP constants if (FPC->getType() == Type::DoubleTy) { + double Val = FPC->getValueAPF().convertToDouble(); Out << "static const ConstantDoubleTy FPConstant" << FPCounter++ << " = 0x" << std::hex << DoubleToBits(Val) << std::dec << "ULL; /* " << Val << " */\n"; } else if (FPC->getType() == Type::FloatTy) { + float Val = FPC->getValueAPF().convertToFloat(); Out << "static const ConstantFloatTy FPConstant" << FPCounter++ << " = 0x" << std::hex << FloatToBits(Val) << std::dec << "U; /* " << Val << " */\n"; Modified: llvm/trunk/lib/Target/MSIL/MSILWriter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/MSIL/MSILWriter.cpp?rev=41747&r1=41746&r2=41747&view=diff ============================================================================== --- llvm/trunk/lib/Target/MSIL/MSILWriter.cpp (original) +++ llvm/trunk/lib/Target/MSIL/MSILWriter.cpp Thu Sep 6 13:13:44 2007 @@ -428,10 +428,10 @@ uint64_t X; unsigned Size; if (FP->getType()->getTypeID()==Type::FloatTyID) { - X = FloatToBits(FP->getValue()); + X = FloatToBits(FP->getValueAPF().convertToFloat()); Size = 4; } else { - X = DoubleToBits(FP->getValue()); + X = DoubleToBits(FP->getValueAPF().convertToDouble()); Size = 8; } Out << "\tldc.r" << Size << "\t( " << utohexstr(X) << ')'; @@ -1472,9 +1472,11 @@ TySize = TD->getTypeSize(Ty); const ConstantFP* FP = cast(C); if (Ty->getTypeID() == Type::FloatTyID) - Out << "int32 (" << FloatToBits(FP->getValue()) << ')'; + Out << "int32 (" << + FloatToBits(FP->getValueAPF().convertToFloat()) << ')'; else - Out << "int64 (" << DoubleToBits(FP->getValue()) << ')'; + Out << "int64 (" << + DoubleToBits(FP->getValueAPF().convertToDouble()) << ')'; break; } case Type::ArrayTyID: Modified: llvm/trunk/lib/Target/X86/X86ISelLowering.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86ISelLowering.cpp?rev=41747&r1=41746&r2=41747&view=diff ============================================================================== --- llvm/trunk/lib/Target/X86/X86ISelLowering.cpp (original) +++ llvm/trunk/lib/Target/X86/X86ISelLowering.cpp Thu Sep 6 13:13:44 2007 @@ -3412,11 +3412,11 @@ const Type *OpNTy = MVT::getTypeForValueType(EltVT); std::vector CV; if (EltVT == MVT::f64) { - Constant *C = ConstantFP::get(OpNTy, BitsToDouble(~(1ULL << 63))); + Constant *C = ConstantFP::get(OpNTy, APFloat(BitsToDouble(~(1ULL << 63)))); CV.push_back(C); CV.push_back(C); } else { - Constant *C = ConstantFP::get(OpNTy, BitsToFloat(~(1U << 31))); + Constant *C = ConstantFP::get(OpNTy, APFloat(BitsToFloat(~(1U << 31)))); CV.push_back(C); CV.push_back(C); CV.push_back(C); @@ -3440,11 +3440,11 @@ const Type *OpNTy = MVT::getTypeForValueType(EltVT); std::vector CV; if (EltVT == MVT::f64) { - Constant *C = ConstantFP::get(OpNTy, BitsToDouble(1ULL << 63)); + Constant *C = ConstantFP::get(OpNTy, APFloat(BitsToDouble(1ULL << 63))); CV.push_back(C); CV.push_back(C); } else { - Constant *C = ConstantFP::get(OpNTy, BitsToFloat(1U << 31)); + Constant *C = ConstantFP::get(OpNTy, APFloat(BitsToFloat(1U << 31))); CV.push_back(C); CV.push_back(C); CV.push_back(C); @@ -3475,18 +3475,19 @@ if (MVT::getSizeInBits(SrcVT) < MVT::getSizeInBits(VT)) { Op1 = DAG.getNode(ISD::FP_EXTEND, VT, Op1); SrcVT = VT; + SrcTy = MVT::getTypeForValueType(SrcVT); } // First get the sign bit of second operand. std::vector CV; if (SrcVT == MVT::f64) { - CV.push_back(ConstantFP::get(SrcTy, BitsToDouble(1ULL << 63))); - CV.push_back(ConstantFP::get(SrcTy, 0.0)); + CV.push_back(ConstantFP::get(SrcTy, APFloat(BitsToDouble(1ULL << 63)))); + CV.push_back(ConstantFP::get(SrcTy, APFloat(0.0))); } else { - CV.push_back(ConstantFP::get(SrcTy, BitsToFloat(1U << 31))); - CV.push_back(ConstantFP::get(SrcTy, 0.0)); - CV.push_back(ConstantFP::get(SrcTy, 0.0)); - CV.push_back(ConstantFP::get(SrcTy, 0.0)); + CV.push_back(ConstantFP::get(SrcTy, APFloat(BitsToFloat(1U << 31)))); + CV.push_back(ConstantFP::get(SrcTy, APFloat(0.0f))); + CV.push_back(ConstantFP::get(SrcTy, APFloat(0.0f))); + CV.push_back(ConstantFP::get(SrcTy, APFloat(0.0f))); } Constant *C = ConstantVector::get(CV); SDOperand CPIdx = DAG.getConstantPool(C, getPointerTy(), 4); @@ -3508,13 +3509,13 @@ // Clear first operand sign bit. CV.clear(); if (VT == MVT::f64) { - CV.push_back(ConstantFP::get(SrcTy, BitsToDouble(~(1ULL << 63)))); - CV.push_back(ConstantFP::get(SrcTy, 0.0)); + CV.push_back(ConstantFP::get(SrcTy, APFloat(BitsToDouble(~(1ULL << 63))))); + CV.push_back(ConstantFP::get(SrcTy, APFloat(0.0))); } else { - CV.push_back(ConstantFP::get(SrcTy, BitsToFloat(~(1U << 31)))); - CV.push_back(ConstantFP::get(SrcTy, 0.0)); - CV.push_back(ConstantFP::get(SrcTy, 0.0)); - CV.push_back(ConstantFP::get(SrcTy, 0.0)); + CV.push_back(ConstantFP::get(SrcTy, APFloat(BitsToFloat(~(1U << 31))))); + CV.push_back(ConstantFP::get(SrcTy, APFloat(0.0f))); + CV.push_back(ConstantFP::get(SrcTy, APFloat(0.0f))); + CV.push_back(ConstantFP::get(SrcTy, APFloat(0.0f))); } C = ConstantVector::get(CV); CPIdx = DAG.getConstantPool(C, getPointerTy(), 4); Modified: llvm/trunk/lib/Transforms/IPO/SimplifyLibCalls.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/SimplifyLibCalls.cpp?rev=41747&r1=41746&r2=41747&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/IPO/SimplifyLibCalls.cpp (original) +++ llvm/trunk/lib/Transforms/IPO/SimplifyLibCalls.cpp Thu Sep 6 13:13:44 2007 @@ -1118,27 +1118,32 @@ Value* base = ci->getOperand(1); Value* expn = ci->getOperand(2); if (ConstantFP *Op1 = dyn_cast(base)) { - double Op1V = Op1->getValue(); - if (Op1V == 1.0) // pow(1.0,x) -> 1.0 - return ReplaceCallWith(ci, ConstantFP::get(Ty, 1.0)); + if (Ty!=Type::FloatTy && Ty!=Type::DoubleTy) + return false; // FIXME long double not yet supported + if (Op1->isExactlyValue(1.0)) // pow(1.0,x) -> 1.0 + return ReplaceCallWith(ci, ConstantFP::get(Ty, + Ty==Type::FloatTy ? APFloat(1.0f) : APFloat(1.0))); } else if (ConstantFP* Op2 = dyn_cast(expn)) { - double Op2V = Op2->getValue(); - if (Op2V == 0.0) { + if (Ty!=Type::FloatTy && Ty!=Type::DoubleTy) + return false; // FIXME long double not yet supported + if (Op2->getValueAPF().isZero()) { // pow(x,0.0) -> 1.0 - return ReplaceCallWith(ci, ConstantFP::get(Ty,1.0)); - } else if (Op2V == 0.5) { + return ReplaceCallWith(ci, ConstantFP::get(Ty, + Ty==Type::FloatTy ? APFloat(1.0f) : APFloat(1.0))); + } else if (Op2->isExactlyValue(0.5)) { // pow(x,0.5) -> sqrt(x) CallInst* sqrt_inst = new CallInst(SLC.get_sqrt(), base, ci->getName()+".pow",ci); return ReplaceCallWith(ci, sqrt_inst); - } else if (Op2V == 1.0) { + } else if (Op2->isExactlyValue(1.0)) { // pow(x,1.0) -> x return ReplaceCallWith(ci, base); - } else if (Op2V == -1.0) { + } else if (Op2->isExactlyValue(-1.0)) { // pow(x,-1.0) -> 1.0/x Value *div_inst = - BinaryOperator::createFDiv(ConstantFP::get(Ty, 1.0), base, - ci->getName()+".pow", ci); + BinaryOperator::createFDiv(ConstantFP::get(Ty, + Ty==Type::FloatTy ? APFloat(1.0f) : APFloat(1.0)), + base, ci->getName()+".pow", ci); return ReplaceCallWith(ci, div_inst); } } Modified: llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp?rev=41747&r1=41746&r2=41747&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp (original) +++ llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp Thu Sep 6 13:13:44 2007 @@ -2348,7 +2348,7 @@ // "In IEEE floating point, x*1 is not equivalent to x for nans. However, // ANSI says we can drop signals, so we can do this anyway." (from GCC) - if (Op1F->getValue() == 1.0) + if (Op1F->isExactlyValue(1.0)) return ReplaceInstUsesWith(I, Op0); // Eliminate 'mul double %X, 1.0' } Modified: llvm/trunk/lib/VMCore/AsmWriter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/AsmWriter.cpp?rev=41747&r1=41746&r2=41747&view=diff ============================================================================== --- llvm/trunk/lib/VMCore/AsmWriter.cpp (original) +++ llvm/trunk/lib/VMCore/AsmWriter.cpp Thu Sep 6 13:13:44 2007 @@ -486,7 +486,10 @@ // make sure that we only output it in exponential format if we can parse // the value back and get the same value. // - std::string StrVal = ftostr(CFP->getValue()); + bool isDouble = &CFP->getValueAPF().getSemantics() == &APFloat::IEEEdouble; + double Val = (isDouble) ? CFP->getValueAPF().convertToDouble() : + CFP->getValueAPF().convertToFloat(); + std::string StrVal = ftostr(CFP->getValueAPF()); // Check to make sure that the stringized number is not some string like // "Inf" or NaN, that atof will accept, but the lexer will not. Check that @@ -496,7 +499,7 @@ ((StrVal[0] == '-' || StrVal[0] == '+') && (StrVal[1] >= '0' && StrVal[1] <= '9'))) // Reparse stringized version! - if (atof(StrVal.c_str()) == CFP->getValue()) { + if (atof(StrVal.c_str()) == Val) { Out << StrVal; return; } @@ -505,7 +508,7 @@ // output the string in hexadecimal format! assert(sizeof(double) == sizeof(uint64_t) && "assuming that double is 64 bits!"); - Out << "0x" << utohexstr(DoubleToBits(CFP->getValue())); + Out << "0x" << utohexstr(DoubleToBits(Val)); } else if (isa(CV)) { Out << "zeroinitializer"; Modified: llvm/trunk/lib/VMCore/ConstantFold.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/ConstantFold.cpp?rev=41747&r1=41746&r2=41747&view=diff ============================================================================== --- llvm/trunk/lib/VMCore/ConstantFold.cpp (original) +++ llvm/trunk/lib/VMCore/ConstantFold.cpp Thu Sep 6 13:13:44 2007 @@ -68,7 +68,7 @@ for (unsigned i = 0; i != SrcNumElts; ++i) { ConstantInt *CI = cast(CV->getOperand(i)); double V = CI->getValue().bitsToDouble(); - Result.push_back(ConstantFP::get(Type::DoubleTy, V)); + Result.push_back(ConstantFP::get(Type::DoubleTy, APFloat(V))); } return ConstantVector::get(Result); } @@ -76,7 +76,7 @@ for (unsigned i = 0; i != SrcNumElts; ++i) { ConstantInt *CI = cast(CV->getOperand(i)); float V = CI->getValue().bitsToFloat(); - Result.push_back(ConstantFP::get(Type::FloatTy, V)); + Result.push_back(ConstantFP::get(Type::FloatTy, APFloat(V))); } return ConstantVector::get(Result); } @@ -87,7 +87,8 @@ if (SrcEltTy->getTypeID() == Type::DoubleTyID) { for (unsigned i = 0; i != SrcNumElts; ++i) { uint64_t V = - DoubleToBits(cast(CV->getOperand(i))->getValue()); + DoubleToBits(cast(CV->getOperand(i))-> + getValueAPF().convertToDouble()); Constant *C = ConstantInt::get(Type::Int64Ty, V); Result.push_back(ConstantExpr::getBitCast(C, DstEltTy )); } @@ -96,7 +97,8 @@ assert(SrcEltTy->getTypeID() == Type::FloatTyID); for (unsigned i = 0; i != SrcNumElts; ++i) { - uint32_t V = FloatToBits(cast(CV->getOperand(i))->getValue()); + uint32_t V = FloatToBits(cast(CV->getOperand(i))-> + getValueAPF().convertToFloat()); Constant *C = ConstantInt::get(Type::Int32Ty, V); Result.push_back(ConstantExpr::getBitCast(C, DstEltTy)); } @@ -175,20 +177,31 @@ switch (opc) { case Instruction::FPTrunc: case Instruction::FPExt: - if (const ConstantFP *FPC = dyn_cast(V)) - return ConstantFP::get(DestTy, FPC->getValue()); + if (const ConstantFP *FPC = dyn_cast(V)) { + APFloat Val = FPC->getValueAPF(); + Val.convert(DestTy==Type::FloatTy ? APFloat::IEEEsingle : + APFloat::IEEEdouble, + APFloat::rmNearestTiesToEven); + return ConstantFP::get(DestTy, Val); + } return 0; // Can't fold. case Instruction::FPToUI: if (const ConstantFP *FPC = dyn_cast(V)) { + APFloat V = FPC->getValueAPF(); + bool isDouble = &V.getSemantics()==&APFloat::IEEEdouble; uint32_t DestBitWidth = cast(DestTy)->getBitWidth(); - APInt Val(APIntOps::RoundDoubleToAPInt(FPC->getValue(), DestBitWidth)); + APInt Val(APIntOps::RoundDoubleToAPInt(isDouble ? V.convertToDouble() : + (double)V.convertToFloat(), DestBitWidth)); return ConstantInt::get(Val); } return 0; // Can't fold. case Instruction::FPToSI: if (const ConstantFP *FPC = dyn_cast(V)) { + APFloat V = FPC->getValueAPF(); + bool isDouble = &V.getSemantics()==&APFloat::IEEEdouble; uint32_t DestBitWidth = cast(DestTy)->getBitWidth(); - APInt Val(APIntOps::RoundDoubleToAPInt(FPC->getValue(), DestBitWidth)); + APInt Val(APIntOps::RoundDoubleToAPInt(isDouble ? V.convertToDouble() : + (double)V.convertToFloat(), DestBitWidth)); return ConstantInt::get(Val); } return 0; // Can't fold. @@ -201,12 +214,22 @@ return ConstantInt::get(DestTy, 0); return 0; // Other pointer types cannot be casted case Instruction::UIToFP: - if (const ConstantInt *CI = dyn_cast(V)) - return ConstantFP::get(DestTy, CI->getValue().roundToDouble()); + if (const ConstantInt *CI = dyn_cast(V)) { + if (DestTy==Type::FloatTy) + return ConstantFP::get(DestTy, + APFloat((float)CI->getValue().roundToDouble())); + else + return ConstantFP::get(DestTy, APFloat(CI->getValue().roundToDouble())); + } return 0; case Instruction::SIToFP: - if (const ConstantInt *CI = dyn_cast(V)) - return ConstantFP::get(DestTy, CI->getValue().signedRoundToDouble()); + if (const ConstantInt *CI = dyn_cast(V)) { + double d = CI->getValue().signedRoundToDouble(); + if (DestTy==Type::FloatTy) + return ConstantFP::get(DestTy, APFloat((float)d)); + else + return ConstantFP::get(DestTy, APFloat(d)); + } return 0; case Instruction::ZExt: if (const ConstantInt *CI = dyn_cast(V)) { @@ -309,9 +332,9 @@ if (DestTy->isFloatingPoint()) { if (DestTy == Type::FloatTy) - return ConstantFP::get(DestTy, CI->getValue().bitsToFloat()); + return ConstantFP::get(DestTy, APFloat(CI->getValue().bitsToFloat())); assert(DestTy == Type::DoubleTy && "Unknown FP type!"); - return ConstantFP::get(DestTy, CI->getValue().bitsToDouble()); + return ConstantFP::get(DestTy, APFloat(CI->getValue().bitsToDouble())); } // Otherwise, can't fold this (vector?) return 0; @@ -322,11 +345,13 @@ // FP -> Integral. if (DestTy == Type::Int32Ty) { APInt Val(32, 0); - return ConstantInt::get(Val.floatToBits(FP->getValue())); + return ConstantInt::get(Val.floatToBits(FP-> + getValueAPF().convertToFloat())); } else { assert(DestTy == Type::Int64Ty && "only support f32/f64 for now!"); APInt Val(64, 0); - return ConstantInt::get(Val.doubleToBits(FP->getValue())); + return ConstantInt::get(Val.doubleToBits(FP-> + getValueAPF().convertToDouble())); } } return 0; @@ -660,39 +685,50 @@ } } else if (const ConstantFP *CFP1 = dyn_cast(C1)) { if (const ConstantFP *CFP2 = dyn_cast(C2)) { - double C1Val = CFP1->getValue(); - double C2Val = CFP2->getValue(); + APFloat C1V = CFP1->getValueAPF(); + APFloat C2V = CFP2->getValueAPF(); + APFloat C3V = C1V; // copy for modification + bool isDouble = CFP1->getType()==Type::DoubleTy; switch (Opcode) { default: break; - case Instruction::Add: - return ConstantFP::get(CFP1->getType(), C1Val + C2Val); + case Instruction::Add: + (void)C3V.add(C2V, APFloat::rmNearestTiesToEven); + return ConstantFP::get(CFP1->getType(), C3V); case Instruction::Sub: - return ConstantFP::get(CFP1->getType(), C1Val - C2Val); - case Instruction::Mul: - return ConstantFP::get(CFP1->getType(), C1Val * C2Val); + (void)C3V.subtract(C2V, APFloat::rmNearestTiesToEven); + return ConstantFP::get(CFP1->getType(), C3V); + case Instruction::Mul: + (void)C3V.multiply(C2V, APFloat::rmNearestTiesToEven); + return ConstantFP::get(CFP1->getType(), C3V); case Instruction::FDiv: - if (CFP2->isExactlyValue(0.0) || CFP2->isExactlyValue(-0.0)) - if (CFP1->isExactlyValue(0.0) || CFP1->isExactlyValue(-0.0)) + // FIXME better to look at the return code + if (C2V.isZero()) + if (C1V.isZero()) // IEEE 754, Section 7.1, #4 - return ConstantFP::get(CFP1->getType(), - std::numeric_limits::quiet_NaN()); - else if (CFP2->isExactlyValue(-0.0) || C1Val < 0.0) + return ConstantFP::get(CFP1->getType(), isDouble ? + APFloat(std::numeric_limits::quiet_NaN()) : + APFloat(std::numeric_limits::quiet_NaN())); + else if (C2V.isNegZero() || C1V.isNegative()) // IEEE 754, Section 7.2, negative infinity case - return ConstantFP::get(CFP1->getType(), - -std::numeric_limits::infinity()); + return ConstantFP::get(CFP1->getType(), isDouble ? + APFloat(-std::numeric_limits::infinity()) : + APFloat(-std::numeric_limits::infinity())); else // IEEE 754, Section 7.2, positive infinity case - return ConstantFP::get(CFP1->getType(), - std::numeric_limits::infinity()); - return ConstantFP::get(CFP1->getType(), C1Val / C2Val); + return ConstantFP::get(CFP1->getType(), isDouble ? + APFloat(std::numeric_limits::infinity()) : + APFloat(std::numeric_limits::infinity())); + (void)C3V.divide(C2V, APFloat::rmNearestTiesToEven); + return ConstantFP::get(CFP1->getType(), C3V); case Instruction::FRem: - if (CFP2->isExactlyValue(0.0) || CFP2->isExactlyValue(-0.0)) + if (C2V.isZero()) // IEEE 754, Section 7.1, #5 - return ConstantFP::get(CFP1->getType(), - std::numeric_limits::quiet_NaN()); - return ConstantFP::get(CFP1->getType(), std::fmod(C1Val, C2Val)); - + return ConstantFP::get(CFP1->getType(), isDouble ? + APFloat(std::numeric_limits::quiet_NaN()) : + APFloat(std::numeric_limits::quiet_NaN())); + (void)C3V.mod(C2V, APFloat::rmNearestTiesToEven); + return ConstantFP::get(CFP1->getType(), C3V); } } } else if (const ConstantVector *CP1 = dyn_cast(C1)) { @@ -1123,52 +1159,47 @@ case ICmpInst::ICMP_UGE:return ConstantInt::get(Type::Int1Ty, V1.uge(V2)); } } else if (isa(C1) && isa(C2)) { - double C1Val = cast(C1)->getValue(); - double C2Val = cast(C2)->getValue(); + APFloat C1V = cast(C1)->getValueAPF(); + APFloat C2V = cast(C2)->getValueAPF(); + APFloat::cmpResult R = C1V.compare(C2V); switch (pred) { default: assert(0 && "Invalid FCmp Predicate"); return 0; case FCmpInst::FCMP_FALSE: return ConstantInt::getFalse(); case FCmpInst::FCMP_TRUE: return ConstantInt::getTrue(); case FCmpInst::FCMP_UNO: - return ConstantInt::get(Type::Int1Ty, C1Val != C1Val || C2Val != C2Val); + return ConstantInt::get(Type::Int1Ty, R==APFloat::cmpUnordered); case FCmpInst::FCMP_ORD: - return ConstantInt::get(Type::Int1Ty, C1Val == C1Val && C2Val == C2Val); + return ConstantInt::get(Type::Int1Ty, R!=APFloat::cmpUnordered); case FCmpInst::FCMP_UEQ: - if (C1Val != C1Val || C2Val != C2Val) - return ConstantInt::getTrue(); - /* FALL THROUGH */ + return ConstantInt::get(Type::Int1Ty, R==APFloat::cmpUnordered || + R==APFloat::cmpEqual); case FCmpInst::FCMP_OEQ: - return ConstantInt::get(Type::Int1Ty, C1Val == C2Val); + return ConstantInt::get(Type::Int1Ty, R==APFloat::cmpEqual); case FCmpInst::FCMP_UNE: - if (C1Val != C1Val || C2Val != C2Val) - return ConstantInt::getTrue(); - /* FALL THROUGH */ + return ConstantInt::get(Type::Int1Ty, R!=APFloat::cmpEqual); case FCmpInst::FCMP_ONE: - return ConstantInt::get(Type::Int1Ty, C1Val != C2Val); + return ConstantInt::get(Type::Int1Ty, R==APFloat::cmpLessThan || + R==APFloat::cmpGreaterThan); case FCmpInst::FCMP_ULT: - if (C1Val != C1Val || C2Val != C2Val) - return ConstantInt::getTrue(); - /* FALL THROUGH */ + return ConstantInt::get(Type::Int1Ty, R==APFloat::cmpUnordered || + R==APFloat::cmpLessThan); case FCmpInst::FCMP_OLT: - return ConstantInt::get(Type::Int1Ty, C1Val < C2Val); + return ConstantInt::get(Type::Int1Ty, R==APFloat::cmpLessThan); case FCmpInst::FCMP_UGT: - if (C1Val != C1Val || C2Val != C2Val) - return ConstantInt::getTrue(); - /* FALL THROUGH */ + return ConstantInt::get(Type::Int1Ty, R==APFloat::cmpUnordered || + R==APFloat::cmpGreaterThan); case FCmpInst::FCMP_OGT: - return ConstantInt::get(Type::Int1Ty, C1Val > C2Val); + return ConstantInt::get(Type::Int1Ty, R==APFloat::cmpGreaterThan); case FCmpInst::FCMP_ULE: - if (C1Val != C1Val || C2Val != C2Val) - return ConstantInt::getTrue(); - /* FALL THROUGH */ + return ConstantInt::get(Type::Int1Ty, R!=APFloat::cmpGreaterThan); case FCmpInst::FCMP_OLE: - return ConstantInt::get(Type::Int1Ty, C1Val <= C2Val); + return ConstantInt::get(Type::Int1Ty, R==APFloat::cmpLessThan || + R==APFloat::cmpEqual); case FCmpInst::FCMP_UGE: - if (C1Val != C1Val || C2Val != C2Val) - return ConstantInt::getTrue(); - /* FALL THROUGH */ + return ConstantInt::get(Type::Int1Ty, R!=APFloat::cmpLessThan); case FCmpInst::FCMP_OGE: - return ConstantInt::get(Type::Int1Ty, C1Val >= C2Val); + return ConstantInt::get(Type::Int1Ty, R==APFloat::cmpGreaterThan || + R==APFloat::cmpEqual); } } else if (const ConstantVector *CP1 = dyn_cast(C1)) { if (const ConstantVector *CP2 = dyn_cast(C2)) { Modified: llvm/trunk/lib/VMCore/Constants.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/Constants.cpp?rev=41747&r1=41746&r2=41747&view=diff ============================================================================== --- llvm/trunk/lib/VMCore/Constants.cpp (original) +++ llvm/trunk/lib/VMCore/Constants.cpp Thu Sep 6 13:13:44 2007 @@ -107,11 +107,13 @@ case Type::IntegerTyID: return ConstantInt::get(Ty, 0); case Type::FloatTyID: + return ConstantFP::get(Ty, APFloat(0.0f)); case Type::DoubleTyID: + return ConstantFP::get(Ty, APFloat(0.0)); case Type::X86_FP80TyID: case Type::PPC_FP128TyID: case Type::FP128TyID: - return ConstantFP::get(Ty, 0.0); + return ConstantFP::get(Ty, APFloat(0.0)); //FIXME case Type::PointerTyID: return ConstantPointerNull::get(cast(Ty)); case Type::StructTyID: @@ -238,11 +240,6 @@ // ConstantFP //===----------------------------------------------------------------------===// - -ConstantFP::ConstantFP(const Type *Ty, double V) - : Constant(Ty, ConstantFPVal, 0, 0), - Val(Ty==Type::FloatTy ? APFloat((float)V) : APFloat(V)) { -} ConstantFP::ConstantFP(const Type *Ty, const APFloat& V) : Constant(Ty, ConstantFPVal, 0, 0), Val(V) { // temporary @@ -293,27 +290,6 @@ static ManagedStatic FPConstants; -ConstantFP *ConstantFP::get(const Type *Ty, double V) { - if (Ty == Type::FloatTy) { - DenseMapAPFloatKeyInfo::KeyTy Key(APFloat((float)V)); - ConstantFP *&Slot = (*FPConstants)[Key]; - if (Slot) return Slot; - return Slot = new ConstantFP(Ty, APFloat((float)V)); - } else if (Ty == Type::DoubleTy) { - // Without the redundant cast, the following is taken to be - // a function declaration. What a language. - DenseMapAPFloatKeyInfo::KeyTy Key(APFloat((double)V)); - ConstantFP *&Slot = (*FPConstants)[Key]; - if (Slot) return Slot; - return Slot = new ConstantFP(Ty, APFloat(V)); - } else if (Ty == Type::X86_FP80Ty || - Ty == Type::PPC_FP128Ty || Ty == Type::FP128Ty) { - assert(0 && "Long double constants not handled yet."); - } else { - assert(0 && "Unknown FP Type!"); - } -} - ConstantFP *ConstantFP::get(const Type *Ty, const APFloat& V) { // temporary if (Ty==Type::FloatTy) @@ -1934,12 +1910,15 @@ if (const VectorType *PTy = dyn_cast(Ty)) if (PTy->getElementType()->isFloatingPoint()) { std::vector zeros(PTy->getNumElements(), - ConstantFP::get(PTy->getElementType(),-0.0)); + ConstantFP::get(PTy->getElementType(), + PTy->getElementType()==Type::FloatTy ? + APFloat(-0.0f) : APFloat(0.0))); return ConstantVector::get(PTy, zeros); } if (Ty->isFloatingPoint()) - return ConstantFP::get(Ty, -0.0); + return ConstantFP::get(Ty, Ty==Type::FloatTy ? APFloat(-0.0f) : + APFloat(-0.0)); return Constant::getNullValue(Ty); } Modified: llvm/trunk/tools/llvm-upgrade/UpgradeInternals.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-upgrade/UpgradeInternals.h?rev=41747&r1=41746&r2=41747&view=diff ============================================================================== --- llvm/trunk/tools/llvm-upgrade/UpgradeInternals.h (original) +++ llvm/trunk/tools/llvm-upgrade/UpgradeInternals.h Thu Sep 6 13:13:44 2007 @@ -159,7 +159,7 @@ char *Name; // If it's a named reference. Memory must be free'd. int64_t ConstPool64; // Constant pool reference. This is the value uint64_t UConstPool64;// Unsigned constant pool reference. - double ConstPoolFP; // Floating point constant pool reference + APFloat *ConstPoolFP; // Floating point constant pool reference Constant *ConstantValue; // Fully resolved constant for ConstantVal case. InlineAsmDescriptor *IAD; }; @@ -187,7 +187,7 @@ return D; } - static ValID create(double Val) { + static ValID create(APFloat* Val) { ValID D; D.Type = ConstFPVal; D.ConstPoolFP = Val; D.S.makeSignless(); return D; @@ -245,7 +245,7 @@ switch (Type) { case NumberVal : return std::string("#") + itostr(Num); case NameVal : return Name; - case ConstFPVal : return ftostr(ConstPoolFP); + case ConstFPVal : return ftostr(*ConstPoolFP); case ConstNullVal : return "null"; case ConstUndefVal : return "undef"; case ConstZeroVal : return "zeroinitializer"; @@ -271,7 +271,8 @@ case NameVal: return strcmp(Name, V.Name) < 0; case ConstSIntVal: return ConstPool64 < V.ConstPool64; case ConstUIntVal: return UConstPool64 < V.UConstPool64; - case ConstFPVal: return ConstPoolFP < V.ConstPoolFP; + case ConstFPVal: return ConstPoolFP->compare(*V.ConstPoolFP) == + APFloat::cmpLessThan; case ConstNullVal: return false; case ConstUndefVal: return false; case ConstZeroVal: return false; Modified: llvm/trunk/tools/llvm-upgrade/UpgradeLexer.cpp.cvs URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-upgrade/UpgradeLexer.cpp.cvs?rev=41747&r1=41746&r2=41747&view=diff ============================================================================== --- llvm/trunk/tools/llvm-upgrade/UpgradeLexer.cpp.cvs (original) +++ llvm/trunk/tools/llvm-upgrade/UpgradeLexer.cpp.cvs Thu Sep 6 13:13:44 2007 @@ -17,10 +17,10 @@ #define yylineno Upgradelineno #line 20 "UpgradeLexer.cpp" -/* A lexical scanner generated by flex*/ +/* A lexical scanner generated by flex */ /* Scanner skeleton version: - * $Header$ + * $Header: /cvs/root/flex/flex/skel.c,v 1.2 2004/05/07 00:28:17 jkh Exp $ */ #define FLEX_SCANNER @@ -28,7 +28,6 @@ #define YY_FLEX_MINOR_VERSION 5 #include -#include /* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */ @@ -42,6 +41,7 @@ #ifdef __cplusplus #include +#include /* Use prototypes in function declarations. */ #define YY_USE_PROTOS @@ -153,15 +153,6 @@ #define unput(c) yyunput( c, yytext_ptr ) -/* Some routines like yy_flex_realloc() are emitted as static but are - not called by all lexers. This generates warnings in some compilers, - notably GCC. Arrange to suppress these. */ -#ifdef __GNUC__ -#define YY_MAY_BE_UNUSED __attribute__((unused)) -#else -#define YY_MAY_BE_UNUSED -#endif - /* The following is because we cannot portably get our hands on size_t * (without autoconf's help, which isn't available because we want * flex-generated scanners to compile on their own). @@ -268,7 +259,7 @@ YY_BUFFER_STATE yy_scan_bytes YY_PROTO(( yyconst char *bytes, int len )); static void *yy_flex_alloc YY_PROTO(( yy_size_t )); -static inline void *yy_flex_realloc YY_PROTO(( void *, yy_size_t )) YY_MAY_BE_UNUSED; +static inline void *yy_flex_realloc YY_PROTO(( void *, yy_size_t )); static void yy_flex_free YY_PROTO(( void * )); #define yy_new_buffer yy_create_buffer @@ -934,7 +925,7 @@ #define YY_MORE_ADJ 0 #define YY_RESTORE_YY_MORE_OFFSET char *yytext; -#line 1 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 1 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" #define INITIAL 0 /*===-- UpgradeLexer.l - Scanner for 1.9 assembly files --------*- C++ -*--===// // @@ -949,7 +940,7 @@ // //===----------------------------------------------------------------------===*/ #define YY_NEVER_INTERACTIVE 1 -#line 28 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 28 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" #include "UpgradeInternals.h" #include "llvm/Module.h" #include @@ -1090,7 +1081,7 @@ /* HexIntConstant - Hexadecimal constant generated by the CFE to avoid forcing * it to deal with 64 bit numbers. */ -#line 1094 "UpgradeLexer.cpp" +#line 1085 "UpgradeLexer.cpp" /* Macros after this point can all be overridden by user definitions in * section 1. @@ -1238,13 +1229,13 @@ YY_DECL { register yy_state_type yy_current_state; - register char *yy_cp = NULL, *yy_bp = NULL; + register char *yy_cp, *yy_bp; register int yy_act; -#line 194 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 194 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" -#line 1248 "UpgradeLexer.cpp" +#line 1239 "UpgradeLexer.cpp" if ( yy_init ) { @@ -1337,742 +1328,742 @@ { /* beginning of action switch */ case 1: YY_RULE_SETUP -#line 196 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 196 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { /* Ignore comments for now */ } YY_BREAK case 2: YY_RULE_SETUP -#line 198 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 198 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { return BEGINTOK; } YY_BREAK case 3: YY_RULE_SETUP -#line 199 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 199 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { return ENDTOK; } YY_BREAK case 4: YY_RULE_SETUP -#line 200 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 200 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { return TRUETOK; } YY_BREAK case 5: YY_RULE_SETUP -#line 201 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 201 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { return FALSETOK; } YY_BREAK case 6: YY_RULE_SETUP -#line 202 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 202 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { return DECLARE; } YY_BREAK case 7: YY_RULE_SETUP -#line 203 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 203 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { return GLOBAL; } YY_BREAK case 8: YY_RULE_SETUP -#line 204 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 204 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { return CONSTANT; } YY_BREAK case 9: YY_RULE_SETUP -#line 205 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 205 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { return INTERNAL; } YY_BREAK case 10: YY_RULE_SETUP -#line 206 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 206 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { return LINKONCE; } YY_BREAK case 11: YY_RULE_SETUP -#line 207 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 207 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { return WEAK; } YY_BREAK case 12: YY_RULE_SETUP -#line 208 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 208 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { return APPENDING; } YY_BREAK case 13: YY_RULE_SETUP -#line 209 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 209 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { return DLLIMPORT; } YY_BREAK case 14: YY_RULE_SETUP -#line 210 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 210 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { return DLLEXPORT; } YY_BREAK case 15: YY_RULE_SETUP -#line 211 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 211 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { return EXTERN_WEAK; } YY_BREAK case 16: YY_RULE_SETUP -#line 212 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 212 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { return EXTERNAL; } /* Deprecated, turn into external */ YY_BREAK case 17: YY_RULE_SETUP -#line 213 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 213 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { return EXTERNAL; } YY_BREAK case 18: YY_RULE_SETUP -#line 214 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 214 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { return IMPLEMENTATION; } YY_BREAK case 19: YY_RULE_SETUP -#line 215 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 215 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { return ZEROINITIALIZER; } YY_BREAK case 20: YY_RULE_SETUP -#line 216 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 216 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { return DOTDOTDOT; } YY_BREAK case 21: YY_RULE_SETUP -#line 217 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 217 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { return UNDEF; } YY_BREAK case 22: YY_RULE_SETUP -#line 218 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 218 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { return NULL_TOK; } YY_BREAK case 23: YY_RULE_SETUP -#line 219 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 219 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { return TO; } YY_BREAK case 24: YY_RULE_SETUP -#line 220 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 220 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { return EXCEPT; } YY_BREAK case 25: YY_RULE_SETUP -#line 221 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 221 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { return NOT; } /* Deprecated, turned into XOR */ YY_BREAK case 26: YY_RULE_SETUP -#line 222 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 222 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { return TAIL; } YY_BREAK case 27: YY_RULE_SETUP -#line 223 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 223 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { return TARGET; } YY_BREAK case 28: YY_RULE_SETUP -#line 224 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 224 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { return TRIPLE; } YY_BREAK case 29: YY_RULE_SETUP -#line 225 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 225 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { return DEPLIBS; } YY_BREAK case 30: YY_RULE_SETUP -#line 226 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 226 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { return ENDIAN; } YY_BREAK case 31: YY_RULE_SETUP -#line 227 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 227 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { return POINTERSIZE; } YY_BREAK case 32: YY_RULE_SETUP -#line 228 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 228 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { return DATALAYOUT; } YY_BREAK case 33: YY_RULE_SETUP -#line 229 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 229 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { return LITTLE; } YY_BREAK case 34: YY_RULE_SETUP -#line 230 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 230 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { return BIG; } YY_BREAK case 35: YY_RULE_SETUP -#line 231 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 231 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { return VOLATILE; } YY_BREAK case 36: YY_RULE_SETUP -#line 232 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 232 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { return ALIGN; } YY_BREAK case 37: YY_RULE_SETUP -#line 233 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 233 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { return SECTION; } YY_BREAK case 38: YY_RULE_SETUP -#line 234 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 234 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { return MODULE; } YY_BREAK case 39: YY_RULE_SETUP -#line 235 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 235 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { return ASM_TOK; } YY_BREAK case 40: YY_RULE_SETUP -#line 236 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 236 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { return SIDEEFFECT; } YY_BREAK case 41: YY_RULE_SETUP -#line 238 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 238 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { return CC_TOK; } YY_BREAK case 42: YY_RULE_SETUP -#line 239 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 239 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { return CCC_TOK; } YY_BREAK case 43: YY_RULE_SETUP -#line 240 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 240 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { return CSRETCC_TOK; } YY_BREAK case 44: YY_RULE_SETUP -#line 241 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 241 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { return FASTCC_TOK; } YY_BREAK case 45: YY_RULE_SETUP -#line 242 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 242 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { return COLDCC_TOK; } YY_BREAK case 46: YY_RULE_SETUP -#line 243 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 243 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { return X86_STDCALLCC_TOK; } YY_BREAK case 47: YY_RULE_SETUP -#line 244 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 244 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { return X86_FASTCALLCC_TOK; } YY_BREAK case 48: YY_RULE_SETUP -#line 246 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 246 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { RET_TY(SBYTE, Type::Int8Ty, 2); } YY_BREAK case 49: YY_RULE_SETUP -#line 247 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 247 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { RET_TY(UBYTE, Type::Int8Ty, 1); } YY_BREAK case 50: YY_RULE_SETUP -#line 248 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 248 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { RET_TY(UBYTE, Type::Int8Ty, 1); } YY_BREAK case 51: YY_RULE_SETUP -#line 249 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 249 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { RET_TY(SHORT, Type::Int16Ty, 2); } YY_BREAK case 52: YY_RULE_SETUP -#line 250 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 250 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { RET_TY(USHORT, Type::Int16Ty, 1); } YY_BREAK case 53: YY_RULE_SETUP -#line 251 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 251 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { RET_TY(USHORT, Type::Int16Ty, 1); } YY_BREAK case 54: YY_RULE_SETUP -#line 252 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 252 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { RET_TY(INT, Type::Int32Ty, 2); } YY_BREAK case 55: YY_RULE_SETUP -#line 253 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 253 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { RET_TY(UINT, Type::Int32Ty, 1); } YY_BREAK case 56: YY_RULE_SETUP -#line 254 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 254 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { RET_TY(UINT, Type::Int32Ty, 1); } YY_BREAK case 57: YY_RULE_SETUP -#line 255 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 255 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { RET_TY(LONG, Type::Int64Ty, 2); } YY_BREAK case 58: YY_RULE_SETUP -#line 256 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 256 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { RET_TY(ULONG, Type::Int64Ty, 1); } YY_BREAK case 59: YY_RULE_SETUP -#line 257 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 257 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { RET_TY(ULONG, Type::Int64Ty, 1); } YY_BREAK case 60: YY_RULE_SETUP -#line 258 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 258 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { RET_TY(VOID, Type::VoidTy, 0); } YY_BREAK case 61: YY_RULE_SETUP -#line 259 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 259 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { RET_TY(BOOL, Type::Int1Ty, 1); } YY_BREAK case 62: YY_RULE_SETUP -#line 260 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 260 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { RET_TY(BOOL, Type::Int1Ty, 1); } YY_BREAK case 63: YY_RULE_SETUP -#line 261 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 261 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { RET_TY(FLOAT, Type::FloatTy, 0); } YY_BREAK case 64: YY_RULE_SETUP -#line 262 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 262 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { RET_TY(DOUBLE, Type::DoubleTy,0); } YY_BREAK case 65: YY_RULE_SETUP -#line 263 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 263 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { RET_TY(LABEL, Type::LabelTy, 0); } YY_BREAK case 66: YY_RULE_SETUP -#line 264 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 264 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { return TYPE; } YY_BREAK case 67: YY_RULE_SETUP -#line 265 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 265 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { return OPAQUE; } YY_BREAK case 68: YY_RULE_SETUP -#line 267 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 267 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, AddOp, ADD); } YY_BREAK case 69: YY_RULE_SETUP -#line 268 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 268 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, SubOp, SUB); } YY_BREAK case 70: YY_RULE_SETUP -#line 269 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 269 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, MulOp, MUL); } YY_BREAK case 71: YY_RULE_SETUP -#line 270 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 270 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, DivOp, DIV); } YY_BREAK case 72: YY_RULE_SETUP -#line 271 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 271 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, UDivOp, UDIV); } YY_BREAK case 73: YY_RULE_SETUP -#line 272 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 272 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, SDivOp, SDIV); } YY_BREAK case 74: YY_RULE_SETUP -#line 273 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 273 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, FDivOp, FDIV); } YY_BREAK case 75: YY_RULE_SETUP -#line 274 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 274 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, RemOp, REM); } YY_BREAK case 76: YY_RULE_SETUP -#line 275 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 275 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, URemOp, UREM); } YY_BREAK case 77: YY_RULE_SETUP -#line 276 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 276 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, SRemOp, SREM); } YY_BREAK case 78: YY_RULE_SETUP -#line 277 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 277 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, FRemOp, FREM); } YY_BREAK case 79: YY_RULE_SETUP -#line 278 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 278 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, AndOp, AND); } YY_BREAK case 80: YY_RULE_SETUP -#line 279 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 279 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, OrOp , OR ); } YY_BREAK case 81: YY_RULE_SETUP -#line 280 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 280 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, XorOp, XOR); } YY_BREAK case 82: YY_RULE_SETUP -#line 281 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 281 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, SetNE, SETNE); } YY_BREAK case 83: YY_RULE_SETUP -#line 282 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 282 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, SetEQ, SETEQ); } YY_BREAK case 84: YY_RULE_SETUP -#line 283 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 283 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, SetLT, SETLT); } YY_BREAK case 85: YY_RULE_SETUP -#line 284 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 284 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, SetGT, SETGT); } YY_BREAK case 86: YY_RULE_SETUP -#line 285 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 285 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, SetLE, SETLE); } YY_BREAK case 87: YY_RULE_SETUP -#line 286 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 286 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, SetGE, SETGE); } YY_BREAK case 88: YY_RULE_SETUP -#line 287 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 287 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, ShlOp, SHL); } YY_BREAK case 89: YY_RULE_SETUP -#line 288 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 288 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, ShrOp, SHR); } YY_BREAK case 90: YY_RULE_SETUP -#line 289 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 289 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, LShrOp, LSHR); } YY_BREAK case 91: YY_RULE_SETUP -#line 290 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 290 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, AShrOp, ASHR); } YY_BREAK case 92: YY_RULE_SETUP -#line 292 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 292 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(OtherOpVal, ICmpOp, ICMP); } YY_BREAK case 93: YY_RULE_SETUP -#line 293 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 293 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(OtherOpVal, FCmpOp, FCMP); } YY_BREAK case 94: YY_RULE_SETUP -#line 295 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 295 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { return EQ; } YY_BREAK case 95: YY_RULE_SETUP -#line 296 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 296 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { return NE; } YY_BREAK case 96: YY_RULE_SETUP -#line 297 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 297 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { return SLT; } YY_BREAK case 97: YY_RULE_SETUP -#line 298 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 298 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { return SGT; } YY_BREAK case 98: YY_RULE_SETUP -#line 299 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 299 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { return SLE; } YY_BREAK case 99: YY_RULE_SETUP -#line 300 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 300 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { return SGE; } YY_BREAK case 100: YY_RULE_SETUP -#line 301 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 301 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { return ULT; } YY_BREAK case 101: YY_RULE_SETUP -#line 302 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 302 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { return UGT; } YY_BREAK case 102: YY_RULE_SETUP -#line 303 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 303 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { return ULE; } YY_BREAK case 103: YY_RULE_SETUP -#line 304 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 304 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { return UGE; } YY_BREAK case 104: YY_RULE_SETUP -#line 305 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 305 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { return OEQ; } YY_BREAK case 105: YY_RULE_SETUP -#line 306 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 306 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { return ONE; } YY_BREAK case 106: YY_RULE_SETUP -#line 307 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 307 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { return OLT; } YY_BREAK case 107: YY_RULE_SETUP -#line 308 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 308 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { return OGT; } YY_BREAK case 108: YY_RULE_SETUP -#line 309 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 309 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { return OLE; } YY_BREAK case 109: YY_RULE_SETUP -#line 310 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 310 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { return OGE; } YY_BREAK case 110: YY_RULE_SETUP -#line 311 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 311 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { return ORD; } YY_BREAK case 111: YY_RULE_SETUP -#line 312 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 312 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { return UNO; } YY_BREAK case 112: YY_RULE_SETUP -#line 313 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 313 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { return UEQ; } YY_BREAK case 113: YY_RULE_SETUP -#line 314 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 314 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { return UNE; } YY_BREAK case 114: YY_RULE_SETUP -#line 316 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 316 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(OtherOpVal, PHIOp, PHI_TOK); } YY_BREAK case 115: YY_RULE_SETUP -#line 317 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 317 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(OtherOpVal, CallOp, CALL); } YY_BREAK case 116: YY_RULE_SETUP -#line 318 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 318 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(CastOpVal, CastOp, CAST); } YY_BREAK case 117: YY_RULE_SETUP -#line 319 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 319 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(CastOpVal, TruncOp, TRUNC); } YY_BREAK case 118: YY_RULE_SETUP -#line 320 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 320 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(CastOpVal, ZExtOp , ZEXT); } YY_BREAK case 119: YY_RULE_SETUP -#line 321 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 321 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(CastOpVal, SExtOp, SEXT); } YY_BREAK case 120: YY_RULE_SETUP -#line 322 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 322 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(CastOpVal, FPTruncOp, FPTRUNC); } YY_BREAK case 121: YY_RULE_SETUP -#line 323 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 323 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(CastOpVal, FPExtOp, FPEXT); } YY_BREAK case 122: YY_RULE_SETUP -#line 324 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 324 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(CastOpVal, FPToUIOp, FPTOUI); } YY_BREAK case 123: YY_RULE_SETUP -#line 325 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 325 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(CastOpVal, FPToSIOp, FPTOSI); } YY_BREAK case 124: YY_RULE_SETUP -#line 326 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 326 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(CastOpVal, UIToFPOp, UITOFP); } YY_BREAK case 125: YY_RULE_SETUP -#line 327 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 327 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(CastOpVal, SIToFPOp, SITOFP); } YY_BREAK case 126: YY_RULE_SETUP -#line 328 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 328 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(CastOpVal, PtrToIntOp, PTRTOINT); } YY_BREAK case 127: YY_RULE_SETUP -#line 329 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 329 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(CastOpVal, IntToPtrOp, INTTOPTR); } YY_BREAK case 128: YY_RULE_SETUP -#line 330 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 330 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(CastOpVal, BitCastOp, BITCAST); } YY_BREAK case 129: YY_RULE_SETUP -#line 331 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 331 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(OtherOpVal, SelectOp, SELECT); } YY_BREAK case 130: YY_RULE_SETUP -#line 332 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 332 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { return VANEXT_old; } YY_BREAK case 131: YY_RULE_SETUP -#line 333 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 333 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { return VAARG_old; } YY_BREAK case 132: YY_RULE_SETUP -#line 334 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 334 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(OtherOpVal, VAArg , VAARG); } YY_BREAK case 133: YY_RULE_SETUP -#line 335 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 335 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(TermOpVal, RetOp, RET); } YY_BREAK case 134: YY_RULE_SETUP -#line 336 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 336 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(TermOpVal, BrOp, BR); } YY_BREAK case 135: YY_RULE_SETUP -#line 337 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 337 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(TermOpVal, SwitchOp, SWITCH); } YY_BREAK case 136: YY_RULE_SETUP -#line 338 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 338 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(TermOpVal, InvokeOp, INVOKE); } YY_BREAK case 137: YY_RULE_SETUP -#line 339 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 339 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { return UNWIND; } YY_BREAK case 138: YY_RULE_SETUP -#line 340 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 340 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(TermOpVal, UnreachableOp, UNREACHABLE); } YY_BREAK case 139: YY_RULE_SETUP -#line 342 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 342 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(MemOpVal, MallocOp, MALLOC); } YY_BREAK case 140: YY_RULE_SETUP -#line 343 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 343 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(MemOpVal, AllocaOp, ALLOCA); } YY_BREAK case 141: YY_RULE_SETUP -#line 344 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 344 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(MemOpVal, FreeOp, FREE); } YY_BREAK case 142: YY_RULE_SETUP -#line 345 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 345 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(MemOpVal, LoadOp, LOAD); } YY_BREAK case 143: YY_RULE_SETUP -#line 346 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 346 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(MemOpVal, StoreOp, STORE); } YY_BREAK case 144: YY_RULE_SETUP -#line 347 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 347 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(MemOpVal, GetElementPtrOp, GETELEMENTPTR); } YY_BREAK case 145: YY_RULE_SETUP -#line 349 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 349 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(OtherOpVal, ExtractElementOp, EXTRACTELEMENT); } YY_BREAK case 146: YY_RULE_SETUP -#line 350 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 350 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(OtherOpVal, InsertElementOp, INSERTELEMENT); } YY_BREAK case 147: YY_RULE_SETUP -#line 351 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 351 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(OtherOpVal, ShuffleVectorOp, SHUFFLEVECTOR); } YY_BREAK case 148: YY_RULE_SETUP -#line 354 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 354 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { UnEscapeLexed(yytext+1); Upgradelval.StrVal = strdup(yytext+1); // Skip % @@ -2081,7 +2072,7 @@ YY_BREAK case 149: YY_RULE_SETUP -#line 359 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 359 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { yytext[strlen(yytext)-1] = 0; // nuke colon UnEscapeLexed(yytext); @@ -2091,7 +2082,7 @@ YY_BREAK case 150: YY_RULE_SETUP -#line 365 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 365 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { yytext[strlen(yytext)-2] = 0; // nuke colon, end quote UnEscapeLexed(yytext+1); @@ -2101,7 +2092,7 @@ YY_BREAK case 151: YY_RULE_SETUP -#line 372 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 372 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.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 @@ -2114,12 +2105,12 @@ YY_BREAK case 152: YY_RULE_SETUP -#line 383 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 383 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { Upgradelval.UInt64Val = atoull(yytext); return EUINT64VAL; } YY_BREAK case 153: YY_RULE_SETUP -#line 384 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 384 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { uint64_t Val = atoull(yytext+1); // +1: we have bigger negative range @@ -2131,7 +2122,7 @@ YY_BREAK case 154: YY_RULE_SETUP -#line 392 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 392 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { Upgradelval.UInt64Val = HexIntToVal(yytext+3); return yytext[0] == 's' ? ESINT64VAL : EUINT64VAL; @@ -2139,7 +2130,7 @@ YY_BREAK case 155: YY_RULE_SETUP -#line 397 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 397 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { uint64_t Val = atoull(yytext+1); if ((unsigned)Val != Val) @@ -2150,7 +2141,7 @@ YY_BREAK case 156: YY_RULE_SETUP -#line 404 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 404 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { uint64_t Val = atoull(yytext+2); // +1: we have bigger negative range @@ -2162,16 +2153,18 @@ YY_BREAK case 157: YY_RULE_SETUP -#line 413 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" -{ Upgradelval.FPVal = atof(yytext); return FPVAL; } +#line 413 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" +{ Upgradelval.FPVal = new APFloat(atof(yytext)); return FPVAL; } YY_BREAK case 158: YY_RULE_SETUP -#line 414 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" -{ Upgradelval.FPVal = HexToFP(yytext); return FPVAL; } +#line 414 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" +{ Upgradelval.FPVal = new APFloat(HexToFP(yytext)); + return FPVAL; + } YY_BREAK case YY_STATE_EOF(INITIAL): -#line 416 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 418 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { /* Make sure to free the internal buffers for flex when we are * done reading our input! @@ -2182,20 +2175,20 @@ YY_BREAK case 159: YY_RULE_SETUP -#line 424 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 426 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { /* Ignore whitespace */ } YY_BREAK case 160: YY_RULE_SETUP -#line 425 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 427 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" { return yytext[0]; } YY_BREAK case 161: YY_RULE_SETUP -#line 427 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 429 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" YY_FATAL_ERROR( "flex scanner jammed" ); YY_BREAK -#line 2199 "UpgradeLexer.cpp" +#line 2192 "UpgradeLexer.cpp" case YY_END_OF_BUFFER: { @@ -2571,7 +2564,6 @@ #endif /* ifndef YY_NO_UNPUT */ -#ifndef YY_NO_INPUT #ifdef __cplusplus static int yyinput() #else @@ -2645,7 +2637,7 @@ return c; } -#endif /* YY_NO_INPUT */ + #ifdef YY_USE_PROTOS void yyrestart( FILE *input_file ) @@ -2756,6 +2748,11 @@ } +#ifndef YY_ALWAYS_INTERACTIVE +#ifndef YY_NEVER_INTERACTIVE +extern int isatty YY_PROTO(( int )); +#endif +#endif #ifdef YY_USE_PROTOS void yy_init_buffer( YY_BUFFER_STATE b, FILE *file ) @@ -3073,5 +3070,5 @@ return 0; } #endif -#line 427 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 429 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l" Modified: llvm/trunk/tools/llvm-upgrade/UpgradeLexer.l URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-upgrade/UpgradeLexer.l?rev=41747&r1=41746&r2=41747&view=diff ============================================================================== --- llvm/trunk/tools/llvm-upgrade/UpgradeLexer.l (original) +++ llvm/trunk/tools/llvm-upgrade/UpgradeLexer.l Thu Sep 6 13:13:44 2007 @@ -410,8 +410,10 @@ return SINTVAL; } -{FPConstant} { Upgradelval.FPVal = atof(yytext); return FPVAL; } -{HexFPConstant} { Upgradelval.FPVal = HexToFP(yytext); return FPVAL; } +{FPConstant} { Upgradelval.FPVal = new APFloat(atof(yytext)); return FPVAL; } +{HexFPConstant} { Upgradelval.FPVal = new APFloat(HexToFP(yytext)); + return FPVAL; + } <> { /* Make sure to free the internal buffers for flex when we are Modified: llvm/trunk/tools/llvm-upgrade/UpgradeLexer.l.cvs URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-upgrade/UpgradeLexer.l.cvs?rev=41747&r1=41746&r2=41747&view=diff ============================================================================== --- llvm/trunk/tools/llvm-upgrade/UpgradeLexer.l.cvs (original) +++ llvm/trunk/tools/llvm-upgrade/UpgradeLexer.l.cvs Thu Sep 6 13:13:44 2007 @@ -410,8 +410,10 @@ return SINTVAL; } -{FPConstant} { Upgradelval.FPVal = atof(yytext); return FPVAL; } -{HexFPConstant} { Upgradelval.FPVal = HexToFP(yytext); return FPVAL; } +{FPConstant} { Upgradelval.FPVal = new APFloat(atof(yytext)); return FPVAL; } +{HexFPConstant} { Upgradelval.FPVal = new APFloat(HexToFP(yytext)); + return FPVAL; + } <> { /* Make sure to free the internal buffers for flex when we are Modified: llvm/trunk/tools/llvm-upgrade/UpgradeParser.y URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-upgrade/UpgradeParser.y?rev=41747&r1=41746&r2=41747&view=diff ============================================================================== --- llvm/trunk/tools/llvm-upgrade/UpgradeParser.y (original) +++ llvm/trunk/tools/llvm-upgrade/UpgradeParser.y Thu Sep 6 13:13:44 2007 @@ -533,9 +533,13 @@ return ConstantInt::get(Ty, D.UConstPool64); case ValID::ConstFPVal: // Is it a floating point const pool reference? - if (!ConstantFP::isValueValidForType(Ty, D.ConstPoolFP)) + if (!ConstantFP::isValueValidForType(Ty, *D.ConstPoolFP)) error("FP constant invalid for type"); - return ConstantFP::get(Ty, D.ConstPoolFP); + // Lexer has no type info, so builds all FP constants as double. + // Fix this here. + if (Ty==Type::FloatTy) + D.ConstPoolFP->convert(APFloat::IEEEsingle, APFloat::rmNearestTiesToEven); + return ConstantFP::get(Ty, *D.ConstPoolFP); case ValID::ConstNullVal: // Is it a null value? if (!isa(Ty)) @@ -1773,7 +1777,7 @@ uint64_t UInt64Val; int SIntVal; unsigned UIntVal; - double FPVal; + llvm::APFloat *FPVal; bool BoolVal; char *StrVal; // This memory is strdup'd! @@ -2514,9 +2518,13 @@ $$.S.makeUnsigned(); } | FPType FPVAL { // Float & Double constants - if (!ConstantFP::isValueValidForType($1.T, $2)) + if (!ConstantFP::isValueValidForType($1.T, *$2)) error("Floating point constant invalid for type"); - $$.C = ConstantFP::get($1.T, $2); + // Lexer has no type info, so builds all FP constants as double. + // Fix this here. + if ($1.T==Type::FloatTy) + $2->convert(APFloat::IEEEsingle, APFloat::rmNearestTiesToEven); + $$.C = ConstantFP::get($1.T, *$2); $$.S.makeSignless(); } ; Modified: llvm/trunk/tools/llvm-upgrade/UpgradeParser.y.cvs URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-upgrade/UpgradeParser.y.cvs?rev=41747&r1=41746&r2=41747&view=diff ============================================================================== --- llvm/trunk/tools/llvm-upgrade/UpgradeParser.y.cvs (original) +++ llvm/trunk/tools/llvm-upgrade/UpgradeParser.y.cvs Thu Sep 6 13:13:44 2007 @@ -533,9 +533,13 @@ return ConstantInt::get(Ty, D.UConstPool64); case ValID::ConstFPVal: // Is it a floating point const pool reference? - if (!ConstantFP::isValueValidForType(Ty, D.ConstPoolFP)) + if (!ConstantFP::isValueValidForType(Ty, *D.ConstPoolFP)) error("FP constant invalid for type"); - return ConstantFP::get(Ty, D.ConstPoolFP); + // Lexer has no type info, so builds all FP constants as double. + // Fix this here. + if (Ty==Type::FloatTy) + D.ConstPoolFP->convert(APFloat::IEEEsingle, APFloat::rmNearestTiesToEven); + return ConstantFP::get(Ty, *D.ConstPoolFP); case ValID::ConstNullVal: // Is it a null value? if (!isa(Ty)) @@ -1773,7 +1777,7 @@ uint64_t UInt64Val; int SIntVal; unsigned UIntVal; - double FPVal; + llvm::APFloat *FPVal; bool BoolVal; char *StrVal; // This memory is strdup'd! @@ -2514,9 +2518,13 @@ $$.S.makeUnsigned(); } | FPType FPVAL { // Float & Double constants - if (!ConstantFP::isValueValidForType($1.T, $2)) + if (!ConstantFP::isValueValidForType($1.T, *$2)) error("Floating point constant invalid for type"); - $$.C = ConstantFP::get($1.T, $2); + // Lexer has no type info, so builds all FP constants as double. + // Fix this here. + if ($1.T==Type::FloatTy) + $2->convert(APFloat::IEEEsingle, APFloat::rmNearestTiesToEven); + $$.C = ConstantFP::get($1.T, *$2); $$.S.makeSignless(); } ; Modified: llvm/trunk/tools/llvm2cpp/CppWriter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm2cpp/CppWriter.cpp?rev=41747&r1=41746&r2=41747&view=diff ============================================================================== --- llvm/trunk/tools/llvm2cpp/CppWriter.cpp (original) +++ llvm/trunk/tools/llvm2cpp/CppWriter.cpp Thu Sep 6 13:13:44 2007 @@ -209,25 +209,30 @@ // result so that we don't lose precision. void CppWriter::printCFP(const ConstantFP *CFP) { + APFloat APF = APFloat(CFP->getValueAPF()); // copy + if (CFP->getType() == Type::FloatTy) + APF.convert(APFloat::IEEEdouble, APFloat::rmNearestTiesToEven); Out << "ConstantFP::get("; if (CFP->getType() == Type::DoubleTy) Out << "Type::DoubleTy, "; else Out << "Type::FloatTy, "; + Out << "APFloat("; #if HAVE_PRINTF_A char Buffer[100]; - sprintf(Buffer, "%A", CFP->getValue()); + sprintf(Buffer, "%A", APF.convertToDouble()); if ((!strncmp(Buffer, "0x", 2) || !strncmp(Buffer, "-0x", 3) || !strncmp(Buffer, "+0x", 3)) && - (atof(Buffer) == CFP->getValue())) + APF.bitwiseIsEqual(APFloat(atof(Buffer)))) { if (CFP->getType() == Type::DoubleTy) Out << "BitsToDouble(" << Buffer << ")"; else - Out << "BitsToFloat(" << Buffer << ")"; - else { + Out << "BitsToFloat((float)" << Buffer << ")"; + Out << ")"; + } else { #endif - std::string StrVal = ftostr(CFP->getValue()); + std::string StrVal = ftostr(CFP->getValueAPF()); while (StrVal[0] == ' ') StrVal.erase(StrVal.begin()); @@ -237,17 +242,21 @@ if (((StrVal[0] >= '0' && StrVal[0] <= '9') || ((StrVal[0] == '-' || StrVal[0] == '+') && (StrVal[1] >= '0' && StrVal[1] <= '9'))) && - (atof(StrVal.c_str()) == CFP->getValue())) + (CFP->isExactlyValue(atof(StrVal.c_str())))) { if (CFP->getType() == Type::DoubleTy) Out << StrVal; else - Out << StrVal; + Out << StrVal << "f"; + } else if (CFP->getType() == Type::DoubleTy) - Out << "BitsToDouble(0x" << std::hex << DoubleToBits(CFP->getValue()) + Out << "BitsToDouble(0x" << std::hex + << DoubleToBits(CFP->getValueAPF().convertToDouble()) << std::dec << "ULL) /* " << StrVal << " */"; else - Out << "BitsToFloat(0x" << std::hex << FloatToBits(CFP->getValue()) + Out << "BitsToFloat(0x" << std::hex + << FloatToBits(CFP->getValueAPF().convertToFloat()) << std::dec << "U) /* " << StrVal << " */"; + Out << ")"; #if HAVE_PRINTF_A } #endif From rstaudinger at cs.uni-salzburg.at Thu Sep 6 04:37:14 2007 From: rstaudinger at cs.uni-salzburg.at (Robert Staudinger) Date: Thu, 6 Sep 2007 11:37:14 +0200 Subject: [llvm-commits] build fix Message-ID: <408d079d0709060237y3abb3fbr22f4c6f216233f7d@mail.gmail.com> Hello, here's a one-liner that fixes the cfe build for me after today's "svn up". Cheers, Rob -------------- next part -------------- A non-text attachment was scrubbed... Name: clang-build.diff Type: text/x-patch Size: 317 bytes Desc: not available Url : http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20070906/f837beb2/attachment.bin From dpatel at apple.com Thu Sep 6 14:00:21 2007 From: dpatel at apple.com (Devang Patel) Date: Thu, 06 Sep 2007 19:00:21 -0000 Subject: [llvm-commits] [llvm-gcc-4.0] r41748 - in /llvm-gcc-4.0/trunk/gcc: llvm-backend.cpp llvm-convert.cpp llvm-internal.h Message-ID: <200709061900.l86J0LQq021399@zion.cs.uiuc.edu> Author: dpatel Date: Thu Sep 6 14:00:20 2007 New Revision: 41748 URL: http://llvm.org/viewvc/llvm-project?rev=41748&view=rev Log: Replace GV from AttributeUsedGlobals list. Modified: llvm-gcc-4.0/trunk/gcc/llvm-backend.cpp llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp llvm-gcc-4.0/trunk/gcc/llvm-internal.h Modified: llvm-gcc-4.0/trunk/gcc/llvm-backend.cpp URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.0/trunk/gcc/llvm-backend.cpp?rev=41748&r1=41747&r2=41748&view=diff ============================================================================== --- llvm-gcc-4.0/trunk/gcc/llvm-backend.cpp (original) +++ llvm-gcc-4.0/trunk/gcc/llvm-backend.cpp Thu Sep 6 14:00:20 2007 @@ -84,7 +84,7 @@ static cl::opt DisableLLVMOptimizations("disable-llvm-optzns"); std::vector > StaticCtors, StaticDtors; -std::vector AttributeUsedGlobals; +SmallPtrSet AttributeUsedGlobals; std::vector AttributeNoinlineFunctions; std::vector AttributeAnnotateGlobals; @@ -439,6 +439,7 @@ createOptimizationPasses(); + AttributeUsedGlobals.clear(); timevar_pop(TV_LLVM_INIT); } @@ -479,9 +480,15 @@ CreateStructorsList(StaticDtors, "llvm.global_dtors"); if (!AttributeUsedGlobals.empty()) { - const Type *SBP = PointerType::get(Type::Int8Ty); - ArrayType *AT = ArrayType::get(SBP, AttributeUsedGlobals.size()); - Constant *Init = ConstantArray::get(AT, AttributeUsedGlobals); + std::vector AUGs; + const Type *SBP= PointerType::get(Type::Int8Ty); + for (SmallPtrSet::iterator AI = AttributeUsedGlobals.begin(), + AE = AttributeUsedGlobals.end(); AI != AE; ++AI) { + Constant *C = *AI; + AUGs.push_back(ConstantExpr::getBitCast(C, SBP)); + } + ArrayType *AT = ArrayType::get(SBP, AUGs.size()); + Constant *Init = ConstantArray::get(AT, AUGs); GlobalValue* gv = new GlobalVariable(AT, false, GlobalValue::AppendingLinkage, Init, "llvm.used", TheModule); @@ -796,6 +803,10 @@ GlobalValue::ExternalLinkage, 0, GV->getName(), TheModule); GV->replaceAllUsesWith(ConstantExpr::getBitCast(NGV, GV->getType())); + if (AttributeUsedGlobals.count(GV)) { + AttributeUsedGlobals.erase(GV); + AttributeUsedGlobals.insert(NGV); + } delete GV; SET_DECL_LLVM(decl, NGV); GV = NGV; @@ -853,10 +864,8 @@ } // Handle used decls - if (DECL_PRESERVE_P (decl)) { - const Type *SBP= PointerType::get(Type::Int8Ty); - AttributeUsedGlobals.push_back(ConstantExpr::getBitCast(GV, SBP)); - } + if (DECL_PRESERVE_P (decl)) + AttributeUsedGlobals.insert(GV); // Add annotate attributes for globals if (DECL_ATTRIBUTES(decl)) Modified: llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp?rev=41748&r1=41747&r2=41748&view=diff ============================================================================== --- llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp (original) +++ llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp Thu Sep 6 14:00:20 2007 @@ -594,10 +594,8 @@ Fn->setSection(TREE_STRING_POINTER(DECL_SECTION_NAME(FnDecl))); // Handle used Functions - if (DECL_PRESERVE_P (FnDecl)) { - const Type *SBP= PointerType::get(Type::Int8Ty); - AttributeUsedGlobals.push_back(ConstantExpr::getBitCast(Fn,SBP)); - } + if (DECL_PRESERVE_P (FnDecl)) + AttributeUsedGlobals.insert(Fn); // Handle noinline Functions if (lookup_attribute ("noinline", DECL_ATTRIBUTES (FnDecl))) { Modified: llvm-gcc-4.0/trunk/gcc/llvm-internal.h URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.0/trunk/gcc/llvm-internal.h?rev=41748&r1=41747&r2=41748&view=diff ============================================================================== --- llvm-gcc-4.0/trunk/gcc/llvm-internal.h (original) +++ llvm-gcc-4.0/trunk/gcc/llvm-internal.h Thu Sep 6 14:00:20 2007 @@ -34,6 +34,7 @@ #include #include "llvm/Intrinsics.h" #include "llvm/ADT/SmallVector.h" +#include "llvm/ADT/SmallPtrSet.h" #include "llvm/Support/DataTypes.h" #include "llvm/Support/LLVMBuilder.h" #include "llvm/Support/Streams.h" @@ -86,7 +87,7 @@ extern std::vector > StaticCtors, StaticDtors; /// AttributeUsedGlobals - The list of globals that are marked attribute(used). -extern std::vector AttributeUsedGlobals; +extern SmallPtrSet AttributeUsedGlobals; /// AttributeNoinlineFunctions - The list of functions that are /// marked attribute(noinline) From dalej at apple.com Thu Sep 6 14:04:28 2007 From: dalej at apple.com (Dale Johannesen) Date: Thu, 06 Sep 2007 19:04:28 -0000 Subject: [llvm-commits] [llvm-gcc-4.0] r41749 - /llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp Message-ID: <200709061904.l86J4TRW021565@zion.cs.uiuc.edu> Author: johannes Date: Thu Sep 6 14:04:28 2007 New Revision: 41749 URL: http://llvm.org/viewvc/llvm-project?rev=41749&view=rev Log: Use APFloat interface for ConstantFP. Modified: llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp Modified: llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp?rev=41749&r1=41748&r2=41749&view=diff ============================================================================== --- llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp (original) +++ llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp Thu Sep 6 14:04:28 2007 @@ -5603,7 +5603,8 @@ if (WORDS_BIG_ENDIAN != HostBigEndian) std::swap(UArr[0], UArr[1]); - return ConstantFP::get(Ty, V); + return ConstantFP::get(Ty, Ty==Type::FloatTy ? APFloat((float)V) + : APFloat(V)); } Constant *TreeConstantToLLVM::ConvertVECTOR_CST(tree exp) { From asl at math.spbu.ru Thu Sep 6 14:22:49 2007 From: asl at math.spbu.ru (Anton Korobeynikov) Date: Thu, 06 Sep 2007 23:22:49 +0400 Subject: [llvm-commits] [llvm-gcc-4.0] r41749 - /llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp In-Reply-To: <200709061904.l86J4TRW021565.SS1092SS@zion.cs.uiuc.edu> References: <200709061904.l86J4TRW021565.SS1092SS@zion.cs.uiuc.edu> Message-ID: <1189106569.11114.45.camel@asl.dorms.spbu.ru> Dale, > Modified: > llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp What's for 4.2? -- With best regards, Anton Korobeynikov. Faculty of Mathematics & Mechanics, Saint Petersburg State University. From dalej at apple.com Thu Sep 6 14:27:08 2007 From: dalej at apple.com (Dale Johannesen) Date: Thu, 6 Sep 2007 12:27:08 -0700 Subject: [llvm-commits] [llvm-gcc-4.0] r41749 - /llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp In-Reply-To: <1189106569.11114.45.camel@asl.dorms.spbu.ru> References: <200709061904.l86J4TRW021565.SS1092SS@zion.cs.uiuc.edu> <1189106569.11114.45.camel@asl.dorms.spbu.ru> Message-ID: On Sep 6, 2007, at 12:22 PM, Anton Korobeynikov wrote: > Dale, > >> Modified: >> llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp > What's for 4.2? It's coming, I didn't have a checkout. From dalej at apple.com Thu Sep 6 14:37:22 2007 From: dalej at apple.com (Dale Johannesen) Date: Thu, 06 Sep 2007 19:37:22 -0000 Subject: [llvm-commits] [llvm-gcc-4.2] r41750 - /llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp Message-ID: <200709061937.l86JbM1U022794@zion.cs.uiuc.edu> Author: johannes Date: Thu Sep 6 14:37:21 2007 New Revision: 41750 URL: http://llvm.org/viewvc/llvm-project?rev=41750&view=rev Log: Use APFloat interface to ConstantFP. Modified: llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp Modified: llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp?rev=41750&r1=41749&r2=41750&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp (original) +++ llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp Thu Sep 6 14:37:21 2007 @@ -5195,7 +5195,8 @@ if (FLOAT_WORDS_BIG_ENDIAN) std::swap(UArr[0], UArr[1]); - return ConstantFP::get(Ty, V); + return ConstantFP::get(Ty, Ty==Type::FloatTy ? APFloat((float)V) + : APFloat(V)); } Constant *TreeConstantToLLVM::ConvertVECTOR_CST(tree exp) { From greened at obbligato.org Thu Sep 6 14:46:46 2007 From: greened at obbligato.org (David Greene) Date: Thu, 06 Sep 2007 19:46:46 -0000 Subject: [llvm-commits] [llvm] r41751 - in /llvm/trunk: include/llvm/CodeGen/LiveInterval.h lib/CodeGen/LiveInterval.cpp Message-ID: <200709061946.l86JkkD6023104@zion.cs.uiuc.edu> Author: greened Date: Thu Sep 6 14:46:46 2007 New Revision: 41751 URL: http://llvm.org/viewvc/llvm-project?rev=41751&view=rev Log: Constify to catch bugs. Modified: llvm/trunk/include/llvm/CodeGen/LiveInterval.h llvm/trunk/lib/CodeGen/LiveInterval.cpp Modified: llvm/trunk/include/llvm/CodeGen/LiveInterval.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/LiveInterval.h?rev=41751&r1=41750&r2=41751&view=diff ============================================================================== --- llvm/trunk/include/llvm/CodeGen/LiveInterval.h (original) +++ llvm/trunk/include/llvm/CodeGen/LiveInterval.h Thu Sep 6 14:46:46 2007 @@ -310,8 +310,9 @@ /// join - Join two live intervals (this, and other) together. This applies /// mappings to the value numbers in the LHS/RHS intervals as specified. If /// the intervals are not joinable, this aborts. - void join(LiveInterval &Other, int *ValNoAssignments, - int *RHSValNoAssignments, SmallVector &NewVNInfo); + void join(LiveInterval &Other, const int *ValNoAssignments, + const int *RHSValNoAssignments, + SmallVector &NewVNInfo); /// removeRange - Remove the specified range from this interval. Note that /// the range must already be in this interval in its entirety. Modified: llvm/trunk/lib/CodeGen/LiveInterval.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/LiveInterval.cpp?rev=41751&r1=41750&r2=41751&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/LiveInterval.cpp (original) +++ llvm/trunk/lib/CodeGen/LiveInterval.cpp Thu Sep 6 14:46:46 2007 @@ -285,8 +285,8 @@ /// join - Join two live intervals (this, and other) together. This applies /// mappings to the value numbers in the LHS/RHS intervals as specified. If /// the intervals are not joinable, this aborts. -void LiveInterval::join(LiveInterval &Other, int *LHSValNoAssignments, - int *RHSValNoAssignments, +void LiveInterval::join(LiveInterval &Other, const int *LHSValNoAssignments, + const int *RHSValNoAssignments, SmallVector &NewVNInfo) { // Determine if any of our live range values are mapped. This is uncommon, so // we want to avoid the interval scan if not. From baldrick at free.fr Thu Sep 6 14:54:55 2007 From: baldrick at free.fr (Duncan Sands) Date: Thu, 6 Sep 2007 21:54:55 +0200 Subject: [llvm-commits] [llvm-gcc-4.2] r41750 - /llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp In-Reply-To: <200709061937.l86JbM1U022794@zion.cs.uiuc.edu> References: <200709061937.l86JbM1U022794@zion.cs.uiuc.edu> Message-ID: <200709062154.55870.baldrick@free.fr> Hi Dale, > + return ConstantFP::get(Ty, Ty==Type::FloatTy ? APFloat((float)V) > + : APFloat(V)); what does having the conversion to float do here? Thanks, Duncan. From dalej at apple.com Thu Sep 6 15:02:35 2007 From: dalej at apple.com (Dale Johannesen) Date: Thu, 6 Sep 2007 13:02:35 -0700 Subject: [llvm-commits] [llvm-gcc-4.2] r41750 - /llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp In-Reply-To: <200709062154.55870.baldrick@free.fr> References: <200709061937.l86JbM1U022794@zion.cs.uiuc.edu> <200709062154.55870.baldrick@free.fr> Message-ID: On Sep 6, 2007, at 12:54 PM, Duncan Sands wrote: > Hi Dale, > >> + return ConstantFP::get(Ty, Ty==Type::FloatTy ? APFloat((float)V) >> + : APFloat(V)); > > what does having the conversion to float do here? > > Thanks, > > Duncan. There is a type in the APFloat and ConstantFP::get likes it to match the type passed in. (It's undesirable to have to maintain them in parallel, of course, and I'm likely to get rid of this when I think of a good way.) From resistor at mac.com Thu Sep 6 23:06:51 2007 From: resistor at mac.com (Owen Anderson) Date: Fri, 07 Sep 2007 04:06:51 -0000 Subject: [llvm-commits] [llvm] r41758 - in /llvm/trunk: include/llvm/ADT/ include/llvm/Target/ lib/Analysis/ lib/CodeGen/ lib/CodeGen/SelectionDAG/ lib/System/Unix/ lib/Target/ARM/ lib/Target/Alpha/ lib/Target/Mips/ lib/Target/PowerPC/ lib/Target/Sparc/ lib/Target/X86/ lib/VMCore/ Message-ID: <200709070406.l8746pRv020240@zion.cs.uiuc.edu> Author: resistor Date: Thu Sep 6 23:06:50 2007 New Revision: 41758 URL: http://llvm.org/viewvc/llvm-project?rev=41758&view=rev Log: Add lengthof and endof templates that hide a lot of sizeof computations. Patch by Sterling Stein! Modified: llvm/trunk/include/llvm/ADT/STLExtras.h llvm/trunk/include/llvm/Target/TargetLowering.h llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp llvm/trunk/lib/CodeGen/IntrinsicLowering.cpp llvm/trunk/lib/CodeGen/SelectionDAG/TargetLowering.cpp llvm/trunk/lib/System/Unix/Signals.inc llvm/trunk/lib/Target/ARM/ARMInstrInfo.cpp llvm/trunk/lib/Target/Alpha/AlphaInstrInfo.cpp llvm/trunk/lib/Target/Mips/MipsInstrInfo.cpp llvm/trunk/lib/Target/PowerPC/PPCISelLowering.cpp llvm/trunk/lib/Target/PowerPC/PPCInstrInfo.cpp llvm/trunk/lib/Target/Sparc/SparcInstrInfo.cpp llvm/trunk/lib/Target/X86/X86FloatingPoint.cpp llvm/trunk/lib/Target/X86/X86InstrInfo.cpp llvm/trunk/lib/Target/X86/X86RegisterInfo.cpp llvm/trunk/lib/VMCore/Mangler.cpp Modified: llvm/trunk/include/llvm/ADT/STLExtras.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/STLExtras.h?rev=41758&r1=41757&r2=41758&view=diff ============================================================================== --- llvm/trunk/include/llvm/ADT/STLExtras.h (original) +++ llvm/trunk/include/llvm/ADT/STLExtras.h Thu Sep 6 23:06:50 2007 @@ -19,6 +19,7 @@ #include #include // for std::pair +#include // for std::size_t #include "llvm/ADT/iterator" namespace llvm { @@ -199,6 +200,24 @@ return tier(f, s); } +//===----------------------------------------------------------------------===// +// Extra additions to arrays +//===----------------------------------------------------------------------===// + +/// Find where an array ends (for ending iterators) +/// This returns a pointer to the byte immediately +/// after the end of an array. +template +inline T *array_endof(T (&x)[N]) { + return x+N; +} + +/// Find the length of an array. +template +inline size_t array_lengthof(T (&x)[N]) { + return N; +} + } // End llvm namespace #endif Modified: llvm/trunk/include/llvm/Target/TargetLowering.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Target/TargetLowering.h?rev=41758&r1=41757&r2=41758&view=diff ============================================================================== --- llvm/trunk/include/llvm/Target/TargetLowering.h (original) +++ llvm/trunk/include/llvm/Target/TargetLowering.h Thu Sep 6 23:06:50 2007 @@ -25,6 +25,7 @@ #include "llvm/CodeGen/SelectionDAGNodes.h" #include "llvm/CodeGen/RuntimeLibcalls.h" #include "llvm/ADT/APFloat.h" +#include "llvm/ADT/STLExtras.h" #include #include @@ -154,8 +155,7 @@ } void setTypeAction(MVT::ValueType VT, LegalizeAction Action) { assert(!MVT::isExtendedVT(VT)); - assert(unsigned(VT >> 4) < - sizeof(ValueTypeActions)/sizeof(ValueTypeActions[0])); + assert(unsigned(VT >> 4) < array_lengthof(ValueTypeActions)); ValueTypeActions[VT>>4] |= Action << ((VT*2) & 31); } }; @@ -711,7 +711,7 @@ /// with the specified type and indicate what to do about it. void setOperationAction(unsigned Op, MVT::ValueType VT, LegalizeAction Action) { - assert(VT < 32 && Op < sizeof(OpActions)/sizeof(OpActions[0]) && + assert(VT < 32 && Op < array_lengthof(OpActions) && "Table isn't big enough!"); OpActions[Op] &= ~(uint64_t(3UL) << VT*2); OpActions[Op] |= (uint64_t)Action << VT*2; @@ -721,7 +721,7 @@ /// work with the with specified type and indicate what to do about it. void setLoadXAction(unsigned ExtType, MVT::ValueType VT, LegalizeAction Action) { - assert(VT < 32 && ExtType < sizeof(LoadXActions)/sizeof(LoadXActions[0]) && + assert(VT < 32 && ExtType < array_lengthof(LoadXActions) && "Table isn't big enough!"); LoadXActions[ExtType] &= ~(uint64_t(3UL) << VT*2); LoadXActions[ExtType] |= (uint64_t)Action << VT*2; @@ -742,7 +742,7 @@ void setIndexedLoadAction(unsigned IdxMode, MVT::ValueType VT, LegalizeAction Action) { assert(VT < 32 && IdxMode < - sizeof(IndexedModeActions[0]) / sizeof(IndexedModeActions[0][0]) && + array_lengthof(IndexedModeActions[0]) && "Table isn't big enough!"); IndexedModeActions[0][IdxMode] &= ~(uint64_t(3UL) << VT*2); IndexedModeActions[0][IdxMode] |= (uint64_t)Action << VT*2; @@ -755,7 +755,7 @@ void setIndexedStoreAction(unsigned IdxMode, MVT::ValueType VT, LegalizeAction Action) { assert(VT < 32 && IdxMode < - sizeof(IndexedModeActions[1]) / sizeof(IndexedModeActions[1][0]) && + array_lengthof(IndexedModeActions[1]) && "Table isn't big enough!"); IndexedModeActions[1][IdxMode] &= ~(uint64_t(3UL) << VT*2); IndexedModeActions[1][IdxMode] |= (uint64_t)Action << VT*2; Modified: llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp?rev=41758&r1=41757&r2=41758&view=diff ============================================================================== --- llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp (original) +++ llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp Thu Sep 6 23:06:50 2007 @@ -27,6 +27,7 @@ #include "llvm/ADT/SmallVector.h" #include "llvm/ADT/StringMap.h" #include "llvm/ADT/BitVector.h" +#include "llvm/ADT/STLExtras.h" #include "llvm/Support/Compiler.h" #include "llvm/Support/GetElementPtrTypeIterator.h" #include "llvm/Support/ManagedStatic.h" @@ -890,13 +891,11 @@ if (!Initialized) { NoMemoryTable->insert(NoMemoryTable->end(), DoesntAccessMemoryFns, - DoesntAccessMemoryFns+ - sizeof(DoesntAccessMemoryFns)/sizeof(DoesntAccessMemoryFns[0])); + array_endof(DoesntAccessMemoryFns)); OnlyReadsMemoryTable->insert(OnlyReadsMemoryTable->end(), - OnlyReadsMemoryFns, - OnlyReadsMemoryFns+ - sizeof(OnlyReadsMemoryFns)/sizeof(OnlyReadsMemoryFns[0])); + OnlyReadsMemoryFns, + array_endof(OnlyReadsMemoryFns)); // Sort the table the first time through. std::sort(NoMemoryTable->begin(), NoMemoryTable->end(), StringCompare()); Modified: llvm/trunk/lib/CodeGen/IntrinsicLowering.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/IntrinsicLowering.cpp?rev=41758&r1=41757&r2=41758&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/IntrinsicLowering.cpp (original) +++ llvm/trunk/lib/CodeGen/IntrinsicLowering.cpp Thu Sep 6 23:06:50 2007 @@ -20,6 +20,7 @@ #include "llvm/Support/Streams.h" #include "llvm/Target/TargetData.h" #include "llvm/ADT/SmallVector.h" +#include "llvm/ADT/STLExtras.h" using namespace llvm; template @@ -421,7 +422,7 @@ CI->getOperand(2), CI->getOperand(3) }; - return new CallInst(F, Args, Args+sizeof(Args)/sizeof(Args[0]), CI->getName(), CI); + return new CallInst(F, Args, array_endof(Args), CI->getName(), CI); } /// Convert the llvm.part.set.iX.iY.iZ intrinsic. This intrinsic takes @@ -587,7 +588,7 @@ CI->getOperand(3), CI->getOperand(4) }; - return new CallInst(F, Args, Args+sizeof(Args)/sizeof(Args[0]), CI->getName(), CI); + return new CallInst(F, Args, array_endof(Args), CI->getName(), CI); } Modified: llvm/trunk/lib/CodeGen/SelectionDAG/TargetLowering.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/TargetLowering.cpp?rev=41758&r1=41757&r2=41758&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/SelectionDAG/TargetLowering.cpp (original) +++ llvm/trunk/lib/CodeGen/SelectionDAG/TargetLowering.cpp Thu Sep 6 23:06:50 2007 @@ -18,6 +18,7 @@ #include "llvm/DerivedTypes.h" #include "llvm/CodeGen/SelectionDAG.h" #include "llvm/ADT/StringExtras.h" +#include "llvm/ADT/STLExtras.h" #include "llvm/Support/MathExtras.h" using namespace llvm; @@ -145,8 +146,7 @@ ShiftAmountTy = SetCCResultTy = PointerTy = getValueType(TD->getIntPtrType()); ShiftAmtHandling = Undefined; memset(RegClassForVT, 0,MVT::LAST_VALUETYPE*sizeof(TargetRegisterClass*)); - memset(TargetDAGCombineArray, 0, - sizeof(TargetDAGCombineArray)/sizeof(TargetDAGCombineArray[0])); + memset(TargetDAGCombineArray, 0, array_lengthof(TargetDAGCombineArray)); maxStoresPerMemset = maxStoresPerMemcpy = maxStoresPerMemmove = 8; allowUnalignedMemoryAccesses = false; UseUnderscoreSetJmp = false; Modified: llvm/trunk/lib/System/Unix/Signals.inc URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/System/Unix/Signals.inc?rev=41758&r1=41757&r2=41758&view=diff ============================================================================== --- llvm/trunk/lib/System/Unix/Signals.inc (original) +++ llvm/trunk/lib/System/Unix/Signals.inc Thu Sep 6 23:06:50 2007 @@ -13,6 +13,7 @@ //===----------------------------------------------------------------------===// #include "Unix.h" +#include "llvm/ADT/STLExtras.h" #include #include #if HAVE_EXECINFO_H @@ -40,7 +41,7 @@ const int IntSigs[] = { SIGHUP, SIGINT, SIGQUIT, SIGPIPE, SIGTERM, SIGUSR1, SIGUSR2 }; -const int *IntSigsEnd = IntSigs + sizeof(IntSigs)/sizeof(IntSigs[0]); +const int *IntSigsEnd = array_endof(IntSigs); // KillSigs - Signals that are synchronous with the program that will cause it // to die. @@ -50,7 +51,7 @@ , SIGEMT #endif }; -const int *KillSigsEnd = KillSigs + sizeof(KillSigs)/sizeof(KillSigs[0]); +const int *KillSigsEnd = array_endof(KillSigs); #ifdef HAVE_BACKTRACE void* StackTrace[256]; @@ -68,7 +69,7 @@ void PrintStackTrace() { #ifdef HAVE_BACKTRACE // Use backtrace() to output a backtrace on Linux systems with glibc. - int depth = backtrace(StackTrace, sizeof(StackTrace)/sizeof(StackTrace[0])); + int depth = backtrace(StackTrace, array_lengthof(StackTrace)); // Create a one-way unix pipe. The backtracing process writes to PipeFDs[1], // the c++filt process reads from PipeFDs[0]. Modified: llvm/trunk/lib/Target/ARM/ARMInstrInfo.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMInstrInfo.cpp?rev=41758&r1=41757&r2=41758&view=diff ============================================================================== --- llvm/trunk/lib/Target/ARM/ARMInstrInfo.cpp (original) +++ llvm/trunk/lib/Target/ARM/ARMInstrInfo.cpp Thu Sep 6 23:06:50 2007 @@ -17,6 +17,7 @@ #include "ARMAddressingModes.h" #include "ARMGenInstrInfo.inc" #include "ARMMachineFunctionInfo.h" +#include "llvm/ADT/STLExtras.h" #include "llvm/CodeGen/LiveVariables.h" #include "llvm/CodeGen/MachineInstrBuilder.h" #include "llvm/CodeGen/MachineJumpTableInfo.h" @@ -28,7 +29,7 @@ cl::desc("Enable ARM 2-addr to 3-addr conv")); ARMInstrInfo::ARMInstrInfo(const ARMSubtarget &STI) - : TargetInstrInfo(ARMInsts, sizeof(ARMInsts)/sizeof(ARMInsts[0])), + : TargetInstrInfo(ARMInsts, array_lengthof(ARMInsts)), RI(*this, STI) { } Modified: llvm/trunk/lib/Target/Alpha/AlphaInstrInfo.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Alpha/AlphaInstrInfo.cpp?rev=41758&r1=41757&r2=41758&view=diff ============================================================================== --- llvm/trunk/lib/Target/Alpha/AlphaInstrInfo.cpp (original) +++ llvm/trunk/lib/Target/Alpha/AlphaInstrInfo.cpp Thu Sep 6 23:06:50 2007 @@ -14,11 +14,12 @@ #include "Alpha.h" #include "AlphaInstrInfo.h" #include "AlphaGenInstrInfo.inc" +#include "llvm/ADT/STLExtras.h" #include "llvm/CodeGen/MachineInstrBuilder.h" using namespace llvm; AlphaInstrInfo::AlphaInstrInfo() - : TargetInstrInfo(AlphaInsts, sizeof(AlphaInsts)/sizeof(AlphaInsts[0])), + : TargetInstrInfo(AlphaInsts, array_lengthof(AlphaInsts)), RI(*this) { } Modified: llvm/trunk/lib/Target/Mips/MipsInstrInfo.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Mips/MipsInstrInfo.cpp?rev=41758&r1=41757&r2=41758&view=diff ============================================================================== --- llvm/trunk/lib/Target/Mips/MipsInstrInfo.cpp (original) +++ llvm/trunk/lib/Target/Mips/MipsInstrInfo.cpp Thu Sep 6 23:06:50 2007 @@ -13,6 +13,7 @@ #include "Mips.h" #include "MipsInstrInfo.h" +#include "llvm/ADT/STLExtras.h" #include "llvm/CodeGen/MachineInstrBuilder.h" #include "MipsGenInstrInfo.inc" @@ -20,7 +21,7 @@ // TODO: Add the subtarget support on this constructor MipsInstrInfo::MipsInstrInfo(MipsTargetMachine &tm) - : TargetInstrInfo(MipsInsts, sizeof(MipsInsts)/sizeof(MipsInsts[0])), + : TargetInstrInfo(MipsInsts, array_lengthof(MipsInsts)), TM(tm), RI(*this) {} static bool isZeroImm(const MachineOperand &op) { Modified: llvm/trunk/lib/Target/PowerPC/PPCISelLowering.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/PPCISelLowering.cpp?rev=41758&r1=41757&r2=41758&view=diff ============================================================================== --- llvm/trunk/lib/Target/PowerPC/PPCISelLowering.cpp (original) +++ llvm/trunk/lib/Target/PowerPC/PPCISelLowering.cpp Thu Sep 6 23:06:50 2007 @@ -16,6 +16,7 @@ #include "PPCPredicates.h" #include "PPCTargetMachine.h" #include "PPCPerfectShuffle.h" +#include "llvm/ADT/STLExtras.h" #include "llvm/ADT/VectorExtras.h" #include "llvm/Analysis/ScalarEvolutionExpressions.h" #include "llvm/CodeGen/CallingConvLower.h" @@ -1264,9 +1265,9 @@ PPC::V9, PPC::V10, PPC::V11, PPC::V12, PPC::V13 }; - const unsigned Num_GPR_Regs = sizeof(GPR_32)/sizeof(GPR_32[0]); + const unsigned Num_GPR_Regs = array_lengthof(GPR_32); const unsigned Num_FPR_Regs = isMachoABI ? 13 : 8; - const unsigned Num_VR_Regs = sizeof( VR)/sizeof( VR[0]); + const unsigned Num_VR_Regs = array_lengthof( VR); unsigned GPR_idx = 0, FPR_idx = 0, VR_idx = 0; @@ -1583,9 +1584,9 @@ PPC::V2, PPC::V3, PPC::V4, PPC::V5, PPC::V6, PPC::V7, PPC::V8, PPC::V9, PPC::V10, PPC::V11, PPC::V12, PPC::V13 }; - const unsigned NumGPRs = sizeof(GPR_32)/sizeof(GPR_32[0]); + const unsigned NumGPRs = array_lengthof(GPR_32); const unsigned NumFPRs = isMachoABI ? 13 : 8; - const unsigned NumVRs = sizeof( VR)/sizeof( VR[0]); + const unsigned NumVRs = array_lengthof( VR); const unsigned *GPR = isPPC64 ? GPR_64 : GPR_32; @@ -2399,7 +2400,7 @@ -8, 8, -9, 9, -10, 10, -11, 11, -12, 12, -13, 13, 14, -14, 15, -15, -16 }; - for (unsigned idx = 0; idx < sizeof(SplatCsts)/sizeof(SplatCsts[0]); ++idx){ + for (unsigned idx = 0; idx < array_lengthof(SplatCsts); ++idx) { // Indirect through the SplatCsts array so that we favor 'vsplti -1' for // cases which are ambiguous (e.g. formation of 0x8000_0000). 'vsplti -1' int i = SplatCsts[idx]; Modified: llvm/trunk/lib/Target/PowerPC/PPCInstrInfo.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/PPCInstrInfo.cpp?rev=41758&r1=41757&r2=41758&view=diff ============================================================================== --- llvm/trunk/lib/Target/PowerPC/PPCInstrInfo.cpp (original) +++ llvm/trunk/lib/Target/PowerPC/PPCInstrInfo.cpp Thu Sep 6 23:06:50 2007 @@ -15,11 +15,12 @@ #include "PPCPredicates.h" #include "PPCGenInstrInfo.inc" #include "PPCTargetMachine.h" +#include "llvm/ADT/STLExtras.h" #include "llvm/CodeGen/MachineInstrBuilder.h" using namespace llvm; PPCInstrInfo::PPCInstrInfo(PPCTargetMachine &tm) - : TargetInstrInfo(PPCInsts, sizeof(PPCInsts)/sizeof(PPCInsts[0])), TM(tm), + : TargetInstrInfo(PPCInsts, array_lengthof(PPCInsts)), TM(tm), RI(*TM.getSubtargetImpl(), *this) {} /// getPointerRegClass - Return the register class to use to hold pointers. Modified: llvm/trunk/lib/Target/Sparc/SparcInstrInfo.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Sparc/SparcInstrInfo.cpp?rev=41758&r1=41757&r2=41758&view=diff ============================================================================== --- llvm/trunk/lib/Target/Sparc/SparcInstrInfo.cpp (original) +++ llvm/trunk/lib/Target/Sparc/SparcInstrInfo.cpp Thu Sep 6 23:06:50 2007 @@ -13,12 +13,13 @@ #include "SparcInstrInfo.h" #include "Sparc.h" +#include "llvm/ADT/STLExtras.h" #include "llvm/CodeGen/MachineInstrBuilder.h" #include "SparcGenInstrInfo.inc" using namespace llvm; SparcInstrInfo::SparcInstrInfo(SparcSubtarget &ST) - : TargetInstrInfo(SparcInsts, sizeof(SparcInsts)/sizeof(SparcInsts[0])), + : TargetInstrInfo(SparcInsts, array_lengthof(SparcInsts)), RI(ST, *this) { } Modified: llvm/trunk/lib/Target/X86/X86FloatingPoint.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86FloatingPoint.cpp?rev=41758&r1=41757&r2=41758&view=diff ============================================================================== --- llvm/trunk/lib/Target/X86/X86FloatingPoint.cpp (original) +++ llvm/trunk/lib/Target/X86/X86FloatingPoint.cpp Thu Sep 6 23:06:50 2007 @@ -299,16 +299,13 @@ return -1; } -#define ARRAY_SIZE(TABLE) \ - (sizeof(TABLE)/sizeof(TABLE[0])) - #ifdef NDEBUG #define ASSERT_SORTED(TABLE) #else #define ASSERT_SORTED(TABLE) \ { static bool TABLE##Checked = false; \ if (!TABLE##Checked) { \ - assert(TableIsSorted(TABLE, ARRAY_SIZE(TABLE)) && \ + assert(TableIsSorted(TABLE, array_lengthof(TABLE)) && \ "All lookup tables must be sorted for efficient access!"); \ TABLE##Checked = true; \ } \ @@ -487,7 +484,7 @@ static unsigned getConcreteOpcode(unsigned Opcode) { ASSERT_SORTED(OpcodeTable); - int Opc = Lookup(OpcodeTable, ARRAY_SIZE(OpcodeTable), Opcode); + int Opc = Lookup(OpcodeTable, array_lengthof(OpcodeTable), Opcode); assert(Opc != -1 && "FP Stack instruction not in OpcodeTable!"); return Opc; } @@ -535,7 +532,7 @@ RegMap[Stack[--StackTop]] = ~0; // Update state // Check to see if there is a popping version of this instruction... - int Opcode = Lookup(PopTable, ARRAY_SIZE(PopTable), I->getOpcode()); + int Opcode = Lookup(PopTable, array_lengthof(PopTable), I->getOpcode()); if (Opcode != -1) { I->setInstrDescriptor(TII->get(Opcode)); if (Opcode == X86::UCOM_FPPr) @@ -830,7 +827,8 @@ InstTable = ReverseSTiTable; } - int Opcode = Lookup(InstTable, ARRAY_SIZE(ForwardST0Table), MI->getOpcode()); + int Opcode = Lookup(InstTable, array_lengthof(ForwardST0Table), + MI->getOpcode()); assert(Opcode != -1 && "Unknown TwoArgFP pseudo instruction!"); // NotTOS - The register which is not on the top of stack... Modified: llvm/trunk/lib/Target/X86/X86InstrInfo.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86InstrInfo.cpp?rev=41758&r1=41757&r2=41758&view=diff ============================================================================== --- llvm/trunk/lib/Target/X86/X86InstrInfo.cpp (original) +++ llvm/trunk/lib/Target/X86/X86InstrInfo.cpp Thu Sep 6 23:06:50 2007 @@ -17,13 +17,14 @@ #include "X86InstrBuilder.h" #include "X86Subtarget.h" #include "X86TargetMachine.h" +#include "llvm/ADT/STLExtras.h" #include "llvm/CodeGen/MachineInstrBuilder.h" #include "llvm/CodeGen/LiveVariables.h" #include "llvm/CodeGen/SSARegMap.h" using namespace llvm; X86InstrInfo::X86InstrInfo(X86TargetMachine &tm) - : TargetInstrInfo(X86Insts, sizeof(X86Insts)/sizeof(X86Insts[0])), + : TargetInstrInfo(X86Insts, array_lengthof(X86Insts)), TM(tm), RI(tm, *this) { } Modified: llvm/trunk/lib/Target/X86/X86RegisterInfo.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86RegisterInfo.cpp?rev=41758&r1=41757&r2=41758&view=diff ============================================================================== --- llvm/trunk/lib/Target/X86/X86RegisterInfo.cpp (original) +++ llvm/trunk/lib/Target/X86/X86RegisterInfo.cpp Thu Sep 6 23:06:50 2007 @@ -392,16 +392,13 @@ return NULL; } -#define ARRAY_SIZE(TABLE) \ - (sizeof(TABLE)/sizeof(TABLE[0])) - #ifdef NDEBUG #define ASSERT_SORTED(TABLE) #else #define ASSERT_SORTED(TABLE) \ { static bool TABLE##Checked = false; \ if (!TABLE##Checked) { \ - assert(TableIsSorted(TABLE, ARRAY_SIZE(TABLE)) && \ + assert(TableIsSorted(TABLE, array_lengthof(TABLE)) && \ "All lookup tables must be sorted for efficient access!"); \ TABLE##Checked = true; \ } \ @@ -590,7 +587,7 @@ }; ASSERT_SORTED(OpcodeTable); OpcodeTablePtr = OpcodeTable; - OpcodeTableSize = ARRAY_SIZE(OpcodeTable); + OpcodeTableSize = array_lengthof(OpcodeTable); isTwoAddrFold = true; } else if (i == 0) { // If operand 0 if (MI->getOpcode() == X86::MOV16r0) @@ -675,7 +672,7 @@ ASSERT_SORTED(OpcodeTable); OpcodeTablePtr = OpcodeTable; - OpcodeTableSize = ARRAY_SIZE(OpcodeTable); + OpcodeTableSize = array_lengthof(OpcodeTable); } else if (i == 1) { static const TableEntry OpcodeTable[] = { { X86::CMP16rr, X86::CMP16rm }, @@ -784,7 +781,7 @@ ASSERT_SORTED(OpcodeTable); OpcodeTablePtr = OpcodeTable; - OpcodeTableSize = ARRAY_SIZE(OpcodeTable); + OpcodeTableSize = array_lengthof(OpcodeTable); } else if (i == 2) { static const TableEntry OpcodeTable[] = { { X86::ADC32rr, X86::ADC32rm }, @@ -979,7 +976,7 @@ ASSERT_SORTED(OpcodeTable); OpcodeTablePtr = OpcodeTable; - OpcodeTableSize = ARRAY_SIZE(OpcodeTable); + OpcodeTableSize = array_lengthof(OpcodeTable); } // If table selected... Modified: llvm/trunk/lib/VMCore/Mangler.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/Mangler.cpp?rev=41758&r1=41757&r2=41758&view=diff ============================================================================== --- llvm/trunk/lib/VMCore/Mangler.cpp (original) +++ llvm/trunk/lib/VMCore/Mangler.cpp Thu Sep 6 23:06:50 2007 @@ -14,6 +14,7 @@ #include "llvm/Support/Mangler.h" #include "llvm/DerivedTypes.h" #include "llvm/Module.h" +#include "llvm/ADT/STLExtras.h" #include "llvm/ADT/StringExtras.h" using namespace llvm; @@ -185,9 +186,7 @@ Mangler::Mangler(Module &M, const char *prefix) : Prefix(prefix), UseQuotes(false), PreserveAsmNames(false), Count(0), TypeCounter(0) { - std::fill(AcceptableChars, - AcceptableChars+sizeof(AcceptableChars)/sizeof(AcceptableChars[0]), - 0); + std::fill(AcceptableChars, array_endof(AcceptableChars), 0); // Letters and numbers are acceptable. for (unsigned char X = 'a'; X <= 'z'; ++X) From sabre at nondot.org Fri Sep 7 00:33:03 2007 From: sabre at nondot.org (Chris Lattner) Date: Fri, 07 Sep 2007 05:33:03 -0000 Subject: [llvm-commits] [llvm] r41759 - in /llvm/trunk: lib/Transforms/Scalar/InstructionCombining.cpp test/Transforms/InstCombine/volatile_store.ll Message-ID: <200709070533.l875X3Ls023623@zion.cs.uiuc.edu> Author: lattner Date: Fri Sep 7 00:33:03 2007 New Revision: 41759 URL: http://llvm.org/viewvc/llvm-project?rev=41759&view=rev Log: Don't zap back to back volatile load/stores Added: llvm/trunk/test/Transforms/InstCombine/volatile_store.ll Modified: llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp Modified: llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp?rev=41759&r1=41758&r2=41759&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp (original) +++ llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp Fri Sep 7 00:33:03 2007 @@ -9066,7 +9066,7 @@ // the pointer we're loading and is producing the pointer we're storing, // then *this* store is dead (X = load P; store X -> P). if (LoadInst *LI = dyn_cast(BBI)) { - if (LI == Val && LI->getOperand(0) == Ptr) { + if (LI == Val && LI->getOperand(0) == Ptr && !SI.isVolatile()) { EraseInstFromFunction(SI); ++NumCombined; return 0; Added: llvm/trunk/test/Transforms/InstCombine/volatile_store.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstCombine/volatile_store.ll?rev=41759&view=auto ============================================================================== --- llvm/trunk/test/Transforms/InstCombine/volatile_store.ll (added) +++ llvm/trunk/test/Transforms/InstCombine/volatile_store.ll Fri Sep 7 00:33:03 2007 @@ -0,0 +1,14 @@ +; RUN: llvm-as < %s | opt -instcombine | llvm-dis | grep {volatile store} +; RUN: llvm-as < %s | opt -instcombine | llvm-dis | grep {volatile load} + + at x = weak global i32 0 ; [#uses=2] + +define void @self_assign_1() { +entry: + %tmp = volatile load i32* @x ; [#uses=1] + volatile store i32 %tmp, i32* @x + br label %return + +return: ; preds = %entry + ret void +} From isanbard at gmail.com Fri Sep 7 03:10:24 2007 From: isanbard at gmail.com (Bill Wendling) Date: Fri, 07 Sep 2007 08:10:24 -0000 Subject: [llvm-commits] [llvm-gcc-4.0] r41760 - /llvm-gcc-4.0/trunk/gcc/c-typeck.c Message-ID: <200709070810.l878AO2D004895@zion.cs.uiuc.edu> Author: void Date: Fri Sep 7 03:10:23 2007 New Revision: 41760 URL: http://llvm.org/viewvc/llvm-project?rev=41760&view=rev Log: A variable that's constant in a constructor shouldn't make the constructor itself non-constant. Modified: llvm-gcc-4.0/trunk/gcc/c-typeck.c Modified: llvm-gcc-4.0/trunk/gcc/c-typeck.c URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.0/trunk/gcc/c-typeck.c?rev=41760&r1=41759&r2=41760&view=diff ============================================================================== --- llvm-gcc-4.0/trunk/gcc/c-typeck.c (original) +++ llvm-gcc-4.0/trunk/gcc/c-typeck.c Fri Sep 7 03:10:23 2007 @@ -6157,8 +6157,14 @@ if (value == error_mark_node) constructor_erroneous = 1; - else if (!TREE_CONSTANT (value)) - constructor_constant = 0; + else if (!(TREE_CONSTANT (value) + || (DECL_P (value) + && DECL_INITIAL (value) + && DECL_INITIAL (value) != error_mark_node + && ! TREE_THIS_VOLATILE (value) + && ! TYPE_P (DECL_INITIAL (value)) + && TREE_CONSTANT (DECL_INITIAL (value))))) + constructor_constant = 0; else if (!initializer_constant_valid_p (value, TREE_TYPE (value)) || ((TREE_CODE (constructor_type) == RECORD_TYPE || TREE_CODE (constructor_type) == UNION_TYPE) From isanbard at gmail.com Fri Sep 7 03:19:52 2007 From: isanbard at gmail.com (Bill Wendling) Date: Fri, 07 Sep 2007 08:19:52 -0000 Subject: [llvm-commits] [llvm-gcc-4.2] r41761 - /llvm-gcc-4.2/trunk/gcc/c-typeck.c Message-ID: <200709070819.l878JqEx005399@zion.cs.uiuc.edu> Author: void Date: Fri Sep 7 03:19:51 2007 New Revision: 41761 URL: http://llvm.org/viewvc/llvm-project?rev=41761&view=rev Log: A variable that's constant in a constructor shouldn't make the constructor itself non-constant. Modified: llvm-gcc-4.2/trunk/gcc/c-typeck.c Modified: llvm-gcc-4.2/trunk/gcc/c-typeck.c URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/c-typeck.c?rev=41761&r1=41760&r2=41761&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/c-typeck.c (original) +++ llvm-gcc-4.2/trunk/gcc/c-typeck.c Fri Sep 7 03:19:51 2007 @@ -6453,7 +6453,13 @@ if (value == error_mark_node) constructor_erroneous = 1; - else if (!TREE_CONSTANT (value)) + else if (!(TREE_CONSTANT (value) + || (DECL_P (value) + && DECL_INITIAL (value) + && DECL_INITIAL (value) != error_mark_node + && ! TREE_THIS_VOLATILE (value) + && ! TYPE_P (DECL_INITIAL (value)) + && TREE_CONSTANT (DECL_INITIAL (value))))) constructor_constant = 0; else if (!initializer_constant_valid_p (value, TREE_TYPE (value)) || ((TREE_CODE (constructor_type) == RECORD_TYPE From isanbard at gmail.com Fri Sep 7 03:30:09 2007 From: isanbard at gmail.com (Bill Wendling) Date: Fri, 07 Sep 2007 08:30:09 -0000 Subject: [llvm-commits] [llvm] r41762 - /llvm/trunk/test/CFrontend/2007-09-05-ConstCtor.c Message-ID: <200709070830.l878U9At006000@zion.cs.uiuc.edu> Author: void Date: Fri Sep 7 03:30:09 2007 New Revision: 41762 URL: http://llvm.org/viewvc/llvm-project?rev=41762&view=rev Log: Test for PR1641. Added: llvm/trunk/test/CFrontend/2007-09-05-ConstCtor.c Added: llvm/trunk/test/CFrontend/2007-09-05-ConstCtor.c URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CFrontend/2007-09-05-ConstCtor.c?rev=41762&view=auto ============================================================================== --- llvm/trunk/test/CFrontend/2007-09-05-ConstCtor.c (added) +++ llvm/trunk/test/CFrontend/2007-09-05-ConstCtor.c Fri Sep 7 03:30:09 2007 @@ -0,0 +1,14 @@ +// RUN: %llvmgcc -xc -Os -c %s -o /dev/null +// PR1641 + +struct A { + unsigned long l; +}; + +void bar(struct A *a); + +void bork() { + const unsigned long vcgt = 'vcgt'; + struct A a = { vcgt }; + bar(&a); +} From baldrick at free.fr Fri Sep 7 03:36:52 2007 From: baldrick at free.fr (Duncan Sands) Date: Fri, 7 Sep 2007 10:36:52 +0200 Subject: [llvm-commits] [llvm-gcc-4.2] r41761 - /llvm-gcc-4.2/trunk/gcc/c-typeck.c In-Reply-To: <200709070819.l878JqEx005399@zion.cs.uiuc.edu> References: <200709070819.l878JqEx005399@zion.cs.uiuc.edu> Message-ID: <200709071036.55721.baldrick@free.fr> Hi Bill, > A variable that's constant in a constructor shouldn't make the > constructor itself non-constant. does the testcase fail with 4.2? Thanks, Duncan. From asl at math.spbu.ru Fri Sep 7 06:39:37 2007 From: asl at math.spbu.ru (Anton Korobeynikov) Date: Fri, 07 Sep 2007 11:39:37 -0000 Subject: [llvm-commits] [llvm] r41763 - in /llvm/trunk: docs/ExceptionHandling.html include/llvm/Intrinsics.td lib/CodeGen/IntrinsicLowering.cpp lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp test/CodeGen/Generic/2007-05-03-EHTypeInfo.ll test/CodeGen/Generic/2007-05-05-Personality.ll test/CodeGen/Generic/2007-06-06-CriticalEdgeLandingPad.ll test/CodeGen/X86/2007-09-03-X86-64-EhSelector.ll Message-ID: <200709071139.l87BddGS014348@zion.cs.uiuc.edu> Author: asl Date: Fri Sep 7 06:39:35 2007 New Revision: 41763 URL: http://llvm.org/viewvc/llvm-project?rev=41763&view=rev Log: Split eh.select / eh.typeid.for intrinsics into i32/i64 versions. This is needed, because they just "mark" register liveins and we let frontend solve type issue, not lowering code :) Modified: llvm/trunk/docs/ExceptionHandling.html llvm/trunk/include/llvm/Intrinsics.td llvm/trunk/lib/CodeGen/IntrinsicLowering.cpp llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp llvm/trunk/test/CodeGen/Generic/2007-05-03-EHTypeInfo.ll llvm/trunk/test/CodeGen/Generic/2007-05-05-Personality.ll llvm/trunk/test/CodeGen/Generic/2007-06-06-CriticalEdgeLandingPad.ll llvm/trunk/test/CodeGen/X86/2007-09-03-X86-64-EhSelector.ll Modified: llvm/trunk/docs/ExceptionHandling.html URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/docs/ExceptionHandling.html?rev=41763&r1=41762&r2=41763&view=diff ============================================================================== --- llvm/trunk/docs/ExceptionHandling.html (original) +++ llvm/trunk/docs/ExceptionHandling.html Fri Sep 7 06:39:35 2007 @@ -355,7 +355,8 @@
-  i32 %llvm.eh.selector(i8*, i8*, i8*, ...)
+  i32 %llvm.eh.selector.i32(i8*, i8*, i8*, ...)
+  i64 %llvm.eh.selector.i64(i8*, i8*, i8*, ...)
 

This intrinsic indicates that the exception selector is available at this @@ -388,7 +389,8 @@

-  i32 %llvm.eh.typeid.for(i8*)
+  i32 %llvm.eh.typeid.for.i32(i8*)
+  i64 %llvm.eh.typeid.for.i64(i8*)
 

This intrinsic returns the type info index in the exception table of the Modified: llvm/trunk/include/llvm/Intrinsics.td URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Intrinsics.td?rev=41763&r1=41762&r2=41763&view=diff ============================================================================== --- llvm/trunk/include/llvm/Intrinsics.td (original) +++ llvm/trunk/include/llvm/Intrinsics.td Fri Sep 7 06:39:35 2007 @@ -218,10 +218,14 @@ //===------------------ Exception Handling Intrinsics----------------------===// // -def int_eh_exception : Intrinsic<[llvm_ptr_ty]>; -def int_eh_selector : Intrinsic<[llvm_i32_ty, llvm_ptr_ty, llvm_ptr_ty, - llvm_vararg_ty]>; -def int_eh_typeid_for : Intrinsic<[llvm_i32_ty, llvm_ptr_ty]>; +def int_eh_exception : Intrinsic<[llvm_ptr_ty]>; +def int_eh_selector_i32 : Intrinsic<[llvm_i32_ty, llvm_ptr_ty, llvm_ptr_ty, + llvm_vararg_ty]>; +def int_eh_selector_i64 : Intrinsic<[llvm_i64_ty, llvm_ptr_ty, llvm_ptr_ty, + llvm_vararg_ty]>; + +def int_eh_typeid_for_i32 : Intrinsic<[llvm_i32_ty, llvm_ptr_ty]>; +def int_eh_typeid_for_i64 : Intrinsic<[llvm_i64_ty, llvm_ptr_ty]>; def int_eh_return : Intrinsic<[llvm_void_ty, llvm_i32_ty, llvm_ptr_ty]>, GCCBuiltin<"__builtin_eh_return">; Modified: llvm/trunk/lib/CodeGen/IntrinsicLowering.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/IntrinsicLowering.cpp?rev=41763&r1=41762&r2=41763&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/IntrinsicLowering.cpp (original) +++ llvm/trunk/lib/CodeGen/IntrinsicLowering.cpp Fri Sep 7 06:39:35 2007 @@ -710,11 +710,13 @@ break; // Simply strip out debugging intrinsics case Intrinsic::eh_exception: - case Intrinsic::eh_selector: + case Intrinsic::eh_selector_i32: + case Intrinsic::eh_selector_i64: CI->replaceAllUsesWith(Constant::getNullValue(CI->getType())); break; - case Intrinsic::eh_typeid_for: + case Intrinsic::eh_typeid_for_i32: + case Intrinsic::eh_typeid_for_i64: // Return something different to eh_selector. CI->replaceAllUsesWith(ConstantInt::get(CI->getType(), 1)); break; Modified: llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp?rev=41763&r1=41762&r2=41763&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp (original) +++ llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp Fri Sep 7 06:39:35 2007 @@ -212,7 +212,8 @@ /// eh.selector intrinsic. static bool isSelector(Instruction *I) { if (IntrinsicInst *II = dyn_cast(I)) - return II->getIntrinsicID() == Intrinsic::eh_selector; + return (II->getIntrinsicID() == Intrinsic::eh_selector_i32 || + II->getIntrinsicID() == Intrinsic::eh_selector_i64); return false; } @@ -2688,9 +2689,12 @@ return 0; } - case Intrinsic::eh_selector:{ + case Intrinsic::eh_selector_i32: + case Intrinsic::eh_selector_i64: { MachineModuleInfo *MMI = DAG.getMachineModuleInfo(); - + MVT::ValueType VT = (Intrinsic == Intrinsic::eh_selector_i32 ? + MVT::i32 : MVT::i64); + if (ExceptionHandling && MMI) { if (CurMBB->isLandingPad()) addCatchInfo(I, MMI, CurMBB); @@ -2704,7 +2708,7 @@ } // Insert the EHSELECTION instruction. - SDVTList VTs = DAG.getVTList(MVT::i32, MVT::Other); + SDVTList VTs = DAG.getVTList(VT, MVT::Other); SDOperand Ops[2]; Ops[0] = getValue(I.getOperand(1)); Ops[1] = getRoot(); @@ -2712,24 +2716,27 @@ setValue(&I, Op); DAG.setRoot(Op.getValue(1)); } else { - setValue(&I, DAG.getConstant(0, TLI.getPointerTy())); + setValue(&I, DAG.getConstant(0, VT)); } return 0; } - - case Intrinsic::eh_typeid_for: { + + case Intrinsic::eh_typeid_for_i32: + case Intrinsic::eh_typeid_for_i64: { MachineModuleInfo *MMI = DAG.getMachineModuleInfo(); + MVT::ValueType VT = (Intrinsic == Intrinsic::eh_typeid_for_i32 ? + MVT::i32 : MVT::i64); if (MMI) { // Find the type id for the given typeinfo. GlobalVariable *GV = ExtractTypeInfo(I.getOperand(1)); unsigned TypeID = MMI->getTypeIDFor(GV); - setValue(&I, DAG.getConstant(TypeID, MVT::i32)); + setValue(&I, DAG.getConstant(TypeID, VT)); } else { // Return something different to eh_selector. - setValue(&I, DAG.getConstant(1, MVT::i32)); + setValue(&I, DAG.getConstant(1, VT)); } return 0; @@ -4205,7 +4212,7 @@ // If the source and destination are known to not be aliases, we can // lower memmove as memcpy. if (Op == ISD::MEMMOVE) { - uint64_t Size = -1; + uint64_t Size = -1ULL; if (ConstantSDNode *C = dyn_cast(Op3)) Size = C->getValue(); if (AA.alias(I.getOperand(1), Size, I.getOperand(2), Size) == Modified: llvm/trunk/test/CodeGen/Generic/2007-05-03-EHTypeInfo.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/Generic/2007-05-03-EHTypeInfo.ll?rev=41763&r1=41762&r2=41763&view=diff ============================================================================== --- llvm/trunk/test/CodeGen/Generic/2007-05-03-EHTypeInfo.ll (original) +++ llvm/trunk/test/CodeGen/Generic/2007-05-03-EHTypeInfo.ll Fri Sep 7 06:39:35 2007 @@ -1,12 +1,12 @@ -; RUN: llvm-as < %s | llc -enable-eh +; RUN: llvm-as < %s | llc -enable-eh -march=x86 %struct.exception = type { i8, i8, i32, i8*, i8*, i32, i8* } @program_error = external global %struct.exception ; <%struct.exception*> [#uses=1] define void @typeinfo() { entry: - %eh_typeid = tail call i32 @llvm.eh.typeid.for( i8* getelementptr (%struct.exception* @program_error, i32 0, i32 0) ) ; [#uses=0] + %eh_typeid = tail call i32 @llvm.eh.typeid.for.i32( i8* getelementptr (%struct.exception* @program_error, i32 0, i32 0) ) ; [#uses=0] ret void } -declare i32 @llvm.eh.typeid.for(i8*) +declare i32 @llvm.eh.typeid.for.i32(i8*) Modified: llvm/trunk/test/CodeGen/Generic/2007-05-05-Personality.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/Generic/2007-05-05-Personality.ll?rev=41763&r1=41762&r2=41763&view=diff ============================================================================== --- llvm/trunk/test/CodeGen/Generic/2007-05-05-Personality.ll (original) +++ llvm/trunk/test/CodeGen/Generic/2007-05-05-Personality.ll Fri Sep 7 06:39:35 2007 @@ -9,8 +9,8 @@ unwind: ; preds = %entry %eh_ptr = tail call i8* @llvm.eh.exception( ) ; [#uses=2] - %eh_select = tail call i32 (i8*, i8*, ...)* @llvm.eh.selector( i8* %eh_ptr, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), i8* @error ) ; [#uses=1] - %eh_typeid = tail call i32 @llvm.eh.typeid.for( i8* @error ) ; [#uses=1] + %eh_select = tail call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32( i8* %eh_ptr, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), i8* @error ) ; [#uses=1] + %eh_typeid = tail call i32 @llvm.eh.typeid.for.i32( i8* @error ) ; [#uses=1] %tmp2 = icmp eq i32 %eh_select, %eh_typeid ; [#uses=1] br i1 %tmp2, label %eh_then, label %Unwind @@ -26,9 +26,9 @@ declare i8* @llvm.eh.exception() -declare i32 @llvm.eh.selector(i8*, i8*, ...) +declare i32 @llvm.eh.selector.i32(i8*, i8*, ...) -declare i32 @llvm.eh.typeid.for(i8*) +declare i32 @llvm.eh.typeid.for.i32(i8*) declare i32 @__gnat_eh_personality(...) Modified: llvm/trunk/test/CodeGen/Generic/2007-06-06-CriticalEdgeLandingPad.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/Generic/2007-06-06-CriticalEdgeLandingPad.ll?rev=41763&r1=41762&r2=41763&view=diff ============================================================================== --- llvm/trunk/test/CodeGen/Generic/2007-06-06-CriticalEdgeLandingPad.ll (original) +++ llvm/trunk/test/CodeGen/Generic/2007-06-06-CriticalEdgeLandingPad.ll Fri Sep 7 06:39:35 2007 @@ -1,4 +1,4 @@ -; RUN: llvm-as < %s | llc -enable-eh -asm-verbose -o - | \ +; RUN: llvm-as < %s | llc -march=x86 -enable-eh -asm-verbose -o - | \ ; RUN: grep -A 3 {Llabel137.*Region start} | grep {3.*Action} ; PR1422 ; PR1508 @@ -270,8 +270,8 @@ unwind: ; preds = %cleanup798, %unwind783, %cond_true465 %eh_ptr = call i8* @llvm.eh.exception( ) ; [#uses=3] - %eh_select = call i32 (i8*, i8*, ...)* @llvm.eh.selector( i8* %eh_ptr, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), %struct.exception* @constraint_error, i32* @__gnat_others_value ) ; [#uses=2] - %eh_typeid8065921 = call i32 @llvm.eh.typeid.for( i8* getelementptr (%struct.exception* @constraint_error, i32 0, i32 0) ) ; [#uses=1] + %eh_select = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32( i8* %eh_ptr, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), %struct.exception* @constraint_error, i32* @__gnat_others_value ) ; [#uses=2] + %eh_typeid8065921 = call i32 @llvm.eh.typeid.for.i32( i8* getelementptr (%struct.exception* @constraint_error, i32 0, i32 0) ) ; [#uses=1] %tmp8085923 = icmp eq i32 %eh_select, %eh_typeid8065921 ; [#uses=1] br i1 %tmp8085923, label %eh_then809, label %eh_else823 @@ -281,8 +281,8 @@ unwind468: ; preds = %cleanup, %unwind480, %cond_next467 %eh_ptr469 = call i8* @llvm.eh.exception( ) ; [#uses=3] - %eh_select471 = call i32 (i8*, i8*, ...)* @llvm.eh.selector( i8* %eh_ptr469, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), i32* @__gnat_others_value ) ; [#uses=2] - %eh_typeid5928 = call i32 @llvm.eh.typeid.for( i8* bitcast (i32* @__gnat_others_value to i8*) ) ; [#uses=1] + %eh_select471 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32( i8* %eh_ptr469, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), i32* @__gnat_others_value ) ; [#uses=2] + %eh_typeid5928 = call i32 @llvm.eh.typeid.for.i32( i8* bitcast (i32* @__gnat_others_value to i8*) ) ; [#uses=1] %tmp7815929 = icmp eq i32 %eh_select471, %eh_typeid5928 ; [#uses=1] br i1 %tmp7815929, label %eh_then, label %cleanup805 @@ -296,7 +296,7 @@ unwind480: ; preds = %invcont734, %invcont717, %cond_next665, %cond_true663, %cond_next639, %cond_true637, %cond_next613, %cond_true611, %cond_next587, %cond_true585, %cond_next561, %cond_true559, %cond_next535, %cond_true533, %cond_next509, %cond_true507, %invcont472 %eh_ptr481 = call i8* @llvm.eh.exception( ) ; [#uses=3] - %eh_select483 = call i32 (i8*, i8*, ...)* @llvm.eh.selector( i8* %eh_ptr481, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), i32* @__gnat_others_value ) ; [#uses=2] + %eh_select483 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32( i8* %eh_ptr481, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), i32* @__gnat_others_value ) ; [#uses=2] %tmp7685575 = ptrtoint i8* %tmp476 to i32 ; [#uses=1] %tmp76855755576 = zext i32 %tmp7685575 to i64 ; [#uses=1] %tmp7715572 = zext i32 %tmp479 to i64 ; [#uses=1] @@ -441,7 +441,7 @@ to label %cond_true856 unwind label %unwind468 cleanup779: ; preds = %unwind480 - %eh_typeid = call i32 @llvm.eh.typeid.for( i8* bitcast (i32* @__gnat_others_value to i8*) ) ; [#uses=1] + %eh_typeid = call i32 @llvm.eh.typeid.for.i32( i8* bitcast (i32* @__gnat_others_value to i8*) ) ; [#uses=1] %tmp781 = icmp eq i32 %eh_select483, %eh_typeid ; [#uses=1] br i1 %tmp781, label %eh_then, label %cleanup805 @@ -452,7 +452,7 @@ unwind783: ; preds = %invcont789, %invcont787, %eh_then %eh_ptr784 = call i8* @llvm.eh.exception( ) ; [#uses=2] - %eh_select786 = call i32 (i8*, i8*, ...)* @llvm.eh.selector( i8* %eh_ptr784, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), %struct.exception* @constraint_error, i32* @__gnat_others_value ) ; [#uses=1] + %eh_select786 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32( i8* %eh_ptr784, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), %struct.exception* @constraint_error, i32* @__gnat_others_value ) ; [#uses=1] invoke void @__gnat_end_handler( i8* %eh_exception.35924.0 ) to label %cleanup805 unwind label %unwind @@ -472,7 +472,7 @@ cleanup805: ; preds = %unwind783, %cleanup779, %unwind468 %eh_selector.0 = phi i32 [ %eh_select471, %unwind468 ], [ %eh_select483, %cleanup779 ], [ %eh_select786, %unwind783 ] ; [#uses=2] %eh_exception.0 = phi i8* [ %eh_ptr469, %unwind468 ], [ %eh_ptr481, %cleanup779 ], [ %eh_ptr784, %unwind783 ] ; [#uses=2] - %eh_typeid806 = call i32 @llvm.eh.typeid.for( i8* getelementptr (%struct.exception* @constraint_error, i32 0, i32 0) ) ; [#uses=1] + %eh_typeid806 = call i32 @llvm.eh.typeid.for.i32( i8* getelementptr (%struct.exception* @constraint_error, i32 0, i32 0) ) ; [#uses=1] %tmp808 = icmp eq i32 %eh_selector.0, %eh_typeid806 ; [#uses=1] br i1 %tmp808, label %eh_then809, label %eh_else823 @@ -502,7 +502,7 @@ eh_else823: ; preds = %cleanup805, %unwind %eh_selector.05912.1 = phi i32 [ %eh_select, %unwind ], [ %eh_selector.0, %cleanup805 ] ; [#uses=1] %eh_exception.05914.1 = phi i8* [ %eh_ptr, %unwind ], [ %eh_exception.0, %cleanup805 ] ; [#uses=4] - %eh_typeid824 = call i32 @llvm.eh.typeid.for( i8* bitcast (i32* @__gnat_others_value to i8*) ) ; [#uses=1] + %eh_typeid824 = call i32 @llvm.eh.typeid.for.i32( i8* bitcast (i32* @__gnat_others_value to i8*) ) ; [#uses=1] %tmp826 = icmp eq i32 %eh_selector.05912.1, %eh_typeid824 ; [#uses=1] br i1 %tmp826, label %eh_then827, label %Unwind @@ -542,8 +542,8 @@ unwind871: ; preds = %cond_next905, %bb887, %cond_true870 %sat.3 = phi i8 [ %tmp340341, %cond_true870 ], [ %sat.1, %bb887 ], [ %sat.0, %cond_next905 ] ; [#uses=2] %eh_ptr872 = call i8* @llvm.eh.exception( ) ; [#uses=8] - %eh_select874 = call i32 (i8*, i8*, ...)* @llvm.eh.selector( i8* %eh_ptr872, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), %struct.exception* @constraint_error, i32* @__gnat_others_value ) ; [#uses=2] - %eh_typeid915 = call i32 @llvm.eh.typeid.for( i8* getelementptr (%struct.exception* @constraint_error, i32 0, i32 0) ) ; [#uses=1] + %eh_select874 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32( i8* %eh_ptr872, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), %struct.exception* @constraint_error, i32* @__gnat_others_value ) ; [#uses=2] + %eh_typeid915 = call i32 @llvm.eh.typeid.for.i32( i8* getelementptr (%struct.exception* @constraint_error, i32 0, i32 0) ) ; [#uses=1] %tmp917 = icmp eq i32 %eh_select874, %eh_typeid915 ; [#uses=1] br i1 %tmp917, label %eh_then918, label %eh_else932 @@ -588,7 +588,7 @@ br i1 %tmp462, label %cond_true973, label %UnifiedReturnBlock35 eh_else932: ; preds = %unwind871 - %eh_typeid933 = call i32 @llvm.eh.typeid.for( i8* bitcast (i32* @__gnat_others_value to i8*) ) ; [#uses=1] + %eh_typeid933 = call i32 @llvm.eh.typeid.for.i32( i8* bitcast (i32* @__gnat_others_value to i8*) ) ; [#uses=1] %tmp935 = icmp eq i32 %eh_select874, %eh_typeid933 ; [#uses=1] br i1 %tmp935, label %eh_then936, label %Unwind @@ -626,8 +626,8 @@ unwind974: ; preds = %cond_true973 %eh_ptr975 = call i8* @llvm.eh.exception( ) ; [#uses=8] - %eh_select977 = call i32 (i8*, i8*, ...)* @llvm.eh.selector( i8* %eh_ptr975, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), %struct.exception* @constraint_error, i32* @__gnat_others_value ) ; [#uses=2] - %eh_typeid13135959 = call i32 @llvm.eh.typeid.for( i8* getelementptr (%struct.exception* @constraint_error, i32 0, i32 0) ) ; [#uses=1] + %eh_select977 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32( i8* %eh_ptr975, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), %struct.exception* @constraint_error, i32* @__gnat_others_value ) ; [#uses=2] + %eh_typeid13135959 = call i32 @llvm.eh.typeid.for.i32( i8* getelementptr (%struct.exception* @constraint_error, i32 0, i32 0) ) ; [#uses=1] %tmp13155961 = icmp eq i32 %eh_select977, %eh_typeid13135959 ; [#uses=1] br i1 %tmp13155961, label %eh_then1316, label %eh_else1330 @@ -651,7 +651,7 @@ br label %finally1311 eh_else1330: ; preds = %unwind974 - %eh_typeid1331 = call i32 @llvm.eh.typeid.for( i8* bitcast (i32* @__gnat_others_value to i8*) ) ; [#uses=1] + %eh_typeid1331 = call i32 @llvm.eh.typeid.for.i32( i8* bitcast (i32* @__gnat_others_value to i8*) ) ; [#uses=1] %tmp1333 = icmp eq i32 %eh_select977, %eh_typeid1331 ; [#uses=1] br i1 %tmp1333, label %eh_then1334, label %Unwind @@ -705,8 +705,8 @@ unwind1419: ; preds = %cleanup1702, %cleanup1686, %unwind1676, %cond_next1548, %cond_true1546, %cond_true1418 %eh_ptr1420 = call i8* @llvm.eh.exception( ) ; [#uses=3] - %eh_select1422 = call i32 (i8*, i8*, ...)* @llvm.eh.selector( i8* %eh_ptr1420, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), %struct.exception* @constraint_error, i32* @__gnat_others_value ) ; [#uses=2] - %eh_typeid17215981 = call i32 @llvm.eh.typeid.for( i8* getelementptr (%struct.exception* @constraint_error, i32 0, i32 0) ) ; [#uses=1] + %eh_select1422 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32( i8* %eh_ptr1420, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), %struct.exception* @constraint_error, i32* @__gnat_others_value ) ; [#uses=2] + %eh_typeid17215981 = call i32 @llvm.eh.typeid.for.i32( i8* getelementptr (%struct.exception* @constraint_error, i32 0, i32 0) ) ; [#uses=1] %tmp17235983 = icmp eq i32 %eh_select1422, %eh_typeid17215981 ; [#uses=1] br i1 %tmp17235983, label %eh_then1724, label %eh_else1742 @@ -785,8 +785,8 @@ unwind1574: ; preds = %invcont1638, %invcont1621, %bb1607, %bb1605, %cond_true1573 %eh_ptr1575 = call i8* @llvm.eh.exception( ) ; [#uses=5] - %eh_select1577 = call i32 (i8*, i8*, ...)* @llvm.eh.selector( i8* %eh_ptr1575, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), i32* @__gnat_others_value ) ; [#uses=2] - %eh_typeid1652 = call i32 @llvm.eh.typeid.for( i8* bitcast (i32* @__gnat_others_value to i8*) ) ; [#uses=1] + %eh_select1577 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32( i8* %eh_ptr1575, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), i32* @__gnat_others_value ) ; [#uses=2] + %eh_typeid1652 = call i32 @llvm.eh.typeid.for.i32( i8* bitcast (i32* @__gnat_others_value to i8*) ) ; [#uses=1] %tmp1654 = icmp eq i32 %eh_select1577, %eh_typeid1652 ; [#uses=1] br i1 %tmp1654, label %eh_then1655, label %cleanup1686 @@ -840,7 +840,7 @@ unwind1659: ; preds = %invcont1665, %invcont1663, %eh_then1655 %eh_ptr1660 = call i8* @llvm.eh.exception( ) ; [#uses=2] - %eh_select1662 = call i32 (i8*, i8*, ...)* @llvm.eh.selector( i8* %eh_ptr1660, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), %struct.exception* @constraint_error, i32* @__gnat_others_value ) ; [#uses=1] + %eh_select1662 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32( i8* %eh_ptr1660, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), %struct.exception* @constraint_error, i32* @__gnat_others_value ) ; [#uses=1] invoke void @__gnat_end_handler( i8* %eh_ptr1575 ) to label %cleanup1686 unwind label %unwind1676 @@ -859,7 +859,7 @@ unwind1676: ; preds = %cleanup1674, %unwind1659 %eh_ptr1677 = call i8* @llvm.eh.exception( ) ; [#uses=2] - %eh_select1679 = call i32 (i8*, i8*, ...)* @llvm.eh.selector( i8* %eh_ptr1677, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), %struct.exception* @constraint_error, i32* @__gnat_others_value ) ; [#uses=1] + %eh_select1679 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32( i8* %eh_ptr1677, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), %struct.exception* @constraint_error, i32* @__gnat_others_value ) ; [#uses=1] %tmp169255575995 = ptrtoint i8* %tmp1556 to i32 ; [#uses=1] %tmp1692555755585996 = zext i32 %tmp169255575995 to i64 ; [#uses=1] %tmp169555545997 = zext i32 %tmp1559 to i64 ; [#uses=1] @@ -891,7 +891,7 @@ cleanup1720: ; preds = %cleanup1686, %unwind1676 %eh_selector.185993.1 = phi i32 [ %eh_select1679, %unwind1676 ], [ %eh_selector.18, %cleanup1686 ] ; [#uses=2] %eh_exception.185994.1 = phi i8* [ %eh_ptr1677, %unwind1676 ], [ %eh_exception.18, %cleanup1686 ] ; [#uses=2] - %eh_typeid1721 = call i32 @llvm.eh.typeid.for( i8* getelementptr (%struct.exception* @constraint_error, i32 0, i32 0) ) ; [#uses=1] + %eh_typeid1721 = call i32 @llvm.eh.typeid.for.i32( i8* getelementptr (%struct.exception* @constraint_error, i32 0, i32 0) ) ; [#uses=1] %tmp1723 = icmp eq i32 %eh_selector.185993.1, %eh_typeid1721 ; [#uses=1] br i1 %tmp1723, label %eh_then1724, label %eh_else1742 @@ -924,7 +924,7 @@ eh_else1742: ; preds = %cleanup1720, %unwind1419 %eh_selector.135972.1 = phi i32 [ %eh_select1422, %unwind1419 ], [ %eh_selector.185993.1, %cleanup1720 ] ; [#uses=1] %eh_exception.135974.1 = phi i8* [ %eh_ptr1420, %unwind1419 ], [ %eh_exception.185994.1, %cleanup1720 ] ; [#uses=4] - %eh_typeid1743 = call i32 @llvm.eh.typeid.for( i8* bitcast (i32* @__gnat_others_value to i8*) ) ; [#uses=1] + %eh_typeid1743 = call i32 @llvm.eh.typeid.for.i32( i8* bitcast (i32* @__gnat_others_value to i8*) ) ; [#uses=1] %tmp1745 = icmp eq i32 %eh_selector.135972.1, %eh_typeid1743 ; [#uses=1] br i1 %tmp1745, label %eh_then1746, label %cleanup1771 @@ -997,8 +997,8 @@ unwind1895: ; preds = %cleanup2300, %cleanup2284, %unwind2274, %cond_next2149, %cond_true1946 %eh_ptr1896 = call i8* @llvm.eh.exception( ) ; [#uses=3] - %eh_select1898 = call i32 (i8*, i8*, ...)* @llvm.eh.selector( i8* %eh_ptr1896, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), %struct.exception* @constraint_error, i32* @__gnat_others_value ) ; [#uses=2] - %eh_typeid23196018 = call i32 @llvm.eh.typeid.for( i8* getelementptr (%struct.exception* @constraint_error, i32 0, i32 0) ) ; [#uses=1] + %eh_select1898 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32( i8* %eh_ptr1896, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), %struct.exception* @constraint_error, i32* @__gnat_others_value ) ; [#uses=2] + %eh_typeid23196018 = call i32 @llvm.eh.typeid.for.i32( i8* getelementptr (%struct.exception* @constraint_error, i32 0, i32 0) ) ; [#uses=1] %tmp23216020 = icmp eq i32 %eh_select1898, %eh_typeid23196018 ; [#uses=1] br i1 %tmp23216020, label %eh_then2322, label %eh_else2340 @@ -1043,8 +1043,8 @@ unwind2172: ; preds = %invcont2236, %invcont2219, %bb2205, %bb2203, %cond_true2171 %eh_ptr2173 = call i8* @llvm.eh.exception( ) ; [#uses=5] - %eh_select2175 = call i32 (i8*, i8*, ...)* @llvm.eh.selector( i8* %eh_ptr2173, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), i32* @__gnat_others_value ) ; [#uses=2] - %eh_typeid2250 = call i32 @llvm.eh.typeid.for( i8* bitcast (i32* @__gnat_others_value to i8*) ) ; [#uses=1] + %eh_select2175 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32( i8* %eh_ptr2173, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), i32* @__gnat_others_value ) ; [#uses=2] + %eh_typeid2250 = call i32 @llvm.eh.typeid.for.i32( i8* bitcast (i32* @__gnat_others_value to i8*) ) ; [#uses=1] %tmp2252 = icmp eq i32 %eh_select2175, %eh_typeid2250 ; [#uses=1] br i1 %tmp2252, label %eh_then2253, label %cleanup2284 @@ -1099,7 +1099,7 @@ unwind2257: ; preds = %invcont2263, %invcont2261, %eh_then2253 %eh_ptr2258 = call i8* @llvm.eh.exception( ) ; [#uses=2] - %eh_select2260 = call i32 (i8*, i8*, ...)* @llvm.eh.selector( i8* %eh_ptr2258, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), %struct.exception* @constraint_error, i32* @__gnat_others_value ) ; [#uses=1] + %eh_select2260 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32( i8* %eh_ptr2258, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), %struct.exception* @constraint_error, i32* @__gnat_others_value ) ; [#uses=1] invoke void @__gnat_end_handler( i8* %eh_ptr2173 ) to label %cleanup2284 unwind label %unwind2274 @@ -1118,7 +1118,7 @@ unwind2274: ; preds = %cleanup2272, %unwind2257 %eh_ptr2275 = call i8* @llvm.eh.exception( ) ; [#uses=2] - %eh_select2277 = call i32 (i8*, i8*, ...)* @llvm.eh.selector( i8* %eh_ptr2275, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), %struct.exception* @constraint_error, i32* @__gnat_others_value ) ; [#uses=1] + %eh_select2277 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32( i8* %eh_ptr2275, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), %struct.exception* @constraint_error, i32* @__gnat_others_value ) ; [#uses=1] %tmp229055456023 = ptrtoint i8* %tmp2154 to i32 ; [#uses=1] %tmp2290554555466024 = zext i32 %tmp229055456023 to i64 ; [#uses=1] %tmp229355426025 = zext i32 %tmp2157 to i64 ; [#uses=1] @@ -1150,7 +1150,7 @@ cleanup2318: ; preds = %cleanup2284, %unwind2274 %eh_selector.246021.1 = phi i32 [ %eh_select2277, %unwind2274 ], [ %eh_selector.24, %cleanup2284 ] ; [#uses=2] %eh_exception.266022.1 = phi i8* [ %eh_ptr2275, %unwind2274 ], [ %eh_exception.26, %cleanup2284 ] ; [#uses=2] - %eh_typeid2319 = call i32 @llvm.eh.typeid.for( i8* getelementptr (%struct.exception* @constraint_error, i32 0, i32 0) ) ; [#uses=1] + %eh_typeid2319 = call i32 @llvm.eh.typeid.for.i32( i8* getelementptr (%struct.exception* @constraint_error, i32 0, i32 0) ) ; [#uses=1] %tmp2321 = icmp eq i32 %eh_selector.246021.1, %eh_typeid2319 ; [#uses=1] br i1 %tmp2321, label %eh_then2322, label %eh_else2340 @@ -1183,7 +1183,7 @@ eh_else2340: ; preds = %cleanup2318, %unwind1895 %eh_selector.196009.1 = phi i32 [ %eh_select1898, %unwind1895 ], [ %eh_selector.246021.1, %cleanup2318 ] ; [#uses=1] %eh_exception.216011.1 = phi i8* [ %eh_ptr1896, %unwind1895 ], [ %eh_exception.266022.1, %cleanup2318 ] ; [#uses=4] - %eh_typeid2341 = call i32 @llvm.eh.typeid.for( i8* bitcast (i32* @__gnat_others_value to i8*) ) ; [#uses=1] + %eh_typeid2341 = call i32 @llvm.eh.typeid.for.i32( i8* bitcast (i32* @__gnat_others_value to i8*) ) ; [#uses=1] %tmp2343 = icmp eq i32 %eh_selector.196009.1, %eh_typeid2341 ; [#uses=1] br i1 %tmp2343, label %eh_then2344, label %cleanup2369 @@ -1224,8 +1224,8 @@ unwind2378: ; preds = %cleanup2371 %eh_ptr2379 = call i8* @llvm.eh.exception( ) ; [#uses=3] - %eh_select2381 = call i32 (i8*, i8*, ...)* @llvm.eh.selector( i8* %eh_ptr2379, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), %struct.exception* @constraint_error, i32* @__gnat_others_value ) ; [#uses=2] - %eh_typeid26496037 = call i32 @llvm.eh.typeid.for( i8* getelementptr (%struct.exception* @constraint_error, i32 0, i32 0) ) ; [#uses=1] + %eh_select2381 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32( i8* %eh_ptr2379, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), %struct.exception* @constraint_error, i32* @__gnat_others_value ) ; [#uses=2] + %eh_typeid26496037 = call i32 @llvm.eh.typeid.for.i32( i8* getelementptr (%struct.exception* @constraint_error, i32 0, i32 0) ) ; [#uses=1] %tmp26516039 = icmp eq i32 %eh_select2381, %eh_typeid26496037 ; [#uses=1] br i1 %tmp26516039, label %eh_then2652, label %eh_else2666 @@ -1250,7 +1250,7 @@ unwind2411: ; preds = %invcont2591, %invcont2574, %bb2560, %bb2558, %bb2524, %bb2506, %cond_true2410 %eh_ptr2412 = call i8* @llvm.eh.exception( ) ; [#uses=3] - %eh_select2414 = call i32 (i8*, i8*, ...)* @llvm.eh.selector( i8* %eh_ptr2412, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), %struct.exception* @constraint_error, i32* @__gnat_others_value ) ; [#uses=2] + %eh_select2414 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32( i8* %eh_ptr2412, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), %struct.exception* @constraint_error, i32* @__gnat_others_value ) ; [#uses=2] %tmp26315527 = ptrtoint i8* %tmp2386 to i32 ; [#uses=1] %tmp263155275528 = zext i32 %tmp26315527 to i64 ; [#uses=1] %tmp26345524 = zext i32 %tmp2389 to i64 ; [#uses=1] @@ -1326,9 +1326,9 @@ unwind2618: ; preds = %cleanup2604, %unwind2411 %eh_ptr2619 = call i8* @llvm.eh.exception( ) ; [#uses=3] - %eh_select2621 = call i32 (i8*, i8*, ...)* @llvm.eh.selector( i8* %eh_ptr2619, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), %struct.exception* @constraint_error, i32* @__gnat_others_value ) ; [#uses=2] + %eh_select2621 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32( i8* %eh_ptr2619, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), %struct.exception* @constraint_error, i32* @__gnat_others_value ) ; [#uses=2] call void @llvm.stackrestore( i8* %tmp2390 ) - %eh_typeid26493 = call i32 @llvm.eh.typeid.for( i8* getelementptr (%struct.exception* @constraint_error, i32 0, i32 0) ) ; [#uses=1] + %eh_typeid26493 = call i32 @llvm.eh.typeid.for.i32( i8* getelementptr (%struct.exception* @constraint_error, i32 0, i32 0) ) ; [#uses=1] %tmp26514 = icmp eq i32 %eh_select2621, %eh_typeid26493 ; [#uses=1] br i1 %tmp26514, label %eh_then2652, label %eh_else2666 @@ -1339,7 +1339,7 @@ cleanup2644: ; preds = %unwind2411 call void @llvm.stackrestore( i8* %tmp2390 ) - %eh_typeid2649 = call i32 @llvm.eh.typeid.for( i8* getelementptr (%struct.exception* @constraint_error, i32 0, i32 0) ) ; [#uses=1] + %eh_typeid2649 = call i32 @llvm.eh.typeid.for.i32( i8* getelementptr (%struct.exception* @constraint_error, i32 0, i32 0) ) ; [#uses=1] %tmp2651 = icmp eq i32 %eh_select2414, %eh_typeid2649 ; [#uses=1] br i1 %tmp2651, label %eh_then2652, label %eh_else2666 @@ -1367,7 +1367,7 @@ eh_else2666: ; preds = %cleanup2644, %unwind2618, %unwind2378 %eh_selector.256028.1 = phi i32 [ %eh_select2381, %unwind2378 ], [ %eh_select2621, %unwind2618 ], [ %eh_select2414, %cleanup2644 ] ; [#uses=1] %eh_exception.296030.1 = phi i8* [ %eh_ptr2379, %unwind2378 ], [ %eh_ptr2619, %unwind2618 ], [ %eh_ptr2412, %cleanup2644 ] ; [#uses=4] - %eh_typeid2667 = call i32 @llvm.eh.typeid.for( i8* bitcast (i32* @__gnat_others_value to i8*) ) ; [#uses=1] + %eh_typeid2667 = call i32 @llvm.eh.typeid.for.i32( i8* bitcast (i32* @__gnat_others_value to i8*) ) ; [#uses=1] %tmp2669 = icmp eq i32 %eh_selector.256028.1, %eh_typeid2667 ; [#uses=1] br i1 %tmp2669, label %eh_then2670, label %Unwind @@ -1407,8 +1407,8 @@ unwind2712: ; preds = %cleanup2990, %unwind2975, %cond_true2711 %eh_ptr2713 = call i8* @llvm.eh.exception( ) ; [#uses=3] - %eh_select2715 = call i32 (i8*, i8*, ...)* @llvm.eh.selector( i8* %eh_ptr2713, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), %struct.exception* @constraint_error, i32* @__gnat_others_value ) ; [#uses=2] - %eh_typeid29996053 = call i32 @llvm.eh.typeid.for( i8* getelementptr (%struct.exception* @constraint_error, i32 0, i32 0) ) ; [#uses=1] + %eh_select2715 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32( i8* %eh_ptr2713, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), %struct.exception* @constraint_error, i32* @__gnat_others_value ) ; [#uses=2] + %eh_typeid29996053 = call i32 @llvm.eh.typeid.for.i32( i8* getelementptr (%struct.exception* @constraint_error, i32 0, i32 0) ) ; [#uses=1] %tmp30016055 = icmp eq i32 %eh_select2715, %eh_typeid29996053 ; [#uses=1] br i1 %tmp30016055, label %eh_then3002, label %eh_else3016 @@ -1418,8 +1418,8 @@ unwind2762: ; preds = %cond_next2718 %eh_ptr2763 = call i8* @llvm.eh.exception( ) ; [#uses=3] - %eh_select2765 = call i32 (i8*, i8*, ...)* @llvm.eh.selector( i8* %eh_ptr2763, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), i32* @__gnat_others_value ) ; [#uses=2] - %eh_typeid29686060 = call i32 @llvm.eh.typeid.for( i8* bitcast (i32* @__gnat_others_value to i8*) ) ; [#uses=1] + %eh_select2765 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32( i8* %eh_ptr2763, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), i32* @__gnat_others_value ) ; [#uses=2] + %eh_typeid29686060 = call i32 @llvm.eh.typeid.for.i32( i8* bitcast (i32* @__gnat_others_value to i8*) ) ; [#uses=1] %tmp29706061 = icmp eq i32 %eh_select2765, %eh_typeid29686060 ; [#uses=1] br i1 %tmp29706061, label %eh_then2971, label %cleanup2998 @@ -1440,7 +1440,7 @@ unwind2822: ; preds = %invcont2910, %invcont2893, %bb2879, %bb2877, %bb2843, %bb2821 %eh_ptr2823 = call i8* @llvm.eh.exception( ) ; [#uses=3] - %eh_select2825 = call i32 (i8*, i8*, ...)* @llvm.eh.selector( i8* %eh_ptr2823, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), i32* @__gnat_others_value ) ; [#uses=2] + %eh_select2825 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32( i8* %eh_ptr2823, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), i32* @__gnat_others_value ) ; [#uses=2] %tmp29295521 = ptrtoint i8* %tmp2770 to i32 ; [#uses=1] %tmp292955215522 = zext i32 %tmp29295521 to i64 ; [#uses=1] %tmp29325518 = zext i32 %tmp2773 to i64 ; [#uses=1] @@ -1497,9 +1497,9 @@ unwind2937: ; preds = %cleanup2943, %unwind2822 %eh_ptr2938 = call i8* @llvm.eh.exception( ) ; [#uses=3] - %eh_select2940 = call i32 (i8*, i8*, ...)* @llvm.eh.selector( i8* %eh_ptr2938, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), i32* @__gnat_others_value ) ; [#uses=2] + %eh_select2940 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32( i8* %eh_ptr2938, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), i32* @__gnat_others_value ) ; [#uses=2] call void @llvm.stackrestore( i8* %tmp2774 ) - %eh_typeid29685 = call i32 @llvm.eh.typeid.for( i8* bitcast (i32* @__gnat_others_value to i8*) ) ; [#uses=1] + %eh_typeid29685 = call i32 @llvm.eh.typeid.for.i32( i8* bitcast (i32* @__gnat_others_value to i8*) ) ; [#uses=1] %tmp29706 = icmp eq i32 %eh_select2940, %eh_typeid29685 ; [#uses=1] br i1 %tmp29706, label %eh_then2971, label %cleanup2998 @@ -1521,7 +1521,7 @@ cleanup2963: ; preds = %unwind2822 call void @llvm.stackrestore( i8* %tmp2774 ) - %eh_typeid2968 = call i32 @llvm.eh.typeid.for( i8* bitcast (i32* @__gnat_others_value to i8*) ) ; [#uses=1] + %eh_typeid2968 = call i32 @llvm.eh.typeid.for.i32( i8* bitcast (i32* @__gnat_others_value to i8*) ) ; [#uses=1] %tmp2970 = icmp eq i32 %eh_select2825, %eh_typeid2968 ; [#uses=1] br i1 %tmp2970, label %eh_then2971, label %cleanup2998 @@ -1532,7 +1532,7 @@ unwind2975: ; preds = %invcont2981, %invcont2979, %eh_then2971 %eh_ptr2976 = call i8* @llvm.eh.exception( ) ; [#uses=2] - %eh_select2978 = call i32 (i8*, i8*, ...)* @llvm.eh.selector( i8* %eh_ptr2976, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), %struct.exception* @constraint_error, i32* @__gnat_others_value ) ; [#uses=1] + %eh_select2978 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32( i8* %eh_ptr2976, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), %struct.exception* @constraint_error, i32* @__gnat_others_value ) ; [#uses=1] invoke void @__gnat_end_handler( i8* %eh_exception.356056.0 ) to label %cleanup2998 unwind label %unwind2712 @@ -1552,7 +1552,7 @@ cleanup2998: ; preds = %unwind2975, %cleanup2963, %unwind2937, %unwind2762 %eh_selector.29 = phi i32 [ %eh_select2765, %unwind2762 ], [ %eh_select2940, %unwind2937 ], [ %eh_select2825, %cleanup2963 ], [ %eh_select2978, %unwind2975 ] ; [#uses=2] %eh_exception.33 = phi i8* [ %eh_ptr2763, %unwind2762 ], [ %eh_ptr2938, %unwind2937 ], [ %eh_ptr2823, %cleanup2963 ], [ %eh_ptr2976, %unwind2975 ] ; [#uses=2] - %eh_typeid2999 = call i32 @llvm.eh.typeid.for( i8* getelementptr (%struct.exception* @constraint_error, i32 0, i32 0) ) ; [#uses=1] + %eh_typeid2999 = call i32 @llvm.eh.typeid.for.i32( i8* getelementptr (%struct.exception* @constraint_error, i32 0, i32 0) ) ; [#uses=1] %tmp3001 = icmp eq i32 %eh_selector.29, %eh_typeid2999 ; [#uses=1] br i1 %tmp3001, label %eh_then3002, label %eh_else3016 @@ -1582,7 +1582,7 @@ eh_else3016: ; preds = %cleanup2998, %unwind2712 %eh_selector.296044.1 = phi i32 [ %eh_select2715, %unwind2712 ], [ %eh_selector.29, %cleanup2998 ] ; [#uses=1] %eh_exception.336046.1 = phi i8* [ %eh_ptr2713, %unwind2712 ], [ %eh_exception.33, %cleanup2998 ] ; [#uses=4] - %eh_typeid3017 = call i32 @llvm.eh.typeid.for( i8* bitcast (i32* @__gnat_others_value to i8*) ) ; [#uses=1] + %eh_typeid3017 = call i32 @llvm.eh.typeid.for.i32( i8* bitcast (i32* @__gnat_others_value to i8*) ) ; [#uses=1] %tmp3019 = icmp eq i32 %eh_selector.296044.1, %eh_typeid3017 ; [#uses=1] br i1 %tmp3019, label %eh_then3020, label %Unwind @@ -1621,8 +1621,8 @@ unwind3062: ; preds = %cleanup3340, %unwind3325, %cond_true3061 %eh_ptr3063 = call i8* @llvm.eh.exception( ) ; [#uses=3] - %eh_select3065 = call i32 (i8*, i8*, ...)* @llvm.eh.selector( i8* %eh_ptr3063, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), %struct.exception* @constraint_error, i32* @__gnat_others_value ) ; [#uses=2] - %eh_typeid33496081 = call i32 @llvm.eh.typeid.for( i8* getelementptr (%struct.exception* @constraint_error, i32 0, i32 0) ) ; [#uses=1] + %eh_select3065 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32( i8* %eh_ptr3063, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), %struct.exception* @constraint_error, i32* @__gnat_others_value ) ; [#uses=2] + %eh_typeid33496081 = call i32 @llvm.eh.typeid.for.i32( i8* getelementptr (%struct.exception* @constraint_error, i32 0, i32 0) ) ; [#uses=1] %tmp33516083 = icmp eq i32 %eh_select3065, %eh_typeid33496081 ; [#uses=1] br i1 %tmp33516083, label %eh_then3352, label %eh_else3366 @@ -1632,8 +1632,8 @@ unwind3112: ; preds = %cond_next3068 %eh_ptr3113 = call i8* @llvm.eh.exception( ) ; [#uses=3] - %eh_select3115 = call i32 (i8*, i8*, ...)* @llvm.eh.selector( i8* %eh_ptr3113, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), i32* @__gnat_others_value ) ; [#uses=2] - %eh_typeid33186088 = call i32 @llvm.eh.typeid.for( i8* bitcast (i32* @__gnat_others_value to i8*) ) ; [#uses=1] + %eh_select3115 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32( i8* %eh_ptr3113, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), i32* @__gnat_others_value ) ; [#uses=2] + %eh_typeid33186088 = call i32 @llvm.eh.typeid.for.i32( i8* bitcast (i32* @__gnat_others_value to i8*) ) ; [#uses=1] %tmp33206089 = icmp eq i32 %eh_select3115, %eh_typeid33186088 ; [#uses=1] br i1 %tmp33206089, label %eh_then3321, label %cleanup3348 @@ -1653,7 +1653,7 @@ unwind3172: ; preds = %invcont3260, %invcont3243, %bb3229, %bb3227, %bb3193, %bb3171 %eh_ptr3173 = call i8* @llvm.eh.exception( ) ; [#uses=3] - %eh_select3175 = call i32 (i8*, i8*, ...)* @llvm.eh.selector( i8* %eh_ptr3173, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), i32* @__gnat_others_value ) ; [#uses=2] + %eh_select3175 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32( i8* %eh_ptr3173, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), i32* @__gnat_others_value ) ; [#uses=2] %tmp32795509 = ptrtoint i8* %tmp3120 to i32 ; [#uses=1] %tmp327955095510 = zext i32 %tmp32795509 to i64 ; [#uses=1] %tmp32825506 = zext i32 %tmp3123 to i64 ; [#uses=1] @@ -1710,9 +1710,9 @@ unwind3287: ; preds = %cleanup3293, %unwind3172 %eh_ptr3288 = call i8* @llvm.eh.exception( ) ; [#uses=3] - %eh_select3290 = call i32 (i8*, i8*, ...)* @llvm.eh.selector( i8* %eh_ptr3288, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), i32* @__gnat_others_value ) ; [#uses=2] + %eh_select3290 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32( i8* %eh_ptr3288, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), i32* @__gnat_others_value ) ; [#uses=2] call void @llvm.stackrestore( i8* %tmp3124 ) - %eh_typeid33187 = call i32 @llvm.eh.typeid.for( i8* bitcast (i32* @__gnat_others_value to i8*) ) ; [#uses=1] + %eh_typeid33187 = call i32 @llvm.eh.typeid.for.i32( i8* bitcast (i32* @__gnat_others_value to i8*) ) ; [#uses=1] %tmp33208 = icmp eq i32 %eh_select3290, %eh_typeid33187 ; [#uses=1] br i1 %tmp33208, label %eh_then3321, label %cleanup3348 @@ -1731,7 +1731,7 @@ cleanup3313: ; preds = %unwind3172 call void @llvm.stackrestore( i8* %tmp3124 ) - %eh_typeid3318 = call i32 @llvm.eh.typeid.for( i8* bitcast (i32* @__gnat_others_value to i8*) ) ; [#uses=1] + %eh_typeid3318 = call i32 @llvm.eh.typeid.for.i32( i8* bitcast (i32* @__gnat_others_value to i8*) ) ; [#uses=1] %tmp3320 = icmp eq i32 %eh_select3175, %eh_typeid3318 ; [#uses=1] br i1 %tmp3320, label %eh_then3321, label %cleanup3348 @@ -1742,7 +1742,7 @@ unwind3325: ; preds = %invcont3331, %invcont3329, %eh_then3321 %eh_ptr3326 = call i8* @llvm.eh.exception( ) ; [#uses=2] - %eh_select3328 = call i32 (i8*, i8*, ...)* @llvm.eh.selector( i8* %eh_ptr3326, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), %struct.exception* @constraint_error, i32* @__gnat_others_value ) ; [#uses=1] + %eh_select3328 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32( i8* %eh_ptr3326, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), %struct.exception* @constraint_error, i32* @__gnat_others_value ) ; [#uses=1] invoke void @__gnat_end_handler( i8* %eh_exception.416084.0 ) to label %cleanup3348 unwind label %unwind3062 @@ -1762,7 +1762,7 @@ cleanup3348: ; preds = %unwind3325, %cleanup3313, %unwind3287, %unwind3112 %eh_selector.35 = phi i32 [ %eh_select3115, %unwind3112 ], [ %eh_select3290, %unwind3287 ], [ %eh_select3175, %cleanup3313 ], [ %eh_select3328, %unwind3325 ] ; [#uses=2] %eh_exception.39 = phi i8* [ %eh_ptr3113, %unwind3112 ], [ %eh_ptr3288, %unwind3287 ], [ %eh_ptr3173, %cleanup3313 ], [ %eh_ptr3326, %unwind3325 ] ; [#uses=2] - %eh_typeid3349 = call i32 @llvm.eh.typeid.for( i8* getelementptr (%struct.exception* @constraint_error, i32 0, i32 0) ) ; [#uses=1] + %eh_typeid3349 = call i32 @llvm.eh.typeid.for.i32( i8* getelementptr (%struct.exception* @constraint_error, i32 0, i32 0) ) ; [#uses=1] %tmp3351 = icmp eq i32 %eh_selector.35, %eh_typeid3349 ; [#uses=1] br i1 %tmp3351, label %eh_then3352, label %eh_else3366 @@ -1789,7 +1789,7 @@ eh_else3366: ; preds = %cleanup3348, %unwind3062 %eh_selector.356072.1 = phi i32 [ %eh_select3065, %unwind3062 ], [ %eh_selector.35, %cleanup3348 ] ; [#uses=1] %eh_exception.396074.1 = phi i8* [ %eh_ptr3063, %unwind3062 ], [ %eh_exception.39, %cleanup3348 ] ; [#uses=4] - %eh_typeid3367 = call i32 @llvm.eh.typeid.for( i8* bitcast (i32* @__gnat_others_value to i8*) ) ; [#uses=1] + %eh_typeid3367 = call i32 @llvm.eh.typeid.for.i32( i8* bitcast (i32* @__gnat_others_value to i8*) ) ; [#uses=1] %tmp3369 = icmp eq i32 %eh_selector.356072.1, %eh_typeid3367 ; [#uses=1] br i1 %tmp3369, label %eh_then3370, label %Unwind @@ -1823,9 +1823,9 @@ unwind3393: ; preds = %cond_true3555, %cond_true3543, %cond_next3451, %cond_true3448, %cond_true3420, %finally3347 %eh_ptr3394 = call i8* @llvm.eh.exception( ) ; [#uses=5] - %eh_select3396 = call i32 (i8*, i8*, ...)* @llvm.eh.selector( i8* %eh_ptr3394, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), i32* @__gnat_others_value ) ; [#uses=1] + %eh_select3396 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32( i8* %eh_ptr3394, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), i32* @__gnat_others_value ) ; [#uses=1] call void @llvm.stackrestore( i8* %tmp3392 ) - %eh_typeid3571 = call i32 @llvm.eh.typeid.for( i8* bitcast (i32* @__gnat_others_value to i8*) ) ; [#uses=1] + %eh_typeid3571 = call i32 @llvm.eh.typeid.for.i32( i8* bitcast (i32* @__gnat_others_value to i8*) ) ; [#uses=1] %tmp3573 = icmp eq i32 %eh_select3396, %eh_typeid3571 ; [#uses=1] br i1 %tmp3573, label %eh_then3574, label %Unwind @@ -1918,8 +1918,8 @@ %tue.3 = phi i8 [ %tmp204205, %cond_true3617 ], [ %tue.2, %bb3743 ], [ %tue.2, %bb3689 ], [ %tue.1, %bb3635 ], [ %tue.2, %cond_true3675 ], [ %tue.2, %cond_true3729 ] ; [#uses=1] %mon.3 = phi i8 [ %tmp170171, %cond_true3617 ], [ %mon.2, %bb3743 ], [ %mon.1, %bb3689 ], [ %tmp170171, %bb3635 ], [ %tmp170171, %cond_true3675 ], [ %mon.2, %cond_true3729 ] ; [#uses=1] %eh_ptr3619 = call i8* @llvm.eh.exception( ) ; [#uses=5] - %eh_select3621 = call i32 (i8*, i8*, ...)* @llvm.eh.selector( i8* %eh_ptr3619, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), i32* @__gnat_others_value ) ; [#uses=1] - %eh_typeid3854 = call i32 @llvm.eh.typeid.for( i8* bitcast (i32* @__gnat_others_value to i8*) ) ; [#uses=1] + %eh_select3621 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32( i8* %eh_ptr3619, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), i32* @__gnat_others_value ) ; [#uses=1] + %eh_typeid3854 = call i32 @llvm.eh.typeid.for.i32( i8* bitcast (i32* @__gnat_others_value to i8*) ) ; [#uses=1] %tmp3856 = icmp eq i32 %eh_select3621, %eh_typeid3854 ; [#uses=1] br i1 %tmp3856, label %eh_then3857, label %Unwind @@ -2048,8 +2048,8 @@ unwind3880: ; preds = %cond_true4138, %invcont4122, %cond_next4120, %cond_true4117, %cond_true4027, %cond_next3938, %cond_true3935, %cond_true3907, %finally3852 %eh_ptr3881 = call i8* @llvm.eh.exception( ) ; [#uses=5] - %eh_select3883 = call i32 (i8*, i8*, ...)* @llvm.eh.selector( i8* %eh_ptr3881, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), i32* @__gnat_others_value ) ; [#uses=1] - %eh_typeid4149 = call i32 @llvm.eh.typeid.for( i8* bitcast (i32* @__gnat_others_value to i8*) ) ; [#uses=1] + %eh_select3883 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32( i8* %eh_ptr3881, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), i32* @__gnat_others_value ) ; [#uses=1] + %eh_typeid4149 = call i32 @llvm.eh.typeid.for.i32( i8* bitcast (i32* @__gnat_others_value to i8*) ) ; [#uses=1] %tmp4151 = icmp eq i32 %eh_select3883, %eh_typeid4149 ; [#uses=1] br i1 %tmp4151, label %eh_then4152, label %Unwind @@ -2164,8 +2164,8 @@ unwind4175: ; preds = %cond_true4292, %cond_true4187, %finally4147 %eh_ptr4176 = call i8* @llvm.eh.exception( ) ; [#uses=5] - %eh_select4178 = call i32 (i8*, i8*, ...)* @llvm.eh.selector( i8* %eh_ptr4176, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), i32* @__gnat_others_value ) ; [#uses=1] - %eh_typeid4304 = call i32 @llvm.eh.typeid.for( i8* bitcast (i32* @__gnat_others_value to i8*) ) ; [#uses=1] + %eh_select4178 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32( i8* %eh_ptr4176, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), i32* @__gnat_others_value ) ; [#uses=1] + %eh_typeid4304 = call i32 @llvm.eh.typeid.for.i32( i8* bitcast (i32* @__gnat_others_value to i8*) ) ; [#uses=1] %tmp4306 = icmp eq i32 %eh_select4178, %eh_typeid4304 ; [#uses=1] br i1 %tmp4306, label %eh_then4307, label %cleanup4334 @@ -2283,8 +2283,8 @@ unwind4453: ; preds = %cond_true4609, %cond_true4504, %cond_true4481 %eh_ptr4454 = call i8* @llvm.eh.exception( ) ; [#uses=4] - %eh_select4456 = call i32 (i8*, i8*, ...)* @llvm.eh.selector( i8* %eh_ptr4454, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), i32* @__gnat_others_value ) ; [#uses=1] - %eh_typeid4710 = call i32 @llvm.eh.typeid.for( i8* bitcast (i32* @__gnat_others_value to i8*) ) ; [#uses=1] + %eh_select4456 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32( i8* %eh_ptr4454, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), i32* @__gnat_others_value ) ; [#uses=1] + %eh_typeid4710 = call i32 @llvm.eh.typeid.for.i32( i8* bitcast (i32* @__gnat_others_value to i8*) ) ; [#uses=1] %tmp4712 = icmp eq i32 %eh_select4456, %eh_typeid4710 ; [#uses=1] br i1 %tmp4712, label %eh_then4713, label %cleanup4740 @@ -2449,9 +2449,9 @@ unwind4770: ; preds = %cond_next4776 %eh_ptr4771 = call i8* @llvm.eh.exception( ) ; [#uses=5] - %eh_select4773 = call i32 (i8*, i8*, ...)* @llvm.eh.selector( i8* %eh_ptr4771, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), i32* @__gnat_others_value ) ; [#uses=1] + %eh_select4773 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32( i8* %eh_ptr4771, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), i32* @__gnat_others_value ) ; [#uses=1] call void @llvm.stackrestore( i8* %tmp4749 ) - %eh_typeid4874 = call i32 @llvm.eh.typeid.for( i8* bitcast (i32* @__gnat_others_value to i8*) ) ; [#uses=1] + %eh_typeid4874 = call i32 @llvm.eh.typeid.for.i32( i8* bitcast (i32* @__gnat_others_value to i8*) ) ; [#uses=1] %tmp4876 = icmp eq i32 %eh_select4773, %eh_typeid4874 ; [#uses=1] br i1 %tmp4876, label %eh_then4877, label %Unwind @@ -2505,8 +2505,8 @@ unwind4919: ; preds = %cond_next4925, %cond_true4918 %tue.96161.2 = phi i8 [ %tue.96161.0, %cond_true4918 ], [ %tue.96161.1, %cond_next4925 ] ; [#uses=1] %eh_ptr4920 = call i8* @llvm.eh.exception( ) ; [#uses=5] - %eh_select4922 = call i32 (i8*, i8*, ...)* @llvm.eh.selector( i8* %eh_ptr4920, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), i32* @__gnat_others_value ) ; [#uses=1] - %eh_typeid4987 = call i32 @llvm.eh.typeid.for( i8* bitcast (i32* @__gnat_others_value to i8*) ) ; [#uses=1] + %eh_select4922 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32( i8* %eh_ptr4920, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), i32* @__gnat_others_value ) ; [#uses=1] + %eh_typeid4987 = call i32 @llvm.eh.typeid.for.i32( i8* bitcast (i32* @__gnat_others_value to i8*) ) ; [#uses=1] %tmp4989 = icmp eq i32 %eh_select4922, %eh_typeid4987 ; [#uses=1] br i1 %tmp4989, label %eh_then4990, label %Unwind @@ -2573,8 +2573,8 @@ %tue.96161.6 = phi i8 [ %tue.96161.4, %cond_true5031 ], [ %tue.96161.5, %cond_next5038 ] ; [#uses=1] %mon.86171.2 = phi i8 [ %mon.86171.0, %cond_true5031 ], [ %mon.86171.1, %cond_next5038 ] ; [#uses=1] %eh_ptr5033 = call i8* @llvm.eh.exception( ) ; [#uses=5] - %eh_select5035 = call i32 (i8*, i8*, ...)* @llvm.eh.selector( i8* %eh_ptr5033, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), i32* @__gnat_others_value ) ; [#uses=1] - %eh_typeid5100 = call i32 @llvm.eh.typeid.for( i8* bitcast (i32* @__gnat_others_value to i8*) ) ; [#uses=1] + %eh_select5035 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32( i8* %eh_ptr5033, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), i32* @__gnat_others_value ) ; [#uses=1] + %eh_typeid5100 = call i32 @llvm.eh.typeid.for.i32( i8* bitcast (i32* @__gnat_others_value to i8*) ) ; [#uses=1] %tmp5102 = icmp eq i32 %eh_select5035, %eh_typeid5100 ; [#uses=1] br i1 %tmp5102, label %eh_then5103, label %Unwind @@ -2653,8 +2653,8 @@ unwind5266: ; preds = %cond_true5462, %invcont5429, %cond_next5401, %cond_true5393, %cond_next5374, %bb5359, %cond_next5347, %invcont5330, %invcont5305, %invcont5303, %invcont5294, %bb5293, %cond_next5281, %cond_next5271, %cond_true5259 %eh_ptr5267 = call i8* @llvm.eh.exception( ) ; [#uses=5] - %eh_select5269 = call i32 (i8*, i8*, ...)* @llvm.eh.selector( i8* %eh_ptr5267, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), i32* @__gnat_others_value ) ; [#uses=1] - %eh_typeid5473 = call i32 @llvm.eh.typeid.for( i8* bitcast (i32* @__gnat_others_value to i8*) ) ; [#uses=1] + %eh_select5269 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32( i8* %eh_ptr5267, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), i32* @__gnat_others_value ) ; [#uses=1] + %eh_typeid5473 = call i32 @llvm.eh.typeid.for.i32( i8* bitcast (i32* @__gnat_others_value to i8*) ) ; [#uses=1] %tmp5475 = icmp eq i32 %eh_select5269, %eh_typeid5473 ; [#uses=1] br i1 %tmp5475, label %eh_then5476, label %Unwind @@ -2821,9 +2821,9 @@ declare i8* @llvm.eh.exception() -declare i32 @llvm.eh.selector(i8*, i8*, ...) +declare i32 @llvm.eh.selector.i32(i8*, i8*, ...) -declare i32 @llvm.eh.typeid.for(i8*) +declare i32 @llvm.eh.typeid.for.i32(i8*) declare i32 @__gnat_eh_personality(...) Modified: llvm/trunk/test/CodeGen/X86/2007-09-03-X86-64-EhSelector.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/2007-09-03-X86-64-EhSelector.ll?rev=41763&r1=41762&r2=41763&view=diff ============================================================================== --- llvm/trunk/test/CodeGen/X86/2007-09-03-X86-64-EhSelector.ll (original) +++ llvm/trunk/test/CodeGen/X86/2007-09-03-X86-64-EhSelector.ll Fri Sep 7 06:39:35 2007 @@ -14,15 +14,15 @@ to label %return unwind label %unwind10 unwind10: ; preds = %eh_then - %eh_select13 = tail call i32 (i8*, i8*, ...)* @llvm.eh.selector( i8* null, i8* bitcast (void ()* @__gxx_personality_v0 to i8*), i32 1 ) ; [#uses=2] - %tmp18 = icmp slt i32 %eh_select13, 0 ; [#uses=1] + %eh_select13 = tail call i64 (i8*, i8*, ...)* @llvm.eh.selector.i64( i8* null, i8* bitcast (void ()* @__gxx_personality_v0 to i8*), i32 1 ) ; [#uses=2] + %tmp18 = icmp slt i64 %eh_select13, 0 ; [#uses=1] br i1 %tmp18, label %filter, label %cleanup20 filter: ; preds = %unwind10 unreachable cleanup20: ; preds = %unwind10, %unwind - %eh_selector.0 = phi i32 [ 0, %unwind ], [ %eh_select13, %unwind10 ] ; [#uses=0] + %eh_selector.0 = phi i64 [ 0, %unwind ], [ %eh_select13, %unwind10 ] ; [#uses=0] ret void return: ; preds = %eh_then, %entry @@ -31,7 +31,7 @@ declare void @_Z1gv() -declare i32 @llvm.eh.selector(i8*, i8*, ...) +declare i64 @llvm.eh.selector.i64(i8*, i8*, ...) declare void @__gxx_personality_v0() From asl at math.spbu.ru Fri Sep 7 06:41:02 2007 From: asl at math.spbu.ru (Anton Korobeynikov) Date: Fri, 07 Sep 2007 11:41:02 -0000 Subject: [llvm-commits] [llvm-gcc-4.0] r41764 - /llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp Message-ID: <200709071141.l87Bf23A014400@zion.cs.uiuc.edu> Author: asl Date: Fri Sep 7 06:41:01 2007 New Revision: 41764 URL: http://llvm.org/viewvc/llvm-project?rev=41764&view=rev Log: Frontend support for new eh intrinsics Modified: llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp Modified: llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp?rev=41764&r1=41763&r2=41764&view=diff ============================================================================== --- llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp (original) +++ llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp Fri Sep 7 06:41:01 2007 @@ -2091,19 +2091,25 @@ void TreeToLLVM::CreateExceptionValues() { // Check to see if the exception values have been constructed. if (ExceptionValue) return; + + const Type *IntPtr = TD.getIntPtrType(); ExceptionValue = CreateTemporary(PointerType::get(Type::Int8Ty)); ExceptionValue->setName("eh_exception"); - ExceptionSelectorValue = CreateTemporary(Type::Int32Ty); + ExceptionSelectorValue = CreateTemporary(IntPtr); ExceptionSelectorValue->setName("eh_selector"); FuncEHException = Intrinsic::getDeclaration(TheModule, Intrinsic::eh_exception); FuncEHSelector = Intrinsic::getDeclaration(TheModule, - Intrinsic::eh_selector); + (IntPtr == Type::Int32Ty ? + Intrinsic::eh_selector_i32 : + Intrinsic::eh_selector_i64)); FuncEHGetTypeID = Intrinsic::getDeclaration(TheModule, - Intrinsic::eh_typeid_for); + (IntPtr == Type::Int32Ty ? + Intrinsic::eh_typeid_for_i32 : + Intrinsic::eh_typeid_for_i64)); FuncCPPPersonality = TheModule->getOrInsertFunction("__gxx_personality_v0", From asl at math.spbu.ru Fri Sep 7 06:42:00 2007 From: asl at math.spbu.ru (Anton Korobeynikov) Date: Fri, 07 Sep 2007 11:42:00 -0000 Subject: [llvm-commits] [llvm-gcc-4.2] r41765 - /llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp Message-ID: <200709071142.l87Bg1Sr014429@zion.cs.uiuc.edu> Author: asl Date: Fri Sep 7 06:42:00 2007 New Revision: 41765 URL: http://llvm.org/viewvc/llvm-project?rev=41765&view=rev Log: Frontend support for new EH intrinsics Modified: llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp Modified: llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp?rev=41765&r1=41764&r2=41765&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp (original) +++ llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp Fri Sep 7 06:42:00 2007 @@ -1736,18 +1736,24 @@ // Check to see if the exception values have been constructed. if (ExceptionValue) return; + const Type *IntPtr = TD.getIntPtrType(); + ExceptionValue = CreateTemporary(PointerType::get(Type::Int8Ty)); ExceptionValue->setName("eh_exception"); - ExceptionSelectorValue = CreateTemporary(Type::Int32Ty); + ExceptionSelectorValue = CreateTemporary(IntPtr); ExceptionSelectorValue->setName("eh_selector"); FuncEHException = Intrinsic::getDeclaration(TheModule, Intrinsic::eh_exception); FuncEHSelector = Intrinsic::getDeclaration(TheModule, - Intrinsic::eh_selector); + (IntPtr == Type::Int32Ty ? + Intrinsic::eh_selector_i32 : + Intrinsic::eh_selector_i64)); FuncEHGetTypeID = Intrinsic::getDeclaration(TheModule, - Intrinsic::eh_typeid_for); + (IntPtr == Type::Int32Ty ? + Intrinsic::eh_typeid_for_i32 : + Intrinsic::eh_typeid_for_i64)); assert(llvm_eh_personality_libfunc && "no exception handling personality function!"); From baldrick at free.fr Fri Sep 7 07:14:41 2007 From: baldrick at free.fr (Duncan Sands) Date: Fri, 07 Sep 2007 12:14:41 -0000 Subject: [llvm-commits] [llvm-gcc-4.2] r41766 - in /llvm-gcc-4.2/trunk/gcc/ada: Makefile.in raise-gcc.c Message-ID: <200709071214.l87CEfN2015451@zion.cs.uiuc.edu> Author: baldrick Date: Fri Sep 7 07:14:39 2007 New Revision: 41766 URL: http://llvm.org/viewvc/llvm-project?rev=41766&view=rev Log: Revert r40096. It turns out that raise-gcc does use tm.h after all, for checking whether EH_RETURN_DATA_REGNO is defined. Instead, work around the Apple changes to options.h by defining IN_TARGET_LIBS when compiling the Ada runtime. Modified: llvm-gcc-4.2/trunk/gcc/ada/Makefile.in llvm-gcc-4.2/trunk/gcc/ada/raise-gcc.c Modified: llvm-gcc-4.2/trunk/gcc/ada/Makefile.in URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/ada/Makefile.in?rev=41766&r1=41765&r2=41766&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/ada/Makefile.in (original) +++ llvm-gcc-4.2/trunk/gcc/ada/Makefile.in Fri Sep 7 07:14:39 2007 @@ -123,8 +123,10 @@ FORCE_DEBUG_ADAFLAGS = -g GNATLIBFLAGS = -gnatpg -nostdinc GNATLIBCFLAGS = -g -O2 +# LLVM local begin GNATLIBCFLAGS_FOR_C = $(GNATLIBCFLAGS) $(TARGET_LIBGCC2_CFLAGS) -fexceptions \ - -DIN_RTS + -DIN_RTS -DIN_TARGET_LIBS +# LLVM local end ALL_ADA_CFLAGS = $(X_ADA_CFLAGS) $(T_ADA_CFLAGS) $(ADA_CFLAGS) ALL_ADAFLAGS = $(CFLAGS) $(ALL_ADA_CFLAGS) $(X_ADAFLAGS) $(T_ADAFLAGS) \ $(ADAFLAGS) Modified: llvm-gcc-4.2/trunk/gcc/ada/raise-gcc.c URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/ada/raise-gcc.c?rev=41766&r1=41765&r2=41766&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/ada/raise-gcc.c (original) +++ llvm-gcc-4.2/trunk/gcc/ada/raise-gcc.c Fri Sep 7 07:14:39 2007 @@ -39,14 +39,10 @@ it does. To avoid branching raise.c just for that purpose, we kludge by looking for a symbol always defined by tm.h and if it's not defined, we include it. */ -/* LLVM LOCAL begin */ -/* #ifndef FIRST_PSEUDO_REGISTER #include "coretypes.h" #include "tm.h" #endif -*/ -/* LLVM LOCAL end */ #include "tsystem.h" #include #include From rafael.espindola at gmail.com Fri Sep 7 09:52:15 2007 From: rafael.espindola at gmail.com (Rafael Espindola) Date: Fri, 07 Sep 2007 14:52:15 -0000 Subject: [llvm-commits] [llvm] r41768 - in /llvm/trunk: include/llvm/Target/TargetData.h lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp lib/Target/TargetData.cpp lib/Target/X86/X86Subtarget.h test/CodeGen/X86/byval3.ll Message-ID: <200709071452.l87EqFoR021755@zion.cs.uiuc.edu> Author: rafael Date: Fri Sep 7 09:52:14 2007 New Revision: 41768 URL: http://llvm.org/viewvc/llvm-project?rev=41768&view=rev Log: Add support for having different alignment for objects on call frames. The x86-64 ABI states that objects passed on the stack have 8 byte alignment. Implement that. Added: llvm/trunk/test/CodeGen/X86/byval3.ll Modified: llvm/trunk/include/llvm/Target/TargetData.h llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp llvm/trunk/lib/Target/TargetData.cpp llvm/trunk/lib/Target/X86/X86Subtarget.h Modified: llvm/trunk/include/llvm/Target/TargetData.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Target/TargetData.h?rev=41768&r1=41767&r2=41768&view=diff ============================================================================== --- llvm/trunk/include/llvm/Target/TargetData.h (original) +++ llvm/trunk/include/llvm/Target/TargetData.h Fri Sep 7 09:52:14 2007 @@ -38,7 +38,8 @@ INTEGER_ALIGN = 'i', ///< Integer type alignment VECTOR_ALIGN = 'v', ///< Vector type alignment FLOAT_ALIGN = 'f', ///< Floating point type alignment - AGGREGATE_ALIGN = 'a' ///< Aggregate alignment + AGGREGATE_ALIGN = 'a', ///< Aggregate alignment + STACK_ALIGN = 's' ///< Stack objects alignment }; /// Target alignment element. /// @@ -166,6 +167,11 @@ /// specified type. unsigned char getABITypeAlignment(const Type *Ty) const; + /// getCallFrameTypeAlignment - Return the minimum ABI-required alignment + /// for the specified type when it is part of a call frame. + unsigned char getCallFrameTypeAlignment(const Type *Ty) const; + + /// getPrefTypeAlignment - Return the preferred stack/global alignment for /// the specified type. unsigned char getPrefTypeAlignment(const Type *Ty) const; Modified: llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp?rev=41768&r1=41767&r2=41768&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp (original) +++ llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp Fri Sep 7 09:52:14 2007 @@ -3870,7 +3870,8 @@ Flags |= ISD::ParamFlags::ByVal; const PointerType *Ty = cast(I->getType()); const StructType *STy = cast(Ty->getElementType()); - unsigned StructAlign = Log2_32(getTargetData()->getABITypeAlignment(STy)); + unsigned StructAlign = + Log2_32(getTargetData()->getCallFrameTypeAlignment(STy)); unsigned StructSize = getTargetData()->getTypeSize(STy); Flags |= (StructAlign << ISD::ParamFlags::ByValAlignOffs); Flags |= (StructSize << ISD::ParamFlags::ByValSizeOffs); @@ -3999,7 +4000,8 @@ Flags |= ISD::ParamFlags::ByVal; const PointerType *Ty = cast(Args[i].Ty); const StructType *STy = cast(Ty->getElementType()); - unsigned StructAlign = Log2_32(getTargetData()->getABITypeAlignment(STy)); + unsigned StructAlign = + Log2_32(getTargetData()->getCallFrameTypeAlignment(STy)); unsigned StructSize = getTargetData()->getTypeSize(STy); Flags |= (StructAlign << ISD::ParamFlags::ByValAlignOffs); Flags |= (StructSize << ISD::ParamFlags::ByValSizeOffs); Modified: llvm/trunk/lib/Target/TargetData.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/TargetData.cpp?rev=41768&r1=41767&r2=41768&view=diff ============================================================================== --- llvm/trunk/lib/Target/TargetData.cpp (original) +++ llvm/trunk/lib/Target/TargetData.cpp Fri Sep 7 09:52:14 2007 @@ -182,7 +182,8 @@ setAlignment(VECTOR_ALIGN, 8, 8, 64); // v2i32 setAlignment(VECTOR_ALIGN, 16, 16, 128); // v16i8, v8i16, v4i32, ... setAlignment(AGGREGATE_ALIGN, 0, 8, 0); // struct, union, class, ... - + setAlignment(STACK_ALIGN, 0, 8, 0); // objects on the stack + while (!temp.empty()) { std::string token = getToken(temp, "-"); std::string arg0 = getToken(token, ":"); @@ -204,10 +205,16 @@ case 'i': case 'v': case 'f': - case 'a': { - AlignTypeEnum align_type = - (*p == 'i' ? INTEGER_ALIGN : (*p == 'f' ? FLOAT_ALIGN : - (*p == 'v' ? VECTOR_ALIGN : AGGREGATE_ALIGN))); + case 'a': + case 's': { + AlignTypeEnum align_type; + switch(*p) { + case 'i': align_type = INTEGER_ALIGN; break; + case 'v': align_type = VECTOR_ALIGN; break; + case 'f': align_type = FLOAT_ALIGN; break; + case 'a': align_type = AGGREGATE_ALIGN; break; + case 's': align_type = STACK_ALIGN; break; + } uint32_t size = (uint32_t) atoi(++p); unsigned char abi_align = atoi(getToken(token, ":").c_str()) / 8; unsigned char pref_align = atoi(getToken(token, ":").c_str()) / 8; @@ -529,6 +536,14 @@ return getAlignment(Ty, true); } +unsigned char TargetData::getCallFrameTypeAlignment(const Type *Ty) const { + for (unsigned i = 0, e = Alignments.size(); i != e; ++i) + if (Alignments[i].AlignType == STACK_ALIGN) + return Alignments[i].ABIAlign; + + return getABITypeAlignment(Ty); +} + unsigned char TargetData::getPrefTypeAlignment(const Type *Ty) const { return getAlignment(Ty, false); } Modified: llvm/trunk/lib/Target/X86/X86Subtarget.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86Subtarget.h?rev=41768&r1=41767&r2=41768&view=diff ============================================================================== --- llvm/trunk/lib/Target/X86/X86Subtarget.h (original) +++ llvm/trunk/lib/Target/X86/X86Subtarget.h Fri Sep 7 09:52:14 2007 @@ -146,7 +146,7 @@ std::string getDataLayout() const { const char *p; if (is64Bit()) - p = "e-p:64:64-f64:64:64-i64:64:64-f80:128:128"; + p = "e-p:64:64-s:64-f64:64:64-i64:64:64-f80:128:128"; else { if (isTargetDarwin()) p = "e-p:32:32-f64:32:64-i64:32:64-f80:128:128"; Added: llvm/trunk/test/CodeGen/X86/byval3.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/byval3.ll?rev=41768&view=auto ============================================================================== --- llvm/trunk/test/CodeGen/X86/byval3.ll (added) +++ llvm/trunk/test/CodeGen/X86/byval3.ll Fri Sep 7 09:52:14 2007 @@ -0,0 +1,25 @@ +; RUN: llvm-as < %s | llc -march=x86-64 | grep rep.movsl | count 2 + +%struct.s = type { i32, i32, i32, i32, i32, i32 } + +define void @g(i32 %a1, i32 %a2, i32 %a3, i32 %a4, i32 %a5, i32 %a6) { +entry: + %d = alloca %struct.s, align 16 + %tmp = getelementptr %struct.s* %d, i32 0, i32 0 + store i32 %a1, i32* %tmp, align 16 + %tmp2 = getelementptr %struct.s* %d, i32 0, i32 1 + store i32 %a2, i32* %tmp2, align 16 + %tmp4 = getelementptr %struct.s* %d, i32 0, i32 2 + store i32 %a3, i32* %tmp4, align 16 + %tmp6 = getelementptr %struct.s* %d, i32 0, i32 3 + store i32 %a4, i32* %tmp6, align 16 + %tmp8 = getelementptr %struct.s* %d, i32 0, i32 4 + store i32 %a5, i32* %tmp8, align 16 + %tmp10 = getelementptr %struct.s* %d, i32 0, i32 5 + store i32 %a6, i32* %tmp10, align 16 + call void @f( %struct.s* %d byval) + call void @f( %struct.s* %d byval) + ret void +} + +declare void @f(%struct.s* byval) From clattner at apple.com Fri Sep 7 13:29:33 2007 From: clattner at apple.com (Chris Lattner) Date: Fri, 7 Sep 2007 11:29:33 -0700 Subject: [llvm-commits] [llvm-gcc-4.0] r41748 - in /llvm-gcc-4.0/trunk/gcc: llvm-backend.cpp llvm-convert.cpp llvm-internal.h In-Reply-To: <200709061900.l86J0LQq021399@zion.cs.uiuc.edu> References: <200709061900.l86J0LQq021399@zion.cs.uiuc.edu> Message-ID: > URL: http://llvm.org/viewvc/llvm-project?rev=41748&view=rev > Log: > Replace GV from AttributeUsedGlobals list. Hey Devang, There is a problem with this patch: this will build the llvm.used global in nondeterministic order based on how the addresses of the GV's hash in the smallptrset. To avoid this problem, you should use a SetVector or something like it. -Chris > Modified: > llvm-gcc-4.0/trunk/gcc/llvm-backend.cpp > llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp > llvm-gcc-4.0/trunk/gcc/llvm-internal.h > > Modified: llvm-gcc-4.0/trunk/gcc/llvm-backend.cpp > URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.0/trunk/gcc/ > llvm-backend.cpp?rev=41748&r1=41747&r2=41748&view=diff > > ====================================================================== > ======== > --- llvm-gcc-4.0/trunk/gcc/llvm-backend.cpp (original) > +++ llvm-gcc-4.0/trunk/gcc/llvm-backend.cpp Thu Sep 6 14:00:20 2007 > @@ -84,7 +84,7 @@ > static cl::opt DisableLLVMOptimizations("disable-llvm-optzns"); > > std::vector > StaticCtors, StaticDtors; > -std::vector AttributeUsedGlobals; > +SmallPtrSet AttributeUsedGlobals; > std::vector AttributeNoinlineFunctions; > std::vector AttributeAnnotateGlobals; > > @@ -439,6 +439,7 @@ > > createOptimizationPasses(); > > + AttributeUsedGlobals.clear(); > timevar_pop(TV_LLVM_INIT); > } > > @@ -479,9 +480,15 @@ > CreateStructorsList(StaticDtors, "llvm.global_dtors"); > > if (!AttributeUsedGlobals.empty()) { > - const Type *SBP = PointerType::get(Type::Int8Ty); > - ArrayType *AT = ArrayType::get(SBP, AttributeUsedGlobals.size()); > - Constant *Init = ConstantArray::get(AT, AttributeUsedGlobals); > + std::vector AUGs; > + const Type *SBP= PointerType::get(Type::Int8Ty); > + for (SmallPtrSet::iterator AI = > AttributeUsedGlobals.begin(), > + AE = AttributeUsedGlobals.end(); AI != AE; ++AI) { > + Constant *C = *AI; > + AUGs.push_back(ConstantExpr::getBitCast(C, SBP)); > + } > + ArrayType *AT = ArrayType::get(SBP, AUGs.size()); > + Constant *Init = ConstantArray::get(AT, AUGs); > GlobalValue* gv = new GlobalVariable(AT, false, > GlobalValue::AppendingLinkage, Init, > "llvm.used", TheModule); > @@ -796,6 +803,10 @@ > > GlobalValue::ExternalLinkage, 0, > GV->getName(), > TheModule); > GV->replaceAllUsesWith(ConstantExpr::getBitCast(NGV, GV- > >getType())); > + if (AttributeUsedGlobals.count(GV)) { > + AttributeUsedGlobals.erase(GV); > + AttributeUsedGlobals.insert(NGV); > + } > delete GV; > SET_DECL_LLVM(decl, NGV); > GV = NGV; > @@ -853,10 +864,8 @@ > } > > // Handle used decls > - if (DECL_PRESERVE_P (decl)) { > - const Type *SBP= PointerType::get(Type::Int8Ty); > - AttributeUsedGlobals.push_back(ConstantExpr::getBitCast(GV, > SBP)); > - } > + if (DECL_PRESERVE_P (decl)) > + AttributeUsedGlobals.insert(GV); > > // Add annotate attributes for globals > if (DECL_ATTRIBUTES(decl)) > > Modified: llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp > URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.0/trunk/gcc/ > llvm-convert.cpp?rev=41748&r1=41747&r2=41748&view=diff > > ====================================================================== > ======== > --- llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp (original) > +++ llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp Thu Sep 6 14:00:20 2007 > @@ -594,10 +594,8 @@ > Fn->setSection(TREE_STRING_POINTER(DECL_SECTION_NAME(FnDecl))); > > // Handle used Functions > - if (DECL_PRESERVE_P (FnDecl)) { > - const Type *SBP= PointerType::get(Type::Int8Ty); > - AttributeUsedGlobals.push_back(ConstantExpr::getBitCast(Fn,SBP)); > - } > + if (DECL_PRESERVE_P (FnDecl)) > + AttributeUsedGlobals.insert(Fn); > > // Handle noinline Functions > if (lookup_attribute ("noinline", DECL_ATTRIBUTES (FnDecl))) { > > Modified: llvm-gcc-4.0/trunk/gcc/llvm-internal.h > URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.0/trunk/gcc/ > llvm-internal.h?rev=41748&r1=41747&r2=41748&view=diff > > ====================================================================== > ======== > --- llvm-gcc-4.0/trunk/gcc/llvm-internal.h (original) > +++ llvm-gcc-4.0/trunk/gcc/llvm-internal.h Thu Sep 6 14:00:20 2007 > @@ -34,6 +34,7 @@ > #include > #include "llvm/Intrinsics.h" > #include "llvm/ADT/SmallVector.h" > +#include "llvm/ADT/SmallPtrSet.h" > #include "llvm/Support/DataTypes.h" > #include "llvm/Support/LLVMBuilder.h" > #include "llvm/Support/Streams.h" > @@ -86,7 +87,7 @@ > extern std::vector > StaticCtors, > StaticDtors; > > /// AttributeUsedGlobals - The list of globals that are marked > attribute(used). > -extern std::vector AttributeUsedGlobals; > +extern SmallPtrSet AttributeUsedGlobals; > > /// AttributeNoinlineFunctions - The list of functions that are > /// marked attribute(noinline) > > > _______________________________________________ > llvm-commits mailing list > llvm-commits at cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits From dalej at apple.com Fri Sep 7 13:31:51 2007 From: dalej at apple.com (Dale Johannesen) Date: Fri, 07 Sep 2007 18:31:51 -0000 Subject: [llvm-commits] [llvm] r41769 - in /llvm/trunk/lib/Bitcode: Reader/BitcodeReader.cpp Writer/BitcodeWriter.cpp Message-ID: <200709071831.l87IVpn6013614@zion.cs.uiuc.edu> Author: johannes Date: Fri Sep 7 13:31:50 2007 New Revision: 41769 URL: http://llvm.org/viewvc/llvm-project?rev=41769&view=rev Log: Revert previous change to IR. Modified: llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp Modified: llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp?rev=41769&r1=41768&r2=41769&view=diff ============================================================================== --- llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp (original) +++ llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp Fri Sep 7 13:31:50 2007 @@ -626,7 +626,7 @@ if (Record.empty()) return Error("Invalid FLOAT record"); if (CurTy == Type::FloatTy) - V = ConstantFP::get(CurTy, APFloat((float)BitsToDouble(Record[0]))); + V = ConstantFP::get(CurTy, APFloat(BitsToFloat(Record[0]))); else if (CurTy == Type::DoubleTy) V = ConstantFP::get(CurTy, APFloat(BitsToDouble(Record[0]))); // FIXME: Make long double constants work. BitsToDouble does not make it. Modified: llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp?rev=41769&r1=41768&r2=41769&view=diff ============================================================================== --- llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp (original) +++ llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp Fri Sep 7 13:31:50 2007 @@ -526,10 +526,9 @@ } else if (const ConstantFP *CFP = dyn_cast(C)) { Code = bitc::CST_CODE_FLOAT; const Type *Ty = CFP->getType(); - if (Ty == Type::FloatTy) { - Record.push_back(DoubleToBits((double)CFP->getValueAPF(). - convertToFloat())); - } else if (Ty == Type::DoubleTy) { + if (Ty == Type::FloatTy) + Record.push_back(FloatToBits(CFP->getValueAPF().convertToFloat())); + else if (Ty == Type::DoubleTy) { Record.push_back(DoubleToBits(CFP->getValueAPF().convertToDouble())); // FIXME: make long double constants work. } else if (Ty == Type::X86_FP80Ty || From clattner at apple.com Fri Sep 7 13:47:12 2007 From: clattner at apple.com (Chris Lattner) Date: Fri, 7 Sep 2007 11:47:12 -0700 Subject: [llvm-commits] [llvm] r41747 - in /llvm/trunk: include/llvm/ lib/Analysis/ lib/AsmParser/ lib/Bitcode/Reader/ lib/Bitcode/Writer/ lib/CodeGen/ lib/CodeGen/SelectionDAG/ lib/ExecutionEngine/ lib/ExecutionEngine/JIT/ lib/Target/CBackend/ lib/Target/MSIL/ lib/Target/X86/ lib/Transforms/IPO/ lib/Transforms/Scalar/ lib/VMCore/ tools/llvm-upgrade/ tools/llvm2cpp/ In-Reply-To: <200709061813.l86IDkT2019696@zion.cs.uiuc.edu> References: <200709061813.l86IDkT2019696@zion.cs.uiuc.edu> Message-ID: <849D894F-4431-4354-AB5D-3EF371CFD1CD@apple.com> > Use APFloat in UpgradeParser and AsmParser. Cool. > +++ llvm/trunk/include/llvm/Constants.h Thu Sep 6 13:13:44 2007 > @@ -217,29 +217,13 @@ > APFloat Val; > ConstantFP(const ConstantFP &); // DO NOT IMPLEMENT > protected: > ConstantFP(const Type *Ty, const APFloat& V); > public: > /// get() - Static factory methods - Return objects of the > specified value > static ConstantFP *get(const Type *Ty, const APFloat& V); It seems that this method could drop the type argument, infering the type from the format of the APFloat. This might simplify some clients, and avoids problem with a type is passed in that doesn't match the APFloat. > ====================================================================== > ======== > --- llvm/trunk/lib/AsmParser/llvmAsmParser.y (original) > +++ llvm/trunk/lib/AsmParser/llvmAsmParser.y Thu Sep 6 13:13:44 2007 > @@ -1862,9 +1866,13 @@ > CHECK_FOR_ERROR > } > | FPType FPVAL { // Float & Double constants > - if (!ConstantFP::isValueValidForType($1, $2)) > + if (!ConstantFP::isValueValidForType($1, *$2)) > GEN_ERROR("Floating point constant invalid for type"); > - $$ = ConstantFP::get($1, $2); > + // Lexer has no type info, so builds all FP constants as double. > + // Fix this here. > + if ($1==Type::FloatTy) > + $2->convert(APFloat::IEEEsingle, APFloat::rmNearestTiesToEven); > + $$ = ConstantFP::get($1, *$2); > CHECK_FOR_ERROR > }; Because the APFloats are dynamically allocated, every production that takes an FPVal has to be very careful to delete the FPVal after it converts it to something else to avoid a memory leak. Here, "delete $2;" should be sufficient after the ConstantFP is created. One other thing. Right now there is this code in the CBE: // On X86, set the FP control word to 64-bits of precision instead of 80 bits. Out << "#if defined(__GNUC__) && !defined(__llvm__)\n" ... and this code in the X86 backend: X86DAGToDAGISel::EmitSpecialCodeForMain Both of them should just be zapped. It was a poor band-aid to support 64-bit doubles with fewer precision problems, but obviously won't work when we support long double! In any case, they should just be nuked now. -Chris From isanbard at gmail.com Fri Sep 7 14:54:35 2007 From: isanbard at gmail.com (Bill Wendling) Date: Fri, 7 Sep 2007 12:54:35 -0700 Subject: [llvm-commits] [llvm-gcc-4.2] r41761 - /llvm-gcc-4.2/trunk/gcc/c-typeck.c In-Reply-To: <200709071036.55721.baldrick@free.fr> References: <200709070819.l878JqEx005399@zion.cs.uiuc.edu> <200709071036.55721.baldrick@free.fr> Message-ID: <16e5fdf90709071254u24f2981cq76166b8be7e577aa@mail.gmail.com> On 9/7/07, Duncan Sands wrote: > Hi Bill, > > > A variable that's constant in a constructor shouldn't make the > > constructor itself non-constant. > > does the testcase fail with 4.2? > Hi Duncan, I assumed that it did, but I'm not sure. Would you test it for me? I'm not able to build 4.2 at this time. -bw From dalej at apple.com Fri Sep 7 14:58:03 2007 From: dalej at apple.com (Dale Johannesen) Date: Fri, 7 Sep 2007 12:58:03 -0700 Subject: [llvm-commits] [llvm] r41747 - in /llvm/trunk: include/llvm/ lib/Analysis/ lib/AsmParser/ lib/Bitcode/Reader/ lib/Bitcode/Writer/ lib/CodeGen/ lib/CodeGen/SelectionDAG/ lib/ExecutionEngine/ lib/ExecutionEngine/JIT/ lib/Target/CBackend/ lib/Target/MSIL/ lib/Target/X86/ lib/Transforms/IPO/ lib/Transforms/Scalar/ lib/VMCore/ tools/llvm-upgrade/ tools/llvm2cpp/ In-Reply-To: <849D894F-4431-4354-AB5D-3EF371CFD1CD@apple.com> References: <200709061813.l86IDkT2019696@zion.cs.uiuc.edu> <849D894F-4431-4354-AB5D-3EF371CFD1CD@apple.com> Message-ID: On Sep 7, 2007, at 11:47 AM, Chris Lattner wrote: >> Use APFloat in UpgradeParser and AsmParser. > > Cool. > >> +++ llvm/trunk/include/llvm/Constants.h Thu Sep 6 13:13:44 2007 >> @@ -217,29 +217,13 @@ >> APFloat Val; >> ConstantFP(const ConstantFP &); // DO NOT IMPLEMENT >> protected: >> ConstantFP(const Type *Ty, const APFloat& V); >> public: >> /// get() - Static factory methods - Return objects of the >> specified value >> static ConstantFP *get(const Type *Ty, const APFloat& V); > > It seems that this method could drop the type argument, infering > the type from the format of the APFloat. This might simplify some > clients, and avoids problem with a type is passed in that doesn't > match the APFloat. Eventually, yes, this is on my list (and there are other methods like this). One of the things happening is that we're moving from double +type, passed around separately, to APFloat. This means some of the float vs double handling is moved out of the basic FP classes into their callers (there are a repulsively large number of examples in the patch, which I hope to improve) and bugs creep in when you do that. Short term it has been quite useful to pass the Ty separately as an error check. This transition is way too big to do all at once and some of the intermediate phases are going to be ugly. >> ===================================================================== >> ========= >> --- llvm/trunk/lib/AsmParser/llvmAsmParser.y (original) >> +++ llvm/trunk/lib/AsmParser/llvmAsmParser.y Thu Sep 6 13:13:44 2007 >> @@ -1862,9 +1866,13 @@ >> CHECK_FOR_ERROR >> } >> | FPType FPVAL { // Float & Double constants >> - if (!ConstantFP::isValueValidForType($1, $2)) >> + if (!ConstantFP::isValueValidForType($1, *$2)) >> GEN_ERROR("Floating point constant invalid for type"); >> - $$ = ConstantFP::get($1, $2); >> + // Lexer has no type info, so builds all FP constants as double. >> + // Fix this here. >> + if ($1==Type::FloatTy) >> + $2->convert(APFloat::IEEEsingle, >> APFloat::rmNearestTiesToEven); >> + $$ = ConstantFP::get($1, *$2); >> CHECK_FOR_ERROR >> }; > > Because the APFloats are dynamically allocated, every production > that takes an FPVal has to be very careful to delete the FPVal > after it converts it to something else to avoid a memory leak. > Here, "delete $2;" should be sufficient after the ConstantFP is > created. OK. > One other thing. Right now there is this code in the CBE: > > // On X86, set the FP control word to 64-bits of precision > instead of 80 bits. > Out << "#if defined(__GNUC__) && !defined(__llvm__)\n" > ... > > and this code in the X86 backend: > X86DAGToDAGISel::EmitSpecialCodeForMain > > Both of them should just be zapped. It was a poor band-aid to > support 64-bit doubles with fewer precision problems, but obviously > won't work when we support long double! In any case, they should > just be nuked now. OK. I was aware of this, but it will probably produce some slowdown. I guess now is as good a time as any. From dalej at apple.com Fri Sep 7 15:11:07 2007 From: dalej at apple.com (Dale Johannesen) Date: Fri, 7 Sep 2007 13:11:07 -0700 Subject: [llvm-commits] [llvm] r41747 - in /llvm/trunk: include/llvm/ lib/Analysis/ lib/AsmParser/ lib/Bitcode/Reader/ lib/Bitcode/Writer/ lib/CodeGen/ lib/CodeGen/SelectionDAG/ lib/ExecutionEngine/ lib/ExecutionEngine/JIT/ lib/Target/CBackend/ lib/Target/MSIL/ lib/Target/X86/ lib/Transforms/IPO/ lib/Transforms/Scalar/ lib/VMCore/ tools/llvm-upgrade/ tools/llvm2cpp/ In-Reply-To: References: <200709061813.l86IDkT2019696@zion.cs.uiuc.edu> <849D894F-4431-4354-AB5D-3EF371CFD1CD@apple.com> Message-ID: > >> One other thing. Right now there is this code in the X86 >> backend: X86DAGToDAGISel::EmitSpecialCodeForMain >> >> Both of them should just be zapped. It was a poor band-aid to >> support 64-bit doubles with fewer precision problems, but >> obviously won't work when we support long double! In any case, >> they should just be nuked now. This appears to be the only overload of EmitFunctionEntryCode, would you like to get rid of that too? From dpatel at apple.com Fri Sep 7 15:48:35 2007 From: dpatel at apple.com (Devang Patel) Date: Fri, 07 Sep 2007 20:48:35 -0000 Subject: [llvm-commits] [llvm-gcc-4.0] r41770 - /llvm-gcc-4.0/trunk/gcc/objc/objc-act.c Message-ID: <200709072048.l87KmZ4l019151@zion.cs.uiuc.edu> Author: dpatel Date: Fri Sep 7 15:48:34 2007 New Revision: 41770 URL: http://llvm.org/viewvc/llvm-project?rev=41770&view=rev Log: Do not drop _image_info section on the floor. Modified: llvm-gcc-4.0/trunk/gcc/objc/objc-act.c Modified: llvm-gcc-4.0/trunk/gcc/objc/objc-act.c URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.0/trunk/gcc/objc/objc-act.c?rev=41770&r1=41769&r2=41770&view=diff ============================================================================== --- llvm-gcc-4.0/trunk/gcc/objc/objc-act.c (original) +++ llvm-gcc-4.0/trunk/gcc/objc/objc-act.c Fri Sep 7 15:48:34 2007 @@ -18267,10 +18267,22 @@ /* APPLE LOCAL end radar 4810609 */ /* APPLE LOCAL begin radar 4810587, radar 4964338 */ + /* APPLE LOCAL begin LLVM */ +#ifdef ENABLE_LLVM + /* Darwin linker prefers to use 'L' as a prefix. GCC codegen handles this + later while emitting symbols, but fix it here for llvm. */ + decl = build_decl (VAR_DECL, get_identifier ("L_OBJC_IMAGE_INFO"), + build_array_type + (integer_type_node, + build_index_type (build_int_cst (NULL_TREE, 2 - 1)))); +#else + /* APPLE LOCAL end LLVM */ decl = build_decl (VAR_DECL, get_identifier ("_OBJC_IMAGE_INFO"), build_array_type (integer_type_node, build_index_type (build_int_cst (NULL_TREE, 2 - 1)))); + /* APPLE LOCAL LLVM */ +#endif initlist = build_tree_list (NULL_TREE, build_int_cst (NULL_TREE, 0)); initlist = tree_cons (NULL_TREE, build_int_cst (NULL_TREE, flags), initlist); initlist = objc_build_constructor (TREE_TYPE (decl), nreverse (initlist)); @@ -18285,6 +18297,13 @@ DECL_CONTEXT (decl) = 0; DECL_ARTIFICIAL (decl) = 1; DECL_INITIAL (decl) = initlist; + /* APPLE LOCAL begin LLVM */ +#ifdef ENABLE_LLVM + /* Let optimizer know that this decl is not removable. */ + set_user_assembler_name(decl, IDENTIFIER_POINTER (DECL_NAME(decl))); + DECL_PRESERVE_P (decl) = 1; +#endif ENABLE_LLVM + /* APPLE LOCAL end LLVM */ assemble_variable (decl, 1, 0, 0); } /* APPLE LOCAL end radar 4810587, radar 4964338 */ From dpatel at apple.com Fri Sep 7 15:50:37 2007 From: dpatel at apple.com (Devang Patel) Date: Fri, 07 Sep 2007 20:50:37 -0000 Subject: [llvm-commits] [llvm-gcc-4.2] r41771 - /llvm-gcc-4.2/trunk/gcc/objc/objc-act.c Message-ID: <200709072050.l87KobfQ019217@zion.cs.uiuc.edu> Author: dpatel Date: Fri Sep 7 15:50:36 2007 New Revision: 41771 URL: http://llvm.org/viewvc/llvm-project?rev=41771&view=rev Log: Do not drop _image_info section on the floor. Modified: llvm-gcc-4.2/trunk/gcc/objc/objc-act.c Modified: llvm-gcc-4.2/trunk/gcc/objc/objc-act.c URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/objc/objc-act.c?rev=41771&r1=41770&r2=41771&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/objc/objc-act.c (original) +++ llvm-gcc-4.2/trunk/gcc/objc/objc-act.c Fri Sep 7 15:50:36 2007 @@ -17990,10 +17990,22 @@ /* APPLE LOCAL end radar 4810609 */ /* APPLE LOCAL begin radar 4810587 */ + /* APPLE LOCAL begin LLVM */ +#ifdef ENABLE_LLVM + /* Darwin linker prefers to use 'L' as a prefix. GCC codegen handles this + later while emitting symbols, but fix it here for llvm. */ + decl = build_decl (VAR_DECL, get_identifier ("L_OBJC_IMAGE_INFO"), + build_array_type + (integer_type_node, + build_index_type (build_int_cst (NULL_TREE, 2 - 1)))); +#else + /* APPLE LOCAL end LLVM */ decl = build_decl (VAR_DECL, get_identifier ("_OBJC_IMAGE_INFO"), build_array_type (integer_type_node, build_index_type (build_int_cst (NULL_TREE, 2 - 1)))); + /* APPLE LOCAL LLVM */ +#endif initlist = build_tree_list (NULL_TREE, build_int_cst (NULL_TREE, 0)); initlist = tree_cons (NULL_TREE, build_int_cst (NULL_TREE, flags), initlist); initlist = objc_build_constructor (TREE_TYPE (decl), nreverse (initlist)); @@ -18008,6 +18020,13 @@ DECL_CONTEXT (decl) = 0; DECL_ARTIFICIAL (decl) = 1; DECL_INITIAL (decl) = initlist; + /* APPLE LOCAL begin LLVM */ +#ifdef ENABLE_LLVM + /* Let optimizer know that this decl is not removable. */ + set_user_assembler_name(decl, IDENTIFIER_POINTER (DECL_NAME(decl))); + DECL_PRESERVE_P (decl) = 1; +#endif ENABLE_LLVM + /* APPLE LOCAL end LLVM */ assemble_variable (decl, 1, 0, 0); } /* APPLE LOCAL end radar 4810587 */ From dpatel at apple.com Fri Sep 7 15:58:18 2007 From: dpatel at apple.com (Devang Patel) Date: Fri, 07 Sep 2007 20:58:18 -0000 Subject: [llvm-commits] [llvm-gcc-4.0] r41772 - in /llvm-gcc-4.0/trunk/gcc: llvm-backend.cpp llvm-internal.h Message-ID: <200709072058.l87KwI9Q019477@zion.cs.uiuc.edu> Author: dpatel Date: Fri Sep 7 15:58:18 2007 New Revision: 41772 URL: http://llvm.org/viewvc/llvm-project?rev=41772&view=rev Log: Use SmallSetVector instead SmallPtrSet to ensure determinstic order. Modified: llvm-gcc-4.0/trunk/gcc/llvm-backend.cpp llvm-gcc-4.0/trunk/gcc/llvm-internal.h Modified: llvm-gcc-4.0/trunk/gcc/llvm-backend.cpp URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.0/trunk/gcc/llvm-backend.cpp?rev=41772&r1=41771&r2=41772&view=diff ============================================================================== --- llvm-gcc-4.0/trunk/gcc/llvm-backend.cpp (original) +++ llvm-gcc-4.0/trunk/gcc/llvm-backend.cpp Fri Sep 7 15:58:18 2007 @@ -84,7 +84,7 @@ static cl::opt DisableLLVMOptimizations("disable-llvm-optzns"); std::vector > StaticCtors, StaticDtors; -SmallPtrSet AttributeUsedGlobals; +SmallSetVector AttributeUsedGlobals; std::vector AttributeNoinlineFunctions; std::vector AttributeAnnotateGlobals; @@ -482,7 +482,7 @@ if (!AttributeUsedGlobals.empty()) { std::vector AUGs; const Type *SBP= PointerType::get(Type::Int8Ty); - for (SmallPtrSet::iterator AI = AttributeUsedGlobals.begin(), + for (SmallSetVector::iterator AI = AttributeUsedGlobals.begin(), AE = AttributeUsedGlobals.end(); AI != AE; ++AI) { Constant *C = *AI; AUGs.push_back(ConstantExpr::getBitCast(C, SBP)); @@ -804,7 +804,7 @@ GV->getName(), TheModule); GV->replaceAllUsesWith(ConstantExpr::getBitCast(NGV, GV->getType())); if (AttributeUsedGlobals.count(GV)) { - AttributeUsedGlobals.erase(GV); + AttributeUsedGlobals.remove(GV); AttributeUsedGlobals.insert(NGV); } delete GV; Modified: llvm-gcc-4.0/trunk/gcc/llvm-internal.h URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.0/trunk/gcc/llvm-internal.h?rev=41772&r1=41771&r2=41772&view=diff ============================================================================== --- llvm-gcc-4.0/trunk/gcc/llvm-internal.h (original) +++ llvm-gcc-4.0/trunk/gcc/llvm-internal.h Fri Sep 7 15:58:18 2007 @@ -34,7 +34,7 @@ #include #include "llvm/Intrinsics.h" #include "llvm/ADT/SmallVector.h" -#include "llvm/ADT/SmallPtrSet.h" +#include "llvm/ADT/SetVector.h" #include "llvm/Support/DataTypes.h" #include "llvm/Support/LLVMBuilder.h" #include "llvm/Support/Streams.h" @@ -87,7 +87,7 @@ extern std::vector > StaticCtors, StaticDtors; /// AttributeUsedGlobals - The list of globals that are marked attribute(used). -extern SmallPtrSet AttributeUsedGlobals; +extern SmallSetVector AttributeUsedGlobals; /// AttributeNoinlineFunctions - The list of functions that are /// marked attribute(noinline) From dpatel at apple.com Fri Sep 7 16:00:21 2007 From: dpatel at apple.com (Devang Patel) Date: Fri, 07 Sep 2007 21:00:21 -0000 Subject: [llvm-commits] [llvm-gcc-4.2] r41773 - in /llvm-gcc-4.2/trunk/gcc: llvm-backend.cpp llvm-internal.h Message-ID: <200709072100.l87L0LoD019548@zion.cs.uiuc.edu> Author: dpatel Date: Fri Sep 7 16:00:20 2007 New Revision: 41773 URL: http://llvm.org/viewvc/llvm-project?rev=41773&view=rev Log: Use SmallSetVector insetad of SmallPtrSet to ensure determinstic order. Modified: llvm-gcc-4.2/trunk/gcc/llvm-backend.cpp llvm-gcc-4.2/trunk/gcc/llvm-internal.h Modified: llvm-gcc-4.2/trunk/gcc/llvm-backend.cpp URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/llvm-backend.cpp?rev=41773&r1=41772&r2=41773&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/llvm-backend.cpp (original) +++ llvm-gcc-4.2/trunk/gcc/llvm-backend.cpp Fri Sep 7 16:00:20 2007 @@ -85,7 +85,7 @@ static cl::opt DisableLLVMOptimizations("disable-llvm-optzns"); std::vector > StaticCtors, StaticDtors; -SmallPtrSet AttributeUsedGlobals; +SmallSetVector AttributeUsedGlobals; std::vector AttributeNoinlineFunctions; std::vector AttributeAnnotateGlobals; @@ -483,7 +483,7 @@ if (!AttributeUsedGlobals.empty()) { std::vector AUGs; const Type *SBP= PointerType::get(Type::Int8Ty); - for (SmallPtrSet::iterator AI = AttributeUsedGlobals.begin(), + for (SmallSetVector::iterator AI = AttributeUsedGlobals.begin(), AE = AttributeUsedGlobals.end(); AI != AE; ++AI) { Constant *C = *AI; AUGs.push_back(ConstantExpr::getBitCast(C, SBP)); @@ -815,7 +815,7 @@ GV->getName(), TheModule); GV->replaceAllUsesWith(ConstantExpr::getBitCast(NGV, GV->getType())); if (AttributeUsedGlobals.count(GV)) { - AttributeUsedGlobals.erase(GV); + AttributeUsedGlobals.remove(GV); AttributeUsedGlobals.insert(NGV); } delete GV; Modified: llvm-gcc-4.2/trunk/gcc/llvm-internal.h URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/llvm-internal.h?rev=41773&r1=41772&r2=41773&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/llvm-internal.h (original) +++ llvm-gcc-4.2/trunk/gcc/llvm-internal.h Fri Sep 7 16:00:20 2007 @@ -35,7 +35,7 @@ #include "llvm/Intrinsics.h" #include "llvm/ADT/IndexedMap.h" #include "llvm/ADT/SmallVector.h" -#include "llvm/ADT/SmallPtrSet.h" +#include "llvm/ADT/SetVector.h" #include "llvm/Support/DataTypes.h" #include "llvm/Support/LLVMBuilder.h" #include "llvm/Support/Streams.h" @@ -92,7 +92,7 @@ extern std::vector > StaticCtors, StaticDtors; /// AttributeUsedGlobals - The list of globals that are marked attribute(used). -extern SmallPtrSet AttributeUsedGlobals; +extern SmallSetVector AttributeUsedGlobals; /// AttributeNoinlineFunctions - The list of functions that are /// marked attribute(noinline) From dpatel at apple.com Fri Sep 7 16:00:48 2007 From: dpatel at apple.com (Devang Patel) Date: Fri, 7 Sep 2007 14:00:48 -0700 Subject: [llvm-commits] [llvm-gcc-4.0] r41748 - in /llvm-gcc-4.0/trunk/gcc: llvm-backend.cpp llvm-convert.cpp llvm-internal.h In-Reply-To: References: <200709061900.l86J0LQq021399@zion.cs.uiuc.edu> Message-ID: <25E3DE98-3934-43F4-9CB2-44AA2A147E9E@apple.com> On Sep 7, 2007, at 11:29 AM, Chris Lattner wrote: >> URL: http://llvm.org/viewvc/llvm-project?rev=41748&view=rev >> Log: >> Replace GV from AttributeUsedGlobals list. > > Hey Devang, > > There is a problem with this patch: this will build the llvm.used > global in nondeterministic order based on how the addresses of the > GV's hash in the smallptrset. To avoid this problem, you should use > a SetVector or something like it. Fixed. Thanks for catching this :) - Devang From dalej at apple.com Fri Sep 7 16:07:57 2007 From: dalej at apple.com (Dale Johannesen) Date: Fri, 07 Sep 2007 21:07:57 -0000 Subject: [llvm-commits] [llvm] r41774 - in /llvm/trunk: lib/AsmParser/llvmAsmParser.cpp.cvs lib/AsmParser/llvmAsmParser.h.cvs lib/AsmParser/llvmAsmParser.y lib/AsmParser/llvmAsmParser.y.cvs lib/Target/CBackend/CBackend.cpp lib/Target/X86/X86ISelDAGToDAG.cpp tools/llvm-upgrade/UpgradeParser.cpp.cvs tools/llvm-upgrade/UpgradeParser.h.cvs tools/llvm-upgrade/UpgradeParser.y tools/llvm-upgrade/UpgradeParser.y.cvs Message-ID: <200709072107.l87L7wuX019745@zion.cs.uiuc.edu> Author: johannes Date: Fri Sep 7 16:07:57 2007 New Revision: 41774 URL: http://llvm.org/viewvc/llvm-project?rev=41774&view=rev Log: Apply feedback from previous patch. Modified: llvm/trunk/lib/AsmParser/llvmAsmParser.cpp.cvs llvm/trunk/lib/AsmParser/llvmAsmParser.h.cvs llvm/trunk/lib/AsmParser/llvmAsmParser.y llvm/trunk/lib/AsmParser/llvmAsmParser.y.cvs llvm/trunk/lib/Target/CBackend/CBackend.cpp llvm/trunk/lib/Target/X86/X86ISelDAGToDAG.cpp llvm/trunk/tools/llvm-upgrade/UpgradeParser.cpp.cvs llvm/trunk/tools/llvm-upgrade/UpgradeParser.h.cvs llvm/trunk/tools/llvm-upgrade/UpgradeParser.y llvm/trunk/tools/llvm-upgrade/UpgradeParser.y.cvs Modified: llvm/trunk/lib/AsmParser/llvmAsmParser.cpp.cvs URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/AsmParser/llvmAsmParser.cpp.cvs?rev=41774&r1=41773&r2=41774&view=diff ============================================================================== --- llvm/trunk/lib/AsmParser/llvmAsmParser.cpp.cvs (original) +++ llvm/trunk/lib/AsmParser/llvmAsmParser.cpp.cvs Fri Sep 7 16:07:57 2007 @@ -1,361 +1,161 @@ -/* A Bison parser, made by GNU Bison 1.875c. */ -/* Skeleton parser for Yacc-like parsing with Bison, - Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. +/* A Bison parser, made from /Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y + by GNU Bison version 1.28 */ - 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., 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. */ - -/* Written by Richard Stallman by simplifying the original so called - ``semantic'' parser. */ +#define YYBISON 1 /* Identify Bison output. */ -/* 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 - -/* Skeleton name. */ -#define YYSKELETON_NAME "yacc.c" - -/* Pure parsers. */ -#define YYPURE 0 - -/* Using locations. */ -#define YYLSP_NEEDED 0 - -/* If NAME_PREFIX is specified substitute the variables and functions - 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 X86_FP80 268 +#define FP128 269 +#define PPC_FP128 270 +#define LABEL 271 +#define TYPE 272 +#define LOCALVAR 273 +#define GLOBALVAR 274 +#define LABELSTR 275 +#define STRINGCONSTANT 276 +#define ATSTRINGCONSTANT 277 +#define PCTSTRINGCONSTANT 278 +#define ZEROINITIALIZER 279 +#define TRUETOK 280 +#define FALSETOK 281 +#define BEGINTOK 282 +#define ENDTOK 283 +#define DECLARE 284 +#define DEFINE 285 +#define GLOBAL 286 +#define CONSTANT 287 +#define SECTION 288 +#define ALIAS 289 +#define VOLATILE 290 +#define THREAD_LOCAL 291 +#define TO 292 +#define DOTDOTDOT 293 +#define NULL_TOK 294 +#define UNDEF 295 +#define INTERNAL 296 +#define LINKONCE 297 +#define WEAK 298 +#define APPENDING 299 +#define DLLIMPORT 300 +#define DLLEXPORT 301 +#define EXTERN_WEAK 302 +#define OPAQUE 303 +#define EXTERNAL 304 +#define TARGET 305 +#define TRIPLE 306 +#define ALIGN 307 +#define DEPLIBS 308 +#define CALL 309 +#define TAIL 310 +#define ASM_TOK 311 +#define MODULE 312 +#define SIDEEFFECT 313 +#define CC_TOK 314 +#define CCC_TOK 315 +#define FASTCC_TOK 316 +#define COLDCC_TOK 317 +#define X86_STDCALLCC_TOK 318 +#define X86_FASTCALLCC_TOK 319 +#define DATALAYOUT 320 +#define RET 321 +#define BR 322 +#define SWITCH 323 +#define INVOKE 324 +#define UNWIND 325 +#define UNREACHABLE 326 +#define ADD 327 +#define SUB 328 +#define MUL 329 +#define UDIV 330 +#define SDIV 331 +#define FDIV 332 +#define UREM 333 +#define SREM 334 +#define FREM 335 +#define AND 336 +#define OR 337 +#define XOR 338 +#define SHL 339 +#define LSHR 340 +#define ASHR 341 +#define ICMP 342 +#define FCMP 343 +#define EQ 344 +#define NE 345 +#define SLT 346 +#define SGT 347 +#define SLE 348 +#define SGE 349 +#define ULT 350 +#define UGT 351 +#define ULE 352 +#define UGE 353 +#define OEQ 354 +#define ONE 355 +#define OLT 356 +#define OGT 357 +#define OLE 358 +#define OGE 359 +#define ORD 360 +#define UNO 361 +#define UEQ 362 +#define UNE 363 +#define MALLOC 364 +#define ALLOCA 365 +#define FREE 366 +#define LOAD 367 +#define STORE 368 +#define GETELEMENTPTR 369 +#define TRUNC 370 +#define ZEXT 371 +#define SEXT 372 +#define FPTRUNC 373 +#define FPEXT 374 +#define BITCAST 375 +#define UITOFP 376 +#define SITOFP 377 +#define FPTOUI 378 +#define FPTOSI 379 +#define INTTOPTR 380 +#define PTRTOINT 381 +#define PHI_TOK 382 +#define SELECT 383 +#define VAARG 384 +#define EXTRACTELEMENT 385 +#define INSERTELEMENT 386 +#define SHUFFLEVECTOR 387 +#define SIGNEXT 388 +#define ZEROEXT 389 +#define NORETURN 390 +#define INREG 391 +#define SRET 392 +#define NOUNWIND 393 +#define NOALIAS 394 +#define BYVAL 395 +#define NEST 396 +#define DEFAULT 397 +#define HIDDEN 398 +#define PROTECTED 399 - -/* 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, - X86_FP80 = 269, - FP128 = 270, - PPC_FP128 = 271, - LABEL = 272, - TYPE = 273, - LOCALVAR = 274, - GLOBALVAR = 275, - LABELSTR = 276, - STRINGCONSTANT = 277, - ATSTRINGCONSTANT = 278, - PCTSTRINGCONSTANT = 279, - ZEROINITIALIZER = 280, - TRUETOK = 281, - FALSETOK = 282, - BEGINTOK = 283, - ENDTOK = 284, - DECLARE = 285, - DEFINE = 286, - GLOBAL = 287, - CONSTANT = 288, - SECTION = 289, - ALIAS = 290, - VOLATILE = 291, - THREAD_LOCAL = 292, - TO = 293, - DOTDOTDOT = 294, - NULL_TOK = 295, - UNDEF = 296, - INTERNAL = 297, - LINKONCE = 298, - WEAK = 299, - APPENDING = 300, - DLLIMPORT = 301, - DLLEXPORT = 302, - EXTERN_WEAK = 303, - OPAQUE = 304, - EXTERNAL = 305, - TARGET = 306, - TRIPLE = 307, - ALIGN = 308, - DEPLIBS = 309, - CALL = 310, - TAIL = 311, - ASM_TOK = 312, - MODULE = 313, - SIDEEFFECT = 314, - CC_TOK = 315, - CCC_TOK = 316, - FASTCC_TOK = 317, - COLDCC_TOK = 318, - X86_STDCALLCC_TOK = 319, - X86_FASTCALLCC_TOK = 320, - DATALAYOUT = 321, - RET = 322, - BR = 323, - SWITCH = 324, - INVOKE = 325, - UNWIND = 326, - UNREACHABLE = 327, - ADD = 328, - SUB = 329, - MUL = 330, - UDIV = 331, - SDIV = 332, - FDIV = 333, - UREM = 334, - SREM = 335, - FREM = 336, - AND = 337, - OR = 338, - XOR = 339, - SHL = 340, - LSHR = 341, - ASHR = 342, - ICMP = 343, - FCMP = 344, - EQ = 345, - NE = 346, - SLT = 347, - SGT = 348, - SLE = 349, - SGE = 350, - ULT = 351, - UGT = 352, - ULE = 353, - UGE = 354, - OEQ = 355, - ONE = 356, - OLT = 357, - OGT = 358, - OLE = 359, - OGE = 360, - ORD = 361, - UNO = 362, - UEQ = 363, - UNE = 364, - MALLOC = 365, - ALLOCA = 366, - FREE = 367, - LOAD = 368, - STORE = 369, - GETELEMENTPTR = 370, - TRUNC = 371, - ZEXT = 372, - SEXT = 373, - FPTRUNC = 374, - FPEXT = 375, - BITCAST = 376, - UITOFP = 377, - SITOFP = 378, - FPTOUI = 379, - FPTOSI = 380, - INTTOPTR = 381, - PTRTOINT = 382, - PHI_TOK = 383, - SELECT = 384, - VAARG = 385, - EXTRACTELEMENT = 386, - INSERTELEMENT = 387, - SHUFFLEVECTOR = 388, - SIGNEXT = 389, - ZEROEXT = 390, - NORETURN = 391, - INREG = 392, - SRET = 393, - NOUNWIND = 394, - NOALIAS = 395, - BYVAL = 396, - NEST = 397, - DEFAULT = 398, - HIDDEN = 399, - PROTECTED = 400 - }; -#endif -#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 X86_FP80 269 -#define FP128 270 -#define PPC_FP128 271 -#define LABEL 272 -#define TYPE 273 -#define LOCALVAR 274 -#define GLOBALVAR 275 -#define LABELSTR 276 -#define STRINGCONSTANT 277 -#define ATSTRINGCONSTANT 278 -#define PCTSTRINGCONSTANT 279 -#define ZEROINITIALIZER 280 -#define TRUETOK 281 -#define FALSETOK 282 -#define BEGINTOK 283 -#define ENDTOK 284 -#define DECLARE 285 -#define DEFINE 286 -#define GLOBAL 287 -#define CONSTANT 288 -#define SECTION 289 -#define ALIAS 290 -#define VOLATILE 291 -#define THREAD_LOCAL 292 -#define TO 293 -#define DOTDOTDOT 294 -#define NULL_TOK 295 -#define UNDEF 296 -#define INTERNAL 297 -#define LINKONCE 298 -#define WEAK 299 -#define APPENDING 300 -#define DLLIMPORT 301 -#define DLLEXPORT 302 -#define EXTERN_WEAK 303 -#define OPAQUE 304 -#define EXTERNAL 305 -#define TARGET 306 -#define TRIPLE 307 -#define ALIGN 308 -#define DEPLIBS 309 -#define CALL 310 -#define TAIL 311 -#define ASM_TOK 312 -#define MODULE 313 -#define SIDEEFFECT 314 -#define CC_TOK 315 -#define CCC_TOK 316 -#define FASTCC_TOK 317 -#define COLDCC_TOK 318 -#define X86_STDCALLCC_TOK 319 -#define X86_FASTCALLCC_TOK 320 -#define DATALAYOUT 321 -#define RET 322 -#define BR 323 -#define SWITCH 324 -#define INVOKE 325 -#define UNWIND 326 -#define UNREACHABLE 327 -#define ADD 328 -#define SUB 329 -#define MUL 330 -#define UDIV 331 -#define SDIV 332 -#define FDIV 333 -#define UREM 334 -#define SREM 335 -#define FREM 336 -#define AND 337 -#define OR 338 -#define XOR 339 -#define SHL 340 -#define LSHR 341 -#define ASHR 342 -#define ICMP 343 -#define FCMP 344 -#define EQ 345 -#define NE 346 -#define SLT 347 -#define SGT 348 -#define SLE 349 -#define SGE 350 -#define ULT 351 -#define UGT 352 -#define ULE 353 -#define UGE 354 -#define OEQ 355 -#define ONE 356 -#define OLT 357 -#define OGT 358 -#define OLE 359 -#define OGE 360 -#define ORD 361 -#define UNO 362 -#define UEQ 363 -#define UNE 364 -#define MALLOC 365 -#define ALLOCA 366 -#define FREE 367 -#define LOAD 368 -#define STORE 369 -#define GETELEMENTPTR 370 -#define TRUNC 371 -#define ZEXT 372 -#define SEXT 373 -#define FPTRUNC 374 -#define FPEXT 375 -#define BITCAST 376 -#define UITOFP 377 -#define SITOFP 378 -#define FPTOUI 379 -#define FPTOSI 380 -#define INTTOPTR 381 -#define PTRTOINT 382 -#define PHI_TOK 383 -#define SELECT 384 -#define VAARG 385 -#define EXTRACTELEMENT 386 -#define INSERTELEMENT 387 -#define SHUFFLEVECTOR 388 -#define SIGNEXT 389 -#define ZEROEXT 390 -#define NORETURN 391 -#define INREG 392 -#define SRET 393 -#define NOUNWIND 394 -#define NOALIAS 395 -#define BYVAL 396 -#define NEST 397 -#define DEFAULT 398 -#define HIDDEN 399 -#define PROTECTED 400 - - - - -/* Copy the first part of user declarations. */ -#line 14 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" +#line 14 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" #include "ParserInternals.h" #include "llvm/CallingConv.h" @@ -757,11 +557,15 @@ } case ValID::ConstFPVal: // Is it a floating point const pool reference? - if (!ConstantFP::isValueValidForType(Ty, D.ConstPoolFP)) { + if (!ConstantFP::isValueValidForType(Ty, *D.ConstPoolFP)) { GenerateError("FP constant invalid for type"); return 0; } - return ConstantFP::get(Ty, D.ConstPoolFP); + // Lexer has no type info, so builds all FP constants as double. + // Fix this here. + if (Ty==Type::FloatTy) + D.ConstPoolFP->convert(APFloat::IEEEsingle, APFloat::rmNearestTiesToEven); + return ConstantFP::get(Ty, *D.ConstPoolFP); case ValID::ConstNullVal: // Is it a null value? if (!isa(Ty)) { @@ -1304,23 +1108,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 - -#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED) -#line 963 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" -typedef union YYSTYPE { +#line 967 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +typedef union { llvm::Module *ModuleVal; llvm::Function *FunctionVal; llvm::BasicBlock *BasicBlockVal; @@ -1352,7 +1141,7 @@ uint64_t UInt64Val; int SIntVal; unsigned UIntVal; - double FPVal; + llvm::APFloat *FPVal; bool BoolVal; std::string *StrVal; // This memory must be deleted @@ -1366,1496 +1155,1137 @@ llvm::ICmpInst::Predicate IPredicate; llvm::FCmpInst::Predicate FPredicate; } YYSTYPE; -/* Line 191 of yacc.c. */ -#line 1371 "llvmAsmParser.tab.c" -# define yystype YYSTYPE /* obsolescent; will be withdrawn */ -# define YYSTYPE_IS_DECLARED 1 -# define YYSTYPE_IS_TRIVIAL 1 -#endif - +#include +#ifndef __cplusplus +#ifndef __STDC__ +#define const +#endif +#endif -/* Copy the second part of user declarations. */ - - -/* Line 214 of yacc.c. */ -#line 1383 "llvmAsmParser.tab.c" - -#if ! defined (yyoverflow) || YYERROR_VERBOSE - -/* The parser invokes alloca or malloc; define the necessary symbols. */ - -# ifdef YYSTACK_USE_ALLOCA -# if YYSTACK_USE_ALLOCA -# define YYSTACK_ALLOC alloca -# endif -# else -# if defined (alloca) || defined (_ALLOCA_H) -# define YYSTACK_ALLOC alloca -# else -# ifdef __GNUC__ -# define YYSTACK_ALLOC __builtin_alloca -# endif -# endif -# endif - -# ifdef YYSTACK_ALLOC - /* Pacify GCC's `empty if-body' warning. */ -# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0) -# else -# if defined (__STDC__) || defined (__cplusplus) -# include /* INFRINGES ON USER NAME SPACE */ -# define YYSIZE_T size_t -# endif -# define YYSTACK_ALLOC malloc -# define YYSTACK_FREE free -# 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 -{ - short yyss; - YYSTYPE yyvs; - }; -/* The size of the maximum gap between one aligned stack and the next. */ -# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) +#define YYFINAL 594 +#define YYFLAG -32768 +#define YYNTBASE 160 + +#define YYTRANSLATE(x) ((unsigned)(x) <= 399 ? yytranslate[x] : 241) + +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, 150, + 151, 148, 2, 147, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 155, + 146, 156, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 152, 149, 154, 2, 2, 2, 2, 2, 159, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 153, + 2, 2, 157, 2, 158, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 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, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145 +}; -/* The size of an array large to enough to hold all stacks, each with - N elements. */ -# define YYSTACK_BYTES(N) \ - ((N) * (sizeof (short) + 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 \ - { \ - register YYSIZE_T yyi; \ - for (yyi = 0; yyi < (Count); yyi++) \ - (To)[yyi] = (From)[yyi]; \ - } \ - while (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 (0) +#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, + 120, 122, 124, 126, 127, 130, 131, 133, 135, 137, + 138, 141, 143, 145, 147, 149, 151, 153, 155, 157, + 158, 160, 162, 164, 165, 167, 169, 170, 172, 174, + 176, 178, 179, 181, 183, 184, 186, 188, 190, 192, + 194, 197, 199, 201, 203, 205, 207, 209, 211, 213, + 215, 216, 219, 221, 223, 225, 227, 228, 231, 232, + 235, 236, 240, 243, 244, 246, 247, 251, 253, 256, + 258, 260, 262, 264, 266, 268, 270, 272, 274, 277, + 279, 282, 288, 294, 300, 306, 310, 313, 319, 324, + 327, 329, 331, 333, 337, 339, 343, 345, 346, 348, + 352, 357, 361, 365, 370, 375, 379, 386, 392, 395, + 398, 401, 404, 407, 410, 413, 416, 419, 422, 425, + 428, 435, 441, 450, 457, 464, 472, 480, 487, 496, + 505, 509, 511, 513, 515, 517, 518, 521, 528, 530, + 531, 533, 536, 537, 541, 542, 546, 550, 554, 558, + 559, 567, 568, 577, 578, 587, 593, 596, 600, 602, + 606, 610, 614, 618, 620, 621, 627, 631, 633, 637, + 639, 640, 650, 652, 654, 659, 661, 663, 666, 670, + 671, 673, 675, 677, 679, 681, 683, 685, 687, 689, + 693, 695, 701, 703, 705, 707, 709, 711, 713, 716, + 719, 722, 726, 729, 730, 732, 735, 738, 742, 752, + 762, 771, 786, 788, 790, 797, 803, 806, 813, 821, + 825, 831, 832, 833, 837, 840, 842, 848, 854, 861, + 868, 873, 880, 885, 890, 897, 904, 907, 916, 918, + 920, 921, 925, 932, 936, 943, 946, 952, 960 +}; -#endif +static const short yyrhs[] = { 73, + 0, 74, 0, 75, 0, 76, 0, 77, 0, 78, + 0, 79, 0, 80, 0, 81, 0, 85, 0, 86, + 0, 87, 0, 82, 0, 83, 0, 84, 0, 116, + 0, 117, 0, 118, 0, 119, 0, 120, 0, 121, + 0, 122, 0, 123, 0, 124, 0, 125, 0, 126, + 0, 127, 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, 106, 0, 107, 0, 108, + 0, 109, 0, 96, 0, 97, 0, 98, 0, 99, + 0, 26, 0, 27, 0, 11, 0, 12, 0, 13, + 0, 16, 0, 15, 0, 14, 0, 19, 0, 22, + 0, 24, 0, 167, 0, 0, 167, 146, 0, 0, + 20, 0, 23, 0, 172, 0, 0, 170, 146, 0, + 42, 0, 44, 0, 43, 0, 45, 0, 47, 0, + 46, 0, 48, 0, 50, 0, 0, 143, 0, 144, + 0, 145, 0, 0, 46, 0, 48, 0, 0, 42, + 0, 43, 0, 44, 0, 47, 0, 0, 44, 0, + 42, 0, 0, 61, 0, 62, 0, 63, 0, 64, + 0, 65, 0, 60, 4, 0, 135, 0, 117, 0, + 134, 0, 118, 0, 137, 0, 138, 0, 140, 0, + 141, 0, 142, 0, 0, 181, 180, 0, 136, 0, + 139, 0, 135, 0, 134, 0, 0, 183, 182, 0, + 0, 53, 4, 0, 0, 147, 53, 4, 0, 34, + 22, 0, 0, 186, 0, 0, 147, 189, 188, 0, + 186, 0, 53, 4, 0, 11, 0, 12, 0, 13, + 0, 16, 0, 15, 0, 14, 0, 17, 0, 49, + 0, 190, 0, 191, 148, 0, 225, 0, 149, 4, + 0, 191, 150, 195, 151, 183, 0, 10, 150, 195, + 151, 183, 0, 152, 4, 153, 191, 154, 0, 155, + 4, 153, 191, 156, 0, 157, 196, 158, 0, 157, + 158, 0, 155, 157, 196, 158, 156, 0, 155, 157, + 158, 156, 0, 191, 181, 0, 191, 0, 10, 0, + 192, 0, 194, 147, 192, 0, 194, 0, 194, 147, + 39, 0, 39, 0, 0, 191, 0, 196, 147, 191, + 0, 191, 152, 199, 154, 0, 191, 152, 154, 0, + 191, 159, 22, 0, 191, 155, 199, 156, 0, 191, + 157, 199, 158, 0, 191, 157, 158, 0, 191, 155, + 157, 199, 158, 156, 0, 191, 155, 157, 158, 156, + 0, 191, 40, 0, 191, 41, 0, 191, 225, 0, + 191, 198, 0, 191, 25, 0, 165, 3, 0, 165, + 5, 0, 165, 4, 0, 165, 6, 0, 11, 26, + 0, 11, 27, 0, 166, 9, 0, 162, 150, 197, + 38, 191, 151, 0, 115, 150, 197, 236, 151, 0, + 129, 150, 197, 147, 197, 147, 197, 151, 0, 160, + 150, 197, 147, 197, 151, 0, 161, 150, 197, 147, + 197, 151, 0, 88, 163, 150, 197, 147, 197, 151, + 0, 89, 164, 150, 197, 147, 197, 151, 0, 131, + 150, 197, 147, 197, 151, 0, 132, 150, 197, 147, + 197, 147, 197, 151, 0, 133, 150, 197, 147, 197, + 147, 197, 151, 0, 199, 147, 197, 0, 197, 0, + 32, 0, 33, 0, 37, 0, 0, 193, 225, 0, + 121, 150, 202, 38, 191, 151, 0, 204, 0, 0, + 205, 0, 204, 205, 0, 0, 31, 206, 221, 0, + 0, 30, 207, 222, 0, 58, 57, 211, 0, 169, + 18, 191, 0, 169, 18, 10, 0, 0, 171, 175, + 201, 200, 197, 208, 188, 0, 0, 171, 173, 175, + 201, 200, 197, 209, 188, 0, 0, 171, 174, 175, + 201, 200, 191, 210, 188, 0, 171, 175, 35, 178, + 202, 0, 51, 212, 0, 54, 146, 213, 0, 22, + 0, 52, 146, 22, 0, 66, 146, 22, 0, 152, + 214, 154, 0, 214, 147, 22, 0, 22, 0, 0, + 215, 147, 191, 181, 168, 0, 191, 181, 168, 0, + 215, 0, 215, 147, 39, 0, 39, 0, 0, 179, + 193, 170, 150, 216, 151, 183, 187, 184, 0, 28, + 0, 157, 0, 177, 175, 217, 218, 0, 29, 0, + 158, 0, 228, 220, 0, 176, 175, 217, 0, 0, + 59, 0, 3, 0, 4, 0, 9, 0, 26, 0, + 27, 0, 40, 0, 41, 0, 25, 0, 155, 199, + 156, 0, 198, 0, 57, 223, 22, 147, 22, 0, + 7, 0, 8, 0, 167, 0, 170, 0, 225, 0, + 224, 0, 191, 226, 0, 228, 229, 0, 219, 229, + 0, 230, 169, 231, 0, 230, 233, 0, 0, 21, + 0, 67, 227, 0, 67, 10, 0, 68, 17, 226, + 0, 68, 11, 226, 147, 17, 226, 147, 17, 226, + 0, 69, 165, 226, 147, 17, 226, 152, 232, 154, + 0, 69, 165, 226, 147, 17, 226, 152, 154, 0, + 70, 179, 193, 226, 150, 235, 151, 183, 38, 17, + 226, 71, 17, 226, 0, 71, 0, 72, 0, 232, + 165, 224, 147, 17, 226, 0, 165, 224, 147, 17, + 226, 0, 169, 238, 0, 191, 152, 226, 147, 226, + 154, 0, 234, 147, 152, 226, 147, 226, 154, 0, + 191, 226, 181, 0, 235, 147, 191, 226, 181, 0, + 0, 0, 236, 147, 227, 0, 56, 55, 0, 55, + 0, 160, 191, 226, 147, 226, 0, 161, 191, 226, + 147, 226, 0, 88, 163, 191, 226, 147, 226, 0, + 89, 164, 191, 226, 147, 226, 0, 162, 227, 38, + 191, 0, 129, 227, 147, 227, 147, 227, 0, 130, + 227, 147, 191, 0, 131, 227, 147, 227, 0, 132, + 227, 147, 227, 147, 227, 0, 133, 227, 147, 227, + 147, 227, 0, 128, 234, 0, 237, 179, 193, 226, + 150, 235, 151, 183, 0, 240, 0, 36, 0, 0, + 110, 191, 185, 0, 110, 191, 147, 11, 226, 185, + 0, 111, 191, 185, 0, 111, 191, 147, 11, 226, + 185, 0, 112, 227, 0, 239, 113, 191, 226, 185, + 0, 239, 114, 227, 147, 191, 226, 185, 0, 115, + 191, 226, 236, 0 +}; -#if defined (__STDC__) || defined (__cplusplus) - typedef signed char yysigned_char; -#else - typedef short yysigned_char; #endif -/* YYFINAL -- State number of the termination state. */ -#define YYFINAL 43 -/* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 1685 - -/* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 160 -/* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 82 -/* YYNRULES -- Number of rules. */ -#define YYNRULES 310 -/* YYNRULES -- Number of states. */ -#define YYNSTATES 594 - -/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ -#define YYUNDEFTOK 2 -#define YYMAXUTOK 400 - -#define YYTRANSLATE(YYX) \ - ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) - -/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ -static const unsigned char 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, - 150, 151, 148, 2, 147, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 155, 146, 156, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 152, 149, 154, 2, 2, 2, 2, 2, 159, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 153, 2, 2, 157, 2, 158, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 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, 136, 137, 138, 139, 140, 141, 142, 143, 144, - 145 +#if YYDEBUG != 0 +static const short yyrline[] = { 0, + 1126, 1126, 1126, 1126, 1126, 1126, 1126, 1126, 1126, 1127, + 1127, 1127, 1127, 1127, 1127, 1128, 1128, 1128, 1128, 1128, + 1128, 1128, 1129, 1129, 1129, 1129, 1129, 1132, 1132, 1133, + 1133, 1134, 1134, 1135, 1135, 1136, 1136, 1140, 1140, 1141, + 1141, 1142, 1142, 1143, 1143, 1144, 1144, 1145, 1145, 1146, + 1146, 1147, 1148, 1153, 1154, 1154, 1154, 1154, 1154, 1156, + 1156, 1156, 1157, 1157, 1161, 1165, 1170, 1170, 1172, 1173, + 1178, 1184, 1185, 1186, 1187, 1188, 1192, 1193, 1194, 1198, + 1199, 1200, 1201, 1205, 1206, 1207, 1211, 1212, 1213, 1214, + 1215, 1219, 1220, 1221, 1224, 1224, 1225, 1226, 1227, 1228, + 1229, 1237, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, + 1248, 1249, 1254, 1255, 1256, 1257, 1260, 1261, 1268, 1268, + 1275, 1275, 1284, 1292, 1292, 1298, 1298, 1300, 1305, 1318, + 1318, 1318, 1318, 1318, 1318, 1318, 1321, 1325, 1329, 1336, + 1341, 1349, 1379, 1410, 1415, 1427, 1437, 1441, 1451, 1458, + 1465, 1472, 1477, 1482, 1489, 1490, 1497, 1504, 1512, 1518, + 1530, 1558, 1574, 1601, 1629, 1655, 1675, 1701, 1721, 1733, + 1740, 1806, 1816, 1826, 1832, 1842, 1848, 1858, 1863, 1868, + 1881, 1893, 1915, 1923, 1929, 1940, 1945, 1950, 1956, 1962, + 1971, 1975, 1983, 1983, 1986, 1986, 1989, 2001, 2022, 2027, + 2035, 2036, 2040, 2040, 2044, 2044, 2047, 2050, 2074, 2085, + 2092, 2095, 2101, 2104, 2111, 2115, 2134, 2137, 2143, 2153, + 2157, 2162, 2164, 2169, 2174, 2183, 2193, 2204, 2208, 2217, + 2226, 2231, 2352, 2352, 2354, 2363, 2363, 2365, 2370, 2382, + 2386, 2391, 2395, 2399, 2403, 2407, 2411, 2415, 2419, 2423, + 2448, 2452, 2462, 2466, 2470, 2475, 2482, 2482, 2488, 2497, + 2501, 2510, 2519, 2528, 2532, 2539, 2543, 2547, 2552, 2562, + 2581, 2590, 2670, 2674, 2681, 2692, 2705, 2715, 2726, 2736, + 2745, 2754, 2757, 2758, 2765, 2769, 2774, 2795, 2812, 2826, + 2840, 2852, 2860, 2867, 2873, 2879, 2885, 2900, 2985, 2990, + 2994, 3001, 3008, 3016, 3023, 3031, 3039, 3053, 3070 }; +#endif -#if YYDEBUG -/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in - YYRHS. */ -static const unsigned short 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, 123, 125, 127, 129, 130, 133, 134, 136, - 138, 140, 141, 144, 146, 148, 150, 152, 154, 156, - 158, 160, 161, 163, 165, 167, 168, 170, 172, 173, - 175, 177, 179, 181, 182, 184, 186, 187, 189, 191, - 193, 195, 197, 200, 202, 204, 206, 208, 210, 212, - 214, 216, 218, 219, 222, 224, 226, 228, 230, 231, - 234, 235, 238, 239, 243, 246, 247, 249, 250, 254, - 256, 259, 261, 263, 265, 267, 269, 271, 273, 275, - 277, 280, 282, 285, 291, 297, 303, 309, 313, 316, - 322, 327, 330, 332, 334, 336, 340, 342, 346, 348, - 349, 351, 355, 360, 364, 368, 373, 378, 382, 389, - 395, 398, 401, 404, 407, 410, 413, 416, 419, 422, - 425, 428, 431, 438, 444, 453, 460, 467, 475, 483, - 490, 499, 508, 512, 514, 516, 518, 520, 521, 524, - 531, 533, 534, 536, 539, 540, 544, 545, 549, 553, - 557, 561, 562, 570, 571, 580, 581, 590, 596, 599, - 603, 605, 609, 613, 617, 621, 623, 624, 630, 634, - 636, 640, 642, 643, 653, 655, 657, 662, 664, 666, - 669, 673, 674, 676, 678, 680, 682, 684, 686, 688, - 690, 692, 696, 698, 704, 706, 708, 710, 712, 714, - 716, 719, 722, 725, 729, 732, 733, 735, 738, 741, - 745, 755, 765, 774, 789, 791, 793, 800, 806, 809, - 816, 824, 828, 834, 835, 836, 840, 843, 845, 851, - 857, 864, 871, 876, 883, 888, 893, 900, 907, 910, - 919, 921, 923, 924, 928, 935, 939, 946, 949, 955, - 963 -}; -/* YYRHS -- A `-1'-separated list of the rules' RHS. */ -static const short yyrhs[] = -{ - 204, 0, -1, 73, -1, 74, -1, 75, -1, 76, - -1, 77, -1, 78, -1, 79, -1, 80, -1, 81, - -1, 85, -1, 86, -1, 87, -1, 82, -1, 83, - -1, 84, -1, 116, -1, 117, -1, 118, -1, 119, - -1, 120, -1, 121, -1, 122, -1, 123, -1, 124, - -1, 125, -1, 126, -1, 127, -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, 106, - -1, 107, -1, 108, -1, 109, -1, 96, -1, 97, - -1, 98, -1, 99, -1, 26, -1, 27, -1, 11, - -1, 12, -1, 13, -1, 16, -1, 15, -1, 14, - -1, 19, -1, 22, -1, 24, -1, 168, -1, -1, - 168, 146, -1, -1, 20, -1, 23, -1, 173, -1, - -1, 171, 146, -1, 42, -1, 44, -1, 43, -1, - 45, -1, 47, -1, 46, -1, 48, -1, 50, -1, - -1, 143, -1, 144, -1, 145, -1, -1, 46, -1, - 48, -1, -1, 42, -1, 43, -1, 44, -1, 47, - -1, -1, 44, -1, 42, -1, -1, 61, -1, 62, - -1, 63, -1, 64, -1, 65, -1, 60, 4, -1, - 135, -1, 117, -1, 134, -1, 118, -1, 137, -1, - 138, -1, 140, -1, 141, -1, 142, -1, -1, 182, - 181, -1, 136, -1, 139, -1, 135, -1, 134, -1, - -1, 184, 183, -1, -1, 53, 4, -1, -1, 147, - 53, 4, -1, 34, 22, -1, -1, 187, -1, -1, - 147, 190, 189, -1, 187, -1, 53, 4, -1, 11, - -1, 12, -1, 13, -1, 16, -1, 15, -1, 14, - -1, 17, -1, 49, -1, 191, -1, 192, 148, -1, - 226, -1, 149, 4, -1, 192, 150, 196, 151, 184, - -1, 10, 150, 196, 151, 184, -1, 152, 4, 153, - 192, 154, -1, 155, 4, 153, 192, 156, -1, 157, - 197, 158, -1, 157, 158, -1, 155, 157, 197, 158, - 156, -1, 155, 157, 158, 156, -1, 192, 182, -1, - 192, -1, 10, -1, 193, -1, 195, 147, 193, -1, - 195, -1, 195, 147, 39, -1, 39, -1, -1, 192, - -1, 197, 147, 192, -1, 192, 152, 200, 154, -1, - 192, 152, 154, -1, 192, 159, 22, -1, 192, 155, - 200, 156, -1, 192, 157, 200, 158, -1, 192, 157, - 158, -1, 192, 155, 157, 200, 158, 156, -1, 192, - 155, 157, 158, 156, -1, 192, 40, -1, 192, 41, - -1, 192, 226, -1, 192, 199, -1, 192, 25, -1, - 166, 3, -1, 166, 5, -1, 166, 4, -1, 166, - 6, -1, 11, 26, -1, 11, 27, -1, 167, 9, - -1, 163, 150, 198, 38, 192, 151, -1, 115, 150, - 198, 237, 151, -1, 129, 150, 198, 147, 198, 147, - 198, 151, -1, 161, 150, 198, 147, 198, 151, -1, - 162, 150, 198, 147, 198, 151, -1, 88, 164, 150, - 198, 147, 198, 151, -1, 89, 165, 150, 198, 147, - 198, 151, -1, 131, 150, 198, 147, 198, 151, -1, - 132, 150, 198, 147, 198, 147, 198, 151, -1, 133, - 150, 198, 147, 198, 147, 198, 151, -1, 200, 147, - 198, -1, 198, -1, 32, -1, 33, -1, 37, -1, - -1, 194, 226, -1, 121, 150, 203, 38, 192, 151, - -1, 205, -1, -1, 206, -1, 205, 206, -1, -1, - 31, 207, 222, -1, -1, 30, 208, 223, -1, 58, - 57, 212, -1, 170, 18, 192, -1, 170, 18, 10, - -1, -1, 172, 176, 202, 201, 198, 209, 189, -1, - -1, 172, 174, 176, 202, 201, 198, 210, 189, -1, - -1, 172, 175, 176, 202, 201, 192, 211, 189, -1, - 172, 176, 35, 179, 203, -1, 51, 213, -1, 54, - 146, 214, -1, 22, -1, 52, 146, 22, -1, 66, - 146, 22, -1, 152, 215, 154, -1, 215, 147, 22, - -1, 22, -1, -1, 216, 147, 192, 182, 169, -1, - 192, 182, 169, -1, 216, -1, 216, 147, 39, -1, - 39, -1, -1, 180, 194, 171, 150, 217, 151, 184, - 188, 185, -1, 28, -1, 157, -1, 178, 176, 218, - 219, -1, 29, -1, 158, -1, 229, 221, -1, 177, - 176, 218, -1, -1, 59, -1, 3, -1, 4, -1, - 9, -1, 26, -1, 27, -1, 40, -1, 41, -1, - 25, -1, 155, 200, 156, -1, 199, -1, 57, 224, - 22, 147, 22, -1, 7, -1, 8, -1, 168, -1, - 171, -1, 226, -1, 225, -1, 192, 227, -1, 229, - 230, -1, 220, 230, -1, 231, 170, 232, -1, 231, - 234, -1, -1, 21, -1, 67, 228, -1, 67, 10, - -1, 68, 17, 227, -1, 68, 11, 227, 147, 17, - 227, 147, 17, 227, -1, 69, 166, 227, 147, 17, - 227, 152, 233, 154, -1, 69, 166, 227, 147, 17, - 227, 152, 154, -1, 70, 180, 194, 227, 150, 236, - 151, 184, 38, 17, 227, 71, 17, 227, -1, 71, - -1, 72, -1, 233, 166, 225, 147, 17, 227, -1, - 166, 225, 147, 17, 227, -1, 170, 239, -1, 192, - 152, 227, 147, 227, 154, -1, 235, 147, 152, 227, - 147, 227, 154, -1, 192, 227, 182, -1, 236, 147, - 192, 227, 182, -1, -1, -1, 237, 147, 228, -1, - 56, 55, -1, 55, -1, 161, 192, 227, 147, 227, - -1, 162, 192, 227, 147, 227, -1, 88, 164, 192, - 227, 147, 227, -1, 89, 165, 192, 227, 147, 227, - -1, 163, 228, 38, 192, -1, 129, 228, 147, 228, - 147, 228, -1, 130, 228, 147, 192, -1, 131, 228, - 147, 228, -1, 132, 228, 147, 228, 147, 228, -1, - 133, 228, 147, 228, 147, 228, -1, 128, 235, -1, - 238, 180, 194, 227, 150, 236, 151, 184, -1, 241, - -1, 36, -1, -1, 110, 192, 186, -1, 110, 192, - 147, 11, 227, 186, -1, 111, 192, 186, -1, 111, - 192, 147, 11, 227, 186, -1, 112, 228, -1, 240, - 113, 192, 227, 186, -1, 240, 114, 228, 147, 192, - 227, 186, -1, 115, 192, 227, 237, -1 -}; +#if YYDEBUG != 0 || defined (YYERROR_VERBOSE) -/* YYRLINE[YYN] -- source line where rule number YYN was defined. */ -static const unsigned short yyrline[] = -{ - 0, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, - 1122, 1123, 1123, 1123, 1123, 1123, 1123, 1124, 1124, 1124, - 1124, 1124, 1124, 1125, 1125, 1125, 1125, 1125, 1125, 1128, - 1128, 1129, 1129, 1130, 1130, 1131, 1131, 1132, 1132, 1136, - 1136, 1137, 1137, 1138, 1138, 1139, 1139, 1140, 1140, 1141, - 1141, 1142, 1142, 1143, 1144, 1149, 1150, 1150, 1150, 1150, - 1150, 1152, 1152, 1152, 1153, 1153, 1157, 1161, 1166, 1166, - 1168, 1169, 1174, 1180, 1181, 1182, 1183, 1184, 1188, 1189, - 1190, 1194, 1195, 1196, 1197, 1201, 1202, 1203, 1207, 1208, - 1209, 1210, 1211, 1215, 1216, 1217, 1220, 1221, 1222, 1223, - 1224, 1225, 1226, 1233, 1234, 1235, 1236, 1237, 1238, 1239, - 1240, 1241, 1244, 1245, 1250, 1251, 1252, 1253, 1256, 1257, - 1264, 1265, 1271, 1272, 1280, 1288, 1289, 1294, 1295, 1296, - 1301, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1317, 1321, - 1325, 1332, 1337, 1345, 1375, 1406, 1411, 1423, 1433, 1437, - 1447, 1454, 1461, 1468, 1473, 1478, 1485, 1486, 1493, 1500, - 1508, 1514, 1526, 1554, 1570, 1597, 1625, 1651, 1671, 1697, - 1717, 1729, 1736, 1802, 1812, 1822, 1828, 1838, 1844, 1854, - 1859, 1864, 1872, 1884, 1906, 1914, 1920, 1931, 1936, 1941, - 1947, 1953, 1962, 1966, 1974, 1974, 1977, 1977, 1980, 1992, - 2013, 2018, 2026, 2027, 2031, 2031, 2035, 2035, 2038, 2041, - 2065, 2076, 2076, 2087, 2086, 2096, 2095, 2106, 2125, 2128, - 2134, 2144, 2148, 2153, 2155, 2160, 2165, 2174, 2184, 2195, - 2199, 2208, 2217, 2222, 2343, 2343, 2345, 2354, 2354, 2356, - 2361, 2373, 2377, 2382, 2386, 2390, 2394, 2398, 2402, 2406, - 2410, 2414, 2439, 2443, 2453, 2457, 2461, 2466, 2473, 2473, - 2479, 2488, 2492, 2501, 2510, 2519, 2523, 2530, 2534, 2538, - 2543, 2553, 2572, 2581, 2661, 2665, 2672, 2683, 2696, 2706, - 2717, 2727, 2736, 2745, 2748, 2749, 2756, 2760, 2765, 2786, - 2803, 2817, 2831, 2843, 2851, 2858, 2864, 2870, 2876, 2891, - 2976, 2981, 2985, 2992, 2999, 3007, 3014, 3022, 3030, 3044, - 3061 +static const char * const yytname[] = { "$","error","$undefined.","ESINT64VAL", +"EUINT64VAL","ESAPINTVAL","EUAPINTVAL","LOCALVAL_ID","GLOBALVAL_ID","FPVAL", +"VOID","INTTYPE","FLOAT","DOUBLE","X86_FP80","FP128","PPC_FP128","LABEL","TYPE", +"LOCALVAR","GLOBALVAR","LABELSTR","STRINGCONSTANT","ATSTRINGCONSTANT","PCTSTRINGCONSTANT", +"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","SIGNEXT","ZEROEXT","NORETURN","INREG","SRET","NOUNWIND","NOALIAS", +"BYVAL","NEST","DEFAULT","HIDDEN","PROTECTED","'='","','","'*'","'\\\\'","'('", +"')'","'['","'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","AliaseeRef", +"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 YYDEBUG || YYERROR_VERBOSE -/* YYTNME[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", "X86_FP80", "FP128", "PPC_FP128", "LABEL", "TYPE", - "LOCALVAR", "GLOBALVAR", "LABELSTR", "STRINGCONSTANT", - "ATSTRINGCONSTANT", "PCTSTRINGCONSTANT", "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", "SIGNEXT", "ZEROEXT", "NORETURN", - "INREG", "SRET", "NOUNWIND", "NOALIAS", "BYVAL", "NEST", "DEFAULT", - "HIDDEN", "PROTECTED", "'='", "','", "'*'", "'\\\\'", "'('", "')'", - "'['", "'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", "AliaseeRef", "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 yyr1[] = { 0, + 160, 160, 160, 160, 160, 160, 160, 160, 160, 161, + 161, 161, 161, 161, 161, 162, 162, 162, 162, 162, + 162, 162, 162, 162, 162, 162, 162, 163, 163, 163, + 163, 163, 163, 163, 163, 163, 163, 164, 164, 164, + 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, + 164, 164, 164, 165, 166, 166, 166, 166, 166, 167, + 167, 167, 168, 168, 169, 169, 170, 170, 171, 171, + 172, 173, 173, 173, 173, 173, 174, 174, 174, 175, + 175, 175, 175, 176, 176, 176, 177, 177, 177, 177, + 177, 178, 178, 178, 179, 179, 179, 179, 179, 179, + 179, 180, 180, 180, 180, 180, 180, 180, 180, 180, + 181, 181, 182, 182, 182, 182, 183, 183, 184, 184, + 185, 185, 186, 187, 187, 188, 188, 189, 189, 190, + 190, 190, 190, 190, 190, 190, 191, 191, 191, 191, + 191, 191, 191, 191, 191, 191, 191, 191, 191, 192, + 193, 193, 194, 194, 195, 195, 195, 195, 196, 196, + 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, + 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, + 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, + 199, 199, 200, 200, 201, 201, 202, 202, 203, 203, + 204, 204, 206, 205, 207, 205, 205, 205, 205, 208, + 205, 209, 205, 210, 205, 205, 205, 205, 211, 212, + 212, 213, 214, 214, 214, 215, 215, 216, 216, 216, + 216, 217, 218, 218, 219, 220, 220, 221, 222, 223, + 223, 224, 224, 224, 224, 224, 224, 224, 224, 224, + 224, 224, 225, 225, 225, 225, 226, 226, 227, 228, + 228, 229, 230, 230, 230, 231, 231, 231, 231, 231, + 231, 231, 231, 231, 232, 232, 233, 234, 234, 235, + 235, 235, 236, 236, 237, 237, 238, 238, 238, 238, + 238, 238, 238, 238, 238, 238, 238, 238, 238, 239, + 239, 240, 240, 240, 240, 240, 240, 240, 240 }; -#endif -# ifdef YYPRINT -/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to - token YYLEX-NUM. */ -static const unsigned short 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, 391, 392, 393, 394, - 395, 396, 397, 398, 399, 400, 61, 44, 42, 92, - 40, 41, 91, 120, 93, 60, 62, 123, 125, 99 +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, 1, + 1, 1, 1, 0, 2, 0, 1, 1, 1, 0, + 2, 1, 1, 1, 1, 1, 1, 1, 1, 0, + 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, + 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, + 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 0, 2, 1, 1, 1, 1, 0, 2, 0, 2, + 0, 3, 2, 0, 1, 0, 3, 1, 2, 1, + 1, 1, 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, 2, 6, 1, 0, + 1, 2, 0, 3, 0, 3, 3, 3, 3, 0, + 7, 0, 8, 0, 8, 5, 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 }; -# endif -/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ -static const unsigned char yyr1[] = -{ - 0, 160, 161, 161, 161, 161, 161, 161, 161, 161, - 161, 162, 162, 162, 162, 162, 162, 163, 163, 163, - 163, 163, 163, 163, 163, 163, 163, 163, 163, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 165, - 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, - 165, 165, 165, 165, 165, 166, 167, 167, 167, 167, - 167, 168, 168, 168, 169, 169, 170, 170, 171, 171, - 172, 172, 173, 174, 174, 174, 174, 174, 175, 175, - 175, 176, 176, 176, 176, 177, 177, 177, 178, 178, - 178, 178, 178, 179, 179, 179, 180, 180, 180, 180, - 180, 180, 180, 181, 181, 181, 181, 181, 181, 181, - 181, 181, 182, 182, 183, 183, 183, 183, 184, 184, - 185, 185, 186, 186, 187, 188, 188, 189, 189, 190, - 190, 191, 191, 191, 191, 191, 191, 191, 192, 192, - 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, - 192, 193, 194, 194, 195, 195, 196, 196, 196, 196, - 197, 197, 198, 198, 198, 198, 198, 198, 198, 198, - 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, - 198, 198, 199, 199, 199, 199, 199, 199, 199, 199, - 199, 199, 200, 200, 201, 201, 202, 202, 203, 203, - 204, 204, 205, 205, 207, 206, 208, 206, 206, 206, - 206, 209, 206, 210, 206, 211, 206, 206, 206, 206, - 212, 213, 213, 214, 215, 215, 215, 216, 216, 217, - 217, 217, 217, 218, 219, 219, 220, 221, 221, 222, - 223, 224, 224, 225, 225, 225, 225, 225, 225, 225, - 225, 225, 225, 225, 226, 226, 226, 226, 227, 227, - 228, 229, 229, 230, 231, 231, 231, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 233, 233, 234, 235, - 235, 236, 236, 236, 237, 237, 238, 238, 239, 239, - 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, - 239, 240, 240, 241, 241, 241, 241, 241, 241, 241, - 241 +static const short yydefact[] = { 70, + 60, 67, 61, 68, 62, 205, 203, 0, 0, 0, + 0, 0, 0, 80, 69, 70, 201, 84, 87, 0, + 0, 217, 0, 0, 65, 0, 71, 72, 74, 73, + 75, 77, 76, 78, 79, 81, 82, 83, 80, 80, + 196, 202, 85, 86, 80, 206, 88, 89, 90, 91, + 80, 264, 204, 264, 0, 0, 225, 218, 219, 207, + 253, 254, 209, 130, 131, 132, 135, 134, 133, 136, + 137, 0, 0, 0, 0, 255, 256, 138, 208, 140, + 196, 196, 92, 195, 0, 95, 95, 265, 261, 66, + 236, 237, 238, 260, 220, 221, 224, 0, 158, 141, + 0, 0, 0, 0, 147, 159, 0, 139, 158, 0, + 0, 94, 93, 0, 193, 194, 0, 0, 96, 97, + 98, 99, 100, 0, 239, 0, 301, 263, 0, 222, + 157, 111, 153, 155, 0, 0, 0, 0, 0, 0, + 146, 0, 0, 0, 152, 0, 151, 0, 216, 130, + 131, 132, 135, 134, 133, 0, 0, 0, 210, 101, + 0, 233, 234, 235, 300, 286, 0, 0, 0, 0, + 95, 273, 274, 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, 262, 95, 277, 0, 299, + 223, 150, 0, 117, 0, 0, 149, 0, 160, 117, + 212, 214, 0, 197, 178, 179, 174, 176, 175, 177, + 180, 173, 169, 170, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 172, 171, + 126, 0, 285, 267, 0, 266, 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, 121, + 121, 306, 0, 0, 297, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 103, 105, 104, 102, + 106, 107, 108, 109, 110, 112, 156, 154, 143, 144, + 145, 148, 142, 126, 126, 0, 0, 0, 0, 0, + 0, 0, 0, 162, 192, 0, 0, 0, 166, 0, + 163, 0, 0, 0, 0, 211, 231, 242, 243, 244, + 249, 245, 246, 247, 248, 240, 0, 251, 258, 257, + 259, 0, 268, 0, 0, 0, 0, 0, 302, 0, + 304, 283, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 116, 115, 113, 114, 118, + 213, 215, 0, 0, 0, 283, 0, 0, 0, 0, + 0, 161, 147, 159, 0, 164, 165, 0, 0, 0, + 0, 0, 128, 126, 230, 111, 228, 0, 241, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 309, + 0, 0, 0, 293, 294, 0, 0, 0, 0, 291, + 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 191, 168, 0, 0, 0, 0, 123, 129, 127, + 64, 0, 117, 0, 250, 0, 0, 282, 0, 0, + 121, 122, 121, 0, 0, 0, 0, 0, 0, 287, + 288, 282, 0, 307, 0, 198, 0, 0, 182, 0, + 0, 0, 0, 167, 0, 0, 0, 63, 227, 229, + 111, 124, 0, 0, 0, 0, 0, 289, 290, 303, + 305, 284, 0, 0, 292, 295, 296, 0, 121, 0, + 0, 0, 188, 0, 0, 184, 185, 181, 64, 125, + 119, 252, 0, 0, 111, 0, 117, 278, 0, 117, + 308, 186, 187, 0, 0, 0, 226, 0, 232, 0, + 271, 0, 0, 280, 0, 0, 279, 298, 183, 189, + 190, 120, 269, 0, 270, 0, 111, 0, 0, 0, + 281, 0, 0, 0, 0, 276, 0, 0, 275, 0, + 272, 0, 0, 0 }; -/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ -static const unsigned char 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, 1, 1, 1, 1, 0, 2, 0, 1, 1, - 1, 0, 2, 1, 1, 1, 1, 1, 1, 1, - 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, - 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, - 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 0, 2, 1, 1, 1, 1, 0, 2, - 0, 2, 0, 3, 2, 0, 1, 0, 3, 1, - 2, 1, 1, 1, 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, 2, 6, - 1, 0, 1, 2, 0, 3, 0, 3, 3, 3, - 3, 0, 7, 0, 8, 0, 8, 5, 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 +static const short yydefgoto[] = { 256, + 257, 258, 282, 299, 156, 157, 76, 509, 12, 77, + 14, 15, 39, 40, 41, 45, 51, 114, 124, 326, + 222, 400, 329, 559, 379, 423, 541, 356, 424, 78, + 158, 133, 148, 134, 135, 107, 345, 368, 346, 117, + 85, 149, 592, 16, 17, 19, 18, 261, 334, 335, + 60, 22, 58, 98, 427, 428, 125, 164, 52, 93, + 53, 46, 430, 369, 80, 371, 266, 54, 89, 90, + 216, 563, 128, 305, 517, 440, 217, 218, 219, 220 }; -/* 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 unsigned short yydefact[] = -{ - 71, 61, 68, 62, 69, 63, 206, 204, 0, 0, - 0, 0, 0, 0, 81, 70, 0, 71, 202, 85, - 88, 0, 0, 218, 0, 0, 66, 0, 72, 73, - 75, 74, 76, 78, 77, 79, 80, 82, 83, 84, - 81, 81, 197, 1, 203, 86, 87, 81, 207, 89, - 90, 91, 92, 81, 265, 205, 265, 0, 0, 226, - 219, 220, 208, 254, 255, 210, 131, 132, 133, 136, - 135, 134, 137, 138, 0, 0, 0, 0, 256, 257, - 139, 209, 141, 197, 197, 93, 196, 0, 96, 96, - 266, 262, 67, 237, 238, 239, 261, 221, 222, 225, - 0, 159, 142, 0, 0, 0, 0, 148, 160, 0, - 140, 159, 0, 0, 95, 94, 0, 194, 195, 0, - 0, 97, 98, 99, 100, 101, 0, 240, 0, 302, - 264, 0, 223, 158, 112, 154, 156, 0, 0, 0, - 0, 0, 0, 147, 0, 0, 0, 153, 0, 152, - 0, 217, 131, 132, 133, 136, 135, 134, 0, 0, - 0, 211, 102, 0, 234, 235, 236, 301, 287, 0, - 0, 0, 0, 96, 274, 275, 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, 263, 96, - 278, 0, 300, 224, 151, 0, 118, 0, 0, 150, - 0, 161, 118, 213, 215, 0, 198, 179, 180, 175, - 177, 176, 178, 181, 174, 170, 171, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 173, 172, 127, 0, 286, 268, 0, 267, 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, 122, 122, 307, 0, 0, 298, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, - 106, 105, 103, 107, 108, 109, 110, 111, 113, 157, - 155, 144, 145, 146, 149, 143, 127, 127, 0, 0, - 0, 0, 0, 0, 0, 0, 163, 193, 0, 0, - 0, 167, 0, 164, 0, 0, 0, 0, 212, 232, - 243, 244, 245, 250, 246, 247, 248, 249, 241, 0, - 252, 259, 258, 260, 0, 269, 0, 0, 0, 0, - 0, 303, 0, 305, 284, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 117, 116, - 114, 115, 119, 214, 216, 0, 0, 0, 284, 0, - 0, 0, 0, 0, 162, 148, 160, 0, 165, 166, - 0, 0, 0, 0, 0, 129, 127, 231, 112, 229, - 0, 242, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 310, 0, 0, 0, 294, 295, 0, 0, - 0, 0, 292, 0, 122, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 192, 169, 0, 0, 0, 0, - 124, 130, 128, 65, 0, 118, 0, 251, 0, 0, - 283, 0, 0, 122, 123, 122, 0, 0, 0, 0, - 0, 0, 288, 289, 283, 0, 308, 0, 199, 0, - 0, 183, 0, 0, 0, 0, 168, 0, 0, 0, - 64, 228, 230, 112, 125, 0, 0, 0, 0, 0, - 290, 291, 304, 306, 285, 0, 0, 293, 296, 297, - 0, 122, 0, 0, 0, 189, 0, 0, 185, 186, - 182, 65, 126, 120, 253, 0, 0, 112, 0, 118, - 279, 0, 118, 309, 187, 188, 0, 0, 0, 227, - 0, 233, 0, 272, 0, 0, 281, 0, 0, 280, - 299, 184, 190, 191, 121, 270, 0, 271, 0, 112, - 0, 0, 0, 282, 0, 0, 0, 0, 277, 0, - 0, 276, 0, 273 +static const short yypact[] = { 42, +-32768,-32768,-32768,-32768,-32768,-32768,-32768, -21, -131, 60, + -93, 105, -22, 182,-32768, 525,-32768, 46, 168, -12, + 19,-32768, 1, 152,-32768, 1277,-32768,-32768,-32768,-32768, +-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 90, 90, + 100,-32768,-32768,-32768, 90,-32768,-32768,-32768,-32768,-32768, + 90, 186,-32768, 12, 187, 201, 209,-32768,-32768,-32768, +-32768,-32768, 93,-32768,-32768,-32768,-32768,-32768,-32768,-32768, +-32768, 252, 254, 2, 907,-32768,-32768,-32768, 13,-32768, + 225, 225, 150,-32768, 76, 116, 116,-32768,-32768, 108, +-32768,-32768,-32768,-32768,-32768,-32768,-32768, -79, 1027,-32768, + 111, 114, 947, 93,-32768, 13, -104,-32768, 1027, 76, + 76,-32768,-32768, 1067,-32768,-32768, 1299, 266,-32768,-32768, +-32768,-32768,-32768, 1330,-32768, -16, 1572,-32768, 256,-32768, +-32768, 13,-32768, 139, 144, 1370, 1370, 132, -95, 1370, +-32768, 145, 1299, 1370, 93, 147, 13, 311,-32768, 43, + 290, 293, 298, 299, 302, 247, 303, 724,-32768,-32768, + 35,-32768,-32768,-32768,-32768,-32768, 258, 1450, 70, 305, + 116,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, +-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 317, 405, + 1370, 1370, 1370, 1370,-32768,-32768,-32768,-32768,-32768,-32768, +-32768,-32768,-32768,-32768,-32768,-32768, 1370, 1370, 1370, 1370, + 1370, 1370, 1370, 1370, 1370,-32768, 116,-32768, 34,-32768, +-32768, 131, 1107,-32768, 6, -46,-32768, 164, 13,-32768, +-32768, 13, 1067,-32768,-32768,-32768,-32768,-32768,-32768,-32768, +-32768,-32768,-32768,-32768, 317, 405, 173, 178, 179, 189, + 192, 1179, 1481, 987, 314, 193, 197, 198,-32768,-32768, + 202, 203,-32768, 93, 565,-32768, 699, 699,-32768, 699, + 1330,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, +-32768, 1370,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, +-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 1370, 113, + 137,-32768, 565, -10, 205, 207, 208, 210, 218, 219, + 565, 565, 330, 1330, 1370, 1370,-32768,-32768,-32768,-32768, +-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 106,-32768, +-32768,-32768, 106, 202, 202, 331, 220, 221, 1299, 1299, + 1299, 1299, 1299,-32768,-32768, -41, 1005, -61,-32768, -91, +-32768, 1299, 1299, 1299, -13,-32768, 1219,-32768,-32768,-32768, +-32768,-32768,-32768,-32768,-32768, 313, 1299,-32768,-32768,-32768, +-32768, 226,-32768, 227, 699, 565, 565, 23,-32768, 24, +-32768,-32768, 699, 223, 1370, 1370, 1370, 1370, 1370, 232, + 233, 1370, 699, 565, 234,-32768,-32768,-32768,-32768,-32768, +-32768,-32768, 1370, 1299, 1299,-32768, 235, 236, 237, 239, + 1299,-32768, 231, 724, -76,-32768,-32768, 241, 242, 352, + 369, 388,-32768, 202,-32768, 13, 246, 243,-32768, 374, + -59, 380, 385, 253, 257, 270, 699, 414, 699, 272, + 273, 699, 278, 13,-32768, 280, 282, 699, 699, 13, + 283, 287, 1370, -112, 288, 289, -33, 1299, 1299, 1299, + 1299,-32768,-32768, 294, 1299, 1299, 1370,-32768,-32768,-32768, + 79, 1259,-32768, 292,-32768, 699, 699, 1370, 699, 699, + 287,-32768, 287, 1370, 699, 307, 1370, 1370, 1370,-32768, +-32768, 1370, 392,-32768, 565,-32768, 1299, 1299,-32768, 308, + 295, 309, 310,-32768, 301, 315, 7,-32768,-32768,-32768, + 13, 10, 427, 318, 306, 565, 52,-32768,-32768,-32768, +-32768,-32768, 316, 699,-32768,-32768,-32768, 71, 287, 322, + 325, 1299,-32768, 1299, 1299,-32768,-32768,-32768, 79,-32768, + 407,-32768, 444, -4,-32768, 1370,-32768,-32768, 323,-32768, +-32768,-32768,-32768, 327, 328, 329,-32768, 464,-32768, 699, +-32768, 859, -3, 131, 565, -14,-32768, 106,-32768,-32768, +-32768,-32768,-32768, 334,-32768, 859,-32768, 452, 465, 336, + 131, 699, 699, 468, 416,-32768, 699, 471,-32768, 699, +-32768, 490, 491,-32768 }; -/* YYDEFGOTO[NTERM-NUM]. */ -static const short yydefgoto[] = -{ - -1, 258, 259, 260, 284, 301, 158, 159, 78, 511, - 12, 79, 14, 15, 40, 41, 42, 47, 53, 116, - 126, 328, 224, 402, 331, 561, 381, 425, 543, 358, - 426, 80, 160, 135, 150, 136, 137, 109, 347, 370, - 348, 119, 87, 151, 16, 17, 18, 20, 19, 263, - 336, 337, 62, 23, 60, 100, 429, 430, 127, 166, - 54, 95, 55, 48, 432, 371, 82, 373, 268, 56, - 91, 92, 218, 565, 130, 307, 519, 442, 219, 220, - 221, 222 +static const short yypgoto[] = { 365, + 366, 367, 255, 251, -168,-32768, 0, -40, 408, 14, +-32768,-32768,-32768,-32768, 40,-32768,-32768,-32768, -158,-32768, + -406,-32768, -226,-32768, -290, 3,-32768, -317,-32768,-32768, + -25, 296, -119,-32768, 409, 413, -60, -155, -231, 166, + 119, 284,-32768,-32768, 504,-32768,-32768,-32768,-32768,-32768, +-32768,-32768,-32768,-32768,-32768,-32768, 435,-32768,-32768,-32768, +-32768,-32768,-32768, -525, -139, 47, -183,-32768, 474,-32768, +-32768,-32768,-32768,-32768, 37, 124,-32768,-32768,-32768,-32768 }; -/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing - STATE-NUM. */ -#define YYPACT_NINF -529 -static const short yypact[] = -{ - 40, -529, -529, -529, -529, -529, -529, -529, -17, -107, - 12, -64, 78, -40, 183, -529, 150, 370, -529, 147, - 115, -5, 26, -529, 14, 132, -529, 1319, -529, -529, - -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, - -90, -90, 173, -529, -529, -529, -529, -90, -529, -529, - -529, -529, -529, -90, 154, -529, -7, 179, 197, 214, - -529, -529, -529, -529, -529, 96, -529, -529, -529, -529, - -529, -529, -529, -529, 253, 258, 3, 791, -529, -529, - -529, 145, -529, 228, 228, 287, -529, 191, 189, 189, - -529, -529, 109, -529, -529, -529, -529, -529, -529, -529, - -66, 1052, -529, 125, 135, 835, 96, -529, 145, -110, - -529, 1052, 191, 191, -529, -529, 1092, -529, -529, 1359, - 285, -529, -529, -529, -529, -529, 1377, -529, -12, 1525, - -529, 272, -529, -529, 145, -529, 153, 152, 1430, 1430, - 168, -106, 1430, -529, 157, 1359, 1430, 96, 159, 145, - 102, -529, 39, 321, 323, 325, 326, 327, 266, 328, - 750, -529, -529, 141, -529, -529, -529, -529, -529, 288, - 1470, 94, 329, 189, -529, -529, -529, -529, -529, -529, - -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, - -529, 222, 625, 1430, 1430, 1430, 1430, -529, -529, -529, - -529, -529, -529, -529, -529, -529, -529, -529, -529, 1430, - 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, -529, 189, - -529, 128, -529, -529, 126, 1110, -529, -53, -72, -529, - 188, 145, -529, -529, 145, 1092, -529, -529, -529, -529, - -529, -529, -529, -529, -529, -529, -529, 222, 625, 195, - 196, 200, 201, 202, 1204, 1528, 1012, 331, 204, 206, - 208, -529, -529, 212, 210, -529, 96, 486, -529, 623, - 623, -529, 623, 1377, -529, -529, -529, -529, -529, -529, - -529, -529, -529, -529, 1430, -529, -529, -529, -529, -529, - -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, - -529, 1430, -1, 32, -529, 486, 52, 219, 220, 224, - 227, 230, 233, 486, 486, 343, 1377, 1430, 1430, -529, - -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, - -529, 77, -529, -529, -529, 77, 212, 212, 344, 234, - 235, 1359, 1359, 1359, 1359, 1359, -529, -529, -61, 1031, - -100, -529, -101, -529, 1359, 1359, 1359, -19, -529, 1261, - -529, -529, -529, -529, -529, -529, -529, -529, 310, 1359, - -529, -529, -529, -529, 236, -529, 240, 623, 486, 486, - 20, -529, 21, -529, -529, 623, 239, 1430, 1430, 1430, - 1430, 1430, 249, 250, 1430, 623, 486, 251, -529, -529, - -529, -529, -529, -529, -529, 1430, 1359, 1359, -529, 252, - 259, 260, 264, 1359, -529, 256, 750, -75, -529, -529, - 267, 268, 375, 396, 415, -529, 212, -529, 145, 273, - 274, -529, 401, -79, 409, 413, 281, 286, 289, 623, - 428, 623, 290, 291, 623, 292, 145, -529, 293, 299, - 623, 623, 145, 284, 300, 1430, 84, 303, 304, -44, - 1359, 1359, 1359, 1359, -529, -529, 279, 1359, 1359, 1430, - -529, -529, -529, 80, 1279, -529, 306, -529, 623, 623, - 1430, 623, 623, 300, -529, 300, 1430, 623, 308, 1430, - 1430, 1430, -529, -529, 1430, 403, -529, 486, -529, 1359, - 1359, -529, 311, 315, 312, 314, -529, 316, 318, 129, - -529, -529, -529, 145, 4, 435, 324, 320, 486, -33, - -529, -529, -529, -529, -529, 330, 623, -529, -529, -529, - -32, 300, 319, 332, 1359, -529, 1359, 1359, -529, -529, - -529, 80, -529, 421, -529, 445, -2, -529, 1430, -529, - -529, 333, -529, -529, -529, -529, 334, 335, 340, -529, - 471, -529, 623, -529, 885, 2, 126, 486, 42, -529, - 77, -529, -529, -529, -529, -529, 345, -529, 885, -529, - 460, 479, 350, 126, 623, 623, 483, 430, -529, 623, - 485, -529, 623, -529 -}; -/* YYPGOTO[NTERM-NUM]. */ -static const short yypgoto[] = -{ - -529, 374, 378, 385, 257, 269, -170, -529, 0, -25, - 423, 8, -529, -529, -529, -529, 95, -529, -529, -529, - -152, -529, -424, -529, -227, -529, -291, 5, -529, -318, - -529, -529, -26, 295, -120, -529, 407, 416, -58, -157, - -232, 161, 198, 294, -529, -529, 506, -529, -529, -529, - -529, -529, -529, -529, -529, -529, -529, -529, 436, -529, - -529, -529, -529, -529, -529, -528, -140, 103, -184, -529, - 468, -529, -529, -529, -529, -529, 34, 122, -529, -529, - -529, -529 -}; +#define YYLAST 1705 -/* 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 -202 -static const short yytable[] = -{ - 11, 81, 272, 261, 473, 335, 163, 104, 13, 271, - 236, 304, 383, 271, 90, 423, 164, 11, 403, 404, - 262, 273, 93, 350, 352, 13, 308, 309, 310, 311, - 312, 439, 441, 315, 424, 21, 576, 142, 423, 24, - -201, 142, -55, -55, -55, -55, 413, 413, 143, 22, - 582, 108, 230, 37, 38, 39, 418, 419, -67, 1, - 2, 161, 3, 4, 5, 237, 238, 316, 413, 25, - 6, 7, 413, 440, 440, 134, 110, 477, 111, 108, - 580, 131, 26, 466, 333, 134, 413, 233, 132, 541, - 149, 8, 11, 414, 9, 110, 27, 111, 10, 1, - 149, 332, 3, 486, 5, 269, 28, 501, 472, 63, - 64, 270, 227, 228, 548, 548, 231, 417, 549, 552, - 234, 1, 2, 566, 3, 4, 5, 372, 1, 372, - 372, 3, 372, 5, 397, 83, 84, 433, 398, 399, - 400, 57, 88, 401, 267, 165, 380, 110, 89, 111, - 43, 94, 563, 377, 61, 583, 577, 49, 50, 51, - 105, 2, 52, 496, 4, 372, 59, 302, 303, 267, - 305, 264, 58, 372, 372, 90, 398, 399, 400, 382, - 110, 401, 111, 306, 267, 267, 267, 267, 267, 313, - 314, 267, 522, 45, 523, 46, 395, 319, 320, 134, - 110, 97, 111, 445, 385, 447, 448, 449, 85, 149, - 86, 398, 399, 400, 321, 322, 401, 323, 324, 98, - 325, 326, 327, 117, 118, 29, 30, 31, 32, 33, - 34, 35, 110, 36, 111, 498, 99, 372, 372, 372, - 553, 317, 318, 319, 320, 372, 101, 149, 514, 120, - 121, 122, 123, 124, 125, 372, 372, 102, 378, 261, - 321, 322, 103, 323, 324, 86, 325, 326, 327, 239, - 240, 241, 242, 145, 146, 379, 262, 110, 138, 111, - 540, 112, 113, 408, 409, 410, 411, 412, 139, 162, - 149, 396, 267, 110, 223, 111, 420, 421, 422, 372, - 225, 372, 524, 226, 372, 527, 528, 529, 232, 235, - 372, 372, 274, 275, 276, 277, 278, 279, 280, 281, - 282, 283, 568, 416, 229, 570, 37, 38, 39, 114, - -56, 115, -57, 428, -60, -59, -58, 243, 372, 372, - 271, 372, 372, 265, 334, 341, 342, 372, 457, 458, - 343, 344, 345, 353, 354, 464, 355, 372, 356, 357, - 359, 267, 446, 267, 267, 267, 386, 387, 452, 431, - -200, 388, 374, 375, 389, 376, 564, 390, 372, 456, - 391, 394, 405, 434, 406, 407, 372, 435, -67, 1, - 2, 444, 3, 4, 5, 578, 450, 451, 455, 460, - 6, 7, 502, 503, 504, 505, 461, 462, 384, 507, - 508, 463, 465, 469, 467, 468, 392, 393, 470, 471, - 474, 8, 372, 476, 9, 475, 478, 372, 10, 497, - 479, 480, 484, 481, 494, 506, 482, 486, 487, 489, - 490, 532, 533, 509, 372, 372, 491, 495, 513, 372, - 499, 500, 372, 515, 518, 526, 440, 544, 534, 536, - 267, 537, 562, 267, 267, 267, 535, 538, 518, 539, - 554, 545, 546, 510, 560, 574, 556, 584, 557, 558, - 436, 437, 438, 555, 550, 571, 572, 569, 443, 360, - 361, 573, 581, 63, 64, 362, 585, 586, 453, 454, - 589, 590, 592, 215, 339, 1, 2, 216, 3, 4, - 5, 363, 364, 365, 217, 129, 559, 340, 144, 542, - 330, 141, 567, 44, 96, 128, 366, 367, 530, 338, - 459, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 510, 483, 368, 485, 0, 0, 488, 0, 0, - 0, 0, 0, 492, 493, 0, 0, 0, 0, 176, - 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, - 187, 188, 189, 190, 247, 248, 0, 0, 0, 0, - 0, 516, 517, 0, 520, 521, 0, 0, 0, 0, - 525, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 531, 249, 197, 198, 199, 200, 201, 202, 203, 204, - 205, 206, 207, 208, 0, 250, 0, 251, 252, 253, - 0, 547, 0, 0, 0, 0, 360, 361, 0, 551, - 63, 64, 362, 0, 110, 0, 111, 0, 0, 0, - 0, 369, 1, 2, 0, 3, 4, 5, 363, 364, - 365, 285, 286, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 366, 367, 575, 0, 0, 0, 0, - 579, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 368, 0, 0, 0, 0, 0, 0, 587, 588, 0, - 0, 0, 591, 0, 0, 593, 176, 177, 178, 179, - 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, - 190, 247, 248, 0, 0, 0, 0, 0, 0, 0, - 0, 287, 288, 289, 290, 291, 292, 293, 294, 295, - 296, 297, 298, 299, 300, 0, 0, 0, 249, 197, - 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, - 208, 0, 250, 0, 251, 252, 253, 63, 64, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 2, 0, 3, 4, 5, 244, 0, 0, 369, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 245, 246, 0, 0, 0, 0, 0, 0, 63, 64, - 0, 106, 66, 67, 68, 69, 70, 71, 72, 0, - 1, 2, 0, 3, 4, 5, 0, 0, 0, 0, - 0, 0, 0, 176, 177, 178, 179, 180, 181, 182, - 183, 184, 185, 186, 187, 188, 189, 190, 247, 248, - 73, 0, 63, 64, 0, 106, 66, 67, 68, 69, - 70, 71, 72, 0, 1, 2, 0, 3, 4, 5, - 0, 0, 0, 0, 0, 249, 197, 198, 199, 200, - 201, 202, 203, 204, 205, 206, 207, 208, 0, 250, - 0, 251, 252, 253, 73, 0, 0, 0, 360, 361, - 0, 0, 0, 0, 362, 0, 0, 0, 110, 0, - 111, 0, 254, 0, 0, 255, 0, 256, 0, 257, - 363, 364, 365, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 366, 367, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 74, 0, 368, 75, 0, 0, 76, 0, 77, 107, - 0, 0, 0, 0, 0, 0, 0, 0, 176, 177, - 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, - 188, 189, 190, 247, 248, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 74, 0, 0, 75, 0, 0, - 76, 0, 77, 140, 0, 0, 0, 0, 0, 0, - 249, 197, 198, 199, 200, 201, 202, 203, 204, 205, - 206, 207, 208, 0, 250, 0, 251, 252, 253, 63, - 64, 0, 106, 152, 153, 154, 155, 156, 157, 72, - 0, 1, 2, 0, 3, 4, 5, 0, 63, 64, - 369, 106, 152, 153, 154, 155, 156, 157, 72, 0, - 1, 2, 0, 3, 4, 5, 0, 0, 0, 63, - 64, 73, 106, 66, 67, 68, 69, 70, 71, 72, - 0, 1, 2, 0, 3, 4, 5, 0, 0, 0, - 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 133, 0, 0, 0, 0, 0, 0, 0, 63, - 64, 73, 147, 66, 67, 68, 69, 70, 71, 72, - 0, 1, 2, 0, 3, 4, 5, 63, 64, 0, - 106, 66, 67, 68, 69, 70, 71, 72, 0, 1, - 2, 0, 3, 4, 5, 0, 0, 0, 0, 0, - 0, 73, 0, 0, 0, 0, 0, 0, 0, 329, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, - 0, 74, 0, 0, 75, 0, 0, 76, 0, 77, - 351, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 74, 0, 0, 75, 0, 0, 76, 0, 77, 415, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 74, 0, 0, 75, 0, 0, 76, 0, 77, - 0, 63, 64, 148, 106, 152, 153, 154, 155, 156, - 157, 72, 0, 1, 2, 0, 3, 4, 5, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 74, 0, 0, 75, 0, 0, 76, 0, 77, - 0, 0, 0, 73, 0, 0, 0, 0, 0, 74, - 0, 0, 75, 0, 0, 76, 0, 77, 63, 64, - 0, 106, 66, 67, 68, 69, 70, 71, 72, 0, - 1, 2, 0, 3, 4, 5, 63, 64, 0, 106, - 66, 67, 68, 69, 70, 71, 72, 0, 1, 2, - 427, 3, 4, 5, 0, 0, 0, 0, 0, 0, - 73, 0, 0, 0, 0, 0, 0, 0, 512, 0, - 0, 0, 0, 0, 0, 0, 63, 64, 73, 65, - 66, 67, 68, 69, 70, 71, 72, 0, 1, 2, - 0, 3, 4, 5, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 74, 0, 0, 75, 0, 346, 76, - 0, 77, 0, 0, 0, 0, 63, 64, 73, 106, - 152, 153, 154, 155, 156, 157, 72, 0, 1, 2, - 0, 3, 4, 5, 63, 64, 0, 147, 66, 67, - 68, 69, 70, 71, 72, 0, 1, 2, 0, 3, - 4, 5, 0, 0, 0, 0, 0, 0, 73, 0, - 74, 0, 0, 75, 0, 0, 76, 0, 77, 0, - 0, 0, 0, 0, 0, 0, 73, 0, 74, 0, - 0, 75, 0, 0, 76, 0, 77, 63, 64, 0, - 106, 66, 67, 68, 69, 70, 71, 72, 0, 1, - 2, 0, 3, 4, 5, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 74, 0, - 0, 75, 0, 0, 76, 0, 77, 63, 64, 73, - 266, 66, 67, 68, 69, 70, 71, 72, 0, 1, - 2, 0, 3, 4, 5, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 74, 0, - 0, 75, 0, 0, 76, 0, 77, 0, 0, 73, - 0, 0, 0, 0, 0, 0, 74, 0, 0, 75, - 0, 0, 76, 0, 77, 63, 64, 0, 106, 152, - 153, 154, 155, 156, 157, 72, 0, 1, 2, 0, - 3, 4, 5, 0, 0, 0, 0, 0, 0, 0, - 0, 167, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 73, 0, 74, - 168, 169, 75, 0, 0, 76, 0, 77, 0, 0, - 0, 0, 170, 171, 172, 173, 174, 175, 176, 177, - 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, - 188, 189, 190, 191, 192, 0, 0, 0, 0, 74, - 0, 0, 75, 0, 0, 76, 0, 77, 0, 0, - 0, 0, 0, 0, 0, 193, 194, 195, 0, 0, - 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, - 206, 207, 208, 209, 210, 211, 212, 213, 214, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 74, 0, 0, - 75, 0, 0, 76, 0, 349 -}; -static const short yycheck[] = -{ - 0, 27, 172, 160, 428, 232, 126, 4, 0, 11, - 150, 195, 303, 11, 21, 34, 28, 17, 336, 337, - 160, 173, 29, 255, 256, 17, 210, 211, 212, 213, - 214, 11, 11, 217, 53, 52, 564, 147, 34, 146, - 0, 147, 3, 4, 5, 6, 147, 147, 158, 66, - 578, 77, 158, 143, 144, 145, 156, 158, 18, 19, - 20, 119, 22, 23, 24, 26, 27, 219, 147, 57, - 30, 31, 147, 53, 53, 101, 148, 156, 150, 105, - 38, 147, 146, 158, 156, 111, 147, 145, 154, 513, - 116, 51, 92, 154, 54, 148, 18, 150, 58, 19, - 126, 154, 22, 147, 24, 11, 146, 151, 426, 7, - 8, 17, 138, 139, 147, 147, 142, 349, 151, 151, - 146, 19, 20, 547, 22, 23, 24, 267, 19, 269, - 270, 22, 272, 24, 318, 40, 41, 369, 134, 135, - 136, 146, 47, 139, 170, 157, 147, 148, 53, 150, - 0, 158, 154, 273, 22, 579, 154, 42, 43, 44, - 157, 20, 47, 454, 23, 305, 152, 193, 194, 195, - 196, 163, 146, 313, 314, 21, 134, 135, 136, 147, - 148, 139, 150, 209, 210, 211, 212, 213, 214, 215, - 216, 217, 483, 46, 485, 48, 316, 117, 118, 225, - 148, 22, 150, 387, 152, 389, 390, 391, 35, 235, - 37, 134, 135, 136, 134, 135, 139, 137, 138, 22, - 140, 141, 142, 32, 33, 42, 43, 44, 45, 46, - 47, 48, 148, 50, 150, 151, 22, 377, 378, 379, - 531, 113, 114, 117, 118, 385, 150, 273, 475, 60, - 61, 62, 63, 64, 65, 395, 396, 4, 284, 416, - 134, 135, 4, 137, 138, 37, 140, 141, 142, 3, - 4, 5, 6, 112, 113, 301, 416, 148, 153, 150, - 151, 83, 84, 341, 342, 343, 344, 345, 153, 4, - 316, 317, 318, 148, 22, 150, 354, 355, 356, 439, - 147, 441, 486, 151, 444, 489, 490, 491, 151, 150, - 450, 451, 90, 91, 92, 93, 94, 95, 96, 97, - 98, 99, 549, 349, 156, 552, 143, 144, 145, 42, - 9, 44, 9, 359, 9, 9, 9, 9, 478, 479, - 11, 481, 482, 55, 156, 150, 150, 487, 406, 407, - 150, 150, 150, 22, 150, 413, 150, 497, 150, 147, - 150, 387, 388, 389, 390, 391, 147, 147, 394, 59, - 0, 147, 269, 270, 147, 272, 546, 147, 518, 405, - 147, 38, 38, 147, 150, 150, 526, 147, 18, 19, - 20, 152, 22, 23, 24, 565, 147, 147, 147, 147, - 30, 31, 460, 461, 462, 463, 147, 147, 305, 467, - 468, 147, 156, 38, 147, 147, 313, 314, 22, 4, - 147, 51, 562, 22, 54, 151, 17, 567, 58, 455, - 17, 150, 4, 147, 150, 156, 147, 147, 147, 147, - 147, 499, 500, 469, 584, 585, 147, 147, 474, 589, - 147, 147, 592, 147, 480, 147, 53, 22, 147, 147, - 486, 147, 17, 489, 490, 491, 151, 151, 494, 151, - 151, 147, 152, 473, 53, 4, 534, 17, 536, 537, - 377, 378, 379, 151, 154, 151, 151, 154, 385, 3, - 4, 151, 147, 7, 8, 9, 17, 147, 395, 396, - 17, 71, 17, 129, 247, 19, 20, 129, 22, 23, - 24, 25, 26, 27, 129, 92, 541, 248, 111, 514, - 225, 105, 548, 17, 56, 89, 40, 41, 494, 235, - 408, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 541, 439, 57, 441, -1, -1, 444, -1, -1, - -1, -1, -1, 450, 451, -1, -1, -1, -1, 73, - 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, - 84, 85, 86, 87, 88, 89, -1, -1, -1, -1, - -1, 478, 479, -1, 481, 482, -1, -1, -1, -1, - 487, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 497, 115, 116, 117, 118, 119, 120, 121, 122, 123, - 124, 125, 126, 127, -1, 129, -1, 131, 132, 133, - -1, 518, -1, -1, -1, -1, 3, 4, -1, 526, - 7, 8, 9, -1, 148, -1, 150, -1, -1, -1, - -1, 155, 19, 20, -1, 22, 23, 24, 25, 26, - 27, 26, 27, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 40, 41, 562, -1, -1, -1, -1, - 567, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 57, -1, -1, -1, -1, -1, -1, 584, 585, -1, - -1, -1, 589, -1, -1, 592, 73, 74, 75, 76, - 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, - 87, 88, 89, -1, -1, -1, -1, -1, -1, -1, - -1, 96, 97, 98, 99, 100, 101, 102, 103, 104, - 105, 106, 107, 108, 109, -1, -1, -1, 115, 116, - 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, - 127, -1, 129, -1, 131, 132, 133, 7, 8, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 19, - 20, -1, 22, 23, 24, 25, -1, -1, 155, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 40, 41, -1, -1, -1, -1, -1, -1, 7, 8, - -1, 10, 11, 12, 13, 14, 15, 16, 17, -1, - 19, 20, -1, 22, 23, 24, -1, -1, -1, -1, - -1, -1, -1, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, - 49, -1, 7, 8, -1, 10, 11, 12, 13, 14, - 15, 16, 17, -1, 19, 20, -1, 22, 23, 24, - -1, -1, -1, -1, -1, 115, 116, 117, 118, 119, - 120, 121, 122, 123, 124, 125, 126, 127, -1, 129, - -1, 131, 132, 133, 49, -1, -1, -1, 3, 4, - -1, -1, -1, -1, 9, -1, -1, -1, 148, -1, - 150, -1, 152, -1, -1, 155, -1, 157, -1, 159, - 25, 26, 27, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 40, 41, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 149, -1, 57, 152, -1, -1, 155, -1, 157, 158, - -1, -1, -1, -1, -1, -1, -1, -1, 73, 74, - 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, - 85, 86, 87, 88, 89, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 149, -1, -1, 152, -1, -1, - 155, -1, 157, 158, -1, -1, -1, -1, -1, -1, - 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, - 125, 126, 127, -1, 129, -1, 131, 132, 133, 7, - 8, -1, 10, 11, 12, 13, 14, 15, 16, 17, - -1, 19, 20, -1, 22, 23, 24, -1, 7, 8, - 155, 10, 11, 12, 13, 14, 15, 16, 17, -1, - 19, 20, -1, 22, 23, 24, -1, -1, -1, 7, - 8, 49, 10, 11, 12, 13, 14, 15, 16, 17, - -1, 19, 20, -1, 22, 23, 24, -1, -1, -1, - 49, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 39, -1, -1, -1, -1, -1, -1, -1, 7, - 8, 49, 10, 11, 12, 13, 14, 15, 16, 17, - -1, 19, 20, -1, 22, 23, 24, 7, 8, -1, - 10, 11, 12, 13, 14, 15, 16, 17, -1, 19, - 20, -1, 22, 23, 24, -1, -1, -1, -1, -1, - -1, 49, -1, -1, -1, -1, -1, -1, -1, 39, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 49, - -1, 149, -1, -1, 152, -1, -1, 155, -1, 157, - 158, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 149, -1, -1, 152, -1, -1, 155, -1, 157, 158, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 149, -1, -1, 152, -1, -1, 155, -1, 157, - -1, 7, 8, 121, 10, 11, 12, 13, 14, 15, - 16, 17, -1, 19, 20, -1, 22, 23, 24, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 149, -1, -1, 152, -1, -1, 155, -1, 157, - -1, -1, -1, 49, -1, -1, -1, -1, -1, 149, - -1, -1, 152, -1, -1, 155, -1, 157, 7, 8, - -1, 10, 11, 12, 13, 14, 15, 16, 17, -1, - 19, 20, -1, 22, 23, 24, 7, 8, -1, 10, - 11, 12, 13, 14, 15, 16, 17, -1, 19, 20, - 39, 22, 23, 24, -1, -1, -1, -1, -1, -1, - 49, -1, -1, -1, -1, -1, -1, -1, 39, -1, - -1, -1, -1, -1, -1, -1, 7, 8, 49, 10, - 11, 12, 13, 14, 15, 16, 17, -1, 19, 20, - -1, 22, 23, 24, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 149, -1, -1, 152, -1, 154, 155, - -1, 157, -1, -1, -1, -1, 7, 8, 49, 10, - 11, 12, 13, 14, 15, 16, 17, -1, 19, 20, - -1, 22, 23, 24, 7, 8, -1, 10, 11, 12, - 13, 14, 15, 16, 17, -1, 19, 20, -1, 22, - 23, 24, -1, -1, -1, -1, -1, -1, 49, -1, - 149, -1, -1, 152, -1, -1, 155, -1, 157, -1, - -1, -1, -1, -1, -1, -1, 49, -1, 149, -1, - -1, 152, -1, -1, 155, -1, 157, 7, 8, -1, - 10, 11, 12, 13, 14, 15, 16, 17, -1, 19, - 20, -1, 22, 23, 24, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 149, -1, - -1, 152, -1, -1, 155, -1, 157, 7, 8, 49, - 10, 11, 12, 13, 14, 15, 16, 17, -1, 19, - 20, -1, 22, 23, 24, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 149, -1, - -1, 152, -1, -1, 155, -1, 157, -1, -1, 49, - -1, -1, -1, -1, -1, -1, 149, -1, -1, 152, - -1, -1, 155, -1, 157, 7, 8, -1, 10, 11, - 12, 13, 14, 15, 16, 17, -1, 19, 20, -1, - 22, 23, 24, -1, -1, -1, -1, -1, -1, -1, - -1, 36, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 49, -1, 149, - 55, 56, 152, -1, -1, 155, -1, 157, -1, -1, - -1, -1, 67, 68, 69, 70, 71, 72, 73, 74, - 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, - 85, 86, 87, 88, 89, -1, -1, -1, -1, 149, - -1, -1, 152, -1, -1, 155, -1, 157, -1, -1, - -1, -1, -1, -1, -1, 110, 111, 112, -1, -1, - 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, - 125, 126, 127, 128, 129, 130, 131, 132, 133, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 149, -1, -1, - 152, -1, -1, 155, -1, 157 +static const short yytable[] = { 11, + 79, 270, 259, 333, 161, 102, 269, 269, 234, 302, + 381, 162, 271, 13, 23, 11, 401, 402, 260, 471, + 421, 348, 350, 578, 306, 307, 308, 309, 310, 13, + 20, 313, 88, 437, 439, 108, 574, 109, 496, 422, + 91, -200, 140, 421, 21, -54, -54, -54, -54, 106, + 580, 140, 25, 141, 2, 411, 159, 4, 314, -66, + 1, 2, 228, 3, 4, 5, 417, 129, 235, 236, + 411, 6, 7, 132, 130, 438, 438, 106, 81, 82, + 267, 464, 231, 132, 86, 411, 268, 411, 147, 11, + 87, 43, 8, 44, 416, 9, 475, 1, 147, 10, + 3, 108, 5, 109, 539, 411, 470, 115, 116, 331, + 225, 226, 412, 484, 229, 415, 24, 499, 232, 396, + 397, 398, 26, 27, 399, 370, 1, 370, 370, 3, + 370, 5, 395, 55, 83, 431, 84, 108, 564, 109, + 163, 383, 265, 396, 397, 398, 315, 316, 399, 561, + 575, 375, 57, 108, 108, 109, 109, 538, 103, 330, + 108, 494, 109, 370, 56, 300, 301, 265, 303, 92, + 581, 370, 370, 59, 262, 118, 119, 120, 121, 122, + 123, 304, 265, 265, 265, 265, 265, 311, 312, 265, + 520, 112, 521, 113, 393, 317, 318, 132, 546, 110, + 111, 443, 547, 445, 446, 447, 88, 147, 95, 47, + 48, 49, 319, 320, 50, 321, 322, 546, 323, 324, + 325, 550, 96, 28, 29, 30, 31, 32, 33, 34, + 97, 35, 36, 37, 38, 370, 370, 370, 551, 396, + 397, 398, 99, 370, 399, 147, 512, 317, 318, 237, + 238, 239, 240, 370, 370, 100, 376, 101, 259, 378, + 108, 84, 109, 136, 319, 320, 137, 321, 322, 160, + 323, 324, 325, 377, 260, 143, 144, 221, 406, 407, + 408, 409, 410, 380, 108, 223, 109, 227, 147, 394, + 265, 418, 419, 420, 224, 230, 233, 370, -55, 370, + 522, -56, 370, 525, 526, 527, -59, -58, 370, 370, + -57, 241, 263, 372, 373, 269, 374, 61, 62, 332, + 566, 414, 339, 568, 36, 37, 38, 340, 341, 1, + 2, 426, 3, 4, 5, 351, 370, 370, 342, 370, + 370, 343, 352, 455, 456, 370, 353, 354, 355, 382, + 462, 384, 357, 385, 386, 370, 387, 390, 391, 265, + 444, 265, 265, 265, 388, 389, 450, 392, 403, 404, + 405, 429, 432, 433, 442, 562, 370, 454, 448, 449, + 453, 458, 459, 460, 370, 461, 463, 465, 466, 467, + 468, 469, 472, 473, 576, 474, 476, 500, 501, 502, + 503, 477, 478, 479, 505, 506, 272, 273, 274, 275, + 276, 277, 278, 279, 280, 281, 480, 482, 484, 485, + 370, 434, 435, 436, 487, 370, 488, 495, 489, 441, + 283, 284, 492, 493, 497, 498, 530, 531, 513, 451, + 452, 507, 370, 370, 438, 533, 511, 370, 542, 504, + 370, 536, 516, 524, 532, 534, 535, 544, 265, 558, + 560, 265, 265, 265, 543, 537, 516, 572, 582, 548, + 508, 554, 552, 555, 556, 553, 567, 569, 570, 571, + 579, 583, 584, 481, 587, 483, 588, 590, 486, 593, + 594, 213, 214, 215, 490, 491, 338, 127, 557, 337, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 540, 139, 336, 142, 328, 42, + 565, 126, 514, 515, -199, 518, 519, 94, 528, 457, + 0, 523, 0, 0, 0, 0, 0, 0, 508, 0, + 0, 529, -66, 1, 2, 0, 3, 4, 5, 0, + 0, 0, 0, 0, 6, 7, 0, 0, 0, 0, + 0, 0, 545, 0, 0, 0, 0, 358, 359, 0, + 549, 61, 62, 360, 0, 8, 0, 0, 9, 0, + 0, 0, 10, 1, 2, 0, 3, 4, 5, 361, + 362, 363, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 364, 365, 573, 0, 0, 0, + 0, 577, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 366, 0, 0, 0, 0, 0, 0, 585, 586, + 0, 0, 0, 589, 0, 0, 591, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 245, 246, 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, 247, + 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, + 205, 206, 0, 248, 0, 249, 250, 251, 0, 0, + 0, 358, 359, 0, 0, 61, 62, 360, 0, 0, + 0, 0, 108, 0, 109, 0, 0, 1, 2, 367, + 3, 4, 5, 361, 362, 363, 0, 0, 0, 0, + 61, 62, 0, 0, 0, 0, 0, 0, 364, 365, + 0, 0, 1, 2, 0, 3, 4, 5, 242, 0, + 0, 0, 0, 0, 0, 366, 0, 0, 0, 0, + 0, 0, 0, 243, 244, 0, 0, 0, 0, 0, + 0, 174, 175, 176, 177, 178, 179, 180, 181, 182, + 183, 184, 185, 186, 187, 188, 245, 246, 0, 0, + 0, 0, 0, 0, 0, 0, 174, 175, 176, 177, + 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, + 188, 245, 246, 247, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 0, 248, 0, 249, + 250, 251, 0, 0, 0, 0, 0, 0, 247, 195, + 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, + 206, 0, 248, 367, 249, 250, 251, 0, 0, 0, + 0, 358, 359, 0, 0, 0, 0, 360, 0, 0, + 0, 108, 0, 109, 0, 252, 0, 0, 253, 0, + 254, 0, 255, 361, 362, 363, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 364, 365, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 61, 62, 366, 104, 64, 65, 66, + 67, 68, 69, 70, 0, 1, 2, 0, 3, 4, + 5, 174, 175, 176, 177, 178, 179, 180, 181, 182, + 183, 184, 185, 186, 187, 188, 245, 246, 0, 0, + 0, 0, 0, 61, 62, 71, 104, 64, 65, 66, + 67, 68, 69, 70, 0, 1, 2, 0, 3, 4, + 5, 0, 0, 247, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 0, 248, 0, 249, + 250, 251, 0, 61, 62, 71, 104, 150, 151, 152, + 153, 154, 155, 70, 0, 1, 2, 0, 3, 4, + 5, 61, 62, 367, 104, 150, 151, 152, 153, 154, + 155, 70, 0, 1, 2, 0, 3, 4, 5, 0, + 0, 0, 0, 61, 62, 71, 104, 64, 65, 66, + 67, 68, 69, 70, 0, 1, 2, 0, 3, 4, + 5, 0, 0, 71, 0, 72, 0, 0, 73, 0, + 0, 74, 0, 75, 105, 131, 0, 0, 0, 0, + 0, 0, 0, 61, 62, 71, 145, 64, 65, 66, + 67, 68, 69, 70, 0, 1, 2, 0, 3, 4, + 5, 0, 0, 0, 0, 72, 0, 0, 73, 0, + 0, 74, 0, 75, 138, 0, 0, 0, 0, 0, + 0, 0, 0, 61, 62, 71, 104, 64, 65, 66, + 67, 68, 69, 70, 0, 1, 2, 0, 3, 4, + 5, 0, 0, 0, 0, 72, 0, 0, 73, 0, + 0, 74, 0, 75, 349, 327, 0, 0, 0, 0, + 0, 0, 0, 72, 0, 71, 73, 0, 0, 74, + 0, 75, 413, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 72, 0, 0, 73, 0, + 0, 74, 0, 75, 0, 61, 62, 146, 104, 150, + 151, 152, 153, 154, 155, 70, 0, 1, 2, 0, + 3, 4, 5, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 72, 0, 0, 73, 0, + 0, 74, 0, 75, 0, 61, 62, 71, 104, 64, + 65, 66, 67, 68, 69, 70, 0, 1, 2, 0, + 3, 4, 5, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 72, 0, 425, 73, 0, + 0, 74, 0, 75, 0, 61, 62, 71, 104, 64, + 65, 66, 67, 68, 69, 70, 0, 1, 2, 0, + 3, 4, 5, 61, 62, 0, 63, 64, 65, 66, + 67, 68, 69, 70, 0, 1, 2, 510, 3, 4, + 5, 0, 0, 0, 0, 61, 62, 71, 104, 150, + 151, 152, 153, 154, 155, 70, 0, 1, 2, 0, + 3, 4, 5, 0, 0, 71, 0, 72, 0, 0, + 73, 0, 344, 74, 0, 75, 61, 62, 0, 145, + 64, 65, 66, 67, 68, 69, 70, 71, 1, 2, + 0, 3, 4, 5, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, + 73, 0, 0, 74, 0, 75, 61, 62, 71, 104, + 64, 65, 66, 67, 68, 69, 70, 0, 1, 2, + 0, 3, 4, 5, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, + 73, 0, 0, 74, 0, 75, 0, 0, 71, 0, + 0, 0, 0, 0, 0, 72, 0, 0, 73, 0, + 0, 74, 0, 75, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, + 73, 0, 0, 74, 0, 75, 61, 62, 0, 264, + 64, 65, 66, 67, 68, 69, 70, 0, 1, 2, + 0, 3, 4, 5, 0, 0, 0, 0, 72, 0, + 0, 73, 0, 0, 74, 0, 75, 61, 62, 0, + 104, 150, 151, 152, 153, 154, 155, 70, 71, 1, + 2, 0, 3, 4, 5, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, + 0, 73, 0, 0, 74, 0, 75, 0, 0, 71, + 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, 0, 0, 0, 0, 72, 0, + 0, 73, 0, 0, 74, 0, 75, 165, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 166, 167, 0, 72, + 0, 0, 73, 0, 0, 74, 0, 347, 168, 169, + 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, + 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, + 190, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 191, 192, 193, 0, 0, 194, 195, 196, 197, + 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, + 208, 209, 210, 211, 212 }; -/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing - symbol of state STATE-NUM. */ -static const unsigned char yystos[] = -{ - 0, 19, 20, 22, 23, 24, 30, 31, 51, 54, - 58, 168, 170, 171, 172, 173, 204, 205, 206, 208, - 207, 52, 66, 213, 146, 57, 146, 18, 146, 42, - 43, 44, 45, 46, 47, 48, 50, 143, 144, 145, - 174, 175, 176, 0, 206, 46, 48, 177, 223, 42, - 43, 44, 47, 178, 220, 222, 229, 146, 146, 152, - 214, 22, 212, 7, 8, 10, 11, 12, 13, 14, - 15, 16, 17, 49, 149, 152, 155, 157, 168, 171, - 191, 192, 226, 176, 176, 35, 37, 202, 176, 176, - 21, 230, 231, 29, 158, 221, 230, 22, 22, 22, - 215, 150, 4, 4, 4, 157, 10, 158, 192, 197, - 148, 150, 202, 202, 42, 44, 179, 32, 33, 201, - 60, 61, 62, 63, 64, 65, 180, 218, 218, 170, - 234, 147, 154, 39, 192, 193, 195, 196, 153, 153, - 158, 197, 147, 158, 196, 201, 201, 10, 121, 192, - 194, 203, 11, 12, 13, 14, 15, 16, 166, 167, - 192, 198, 4, 194, 28, 157, 219, 36, 55, 56, - 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, - 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, - 87, 88, 89, 110, 111, 112, 115, 116, 117, 118, - 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, - 129, 130, 131, 132, 133, 161, 162, 163, 232, 238, - 239, 240, 241, 22, 182, 147, 151, 192, 192, 156, - 158, 192, 151, 198, 192, 150, 226, 26, 27, 3, - 4, 5, 6, 9, 25, 40, 41, 88, 89, 115, - 129, 131, 132, 133, 152, 155, 157, 159, 161, 162, - 163, 199, 226, 209, 171, 55, 10, 192, 228, 11, - 17, 11, 166, 180, 90, 91, 92, 93, 94, 95, - 96, 97, 98, 99, 164, 26, 27, 96, 97, 98, - 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, - 109, 165, 192, 192, 228, 192, 192, 235, 228, 228, - 228, 228, 228, 192, 192, 228, 180, 113, 114, 117, - 118, 134, 135, 137, 138, 140, 141, 142, 181, 39, - 193, 184, 154, 156, 156, 184, 210, 211, 203, 164, - 165, 150, 150, 150, 150, 150, 154, 198, 200, 157, - 200, 158, 200, 22, 150, 150, 150, 147, 189, 150, - 3, 4, 9, 25, 26, 27, 40, 41, 57, 155, - 199, 225, 226, 227, 227, 227, 227, 194, 192, 192, - 147, 186, 147, 186, 227, 152, 147, 147, 147, 147, - 147, 147, 227, 227, 38, 194, 192, 228, 134, 135, - 136, 139, 183, 189, 189, 38, 150, 150, 198, 198, - 198, 198, 198, 147, 154, 158, 192, 200, 156, 158, - 198, 198, 198, 34, 53, 187, 190, 39, 192, 216, - 217, 59, 224, 200, 147, 147, 227, 227, 227, 11, - 53, 11, 237, 227, 152, 228, 192, 228, 228, 228, - 147, 147, 192, 227, 227, 147, 192, 198, 198, 237, - 147, 147, 147, 147, 198, 156, 158, 147, 147, 38, - 22, 4, 189, 182, 147, 151, 22, 156, 17, 17, - 150, 147, 147, 227, 4, 227, 147, 147, 227, 147, - 147, 147, 227, 227, 150, 147, 186, 192, 151, 147, - 147, 151, 198, 198, 198, 198, 156, 198, 198, 192, - 168, 169, 39, 192, 184, 147, 227, 227, 192, 236, - 227, 227, 186, 186, 228, 227, 147, 228, 228, 228, - 236, 227, 198, 198, 147, 151, 147, 147, 151, 151, - 151, 182, 187, 188, 22, 147, 152, 227, 147, 151, - 154, 227, 151, 186, 151, 151, 198, 198, 198, 169, - 53, 185, 17, 154, 166, 233, 182, 192, 184, 154, - 184, 151, 151, 151, 4, 227, 225, 154, 166, 227, - 38, 147, 225, 182, 17, 17, 147, 227, 227, 17, - 71, 227, 17, 227 +static const short yycheck[] = { 0, + 26, 170, 158, 230, 124, 4, 11, 11, 148, 193, + 301, 28, 171, 0, 146, 16, 334, 335, 158, 426, + 34, 253, 254, 38, 208, 209, 210, 211, 212, 16, + 52, 215, 21, 11, 11, 148, 562, 150, 151, 53, + 29, 0, 147, 34, 66, 3, 4, 5, 6, 75, + 576, 147, 146, 158, 20, 147, 117, 23, 217, 18, + 19, 20, 158, 22, 23, 24, 158, 147, 26, 27, + 147, 30, 31, 99, 154, 53, 53, 103, 39, 40, + 11, 158, 143, 109, 45, 147, 17, 147, 114, 90, + 51, 46, 51, 48, 156, 54, 156, 19, 124, 58, + 22, 148, 24, 150, 511, 147, 424, 32, 33, 156, + 136, 137, 154, 147, 140, 347, 57, 151, 144, 134, + 135, 136, 18, 146, 139, 265, 19, 267, 268, 22, + 270, 24, 316, 146, 35, 367, 37, 148, 545, 150, + 157, 152, 168, 134, 135, 136, 113, 114, 139, 154, + 154, 271, 152, 148, 148, 150, 150, 151, 157, 154, + 148, 452, 150, 303, 146, 191, 192, 193, 194, 158, + 577, 311, 312, 22, 161, 60, 61, 62, 63, 64, + 65, 207, 208, 209, 210, 211, 212, 213, 214, 215, + 481, 42, 483, 44, 314, 117, 118, 223, 147, 81, + 82, 385, 151, 387, 388, 389, 21, 233, 22, 42, + 43, 44, 134, 135, 47, 137, 138, 147, 140, 141, + 142, 151, 22, 42, 43, 44, 45, 46, 47, 48, + 22, 50, 143, 144, 145, 375, 376, 377, 529, 134, + 135, 136, 150, 383, 139, 271, 473, 117, 118, 3, + 4, 5, 6, 393, 394, 4, 282, 4, 414, 147, + 148, 37, 150, 153, 134, 135, 153, 137, 138, 4, + 140, 141, 142, 299, 414, 110, 111, 22, 339, 340, + 341, 342, 343, 147, 148, 147, 150, 156, 314, 315, + 316, 352, 353, 354, 151, 151, 150, 437, 9, 439, + 484, 9, 442, 487, 488, 489, 9, 9, 448, 449, + 9, 9, 55, 267, 268, 11, 270, 7, 8, 156, + 547, 347, 150, 550, 143, 144, 145, 150, 150, 19, + 20, 357, 22, 23, 24, 22, 476, 477, 150, 479, + 480, 150, 150, 404, 405, 485, 150, 150, 147, 303, + 411, 147, 150, 147, 147, 495, 147, 311, 312, 385, + 386, 387, 388, 389, 147, 147, 392, 38, 38, 150, + 150, 59, 147, 147, 152, 544, 516, 403, 147, 147, + 147, 147, 147, 147, 524, 147, 156, 147, 147, 38, + 22, 4, 147, 151, 563, 22, 17, 458, 459, 460, + 461, 17, 150, 147, 465, 466, 90, 91, 92, 93, + 94, 95, 96, 97, 98, 99, 147, 4, 147, 147, + 560, 375, 376, 377, 147, 565, 147, 453, 147, 383, + 26, 27, 150, 147, 147, 147, 497, 498, 147, 393, + 394, 467, 582, 583, 53, 151, 472, 587, 22, 156, + 590, 151, 478, 147, 147, 147, 147, 152, 484, 53, + 17, 487, 488, 489, 147, 151, 492, 4, 17, 154, + 471, 532, 151, 534, 535, 151, 154, 151, 151, 151, + 147, 17, 147, 437, 17, 439, 71, 17, 442, 0, + 0, 127, 127, 127, 448, 449, 246, 90, 539, 245, + 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, + 106, 107, 108, 109, 512, 103, 233, 109, 223, 16, + 546, 87, 476, 477, 0, 479, 480, 54, 492, 406, + -1, 485, -1, -1, -1, -1, -1, -1, 539, -1, + -1, 495, 18, 19, 20, -1, 22, 23, 24, -1, + -1, -1, -1, -1, 30, 31, -1, -1, -1, -1, + -1, -1, 516, -1, -1, -1, -1, 3, 4, -1, + 524, 7, 8, 9, -1, 51, -1, -1, 54, -1, + -1, -1, 58, 19, 20, -1, 22, 23, 24, 25, + 26, 27, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 40, 41, 560, -1, -1, -1, + -1, 565, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 57, -1, -1, -1, -1, -1, -1, 582, 583, + -1, -1, -1, 587, -1, -1, 590, 73, 74, 75, + 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, -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, 115, + 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, + 126, 127, -1, 129, -1, 131, 132, 133, -1, -1, + -1, 3, 4, -1, -1, 7, 8, 9, -1, -1, + -1, -1, 148, -1, 150, -1, -1, 19, 20, 155, + 22, 23, 24, 25, 26, 27, -1, -1, -1, -1, + 7, 8, -1, -1, -1, -1, -1, -1, 40, 41, + -1, -1, 19, 20, -1, 22, 23, 24, 25, -1, + -1, -1, -1, -1, -1, 57, -1, -1, -1, -1, + -1, -1, -1, 40, 41, -1, -1, -1, -1, -1, + -1, 73, 74, 75, 76, 77, 78, 79, 80, 81, + 82, 83, 84, 85, 86, 87, 88, 89, -1, -1, + -1, -1, -1, -1, -1, -1, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, + 87, 88, 89, 115, 116, 117, 118, 119, 120, 121, + 122, 123, 124, 125, 126, 127, -1, 129, -1, 131, + 132, 133, -1, -1, -1, -1, -1, -1, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, + 127, -1, 129, 155, 131, 132, 133, -1, -1, -1, + -1, 3, 4, -1, -1, -1, -1, 9, -1, -1, + -1, 148, -1, 150, -1, 152, -1, -1, 155, -1, + 157, -1, 159, 25, 26, 27, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 40, 41, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 7, 8, 57, 10, 11, 12, 13, + 14, 15, 16, 17, -1, 19, 20, -1, 22, 23, + 24, 73, 74, 75, 76, 77, 78, 79, 80, 81, + 82, 83, 84, 85, 86, 87, 88, 89, -1, -1, + -1, -1, -1, 7, 8, 49, 10, 11, 12, 13, + 14, 15, 16, 17, -1, 19, 20, -1, 22, 23, + 24, -1, -1, 115, 116, 117, 118, 119, 120, 121, + 122, 123, 124, 125, 126, 127, -1, 129, -1, 131, + 132, 133, -1, 7, 8, 49, 10, 11, 12, 13, + 14, 15, 16, 17, -1, 19, 20, -1, 22, 23, + 24, 7, 8, 155, 10, 11, 12, 13, 14, 15, + 16, 17, -1, 19, 20, -1, 22, 23, 24, -1, + -1, -1, -1, 7, 8, 49, 10, 11, 12, 13, + 14, 15, 16, 17, -1, 19, 20, -1, 22, 23, + 24, -1, -1, 49, -1, 149, -1, -1, 152, -1, + -1, 155, -1, 157, 158, 39, -1, -1, -1, -1, + -1, -1, -1, 7, 8, 49, 10, 11, 12, 13, + 14, 15, 16, 17, -1, 19, 20, -1, 22, 23, + 24, -1, -1, -1, -1, 149, -1, -1, 152, -1, + -1, 155, -1, 157, 158, -1, -1, -1, -1, -1, + -1, -1, -1, 7, 8, 49, 10, 11, 12, 13, + 14, 15, 16, 17, -1, 19, 20, -1, 22, 23, + 24, -1, -1, -1, -1, 149, -1, -1, 152, -1, + -1, 155, -1, 157, 158, 39, -1, -1, -1, -1, + -1, -1, -1, 149, -1, 49, 152, -1, -1, 155, + -1, 157, 158, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 149, -1, -1, 152, -1, + -1, 155, -1, 157, -1, 7, 8, 121, 10, 11, + 12, 13, 14, 15, 16, 17, -1, 19, 20, -1, + 22, 23, 24, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 149, -1, -1, 152, -1, + -1, 155, -1, 157, -1, 7, 8, 49, 10, 11, + 12, 13, 14, 15, 16, 17, -1, 19, 20, -1, + 22, 23, 24, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 149, -1, 39, 152, -1, + -1, 155, -1, 157, -1, 7, 8, 49, 10, 11, + 12, 13, 14, 15, 16, 17, -1, 19, 20, -1, + 22, 23, 24, 7, 8, -1, 10, 11, 12, 13, + 14, 15, 16, 17, -1, 19, 20, 39, 22, 23, + 24, -1, -1, -1, -1, 7, 8, 49, 10, 11, + 12, 13, 14, 15, 16, 17, -1, 19, 20, -1, + 22, 23, 24, -1, -1, 49, -1, 149, -1, -1, + 152, -1, 154, 155, -1, 157, 7, 8, -1, 10, + 11, 12, 13, 14, 15, 16, 17, 49, 19, 20, + -1, 22, 23, 24, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 149, -1, -1, + 152, -1, -1, 155, -1, 157, 7, 8, 49, 10, + 11, 12, 13, 14, 15, 16, 17, -1, 19, 20, + -1, 22, 23, 24, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 149, -1, -1, + 152, -1, -1, 155, -1, 157, -1, -1, 49, -1, + -1, -1, -1, -1, -1, 149, -1, -1, 152, -1, + -1, 155, -1, 157, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 149, -1, -1, + 152, -1, -1, 155, -1, 157, 7, 8, -1, 10, + 11, 12, 13, 14, 15, 16, 17, -1, 19, 20, + -1, 22, 23, 24, -1, -1, -1, -1, 149, -1, + -1, 152, -1, -1, 155, -1, 157, 7, 8, -1, + 10, 11, 12, 13, 14, 15, 16, 17, 49, 19, + 20, -1, 22, 23, 24, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 149, -1, + -1, 152, -1, -1, 155, -1, 157, -1, -1, 49, + -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, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 149, -1, + -1, 152, -1, -1, 155, -1, 157, 36, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 55, 56, -1, 149, + -1, -1, 152, -1, -1, 155, -1, 157, 67, 68, + 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, + 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, + 89, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 110, 111, 112, -1, -1, 115, 116, 117, 118, + 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133 }; +/* -*-C-*- Note some compilers choke on comments on `#line' lines. */ +#line 3 "/usr/share/bison.simple" +/* This file comes from bison-1.28. */ -#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__) -# define YYSIZE_T __SIZE_TYPE__ -#endif -#if ! defined (YYSIZE_T) && defined (size_t) -# define YYSIZE_T size_t +/* Skeleton output parser for bison, + Copyright (C) 1984, 1989, 1990 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., 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 -#if ! defined (YYSIZE_T) -# if defined (__STDC__) || defined (__cplusplus) -# include /* INFRINGES ON USER NAME SPACE */ -# define YYSIZE_T size_t -# 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 -#if ! defined (YYSIZE_T) -# define YYSIZE_T unsigned int +#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); \ + { yychar = (token), yylval = (value); \ + yychar1 = YYTRANSLATE (yychar); \ YYPOPSTACK; \ goto yybackup; \ } \ else \ - { \ - yyerror ("syntax error: cannot back up");\ - YYERROR; \ - } \ + { yyerror ("syntax error: cannot back up"); YYERROR; } \ while (0) #define YYTERROR 1 #define YYERRCODE 256 -/* YYLLOC_DEFAULT -- Compute the default location (before the actions - are run). */ - -#ifndef YYLLOC_DEFAULT -# define YYLLOC_DEFAULT(Current, Rhs, N) \ - ((Current).first_line = (Rhs)[1].first_line, \ - (Current).first_column = (Rhs)[1].first_column, \ - (Current).last_line = (Rhs)[N].last_line, \ - (Current).last_column = (Rhs)[N].last_column) +#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 (0) - -# define YYDSYMPRINT(Args) \ -do { \ - if (yydebug) \ - yysymprint Args; \ -} while (0) - -# define YYDSYMPRINTF(Title, Token, Value, Location) \ -do { \ - if (yydebug) \ - { \ - YYFPRINTF (stderr, "%s ", Title); \ - yysymprint (stderr, \ - Token, Value); \ - YYFPRINTF (stderr, "\n"); \ - } \ -} while (0) - -/*------------------------------------------------------------------. -| yy_stack_print -- Print the state stack from its BOTTOM up to its | -| TOP (included). | -`------------------------------------------------------------------*/ - -#if defined (__STDC__) || defined (__cplusplus) -static void -yy_stack_print (short *bottom, short *top) +#else /* not YYLSP_NEEDED */ +#ifdef YYLEX_PARAM +#define YYLEX yylex(&yylval, YYLEX_PARAM) #else -static void -yy_stack_print (bottom, top) - short *bottom; - short *top; +#define YYLEX yylex(&yylval) +#endif +#endif /* not YYLSP_NEEDED */ #endif -{ - YYFPRINTF (stderr, "Stack now"); - for (/* Nothing. */; 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 (0) +/* If nonreentrant, generate the variables here */ +#ifndef YYPURE -/*------------------------------------------------. -| Report that the YYRULE is going to be reduced. | -`------------------------------------------------*/ +int yychar; /* the lookahead symbol */ +YYSTYPE yylval; /* the semantic value of the */ + /* lookahead symbol */ -#if defined (__STDC__) || defined (__cplusplus) -static void -yy_reduce_print (int yyrule) -#else -static void -yy_reduce_print (yyrule) - int yyrule; +#ifdef YYLSP_NEEDED +YYLTYPE yylloc; /* location data for the lookahead */ + /* symbol */ #endif -{ - int yyi; - unsigned int yylno = yyrline[yyrule]; - YYFPRINTF (stderr, "Reducing stack by rule %d (line %u), ", - yyrule - 1, yylno); - /* Print the symbols being reduced, and their result. */ - for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++) - YYFPRINTF (stderr, "%s ", yytname [yyrhs[yyi]]); - YYFPRINTF (stderr, "-> %s\n", yytname [yyr1[yyrule]]); -} -# define YY_REDUCE_PRINT(Rule) \ -do { \ - if (yydebug) \ - yy_reduce_print (Rule); \ -} while (0) - -/* Nonzero means print parse trace. It is left uninitialized so that - multiple parsers can coexist. */ -int yydebug; -#else /* !YYDEBUG */ -# define YYDPRINTF(Args) -# define YYDSYMPRINT(Args) -# define YYDSYMPRINTF(Title, Token, Value, Location) -# define YY_STACK_PRINT(Bottom, Top) -# define YY_REDUCE_PRINT(Rule) -#endif /* !YYDEBUG */ +int yynerrs; /* number of parse errors so far */ +#endif /* not YYPURE */ + +#if YYDEBUG != 0 +int yydebug; /* nonzero means print parse trace */ +/* Since this is uninitialized, it does not stop multiple parsers + from coexisting. */ +#endif +/* 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). - - Do not make this value too large; the results are undefined if - SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH) - evaluated with infinite-precision integer arithmetic. */ +/* YYMAXDEPTH is the maximum size the stacks can grow to + (effective only if the built-in stack extension method is used). */ -#if defined (YYMAXDEPTH) && YYMAXDEPTH == 0 -# undef YYMAXDEPTH +#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. */ -static YYSIZE_T -# if defined (__STDC__) || defined (__cplusplus) -yystrlen (const char *yystr) -# else -yystrlen (yystr) - const char *yystr; -# endif -{ - register const char *yys = yystr; - - while (*yys++ != '\0') - continue; - - return yys - yystr - 1; -} -# 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. */ -static char * -# if defined (__STDC__) || defined (__cplusplus) -yystpcpy (char *yydest, const char *yysrc) -# else -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; { - register char *yyd = yydest; - register 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 - -#endif /* !YYERROR_VERBOSE */ - - -#if YYDEBUG -/*--------------------------------. -| Print this symbol on YYOUTPUT. | -`--------------------------------*/ +#else /* __cplusplus */ -#if defined (__STDC__) || defined (__cplusplus) -static void -yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep) -#else +/* This is the most reliable way to avoid incompatibilities + in available built-in functions on various systems. */ static void -yysymprint (yyoutput, yytype, yyvaluep) - FILE *yyoutput; - int yytype; - YYSTYPE *yyvaluep; -#endif +__yy_memcpy (char *to, char *from, unsigned int count) { - /* Pacify ``unused variable'' warnings. */ - (void) yyvaluep; - - if (yytype < YYNTOKENS) - { - YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); -# ifdef YYPRINT - YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); -# endif - } - else - YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); + register char *t = to; + register char *f = from; + register int i = count; - switch (yytype) - { - default: - break; - } - YYFPRINTF (yyoutput, ")"); + while (i-- > 0) + *t++ = *f++; } -#endif /* ! YYDEBUG */ -/*-----------------------------------------------. -| Release the memory associated to this symbol. | -`-----------------------------------------------*/ - -#if defined (__STDC__) || defined (__cplusplus) -static void -yydestruct (int yytype, YYSTYPE *yyvaluep) -#else -static void -yydestruct (yytype, yyvaluep) - int yytype; - YYSTYPE *yyvaluep; #endif -{ - /* Pacify ``unused variable'' warnings. */ - (void) yyvaluep; - - 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); -# else -int yyparse (); -# endif -#else /* ! YYPARSE_PARAM */ -#if defined (__STDC__) || defined (__cplusplus) -int yyparse (void); -#else -int yyparse (); -#endif -#endif /* ! YYPARSE_PARAM */ - - - -/* The lookahead symbol. */ -int yychar; - -/* The semantic value of the lookahead symbol. */ -YYSTYPE yylval; - -/* Number of syntax errors so far. */ -int yynerrs; - - - -/*----------. -| yyparse. | -`----------*/ +#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 -# if defined (__STDC__) || defined (__cplusplus) -int yyparse (void *YYPARSE_PARAM) -# else -int yyparse (YYPARSE_PARAM) - void *YYPARSE_PARAM; -# endif -#else /* ! YYPARSE_PARAM */ -#if defined (__STDC__) || defined (__cplusplus) -int -yyparse (void) +int yyparse (void *); #else -int -yyparse () - +int yyparse (void); #endif #endif + +int +yyparse(YYPARSE_PARAM_ARG) + YYPARSE_PARAM_DECL { - register int yystate; register int yyn; - int yyresult; - /* Number of tokens to shift before error messages enabled. */ - int yyerrstatus; - /* Lookahead token as an internal (translated) token number. */ - int yytoken = 0; - - /* 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. */ - short yyssa[YYINITDEPTH]; - short *yyss = yyssa; register short *yyssp; - - /* The semantic value stack. */ - YYSTYPE yyvsa[YYINITDEPTH]; - YYSTYPE *yyvs = yyvsa; 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 #define YYPOPSTACK (yyvsp--, yyssp--) +#endif - YYSIZE_T yystacksize = YYINITDEPTH; + int yystacksize = YYINITDEPTH; + int yyfree_stacks = 0; - /* The variables used to return semantic value and location from the - action routines. */ - YYSTYPE yyval; +#ifdef YYPURE + int yychar; + YYSTYPE yylval; + int yynerrs; +#ifdef YYLSP_NEEDED + YYLTYPE yylloc; +#endif +#endif + YYSTYPE yyval; /* the variable used to return */ + /* semantic values from the action */ + /* routines */ - /* When reducing, the number of symbols on the RHS of the reduced - rule. */ int yylen; - YYDPRINTF ((stderr, "Starting parse\n")); +#if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Starting parse\n"); +#endif yystate = 0; yyerrstatus = 0; @@ -2867,96 +2297,110 @@ 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++; - - yysetstate: - *yyssp = yystate; +/* 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: + + *++yyssp = yystate; + + 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 - if (yyss + yystacksize - 1 <= yyssp) - { /* 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; - short *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 ("parser stack overflow", - &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 yyoverflowlab; -# else /* Extend the stack our own way. */ - if (YYMAXDEPTH <= yystacksize) - goto yyoverflowlab; + 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; - - { - short *yyss1 = yyss; - union yyalloc *yyptr = - (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); - if (! yyptr) - goto yyoverflowlab; - 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. */ @@ -2965,638 +2409,580 @@ /* First try to decide what to do without reference to lookahead token. */ yyn = yypact[yystate]; - if (yyn == YYPACT_NINF) + if (yyn == YYFLAG) goto yydefault; /* Not known => get a lookahead token if don't already have one. */ - /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ + /* yychar is either YYEMPTY or YYEOF + or a valid token in external form. */ + 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); - YYDSYMPRINTF ("Next token is", yytoken, &yylval, &yylloc); + yychar1 = YYTRANSLATE(yychar); + +#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 } - /* 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) + yyn += yychar1; + if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1) goto yydefault; + yyn = yytable[yyn]; - if (yyn <= 0) + + /* 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; /* Shift the lookahead token. */ - YYDPRINTF ((stderr, "Shifting token %s, ", yytname[yytoken])); + +#if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]); +#endif /* Discard the token being shifted unless it is eof. */ if (yychar != YYEOF) yychar = YYEMPTY; *++yyvsp = yylval; +#ifdef YYLSP_NEEDED + *++yylsp = yylloc; +#endif - - /* Count tokens shifted since error; after three, turn off error - status. */ - if (yyerrstatus) - yyerrstatus--; + /* 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 1128 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { yyval.IPredicate = ICmpInst::ICMP_EQ; ;} - break; + int i; - case 30: -#line 1128 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { yyval.IPredicate = ICmpInst::ICMP_NE; ;} - break; - - case 31: -#line 1129 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { yyval.IPredicate = ICmpInst::ICMP_SLT; ;} - break; - - case 32: -#line 1129 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { yyval.IPredicate = ICmpInst::ICMP_SGT; ;} - break; - - case 33: -#line 1130 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { yyval.IPredicate = ICmpInst::ICMP_SLE; ;} - break; - - case 34: -#line 1130 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { yyval.IPredicate = ICmpInst::ICMP_SGE; ;} - break; - - case 35: -#line 1131 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { yyval.IPredicate = ICmpInst::ICMP_ULT; ;} - break; - - case 36: -#line 1131 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { yyval.IPredicate = ICmpInst::ICMP_UGT; ;} - break; - - case 37: -#line 1132 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { yyval.IPredicate = ICmpInst::ICMP_ULE; ;} - break; - - case 38: -#line 1132 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { yyval.IPredicate = ICmpInst::ICMP_UGE; ;} - break; - - case 39: -#line 1136 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { yyval.FPredicate = FCmpInst::FCMP_OEQ; ;} - break; - - case 40: -#line 1136 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { yyval.FPredicate = FCmpInst::FCMP_ONE; ;} - break; - - case 41: -#line 1137 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { yyval.FPredicate = FCmpInst::FCMP_OLT; ;} - break; - - case 42: -#line 1137 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { yyval.FPredicate = FCmpInst::FCMP_OGT; ;} - break; - - case 43: -#line 1138 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { yyval.FPredicate = FCmpInst::FCMP_OLE; ;} - break; + fprintf (stderr, "Reducing via rule %d (line %d), ", + yyn, yyrline[yyn]); - case 44: -#line 1138 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { yyval.FPredicate = FCmpInst::FCMP_OGE; ;} - break; + /* 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 - case 45: -#line 1139 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { yyval.FPredicate = FCmpInst::FCMP_ORD; ;} - break; - case 46: -#line 1139 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { yyval.FPredicate = FCmpInst::FCMP_UNO; ;} - break; + switch (yyn) { - case 47: -#line 1140 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { yyval.FPredicate = FCmpInst::FCMP_UEQ; ;} - break; - - case 48: -#line 1140 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { yyval.FPredicate = FCmpInst::FCMP_UNE; ;} - break; - - case 49: -#line 1141 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { yyval.FPredicate = FCmpInst::FCMP_ULT; ;} - break; - - case 50: -#line 1141 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { yyval.FPredicate = FCmpInst::FCMP_UGT; ;} - break; - - case 51: -#line 1142 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { yyval.FPredicate = FCmpInst::FCMP_ULE; ;} - break; - - case 52: -#line 1142 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { yyval.FPredicate = FCmpInst::FCMP_UGE; ;} - break; - - case 53: -#line 1143 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { yyval.FPredicate = FCmpInst::FCMP_TRUE; ;} - break; - - case 54: -#line 1144 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { yyval.FPredicate = FCmpInst::FCMP_FALSE; ;} - break; - - case 65: -#line 1153 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { yyval.StrVal = 0; ;} - break; - - case 66: -#line 1157 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { +case 28: +#line 1132 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.IPredicate = ICmpInst::ICMP_EQ; ; + break;} +case 29: +#line 1132 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.IPredicate = ICmpInst::ICMP_NE; ; + break;} +case 30: +#line 1133 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.IPredicate = ICmpInst::ICMP_SLT; ; + break;} +case 31: +#line 1133 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.IPredicate = ICmpInst::ICMP_SGT; ; + break;} +case 32: +#line 1134 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.IPredicate = ICmpInst::ICMP_SLE; ; + break;} +case 33: +#line 1134 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.IPredicate = ICmpInst::ICMP_SGE; ; + break;} +case 34: +#line 1135 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.IPredicate = ICmpInst::ICMP_ULT; ; + break;} +case 35: +#line 1135 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.IPredicate = ICmpInst::ICMP_UGT; ; + break;} +case 36: +#line 1136 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.IPredicate = ICmpInst::ICMP_ULE; ; + break;} +case 37: +#line 1136 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.IPredicate = ICmpInst::ICMP_UGE; ; + break;} +case 38: +#line 1140 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.FPredicate = FCmpInst::FCMP_OEQ; ; + break;} +case 39: +#line 1140 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.FPredicate = FCmpInst::FCMP_ONE; ; + break;} +case 40: +#line 1141 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.FPredicate = FCmpInst::FCMP_OLT; ; + break;} +case 41: +#line 1141 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.FPredicate = FCmpInst::FCMP_OGT; ; + break;} +case 42: +#line 1142 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.FPredicate = FCmpInst::FCMP_OLE; ; + break;} +case 43: +#line 1142 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.FPredicate = FCmpInst::FCMP_OGE; ; + break;} +case 44: +#line 1143 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.FPredicate = FCmpInst::FCMP_ORD; ; + break;} +case 45: +#line 1143 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.FPredicate = FCmpInst::FCMP_UNO; ; + break;} +case 46: +#line 1144 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.FPredicate = FCmpInst::FCMP_UEQ; ; + break;} +case 47: +#line 1144 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.FPredicate = FCmpInst::FCMP_UNE; ; + break;} +case 48: +#line 1145 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.FPredicate = FCmpInst::FCMP_ULT; ; + break;} +case 49: +#line 1145 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.FPredicate = FCmpInst::FCMP_UGT; ; + break;} +case 50: +#line 1146 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.FPredicate = FCmpInst::FCMP_ULE; ; + break;} +case 51: +#line 1146 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.FPredicate = FCmpInst::FCMP_UGE; ; + break;} +case 52: +#line 1147 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.FPredicate = FCmpInst::FCMP_TRUE; ; + break;} +case 53: +#line 1148 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.FPredicate = FCmpInst::FCMP_FALSE; ; + break;} +case 64: +#line 1157 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.StrVal = 0; ; + break;} +case 65: +#line 1161 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.StrVal = yyvsp[-1].StrVal; CHECK_FOR_ERROR - ;} - break; - - case 67: -#line 1161 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 66: +#line 1165 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.StrVal = 0; CHECK_FOR_ERROR - ;} - break; - - case 71: -#line 1169 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 70: +#line 1173 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.StrVal = 0; CHECK_FOR_ERROR - ;} - break; - - case 72: -#line 1174 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 71: +#line 1178 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.StrVal = yyvsp[-1].StrVal; CHECK_FOR_ERROR - ;} - break; - - case 73: -#line 1180 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { yyval.Linkage = GlobalValue::InternalLinkage; ;} - break; - - case 74: -#line 1181 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { yyval.Linkage = GlobalValue::WeakLinkage; ;} - break; - - case 75: -#line 1182 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { yyval.Linkage = GlobalValue::LinkOnceLinkage; ;} - break; - - case 76: -#line 1183 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { yyval.Linkage = GlobalValue::AppendingLinkage; ;} - break; - - case 77: -#line 1184 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { yyval.Linkage = GlobalValue::DLLExportLinkage; ;} - break; - - case 78: -#line 1188 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { yyval.Linkage = GlobalValue::DLLImportLinkage; ;} - break; - - case 79: -#line 1189 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { yyval.Linkage = GlobalValue::ExternalWeakLinkage; ;} - break; - - case 80: -#line 1190 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { yyval.Linkage = GlobalValue::ExternalLinkage; ;} - break; - - case 81: -#line 1194 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { yyval.Visibility = GlobalValue::DefaultVisibility; ;} - break; - - case 82: -#line 1195 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { yyval.Visibility = GlobalValue::DefaultVisibility; ;} - break; - - case 83: -#line 1196 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { yyval.Visibility = GlobalValue::HiddenVisibility; ;} - break; - - case 84: -#line 1197 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { yyval.Visibility = GlobalValue::ProtectedVisibility; ;} - break; - - case 85: -#line 1201 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { yyval.Linkage = GlobalValue::ExternalLinkage; ;} - break; - - case 86: -#line 1202 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { yyval.Linkage = GlobalValue::DLLImportLinkage; ;} - break; - - case 87: -#line 1203 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { yyval.Linkage = GlobalValue::ExternalWeakLinkage; ;} - break; - - case 88: -#line 1207 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { yyval.Linkage = GlobalValue::ExternalLinkage; ;} - break; - - case 89: -#line 1208 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { yyval.Linkage = GlobalValue::InternalLinkage; ;} - break; - - case 90: -#line 1209 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { yyval.Linkage = GlobalValue::LinkOnceLinkage; ;} - break; - - case 91: -#line 1210 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { yyval.Linkage = GlobalValue::WeakLinkage; ;} - break; - - case 92: -#line 1211 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { yyval.Linkage = GlobalValue::DLLExportLinkage; ;} - break; - - case 93: -#line 1215 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { yyval.Linkage = GlobalValue::ExternalLinkage; ;} - break; - - case 94: -#line 1216 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { yyval.Linkage = GlobalValue::WeakLinkage; ;} - break; - - case 95: -#line 1217 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { yyval.Linkage = GlobalValue::InternalLinkage; ;} - break; - - case 96: -#line 1220 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { yyval.UIntVal = CallingConv::C; ;} - break; - - case 97: -#line 1221 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { yyval.UIntVal = CallingConv::C; ;} - break; - - case 98: -#line 1222 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { yyval.UIntVal = CallingConv::Fast; ;} - break; - - case 99: -#line 1223 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { yyval.UIntVal = CallingConv::Cold; ;} - break; - - case 100: -#line 1224 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { yyval.UIntVal = CallingConv::X86_StdCall; ;} - break; - - case 101: -#line 1225 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { yyval.UIntVal = CallingConv::X86_FastCall; ;} - break; - - case 102: -#line 1226 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 72: +#line 1184 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.Linkage = GlobalValue::InternalLinkage; ; + break;} +case 73: +#line 1185 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.Linkage = GlobalValue::WeakLinkage; ; + break;} +case 74: +#line 1186 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.Linkage = GlobalValue::LinkOnceLinkage; ; + break;} +case 75: +#line 1187 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.Linkage = GlobalValue::AppendingLinkage; ; + break;} +case 76: +#line 1188 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.Linkage = GlobalValue::DLLExportLinkage; ; + break;} +case 77: +#line 1192 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.Linkage = GlobalValue::DLLImportLinkage; ; + break;} +case 78: +#line 1193 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.Linkage = GlobalValue::ExternalWeakLinkage; ; + break;} +case 79: +#line 1194 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.Linkage = GlobalValue::ExternalLinkage; ; + break;} +case 80: +#line 1198 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.Visibility = GlobalValue::DefaultVisibility; ; + break;} +case 81: +#line 1199 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.Visibility = GlobalValue::DefaultVisibility; ; + break;} +case 82: +#line 1200 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.Visibility = GlobalValue::HiddenVisibility; ; + break;} +case 83: +#line 1201 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.Visibility = GlobalValue::ProtectedVisibility; ; + break;} +case 84: +#line 1205 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.Linkage = GlobalValue::ExternalLinkage; ; + break;} +case 85: +#line 1206 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.Linkage = GlobalValue::DLLImportLinkage; ; + break;} +case 86: +#line 1207 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.Linkage = GlobalValue::ExternalWeakLinkage; ; + break;} +case 87: +#line 1211 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.Linkage = GlobalValue::ExternalLinkage; ; + break;} +case 88: +#line 1212 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.Linkage = GlobalValue::InternalLinkage; ; + break;} +case 89: +#line 1213 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.Linkage = GlobalValue::LinkOnceLinkage; ; + break;} +case 90: +#line 1214 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.Linkage = GlobalValue::WeakLinkage; ; + break;} +case 91: +#line 1215 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.Linkage = GlobalValue::DLLExportLinkage; ; + break;} +case 92: +#line 1219 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.Linkage = GlobalValue::ExternalLinkage; ; + break;} +case 93: +#line 1220 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.Linkage = GlobalValue::WeakLinkage; ; + break;} +case 94: +#line 1221 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.Linkage = GlobalValue::InternalLinkage; ; + break;} +case 95: +#line 1224 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.UIntVal = CallingConv::C; ; + break;} +case 96: +#line 1225 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.UIntVal = CallingConv::C; ; + break;} +case 97: +#line 1226 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.UIntVal = CallingConv::Fast; ; + break;} +case 98: +#line 1227 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.UIntVal = CallingConv::Cold; ; + break;} +case 99: +#line 1228 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.UIntVal = CallingConv::X86_StdCall; ; + break;} +case 100: +#line 1229 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.UIntVal = CallingConv::X86_FastCall; ; + break;} +case 101: +#line 1230 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ if ((unsigned)yyvsp[0].UInt64Val != yyvsp[0].UInt64Val) GEN_ERROR("Calling conv too large"); yyval.UIntVal = yyvsp[0].UInt64Val; CHECK_FOR_ERROR - ;} - break; - - case 103: -#line 1233 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { yyval.ParamAttrs = ParamAttr::ZExt; ;} - break; - - case 104: -#line 1234 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { yyval.ParamAttrs = ParamAttr::ZExt; ;} - break; - - case 105: -#line 1235 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { yyval.ParamAttrs = ParamAttr::SExt; ;} - break; - - case 106: -#line 1236 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { yyval.ParamAttrs = ParamAttr::SExt; ;} - break; - - case 107: -#line 1237 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { yyval.ParamAttrs = ParamAttr::InReg; ;} - break; - - case 108: -#line 1238 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { yyval.ParamAttrs = ParamAttr::StructRet; ;} - break; - - case 109: -#line 1239 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { yyval.ParamAttrs = ParamAttr::NoAlias; ;} - break; - - case 110: -#line 1240 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { yyval.ParamAttrs = ParamAttr::ByVal; ;} - break; - - case 111: -#line 1241 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { yyval.ParamAttrs = ParamAttr::Nest; ;} - break; - - case 112: -#line 1244 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { yyval.ParamAttrs = ParamAttr::None; ;} - break; - - case 113: -#line 1245 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 102: +#line 1237 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.ParamAttrs = ParamAttr::ZExt; ; + break;} +case 103: +#line 1238 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.ParamAttrs = ParamAttr::ZExt; ; + break;} +case 104: +#line 1239 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.ParamAttrs = ParamAttr::SExt; ; + break;} +case 105: +#line 1240 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.ParamAttrs = ParamAttr::SExt; ; + break;} +case 106: +#line 1241 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.ParamAttrs = ParamAttr::InReg; ; + break;} +case 107: +#line 1242 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.ParamAttrs = ParamAttr::StructRet; ; + break;} +case 108: +#line 1243 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.ParamAttrs = ParamAttr::NoAlias; ; + break;} +case 109: +#line 1244 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.ParamAttrs = ParamAttr::ByVal; ; + break;} +case 110: +#line 1245 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.ParamAttrs = ParamAttr::Nest; ; + break;} +case 111: +#line 1248 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.ParamAttrs = ParamAttr::None; ; + break;} +case 112: +#line 1249 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.ParamAttrs = yyvsp[-1].ParamAttrs | yyvsp[0].ParamAttrs; - ;} - break; - - case 114: -#line 1250 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { yyval.ParamAttrs = ParamAttr::NoReturn; ;} - break; - - case 115: -#line 1251 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { yyval.ParamAttrs = ParamAttr::NoUnwind; ;} - break; - - case 116: -#line 1252 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { yyval.ParamAttrs = ParamAttr::ZExt; ;} - break; - - case 117: -#line 1253 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { yyval.ParamAttrs = ParamAttr::SExt; ;} - break; - - case 118: -#line 1256 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { yyval.ParamAttrs = ParamAttr::None; ;} - break; - - case 119: -#line 1257 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 113: +#line 1254 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.ParamAttrs = ParamAttr::NoReturn; ; + break;} +case 114: +#line 1255 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.ParamAttrs = ParamAttr::NoUnwind; ; + break;} +case 115: +#line 1256 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.ParamAttrs = ParamAttr::ZExt; ; + break;} +case 116: +#line 1257 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.ParamAttrs = ParamAttr::SExt; ; + break;} +case 117: +#line 1260 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.ParamAttrs = ParamAttr::None; ; + break;} +case 118: +#line 1261 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.ParamAttrs = yyvsp[-1].ParamAttrs | yyvsp[0].ParamAttrs; - ;} - break; - - case 120: -#line 1264 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { yyval.UIntVal = 0; ;} - break; - - case 121: -#line 1265 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 119: +#line 1268 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.UIntVal = 0; ; + break;} +case 120: +#line 1269 "/Volumes/MacOS9/gcc/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 122: -#line 1271 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { yyval.UIntVal = 0; ;} - break; - - case 123: -#line 1272 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { +; + break;} +case 121: +#line 1275 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.UIntVal = 0; ; + break;} +case 122: +#line 1276 "/Volumes/MacOS9/gcc/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 124: -#line 1280 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { +; + break;} +case 123: +#line 1284 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ for (unsigned i = 0, e = yyvsp[0].StrVal->length(); i != e; ++i) if ((*yyvsp[0].StrVal)[i] == '"' || (*yyvsp[0].StrVal)[i] == '\\') GEN_ERROR("Invalid character in section name"); yyval.StrVal = yyvsp[0].StrVal; CHECK_FOR_ERROR -;} - break; - - case 125: -#line 1288 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { yyval.StrVal = 0; ;} - break; - - case 126: -#line 1289 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { yyval.StrVal = yyvsp[0].StrVal; ;} - break; - - case 127: -#line 1294 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - {;} - break; - - case 128: -#line 1295 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - {;} - break; - - case 129: -#line 1296 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { +; + break;} +case 124: +#line 1292 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.StrVal = 0; ; + break;} +case 125: +#line 1293 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.StrVal = yyvsp[0].StrVal; ; + break;} +case 126: +#line 1298 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{; + break;} +case 127: +#line 1299 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{; + break;} +case 128: +#line 1300 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ CurGV->setSection(*yyvsp[0].StrVal); delete yyvsp[0].StrVal; CHECK_FOR_ERROR - ;} - break; - - case 130: -#line 1301 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 129: +#line 1305 "/Volumes/MacOS9/gcc/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[0].UInt64Val); CHECK_FOR_ERROR - ;} - break; - - case 138: -#line 1317 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 137: +#line 1321 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.TypeVal = new PATypeHolder(OpaqueType::get()); CHECK_FOR_ERROR - ;} - break; - - case 139: -#line 1321 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 138: +#line 1325 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.TypeVal = new PATypeHolder(yyvsp[0].PrimType); CHECK_FOR_ERROR - ;} - break; - - case 140: -#line 1325 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { // Pointer type? + ; + break;} +case 139: +#line 1329 "/Volumes/MacOS9/gcc/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].TypeVal))); delete yyvsp[-1].TypeVal; CHECK_FOR_ERROR - ;} - break; - - case 141: -#line 1332 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { // Named types are also simple types... + ; + break;} +case 140: +#line 1336 "/Volumes/MacOS9/gcc/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 142: -#line 1337 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { // Type UpReference + ; + break;} +case 141: +#line 1341 "/Volumes/MacOS9/gcc/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[0].UInt64Val, OT)); // Add to vector... yyval.TypeVal = new PATypeHolder(OT); UR_OUT("New Upreference!\n"); CHECK_FOR_ERROR - ;} - break; - - case 143: -#line 1345 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 142: +#line 1349 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ std::vector Params; ParamAttrsVector Attrs; if (yyvsp[0].ParamAttrs != ParamAttr::None) { @@ -3625,12 +3011,11 @@ delete yyvsp[-4].TypeVal; // Delete the return type handle yyval.TypeVal = new PATypeHolder(HandleUpRefs(FT)); CHECK_FOR_ERROR - ;} - break; - - case 144: -#line 1375 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 143: +#line 1379 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ std::vector Params; ParamAttrsVector Attrs; if (yyvsp[0].ParamAttrs != ParamAttr::None) { @@ -3659,21 +3044,19 @@ delete yyvsp[-2].TypeWithAttrsList; // Delete the argument list yyval.TypeVal = new PATypeHolder(HandleUpRefs(FT)); CHECK_FOR_ERROR - ;} - break; - - case 145: -#line 1406 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { // Sized array type? + ; + break;} +case 144: +#line 1410 "/Volumes/MacOS9/gcc/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 146: -#line 1411 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { // Vector type? + ; + break;} +case 145: +#line 1415 "/Volumes/MacOS9/gcc/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"); @@ -3684,12 +3067,11 @@ yyval.TypeVal = new PATypeHolder(HandleUpRefs(VectorType::get(*yyvsp[-1].TypeVal, (unsigned)yyvsp[-3].UInt64Val))); delete yyvsp[-1].TypeVal; CHECK_FOR_ERROR - ;} - break; - - case 147: -#line 1423 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { // Structure type? + ; + break;} +case 146: +#line 1427 "/Volumes/MacOS9/gcc/llvm/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) @@ -3698,20 +3080,18 @@ yyval.TypeVal = new PATypeHolder(HandleUpRefs(StructType::get(Elements))); delete yyvsp[-1].TypeList; CHECK_FOR_ERROR - ;} - break; - - case 148: -#line 1433 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { // Empty structure type? + ; + break;} +case 147: +#line 1437 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ // Empty structure type? yyval.TypeVal = new PATypeHolder(StructType::get(std::vector())); CHECK_FOR_ERROR - ;} - break; - - case 149: -#line 1437 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 148: +#line 1441 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ std::vector Elements; for (std::list::iterator I = yyvsp[-2].TypeList->begin(), E = yyvsp[-2].TypeList->end(); I != E; ++I) @@ -3720,112 +3100,100 @@ yyval.TypeVal = new PATypeHolder(HandleUpRefs(StructType::get(Elements, true))); delete yyvsp[-2].TypeList; CHECK_FOR_ERROR - ;} - break; - - case 150: -#line 1447 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { // Empty structure type? + ; + break;} +case 149: +#line 1451 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ // Empty structure type? yyval.TypeVal = new PATypeHolder(StructType::get(std::vector(), true)); CHECK_FOR_ERROR - ;} - break; - - case 151: -#line 1454 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 150: +#line 1458 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.TypeWithAttrs.Ty = yyvsp[-1].TypeVal; yyval.TypeWithAttrs.Attrs = yyvsp[0].ParamAttrs; - ;} - break; - - case 152: -#line 1461 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 151: +#line 1465 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ if (!UpRefs.empty()) 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[0].TypeVal; - ;} - break; - - case 153: -#line 1468 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 152: +#line 1472 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.TypeVal = new PATypeHolder(Type::VoidTy); - ;} - break; - - case 154: -#line 1473 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 153: +#line 1477 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.TypeWithAttrsList = new TypeWithAttrsList(); yyval.TypeWithAttrsList->push_back(yyvsp[0].TypeWithAttrs); CHECK_FOR_ERROR - ;} - break; - - case 155: -#line 1478 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 154: +#line 1482 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ (yyval.TypeWithAttrsList=yyvsp[-2].TypeWithAttrsList)->push_back(yyvsp[0].TypeWithAttrs); CHECK_FOR_ERROR - ;} - break; - - case 157: -#line 1486 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 156: +#line 1490 "/Volumes/MacOS9/gcc/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); CHECK_FOR_ERROR - ;} - break; - - case 158: -#line 1493 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 157: +#line 1497 "/Volumes/MacOS9/gcc/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 159: -#line 1500 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 158: +#line 1504 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.TypeWithAttrsList = new TypeWithAttrsList(); CHECK_FOR_ERROR - ;} - break; - - case 160: -#line 1508 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 159: +#line 1512 "/Volumes/MacOS9/gcc/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 161: -#line 1514 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 160: +#line 1518 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ (yyval.TypeList=yyvsp[-2].TypeList)->push_back(*yyvsp[0].TypeVal); delete yyvsp[0].TypeVal; CHECK_FOR_ERROR - ;} - break; - - case 162: -#line 1526 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { // Nonempty unsized arr + ; + break;} +case 161: +#line 1530 "/Volumes/MacOS9/gcc/llvm/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()); @@ -3852,12 +3220,11 @@ yyval.ConstVal = ConstantArray::get(ATy, *yyvsp[-1].ConstVector); delete yyvsp[-3].TypeVal; delete yyvsp[-1].ConstVector; CHECK_FOR_ERROR - ;} - break; - - case 163: -#line 1554 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 162: +#line 1558 "/Volumes/MacOS9/gcc/llvm/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()); @@ -3872,12 +3239,11 @@ yyval.ConstVal = ConstantArray::get(ATy, std::vector()); delete yyvsp[-2].TypeVal; CHECK_FOR_ERROR - ;} - break; - - case 164: -#line 1570 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 163: +#line 1574 "/Volumes/MacOS9/gcc/llvm/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()); @@ -3903,12 +3269,11 @@ yyval.ConstVal = ConstantArray::get(ATy, Vals); delete yyvsp[-2].TypeVal; CHECK_FOR_ERROR - ;} - break; - - case 165: -#line 1597 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { // Nonempty unsized arr + ; + break;} +case 164: +#line 1601 "/Volumes/MacOS9/gcc/llvm/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()); @@ -3935,12 +3300,11 @@ yyval.ConstVal = ConstantVector::get(PTy, *yyvsp[-1].ConstVector); delete yyvsp[-3].TypeVal; delete yyvsp[-1].ConstVector; CHECK_FOR_ERROR - ;} - break; - - case 166: -#line 1625 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 165: +#line 1629 "/Volumes/MacOS9/gcc/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: '" + @@ -3965,12 +3329,11 @@ yyval.ConstVal = ConstantStruct::get(STy, *yyvsp[-1].ConstVector); delete yyvsp[-3].TypeVal; delete yyvsp[-1].ConstVector; CHECK_FOR_ERROR - ;} - break; - - case 167: -#line 1651 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 166: +#line 1655 "/Volumes/MacOS9/gcc/llvm/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()); @@ -3989,12 +3352,11 @@ yyval.ConstVal = ConstantStruct::get(STy, std::vector()); delete yyvsp[-2].TypeVal; CHECK_FOR_ERROR - ;} - break; - - case 168: -#line 1671 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 167: +#line 1675 "/Volumes/MacOS9/gcc/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: '" + @@ -4019,12 +3381,11 @@ yyval.ConstVal = ConstantStruct::get(STy, *yyvsp[-2].ConstVector); delete yyvsp[-5].TypeVal; delete yyvsp[-2].ConstVector; CHECK_FOR_ERROR - ;} - break; - - case 169: -#line 1697 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 168: +#line 1701 "/Volumes/MacOS9/gcc/llvm/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()); @@ -4043,12 +3404,11 @@ yyval.ConstVal = ConstantStruct::get(STy, std::vector()); delete yyvsp[-4].TypeVal; CHECK_FOR_ERROR - ;} - break; - - case 170: -#line 1717 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 169: +#line 1721 "/Volumes/MacOS9/gcc/llvm/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()); @@ -4059,23 +3419,21 @@ yyval.ConstVal = ConstantPointerNull::get(PTy); delete yyvsp[-1].TypeVal; CHECK_FOR_ERROR - ;} - break; - - case 171: -#line 1729 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 170: +#line 1733 "/Volumes/MacOS9/gcc/llvm/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 172: -#line 1736 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 171: +#line 1740 "/Volumes/MacOS9/gcc/llvm/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()); @@ -4140,12 +3498,11 @@ yyval.ConstVal = cast(V); delete yyvsp[-1].TypeVal; // Free the type handle CHECK_FOR_ERROR - ;} - break; - - case 173: -#line 1802 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 172: +#line 1806 "/Volumes/MacOS9/gcc/llvm/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()) @@ -4154,12 +3511,11 @@ yyval.ConstVal = yyvsp[0].ConstVal; delete yyvsp[-1].TypeVal; CHECK_FOR_ERROR - ;} - break; - - case 174: -#line 1812 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 173: +#line 1816 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ if (!UpRefs.empty()) GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription()); const Type *Ty = yyvsp[-1].TypeVal->get(); @@ -4168,22 +3524,20 @@ yyval.ConstVal = Constant::getNullValue(Ty); delete yyvsp[-1].TypeVal; CHECK_FOR_ERROR - ;} - break; - - case 175: -#line 1822 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { // integral constants + ; + break;} +case 174: +#line 1826 "/Volumes/MacOS9/gcc/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].PrimType, yyvsp[0].SInt64Val, true); CHECK_FOR_ERROR - ;} - break; - - case 176: -#line 1828 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { // arbitrary precision integer constants + ; + break;} +case 175: +#line 1832 "/Volumes/MacOS9/gcc/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"); @@ -4192,22 +3546,20 @@ yyval.ConstVal = ConstantInt::get(*yyvsp[0].APIntVal); delete yyvsp[0].APIntVal; CHECK_FOR_ERROR - ;} - break; - - case 177: -#line 1838 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { // integral constants + ; + break;} +case 176: +#line 1842 "/Volumes/MacOS9/gcc/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].PrimType, yyvsp[0].UInt64Val, false); CHECK_FOR_ERROR - ;} - break; - - case 178: -#line 1844 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { // arbitrary precision integer constants + ; + break;} +case 177: +#line 1848 "/Volumes/MacOS9/gcc/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"); @@ -4216,40 +3568,41 @@ yyval.ConstVal = ConstantInt::get(*yyvsp[0].APIntVal); delete yyvsp[0].APIntVal; CHECK_FOR_ERROR - ;} - break; - - case 179: -#line 1854 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { // Boolean constants + ; + break;} +case 178: +#line 1858 "/Volumes/MacOS9/gcc/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 180: -#line 1859 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { // Boolean constants + ; + break;} +case 179: +#line 1863 "/Volumes/MacOS9/gcc/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 181: -#line 1864 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { // Float & Double constants - if (!ConstantFP::isValueValidForType(yyvsp[-1].PrimType, yyvsp[0].FPVal)) + ; + break;} +case 180: +#line 1868 "/Volumes/MacOS9/gcc/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].PrimType, yyvsp[0].FPVal); - CHECK_FOR_ERROR - ;} - break; - - case 182: -#line 1872 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + // Lexer has no type info, so builds all FP constants as double. + // Fix this here. + if (yyvsp[-1].PrimType==Type::FloatTy) + yyvsp[0].FPVal->convert(APFloat::IEEEsingle, APFloat::rmNearestTiesToEven); + yyval.ConstVal = ConstantFP::get(yyvsp[-1].PrimType, *yyvsp[0].FPVal); + delete yyvsp[0].FPVal; + CHECK_FOR_ERROR + ; + break;} +case 181: +#line 1881 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ if (!UpRefs.empty()) GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription()); Constant *Val = yyvsp[-3].ConstVal; @@ -4260,12 +3613,11 @@ DestTy->getDescription() + "'"); yyval.ConstVal = ConstantExpr::getCast(yyvsp[-5].CastOpVal, yyvsp[-3].ConstVal, DestTy); delete yyvsp[-1].TypeVal; - ;} - break; - - case 183: -#line 1884 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 182: +#line 1893 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ if (!isa(yyvsp[-2].ConstVal->getType())) GEN_ERROR("GetElementPtr requires a pointer operand"); @@ -4286,34 +3638,31 @@ yyval.ConstVal = ConstantExpr::getGetElementPtr(yyvsp[-2].ConstVal, &IdxVec[0], IdxVec.size()); CHECK_FOR_ERROR - ;} - break; - - case 184: -#line 1906 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 183: +#line 1915 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ if (yyvsp[-5].ConstVal->getType() != Type::Int1Ty) GEN_ERROR("Select condition must be of boolean type"); if (yyvsp[-3].ConstVal->getType() != yyvsp[-1].ConstVal->getType()) GEN_ERROR("Select operand types must match"); yyval.ConstVal = ConstantExpr::getSelect(yyvsp[-5].ConstVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal); CHECK_FOR_ERROR - ;} - break; - - case 185: -#line 1914 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 184: +#line 1923 "/Volumes/MacOS9/gcc/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[-5].BinaryOpVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal); - ;} - break; - - case 186: -#line 1920 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 185: +#line 1929 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ if (yyvsp[-3].ConstVal->getType() != yyvsp[-1].ConstVal->getType()) GEN_ERROR("Logical operator types must match"); if (!yyvsp[-3].ConstVal->getType()->isInteger()) { @@ -4323,97 +3672,85 @@ } yyval.ConstVal = ConstantExpr::get(yyvsp[-5].BinaryOpVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal); CHECK_FOR_ERROR - ;} - break; - - case 187: -#line 1931 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 186: +#line 1940 "/Volumes/MacOS9/gcc/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[-5].IPredicate, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal); - ;} - break; - - case 188: -#line 1936 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 187: +#line 1945 "/Volumes/MacOS9/gcc/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[-5].FPredicate, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal); - ;} - break; - - case 189: -#line 1941 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 188: +#line 1950 "/Volumes/MacOS9/gcc/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].ConstVal, yyvsp[-1].ConstVal); CHECK_FOR_ERROR - ;} - break; - - case 190: -#line 1947 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 189: +#line 1956 "/Volumes/MacOS9/gcc/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[-5].ConstVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal); CHECK_FOR_ERROR - ;} - break; - - case 191: -#line 1953 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 190: +#line 1962 "/Volumes/MacOS9/gcc/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[-5].ConstVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal); CHECK_FOR_ERROR - ;} - break; - - case 192: -#line 1962 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 191: +#line 1971 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ (yyval.ConstVector = yyvsp[-2].ConstVector)->push_back(yyvsp[0].ConstVal); CHECK_FOR_ERROR - ;} - break; - - case 193: -#line 1966 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 192: +#line 1975 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.ConstVector = new std::vector(); yyval.ConstVector->push_back(yyvsp[0].ConstVal); CHECK_FOR_ERROR - ;} - break; - - case 194: -#line 1974 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { yyval.BoolVal = false; ;} - break; - - case 195: -#line 1974 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { yyval.BoolVal = true; ;} - break; - - case 196: -#line 1977 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { yyval.BoolVal = true; ;} - break; - - case 197: -#line 1977 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { yyval.BoolVal = false; ;} - break; - - case 198: -#line 1980 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 193: +#line 1983 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.BoolVal = false; ; + break;} +case 194: +#line 1983 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.BoolVal = true; ; + break;} +case 195: +#line 1986 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.BoolVal = true; ; + break;} +case 196: +#line 1986 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.BoolVal = false; ; + break;} +case 197: +#line 1989 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ const Type* VTy = yyvsp[-1].TypeVal->get(); Value *V = getVal(VTy, yyvsp[0].ValIDVal); CHECK_FOR_ERROR @@ -4424,12 +3761,11 @@ yyval.ConstVal = Aliasee; CHECK_FOR_ERROR delete yyvsp[-1].TypeVal; - ;} - break; - - case 199: -#line 1992 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 198: +#line 2001 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ Constant *Val = yyvsp[-3].ConstVal; const Type *DestTy = yyvsp[-1].TypeVal->get(); if (!CastInst::castIsValid(yyvsp[-5].CastOpVal, yyvsp[-3].ConstVal, DestTy)) @@ -4440,62 +3776,54 @@ yyval.ConstVal = ConstantExpr::getCast(yyvsp[-5].CastOpVal, yyvsp[-3].ConstVal, DestTy); CHECK_FOR_ERROR delete yyvsp[-1].TypeVal; - ;} - break; - - case 200: -#line 2013 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 199: +#line 2022 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.ModuleVal = ParserResult = CurModule.CurrentModule; CurModule.ModuleDone(); CHECK_FOR_ERROR; - ;} - break; - - case 201: -#line 2018 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 200: +#line 2027 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.ModuleVal = ParserResult = CurModule.CurrentModule; CurModule.ModuleDone(); CHECK_FOR_ERROR; - ;} - break; - - case 204: -#line 2031 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { CurFun.isDeclare = false; ;} - break; - - case 205: -#line 2031 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 203: +#line 2040 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ CurFun.isDeclare = false; ; + break;} +case 204: +#line 2040 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ CurFun.FunctionDone(); CHECK_FOR_ERROR - ;} - break; - - case 206: -#line 2035 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { CurFun.isDeclare = true; ;} - break; - - case 207: -#line 2035 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 205: +#line 2044 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ CurFun.isDeclare = true; ; + break;} +case 206: +#line 2044 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ CHECK_FOR_ERROR - ;} - break; - - case 208: -#line 2038 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 207: +#line 2047 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ CHECK_FOR_ERROR - ;} - break; - - case 209: -#line 2041 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 208: +#line 2050 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ if (!UpRefs.empty()) GEN_ERROR("Invalid upreference in type: " + (*yyvsp[0].TypeVal)->getDescription()); // Eagerly resolve types. This is not an optimization, this is a @@ -4518,12 +3846,11 @@ delete yyvsp[0].TypeVal; CHECK_FOR_ERROR - ;} - break; - - case 210: -#line 2065 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 209: +#line 2074 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ ResolveTypeTo(yyvsp[-2].StrVal, yyvsp[0].PrimType); if (!setTypeName(yyvsp[0].PrimType, yyvsp[-2].StrVal) && !yyvsp[-2].StrVal) { @@ -4533,67 +3860,60 @@ CurModule.Types.push_back(yyvsp[0].PrimType); } CHECK_FOR_ERROR - ;} - break; - - case 211: -#line 2076 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 210: +#line 2085 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ /* "Externally Visible" Linkage */ if (yyvsp[0].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); CHECK_FOR_ERROR - ;} - break; - - case 212: -#line 2083 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 211: +#line 2092 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ CurGV = 0; - ;} - break; - - case 213: -#line 2087 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 212: +#line 2096 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ if (yyvsp[0].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); CHECK_FOR_ERROR - ;} - break; - - case 214: -#line 2092 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 213: +#line 2101 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ CurGV = 0; - ;} - break; - - case 215: -#line 2096 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 214: +#line 2105 "/Volumes/MacOS9/gcc/llvm/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); CHECK_FOR_ERROR delete yyvsp[0].TypeVal; - ;} - break; - - case 216: -#line 2102 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 215: +#line 2111 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ CurGV = 0; CHECK_FOR_ERROR - ;} - break; - - case 217: -#line 2106 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 216: +#line 2115 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ std::string Name; if (yyvsp[-4].StrVal) { Name = *yyvsp[-4].StrVal; @@ -4611,26 +3931,23 @@ GA->setVisibility(yyvsp[-3].Visibility); InsertValue(GA, CurModule.Values); CHECK_FOR_ERROR - ;} - break; - - case 218: -#line 2125 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { - CHECK_FOR_ERROR - ;} - break; - - case 219: -#line 2128 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 217: +#line 2134 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ + CHECK_FOR_ERROR + ; + break;} +case 218: +#line 2137 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ CHECK_FOR_ERROR - ;} - break; - - case 220: -#line 2134 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 219: +#line 2143 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ const std::string &AsmSoFar = CurModule.CurrentModule->getModuleInlineAsm(); if (AsmSoFar.empty()) CurModule.CurrentModule->setModuleInlineAsm(*yyvsp[0].StrVal); @@ -4638,53 +3955,47 @@ CurModule.CurrentModule->setModuleInlineAsm(AsmSoFar+"\n"+*yyvsp[0].StrVal); delete yyvsp[0].StrVal; CHECK_FOR_ERROR -;} - break; - - case 221: -#line 2144 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { +; + break;} +case 220: +#line 2153 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ CurModule.CurrentModule->setTargetTriple(*yyvsp[0].StrVal); delete yyvsp[0].StrVal; - ;} - break; - - case 222: -#line 2148 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 221: +#line 2157 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ CurModule.CurrentModule->setDataLayout(*yyvsp[0].StrVal); delete yyvsp[0].StrVal; - ;} - break; - - case 224: -#line 2155 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 223: +#line 2164 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ CurModule.CurrentModule->addLibrary(*yyvsp[0].StrVal); delete yyvsp[0].StrVal; CHECK_FOR_ERROR - ;} - break; - - case 225: -#line 2160 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 224: +#line 2169 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ CurModule.CurrentModule->addLibrary(*yyvsp[0].StrVal); delete yyvsp[0].StrVal; CHECK_FOR_ERROR - ;} - break; - - case 226: -#line 2165 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 225: +#line 2174 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ CHECK_FOR_ERROR - ;} - break; - - case 227: -#line 2174 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 226: +#line 2183 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ if (!UpRefs.empty()) GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription()); if (*yyvsp[-2].TypeVal == Type::VoidTy) @@ -4693,12 +4004,11 @@ yyval.ArgList = yyvsp[-4].ArgList; yyvsp[-4].ArgList->push_back(E); CHECK_FOR_ERROR - ;} - break; - - case 228: -#line 2184 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 227: +#line 2193 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ if (!UpRefs.empty()) GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription()); if (*yyvsp[-2].TypeVal == Type::VoidTy) @@ -4707,20 +4017,18 @@ yyval.ArgList = new ArgListType; yyval.ArgList->push_back(E); CHECK_FOR_ERROR - ;} - break; - - case 229: -#line 2195 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 228: +#line 2204 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.ArgList = yyvsp[0].ArgList; CHECK_FOR_ERROR - ;} - break; - - case 230: -#line 2199 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 229: +#line 2208 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.ArgList = yyvsp[-2].ArgList; struct ArgListEntry E; E.Ty = new PATypeHolder(Type::VoidTy); @@ -4728,12 +4036,11 @@ E.Attrs = ParamAttr::None; yyval.ArgList->push_back(E); CHECK_FOR_ERROR - ;} - break; - - case 231: -#line 2208 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 230: +#line 2217 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.ArgList = new ArgListType; struct ArgListEntry E; E.Ty = new PATypeHolder(Type::VoidTy); @@ -4741,20 +4048,18 @@ E.Attrs = ParamAttr::None; yyval.ArgList->push_back(E); CHECK_FOR_ERROR - ;} - break; - - case 232: -#line 2217 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 231: +#line 2226 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.ArgList = 0; CHECK_FOR_ERROR - ;} - break; - - case 233: -#line 2223 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 232: +#line 2232 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ std::string FunctionName(*yyvsp[-6].StrVal); delete yyvsp[-6].StrVal; // Free strdup'd memory! @@ -4872,123 +4177,109 @@ delete yyvsp[-4].ArgList; // We're now done with the argument list } CHECK_FOR_ERROR -;} - break; - - case 236: -#line 2345 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { +; + break;} +case 235: +#line 2354 "/Volumes/MacOS9/gcc/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[-3].Linkage); yyval.FunctionVal->setVisibility(yyvsp[-2].Visibility); -;} - break; - - case 239: -#line 2356 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { +; + break;} +case 238: +#line 2365 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.FunctionVal = yyvsp[-1].FunctionVal; CHECK_FOR_ERROR -;} - break; - - case 240: -#line 2361 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { +; + break;} +case 239: +#line 2370 "/Volumes/MacOS9/gcc/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 241: -#line 2373 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 240: +#line 2382 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.BoolVal = false; CHECK_FOR_ERROR - ;} - break; - - case 242: -#line 2377 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 241: +#line 2386 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.BoolVal = true; CHECK_FOR_ERROR - ;} - break; - - case 243: -#line 2382 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { // A reference to a direct constant + ; + break;} +case 242: +#line 2391 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ // A reference to a direct constant yyval.ValIDVal = ValID::create(yyvsp[0].SInt64Val); CHECK_FOR_ERROR - ;} - break; - - case 244: -#line 2386 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 243: +#line 2395 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.ValIDVal = ValID::create(yyvsp[0].UInt64Val); CHECK_FOR_ERROR - ;} - break; - - case 245: -#line 2390 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { // Perhaps it's an FP constant? + ; + break;} +case 244: +#line 2399 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ // Perhaps it's an FP constant? yyval.ValIDVal = ValID::create(yyvsp[0].FPVal); CHECK_FOR_ERROR - ;} - break; - - case 246: -#line 2394 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 245: +#line 2403 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.ValIDVal = ValID::create(ConstantInt::getTrue()); CHECK_FOR_ERROR - ;} - break; - - case 247: -#line 2398 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 246: +#line 2407 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.ValIDVal = ValID::create(ConstantInt::getFalse()); CHECK_FOR_ERROR - ;} - break; - - case 248: -#line 2402 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 247: +#line 2411 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.ValIDVal = ValID::createNull(); CHECK_FOR_ERROR - ;} - break; - - case 249: -#line 2406 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 248: +#line 2415 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.ValIDVal = ValID::createUndef(); CHECK_FOR_ERROR - ;} - break; - - case 250: -#line 2410 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { // A vector zero constant. + ; + break;} +case 249: +#line 2419 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ // A vector zero constant. yyval.ValIDVal = ValID::createZeroInit(); CHECK_FOR_ERROR - ;} - break; - - case 251: -#line 2414 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { // Nonempty unsized packed vector + ; + break;} +case 250: +#line 2423 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ // Nonempty unsized packed vector const Type *ETy = (*yyvsp[-1].ConstVector)[0]->getType(); int NumElements = yyvsp[-1].ConstVector->size(); @@ -5012,103 +4303,92 @@ yyval.ValIDVal = ValID::create(ConstantVector::get(pt, *yyvsp[-1].ConstVector)); delete PTy; delete yyvsp[-1].ConstVector; CHECK_FOR_ERROR - ;} - break; - - case 252: -#line 2439 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 251: +#line 2448 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.ValIDVal = ValID::create(yyvsp[0].ConstVal); CHECK_FOR_ERROR - ;} - break; - - case 253: -#line 2443 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 252: +#line 2452 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.ValIDVal = ValID::createInlineAsm(*yyvsp[-2].StrVal, *yyvsp[0].StrVal, yyvsp[-3].BoolVal); delete yyvsp[-2].StrVal; delete yyvsp[0].StrVal; CHECK_FOR_ERROR - ;} - break; - - case 254: -#line 2453 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { // Is it an integer reference...? + ; + break;} +case 253: +#line 2462 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ // Is it an integer reference...? yyval.ValIDVal = ValID::createLocalID(yyvsp[0].UIntVal); CHECK_FOR_ERROR - ;} - break; - - case 255: -#line 2457 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 254: +#line 2466 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.ValIDVal = ValID::createGlobalID(yyvsp[0].UIntVal); CHECK_FOR_ERROR - ;} - break; - - case 256: -#line 2461 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { // Is it a named reference...? + ; + break;} +case 255: +#line 2470 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ // Is it a named reference...? yyval.ValIDVal = ValID::createLocalName(*yyvsp[0].StrVal); delete yyvsp[0].StrVal; CHECK_FOR_ERROR - ;} - break; - - case 257: -#line 2466 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { // Is it a named reference...? + ; + break;} +case 256: +#line 2475 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ // Is it a named reference...? yyval.ValIDVal = ValID::createGlobalName(*yyvsp[0].StrVal); delete yyvsp[0].StrVal; CHECK_FOR_ERROR - ;} - break; - - case 260: -#line 2479 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 259: +#line 2488 "/Volumes/MacOS9/gcc/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 261: -#line 2488 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 260: +#line 2497 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.FunctionVal = yyvsp[-1].FunctionVal; CHECK_FOR_ERROR - ;} - break; - - case 262: -#line 2492 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { // Do not allow functions with 0 basic blocks + ; + break;} +case 261: +#line 2501 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ // Do not allow functions with 0 basic blocks yyval.FunctionVal = yyvsp[-1].FunctionVal; CHECK_FOR_ERROR - ;} - break; - - case 263: -#line 2501 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 262: +#line 2510 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ setValueName(yyvsp[0].TermInstVal, yyvsp[-1].StrVal); 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 264: -#line 2510 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 263: +#line 2519 "/Volumes/MacOS9/gcc/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) @@ -5116,55 +4396,49 @@ yyvsp[-1].BasicBlockVal->getInstList().push_back(yyvsp[0].InstVal); yyval.BasicBlockVal = yyvsp[-1].BasicBlockVal; CHECK_FOR_ERROR - ;} - break; - - case 265: -#line 2519 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { // Empty space between instruction lists + ; + break;} +case 264: +#line 2528 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ // Empty space between instruction lists yyval.BasicBlockVal = defineBBVal(ValID::createLocalID(CurFun.NextValNum)); CHECK_FOR_ERROR - ;} - break; - - case 266: -#line 2523 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { // Labelled (named) basic block + ; + break;} +case 265: +#line 2532 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ // Labelled (named) basic block yyval.BasicBlockVal = defineBBVal(ValID::createLocalName(*yyvsp[0].StrVal)); delete yyvsp[0].StrVal; CHECK_FOR_ERROR - ;} - break; - - case 267: -#line 2530 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { // Return with a result... + ; + break;} +case 266: +#line 2539 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ // Return with a result... yyval.TermInstVal = new ReturnInst(yyvsp[0].ValueVal); CHECK_FOR_ERROR - ;} - break; - - case 268: -#line 2534 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { // Return with no result... + ; + break;} +case 267: +#line 2543 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ // Return with no result... yyval.TermInstVal = new ReturnInst(); CHECK_FOR_ERROR - ;} - break; - - case 269: -#line 2538 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { // Unconditional Branch... + ; + break;} +case 268: +#line 2547 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ // Unconditional Branch... BasicBlock* tmpBB = getBBVal(yyvsp[0].ValIDVal); CHECK_FOR_ERROR yyval.TermInstVal = new BranchInst(tmpBB); - ;} - break; - - case 270: -#line 2543 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 269: +#line 2552 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ assert(cast(yyvsp[-7].PrimType)->getBitWidth() == 1 && "Not Bool?"); BasicBlock* tmpBBA = getBBVal(yyvsp[-3].ValIDVal); CHECK_FOR_ERROR @@ -5173,12 +4447,11 @@ Value* tmpVal = getVal(Type::Int1Ty, yyvsp[-6].ValIDVal); CHECK_FOR_ERROR yyval.TermInstVal = new BranchInst(tmpBBA, tmpBBB, tmpVal); - ;} - break; - - case 271: -#line 2553 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 270: +#line 2562 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ Value* tmpVal = getVal(yyvsp[-7].PrimType, yyvsp[-6].ValIDVal); CHECK_FOR_ERROR BasicBlock* tmpBB = getBBVal(yyvsp[-3].ValIDVal); @@ -5196,12 +4469,11 @@ } delete yyvsp[-1].JumpTable; CHECK_FOR_ERROR - ;} - break; - - case 272: -#line 2572 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 271: +#line 2581 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ Value* tmpVal = getVal(yyvsp[-6].PrimType, yyvsp[-5].ValIDVal); CHECK_FOR_ERROR BasicBlock* tmpBB = getBBVal(yyvsp[-2].ValIDVal); @@ -5209,12 +4481,11 @@ SwitchInst *S = new SwitchInst(tmpVal, tmpBB, 0); yyval.TermInstVal = S; CHECK_FOR_ERROR - ;} - break; - - case 273: -#line 2582 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 272: +#line 2591 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ // Handle the short syntax const PointerType *PFTy = 0; @@ -5292,28 +4563,25 @@ yyval.TermInstVal = II; delete yyvsp[-8].ValueRefList; CHECK_FOR_ERROR - ;} - break; - - case 274: -#line 2661 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 273: +#line 2670 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.TermInstVal = new UnwindInst(); CHECK_FOR_ERROR - ;} - break; - - case 275: -#line 2665 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 274: +#line 2674 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.TermInstVal = new UnreachableInst(); CHECK_FOR_ERROR - ;} - break; - - case 276: -#line 2672 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 275: +#line 2681 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.JumpTable = yyvsp[-5].JumpTable; Constant *V = cast(getExistingVal(yyvsp[-4].PrimType, yyvsp[-3].ValIDVal)); CHECK_FOR_ERROR @@ -5323,12 +4591,11 @@ BasicBlock* tmpBB = getBBVal(yyvsp[0].ValIDVal); CHECK_FOR_ERROR yyval.JumpTable->push_back(std::make_pair(V, tmpBB)); - ;} - break; - - case 277: -#line 2683 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 276: +#line 2692 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.JumpTable = new std::vector >(); Constant *V = cast(getExistingVal(yyvsp[-4].PrimType, yyvsp[-3].ValIDVal)); CHECK_FOR_ERROR @@ -5339,24 +4606,22 @@ BasicBlock* tmpBB = getBBVal(yyvsp[0].ValIDVal); CHECK_FOR_ERROR yyval.JumpTable->push_back(std::make_pair(V, tmpBB)); - ;} - break; - - case 278: -#line 2696 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 277: +#line 2705 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ // Is this definition named?? if so, assign the name... setValueName(yyvsp[0].InstVal, yyvsp[-1].StrVal); CHECK_FOR_ERROR InsertValue(yyvsp[0].InstVal); yyval.InstVal = yyvsp[0].InstVal; CHECK_FOR_ERROR - ;} - break; - - case 279: -#line 2706 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { // Used for PHI nodes + ; + break;} +case 278: +#line 2715 "/Volumes/MacOS9/gcc/llvm/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 >(); @@ -5366,24 +4631,22 @@ CHECK_FOR_ERROR yyval.PHIList->push_back(std::make_pair(tmpVal, tmpBB)); delete yyvsp[-5].TypeVal; - ;} - break; - - case 280: -#line 2717 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 279: +#line 2726 "/Volumes/MacOS9/gcc/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[-1].ValIDVal); CHECK_FOR_ERROR yyvsp[-6].PHIList->push_back(std::make_pair(tmpVal, tmpBB)); - ;} - break; - - case 281: -#line 2727 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 280: +#line 2736 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ if (!UpRefs.empty()) GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription()); // Used for call and invoke instructions @@ -5391,12 +4654,11 @@ 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 282: -#line 2736 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 281: +#line 2745 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ if (!UpRefs.empty()) GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription()); yyval.ValueRefList = yyvsp[-4].ValueRefList; @@ -5404,47 +4666,41 @@ yyval.ValueRefList->push_back(E); delete yyvsp[-2].TypeVal; CHECK_FOR_ERROR - ;} - break; - - case 283: -#line 2745 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { yyval.ValueRefList = new ValueRefList(); ;} - break; - - case 284: -#line 2748 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { yyval.ValueList = new std::vector(); ;} - break; - - case 285: -#line 2749 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 282: +#line 2754 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.ValueRefList = new ValueRefList(); ; + break;} +case 283: +#line 2757 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.ValueList = new std::vector(); ; + break;} +case 284: +#line 2758 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.ValueList = yyvsp[-2].ValueList; yyval.ValueList->push_back(yyvsp[0].ValueVal); CHECK_FOR_ERROR - ;} - break; - - case 286: -#line 2756 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 285: +#line 2765 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.BoolVal = true; CHECK_FOR_ERROR - ;} - break; - - case 287: -#line 2760 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 286: +#line 2769 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.BoolVal = false; CHECK_FOR_ERROR - ;} - break; - - case 288: -#line 2765 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 287: +#line 2774 "/Volumes/MacOS9/gcc/llvm/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() && @@ -5464,12 +4720,11 @@ if (yyval.InstVal == 0) GEN_ERROR("binary operator returned null"); delete yyvsp[-3].TypeVal; - ;} - break; - - case 289: -#line 2786 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 288: +#line 2795 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ if (!UpRefs.empty()) GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription()); if (!(*yyvsp[-3].TypeVal)->isInteger()) { @@ -5485,12 +4740,11 @@ if (yyval.InstVal == 0) GEN_ERROR("binary operator returned null"); delete yyvsp[-3].TypeVal; - ;} - break; - - case 290: -#line 2803 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 289: +#line 2812 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ if (!UpRefs.empty()) GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription()); if (isa((*yyvsp[-3].TypeVal).get())) @@ -5503,12 +4757,11 @@ if (yyval.InstVal == 0) GEN_ERROR("icmp operator returned null"); delete yyvsp[-3].TypeVal; - ;} - break; - - case 291: -#line 2817 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 290: +#line 2826 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ if (!UpRefs.empty()) GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription()); if (isa((*yyvsp[-3].TypeVal).get())) @@ -5521,12 +4774,11 @@ if (yyval.InstVal == 0) GEN_ERROR("fcmp operator returned null"); delete yyvsp[-3].TypeVal; - ;} - break; - - case 292: -#line 2831 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 291: +#line 2840 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ if (!UpRefs.empty()) GEN_ERROR("Invalid upreference in type: " + (*yyvsp[0].TypeVal)->getDescription()); Value* Val = yyvsp[-2].ValueVal; @@ -5537,65 +4789,59 @@ DestTy->getDescription() + "'"); yyval.InstVal = CastInst::create(yyvsp[-3].CastOpVal, Val, DestTy); delete yyvsp[0].TypeVal; - ;} - break; - - case 293: -#line 2843 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 292: +#line 2852 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ if (yyvsp[-4].ValueVal->getType() != Type::Int1Ty) GEN_ERROR("select condition must be boolean"); if (yyvsp[-2].ValueVal->getType() != yyvsp[0].ValueVal->getType()) GEN_ERROR("select value types should match"); yyval.InstVal = new SelectInst(yyvsp[-4].ValueVal, yyvsp[-2].ValueVal, yyvsp[0].ValueVal); CHECK_FOR_ERROR - ;} - break; - - case 294: -#line 2851 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 293: +#line 2860 "/Volumes/MacOS9/gcc/llvm/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 295: -#line 2858 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 294: +#line 2867 "/Volumes/MacOS9/gcc/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].ValueVal, yyvsp[0].ValueVal); CHECK_FOR_ERROR - ;} - break; - - case 296: -#line 2864 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 295: +#line 2873 "/Volumes/MacOS9/gcc/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[-4].ValueVal, yyvsp[-2].ValueVal, yyvsp[0].ValueVal); CHECK_FOR_ERROR - ;} - break; - - case 297: -#line 2870 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 296: +#line 2879 "/Volumes/MacOS9/gcc/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[-4].ValueVal, yyvsp[-2].ValueVal, yyvsp[0].ValueVal); CHECK_FOR_ERROR - ;} - break; - - case 298: -#line 2876 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 297: +#line 2885 "/Volumes/MacOS9/gcc/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"); @@ -5609,12 +4855,11 @@ } delete yyvsp[0].PHIList; // Free the list... CHECK_FOR_ERROR - ;} - break; - - case 299: -#line 2892 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 298: +#line 2901 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ // Handle the short syntax const PointerType *PFTy = 0; @@ -5697,93 +4942,84 @@ delete yyvsp[-2].ValueRefList; delete yyvsp[-5].TypeVal; CHECK_FOR_ERROR - ;} - break; - - case 300: -#line 2976 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 299: +#line 2985 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.InstVal = yyvsp[0].InstVal; CHECK_FOR_ERROR - ;} - break; - - case 301: -#line 2981 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 300: +#line 2990 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.BoolVal = true; CHECK_FOR_ERROR - ;} - break; - - case 302: -#line 2985 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 301: +#line 2994 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ yyval.BoolVal = false; CHECK_FOR_ERROR - ;} - break; - - case 303: -#line 2992 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 302: +#line 3001 "/Volumes/MacOS9/gcc/llvm/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 304: -#line 2999 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 303: +#line 3008 "/Volumes/MacOS9/gcc/llvm/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); CHECK_FOR_ERROR yyval.InstVal = new MallocInst(*yyvsp[-4].TypeVal, tmpVal, yyvsp[0].UIntVal); delete yyvsp[-4].TypeVal; - ;} - break; - - case 305: -#line 3007 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 304: +#line 3016 "/Volumes/MacOS9/gcc/llvm/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 306: -#line 3014 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 305: +#line 3023 "/Volumes/MacOS9/gcc/llvm/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); CHECK_FOR_ERROR yyval.InstVal = new AllocaInst(*yyvsp[-4].TypeVal, tmpVal, yyvsp[0].UIntVal); delete yyvsp[-4].TypeVal; - ;} - break; - - case 307: -#line 3022 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 306: +#line 3031 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ if (!isa(yyvsp[0].ValueVal->getType())) GEN_ERROR("Trying to free nonpointer type " + yyvsp[0].ValueVal->getType()->getDescription() + ""); yyval.InstVal = new FreeInst(yyvsp[0].ValueVal); CHECK_FOR_ERROR - ;} - break; - - case 308: -#line 3030 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 307: +#line 3039 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ if (!UpRefs.empty()) GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription()); if (!isa(yyvsp[-2].TypeVal->get())) @@ -5796,12 +5032,11 @@ CHECK_FOR_ERROR yyval.InstVal = new LoadInst(tmpVal, "", yyvsp[-4].BoolVal, yyvsp[0].UIntVal); delete yyvsp[-2].TypeVal; - ;} - break; - - case 309: -#line 3044 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 308: +#line 3053 "/Volumes/MacOS9/gcc/llvm/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()); @@ -5817,12 +5052,11 @@ CHECK_FOR_ERROR yyval.InstVal = new StoreInst(yyvsp[-4].ValueVal, tmpVal, yyvsp[-6].BoolVal, yyvsp[0].UIntVal); delete yyvsp[-2].TypeVal; - ;} - break; - - case 310: -#line 3061 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" - { + ; + break;} +case 309: +#line 3070 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" +{ if (!UpRefs.empty()) GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription()); if (!isa(yyvsp[-2].TypeVal->get())) @@ -5836,239 +5070,231 @@ yyval.InstVal = new GetElementPtrInst(tmpVal, yyvsp[0].ValueList->begin(), yyvsp[0].ValueList->end()); delete yyvsp[-2].TypeVal; delete yyvsp[0].ValueList; - ;} - break; - - - } - -/* Line 993 of yacc.c. */ -#line 5847 "llvmAsmParser.tab.c" + ; + 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 - - 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 + +#ifdef YYERROR_VERBOSE yyn = yypact[yystate]; - if (YYPACT_NINF < yyn && yyn < YYLAST) + if (yyn > YYFLAG && yyn < YYLAST) { - YYSIZE_T yysize = 0; - int yytype = YYTRANSLATE (yychar); - const char* yyprefix; - char *yymsg; - int yyx; - - /* 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; - int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; - int yycount = 0; - - yyprefix = ", expecting "; - for (yyx = yyxbegin; yyx < yyxend; ++yyx) - if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) - { - yysize += yystrlen (yyprefix) + yystrlen (yytname [yyx]); - yycount += 1; - if (yycount == 5) - { - yysize = 0; - break; - } - } - yysize += (sizeof ("syntax error, unexpected ") - + yystrlen (yytname[yytype])); - yymsg = (char *) YYSTACK_ALLOC (yysize); - if (yymsg != 0) + 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) { - char *yyp = yystpcpy (yymsg, "syntax error, unexpected "); - yyp = yystpcpy (yyp, yytname[yytype]); + strcpy(msg, "parse error"); - if (yycount < 5) + if (count < 5) { - yyprefix = ", expecting "; - for (yyx = yyxbegin; yyx < yyxend; ++yyx) - if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) + count = 0; + for (x = (yyn < 0 ? -yyn : 0); + x < (sizeof(yytname) / sizeof(char *)); x++) + if (yycheck[x + yyn] == x) { - yyp = yystpcpy (yyp, yyprefix); - yyp = yystpcpy (yyp, yytname[yyx]); - yyprefix = " or "; + strcat(msg, count == 0 ? ", expecting `" : " or `"); + strcat(msg, yytname[x]); + strcat(msg, "'"); + count++; } } - yyerror (yymsg); - YYSTACK_FREE (yymsg); + yyerror(msg); + free(msg); } else - yyerror ("syntax error; also virtual memory exhausted"); + yyerror ("parse error; also virtual memory exceeded"); } else #endif /* YYERROR_VERBOSE */ - yyerror ("syntax error"); + yyerror("parse error"); } - + 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. */ + /* if just tried and failed to reuse lookahead token after an error, discard it. */ - if (yychar <= YYEOF) - { - /* If at end of input, pop the error token, - then the rest of the stack, then return failure. */ - if (yychar == YYEOF) - for (;;) - { - YYPOPSTACK; - if (yyssp == yyss) - YYABORT; - YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp); - yydestruct (yystos[*yyssp], yyvsp); - } - } - else - { - YYDSYMPRINTF ("Error: discarding", yytoken, &yylval, &yylloc); - yydestruct (yytoken, &yylval); - yychar = YYEMPTY; + /* return failure if at end of input */ + if (yychar == YYEOF) + YYABORT; - } +#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. */ - goto yyerrlab1; + /* Else will try to reuse lookahead token + after shifting the error token. */ + yyerrstatus = 3; /* Each real token shifted decrements this */ -/*---------------------------------------------------. -| yyerrorlab -- error raised explicitly by YYERROR. | -`---------------------------------------------------*/ -yyerrorlab: + goto yyerrhandle; -#ifdef __GNUC__ - /* Pacify GCC when the user code never invokes YYERROR and the label - yyerrorlab therefore never appears in user code. */ - if (0) - goto yyerrorlab; -#endif +yyerrdefault: /* current state does not do anything special for the error token. */ - yyvsp -= yylen; - yyssp -= yylen; - yystate = *yyssp; - goto yyerrlab1; +#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 */ -/*-------------------------------------------------------------. -| yyerrlab1 -- common code for both syntax error and YYERROR. | -`-------------------------------------------------------------*/ -yyerrlab1: - yyerrstatus = 3; /* Each real token shifted decrements this. */ + if (yyssp == yyss) YYABORT; + yyvsp--; + yystate = *--yyssp; +#ifdef YYLSP_NEEDED + yylsp--; +#endif - for (;;) +#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; - YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp); - yydestruct (yystos[yystate], yyvsp); - YYPOPSTACK; - 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; - YYDPRINTF ((stderr, "Shifting error token, ")); +#if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Shifting error token, "); +#endif *++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 -/*----------------------------------------------. -| yyoverflowlab -- parser overflow comes here. | -`----------------------------------------------*/ -yyoverflowlab: - yyerror ("parser stack overflow"); - yyresult = 2; - /* Fall through. */ -#endif - -yyreturn: -#ifndef yyoverflow - if (yyss != yyssa) - YYSTACK_FREE (yyss); + yyabortlab: + /* YYABORT comes here. */ + if (yyfree_stacks) + { + free (yyss); + free (yyvs); +#ifdef YYLSP_NEEDED + free (yyls); #endif - return yyresult; + } + return 1; } - - -#line 3078 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" +#line 3087 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y" // common code from the two 'RunVMAsmParser' functions @@ -6149,4 +5375,3 @@ GenerateError(errMsg); return 0; } - Modified: llvm/trunk/lib/AsmParser/llvmAsmParser.h.cvs URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/AsmParser/llvmAsmParser.h.cvs?rev=41774&r1=41773&r2=41774&view=diff ============================================================================== --- llvm/trunk/lib/AsmParser/llvmAsmParser.h.cvs (original) +++ llvm/trunk/lib/AsmParser/llvmAsmParser.h.cvs Fri Sep 7 16:07:57 2007 @@ -1,329 +1,4 @@ -/* A Bison parser, made by GNU Bison 1.875c. */ - -/* Skeleton parser for Yacc-like parsing with Bison, - Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003 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., 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. */ - -/* 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, - X86_FP80 = 269, - FP128 = 270, - PPC_FP128 = 271, - LABEL = 272, - TYPE = 273, - LOCALVAR = 274, - GLOBALVAR = 275, - LABELSTR = 276, - STRINGCONSTANT = 277, - ATSTRINGCONSTANT = 278, - PCTSTRINGCONSTANT = 279, - ZEROINITIALIZER = 280, - TRUETOK = 281, - FALSETOK = 282, - BEGINTOK = 283, - ENDTOK = 284, - DECLARE = 285, - DEFINE = 286, - GLOBAL = 287, - CONSTANT = 288, - SECTION = 289, - ALIAS = 290, - VOLATILE = 291, - THREAD_LOCAL = 292, - TO = 293, - DOTDOTDOT = 294, - NULL_TOK = 295, - UNDEF = 296, - INTERNAL = 297, - LINKONCE = 298, - WEAK = 299, - APPENDING = 300, - DLLIMPORT = 301, - DLLEXPORT = 302, - EXTERN_WEAK = 303, - OPAQUE = 304, - EXTERNAL = 305, - TARGET = 306, - TRIPLE = 307, - ALIGN = 308, - DEPLIBS = 309, - CALL = 310, - TAIL = 311, - ASM_TOK = 312, - MODULE = 313, - SIDEEFFECT = 314, - CC_TOK = 315, - CCC_TOK = 316, - FASTCC_TOK = 317, - COLDCC_TOK = 318, - X86_STDCALLCC_TOK = 319, - X86_FASTCALLCC_TOK = 320, - DATALAYOUT = 321, - RET = 322, - BR = 323, - SWITCH = 324, - INVOKE = 325, - UNWIND = 326, - UNREACHABLE = 327, - ADD = 328, - SUB = 329, - MUL = 330, - UDIV = 331, - SDIV = 332, - FDIV = 333, - UREM = 334, - SREM = 335, - FREM = 336, - AND = 337, - OR = 338, - XOR = 339, - SHL = 340, - LSHR = 341, - ASHR = 342, - ICMP = 343, - FCMP = 344, - EQ = 345, - NE = 346, - SLT = 347, - SGT = 348, - SLE = 349, - SGE = 350, - ULT = 351, - UGT = 352, - ULE = 353, - UGE = 354, - OEQ = 355, - ONE = 356, - OLT = 357, - OGT = 358, - OLE = 359, - OGE = 360, - ORD = 361, - UNO = 362, - UEQ = 363, - UNE = 364, - MALLOC = 365, - ALLOCA = 366, - FREE = 367, - LOAD = 368, - STORE = 369, - GETELEMENTPTR = 370, - TRUNC = 371, - ZEXT = 372, - SEXT = 373, - FPTRUNC = 374, - FPEXT = 375, - BITCAST = 376, - UITOFP = 377, - SITOFP = 378, - FPTOUI = 379, - FPTOSI = 380, - INTTOPTR = 381, - PTRTOINT = 382, - PHI_TOK = 383, - SELECT = 384, - VAARG = 385, - EXTRACTELEMENT = 386, - INSERTELEMENT = 387, - SHUFFLEVECTOR = 388, - SIGNEXT = 389, - ZEROEXT = 390, - NORETURN = 391, - INREG = 392, - SRET = 393, - NOUNWIND = 394, - NOALIAS = 395, - BYVAL = 396, - NEST = 397, - DEFAULT = 398, - HIDDEN = 399, - PROTECTED = 400 - }; -#endif -#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 X86_FP80 269 -#define FP128 270 -#define PPC_FP128 271 -#define LABEL 272 -#define TYPE 273 -#define LOCALVAR 274 -#define GLOBALVAR 275 -#define LABELSTR 276 -#define STRINGCONSTANT 277 -#define ATSTRINGCONSTANT 278 -#define PCTSTRINGCONSTANT 279 -#define ZEROINITIALIZER 280 -#define TRUETOK 281 -#define FALSETOK 282 -#define BEGINTOK 283 -#define ENDTOK 284 -#define DECLARE 285 -#define DEFINE 286 -#define GLOBAL 287 -#define CONSTANT 288 -#define SECTION 289 -#define ALIAS 290 -#define VOLATILE 291 -#define THREAD_LOCAL 292 -#define TO 293 -#define DOTDOTDOT 294 -#define NULL_TOK 295 -#define UNDEF 296 -#define INTERNAL 297 -#define LINKONCE 298 -#define WEAK 299 -#define APPENDING 300 -#define DLLIMPORT 301 -#define DLLEXPORT 302 -#define EXTERN_WEAK 303 -#define OPAQUE 304 -#define EXTERNAL 305 -#define TARGET 306 -#define TRIPLE 307 -#define ALIGN 308 -#define DEPLIBS 309 -#define CALL 310 -#define TAIL 311 -#define ASM_TOK 312 -#define MODULE 313 -#define SIDEEFFECT 314 -#define CC_TOK 315 -#define CCC_TOK 316 -#define FASTCC_TOK 317 -#define COLDCC_TOK 318 -#define X86_STDCALLCC_TOK 319 -#define X86_FASTCALLCC_TOK 320 -#define DATALAYOUT 321 -#define RET 322 -#define BR 323 -#define SWITCH 324 -#define INVOKE 325 -#define UNWIND 326 -#define UNREACHABLE 327 -#define ADD 328 -#define SUB 329 -#define MUL 330 -#define UDIV 331 -#define SDIV 332 -#define FDIV 333 -#define UREM 334 -#define SREM 335 -#define FREM 336 -#define AND 337 -#define OR 338 -#define XOR 339 -#define SHL 340 -#define LSHR 341 -#define ASHR 342 -#define ICMP 343 -#define FCMP 344 -#define EQ 345 -#define NE 346 -#define SLT 347 -#define SGT 348 -#define SLE 349 -#define SGE 350 -#define ULT 351 -#define UGT 352 -#define ULE 353 -#define UGE 354 -#define OEQ 355 -#define ONE 356 -#define OLT 357 -#define OGT 358 -#define OLE 359 -#define OGE 360 -#define ORD 361 -#define UNO 362 -#define UEQ 363 -#define UNE 364 -#define MALLOC 365 -#define ALLOCA 366 -#define FREE 367 -#define LOAD 368 -#define STORE 369 -#define GETELEMENTPTR 370 -#define TRUNC 371 -#define ZEXT 372 -#define SEXT 373 -#define FPTRUNC 374 -#define FPEXT 375 -#define BITCAST 376 -#define UITOFP 377 -#define SITOFP 378 -#define FPTOUI 379 -#define FPTOSI 380 -#define INTTOPTR 381 -#define PTRTOINT 382 -#define PHI_TOK 383 -#define SELECT 384 -#define VAARG 385 -#define EXTRACTELEMENT 386 -#define INSERTELEMENT 387 -#define SHUFFLEVECTOR 388 -#define SIGNEXT 389 -#define ZEROEXT 390 -#define NORETURN 391 -#define INREG 392 -#define SRET 393 -#define NOUNWIND 394 -#define NOALIAS 395 -#define BYVAL 396 -#define NEST 397 -#define DEFAULT 398 -#define HIDDEN 399 -#define PROTECTED 400 - - - - -#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED) -#line 963 "/users/dag/projects/cascade/llvm.modified/lib/AsmParser/llvmAsmParser.y" -typedef union YYSTYPE { +typedef union { llvm::Module *ModuleVal; llvm::Function *FunctionVal; llvm::BasicBlock *BasicBlockVal; @@ -369,14 +44,149 @@ llvm::ICmpInst::Predicate IPredicate; llvm::FCmpInst::Predicate FPredicate; } YYSTYPE; -/* Line 1268 of yacc.c. */ -#line 374 "llvmAsmParser.tab.h" -# define yystype YYSTYPE /* obsolescent; will be withdrawn */ -# define YYSTYPE_IS_DECLARED 1 -# define YYSTYPE_IS_TRIVIAL 1 -#endif - -extern YYSTYPE llvmAsmlval; - +#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 X86_FP80 268 +#define FP128 269 +#define PPC_FP128 270 +#define LABEL 271 +#define TYPE 272 +#define LOCALVAR 273 +#define GLOBALVAR 274 +#define LABELSTR 275 +#define STRINGCONSTANT 276 +#define ATSTRINGCONSTANT 277 +#define PCTSTRINGCONSTANT 278 +#define ZEROINITIALIZER 279 +#define TRUETOK 280 +#define FALSETOK 281 +#define BEGINTOK 282 +#define ENDTOK 283 +#define DECLARE 284 +#define DEFINE 285 +#define GLOBAL 286 +#define CONSTANT 287 +#define SECTION 288 +#define ALIAS 289 +#define VOLATILE 290 +#define THREAD_LOCAL 291 +#define TO 292 +#define DOTDOTDOT 293 +#define NULL_TOK 294 +#define UNDEF 295 +#define INTERNAL 296 +#define LINKONCE 297 +#define WEAK 298 +#define APPENDING 299 +#define DLLIMPORT 300 +#define DLLEXPORT 301 +#define EXTERN_WEAK 302 +#define OPAQUE 303 +#define EXTERNAL 304 +#define TARGET 305 +#define TRIPLE 306 +#define ALIGN 307 +#define DEPLIBS 308 +#define CALL 309 +#define TAIL 310 +#define ASM_TOK 311 +#define MODULE 312 +#define SIDEEFFECT 313 +#define CC_TOK 314 +#define CCC_TOK 315 +#define FASTCC_TOK 316 +#define COLDCC_TOK 317 +#define X86_STDCALLCC_TOK 318 +#define X86_FASTCALLCC_TOK 319 +#define DATALAYOUT 320 +#define RET 321 +#define BR 322 +#define SWITCH 323 +#define INVOKE 324 +#define UNWIND 325 +#define UNREACHABLE 326 +#define ADD 327 +#define SUB 328 +#define MUL 329 +#define UDIV 330 +#define SDIV 331 +#define FDIV 332 +#define UREM 333 +#define SREM 334 +#define FREM 335 +#define AND 336 +#define OR 337 +#define XOR 338 +#define SHL 339 +#define LSHR 340 +#define ASHR 341 +#define ICMP 342 +#define FCMP 343 +#define EQ 344 +#define NE 345 +#define SLT 346 +#define SGT 347 +#define SLE 348 +#define SGE 349 +#define ULT 350 +#define UGT 351 +#define ULE 352 +#define UGE 353 +#define OEQ 354 +#define ONE 355 +#define OLT 356 +#define OGT 357 +#define OLE 358 +#define OGE 359 +#define ORD 360 +#define UNO 361 +#define UEQ 362 +#define UNE 363 +#define MALLOC 364 +#define ALLOCA 365 +#define FREE 366 +#define LOAD 367 +#define STORE 368 +#define GETELEMENTPTR 369 +#define TRUNC 370 +#define ZEXT 371 +#define SEXT 372 +#define FPTRUNC 373 +#define FPEXT 374 +#define BITCAST 375 +#define UITOFP 376 +#define SITOFP 377 +#define FPTOUI 378 +#define FPTOSI 379 +#define INTTOPTR 380 +#define PTRTOINT 381 +#define PHI_TOK 382 +#define SELECT 383 +#define VAARG 384 +#define EXTRACTELEMENT 385 +#define INSERTELEMENT 386 +#define SHUFFLEVECTOR 387 +#define SIGNEXT 388 +#define ZEROEXT 389 +#define NORETURN 390 +#define INREG 391 +#define SRET 392 +#define NOUNWIND 393 +#define NOALIAS 394 +#define BYVAL 395 +#define NEST 396 +#define DEFAULT 397 +#define HIDDEN 398 +#define PROTECTED 399 +extern YYSTYPE llvmAsmlval; Modified: llvm/trunk/lib/AsmParser/llvmAsmParser.y URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/AsmParser/llvmAsmParser.y?rev=41774&r1=41773&r2=41774&view=diff ============================================================================== --- llvm/trunk/lib/AsmParser/llvmAsmParser.y (original) +++ llvm/trunk/lib/AsmParser/llvmAsmParser.y Fri Sep 7 16:07:57 2007 @@ -1873,6 +1873,7 @@ if ($1==Type::FloatTy) $2->convert(APFloat::IEEEsingle, APFloat::rmNearestTiesToEven); $$ = ConstantFP::get($1, *$2); + delete $2; CHECK_FOR_ERROR }; Modified: llvm/trunk/lib/AsmParser/llvmAsmParser.y.cvs URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/AsmParser/llvmAsmParser.y.cvs?rev=41774&r1=41773&r2=41774&view=diff ============================================================================== --- llvm/trunk/lib/AsmParser/llvmAsmParser.y.cvs (original) +++ llvm/trunk/lib/AsmParser/llvmAsmParser.y.cvs Fri Sep 7 16:07:57 2007 @@ -1873,6 +1873,7 @@ if ($1==Type::FloatTy) $2->convert(APFloat::IEEEsingle, APFloat::rmNearestTiesToEven); $$ = ConstantFP::get($1, *$2); + delete $2; CHECK_FOR_ERROR }; Modified: llvm/trunk/lib/Target/CBackend/CBackend.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/CBackend/CBackend.cpp?rev=41774&r1=41773&r2=41774&view=diff ============================================================================== --- llvm/trunk/lib/Target/CBackend/CBackend.cpp (original) +++ llvm/trunk/lib/Target/CBackend/CBackend.cpp Fri Sep 7 16:07:57 2007 @@ -1415,16 +1415,6 @@ // Output target-specific code that should be inserted into main. Out << "#define CODE_FOR_MAIN() /* Any target-specific code for main()*/\n"; - // On X86, set the FP control word to 64-bits of precision instead of 80 bits. - Out << "#if defined(__GNUC__) && !defined(__llvm__)\n" - << "#if defined(i386) || defined(__i386__) || defined(__i386) || " - << "defined(__x86_64__)\n" - << "#undef CODE_FOR_MAIN\n" - << "#define CODE_FOR_MAIN() \\\n" - << " {short F;__asm__ (\"fnstcw %0\" : \"=m\" (*&F)); \\\n" - << " F=(F&~0x300)|0x200;__asm__(\"fldcw %0\"::\"m\"(*&F));}\n" - << "#endif\n#endif\n"; - } /// FindStaticTors - Given a static ctor/dtor list, unpack its contents into Modified: llvm/trunk/lib/Target/X86/X86ISelDAGToDAG.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86ISelDAGToDAG.cpp?rev=41774&r1=41773&r2=41774&view=diff ============================================================================== --- llvm/trunk/lib/Target/X86/X86ISelDAGToDAG.cpp (original) +++ llvm/trunk/lib/Target/X86/X86ISelDAGToDAG.cpp Fri Sep 7 16:07:57 2007 @@ -130,8 +130,6 @@ /// SelectionDAGISel when it has created a SelectionDAG for us to codegen. virtual void InstructionSelectBasicBlock(SelectionDAG &DAG); - virtual void EmitFunctionEntryCode(Function &Fn, MachineFunction &MF); - virtual bool CanBeFoldedBy(SDNode *N, SDNode *U, SDNode *Root) const; // Include the pieces autogenerated from the target description. @@ -164,8 +162,6 @@ std::vector &OutOps, SelectionDAG &DAG); - void EmitSpecialCodeForMain(MachineBasicBlock *BB, MachineFrameInfo *MFI); - inline void getAddressOperands(X86ISelAddressMode &AM, SDOperand &Base, SDOperand &Scale, SDOperand &Index, SDOperand &Disp) { @@ -542,33 +538,6 @@ } } -/// EmitSpecialCodeForMain - Emit any code that needs to be executed only in -/// the main function. -void X86DAGToDAGISel::EmitSpecialCodeForMain(MachineBasicBlock *BB, - MachineFrameInfo *MFI) { - const TargetInstrInfo *TII = TM.getInstrInfo(); - if (Subtarget->isTargetCygMing()) - BuildMI(BB, TII->get(X86::CALLpcrel32)).addExternalSymbol("__main"); - - // Switch the FPU to 64-bit precision mode for better compatibility and speed. - int CWFrameIdx = MFI->CreateStackObject(2, 2); - addFrameReference(BuildMI(BB, TII->get(X86::FNSTCW16m)), CWFrameIdx); - - // Set the high part to be 64-bit precision. - addFrameReference(BuildMI(BB, TII->get(X86::MOV8mi)), - CWFrameIdx, 1).addImm(2); - - // Reload the modified control word now. - addFrameReference(BuildMI(BB, TII->get(X86::FLDCW16m)), CWFrameIdx); -} - -void X86DAGToDAGISel::EmitFunctionEntryCode(Function &Fn, MachineFunction &MF) { - // If this is main, emit special code for main. - MachineBasicBlock *BB = MF.begin(); - if (Fn.hasExternalLinkage() && Fn.getName() == "main") - EmitSpecialCodeForMain(BB, MF.getFrameInfo()); -} - /// MatchAddress - Add the specified node to the specified addressing mode, /// returning true if it cannot be done. This just pattern matches for the /// addressing mode Modified: llvm/trunk/tools/llvm-upgrade/UpgradeParser.cpp.cvs URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-upgrade/UpgradeParser.cpp.cvs?rev=41774&r1=41773&r2=41774&view=diff ============================================================================== --- llvm/trunk/tools/llvm-upgrade/UpgradeParser.cpp.cvs (original) +++ llvm/trunk/tools/llvm-upgrade/UpgradeParser.cpp.cvs Fri Sep 7 16:07:57 2007 @@ -1,373 +1,167 @@ -/* A Bison parser, made by GNU Bison 1.875c. */ -/* Skeleton parser for Yacc-like parsing with Bison, - Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. +/* A Bison parser, made from /Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y + by GNU Bison version 1.28 */ - 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., 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. */ - -/* Written by Richard Stallman by simplifying the original so called - ``semantic'' parser. */ +#define YYBISON 1 /* Identify Bison output. */ -/* 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 - -/* Skeleton name. */ -#define YYSKELETON_NAME "yacc.c" - -/* Pure parsers. */ -#define YYPURE 0 - -/* Using locations. */ -#define YYLSP_NEEDED 0 - -/* If NAME_PREFIX is specified substitute the variables and functions - names. */ #define yyparse Upgradeparse -#define yylex Upgradelex +#define yylex Upgradelex #define yyerror Upgradeerror -#define yylval Upgradelval -#define yychar Upgradechar +#define yylval Upgradelval +#define yychar Upgradechar #define yydebug Upgradedebug #define yynerrs Upgradenerrs +#define ESINT64VAL 257 +#define EUINT64VAL 258 +#define SINTVAL 259 +#define UINTVAL 260 +#define FPVAL 261 +#define VOID 262 +#define BOOL 263 +#define SBYTE 264 +#define UBYTE 265 +#define SHORT 266 +#define USHORT 267 +#define INT 268 +#define UINT 269 +#define LONG 270 +#define ULONG 271 +#define FLOAT 272 +#define DOUBLE 273 +#define TYPE 274 +#define LABEL 275 +#define VAR_ID 276 +#define LABELSTR 277 +#define STRINGCONSTANT 278 +#define IMPLEMENTATION 279 +#define ZEROINITIALIZER 280 +#define TRUETOK 281 +#define FALSETOK 282 +#define BEGINTOK 283 +#define ENDTOK 284 +#define DECLARE 285 +#define GLOBAL 286 +#define CONSTANT 287 +#define SECTION 288 +#define VOLATILE 289 +#define TO 290 +#define DOTDOTDOT 291 +#define NULL_TOK 292 +#define UNDEF 293 +#define CONST 294 +#define INTERNAL 295 +#define LINKONCE 296 +#define WEAK 297 +#define APPENDING 298 +#define DLLIMPORT 299 +#define DLLEXPORT 300 +#define EXTERN_WEAK 301 +#define OPAQUE 302 +#define NOT 303 +#define EXTERNAL 304 +#define TARGET 305 +#define TRIPLE 306 +#define ENDIAN 307 +#define POINTERSIZE 308 +#define LITTLE 309 +#define BIG 310 +#define ALIGN 311 +#define DEPLIBS 312 +#define CALL 313 +#define TAIL 314 +#define ASM_TOK 315 +#define MODULE 316 +#define SIDEEFFECT 317 +#define CC_TOK 318 +#define CCC_TOK 319 +#define CSRETCC_TOK 320 +#define FASTCC_TOK 321 +#define COLDCC_TOK 322 +#define X86_STDCALLCC_TOK 323 +#define X86_FASTCALLCC_TOK 324 +#define DATALAYOUT 325 +#define RET 326 +#define BR 327 +#define SWITCH 328 +#define INVOKE 329 +#define UNREACHABLE 330 +#define UNWIND 331 +#define EXCEPT 332 +#define ADD 333 +#define SUB 334 +#define MUL 335 +#define DIV 336 +#define UDIV 337 +#define SDIV 338 +#define FDIV 339 +#define REM 340 +#define UREM 341 +#define SREM 342 +#define FREM 343 +#define AND 344 +#define OR 345 +#define XOR 346 +#define SHL 347 +#define SHR 348 +#define ASHR 349 +#define LSHR 350 +#define SETLE 351 +#define SETGE 352 +#define SETLT 353 +#define SETGT 354 +#define SETEQ 355 +#define SETNE 356 +#define ICMP 357 +#define FCMP 358 +#define MALLOC 359 +#define ALLOCA 360 +#define FREE 361 +#define LOAD 362 +#define STORE 363 +#define GETELEMENTPTR 364 +#define PHI_TOK 365 +#define SELECT 366 +#define VAARG 367 +#define EXTRACTELEMENT 368 +#define INSERTELEMENT 369 +#define SHUFFLEVECTOR 370 +#define VAARG_old 371 +#define VANEXT_old 372 +#define EQ 373 +#define NE 374 +#define SLT 375 +#define SGT 376 +#define SLE 377 +#define SGE 378 +#define ULT 379 +#define UGT 380 +#define ULE 381 +#define UGE 382 +#define OEQ 383 +#define ONE 384 +#define OLT 385 +#define OGT 386 +#define OLE 387 +#define OGE 388 +#define ORD 389 +#define UNO 390 +#define UEQ 391 +#define UNE 392 +#define CAST 393 +#define TRUNC 394 +#define ZEXT 395 +#define SEXT 396 +#define FPTRUNC 397 +#define FPEXT 398 +#define FPTOUI 399 +#define FPTOSI 400 +#define UITOFP 401 +#define SITOFP 402 +#define PTRTOINT 403 +#define INTTOPTR 404 +#define BITCAST 405 - -/* 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, - SINTVAL = 260, - UINTVAL = 261, - FPVAL = 262, - VOID = 263, - BOOL = 264, - SBYTE = 265, - UBYTE = 266, - SHORT = 267, - USHORT = 268, - INT = 269, - UINT = 270, - LONG = 271, - ULONG = 272, - FLOAT = 273, - DOUBLE = 274, - TYPE = 275, - LABEL = 276, - VAR_ID = 277, - LABELSTR = 278, - STRINGCONSTANT = 279, - IMPLEMENTATION = 280, - ZEROINITIALIZER = 281, - TRUETOK = 282, - FALSETOK = 283, - BEGINTOK = 284, - ENDTOK = 285, - DECLARE = 286, - GLOBAL = 287, - CONSTANT = 288, - SECTION = 289, - VOLATILE = 290, - TO = 291, - DOTDOTDOT = 292, - NULL_TOK = 293, - UNDEF = 294, - CONST = 295, - INTERNAL = 296, - LINKONCE = 297, - WEAK = 298, - APPENDING = 299, - DLLIMPORT = 300, - DLLEXPORT = 301, - EXTERN_WEAK = 302, - OPAQUE = 303, - NOT = 304, - EXTERNAL = 305, - TARGET = 306, - TRIPLE = 307, - ENDIAN = 308, - POINTERSIZE = 309, - LITTLE = 310, - BIG = 311, - ALIGN = 312, - DEPLIBS = 313, - CALL = 314, - TAIL = 315, - ASM_TOK = 316, - MODULE = 317, - SIDEEFFECT = 318, - CC_TOK = 319, - CCC_TOK = 320, - CSRETCC_TOK = 321, - FASTCC_TOK = 322, - COLDCC_TOK = 323, - X86_STDCALLCC_TOK = 324, - X86_FASTCALLCC_TOK = 325, - DATALAYOUT = 326, - RET = 327, - BR = 328, - SWITCH = 329, - INVOKE = 330, - UNREACHABLE = 331, - UNWIND = 332, - EXCEPT = 333, - ADD = 334, - SUB = 335, - MUL = 336, - DIV = 337, - UDIV = 338, - SDIV = 339, - FDIV = 340, - REM = 341, - UREM = 342, - SREM = 343, - FREM = 344, - AND = 345, - OR = 346, - XOR = 347, - SHL = 348, - SHR = 349, - ASHR = 350, - LSHR = 351, - SETLE = 352, - SETGE = 353, - SETLT = 354, - SETGT = 355, - SETEQ = 356, - SETNE = 357, - ICMP = 358, - FCMP = 359, - MALLOC = 360, - ALLOCA = 361, - FREE = 362, - LOAD = 363, - STORE = 364, - GETELEMENTPTR = 365, - PHI_TOK = 366, - SELECT = 367, - VAARG = 368, - EXTRACTELEMENT = 369, - INSERTELEMENT = 370, - SHUFFLEVECTOR = 371, - VAARG_old = 372, - VANEXT_old = 373, - EQ = 374, - NE = 375, - SLT = 376, - SGT = 377, - SLE = 378, - SGE = 379, - ULT = 380, - UGT = 381, - ULE = 382, - UGE = 383, - OEQ = 384, - ONE = 385, - OLT = 386, - OGT = 387, - OLE = 388, - OGE = 389, - ORD = 390, - UNO = 391, - UEQ = 392, - UNE = 393, - CAST = 394, - TRUNC = 395, - ZEXT = 396, - SEXT = 397, - FPTRUNC = 398, - FPEXT = 399, - FPTOUI = 400, - FPTOSI = 401, - UITOFP = 402, - SITOFP = 403, - PTRTOINT = 404, - INTTOPTR = 405, - BITCAST = 406 - }; -#endif -#define ESINT64VAL 258 -#define EUINT64VAL 259 -#define SINTVAL 260 -#define UINTVAL 261 -#define FPVAL 262 -#define VOID 263 -#define BOOL 264 -#define SBYTE 265 -#define UBYTE 266 -#define SHORT 267 -#define USHORT 268 -#define INT 269 -#define UINT 270 -#define LONG 271 -#define ULONG 272 -#define FLOAT 273 -#define DOUBLE 274 -#define TYPE 275 -#define LABEL 276 -#define VAR_ID 277 -#define LABELSTR 278 -#define STRINGCONSTANT 279 -#define IMPLEMENTATION 280 -#define ZEROINITIALIZER 281 -#define TRUETOK 282 -#define FALSETOK 283 -#define BEGINTOK 284 -#define ENDTOK 285 -#define DECLARE 286 -#define GLOBAL 287 -#define CONSTANT 288 -#define SECTION 289 -#define VOLATILE 290 -#define TO 291 -#define DOTDOTDOT 292 -#define NULL_TOK 293 -#define UNDEF 294 -#define CONST 295 -#define INTERNAL 296 -#define LINKONCE 297 -#define WEAK 298 -#define APPENDING 299 -#define DLLIMPORT 300 -#define DLLEXPORT 301 -#define EXTERN_WEAK 302 -#define OPAQUE 303 -#define NOT 304 -#define EXTERNAL 305 -#define TARGET 306 -#define TRIPLE 307 -#define ENDIAN 308 -#define POINTERSIZE 309 -#define LITTLE 310 -#define BIG 311 -#define ALIGN 312 -#define DEPLIBS 313 -#define CALL 314 -#define TAIL 315 -#define ASM_TOK 316 -#define MODULE 317 -#define SIDEEFFECT 318 -#define CC_TOK 319 -#define CCC_TOK 320 -#define CSRETCC_TOK 321 -#define FASTCC_TOK 322 -#define COLDCC_TOK 323 -#define X86_STDCALLCC_TOK 324 -#define X86_FASTCALLCC_TOK 325 -#define DATALAYOUT 326 -#define RET 327 -#define BR 328 -#define SWITCH 329 -#define INVOKE 330 -#define UNREACHABLE 331 -#define UNWIND 332 -#define EXCEPT 333 -#define ADD 334 -#define SUB 335 -#define MUL 336 -#define DIV 337 -#define UDIV 338 -#define SDIV 339 -#define FDIV 340 -#define REM 341 -#define UREM 342 -#define SREM 343 -#define FREM 344 -#define AND 345 -#define OR 346 -#define XOR 347 -#define SHL 348 -#define SHR 349 -#define ASHR 350 -#define LSHR 351 -#define SETLE 352 -#define SETGE 353 -#define SETLT 354 -#define SETGT 355 -#define SETEQ 356 -#define SETNE 357 -#define ICMP 358 -#define FCMP 359 -#define MALLOC 360 -#define ALLOCA 361 -#define FREE 362 -#define LOAD 363 -#define STORE 364 -#define GETELEMENTPTR 365 -#define PHI_TOK 366 -#define SELECT 367 -#define VAARG 368 -#define EXTRACTELEMENT 369 -#define INSERTELEMENT 370 -#define SHUFFLEVECTOR 371 -#define VAARG_old 372 -#define VANEXT_old 373 -#define EQ 374 -#define NE 375 -#define SLT 376 -#define SGT 377 -#define SLE 378 -#define SGE 379 -#define ULT 380 -#define UGT 381 -#define ULE 382 -#define UGE 383 -#define OEQ 384 -#define ONE 385 -#define OLT 386 -#define OGT 387 -#define OLE 388 -#define OGE 389 -#define ORD 390 -#define UNO 391 -#define UEQ 392 -#define UNE 393 -#define CAST 394 -#define TRUNC 395 -#define ZEXT 396 -#define SEXT 397 -#define FPTRUNC 398 -#define FPEXT 399 -#define FPTOUI 400 -#define FPTOSI 401 -#define UITOFP 402 -#define SITOFP 403 -#define PTRTOINT 404 -#define INTTOPTR 405 -#define BITCAST 406 - - - - -/* Copy the first part of user declarations. */ -#line 14 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" +#line 14 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" #include "UpgradeInternals.h" #include "llvm/CallingConv.h" @@ -890,9 +684,13 @@ return ConstantInt::get(Ty, D.UConstPool64); case ValID::ConstFPVal: // Is it a floating point const pool reference? - if (!ConstantFP::isValueValidForType(Ty, D.ConstPoolFP)) + if (!ConstantFP::isValueValidForType(Ty, *D.ConstPoolFP)) error("FP constant invalid for type"); - return ConstantFP::get(Ty, D.ConstPoolFP); + // Lexer has no type info, so builds all FP constants as double. + // Fix this here. + if (Ty==Type::FloatTy) + D.ConstPoolFP->convert(APFloat::IEEEsingle, APFloat::rmNearestTiesToEven); + return ConstantFP::get(Ty, *D.ConstPoolFP); case ValID::ConstNullVal: // Is it a null value? if (!isa(Ty)) @@ -2103,23 +1901,8 @@ using namespace llvm; - -/* 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 - -#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED) -#line 1750 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" -typedef union YYSTYPE { +#line 1754 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +typedef union { llvm::Module *ModuleVal; llvm::Function *FunctionVal; std::pair *ArgVal; @@ -2145,7 +1928,7 @@ uint64_t UInt64Val; int SIntVal; unsigned UIntVal; - double FPVal; + llvm::APFloat *FPVal; bool BoolVal; char *StrVal; // This memory is strdup'd! @@ -2160,1489 +1943,1123 @@ llvm::FCmpInst::Predicate FPred; llvm::Module::Endianness Endianness; } YYSTYPE; -/* Line 191 of yacc.c. */ -#line 2165 "UpgradeParser.tab.c" -# define yystype YYSTYPE /* obsolescent; will be withdrawn */ -# define YYSTYPE_IS_DECLARED 1 -# define YYSTYPE_IS_TRIVIAL 1 -#endif - +#include +#ifndef __cplusplus +#ifndef __STDC__ +#define const +#endif +#endif -/* Copy the second part of user declarations. */ - - -/* Line 214 of yacc.c. */ -#line 2177 "UpgradeParser.tab.c" - -#if ! defined (yyoverflow) || YYERROR_VERBOSE - -/* The parser invokes alloca or malloc; define the necessary symbols. */ - -# ifdef YYSTACK_USE_ALLOCA -# if YYSTACK_USE_ALLOCA -# define YYSTACK_ALLOC alloca -# endif -# else -# if defined (alloca) || defined (_ALLOCA_H) -# define YYSTACK_ALLOC alloca -# else -# ifdef __GNUC__ -# define YYSTACK_ALLOC __builtin_alloca -# endif -# endif -# endif - -# ifdef YYSTACK_ALLOC - /* Pacify GCC's `empty if-body' warning. */ -# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0) -# else -# if defined (__STDC__) || defined (__cplusplus) -# include /* INFRINGES ON USER NAME SPACE */ -# define YYSIZE_T size_t -# endif -# define YYSTACK_ALLOC malloc -# define YYSTACK_FREE free -# 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 -{ - short yyss; - YYSTYPE yyvs; - }; -/* The size of the maximum gap between one aligned stack and the next. */ -# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) +#define YYFINAL 606 +#define YYFLAG -32768 +#define YYNTBASE 166 + +#define YYTRANSLATE(x) ((unsigned)(x) <= 405 ? yytranslate[x] : 246) + +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, 155, + 156, 164, 2, 153, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 160, + 152, 161, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 157, 154, 159, 2, 2, 2, 2, 2, 165, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 158, + 2, 2, 162, 2, 163, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 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, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, + 147, 148, 149, 150, 151 +}; -/* The size of an array large to enough to hold all stacks, each with - N elements. */ -# define YYSTACK_BYTES(N) \ - ((N) * (sizeof (short) + 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 \ - { \ - register YYSIZE_T yyi; \ - for (yyi = 0; yyi < (Count); yyi++) \ - (To)[yyi] = (From)[yyi]; \ - } \ - while (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 (0) +#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, + 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, + 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, + 161, 162, 164, 166, 168, 170, 172, 174, 176, 177, + 178, 180, 182, 184, 186, 188, 190, 193, 194, 197, + 198, 202, 205, 206, 208, 209, 213, 215, 218, 220, + 222, 224, 226, 228, 230, 232, 234, 236, 238, 240, + 242, 244, 246, 248, 250, 252, 254, 256, 258, 261, + 266, 272, 278, 282, 285, 291, 296, 299, 301, 305, + 307, 311, 313, 314, 319, 323, 327, 332, 337, 341, + 348, 354, 357, 360, 363, 366, 369, 372, 375, 378, + 381, 384, 391, 397, 406, 413, 420, 427, 435, 443, + 450, 457, 466, 475, 479, 481, 483, 485, 487, 490, + 493, 498, 501, 503, 508, 511, 516, 517, 525, 526, + 534, 535, 543, 544, 552, 556, 561, 562, 564, 566, + 568, 572, 576, 580, 584, 588, 592, 594, 595, 597, + 599, 601, 602, 605, 609, 611, 613, 617, 619, 620, + 629, 631, 633, 634, 639, 641, 643, 646, 647, 649, + 651, 652, 653, 659, 660, 662, 664, 666, 668, 670, + 672, 674, 676, 678, 682, 684, 690, 692, 694, 696, + 698, 701, 704, 707, 711, 714, 715, 717, 719, 721, + 724, 727, 731, 741, 751, 760, 774, 776, 778, 785, + 791, 794, 801, 809, 811, 815, 817, 818, 821, 823, + 829, 835, 841, 848, 855, 858, 863, 868, 875, 880, + 885, 890, 895, 902, 909, 912, 920, 922, 925, 926, + 928, 929, 933, 940, 944, 951, 954, 959, 966 +}; -#endif +static const short yyrhs[] = { 5, + 0, 6, 0, 3, 0, 4, 0, 79, 0, 80, + 0, 81, 0, 82, 0, 83, 0, 84, 0, 85, + 0, 86, 0, 87, 0, 88, 0, 89, 0, 90, + 0, 91, 0, 92, 0, 97, 0, 98, 0, 99, + 0, 100, 0, 101, 0, 102, 0, 119, 0, 120, + 0, 121, 0, 122, 0, 123, 0, 124, 0, 125, + 0, 126, 0, 127, 0, 128, 0, 129, 0, 130, + 0, 131, 0, 132, 0, 133, 0, 134, 0, 135, + 0, 136, 0, 137, 0, 138, 0, 125, 0, 126, + 0, 127, 0, 128, 0, 27, 0, 28, 0, 93, + 0, 94, 0, 95, 0, 96, 0, 140, 0, 141, + 0, 142, 0, 143, 0, 144, 0, 145, 0, 146, + 0, 147, 0, 148, 0, 149, 0, 150, 0, 151, + 0, 139, 0, 16, 0, 14, 0, 12, 0, 10, + 0, 17, 0, 15, 0, 13, 0, 11, 0, 175, + 0, 176, 0, 18, 0, 19, 0, 211, 152, 0, + 0, 41, 0, 42, 0, 43, 0, 44, 0, 45, + 0, 46, 0, 47, 0, 0, 0, 65, 0, 66, + 0, 67, 0, 68, 0, 69, 0, 70, 0, 64, + 4, 0, 0, 57, 4, 0, 0, 153, 57, 4, + 0, 34, 24, 0, 0, 184, 0, 0, 153, 187, + 186, 0, 184, 0, 57, 4, 0, 190, 0, 8, + 0, 192, 0, 8, 0, 192, 0, 9, 0, 10, + 0, 11, 0, 12, 0, 13, 0, 14, 0, 15, + 0, 16, 0, 17, 0, 18, 0, 19, 0, 21, + 0, 191, 0, 48, 0, 228, 0, 154, 4, 0, + 189, 155, 194, 156, 0, 157, 4, 158, 192, 159, + 0, 160, 4, 158, 192, 161, 0, 162, 193, 163, + 0, 162, 163, 0, 160, 162, 193, 163, 161, 0, + 160, 162, 163, 161, 0, 192, 164, 0, 192, 0, + 193, 153, 192, 0, 193, 0, 193, 153, 37, 0, + 37, 0, 0, 190, 157, 197, 159, 0, 190, 157, + 159, 0, 190, 165, 24, 0, 190, 160, 197, 161, + 0, 190, 162, 197, 163, 0, 190, 162, 163, 0, + 190, 160, 162, 197, 163, 161, 0, 190, 160, 162, + 163, 161, 0, 190, 38, 0, 190, 39, 0, 190, + 228, 0, 190, 196, 0, 190, 26, 0, 175, 167, + 0, 176, 4, 0, 9, 27, 0, 9, 28, 0, + 178, 7, 0, 174, 155, 195, 36, 190, 156, 0, + 110, 155, 195, 243, 156, 0, 112, 155, 195, 153, + 195, 153, 195, 156, 0, 168, 155, 195, 153, 195, + 156, 0, 169, 155, 195, 153, 195, 156, 0, 170, + 155, 195, 153, 195, 156, 0, 103, 171, 155, 195, + 153, 195, 156, 0, 104, 172, 155, 195, 153, 195, + 156, 0, 173, 155, 195, 153, 195, 156, 0, 114, + 155, 195, 153, 195, 156, 0, 115, 155, 195, 153, + 195, 153, 195, 156, 0, 116, 155, 195, 153, 195, + 153, 195, 156, 0, 197, 153, 195, 0, 195, 0, + 32, 0, 33, 0, 200, 0, 200, 221, 0, 200, + 223, 0, 200, 62, 61, 206, 0, 200, 25, 0, + 201, 0, 201, 179, 20, 188, 0, 201, 223, 0, + 201, 62, 61, 206, 0, 0, 201, 179, 180, 198, + 195, 202, 186, 0, 0, 201, 179, 50, 198, 190, + 203, 186, 0, 0, 201, 179, 45, 198, 190, 204, + 186, 0, 0, 201, 179, 47, 198, 190, 205, 186, + 0, 201, 51, 208, 0, 201, 58, 152, 209, 0, + 0, 24, 0, 56, 0, 55, 0, 53, 152, 207, + 0, 54, 152, 4, 0, 52, 152, 24, 0, 71, + 152, 24, 0, 157, 210, 159, 0, 210, 153, 24, + 0, 24, 0, 0, 22, 0, 24, 0, 211, 0, + 0, 190, 212, 0, 214, 153, 213, 0, 213, 0, + 214, 0, 214, 153, 37, 0, 37, 0, 0, 181, + 188, 211, 155, 215, 156, 185, 182, 0, 29, 0, + 162, 0, 0, 180, 219, 216, 217, 0, 30, 0, + 163, 0, 231, 220, 0, 0, 45, 0, 47, 0, + 0, 0, 31, 224, 222, 225, 216, 0, 0, 63, + 0, 3, 0, 4, 0, 7, 0, 27, 0, 28, + 0, 38, 0, 39, 0, 26, 0, 160, 197, 161, + 0, 196, 0, 61, 226, 24, 153, 24, 0, 166, + 0, 211, 0, 228, 0, 227, 0, 190, 229, 0, + 231, 232, 0, 218, 232, 0, 233, 179, 235, 0, + 233, 237, 0, 0, 23, 0, 77, 0, 78, 0, + 72, 230, 0, 72, 8, 0, 73, 21, 229, 0, + 73, 9, 229, 153, 21, 229, 153, 21, 229, 0, + 74, 177, 229, 153, 21, 229, 157, 236, 159, 0, + 74, 177, 229, 153, 21, 229, 157, 159, 0, 75, + 181, 188, 229, 155, 240, 156, 36, 21, 229, 234, + 21, 229, 0, 234, 0, 76, 0, 236, 177, 227, + 153, 21, 229, 0, 177, 227, 153, 21, 229, 0, + 179, 242, 0, 190, 157, 229, 153, 229, 159, 0, + 238, 153, 157, 229, 153, 229, 159, 0, 230, 0, + 239, 153, 230, 0, 239, 0, 0, 60, 59, 0, + 59, 0, 168, 190, 229, 153, 229, 0, 169, 190, + 229, 153, 229, 0, 170, 190, 229, 153, 229, 0, + 103, 171, 190, 229, 153, 229, 0, 104, 172, 190, + 229, 153, 229, 0, 49, 230, 0, 173, 230, 153, + 230, 0, 174, 230, 36, 190, 0, 112, 230, 153, + 230, 153, 230, 0, 113, 230, 153, 190, 0, 117, + 230, 153, 190, 0, 118, 230, 153, 190, 0, 114, + 230, 153, 230, 0, 115, 230, 153, 230, 153, 230, + 0, 116, 230, 153, 230, 153, 230, 0, 111, 238, + 0, 241, 181, 188, 229, 155, 240, 156, 0, 245, + 0, 153, 239, 0, 0, 35, 0, 0, 105, 190, + 183, 0, 105, 190, 153, 15, 229, 183, 0, 106, + 190, 183, 0, 106, 190, 153, 15, 229, 183, 0, + 107, 230, 0, 244, 108, 190, 229, 0, 244, 109, + 230, 153, 190, 229, 0, 110, 190, 229, 243, 0 +}; -#if defined (__STDC__) || defined (__cplusplus) - typedef signed char yysigned_char; -#else - typedef short yysigned_char; #endif -/* YYFINAL -- State number of the termination state. */ -#define YYFINAL 4 -/* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 1630 - -/* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 166 -/* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 81 -/* YYNRULES -- Number of rules. */ -#define YYNRULES 310 -/* YYNRULES -- Number of states. */ -#define YYNSTATES 606 - -/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ -#define YYUNDEFTOK 2 -#define YYMAXUTOK 406 - -#define YYTRANSLATE(YYX) \ - ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) - -/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ -static const unsigned char 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, - 155, 156, 164, 2, 153, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 160, 152, 161, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 157, 154, 159, 2, 2, 2, 2, 2, 165, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 158, 2, 2, 162, 2, 163, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 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, 136, 137, 138, 139, 140, 141, 142, 143, 144, - 145, 146, 147, 148, 149, 150, 151 +#if YYDEBUG != 0 +static const short yyrline[] = { 0, + 1894, 1895, 1903, 1904, 1914, 1914, 1914, 1914, 1914, 1914, + 1914, 1914, 1914, 1914, 1914, 1918, 1918, 1918, 1922, 1922, + 1922, 1922, 1922, 1922, 1926, 1926, 1927, 1927, 1928, 1928, + 1929, 1929, 1930, 1930, 1934, 1934, 1935, 1935, 1936, 1936, + 1937, 1937, 1938, 1938, 1939, 1939, 1940, 1940, 1941, 1942, + 1945, 1945, 1945, 1945, 1949, 1949, 1949, 1949, 1949, 1949, + 1949, 1950, 1950, 1950, 1950, 1950, 1950, 1956, 1956, 1956, + 1956, 1960, 1960, 1960, 1960, 1964, 1964, 1968, 1968, 1973, + 1976, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1992, + 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2009, 2010, 2018, + 2019, 2027, 2036, 2037, 2044, 2045, 2049, 2053, 2069, 2070, + 2077, 2078, 2085, 2093, 2093, 2093, 2093, 2093, 2093, 2093, + 2094, 2094, 2094, 2094, 2094, 2099, 2103, 2107, 2112, 2121, + 2148, 2154, 2167, 2178, 2182, 2195, 2199, 2213, 2217, 2224, + 2225, 2231, 2238, 2250, 2280, 2293, 2316, 2344, 2366, 2377, + 2399, 2410, 2419, 2424, 2483, 2490, 2498, 2505, 2512, 2516, + 2520, 2534, 2549, 2561, 2570, 2598, 2611, 2620, 2626, 2632, + 2643, 2649, 2655, 2666, 2667, 2676, 2677, 2689, 2698, 2699, + 2700, 2701, 2702, 2718, 2738, 2740, 2742, 2746, 2749, 2754, + 2757, 2762, 2765, 2771, 2774, 2776, 2778, 2783, 2797, 2798, + 2802, 2805, 2813, 2817, 2824, 2828, 2832, 2836, 2844, 2844, + 2848, 2849, 2853, 2861, 2866, 2874, 2875, 2882, 2889, 2893, + 3083, 3083, 3087, 3087, 3097, 3097, 3101, 3106, 3107, 3108, + 3112, 3113, 3113, 3125, 3126, 3131, 3132, 3133, 3134, 3138, + 3142, 3143, 3144, 3145, 3166, 3170, 3184, 3185, 3190, 3190, + 3198, 3208, 3211, 3220, 3231, 3236, 3245, 3256, 3256, 3259, + 3263, 3267, 3272, 3282, 3300, 3309, 3383, 3387, 3394, 3406, + 3421, 3451, 3461, 3471, 3475, 3482, 3483, 3487, 3490, 3496, + 3515, 3533, 3549, 3563, 3577, 3588, 3606, 3615, 3624, 3631, + 3652, 3676, 3682, 3688, 3694, 3710, 3803, 3811, 3812, 3816, + 3817, 3821, 3827, 3834, 3840, 3847, 3854, 3867, 3893 }; +#endif -#if YYDEBUG -/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in - YYRHS. */ -static const unsigned short 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, 123, 125, 127, 129, 131, 133, 135, 137, - 139, 141, 143, 145, 147, 149, 151, 153, 155, 157, - 159, 161, 164, 165, 167, 169, 171, 173, 175, 177, - 179, 180, 181, 183, 185, 187, 189, 191, 193, 196, - 197, 200, 201, 205, 208, 209, 211, 212, 216, 218, - 221, 223, 225, 227, 229, 231, 233, 235, 237, 239, - 241, 243, 245, 247, 249, 251, 253, 255, 257, 259, - 261, 264, 269, 275, 281, 285, 288, 294, 299, 302, - 304, 308, 310, 314, 316, 317, 322, 326, 330, 335, - 340, 344, 351, 357, 360, 363, 366, 369, 372, 375, - 378, 381, 384, 387, 394, 400, 409, 416, 423, 430, - 438, 446, 453, 460, 469, 478, 482, 484, 486, 488, - 490, 493, 496, 501, 504, 506, 511, 514, 519, 520, - 528, 529, 537, 538, 546, 547, 555, 559, 564, 565, - 567, 569, 571, 575, 579, 583, 587, 591, 595, 597, - 598, 600, 602, 604, 605, 608, 612, 614, 616, 620, - 622, 623, 632, 634, 636, 637, 642, 644, 646, 649, - 650, 652, 654, 655, 656, 662, 663, 665, 667, 669, - 671, 673, 675, 677, 679, 681, 685, 687, 693, 695, - 697, 699, 701, 704, 707, 710, 714, 717, 718, 720, - 722, 724, 727, 730, 734, 744, 754, 763, 777, 779, - 781, 788, 794, 797, 804, 812, 814, 818, 820, 821, - 824, 826, 832, 838, 844, 851, 858, 861, 866, 871, - 878, 883, 888, 893, 898, 905, 912, 915, 923, 925, - 928, 929, 931, 932, 936, 943, 947, 954, 957, 962, - 969 -}; -/* YYRHS -- A `-1'-separated list of the rules' RHS. */ -static const short yyrhs[] = -{ - 200, 0, -1, 5, -1, 6, -1, 3, -1, 4, - -1, 79, -1, 80, -1, 81, -1, 82, -1, 83, - -1, 84, -1, 85, -1, 86, -1, 87, -1, 88, - -1, 89, -1, 90, -1, 91, -1, 92, -1, 97, - -1, 98, -1, 99, -1, 100, -1, 101, -1, 102, - -1, 119, -1, 120, -1, 121, -1, 122, -1, 123, - -1, 124, -1, 125, -1, 126, -1, 127, -1, 128, - -1, 129, -1, 130, -1, 131, -1, 132, -1, 133, - -1, 134, -1, 135, -1, 136, -1, 137, -1, 138, - -1, 125, -1, 126, -1, 127, -1, 128, -1, 27, - -1, 28, -1, 93, -1, 94, -1, 95, -1, 96, - -1, 140, -1, 141, -1, 142, -1, 143, -1, 144, - -1, 145, -1, 146, -1, 147, -1, 148, -1, 149, - -1, 150, -1, 151, -1, 139, -1, 16, -1, 14, - -1, 12, -1, 10, -1, 17, -1, 15, -1, 13, - -1, 11, -1, 176, -1, 177, -1, 18, -1, 19, - -1, 212, 152, -1, -1, 41, -1, 42, -1, 43, - -1, 44, -1, 45, -1, 46, -1, 47, -1, -1, - -1, 65, -1, 66, -1, 67, -1, 68, -1, 69, - -1, 70, -1, 64, 4, -1, -1, 57, 4, -1, - -1, 153, 57, 4, -1, 34, 24, -1, -1, 185, - -1, -1, 153, 188, 187, -1, 185, -1, 57, 4, - -1, 191, -1, 8, -1, 193, -1, 8, -1, 193, - -1, 9, -1, 10, -1, 11, -1, 12, -1, 13, - -1, 14, -1, 15, -1, 16, -1, 17, -1, 18, - -1, 19, -1, 21, -1, 192, -1, 48, -1, 229, - -1, 154, 4, -1, 190, 155, 195, 156, -1, 157, - 4, 158, 193, 159, -1, 160, 4, 158, 193, 161, - -1, 162, 194, 163, -1, 162, 163, -1, 160, 162, - 194, 163, 161, -1, 160, 162, 163, 161, -1, 193, - 164, -1, 193, -1, 194, 153, 193, -1, 194, -1, - 194, 153, 37, -1, 37, -1, -1, 191, 157, 198, - 159, -1, 191, 157, 159, -1, 191, 165, 24, -1, - 191, 160, 198, 161, -1, 191, 162, 198, 163, -1, - 191, 162, 163, -1, 191, 160, 162, 198, 163, 161, - -1, 191, 160, 162, 163, 161, -1, 191, 38, -1, - 191, 39, -1, 191, 229, -1, 191, 197, -1, 191, - 26, -1, 176, 168, -1, 177, 4, -1, 9, 27, - -1, 9, 28, -1, 179, 7, -1, 175, 155, 196, - 36, 191, 156, -1, 110, 155, 196, 244, 156, -1, - 112, 155, 196, 153, 196, 153, 196, 156, -1, 169, - 155, 196, 153, 196, 156, -1, 170, 155, 196, 153, - 196, 156, -1, 171, 155, 196, 153, 196, 156, -1, - 103, 172, 155, 196, 153, 196, 156, -1, 104, 173, - 155, 196, 153, 196, 156, -1, 174, 155, 196, 153, - 196, 156, -1, 114, 155, 196, 153, 196, 156, -1, - 115, 155, 196, 153, 196, 153, 196, 156, -1, 116, - 155, 196, 153, 196, 153, 196, 156, -1, 198, 153, - 196, -1, 196, -1, 32, -1, 33, -1, 201, -1, - 201, 222, -1, 201, 224, -1, 201, 62, 61, 207, - -1, 201, 25, -1, 202, -1, 202, 180, 20, 189, - -1, 202, 224, -1, 202, 62, 61, 207, -1, -1, - 202, 180, 181, 199, 196, 203, 187, -1, -1, 202, - 180, 50, 199, 191, 204, 187, -1, -1, 202, 180, - 45, 199, 191, 205, 187, -1, -1, 202, 180, 47, - 199, 191, 206, 187, -1, 202, 51, 209, -1, 202, - 58, 152, 210, -1, -1, 24, -1, 56, -1, 55, - -1, 53, 152, 208, -1, 54, 152, 4, -1, 52, - 152, 24, -1, 71, 152, 24, -1, 157, 211, 159, - -1, 211, 153, 24, -1, 24, -1, -1, 22, -1, - 24, -1, 212, -1, -1, 191, 213, -1, 215, 153, - 214, -1, 214, -1, 215, -1, 215, 153, 37, -1, - 37, -1, -1, 182, 189, 212, 155, 216, 156, 186, - 183, -1, 29, -1, 162, -1, -1, 181, 220, 217, - 218, -1, 30, -1, 163, -1, 232, 221, -1, -1, - 45, -1, 47, -1, -1, -1, 31, 225, 223, 226, - 217, -1, -1, 63, -1, 3, -1, 4, -1, 7, - -1, 27, -1, 28, -1, 38, -1, 39, -1, 26, - -1, 160, 198, 161, -1, 197, -1, 61, 227, 24, - 153, 24, -1, 167, -1, 212, -1, 229, -1, 228, - -1, 191, 230, -1, 232, 233, -1, 219, 233, -1, - 234, 180, 236, -1, 234, 238, -1, -1, 23, -1, - 77, -1, 78, -1, 72, 231, -1, 72, 8, -1, - 73, 21, 230, -1, 73, 9, 230, 153, 21, 230, - 153, 21, 230, -1, 74, 178, 230, 153, 21, 230, - 157, 237, 159, -1, 74, 178, 230, 153, 21, 230, - 157, 159, -1, 75, 182, 189, 230, 155, 241, 156, - 36, 21, 230, 235, 21, 230, -1, 235, -1, 76, - -1, 237, 178, 228, 153, 21, 230, -1, 178, 228, - 153, 21, 230, -1, 180, 243, -1, 191, 157, 230, - 153, 230, 159, -1, 239, 153, 157, 230, 153, 230, - 159, -1, 231, -1, 240, 153, 231, -1, 240, -1, - -1, 60, 59, -1, 59, -1, 169, 191, 230, 153, - 230, -1, 170, 191, 230, 153, 230, -1, 171, 191, - 230, 153, 230, -1, 103, 172, 191, 230, 153, 230, - -1, 104, 173, 191, 230, 153, 230, -1, 49, 231, - -1, 174, 231, 153, 231, -1, 175, 231, 36, 191, - -1, 112, 231, 153, 231, 153, 231, -1, 113, 231, - 153, 191, -1, 117, 231, 153, 191, -1, 118, 231, - 153, 191, -1, 114, 231, 153, 231, -1, 115, 231, - 153, 231, 153, 231, -1, 116, 231, 153, 231, 153, - 231, -1, 111, 239, -1, 242, 182, 189, 230, 155, - 241, 156, -1, 246, -1, 153, 240, -1, -1, 35, - -1, -1, 105, 191, 184, -1, 105, 191, 153, 15, - 230, 184, -1, 106, 191, 184, -1, 106, 191, 153, - 15, 230, 184, -1, 107, 231, -1, 245, 108, 191, - 230, -1, 245, 109, 231, 153, 191, 230, -1, 110, - 191, 230, 244, -1 -}; +#if YYDEBUG != 0 || defined (YYERROR_VERBOSE) -/* YYRLINE[YYN] -- source line where rule number YYN was defined. */ -static const unsigned short yyrline[] = -{ - 0, 1890, 1890, 1891, 1899, 1900, 1910, 1910, 1910, 1910, - 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1914, 1914, 1914, - 1918, 1918, 1918, 1918, 1918, 1918, 1922, 1922, 1923, 1923, - 1924, 1924, 1925, 1925, 1926, 1926, 1930, 1930, 1931, 1931, - 1932, 1932, 1933, 1933, 1934, 1934, 1935, 1935, 1936, 1936, - 1937, 1938, 1941, 1941, 1941, 1941, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1946, 1946, 1946, 1946, 1946, 1946, 1952, - 1952, 1952, 1952, 1956, 1956, 1956, 1956, 1960, 1960, 1964, - 1964, 1969, 1972, 1977, 1978, 1979, 1980, 1981, 1982, 1983, - 1984, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 2005, - 2006, 2014, 2015, 2023, 2032, 2033, 2040, 2041, 2045, 2049, - 2065, 2066, 2073, 2074, 2081, 2089, 2089, 2089, 2089, 2089, - 2089, 2089, 2090, 2090, 2090, 2090, 2090, 2095, 2099, 2103, - 2108, 2117, 2144, 2150, 2163, 2174, 2178, 2191, 2195, 2209, - 2213, 2220, 2221, 2227, 2234, 2246, 2276, 2289, 2312, 2340, - 2362, 2373, 2395, 2406, 2415, 2420, 2479, 2486, 2494, 2501, - 2508, 2512, 2516, 2525, 2540, 2552, 2561, 2589, 2602, 2611, - 2617, 2623, 2634, 2640, 2646, 2657, 2658, 2667, 2668, 2680, - 2689, 2690, 2691, 2692, 2693, 2709, 2729, 2731, 2733, 2733, - 2740, 2740, 2748, 2748, 2756, 2756, 2765, 2767, 2769, 2774, - 2788, 2789, 2793, 2796, 2804, 2808, 2815, 2819, 2823, 2827, - 2835, 2835, 2839, 2840, 2844, 2852, 2857, 2865, 2866, 2873, - 2880, 2884, 3074, 3074, 3078, 3078, 3088, 3088, 3092, 3097, - 3098, 3099, 3103, 3104, 3103, 3116, 3117, 3122, 3123, 3124, - 3125, 3129, 3133, 3134, 3135, 3136, 3157, 3161, 3175, 3176, - 3181, 3181, 3189, 3199, 3202, 3211, 3222, 3227, 3236, 3247, - 3247, 3250, 3254, 3258, 3263, 3273, 3291, 3300, 3374, 3378, - 3385, 3397, 3412, 3442, 3452, 3462, 3466, 3473, 3474, 3478, - 3481, 3487, 3506, 3524, 3540, 3554, 3568, 3579, 3597, 3606, - 3615, 3622, 3643, 3667, 3673, 3679, 3685, 3701, 3794, 3802, - 3803, 3807, 3808, 3812, 3818, 3825, 3831, 3838, 3845, 3858, - 3884 +static const char * const yytname[] = { "$","error","$undefined.","ESINT64VAL", +"EUINT64VAL","SINTVAL","UINTVAL","FPVAL","VOID","BOOL","SBYTE","UBYTE","SHORT", +"USHORT","INT","UINT","LONG","ULONG","FLOAT","DOUBLE","TYPE","LABEL","VAR_ID", +"LABELSTR","STRINGCONSTANT","IMPLEMENTATION","ZEROINITIALIZER","TRUETOK","FALSETOK", +"BEGINTOK","ENDTOK","DECLARE","GLOBAL","CONSTANT","SECTION","VOLATILE","TO", +"DOTDOTDOT","NULL_TOK","UNDEF","CONST","INTERNAL","LINKONCE","WEAK","APPENDING", +"DLLIMPORT","DLLEXPORT","EXTERN_WEAK","OPAQUE","NOT","EXTERNAL","TARGET","TRIPLE", +"ENDIAN","POINTERSIZE","LITTLE","BIG","ALIGN","DEPLIBS","CALL","TAIL","ASM_TOK", +"MODULE","SIDEEFFECT","CC_TOK","CCC_TOK","CSRETCC_TOK","FASTCC_TOK","COLDCC_TOK", +"X86_STDCALLCC_TOK","X86_FASTCALLCC_TOK","DATALAYOUT","RET","BR","SWITCH","INVOKE", +"UNREACHABLE","UNWIND","EXCEPT","ADD","SUB","MUL","DIV","UDIV","SDIV","FDIV", +"REM","UREM","SREM","FREM","AND","OR","XOR","SHL","SHR","ASHR","LSHR","SETLE", +"SETGE","SETLT","SETGT","SETEQ","SETNE","ICMP","FCMP","MALLOC","ALLOCA","FREE", +"LOAD","STORE","GETELEMENTPTR","PHI_TOK","SELECT","VAARG","EXTRACTELEMENT","INSERTELEMENT", +"SHUFFLEVECTOR","VAARG_old","VANEXT_old","EQ","NE","SLT","SGT","SLE","SGE","ULT", +"UGT","ULE","UGE","OEQ","ONE","OLT","OGT","OLE","OGE","ORD","UNO","UEQ","UNE", +"CAST","TRUNC","ZEXT","SEXT","FPTRUNC","FPEXT","FPTOUI","FPTOSI","UITOFP","SITOFP", +"PTRTOINT","INTTOPTR","BITCAST","'='","','","'\\\\'","'('","')'","'['","'x'", +"']'","'<'","'>'","'{'","'}'","'*'","'c'","INTVAL","EINT64VAL","ArithmeticOps", +"LogicalOps","SetCondOps","IPredicates","FPredicates","ShiftOps","CastOps","SIntType", +"UIntType","IntType","FPType","OptAssign","OptLinkage","OptCallingConv","OptAlign", +"OptCAlign","SectionString","OptSection","GlobalVarAttributes","GlobalVarAttribute", +"TypesV","UpRTypesV","Types","PrimType","UpRTypes","TypeListI","ArgTypeListI", +"ConstVal","ConstExpr","ConstVector","GlobalType","Module","FunctionList","ConstPool", +"@1","@2","@3","@4","AsmBlock","BigOrLittle","TargetDefinition","LibrariesDefinition", +"LibList","Name","OptName","ArgVal","ArgListH","ArgList","FunctionHeaderH","BEGIN", +"FunctionHeader","@5","END","Function","FnDeclareLinkage","FunctionProto","@6", +"@7","OptSideEffect","ConstValueRef","SymbolicValueRef","ValueRef","ResolvedVal", +"BasicBlockList","BasicBlock","InstructionList","Unwind","BBTerminatorInst", +"JumpTable","Inst","PHIList","ValueRefList","ValueRefListE","OptTailCall","InstVal", +"IndexList","OptVolatile","MemoryInst", NULL }; #endif -#if YYDEBUG || YYERROR_VERBOSE -/* YYTNME[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", "SINTVAL", - "UINTVAL", "FPVAL", "VOID", "BOOL", "SBYTE", "UBYTE", "SHORT", "USHORT", - "INT", "UINT", "LONG", "ULONG", "FLOAT", "DOUBLE", "TYPE", "LABEL", - "VAR_ID", "LABELSTR", "STRINGCONSTANT", "IMPLEMENTATION", - "ZEROINITIALIZER", "TRUETOK", "FALSETOK", "BEGINTOK", "ENDTOK", - "DECLARE", "GLOBAL", "CONSTANT", "SECTION", "VOLATILE", "TO", - "DOTDOTDOT", "NULL_TOK", "UNDEF", "CONST", "INTERNAL", "LINKONCE", - "WEAK", "APPENDING", "DLLIMPORT", "DLLEXPORT", "EXTERN_WEAK", "OPAQUE", - "NOT", "EXTERNAL", "TARGET", "TRIPLE", "ENDIAN", "POINTERSIZE", "LITTLE", - "BIG", "ALIGN", "DEPLIBS", "CALL", "TAIL", "ASM_TOK", "MODULE", - "SIDEEFFECT", "CC_TOK", "CCC_TOK", "CSRETCC_TOK", "FASTCC_TOK", - "COLDCC_TOK", "X86_STDCALLCC_TOK", "X86_FASTCALLCC_TOK", "DATALAYOUT", - "RET", "BR", "SWITCH", "INVOKE", "UNREACHABLE", "UNWIND", "EXCEPT", - "ADD", "SUB", "MUL", "DIV", "UDIV", "SDIV", "FDIV", "REM", "UREM", - "SREM", "FREM", "AND", "OR", "XOR", "SHL", "SHR", "ASHR", "LSHR", - "SETLE", "SETGE", "SETLT", "SETGT", "SETEQ", "SETNE", "ICMP", "FCMP", - "MALLOC", "ALLOCA", "FREE", "LOAD", "STORE", "GETELEMENTPTR", "PHI_TOK", - "SELECT", "VAARG", "EXTRACTELEMENT", "INSERTELEMENT", "SHUFFLEVECTOR", - "VAARG_old", "VANEXT_old", "EQ", "NE", "SLT", "SGT", "SLE", "SGE", "ULT", - "UGT", "ULE", "UGE", "OEQ", "ONE", "OLT", "OGT", "OLE", "OGE", "ORD", - "UNO", "UEQ", "UNE", "CAST", "TRUNC", "ZEXT", "SEXT", "FPTRUNC", "FPEXT", - "FPTOUI", "FPTOSI", "UITOFP", "SITOFP", "PTRTOINT", "INTTOPTR", - "BITCAST", "'='", "','", "'\\\\'", "'('", "')'", "'['", "'x'", "']'", - "'<'", "'>'", "'{'", "'}'", "'*'", "'c'", "$accept", "INTVAL", - "EINT64VAL", "ArithmeticOps", "LogicalOps", "SetCondOps", "IPredicates", - "FPredicates", "ShiftOps", "CastOps", "SIntType", "UIntType", "IntType", - "FPType", "OptAssign", "OptLinkage", "OptCallingConv", "OptAlign", - "OptCAlign", "SectionString", "OptSection", "GlobalVarAttributes", - "GlobalVarAttribute", "TypesV", "UpRTypesV", "Types", "PrimType", - "UpRTypes", "TypeListI", "ArgTypeListI", "ConstVal", "ConstExpr", - "ConstVector", "GlobalType", "Module", "FunctionList", "ConstPool", "@1", - "@2", "@3", "@4", "AsmBlock", "BigOrLittle", "TargetDefinition", - "LibrariesDefinition", "LibList", "Name", "OptName", "ArgVal", - "ArgListH", "ArgList", "FunctionHeaderH", "BEGIN", "FunctionHeader", - "@5", "END", "Function", "FnDeclareLinkage", "FunctionProto", "@6", "@7", - "OptSideEffect", "ConstValueRef", "SymbolicValueRef", "ValueRef", - "ResolvedVal", "BasicBlockList", "BasicBlock", "InstructionList", - "Unwind", "BBTerminatorInst", "JumpTable", "Inst", "PHIList", - "ValueRefList", "ValueRefListE", "OptTailCall", "InstVal", "IndexList", - "OptVolatile", "MemoryInst", 0 +static const short yyr1[] = { 0, + 166, 166, 167, 167, 168, 168, 168, 168, 168, 168, + 168, 168, 168, 168, 168, 169, 169, 169, 170, 170, + 170, 170, 170, 170, 171, 171, 171, 171, 171, 171, + 171, 171, 171, 171, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 173, 173, 173, 173, 174, 174, 174, 174, 174, 174, + 174, 174, 174, 174, 174, 174, 174, 175, 175, 175, + 175, 176, 176, 176, 176, 177, 177, 178, 178, 179, + 179, 180, 180, 180, 180, 180, 180, 180, 180, 181, + 181, 181, 181, 181, 181, 181, 181, 182, 182, 183, + 183, 184, 185, 185, 186, 186, 187, 187, 188, 188, + 189, 189, 190, 191, 191, 191, 191, 191, 191, 191, + 191, 191, 191, 191, 191, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 193, 193, 194, + 194, 194, 194, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 196, 196, 196, 196, 196, 196, 196, 196, 196, + 196, 196, 196, 197, 197, 198, 198, 199, 200, 200, + 200, 200, 200, 201, 201, 201, 202, 201, 203, 201, + 204, 201, 205, 201, 201, 201, 201, 206, 207, 207, + 208, 208, 208, 208, 209, 210, 210, 210, 211, 211, + 212, 212, 213, 214, 214, 215, 215, 215, 215, 216, + 217, 217, 219, 218, 220, 220, 221, 222, 222, 222, + 224, 225, 223, 226, 226, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 228, 228, 229, 229, + 230, 231, 231, 232, 233, 233, 233, 234, 234, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 236, 236, + 237, 238, 238, 239, 239, 240, 240, 241, 241, 242, + 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, + 242, 242, 242, 242, 242, 242, 242, 243, 243, 244, + 244, 245, 245, 245, 245, 245, 245, 245, 245 }; -#endif -# ifdef YYPRINT -/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to - token YYLEX-NUM. */ -static const unsigned short 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, 391, 392, 393, 394, - 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, - 405, 406, 61, 44, 92, 40, 41, 91, 120, 93, - 60, 62, 123, 125, 42, 99 +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, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, + 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, + 1, 1, 1, 1, 1, 1, 2, 0, 2, 0, + 3, 2, 0, 1, 0, 3, 1, 2, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 2, 4, + 5, 5, 3, 2, 5, 4, 2, 1, 3, 1, + 3, 1, 0, 4, 3, 3, 4, 4, 3, 6, + 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 6, 5, 8, 6, 6, 6, 7, 7, 6, + 6, 8, 8, 3, 1, 1, 1, 1, 2, 2, + 4, 2, 1, 4, 2, 4, 0, 7, 0, 7, + 0, 7, 0, 7, 3, 4, 0, 1, 1, 1, + 3, 3, 3, 3, 3, 3, 1, 0, 1, 1, + 1, 0, 2, 3, 1, 1, 3, 1, 0, 8, + 1, 1, 0, 4, 1, 1, 2, 0, 1, 1, + 0, 0, 5, 0, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 3, 1, 5, 1, 1, 1, 1, + 2, 2, 2, 3, 2, 0, 1, 1, 1, 2, + 2, 3, 9, 9, 8, 13, 1, 1, 6, 5, + 2, 6, 7, 1, 3, 1, 0, 2, 1, 5, + 5, 5, 6, 6, 2, 4, 4, 6, 4, 4, + 4, 4, 6, 6, 2, 7, 1, 2, 0, 1, + 0, 3, 6, 3, 6, 2, 4, 6, 4 }; -# endif -/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ -static const unsigned char yyr1[] = -{ - 0, 166, 167, 167, 168, 168, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 170, 170, 170, - 171, 171, 171, 171, 171, 171, 172, 172, 172, 172, - 172, 172, 172, 172, 172, 172, 173, 173, 173, 173, - 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, - 173, 173, 174, 174, 174, 174, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, 175, 176, - 176, 176, 176, 177, 177, 177, 177, 178, 178, 179, - 179, 180, 180, 181, 181, 181, 181, 181, 181, 181, - 181, 182, 182, 182, 182, 182, 182, 182, 182, 183, - 183, 184, 184, 185, 186, 186, 187, 187, 188, 188, - 189, 189, 190, 190, 191, 192, 192, 192, 192, 192, - 192, 192, 192, 192, 192, 192, 192, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, 193, 194, - 194, 195, 195, 195, 195, 196, 196, 196, 196, 196, - 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, - 196, 196, 196, 197, 197, 197, 197, 197, 197, 197, - 197, 197, 197, 197, 197, 198, 198, 199, 199, 200, - 201, 201, 201, 201, 201, 202, 202, 202, 203, 202, - 204, 202, 205, 202, 206, 202, 202, 202, 202, 207, - 208, 208, 209, 209, 209, 209, 210, 211, 211, 211, - 212, 212, 213, 213, 214, 215, 215, 216, 216, 216, - 216, 217, 218, 218, 220, 219, 221, 221, 222, 223, - 223, 223, 225, 226, 224, 227, 227, 228, 228, 228, - 228, 228, 228, 228, 228, 228, 228, 228, 229, 229, - 230, 230, 231, 232, 232, 233, 234, 234, 234, 235, - 235, 236, 236, 236, 236, 236, 236, 236, 236, 236, - 237, 237, 238, 239, 239, 240, 240, 241, 241, 242, - 242, 243, 243, 243, 243, 243, 243, 243, 243, 243, - 243, 243, 243, 243, 243, 243, 243, 243, 243, 244, - 244, 245, 245, 246, 246, 246, 246, 246, 246, 246, - 246 +static const short yydefact[] = { 197, + 89, 183, 182, 231, 82, 83, 84, 85, 86, 87, + 88, 0, 223, 256, 179, 180, 256, 209, 210, 0, + 0, 0, 89, 0, 185, 228, 0, 90, 257, 253, + 81, 225, 226, 227, 252, 0, 0, 0, 0, 195, + 0, 0, 0, 0, 0, 0, 0, 80, 229, 230, + 232, 198, 181, 0, 91, 92, 93, 94, 95, 96, + 0, 0, 301, 255, 0, 0, 0, 0, 208, 196, + 186, 1, 2, 110, 114, 115, 116, 117, 118, 119, + 120, 121, 122, 123, 124, 125, 127, 0, 0, 0, + 0, 247, 184, 0, 109, 126, 113, 248, 128, 176, + 177, 0, 0, 0, 0, 90, 97, 0, 221, 222, + 224, 300, 0, 279, 0, 0, 0, 0, 90, 268, + 258, 259, 5, 6, 7, 8, 9, 10, 11, 12, + 13, 14, 15, 16, 17, 18, 51, 52, 53, 54, + 19, 20, 21, 22, 23, 24, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 67, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 0, 0, 0, 0, 0, 267, 254, + 90, 271, 0, 297, 203, 200, 199, 201, 202, 204, + 207, 0, 129, 0, 0, 0, 112, 134, 138, 0, + 143, 137, 191, 193, 189, 114, 115, 116, 117, 118, + 119, 120, 121, 122, 123, 124, 0, 0, 0, 0, + 187, 233, 0, 0, 285, 278, 261, 260, 0, 0, + 71, 75, 70, 74, 69, 73, 68, 72, 76, 77, + 0, 0, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 0, 49, 50, 45, 46, 47, 48, 35, + 36, 37, 38, 39, 40, 41, 42, 43, 44, 0, + 100, 100, 306, 0, 0, 295, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 205, 0, 0, 0, 0, 0, 133, 142, + 140, 0, 105, 105, 105, 159, 160, 3, 4, 157, + 158, 161, 156, 152, 153, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 155, 154, 105, 219, 236, 237, 238, 243, 239, + 240, 241, 242, 234, 0, 245, 250, 249, 251, 0, + 262, 0, 0, 0, 0, 0, 302, 0, 304, 299, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 206, 111, 111, + 136, 0, 139, 0, 130, 0, 192, 194, 190, 0, + 0, 0, 0, 0, 0, 0, 145, 175, 0, 0, + 0, 149, 0, 146, 0, 0, 0, 0, 0, 188, + 218, 212, 215, 216, 0, 235, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 309, 0, 0, + 0, 289, 292, 0, 0, 290, 291, 0, 0, 0, + 286, 287, 0, 307, 0, 131, 132, 135, 141, 0, + 0, 107, 105, 0, 0, 299, 0, 0, 0, 0, + 0, 144, 134, 113, 0, 147, 148, 0, 0, 0, + 0, 0, 211, 213, 0, 103, 0, 244, 0, 0, + 277, 0, 0, 100, 101, 100, 274, 298, 0, 0, + 0, 0, 0, 280, 281, 282, 277, 0, 102, 108, + 106, 0, 0, 0, 0, 0, 0, 0, 174, 151, + 0, 0, 0, 0, 0, 0, 217, 214, 104, 98, + 0, 0, 0, 276, 0, 283, 284, 0, 303, 305, + 0, 0, 0, 288, 293, 294, 0, 308, 0, 0, + 163, 0, 0, 0, 0, 150, 0, 0, 0, 0, + 0, 0, 220, 246, 0, 0, 0, 275, 272, 0, + 296, 0, 0, 0, 171, 0, 0, 165, 166, 167, + 170, 162, 99, 0, 265, 0, 0, 0, 273, 168, + 169, 0, 0, 0, 263, 0, 264, 0, 0, 164, + 172, 173, 0, 0, 0, 0, 0, 0, 270, 0, + 0, 269, 266, 0, 0, 0 }; -/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ -static const unsigned char 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, - 0, 0, 1, 1, 1, 1, 1, 1, 2, 0, - 2, 0, 3, 2, 0, 1, 0, 3, 1, 2, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 2, 4, 5, 5, 3, 2, 5, 4, 2, 1, - 3, 1, 3, 1, 0, 4, 3, 3, 4, 4, - 3, 6, 5, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 6, 5, 8, 6, 6, 6, 7, - 7, 6, 6, 8, 8, 3, 1, 1, 1, 1, - 2, 2, 4, 2, 1, 4, 2, 4, 0, 7, - 0, 7, 0, 7, 0, 7, 3, 4, 0, 1, - 1, 1, 3, 3, 3, 3, 3, 3, 1, 0, - 1, 1, 1, 0, 2, 3, 1, 1, 3, 1, - 0, 8, 1, 1, 0, 4, 1, 1, 2, 0, - 1, 1, 0, 0, 5, 0, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 3, 1, 5, 1, 1, - 1, 1, 2, 2, 2, 3, 2, 0, 1, 1, - 1, 2, 2, 3, 9, 9, 8, 13, 1, 1, - 6, 5, 2, 6, 7, 1, 3, 1, 0, 2, - 1, 5, 5, 5, 6, 6, 2, 4, 4, 6, - 4, 4, 4, 4, 6, 6, 2, 7, 1, 2, - 0, 1, 0, 3, 6, 3, 6, 2, 4, 6, - 4 +static const short yydefgoto[] = { 92, + 310, 327, 328, 329, 253, 270, 330, 331, 217, 218, + 241, 219, 23, 13, 61, 553, 357, 452, 520, 387, + 453, 93, 94, 220, 96, 97, 200, 302, 398, 346, + 399, 102, 604, 1, 2, 334, 305, 303, 304, 53, + 188, 40, 70, 192, 98, 474, 413, 414, 415, 62, + 111, 14, 28, 34, 15, 51, 16, 26, 106, 417, + 347, 99, 349, 487, 17, 30, 31, 179, 180, 577, + 64, 276, 524, 525, 181, 182, 428, 183, 184 }; -/* 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 unsigned short yydefact[] = -{ - 198, 0, 90, 184, 1, 183, 232, 83, 84, 85, - 86, 87, 88, 89, 0, 224, 257, 180, 181, 257, - 210, 211, 0, 0, 0, 90, 0, 186, 229, 0, - 91, 258, 254, 82, 226, 227, 228, 253, 0, 0, - 0, 0, 196, 0, 0, 0, 0, 0, 0, 0, - 81, 230, 231, 233, 199, 182, 0, 92, 93, 94, - 95, 96, 97, 0, 0, 302, 256, 0, 0, 0, - 0, 209, 197, 187, 2, 3, 111, 115, 116, 117, - 118, 119, 120, 121, 122, 123, 124, 125, 126, 128, - 0, 0, 0, 0, 248, 185, 0, 110, 127, 114, - 249, 129, 177, 178, 0, 0, 0, 0, 91, 98, - 0, 222, 223, 225, 301, 0, 280, 0, 0, 0, - 0, 91, 269, 259, 260, 6, 7, 8, 9, 10, - 11, 12, 13, 14, 15, 16, 17, 18, 19, 52, - 53, 54, 55, 20, 21, 22, 23, 24, 25, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 68, 56, 57, 58, 59, 60, 61, - 62, 63, 64, 65, 66, 67, 0, 0, 0, 0, - 0, 268, 255, 91, 272, 0, 298, 204, 201, 200, - 202, 203, 205, 208, 0, 130, 0, 0, 0, 113, - 135, 139, 0, 144, 138, 192, 194, 190, 115, 116, - 117, 118, 119, 120, 121, 122, 123, 124, 125, 0, - 0, 0, 0, 188, 234, 0, 0, 286, 279, 262, - 261, 0, 0, 72, 76, 71, 75, 70, 74, 69, - 73, 77, 78, 0, 0, 26, 27, 28, 29, 30, - 31, 32, 33, 34, 35, 0, 50, 51, 46, 47, - 48, 49, 36, 37, 38, 39, 40, 41, 42, 43, - 44, 45, 0, 101, 101, 307, 0, 0, 296, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 206, 0, 0, 0, 0, - 0, 134, 143, 141, 0, 106, 106, 106, 160, 161, - 4, 5, 158, 159, 162, 157, 153, 154, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 156, 155, 106, 220, 237, 238, - 239, 244, 240, 241, 242, 243, 235, 0, 246, 251, - 250, 252, 0, 263, 0, 0, 0, 0, 0, 303, - 0, 305, 300, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 207, 112, 112, 137, 0, 140, 0, 131, 0, 193, - 195, 191, 0, 0, 0, 0, 0, 0, 0, 146, - 176, 0, 0, 0, 150, 0, 147, 0, 0, 0, - 0, 0, 189, 219, 213, 216, 217, 0, 236, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 310, 0, 0, 0, 290, 293, 0, 0, 291, 292, - 0, 0, 0, 287, 288, 0, 308, 0, 132, 133, - 136, 142, 0, 0, 108, 106, 0, 0, 300, 0, - 0, 0, 0, 0, 145, 135, 114, 0, 148, 149, - 0, 0, 0, 0, 0, 212, 214, 0, 104, 0, - 245, 0, 0, 278, 0, 0, 101, 102, 101, 275, - 299, 0, 0, 0, 0, 0, 281, 282, 283, 278, - 0, 103, 109, 107, 0, 0, 0, 0, 0, 0, - 0, 175, 152, 0, 0, 0, 0, 0, 0, 218, - 215, 105, 99, 0, 0, 0, 277, 0, 284, 285, - 0, 304, 306, 0, 0, 0, 289, 294, 295, 0, - 309, 0, 0, 164, 0, 0, 0, 0, 151, 0, - 0, 0, 0, 0, 0, 221, 247, 0, 0, 0, - 276, 273, 0, 297, 0, 0, 0, 172, 0, 0, - 166, 167, 168, 171, 163, 100, 0, 266, 0, 0, - 0, 274, 169, 170, 0, 0, 0, 264, 0, 265, - 0, 0, 165, 173, 174, 0, 0, 0, 0, 0, - 0, 271, 0, 0, 270, 267 +static const short yypact[] = {-32768, + 239, 567,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, +-32768, -46,-32768, 55,-32768,-32768, -14,-32768,-32768, 48, + -6, 104, 161, 19,-32768, -34, 155, 249,-32768,-32768, + 98,-32768,-32768,-32768,-32768, 33, 43, 49, 57,-32768, + 59, 155, 1265, 150, 150, 150, 150,-32768,-32768,-32768, +-32768,-32768,-32768, 214,-32768,-32768,-32768,-32768,-32768,-32768, + 1265, -19, 1479,-32768, 196, 157, 224, 206, 212,-32768, +-32768,-32768,-32768, 87,-32768,-32768,-32768,-32768,-32768,-32768, +-32768,-32768,-32768,-32768,-32768,-32768,-32768, 241, 247, 4, + 15,-32768,-32768, 108,-32768,-32768, 12,-32768,-32768,-32768, +-32768, 1306, 1306, 1306, 1326, 249,-32768, 98,-32768,-32768, +-32768,-32768, 1306,-32768, 194, 1367, 116, 177, 249,-32768, +-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, +-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, +-32768,-32768,-32768,-32768,-32768,-32768, 355, 429, 1306, 1306, + 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, +-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, +-32768,-32768,-32768, 1306, 1306, 1306, 1306, 1306,-32768,-32768, + 249,-32768, 106,-32768,-32768,-32768,-32768,-32768,-32768,-32768, +-32768, -32,-32768, 103, 110, 75,-32768,-32768, 12, -81, + 1046,-32768,-32768,-32768,-32768, 197, 230, 265, 237, 267, + 240, 268, 246, 270, 269, 271, 254, 273, 272, 566, +-32768,-32768, 120, 766,-32768,-32768, 87,-32768, 766, 766, +-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, + 766, 1265,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, +-32768,-32768, 1306,-32768,-32768,-32768,-32768,-32768,-32768,-32768, +-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 1306, + 136, 137,-32768, 766, 134, 146, 147, 149, 152, 158, + 174, 176, 179, 766, 766, 766, 180, 262, 1265, 1306, + 1306, 279,-32768, 1306, 1306, 173, -27, 1306,-32768,-32768, + 184, 183, 187, 187, 187,-32768,-32768,-32768,-32768,-32768, +-32768,-32768,-32768,-32768,-32768, 355, 429, 186, 188, 189, + 190, 191, 1087, 1387, 529, 311, 192, 193, 198, 199, + 202,-32768,-32768, 187, 1107,-32768,-32768,-32768,-32768,-32768, +-32768,-32768,-32768, 286, 1326,-32768,-32768,-32768,-32768, 205, +-32768, 207, 766, 766, 766, 7,-32768, 20,-32768, 208, + 766, 209, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 210, + 216, 217, 1306, 1306, 766, 766, 218,-32768, -12, 9, +-32768, 204, 12, 1148,-32768, 8,-32768,-32768,-32768, 220, + 221, 1326, 1326, 1326, 1326, 1326,-32768,-32768, -8, 741, + -82,-32768, -9,-32768, 1326, 1326, 1326, 1326, 1326,-32768, +-32768, 98,-32768, 219, 203,-32768, 343, -13, 356, 357, + 228, 226, 233, 766, 383, 766, 1306,-32768, 235, 766, + 236,-32768,-32768, 243, 244,-32768,-32768, 766, 766, 766, +-32768,-32768, 238,-32768, 1306,-32768,-32768,-32768,-32768, 366, + 394,-32768, 187, 1326, 1326, 208, 250, 251, 252, 258, + 1326,-32768, 256, -25, 11,-32768,-32768, 259, 266, 274, + 278, 363,-32768,-32768, 1205, 387, 280,-32768, 766, 766, + 1306, 766, 766, 281,-32768, 281,-32768, 282, 766, 283, + 1306, 1306, 1306,-32768,-32768,-32768, 1306, 766,-32768,-32768, +-32768, 284, 290, 288, 1326, 1326, 1326, 1326,-32768,-32768, + 263, 1326, 1326, 1326, 1326, 1306,-32768,-32768,-32768, 368, + 376, 293, 294, 282, 291,-32768,-32768, 369,-32768,-32768, + 1306, 264, 766,-32768,-32768,-32768, 296,-32768, 1326, 1326, +-32768, 300, 299, 305, 306,-32768, 308, 310, 313, 314, + 315, 457,-32768,-32768, 441, 41, 436,-32768,-32768, 325, +-32768, 329, 331, 1326,-32768, 1326, 1326,-32768,-32768,-32768, +-32768,-32768,-32768, 766,-32768, 893, 145, 468,-32768,-32768, +-32768, 334, 335, 336,-32768, 340,-32768, 893, 766,-32768, +-32768,-32768, 473, 342, 182, 766, 475, 479,-32768, 766, + 766,-32768,-32768, 502, 503,-32768 }; -/* YYDEFGOTO[NTERM-NUM]. */ -static const short yydefgoto[] = -{ - -1, 94, 312, 329, 330, 331, 255, 272, 332, 333, - 219, 220, 243, 221, 25, 15, 63, 555, 359, 454, - 522, 389, 455, 95, 96, 222, 98, 99, 202, 304, - 400, 348, 401, 104, 1, 2, 3, 336, 307, 305, - 306, 55, 190, 42, 72, 194, 100, 476, 415, 416, - 417, 64, 113, 16, 30, 36, 17, 53, 18, 28, - 108, 419, 349, 101, 351, 489, 19, 32, 33, 181, - 182, 579, 66, 278, 526, 527, 183, 184, 430, 185, - 186 +static const short yypgoto[] = {-32768, +-32768, 443, 444, 446, 195, 200, 447, 451, -117, -114, + -539,-32768, 484, 481, -105,-32768, -265, 40,-32768, -236, +-32768, -58,-32768, -43,-32768, -72, -33,-32768, -99, 298, + -250, 58,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 480, +-32768,-32768,-32768,-32768, 10,-32768, 46,-32768,-32768, 417, +-32768,-32768,-32768,-32768,-32768,-32768, 522,-32768,-32768,-32768, + -526, 144, -88, -111,-32768, 508,-32768, -69,-32768,-32768, +-32768,-32768, 100, 31,-32768,-32768, 73,-32768,-32768 }; -/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing - STATE-NUM. */ -#define YYPACT_NINF -542 -static const short yypact[] = -{ - -542, 13, 162, 567, -542, -542, -542, -542, -542, -542, - -542, -542, -542, -542, 83, -542, 19, -542, -542, -14, - -542, -542, 50, -87, 87, 233, 27, -542, 123, 141, - 175, -542, -542, 98, -542, -542, -542, -542, 33, 40, - 66, 68, -542, 14, 141, 1265, 156, 156, 156, 156, - -542, -542, -542, -542, -542, -542, 221, -542, -542, -542, - -542, -542, -542, 1265, -19, 1479, -542, 204, 135, 226, - 227, 235, -542, -542, -542, -542, 81, -542, -542, -542, - -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, - 256, 257, 4, 15, -542, -542, 108, -542, -542, 12, - -542, -542, -542, -542, 1306, 1306, 1306, 1326, 175, -542, - 98, -542, -542, -542, -542, 1306, -542, 205, 1367, 116, - 479, 175, -542, -542, -542, -542, -542, -542, -542, -542, - -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, - -542, -542, -542, -542, -542, -542, -542, -542, -542, 355, - 429, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, - 1306, 1306, 1306, -542, -542, -542, -542, -542, -542, -542, - -542, -542, -542, -542, -542, -542, 1306, 1306, 1306, 1306, - 1306, -542, -542, 175, -542, 86, -542, -542, -542, -542, - -542, -542, -542, -542, -13, -542, 110, 111, 75, -542, - -542, 12, -81, 1046, -542, -542, -542, -542, 174, 208, - 266, 210, 267, 212, 268, 230, 277, 275, 278, 246, - 280, 279, 566, -542, -542, 136, 766, -542, -542, 81, - -542, 766, 766, -542, -542, -542, -542, -542, -542, -542, - -542, -542, -542, 766, 1265, -542, -542, -542, -542, -542, - -542, -542, -542, -542, -542, 1306, -542, -542, -542, -542, - -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, - -542, -542, 1306, 137, 145, -542, 766, 132, 146, 147, - 148, 149, 151, 152, 158, 160, 766, 766, 766, 161, - 281, 1265, 1306, 1306, 291, -542, 1306, 1306, 155, -27, - 1306, -542, -542, 165, 163, 176, 176, 176, -542, -542, - -542, -542, -542, -542, -542, -542, -542, -542, 355, 429, - 172, 177, 178, 179, 182, 1087, 1387, 529, 311, 184, - 185, 186, 188, 189, -542, -542, 176, 1107, -542, -542, - -542, -542, -542, -542, -542, -542, 282, 1326, -542, -542, - -542, -542, 193, -542, 194, 766, 766, 766, 7, -542, - 20, -542, 195, 766, 192, 1306, 1306, 1306, 1306, 1306, - 1306, 1306, 200, 201, 206, 1306, 1306, 766, 766, 207, - -542, -59, -149, -542, 196, 12, 1148, -542, 44, -542, - -542, -542, 203, 211, 1326, 1326, 1326, 1326, 1326, -542, - -542, -8, 741, -82, -542, 10, -542, 1326, 1326, 1326, - 1326, 1326, -542, -542, 98, -542, 214, 209, -542, 337, - -34, 342, 348, 215, 218, 219, 766, 371, 766, 1306, - -542, 223, 766, 224, -542, -542, 225, 234, -542, -542, - 766, 766, 766, -542, -542, 228, -542, 1306, -542, -542, - -542, -542, 362, 375, -542, 176, 1326, 1326, 195, 236, - 237, 240, 243, 1326, -542, 238, -25, 11, -542, -542, - 244, 245, 247, 250, 352, -542, -542, 1205, 370, 252, - -542, 766, 766, 1306, 766, 766, 258, -542, 258, -542, - 259, 766, 264, 1306, 1306, 1306, -542, -542, -542, 1306, - 766, -542, -542, -542, 270, 271, 263, 1326, 1326, 1326, - 1326, -542, -542, 260, 1326, 1326, 1326, 1326, 1306, -542, - -542, -542, 368, 402, 274, 276, 259, 287, -542, -542, - 374, -542, -542, 1306, 285, 766, -542, -542, -542, 290, - -542, 1326, 1326, -542, 283, 295, 284, 294, -542, 296, - 297, 299, 302, 303, 430, -542, -542, 414, 41, 425, - -542, -542, 305, -542, 306, 310, 1326, -542, 1326, 1326, - -542, -542, -542, -542, -542, -542, 766, -542, 893, 144, - 448, -542, -542, -542, 314, 315, 316, -542, 331, -542, - 893, 766, -542, -542, -542, 464, 334, 180, 766, 481, - 482, -542, 766, 766, -542, -542 -}; -/* YYPGOTO[NTERM-NUM]. */ -static const short yypgoto[] = -{ - -542, -542, -542, 435, 439, 441, 191, 197, 442, 445, - -119, -116, -541, -542, 478, 489, -107, -542, -267, 37, - -542, -238, -542, -60, -542, -45, -542, -74, -51, -542, - -101, 300, -252, 134, -542, -542, -542, -542, -542, -542, - -542, 473, -542, -542, -542, -542, 8, -542, 46, -542, - -542, 410, -542, -542, -542, -542, -542, -542, 518, -542, - -542, -542, -528, 142, -90, -113, -542, 505, -542, -72, - -542, -542, -542, -542, 97, 28, -542, -542, 70, -542, - -542 -}; +#define YYLAST 1630 -/* 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 -180 -static const short yytable[] = -{ - 97, 241, 227, 110, 242, 230, 223, 361, 197, 31, - 111, 26, 449, 4, 244, 204, 34, 578, 97, 201, - 74, 75, 426, 199, 77, 78, 79, 80, 81, 82, - 83, 84, 85, 86, 87, 428, 88, 20, 590, 21, - 275, 26, 31, 279, 280, 281, 282, 283, 284, 285, - 588, 233, 234, 235, 236, 237, 238, 239, 240, 205, - 206, 207, 596, 89, 427, 43, 289, 290, 390, 391, - 226, 463, 300, 226, 403, 405, 291, 427, 452, 468, - 74, 75, 301, 199, 77, 78, 79, 80, 81, 82, - 83, 84, 85, 86, 87, 420, 88, 20, 412, 21, - 448, 453, 38, 39, 40, 204, 273, 274, 226, 276, - 277, 226, 226, 226, 226, 226, 226, 226, 225, 463, - 20, 41, 21, 89, 201, 231, 300, 480, -139, 201, - -112, 286, 287, 288, 226, 226, 384, 232, -139, 204, - 294, 352, 353, 112, 29, 463, 295, 299, 44, 35, - 467, 464, 303, 354, 233, 234, 235, 236, 237, 238, - 239, 240, -179, 463, 463, 54, 198, -112, 51, 90, - 52, 71, 91, 469, 513, 92, 204, 93, 200, 50, - 379, 105, 106, 107, 355, 67, 362, 5, 102, 103, - 188, 189, 68, 6, 292, 293, 372, 373, 374, 97, - 577, 308, 309, 7, 8, 9, 10, 11, 12, 13, - 356, -72, -72, -71, -71, -70, -70, 503, 69, 531, - 70, 532, 381, 382, 14, 109, 385, 357, 187, 90, - 191, 377, 91, -69, -69, 92, -113, 93, 298, 56, - 57, 58, 59, 60, 61, 62, 97, 378, 226, 310, - 311, 192, 433, 45, 435, 436, 437, 123, 124, 193, - 195, 196, 443, 203, 228, 423, 424, 425, 296, 297, - -76, -75, -74, 431, 7, 8, 9, 10, 46, 12, - 47, -73, -79, 48, 313, -80, 314, 445, 446, 363, - 358, 337, 414, 458, 459, 460, 461, 462, 360, 364, - 365, 366, 367, 589, 368, 369, 470, 471, 472, 473, - 474, 370, 385, 371, 375, 380, 383, 376, 386, 387, - 226, 434, 226, 226, 226, 438, 439, 394, 466, 388, - 226, 444, 395, 396, 397, 406, 486, 398, 488, 407, - 408, 409, 492, 410, 411, 418, 421, 422, 429, 432, - 496, 497, 498, 440, 441, 504, 505, 450, 456, 442, - 447, 479, 511, 481, 335, 478, 457, 477, 350, 482, - 483, 484, 485, 350, 350, 487, 491, 493, 494, 502, - 536, 537, 538, 499, 226, 350, 501, 495, 518, 507, - 508, 524, 525, 509, 528, 529, 510, 514, 515, 512, - 516, 534, 500, 517, 452, 523, 544, 545, 546, 547, - 540, 530, 533, 549, 550, 551, 552, 535, 350, 543, - 560, 548, 475, 541, 542, 554, 556, 557, 350, 350, - 350, 427, 414, 558, 575, 576, 566, 568, 226, 241, - 564, 565, 242, 559, 561, 562, 563, 569, 226, 226, - 226, 567, 570, 571, 226, 572, 256, 257, 573, 574, - 241, 580, 582, 242, 581, 584, 583, 585, 586, 591, - 592, 593, 594, 553, 245, 246, 247, 248, 249, 250, - 251, 252, 253, 254, 595, 598, 587, 599, 226, 233, - 234, 235, 236, 237, 238, 239, 240, 350, 350, 350, - 176, 597, 602, 603, 177, 350, 178, 179, 601, 392, - 180, 65, 604, 605, 49, 521, 393, 73, 224, 350, - 350, 27, 334, 520, 37, 600, 490, 539, 506, 0, - 0, 0, 0, 0, 74, 75, 0, 199, 208, 209, - 210, 211, 212, 213, 214, 215, 216, 217, 218, 0, - 88, 20, 0, 21, 258, 259, 260, 261, 262, 263, - 264, 265, 266, 267, 268, 269, 270, 271, 350, 0, - 350, 74, 75, 0, 350, 0, 0, 89, 0, 0, - 0, 0, 350, 350, 350, 0, 0, -82, 20, 20, - 21, 21, 315, 0, 0, 0, 0, 0, 6, -82, - -82, 0, 0, 0, 316, 317, 0, 0, -82, -82, - -82, -82, -82, -82, -82, 0, 0, -82, 22, 0, - 0, 0, 0, 350, 350, 23, 350, 350, 0, 24, - 0, 0, 0, 350, 0, 0, 0, 0, 0, 0, - 0, 0, 350, 0, 0, 125, 126, 127, 128, 129, - 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, - 140, 141, 142, 143, 144, 145, 146, 147, 148, 318, - 319, 0, 0, 0, 0, 0, 320, 350, 321, 0, - 322, 323, 324, 90, 0, 0, 91, 0, 0, 92, - 0, 93, 404, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 163, 164, 165, 166, 167, - 168, 169, 170, 171, 172, 173, 174, 175, 350, 0, - 0, 0, 0, 325, 0, 0, 326, 0, 327, 0, - 0, 328, 0, 350, 0, 0, 0, 0, 0, 0, - 350, 0, 0, 0, 350, 350, 74, 75, 0, 199, - 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, - 218, 0, 88, 20, 0, 21, 0, 0, 0, 338, - 339, 74, 75, 340, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 20, 89, - 21, 0, 341, 342, 343, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 344, 345, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 346, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 125, 126, 127, 128, 129, - 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, - 140, 141, 142, 143, 144, 145, 146, 147, 148, 318, - 319, 0, 0, 0, 0, 0, 320, 0, 321, 0, - 322, 323, 324, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 90, 338, 339, 91, 0, - 340, 92, 0, 93, 465, 163, 164, 165, 166, 167, - 168, 169, 170, 171, 172, 173, 174, 175, 0, 341, - 342, 343, 0, 0, 0, 0, 347, 0, 0, 0, - 0, 344, 345, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 346, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 125, 126, 127, 128, 129, 130, 131, 132, - 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, - 143, 144, 145, 146, 147, 148, 318, 319, 0, 0, - 0, 0, 0, 320, 0, 321, 0, 322, 323, 324, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 163, 164, 165, 166, 167, 168, 169, 170, - 171, 172, 173, 174, 175, 0, 0, 0, 0, 0, - 0, 74, 75, 347, 199, 77, 78, 79, 80, 81, - 82, 83, 84, 85, 86, 87, 0, 88, 20, 0, - 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 302, 0, 0, 0, 0, 0, 0, - 0, 0, 74, 75, 89, 199, 208, 209, 210, 211, - 212, 213, 214, 215, 216, 217, 218, 0, 88, 20, - 0, 21, 74, 75, 0, 199, 77, 78, 79, 80, - 81, 82, 83, 84, 85, 86, 87, 0, 88, 20, - 0, 21, 0, 0, 0, 89, 0, 0, 0, 0, - 0, 0, 0, 0, 413, 0, 0, 0, 0, 0, - 0, 0, 0, 74, 75, 89, 199, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 0, 88, - 20, 0, 21, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 451, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, - 90, 0, 0, 91, 0, 0, 92, 0, 93, 0, - 74, 75, 0, 199, 77, 78, 79, 80, 81, 82, - 83, 84, 85, 86, 87, 0, 88, 20, 0, 21, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 90, 519, 0, 91, 0, 399, 92, 0, 93, - 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, - 0, 90, 0, 0, 91, 0, 0, 92, 0, 93, - 74, 75, 0, 76, 77, 78, 79, 80, 81, 82, - 83, 84, 85, 86, 87, 0, 88, 20, 0, 21, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 90, 0, 0, 91, 0, 0, 92, 0, - 93, 74, 75, 89, 199, 77, 78, 79, 80, 81, - 82, 83, 84, 85, 86, 87, 0, 88, 20, 0, - 21, 74, 75, 0, 199, 208, 209, 210, 211, 212, - 213, 214, 215, 216, 217, 218, 0, 88, 20, 0, - 21, 0, 0, 0, 89, 0, 0, 0, 0, 90, - 0, 0, 91, 0, 0, 92, 0, 93, 0, 0, - 0, 0, 74, 75, 89, 229, 77, 78, 79, 80, - 81, 82, 83, 84, 85, 86, 87, 0, 88, 20, - 0, 21, 74, 75, 0, 199, 208, 209, 210, 211, - 212, 213, 214, 215, 216, 217, 218, 0, 88, 20, - 0, 21, 0, 0, 0, 89, 0, 0, 0, 90, - 0, 0, 91, 0, 0, 92, 0, 93, 0, 0, - 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 90, 0, 0, 91, 0, 0, 92, 0, 93, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 90, 0, 0, 91, 0, 0, 92, 0, 93, 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, 114, 0, 0, 0, 0, 0, - 0, 90, 0, 0, 91, 0, 0, 92, 115, 93, - 0, 0, 0, 0, 0, 0, 0, 0, 116, 117, - 0, 90, 0, 0, 91, 0, 0, 92, 0, 402, - 0, 118, 119, 120, 121, 122, 123, 124, 125, 126, - 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, - 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, - 147, 148, 149, 150, 151, 152, 153, 0, 0, 154, - 155, 156, 157, 158, 159, 160, 161, 162, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 163, 164, - 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, - 175 -}; -static const short yycheck[] = -{ - 45, 120, 115, 63, 120, 118, 107, 274, 4, 23, - 29, 3, 161, 0, 121, 164, 30, 558, 63, 93, - 5, 6, 15, 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 15, 21, 22, 579, 24, - 153, 33, 23, 156, 157, 158, 159, 160, 161, 162, - 578, 10, 11, 12, 13, 14, 15, 16, 17, 104, - 105, 106, 590, 48, 57, 152, 179, 180, 306, 307, - 115, 153, 153, 118, 326, 327, 183, 57, 34, 161, - 5, 6, 163, 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 347, 21, 22, 336, 24, - 159, 57, 52, 53, 54, 164, 151, 152, 153, 154, - 155, 156, 157, 158, 159, 160, 161, 162, 110, 153, - 22, 71, 24, 48, 198, 9, 153, 161, 153, 203, - 155, 176, 177, 178, 179, 180, 163, 21, 163, 164, - 153, 231, 232, 162, 61, 153, 159, 198, 61, 163, - 402, 159, 203, 243, 10, 11, 12, 13, 14, 15, - 16, 17, 0, 153, 153, 24, 162, 155, 45, 154, - 47, 157, 157, 163, 163, 160, 164, 162, 163, 152, - 293, 47, 48, 49, 244, 152, 276, 25, 32, 33, - 55, 56, 152, 31, 108, 109, 286, 287, 288, 244, - 159, 27, 28, 41, 42, 43, 44, 45, 46, 47, - 255, 3, 4, 3, 4, 3, 4, 455, 152, 486, - 152, 488, 296, 297, 62, 4, 300, 272, 24, 154, - 4, 291, 157, 3, 4, 160, 155, 162, 163, 64, - 65, 66, 67, 68, 69, 70, 291, 292, 293, 3, - 4, 24, 365, 20, 367, 368, 369, 77, 78, 24, - 4, 4, 375, 155, 59, 355, 356, 357, 158, 158, - 4, 4, 4, 363, 41, 42, 43, 44, 45, 46, - 47, 4, 7, 50, 4, 7, 7, 377, 378, 157, - 153, 155, 337, 394, 395, 396, 397, 398, 153, 153, - 153, 153, 153, 159, 153, 153, 407, 408, 409, 410, - 411, 153, 386, 153, 153, 24, 161, 36, 153, 156, - 365, 366, 367, 368, 369, 370, 371, 155, 402, 153, - 375, 376, 155, 155, 155, 24, 426, 155, 428, 155, - 155, 155, 432, 155, 155, 63, 153, 153, 153, 157, - 440, 441, 442, 153, 153, 456, 457, 161, 155, 153, - 153, 24, 463, 21, 222, 156, 155, 153, 226, 21, - 155, 153, 153, 231, 232, 4, 153, 153, 153, 4, - 493, 494, 495, 155, 429, 243, 24, 153, 36, 153, - 153, 481, 482, 153, 484, 485, 153, 153, 153, 161, - 153, 491, 447, 153, 34, 153, 507, 508, 509, 510, - 500, 153, 153, 514, 515, 516, 517, 153, 276, 156, - 533, 161, 414, 153, 153, 57, 24, 153, 286, 287, - 288, 57, 477, 157, 4, 21, 153, 153, 483, 558, - 541, 542, 558, 156, 159, 535, 156, 153, 493, 494, - 495, 156, 156, 156, 499, 156, 27, 28, 156, 156, - 579, 36, 156, 579, 159, 566, 156, 568, 569, 21, - 156, 156, 156, 518, 119, 120, 121, 122, 123, 124, - 125, 126, 127, 128, 153, 21, 576, 153, 533, 10, - 11, 12, 13, 14, 15, 16, 17, 355, 356, 357, - 65, 591, 21, 21, 65, 363, 65, 65, 598, 318, - 65, 33, 602, 603, 25, 478, 319, 44, 108, 377, - 378, 3, 222, 477, 19, 597, 429, 499, 458, -1, - -1, -1, -1, -1, 5, 6, -1, 8, 9, 10, - 11, 12, 13, 14, 15, 16, 17, 18, 19, -1, - 21, 22, -1, 24, 125, 126, 127, 128, 129, 130, - 131, 132, 133, 134, 135, 136, 137, 138, 426, -1, - 428, 5, 6, -1, 432, -1, -1, 48, -1, -1, - -1, -1, 440, 441, 442, -1, -1, 20, 22, 22, - 24, 24, 26, -1, -1, -1, -1, -1, 31, 32, - 33, -1, -1, -1, 38, 39, -1, -1, 41, 42, - 43, 44, 45, 46, 47, -1, -1, 50, 51, -1, - -1, -1, -1, 481, 482, 58, 484, 485, -1, 62, - -1, -1, -1, 491, -1, -1, -1, -1, -1, -1, - -1, -1, 500, -1, -1, 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, -1, -1, -1, -1, -1, 110, 535, 112, -1, - 114, 115, 116, 154, -1, -1, 157, -1, -1, 160, - -1, 162, 163, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 139, 140, 141, 142, 143, - 144, 145, 146, 147, 148, 149, 150, 151, 576, -1, - -1, -1, -1, 157, -1, -1, 160, -1, 162, -1, - -1, 165, -1, 591, -1, -1, -1, -1, -1, -1, - 598, -1, -1, -1, 602, 603, 5, 6, -1, 8, - 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, - 19, -1, 21, 22, -1, 24, -1, -1, -1, 3, - 4, 5, 6, 7, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 22, 48, - 24, -1, 26, 27, 28, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 38, 39, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 61, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 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, -1, -1, -1, -1, -1, 110, -1, 112, -1, - 114, 115, 116, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 154, 3, 4, 157, -1, - 7, 160, -1, 162, 163, 139, 140, 141, 142, 143, - 144, 145, 146, 147, 148, 149, 150, 151, -1, 26, - 27, 28, -1, -1, -1, -1, 160, -1, -1, -1, - -1, 38, 39, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 61, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 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, -1, -1, - -1, -1, -1, 110, -1, 112, -1, 114, 115, 116, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 139, 140, 141, 142, 143, 144, 145, 146, - 147, 148, 149, 150, 151, -1, -1, -1, -1, -1, - -1, 5, 6, 160, 8, 9, 10, 11, 12, 13, - 14, 15, 16, 17, 18, 19, -1, 21, 22, -1, - 24, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 37, -1, -1, -1, -1, -1, -1, - -1, -1, 5, 6, 48, 8, 9, 10, 11, 12, - 13, 14, 15, 16, 17, 18, 19, -1, 21, 22, - -1, 24, 5, 6, -1, 8, 9, 10, 11, 12, - 13, 14, 15, 16, 17, 18, 19, -1, 21, 22, - -1, 24, -1, -1, -1, 48, -1, -1, -1, -1, - -1, -1, -1, -1, 37, -1, -1, -1, -1, -1, - -1, -1, -1, 5, 6, 48, 8, 9, 10, 11, - 12, 13, 14, 15, 16, 17, 18, 19, -1, 21, - 22, -1, 24, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 37, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 48, -1, -1, -1, - 154, -1, -1, 157, -1, -1, 160, -1, 162, -1, - 5, 6, -1, 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, -1, 21, 22, -1, 24, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 154, 37, -1, 157, -1, 159, 160, -1, 162, - -1, -1, -1, 48, -1, -1, -1, -1, -1, -1, - -1, 154, -1, -1, 157, -1, -1, 160, -1, 162, - 5, 6, -1, 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, -1, 21, 22, -1, 24, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 154, -1, -1, 157, -1, -1, 160, -1, - 162, 5, 6, 48, 8, 9, 10, 11, 12, 13, - 14, 15, 16, 17, 18, 19, -1, 21, 22, -1, - 24, 5, 6, -1, 8, 9, 10, 11, 12, 13, - 14, 15, 16, 17, 18, 19, -1, 21, 22, -1, - 24, -1, -1, -1, 48, -1, -1, -1, -1, 154, - -1, -1, 157, -1, -1, 160, -1, 162, -1, -1, - -1, -1, 5, 6, 48, 8, 9, 10, 11, 12, - 13, 14, 15, 16, 17, 18, 19, -1, 21, 22, - -1, 24, 5, 6, -1, 8, 9, 10, 11, 12, - 13, 14, 15, 16, 17, 18, 19, -1, 21, 22, - -1, 24, -1, -1, -1, 48, -1, -1, -1, 154, - -1, -1, 157, -1, -1, 160, -1, 162, -1, -1, - -1, -1, -1, -1, -1, 48, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 154, -1, -1, 157, -1, -1, 160, -1, 162, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 154, -1, -1, 157, -1, -1, 160, -1, 162, -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, 35, -1, -1, -1, -1, -1, - -1, 154, -1, -1, 157, -1, -1, 160, 49, 162, - -1, -1, -1, -1, -1, -1, -1, -1, 59, 60, - -1, 154, -1, -1, 157, -1, -1, 160, -1, 162, - -1, 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, -1, -1, 110, - 111, 112, 113, 114, 115, 116, 117, 118, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 139, 140, - 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, - 151 +static const short yytable[] = { 95, + 239, 225, 108, 240, 228, 221, 359, 195, 29, 109, + 49, 24, 50, 242, 27, 32, 576, 95, 199, 72, + 73, 424, 197, 75, 76, 77, 78, 79, 80, 81, + 82, 83, 84, 85, 426, 86, 18, 588, 19, 273, + 24, 450, 277, 278, 279, 280, 281, 282, 283, 586, + 231, 232, 233, 234, 235, 236, 237, 238, 203, 204, + 205, 594, 87, 425, 451, 287, 288, 388, 389, 224, + 461, 298, 224, 401, 403, 289, 425, 29, 466, 72, + 73, 299, 197, 75, 76, 77, 78, 79, 80, 81, + 82, 83, 84, 85, 418, 86, 18, 410, 19, 36, + 37, 38, 103, 104, 105, 271, 272, 224, 274, 275, + 224, 224, 224, 224, 224, 224, 224, 223, 39, 18, + 292, 19, 87, 199, 229, 298, 293, -138, 199, -111, + 284, 285, 286, 224, 224, 382, 230, -138, 202, 461, + 350, 351, 110, 461, 461, 41, 446, 478, 33, 465, + 462, 202, 352, 467, 231, 232, 233, 234, 235, 236, + 237, 238, 297, 461, 42, 196, -111, 301, 88, 447, + 48, 89, 202, 511, 90, 202, 91, 198, 52, 377, + 43, 100, 101, 353, 65, 360, 231, 232, 233, 234, + 235, 236, 237, 238, 66, 370, 371, 372, 95, 575, + 67, 5, 6, 7, 8, 44, 10, 45, 68, 354, + 46, 186, 187, 290, 291, 69, 501, 107, 529, 185, + 530, 379, 380, 306, 307, 383, 355, 189, 88, 190, + 375, 89, -71, -71, 90, 191, 91, 296, -178, -70, + -70, -112, -69, -69, 193, 95, 376, 224, -68, -68, + 194, 431, 226, 433, 434, 435, 308, 309, 121, 122, + 294, 441, 201, 3, 421, 422, 423, 295, -75, 4, + -74, -73, 429, -72, 335, -78, 311, -79, 312, 5, + 6, 7, 8, 9, 10, 11, 443, 444, 356, 358, + 361, 412, 456, 457, 458, 459, 460, 374, 362, 363, + 12, 364, 378, 587, 365, 468, 469, 470, 471, 472, + 366, 383, 54, 55, 56, 57, 58, 59, 60, 224, + 432, 224, 224, 224, 436, 437, 367, 464, 368, 224, + 442, 369, 373, 381, 404, 484, 384, 486, 385, 386, + 392, 490, 393, 394, 395, 396, 405, 406, 416, 494, + 495, 496, 407, 408, 502, 503, 409, 419, 476, 420, + 427, 509, 438, 333, 448, 430, 477, 348, 439, 440, + 445, 475, 348, 348, 454, 455, 479, 480, 482, 534, + 535, 536, 481, 224, 348, 483, 485, 489, 491, 499, + 522, 523, 497, 526, 527, 492, 493, 500, 516, 554, + 532, 498, 505, 506, 507, 542, 543, 544, 545, 538, + 508, 512, 547, 548, 549, 550, 510, 348, 513, 558, + 450, 473, 559, 546, 552, 425, 514, 348, 348, 348, + 515, 412, 521, 528, 531, 533, 539, 224, 239, 562, + 563, 240, 540, 541, 560, 555, 557, 224, 224, 224, + 556, 561, 564, 224, 565, 254, 255, 566, 567, 239, + 573, 574, 240, 568, 582, 569, 583, 584, 570, 571, + 572, 578, 551, 243, 244, 245, 246, 247, 248, 249, + 250, 251, 252, 579, 580, 585, 581, 224, 589, 590, + 591, 592, 593, 596, 597, 600, 348, 348, 348, 601, + 595, 605, 606, 47, 348, 174, 175, 599, 176, 177, + 390, 602, 603, 178, 63, 519, 391, 332, 348, 348, + 518, 71, 222, 25, 35, 598, 488, 537, 504, 0, + 0, 0, 0, 72, 73, 0, 197, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 0, 86, + 18, 0, 19, 256, 257, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, 269, 348, 0, 348, + 72, 73, 0, 348, 0, 0, 87, 0, 0, 0, + 0, 348, 348, 348, 0, 0, -81, 18, 18, 19, + 19, 313, 0, 0, 0, 0, 0, 4, -81, -81, + 0, 0, 0, 314, 315, 0, 0, -81, -81, -81, + -81, -81, -81, -81, 0, 0, -81, 20, 0, 0, + 0, 0, 348, 348, 21, 348, 348, 0, 22, 0, + 0, 0, 348, 0, 0, 0, 0, 0, 0, 0, + 0, 348, 0, 0, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, + 139, 140, 141, 142, 143, 144, 145, 146, 316, 317, + 0, 0, 0, 0, 0, 318, 348, 319, 0, 320, + 321, 322, 88, 0, 0, 89, 0, 0, 90, 0, + 91, 402, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 161, 162, 163, 164, 165, 166, + 167, 168, 169, 170, 171, 172, 173, 348, 0, 0, + 0, 0, 323, 0, 0, 324, 0, 325, 0, 0, + 326, 0, 348, 0, 0, 0, 0, 0, 0, 348, + 0, 0, 0, 348, 348, 72, 73, 0, 197, 206, + 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, + 0, 86, 18, 0, 19, 0, 0, 0, 336, 337, + 72, 73, 338, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 18, 87, 19, + 0, 339, 340, 341, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 342, 343, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 344, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, + 139, 140, 141, 142, 143, 144, 145, 146, 316, 317, + 0, 0, 0, 0, 0, 318, 0, 319, 0, 320, + 321, 322, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 88, 336, 337, 89, 0, 338, + 90, 0, 91, 463, 161, 162, 163, 164, 165, 166, + 167, 168, 169, 170, 171, 172, 173, 0, 339, 340, + 341, 0, 0, 0, 0, 345, 0, 0, 0, 0, + 342, 343, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 344, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 123, 124, 125, 126, 127, 128, 129, 130, 131, + 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, + 142, 143, 144, 145, 146, 316, 317, 0, 0, 0, + 0, 0, 318, 0, 319, 0, 320, 321, 322, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 161, 162, 163, 164, 165, 166, 167, 168, 169, + 170, 171, 172, 173, 0, 0, 0, 0, 0, 0, + 72, 73, 345, 197, 75, 76, 77, 78, 79, 80, + 81, 82, 83, 84, 85, 0, 86, 18, 0, 19, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 300, 0, 0, 0, 0, 0, 0, 0, + 0, 72, 73, 87, 197, 206, 207, 208, 209, 210, + 211, 212, 213, 214, 215, 216, 0, 86, 18, 0, + 19, 72, 73, 0, 197, 75, 76, 77, 78, 79, + 80, 81, 82, 83, 84, 85, 0, 86, 18, 0, + 19, 0, 0, 0, 87, 0, 0, 0, 0, 0, + 0, 0, 0, 411, 0, 0, 0, 0, 0, 0, + 0, 0, 72, 73, 87, 197, 75, 76, 77, 78, + 79, 80, 81, 82, 83, 84, 85, 0, 86, 18, + 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 449, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 87, 0, 0, 0, 88, + 0, 0, 89, 0, 0, 90, 0, 91, 0, 72, + 73, 0, 197, 75, 76, 77, 78, 79, 80, 81, + 82, 83, 84, 85, 0, 86, 18, 0, 19, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 88, 517, 0, 89, 0, 397, 90, 0, 91, 0, + 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, + 88, 0, 0, 89, 0, 0, 90, 0, 91, 72, + 73, 0, 74, 75, 76, 77, 78, 79, 80, 81, + 82, 83, 84, 85, 0, 86, 18, 0, 19, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 88, 0, 0, 89, 0, 0, 90, 0, 91, + 72, 73, 87, 197, 75, 76, 77, 78, 79, 80, + 81, 82, 83, 84, 85, 0, 86, 18, 0, 19, + 72, 73, 0, 197, 206, 207, 208, 209, 210, 211, + 212, 213, 214, 215, 216, 0, 86, 18, 0, 19, + 0, 0, 0, 87, 0, 0, 0, 0, 88, 0, + 0, 89, 0, 0, 90, 0, 91, 0, 0, 0, + 0, 72, 73, 87, 227, 75, 76, 77, 78, 79, + 80, 81, 82, 83, 84, 85, 0, 86, 18, 0, + 19, 72, 73, 0, 197, 206, 207, 208, 209, 210, + 211, 212, 213, 214, 215, 216, 0, 86, 18, 0, + 19, 0, 0, 0, 87, 0, 0, 0, 88, 0, + 0, 89, 0, 0, 90, 0, 91, 0, 0, 0, + 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, + 0, 0, 89, 0, 0, 90, 0, 91, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, + 0, 0, 89, 0, 0, 90, 0, 91, 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, 112, 0, 0, 0, 0, 0, 0, + 88, 0, 0, 89, 0, 0, 90, 113, 91, 0, + 0, 0, 0, 0, 0, 0, 0, 114, 115, 0, + 88, 0, 0, 89, 0, 0, 90, 0, 400, 0, + 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, + 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, + 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, + 146, 147, 148, 149, 150, 151, 0, 0, 152, 153, + 154, 155, 156, 157, 158, 159, 160, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 161, 162, 163, + 164, 165, 166, 167, 168, 169, 170, 171, 172, 173 }; -/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing - symbol of state STATE-NUM. */ -static const unsigned char yystos[] = -{ - 0, 200, 201, 202, 0, 25, 31, 41, 42, 43, - 44, 45, 46, 47, 62, 181, 219, 222, 224, 232, - 22, 24, 51, 58, 62, 180, 212, 224, 225, 61, - 220, 23, 233, 234, 30, 163, 221, 233, 52, 53, - 54, 71, 209, 152, 61, 20, 45, 47, 50, 181, - 152, 45, 47, 223, 24, 207, 64, 65, 66, 67, - 68, 69, 70, 182, 217, 180, 238, 152, 152, 152, - 152, 157, 210, 207, 5, 6, 8, 9, 10, 11, - 12, 13, 14, 15, 16, 17, 18, 19, 21, 48, - 154, 157, 160, 162, 167, 189, 190, 191, 192, 193, - 212, 229, 32, 33, 199, 199, 199, 199, 226, 4, - 189, 29, 162, 218, 35, 49, 59, 60, 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, 110, 111, 112, 113, 114, 115, - 116, 117, 118, 139, 140, 141, 142, 143, 144, 145, - 146, 147, 148, 149, 150, 151, 169, 170, 171, 174, - 175, 235, 236, 242, 243, 245, 246, 24, 55, 56, - 208, 4, 24, 24, 211, 4, 4, 4, 162, 8, - 163, 193, 194, 155, 164, 191, 191, 191, 9, 10, - 11, 12, 13, 14, 15, 16, 17, 18, 19, 176, - 177, 179, 191, 196, 217, 212, 191, 231, 59, 8, - 231, 9, 21, 10, 11, 12, 13, 14, 15, 16, - 17, 176, 177, 178, 182, 119, 120, 121, 122, 123, - 124, 125, 126, 127, 128, 172, 27, 28, 125, 126, - 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, - 137, 138, 173, 191, 191, 231, 191, 191, 239, 231, - 231, 231, 231, 231, 231, 231, 191, 191, 191, 231, - 231, 182, 108, 109, 153, 159, 158, 158, 163, 194, - 153, 163, 37, 194, 195, 205, 206, 204, 27, 28, - 3, 4, 168, 4, 7, 26, 38, 39, 103, 104, - 110, 112, 114, 115, 116, 157, 160, 162, 165, 169, - 170, 171, 174, 175, 197, 229, 203, 155, 3, 4, - 7, 26, 27, 28, 38, 39, 61, 160, 197, 228, - 229, 230, 230, 230, 230, 189, 191, 191, 153, 184, - 153, 184, 230, 157, 153, 153, 153, 153, 153, 153, - 153, 153, 230, 230, 230, 153, 36, 189, 191, 231, - 24, 193, 193, 161, 163, 193, 153, 156, 153, 187, - 187, 187, 172, 173, 155, 155, 155, 155, 155, 159, - 196, 198, 162, 198, 163, 198, 24, 155, 155, 155, - 155, 155, 187, 37, 191, 214, 215, 216, 63, 227, - 198, 153, 153, 230, 230, 230, 15, 57, 15, 153, - 244, 230, 157, 231, 191, 231, 231, 231, 191, 191, - 153, 153, 153, 231, 191, 230, 230, 153, 159, 161, - 161, 37, 34, 57, 185, 188, 155, 155, 196, 196, - 196, 196, 196, 153, 159, 163, 193, 198, 161, 163, - 196, 196, 196, 196, 196, 212, 213, 153, 156, 24, - 161, 21, 21, 155, 153, 153, 230, 4, 230, 231, - 240, 153, 230, 153, 153, 153, 230, 230, 230, 155, - 191, 24, 4, 187, 196, 196, 244, 153, 153, 153, - 153, 196, 161, 163, 153, 153, 153, 153, 36, 37, - 214, 185, 186, 153, 230, 230, 240, 241, 230, 230, - 153, 184, 184, 153, 230, 153, 231, 231, 231, 241, - 230, 153, 153, 156, 196, 196, 196, 196, 161, 196, - 196, 196, 196, 191, 57, 183, 24, 153, 157, 156, - 231, 159, 230, 156, 196, 196, 153, 156, 153, 153, - 156, 156, 156, 156, 156, 4, 21, 159, 178, 237, - 36, 159, 156, 156, 196, 196, 196, 230, 228, 159, - 178, 21, 156, 156, 156, 153, 228, 230, 21, 153, - 235, 230, 21, 21, 230, 230 +static const short yycheck[] = { 43, + 118, 113, 61, 118, 116, 105, 272, 4, 23, 29, + 45, 2, 47, 119, 61, 30, 556, 61, 91, 5, + 6, 15, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 15, 21, 22, 577, 24, 151, + 31, 34, 154, 155, 156, 157, 158, 159, 160, 576, + 10, 11, 12, 13, 14, 15, 16, 17, 102, 103, + 104, 588, 48, 57, 57, 177, 178, 304, 305, 113, + 153, 153, 116, 324, 325, 181, 57, 23, 161, 5, + 6, 163, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 345, 21, 22, 334, 24, 52, + 53, 54, 45, 46, 47, 149, 150, 151, 152, 153, + 154, 155, 156, 157, 158, 159, 160, 108, 71, 22, + 153, 24, 48, 196, 9, 153, 159, 153, 201, 155, + 174, 175, 176, 177, 178, 163, 21, 163, 164, 153, + 229, 230, 162, 153, 153, 152, 159, 161, 163, 400, + 159, 164, 241, 163, 10, 11, 12, 13, 14, 15, + 16, 17, 196, 153, 61, 162, 155, 201, 154, 161, + 152, 157, 164, 163, 160, 164, 162, 163, 24, 291, + 20, 32, 33, 242, 152, 274, 10, 11, 12, 13, + 14, 15, 16, 17, 152, 284, 285, 286, 242, 159, + 152, 41, 42, 43, 44, 45, 46, 47, 152, 253, + 50, 55, 56, 108, 109, 157, 453, 4, 484, 24, + 486, 294, 295, 27, 28, 298, 270, 4, 154, 24, + 289, 157, 3, 4, 160, 24, 162, 163, 0, 3, + 4, 155, 3, 4, 4, 289, 290, 291, 3, 4, + 4, 363, 59, 365, 366, 367, 3, 4, 77, 78, + 158, 373, 155, 25, 353, 354, 355, 158, 4, 31, + 4, 4, 361, 4, 155, 7, 4, 7, 7, 41, + 42, 43, 44, 45, 46, 47, 375, 376, 153, 153, + 157, 335, 392, 393, 394, 395, 396, 36, 153, 153, + 62, 153, 24, 159, 153, 405, 406, 407, 408, 409, + 153, 384, 64, 65, 66, 67, 68, 69, 70, 363, + 364, 365, 366, 367, 368, 369, 153, 400, 153, 373, + 374, 153, 153, 161, 24, 424, 153, 426, 156, 153, + 155, 430, 155, 155, 155, 155, 155, 155, 63, 438, + 439, 440, 155, 155, 454, 455, 155, 153, 156, 153, + 153, 461, 153, 220, 161, 157, 24, 224, 153, 153, + 153, 153, 229, 230, 155, 155, 21, 21, 153, 491, + 492, 493, 155, 427, 241, 153, 4, 153, 153, 24, + 479, 480, 155, 482, 483, 153, 153, 4, 36, 24, + 489, 445, 153, 153, 153, 505, 506, 507, 508, 498, + 153, 153, 512, 513, 514, 515, 161, 274, 153, 531, + 34, 412, 159, 161, 57, 57, 153, 284, 285, 286, + 153, 475, 153, 153, 153, 153, 153, 481, 556, 539, + 540, 556, 153, 156, 533, 153, 156, 491, 492, 493, + 157, 156, 153, 497, 156, 27, 28, 153, 153, 577, + 4, 21, 577, 156, 564, 156, 566, 567, 156, 156, + 156, 36, 516, 119, 120, 121, 122, 123, 124, 125, + 126, 127, 128, 159, 156, 574, 156, 531, 21, 156, + 156, 156, 153, 21, 153, 21, 353, 354, 355, 21, + 589, 0, 0, 23, 361, 63, 63, 596, 63, 63, + 316, 600, 601, 63, 31, 476, 317, 220, 375, 376, + 475, 42, 106, 2, 17, 595, 427, 497, 456, -1, + -1, -1, -1, 5, 6, -1, 8, 9, 10, 11, + 12, 13, 14, 15, 16, 17, 18, 19, -1, 21, + 22, -1, 24, 125, 126, 127, 128, 129, 130, 131, + 132, 133, 134, 135, 136, 137, 138, 424, -1, 426, + 5, 6, -1, 430, -1, -1, 48, -1, -1, -1, + -1, 438, 439, 440, -1, -1, 20, 22, 22, 24, + 24, 26, -1, -1, -1, -1, -1, 31, 32, 33, + -1, -1, -1, 38, 39, -1, -1, 41, 42, 43, + 44, 45, 46, 47, -1, -1, 50, 51, -1, -1, + -1, -1, 479, 480, 58, 482, 483, -1, 62, -1, + -1, -1, 489, -1, -1, -1, -1, -1, -1, -1, + -1, 498, -1, -1, 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, + -1, -1, -1, -1, -1, 110, 533, 112, -1, 114, + 115, 116, 154, -1, -1, 157, -1, -1, 160, -1, + 162, 163, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 139, 140, 141, 142, 143, 144, + 145, 146, 147, 148, 149, 150, 151, 574, -1, -1, + -1, -1, 157, -1, -1, 160, -1, 162, -1, -1, + 165, -1, 589, -1, -1, -1, -1, -1, -1, 596, + -1, -1, -1, 600, 601, 5, 6, -1, 8, 9, + 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + -1, 21, 22, -1, 24, -1, -1, -1, 3, 4, + 5, 6, 7, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 22, 48, 24, + -1, 26, 27, 28, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 38, 39, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 61, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 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, + -1, -1, -1, -1, -1, 110, -1, 112, -1, 114, + 115, 116, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 154, 3, 4, 157, -1, 7, + 160, -1, 162, 163, 139, 140, 141, 142, 143, 144, + 145, 146, 147, 148, 149, 150, 151, -1, 26, 27, + 28, -1, -1, -1, -1, 160, -1, -1, -1, -1, + 38, 39, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 61, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 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, -1, -1, -1, + -1, -1, 110, -1, 112, -1, 114, 115, 116, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 139, 140, 141, 142, 143, 144, 145, 146, 147, + 148, 149, 150, 151, -1, -1, -1, -1, -1, -1, + 5, 6, 160, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, -1, 21, 22, -1, 24, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 37, -1, -1, -1, -1, -1, -1, -1, + -1, 5, 6, 48, 8, 9, 10, 11, 12, 13, + 14, 15, 16, 17, 18, 19, -1, 21, 22, -1, + 24, 5, 6, -1, 8, 9, 10, 11, 12, 13, + 14, 15, 16, 17, 18, 19, -1, 21, 22, -1, + 24, -1, -1, -1, 48, -1, -1, -1, -1, -1, + -1, -1, -1, 37, -1, -1, -1, -1, -1, -1, + -1, -1, 5, 6, 48, 8, 9, 10, 11, 12, + 13, 14, 15, 16, 17, 18, 19, -1, 21, 22, + -1, 24, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 37, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 48, -1, -1, -1, 154, + -1, -1, 157, -1, -1, 160, -1, 162, -1, 5, + 6, -1, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, -1, 21, 22, -1, 24, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 154, 37, -1, 157, -1, 159, 160, -1, 162, -1, + -1, -1, 48, -1, -1, -1, -1, -1, -1, -1, + 154, -1, -1, 157, -1, -1, 160, -1, 162, 5, + 6, -1, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, -1, 21, 22, -1, 24, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 154, -1, -1, 157, -1, -1, 160, -1, 162, + 5, 6, 48, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, -1, 21, 22, -1, 24, + 5, 6, -1, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, -1, 21, 22, -1, 24, + -1, -1, -1, 48, -1, -1, -1, -1, 154, -1, + -1, 157, -1, -1, 160, -1, 162, -1, -1, -1, + -1, 5, 6, 48, 8, 9, 10, 11, 12, 13, + 14, 15, 16, 17, 18, 19, -1, 21, 22, -1, + 24, 5, 6, -1, 8, 9, 10, 11, 12, 13, + 14, 15, 16, 17, 18, 19, -1, 21, 22, -1, + 24, -1, -1, -1, 48, -1, -1, -1, 154, -1, + -1, 157, -1, -1, 160, -1, 162, -1, -1, -1, + -1, -1, -1, -1, 48, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 154, + -1, -1, 157, -1, -1, 160, -1, 162, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 154, + -1, -1, 157, -1, -1, 160, -1, 162, -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, 35, -1, -1, -1, -1, -1, -1, + 154, -1, -1, 157, -1, -1, 160, 49, 162, -1, + -1, -1, -1, -1, -1, -1, -1, 59, 60, -1, + 154, -1, -1, 157, -1, -1, 160, -1, 162, -1, + 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, -1, -1, 110, 111, + 112, 113, 114, 115, 116, 117, 118, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 139, 140, 141, + 142, 143, 144, 145, 146, 147, 148, 149, 150, 151 }; +/* -*-C-*- Note some compilers choke on comments on `#line' lines. */ +#line 3 "/usr/share/bison.simple" +/* This file comes from bison-1.28. */ -#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__) -# define YYSIZE_T __SIZE_TYPE__ -#endif -#if ! defined (YYSIZE_T) && defined (size_t) -# define YYSIZE_T size_t +/* Skeleton output parser for bison, + Copyright (C) 1984, 1989, 1990 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., 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 -#if ! defined (YYSIZE_T) -# if defined (__STDC__) || defined (__cplusplus) -# include /* INFRINGES ON USER NAME SPACE */ -# define YYSIZE_T size_t -# 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 -#if ! defined (YYSIZE_T) -# define YYSIZE_T unsigned int +#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); \ + { yychar = (token), yylval = (value); \ + yychar1 = YYTRANSLATE (yychar); \ YYPOPSTACK; \ goto yybackup; \ } \ else \ - { \ - yyerror ("syntax error: cannot back up");\ - YYERROR; \ - } \ + { yyerror ("syntax error: cannot back up"); YYERROR; } \ while (0) #define YYTERROR 1 #define YYERRCODE 256 -/* YYLLOC_DEFAULT -- Compute the default location (before the actions - are run). */ - -#ifndef YYLLOC_DEFAULT -# define YYLLOC_DEFAULT(Current, Rhs, N) \ - ((Current).first_line = (Rhs)[1].first_line, \ - (Current).first_column = (Rhs)[1].first_column, \ - (Current).last_line = (Rhs)[N].last_line, \ - (Current).last_column = (Rhs)[N].last_column) +#ifndef YYPURE +#define YYLEX yylex() #endif -/* YYLEX -- calling `yylex' with the right arguments. */ - +#ifdef YYPURE +#ifdef YYLSP_NEEDED +#ifdef YYLEX_PARAM +#define YYLEX yylex(&yylval, &yylloc, YYLEX_PARAM) +#else +#define YYLEX yylex(&yylval, &yylloc) +#endif +#else /* not YYLSP_NEEDED */ #ifdef YYLEX_PARAM -# define YYLEX yylex (YYLEX_PARAM) +#define YYLEX yylex(&yylval, YYLEX_PARAM) #else -# define YYLEX yylex () +#define YYLEX yylex(&yylval) +#endif +#endif /* not YYLSP_NEEDED */ #endif -/* Enable debugging if requested. */ -#if YYDEBUG +/* If nonreentrant, generate the variables here */ -# ifndef YYFPRINTF -# include /* INFRINGES ON USER NAME SPACE */ -# define YYFPRINTF fprintf -# endif - -# define YYDPRINTF(Args) \ -do { \ - if (yydebug) \ - YYFPRINTF Args; \ -} while (0) - -# define YYDSYMPRINT(Args) \ -do { \ - if (yydebug) \ - yysymprint Args; \ -} while (0) - -# define YYDSYMPRINTF(Title, Token, Value, Location) \ -do { \ - if (yydebug) \ - { \ - YYFPRINTF (stderr, "%s ", Title); \ - yysymprint (stderr, \ - Token, Value); \ - YYFPRINTF (stderr, "\n"); \ - } \ -} while (0) +#ifndef YYPURE -/*------------------------------------------------------------------. -| yy_stack_print -- Print the state stack from its BOTTOM up to its | -| TOP (included). | -`------------------------------------------------------------------*/ +int yychar; /* the lookahead symbol */ +YYSTYPE yylval; /* the semantic value of the */ + /* lookahead symbol */ -#if defined (__STDC__) || defined (__cplusplus) -static void -yy_stack_print (short *bottom, short *top) -#else -static void -yy_stack_print (bottom, top) - short *bottom; - short *top; +#ifdef YYLSP_NEEDED +YYLTYPE yylloc; /* location data for the lookahead */ + /* symbol */ #endif -{ - YYFPRINTF (stderr, "Stack now"); - for (/* Nothing. */; 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 (0) +int yynerrs; /* number of parse errors so far */ +#endif /* not YYPURE */ -/*------------------------------------------------. -| Report that the YYRULE is going to be reduced. | -`------------------------------------------------*/ - -#if defined (__STDC__) || defined (__cplusplus) -static void -yy_reduce_print (int yyrule) -#else -static void -yy_reduce_print (yyrule) - 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 yyi; - unsigned int yylno = yyrline[yyrule]; - YYFPRINTF (stderr, "Reducing stack by rule %d (line %u), ", - yyrule - 1, yylno); - /* Print the symbols being reduced, and their result. */ - for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++) - YYFPRINTF (stderr, "%s ", yytname [yyrhs[yyi]]); - YYFPRINTF (stderr, "-> %s\n", yytname [yyr1[yyrule]]); -} - -# define YY_REDUCE_PRINT(Rule) \ -do { \ - if (yydebug) \ - yy_reduce_print (Rule); \ -} while (0) - -/* Nonzero means print parse trace. It is left uninitialized so that - multiple parsers can coexist. */ -int yydebug; -#else /* !YYDEBUG */ -# define YYDPRINTF(Args) -# define YYDSYMPRINT(Args) -# define YYDSYMPRINTF(Title, Token, 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). - - Do not make this value too large; the results are undefined if - SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH) - evaluated with infinite-precision integer arithmetic. */ +/* YYMAXDEPTH is the maximum size the stacks can grow to + (effective only if the built-in stack extension method is used). */ -#if defined (YYMAXDEPTH) && YYMAXDEPTH == 0 -# undef YYMAXDEPTH +#if YYMAXDEPTH == 0 +#undef YYMAXDEPTH #endif #ifndef YYMAXDEPTH -# define YYMAXDEPTH 10000 +#define YYMAXDEPTH 10000 #endif - - - -#if YYERROR_VERBOSE - -# ifndef yystrlen -# if defined (__GLIBC__) && defined (_STRING_H) -# define yystrlen strlen -# else -/* Return the length of YYSTR. */ -static YYSIZE_T -# if defined (__STDC__) || defined (__cplusplus) -yystrlen (const char *yystr) -# else -yystrlen (yystr) - const char *yystr; -# endif -{ - register const char *yys = yystr; - - while (*yys++ != '\0') - continue; - - return yys - yystr - 1; -} -# 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. */ -static char * -# if defined (__STDC__) || defined (__cplusplus) -yystpcpy (char *yydest, const char *yysrc) -# else -yystpcpy (yydest, yysrc) - char *yydest; - const char *yysrc; -# endif -{ - register char *yyd = yydest; - register const char *yys = yysrc; - - while ((*yyd++ = *yys++) != '\0') - continue; - - return yyd - 1; -} -# endif -# endif - -#endif /* !YYERROR_VERBOSE */ - +/* 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 YYDEBUG -/*--------------------------------. -| Print this symbol on YYOUTPUT. | -`--------------------------------*/ - -#if defined (__STDC__) || defined (__cplusplus) -static void -yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep) -#else +/* This is the most reliable way to avoid incompatibilities + in available built-in functions on various systems. */ static void -yysymprint (yyoutput, yytype, yyvaluep) - FILE *yyoutput; - int yytype; - YYSTYPE *yyvaluep; -#endif +__yy_memcpy (to, from, count) + char *to; + char *from; + unsigned int count; { - /* Pacify ``unused variable'' warnings. */ - (void) yyvaluep; - - if (yytype < YYNTOKENS) - { - YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); -# ifdef YYPRINT - YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); -# endif - } - else - YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); + register char *f = from; + register char *t = to; + register int i = count; - switch (yytype) - { - default: - break; - } - YYFPRINTF (yyoutput, ")"); + while (i-- > 0) + *t++ = *f++; } -#endif /* ! YYDEBUG */ -/*-----------------------------------------------. -| Release the memory associated to this symbol. | -`-----------------------------------------------*/ +#else /* __cplusplus */ -#if defined (__STDC__) || defined (__cplusplus) -static void -yydestruct (int yytype, YYSTYPE *yyvaluep) -#else +/* This is the most reliable way to avoid incompatibilities + in available built-in functions on various systems. */ static void -yydestruct (yytype, yyvaluep) - int yytype; - YYSTYPE *yyvaluep; -#endif +__yy_memcpy (char *to, char *from, unsigned int count) { - /* Pacify ``unused variable'' warnings. */ - (void) yyvaluep; - - switch (yytype) - { + register char *t = to; + register char *f = from; + register int i = count; - default: - break; - } + while (i-- > 0) + *t++ = *f++; } - - -/* Prevent warnings from -Wmissing-prototypes. */ -#ifdef YYPARSE_PARAM -# if defined (__STDC__) || defined (__cplusplus) -int yyparse (void *YYPARSE_PARAM); -# else -int yyparse (); -# endif -#else /* ! YYPARSE_PARAM */ -#if defined (__STDC__) || defined (__cplusplus) -int yyparse (void); -#else -int yyparse (); #endif -#endif /* ! YYPARSE_PARAM */ - - - -/* The lookahead symbol. */ -int yychar; - -/* The semantic value of the lookahead symbol. */ -YYSTYPE yylval; - -/* Number of syntax errors so far. */ -int yynerrs; - +#endif + +#line 217 "/usr/share/bison.simple" +/* 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. */ -/*----------. -| yyparse. | -`----------*/ +#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 */ +/* Prevent warning if -Wstrict-prototypes. */ +#ifdef __GNUC__ #ifdef YYPARSE_PARAM -# if defined (__STDC__) || defined (__cplusplus) -int yyparse (void *YYPARSE_PARAM) -# else -int yyparse (YYPARSE_PARAM) - void *YYPARSE_PARAM; -# endif -#else /* ! YYPARSE_PARAM */ -#if defined (__STDC__) || defined (__cplusplus) -int -yyparse (void) +int yyparse (void *); #else -int -yyparse () - +int yyparse (void); #endif #endif + +int +yyparse(YYPARSE_PARAM_ARG) + YYPARSE_PARAM_DECL { - register int yystate; register int yyn; - int yyresult; - /* Number of tokens to shift before error messages enabled. */ - int yyerrstatus; - /* Lookahead token as an internal (translated) token number. */ - int yytoken = 0; - - /* 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. */ - short yyssa[YYINITDEPTH]; - short *yyss = yyssa; register short *yyssp; - - /* The semantic value stack. */ - YYSTYPE yyvsa[YYINITDEPTH]; - YYSTYPE *yyvs = yyvsa; 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 #define YYPOPSTACK (yyvsp--, yyssp--) +#endif - YYSIZE_T yystacksize = YYINITDEPTH; + int yystacksize = YYINITDEPTH; + int yyfree_stacks = 0; - /* The variables used to return semantic value and location from the - action routines. */ - YYSTYPE yyval; +#ifdef YYPURE + int yychar; + YYSTYPE yylval; + int yynerrs; +#ifdef YYLSP_NEEDED + YYLTYPE yylloc; +#endif +#endif + YYSTYPE yyval; /* the variable used to return */ + /* semantic values from the action */ + /* routines */ - /* When reducing, the number of symbols on the RHS of the reduced - rule. */ int yylen; - YYDPRINTF ((stderr, "Starting parse\n")); +#if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Starting parse\n"); +#endif yystate = 0; yyerrstatus = 0; @@ -3654,96 +3071,110 @@ 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++; - - yysetstate: - *yyssp = yystate; +/* 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: + + *++yyssp = yystate; + + 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 - if (yyss + yystacksize - 1 <= yyssp) - { /* 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; - short *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 ("parser stack overflow", - &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 yyoverflowlab; -# else /* Extend the stack our own way. */ - if (YYMAXDEPTH <= yystacksize) - goto yyoverflowlab; + 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; - - { - short *yyss1 = yyss; - union yyalloc *yyptr = - (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); - if (! yyptr) - goto yyoverflowlab; - 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. */ @@ -3752,471 +3183,444 @@ /* First try to decide what to do without reference to lookahead token. */ yyn = yypact[yystate]; - if (yyn == YYPACT_NINF) + if (yyn == YYFLAG) goto yydefault; /* Not known => get a lookahead token if don't already have one. */ - /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ + /* yychar is either YYEMPTY or YYEOF + or a valid token in external form. */ + 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); - YYDSYMPRINTF ("Next token is", yytoken, &yylval, &yylloc); + yychar1 = YYTRANSLATE(yychar); + +#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 } - /* 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) + yyn += yychar1; + if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1) goto yydefault; + yyn = yytable[yyn]; - if (yyn <= 0) + + /* 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; /* Shift the lookahead token. */ - YYDPRINTF ((stderr, "Shifting token %s, ", yytname[yytoken])); + +#if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]); +#endif /* Discard the token being shifted unless it is eof. */ if (yychar != YYEOF) yychar = YYEMPTY; *++yyvsp = yylval; +#ifdef YYLSP_NEEDED + *++yylsp = yylloc; +#endif - - /* Count tokens shifted since error; after three, turn off error - status. */ - if (yyerrstatus) - yyerrstatus--; + /* 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 YYDEBUG != 0 + if (yydebug) + { + int i; - /* If YYLEN is nonzero, implement the default value of the action: - `$$ = $1'. + fprintf (stderr, "Reducing via rule %d (line %d), ", + yyn, yyrline[yyn]); - 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]; + /* 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 - YY_REDUCE_PRINT (yyn); - switch (yyn) - { - case 3: -#line 1891 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + switch (yyn) { + +case 2: +#line 1895 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ if (yyvsp[0].UIntVal > (uint32_t)INT32_MAX) // Outside of my range! error("Value too large for type"); yyval.SIntVal = (int32_t)yyvsp[0].UIntVal; - ;} - break; - - case 5: -#line 1900 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 4: +#line 1904 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ if (yyvsp[0].UInt64Val > (uint64_t)INT64_MAX) // Outside of my range! error("Value too large for type"); yyval.SInt64Val = (int64_t)yyvsp[0].UInt64Val; - ;} - break; - - case 26: -#line 1922 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { yyval.IPred = ICmpInst::ICMP_EQ; ;} - break; - - case 27: -#line 1922 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { yyval.IPred = ICmpInst::ICMP_NE; ;} - break; - - case 28: -#line 1923 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { yyval.IPred = ICmpInst::ICMP_SLT; ;} - break; - - case 29: -#line 1923 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { yyval.IPred = ICmpInst::ICMP_SGT; ;} - break; - - case 30: -#line 1924 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { yyval.IPred = ICmpInst::ICMP_SLE; ;} - break; - - case 31: -#line 1924 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { yyval.IPred = ICmpInst::ICMP_SGE; ;} - break; - - case 32: -#line 1925 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { yyval.IPred = ICmpInst::ICMP_ULT; ;} - break; - - case 33: -#line 1925 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { yyval.IPred = ICmpInst::ICMP_UGT; ;} - break; - - case 34: -#line 1926 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { yyval.IPred = ICmpInst::ICMP_ULE; ;} - break; - - case 35: -#line 1926 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { yyval.IPred = ICmpInst::ICMP_UGE; ;} - break; - - case 36: -#line 1930 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { yyval.FPred = FCmpInst::FCMP_OEQ; ;} - break; - - case 37: -#line 1930 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { yyval.FPred = FCmpInst::FCMP_ONE; ;} - break; - - case 38: -#line 1931 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { yyval.FPred = FCmpInst::FCMP_OLT; ;} - break; - - case 39: -#line 1931 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { yyval.FPred = FCmpInst::FCMP_OGT; ;} - break; - - case 40: -#line 1932 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { yyval.FPred = FCmpInst::FCMP_OLE; ;} - break; - - case 41: -#line 1932 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { yyval.FPred = FCmpInst::FCMP_OGE; ;} - break; - - case 42: -#line 1933 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { yyval.FPred = FCmpInst::FCMP_ORD; ;} - break; - - case 43: -#line 1933 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { yyval.FPred = FCmpInst::FCMP_UNO; ;} - break; - - case 44: -#line 1934 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { yyval.FPred = FCmpInst::FCMP_UEQ; ;} - break; - - case 45: -#line 1934 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { yyval.FPred = FCmpInst::FCMP_UNE; ;} - break; - - case 46: -#line 1935 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { yyval.FPred = FCmpInst::FCMP_ULT; ;} - break; - - case 47: -#line 1935 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { yyval.FPred = FCmpInst::FCMP_UGT; ;} - break; - - case 48: -#line 1936 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { yyval.FPred = FCmpInst::FCMP_ULE; ;} - break; - - case 49: -#line 1936 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { yyval.FPred = FCmpInst::FCMP_UGE; ;} - break; - - case 50: -#line 1937 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { yyval.FPred = FCmpInst::FCMP_TRUE; ;} - break; - - case 51: -#line 1938 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { yyval.FPred = FCmpInst::FCMP_FALSE; ;} - break; - - case 81: -#line 1969 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 25: +#line 1926 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.IPred = ICmpInst::ICMP_EQ; ; + break;} +case 26: +#line 1926 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.IPred = ICmpInst::ICMP_NE; ; + break;} +case 27: +#line 1927 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.IPred = ICmpInst::ICMP_SLT; ; + break;} +case 28: +#line 1927 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.IPred = ICmpInst::ICMP_SGT; ; + break;} +case 29: +#line 1928 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.IPred = ICmpInst::ICMP_SLE; ; + break;} +case 30: +#line 1928 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.IPred = ICmpInst::ICMP_SGE; ; + break;} +case 31: +#line 1929 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.IPred = ICmpInst::ICMP_ULT; ; + break;} +case 32: +#line 1929 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.IPred = ICmpInst::ICMP_UGT; ; + break;} +case 33: +#line 1930 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.IPred = ICmpInst::ICMP_ULE; ; + break;} +case 34: +#line 1930 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.IPred = ICmpInst::ICMP_UGE; ; + break;} +case 35: +#line 1934 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.FPred = FCmpInst::FCMP_OEQ; ; + break;} +case 36: +#line 1934 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.FPred = FCmpInst::FCMP_ONE; ; + break;} +case 37: +#line 1935 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.FPred = FCmpInst::FCMP_OLT; ; + break;} +case 38: +#line 1935 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.FPred = FCmpInst::FCMP_OGT; ; + break;} +case 39: +#line 1936 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.FPred = FCmpInst::FCMP_OLE; ; + break;} +case 40: +#line 1936 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.FPred = FCmpInst::FCMP_OGE; ; + break;} +case 41: +#line 1937 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.FPred = FCmpInst::FCMP_ORD; ; + break;} +case 42: +#line 1937 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.FPred = FCmpInst::FCMP_UNO; ; + break;} +case 43: +#line 1938 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.FPred = FCmpInst::FCMP_UEQ; ; + break;} +case 44: +#line 1938 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.FPred = FCmpInst::FCMP_UNE; ; + break;} +case 45: +#line 1939 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.FPred = FCmpInst::FCMP_ULT; ; + break;} +case 46: +#line 1939 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.FPred = FCmpInst::FCMP_UGT; ; + break;} +case 47: +#line 1940 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.FPred = FCmpInst::FCMP_ULE; ; + break;} +case 48: +#line 1940 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.FPred = FCmpInst::FCMP_UGE; ; + break;} +case 49: +#line 1941 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.FPred = FCmpInst::FCMP_TRUE; ; + break;} +case 50: +#line 1942 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.FPred = FCmpInst::FCMP_FALSE; ; + break;} +case 80: +#line 1973 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.StrVal = yyvsp[-1].StrVal; - ;} - break; - - case 82: -#line 1972 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 81: +#line 1976 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.StrVal = 0; - ;} - break; - - case 83: -#line 1977 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { yyval.Linkage = GlobalValue::InternalLinkage; ;} - break; - - case 84: -#line 1978 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { yyval.Linkage = GlobalValue::LinkOnceLinkage; ;} - break; - - case 85: -#line 1979 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { yyval.Linkage = GlobalValue::WeakLinkage; ;} - break; - - case 86: -#line 1980 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { yyval.Linkage = GlobalValue::AppendingLinkage; ;} - break; - - case 87: -#line 1981 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { yyval.Linkage = GlobalValue::DLLImportLinkage; ;} - break; - - case 88: -#line 1982 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { yyval.Linkage = GlobalValue::DLLExportLinkage; ;} - break; - - case 89: -#line 1983 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { yyval.Linkage = GlobalValue::ExternalWeakLinkage; ;} - break; - - case 90: -#line 1984 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { yyval.Linkage = GlobalValue::ExternalLinkage; ;} - break; - - case 91: -#line 1988 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { yyval.UIntVal = lastCallingConv = OldCallingConv::C; ;} - break; - - case 92: -#line 1989 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { yyval.UIntVal = lastCallingConv = OldCallingConv::C; ;} - break; - - case 93: -#line 1990 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { yyval.UIntVal = lastCallingConv = OldCallingConv::CSRet; ;} - break; - - case 94: -#line 1991 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { yyval.UIntVal = lastCallingConv = OldCallingConv::Fast; ;} - break; - - case 95: -#line 1992 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { yyval.UIntVal = lastCallingConv = OldCallingConv::Cold; ;} - break; - - case 96: -#line 1993 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { yyval.UIntVal = lastCallingConv = OldCallingConv::X86_StdCall; ;} - break; - - case 97: -#line 1994 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { yyval.UIntVal = lastCallingConv = OldCallingConv::X86_FastCall; ;} - break; - - case 98: -#line 1995 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 82: +#line 1981 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.Linkage = GlobalValue::InternalLinkage; ; + break;} +case 83: +#line 1982 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.Linkage = GlobalValue::LinkOnceLinkage; ; + break;} +case 84: +#line 1983 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.Linkage = GlobalValue::WeakLinkage; ; + break;} +case 85: +#line 1984 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.Linkage = GlobalValue::AppendingLinkage; ; + break;} +case 86: +#line 1985 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.Linkage = GlobalValue::DLLImportLinkage; ; + break;} +case 87: +#line 1986 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.Linkage = GlobalValue::DLLExportLinkage; ; + break;} +case 88: +#line 1987 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.Linkage = GlobalValue::ExternalWeakLinkage; ; + break;} +case 89: +#line 1988 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.Linkage = GlobalValue::ExternalLinkage; ; + break;} +case 90: +#line 1992 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.UIntVal = lastCallingConv = OldCallingConv::C; ; + break;} +case 91: +#line 1993 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.UIntVal = lastCallingConv = OldCallingConv::C; ; + break;} +case 92: +#line 1994 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.UIntVal = lastCallingConv = OldCallingConv::CSRet; ; + break;} +case 93: +#line 1995 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.UIntVal = lastCallingConv = OldCallingConv::Fast; ; + break;} +case 94: +#line 1996 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.UIntVal = lastCallingConv = OldCallingConv::Cold; ; + break;} +case 95: +#line 1997 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.UIntVal = lastCallingConv = OldCallingConv::X86_StdCall; ; + break;} +case 96: +#line 1998 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.UIntVal = lastCallingConv = OldCallingConv::X86_FastCall; ; + break;} +case 97: +#line 1999 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ if ((unsigned)yyvsp[0].UInt64Val != yyvsp[0].UInt64Val) error("Calling conv too large"); yyval.UIntVal = lastCallingConv = yyvsp[0].UInt64Val; - ;} - break; - - case 99: -#line 2005 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { yyval.UIntVal = 0; ;} - break; - - case 100: -#line 2006 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 98: +#line 2009 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.UIntVal = 0; ; + break;} +case 99: +#line 2010 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.UIntVal = yyvsp[0].UInt64Val; if (yyval.UIntVal != 0 && !isPowerOf2_32(yyval.UIntVal)) error("Alignment must be a power of two"); - ;} - break; - - case 101: -#line 2014 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { yyval.UIntVal = 0; ;} - break; - - case 102: -#line 2015 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 100: +#line 2018 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.UIntVal = 0; ; + break;} +case 101: +#line 2019 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.UIntVal = yyvsp[0].UInt64Val; if (yyval.UIntVal != 0 && !isPowerOf2_32(yyval.UIntVal)) error("Alignment must be a power of two"); - ;} - break; - - case 103: -#line 2023 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 102: +#line 2027 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ for (unsigned i = 0, e = strlen(yyvsp[0].StrVal); i != e; ++i) if (yyvsp[0].StrVal[i] == '"' || yyvsp[0].StrVal[i] == '\\') error("Invalid character in section name"); yyval.StrVal = yyvsp[0].StrVal; - ;} - break; - - case 104: -#line 2032 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { yyval.StrVal = 0; ;} - break; - - case 105: -#line 2033 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { yyval.StrVal = yyvsp[0].StrVal; ;} - break; - - case 106: -#line 2040 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - {;} - break; - - case 107: -#line 2041 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - {;} - break; - - case 108: -#line 2045 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 103: +#line 2036 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.StrVal = 0; ; + break;} +case 104: +#line 2037 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.StrVal = yyvsp[0].StrVal; ; + break;} +case 105: +#line 2044 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{; + break;} +case 106: +#line 2045 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{; + break;} +case 107: +#line 2049 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ CurGV->setSection(yyvsp[0].StrVal); free(yyvsp[0].StrVal); - ;} - break; - - case 109: -#line 2049 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 108: +#line 2053 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ if (yyvsp[0].UInt64Val != 0 && !isPowerOf2_32(yyvsp[0].UInt64Val)) error("Alignment must be a power of two"); CurGV->setAlignment(yyvsp[0].UInt64Val); - ;} - break; - - case 111: -#line 2066 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 110: +#line 2070 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.TypeVal.PAT = new PATypeHolder(yyvsp[0].PrimType.T); yyval.TypeVal.S.makeSignless(); - ;} - break; - - case 113: -#line 2074 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 112: +#line 2078 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.TypeVal.PAT = new PATypeHolder(yyvsp[0].PrimType.T); yyval.TypeVal.S.makeSignless(); - ;} - break; - - case 114: -#line 2081 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 113: +#line 2085 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ if (!UpRefs.empty()) error("Invalid upreference in type: " + (*yyvsp[0].TypeVal.PAT)->getDescription()); yyval.TypeVal = yyvsp[0].TypeVal; - ;} - break; - - case 127: -#line 2095 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 126: +#line 2099 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.TypeVal.PAT = new PATypeHolder(yyvsp[0].PrimType.T); yyval.TypeVal.S.copy(yyvsp[0].PrimType.S); - ;} - break; - - case 128: -#line 2099 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 127: +#line 2103 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.TypeVal.PAT = new PATypeHolder(OpaqueType::get()); yyval.TypeVal.S.makeSignless(); - ;} - break; - - case 129: -#line 2103 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { // Named types are also simple types... + ; + break;} +case 128: +#line 2107 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ // Named types are also simple types... yyval.TypeVal.S.copy(getTypeSign(yyvsp[0].ValIDVal)); const Type* tmp = getType(yyvsp[0].ValIDVal); yyval.TypeVal.PAT = new PATypeHolder(tmp); - ;} - break; - - case 130: -#line 2108 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { // Type UpReference + ; + break;} +case 129: +#line 2112 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ // Type UpReference if (yyvsp[0].UInt64Val > (uint64_t)~0U) error("Value out of range"); OpaqueType *OT = OpaqueType::get(); // Use temporary placeholder @@ -4224,12 +3628,11 @@ yyval.TypeVal.PAT = new PATypeHolder(OT); yyval.TypeVal.S.makeSignless(); UR_OUT("New Upreference!\n"); - ;} - break; - - case 131: -#line 2117 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { // Function derived type? + ; + break;} +case 130: +#line 2121 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ // Function derived type? yyval.TypeVal.S.makeComposite(yyvsp[-3].TypeVal.S); std::vector Params; for (std::list::iterator I = yyvsp[-1].TypeList->begin(), @@ -4255,22 +3658,20 @@ yyval.TypeVal.PAT = new PATypeHolder( HandleUpRefs(FTy, yyval.TypeVal.S) ); delete yyvsp[-3].TypeVal.PAT; // Delete the return type handle delete yyvsp[-1].TypeList; // Delete the argument list - ;} - break; - - case 132: -#line 2144 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { // Sized array type? + ; + break;} +case 131: +#line 2148 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ // Sized array type? yyval.TypeVal.S.makeComposite(yyvsp[-1].TypeVal.S); yyval.TypeVal.PAT = new PATypeHolder(HandleUpRefs(ArrayType::get(yyvsp[-1].TypeVal.PAT->get(), (unsigned)yyvsp[-3].UInt64Val), yyval.TypeVal.S)); delete yyvsp[-1].TypeVal.PAT; - ;} - break; - - case 133: -#line 2150 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { // Vector type? + ; + break;} +case 132: +#line 2154 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ // Vector type? const llvm::Type* ElemTy = yyvsp[-1].TypeVal.PAT->get(); if ((unsigned)yyvsp[-3].UInt64Val != yyvsp[-3].UInt64Val) error("Unsigned result not equal to signed result"); @@ -4282,12 +3683,11 @@ yyval.TypeVal.PAT = new PATypeHolder(HandleUpRefs(VectorType::get(ElemTy, (unsigned)yyvsp[-3].UInt64Val), yyval.TypeVal.S)); delete yyvsp[-1].TypeVal.PAT; - ;} - break; - - case 134: -#line 2163 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { // Structure type? + ; + break;} +case 133: +#line 2167 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ // Structure type? std::vector Elements; yyval.TypeVal.S.makeComposite(); for (std::list::iterator I = yyvsp[-1].TypeList->begin(), @@ -4297,20 +3697,18 @@ } yyval.TypeVal.PAT = new PATypeHolder(HandleUpRefs(StructType::get(Elements), yyval.TypeVal.S)); delete yyvsp[-1].TypeList; - ;} - break; - - case 135: -#line 2174 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { // Empty structure type? + ; + break;} +case 134: +#line 2178 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ // Empty structure type? yyval.TypeVal.PAT = new PATypeHolder(StructType::get(std::vector())); yyval.TypeVal.S.makeComposite(); - ;} - break; - - case 136: -#line 2178 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { // Packed Structure type? + ; + break;} +case 135: +#line 2182 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ // Packed Structure type? yyval.TypeVal.S.makeComposite(); std::vector Elements; for (std::list::iterator I = yyvsp[-2].TypeList->begin(), @@ -4322,75 +3720,67 @@ yyval.TypeVal.PAT = new PATypeHolder(HandleUpRefs(StructType::get(Elements, true), yyval.TypeVal.S)); delete yyvsp[-2].TypeList; - ;} - break; - - case 137: -#line 2191 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { // Empty packed structure type? + ; + break;} +case 136: +#line 2195 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ // Empty packed structure type? yyval.TypeVal.PAT = new PATypeHolder(StructType::get(std::vector(),true)); yyval.TypeVal.S.makeComposite(); - ;} - break; - - case 138: -#line 2195 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { // Pointer type? + ; + break;} +case 137: +#line 2199 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ // Pointer type? if (yyvsp[-1].TypeVal.PAT->get() == Type::LabelTy) error("Cannot form a pointer to a basic block"); yyval.TypeVal.S.makeComposite(yyvsp[-1].TypeVal.S); yyval.TypeVal.PAT = new PATypeHolder(HandleUpRefs(PointerType::get(yyvsp[-1].TypeVal.PAT->get()), yyval.TypeVal.S)); delete yyvsp[-1].TypeVal.PAT; - ;} - break; - - case 139: -#line 2209 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 138: +#line 2213 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.TypeList = new std::list(); yyval.TypeList->push_back(yyvsp[0].TypeVal); - ;} - break; - - case 140: -#line 2213 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 139: +#line 2217 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ (yyval.TypeList=yyvsp[-2].TypeList)->push_back(yyvsp[0].TypeVal); - ;} - break; - - case 142: -#line 2221 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 141: +#line 2225 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ PATypeInfo VoidTI; VoidTI.PAT = new PATypeHolder(Type::VoidTy); VoidTI.S.makeSignless(); (yyval.TypeList=yyvsp[-2].TypeList)->push_back(VoidTI); - ;} - break; - - case 143: -#line 2227 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 142: +#line 2231 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.TypeList = new std::list(); PATypeInfo VoidTI; VoidTI.PAT = new PATypeHolder(Type::VoidTy); VoidTI.S.makeSignless(); yyval.TypeList->push_back(VoidTI); - ;} - break; - - case 144: -#line 2234 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 143: +#line 2238 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.TypeList = new std::list(); - ;} - break; - - case 145: -#line 2246 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { // Nonempty unsized arr + ; + break;} +case 144: +#line 2250 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ // Nonempty unsized arr const ArrayType *ATy = dyn_cast(yyvsp[-3].TypeVal.PAT->get()); if (ATy == 0) error("Cannot make array constant with type: '" + @@ -4419,12 +3809,11 @@ yyval.ConstVal.S.copy(yyvsp[-3].TypeVal.S); delete yyvsp[-3].TypeVal.PAT; delete yyvsp[-1].ConstVector; - ;} - break; - - case 146: -#line 2276 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 145: +#line 2280 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ const ArrayType *ATy = dyn_cast(yyvsp[-2].TypeVal.PAT->get()); if (ATy == 0) error("Cannot make array constant with type: '" + @@ -4436,12 +3825,11 @@ yyval.ConstVal.C = ConstantArray::get(ATy, std::vector()); yyval.ConstVal.S.copy(yyvsp[-2].TypeVal.S); delete yyvsp[-2].TypeVal.PAT; - ;} - break; - - case 147: -#line 2289 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 146: +#line 2293 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ const ArrayType *ATy = dyn_cast(yyvsp[-2].TypeVal.PAT->get()); if (ATy == 0) error("Cannot make array constant with type: '" + @@ -4463,12 +3851,11 @@ yyval.ConstVal.C = ConstantArray::get(ATy, Vals); yyval.ConstVal.S.copy(yyvsp[-2].TypeVal.S); delete yyvsp[-2].TypeVal.PAT; - ;} - break; - - case 148: -#line 2312 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { // Nonempty unsized arr + ; + break;} +case 147: +#line 2316 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ // Nonempty unsized arr const VectorType *PTy = dyn_cast(yyvsp[-3].TypeVal.PAT->get()); if (PTy == 0) error("Cannot make packed constant with type: '" + @@ -4495,12 +3882,11 @@ yyval.ConstVal.S.copy(yyvsp[-3].TypeVal.S); delete yyvsp[-3].TypeVal.PAT; delete yyvsp[-1].ConstVector; - ;} - break; - - case 149: -#line 2340 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 148: +#line 2344 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ const StructType *STy = dyn_cast(yyvsp[-3].TypeVal.PAT->get()); if (STy == 0) error("Cannot make struct constant with type: '" + @@ -4521,12 +3907,11 @@ yyval.ConstVal.S.copy(yyvsp[-3].TypeVal.S); delete yyvsp[-3].TypeVal.PAT; delete yyvsp[-1].ConstVector; - ;} - break; - - case 150: -#line 2362 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 149: +#line 2366 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ const StructType *STy = dyn_cast(yyvsp[-2].TypeVal.PAT->get()); if (STy == 0) error("Cannot make struct constant with type: '" + @@ -4536,12 +3921,11 @@ yyval.ConstVal.C = ConstantStruct::get(STy, std::vector()); yyval.ConstVal.S.copy(yyvsp[-2].TypeVal.S); delete yyvsp[-2].TypeVal.PAT; - ;} - break; - - case 151: -#line 2373 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 150: +#line 2377 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ const StructType *STy = dyn_cast(yyvsp[-5].TypeVal.PAT->get()); if (STy == 0) error("Cannot make packed struct constant with type: '" + @@ -4562,12 +3946,11 @@ yyval.ConstVal.S.copy(yyvsp[-5].TypeVal.S); delete yyvsp[-5].TypeVal.PAT; delete yyvsp[-2].ConstVector; - ;} - break; - - case 152: -#line 2395 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 151: +#line 2399 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ const StructType *STy = dyn_cast(yyvsp[-4].TypeVal.PAT->get()); if (STy == 0) error("Cannot make packed struct constant with type: '" + @@ -4577,12 +3960,11 @@ yyval.ConstVal.C = ConstantStruct::get(STy, std::vector()); yyval.ConstVal.S.copy(yyvsp[-4].TypeVal.S); delete yyvsp[-4].TypeVal.PAT; - ;} - break; - - case 153: -#line 2406 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 152: +#line 2410 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ const PointerType *PTy = dyn_cast(yyvsp[-1].TypeVal.PAT->get()); if (PTy == 0) error("Cannot make null pointer constant with type: '" + @@ -4590,21 +3972,19 @@ yyval.ConstVal.C = ConstantPointerNull::get(PTy); yyval.ConstVal.S.copy(yyvsp[-1].TypeVal.S); delete yyvsp[-1].TypeVal.PAT; - ;} - break; - - case 154: -#line 2415 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 153: +#line 2419 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.ConstVal.C = UndefValue::get(yyvsp[-1].TypeVal.PAT->get()); yyval.ConstVal.S.copy(yyvsp[-1].TypeVal.S); delete yyvsp[-1].TypeVal.PAT; - ;} - break; - - case 155: -#line 2420 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 154: +#line 2424 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ const PointerType *Ty = dyn_cast(yyvsp[-1].TypeVal.PAT->get()); if (Ty == 0) error("Global const reference must be a pointer type, not" + @@ -4662,83 +4042,80 @@ yyval.ConstVal.C = cast(V); yyval.ConstVal.S.copy(yyvsp[-1].TypeVal.S); delete yyvsp[-1].TypeVal.PAT; // Free the type handle - ;} - break; - - case 156: -#line 2479 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 155: +#line 2483 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ if (yyvsp[-1].TypeVal.PAT->get() != yyvsp[0].ConstVal.C->getType()) error("Mismatched types for constant expression"); yyval.ConstVal = yyvsp[0].ConstVal; yyval.ConstVal.S.copy(yyvsp[-1].TypeVal.S); delete yyvsp[-1].TypeVal.PAT; - ;} - break; - - case 157: -#line 2486 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 156: +#line 2490 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ const Type *Ty = yyvsp[-1].TypeVal.PAT->get(); if (isa(Ty) || Ty == Type::LabelTy || isa(Ty)) error("Cannot create a null initialized value of this type"); yyval.ConstVal.C = Constant::getNullValue(Ty); yyval.ConstVal.S.copy(yyvsp[-1].TypeVal.S); delete yyvsp[-1].TypeVal.PAT; - ;} - break; - - case 158: -#line 2494 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { // integral constants + ; + break;} +case 157: +#line 2498 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ // integral constants const Type *Ty = yyvsp[-1].PrimType.T; if (!ConstantInt::isValueValidForType(Ty, yyvsp[0].SInt64Val)) error("Constant value doesn't fit in type"); yyval.ConstVal.C = ConstantInt::get(Ty, yyvsp[0].SInt64Val); yyval.ConstVal.S.makeSigned(); - ;} - break; - - case 159: -#line 2501 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { // integral constants + ; + break;} +case 158: +#line 2505 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ // integral constants const Type *Ty = yyvsp[-1].PrimType.T; if (!ConstantInt::isValueValidForType(Ty, yyvsp[0].UInt64Val)) error("Constant value doesn't fit in type"); yyval.ConstVal.C = ConstantInt::get(Ty, yyvsp[0].UInt64Val); yyval.ConstVal.S.makeUnsigned(); - ;} - break; - - case 160: -#line 2508 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { // Boolean constants + ; + break;} +case 159: +#line 2512 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ // Boolean constants yyval.ConstVal.C = ConstantInt::get(Type::Int1Ty, true); yyval.ConstVal.S.makeUnsigned(); - ;} - break; - - case 161: -#line 2512 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { // Boolean constants + ; + break;} +case 160: +#line 2516 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ // Boolean constants yyval.ConstVal.C = ConstantInt::get(Type::Int1Ty, false); yyval.ConstVal.S.makeUnsigned(); - ;} - break; - - case 162: -#line 2516 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { // Float & Double constants - if (!ConstantFP::isValueValidForType(yyvsp[-1].PrimType.T, yyvsp[0].FPVal)) + ; + break;} +case 161: +#line 2520 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ // Float & Double constants + if (!ConstantFP::isValueValidForType(yyvsp[-1].PrimType.T, *yyvsp[0].FPVal)) error("Floating point constant invalid for type"); - yyval.ConstVal.C = ConstantFP::get(yyvsp[-1].PrimType.T, yyvsp[0].FPVal); + // Lexer has no type info, so builds all FP constants as double. + // Fix this here. + if (yyvsp[-1].PrimType.T==Type::FloatTy) + yyvsp[0].FPVal->convert(APFloat::IEEEsingle, APFloat::rmNearestTiesToEven); + yyval.ConstVal.C = ConstantFP::get(yyvsp[-1].PrimType.T, *yyvsp[0].FPVal); + delete yyvsp[0].FPVal; yyval.ConstVal.S.makeSignless(); - ;} - break; - - case 163: -#line 2525 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 162: +#line 2534 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ const Type* SrcTy = yyvsp[-3].ConstVal.C->getType(); const Type* DstTy = yyvsp[-1].TypeVal.PAT->get(); Signedness SrcSign(yyvsp[-3].ConstVal.S); @@ -4752,12 +4129,11 @@ yyval.ConstVal.C = cast(getCast(yyvsp[-5].CastOpVal, yyvsp[-3].ConstVal.C, SrcSign, DstTy, DstSign)); yyval.ConstVal.S.copy(DstSign); delete yyvsp[-1].TypeVal.PAT; - ;} - break; - - case 164: -#line 2540 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 163: +#line 2549 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ const Type *Ty = yyvsp[-2].ConstVal.C->getType(); if (!isa(Ty)) error("GetElementPtr requires a pointer operand"); @@ -4768,12 +4144,11 @@ delete yyvsp[-1].ValueList; yyval.ConstVal.C = ConstantExpr::getGetElementPtr(yyvsp[-2].ConstVal.C, &CIndices[0], CIndices.size()); yyval.ConstVal.S.copy(getElementSign(yyvsp[-2].ConstVal, CIndices)); - ;} - break; - - case 165: -#line 2552 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 164: +#line 2561 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ if (!yyvsp[-5].ConstVal.C->getType()->isInteger() || cast(yyvsp[-5].ConstVal.C->getType())->getBitWidth() != 1) error("Select condition must be bool type"); @@ -4781,12 +4156,11 @@ error("Select operand types must match"); yyval.ConstVal.C = ConstantExpr::getSelect(yyvsp[-5].ConstVal.C, yyvsp[-3].ConstVal.C, yyvsp[-1].ConstVal.C); yyval.ConstVal.S.copy(yyvsp[-3].ConstVal.S); - ;} - break; - - case 166: -#line 2561 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 165: +#line 2570 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ const Type *Ty = yyvsp[-3].ConstVal.C->getType(); if (Ty != yyvsp[-1].ConstVal.C->getType()) error("Binary operator types must match"); @@ -4813,12 +4187,11 @@ yyval.ConstVal.C = ConstantExpr::getCast(Instruction::IntToPtr, yyval.ConstVal.C, Ty); } yyval.ConstVal.S.copy(yyvsp[-3].ConstVal.S); - ;} - break; - - case 167: -#line 2589 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 166: +#line 2598 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ const Type* Ty = yyvsp[-3].ConstVal.C->getType(); if (Ty != yyvsp[-1].ConstVal.C->getType()) error("Logical operator types must match"); @@ -4830,12 +4203,11 @@ Instruction::BinaryOps Opcode = getBinaryOp(yyvsp[-5].BinaryOpVal, Ty, yyvsp[-3].ConstVal.S); yyval.ConstVal.C = ConstantExpr::get(Opcode, yyvsp[-3].ConstVal.C, yyvsp[-1].ConstVal.C); yyval.ConstVal.S.copy(yyvsp[-3].ConstVal.S); - ;} - break; - - case 168: -#line 2602 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 167: +#line 2611 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ const Type* Ty = yyvsp[-3].ConstVal.C->getType(); if (Ty != yyvsp[-1].ConstVal.C->getType()) error("setcc operand types must match"); @@ -4843,32 +4215,29 @@ Instruction::OtherOps Opcode = getCompareOp(yyvsp[-5].BinaryOpVal, pred, Ty, yyvsp[-3].ConstVal.S); yyval.ConstVal.C = ConstantExpr::getCompare(Opcode, yyvsp[-3].ConstVal.C, yyvsp[-1].ConstVal.C); yyval.ConstVal.S.makeUnsigned(); - ;} - break; - - case 169: -#line 2611 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 168: +#line 2620 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ if (yyvsp[-3].ConstVal.C->getType() != yyvsp[-1].ConstVal.C->getType()) error("icmp operand types must match"); yyval.ConstVal.C = ConstantExpr::getCompare(yyvsp[-5].IPred, yyvsp[-3].ConstVal.C, yyvsp[-1].ConstVal.C); yyval.ConstVal.S.makeUnsigned(); - ;} - break; - - case 170: -#line 2617 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 169: +#line 2626 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ if (yyvsp[-3].ConstVal.C->getType() != yyvsp[-1].ConstVal.C->getType()) error("fcmp operand types must match"); yyval.ConstVal.C = ConstantExpr::getCompare(yyvsp[-5].FPred, yyvsp[-3].ConstVal.C, yyvsp[-1].ConstVal.C); yyval.ConstVal.S.makeUnsigned(); - ;} - break; - - case 171: -#line 2623 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 170: +#line 2632 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ if (!yyvsp[-1].ConstVal.C->getType()->isInteger() || cast(yyvsp[-1].ConstVal.C->getType())->getBitWidth() != 8) error("Shift count for shift constant must be unsigned byte"); @@ -4878,93 +4247,80 @@ Constant *ShiftAmt = ConstantExpr::getZExt(yyvsp[-1].ConstVal.C, Ty); yyval.ConstVal.C = ConstantExpr::get(getBinaryOp(yyvsp[-5].BinaryOpVal, Ty, yyvsp[-3].ConstVal.S), yyvsp[-3].ConstVal.C, ShiftAmt); yyval.ConstVal.S.copy(yyvsp[-3].ConstVal.S); - ;} - break; - - case 172: -#line 2634 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 171: +#line 2643 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ if (!ExtractElementInst::isValidOperands(yyvsp[-3].ConstVal.C, yyvsp[-1].ConstVal.C)) error("Invalid extractelement operands"); yyval.ConstVal.C = ConstantExpr::getExtractElement(yyvsp[-3].ConstVal.C, yyvsp[-1].ConstVal.C); yyval.ConstVal.S.copy(yyvsp[-3].ConstVal.S.get(0)); - ;} - break; - - case 173: -#line 2640 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 172: +#line 2649 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ if (!InsertElementInst::isValidOperands(yyvsp[-5].ConstVal.C, yyvsp[-3].ConstVal.C, yyvsp[-1].ConstVal.C)) error("Invalid insertelement operands"); yyval.ConstVal.C = ConstantExpr::getInsertElement(yyvsp[-5].ConstVal.C, yyvsp[-3].ConstVal.C, yyvsp[-1].ConstVal.C); yyval.ConstVal.S.copy(yyvsp[-5].ConstVal.S); - ;} - break; - - case 174: -#line 2646 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 173: +#line 2655 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ if (!ShuffleVectorInst::isValidOperands(yyvsp[-5].ConstVal.C, yyvsp[-3].ConstVal.C, yyvsp[-1].ConstVal.C)) error("Invalid shufflevector operands"); yyval.ConstVal.C = ConstantExpr::getShuffleVector(yyvsp[-5].ConstVal.C, yyvsp[-3].ConstVal.C, yyvsp[-1].ConstVal.C); yyval.ConstVal.S.copy(yyvsp[-5].ConstVal.S); - ;} - break; - - case 175: -#line 2657 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.ConstVector = yyvsp[-2].ConstVector)->push_back(yyvsp[0].ConstVal); ;} - break; - - case 176: -#line 2658 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 174: +#line 2666 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ (yyval.ConstVector = yyvsp[-2].ConstVector)->push_back(yyvsp[0].ConstVal); ; + break;} +case 175: +#line 2667 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.ConstVector = new std::vector(); yyval.ConstVector->push_back(yyvsp[0].ConstVal); - ;} - break; - - case 177: -#line 2667 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { yyval.BoolVal = false; ;} - break; - - case 178: -#line 2668 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { yyval.BoolVal = true; ;} - break; - - case 179: -#line 2680 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 176: +#line 2676 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.BoolVal = false; ; + break;} +case 177: +#line 2677 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.BoolVal = true; ; + break;} +case 178: +#line 2689 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.ModuleVal = ParserResult = yyvsp[0].ModuleVal; CurModule.ModuleDone(); - ;} - break; - - case 180: -#line 2689 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { yyval.ModuleVal = yyvsp[-1].ModuleVal; CurFun.FunctionDone(); ;} - break; - - case 181: -#line 2690 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { yyval.ModuleVal = yyvsp[-1].ModuleVal; ;} - break; - - case 182: -#line 2691 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { yyval.ModuleVal = yyvsp[-3].ModuleVal; ;} - break; - - case 183: -#line 2692 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { yyval.ModuleVal = yyvsp[-1].ModuleVal; ;} - break; - - case 184: -#line 2693 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 179: +#line 2698 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.ModuleVal = yyvsp[-1].ModuleVal; CurFun.FunctionDone(); ; + break;} +case 180: +#line 2699 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.ModuleVal = yyvsp[-1].ModuleVal; ; + break;} +case 181: +#line 2700 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.ModuleVal = yyvsp[-3].ModuleVal; ; + break;} +case 182: +#line 2701 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.ModuleVal = yyvsp[-1].ModuleVal; ; + break;} +case 183: +#line 2702 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.ModuleVal = CurModule.CurrentModule; // Emit an error if there are any unresolved types left. if (!CurModule.LateResolveTypes.empty()) { @@ -4975,12 +4331,11 @@ error("Reference to an undefined type: #" + itostr(DID.Num)); } } - ;} - break; - - case 185: -#line 2709 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 184: +#line 2718 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ // Eagerly resolve types. This is not an optimization, this is a // requirement that is due to the fact that we could have this: // @@ -4999,110 +4354,96 @@ CurModule.TypeSigns.push_back(yyvsp[0].TypeVal.S); } delete yyvsp[0].TypeVal.PAT; - ;} - break; - - case 186: -#line 2729 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { // Function prototypes can be in const pool - ;} - break; - - case 187: -#line 2731 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { // Asm blocks can be in the const pool - ;} - break; - - case 188: -#line 2733 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 185: +#line 2738 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ // Function prototypes can be in const pool + ; + break;} +case 186: +#line 2740 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ // Asm blocks can be in the const pool + ; + break;} +case 187: +#line 2742 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ if (yyvsp[0].ConstVal.C == 0) error("Global value initializer is not a constant"); CurGV = ParseGlobalVariable(yyvsp[-3].StrVal, yyvsp[-2].Linkage, yyvsp[-1].BoolVal, yyvsp[0].ConstVal.C->getType(), yyvsp[0].ConstVal.C, yyvsp[0].ConstVal.S); - ;} - break; - - case 189: -#line 2737 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 188: +#line 2746 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ CurGV = 0; - ;} - break; - - case 190: -#line 2740 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 189: +#line 2749 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ const Type *Ty = yyvsp[0].TypeVal.PAT->get(); CurGV = ParseGlobalVariable(yyvsp[-3].StrVal, GlobalValue::ExternalLinkage, yyvsp[-1].BoolVal, Ty, 0, yyvsp[0].TypeVal.S); delete yyvsp[0].TypeVal.PAT; - ;} - break; - - case 191: -#line 2745 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 190: +#line 2754 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ CurGV = 0; - ;} - break; - - case 192: -#line 2748 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 191: +#line 2757 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ const Type *Ty = yyvsp[0].TypeVal.PAT->get(); CurGV = ParseGlobalVariable(yyvsp[-3].StrVal, GlobalValue::DLLImportLinkage, yyvsp[-1].BoolVal, Ty, 0, yyvsp[0].TypeVal.S); delete yyvsp[0].TypeVal.PAT; - ;} - break; - - case 193: -#line 2753 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 192: +#line 2762 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ CurGV = 0; - ;} - break; - - case 194: -#line 2756 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 193: +#line 2765 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ const Type *Ty = yyvsp[0].TypeVal.PAT->get(); CurGV = ParseGlobalVariable(yyvsp[-3].StrVal, GlobalValue::ExternalWeakLinkage, yyvsp[-1].BoolVal, Ty, 0, yyvsp[0].TypeVal.S); delete yyvsp[0].TypeVal.PAT; - ;} - break; - - case 195: -#line 2762 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 194: +#line 2771 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ CurGV = 0; - ;} - break; - - case 196: -#line 2765 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { - ;} - break; - - case 197: -#line 2767 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { - ;} - break; - - case 198: -#line 2769 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { - ;} - break; - - case 199: -#line 2774 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 195: +#line 2774 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ + ; + break;} +case 196: +#line 2776 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ + ; + break;} +case 197: +#line 2778 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ + ; + break;} +case 198: +#line 2783 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ const std::string &AsmSoFar = CurModule.CurrentModule->getModuleInlineAsm(); char *EndStr = UnEscapeLexed(yyvsp[0].StrVal, true); std::string NewAsm(yyvsp[0].StrVal, EndStr); @@ -5112,142 +4453,124 @@ CurModule.CurrentModule->setModuleInlineAsm(NewAsm); else CurModule.CurrentModule->setModuleInlineAsm(AsmSoFar+"\n"+NewAsm); - ;} - break; - - case 200: -#line 2788 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { yyval.Endianness = Module::BigEndian; ;} - break; - - case 201: -#line 2789 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { yyval.Endianness = Module::LittleEndian; ;} - break; - - case 202: -#line 2793 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 199: +#line 2797 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.Endianness = Module::BigEndian; ; + break;} +case 200: +#line 2798 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.Endianness = Module::LittleEndian; ; + break;} +case 201: +#line 2802 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ CurModule.setEndianness(yyvsp[0].Endianness); - ;} - break; - - case 203: -#line 2796 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 202: +#line 2805 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ if (yyvsp[0].UInt64Val == 32) CurModule.setPointerSize(Module::Pointer32); else if (yyvsp[0].UInt64Val == 64) CurModule.setPointerSize(Module::Pointer64); else error("Invalid pointer size: '" + utostr(yyvsp[0].UInt64Val) + "'"); - ;} - break; - - case 204: -#line 2804 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 203: +#line 2813 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ CurModule.CurrentModule->setTargetTriple(yyvsp[0].StrVal); free(yyvsp[0].StrVal); - ;} - break; - - case 205: -#line 2808 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 204: +#line 2817 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ CurModule.CurrentModule->setDataLayout(yyvsp[0].StrVal); free(yyvsp[0].StrVal); - ;} - break; - - case 207: -#line 2819 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 206: +#line 2828 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ CurModule.CurrentModule->addLibrary(yyvsp[0].StrVal); free(yyvsp[0].StrVal); - ;} - break; - - case 208: -#line 2823 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 207: +#line 2832 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ CurModule.CurrentModule->addLibrary(yyvsp[0].StrVal); free(yyvsp[0].StrVal); - ;} - break; - - case 209: -#line 2827 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { ;} - break; - - case 213: -#line 2840 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { yyval.StrVal = 0; ;} - break; - - case 214: -#line 2844 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 208: +#line 2836 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ ; + break;} +case 212: +#line 2849 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.StrVal = 0; ; + break;} +case 213: +#line 2853 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ if (yyvsp[-1].TypeVal.PAT->get() == Type::VoidTy) error("void typed arguments are invalid"); yyval.ArgVal = new std::pair(yyvsp[-1].TypeVal, yyvsp[0].StrVal); - ;} - break; - - case 215: -#line 2852 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 214: +#line 2861 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.ArgList = yyvsp[-2].ArgList; yyval.ArgList->push_back(*yyvsp[0].ArgVal); delete yyvsp[0].ArgVal; - ;} - break; - - case 216: -#line 2857 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 215: +#line 2866 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.ArgList = new std::vector >(); yyval.ArgList->push_back(*yyvsp[0].ArgVal); delete yyvsp[0].ArgVal; - ;} - break; - - case 217: -#line 2865 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { yyval.ArgList = yyvsp[0].ArgList; ;} - break; - - case 218: -#line 2866 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 216: +#line 2874 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.ArgList = yyvsp[0].ArgList; ; + break;} +case 217: +#line 2875 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.ArgList = yyvsp[-2].ArgList; PATypeInfo VoidTI; VoidTI.PAT = new PATypeHolder(Type::VoidTy); VoidTI.S.makeSignless(); yyval.ArgList->push_back(std::pair(VoidTI, 0)); - ;} - break; - - case 219: -#line 2873 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 218: +#line 2882 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.ArgList = new std::vector >(); PATypeInfo VoidTI; VoidTI.PAT = new PATypeHolder(Type::VoidTy); VoidTI.S.makeSignless(); yyval.ArgList->push_back(std::pair(VoidTI, 0)); - ;} - break; - - case 220: -#line 2880 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { yyval.ArgList = 0; ;} - break; - - case 221: -#line 2884 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 219: +#line 2889 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.ArgList = 0; ; + break;} +case 220: +#line 2893 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ UnEscapeLexed(yyvsp[-5].StrVal); std::string FunctionName(yyvsp[-5].StrVal); free(yyvsp[-5].StrVal); // Free strdup'd memory! @@ -5433,125 +4756,105 @@ delete yyvsp[-3].ArgList; // We're now done with the argument list } lastCallingConv = OldCallingConv::C; - ;} - break; - - case 224: -#line 3078 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { CurFun.Linkage = yyvsp[0].Linkage; ;} - break; - - case 225: -#line 3078 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 223: +#line 3087 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ CurFun.Linkage = yyvsp[0].Linkage; ; + break;} +case 224: +#line 3087 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.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); - ;} - break; - - case 228: -#line 3092 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 227: +#line 3101 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.FunctionVal = yyvsp[-1].FunctionVal; - ;} - break; - - case 229: -#line 3097 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { yyval.Linkage = GlobalValue::ExternalLinkage; ;} - break; - - case 230: -#line 3098 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { yyval.Linkage = GlobalValue::DLLImportLinkage; ;} - break; - - case 231: -#line 3099 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { yyval.Linkage = GlobalValue::ExternalWeakLinkage; ;} - break; - - case 232: -#line 3103 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { CurFun.isDeclare = true; ;} - break; - - case 233: -#line 3104 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { CurFun.Linkage = yyvsp[0].Linkage; ;} - break; - - case 234: -#line 3104 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 228: +#line 3106 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.Linkage = GlobalValue::ExternalLinkage; ; + break;} +case 229: +#line 3107 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.Linkage = GlobalValue::DLLImportLinkage; ; + break;} +case 230: +#line 3108 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.Linkage = GlobalValue::ExternalWeakLinkage; ; + break;} +case 231: +#line 3112 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ CurFun.isDeclare = true; ; + break;} +case 232: +#line 3113 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ CurFun.Linkage = yyvsp[0].Linkage; ; + break;} +case 233: +#line 3113 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.FunctionVal = CurFun.CurrentFunction; CurFun.FunctionDone(); - ;} - break; - - case 235: -#line 3116 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { yyval.BoolVal = false; ;} - break; - - case 236: -#line 3117 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { yyval.BoolVal = true; ;} - break; - - case 237: -#line 3122 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { yyval.ValIDVal = ValID::create(yyvsp[0].SInt64Val); ;} - break; - - case 238: -#line 3123 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { yyval.ValIDVal = ValID::create(yyvsp[0].UInt64Val); ;} - break; - - case 239: -#line 3124 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { yyval.ValIDVal = ValID::create(yyvsp[0].FPVal); ;} - break; - - case 240: -#line 3125 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 234: +#line 3125 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.BoolVal = false; ; + break;} +case 235: +#line 3126 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.BoolVal = true; ; + break;} +case 236: +#line 3131 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.ValIDVal = ValID::create(yyvsp[0].SInt64Val); ; + break;} +case 237: +#line 3132 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.ValIDVal = ValID::create(yyvsp[0].UInt64Val); ; + break;} +case 238: +#line 3133 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.ValIDVal = ValID::create(yyvsp[0].FPVal); ; + break;} +case 239: +#line 3134 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.ValIDVal = ValID::create(ConstantInt::get(Type::Int1Ty, true)); yyval.ValIDVal.S.makeUnsigned(); - ;} - break; - - case 241: -#line 3129 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 240: +#line 3138 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.ValIDVal = ValID::create(ConstantInt::get(Type::Int1Ty, false)); yyval.ValIDVal.S.makeUnsigned(); - ;} - break; - - case 242: -#line 3133 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { yyval.ValIDVal = ValID::createNull(); ;} - break; - - case 243: -#line 3134 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { yyval.ValIDVal = ValID::createUndef(); ;} - break; - - case 244: -#line 3135 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { yyval.ValIDVal = ValID::createZeroInit(); ;} - break; - - case 245: -#line 3136 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { // Nonempty unsized packed vector + ; + break;} +case 241: +#line 3142 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.ValIDVal = ValID::createNull(); ; + break;} +case 242: +#line 3143 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.ValIDVal = ValID::createUndef(); ; + break;} +case 243: +#line 3144 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.ValIDVal = ValID::createZeroInit(); ; + break;} +case 244: +#line 3145 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ // Nonempty unsized packed vector const Type *ETy = (*yyvsp[-1].ConstVector)[0].C->getType(); int NumElements = yyvsp[-1].ConstVector->size(); VectorType* pt = VectorType::get(ETy, NumElements); @@ -5571,20 +4874,18 @@ } yyval.ValIDVal = ValID::create(ConstantVector::get(pt, Elems)); delete PTy; delete yyvsp[-1].ConstVector; - ;} - break; - - case 246: -#line 3157 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 245: +#line 3166 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.ValIDVal = ValID::create(yyvsp[0].ConstVal.C); yyval.ValIDVal.S.copy(yyvsp[0].ConstVal.S); - ;} - break; - - case 247: -#line 3161 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 246: +#line 3170 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ char *End = UnEscapeLexed(yyvsp[-2].StrVal, true); std::string AsmStr = std::string(yyvsp[-2].StrVal, End); End = UnEscapeLexed(yyvsp[0].StrVal, true); @@ -5592,68 +4893,60 @@ yyval.ValIDVal = ValID::createInlineAsm(AsmStr, Constraints, yyvsp[-3].BoolVal); free(yyvsp[-2].StrVal); free(yyvsp[0].StrVal); - ;} - break; - - case 248: -#line 3175 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { yyval.ValIDVal = ValID::create(yyvsp[0].SIntVal); yyval.ValIDVal.S.makeSignless(); ;} - break; - - case 249: -#line 3176 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { yyval.ValIDVal = ValID::create(yyvsp[0].StrVal); yyval.ValIDVal.S.makeSignless(); ;} - break; - - case 252: -#line 3189 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 247: +#line 3184 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.ValIDVal = ValID::create(yyvsp[0].SIntVal); yyval.ValIDVal.S.makeSignless(); ; + break;} +case 248: +#line 3185 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.ValIDVal = ValID::create(yyvsp[0].StrVal); yyval.ValIDVal.S.makeSignless(); ; + break;} +case 251: +#line 3198 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ const Type *Ty = yyvsp[-1].TypeVal.PAT->get(); yyvsp[0].ValIDVal.S.copy(yyvsp[-1].TypeVal.S); yyval.ValueVal.V = getVal(Ty, yyvsp[0].ValIDVal); yyval.ValueVal.S.copy(yyvsp[-1].TypeVal.S); delete yyvsp[-1].TypeVal.PAT; - ;} - break; - - case 253: -#line 3199 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 252: +#line 3208 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.FunctionVal = yyvsp[-1].FunctionVal; - ;} - break; - - case 254: -#line 3202 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { // Do not allow functions with 0 basic blocks + ; + break;} +case 253: +#line 3211 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ // Do not allow functions with 0 basic blocks yyval.FunctionVal = yyvsp[-1].FunctionVal; - ;} - break; - - case 255: -#line 3211 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 254: +#line 3220 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ ValueInfo VI; VI.V = yyvsp[0].TermInstVal.TI; VI.S.copy(yyvsp[0].TermInstVal.S); setValueName(VI, yyvsp[-1].StrVal); InsertValue(yyvsp[0].TermInstVal.TI); yyvsp[-2].BasicBlockVal->getInstList().push_back(yyvsp[0].TermInstVal.TI); InsertValue(yyvsp[-2].BasicBlockVal); yyval.BasicBlockVal = yyvsp[-2].BasicBlockVal; - ;} - break; - - case 256: -#line 3222 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 255: +#line 3231 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ if (yyvsp[0].InstVal.I) yyvsp[-1].BasicBlockVal->getInstList().push_back(yyvsp[0].InstVal.I); yyval.BasicBlockVal = yyvsp[-1].BasicBlockVal; - ;} - break; - - case 257: -#line 3227 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 256: +#line 3236 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.BasicBlockVal = CurBB = getBBVal(ValID::create((int)CurFun.NextBBNum++),true); // Make sure to move the basic block to the correct location in the // function, instead of leaving it inserted wherever it was first @@ -5661,12 +4954,11 @@ Function::BasicBlockListType &BBL = CurFun.CurrentFunction->getBasicBlockList(); BBL.splice(BBL.end(), BBL, yyval.BasicBlockVal); - ;} - break; - - case 258: -#line 3236 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 257: +#line 3245 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.BasicBlockVal = CurBB = getBBVal(ValID::create(yyvsp[0].StrVal), true); // Make sure to move the basic block to the correct location in the // function, instead of leaving it inserted wherever it was first @@ -5674,37 +4966,33 @@ Function::BasicBlockListType &BBL = CurFun.CurrentFunction->getBasicBlockList(); BBL.splice(BBL.end(), BBL, yyval.BasicBlockVal); - ;} - break; - - case 261: -#line 3250 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { // Return with a result... + ; + break;} +case 260: +#line 3259 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ // Return with a result... yyval.TermInstVal.TI = new ReturnInst(yyvsp[0].ValueVal.V); yyval.TermInstVal.S.makeSignless(); - ;} - break; - - case 262: -#line 3254 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { // Return with no result... + ; + break;} +case 261: +#line 3263 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ // Return with no result... yyval.TermInstVal.TI = new ReturnInst(); yyval.TermInstVal.S.makeSignless(); - ;} - break; - - case 263: -#line 3258 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { // Unconditional Branch... + ; + break;} +case 262: +#line 3267 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ // Unconditional Branch... BasicBlock* tmpBB = getBBVal(yyvsp[0].ValIDVal); yyval.TermInstVal.TI = new BranchInst(tmpBB); yyval.TermInstVal.S.makeSignless(); - ;} - break; - - case 264: -#line 3263 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 263: +#line 3272 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyvsp[-3].ValIDVal.S.makeSignless(); yyvsp[0].ValIDVal.S.makeSignless(); BasicBlock* tmpBBA = getBBVal(yyvsp[-3].ValIDVal); @@ -5713,12 +5001,11 @@ Value* tmpVal = getVal(Type::Int1Ty, yyvsp[-6].ValIDVal); yyval.TermInstVal.TI = new BranchInst(tmpBBA, tmpBBB, tmpVal); yyval.TermInstVal.S.makeSignless(); - ;} - break; - - case 265: -#line 3273 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 264: +#line 3282 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyvsp[-6].ValIDVal.S.copy(yyvsp[-7].PrimType.S); Value* tmpVal = getVal(yyvsp[-7].PrimType.T, yyvsp[-6].ValIDVal); yyvsp[-3].ValIDVal.S.makeSignless(); @@ -5735,12 +5022,11 @@ error("Switch case is constant, but not a simple integer"); } delete yyvsp[-1].JumpTable; - ;} - break; - - case 266: -#line 3291 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 265: +#line 3300 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyvsp[-5].ValIDVal.S.copy(yyvsp[-6].PrimType.S); Value* tmpVal = getVal(yyvsp[-6].PrimType.T, yyvsp[-5].ValIDVal); yyvsp[-2].ValIDVal.S.makeSignless(); @@ -5748,12 +5034,11 @@ SwitchInst *S = new SwitchInst(tmpVal, tmpBB, 0); yyval.TermInstVal.TI = S; yyval.TermInstVal.S.makeSignless(); - ;} - break; - - case 267: -#line 3301 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 266: +#line 3310 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ const PointerType *PFTy; const FunctionType *Ty; Signedness FTySign; @@ -5825,28 +5110,25 @@ delete yyvsp[-10].TypeVal.PAT; delete yyvsp[-7].ValueList; lastCallingConv = OldCallingConv::C; - ;} - break; - - case 268: -#line 3374 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 267: +#line 3383 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.TermInstVal.TI = new UnwindInst(); yyval.TermInstVal.S.makeSignless(); - ;} - break; - - case 269: -#line 3378 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 268: +#line 3387 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.TermInstVal.TI = new UnreachableInst(); yyval.TermInstVal.S.makeSignless(); - ;} - break; - - case 270: -#line 3385 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 269: +#line 3394 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.JumpTable = yyvsp[-5].JumpTable; yyvsp[-3].ValIDVal.S.copy(yyvsp[-4].PrimType.S); Constant *V = cast(getExistingValue(yyvsp[-4].PrimType.T, yyvsp[-3].ValIDVal)); @@ -5857,12 +5139,11 @@ yyvsp[0].ValIDVal.S.makeSignless(); BasicBlock* tmpBB = getBBVal(yyvsp[0].ValIDVal); yyval.JumpTable->push_back(std::make_pair(V, tmpBB)); - ;} - break; - - case 271: -#line 3397 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 270: +#line 3406 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.JumpTable = new std::vector >(); yyvsp[-3].ValIDVal.S.copy(yyvsp[-4].PrimType.S); Constant *V = cast(getExistingValue(yyvsp[-4].PrimType.T, yyvsp[-3].ValIDVal)); @@ -5873,12 +5154,11 @@ yyvsp[0].ValIDVal.S.makeSignless(); BasicBlock* tmpBB = getBBVal(yyvsp[0].ValIDVal); yyval.JumpTable->push_back(std::make_pair(V, tmpBB)); - ;} - break; - - case 272: -#line 3412 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 271: +#line 3421 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ bool omit = false; if (yyvsp[-1].StrVal) if (BitCastInst *BCI = dyn_cast(yyvsp[0].InstVal.I)) @@ -5906,12 +5186,11 @@ InsertValue(yyvsp[0].InstVal.I); yyval.InstVal = yyvsp[0].InstVal; } - ;} - break; - - case 273: -#line 3442 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { // Used for PHI nodes + ; + break;} +case 272: +#line 3451 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ // Used for PHI nodes yyval.PHIList.P = new std::list >(); yyval.PHIList.S.copy(yyvsp[-5].TypeVal.S); yyvsp[-3].ValIDVal.S.copy(yyvsp[-5].TypeVal.S); @@ -5920,59 +5199,52 @@ BasicBlock* tmpBB = getBBVal(yyvsp[-1].ValIDVal); yyval.PHIList.P->push_back(std::make_pair(tmpVal, tmpBB)); delete yyvsp[-5].TypeVal.PAT; - ;} - break; - - case 274: -#line 3452 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 273: +#line 3461 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.PHIList = yyvsp[-6].PHIList; yyvsp[-3].ValIDVal.S.copy(yyvsp[-6].PHIList.S); Value* tmpVal = getVal(yyvsp[-6].PHIList.P->front().first->getType(), yyvsp[-3].ValIDVal); yyvsp[-1].ValIDVal.S.makeSignless(); BasicBlock* tmpBB = getBBVal(yyvsp[-1].ValIDVal); yyvsp[-6].PHIList.P->push_back(std::make_pair(tmpVal, tmpBB)); - ;} - break; - - case 275: -#line 3462 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { // Used for call statements, and memory insts... + ; + break;} +case 274: +#line 3471 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ // Used for call statements, and memory insts... yyval.ValueList = new std::vector(); yyval.ValueList->push_back(yyvsp[0].ValueVal); - ;} - break; - - case 276: -#line 3466 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 275: +#line 3475 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.ValueList = yyvsp[-2].ValueList; yyvsp[-2].ValueList->push_back(yyvsp[0].ValueVal); - ;} - break; - - case 278: -#line 3474 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { yyval.ValueList = 0; ;} - break; - - case 279: -#line 3478 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 277: +#line 3483 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.ValueList = 0; ; + break;} +case 278: +#line 3487 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.BoolVal = true; - ;} - break; - - case 280: -#line 3481 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 279: +#line 3490 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.BoolVal = false; - ;} - break; - - case 281: -#line 3487 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 280: +#line 3496 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyvsp[-2].ValIDVal.S.copy(yyvsp[-3].TypeVal.S); yyvsp[0].ValIDVal.S.copy(yyvsp[-3].TypeVal.S); const Type* Ty = yyvsp[-3].TypeVal.PAT->get(); @@ -5990,12 +5262,11 @@ error("binary operator returned null"); yyval.InstVal.S.copy(yyvsp[-3].TypeVal.S); delete yyvsp[-3].TypeVal.PAT; - ;} - break; - - case 282: -#line 3506 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 281: +#line 3515 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyvsp[-2].ValIDVal.S.copy(yyvsp[-3].TypeVal.S); yyvsp[0].ValIDVal.S.copy(yyvsp[-3].TypeVal.S); const Type *Ty = yyvsp[-3].TypeVal.PAT->get(); @@ -6012,12 +5283,11 @@ error("binary operator returned null"); yyval.InstVal.S.copy(yyvsp[-3].TypeVal.S); delete yyvsp[-3].TypeVal.PAT; - ;} - break; - - case 283: -#line 3524 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 282: +#line 3533 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyvsp[-2].ValIDVal.S.copy(yyvsp[-3].TypeVal.S); yyvsp[0].ValIDVal.S.copy(yyvsp[-3].TypeVal.S); const Type* Ty = yyvsp[-3].TypeVal.PAT->get(); @@ -6032,12 +5302,11 @@ error("binary operator returned null"); yyval.InstVal.S.makeUnsigned(); delete yyvsp[-3].TypeVal.PAT; - ;} - break; - - case 284: -#line 3540 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 283: +#line 3549 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyvsp[-2].ValIDVal.S.copy(yyvsp[-3].TypeVal.S); yyvsp[0].ValIDVal.S.copy(yyvsp[-3].TypeVal.S); const Type *Ty = yyvsp[-3].TypeVal.PAT->get(); @@ -6050,12 +5319,11 @@ yyval.InstVal.I = new ICmpInst(yyvsp[-4].IPred, tmpVal1, tmpVal2); yyval.InstVal.S.makeUnsigned(); delete yyvsp[-3].TypeVal.PAT; - ;} - break; - - case 285: -#line 3554 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 284: +#line 3563 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyvsp[-2].ValIDVal.S.copy(yyvsp[-3].TypeVal.S); yyvsp[0].ValIDVal.S.copy(yyvsp[-3].TypeVal.S); const Type *Ty = yyvsp[-3].TypeVal.PAT->get(); @@ -6068,12 +5336,11 @@ yyval.InstVal.I = new FCmpInst(yyvsp[-4].FPred, tmpVal1, tmpVal2); yyval.InstVal.S.makeUnsigned(); delete yyvsp[-3].TypeVal.PAT; - ;} - break; - - case 286: -#line 3568 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 285: +#line 3577 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ warning("Use of obsolete 'not' instruction: Replacing with 'xor"); const Type *Ty = yyvsp[0].ValueVal.V->getType(); Value *Ones = ConstantInt::getAllOnesValue(Ty); @@ -6083,12 +5350,11 @@ if (yyval.InstVal.I == 0) error("Could not create a xor instruction"); yyval.InstVal.S.copy(yyvsp[0].ValueVal.S); - ;} - break; - - case 287: -#line 3579 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 286: +#line 3588 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ if (!yyvsp[0].ValueVal.V->getType()->isInteger() || cast(yyvsp[0].ValueVal.V->getType())->getBitWidth() != 8) error("Shift amount must be int8"); @@ -6105,12 +5371,11 @@ ShiftAmt = yyvsp[0].ValueVal.V; yyval.InstVal.I = BinaryOperator::create(getBinaryOp(yyvsp[-3].BinaryOpVal, Ty, yyvsp[-2].ValueVal.S), yyvsp[-2].ValueVal.V, ShiftAmt); yyval.InstVal.S.copy(yyvsp[-2].ValueVal.S); - ;} - break; - - case 288: -#line 3597 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 287: +#line 3606 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ const Type *DstTy = yyvsp[0].TypeVal.PAT->get(); if (!DstTy->isFirstClassType()) error("cast instruction to a non-primitive type: '" + @@ -6118,12 +5383,11 @@ yyval.InstVal.I = cast(getCast(yyvsp[-3].CastOpVal, yyvsp[-2].ValueVal.V, yyvsp[-2].ValueVal.S, DstTy, yyvsp[0].TypeVal.S, true)); yyval.InstVal.S.copy(yyvsp[0].TypeVal.S); delete yyvsp[0].TypeVal.PAT; - ;} - break; - - case 289: -#line 3606 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 288: +#line 3615 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ if (!yyvsp[-4].ValueVal.V->getType()->isInteger() || cast(yyvsp[-4].ValueVal.V->getType())->getBitWidth() != 1) error("select condition must be bool"); @@ -6131,23 +5395,21 @@ error("select value types should match"); yyval.InstVal.I = new SelectInst(yyvsp[-4].ValueVal.V, yyvsp[-2].ValueVal.V, yyvsp[0].ValueVal.V); yyval.InstVal.S.copy(yyvsp[-2].ValueVal.S); - ;} - break; - - case 290: -#line 3615 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 289: +#line 3624 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ const Type *Ty = yyvsp[0].TypeVal.PAT->get(); NewVarArgs = true; yyval.InstVal.I = new VAArgInst(yyvsp[-2].ValueVal.V, Ty); yyval.InstVal.S.copy(yyvsp[0].TypeVal.S); delete yyvsp[0].TypeVal.PAT; - ;} - break; - - case 291: -#line 3622 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 290: +#line 3631 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ const Type* ArgTy = yyvsp[-2].ValueVal.V->getType(); const Type* DstTy = yyvsp[0].TypeVal.PAT->get(); ObsoleteVarArgs = true; @@ -6167,12 +5429,11 @@ yyval.InstVal.I = new VAArgInst(foo, DstTy); yyval.InstVal.S.copy(yyvsp[0].TypeVal.S); delete yyvsp[0].TypeVal.PAT; - ;} - break; - - case 292: -#line 3643 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 291: +#line 3652 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ const Type* ArgTy = yyvsp[-2].ValueVal.V->getType(); const Type* DstTy = yyvsp[0].TypeVal.PAT->get(); ObsoleteVarArgs = true; @@ -6195,42 +5456,38 @@ yyval.InstVal.I = new LoadInst(foo); yyval.InstVal.S.copy(yyvsp[0].TypeVal.S); delete yyvsp[0].TypeVal.PAT; - ;} - break; - - case 293: -#line 3667 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 292: +#line 3676 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ if (!ExtractElementInst::isValidOperands(yyvsp[-2].ValueVal.V, yyvsp[0].ValueVal.V)) error("Invalid extractelement operands"); yyval.InstVal.I = new ExtractElementInst(yyvsp[-2].ValueVal.V, yyvsp[0].ValueVal.V); yyval.InstVal.S.copy(yyvsp[-2].ValueVal.S.get(0)); - ;} - break; - - case 294: -#line 3673 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 293: +#line 3682 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ if (!InsertElementInst::isValidOperands(yyvsp[-4].ValueVal.V, yyvsp[-2].ValueVal.V, yyvsp[0].ValueVal.V)) error("Invalid insertelement operands"); yyval.InstVal.I = new InsertElementInst(yyvsp[-4].ValueVal.V, yyvsp[-2].ValueVal.V, yyvsp[0].ValueVal.V); yyval.InstVal.S.copy(yyvsp[-4].ValueVal.S); - ;} - break; - - case 295: -#line 3679 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 294: +#line 3688 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ if (!ShuffleVectorInst::isValidOperands(yyvsp[-4].ValueVal.V, yyvsp[-2].ValueVal.V, yyvsp[0].ValueVal.V)) error("Invalid shufflevector operands"); yyval.InstVal.I = new ShuffleVectorInst(yyvsp[-4].ValueVal.V, yyvsp[-2].ValueVal.V, yyvsp[0].ValueVal.V); yyval.InstVal.S.copy(yyvsp[-4].ValueVal.S); - ;} - break; - - case 296: -#line 3685 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 295: +#line 3694 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ const Type *Ty = yyvsp[0].PHIList.P->front().first->getType(); if (!Ty->isFirstClassType()) error("PHI node operands must be of first class type"); @@ -6245,12 +5502,11 @@ yyval.InstVal.I = PHI; yyval.InstVal.S.copy(yyvsp[0].PHIList.S); delete yyvsp[0].PHIList.P; // Free the list... - ;} - break; - - case 297: -#line 3701 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 296: +#line 3710 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ // Handle the short call syntax const PointerType *PFTy; const FunctionType *FTy; @@ -6342,92 +5598,81 @@ delete yyvsp[-4].TypeVal.PAT; delete yyvsp[-1].ValueList; lastCallingConv = OldCallingConv::C; - ;} - break; - - case 298: -#line 3794 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 297: +#line 3803 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.InstVal = yyvsp[0].InstVal; - ;} - break; - - case 299: -#line 3802 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { yyval.ValueList = yyvsp[0].ValueList; ;} - break; - - case 300: -#line 3803 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { yyval.ValueList = new std::vector(); ;} - break; - - case 301: -#line 3807 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { yyval.BoolVal = true; ;} - break; - - case 302: -#line 3808 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { yyval.BoolVal = false; ;} - break; - - case 303: -#line 3812 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 298: +#line 3811 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.ValueList = yyvsp[0].ValueList; ; + break;} +case 299: +#line 3812 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.ValueList = new std::vector(); ; + break;} +case 300: +#line 3816 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.BoolVal = true; ; + break;} +case 301: +#line 3817 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyval.BoolVal = false; ; + break;} +case 302: +#line 3821 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ const Type *Ty = yyvsp[-1].TypeVal.PAT->get(); yyval.InstVal.S.makeComposite(yyvsp[-1].TypeVal.S); yyval.InstVal.I = new MallocInst(Ty, 0, yyvsp[0].UIntVal); delete yyvsp[-1].TypeVal.PAT; - ;} - break; - - case 304: -#line 3818 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 303: +#line 3827 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ const Type *Ty = yyvsp[-4].TypeVal.PAT->get(); yyvsp[-1].ValIDVal.S.makeUnsigned(); yyval.InstVal.S.makeComposite(yyvsp[-4].TypeVal.S); yyval.InstVal.I = new MallocInst(Ty, getVal(yyvsp[-2].PrimType.T, yyvsp[-1].ValIDVal), yyvsp[0].UIntVal); delete yyvsp[-4].TypeVal.PAT; - ;} - break; - - case 305: -#line 3825 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 304: +#line 3834 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ const Type *Ty = yyvsp[-1].TypeVal.PAT->get(); yyval.InstVal.S.makeComposite(yyvsp[-1].TypeVal.S); yyval.InstVal.I = new AllocaInst(Ty, 0, yyvsp[0].UIntVal); delete yyvsp[-1].TypeVal.PAT; - ;} - break; - - case 306: -#line 3831 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 305: +#line 3840 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ const Type *Ty = yyvsp[-4].TypeVal.PAT->get(); yyvsp[-1].ValIDVal.S.makeUnsigned(); yyval.InstVal.S.makeComposite(yyvsp[-2].PrimType.S); yyval.InstVal.I = new AllocaInst(Ty, getVal(yyvsp[-2].PrimType.T, yyvsp[-1].ValIDVal), yyvsp[0].UIntVal); delete yyvsp[-4].TypeVal.PAT; - ;} - break; - - case 307: -#line 3838 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 306: +#line 3847 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ const Type *PTy = yyvsp[0].ValueVal.V->getType(); if (!isa(PTy)) error("Trying to free nonpointer type '" + PTy->getDescription() + "'"); yyval.InstVal.I = new FreeInst(yyvsp[0].ValueVal.V); yyval.InstVal.S.makeSignless(); - ;} - break; - - case 308: -#line 3845 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 307: +#line 3854 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ const Type* Ty = yyvsp[-1].TypeVal.PAT->get(); yyvsp[0].ValIDVal.S.copy(yyvsp[-1].TypeVal.S); if (!isa(Ty)) @@ -6439,12 +5684,11 @@ yyval.InstVal.I = new LoadInst(tmpVal, "", yyvsp[-3].BoolVal); yyval.InstVal.S.copy(yyvsp[-1].TypeVal.S.get(0)); delete yyvsp[-1].TypeVal.PAT; - ;} - break; - - case 309: -#line 3858 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 308: +#line 3867 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyvsp[0].ValIDVal.S.copy(yyvsp[-1].TypeVal.S); const PointerType *PTy = dyn_cast(yyvsp[-1].TypeVal.PAT->get()); if (!PTy) @@ -6469,12 +5713,11 @@ yyval.InstVal.I = new StoreInst(StoreVal, tmpVal, yyvsp[-5].BoolVal); yyval.InstVal.S.makeSignless(); delete yyvsp[-1].TypeVal.PAT; - ;} - break; - - case 310: -#line 3884 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" - { + ; + break;} +case 309: +#line 3893 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" +{ yyvsp[-1].ValIDVal.S.copy(yyvsp[-2].TypeVal.S); const Type* Ty = yyvsp[-2].TypeVal.PAT->get(); if (!isa(Ty)) @@ -6489,239 +5732,231 @@ yyval.InstVal.S.copy(getElementSign(VI, VIndices)); delete yyvsp[-2].TypeVal.PAT; delete yyvsp[0].ValueList; - ;} - break; - - - } - -/* Line 993 of yacc.c. */ -#line 6500 "UpgradeParser.tab.c" + ; + 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 - - 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 + +#ifdef YYERROR_VERBOSE yyn = yypact[yystate]; - if (YYPACT_NINF < yyn && yyn < YYLAST) + if (yyn > YYFLAG && yyn < YYLAST) { - YYSIZE_T yysize = 0; - int yytype = YYTRANSLATE (yychar); - const char* yyprefix; - char *yymsg; - int yyx; - - /* 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; - int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; - int yycount = 0; - - yyprefix = ", expecting "; - for (yyx = yyxbegin; yyx < yyxend; ++yyx) - if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) - { - yysize += yystrlen (yyprefix) + yystrlen (yytname [yyx]); - yycount += 1; - if (yycount == 5) - { - yysize = 0; - break; - } - } - yysize += (sizeof ("syntax error, unexpected ") - + yystrlen (yytname[yytype])); - yymsg = (char *) YYSTACK_ALLOC (yysize); - if (yymsg != 0) + 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) { - char *yyp = yystpcpy (yymsg, "syntax error, unexpected "); - yyp = yystpcpy (yyp, yytname[yytype]); + strcpy(msg, "parse error"); - if (yycount < 5) + if (count < 5) { - yyprefix = ", expecting "; - for (yyx = yyxbegin; yyx < yyxend; ++yyx) - if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) + count = 0; + for (x = (yyn < 0 ? -yyn : 0); + x < (sizeof(yytname) / sizeof(char *)); x++) + if (yycheck[x + yyn] == x) { - yyp = yystpcpy (yyp, yyprefix); - yyp = yystpcpy (yyp, yytname[yyx]); - yyprefix = " or "; + strcat(msg, count == 0 ? ", expecting `" : " or `"); + strcat(msg, yytname[x]); + strcat(msg, "'"); + count++; } } - yyerror (yymsg); - YYSTACK_FREE (yymsg); + yyerror(msg); + free(msg); } else - yyerror ("syntax error; also virtual memory exhausted"); + yyerror ("parse error; also virtual memory exceeded"); } else #endif /* YYERROR_VERBOSE */ - yyerror ("syntax error"); + yyerror("parse error"); } - + 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. */ + /* if just tried and failed to reuse lookahead token after an error, discard it. */ - if (yychar <= YYEOF) - { - /* If at end of input, pop the error token, - then the rest of the stack, then return failure. */ - if (yychar == YYEOF) - for (;;) - { - YYPOPSTACK; - if (yyssp == yyss) - YYABORT; - YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp); - yydestruct (yystos[*yyssp], yyvsp); - } - } - else - { - YYDSYMPRINTF ("Error: discarding", yytoken, &yylval, &yylloc); - yydestruct (yytoken, &yylval); - yychar = YYEMPTY; + /* return failure if at end of input */ + if (yychar == YYEOF) + YYABORT; - } +#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. */ - goto yyerrlab1; + /* Else will try to reuse lookahead token + after shifting the error token. */ + yyerrstatus = 3; /* Each real token shifted decrements this */ -/*---------------------------------------------------. -| yyerrorlab -- error raised explicitly by YYERROR. | -`---------------------------------------------------*/ -yyerrorlab: + goto yyerrhandle; -#ifdef __GNUC__ - /* Pacify GCC when the user code never invokes YYERROR and the label - yyerrorlab therefore never appears in user code. */ - if (0) - goto yyerrorlab; -#endif +yyerrdefault: /* current state does not do anything special for the error token. */ - yyvsp -= yylen; - yyssp -= yylen; - yystate = *yyssp; - goto yyerrlab1; +#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 */ -/*-------------------------------------------------------------. -| yyerrlab1 -- common code for both syntax error and YYERROR. | -`-------------------------------------------------------------*/ -yyerrlab1: - yyerrstatus = 3; /* Each real token shifted decrements this. */ + if (yyssp == yyss) YYABORT; + yyvsp--; + yystate = *--yyssp; +#ifdef YYLSP_NEEDED + yylsp--; +#endif - for (;;) +#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; - YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp); - yydestruct (yystos[yystate], yyvsp); - YYPOPSTACK; - 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; - YYDPRINTF ((stderr, "Shifting error token, ")); +#if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Shifting error token, "); +#endif *++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 -/*----------------------------------------------. -| yyoverflowlab -- parser overflow comes here. | -`----------------------------------------------*/ -yyoverflowlab: - yyerror ("parser stack overflow"); - yyresult = 2; - /* Fall through. */ -#endif - -yyreturn: -#ifndef yyoverflow - if (yyss != yyssa) - YYSTACK_FREE (yyss); + yyabortlab: + /* YYABORT comes here. */ + if (yyfree_stacks) + { + free (yyss); + free (yyvs); +#ifdef YYLSP_NEEDED + free (yyls); #endif - return yyresult; + } + return 1; } - - -#line 3902 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" +#line 3911 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeParser.y" int yyerror(const char *ErrorMsg) { @@ -6754,4 +5989,3 @@ yyerror(ErrorMsg.c_str()); } - Modified: llvm/trunk/tools/llvm-upgrade/UpgradeParser.h.cvs URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-upgrade/UpgradeParser.h.cvs?rev=41774&r1=41773&r2=41774&view=diff ============================================================================== --- llvm/trunk/tools/llvm-upgrade/UpgradeParser.h.cvs (original) +++ llvm/trunk/tools/llvm-upgrade/UpgradeParser.h.cvs Fri Sep 7 16:07:57 2007 @@ -1,341 +1,4 @@ -/* A Bison parser, made by GNU Bison 1.875c. */ - -/* Skeleton parser for Yacc-like parsing with Bison, - Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003 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., 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. */ - -/* 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, - SINTVAL = 260, - UINTVAL = 261, - FPVAL = 262, - VOID = 263, - BOOL = 264, - SBYTE = 265, - UBYTE = 266, - SHORT = 267, - USHORT = 268, - INT = 269, - UINT = 270, - LONG = 271, - ULONG = 272, - FLOAT = 273, - DOUBLE = 274, - TYPE = 275, - LABEL = 276, - VAR_ID = 277, - LABELSTR = 278, - STRINGCONSTANT = 279, - IMPLEMENTATION = 280, - ZEROINITIALIZER = 281, - TRUETOK = 282, - FALSETOK = 283, - BEGINTOK = 284, - ENDTOK = 285, - DECLARE = 286, - GLOBAL = 287, - CONSTANT = 288, - SECTION = 289, - VOLATILE = 290, - TO = 291, - DOTDOTDOT = 292, - NULL_TOK = 293, - UNDEF = 294, - CONST = 295, - INTERNAL = 296, - LINKONCE = 297, - WEAK = 298, - APPENDING = 299, - DLLIMPORT = 300, - DLLEXPORT = 301, - EXTERN_WEAK = 302, - OPAQUE = 303, - NOT = 304, - EXTERNAL = 305, - TARGET = 306, - TRIPLE = 307, - ENDIAN = 308, - POINTERSIZE = 309, - LITTLE = 310, - BIG = 311, - ALIGN = 312, - DEPLIBS = 313, - CALL = 314, - TAIL = 315, - ASM_TOK = 316, - MODULE = 317, - SIDEEFFECT = 318, - CC_TOK = 319, - CCC_TOK = 320, - CSRETCC_TOK = 321, - FASTCC_TOK = 322, - COLDCC_TOK = 323, - X86_STDCALLCC_TOK = 324, - X86_FASTCALLCC_TOK = 325, - DATALAYOUT = 326, - RET = 327, - BR = 328, - SWITCH = 329, - INVOKE = 330, - UNREACHABLE = 331, - UNWIND = 332, - EXCEPT = 333, - ADD = 334, - SUB = 335, - MUL = 336, - DIV = 337, - UDIV = 338, - SDIV = 339, - FDIV = 340, - REM = 341, - UREM = 342, - SREM = 343, - FREM = 344, - AND = 345, - OR = 346, - XOR = 347, - SHL = 348, - SHR = 349, - ASHR = 350, - LSHR = 351, - SETLE = 352, - SETGE = 353, - SETLT = 354, - SETGT = 355, - SETEQ = 356, - SETNE = 357, - ICMP = 358, - FCMP = 359, - MALLOC = 360, - ALLOCA = 361, - FREE = 362, - LOAD = 363, - STORE = 364, - GETELEMENTPTR = 365, - PHI_TOK = 366, - SELECT = 367, - VAARG = 368, - EXTRACTELEMENT = 369, - INSERTELEMENT = 370, - SHUFFLEVECTOR = 371, - VAARG_old = 372, - VANEXT_old = 373, - EQ = 374, - NE = 375, - SLT = 376, - SGT = 377, - SLE = 378, - SGE = 379, - ULT = 380, - UGT = 381, - ULE = 382, - UGE = 383, - OEQ = 384, - ONE = 385, - OLT = 386, - OGT = 387, - OLE = 388, - OGE = 389, - ORD = 390, - UNO = 391, - UEQ = 392, - UNE = 393, - CAST = 394, - TRUNC = 395, - ZEXT = 396, - SEXT = 397, - FPTRUNC = 398, - FPEXT = 399, - FPTOUI = 400, - FPTOSI = 401, - UITOFP = 402, - SITOFP = 403, - PTRTOINT = 404, - INTTOPTR = 405, - BITCAST = 406 - }; -#endif -#define ESINT64VAL 258 -#define EUINT64VAL 259 -#define SINTVAL 260 -#define UINTVAL 261 -#define FPVAL 262 -#define VOID 263 -#define BOOL 264 -#define SBYTE 265 -#define UBYTE 266 -#define SHORT 267 -#define USHORT 268 -#define INT 269 -#define UINT 270 -#define LONG 271 -#define ULONG 272 -#define FLOAT 273 -#define DOUBLE 274 -#define TYPE 275 -#define LABEL 276 -#define VAR_ID 277 -#define LABELSTR 278 -#define STRINGCONSTANT 279 -#define IMPLEMENTATION 280 -#define ZEROINITIALIZER 281 -#define TRUETOK 282 -#define FALSETOK 283 -#define BEGINTOK 284 -#define ENDTOK 285 -#define DECLARE 286 -#define GLOBAL 287 -#define CONSTANT 288 -#define SECTION 289 -#define VOLATILE 290 -#define TO 291 -#define DOTDOTDOT 292 -#define NULL_TOK 293 -#define UNDEF 294 -#define CONST 295 -#define INTERNAL 296 -#define LINKONCE 297 -#define WEAK 298 -#define APPENDING 299 -#define DLLIMPORT 300 -#define DLLEXPORT 301 -#define EXTERN_WEAK 302 -#define OPAQUE 303 -#define NOT 304 -#define EXTERNAL 305 -#define TARGET 306 -#define TRIPLE 307 -#define ENDIAN 308 -#define POINTERSIZE 309 -#define LITTLE 310 -#define BIG 311 -#define ALIGN 312 -#define DEPLIBS 313 -#define CALL 314 -#define TAIL 315 -#define ASM_TOK 316 -#define MODULE 317 -#define SIDEEFFECT 318 -#define CC_TOK 319 -#define CCC_TOK 320 -#define CSRETCC_TOK 321 -#define FASTCC_TOK 322 -#define COLDCC_TOK 323 -#define X86_STDCALLCC_TOK 324 -#define X86_FASTCALLCC_TOK 325 -#define DATALAYOUT 326 -#define RET 327 -#define BR 328 -#define SWITCH 329 -#define INVOKE 330 -#define UNREACHABLE 331 -#define UNWIND 332 -#define EXCEPT 333 -#define ADD 334 -#define SUB 335 -#define MUL 336 -#define DIV 337 -#define UDIV 338 -#define SDIV 339 -#define FDIV 340 -#define REM 341 -#define UREM 342 -#define SREM 343 -#define FREM 344 -#define AND 345 -#define OR 346 -#define XOR 347 -#define SHL 348 -#define SHR 349 -#define ASHR 350 -#define LSHR 351 -#define SETLE 352 -#define SETGE 353 -#define SETLT 354 -#define SETGT 355 -#define SETEQ 356 -#define SETNE 357 -#define ICMP 358 -#define FCMP 359 -#define MALLOC 360 -#define ALLOCA 361 -#define FREE 362 -#define LOAD 363 -#define STORE 364 -#define GETELEMENTPTR 365 -#define PHI_TOK 366 -#define SELECT 367 -#define VAARG 368 -#define EXTRACTELEMENT 369 -#define INSERTELEMENT 370 -#define SHUFFLEVECTOR 371 -#define VAARG_old 372 -#define VANEXT_old 373 -#define EQ 374 -#define NE 375 -#define SLT 376 -#define SGT 377 -#define SLE 378 -#define SGE 379 -#define ULT 380 -#define UGT 381 -#define ULE 382 -#define UGE 383 -#define OEQ 384 -#define ONE 385 -#define OLT 386 -#define OGT 387 -#define OLE 388 -#define OGE 389 -#define ORD 390 -#define UNO 391 -#define UEQ 392 -#define UNE 393 -#define CAST 394 -#define TRUNC 395 -#define ZEXT 396 -#define SEXT 397 -#define FPTRUNC 398 -#define FPEXT 399 -#define FPTOUI 400 -#define FPTOSI 401 -#define UITOFP 402 -#define SITOFP 403 -#define PTRTOINT 404 -#define INTTOPTR 405 -#define BITCAST 406 - - - - -#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED) -#line 1750 "/users/dag/projects/cascade/llvm.modified/tools/llvm-upgrade/UpgradeParser.y" -typedef union YYSTYPE { +typedef union { llvm::Module *ModuleVal; llvm::Function *FunctionVal; std::pair *ArgVal; @@ -361,7 +24,7 @@ uint64_t UInt64Val; int SIntVal; unsigned UIntVal; - double FPVal; + llvm::APFloat *FPVal; bool BoolVal; char *StrVal; // This memory is strdup'd! @@ -376,14 +39,155 @@ llvm::FCmpInst::Predicate FPred; llvm::Module::Endianness Endianness; } YYSTYPE; -/* Line 1268 of yacc.c. */ -#line 381 "UpgradeParser.tab.h" -# define yystype YYSTYPE /* obsolescent; will be withdrawn */ -# define YYSTYPE_IS_DECLARED 1 -# define YYSTYPE_IS_TRIVIAL 1 -#endif - -extern YYSTYPE Upgradelval; - +#define ESINT64VAL 257 +#define EUINT64VAL 258 +#define SINTVAL 259 +#define UINTVAL 260 +#define FPVAL 261 +#define VOID 262 +#define BOOL 263 +#define SBYTE 264 +#define UBYTE 265 +#define SHORT 266 +#define USHORT 267 +#define INT 268 +#define UINT 269 +#define LONG 270 +#define ULONG 271 +#define FLOAT 272 +#define DOUBLE 273 +#define TYPE 274 +#define LABEL 275 +#define VAR_ID 276 +#define LABELSTR 277 +#define STRINGCONSTANT 278 +#define IMPLEMENTATION 279 +#define ZEROINITIALIZER 280 +#define TRUETOK 281 +#define FALSETOK 282 +#define BEGINTOK 283 +#define ENDTOK 284 +#define DECLARE 285 +#define GLOBAL 286 +#define CONSTANT 287 +#define SECTION 288 +#define VOLATILE 289 +#define TO 290 +#define DOTDOTDOT 291 +#define NULL_TOK 292 +#define UNDEF 293 +#define CONST 294 +#define INTERNAL 295 +#define LINKONCE 296 +#define WEAK 297 +#define APPENDING 298 +#define DLLIMPORT 299 +#define DLLEXPORT 300 +#define EXTERN_WEAK 301 +#define OPAQUE 302 +#define NOT 303 +#define EXTERNAL 304 +#define TARGET 305 +#define TRIPLE 306 +#define ENDIAN 307 +#define POINTERSIZE 308 +#define LITTLE 309 +#define BIG 310 +#define ALIGN 311 +#define DEPLIBS 312 +#define CALL 313 +#define TAIL 314 +#define ASM_TOK 315 +#define MODULE 316 +#define SIDEEFFECT 317 +#define CC_TOK 318 +#define CCC_TOK 319 +#define CSRETCC_TOK 320 +#define FASTCC_TOK 321 +#define COLDCC_TOK 322 +#define X86_STDCALLCC_TOK 323 +#define X86_FASTCALLCC_TOK 324 +#define DATALAYOUT 325 +#define RET 326 +#define BR 327 +#define SWITCH 328 +#define INVOKE 329 +#define UNREACHABLE 330 +#define UNWIND 331 +#define EXCEPT 332 +#define ADD 333 +#define SUB 334 +#define MUL 335 +#define DIV 336 +#define UDIV 337 +#define SDIV 338 +#define FDIV 339 +#define REM 340 +#define UREM 341 +#define SREM 342 +#define FREM 343 +#define AND 344 +#define OR 345 +#define XOR 346 +#define SHL 347 +#define SHR 348 +#define ASHR 349 +#define LSHR 350 +#define SETLE 351 +#define SETGE 352 +#define SETLT 353 +#define SETGT 354 +#define SETEQ 355 +#define SETNE 356 +#define ICMP 357 +#define FCMP 358 +#define MALLOC 359 +#define ALLOCA 360 +#define FREE 361 +#define LOAD 362 +#define STORE 363 +#define GETELEMENTPTR 364 +#define PHI_TOK 365 +#define SELECT 366 +#define VAARG 367 +#define EXTRACTELEMENT 368 +#define INSERTELEMENT 369 +#define SHUFFLEVECTOR 370 +#define VAARG_old 371 +#define VANEXT_old 372 +#define EQ 373 +#define NE 374 +#define SLT 375 +#define SGT 376 +#define SLE 377 +#define SGE 378 +#define ULT 379 +#define UGT 380 +#define ULE 381 +#define UGE 382 +#define OEQ 383 +#define ONE 384 +#define OLT 385 +#define OGT 386 +#define OLE 387 +#define OGE 388 +#define ORD 389 +#define UNO 390 +#define UEQ 391 +#define UNE 392 +#define CAST 393 +#define TRUNC 394 +#define ZEXT 395 +#define SEXT 396 +#define FPTRUNC 397 +#define FPEXT 398 +#define FPTOUI 399 +#define FPTOSI 400 +#define UITOFP 401 +#define SITOFP 402 +#define PTRTOINT 403 +#define INTTOPTR 404 +#define BITCAST 405 +extern YYSTYPE Upgradelval; Modified: llvm/trunk/tools/llvm-upgrade/UpgradeParser.y URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-upgrade/UpgradeParser.y?rev=41774&r1=41773&r2=41774&view=diff ============================================================================== --- llvm/trunk/tools/llvm-upgrade/UpgradeParser.y (original) +++ llvm/trunk/tools/llvm-upgrade/UpgradeParser.y Fri Sep 7 16:07:57 2007 @@ -2525,6 +2525,7 @@ if ($1.T==Type::FloatTy) $2->convert(APFloat::IEEEsingle, APFloat::rmNearestTiesToEven); $$.C = ConstantFP::get($1.T, *$2); + delete $2; $$.S.makeSignless(); } ; Modified: llvm/trunk/tools/llvm-upgrade/UpgradeParser.y.cvs URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-upgrade/UpgradeParser.y.cvs?rev=41774&r1=41773&r2=41774&view=diff ============================================================================== --- llvm/trunk/tools/llvm-upgrade/UpgradeParser.y.cvs (original) +++ llvm/trunk/tools/llvm-upgrade/UpgradeParser.y.cvs Fri Sep 7 16:07:57 2007 @@ -2525,6 +2525,7 @@ if ($1.T==Type::FloatTy) $2->convert(APFloat::IEEEsingle, APFloat::rmNearestTiesToEven); $$.C = ConstantFP::get($1.T, *$2); + delete $2; $$.S.makeSignless(); } ; From djg at cray.com Fri Sep 7 16:32:51 2007 From: djg at cray.com (Dan Gohman) Date: Fri, 07 Sep 2007 21:32:51 -0000 Subject: [llvm-commits] [llvm] r41775 - in /llvm/trunk: lib/Target/X86/X86InstrInfo.td lib/Target/X86/X86InstrSSE.td lib/Target/X86/X86InstrX86-64.td test/CodeGen/X86/zero-remat.ll Message-ID: <200709072132.l87LWpsP020593@zion.cs.uiuc.edu> Author: djg Date: Fri Sep 7 16:32:51 2007 New Revision: 41775 URL: http://llvm.org/viewvc/llvm-project?rev=41775&view=rev Log: Avoid storing and reloading zeros and other constants from stack slots by flagging the associated instructions as being trivially rematerializable. Added: llvm/trunk/test/CodeGen/X86/zero-remat.ll Modified: llvm/trunk/lib/Target/X86/X86InstrInfo.td llvm/trunk/lib/Target/X86/X86InstrSSE.td llvm/trunk/lib/Target/X86/X86InstrX86-64.td Modified: llvm/trunk/lib/Target/X86/X86InstrInfo.td URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86InstrInfo.td?rev=41775&r1=41774&r2=41775&view=diff ============================================================================== --- llvm/trunk/lib/Target/X86/X86InstrInfo.td (original) +++ llvm/trunk/lib/Target/X86/X86InstrInfo.td Fri Sep 7 16:32:51 2007 @@ -2313,6 +2313,7 @@ // Alias instructions that map movr0 to xor. // FIXME: remove when we can teach regalloc that xor reg, reg is ok. +let isReMaterializable = 1 in { def MOV8r0 : I<0x30, MRMInitReg, (outs GR8 :$dst), (ins), "xor{b}\t$dst, $dst", [(set GR8:$dst, 0)]>; @@ -2322,6 +2323,7 @@ def MOV32r0 : I<0x31, MRMInitReg, (outs GR32:$dst), (ins), "xor{l}\t$dst, $dst", [(set GR32:$dst, 0)]>; +} // Basic operations on GR16 / GR32 subclasses GR16_ and GR32_ which contains only // those registers that have GR8 sub-registers (i.e. AX - DX, EAX - EDX). Modified: llvm/trunk/lib/Target/X86/X86InstrSSE.td URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86InstrSSE.td?rev=41775&r1=41774&r2=41775&view=diff ============================================================================== --- llvm/trunk/lib/Target/X86/X86InstrSSE.td (original) +++ llvm/trunk/lib/Target/X86/X86InstrSSE.td Fri Sep 7 16:32:51 2007 @@ -399,6 +399,7 @@ // start with 'Fs'. // Alias instructions that map fld0 to pxor for sse. +let isReMaterializable = 1 in def FsFLD0SS : I<0xEF, MRMInitReg, (outs FR32:$dst), (ins), "pxor\t$dst, $dst", [(set FR32:$dst, fp32imm0)]>, Requires<[HasSSE1]>, TB, OpSize; @@ -1063,6 +1064,7 @@ // start with 'Fs'. // Alias instructions that map fld0 to pxor for sse. +let isReMaterializable = 1 in def FsFLD0SD : I<0xEF, MRMInitReg, (outs FR64:$dst), (ins), "pxor\t$dst, $dst", [(set FR64:$dst, fpimm0)]>, Requires<[HasSSE2]>, TB, OpSize; Modified: llvm/trunk/lib/Target/X86/X86InstrX86-64.td URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86InstrX86-64.td?rev=41775&r1=41774&r2=41775&view=diff ============================================================================== --- llvm/trunk/lib/Target/X86/X86InstrX86-64.td (original) +++ llvm/trunk/lib/Target/X86/X86InstrX86-64.td Fri Sep 7 16:32:51 2007 @@ -156,12 +156,14 @@ def MOV64rr : RI<0x89, MRMDestReg, (outs GR64:$dst), (ins GR64:$src), "mov{q}\t{$src, $dst|$dst, $src}", []>; +let isReMaterializable = 1 in { def MOV64ri : RIi64<0xB8, AddRegFrm, (outs GR64:$dst), (ins i64imm:$src), "movabs{q}\t{$src, $dst|$dst, $src}", [(set GR64:$dst, imm:$src)]>; def MOV64ri32 : RIi32<0xC7, MRM0r, (outs GR64:$dst), (ins i64i32imm:$src), "mov{q}\t{$src, $dst|$dst, $src}", [(set GR64:$dst, i64immSExt32:$src)]>; +} let isLoad = 1 in def MOV64rm : RI<0x8B, MRMSrcMem, (outs GR64:$dst), (ins i64mem:$src), @@ -990,13 +992,13 @@ // FIXME: remove when we can teach regalloc that xor reg, reg is ok. // FIXME: AddedComplexity gives MOV64r0 a higher priority than MOV64ri32. Remove // when we have a better way to specify isel priority. -let AddedComplexity = 1 in +let AddedComplexity = 1, isReMaterializable = 1 in def MOV64r0 : RI<0x31, MRMInitReg, (outs GR64:$dst), (ins), "xor{q}\t$dst, $dst", [(set GR64:$dst, 0)]>; // Materialize i64 constant where top 32-bits are zero. -let AddedComplexity = 1 in +let AddedComplexity = 1, isReMaterializable = 1 in def MOV64ri64i32 : Ii32<0xB8, AddRegFrm, (outs GR64:$dst), (ins i64i32imm:$src), "mov{l}\t{$src, ${dst:subreg32}|${dst:subreg32}, $src}", [(set GR64:$dst, i64immZExt32:$src)]>; Added: llvm/trunk/test/CodeGen/X86/zero-remat.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/zero-remat.ll?rev=41775&view=auto ============================================================================== --- llvm/trunk/test/CodeGen/X86/zero-remat.ll (added) +++ llvm/trunk/test/CodeGen/X86/zero-remat.ll Fri Sep 7 16:32:51 2007 @@ -0,0 +1,14 @@ +; RUN: llvm-as < %s | llc -march=x86-64 | grep xor | count 4 +; RUN: llvm-as < %s | llc -march=x86-64 -stats -info-output-file - | grep asm-printer | grep 12 + +declare void @bar(double %x) +declare void @barf(float %x) + +define double @foo() { + call void @bar(double 0.0) + ret double 0.0 +} +define float @foof() { + call void @barf(float 0.0) + ret float 0.0 +} From isanbard at gmail.com Fri Sep 7 17:01:03 2007 From: isanbard at gmail.com (Bill Wendling) Date: Fri, 07 Sep 2007 22:01:03 -0000 Subject: [llvm-commits] [llvm] r41776 - in /llvm/trunk: lib/Target/PowerPC/PPCRegisterInfo.cpp test/CodeGen/PowerPC/2007-09-07-LoadStoreIdxForms.ll Message-ID: <200709072201.l87M13Ia021430@zion.cs.uiuc.edu> Author: void Date: Fri Sep 7 17:01:02 2007 New Revision: 41776 URL: http://llvm.org/viewvc/llvm-project?rev=41776&view=rev Log: Add missing index versions of instructions to the map. Added: llvm/trunk/test/CodeGen/PowerPC/2007-09-07-LoadStoreIdxForms.ll Modified: llvm/trunk/lib/Target/PowerPC/PPCRegisterInfo.cpp Modified: llvm/trunk/lib/Target/PowerPC/PPCRegisterInfo.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/PPCRegisterInfo.cpp?rev=41776&r1=41775&r2=41776&view=diff ============================================================================== --- llvm/trunk/lib/Target/PowerPC/PPCRegisterInfo.cpp (original) +++ llvm/trunk/lib/Target/PowerPC/PPCRegisterInfo.cpp Fri Sep 7 17:01:02 2007 @@ -94,7 +94,13 @@ ImmToIdxMap[PPC::STH] = PPC::STHX; ImmToIdxMap[PPC::STW] = PPC::STWX; ImmToIdxMap[PPC::STFS] = PPC::STFSX; ImmToIdxMap[PPC::STFD] = PPC::STFDX; ImmToIdxMap[PPC::ADDI] = PPC::ADD4; - ImmToIdxMap[PPC::ADDI8] = PPC::ADD8; + + // 64-bit + ImmToIdxMap[PPC::LHA8] = PPC::LHAX8; ImmToIdxMap[PPC::LBZ8] = PPC::LBZX8; + ImmToIdxMap[PPC::LHZ8] = PPC::LHZX8; ImmToIdxMap[PPC::LWZ8] = PPC::LWZX8; + ImmToIdxMap[PPC::STB8] = PPC::STBX8; ImmToIdxMap[PPC::STH8] = PPC::STHX8; + ImmToIdxMap[PPC::STW8] = PPC::STWX8; ImmToIdxMap[PPC::STDU] = PPC::STDUX; + ImmToIdxMap[PPC::ADDI8] = PPC::ADD8; ImmToIdxMap[PPC::STD_32] = PPC::STDX_32; } void Added: llvm/trunk/test/CodeGen/PowerPC/2007-09-07-LoadStoreIdxForms.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/PowerPC/2007-09-07-LoadStoreIdxForms.ll?rev=41776&view=auto ============================================================================== --- llvm/trunk/test/CodeGen/PowerPC/2007-09-07-LoadStoreIdxForms.ll (added) +++ llvm/trunk/test/CodeGen/PowerPC/2007-09-07-LoadStoreIdxForms.ll Fri Sep 7 17:01:02 2007 @@ -0,0 +1,16 @@ +; RUN: llvm-as < %s | llc -march=ppc64 | grep lwzx + + %struct.__db_region = type { %struct.__mutex_t, [4 x i8], %struct.anon, i32, [1 x i32] } + %struct.__mutex_t = type { i32 } + %struct.anon = type { i64, i64 } + +define void @foo() { +entry: + %ttype = alloca i32, align 4 ; [#uses=1] + %regs = alloca [1024 x %struct.__db_region], align 16 ; <[1024 x %struct.__db_region]*> [#uses=0] + %tmp = load i32* %ttype, align 4 ; [#uses=1] + %tmp1 = call i32 (...)* @bork( i32 %tmp ) ; [#uses=0] + ret void +} + +declare i32 @bork(...) From isanbard at gmail.com Fri Sep 7 18:41:04 2007 From: isanbard at gmail.com (Bill Wendling) Date: Fri, 07 Sep 2007 23:41:04 -0000 Subject: [llvm-commits] [llvm-gcc-4.0] r41777 - /llvm-gcc-4.0/tags/llvm-gcc-1200-11/ Message-ID: <200709072341.l87Nf4ew024874@zion.cs.uiuc.edu> Author: void Date: Fri Sep 7 18:41:04 2007 New Revision: 41777 URL: http://llvm.org/viewvc/llvm-project?rev=41777&view=rev Log: Creating llvm-gcc-1200-11 branch Added: llvm-gcc-4.0/tags/llvm-gcc-1200-11/ - copied from r41776, llvm-gcc-4.0/trunk/ From isanbard at gmail.com Fri Sep 7 18:41:10 2007 From: isanbard at gmail.com (Bill Wendling) Date: Fri, 07 Sep 2007 23:41:10 -0000 Subject: [llvm-commits] [llvm] r41778 - /llvm/tags/Apple/llvm-1200-11/ Message-ID: <200709072341.l87NfAj3024889@zion.cs.uiuc.edu> Author: void Date: Fri Sep 7 18:41:10 2007 New Revision: 41778 URL: http://llvm.org/viewvc/llvm-project?rev=41778&view=rev Log: Creating llvm-1200-11 branch Added: llvm/tags/Apple/llvm-1200-11/ - copied from r41777, llvm/trunk/ From evan.cheng at apple.com Fri Sep 7 18:59:03 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Fri, 07 Sep 2007 23:59:03 -0000 Subject: [llvm-commits] [llvm] r41781 - in /llvm/trunk: lib/Target/X86/X86ISelDAGToDAG.cpp lib/Target/X86/X86InstrInfo.td utils/TableGen/DAGISelEmitter.cpp Message-ID: <200709072359.l87Nx3KE026019@zion.cs.uiuc.edu> Author: evancheng Date: Fri Sep 7 18:59:02 2007 New Revision: 41781 URL: http://llvm.org/viewvc/llvm-project?rev=41781&view=rev Log: TableGen no longer emit CopyFromReg nodes for implicit results in physical registers. The scheduler is now responsible for emitting them. Modified: llvm/trunk/lib/Target/X86/X86ISelDAGToDAG.cpp llvm/trunk/lib/Target/X86/X86InstrInfo.td llvm/trunk/utils/TableGen/DAGISelEmitter.cpp Modified: llvm/trunk/lib/Target/X86/X86ISelDAGToDAG.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86ISelDAGToDAG.cpp?rev=41781&r1=41780&r2=41781&view=diff ============================================================================== --- llvm/trunk/lib/Target/X86/X86ISelDAGToDAG.cpp (original) +++ llvm/trunk/lib/Target/X86/X86ISelDAGToDAG.cpp Fri Sep 7 18:59:02 2007 @@ -1063,50 +1063,6 @@ break; } - case ISD::MUL: { - if (NVT == MVT::i8) { - SDOperand N0 = Node->getOperand(0); - SDOperand N1 = Node->getOperand(1); - SDOperand Tmp0, Tmp1, Tmp2, Tmp3; - bool foldedLoad = TryFoldLoad(N, N1, Tmp0, Tmp1, Tmp2, Tmp3); - if (!foldedLoad) { - foldedLoad = TryFoldLoad(N, N0, Tmp0, Tmp1, Tmp2, Tmp3); - if (foldedLoad) - std::swap(N0, N1); - } - - SDNode *ResNode; - if (foldedLoad) { - SDOperand Chain = N1.getOperand(0); - AddToISelQueue(N0); - AddToISelQueue(Chain); - AddToISelQueue(Tmp0); - AddToISelQueue(Tmp1); - AddToISelQueue(Tmp2); - AddToISelQueue(Tmp3); - SDOperand InFlag(0, 0); - Chain = CurDAG->getCopyToReg(Chain, X86::AL, N0, InFlag); - InFlag = Chain.getValue(1); - SDOperand Ops[] = { Tmp0, Tmp1, Tmp2, Tmp3, Chain, InFlag }; - ResNode = CurDAG->getTargetNode(X86::MUL8m, MVT::i8, MVT::i8, - MVT::Other, Ops, 6); - ReplaceUses(N1.getValue(1), SDOperand(ResNode, 2)); - } else { - SDOperand Chain = CurDAG->getEntryNode(); - AddToISelQueue(N0); - AddToISelQueue(N1); - SDOperand InFlag(0, 0); - InFlag = CurDAG->getCopyToReg(Chain, X86::AL, N0, InFlag).getValue(1); - ResNode = CurDAG->getTargetNode(X86::MUL8r, MVT::i8, MVT::i8, - N1, InFlag); - } - - ReplaceUses(N.getValue(0), SDOperand(ResNode, 0)); - return NULL; - } - break; - } - case ISD::MULHU: case ISD::MULHS: { if (Opcode == ISD::MULHU) Modified: llvm/trunk/lib/Target/X86/X86InstrInfo.td URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86InstrInfo.td?rev=41781&r1=41780&r2=41781&view=diff ============================================================================== --- llvm/trunk/lib/Target/X86/X86InstrInfo.td (original) +++ llvm/trunk/lib/Target/X86/X86InstrInfo.td Fri Sep 7 18:59:02 2007 @@ -552,7 +552,7 @@ // FIXME: Used for 8-bit mul, ignore result upper 8 bits. // This probably ought to be moved to a def : Pat<> if the // syntax can be accepted. - []>, + [(set AL, (mul AL, GR8:$src))]>, Imp<[AL],[AL,AH]>; // AL,AH = AL*GR8 def MUL16r : I<0xF7, MRM4r, (outs), (ins GR16:$src), "mul{w}\t$src", []>, Imp<[AX],[AX,DX]>, OpSize; // AX,DX = AX*GR16 @@ -563,7 +563,7 @@ // FIXME: Used for 8-bit mul, ignore result upper 8 bits. // This probably ought to be moved to a def : Pat<> if the // syntax can be accepted. - []>, + [(set AL, (mul AL, (loadi8 addr:$src)))]>, Imp<[AL],[AL,AH]>; // AL,AH = AL*[mem8] def MUL16m : I<0xF7, MRM4m, (outs), (ins i16mem:$src), "mul{w}\t$src", []>, Imp<[AX],[AX,DX]>, Modified: llvm/trunk/utils/TableGen/DAGISelEmitter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/DAGISelEmitter.cpp?rev=41781&r1=41780&r2=41781&view=diff ============================================================================== --- llvm/trunk/utils/TableGen/DAGISelEmitter.cpp (original) +++ llvm/trunk/utils/TableGen/DAGISelEmitter.cpp Fri Sep 7 18:59:02 2007 @@ -2768,8 +2768,8 @@ PatternHasProperty(Pattern, SDNPOptInFlag, ISE); bool NodeHasInFlag = isRoot && PatternHasProperty(Pattern, SDNPInFlag, ISE); - bool NodeHasOutFlag = HasImpResults || (isRoot && - PatternHasProperty(Pattern, SDNPOutFlag, ISE)); + bool NodeHasOutFlag = isRoot && + PatternHasProperty(Pattern, SDNPOutFlag, ISE); bool NodeHasChain = InstPatNode && PatternHasProperty(InstPatNode, SDNPHasChain, ISE); bool InputHasChain = isRoot && @@ -2869,7 +2869,7 @@ unsigned ResNo = TmpNo++; if (!isRoot || InputHasChain || NodeHasChain || NodeHasOutFlag || - NodeHasOptInFlag) { + NodeHasOptInFlag || HasImpResults) { std::string Code; std::string Code2; std::string NodeName; @@ -2895,6 +2895,18 @@ Code += ", VT" + utostr(VTNo); emitVT(getEnumName(N->getTypeNum(0))); } + // Add types for implicit results in physical registers, scheduler will + // care of adding copyfromreg nodes. + if (HasImpResults) { + for (unsigned i = 0, e = Inst.getNumImpResults(); i < e; i++) { + Record *RR = Inst.getImpResult(i); + if (RR->isSubClassOf("Register")) { + MVT::ValueType RVT = getRegisterValueType(RR, CGT); + Code += ", " + getEnumName(RVT); + ++NumResults; + } + } + } if (NodeHasChain) Code += ", MVT::Other"; if (NodeHasOutFlag) @@ -2999,11 +3011,6 @@ utostr(NumResults + (unsigned)NodeHasChain) + ");"); } - if (HasImpResults && EmitCopyFromRegs(N, ResNodeDecled, ChainEmitted)) { - emitCode("ReplaceUses(SDOperand(N.Val, 0), SDOperand(ResNode, 0));"); - NumResults = 1; - } - if (FoldedChains.size() > 0) { std::string Code; for (unsigned j = 0, e = FoldedChains.size(); j < e; j++) @@ -3202,42 +3209,6 @@ emitCode("AddToISelQueue(InFlag);"); } } - - /// EmitCopyFromRegs - Emit code to copy result to physical registers - /// as specified by the instruction. It returns true if any copy is - /// emitted. - bool EmitCopyFromRegs(TreePatternNode *N, bool &ResNodeDecled, - bool &ChainEmitted) { - bool RetVal = false; - Record *Op = N->getOperator(); - if (Op->isSubClassOf("Instruction")) { - const DAGInstruction &Inst = ISE.getInstruction(Op); - const CodeGenTarget &CGT = ISE.getTargetInfo(); - unsigned NumImpResults = Inst.getNumImpResults(); - for (unsigned i = 0; i < NumImpResults; i++) { - Record *RR = Inst.getImpResult(i); - if (RR->isSubClassOf("Register")) { - MVT::ValueType RVT = getRegisterValueType(RR, CGT); - if (RVT != MVT::Flag) { - if (!ChainEmitted) { - emitCode("SDOperand Chain = CurDAG->getEntryNode();"); - ChainEmitted = true; - ChainName = "Chain"; - } - std::string Decl = (!ResNodeDecled) ? "SDNode *" : ""; - emitCode(Decl + "ResNode = CurDAG->getCopyFromReg(" + ChainName + - ", " + ISE.getQualifiedName(RR) + ", " + getEnumName(RVT) + - ", InFlag).Val;"); - ResNodeDecled = true; - emitCode(ChainName + " = SDOperand(ResNode, 1);"); - emitCode("InFlag = SDOperand(ResNode, 2);"); - RetVal = true; - } - } - } - } - return RetVal; - } }; /// EmitCodeForPattern - Given a pattern to match, emit code to the specified From evan.cheng at apple.com Fri Sep 7 19:02:17 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Sat, 08 Sep 2007 00:02:17 -0000 Subject: [llvm-commits] [llvm] r41782 - /llvm/trunk/lib/Support/Allocator.cpp Message-ID: <200709080002.l8802HcP026224@zion.cs.uiuc.edu> Author: evancheng Date: Fri Sep 7 19:02:17 2007 New Revision: 41782 URL: http://llvm.org/viewvc/llvm-project?rev=41782&view=rev Log: Smarter Reset(). Instead of deallocating all memory regions and reallocate the first region, just deallocate all but the last region in the list. Modified: llvm/trunk/lib/Support/Allocator.cpp Modified: llvm/trunk/lib/Support/Allocator.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Allocator.cpp?rev=41782&r1=41781&r2=41782&view=diff ============================================================================== --- llvm/trunk/lib/Support/Allocator.cpp (original) +++ llvm/trunk/lib/Support/Allocator.cpp Fri Sep 7 19:02:17 2007 @@ -68,14 +68,25 @@ return NewRegion->Allocate(AllocSize, Alignment, RegPtr); } - /// Deallocate - Release all memory for this region to the system. - /// + /// Deallocate - Recursively release all memory for this and its next regions + /// to the system. void Deallocate() { MemRegion *next = Next; free(this); if (next) next->Deallocate(); } + + /// DeallocateAllButLast - Recursively release all memory for this and its + /// next regions to the system stopping at the last region in the list. + /// Returns the pointer to the last region. + MemRegion *DeallocateAllButLast() { + MemRegion *next = Next; + if (!next) + return this; + free(this); + return next->DeallocateAllButLast(); + } }; } @@ -93,9 +104,10 @@ } void BumpPtrAllocator::Reset() { - ((MemRegion*)TheMemory)->Deallocate(); - TheMemory = malloc(4096); - ((MemRegion*)TheMemory)->Init(4096, 1, 0); + MemRegion *MRP = (MemRegion*)TheMemory; + MRP = MRP->DeallocateAllButLast(); + MRP->Init(4096, 1, 0); + TheMemory = MRP; } void *BumpPtrAllocator::Allocate(unsigned Size, unsigned Align) { From cfr at adobe.com Fri Sep 7 23:17:09 2007 From: cfr at adobe.com (Chuck Rose III) Date: Sat, 08 Sep 2007 04:17:09 -0000 Subject: [llvm-commits] [llvm] r41784 - /llvm/trunk/include/llvm/ADT/APFloat.h Message-ID: <200709080417.l884H9tg003117@zion.cs.uiuc.edu> Author: cfr Date: Fri Sep 7 23:17:08 2007 New Revision: 41784 URL: http://llvm.org/viewvc/llvm-project?rev=41784&view=rev Log: Fix for VisualStudio. It is treating a 2 bit enum as a signed int for comparison purposes, causing failures. Using an extra bit fixes it. Modified: llvm/trunk/include/llvm/ADT/APFloat.h Modified: llvm/trunk/include/llvm/ADT/APFloat.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/APFloat.h?rev=41784&r1=41783&r2=41784&view=diff ============================================================================== --- llvm/trunk/include/llvm/ADT/APFloat.h (original) +++ llvm/trunk/include/llvm/ADT/APFloat.h Fri Sep 7 23:17:08 2007 @@ -276,7 +276,9 @@ exponent_t exponent; /* What kind of floating point number this is. */ - fltCategory category: 2; + /* Only 2 bits are required, but VisualStudio incorrectly sign extends + it. Using the extra bit keeps it from failing under VisualStudio */ + fltCategory category: 3; /* The sign bit of this number. */ unsigned int sign: 1; From baldrick at free.fr Sat Sep 8 07:08:44 2007 From: baldrick at free.fr (Duncan Sands) Date: Sat, 8 Sep 2007 14:08:44 +0200 Subject: [llvm-commits] [llvm-gcc-4.2] r41761 - /llvm-gcc-4.2/trunk/gcc/c-typeck.c In-Reply-To: <16e5fdf90709071254u24f2981cq76166b8be7e577aa@mail.gmail.com> References: <200709070819.l878JqEx005399@zion.cs.uiuc.edu> <200709071036.55721.baldrick@free.fr> <16e5fdf90709071254u24f2981cq76166b8be7e577aa@mail.gmail.com> Message-ID: <200709081408.52743.baldrick@free.fr> Hi Bill, > > > A variable that's constant in a constructor shouldn't make the > > > constructor itself non-constant. > > > > does the testcase fail with 4.2? > > I assumed that it did, but I'm not sure. Would you test it for me? I'm > not able to build 4.2 at this time. the testcase passes with llvm-gcc-4.2 without your patch, so can you please revert it. Thanks, Duncan. PS: $ llvm-gcc -xc -Os pr1641.c pr1641.c:8:30: warning: multi-character character constant /usr/lib/crt1.o: In function `_start': (.text+0x18): undefined reference to `main' /tmp/cc18qp8n.o: In function `bork': (.text+0x14): undefined reference to `bar' collect2: ld returned 1 exit status From nicholas at mxc.ca Sat Sep 8 08:57:51 2007 From: nicholas at mxc.ca (Nick Lewycky) Date: Sat, 08 Sep 2007 13:57:51 -0000 Subject: [llvm-commits] [llvm] r41785 - /llvm/trunk/docs/LangRef.html Message-ID: <200709081357.l88Dvpjq030212@zion.cs.uiuc.edu> Author: nicholas Date: Sat Sep 8 08:57:50 2007 New Revision: 41785 URL: http://llvm.org/viewvc/llvm-project?rev=41785&view=rev Log: Fix description of the call instruction. There are two types, with one being optional. Modified: llvm/trunk/docs/LangRef.html Modified: llvm/trunk/docs/LangRef.html URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/docs/LangRef.html?rev=41785&r1=41784&r2=41785&view=diff ============================================================================== --- llvm/trunk/docs/LangRef.html (original) +++ llvm/trunk/docs/LangRef.html Sat Sep 8 08:57:50 2007 @@ -3581,7 +3581,7 @@

Syntax:
-  <result> = [tail] call [cconv] <ty>* <fnptrval>(<param list>)
+  <result> = [tail] call [cconv] <ty> [<fnty>*] <fnptrval>(<param list>)
 
Overview:
@@ -3606,10 +3606,15 @@ to using C calling conventions.
  • -

    'ty': shall be the signature of the pointer to function value - being invoked. The argument types must match the types implied by this - signature. This type can be omitted if the function is not varargs and - if the function type does not return a pointer to a function.

    +

    'ty': the type of the call instruction itself which is also + the type of the return value. Functions that return no value are marked + void.

    +
  • +
  • +

    'fnty': shall be the signature of the pointer to function + value being invoked. The argument types must match the types implied by + this signature. This type can be omitted if the function is not varargs + and if the function type does not return a pointer to a function.

  • 'fnptrval': An LLVM value containing a pointer to a function to @@ -3639,10 +3644,11 @@

    Example:
    -  %retval = call i32 %test(i32 %argc)
    -  call i32(i8 *, ...) *%printf(i8 * %msg, i32 12, i8 42);
    -  %X = tail call i32 %foo()
    -  %Y = tail call fastcc i32 %foo()
    +  %retval = call i32 @test(i32 %argc)
    +  call i32 (i8 *, ...)* @printf(i8 * %msg, i32 12, i8 42);
    +  %X = tail call i32 @foo()
    +  %Y = tail call fastcc i32 @foo()
    +  %Z = call void %foo(i8 97 signext)
     
  • From dalej at apple.com Sat Sep 8 14:29:24 2007 From: dalej at apple.com (Dale Johannesen) Date: Sat, 08 Sep 2007 19:29:24 -0000 Subject: [llvm-commits] [llvm] r41786 - in /llvm/trunk: lib/CodeGen/SelectionDAG/LegalizeDAG.cpp test/CodeGen/PowerPC/2007-09-08-unaligned.ll Message-ID: <200709081929.l88JTObk008217@zion.cs.uiuc.edu> Author: johannes Date: Sat Sep 8 14:29:23 2007 New Revision: 41786 URL: http://llvm.org/viewvc/llvm-project?rev=41786&view=rev Log: Implement misaligned FP loads and stores. Added: llvm/trunk/test/CodeGen/PowerPC/2007-09-08-unaligned.ll Modified: llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Modified: llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp?rev=41786&r1=41785&r2=41786&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp (original) +++ llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Sat Sep 8 14:29:23 2007 @@ -557,17 +557,32 @@ static SDOperand ExpandUnalignedStore(StoreSDNode *ST, SelectionDAG &DAG, TargetLowering &TLI) { - assert(MVT::isInteger(ST->getStoredVT()) && - "Non integer unaligned stores not implemented."); - int SVOffset = ST->getSrcValueOffset(); SDOperand Chain = ST->getChain(); SDOperand Ptr = ST->getBasePtr(); SDOperand Val = ST->getValue(); MVT::ValueType VT = Val.getValueType(); + int Alignment = ST->getAlignment(); + int SVOffset = ST->getSrcValueOffset(); + if (MVT::isFloatingPoint(ST->getStoredVT())) { + // Expand to a bitconvert of the value to the integer type of the + // same size, then a (misaligned) int store. + MVT::ValueType intVT; + if (VT==MVT::f64) + intVT = MVT::i64; + else if (VT==MVT::f32) + intVT = MVT::i32; + else + assert(0 && "Unaligned load of unsupported floating point type"); + + SDOperand Result = DAG.getNode(ISD::BIT_CONVERT, intVT, Val); + return DAG.getStore(Chain, Result, Ptr, ST->getSrcValue(), + SVOffset, ST->isVolatile(), Alignment); + } + assert(MVT::isInteger(ST->getStoredVT()) && + "Unaligned store of unknown type."); // Get the half-size VT MVT::ValueType NewStoredVT = ST->getStoredVT() - 1; int NumBits = MVT::getSizeInBits(NewStoredVT); - int Alignment = ST->getAlignment(); int IncrementSize = NumBits / 8; // Divide the stored value in two parts. @@ -593,13 +608,35 @@ static SDOperand ExpandUnalignedLoad(LoadSDNode *LD, SelectionDAG &DAG, TargetLowering &TLI) { - assert(MVT::isInteger(LD->getLoadedVT()) && - "Non integer unaligned loads not implemented."); int SVOffset = LD->getSrcValueOffset(); SDOperand Chain = LD->getChain(); SDOperand Ptr = LD->getBasePtr(); MVT::ValueType VT = LD->getValueType(0); - MVT::ValueType NewLoadedVT = LD->getLoadedVT() - 1; + MVT::ValueType LoadedVT = LD->getLoadedVT(); + if (MVT::isFloatingPoint(VT)) { + // Expand to a (misaligned) integer load of the same size, + // then bitconvert to floating point. + MVT::ValueType intVT; + if (LoadedVT==MVT::f64) + intVT = MVT::i64; + else if (LoadedVT==MVT::f32) + intVT = MVT::i32; + else + assert(0 && "Unaligned load of unsupported floating point type"); + + SDOperand newLoad = DAG.getLoad(intVT, Chain, Ptr, LD->getSrcValue(), + SVOffset, LD->isVolatile(), + LD->getAlignment()); + SDOperand Result = DAG.getNode(ISD::BIT_CONVERT, LoadedVT, newLoad); + if (LoadedVT != VT) + Result = DAG.getNode(ISD::FP_EXTEND, VT, Result); + + SDOperand Ops[] = { Result, Chain }; + return DAG.getNode(ISD::MERGE_VALUES, DAG.getVTList(VT, MVT::Other), + Ops, 2); + } + assert(MVT::isInteger(LoadedVT) && "Unaligned load of unsupported type."); + MVT::ValueType NewLoadedVT = LoadedVT - 1; int NumBits = MVT::getSizeInBits(NewLoadedVT); int Alignment = LD->getAlignment(); int IncrementSize = NumBits / 8; @@ -1640,8 +1677,8 @@ TLI); Tmp3 = Result.getOperand(0); Tmp4 = Result.getOperand(1); - LegalizeOp(Tmp3); - LegalizeOp(Tmp4); + Tmp3 = LegalizeOp(Tmp3); + Tmp4 = LegalizeOp(Tmp4); } } break; @@ -1709,8 +1746,8 @@ TLI); Tmp1 = Result.getOperand(0); Tmp2 = Result.getOperand(1); - LegalizeOp(Tmp1); - LegalizeOp(Tmp2); + Tmp1 = LegalizeOp(Tmp1); + Tmp2 = LegalizeOp(Tmp2); } } } Added: llvm/trunk/test/CodeGen/PowerPC/2007-09-08-unaligned.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/PowerPC/2007-09-08-unaligned.ll?rev=41786&view=auto ============================================================================== --- llvm/trunk/test/CodeGen/PowerPC/2007-09-08-unaligned.ll (added) +++ llvm/trunk/test/CodeGen/PowerPC/2007-09-08-unaligned.ll Sat Sep 8 14:29:23 2007 @@ -0,0 +1,53 @@ +; RUN: llvm-as < %s | llc | grep stfd | count 3 +; RUN: llvm-as < %s | llc | grep stfs | count 1 +; RUN: llvm-as < %s | llc | grep lfd | count 2 +; RUN: llvm-as < %s | llc | grep lfs | count 2 +; ModuleID = 'foo.c' +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-f128:64:128" +target triple = "powerpc-apple-darwin8" + %struct.anon = type <{ i8, float }> + at s = global %struct.anon <{ i8 3, float 0x4014666660000000 }> ; <%struct.anon*> [#uses=1] + at u = global <{ i8, double }> <{ i8 3, double 5.100000e+00 }> ; <<{ i8, double }>*> [#uses=1] + at t = weak global %struct.anon zeroinitializer ; <%struct.anon*> [#uses=2] + at v = weak global <{ i8, double }> zeroinitializer ; <<{ i8, double }>*> [#uses=2] + at .str = internal constant [8 x i8] c"%f %lf\0A\00" ; <[8 x i8]*> [#uses=1] + +define i32 @foo() { +entry: + %retval = alloca i32, align 4 ; [#uses=1] + %"alloca point" = bitcast i32 0 to i32 ; [#uses=0] + %tmp = getelementptr %struct.anon* @s, i32 0, i32 1 ; [#uses=1] + %tmp1 = load float* %tmp, align 1 ; [#uses=1] + %tmp2 = getelementptr %struct.anon* @t, i32 0, i32 1 ; [#uses=1] + store float %tmp1, float* %tmp2, align 1 + %tmp3 = getelementptr <{ i8, double }>* @u, i32 0, i32 1 ; [#uses=1] + %tmp4 = load double* %tmp3, align 1 ; [#uses=1] + %tmp5 = getelementptr <{ i8, double }>* @v, i32 0, i32 1 ; [#uses=1] + store double %tmp4, double* %tmp5, align 1 + br label %return + +return: ; preds = %entry + %retval6 = load i32* %retval ; [#uses=1] + ret i32 %retval6 +} + +define i32 @main() { +entry: + %retval = alloca i32, align 4 ; [#uses=1] + %"alloca point" = bitcast i32 0 to i32 ; [#uses=0] + %tmp = call i32 @foo( ) ; [#uses=0] + %tmp1 = getelementptr %struct.anon* @t, i32 0, i32 1 ; [#uses=1] + %tmp2 = load float* %tmp1, align 1 ; [#uses=1] + %tmp23 = fpext float %tmp2 to double ; [#uses=1] + %tmp4 = getelementptr <{ i8, double }>* @v, i32 0, i32 1 ; [#uses=1] + %tmp5 = load double* %tmp4, align 1 ; [#uses=1] + %tmp6 = getelementptr [8 x i8]* @.str, i32 0, i32 0 ; [#uses=1] + %tmp7 = call i32 (i8*, ...)* @printf( i8* %tmp6, double %tmp23, double %tmp5 ) ; [#uses=0] + br label %return + +return: ; preds = %entry + %retval8 = load i32* %retval ; [#uses=1] + ret i32 %retval8 +} + +declare i32 @printf(i8*, ...) From baldrick at free.fr Sat Sep 8 17:03:58 2007 From: baldrick at free.fr (Duncan Sands) Date: Sun, 9 Sep 2007 00:03:58 +0200 Subject: [llvm-commits] Trampoline changes Message-ID: <200709090003.59557.baldrick@free.fr> Currently LLVM has two intrinsics for supporting trampolines, aka pointers to nested functions: init_trampoline and adjust_trampoline. In essence, init_trampoline fills a block of memory with executable code, and adjust_trampoline returns a suitable function pointer for calling that code. These patches fold adjust_trampoline into init_trampoline, leaving init_trampoline as the only intrinsic (it now returns the function pointer adjust_trampoline used to return). This requires modifying gcc's nested function lowering pass, which currently stores the executable code in the "frame" used to pass the variables of a parent function to its children, and calls adjust_trampoline whenever it needs the function pointer (the call may occur in a child function, far from the point at which init_trampoline was called). After these patches, the function pointer is stored in the frame instead, with the code being written to a temporary variable on the parent's stack. This means that the adjust_trampoline call happens immediately after the init_trampoline call, so they might as well be combined into one intrinsic. The cost of organizing things this way is that space for one extra function pointer per trampoline is allocated on the stack. My motive for doing this was not to simplify LLVM (which is a nice benefit), but to make it easier to do the optimization in the attached patch tramp_opt.diff This teaches instcombine how to turn a call to the function pointer returned by init_trampoline into a direct call to the nested function. This matters because calling a function via a trampoline is amazingly expensive (presumably due to icache flushing - remember that code on the stack gets executed). Since usually a pointer to a nested function is taken in order to pass it to some other function, this optimization is only going to happen if that other function is inlined, so that the init_trampoline and the call to the nested function pointer occur in the same function. It is easy to construct testcases for which this works, but sadly I was unable to get the optimization to occur even once in a trampoline heavy real-world program without jacking-up the inlining limit hugely (to 100000; 10000 wasn't enough). Still, I'm hoping that it may sometimes be useful. Ciao, Duncan. -------------- next part -------------- A non-text attachment was scrubbed... Name: tramp_intr.diff Type: text/x-diff Size: 17810 bytes Desc: not available Url : http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20070909/405599b7/attachment.bin -------------- next part -------------- A non-text attachment was scrubbed... Name: tramp_4_0.diff Type: text/x-diff Size: 9843 bytes Desc: not available Url : http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20070909/405599b7/attachment-0001.bin -------------- next part -------------- A non-text attachment was scrubbed... Name: tramp_4_2.diff Type: text/x-diff Size: 9849 bytes Desc: not available Url : http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20070909/405599b7/attachment-0002.bin -------------- next part -------------- A non-text attachment was scrubbed... Name: tramp_opt.diff Type: text/x-diff Size: 6359 bytes Desc: not available Url : http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20070909/405599b7/attachment-0003.bin From resistor at mac.com Sat Sep 8 17:23:52 2007 From: resistor at mac.com (Owen Anderson) Date: Sat, 08 Sep 2007 22:23:52 -0000 Subject: [llvm-commits] [llvm] r41787 - in /llvm/trunk/tools: llvm-ld/Optimize.cpp opt/opt.cpp Message-ID: <200709082223.l88MNqkn015359@zion.cs.uiuc.edu> Author: resistor Date: Sat Sep 8 17:23:52 2007 New Revision: 41787 URL: http://llvm.org/viewvc/llvm-project?rev=41787&view=rev Log: Turn GVN on by default. Modified: llvm/trunk/tools/llvm-ld/Optimize.cpp llvm/trunk/tools/opt/opt.cpp Modified: llvm/trunk/tools/llvm-ld/Optimize.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-ld/Optimize.cpp?rev=41787&r1=41786&r2=41787&view=diff ============================================================================== --- llvm/trunk/tools/llvm-ld/Optimize.cpp (original) +++ llvm/trunk/tools/llvm-ld/Optimize.cpp Sat Sep 8 17:23:52 2007 @@ -166,8 +166,7 @@ addPass(Passes, createGlobalsModRefPass()); // IP alias analysis addPass(Passes, createLICMPass()); // Hoist loop invariants - addPass(Passes, createLoadValueNumberingPass()); // GVN for load instrs - addPass(Passes, createGCSEPass()); // Remove common subexprs + addPass(Passes, createGVNPass()); // Remove redundancies addPass(Passes, createDeadStoreEliminationPass()); // Nuke dead stores // Cleanup and simplify the code after the scalar optimizations. Modified: llvm/trunk/tools/opt/opt.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/opt/opt.cpp?rev=41787&r1=41786&r2=41787&view=diff ============================================================================== --- llvm/trunk/tools/opt/opt.cpp (original) +++ llvm/trunk/tools/opt/opt.cpp Sat Sep 8 17:23:52 2007 @@ -282,8 +282,7 @@ addPass(PM, createIndVarSimplifyPass()); // Canonicalize indvars addPass(PM, createLoopUnrollPass()); // Unroll small loops addPass(PM, createInstructionCombiningPass()); // Clean up after the unroller - addPass(PM, createLoadValueNumberingPass()); // GVN for load instructions - addPass(PM, createGCSEPass()); // Remove common subexprs + addPass(PM, createGVNPass()); // Remove redundancies addPass(PM, createSCCPPass()); // Constant prop with SCCP // Run instcombine after redundancy elimination to exploit opportunities From resistor at mac.com Sat Sep 8 17:27:10 2007 From: resistor at mac.com (Owen Anderson) Date: Sat, 08 Sep 2007 22:27:10 -0000 Subject: [llvm-commits] [llvm-gcc-4.0] r41788 - in /llvm-gcc-4.0/trunk/gcc: llvm-backend.cpp llvm-linker-hack.cpp Message-ID: <200709082227.l88MRATQ015595@zion.cs.uiuc.edu> Author: resistor Date: Sat Sep 8 17:27:09 2007 New Revision: 41788 URL: http://llvm.org/viewvc/llvm-project?rev=41788&view=rev Log: Use GVN instead of GCSE. Modified: llvm-gcc-4.0/trunk/gcc/llvm-backend.cpp llvm-gcc-4.0/trunk/gcc/llvm-linker-hack.cpp Modified: llvm-gcc-4.0/trunk/gcc/llvm-backend.cpp URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.0/trunk/gcc/llvm-backend.cpp?rev=41788&r1=41787&r2=41788&view=diff ============================================================================== --- llvm-gcc-4.0/trunk/gcc/llvm-backend.cpp (original) +++ llvm-gcc-4.0/trunk/gcc/llvm-backend.cpp Sat Sep 8 17:27:09 2007 @@ -345,8 +345,7 @@ if (flag_unroll_loops) PM->add(createLoopUnrollPass()); // Unroll small loops PM->add(createInstructionCombiningPass()); // Clean up after the unroller - PM->add(createLoadValueNumberingPass()); // GVN for load instructions - PM->add(createGCSEPass()); // Remove common subexprs + PM->add(createGVNPass()); // Eliminate redundancies PM->add(createSCCPPass()); // Constant prop with SCCP // Run instcombine after redundancy elimination to exploit opportunities Modified: llvm-gcc-4.0/trunk/gcc/llvm-linker-hack.cpp URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.0/trunk/gcc/llvm-linker-hack.cpp?rev=41788&r1=41787&r2=41788&view=diff ============================================================================== --- llvm-gcc-4.0/trunk/gcc/llvm-linker-hack.cpp (original) +++ llvm-gcc-4.0/trunk/gcc/llvm-linker-hack.cpp Sat Sep 8 17:27:09 2007 @@ -54,6 +54,7 @@ llvm::createBFS_DAGScheduler(NULL, NULL, NULL); llvm::createLinearScanRegisterAllocator(); + llvm::createGVNPass(); llvm::createGCSEPass(); llvm::createLoopRotatePass(); llvm::createLICMPass(); From resistor at mac.com Sat Sep 8 17:28:35 2007 From: resistor at mac.com (Owen Anderson) Date: Sat, 08 Sep 2007 22:28:35 -0000 Subject: [llvm-commits] [llvm-gcc-4.2] r41789 - in /llvm-gcc-4.2/trunk/gcc: llvm-backend.cpp llvm-linker-hack.cpp Message-ID: <200709082228.l88MSZYs015686@zion.cs.uiuc.edu> Author: resistor Date: Sat Sep 8 17:28:34 2007 New Revision: 41789 URL: http://llvm.org/viewvc/llvm-project?rev=41789&view=rev Log: Use GVN instead of GCSE. Modified: llvm-gcc-4.2/trunk/gcc/llvm-backend.cpp llvm-gcc-4.2/trunk/gcc/llvm-linker-hack.cpp Modified: llvm-gcc-4.2/trunk/gcc/llvm-backend.cpp URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/llvm-backend.cpp?rev=41789&r1=41788&r2=41789&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/llvm-backend.cpp (original) +++ llvm-gcc-4.2/trunk/gcc/llvm-backend.cpp Sat Sep 8 17:28:34 2007 @@ -346,8 +346,7 @@ if (flag_unroll_loops) PM->add(createLoopUnrollPass()); // Unroll small loops PM->add(createInstructionCombiningPass()); // Clean up after the unroller - PM->add(createLoadValueNumberingPass()); // GVN for load instructions - PM->add(createGCSEPass()); // Remove common subexprs + PM->add(createGVNPass()); // Remove redundancies PM->add(createSCCPPass()); // Constant prop with SCCP // Run instcombine after redundancy elimination to exploit opportunities Modified: llvm-gcc-4.2/trunk/gcc/llvm-linker-hack.cpp URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/llvm-linker-hack.cpp?rev=41789&r1=41788&r2=41789&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/llvm-linker-hack.cpp (original) +++ llvm-gcc-4.2/trunk/gcc/llvm-linker-hack.cpp Sat Sep 8 17:28:34 2007 @@ -54,6 +54,7 @@ llvm::createBFS_DAGScheduler(NULL, NULL, NULL); llvm::createLinearScanRegisterAllocator(); + llvm::createGVNPass(); llvm::createGCSEPass(); llvm::createLoopRotatePass(); llvm::createLICMPass(); From nicholas at mxc.ca Sat Sep 8 17:59:08 2007 From: nicholas at mxc.ca (Nick Lewycky) Date: Sat, 08 Sep 2007 18:59:08 -0400 Subject: [llvm-commits] Trampoline changes In-Reply-To: <200709090003.59557.baldrick@free.fr> References: <200709090003.59557.baldrick@free.fr> Message-ID: <46E3293C.6080003@mxc.ca> Duncan Sands wrote: > It is easy to construct testcases for which this works, but sadly I was unable to get > the optimization to occur even once in a trampoline heavy real-world program without > jacking-up the inlining limit hugely (to 100000; 10000 wasn't enough). Still, I'm > hoping that it may sometimes be useful. Why does changing the inliner threshold help? Are you talking about inlining the trampoline itself or the llvm.init.trampoline intrinsic? Could we adjust the weights in the inliner so that it does it more often, seeing as a trampoline call is much more expensive than a regular call? Would you mind sending a small before and after example for the transformation implemented by your instcombine patch? Nick Lewycky From dberlin at dberlin.org Sat Sep 8 20:10:41 2007 From: dberlin at dberlin.org (Daniel Berlin) Date: Sun, 09 Sep 2007 01:10:41 -0000 Subject: [llvm-commits] [llvm] r41790 - in /llvm/trunk: CREDITS.TXT include/llvm/ADT/SparseBitVector.h Message-ID: <200709090110.l891AfRr021934@zion.cs.uiuc.edu> Author: dannyb Date: Sat Sep 8 20:10:40 2007 New Revision: 41790 URL: http://llvm.org/viewvc/llvm-project?rev=41790&view=rev Log: Add SparseBitVector implementation Added: llvm/trunk/include/llvm/ADT/SparseBitVector.h Modified: llvm/trunk/CREDITS.TXT Modified: llvm/trunk/CREDITS.TXT URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/CREDITS.TXT?rev=41790&r1=41789&r2=41790&view=diff ============================================================================== --- llvm/trunk/CREDITS.TXT (original) +++ llvm/trunk/CREDITS.TXT Sat Sep 8 20:10:40 2007 @@ -29,6 +29,7 @@ N: Daniel Berlin E: dberlin at dberlin.org D: ET-Forest implementation. +D: Sparse bitmap N: Neil Booth E: neil at daikokuya.co.uk Added: llvm/trunk/include/llvm/ADT/SparseBitVector.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/SparseBitVector.h?rev=41790&view=auto ============================================================================== --- llvm/trunk/include/llvm/ADT/SparseBitVector.h (added) +++ llvm/trunk/include/llvm/ADT/SparseBitVector.h Sat Sep 8 20:10:40 2007 @@ -0,0 +1,560 @@ +//===- llvm/ADT/SparseBitVector.h - Efficient Sparse BitVector -*- C++ -*- ===// +// +// The LLVM Compiler Infrastructure +// +// This file was developed by Daniel Berlin and is distributed under +// the University of Illinois Open Source License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This file defines the SparseBitVector class. See the doxygen comment for +// SparseBitVector for more details on the algorithm used. +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_ADT_SPARSEBITVECTOR_H +#define LLVM_ADT_SPARSEBITVECTOR_H + +#include +#include +#include +#include +#include "llvm/Support/DataTypes.h" +#include "llvm/ADT/STLExtras.h" +#include "llvm/Support/MathExtras.h" + +namespace llvm { + +/// SparseBitVector is an implementation of a bitvector that is sparse by only +/// storing the elements that have non-zero bits set. In order to make this +/// fast for the most common cases, SparseBitVector is implemented as a linked +/// list of SparseBitVectorElements. We maintain a pointer to the last +/// SparseBitVectorElement accessed (in the form of a list iterator), in order +/// to make multiple in-order test/set constant time after the first one is +/// executed. Note that using vectors to store SparseBitVectorElement's does +/// not work out very well because it causes insertion in the middle to take +/// enormous amounts of time with a large amount of bits. Other structures that +/// have better worst cases for insertion in the middle (various balanced trees, +/// etc) do not perform as well in practice as a linked list with this iterator +/// kept up to date. They are also significantly more memory intensive. + + +template +struct SparseBitVectorElement { +public: + typedef unsigned long BitWord; + enum { + BITWORD_SIZE = sizeof(BitWord) * 8, + BITWORDS_PER_ELEMENT = (ElementSize + BITWORD_SIZE - 1) / BITWORD_SIZE, + BITS_PER_ELEMENT = ElementSize + }; +private: + // Index of Element in terms of where first bit starts. + unsigned ElementIndex; + BitWord Bits[BITWORDS_PER_ELEMENT]; + SparseBitVectorElement(); +public: + explicit SparseBitVectorElement(unsigned Idx) { + ElementIndex = Idx; + memset(&Bits[0], 0, sizeof (BitWord) * BITWORDS_PER_ELEMENT); + } + + ~SparseBitVectorElement() { + } + + // Copy ctor. + SparseBitVectorElement(const SparseBitVectorElement &RHS) { + ElementIndex = RHS.ElementIndex; + std::copy(&RHS.Bits[0], &RHS.Bits[BITWORDS_PER_ELEMENT], Bits); + } + + // Comparison. + bool operator==(const SparseBitVectorElement &RHS) const { + if (ElementIndex != RHS.ElementIndex) + return false; + for (unsigned i = 0; i < BITWORDS_PER_ELEMENT; ++i) + if (Bits[i] != RHS.Bits[i]) + return false; + return true; + } + + bool operator!=(const SparseBitVectorElement &RHS) const { + return !(*this == RHS); + } + + // Return the bits that make up word Idx in our element. + BitWord word(unsigned Idx) const { + assert (Idx < BITWORDS_PER_ELEMENT); + return Bits[Idx]; + } + + unsigned index() const { + return ElementIndex; + } + + bool empty() const { + for (unsigned i = 0; i < BITWORDS_PER_ELEMENT; ++i) + if (Bits[i]) + return false; + return true; + } + + void set(unsigned Idx) { + Bits[Idx / BITWORD_SIZE] |= 1L << (Idx % BITWORD_SIZE); + } + + bool test_and_set (unsigned Idx) { + bool old = test(Idx); + if (!old) + set(Idx); + return !old; + } + + void reset(unsigned Idx) { + Bits[Idx / BITWORD_SIZE] &= ~(1L << (Idx % BITWORD_SIZE)); + } + + bool test(unsigned Idx) const { + return Bits[Idx / BITWORD_SIZE] & (1L << (Idx % BITWORD_SIZE)); + } + + unsigned count() const { + unsigned NumBits = 0; + for (unsigned i = 0; i < BITWORDS_PER_ELEMENT; ++i) + if (sizeof(BitWord) == 4) + NumBits += CountPopulation_32(Bits[i]); + else if (sizeof(BitWord) == 8) + NumBits += CountPopulation_64(Bits[i]); + else + assert(0 && "Unsupported!"); + return NumBits; + } + + /// find_first - Returns the index of the first set bit. + int find_first() const { + for (unsigned i = 0; i < BITWORDS_PER_ELEMENT; ++i) + if (Bits[i] != 0) { + if (sizeof(BitWord) == 4) + return i * BITWORD_SIZE + CountTrailingZeros_32(Bits[i]); + else if (sizeof(BitWord) == 8) + return i * BITWORD_SIZE + CountTrailingZeros_64(Bits[i]); + else + assert(0 && "Unsupported!"); + } + assert(0 && "Illegal empty element"); + } + + /// find_next - Returns the index of the next set bit following the + /// "Prev" bit. Returns -1 if the next set bit is not found. + int find_next(unsigned Prev) const { + ++Prev; + if (Prev >= BITS_PER_ELEMENT) + return -1; + + unsigned WordPos = Prev / BITWORD_SIZE; + unsigned BitPos = Prev % BITWORD_SIZE; + BitWord Copy = Bits[WordPos]; + assert (WordPos <= BITWORDS_PER_ELEMENT + && "Word Position outside of element"); + + // Mask off previous bits. + Copy &= ~0L << BitPos; + + if (Copy != 0) { + if (sizeof(BitWord) == 4) + return WordPos * BITWORD_SIZE + CountTrailingZeros_32(Copy); + else if (sizeof(BitWord) == 8) + return WordPos * BITWORD_SIZE + CountTrailingZeros_64(Copy); + else + assert(0 && "Unsupported!"); + } + + // Check subsequent words. + for (unsigned i = WordPos+1; i < BITWORDS_PER_ELEMENT; ++i) + if (Bits[i] != 0) { + if (sizeof(BitWord) == 4) + return i * BITWORD_SIZE + CountTrailingZeros_32(Bits[i]); + else if (sizeof(BitWord) == 8) + return i * BITWORD_SIZE + CountTrailingZeros_64(Bits[i]); + else + assert(0 && "Unsupported!"); + } + return -1; + } + + // Union this element with RHS and return true if this one changed. + bool unionWith(const SparseBitVectorElement &RHS) { + bool changed = false; + for (unsigned i = 0; i < BITWORDS_PER_ELEMENT; ++i) { + BitWord old = changed ? 0 : Bits[i]; + + Bits[i] |= RHS.Bits[i]; + if (old != Bits[i]) + changed = true; + } + return changed; + } + + // Intersect this Element with RHS and return true if this one changed. + // BecameZero is set to true if this element became all-zero bits. + bool intersectWith(const SparseBitVectorElement &RHS, + bool &BecameZero) { + bool changed = false; + bool allzero = true; + + BecameZero = false; + for (unsigned i = 0; i < BITWORDS_PER_ELEMENT; ++i) { + BitWord old = changed ? 0 : Bits[i]; + + Bits[i] &= RHS.Bits[i]; + if (Bits[i] != 0) + allzero = false; + + if (old != Bits[i]) + changed = true; + } + BecameZero = !allzero; + return changed; + } +}; + +template +class SparseBitVector { + typedef std::list *> ElementList; + typedef typename ElementList::iterator ElementListIter; + typedef typename ElementList::const_iterator ElementListConstIter; + enum { + BITWORD_SIZE = SparseBitVectorElement::BITWORD_SIZE + }; + + // Pointer to our current Element. + ElementListIter CurrElementIter; + ElementList Elements; + + // This is like std::lower_bound, except we do linear searching from the + // current position. + ElementListIter FindLowerBound(unsigned ElementIndex) { + + if (Elements.empty()) { + CurrElementIter = Elements.begin(); + return Elements.begin(); + } + + // Make sure our current iterator is valid. + if (CurrElementIter == Elements.end()) + --CurrElementIter; + + // Search from our current iterator, either backwards or forwards, + // depending on what element we are looking for. + ElementListIter ElementIter = CurrElementIter; + if ((*CurrElementIter)->index() == ElementIndex) { + return ElementIter; + } else if ((*CurrElementIter)->index() > ElementIndex) { + while (ElementIter != Elements.begin() + && (*ElementIter)->index() > ElementIndex) + --ElementIter; + } else { + while (ElementIter != Elements.end() && + (*ElementIter)->index() <= ElementIndex) + ++ElementIter; + --ElementIter; + } + CurrElementIter = ElementIter; + return ElementIter; + } + + // Iterator to walk set bits in the bitmap. This iterator is a lot uglier + // than it would be, in order to be efficient. + struct SparseBitVectorIterator { + private: + bool AtEnd; + + SparseBitVector &BitVector; + + // Current element inside of bitmap. + ElementListConstIter Iter; + + // Current bit number inside of our bitmap. + unsigned BitNumber; + + // Current word number inside of our element. + unsigned WordNumber; + + // Current bits from the element. + typename SparseBitVectorElement::BitWord Bits; + + // Move our iterator to the first non-zero bit in the bitmap. + void AdvanceToFirstNonZero() { + if (AtEnd) + return; + if (BitVector.Elements.empty()) { + AtEnd = true; + return; + } + Iter = BitVector.Elements.begin(); + BitNumber = (*Iter)->index() * ElementSize; + unsigned BitPos = (*Iter)->find_first(); + BitNumber += BitPos; + WordNumber = (BitNumber % ElementSize) / BITWORD_SIZE; + Bits = (*Iter)->word(WordNumber); + Bits >>= BitPos % BITWORD_SIZE; + } + + // Move our iterator to the next non-zero bit. + void AdvanceToNextNonZero() { + if (AtEnd) + return; + + while (Bits && !(Bits & 1)) { + Bits >>= 1; + BitNumber += 1; + } + + // See if we ran out of Bits in this word. + if (!Bits) { + int NextSetBitNumber = (*Iter)->find_next(BitNumber % ElementSize) ; + // If we ran out of set bits in this element, move to next element. + if (NextSetBitNumber == -1 || (BitNumber % ElementSize == 0)) { + Iter++; + WordNumber = 0; + + // We may run out of elements in the bitmap. + if (Iter == BitVector.Elements.end()) { + AtEnd = true; + return; + } + // Set up for next non zero word in bitmap. + BitNumber = (*Iter)->index() * ElementSize; + NextSetBitNumber = (*Iter)->find_first(); + BitNumber += NextSetBitNumber; + WordNumber = (BitNumber % ElementSize) / BITWORD_SIZE; + Bits = (*Iter)->word(WordNumber); + Bits >>= NextSetBitNumber % BITWORD_SIZE; + } else { + WordNumber = (NextSetBitNumber % ElementSize) / BITWORD_SIZE; + Bits = (*Iter)->word(WordNumber); + Bits >>= NextSetBitNumber % BITWORD_SIZE; + } + } + } + public: + // Preincrement. + inline SparseBitVectorIterator& operator++() { + BitNumber++; + Bits >>= 1; + AdvanceToNextNonZero(); + return *this; + } + + // Postincrement. + inline SparseBitVectorIterator operator++(int) { + SparseBitVectorIterator tmp = *this; + ++*this; + return tmp; + } + + // Return the current set bit number. + unsigned operator*() const { + return BitNumber; + } + + bool operator==(const SparseBitVectorIterator &RHS) const { + // If they are both at the end, ignore the rest of the fields. + if (AtEnd == RHS.AtEnd) + return true; + // Otherwise they are the same if they have the same bit number and + // bitmap. + return AtEnd == RHS.AtEnd && RHS.BitNumber == BitNumber; + } + bool operator!=(const SparseBitVectorIterator &RHS) const { + return !(*this == RHS); + } + + explicit SparseBitVectorIterator(SparseBitVector &RHS, + bool end = false):BitVector(RHS) { + Iter = BitVector.Elements.begin(); + BitNumber = 0; + Bits = 0; + WordNumber = ~0; + AtEnd = end; + AdvanceToFirstNonZero(); + } + }; +public: + typedef SparseBitVectorIterator iterator; + typedef const SparseBitVectorIterator const_iterator; + + SparseBitVector () { + CurrElementIter = Elements.begin (); + } + + ~SparseBitVector() { + for_each(Elements.begin(), Elements.end(), + deleter >); + } + + // SparseBitVector copy ctor. + SparseBitVector(const SparseBitVector &RHS) { + ElementListConstIter ElementIter = RHS.Elements.begin(); + while (ElementIter != RHS.Elements.end()) { + SparseBitVectorElement *ElementCopy; + ElementCopy = new SparseBitVectorElement(*(*ElementIter)); + Elements.push_back(ElementCopy); + } + + CurrElementIter = Elements.begin (); + } + + // Test, Reset, and Set a bit in the bitmap. + bool test(unsigned Idx) { + if (Elements.empty()) + return false; + + unsigned ElementIndex = Idx / ElementSize; + ElementListIter ElementIter = FindLowerBound(ElementIndex); + + // If we can't find an element that is supposed to contain this bit, there + // is nothing more to do. + if (ElementIter == Elements.end() || + (*ElementIter)->index() != ElementIndex) + return false; + return (*ElementIter)->test(Idx % ElementSize); + } + + void reset(unsigned Idx) { + if (Elements.empty()) + return; + + unsigned ElementIndex = Idx / ElementSize; + ElementListIter ElementIter = FindLowerBound(ElementIndex); + + // If we can't find an element that is supposed to contain this bit, there + // is nothing more to do. + if (ElementIter == Elements.end() || + (*ElementIter)->index() != ElementIndex) + return; + (*ElementIter)->reset(Idx % ElementSize); + + // When the element is zeroed out, delete it. + if ((*ElementIter)->empty()) { + delete (*ElementIter); + ++CurrElementIter; + Elements.erase(ElementIter); + } + } + + void set(unsigned Idx) { + SparseBitVectorElement *Element; + unsigned ElementIndex = Idx / ElementSize; + + if (Elements.empty()) { + Element = new SparseBitVectorElement(ElementIndex); + Elements.push_back(Element); + } else { + ElementListIter ElementIter = FindLowerBound(ElementIndex); + + if (ElementIter != Elements.end() && + (*ElementIter)->index() == ElementIndex) + Element = *ElementIter; + else { + Element = new SparseBitVectorElement(ElementIndex); + // Insert does insert before, and lower bound gives the one before. + Elements.insert(++ElementIter, Element); + } + } + Element->set(Idx % ElementSize); + } + + // Union our bitmap with the RHS and return true if we changed. + bool operator|=(const SparseBitVector &RHS) { + bool changed = false; + ElementListIter Iter1 = Elements.begin(); + ElementListConstIter Iter2 = RHS.Elements.begin(); + + // IE They may both be end + if (Iter1 == Iter2) + return false; + + // See if the first bitmap element is the same in both. This is only + // possible if they are the same bitmap. + if (Iter1 != Elements.end() && Iter2 != RHS.Elements.end()) + if (*Iter1 == *Iter2) + return false; + + while (Iter2 != RHS.Elements.end()) { + if (Iter1 == Elements.end() || (*Iter1)->index() > (*Iter2)->index()) { + SparseBitVectorElement *NewElem; + + NewElem = new SparseBitVectorElement(*(*Iter2)); + Elements.insert(Iter1, NewElem); + Iter2++; + changed = true; + } else if ((*Iter1)->index() == (*Iter2)->index()) { + changed |= (*Iter1)->unionWith(*(*Iter2)); + Iter1++; + Iter2++; + } else { + Iter1++; + } + } + CurrElementIter = Elements.begin(); + return changed; + } + + // Intersect our bitmap with the RHS and return true if ours changed. + bool operator&=(const SparseBitVector &RHS) { + bool changed = false; + ElementListIter Iter1 = Elements.begin(); + ElementListConstIter Iter2 = RHS.Elements.begin(); + + // IE They may both be end. + if (Iter1 == Iter2) + return false; + + // See if the first bitmap element is the same in both. This is only + // possible if they are the same bitmap. + if (Iter1 != Elements.end() && Iter2 != RHS.Elements.end()) + if (*Iter1 == *Iter2) + return false; + + // Loop through, intersecting as we go, erasing elements when necessary. + while (Iter2 != RHS.Elements.end()) { + if (Iter1 == Elements.end()) + return changed; + + if ((*Iter1)->index() > (*Iter2)->index()) { + Iter2++; + } else if ((*Iter1)->index() == (*Iter2)->index()) { + bool BecameZero; + changed |= (*Iter1)->intersectWith(*(*Iter2), BecameZero); + if (BecameZero) { + ElementListIter IterTmp = Iter1; + delete *IterTmp; + Elements.erase(IterTmp); + Iter1++; + } else { + Iter1++; + } + Iter2++; + } else { + ElementListIter IterTmp = Iter1; + Iter1++; + delete *IterTmp; + Elements.erase(IterTmp); + } + } + CurrElementIter = Elements.begin(); + return changed; + } + + iterator begin() const { + return iterator(*this); + } + + iterator end() const { + return iterator(*this, ~0); + } +}; +} + +#endif From baldrick at free.fr Sun Sep 9 03:46:21 2007 From: baldrick at free.fr (Duncan Sands) Date: Sun, 9 Sep 2007 10:46:21 +0200 Subject: [llvm-commits] Trampoline changes In-Reply-To: <46E3293C.6080003@mxc.ca> References: <200709090003.59557.baldrick@free.fr> <46E3293C.6080003@mxc.ca> Message-ID: <200709091046.23869.baldrick@free.fr> Hi Nick, > > It is easy to construct testcases for which this works, but sadly I was unable to get > > the optimization to occur even once in a trampoline heavy real-world program without > > jacking-up the inlining limit hugely (to 100000; 10000 wasn't enough). Still, I'm > > hoping that it may sometimes be useful. > > Why does changing the inliner threshold help? Are you talking about > inlining the trampoline itself or the llvm.init.trampoline intrinsic? > Could we adjust the weights in the inliner so that it does it more > often, seeing as a trampoline call is much more expensive than a regular > call? > > Would you mind sending a small before and after example for the > transformation implemented by your instcombine patch? consider this example: int process(int (*func)(int)) { return func(1); } int nest(int n) { int f(int m) { return m == n; } return process(&f); } A pointer to the nested function "f" is passed to "process". Note that f accesses "n", an argument to the parent function "nest". When process calls f, somehow f has to be able to get the value of n, even though n wasn't passed to process. This is done using black magic. In fact process is not passed a pointer to f. Instead a small piece of code is contructed on the stack of nest, and a pointer to this code (the trampoline) is passed to process instead. The trampoline code calls f, passing it any extra info it needs, like n. To see how this works exactly, consider the corresponding bitcode: %struct.FRAME.nest = type { i32, i32 (i32)* } %struct.__builtin_trampoline = type { [10 x i8] } declare i8* @llvm.init.trampoline(i8*, i8*, i8*) define i32 @process(i32 (i32)* %func) { entry: %tmp2 = tail call i32 %func( i32 1 ) ; [#uses=1] ret i32 %tmp2 } define internal i32 @f.934(%struct.FRAME.nest* nest %CHAIN.1, i32 %m) { entry: %tmp3 = getelementptr %struct.FRAME.nest* %CHAIN.1, i32 0, i32 0 ; [#uses=1] %tmp4 = load i32* %tmp3, align 4 ; [#uses=1] %tmp7 = icmp eq i32 %tmp4, %m ; [#uses=1] %tmp78 = zext i1 %tmp7 to i32 ; [#uses=1] ret i32 %tmp78 } define i32 @nest(i32 %n) { entry: %FRAME.0 = alloca %struct.FRAME.nest, align 8 ; <%struct.FRAME.nest*> [#uses=3] %TRAMP.216 = alloca [10 x i8], align 16 ; <[10 x i8]*> [#uses=1] %TRAMP.216.sub = getelementptr [10 x i8]* %TRAMP.216, i32 0, i32 0 ; [#uses=1] %tmp3 = getelementptr %struct.FRAME.nest* %FRAME.0, i32 0, i32 0 ; [#uses=1] store i32 %n, i32* %tmp3, align 8 %FRAME.06 = bitcast %struct.FRAME.nest* %FRAME.0 to i8* ; [#uses=1] %tramp = call i8* @llvm.init.trampoline( i8* %TRAMP.216.sub, i8* bitcast (i32 (%struct.FRAME.nest* nest , i32)* @f.934 to i8*), i8* %FRAME.06 ) ; [#uses=1] %tmp7 = getelementptr %struct.FRAME.nest* %FRAME.0, i32 0, i32 1 ; [#uses=1] %tmp89 = bitcast i8* %tramp to i32 (i32)* ; [#uses=2] store i32 (i32)* %tmp89, i32 (i32)** %tmp7, align 8 %tmp13 = call i32 @process( i32 (i32)* %tmp89 ) ; [#uses=1] ret i32 %tmp13 } First note that the nested function f has been turned into @f.934 and all of a sudden has an extra parameter %CHAIN.1 This parameter is used to pass in the arguments and variables (such as n) of the parent function nest. If you look closely you will see that it is a pointer to a struct that holds both n and a function pointer suitable for calling f (in more complicated situations this function pointer needs to live in this frame struct, but here it would have been OK to simply be another variable on nest's stack). This function pointer is %tramp, the result of the @llvm.init.trampoline call. It is %tramp that is passed to process, after being bitcast to the right type. Now take a look at this part of nest after inlining @process: %tramp = call i8* @llvm.init.trampoline( i8* %TRAMP.216.sub, i8* bitcast (i32 (%struct.FRAME.nest* nest , i32)* @f.934 to i8*), i8* %FRAME.06 ) ; [#uses=1] %tmp7 = getelementptr %struct.FRAME.nest* %FRAME.0, i32 0, i32 1 ; [#uses=1] %tmp89 = bitcast i8* %tramp to i32 (i32)* ; [#uses=2] store i32 (i32)* %tmp89, i32 (i32)** %tmp7, align 8 %tmp2.i = call i32 %tmp89( i32 1 ) ; [#uses=1] The use of a trampoline is now pointless: since we are inside nest the extra argument to f is directly available. So we could rewrite the "call i32 %tmp89( i32 1 )" with a direct call to f. This is what the new optimization does. Here is the result: %tramp = call i8* @llvm.init.trampoline( i8* %TRAMP.216.sub, i8* bitcast (i32 (%struct.FRAME.nest* nest , i32)* @f.934 to i8*), i8* %FRAME.06 ) ; [#uses=1] %tmp7 = getelementptr %struct.FRAME.nest* %FRAME.0, i32 0, i32 1 ; [#uses=1] %tmp89 = bitcast i8* %tramp to i32 (i32)* ; [#uses=1] store i32 (i32)* %tmp89, i32 (i32)** %tmp7, align 8 %nest = bitcast i8* %FRAME.06 to %struct.FRAME.nest* ; <%struct.FRAME.nest*> [#uses=1] %tmp2.i1 = call i32 @f.934( %struct.FRAME.nest* %nest nest , i32 1 ) ; [#uses=1] The call to the trampoline has been replaced by a direct call to @f.934, with the extra argument it requires spliced in. Note that the call to init_trampoline has not been removed even though it is now useless. I hope to do something about this later. Let me now explain the inlining problem. First note that in practice the only reason to take a pointer to a nested function is to pass them to some outside routine like process. Since otherwise you could just call the nested function directly. Second, in order to simplify a trampoline call the extra arguments ("n") to the nested function ("f") have to be available at the point of the call. This is only going to happen if process (or whatever) has been inlined into the parent function ("nest"). But inlining is only going to happen if the outside function is small. The Ada containers library expects users to pass in function pointers and in many situations you are obliged to pass in a pointer to a nested function. Since the gcc Ada front-end implements these pointers using trampolines this means that using the container library results in a lot of trampoline calls. (The front-end could have made use of "fat pointers" instead, avoiding trampolines; I hear that they plan to do this at some point exactly because of the cost of trampolines, but for the moment it's trampolines). My hope was that some of these trampoline calls could be eliminated using this optimization. But for that to happen, the routines in the container library have to be small enough to be inlined. They are not. In fact they're rather small in terms of lines of code, but exception handling etc really bulks up the LLVM bitcode making the inliner pass them over. Ciao, Duncan. From asl at math.spbu.ru Sun Sep 9 09:26:53 2007 From: asl at math.spbu.ru (Anton Korobeynikov) Date: Sun, 09 Sep 2007 14:26:53 -0000 Subject: [llvm-commits] [llvm-gcc-4.0] r41791 - /llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp Message-ID: <200709091426.l89EQrXY006822@zion.cs.uiuc.edu> Author: asl Date: Sun Sep 9 09:26:52 2007 New Revision: 41791 URL: http://llvm.org/viewvc/llvm-project?rev=41791&view=rev Log: Unbreak 64-bit build Modified: llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp Modified: llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp?rev=41791&r1=41790&r2=41791&view=diff ============================================================================== --- llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp (original) +++ llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp Sun Sep 9 09:26:52 2007 @@ -2447,7 +2447,7 @@ Value *Select = Builder.CreateLoad(ExceptionSelectorValue, "tmp"); // Compare with the filter action value. - Value *Zero = ConstantInt::get(Type::Int32Ty, 0); + Value *Zero = ConstantInt::get(Select->getType(), 0); Value *Compare = Builder.CreateICmpSLT(Select, Zero, "tmp"); // Branch on the compare. From resistor at mac.com Sun Sep 9 16:43:51 2007 From: resistor at mac.com (Owen Anderson) Date: Sun, 09 Sep 2007 21:43:51 -0000 Subject: [llvm-commits] [llvm] r41792 - /llvm/trunk/lib/Analysis/MemoryDependenceAnalysis.cpp Message-ID: <200709092143.l89LhppN024331@zion.cs.uiuc.edu> Author: resistor Date: Sun Sep 9 16:43:49 2007 New Revision: 41792 URL: http://llvm.org/viewvc/llvm-project?rev=41792&view=rev Log: Remove an un-needed dependence query. This improves compile time marginally on 401.bzip2. Modified: llvm/trunk/lib/Analysis/MemoryDependenceAnalysis.cpp Modified: llvm/trunk/lib/Analysis/MemoryDependenceAnalysis.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/MemoryDependenceAnalysis.cpp?rev=41792&r1=41791&r2=41792&view=diff ============================================================================== --- llvm/trunk/lib/Analysis/MemoryDependenceAnalysis.cpp (original) +++ llvm/trunk/lib/Analysis/MemoryDependenceAnalysis.cpp Sun Sep 9 16:43:49 2007 @@ -21,9 +21,15 @@ #include "llvm/Analysis/AliasAnalysis.h" #include "llvm/Support/CFG.h" #include "llvm/Target/TargetData.h" +#include "llvm/ADT/Statistic.h" + +#define DEBUG_TYPE "memdep" using namespace llvm; +STATISTIC(NumCacheNonlocal, "Number of cached non-local responses"); +STATISTIC(NumUncacheNonlocal, "Number of uncached non-local responses"); + char MemoryDependenceAnalysis::ID = 0; Instruction* const MemoryDependenceAnalysis::NonLocal = (Instruction*)-3; @@ -205,17 +211,12 @@ DenseMap& resp) { if (depGraphNonLocal.count(query)) { resp = depGraphNonLocal[query]; + NumCacheNonlocal++; return; - } - - // First check that we don't actually have a local dependency. - Instruction* localDep = getDependency(query); - if (localDep != NonLocal) { - resp.insert(std::make_pair(query->getParent(),localDep)); - return; - } + } else + NumUncacheNonlocal++; - // If not, go ahead and search for non-local ones. + // If not, go ahead and search for non-local deps. nonLocalHelper(query, query->getParent(), resp); // Update the non-local dependency cache