From lattner at cs.uiuc.edu Mon May 9 00:33:34 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Mon, 9 May 2005 00:33:34 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/X86/X86ISelPattern.cpp Message-ID: <200505090533.j495XYCc001136@apoc.cs.uiuc.edu> Changes in directory llvm/lib/Target/X86: X86ISelPattern.cpp updated: 1.113 -> 1.114 --- Log message: Fix FP -> bool casts --- Diffs of the changes: (+2 -0) X86ISelPattern.cpp | 2 ++ 1 files changed, 2 insertions(+) Index: llvm/lib/Target/X86/X86ISelPattern.cpp diff -u llvm/lib/Target/X86/X86ISelPattern.cpp:1.113 llvm/lib/Target/X86/X86ISelPattern.cpp:1.114 --- llvm/lib/Target/X86/X86ISelPattern.cpp:1.113 Sun May 8 22:36:39 2005 +++ llvm/lib/Target/X86/X86ISelPattern.cpp Mon May 9 00:33:18 2005 @@ -1701,6 +1701,7 @@ MVT::ValueType StoreClass = Node->getValueType(0); if (StoreClass == MVT::i8 || Node->getOpcode() == ISD::FP_TO_UINT) switch (StoreClass) { + case MVT::i1: case MVT::i8: StoreClass = MVT::i16; break; case MVT::i16: StoreClass = MVT::i32; break; case MVT::i32: StoreClass = MVT::i64; break; @@ -1743,6 +1744,7 @@ addFrameReference(BuildMI(BB, X86::MOV16rm, 4, Result), FrameIdx); break; case MVT::i8: + case MVT::i1: addFrameReference(BuildMI(BB, X86::MOV8rm, 4, Result), FrameIdx); break; } From lattner at cs.uiuc.edu Mon May 9 00:40:40 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Mon, 9 May 2005 00:40:40 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/X86/X86ISelPattern.cpp Message-ID: <200505090540.j495eemH001447@apoc.cs.uiuc.edu> Changes in directory llvm/lib/Target/X86: X86ISelPattern.cpp updated: 1.114 -> 1.115 --- Log message: Wrap long lines, remove dead code that is now handled by legalize --- Diffs of the changes: (+8 -55) X86ISelPattern.cpp | 63 ++++++----------------------------------------------- 1 files changed, 8 insertions(+), 55 deletions(-) Index: llvm/lib/Target/X86/X86ISelPattern.cpp diff -u llvm/lib/Target/X86/X86ISelPattern.cpp:1.114 llvm/lib/Target/X86/X86ISelPattern.cpp:1.115 --- llvm/lib/Target/X86/X86ISelPattern.cpp:1.114 Mon May 9 00:33:18 2005 +++ llvm/lib/Target/X86/X86ISelPattern.cpp Mon May 9 00:40:26 2005 @@ -152,7 +152,8 @@ // dead loads. SDOperand ArgValue; if (!I->use_empty()) - ArgValue = DAG.getLoad(ObjectVT, DAG.getEntryNode(), FIN, DAG.getSrcValue(NULL)); + ArgValue = DAG.getLoad(ObjectVT, DAG.getEntryNode(), FIN, + DAG.getSrcValue(NULL)); else { if (MVT::isInteger(ObjectVT)) ArgValue = DAG.getConstant(0, ObjectVT); @@ -250,13 +251,15 @@ case MVT::i32: case MVT::f32: Stores.push_back(DAG.getNode(ISD::STORE, MVT::Other, Chain, - Args[i].first, PtrOff, DAG.getSrcValue(NULL))); + Args[i].first, PtrOff, + DAG.getSrcValue(NULL))); ArgOffset += 4; break; case MVT::i64: case MVT::f64: Stores.push_back(DAG.getNode(ISD::STORE, MVT::Other, Chain, - Args[i].first, PtrOff, DAG.getSrcValue(NULL))); + Args[i].first, PtrOff, + DAG.getSrcValue(NULL))); ArgOffset += 8; break; } @@ -289,7 +292,8 @@ MVT::ValueType ArgVT = getValueType(ArgTy); SDOperand Result; if (!isVANext) { - Result = DAG.getLoad(ArgVT, DAG.getEntryNode(), VAList, DAG.getSrcValue(NULL)); + Result = DAG.getLoad(ArgVT, DAG.getEntryNode(), VAList, + DAG.getSrcValue(NULL)); } else { unsigned Amt; if (ArgVT == MVT::i32) @@ -1596,15 +1600,6 @@ int FrameIdx = F->getFrameInfo()->CreateStackObject(Size, Size); switch (SrcTy) { - case MVT::i64: - assert(0 && "Cast ulong to FP not implemented yet!"); - // FIXME: this won't work for cast [u]long to FP - addFrameReference(BuildMI(BB, X86::MOV32mr, 5), - FrameIdx).addReg(Tmp1); - addFrameReference(BuildMI(BB, X86::MOV32mr, 5), - FrameIdx, 4).addReg(Tmp1+1); - addFrameReference(BuildMI(BB, X86::FILD64m, 5, Result), FrameIdx); - break; case MVT::i32: addFrameReference(BuildMI(BB, X86::MOV32mr, 5), FrameIdx).addReg(Tmp1); @@ -1634,36 +1629,6 @@ unsigned CPI = F->getConstantPool()->getConstantPoolIndex(TheOffset); BuildMI(BB, X86::FADD32m, 5, RealDestReg).addReg(Result) .addConstantPoolIndex(CPI).addZImm(4).addReg(IsNeg).addSImm(0); - - } else if (Node->getOpcode() == ISD::UINT_TO_FP && SrcTy == MVT::i64) { - // We need special handling for unsigned 64-bit integer sources. If the - // input number has the "sign bit" set, then we loaded it incorrectly as a - // negative 64-bit number. In this case, add an offset value. - - // Emit a test instruction to see if the dynamic input value was signed. - BuildMI(BB, X86::TEST32rr, 2).addReg(Tmp1+1).addReg(Tmp1+1); - - // If the sign bit is set, get a pointer to an offset, otherwise get a - // pointer to a zero. - MachineConstantPool *CP = F->getConstantPool(); - unsigned Zero = MakeReg(MVT::i32); - Constant *Null = Constant::getNullValue(Type::UIntTy); - addConstantPoolReference(BuildMI(BB, X86::LEA32r, 5, Zero), - CP->getConstantPoolIndex(Null)); - unsigned Offset = MakeReg(MVT::i32); - Constant *OffsetCst = ConstantUInt::get(Type::UIntTy, 0x5f800000); - - addConstantPoolReference(BuildMI(BB, X86::LEA32r, 5, Offset), - CP->getConstantPoolIndex(OffsetCst)); - unsigned Addr = MakeReg(MVT::i32); - BuildMI(BB, X86::CMOVS32rr, 2, Addr).addReg(Zero).addReg(Offset); - - // Load the constant for an add. FIXME: this could make an 'fadd' that - // reads directly from memory, but we don't support these yet. - unsigned ConstReg = MakeReg(MVT::f64); - addDirectMem(BuildMI(BB, X86::FLD32m, 4, ConstReg), Addr); - - BuildMI(BB, X86::FpADD, 2, RealDestReg).addReg(ConstReg).addReg(Result); } return RealDestReg; } @@ -1705,10 +1670,6 @@ case MVT::i8: StoreClass = MVT::i16; break; case MVT::i16: StoreClass = MVT::i32; break; case MVT::i32: StoreClass = MVT::i64; break; - // The following treatment of cLong may not be perfectly right, - // but it survives chains of casts of the form - // double->ulong->double. - case MVT::i64: StoreClass = MVT::i64; break; default: assert(0 && "Unknown store class!"); } @@ -1724,19 +1685,11 @@ case MVT::i32: addFrameReference(BuildMI(BB, X86::FIST32m, 5), FrameIdx).addReg(Tmp1); break; - case MVT::i64: - addFrameReference(BuildMI(BB, X86::FISTP64m, 5), FrameIdx).addReg(Tmp1); - break; } switch (Node->getValueType(0)) { default: assert(0 && "Unknown integer type!"); - case MVT::i64: - // FIXME: this isn't gunna work. - assert(0 && "Cast FP to long not implemented yet!"); - addFrameReference(BuildMI(BB, X86::MOV32rm, 4, Result), FrameIdx); - addFrameReference(BuildMI(BB, X86::MOV32rm, 4, Result+1), FrameIdx, 4); case MVT::i32: addFrameReference(BuildMI(BB, X86::MOV32rm, 4, Result), FrameIdx); break; From lattner at cs.uiuc.edu Mon May 9 00:54:43 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Mon, 9 May 2005 00:54:43 -0500 Subject: [llvm-commits] CVS: llvm/test/Regression/CodeGen/X86/commute-two-addr.ll Message-ID: <200505090554.j495shTh001568@apoc.cs.uiuc.edu> Changes in directory llvm/test/Regression/CodeGen/X86: commute-two-addr.ll updated: 1.1 -> 1.2 --- Log message: tweak test to accept the (good) code emitted by the pattern isel --- Diffs of the changes: (+2 -2) commute-two-addr.ll | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) Index: llvm/test/Regression/CodeGen/X86/commute-two-addr.ll diff -u llvm/test/Regression/CodeGen/X86/commute-two-addr.ll:1.1 llvm/test/Regression/CodeGen/X86/commute-two-addr.ll:1.2 --- llvm/test/Regression/CodeGen/X86/commute-two-addr.ll:1.1 Sat Jan 1 20:30:04 2005 +++ llvm/test/Regression/CodeGen/X86/commute-two-addr.ll Mon May 9 00:54:27 2005 @@ -1,8 +1,8 @@ ; The register allocator can commute two-address instructions to avoid ; insertion of register-register copies. -; Check that there are no register-register copies left. -; RUN: llvm-as < %s | llc -march=x86 -x86-asm-syntax=intel | not grep 'mov %E.X, %E.X' +; Make sure there are only 3 mov's for each testcase +; RUN: llvm-as < %s | llc -march=x86 -x86-asm-syntax=intel | grep 'mov ' | wc -l | grep 6 %G = external global int From tbrethou at cs.uiuc.edu Mon May 9 01:09:38 2005 From: tbrethou at cs.uiuc.edu (Tanya Brethour) Date: Mon, 9 May 2005 01:09:38 -0500 Subject: [llvm-commits] CVS: llvm-test/External/SPEC/CFP95/110.applu/Makefile Message-ID: <200505090609.j4969cOH011126@apoc.cs.uiuc.edu> Changes in directory llvm-test/External/SPEC/CFP95/110.applu: Makefile updated: 1.2 -> 1.3 --- Log message: Add a tolerance value from the spec .pm file --- Diffs of the changes: (+1 -0) Makefile | 1 + 1 files changed, 1 insertion(+) Index: llvm-test/External/SPEC/CFP95/110.applu/Makefile diff -u llvm-test/External/SPEC/CFP95/110.applu/Makefile:1.2 llvm-test/External/SPEC/CFP95/110.applu/Makefile:1.3 --- llvm-test/External/SPEC/CFP95/110.applu/Makefile:1.2 Thu Oct 7 17:13:48 2004 +++ llvm-test/External/SPEC/CFP95/110.applu/Makefile Mon May 9 01:09:21 2005 @@ -3,5 +3,6 @@ STDIN_FILENAME = applu.in STDOUT_FILENAME = applu.out +FP_TOLERANCE = 0.0001 include ../../Makefile.spec95 From duraid at octopus.com.au Mon May 9 08:18:46 2005 From: duraid at octopus.com.au (Duraid Madina) Date: Mon, 9 May 2005 08:18:46 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/IA64/IA64ISelPattern.cpp Message-ID: <200505091318.IAA20454@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/IA64: IA64ISelPattern.cpp updated: 1.35 -> 1.36 --- Log message: fix and cleanup constmul code a bit, this fixes mediabench/toast and probably a couple of other tests. --- Diffs of the changes: (+10 -13) IA64ISelPattern.cpp | 23 ++++++++++------------- 1 files changed, 10 insertions(+), 13 deletions(-) Index: llvm/lib/Target/IA64/IA64ISelPattern.cpp diff -u llvm/lib/Target/IA64/IA64ISelPattern.cpp:1.35 llvm/lib/Target/IA64/IA64ISelPattern.cpp:1.36 --- llvm/lib/Target/IA64/IA64ISelPattern.cpp:1.35 Wed May 4 14:25:37 2005 +++ llvm/lib/Target/IA64/IA64ISelPattern.cpp Mon May 9 08:18:34 2005 @@ -680,11 +680,11 @@ } for(unsigned i=0; i Changes in directory llvm/docs: CodeGenerator.html updated: 1.13 -> 1.14 --- Log message: Fix bug noticed by Tzu-Chien Chiu, thanks! --- Diffs of the changes: (+2 -2) CodeGenerator.html | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) Index: llvm/docs/CodeGenerator.html diff -u llvm/docs/CodeGenerator.html:1.13 llvm/docs/CodeGenerator.html:1.14 --- llvm/docs/CodeGenerator.html:1.13 Sun Apr 24 19:38:52 2005 +++ llvm/docs/CodeGenerator.html Mon May 9 10:41:03 2005 @@ -683,7 +683,7 @@

A SelectionDAG has designated "Entry" and "Root" nodes. The Entry node is -always a marker node with an Opcode of ISD::TokenFactor. The Root node is the +always a marker node with an Opcode of ISD::EntryToken. The Root node is the final side-effecting node in the token chain. For example, in a single basic block function, this would be the return node.

@@ -992,7 +992,7 @@ Chris Lattner
The LLVM Compiler Infrastructure
- Last modified: $Date: 2005/04/25 00:38:52 $ + Last modified: $Date: 2005/05/09 15:41:03 $ From criswell at cs.uiuc.edu Mon May 9 11:39:45 2005 From: criswell at cs.uiuc.edu (John Criswell) Date: Mon, 9 May 2005 11:39:45 -0500 Subject: [llvm-commits] CVS: llvm/docs/GettingStarted.html Message-ID: <200505091639.LAA24812@choi.cs.uiuc.edu> Changes in directory llvm/docs: GettingStarted.html updated: 1.114 -> 1.115 --- Log message: Little corrections. --- Diffs of the changes: (+5 -5) GettingStarted.html | 10 +++++----- 1 files changed, 5 insertions(+), 5 deletions(-) Index: llvm/docs/GettingStarted.html diff -u llvm/docs/GettingStarted.html:1.114 llvm/docs/GettingStarted.html:1.115 --- llvm/docs/GettingStarted.html:1.114 Fri Apr 22 12:58:03 2005 +++ llvm/docs/GettingStarted.html Mon May 9 11:39:27 2005 @@ -118,7 +118,7 @@
  • cd cfrontend/platform
    ./fixheaders
  • -
  • Add the cfrontend's "bin" directory to your PATH variable
  • +
  • Add the cfrontend's "bin" directory to your PATH variable.
  • Get the LLVM Source Code @@ -156,7 +156,7 @@ /usr/local).

  • --with-llvmgccdir=directory

    Optionally, specify for directory the full pathname of the - C/C++ FrontEnd installation to use with this LLVM configuration. If + C/C++ front end installation to use with this LLVM configuration. If not specified, the PATH will be searched.

  • --enable-spec2000=directory

    Enable the SPEC2000 benchmarks for testing. The SPEC2000 @@ -1194,8 +1194,8 @@ module contains a comprehensive correctness, performance, and benchmarking test suite for LLVM. It is a separate CVS module because not every LLVM user is - interested in downloading or building such a comprehensive test. For further - details on this test suite, please see the + interested in downloading or building such a comprehensive test suite. For + further details on this test suite, please see the Testing Guide document.

    @@ -1514,7 +1514,7 @@ Chris Lattner
    Reid Spencer
    The LLVM Compiler Infrastructure
    - Last modified: $Date: 2005/04/22 17:58:03 $ + Last modified: $Date: 2005/05/09 16:39:27 $ From criswell at cs.uiuc.edu Mon May 9 11:50:16 2005 From: criswell at cs.uiuc.edu (John Criswell) Date: Mon, 9 May 2005 11:50:16 -0500 Subject: [llvm-commits] CVS: llvm/docs/GettingStarted.html Message-ID: <200505091650.LAA24878@choi.cs.uiuc.edu> Changes in directory llvm/docs: GettingStarted.html updated: 1.115 -> 1.116 --- Log message: Updated the list of code generators for LLVM 1.5. Added information on getting LLVM 1.5 from CVS (hopefully readers will understand that the label will work *after* LLVM 1.5 is released). --- Diffs of the changes: (+14 -1) GettingStarted.html | 15 ++++++++++++++- 1 files changed, 14 insertions(+), 1 deletion(-) Index: llvm/docs/GettingStarted.html diff -u llvm/docs/GettingStarted.html:1.115 llvm/docs/GettingStarted.html:1.116 --- llvm/docs/GettingStarted.html:1.115 Mon May 9 11:39:27 2005 +++ llvm/docs/GettingStarted.html Mon May 9 11:49:59 2005 @@ -270,6 +270,17 @@ PowerPC GCC + + + Linux7 + Alpha + GCC + + + Linux7 + Itanium (IA-64) + GCC +

    Notes:

    @@ -286,6 +297,7 @@ Download and install bison (excl. M4.exe) and flex in that order. Build binutils-2.15 from source, if necessary.
  • +
  • Native code generation exists but is not complete.
  • @@ -635,6 +647,7 @@ labels:

    -

    The CommandLine library does not restrict how you use the cl::Prefix or cl::Grouping -modifiers, but it is possible to specify ambiguous argument settings. Thus, it -is possible to have multiple letter options that are prefix or grouping options, -and they will still work as designed.

    +

    The CommandLine library does not restrict how you use the cl::Prefix or cl::Grouping modifiers, but it is possible to +specify ambiguous argument settings. Thus, it is possible to have multiple +letter options that are prefix or grouping options, and they will still work as +designed.

    To do this, the CommandLine library uses a greedy algorithm to parse the input option into (potentially multiple) prefix and grouping options. The @@ -1812,7 +1814,7 @@ Chris Lattner
    LLVM Compiler Infrastructure
    - Last modified: $Date: 2005/03/11 00:00:33 $ + Last modified: $Date: 2005/05/10 22:05:27 $ From brukman at cs.uiuc.edu Tue May 10 17:06:52 2005 From: brukman at cs.uiuc.edu (Misha Brukman) Date: Tue, 10 May 2005 17:06:52 -0500 Subject: [llvm-commits] CVS: llvm/docs/ProgrammersManual.html Message-ID: <200505102206.RAA14340@zion.cs.uiuc.edu> Changes in directory llvm/docs: ProgrammersManual.html updated: 1.85 -> 1.86 --- Log message: Remove vim modeline; this should go into ~/.vimrc --- Diffs of the changes: (+1 -3) ProgrammersManual.html | 3 +-- 1 files changed, 1 insertion(+), 2 deletions(-) Index: llvm/docs/ProgrammersManual.html diff -u llvm/docs/ProgrammersManual.html:1.85 llvm/docs/ProgrammersManual.html:1.86 --- llvm/docs/ProgrammersManual.html:1.85 Tue Apr 26 17:57:07 2005 +++ llvm/docs/ProgrammersManual.html Tue May 10 17:06:41 2005 @@ -2236,10 +2236,8 @@ Dinakar Dhurjati and Chris Lattner
    The LLVM Compiler Infrastructure
    - Last modified: $Date: 2005/04/26 22:57:07 $ + Last modified: $Date: 2005/05/10 22:06:41 $ - From brukman at cs.uiuc.edu Tue May 10 17:06:55 2005 From: brukman at cs.uiuc.edu (Misha Brukman) Date: Tue, 10 May 2005 17:06:55 -0500 Subject: [llvm-commits] CVS: llvm/docs/MakefileGuide.html Message-ID: <200505102206.RAA14346@zion.cs.uiuc.edu> Changes in directory llvm/docs: MakefileGuide.html updated: 1.24 -> 1.25 --- Log message: Remove vim modeline, this belongs in ~/.vimrc --- Diffs of the changes: (+1 -3) MakefileGuide.html | 3 +-- 1 files changed, 1 insertion(+), 2 deletions(-) Index: llvm/docs/MakefileGuide.html diff -u llvm/docs/MakefileGuide.html:1.24 llvm/docs/MakefileGuide.html:1.25 --- llvm/docs/MakefileGuide.html:1.24 Sun Jan 16 01:18:31 2005 +++ llvm/docs/MakefileGuide.html Tue May 10 17:06:14 2005 @@ -999,10 +999,8 @@ Reid Spencer
    The LLVM Compiler Infrastructure
    - Last modified: $Date: 2005/01/16 07:18:31 $ + Last modified: $Date: 2005/05/10 22:06:14 $ - From lattner at cs.uiuc.edu Tue May 10 17:32:47 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Tue, 10 May 2005 17:32:47 -0500 Subject: [llvm-commits] CVS: llvm/test/Regression/CFrontend/2005-05-10-GlobalUnionInit.c Message-ID: <200505102232.j4AMWkZJ021634@apoc.cs.uiuc.edu> Changes in directory llvm/test/Regression/CFrontend: 2005-05-10-GlobalUnionInit.c added (r1.1) --- Log message: new testcase for PR562: http://llvm.cs.uiuc.edu/PR562 --- Diffs of the changes: (+6 -0) 2005-05-10-GlobalUnionInit.c | 6 ++++++ 1 files changed, 6 insertions(+) Index: llvm/test/Regression/CFrontend/2005-05-10-GlobalUnionInit.c diff -c /dev/null llvm/test/Regression/CFrontend/2005-05-10-GlobalUnionInit.c:1.1 *** /dev/null Tue May 10 17:32:40 2005 --- llvm/test/Regression/CFrontend/2005-05-10-GlobalUnionInit.c Tue May 10 17:32:29 2005 *************** *** 0 **** --- 1,6 ---- + // RUN: %llvmgcc %s -S -o - + + union A { // { uint } + union B { double *C; } D; + } E = { { (double*)12312 } }; + From lattner at cs.uiuc.edu Tue May 10 17:33:29 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Tue, 10 May 2005 17:33:29 -0500 Subject: [llvm-commits] CVS: llvm-gcc/gcc/llvm-types.c llvm-expand.c Message-ID: <200505102233.j4AMXTaf021649@apoc.cs.uiuc.edu> Changes in directory llvm-gcc/gcc: llvm-types.c updated: 1.20 -> 1.21 llvm-expand.c updated: 1.97 -> 1.98 --- Log message: Be less paranoid about structures with holes in them for unions. This fixes PR562: http://llvm.cs.uiuc.edu/PR562 and CFrontend/2005-05-10-GlobalUnionInit.c --- Diffs of the changes: (+23 -2) llvm-expand.c | 3 ++- llvm-types.c | 22 +++++++++++++++++++++- 2 files changed, 23 insertions(+), 2 deletions(-) Index: llvm-gcc/gcc/llvm-types.c diff -u llvm-gcc/gcc/llvm-types.c:1.20 llvm-gcc/gcc/llvm-types.c:1.21 --- llvm-gcc/gcc/llvm-types.c:1.20 Sat Dec 4 15:44:55 2004 +++ llvm-gcc/gcc/llvm-types.c Tue May 10 17:33:16 2005 @@ -943,6 +943,26 @@ return TREE_ADDRESSABLE(Type); } +/* isStructWithHoles - This function returns true if the specified type is a + * struct and if it has inter-element gaps. + */ +static isStructWithHoles(llvm_type *Ty) { + unsigned i, e; + if (Ty->ID != StructTyID) return 0; + + /* Check to see that element i+1 starts at offsetof(i)+sizeof(STy[i]). */ + for (i = 0, e = Ty->NumElements; i != e-1; ++i) + if (Ty->x.Struct.MemberOffsets[i] + llvm_type_get_size(Ty->Elements[i]) != + Ty->x.Struct.MemberOffsets[i+1]) + return 1; + + /* Check for tail padding. */ + if (Ty->x.Struct.MemberOffsets[e-1] + llvm_type_get_size(Ty->Elements[e-1]) != + llvm_type_get_size(Ty)) + return 1; + return 0; +} + /* llvm_type_get_tree_type - Return the LLVM type that corresponds to the * specified tree type. If this is the first time we have seen a structure * type, we assign indexes to all of the FIELD_DECLs in it. @@ -1195,7 +1215,7 @@ * FIXME: Couldn't there be arrays that have structure types in them? * What about alignment? This preserves size but not necessarily alignment! */ - if (ElementType->ID == StructTyID) { + if (isStructWithHoles(ElementType)) { assert((MaxSize & 7) == 0 && "Only unions that are multiple of byte size expected!"); if (MaxSize & 0xF) Index: llvm-gcc/gcc/llvm-expand.c diff -u llvm-gcc/gcc/llvm-expand.c:1.97 llvm-gcc/gcc/llvm-expand.c:1.98 --- llvm-gcc/gcc/llvm-expand.c:1.97 Fri May 6 21:16:47 2005 +++ llvm-gcc/gcc/llvm-expand.c Tue May 10 17:33:16 2005 @@ -3932,7 +3932,8 @@ * So, for now, we will simply assert and stay as compile-fail until * we can get the whole thing working. */ - assert ((FieldSizeTree != NULL_TREE) && "Struct/Union member of unknown length!"); + assert ((FieldSizeTree != NULL_TREE) && + "Struct/Union member of unknown length!"); FieldSize = TREE_INT_CST_LOW (FieldSizeTree); assert(FieldIndex && "Structure isn't laid out by LLVM yet!"); From lattner at cs.uiuc.edu Tue May 10 17:51:27 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Tue, 10 May 2005 17:51:27 -0500 Subject: [llvm-commits] CVS: llvm-gcc/libstdc++-v3/config/cpu/i386/atomicity.h Message-ID: <200505102251.j4AMpRDV021994@apoc.cs.uiuc.edu> Changes in directory llvm-gcc/libstdc++-v3/config/cpu/i386: atomicity.h updated: 1.2 -> 1.3 --- Log message: Remove these, as they are dead --- Diffs of the changes: (+2 -0) atomicity.h | 2 ++ 1 files changed, 2 insertions(+) Index: llvm-gcc/libstdc++-v3/config/cpu/i386/atomicity.h diff -u llvm-gcc/libstdc++-v3/config/cpu/i386/atomicity.h:1.2 llvm-gcc/libstdc++-v3/config/cpu/i386/atomicity.h:1.3 --- llvm-gcc/libstdc++-v3/config/cpu/i386/atomicity.h:1.2 Fri Jan 9 10:54:35 2004 +++ llvm-gcc/libstdc++-v3/config/cpu/i386/atomicity.h Tue May 10 17:51:14 2005 @@ -32,6 +32,7 @@ typedef int _Atomic_word; +#if 0 template struct __Atomicity_lock { @@ -42,6 +43,7 @@ volatile _Atomic_word __Atomicity_lock<__inst>::_S_atomicity_lock = 0; template volatile _Atomic_word __Atomicity_lock<0>::_S_atomicity_lock; +#endif static inline _Atomic_word __attribute__ ((__unused__)) From lattner at cs.uiuc.edu Tue May 10 18:20:35 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Tue, 10 May 2005 18:20:35 -0500 Subject: [llvm-commits] CVS: llvm/lib/Support/CommandLine.cpp Message-ID: <200505102320.j4ANKZlh005222@apoc.cs.uiuc.edu> Changes in directory llvm/lib/Support: CommandLine.cpp updated: 1.59 -> 1.60 --- Log message: Do not use "" as a sentinal for a missing argument! This fixes PR560: http://llvm.cs.uiuc.edu/PR560 . --- Diffs of the changes: (+12 -11) CommandLine.cpp | 23 ++++++++++++----------- 1 files changed, 12 insertions(+), 11 deletions(-) Index: llvm/lib/Support/CommandLine.cpp diff -u llvm/lib/Support/CommandLine.cpp:1.59 llvm/lib/Support/CommandLine.cpp:1.60 --- llvm/lib/Support/CommandLine.cpp:1.59 Thu Apr 21 17:52:05 2005 +++ llvm/lib/Support/CommandLine.cpp Tue May 10 18:20:17 2005 @@ -97,7 +97,7 @@ // Enforce value requirements switch (Handler->getValueExpectedFlag()) { case ValueRequired: - if (Value == 0 || *Value == 0) { // No value specified? + if (Value == 0) { // No value specified? if (i+1 < argc) { // Steal the next argument, like for '-o filename' Value = argv[++i]; } else { @@ -106,7 +106,7 @@ } break; case ValueDisallowed: - if (*Value != 0) + if (Value) return Handler->error(" does not allow a value! '" + std::string(Value) + "' specified."); break; @@ -121,7 +121,7 @@ } // Run the handler now! - return Handler->addOccurrence(i, ArgName, Value); + return Handler->addOccurrence(i, ArgName, Value ? Value : ""); } static bool ProvidePositionalOption(Option *Handler, const std::string &Arg, @@ -268,11 +268,11 @@ const char *ArgEnd = Arg; while (*ArgEnd && *ArgEnd != '=') - ++ArgEnd; // Scan till end of argument name... + ++ArgEnd; // Scan till end of argument name. + + if (*ArgEnd == '=') // If we have an equals sign... + Value = ArgEnd+1; // Get the value, not the equals - Value = ArgEnd; - if (*Value) // If we have an equals sign... - ++Value; // Advance to value... if (*Arg == 0) return 0; @@ -348,7 +348,7 @@ bool DashDashFound = false; // Have we read '--'? for (int i = 1; i < argc; ++i) { Option *Handler = 0; - const char *Value = ""; + const char *Value = 0; const char *ArgName = ""; // Check to see if this is a positional argument. This argument is @@ -429,7 +429,7 @@ "Option can not be cl::Grouping AND cl::ValueRequired!"); int Dummy; ErrorParsing |= ProvideOption(PGOpt, RealArgName.c_str(), - "", 0, 0, Dummy); + 0, 0, 0, Dummy); // Get the next grouping option... PGOpt = getOptionPred(RealName, Length, isGrouping); @@ -450,7 +450,7 @@ // Check to see if this option accepts a comma separated list of values. If // it does, we have to split up the value into multiple values... - if (Handler->getMiscFlags() & CommaSeparated) { + if (Value && Handler->getMiscFlags() & CommaSeparated) { std::string Val(Value); std::string::size_type Pos = Val.find(','); @@ -591,7 +591,8 @@ return true; } -bool Option::addOccurrence(unsigned pos, const char *ArgName, const std::string &Value) { +bool Option::addOccurrence(unsigned pos, const char *ArgName, + const std::string &Value) { NumOccurrences++; // Increment the number of times we have been seen switch (getNumOccurrencesFlag()) { From alkis at cs.uiuc.edu Tue May 10 21:29:30 2005 From: alkis at cs.uiuc.edu (Alkis Evlogimenos) Date: Tue, 10 May 2005 21:29:30 -0500 Subject: [llvm-commits] CVS: llvm-java/lib/Compiler/VMClass.cpp Message-ID: <200505110229.VAA24640@zion.cs.uiuc.edu> Changes in directory llvm-java/lib/Compiler: VMClass.cpp updated: 1.46 -> 1.47 --- Log message: Reverse the array of superclasses in the type information block. This makes instanceof a bit faster since we don't need to subtract the two depths to check if a class is a subclass of another. This was pointed out by Dinakar at the presentation today. Thanks Dinakar :-) --- Diffs of the changes: (+1 -1) VMClass.cpp | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-) Index: llvm-java/lib/Compiler/VMClass.cpp diff -u llvm-java/lib/Compiler/VMClass.cpp:1.46 llvm-java/lib/Compiler/VMClass.cpp:1.47 --- llvm-java/lib/Compiler/VMClass.cpp:1.46 Fri Apr 22 19:12:14 2005 +++ llvm-java/lib/Compiler/VMClass.cpp Tue May 10 21:28:59 2005 @@ -191,7 +191,7 @@ { std::vector init; init.reserve(getNumSuperClasses()); - for (unsigned i = 0, e = getNumSuperClasses(); i != e; ++i) + for (unsigned i = getNumSuperClasses(); i--; ) init.push_back(ConstantExpr::getCast( getSuperClass(i)->getClassRecord(), resolver_->getClassRecordPtrType())); From alkis at cs.uiuc.edu Tue May 10 21:29:30 2005 From: alkis at cs.uiuc.edu (Alkis Evlogimenos) Date: Tue, 10 May 2005 21:29:30 -0500 Subject: [llvm-commits] CVS: llvm-java/runtime/runtime.c Message-ID: <200505110229.VAA24638@zion.cs.uiuc.edu> Changes in directory llvm-java/runtime: runtime.c updated: 1.36 -> 1.37 --- Log message: Reverse the array of superclasses in the type information block. This makes instanceof a bit faster since we don't need to subtract the two depths to check if a class is a subclass of another. This was pointed out by Dinakar at the presentation today. Thanks Dinakar :-) --- Diffs of the changes: (+2 -2) runtime.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) Index: llvm-java/runtime/runtime.c diff -u llvm-java/runtime/runtime.c:1.36 llvm-java/runtime/runtime.c:1.37 --- llvm-java/runtime/runtime.c:1.36 Sun Apr 3 18:05:07 2005 +++ llvm-java/runtime/runtime.c Tue May 10 21:28:59 2005 @@ -32,7 +32,7 @@ if (llvm_java_is_interface_class(cr) || cr->typeinfo.depth == 0) return NULL; - return cr->typeinfo.superclasses[0]; + return cr->typeinfo.superclasses[cr->typeinfo.depth - 1]; } jboolean llvm_java_is_assignable_from(struct llvm_java_class_record* cr, @@ -63,7 +63,7 @@ /* otherwise this is a class, check if from is a superclass of this * class */ if (cr->typeinfo.depth > from->typeinfo.depth) { - int index = cr->typeinfo.depth - from->typeinfo.depth - 1; + int index = from->typeinfo.depth; return cr->typeinfo.superclasses[index] == from; } From lattner at cs.uiuc.edu Tue May 10 22:36:14 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Tue, 10 May 2005 22:36:14 -0500 Subject: [llvm-commits] CVS: llvm/docs/LangRef.html Message-ID: <200505110336.j4B3aEkm005525@apoc.cs.uiuc.edu> Changes in directory llvm/docs: LangRef.html updated: 1.102 -> 1.103 --- Log message: don't duplicate information, particularly when it's out of date! --- Diffs of the changes: (+3 -7) LangRef.html | 10 +++------- 1 files changed, 3 insertions(+), 7 deletions(-) Index: llvm/docs/LangRef.html diff -u llvm/docs/LangRef.html:1.102 llvm/docs/LangRef.html:1.103 --- llvm/docs/LangRef.html:1.102 Fri May 6 20:46:40 2005 +++ llvm/docs/LangRef.html Tue May 10 22:35:57 2005 @@ -2328,12 +2328,8 @@ language, it is required that they all be documented here if any are added.

    -

    -Adding an intrinsic to LLVM is straight-forward if it is possible to express the -concept in LLVM directly (ie, code generator support is not _required_). To do -this, extend the default implementation of the IntrinsicLowering class to handle -the intrinsic. Code generators use this class to lower intrinsics they do not -understand to raw LLVM instructions that they do. +

    To learn how to add an intrinsics, please see the Extending LLVM Guide.

    @@ -3302,7 +3298,7 @@ Chris Lattner
    The LLVM Compiler Infrastructure
    - Last modified: $Date: 2005/05/07 01:46:40 $ + Last modified: $Date: 2005/05/11 03:35:57 $ From lattner at cs.uiuc.edu Tue May 10 22:54:07 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Tue, 10 May 2005 22:54:07 -0500 Subject: [llvm-commits] CVS: llvm/docs/ExtendingLLVM.html Message-ID: <200505110354.j4B3s7gQ005562@apoc.cs.uiuc.edu> Changes in directory llvm/docs: ExtendingLLVM.html updated: 1.17 -> 1.18 --- Log message: update this to reflect the new selection daggy world --- Diffs of the changes: (+54 -12) ExtendingLLVM.html | 66 +++++++++++++++++++++++++++++++++++++++++++---------- 1 files changed, 54 insertions(+), 12 deletions(-) Index: llvm/docs/ExtendingLLVM.html diff -u llvm/docs/ExtendingLLVM.html:1.17 llvm/docs/ExtendingLLVM.html:1.18 --- llvm/docs/ExtendingLLVM.html:1.17 Sat Apr 23 16:59:11 2005 +++ llvm/docs/ExtendingLLVM.html Tue May 10 22:53:53 2005 @@ -24,8 +24,8 @@
    -

    Written by Misha Brukman and - Brad Jones

    +

    Written by Misha Brukman, + Brad Jones, and Chris Lattner

    @@ -86,9 +86,6 @@
  • llvm/include/llvm/Intrinsics.h: add an enum in the llvm::Intrinsic namespace
  • -
  • llvm/lib/CodeGen/IntrinsicLowering.cpp: - implement the lowering for this intrinsic
  • -
  • llvm/lib/VMCore/Verifier.cpp: Add code to check the invariants of the intrinsic are respected.
  • @@ -100,17 +97,63 @@ not access memory or does not write to memory, add it to the relevant list of functions. -
  • llvm/lib/Transforms/Utils/Local.cpp: If it is possible to - constant-propagate your intrinsic, add support to it in the - canConstantFoldCallTo and ConstantFoldCall functions.
  • +
  • llvm/lib/Transforms/Utils/Local.cpp: If it is possible to constant +fold your intrinsic, add support to it in the canConstantFoldCallTo and +ConstantFoldCall functions.
  • Test your intrinsic
  • llvm/test/Regression/*: add your test cases to the test suite
  • -

    If this intrinsic requires code generator support (i.e., it cannot be -lowered), you should also add support to the code generator in question.

    +

    Once the intrinsic has been added to the system, you must add code generator +support for it. Generally you must do the following steps:

    + +
    +
    Add support to the C backend in lib/Target/CBackend/
    + +
    Depending on the intrinsic, there are a few ways to implement this. First, +if it makes sense to lower the intrinsic to an expanded sequence of C code in +all cases, just emit the expansion in visitCallInst. Second, if the +intrinsic has some way to express it with GCC (or any other compiler) +extensions, it can be conditionally supported based on the compiler compiling +the CBE output (see llvm.prefetch for an example). Third, if the intrinsic +really has no way to be lowered, just have the code generator emit code that +prints an error message and calls abort if executed. +
    + +
    Add a enum value for the SelectionDAG node in +include/llvm/CodeGen/SelectionDAGNodes.h
    + +
    Also, add code to lib/CodeGen/SelectionDAG/SelectionDAG.cpp (and +SelectionDAGPrinter.cpp) to print the node.
    + +
    Add code to SelectionDAG/SelectionDAGISel.cpp to recognize the +intrinsic.
    + +
    Presumably the intrinsic should be recognized and turned into the node you +added above.
    + +
    Add code to SelectionDAG/LegalizeDAG.cpp to legalize, promote, and +expand the node as necessary.
    + +
    If the intrinsic can be expanded to primitive operations, legalize can break +the node down into other elementary operations that are be supported.
    + +
    Add target-specific support to specific code generators.
    + +
    Extend the code generators you are interested in to recognize and support +the node, emitting the code you want.
    +
    + +

    +Unfortunately, the process of extending the code generator to support a new node +is not extremely well documented. As such, it is often helpful to look at other +intrinsics (e.g. llvm.ctpop) to see how they are recognized and turned +into a node by SelectionDAGISel.cpp, legalized by +LegalizeDAG.cpp, then finally emitted by the various code generators. +

    @@ -277,10 +320,9 @@ Valid HTML 4.01! - Misha Brukman
    The LLVM Compiler Infrastructure
    - Last modified: $Date: 2005/04/23 21:59:11 $ + Last modified: $Date: 2005/05/11 03:53:53 $ From lattner at cs.uiuc.edu Tue May 10 23:23:00 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Tue, 10 May 2005 23:23:00 -0500 Subject: [llvm-commits] CVS: llvm/test/Regression/CodeGen/Generic/llvm-ct-intrinsics.ll Message-ID: <200505110423.j4B4N08J005863@apoc.cs.uiuc.edu> Changes in directory llvm/test/Regression/CodeGen/Generic: llvm-ct-intrinsics.ll added (r1.1) --- Log message: new testcase --- Diffs of the changes: (+21 -0) llvm-ct-intrinsics.ll | 21 +++++++++++++++++++++ 1 files changed, 21 insertions(+) Index: llvm/test/Regression/CodeGen/Generic/llvm-ct-intrinsics.ll diff -c /dev/null llvm/test/Regression/CodeGen/Generic/llvm-ct-intrinsics.ll:1.1 *** /dev/null Tue May 10 23:22:57 2005 --- llvm/test/Regression/CodeGen/Generic/llvm-ct-intrinsics.ll Tue May 10 23:22:47 2005 *************** *** 0 **** --- 1,21 ---- + ; Make sure this testcase is supported by all code generators + ; RUN: llvm-as < %s | llc + + declare long %llvm.ctpop(long) + declare int %llvm.ctpop(int) + declare short %llvm.ctpop(short) + declare sbyte %llvm.ctpop(sbyte) + + void %ctpoptest(sbyte %A, short %B, int %C, long %D, + sbyte *%AP, short* %BP, int* %CP, long* %DP) { + %a = call sbyte %llvm.ctpop(sbyte %A) + %b = call short %llvm.ctpop(short %B) + %c = call int %llvm.ctpop(int %C) + %d = call long %llvm.ctpop(long %D) + + store sbyte %a, sbyte* %AP + store short %b, short* %BP + store int %c, int* %CP + store long %d, long* %DP + ret void + } From lattner at cs.uiuc.edu Tue May 10 23:51:33 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Tue, 10 May 2005 23:51:33 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Message-ID: <200505110451.j4B4pXPM007069@apoc.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen/SelectionDAG: LegalizeDAG.cpp updated: 1.98 -> 1.99 --- Log message: implement expansion of ctpop nodes, implementing CodeGen/Generic/llvm-ct-intrinsics.ll --- Diffs of the changes: (+16 -5) LegalizeDAG.cpp | 21 ++++++++++++++++----- 1 files changed, 16 insertions(+), 5 deletions(-) Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.98 llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.99 --- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.98 Mon May 9 15:36:57 2005 +++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Tue May 10 23:51:16 2005 @@ -635,16 +635,16 @@ if (!TLI.isLittleEndian()) std::swap(Lo, Hi); - Lo = DAG.getNode(ISD::STORE, MVT::Other,Tmp1, Lo, Tmp2,Node->getOperand(3)); - + Lo = DAG.getNode(ISD::STORE, MVT::Other, Tmp1, Lo, Tmp2, + Node->getOperand(3)); unsigned IncrementSize = MVT::getSizeInBits(Hi.getValueType())/8; Tmp2 = DAG.getNode(ISD::ADD, Tmp2.getValueType(), Tmp2, getIntPtrConstant(IncrementSize)); assert(isTypeLegal(Tmp2.getValueType()) && "Pointers must be legal!"); //Again, claiming both parts of the store came form the same Instr - Hi = DAG.getNode(ISD::STORE, MVT::Other, Tmp1, Hi, Tmp2, Node->getOperand(3)); - + Hi = DAG.getNode(ISD::STORE, MVT::Other, Tmp1, Hi, Tmp2, + Node->getOperand(3)); Result = DAG.getNode(ISD::TokenFactor, MVT::Other, Lo, Hi); break; } @@ -1079,7 +1079,8 @@ case TargetLowering::Promote: { MVT::ValueType OVT = Tmp1.getValueType(); MVT::ValueType NVT = TLI.getTypeToPromoteTo(Node->getOpcode(), OVT); - //Zero extend the argument + + // Zero extend the argument. Tmp1 = DAG.getNode(ISD::ZERO_EXTEND, NVT, Tmp1); // Perform the larger operation, then subtract if needed. Tmp1 = DAG.getNode(Node->getOpcode(), Node->getValueType(0), Tmp1); @@ -2170,6 +2171,16 @@ Hi = LegalizeOp(Node->getOperand(1)); break; + case ISD::CTPOP: + ExpandOp(Node->getOperand(0), Lo, Hi); + Lo = DAG.getNode(ISD::ADD, NVT, Lo, Hi); + Hi = DAG.getConstant(0, NVT); + break; + + case ISD::CTTZ: + case ISD::CTLZ: + assert(0 && "ct intrinsics cannot be expanded!"); + case ISD::LOAD: { SDOperand Ch = LegalizeOp(Node->getOperand(0)); // Legalize the chain. SDOperand Ptr = LegalizeOp(Node->getOperand(1)); // Legalize the pointer. From lattner at cs.uiuc.edu Tue May 10 23:51:44 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Tue, 10 May 2005 23:51:44 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp Message-ID: <200505110451.j4B4piPh007076@apoc.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen/SelectionDAG: SelectionDAG.cpp updated: 1.104 -> 1.105 --- Log message: Print bit count nodes correctly --- Diffs of the changes: (+6 -0) SelectionDAG.cpp | 6 ++++++ 1 files changed, 6 insertions(+) Index: llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp diff -u llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:1.104 llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:1.105 --- llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:1.104 Mon May 9 21:22:38 2005 +++ llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp Tue May 10 23:50:30 2005 @@ -1670,6 +1670,12 @@ case ISD::MEMCPY: return "memcpy"; case ISD::MEMMOVE: return "memmove"; + // Bit counting + case ISD::CTPOP: return "ctpop"; + case ISD::CTTZ: return "cttz"; + case ISD::CTLZ: return "ctlz"; + + // IO Intrinsics case ISD::READPORT: return "readport"; case ISD::WRITEPORT: return "writeport"; case ISD::READIO: return "readio"; From lattner at cs.uiuc.edu Wed May 11 00:00:48 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Wed, 11 May 2005 00:00:48 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/X86/X86ISelPattern.cpp Message-ID: <200505110500.j4B50mID007121@apoc.cs.uiuc.edu> Changes in directory llvm/lib/Target/X86: X86ISelPattern.cpp updated: 1.120 -> 1.121 --- Log message: X86 has more than just 32-bit registers --- Diffs of the changes: (+6 -0) X86ISelPattern.cpp | 6 ++++++ 1 files changed, 6 insertions(+) Index: llvm/lib/Target/X86/X86ISelPattern.cpp diff -u llvm/lib/Target/X86/X86ISelPattern.cpp:1.120 llvm/lib/Target/X86/X86ISelPattern.cpp:1.121 --- llvm/lib/Target/X86/X86ISelPattern.cpp:1.120 Mon May 9 22:53:18 2005 +++ llvm/lib/Target/X86/X86ISelPattern.cpp Wed May 11 00:00:34 2005 @@ -66,6 +66,12 @@ setOperationAction(ISD::FP_ROUND_INREG , MVT::f32 , Expand); setOperationAction(ISD::SEXTLOAD , MVT::i1 , Expand); setOperationAction(ISD::SREM , MVT::f64 , Expand); + setOperationAction(ISD::CTPOP , MVT::i8 , Expand); + setOperationAction(ISD::CTTZ , MVT::i8 , Expand); + setOperationAction(ISD::CTLZ , MVT::i8 , Expand); + setOperationAction(ISD::CTPOP , MVT::i16 , Expand); + setOperationAction(ISD::CTTZ , MVT::i16 , Expand); + setOperationAction(ISD::CTLZ , MVT::i16 , Expand); setOperationAction(ISD::CTPOP , MVT::i32 , Expand); setOperationAction(ISD::CTTZ , MVT::i32 , Expand); setOperationAction(ISD::CTLZ , MVT::i32 , Expand); From lattner at cs.uiuc.edu Wed May 11 00:04:12 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Wed, 11 May 2005 00:04:12 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/IA64/IA64ISelPattern.cpp Message-ID: <200505110504.j4B54Cdm007244@apoc.cs.uiuc.edu> Changes in directory llvm/lib/Target/IA64: IA64ISelPattern.cpp updated: 1.36 -> 1.37 --- Log message: No really IA*64* :) --- Diffs of the changes: (+3 -3) IA64ISelPattern.cpp | 6 +++--- 1 files changed, 3 insertions(+), 3 deletions(-) Index: llvm/lib/Target/IA64/IA64ISelPattern.cpp diff -u llvm/lib/Target/IA64/IA64ISelPattern.cpp:1.36 llvm/lib/Target/IA64/IA64ISelPattern.cpp:1.37 --- llvm/lib/Target/IA64/IA64ISelPattern.cpp:1.36 Mon May 9 08:18:34 2005 +++ llvm/lib/Target/IA64/IA64ISelPattern.cpp Wed May 11 00:03:56 2005 @@ -90,9 +90,9 @@ setOperationAction(ISD::FSQRT, MVT::f32, Expand); //IA64 has these, but they are not implemented - setOperationAction(ISD::CTPOP, MVT::i32 , Expand); - setOperationAction(ISD::CTTZ , MVT::i32 , Expand); - setOperationAction(ISD::CTLZ , MVT::i32 , Expand); + setOperationAction(ISD::CTPOP, MVT::i64 , Expand); + setOperationAction(ISD::CTTZ , MVT::i64 , Expand); + setOperationAction(ISD::CTLZ , MVT::i64 , Expand); computeRegisterProperties(); From lattner at cs.uiuc.edu Wed May 11 00:10:04 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Wed, 11 May 2005 00:10:04 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Message-ID: <200505110510.j4B5A4Mj007842@apoc.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen/SelectionDAG: LegalizeDAG.cpp updated: 1.99 -> 1.100 --- Log message: Legalize this correctly --- Diffs of the changes: (+3 -1) LegalizeDAG.cpp | 4 +++- 1 files changed, 3 insertions(+), 1 deletion(-) Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.99 llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.100 --- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.99 Tue May 10 23:51:16 2005 +++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Wed May 11 00:09:47 2005 @@ -2173,7 +2173,9 @@ case ISD::CTPOP: ExpandOp(Node->getOperand(0), Lo, Hi); - Lo = DAG.getNode(ISD::ADD, NVT, Lo, Hi); + Lo = DAG.getNode(ISD::ADD, NVT, // ctpop(HL) -> ctpop(H)+ctpop(L) + DAG.getNode(ISD::CTPOP, NVT, Lo), + DAG.getNode(ISD::CTPOP, NVT, Hi)); Hi = DAG.getConstant(0, NVT); break; From duraid at octopus.com.au Wed May 11 00:16:58 2005 From: duraid at octopus.com.au (Duraid Madina) Date: Wed, 11 May 2005 00:16:58 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/IA64/IA64InstrInfo.td IA64ISelPattern.cpp Message-ID: <200505110516.AAA25382@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/IA64: IA64InstrInfo.td updated: 1.12 -> 1.13 IA64ISelPattern.cpp updated: 1.37 -> 1.38 --- Log message: add the popcount instruction and support this in the isel the primary user of this will probably end up being find-first-set-bit/find- last-set-bit, which i'll get around to... --- Diffs of the changes: (+8 -1) IA64ISelPattern.cpp | 7 ++++++- IA64InstrInfo.td | 2 ++ 2 files changed, 8 insertions(+), 1 deletion(-) Index: llvm/lib/Target/IA64/IA64InstrInfo.td diff -u llvm/lib/Target/IA64/IA64InstrInfo.td:1.12 llvm/lib/Target/IA64/IA64InstrInfo.td:1.13 --- llvm/lib/Target/IA64/IA64InstrInfo.td:1.12 Thu Apr 14 05:08:01 2005 +++ llvm/lib/Target/IA64/IA64InstrInfo.td Wed May 11 00:16:09 2005 @@ -227,6 +227,8 @@ def LD8 : AForm<0x03, 0x0b, (ops GR:$dst, GR:$srcPtr), "ld8 $dst = [$srcPtr];;">; +def POPCNT : AForm<0x03, 0x0b, (ops GR:$dst, GR:$src), "popcnt $dst = $src;;">; + // some FP stuff: def FADD : AForm<0x03, 0x0b, (ops FP:$dst, FP:$src1, FP:$src2), "fadd $dst = $src1, $src2;;">; Index: llvm/lib/Target/IA64/IA64ISelPattern.cpp diff -u llvm/lib/Target/IA64/IA64ISelPattern.cpp:1.37 llvm/lib/Target/IA64/IA64ISelPattern.cpp:1.38 --- llvm/lib/Target/IA64/IA64ISelPattern.cpp:1.37 Wed May 11 00:03:56 2005 +++ llvm/lib/Target/IA64/IA64ISelPattern.cpp Wed May 11 00:16:09 2005 @@ -90,7 +90,6 @@ setOperationAction(ISD::FSQRT, MVT::f32, Expand); //IA64 has these, but they are not implemented - setOperationAction(ISD::CTPOP, MVT::i64 , Expand); setOperationAction(ISD::CTTZ , MVT::i64 , Expand); setOperationAction(ISD::CTLZ , MVT::i64 , Expand); @@ -1600,6 +1599,12 @@ return Result; } + case ISD::CTPOP: { + Tmp1 = SelectExpr(N.getOperand(0)); + BuildMI(BB, IA64::POPCNT, 1, Result).addReg(Tmp1); + return Result; + } + case ISD::SHL: { Tmp1 = SelectExpr(N.getOperand(0)); if (ConstantSDNode *CN = dyn_cast(N.getOperand(1))) { From lattner at cs.uiuc.edu Wed May 11 00:21:48 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Wed, 11 May 2005 00:21:48 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Message-ID: <200505110521.j4B5Lme9008579@apoc.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen/SelectionDAG: LegalizeDAG.cpp updated: 1.100 -> 1.101 --- Log message: Simplify this code, use the proper shift amount --- Diffs of the changes: (+10 -11) LegalizeDAG.cpp | 21 ++++++++++----------- 1 files changed, 10 insertions(+), 11 deletions(-) Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.100 llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.101 --- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.100 Wed May 11 00:09:47 2005 +++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Wed May 11 00:21:31 2005 @@ -1111,19 +1111,18 @@ switch(Node->getOpcode()) { case ISD::CTPOP: { - static const uint64_t mask[6][9] = { - {0, 0x55, 0x5555, 0, 0x55555555, 0, 0, 0, 0x5555555555555555ULL}, - {0, 0x33, 0x3333, 0, 0x33333333, 0, 0, 0, 0x3333333333333333ULL}, - {0, 0x0F, 0x0F0F, 0, 0x0F0F0F0F, 0, 0, 0, 0x0F0F0F0F0F0F0F0FULL}, - {0, 0, 0x00FF, 0, 0x00FF00FF, 0, 0, 0, 0x00FF00FF00FF00FFULL}, - {0, 0, 0, 0, 0x0000FFFF, 0, 0, 0, 0x0000FFFF0000FFFFULL}, - {0, 0, 0, 0, 0, 0, 0, 0, 0x00000000FFFFFFFFULL}}; + static const uint64_t mask[6] = { + 0x5555555555555555ULL, 0x3333333333333333ULL, + 0x0F0F0F0F0F0F0F0FULL, 0x00FF00FF00FF00FFULL, + 0x0000FFFF0000FFFFULL, 0x00000000FFFFFFFFULL + }; MVT::ValueType VT = Tmp1.getValueType(); - int len = getSizeInBits(VT); - for (int i = 0; (1 << i) <= (len / 2); ++i) { + MVT::ValueType ShVT = TLI.getShiftAmountTy(); + unsigned len = getSizeInBits(VT); + for (unsigned i = 0; (1U << i) <= (len / 2); ++i) { //x = (x & mask[i][len/8]) + (x >> (1 << i) & mask[i][len/8]) - Tmp2 = DAG.getConstant(mask[i][len/8], VT); - Tmp3 = DAG.getConstant(1 << i, VT); + Tmp2 = DAG.getConstant(mask[i], VT); + Tmp3 = DAG.getConstant(1ULL << i, ShVT); Tmp1 = DAG.getNode(ISD::ADD, VT, DAG.getNode(ISD::AND, VT, Tmp1, Tmp2), DAG.getNode(ISD::AND, VT, From lattner at cs.uiuc.edu Wed May 11 00:27:26 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Wed, 11 May 2005 00:27:26 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Message-ID: <200505110527.j4B5RQJ5008730@apoc.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen/SelectionDAG: LegalizeDAG.cpp updated: 1.101 -> 1.102 --- Log message: Add some notes for expanding clz/ctz --- Diffs of the changes: (+21 -4) LegalizeDAG.cpp | 25 +++++++++++++++++++++---- 1 files changed, 21 insertions(+), 4 deletions(-) Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.101 llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.102 --- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.101 Wed May 11 00:21:31 2005 +++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Wed May 11 00:27:09 2005 @@ -1132,10 +1132,27 @@ Result = Tmp1; break; } -// case ISD::CTTZ: -// break; -// case ISD::CTLZ: -// break; + case ISD::CTTZ: + /* This should be used for targets that support ctpop: +int nlz5(unsigned x) { + int pop(unsigned x); + + x = x | (x >> 1); + x = x | (x >> 2); + x = x | (x >> 4); + x = x | (x >> 8); + x = x | (x >>16); + return ctpop(~x); +} + See also: http://www.hackersdelight.org/HDcode/nlz.cc +*/ + + assert(0 && "Cannot expand this yet!"); + break; + case ISD::CTLZ: + // See Also: http://www.hackersdelight.org/HDcode/ntz.cc + assert(0 && "Cannot expand this yet!"); + break; default: assert(0 && "Cannot expand this yet!"); break; From lattner at cs.uiuc.edu Wed May 11 00:31:18 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Wed, 11 May 2005 00:31:18 -0500 Subject: [llvm-commits] CVS: llvm/test/Regression/CodeGen/Generic/llvm-ct-intrinsics.ll Message-ID: <200505110531.j4B5VI5t008774@apoc.cs.uiuc.edu> Changes in directory llvm/test/Regression/CodeGen/Generic: llvm-ct-intrinsics.ll updated: 1.1 -> 1.2 --- Log message: include the other bit count intrinsics --- Diffs of the changes: (+38 -0) llvm-ct-intrinsics.ll | 38 ++++++++++++++++++++++++++++++++++++++ 1 files changed, 38 insertions(+) Index: llvm/test/Regression/CodeGen/Generic/llvm-ct-intrinsics.ll diff -u llvm/test/Regression/CodeGen/Generic/llvm-ct-intrinsics.ll:1.1 llvm/test/Regression/CodeGen/Generic/llvm-ct-intrinsics.ll:1.2 --- llvm/test/Regression/CodeGen/Generic/llvm-ct-intrinsics.ll:1.1 Tue May 10 23:22:47 2005 +++ llvm/test/Regression/CodeGen/Generic/llvm-ct-intrinsics.ll Wed May 11 00:31:01 2005 @@ -19,3 +19,41 @@ store long %d, long* %DP ret void } + +declare long %llvm.ctlz(long) +declare int %llvm.ctlz(int) +declare short %llvm.ctlz(short) +declare sbyte %llvm.ctlz(sbyte) + +void %ctlztest(sbyte %A, short %B, int %C, long %D, + sbyte *%AP, short* %BP, int* %CP, long* %DP) { + %a = call sbyte %llvm.ctlz(sbyte %A) + %b = call short %llvm.ctlz(short %B) + %c = call int %llvm.ctlz(int %C) + %d = call long %llvm.ctlz(long %D) + + store sbyte %a, sbyte* %AP + store short %b, short* %BP + store int %c, int* %CP + store long %d, long* %DP + ret void +} + +declare long %llvm.cttz(long) +declare int %llvm.cttz(int) +declare short %llvm.cttz(short) +declare sbyte %llvm.cttz(sbyte) + +void %cttztest(sbyte %A, short %B, int %C, long %D, + sbyte *%AP, short* %BP, int* %CP, long* %DP) { + %a = call sbyte %llvm.cttz(sbyte %A) + %b = call short %llvm.cttz(short %B) + %c = call int %llvm.cttz(int %C) + %d = call long %llvm.cttz(long %D) + + store sbyte %a, sbyte* %AP + store short %b, short* %BP + store int %c, int* %CP + store long %d, long* %DP + ret void +} From alkis at cs.uiuc.edu Wed May 11 02:06:53 2005 From: alkis at cs.uiuc.edu (Alkis Evlogimenos) Date: Wed, 11 May 2005 02:06:53 -0500 Subject: [llvm-commits] CVS: llvm-java/docs/TODO Message-ID: <200505110706.CAA25912@zion.cs.uiuc.edu> Changes in directory llvm-java/docs: TODO updated: 1.1 -> 1.2 --- Log message: Remove implemented items. --- Diffs of the changes: (+0 -17) TODO | 17 ----------------- 1 files changed, 17 deletions(-) Index: llvm-java/docs/TODO diff -u llvm-java/docs/TODO:1.1 llvm-java/docs/TODO:1.2 --- llvm-java/docs/TODO:1.1 Mon Dec 13 21:23:36 2004 +++ llvm-java/docs/TODO Wed May 11 02:06:42 2005 @@ -1,20 +1,3 @@ -* Create Class description information from ClassFile object and -resolve all references (classfile constant pool) when loading the -classfile. This way we will not create types, parse method strings, -parse and find object fields on every refernce. This will both speedup -compilation but more importantly it will simplify code generation. - -* Change all object types as arguments to functions, on the operand -stack, or local variables should be of type llvm_object_base*. All -primitive types should normalize to their Java counterparts (a bool is -always an int on the operand stack). - -* Change object model so that we can support: - - Multiple inheritance of interfaces. - - Dynamic element type of an array. - - Distinguish between class or array objects dynamically. - - Reflection (used by JNI). - * Exceptions. * Add GC hooks into the GC runtime. From duraid at octopus.com.au Wed May 11 02:09:06 2005 From: duraid at octopus.com.au (Duraid Madina) Date: Wed, 11 May 2005 02:09:06 -0500 Subject: [llvm-commits] CVS: llvm-test/SingleSource/UnitTests/2005-05-11-Popcount-ffs-fls.c Message-ID: <200505110709.CAA25934@zion.cs.uiuc.edu> Changes in directory llvm-test/SingleSource/UnitTests: 2005-05-11-Popcount-ffs-fls.c added (r1.1) --- Log message: add a test of the clz, popcount and ctz builtins --- Diffs of the changes: (+62 -0) 2005-05-11-Popcount-ffs-fls.c | 62 ++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 62 insertions(+) Index: llvm-test/SingleSource/UnitTests/2005-05-11-Popcount-ffs-fls.c diff -c /dev/null llvm-test/SingleSource/UnitTests/2005-05-11-Popcount-ffs-fls.c:1.1 *** /dev/null Wed May 11 02:09:05 2005 --- llvm-test/SingleSource/UnitTests/2005-05-11-Popcount-ffs-fls.c Wed May 11 02:08:55 2005 *************** *** 0 **** --- 1,62 ---- + /* these first three reference functions were taken from + * http://www.hackersdelight.org/HDcode/nlz.cc and + * http://www.hackersdelight.org/HDcode/ntz.cc + */ + + #define u 99 + + int nlz10b(unsigned x) { + + static char table[64] = + {32,20,19, u, u,18, u, 7, 10,17, u, u,14, u, 6, u, + u, 9, u,16, u, u, 1,26, u,13, u, u,24, 5, u, u, + u,21, u, 8,11, u,15, u, u, u, u, 2,27, 0,25, u, + 22, u,12, u, u, 3,28, u, 23, u, 4,29, u, u,30,31}; + + x = x | (x >> 1); // Propagate leftmost + x = x | (x >> 2); // 1-bit to the right. + x = x | (x >> 4); + x = x | (x >> 8); + x = x & ~(x >> 16); + x = (x << 9) - x; // Multiply by 511. + x = (x << 11) - x; // Multiply by 2047. + x = (x << 14) - x; // Multiply by 16383. + return table[x >> 26]; + } + + int pop(unsigned x) { + x = x - ((x >> 1) & 0x55555555); + x = (x & 0x33333333) + ((x >> 2) & 0x33333333); + x = (x + (x >> 4)) & 0x0F0F0F0F; + x = x + (x << 8); + x = x + (x << 16); + return x >> 24; + } + + int ntz8(unsigned x) { + + static char table[64] = + {32, 0, 1,12, 2, 6, u,13, 3, u, 7, u, u, u, u,14, + 10, 4, u, u, 8, u, u,25, u, u, u, u, u,21,27,15, + 31,11, 5, u, u, u, u, u, 9, u, u,24, u, u,20,26, + 30, u, u, u, u,23, u,19, 29, u,22,18,28,17,16, u}; + + x = (x & -x)*0x0450FBAF; + return table[x >> 26]; + } + + int i; + int main(void) { + + for(i=-10; i<139045193; i*=-3) { + printf("LLVM: n: %d, clz(n): %d, popcount(n): %d, ctz(n): %d\n", + i, __builtin_clz(i), __builtin_popcount(i), __builtin_ctz(i)); + printf("REF : n: %d, clz(n): %d, popcount(n): %d, ctz(n): %d\n", + i, nlz10b(i), pop(i), ntz8(i)); + printf(" *** \n"); + i++; + } + + return(0); + } + From duraid at octopus.com.au Wed May 11 03:45:19 2005 From: duraid at octopus.com.au (Duraid Madina) Date: Wed, 11 May 2005 03:45:19 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Message-ID: <200505110845.DAA13491@zion.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen/SelectionDAG: LegalizeDAG.cpp updated: 1.102 -> 1.103 --- Log message: expand count-leading/trailing-zeros; the test 2005-05-11-Popcount-ffs-fls.c should now pass (the "LLVM" and "REF" results should be identical) --- Diffs of the changes: (+32 -19) LegalizeDAG.cpp | 51 ++++++++++++++++++++++++++++++++------------------- 1 files changed, 32 insertions(+), 19 deletions(-) Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.102 llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.103 --- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.102 Wed May 11 00:27:09 2005 +++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Wed May 11 03:45:08 2005 @@ -1132,27 +1132,40 @@ Result = Tmp1; break; } - case ISD::CTTZ: - /* This should be used for targets that support ctpop: -int nlz5(unsigned x) { - int pop(unsigned x); - - x = x | (x >> 1); - x = x | (x >> 2); - x = x | (x >> 4); - x = x | (x >> 8); - x = x | (x >>16); - return ctpop(~x); -} - See also: http://www.hackersdelight.org/HDcode/nlz.cc -*/ - - assert(0 && "Cannot expand this yet!"); + case ISD::CTLZ: { + /* for now, we do this: + x = x | (x >> 1); + x = x | (x >> 2); + ... + x = x | (x >>16); + x = x | (x >>32); // for 64-bit input + return popcount(~x); + + but see also: http://www.hackersdelight.org/HDcode/nlz.cc */ + MVT::ValueType VT = Tmp1.getValueType(); + MVT::ValueType ShVT = TLI.getShiftAmountTy(); + unsigned len = getSizeInBits(VT); + for (unsigned i = 0; (1U << i) <= (len / 2); ++i) { + Tmp3 = DAG.getConstant(1ULL << i, ShVT); + Tmp1 = DAG.getNode(ISD::OR, VT, Tmp1, + DAG.getNode(ISD::SRL, VT, Tmp1, Tmp3)); + } + Tmp3 = DAG.getNode(ISD::XOR, VT, Tmp1, DAG.getConstant(~0ULL, VT)); + Result = DAG.getNode(ISD::CTPOP, VT, Tmp3); break; - case ISD::CTLZ: - // See Also: http://www.hackersdelight.org/HDcode/ntz.cc - assert(0 && "Cannot expand this yet!"); + } + case ISD::CTTZ: { + // for now, we use: { return popcount(~x & (x - 1)); } + // but see also http://www.hackersdelight.org/HDcode/ntz.cc ) + MVT::ValueType VT = Tmp1.getValueType(); + Tmp2 = DAG.getConstant(~0ULL, VT); + Tmp3 = DAG.getNode(ISD::AND, VT, + DAG.getNode(ISD::XOR, VT, Tmp1, Tmp2), + DAG.getNode(ISD::SUB, VT, Tmp1, + DAG.getConstant(1, VT))); + Result = DAG.getNode(ISD::CTPOP, VT, Tmp3); break; + } default: assert(0 && "Cannot expand this yet!"); break; From alenhar2 at cs.uiuc.edu Wed May 11 12:23:58 2005 From: alenhar2 at cs.uiuc.edu (Andrew Lenharth) Date: Wed, 11 May 2005 12:23:58 -0500 Subject: [llvm-commits] CVS: llvm/test/Regression/CodeGen/Alpha/ctlz_e.ll Message-ID: <200505111723.j4BHNwgM021044@apoc.cs.uiuc.edu> Changes in directory llvm/test/Regression/CodeGen/Alpha: ctlz_e.ll added (r1.1) --- Log message: Legalize for CTLZ generates a ctpop, but this ctpop is not expanded. This is bad. It is generated if you are ctlz a type that is not legal for the arch (aka ctlz of bytes on alpha legalize fine). --- Diffs of the changes: (+12 -0) ctlz_e.ll | 12 ++++++++++++ 1 files changed, 12 insertions(+) Index: llvm/test/Regression/CodeGen/Alpha/ctlz_e.ll diff -c /dev/null llvm/test/Regression/CodeGen/Alpha/ctlz_e.ll:1.1 *** /dev/null Wed May 11 12:23:51 2005 --- llvm/test/Regression/CodeGen/Alpha/ctlz_e.ll Wed May 11 12:23:41 2005 *************** *** 0 **** --- 1,12 ---- + ; Make sure this testcase does not use ctpop + ; RUN: llvm-as < %s | llc -march=alpha | grep -i 'ctpop' |wc -l |grep 0 + + declare ulong %llvm.ctlz(ulong) + + implementation ; Functions: + + ulong %bar(ulong %x) { + entry: + %tmp.1 = call ulong %llvm.ctlz( ulong %x ) + ret ulong %tmp.1 + } From lattner at cs.uiuc.edu Wed May 11 13:35:40 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Wed, 11 May 2005 13:35:40 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Message-ID: <200505111835.j4BIZe3n001718@apoc.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen/SelectionDAG: LegalizeDAG.cpp updated: 1.103 -> 1.104 --- Log message: Make sure to legalize generated ctpop nodes, convert tabs to spaces --- Diffs of the changes: (+18 -18) LegalizeDAG.cpp | 36 ++++++++++++++++++------------------ 1 files changed, 18 insertions(+), 18 deletions(-) Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.103 llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.104 --- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.103 Wed May 11 03:45:08 2005 +++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Wed May 11 13:35:21 2005 @@ -1134,15 +1134,15 @@ } case ISD::CTLZ: { /* for now, we do this: - x = x | (x >> 1); - x = x | (x >> 2); - ... - x = x | (x >>16); - x = x | (x >>32); // for 64-bit input - return popcount(~x); + x = x | (x >> 1); + x = x | (x >> 2); + ... + x = x | (x >>16); + x = x | (x >>32); // for 64-bit input + return popcount(~x); - but see also: http://www.hackersdelight.org/HDcode/nlz.cc */ - MVT::ValueType VT = Tmp1.getValueType(); + but see also: http://www.hackersdelight.org/HDcode/nlz.cc */ + MVT::ValueType VT = Tmp1.getValueType(); MVT::ValueType ShVT = TLI.getShiftAmountTy(); unsigned len = getSizeInBits(VT); for (unsigned i = 0; (1U << i) <= (len / 2); ++i) { @@ -1151,19 +1151,19 @@ DAG.getNode(ISD::SRL, VT, Tmp1, Tmp3)); } Tmp3 = DAG.getNode(ISD::XOR, VT, Tmp1, DAG.getConstant(~0ULL, VT)); - Result = DAG.getNode(ISD::CTPOP, VT, Tmp3); + Result = LegalizeOp(DAG.getNode(ISD::CTPOP, VT, Tmp3)); break; } case ISD::CTTZ: { - // for now, we use: { return popcount(~x & (x - 1)); } - // but see also http://www.hackersdelight.org/HDcode/ntz.cc ) - MVT::ValueType VT = Tmp1.getValueType(); - Tmp2 = DAG.getConstant(~0ULL, VT); - Tmp3 = DAG.getNode(ISD::AND, VT, - DAG.getNode(ISD::XOR, VT, Tmp1, Tmp2), - DAG.getNode(ISD::SUB, VT, Tmp1, - DAG.getConstant(1, VT))); - Result = DAG.getNode(ISD::CTPOP, VT, Tmp3); + // for now, we use: { return popcount(~x & (x - 1)); } + // but see also http://www.hackersdelight.org/HDcode/ntz.cc + MVT::ValueType VT = Tmp1.getValueType(); + Tmp2 = DAG.getConstant(~0ULL, VT); + Tmp3 = DAG.getNode(ISD::AND, VT, + DAG.getNode(ISD::XOR, VT, Tmp1, Tmp2), + DAG.getNode(ISD::SUB, VT, Tmp1, + DAG.getConstant(1, VT))); + Result = LegalizeOp(DAG.getNode(ISD::CTPOP, VT, Tmp3)); break; } default: From lattner at cs.uiuc.edu Wed May 11 13:57:02 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Wed, 11 May 2005 13:57:02 -0500 Subject: [llvm-commits] CVS: llvm/include/llvm/CodeGen/SelectionDAGNodes.h Message-ID: <200505111857.j4BIv2hL006918@apoc.cs.uiuc.edu> Changes in directory llvm/include/llvm/CodeGen: SelectionDAGNodes.h updated: 1.37 -> 1.38 --- Log message: new method --- Diffs of the changes: (+4 -0) SelectionDAGNodes.h | 4 ++++ 1 files changed, 4 insertions(+) Index: llvm/include/llvm/CodeGen/SelectionDAGNodes.h diff -u llvm/include/llvm/CodeGen/SelectionDAGNodes.h:1.37 llvm/include/llvm/CodeGen/SelectionDAGNodes.h:1.38 --- llvm/include/llvm/CodeGen/SelectionDAGNodes.h:1.37 Mon May 9 15:21:27 2005 +++ llvm/include/llvm/CodeGen/SelectionDAGNodes.h Wed May 11 13:56:45 2005 @@ -509,6 +509,10 @@ static bool classof(const SDNode *) { return true; } + + /// setAdjCallChain - This method should only be used by the legalizer. + void setAdjCallChain(SDOperand N); + protected: friend class SelectionDAG; From lattner at cs.uiuc.edu Wed May 11 13:57:21 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Wed, 11 May 2005 13:57:21 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp Message-ID: <200505111857.j4BIvLQX006930@apoc.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen/SelectionDAG: SelectionDAGISel.cpp updated: 1.51 -> 1.52 --- Log message: wrap long line --- Diffs of the changes: (+2 -1) SelectionDAGISel.cpp | 3 ++- 1 files changed, 2 insertions(+), 1 deletion(-) Index: llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp diff -u llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.51 llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.52 --- llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.51 Mon May 9 17:17:13 2005 +++ llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp Wed May 11 13:57:06 2005 @@ -128,7 +128,8 @@ // Initialize the mapping of values to registers. This is only set up for // instruction values that are used outside of the block that defines // them. - for (Function::arg_iterator AI = Fn.arg_begin(), E = Fn.arg_end(); AI != E; ++AI) + for (Function::arg_iterator AI = Fn.arg_begin(), E = Fn.arg_end(); + AI != E; ++AI) InitializeRegForValue(AI); Function::iterator BB = Fn.begin(), E = Fn.end(); From lattner at cs.uiuc.edu Wed May 11 13:57:53 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Wed, 11 May 2005 13:57:53 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp Message-ID: <200505111857.j4BIvrmn006944@apoc.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen/SelectionDAG: SelectionDAG.cpp updated: 1.105 -> 1.106 --- Log message: Do not memoize ADJCALLSTACKDOWN nodes, provide a method to hack on them. --- Diffs of the changes: (+24 -3) SelectionDAG.cpp | 27 ++++++++++++++++++++++++--- 1 files changed, 24 insertions(+), 3 deletions(-) Index: llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp diff -u llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:1.105 llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:1.106 --- llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:1.105 Tue May 10 23:50:30 2005 +++ llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp Wed May 11 13:57:39 2005 @@ -1192,9 +1192,17 @@ #endif } - SDNode *&N = BinaryOps[std::make_pair(Opcode, std::make_pair(N1, N2))]; - if (N) return SDOperand(N, 0); - N = new SDNode(Opcode, N1, N2); + // Memoize this node if possible. + SDNode *N; + if (Opcode != ISD::ADJCALLSTACKDOWN) { + SDNode *&BON = BinaryOps[std::make_pair(Opcode, std::make_pair(N1, N2))]; + if (BON) return SDOperand(BON, 0); + + BON = N = new SDNode(Opcode, N1, N2); + } else { + N = new SDNode(ISD::ADJCALLSTACKDOWN, N1, N2); + } + if (Opcode != ISD::READPORT && Opcode != ISD::READIO) N->setValueTypes(VT); @@ -1205,6 +1213,19 @@ return SDOperand(N, 0); } +// setAdjCallChain - This method changes the token chain of an ADJCALLSTACKDOWN +// node to be the specified operand. +void SDNode::setAdjCallChain(SDOperand N) { + assert(N.getValueType() == MVT::Other); + assert(getOpcode() == ISD::ADJCALLSTACKDOWN && "Cannot adjust this node!"); + + Operands[0].Val->removeUser(this); + Operands[0] = N; + N.Val->Uses.push_back(this); +} + + + SDOperand SelectionDAG::getLoad(MVT::ValueType VT, SDOperand Chain, SDOperand Ptr, SDOperand SV) { From lattner at cs.uiuc.edu Wed May 11 14:02:25 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Wed, 11 May 2005 14:02:25 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Message-ID: <200505111902.j4BJ2PPo007010@apoc.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen/SelectionDAG: LegalizeDAG.cpp updated: 1.104 -> 1.105 --- Log message: Fix the last remaining bug preventing us from switching the X86 BE over from the simple isel to the pattern isel. This forces inserted libcalls to serialize against other function calls, which was breaking UnitTests/2005-05-12-Int64ToFP. Hopefully this will fix issues on other targets as well. --- Diffs of the changes: (+69 -31) LegalizeDAG.cpp | 100 ++++++++++++++++++++++++++++++++++++++------------------ 1 files changed, 69 insertions(+), 31 deletions(-) Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.104 llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.105 --- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.104 Wed May 11 13:35:21 2005 +++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Wed May 11 14:02:11 2005 @@ -908,6 +908,7 @@ } else { assert(0 && "Unknown op!"); } + // FIXME: THESE SHOULD USE ExpandLibCall ??!? std::pair CallResult = TLI.LowerCallTo(Tmp1, Type::VoidTy, false, DAG.getExternalSymbol(FnName, IntPtr), Args, DAG); @@ -1222,6 +1223,7 @@ } std::vector > Args; Args.push_back(std::make_pair(Tmp1, T)); + // FIXME: should use ExpandLibCall! std::pair CallResult = TLI.LowerCallTo(DAG.getEntryNode(), T, false, DAG.getExternalSymbol(FnName, VT), Args, DAG); @@ -1984,15 +1986,30 @@ abort(); } +/// FindAdjCallStackDown - Given a chained node that is part of a call sequence, +/// find the ADJCALLSTACKDOWN node that initiates the call sequence. +static SDNode *FindAdjCallStackDown(SDNode *Node) { + assert(Node && "Didn't find adjcallstackdown for a call??"); + if (Node->getOpcode() == ISD::ADJCALLSTACKDOWN) return Node; + + assert(Node->getOperand(0).getValueType() == MVT::Other && + "Node doesn't have a token chain argument!"); + return FindAdjCallStackDown(Node->getOperand(0).Val); +} + + /// FindInputOutputChains - If we are replacing an operation with a call we need /// to find the call that occurs before and the call that occurs after it to -/// properly serialize the calls in the block. +/// properly serialize the calls in the block. The returned operand is the +/// input chain value for the new call (e.g. the entry node or the previous +/// call), and OutChain is set to be the chain node to update to point to the +/// end of the call chain. static SDOperand FindInputOutputChains(SDNode *OpNode, SDNode *&OutChain, SDOperand Entry) { SDNode *LatestAdjCallStackDown = Entry.Val; SDNode *LatestAdjCallStackUp = 0; FindLatestAdjCallStackDown(OpNode, LatestAdjCallStackDown); - //std::cerr << "Found node: "; LatestAdjCallStackDown->dump(); std::cerr <<"\n"; + //std::cerr<<"Found node: "; LatestAdjCallStackDown->dump(); std::cerr <<"\n"; // It is possible that no ISD::ADJCALLSTACKDOWN was found because there is no // previous call in the function. LatestCallStackDown may in that case be @@ -2004,17 +2021,33 @@ LatestAdjCallStackUp = Entry.Val; assert(LatestAdjCallStackUp && "NULL return from FindAdjCallStackUp"); - SDNode *EarliestAdjCallStackUp = 0; - FindEarliestAdjCallStackUp(OpNode, EarliestAdjCallStackUp); - - if (EarliestAdjCallStackUp) { - //std::cerr << "Found node: "; - //EarliestAdjCallStackUp->dump(); std::cerr <<"\n"; - } + // Finally, find the first call that this must come before, first we find the + // adjcallstackup that ends the call. + OutChain = 0; + FindEarliestAdjCallStackUp(OpNode, OutChain); + + // If we found one, translate from the adj up to the adjdown. + if (OutChain) + OutChain = FindAdjCallStackDown(OutChain); return SDOperand(LatestAdjCallStackUp, 0); } +/// SpliceCallInto - Given the result chain of a libcall (CallResult), and a +static void SpliceCallInto(const SDOperand &CallResult, SDNode *OutChain, + SelectionDAG &DAG) { + // Nothing to splice it into? + if (OutChain == 0) return; + + assert(OutChain->getOperand(0).getValueType() == MVT::Other); + //OutChain->dump(); + + // Form a token factor node merging the old inval and the new inval. + SDOperand InToken = DAG.getNode(ISD::TokenFactor, MVT::Other, CallResult, + OutChain->getOperand(0)); + // Change the node to refer to the new token. + OutChain->setAdjCallChain(InToken); +} // ExpandLibCall - Expand a node into a call to a libcall. If the result value @@ -2037,21 +2070,21 @@ } SDOperand Callee = DAG.getExternalSymbol(Name, TLI.getPointerTy()); - // We don't care about token chains for libcalls. We just use the entry - // node as our input and ignore the output chain. This allows us to place - // calls wherever we need them to satisfy data dependences. + // Splice the libcall in wherever FindInputOutputChains tells us to. const Type *RetTy = MVT::getTypeForValueType(Node->getValueType(0)); - SDOperand Result = TLI.LowerCallTo(InChain, RetTy, false, Callee, - Args, DAG).first; - switch (getTypeAction(Result.getValueType())) { + std::pair CallInfo = + TLI.LowerCallTo(InChain, RetTy, false, Callee, Args, DAG); + SpliceCallInto(CallInfo.second, OutChain, DAG); + + switch (getTypeAction(CallInfo.first.getValueType())) { default: assert(0 && "Unknown thing"); case Legal: - return Result; + return CallInfo.first; case Promote: assert(0 && "Cannot promote this yet!"); case Expand: SDOperand Lo; - ExpandOp(Result, Lo, Hi); + ExpandOp(CallInfo.first, Lo, Hi); return Lo; } } @@ -2066,19 +2099,7 @@ "This is not an expansion!"); assert(Source.getValueType() == MVT::i64 && "Only handle expand from i64!"); - SDNode *OutChain; - SDOperand InChain = FindInputOutputChains(Source.Val, OutChain, - DAG.getEntryNode()); - - const char *FnName = 0; - if (isSigned) { - if (DestTy == MVT::f32) - FnName = "__floatdisf"; - else { - assert(DestTy == MVT::f64 && "Unknown fp value type!"); - FnName = "__floatdidf"; - } - } else { + if (!isSigned) { // If this is unsigned, and not supported, first perform the conversion to // signed, then adjust the result if the sign bit is set. SDOperand SignedConv = ExpandIntToFP(true, DestTy, Source); @@ -2116,6 +2137,18 @@ } return DAG.getNode(ISD::ADD, DestTy, SignedConv, FudgeInReg); } + + SDNode *OutChain = 0; + SDOperand InChain = FindInputOutputChains(Source.Val, OutChain, + DAG.getEntryNode()); + const char *FnName = 0; + if (DestTy == MVT::f32) + FnName = "__floatdisf"; + else { + assert(DestTy == MVT::f64 && "Unknown fp value type!"); + FnName = "__floatdidf"; + } + SDOperand Callee = DAG.getExternalSymbol(FnName, TLI.getPointerTy()); TargetLowering::ArgListTy Args; @@ -2126,7 +2159,12 @@ // node as our input and ignore the output chain. This allows us to place // calls wherever we need them to satisfy data dependences. const Type *RetTy = MVT::getTypeForValueType(DestTy); - return TLI.LowerCallTo(InChain, RetTy, false, Callee, Args, DAG).first; + + std::pair CallResult = + TLI.LowerCallTo(InChain, RetTy, false, Callee, Args, DAG); + + SpliceCallInto(CallResult.second, OutChain, DAG); + return CallResult.first; } From lattner at cs.uiuc.edu Wed May 11 14:42:22 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Wed, 11 May 2005 14:42:22 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/IntrinsicLowering.cpp Message-ID: <200505111942.j4BJgMgC011925@apoc.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen: IntrinsicLowering.cpp updated: 1.30 -> 1.31 --- Log message: fix and concisify intinsic lowering for ctpop. Unfortunately, this code looks completely untested. :( --- Diffs of the changes: (+61 -167) IntrinsicLowering.cpp | 228 +++++++++++++------------------------------------- 1 files changed, 61 insertions(+), 167 deletions(-) Index: llvm/lib/CodeGen/IntrinsicLowering.cpp diff -u llvm/lib/CodeGen/IntrinsicLowering.cpp:1.30 llvm/lib/CodeGen/IntrinsicLowering.cpp:1.31 --- llvm/lib/CodeGen/IntrinsicLowering.cpp:1.30 Sun May 8 14:46:29 2005 +++ llvm/lib/CodeGen/IntrinsicLowering.cpp Wed May 11 14:42:05 2005 @@ -127,6 +127,40 @@ } } +/// LowerCTPOP - Emit the code to lower ctpop of V before the specified +/// instruction. +static Value *LowerCTPOP(Value *V, Instruction *IP) { + assert(V->getType()->isInteger() && "Can't ctpop a non-integer type!"); + unsigned BitSize = V->getType()->getPrimitiveSizeInBits(); + + static const uint64_t MaskValues[6] = { + 0x5555555555555555ULL, 0x3333333333333333ULL, + 0x0F0F0F0F0F0F0F0FULL, 0x00FF00FF00FF00FFULL, + 0x0000FFFF0000FFFFULL, 0x00000000FFFFFFFFULL + }; + + const Type *DestTy = V->getType(); + + // Force to unsigned so that the shift rights are logical. + if (DestTy->isSigned()) + V = new CastInst(V, DestTy->getUnsignedVersion(), V->getName(), IP); + + for (unsigned i = 1, ct = 0; i != BitSize; i <<= 1, ++ct) { + Value *MaskCst = + ConstantExpr::getCast(ConstantUInt::get(Type::ULongTy, + MaskValues[ct]), V->getType()); + Value *LHS = BinaryOperator::createAnd(V, MaskCst, "cppop.and1", IP); + Value *VShift = new ShiftInst(Instruction::Shr, V, + ConstantInt::get(Type::UByteTy, i), "ctpop.sh", IP); + Value *RHS = BinaryOperator::createAnd(VShift, MaskCst, "cppop.and2", IP); + V = BinaryOperator::createAdd(LHS, RHS, "ctpop.step", IP); + } + + if (V->getType() != DestTy) + V = new CastInst(V, DestTy, V->getName(), IP); + return V; +} + void DefaultIntrinsicLowering::LowerIntrinsicCall(CallInst *CI) { Function *Callee = CI->getCalledFunction(); assert(Callee && "Cannot lower an indirect call!"); @@ -172,157 +206,10 @@ AbortFCache); break; } - case Intrinsic::ctpop: { - Value *Src = CI->getOperand(1); - switch (CI->getOperand(0)->getType()->getTypeID()) - { - case Type::SByteTyID: - case Type::UByteTyID: - { - Value* SA = ConstantUInt::get(Type::UByteTy, 1); - Value* MA = ConstantUInt::get(Type::UIntTy, 0x55); - Src = BinaryOperator::create(Instruction::Add, - BinaryOperator::create(Instruction::And, Src, MA), - BinaryOperator::create(Instruction::And, - new ShiftInst(Instruction::Shr, Src, SA), - MA)); - SA = ConstantUInt::get(Type::UByteTy, 2); - MA = ConstantUInt::get(Type::UIntTy, 0x33); - Src = BinaryOperator::create(Instruction::Add, - BinaryOperator::create(Instruction::And, Src, MA), - BinaryOperator::create(Instruction::And, - new ShiftInst(Instruction::Shr, Src, SA), - MA)); - SA = ConstantUInt::get(Type::UByteTy, 4); - MA = ConstantUInt::get(Type::UIntTy, 0x0F); - Src = BinaryOperator::create(Instruction::Add, - BinaryOperator::create(Instruction::And, Src, MA), - BinaryOperator::create(Instruction::And, - new ShiftInst(Instruction::Shr, Src, SA), - MA), "ctpop"); - } - break; - case Type::ShortTyID: - case Type::UShortTyID: - { - Value* SA = ConstantUInt::get(Type::UByteTy, 1); - Value* MA = ConstantUInt::get(Type::UIntTy, 0x5555); - Src = BinaryOperator::create(Instruction::Add, - BinaryOperator::create(Instruction::And, Src, MA), - BinaryOperator::create(Instruction::And, - new ShiftInst(Instruction::Shr, Src, SA), - MA)); - SA = ConstantUInt::get(Type::UByteTy, 2); - MA = ConstantUInt::get(Type::UIntTy, 0x3333); - Src = BinaryOperator::create(Instruction::Add, - BinaryOperator::create(Instruction::And, Src, MA), - BinaryOperator::create(Instruction::And, - new ShiftInst(Instruction::Shr, Src, SA), - MA)); - SA = ConstantUInt::get(Type::UByteTy, 4); - MA = ConstantUInt::get(Type::UIntTy, 0x0F0F); - Src = BinaryOperator::create(Instruction::Add, - BinaryOperator::create(Instruction::And, Src, MA), - BinaryOperator::create(Instruction::And, - new ShiftInst(Instruction::Shr, Src, SA), - MA)); - SA = ConstantUInt::get(Type::UByteTy, 8); - MA = ConstantUInt::get(Type::UIntTy, 0x00FF); - Src = BinaryOperator::create(Instruction::Add, - BinaryOperator::create(Instruction::And, Src, MA), - BinaryOperator::create(Instruction::And, - new ShiftInst(Instruction::Shr, Src, SA), - MA), "ctpop"); - - } - break; - case Type::IntTyID: - case Type::UIntTyID: - { - Value* SA = ConstantUInt::get(Type::UByteTy, 1); - Value* MA = ConstantUInt::get(Type::UIntTy, 0x55555555); - Src = BinaryOperator::create(Instruction::Add, - BinaryOperator::create(Instruction::And, Src, MA), - BinaryOperator::create(Instruction::And, - new ShiftInst(Instruction::Shr, Src, SA), - MA)); - SA = ConstantUInt::get(Type::UByteTy, 2); - MA = ConstantUInt::get(Type::UIntTy, 0x33333333); - Src = BinaryOperator::create(Instruction::Add, - BinaryOperator::create(Instruction::And, Src, MA), - BinaryOperator::create(Instruction::And, - new ShiftInst(Instruction::Shr, Src, SA), - MA)); - SA = ConstantUInt::get(Type::UByteTy, 4); - MA = ConstantUInt::get(Type::UIntTy, 0x0F0F0F0F); - Src = BinaryOperator::create(Instruction::Add, - BinaryOperator::create(Instruction::And, Src, MA), - BinaryOperator::create(Instruction::And, - new ShiftInst(Instruction::Shr, Src, SA), - MA)); - SA = ConstantUInt::get(Type::UByteTy, 8); - MA = ConstantUInt::get(Type::UIntTy, 0x00FF00FF); - Src = BinaryOperator::create(Instruction::Add, - BinaryOperator::create(Instruction::And, Src, MA), - BinaryOperator::create(Instruction::And, - new ShiftInst(Instruction::Shr, Src, SA), - MA)); - SA = ConstantUInt::get(Type::UByteTy, 8); - MA = ConstantUInt::get(Type::UIntTy, 0x0000FFFF); - Src = BinaryOperator::create(Instruction::Add, - BinaryOperator::create(Instruction::And, Src, MA), - BinaryOperator::create(Instruction::And, - new ShiftInst(Instruction::Shr, Src, SA), - MA), "ctpop"); - } - break; - case Type::LongTyID: - case Type::ULongTyID: - { - Value* SA = ConstantUInt::get(Type::UByteTy, 1); - Value* MA = ConstantUInt::get(Type::ULongTy, 0x5555555555555555ULL); - Src = BinaryOperator::create(Instruction::Add, - BinaryOperator::create(Instruction::And, Src, MA), - BinaryOperator::create(Instruction::And, - new ShiftInst(Instruction::Shr, Src, SA), - MA)); - SA = ConstantUInt::get(Type::UByteTy, 2); - MA = ConstantUInt::get(Type::ULongTy, 0x3333333333333333ULL); - Src = BinaryOperator::create(Instruction::Add, - BinaryOperator::create(Instruction::And, Src, MA), - BinaryOperator::create(Instruction::And, - new ShiftInst(Instruction::Shr, Src, SA), - MA)); - SA = ConstantUInt::get(Type::UByteTy, 4); - MA = ConstantUInt::get(Type::ULongTy, 0x0F0F0F0F0F0F0F0FULL); - Src = BinaryOperator::create(Instruction::Add, - BinaryOperator::create(Instruction::And, Src, MA), - BinaryOperator::create(Instruction::And, - new ShiftInst(Instruction::Shr, Src, SA), - MA)); - SA = ConstantUInt::get(Type::UByteTy, 8); - MA = ConstantUInt::get(Type::ULongTy, 0x00FF00FF00FF00FFULL); - Src = BinaryOperator::create(Instruction::Add, - BinaryOperator::create(Instruction::And, Src, MA), - BinaryOperator::create(Instruction::And, - new ShiftInst(Instruction::Shr, Src, SA), - MA)); - SA = ConstantUInt::get(Type::UByteTy, 16); - MA = ConstantUInt::get(Type::ULongTy, 0x00000000FFFFFFFFULL); - Src = BinaryOperator::create(Instruction::Add, - BinaryOperator::create(Instruction::And, Src, MA), - BinaryOperator::create(Instruction::And, - new ShiftInst(Instruction::Shr, Src, SA), - MA), "ctpop"); - } - break; - default: - abort(); - } - - CI->replaceAllUsesWith(Src); + case Intrinsic::ctpop: + CI->replaceAllUsesWith(LowerCTPOP(CI->getOperand(1), CI)); break; - } + case Intrinsic::ctlz: { Value *Src = CI->getOperand(1); Value* SA; @@ -331,39 +218,46 @@ case Type::LongTyID: case Type::ULongTyID: SA = ConstantUInt::get(Type::UByteTy, 32); - Src = BinaryOperator::create(Instruction::Or, Src, new ShiftInst(Instruction::Shr, Src, SA)); + Src = BinaryOperator::createOr(Src, new ShiftInst(Instruction::Shr, Src, + SA, "", CI), "", CI); case Type::IntTyID: case Type::UIntTyID: SA = ConstantUInt::get(Type::UByteTy, 16); - Src = BinaryOperator::create(Instruction::Or, Src, new ShiftInst(Instruction::Shr, Src, SA)); + Src = BinaryOperator::createOr(Src, new ShiftInst(Instruction::Shr, + Src, SA, "", CI), + "", CI); case Type::ShortTyID: case Type::UShortTyID: SA = ConstantUInt::get(Type::UByteTy, 8); - Src = BinaryOperator::create(Instruction::Or, Src, new ShiftInst(Instruction::Shr, Src, SA)); + Src = BinaryOperator::createOr(Src, new ShiftInst(Instruction::Shr, + Src, SA, "", CI), + "", CI); default: SA = ConstantUInt::get(Type::UByteTy, 1); - Src = BinaryOperator::create(Instruction::Or, Src, new ShiftInst(Instruction::Shr, Src, SA)); + Src = BinaryOperator::createOr(Src, new ShiftInst(Instruction::Shr, Src, + SA, "", CI), "", CI); SA = ConstantUInt::get(Type::UByteTy, 2); - Src = BinaryOperator::create(Instruction::Or, Src, new ShiftInst(Instruction::Shr, Src, SA)); + Src = BinaryOperator::createOr(Src, new ShiftInst(Instruction::Shr, Src, + SA, "", CI), "", CI); SA = ConstantUInt::get(Type::UByteTy, 4); - Src = BinaryOperator::create(Instruction::Or, Src, new ShiftInst(Instruction::Shr, Src, SA)); + Src = BinaryOperator::createOr(Src, new ShiftInst(Instruction::Shr, Src, + SA, "", CI), "", CI); }; - Src = BinaryOperator::createNot(Src); + Src = BinaryOperator::createNot(Src, "", CI); - Src = new CallInst(new Function(CI->getCalledFunction()->getFunctionType(), - CI->getCalledFunction()->getLinkage(), - "llvm.ctpop"), Src); + + Src = LowerCTPOP(Src, CI); CI->replaceAllUsesWith(Src); break; } case Intrinsic::cttz: { Value *Src = CI->getOperand(1); - Src = BinaryOperator::create(Instruction::And, BinaryOperator::createNot(Src), - BinaryOperator::create(Instruction::Sub, Src, - ConstantUInt::get(CI->getOperand(0)->getType(), 1))); - Src = new CallInst(new Function(CI->getCalledFunction()->getFunctionType(), - CI->getCalledFunction()->getLinkage(), - "llvm.ctpop"), Src); + Value *NotSrc = BinaryOperator::createNot(Src, Src->getName()+".not", CI); + Src = BinaryOperator::createAnd(NotSrc, + BinaryOperator::createSub(Src, + ConstantUInt::get(CI->getOperand(0)->getType(), 1), "", CI)); + + Src = LowerCTPOP(Src, CI); CI->replaceAllUsesWith(Src); break; } @@ -442,5 +336,5 @@ assert(CI->use_empty() && "Lowering should have eliminated any uses of the intrinsic call!"); - CI->getParent()->getInstList().erase(CI); + CI->eraseFromParent(); } From lattner at cs.uiuc.edu Wed May 11 15:02:31 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Wed, 11 May 2005 15:02:31 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/IntrinsicLowering.cpp Message-ID: <200505112002.j4BK2Vm9012671@apoc.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen: IntrinsicLowering.cpp updated: 1.31 -> 1.32 --- Log message: Fix lowering of cttz to work with signed values --- Diffs of the changes: (+4 -5) IntrinsicLowering.cpp | 9 ++++----- 1 files changed, 4 insertions(+), 5 deletions(-) Index: llvm/lib/CodeGen/IntrinsicLowering.cpp diff -u llvm/lib/CodeGen/IntrinsicLowering.cpp:1.31 llvm/lib/CodeGen/IntrinsicLowering.cpp:1.32 --- llvm/lib/CodeGen/IntrinsicLowering.cpp:1.31 Wed May 11 14:42:05 2005 +++ llvm/lib/CodeGen/IntrinsicLowering.cpp Wed May 11 15:02:14 2005 @@ -251,13 +251,12 @@ break; } case Intrinsic::cttz: { + // cttz(x) -> ctpop(~X & (X-1)) Value *Src = CI->getOperand(1); Value *NotSrc = BinaryOperator::createNot(Src, Src->getName()+".not", CI); - Src = BinaryOperator::createAnd(NotSrc, - BinaryOperator::createSub(Src, - ConstantUInt::get(CI->getOperand(0)->getType(), 1), "", CI)); - - Src = LowerCTPOP(Src, CI); + Value *SrcM1 = ConstantInt::get(Src->getType(), 1); + SrcM1 = BinaryOperator::createSub(Src, SrcM1, "", CI); + Src = LowerCTPOP(BinaryOperator::createAnd(NotSrc, SrcM1, "", CI), CI); CI->replaceAllUsesWith(Src); break; } From lattner at cs.uiuc.edu Wed May 11 15:24:28 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Wed, 11 May 2005 15:24:28 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/IntrinsicLowering.cpp Message-ID: <200505112024.j4BKOS6c015910@apoc.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen: IntrinsicLowering.cpp updated: 1.32 -> 1.33 --- Log message: Fix lowering of ctlz, so now UnitTests/2005-05-11-Popcount-ffs-fls passes with the CBE --- Diffs of the changes: (+26 -40) IntrinsicLowering.cpp | 66 +++++++++++++++++++------------------------------- 1 files changed, 26 insertions(+), 40 deletions(-) Index: llvm/lib/CodeGen/IntrinsicLowering.cpp diff -u llvm/lib/CodeGen/IntrinsicLowering.cpp:1.32 llvm/lib/CodeGen/IntrinsicLowering.cpp:1.33 --- llvm/lib/CodeGen/IntrinsicLowering.cpp:1.32 Wed May 11 15:02:14 2005 +++ llvm/lib/CodeGen/IntrinsicLowering.cpp Wed May 11 15:24:12 2005 @@ -131,7 +131,6 @@ /// instruction. static Value *LowerCTPOP(Value *V, Instruction *IP) { assert(V->getType()->isInteger() && "Can't ctpop a non-integer type!"); - unsigned BitSize = V->getType()->getPrimitiveSizeInBits(); static const uint64_t MaskValues[6] = { 0x5555555555555555ULL, 0x3333333333333333ULL, @@ -145,6 +144,7 @@ if (DestTy->isSigned()) V = new CastInst(V, DestTy->getUnsignedVersion(), V->getName(), IP); + unsigned BitSize = V->getType()->getPrimitiveSizeInBits(); for (unsigned i = 1, ct = 0; i != BitSize; i <<= 1, ++ct) { Value *MaskCst = ConstantExpr::getCast(ConstantUInt::get(Type::ULongTy, @@ -161,6 +161,29 @@ return V; } +/// LowerCTLZ - Emit the code to lower ctlz of V before the specified +/// instruction. +static Value *LowerCTLZ(Value *V, Instruction *IP) { + const Type *DestTy = V->getType(); + + // Force to unsigned so that the shift rights are logical. + if (DestTy->isSigned()) + V = new CastInst(V, DestTy->getUnsignedVersion(), V->getName(), IP); + + unsigned BitSize = V->getType()->getPrimitiveSizeInBits(); + for (unsigned i = 1; i != BitSize; i <<= 1) { + Value *ShVal = ConstantInt::get(Type::UByteTy, i); + ShVal = new ShiftInst(Instruction::Shr, V, ShVal, "ctlz.sh", IP); + V = BinaryOperator::createOr(V, ShVal, "ctlz.step", IP); + } + + if (V->getType() != DestTy) + V = new CastInst(V, DestTy, V->getName(), IP); + + V = BinaryOperator::createNot(V, "", IP); + return LowerCTPOP(V, IP); +} + void DefaultIntrinsicLowering::LowerIntrinsicCall(CallInst *CI) { Function *Callee = CI->getCalledFunction(); assert(Callee && "Cannot lower an indirect call!"); @@ -210,46 +233,9 @@ CI->replaceAllUsesWith(LowerCTPOP(CI->getOperand(1), CI)); break; - case Intrinsic::ctlz: { - Value *Src = CI->getOperand(1); - Value* SA; - switch (CI->getOperand(0)->getType()->getTypeID()) - { - case Type::LongTyID: - case Type::ULongTyID: - SA = ConstantUInt::get(Type::UByteTy, 32); - Src = BinaryOperator::createOr(Src, new ShiftInst(Instruction::Shr, Src, - SA, "", CI), "", CI); - case Type::IntTyID: - case Type::UIntTyID: - SA = ConstantUInt::get(Type::UByteTy, 16); - Src = BinaryOperator::createOr(Src, new ShiftInst(Instruction::Shr, - Src, SA, "", CI), - "", CI); - case Type::ShortTyID: - case Type::UShortTyID: - SA = ConstantUInt::get(Type::UByteTy, 8); - Src = BinaryOperator::createOr(Src, new ShiftInst(Instruction::Shr, - Src, SA, "", CI), - "", CI); - default: - SA = ConstantUInt::get(Type::UByteTy, 1); - Src = BinaryOperator::createOr(Src, new ShiftInst(Instruction::Shr, Src, - SA, "", CI), "", CI); - SA = ConstantUInt::get(Type::UByteTy, 2); - Src = BinaryOperator::createOr(Src, new ShiftInst(Instruction::Shr, Src, - SA, "", CI), "", CI); - SA = ConstantUInt::get(Type::UByteTy, 4); - Src = BinaryOperator::createOr(Src, new ShiftInst(Instruction::Shr, Src, - SA, "", CI), "", CI); - }; - Src = BinaryOperator::createNot(Src, "", CI); - - - Src = LowerCTPOP(Src, CI); - CI->replaceAllUsesWith(Src); + case Intrinsic::ctlz: + CI->replaceAllUsesWith(LowerCTLZ(CI->getOperand(1), CI)); break; - } case Intrinsic::cttz: { // cttz(x) -> ctpop(~X & (X-1)) Value *Src = CI->getOperand(1); From criswell at cs.uiuc.edu Wed May 11 16:16:53 2005 From: criswell at cs.uiuc.edu (John Criswell) Date: Wed, 11 May 2005 16:16:53 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/SparcV9/SparcV9PreSelection.cpp Message-ID: <200505112116.QAA25820@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/SparcV9: SparcV9PreSelection.cpp updated: 1.43 -> 1.44 --- Log message: Added support for decomposing constant expressions containing shr and shl instructions. Review of this commit would be greatly appreciated. --- Diffs of the changes: (+24 -0) SparcV9PreSelection.cpp | 24 ++++++++++++++++++++++++ 1 files changed, 24 insertions(+) Index: llvm/lib/Target/SparcV9/SparcV9PreSelection.cpp diff -u llvm/lib/Target/SparcV9/SparcV9PreSelection.cpp:1.43 llvm/lib/Target/SparcV9/SparcV9PreSelection.cpp:1.44 --- llvm/lib/Target/SparcV9/SparcV9PreSelection.cpp:1.43 Thu Apr 21 18:25:42 2005 +++ llvm/lib/Target/SparcV9/SparcV9PreSelection.cpp Wed May 11 16:16:42 2005 @@ -146,6 +146,30 @@ return new SelectInst (C, S1, S2, "constantSelect", &insertBefore); } + case Instruction::Shr: { + getArg1 = CE->getOperand(0); + if (ConstantExpr* CEarg = dyn_cast(getArg1)) + getArg1 = DecomposeConstantExpr(CEarg, insertBefore); + getArg2 = CE->getOperand(1); + if (ConstantExpr* CEarg = dyn_cast(getArg2)) + getArg2 = DecomposeConstantExpr(CEarg, insertBefore); + return new ShiftInst (static_cast(CE->getOpcode()), + getArg1, getArg2, + "constantShr:" + getArg1->getName(), &insertBefore); + } + + case Instruction::Shl: { + getArg1 = CE->getOperand(0); + if (ConstantExpr* CEarg = dyn_cast(getArg1)) + getArg1 = DecomposeConstantExpr(CEarg, insertBefore); + getArg2 = CE->getOperand(1); + if (ConstantExpr* CEarg = dyn_cast(getArg2)) + getArg2 = DecomposeConstantExpr(CEarg, insertBefore); + return new ShiftInst (static_cast(CE->getOpcode()), + getArg1, getArg2, + "constantShl:" + getArg1->getName(), &insertBefore); + } + default: // must be a binary operator assert(CE->getOpcode() >= Instruction::BinaryOpsBegin && CE->getOpcode() < Instruction::BinaryOpsEnd && From sabre at nondot.org Wed May 11 16:21:04 2005 From: sabre at nondot.org (Chris Lattner) Date: Wed, 11 May 2005 16:21:04 -0500 (CDT) Subject: [llvm-commits] CVS: llvm/lib/Target/SparcV9/SparcV9PreSelection.cpp In-Reply-To: <200505112116.QAA25820@zion.cs.uiuc.edu> References: <200505112116.QAA25820@zion.cs.uiuc.edu> Message-ID: Looks great to me John! -Chris On Wed, 11 May 2005, John Criswell wrote: > > > Changes in directory llvm/lib/Target/SparcV9: > > SparcV9PreSelection.cpp updated: 1.43 -> 1.44 > --- > Log message: > > Added support for decomposing constant expressions containing shr and shl > instructions. > Review of this commit would be greatly appreciated. > > > --- > Diffs of the changes: (+24 -0) > > SparcV9PreSelection.cpp | 24 ++++++++++++++++++++++++ > 1 files changed, 24 insertions(+) > > > Index: llvm/lib/Target/SparcV9/SparcV9PreSelection.cpp > diff -u llvm/lib/Target/SparcV9/SparcV9PreSelection.cpp:1.43 llvm/lib/Target/SparcV9/SparcV9PreSelection.cpp:1.44 > --- llvm/lib/Target/SparcV9/SparcV9PreSelection.cpp:1.43 Thu Apr 21 18:25:42 2005 > +++ llvm/lib/Target/SparcV9/SparcV9PreSelection.cpp Wed May 11 16:16:42 2005 > @@ -146,6 +146,30 @@ > return new SelectInst (C, S1, S2, "constantSelect", &insertBefore); > } > > + case Instruction::Shr: { > + getArg1 = CE->getOperand(0); > + if (ConstantExpr* CEarg = dyn_cast(getArg1)) > + getArg1 = DecomposeConstantExpr(CEarg, insertBefore); > + getArg2 = CE->getOperand(1); > + if (ConstantExpr* CEarg = dyn_cast(getArg2)) > + getArg2 = DecomposeConstantExpr(CEarg, insertBefore); > + return new ShiftInst (static_cast(CE->getOpcode()), > + getArg1, getArg2, > + "constantShr:" + getArg1->getName(), &insertBefore); > + } > + > + case Instruction::Shl: { > + getArg1 = CE->getOperand(0); > + if (ConstantExpr* CEarg = dyn_cast(getArg1)) > + getArg1 = DecomposeConstantExpr(CEarg, insertBefore); > + getArg2 = CE->getOperand(1); > + if (ConstantExpr* CEarg = dyn_cast(getArg2)) > + getArg2 = DecomposeConstantExpr(CEarg, insertBefore); > + return new ShiftInst (static_cast(CE->getOpcode()), > + getArg1, getArg2, > + "constantShl:" + getArg1->getName(), &insertBefore); > + } > + > default: // must be a binary operator > assert(CE->getOpcode() >= Instruction::BinaryOpsBegin && > CE->getOpcode() < Instruction::BinaryOpsEnd && > > > > _______________________________________________ > llvm-commits mailing list > llvm-commits at cs.uiuc.edu > http://mail.cs.uiuc.edu/mailman/listinfo/llvm-commits > -Chris -- http://nondot.org/sabre/ http://llvm.cs.uiuc.edu/ From lattner at cs.uiuc.edu Wed May 11 16:40:56 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Wed, 11 May 2005 16:40:56 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/SparcV9/SparcV9RegInfo.h Message-ID: <200505112140.j4BLeuMD018364@apoc.cs.uiuc.edu> Changes in directory llvm/lib/Target/SparcV9: SparcV9RegInfo.h updated: 1.17 -> 1.18 --- Log message: fix some GCC 4 warnings --- Diffs of the changes: (+2 -0) SparcV9RegInfo.h | 2 ++ 1 files changed, 2 insertions(+) Index: llvm/lib/Target/SparcV9/SparcV9RegInfo.h diff -u llvm/lib/Target/SparcV9/SparcV9RegInfo.h:1.17 llvm/lib/Target/SparcV9/SparcV9RegInfo.h:1.18 --- llvm/lib/Target/SparcV9/SparcV9RegInfo.h:1.17 Thu Apr 21 18:25:42 2005 +++ llvm/lib/Target/SparcV9/SparcV9RegInfo.h Wed May 11 16:40:40 2005 @@ -45,6 +45,8 @@ const unsigned NumOfAllRegs; // # of all registers -including SP,g0 etc. public: + virtual ~TargetRegClassInfo() {} + inline unsigned getRegClassID() const { return RegClassID; } inline unsigned getNumOfAvailRegs() const { return NumOfAvailRegs; } inline unsigned getNumOfAllRegs() const { return NumOfAllRegs; } From tbrethou at cs.uiuc.edu Wed May 11 16:45:20 2005 From: tbrethou at cs.uiuc.edu (Tanya Brethour) Date: Wed, 11 May 2005 16:45:20 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/SparcV9/SparcV9BurgISel.cpp Message-ID: <200505112145.j4BLjK1p018397@apoc.cs.uiuc.edu> Changes in directory llvm/lib/Target/SparcV9: SparcV9BurgISel.cpp updated: 1.17 -> 1.18 --- Log message: Fixed issue that broke ssa. --- Diffs of the changes: (+24 -1) SparcV9BurgISel.cpp | 25 ++++++++++++++++++++++++- 1 files changed, 24 insertions(+), 1 deletion(-) Index: llvm/lib/Target/SparcV9/SparcV9BurgISel.cpp diff -u llvm/lib/Target/SparcV9/SparcV9BurgISel.cpp:1.17 llvm/lib/Target/SparcV9/SparcV9BurgISel.cpp:1.18 --- llvm/lib/Target/SparcV9/SparcV9BurgISel.cpp:1.17 Thu Apr 21 18:25:42 2005 +++ llvm/lib/Target/SparcV9/SparcV9BurgISel.cpp Wed May 11 16:45:03 2005 @@ -2226,6 +2226,12 @@ .addReg(vreg).addRegDef(vreg); } +static inline MachineInstr* +CreateIntNegInstruction(const TargetMachine& target, Value* vreg, Value *destreg) { + return BuildMI(V9::SUBr, 3).addMReg(target.getRegInfo()->getZeroRegNum()) + .addReg(vreg).addRegDef(destreg); +} + /// CreateShiftInstructions - Create instruction sequence for any shift /// operation. SLL or SLLX on an operand smaller than the integer reg. size /// (64bits) requires a second instruction for explicit sign-extension. Note @@ -2306,6 +2312,7 @@ needNeg = true; C = -C; } + TmpInstruction *tmpNeg = 0; if (C == 0 || C == 1) { cost = target.getInstrInfo()->minLatency(V9::ADDr); @@ -2317,15 +2324,31 @@ M = BuildMI(V9::ADDr,3).addReg(lval).addMReg(Zero).addRegDef(destVal); mvec.push_back(M); } else if (isPowerOf2(C, pow)) { + if(!needNeg) { unsigned opSize = target.getTargetData().getTypeSize(resultType); MachineOpCode opCode = (opSize <= 32)? V9::SLLr5 : V9::SLLXr6; CreateShiftInstructions(target, F, opCode, lval, NULL, pow, destVal, mvec, mcfi); + } + else { + //Create tmp instruction to hold intermeidate value, since we need + //to negate the result + tmpNeg = new TmpInstruction(mcfi, lval); + unsigned opSize = target.getTargetData().getTypeSize(resultType); + MachineOpCode opCode = (opSize <= 32)? V9::SLLr5 : V9::SLLXr6; + CreateShiftInstructions(target, F, opCode, lval, NULL, pow, + tmpNeg, mvec, mcfi); + } + } if (mvec.size() > 0 && needNeg) { + MachineInstr* M = 0; + if(tmpNeg) // insert after the instr to flip the sign - MachineInstr* M = CreateIntNegInstruction(target, destVal); + M = CreateIntNegInstruction(target, tmpNeg, destVal); + else + M = CreateIntNegInstruction(target, destVal); mvec.push_back(M); } } From criswell at cs.uiuc.edu Wed May 11 16:47:46 2005 From: criswell at cs.uiuc.edu (John Criswell) Date: Wed, 11 May 2005 16:47:46 -0500 Subject: [llvm-commits] CVS: llvm/test/Regression/CodeGen/SparcV9/2005-05-11-DecomposeConstantExprCrash.ll Message-ID: <200505112147.QAA26070@zion.cs.uiuc.edu> Changes in directory llvm/test/Regression/CodeGen/SparcV9: 2005-05-11-DecomposeConstantExprCrash.ll added (r1.1) --- Log message: Regression test for PR#563. --- Diffs of the changes: (+16 -0) 2005-05-11-DecomposeConstantExprCrash.ll | 16 ++++++++++++++++ 1 files changed, 16 insertions(+) Index: llvm/test/Regression/CodeGen/SparcV9/2005-05-11-DecomposeConstantExprCrash.ll diff -c /dev/null llvm/test/Regression/CodeGen/SparcV9/2005-05-11-DecomposeConstantExprCrash.ll:1.1 *** /dev/null Wed May 11 16:47:45 2005 --- llvm/test/Regression/CodeGen/SparcV9/2005-05-11-DecomposeConstantExprCrash.ll Wed May 11 16:47:35 2005 *************** *** 0 **** --- 1,16 ---- + ; ModuleID = 'bugpoint-reduced-simplified.bc' + ; Reduced from the hash benchmark from the ShootOut C++ benchmark test + ; + ; RUN: llvm-as < %s | llc -march=sparcv9 + + target endian = big + target pointersize = 64 + %_ZN9__gnu_cxx16__stl_prime_listE = external global [28 x ulong] ; <[28 x ulong]*> [#uses=3] + + implementation ; Functions: + + fastcc void %_ZSt11lower_boundIPKmmET_S2_S2_RKT0_() { + entry: + %retval = select bool setgt (long shr (long sub (long cast (ulong* getelementptr ([28 x ulong]* %_ZN9__gnu_cxx16__stl_prime_listE, long 0, long 28) to long), long cast ([28 x ulong]* %_ZN9__gnu_cxx16__stl_prime_listE to long)), ubyte 3), long 0), ulong* null, ulong* getelementptr ([28 x ulong]* %_ZN9__gnu_cxx16__stl_prime_listE, long 0, long 0) ; [#uses=0] + ret void + } From natebegeman at mac.com Wed May 11 18:44:08 2005 From: natebegeman at mac.com (Nate Begeman) Date: Wed, 11 May 2005 18:44:08 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Message-ID: <200505112344.SAA26633@zion.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen/SelectionDAG: LegalizeDAG.cpp updated: 1.105 -> 1.106 --- Log message: Necessary changes to codegen cttz efficiently on PowerPC 1. Teach LegalizeDAG how to better legalize CTTZ if the target doesn't have CTPOP, but does have CTLZ 2. Teach PPC32 how to do sub x, const -> add x, -const for valid consts 3. Teach PPC32 how to do and (xor a, -1) b -> andc b, a 4. Teach PPC32 that ISD::CTLZ -> PPC::CNTLZW --- Diffs of the changes: (+13 -3) LegalizeDAG.cpp | 16 +++++++++++++--- 1 files changed, 13 insertions(+), 3 deletions(-) Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.105 llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.106 --- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.105 Wed May 11 14:02:11 2005 +++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Wed May 11 18:43:56 2005 @@ -1156,15 +1156,25 @@ break; } case ISD::CTTZ: { - // for now, we use: { return popcount(~x & (x - 1)); } - // but see also http://www.hackersdelight.org/HDcode/ntz.cc + // for now, we use: { return popcount(~x & (x - 1)); } + // unless the target has ctlz but not ctpop, in which case we use: + // { return 32 - nlz(~x & (x-1)); } + // see also http://www.hackersdelight.org/HDcode/ntz.cc MVT::ValueType VT = Tmp1.getValueType(); Tmp2 = DAG.getConstant(~0ULL, VT); Tmp3 = DAG.getNode(ISD::AND, VT, DAG.getNode(ISD::XOR, VT, Tmp1, Tmp2), DAG.getNode(ISD::SUB, VT, Tmp1, DAG.getConstant(1, VT))); - Result = LegalizeOp(DAG.getNode(ISD::CTPOP, VT, Tmp3)); + // If ISD::CTLZ is legal and CTPOP isn't, then do that instead + if (TLI.getOperationAction(ISD::CTPOP, VT) != TargetLowering::Legal && + TLI.getOperationAction(ISD::CTLZ, VT) == TargetLowering::Legal) { + Result = LegalizeOp(DAG.getNode(ISD::SUB, VT, + DAG.getConstant(getSizeInBits(VT), VT), + DAG.getNode(ISD::CTLZ, VT, Tmp3))); + } else { + Result = LegalizeOp(DAG.getNode(ISD::CTPOP, VT, Tmp3)); + } break; } default: From natebegeman at mac.com Wed May 11 18:44:08 2005 From: natebegeman at mac.com (Nate Begeman) Date: Wed, 11 May 2005 18:44:08 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/PowerPC/PPC32ISelPattern.cpp Message-ID: <200505112344.SAA26637@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/PowerPC: PPC32ISelPattern.cpp updated: 1.83 -> 1.84 --- Log message: Necessary changes to codegen cttz efficiently on PowerPC 1. Teach LegalizeDAG how to better legalize CTTZ if the target doesn't have CTPOP, but does have CTLZ 2. Teach PPC32 how to do sub x, const -> add x, -const for valid consts 3. Teach PPC32 how to do and (xor a, -1) b -> andc b, a 4. Teach PPC32 that ISD::CTLZ -> PPC::CNTLZW --- Diffs of the changes: (+28 -6) PPC32ISelPattern.cpp | 34 ++++++++++++++++++++++++++++------ 1 files changed, 28 insertions(+), 6 deletions(-) Index: llvm/lib/Target/PowerPC/PPC32ISelPattern.cpp diff -u llvm/lib/Target/PowerPC/PPC32ISelPattern.cpp:1.83 llvm/lib/Target/PowerPC/PPC32ISelPattern.cpp:1.84 --- llvm/lib/Target/PowerPC/PPC32ISelPattern.cpp:1.83 Mon May 9 12:39:48 2005 +++ llvm/lib/Target/PowerPC/PPC32ISelPattern.cpp Wed May 11 18:43:56 2005 @@ -69,10 +69,9 @@ setOperationAction(ISD::FCOS , MVT::f32, Expand); setOperationAction(ISD::FSQRT, MVT::f32, Expand); - //PowerPC has these, but they are not implemented + //PowerPC does not have CTPOP or CTTZ setOperationAction(ISD::CTPOP, MVT::i32 , Expand); setOperationAction(ISD::CTTZ , MVT::i32 , Expand); - setOperationAction(ISD::CTLZ , MVT::i32 , Expand); setSetCCResultContents(ZeroOrOneSetCCResult); addLegalFPImmediate(+0.0); // Necessary for FSEL @@ -654,9 +653,13 @@ if ((v & 0x0000FFFF) == 0) { Imm = v >> 16; return 2; } break; case ISD::MUL: - case ISD::SUB: if (v <= 32767 && v >= -32768) { Imm = v & 0xFFFF; return 1; } break; + case ISD::SUB: + // handle subtract-from separately from subtract, since subi is really addi + if (U && v <= 32767 && v >= -32768) { Imm = v & 0xFFFF; return 1; } + if (!U && v <= 32768 && v >= -32767) { Imm = (-v) & 0xFFFF; return 1; } + break; case ISD::SETCC: if (U && (v >= 0 && v <= 65535)) { Imm = v & 0xFFFF; return 1; } if (!U && (v <= 32767 && v >= -32768)) { Imm = v & 0xFFFF; return 1; } @@ -1817,6 +1820,11 @@ } return Result; + case ISD::CTLZ: + Tmp1 = SelectExpr(N.getOperand(0)); + BuildMI(BB, PPC::CNTLZW, 1, Result).addReg(Tmp1); + return Result; + case ISD::ADD: assert (DestType == MVT::i32 && "Only do arithmetic on i32s!"); Tmp1 = SelectExpr(N.getOperand(0)); @@ -1851,6 +1859,16 @@ switch(getImmediateForOpcode(N.getOperand(1), opcode, Tmp2)) { default: assert(0 && "unhandled result code"); case 0: // No immediate + // Check for andc: and, (xor a, -1), b + if (N.getOperand(0).getOpcode() == ISD::XOR && + N.getOperand(0).getOperand(1).getOpcode() == ISD::Constant && + cast(N.getOperand(0).getOperand(1))->isAllOnesValue()) { + Tmp1 = SelectExpr(N.getOperand(0).getOperand(0)); + Tmp2 = SelectExpr(N.getOperand(1)); + BuildMI(BB, PPC::ANDC, 2, Result).addReg(Tmp2).addReg(Tmp1); + return Result; + } + // It wasn't and-with-complement, emit a regular and Tmp1 = SelectExpr(N.getOperand(0)); Tmp2 = SelectExpr(N.getOperand(1)); Opc = Recording ? PPC::ANDo : PPC::AND; @@ -1976,11 +1994,15 @@ } case ISD::SUB: - Tmp2 = SelectExpr(N.getOperand(1)); - if (1 == getImmediateForOpcode(N.getOperand(0), opcode, Tmp1)) + if (1 == getImmediateForOpcode(N.getOperand(0), opcode, Tmp1, true)) { + Tmp2 = SelectExpr(N.getOperand(1)); BuildMI(BB, PPC::SUBFIC, 2, Result).addReg(Tmp2).addSImm(Tmp1); - else { + } else if (1 == getImmediateForOpcode(N.getOperand(1), opcode, Tmp2)) { Tmp1 = SelectExpr(N.getOperand(0)); + BuildMI(BB, PPC::ADDI, 2, Result).addReg(Tmp1).addSImm(Tmp2); + } else { + Tmp1 = SelectExpr(N.getOperand(0)); + Tmp2 = SelectExpr(N.getOperand(1)); BuildMI(BB, PPC::SUBF, 2, Result).addReg(Tmp2).addReg(Tmp1); } return Result; From natebegeman at mac.com Wed May 11 18:46:05 2005 From: natebegeman at mac.com (Nate Begeman) Date: Wed, 11 May 2005 18:46:05 -0500 Subject: [llvm-commits] CVS: llvm/test/Regression/CodeGen/PowerPC/cttz.ll Message-ID: <200505112346.SAA26662@zion.cs.uiuc.edu> Changes in directory llvm/test/Regression/CodeGen/PowerPC: cttz.ll added (r1.1) --- Log message: Add testcase for legalizing ISD::CTTZ efficiently. On PPC, ctlz(int) is now codegen'd as this: addi r2, r3, -1 andc r2, r2, r3 cntlzw r2, r2 subfic r3, r2, 32 blr --- Diffs of the changes: (+12 -0) cttz.ll | 12 ++++++++++++ 1 files changed, 12 insertions(+) Index: llvm/test/Regression/CodeGen/PowerPC/cttz.ll diff -c /dev/null llvm/test/Regression/CodeGen/PowerPC/cttz.ll:1.1 *** /dev/null Wed May 11 18:46:04 2005 --- llvm/test/Regression/CodeGen/PowerPC/cttz.ll Wed May 11 18:45:54 2005 *************** *** 0 **** --- 1,12 ---- + ; Make sure this testcase does not use ctpop + ; RUN: llvm-as < %s | llc -march=ppc32 | grep -i 'cntlzw' + + declare int %llvm.cttz(int) + + implementation ; Functions: + + int %bar(int %x) { + entry: + %tmp.1 = call int %llvm.cttz( int %x ) + ret int %tmp.1 + } From lattner at cs.uiuc.edu Wed May 11 19:17:21 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Wed, 11 May 2005 19:17:21 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp SelectionDAG.cpp Message-ID: <200505120017.j4C0HL2U022221@apoc.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen/SelectionDAG: LegalizeDAG.cpp updated: 1.106 -> 1.107 SelectionDAG.cpp updated: 1.106 -> 1.107 --- Log message: Make legalize a bit more efficient, and canonicalize sub X, C -> add X, -C --- Diffs of the changes: (+12 -8) LegalizeDAG.cpp | 7 +++++-- SelectionDAG.cpp | 13 +++++++------ 2 files changed, 12 insertions(+), 8 deletions(-) Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.106 llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.107 --- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.106 Wed May 11 18:43:56 2005 +++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Wed May 11 19:17:04 2005 @@ -323,8 +323,11 @@ Tmp1 = LegalizeOp(Node->getOperand(0)); // Legalize the chain. // There is no need to legalize the size argument (Operand #1) if (Tmp1 != Node->getOperand(0)) - Result = DAG.getNode(Node->getOpcode(), MVT::Other, Tmp1, - Node->getOperand(1)); + Node->setAdjCallChain(Tmp1); + // Note that we do not create new ADJCALLSTACK DOWN/UP nodes here. These + // nodes are treated specially and are mutated in place. This makes the dag + // legalization process more efficient and also makes libcall insertion + // easier. break; case ISD::DYNAMIC_STACKALLOC: Tmp1 = LegalizeOp(Node->getOperand(0)); // Legalize the chain. Index: llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp diff -u llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:1.106 llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:1.107 --- llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:1.106 Wed May 11 13:57:39 2005 +++ llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp Wed May 11 19:17:04 2005 @@ -916,7 +916,7 @@ break; case ISD::SUB: if (!C2) return N1; // sub X, 0 -> X - break; + return getNode(ISD::ADD, VT, N1, getConstant(-C2, VT)); case ISD::MUL: if (!C2) return N2; // mul X, 0 -> 0 if (N2C->isAllOnesValue()) // mul X, -1 -> 0-X @@ -1194,13 +1194,13 @@ // Memoize this node if possible. SDNode *N; - if (Opcode != ISD::ADJCALLSTACKDOWN) { + if (Opcode != ISD::ADJCALLSTACKDOWN && Opcode != ISD::ADJCALLSTACKUP) { SDNode *&BON = BinaryOps[std::make_pair(Opcode, std::make_pair(N1, N2))]; if (BON) return SDOperand(BON, 0); BON = N = new SDNode(Opcode, N1, N2); } else { - N = new SDNode(ISD::ADJCALLSTACKDOWN, N1, N2); + N = new SDNode(Opcode, N1, N2); } @@ -1213,11 +1213,12 @@ return SDOperand(N, 0); } -// setAdjCallChain - This method changes the token chain of an ADJCALLSTACKDOWN -// node to be the specified operand. +// setAdjCallChain - This method changes the token chain of an +// ADJCALLSTACKDOWN/UP node to be the specified operand. void SDNode::setAdjCallChain(SDOperand N) { assert(N.getValueType() == MVT::Other); - assert(getOpcode() == ISD::ADJCALLSTACKDOWN && "Cannot adjust this node!"); + assert((getOpcode() == ISD::ADJCALLSTACKDOWN || + getOpcode() == ISD::ADJCALLSTACKUP) && "Cannot adjust this node!"); Operands[0].Val->removeUser(this); Operands[0] = N; From lattner at cs.uiuc.edu Wed May 11 21:02:38 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Wed, 11 May 2005 21:02:38 -0500 Subject: [llvm-commits] CVS: llvm/include/llvm/Target/TargetLowering.h Message-ID: <200505120202.j4C22cNC027661@apoc.cs.uiuc.edu> Changes in directory llvm/include/llvm/Target: TargetLowering.h updated: 1.10 -> 1.11 --- Log message: Add a little hook --- Diffs of the changes: (+14 -0) TargetLowering.h | 14 ++++++++++++++ 1 files changed, 14 insertions(+) Index: llvm/include/llvm/Target/TargetLowering.h diff -u llvm/include/llvm/Target/TargetLowering.h:1.10 llvm/include/llvm/Target/TargetLowering.h:1.11 --- llvm/include/llvm/Target/TargetLowering.h:1.10 Thu Apr 21 15:53:44 2005 +++ llvm/include/llvm/Target/TargetLowering.h Wed May 11 21:02:21 2005 @@ -76,6 +76,10 @@ MVT::ValueType getShiftAmountTy() const { return ShiftAmountTy; } OutOfRangeShiftAmount getShiftAmountFlavor() const {return ShiftAmtHandling; } + /// isSetCCExpensive - Return true if the setcc operation is expensive for + /// this target. + bool isSetCCExpensive() const { return SetCCIsExpensive; } + /// getSetCCResultTy - Return the ValueType of the result of setcc operations. /// MVT::ValueType getSetCCResultTy() const { return SetCCResultTy; } @@ -207,6 +211,11 @@ ShiftAmtHandling = OORSA; } + /// setSetCCIxExpensive - This is a short term hack for targets that codegen + /// setcc as a conditional branch. This encourages the code generator to fold + /// setcc operations into other operations if possible. + void setSetCCIsExpensive() { SetCCIsExpensive = true; } + /// addRegisterClass - Add the specified register class as an available /// regclass for the specified value type. This indicates the selector can /// handle values of that class natively. @@ -310,6 +319,11 @@ OutOfRangeShiftAmount ShiftAmtHandling; + /// SetCCIsExpensive - This is a short term hack for targets that codegen + /// setcc as a conditional branch. This encourages the code generator to fold + /// setcc operations into other operations if possible. + bool SetCCIsExpensive; + /// SetCCResultTy - The type that SetCC operations use. This defaults to the /// PointerTy. MVT::ValueType SetCCResultTy; From lattner at cs.uiuc.edu Wed May 11 21:06:15 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Wed, 11 May 2005 21:06:15 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/PowerPC/PPC32ISelPattern.cpp PPC64ISelPattern.cpp Message-ID: <200505120206.j4C26Fnw028630@apoc.cs.uiuc.edu> Changes in directory llvm/lib/Target/PowerPC: PPC32ISelPattern.cpp updated: 1.84 -> 1.85 PPC64ISelPattern.cpp updated: 1.14 -> 1.15 --- Log message: These targets don't like setcc --- Diffs of the changes: (+6 -0) PPC32ISelPattern.cpp | 3 +++ PPC64ISelPattern.cpp | 3 +++ 2 files changed, 6 insertions(+) Index: llvm/lib/Target/PowerPC/PPC32ISelPattern.cpp diff -u llvm/lib/Target/PowerPC/PPC32ISelPattern.cpp:1.84 llvm/lib/Target/PowerPC/PPC32ISelPattern.cpp:1.85 --- llvm/lib/Target/PowerPC/PPC32ISelPattern.cpp:1.84 Wed May 11 18:43:56 2005 +++ llvm/lib/Target/PowerPC/PPC32ISelPattern.cpp Wed May 11 21:06:00 2005 @@ -43,6 +43,9 @@ int ReturnAddrIndex; // FrameIndex for return slot. public: PPC32TargetLowering(TargetMachine &TM) : TargetLowering(TM) { + // Fold away setcc operations if possible. + setSetCCIsExpensive(); + // Set up the register classes. addRegisterClass(MVT::i32, PPC32::GPRCRegisterClass); addRegisterClass(MVT::f32, PPC32::FPRCRegisterClass); Index: llvm/lib/Target/PowerPC/PPC64ISelPattern.cpp diff -u llvm/lib/Target/PowerPC/PPC64ISelPattern.cpp:1.14 llvm/lib/Target/PowerPC/PPC64ISelPattern.cpp:1.15 --- llvm/lib/Target/PowerPC/PPC64ISelPattern.cpp:1.14 Wed May 4 14:25:37 2005 +++ llvm/lib/Target/PowerPC/PPC64ISelPattern.cpp Wed May 11 21:06:00 2005 @@ -41,6 +41,9 @@ int ReturnAddrIndex; // FrameIndex for return slot. public: PPC64TargetLowering(TargetMachine &TM) : TargetLowering(TM) { + // Fold away setcc operations if possible. + setSetCCIsExpensive(); + // Set up the register classes. addRegisterClass(MVT::i64, PPC64::GPRCRegisterClass); addRegisterClass(MVT::f32, PPC64::FPRCRegisterClass); From lattner at cs.uiuc.edu Wed May 11 23:49:25 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Wed, 11 May 2005 23:49:25 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Message-ID: <200505120449.j4C4nPF8004257@apoc.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen/SelectionDAG: LegalizeDAG.cpp updated: 1.107 -> 1.108 --- Log message: Fix a problem where early legalization can cause token chain problems. --- Diffs of the changes: (+8 -7) LegalizeDAG.cpp | 15 ++++++++------- 1 files changed, 8 insertions(+), 7 deletions(-) Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.107 llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.108 --- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.107 Wed May 11 19:17:04 2005 +++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Wed May 11 23:49:08 2005 @@ -130,6 +130,8 @@ void ExpandByParts(unsigned NodeOp, SDOperand LHS, SDOperand RHS, SDOperand &Lo, SDOperand &Hi); + void SpliceCallInto(const SDOperand &CallResult, SDNode *OutChain); + SDOperand getIntPtrConstant(uint64_t Val) { return DAG.getConstant(Val, TLI.getPointerTy()); } @@ -1271,7 +1273,6 @@ Node->getOpcode() == ISD::UINT_TO_FP) { Result = ExpandIntToFP(Node->getOpcode() == ISD::SINT_TO_FP, Node->getValueType(0), Node->getOperand(0)); - Result = LegalizeOp(Result); break; } else if (Node->getOpcode() == ISD::TRUNCATE) { // In the expand case, we must be dealing with a truncate, because @@ -1530,8 +1531,6 @@ case Expand: Result = ExpandIntToFP(Node->getOpcode() == ISD::SINT_TO_FP, NVT, Node->getOperand(0)); - Result = LegalizeOp(Result); - // Round if we cannot tolerate excess precision. if (NoExcessFPPrecision) Result = DAG.getNode(ISD::FP_ROUND_INREG, NVT, Result, VT); @@ -2047,8 +2046,8 @@ } /// SpliceCallInto - Given the result chain of a libcall (CallResult), and a -static void SpliceCallInto(const SDOperand &CallResult, SDNode *OutChain, - SelectionDAG &DAG) { +void SelectionDAGLegalize::SpliceCallInto(const SDOperand &CallResult, + SDNode *OutChain) { // Nothing to splice it into? if (OutChain == 0) return; @@ -2087,7 +2086,9 @@ const Type *RetTy = MVT::getTypeForValueType(Node->getValueType(0)); std::pair CallInfo = TLI.LowerCallTo(InChain, RetTy, false, Callee, Args, DAG); - SpliceCallInto(CallInfo.second, OutChain, DAG); + SpliceCallInto(CallInfo.second, OutChain); + + NeedsAnotherIteration = true; switch (getTypeAction(CallInfo.first.getValueType())) { default: assert(0 && "Unknown thing"); @@ -2176,7 +2177,7 @@ std::pair CallResult = TLI.LowerCallTo(InChain, RetTy, false, Callee, Args, DAG); - SpliceCallInto(CallResult.second, OutChain, DAG); + SpliceCallInto(CallResult.second, OutChain); return CallResult.first; } From lattner at cs.uiuc.edu Thu May 12 01:01:45 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Thu, 12 May 2005 01:01:45 -0500 Subject: [llvm-commits] CVS: llvm/lib/ExecutionEngine/ExecutionEngine.cpp Message-ID: <200505120601.j4C61jVK005774@apoc.cs.uiuc.edu> Changes in directory llvm/lib/ExecutionEngine: ExecutionEngine.cpp updated: 1.68 -> 1.69 --- Log message: Fix a really horrible problem that causes the JIT to miscompile any program that use 64-bit integers on 32-bit hosts. --- Diffs of the changes: (+2 -2) ExecutionEngine.cpp | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) Index: llvm/lib/ExecutionEngine/ExecutionEngine.cpp diff -u llvm/lib/ExecutionEngine/ExecutionEngine.cpp:1.68 llvm/lib/ExecutionEngine/ExecutionEngine.cpp:1.69 --- llvm/lib/ExecutionEngine/ExecutionEngine.cpp:1.68 Thu Apr 21 17:36:52 2005 +++ llvm/lib/ExecutionEngine/ExecutionEngine.cpp Thu May 12 01:01:28 2005 @@ -271,8 +271,8 @@ GET_CONST_VAL(Short , signed short , ConstantSInt); GET_CONST_VAL(UInt , unsigned int , ConstantUInt); GET_CONST_VAL(Int , signed int , ConstantSInt); - GET_CONST_VAL(ULong , unsigned long , ConstantUInt); - GET_CONST_VAL(Long , signed long , ConstantSInt); + GET_CONST_VAL(ULong , uint64_t , ConstantUInt); + GET_CONST_VAL(Long , int64_t , ConstantSInt); GET_CONST_VAL(Float , float , ConstantFP); GET_CONST_VAL(Double , double , ConstantFP); #undef GET_CONST_VAL From lattner at cs.uiuc.edu Thu May 12 01:04:28 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Thu, 12 May 2005 01:04:28 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Message-ID: <200505120604.j4C64Shm005793@apoc.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen/SelectionDAG: LegalizeDAG.cpp updated: 1.108 -> 1.109 --- Log message: add fixme --- Diffs of the changes: (+1 -0) LegalizeDAG.cpp | 1 + 1 files changed, 1 insertion(+) Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.108 llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.109 --- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.108 Wed May 11 23:49:08 2005 +++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Thu May 12 01:04:14 2005 @@ -306,6 +306,7 @@ for (unsigned i = 0, e = Node->getNumOperands(); i != e; ++i) { SDOperand Op = Node->getOperand(i); // Fold single-use TokenFactor nodes into this token factor as we go. + // FIXME: This is something that the DAGCombiner should do!! if (Op.getOpcode() == ISD::TokenFactor && Op.hasOneUse()) { Changed = true; for (unsigned j = 0, e = Op.getNumOperands(); j != e; ++j) From lattner at cs.uiuc.edu Thu May 12 01:27:21 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Thu, 12 May 2005 01:27:21 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp Message-ID: <200505120627.j4C6RLld007998@apoc.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen/SelectionDAG: SelectionDAG.cpp updated: 1.107 -> 1.108 --- Log message: handle a common case generated by the uint64 -> FP code path better --- Diffs of the changes: (+17 -1) SelectionDAG.cpp | 18 +++++++++++++++++- 1 files changed, 17 insertions(+), 1 deletion(-) Index: llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp diff -u llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:1.107 llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:1.108 --- llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:1.107 Wed May 11 19:17:04 2005 +++ llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp Thu May 12 01:27:02 2005 @@ -1299,7 +1299,7 @@ N2.getOperand(0) == N3) return getNode(ISD::FABS, VT, N3); } - // select (setlt X, 0), A, 0 -> and (sra X, size(X)-1, A) + // select (setlt X, 0), A, 0 -> and (sra X, size(X)-1), A if (ConstantSDNode *CN = dyn_cast(SetCC->getOperand(1))) if (CN->getValue() == 0 && N3C && N3C->getValue() == 0) @@ -1307,6 +1307,22 @@ MVT::ValueType XType = SetCC->getOperand(0).getValueType(); MVT::ValueType AType = N2.getValueType(); if (XType >= AType) { + // and (sra X, size(X)-1, A) -> "and (srl X, C2), A" iff A is a + // single-bit constant. FIXME: remove once the dag combiner + // exists. + if (ConstantSDNode *AC = dyn_cast(N2)) + if ((AC->getValue() & (AC->getValue()-1)) == 0) { + unsigned ShCtV = ExactLog2(AC->getValue()); + ShCtV = MVT::getSizeInBits(XType)-ShCtV-1; + SDOperand ShCt = getConstant(ShCtV, TLI.getShiftAmountTy()); + SDOperand Shift = getNode(ISD::SRL, XType, + SetCC->getOperand(0), ShCt); + if (XType > AType) + Shift = getNode(ISD::TRUNCATE, AType, Shift); + return getNode(ISD::AND, AType, Shift, N2); + } + + SDOperand Shift = getNode(ISD::SRA, XType, SetCC->getOperand(0), getConstant(MVT::getSizeInBits(XType)-1, TLI.getShiftAmountTy())); From lattner at cs.uiuc.edu Thu May 12 01:54:39 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Thu, 12 May 2005 01:54:39 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Message-ID: <200505120654.j4C6sd8X008434@apoc.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen/SelectionDAG: LegalizeDAG.cpp updated: 1.109 -> 1.110 --- Log message: Make sure to expand all nodes, avoiding unintentional node duplication. --- Diffs of the changes: (+7 -0) LegalizeDAG.cpp | 7 +++++++ 1 files changed, 7 insertions(+) Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.109 llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.110 --- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.109 Thu May 12 01:04:14 2005 +++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Thu May 12 01:54:21 2005 @@ -2168,6 +2168,13 @@ TargetLowering::ArgListTy Args; const Type *ArgTy = MVT::getTypeForValueType(Source.getValueType()); + + // Expand the source, then glue it back together for the call. We must expand + // the source in case it is shared (this pass of legalize must traverse it). + SDOperand SrcLo, SrcHi; + ExpandOp(Source, SrcLo, SrcHi); + Source = DAG.getNode(ISD::BUILD_PAIR, Source.getValueType(), SrcLo, SrcHi); + Args.push_back(std::make_pair(Source, ArgTy)); // We don't care about token chains for libcalls. We just use the entry From lattner at cs.uiuc.edu Thu May 12 02:01:01 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Thu, 12 May 2005 02:01:01 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Message-ID: <200505120701.j4C711HS010590@apoc.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen/SelectionDAG: LegalizeDAG.cpp updated: 1.110 -> 1.111 --- Log message: Oops, don't do this after we figure out where to insert the call chains. --- Diffs of the changes: (+6 -6) LegalizeDAG.cpp | 12 ++++++------ 1 files changed, 6 insertions(+), 6 deletions(-) Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.110 llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.111 --- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.110 Thu May 12 01:54:21 2005 +++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Thu May 12 02:00:44 2005 @@ -2153,6 +2153,12 @@ return DAG.getNode(ISD::ADD, DestTy, SignedConv, FudgeInReg); } + // Expand the source, then glue it back together for the call. We must expand + // the source in case it is shared (this pass of legalize must traverse it). + SDOperand SrcLo, SrcHi; + ExpandOp(Source, SrcLo, SrcHi); + Source = DAG.getNode(ISD::BUILD_PAIR, Source.getValueType(), SrcLo, SrcHi); + SDNode *OutChain = 0; SDOperand InChain = FindInputOutputChains(Source.Val, OutChain, DAG.getEntryNode()); @@ -2169,12 +2175,6 @@ TargetLowering::ArgListTy Args; const Type *ArgTy = MVT::getTypeForValueType(Source.getValueType()); - // Expand the source, then glue it back together for the call. We must expand - // the source in case it is shared (this pass of legalize must traverse it). - SDOperand SrcLo, SrcHi; - ExpandOp(Source, SrcLo, SrcHi); - Source = DAG.getNode(ISD::BUILD_PAIR, Source.getValueType(), SrcLo, SrcHi); - Args.push_back(std::make_pair(Source, ArgTy)); // We don't care about token chains for libcalls. We just use the entry From criswell at cs.uiuc.edu Thu May 12 11:52:50 2005 From: criswell at cs.uiuc.edu (John Criswell) Date: Thu, 12 May 2005 11:52:50 -0500 Subject: [llvm-commits] CVS: llvm/docs/LangRef.html Message-ID: <200505121652.LAA07392@choi.cs.uiuc.edu> Changes in directory llvm/docs: LangRef.html updated: 1.103 -> 1.104 --- Log message: Fixed some typos. --- Diffs of the changes: (+11 -11) LangRef.html | 22 +++++++++++----------- 1 files changed, 11 insertions(+), 11 deletions(-) Index: llvm/docs/LangRef.html diff -u llvm/docs/LangRef.html:1.103 llvm/docs/LangRef.html:1.104 --- llvm/docs/LangRef.html:1.103 Tue May 10 22:35:57 2005 +++ llvm/docs/LangRef.html Thu May 12 11:52:32 2005 @@ -305,7 +305,7 @@ -

    ...and it also show a convention that we follow in this document. When +

    ...and it also shows a convention that we follow in this document. When demonstrating instructions, we will follow an instruction with a comment that defines the type and name of value produced. Comments are shown in italic text.

    @@ -446,7 +446,7 @@
    This calling convention (the default if no other calling convention is specified) matches the target C calling conventions. This calling convention - supports varargs function calls, and tolerates some mismatch in the declared + supports varargs function calls and tolerates some mismatch in the declared prototype and implemented declaration of the function (as does normal C).
    @@ -539,7 +539,7 @@ with a terminator instruction (such as a branch or function return).

    -

    The first basic block in program is special in two ways: it is immediately +

    The first basic block in a program is special in two ways: it is immediately executed on entrance to the function, and it is not allowed to have predecessor basic blocks (i.e. there can not be any branches to the entry block of a function). Because the block can have no predecessors, it also cannot have any @@ -685,7 +685,7 @@ [<# elements> x <elementtype>] -

    The number of elements is a constant integer value, elementtype may +

    The number of elements is a constant integer value; elementtype may be any type with a size.

    Examples:
    @@ -1060,7 +1060,7 @@ be any of the binary or bitwise binary operations. The constraints on operands are the same as those for the corresponding instruction (e.g. no bitwise operations on floating point - are allowed). + values are allowed). @@ -1125,7 +1125,7 @@ href="#i_call">call" instruction, execution continues at the instruction after the call. If the caller was an "invoke" instruction, execution continues -at the beginning "normal" of the destination block. If the instruction +at the beginning of the "normal" destination block. If the instruction returns a value, that value shall set the call or invoke instruction's return value.

    Example:
    @@ -1235,12 +1235,12 @@

    The 'invoke' instruction causes control to transfer to a specified function, with the possibility of control flow transfer to either the -'normal' label label or the -'exception'label. If the callee function returns with the +'normal' label or the +'exception' label. If the callee function returns with the "ret" instruction, control flow will return to the "normal" label. If the callee (or any indirect callees) returns with the "unwind" instruction, control is interrupted, and -continued at the dynamically nearest "except" label.

    +href="#i_unwind">unwind" instruction, control is interrupted and +continued at the dynamically nearest "exception" label.

    Arguments:
    @@ -3298,7 +3298,7 @@ Chris Lattner
    The LLVM Compiler Infrastructure
    - Last modified: $Date: 2005/05/11 03:35:57 $ + Last modified: $Date: 2005/05/12 16:52:32 $ From lattner at cs.uiuc.edu Thu May 12 11:54:05 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Thu, 12 May 2005 11:54:05 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Message-ID: <200505121654.j4CGs5Gr014562@apoc.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen/SelectionDAG: LegalizeDAG.cpp updated: 1.111 -> 1.112 --- Log message: Allow something to be legalized multiple times. This can be used to reduce legalization iteration --- Diffs of the changes: (+30 -12) LegalizeDAG.cpp | 42 ++++++++++++++++++++++++++++++------------ 1 files changed, 30 insertions(+), 12 deletions(-) Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.111 llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.112 --- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.111 Thu May 12 02:00:44 2005 +++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Thu May 12 11:53:42 2005 @@ -162,12 +162,13 @@ SDOperand SelectionDAGLegalize::LegalizeOp(SDOperand Op) { assert(getTypeAction(Op.getValueType()) == Legal && "Caller should expand or promote operands that are not legal!"); + SDNode *Node = Op.Val; // If this operation defines any values that cannot be represented in a // register on this target, make sure to expand or promote them. - if (Op.Val->getNumValues() > 1) { - for (unsigned i = 0, e = Op.Val->getNumValues(); i != e; ++i) - switch (getTypeAction(Op.Val->getValueType(i))) { + if (Node->getNumValues() > 1) { + for (unsigned i = 0, e = Node->getNumValues(); i != e; ++i) + switch (getTypeAction(Node->getValueType(i))) { case Legal: break; // Nothing to do. case Expand: { SDOperand T1, T2; @@ -184,13 +185,14 @@ } } + // Note that LegalizeOp may be reentered even from single-use nodes, which + // means that we always must cache transformed nodes. std::map::iterator I = LegalizedNodes.find(Op); if (I != LegalizedNodes.end()) return I->second; SDOperand Tmp1, Tmp2, Tmp3; SDOperand Result = Op; - SDNode *Node = Op.Val; switch (Node->getOpcode()) { default: @@ -325,8 +327,18 @@ case ISD::ADJCALLSTACKUP: Tmp1 = LegalizeOp(Node->getOperand(0)); // Legalize the chain. // There is no need to legalize the size argument (Operand #1) - if (Tmp1 != Node->getOperand(0)) + Tmp2 = Node->getOperand(0); + if (Tmp1 != Tmp2) { Node->setAdjCallChain(Tmp1); + + // If moving the operand from pointing to Tmp2 dropped its use count to 1, + // this will cause the maps used to memoize results to get confused. + // Create and add a dummy use, just to increase its use count. This will + // be removed at the end of legalize when dead nodes are removed. + if (Tmp2.Val->hasOneUse()) + DAG.getNode(ISD::PCMARKER, MVT::Other, Tmp2, + DAG.getConstant(0, MVT::i32)); + } // Note that we do not create new ADJCALLSTACK DOWN/UP nodes here. These // nodes are treated specially and are mutated in place. This makes the dag // legalization process more efficient and also makes libcall insertion @@ -914,7 +926,7 @@ } else { assert(0 && "Unknown op!"); } - // FIXME: THESE SHOULD USE ExpandLibCall ??!? + std::pair CallResult = TLI.LowerCallTo(Tmp1, Type::VoidTy, false, DAG.getExternalSymbol(FnName, IntPtr), Args, DAG); @@ -1389,9 +1401,9 @@ } } - if (!Op.Val->hasOneUse()) - AddLegalizedOperand(Op, Result); - + // Note that LegalizeOp may be reentered even from single-use nodes, which + // means that we always must cache transformed nodes. + AddLegalizedOperand(Op, Result); return Result; } @@ -1407,14 +1419,18 @@ assert(NVT > VT && MVT::isInteger(NVT) == MVT::isInteger(VT) && "Cannot promote to smaller type!"); - std::map::iterator I = PromotedNodes.find(Op); - if (I != PromotedNodes.end()) return I->second; - SDOperand Tmp1, Tmp2, Tmp3; SDOperand Result; SDNode *Node = Op.Val; + if (!Node->hasOneUse()) { + std::map::iterator I = PromotedNodes.find(Op); + if (I != PromotedNodes.end()) return I->second; + } else { + assert(!PromotedNodes.count(Op) && "Repromoted this node??"); + } + // Promotion needs an optimization step to clean up after it, and is not // careful to avoid operations the target does not support. Make sure that // all generated operations are legalized in the next iteration. @@ -2216,6 +2232,8 @@ Hi = I->second.second; return; } + } else { + assert(!ExpandedNodes.count(Op) && "Re-expanding a node!"); } // Expanding to multiple registers needs to perform an optimization step, and From criswell at cs.uiuc.edu Thu May 12 11:55:52 2005 From: criswell at cs.uiuc.edu (John Criswell) Date: Thu, 12 May 2005 11:55:52 -0500 Subject: [llvm-commits] CVS: llvm/docs/LangRef.html Message-ID: <200505121655.LAA07413@choi.cs.uiuc.edu> Changes in directory llvm/docs: LangRef.html updated: 1.104 -> 1.105 --- Log message: Correct a detail with the alloca instruction. Functions do not exit with invoke; they exit with unwind. --- Diffs of the changes: (+2 -2) LangRef.html | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) Index: llvm/docs/LangRef.html diff -u llvm/docs/LangRef.html:1.104 llvm/docs/LangRef.html:1.105 --- llvm/docs/LangRef.html:1.104 Thu May 12 11:52:32 2005 +++ llvm/docs/LangRef.html Thu May 12 11:55:34 2005 @@ -1837,7 +1837,7 @@ memory is automatically released when the function returns. The 'alloca' instruction is commonly used to represent automatic variables that must have an address available. When the function returns (either with the ret or invoke + href="#i_ret">ret
    or unwind instructions), the memory is reclaimed.

    Example:
      %ptr = alloca int                              ; yields {int*}:ptr
    @@ -3298,7 +3298,7 @@
     
       Chris Lattner
    The LLVM Compiler Infrastructure
    - Last modified: $Date: 2005/05/12 16:52:32 $ + Last modified: $Date: 2005/05/12 16:55:34 $ From lattner at cs.uiuc.edu Thu May 12 13:52:52 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Thu, 12 May 2005 13:52:52 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Message-ID: <200505121852.j4CIqqa4013578@apoc.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen/SelectionDAG: LegalizeDAG.cpp updated: 1.112 -> 1.113 --- Log message: Fix uint->fp casts on PPC, allowing UnitTests/2005-05-12-Int64ToFP to work on it. --- Diffs of the changes: (+3 -4) LegalizeDAG.cpp | 7 +++---- 1 files changed, 3 insertions(+), 4 deletions(-) Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.112 llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.113 --- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.112 Thu May 12 11:53:42 2005 +++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Thu May 12 13:52:34 2005 @@ -2148,10 +2148,9 @@ SDOperand Zero = getIntPtrConstant(0), Four = getIntPtrConstant(4); SDOperand CstOffset = DAG.getNode(ISD::SELECT, Zero.getValueType(), SignSet, Four, Zero); - // FIXME: This is almost certainly broken for big-endian systems. Should - // this just put the fudge factor in the low bits of the uint64 constant or? - static Constant *FudgeFactor = - ConstantUInt::get(Type::ULongTy, 0x5f800000ULL << 32); + uint64_t FF = 0x5f800000ULL; + if (TLI.isLittleEndian()) FF <<= 32; + static Constant *FudgeFactor = ConstantUInt::get(Type::ULongTy, FF); MachineConstantPool *CP = DAG.getMachineFunction().getConstantPool(); SDOperand CPIdx = DAG.getConstantPool(CP->getConstantPoolIndex(FudgeFactor), From lattner at cs.uiuc.edu Thu May 12 14:05:16 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Thu, 12 May 2005 14:05:16 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Message-ID: <200505121905.j4CJ5Gtn017318@apoc.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen/SelectionDAG: LegalizeDAG.cpp updated: 1.113 -> 1.114 --- Log message: Expand 64-bit ctlz/cttz nodes for 32-bit targets --- Diffs of the changes: (+28 -4) LegalizeDAG.cpp | 32 ++++++++++++++++++++++++++++---- 1 files changed, 28 insertions(+), 4 deletions(-) Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.113 llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.114 --- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.113 Thu May 12 13:52:34 2005 +++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Thu May 12 14:05:01 2005 @@ -1110,7 +1110,7 @@ break; case ISD::CTTZ: //if Tmp1 == sizeinbits(NVT) then Tmp1 = sizeinbits(Old VT) - Tmp2 = DAG.getSetCC(ISD::SETEQ, MVT::i1, Tmp1, + Tmp2 = DAG.getSetCC(ISD::SETEQ, TLI.getSetCCResultTy(), Tmp1, DAG.getConstant(getSizeInBits(NVT), NVT)); Result = DAG.getNode(ISD::SELECT, NVT, Tmp2, DAG.getConstant(getSizeInBits(OVT),NVT), Tmp1); @@ -2285,9 +2285,33 @@ Hi = DAG.getConstant(0, NVT); break; - case ISD::CTTZ: - case ISD::CTLZ: - assert(0 && "ct intrinsics cannot be expanded!"); + case ISD::CTLZ: { + // ctlz (HL) -> ctlz(H) != 32 ? ctlz(H) : (ctlz(L)+32) + SDOperand BitsC = DAG.getConstant(MVT::getSizeInBits(NVT), NVT); + SDOperand HLZ = DAG.getNode(ISD::CTLZ, NVT, Hi); + SDOperand TopNotZero = DAG.getSetCC(ISD::SETNE, TLI.getSetCCResultTy(), + HLZ, BitsC); + SDOperand LowPart = DAG.getNode(ISD::CTLZ, NVT, Lo); + LowPart = DAG.getNode(ISD::ADD, NVT, LowPart, BitsC); + + Lo = DAG.getNode(ISD::SELECT, NVT, TopNotZero, HLZ, LowPart); + Hi = DAG.getConstant(0, NVT); + break; + } + + case ISD::CTTZ: { + // cttz (HL) -> cttz(L) != 32 ? cttz(L) : (cttz(H)+32) + SDOperand BitsC = DAG.getConstant(MVT::getSizeInBits(NVT), NVT); + SDOperand LTZ = DAG.getNode(ISD::CTTZ, NVT, Lo); + SDOperand BotNotZero = DAG.getSetCC(ISD::SETNE, TLI.getSetCCResultTy(), + LTZ, BitsC); + SDOperand HiPart = DAG.getNode(ISD::CTTZ, NVT, Hi); + HiPart = DAG.getNode(ISD::ADD, NVT, HiPart, BitsC); + + Lo = DAG.getNode(ISD::SELECT, NVT, BotNotZero, LTZ, HiPart); + Hi = DAG.getConstant(0, NVT); + break; + } case ISD::LOAD: { SDOperand Ch = LegalizeOp(Node->getOperand(0)); // Legalize the chain. From lattner at cs.uiuc.edu Thu May 12 14:28:08 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Thu, 12 May 2005 14:28:08 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Message-ID: <200505121928.j4CJS8j2020995@apoc.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen/SelectionDAG: LegalizeDAG.cpp updated: 1.114 -> 1.115 --- Log message: fix expansion of ct[lt]z nodes --- Diffs of the changes: (+2 -0) LegalizeDAG.cpp | 2 ++ 1 files changed, 2 insertions(+) Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.114 llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.115 --- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.114 Thu May 12 14:05:01 2005 +++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Thu May 12 14:27:51 2005 @@ -2287,6 +2287,7 @@ case ISD::CTLZ: { // ctlz (HL) -> ctlz(H) != 32 ? ctlz(H) : (ctlz(L)+32) + ExpandOp(Node->getOperand(0), Lo, Hi); SDOperand BitsC = DAG.getConstant(MVT::getSizeInBits(NVT), NVT); SDOperand HLZ = DAG.getNode(ISD::CTLZ, NVT, Hi); SDOperand TopNotZero = DAG.getSetCC(ISD::SETNE, TLI.getSetCCResultTy(), @@ -2301,6 +2302,7 @@ case ISD::CTTZ: { // cttz (HL) -> cttz(L) != 32 ? cttz(L) : (cttz(H)+32) + ExpandOp(Node->getOperand(0), Lo, Hi); SDOperand BitsC = DAG.getConstant(MVT::getSizeInBits(NVT), NVT); SDOperand LTZ = DAG.getNode(ISD::CTTZ, NVT, Lo); SDOperand BotNotZero = DAG.getSetCC(ISD::SETNE, TLI.getSetCCResultTy(), From lattner at cs.uiuc.edu Thu May 12 14:36:36 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Thu, 12 May 2005 14:36:36 -0500 Subject: [llvm-commits] CVS: llvm-test/SingleSource/UnitTests/2005-05-11-Popcount-ffs-fls.c Message-ID: <200505121936.j4CJaaqd027050@apoc.cs.uiuc.edu> Changes in directory llvm-test/SingleSource/UnitTests: 2005-05-11-Popcount-ffs-fls.c updated: 1.1 -> 1.2 --- Log message: Add tests for the 64-bit versions as well --- Diffs of the changes: (+10 -0) 2005-05-11-Popcount-ffs-fls.c | 10 ++++++++++ 1 files changed, 10 insertions(+) Index: llvm-test/SingleSource/UnitTests/2005-05-11-Popcount-ffs-fls.c diff -u llvm-test/SingleSource/UnitTests/2005-05-11-Popcount-ffs-fls.c:1.1 llvm-test/SingleSource/UnitTests/2005-05-11-Popcount-ffs-fls.c:1.2 --- llvm-test/SingleSource/UnitTests/2005-05-11-Popcount-ffs-fls.c:1.1 Wed May 11 02:08:55 2005 +++ llvm-test/SingleSource/UnitTests/2005-05-11-Popcount-ffs-fls.c Thu May 12 14:36:19 2005 @@ -47,6 +47,7 @@ int i; int main(void) { + long long l; for(i=-10; i<139045193; i*=-3) { printf("LLVM: n: %d, clz(n): %d, popcount(n): %d, ctz(n): %d\n", @@ -57,6 +58,15 @@ i++; } + for(l=-10000; l<139045193*10000LL; l*=-3) { + printf("LLVM: n: %lld, clz(n): %d, popcount(n): %d, ctz(n): %d\n", + l, __builtin_clzll(l), __builtin_popcountll(l), __builtin_ctz(l)); + printf("REF LO BITS : n: %lld, clz(n): %d, popcount(n): %d, ctz(n): %d\n", + l, nlz10b(l), pop(l), ntz8(l)); + printf(" *** \n"); + l++; + } + return(0); } From lattner at cs.uiuc.edu Thu May 12 14:56:26 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Thu, 12 May 2005 14:56:26 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/X86/X86TargetMachine.cpp Message-ID: <200505121956.j4CJuQgt030374@apoc.cs.uiuc.edu> Changes in directory llvm/lib/Target/X86: X86TargetMachine.cpp updated: 1.77 -> 1.78 --- Log message: Enable pattern isel by default --- Diffs of the changes: (+4 -4) X86TargetMachine.cpp | 8 ++++---- 1 files changed, 4 insertions(+), 4 deletions(-) Index: llvm/lib/Target/X86/X86TargetMachine.cpp diff -u llvm/lib/Target/X86/X86TargetMachine.cpp:1.77 llvm/lib/Target/X86/X86TargetMachine.cpp:1.78 --- llvm/lib/Target/X86/X86TargetMachine.cpp:1.77 Thu Apr 21 18:38:14 2005 +++ llvm/lib/Target/X86/X86TargetMachine.cpp Thu May 12 14:56:09 2005 @@ -110,8 +110,8 @@ // Make sure that no unreachable blocks are instruction selected. PM.add(createUnreachableBlockEliminationPass()); - // Default to simple ISel - if (PatternISelTriState != 1) + // Default to pattern ISel + if (PatternISelTriState == 0) PM.add(createX86SimpleInstructionSelector(*this)); else PM.add(createX86PatternInstructionSelector(*this)); @@ -169,8 +169,8 @@ // Make sure that no unreachable blocks are instruction selected. PM.add(createUnreachableBlockEliminationPass()); - // Default to simple ISel - if (PatternISelTriState != 1) + // Default to pattern ISel + if (PatternISelTriState == 0) PM.add(createX86SimpleInstructionSelector(TM)); else PM.add(createX86PatternInstructionSelector(TM)); From lattner at cs.uiuc.edu Thu May 12 14:57:00 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Thu, 12 May 2005 14:57:00 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/Alpha/AlphaISelPattern.cpp Message-ID: <200505121957.j4CJv0su030589@apoc.cs.uiuc.edu> Changes in directory llvm/lib/Target/Alpha: AlphaISelPattern.cpp updated: 1.109 -> 1.110 --- Log message: Pass in Calling Convention to use into LowerCallTo --- Diffs of the changes: (+2 -1) AlphaISelPattern.cpp | 3 ++- 1 files changed, 2 insertions(+), 1 deletion(-) Index: llvm/lib/Target/Alpha/AlphaISelPattern.cpp diff -u llvm/lib/Target/Alpha/AlphaISelPattern.cpp:1.109 llvm/lib/Target/Alpha/AlphaISelPattern.cpp:1.110 --- llvm/lib/Target/Alpha/AlphaISelPattern.cpp:1.109 Wed May 4 14:25:37 2005 +++ llvm/lib/Target/Alpha/AlphaISelPattern.cpp Thu May 12 14:56:42 2005 @@ -118,7 +118,7 @@ /// LowerCallTo - This hook lowers an abstract call to a function into an /// actual call. virtual std::pair - LowerCallTo(SDOperand Chain, const Type *RetTy, bool isVarArg, + LowerCallTo(SDOperand Chain, const Type *RetTy, bool isVarArg, unsigned CC, SDOperand Callee, ArgListTy &Args, SelectionDAG &DAG); virtual std::pair @@ -304,6 +304,7 @@ std::pair AlphaTargetLowering::LowerCallTo(SDOperand Chain, const Type *RetTy, bool isVarArg, + unsigned CallingConv, SDOperand Callee, ArgListTy &Args, SelectionDAG &DAG) { int NumBytes = 0; From lattner at cs.uiuc.edu Thu May 12 14:57:03 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Thu, 12 May 2005 14:57:03 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/PowerPC/PPC32ISelPattern.cpp PPC64ISelPattern.cpp Message-ID: <200505121957.j4CJv3Rd030604@apoc.cs.uiuc.edu> Changes in directory llvm/lib/Target/PowerPC: PPC32ISelPattern.cpp updated: 1.85 -> 1.86 PPC64ISelPattern.cpp updated: 1.15 -> 1.16 --- Log message: Pass in Calling Convention to use into LowerCallTo --- Diffs of the changes: (+4 -2) PPC32ISelPattern.cpp | 3 ++- PPC64ISelPattern.cpp | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) Index: llvm/lib/Target/PowerPC/PPC32ISelPattern.cpp diff -u llvm/lib/Target/PowerPC/PPC32ISelPattern.cpp:1.85 llvm/lib/Target/PowerPC/PPC32ISelPattern.cpp:1.86 --- llvm/lib/Target/PowerPC/PPC32ISelPattern.cpp:1.85 Wed May 11 21:06:00 2005 +++ llvm/lib/Target/PowerPC/PPC32ISelPattern.cpp Thu May 12 14:56:45 2005 @@ -91,7 +91,7 @@ /// LowerCallTo - This hook lowers an abstract call to a function into an /// actual call. virtual std::pair - LowerCallTo(SDOperand Chain, const Type *RetTy, bool isVarArg, + LowerCallTo(SDOperand Chain, const Type *RetTy, bool isVarArg, unsigned CC, SDOperand Callee, ArgListTy &Args, SelectionDAG &DAG); virtual std::pair @@ -279,6 +279,7 @@ std::pair PPC32TargetLowering::LowerCallTo(SDOperand Chain, const Type *RetTy, bool isVarArg, + unsigned CallingConv, SDOperand Callee, ArgListTy &Args, SelectionDAG &DAG) { // args_to_use will accumulate outgoing args for the ISD::CALL case in Index: llvm/lib/Target/PowerPC/PPC64ISelPattern.cpp diff -u llvm/lib/Target/PowerPC/PPC64ISelPattern.cpp:1.15 llvm/lib/Target/PowerPC/PPC64ISelPattern.cpp:1.16 --- llvm/lib/Target/PowerPC/PPC64ISelPattern.cpp:1.15 Wed May 11 21:06:00 2005 +++ llvm/lib/Target/PowerPC/PPC64ISelPattern.cpp Thu May 12 14:56:45 2005 @@ -91,7 +91,7 @@ /// LowerCallTo - This hook lowers an abstract call to a function into an /// actual call. virtual std::pair - LowerCallTo(SDOperand Chain, const Type *RetTy, bool isVarArg, + LowerCallTo(SDOperand Chain, const Type *RetTy, bool isVarArg, unsigned CC, SDOperand Callee, ArgListTy &Args, SelectionDAG &DAG); virtual std::pair @@ -235,6 +235,7 @@ std::pair PPC64TargetLowering::LowerCallTo(SDOperand Chain, const Type *RetTy, bool isVarArg, + unsigned CallingConv, SDOperand Callee, ArgListTy &Args, SelectionDAG &DAG) { // args_to_use will accumulate outgoing args for the ISD::CALL case in From lattner at cs.uiuc.edu Thu May 12 14:57:04 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Thu, 12 May 2005 14:57:04 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/IA64/IA64ISelPattern.cpp Message-ID: <200505121957.j4CJv4m1030608@apoc.cs.uiuc.edu> Changes in directory llvm/lib/Target/IA64: IA64ISelPattern.cpp updated: 1.38 -> 1.39 --- Log message: Pass in Calling Convention to use into LowerCallTo --- Diffs of the changes: (+2 -1) IA64ISelPattern.cpp | 3 ++- 1 files changed, 2 insertions(+), 1 deletion(-) Index: llvm/lib/Target/IA64/IA64ISelPattern.cpp diff -u llvm/lib/Target/IA64/IA64ISelPattern.cpp:1.38 llvm/lib/Target/IA64/IA64ISelPattern.cpp:1.39 --- llvm/lib/Target/IA64/IA64ISelPattern.cpp:1.38 Wed May 11 00:16:09 2005 +++ llvm/lib/Target/IA64/IA64ISelPattern.cpp Thu May 12 14:56:45 2005 @@ -109,7 +109,7 @@ /// LowerCallTo - This hook lowers an abstract call to a function into an /// actual call. virtual std::pair - LowerCallTo(SDOperand Chain, const Type *RetTy, bool isVarArg, + LowerCallTo(SDOperand Chain, const Type *RetTy, bool isVarArg, unsigned CC, SDOperand Callee, ArgListTy &Args, SelectionDAG &DAG); virtual std::pair @@ -310,6 +310,7 @@ std::pair IA64TargetLowering::LowerCallTo(SDOperand Chain, const Type *RetTy, bool isVarArg, + unsigned CallingConv, SDOperand Callee, ArgListTy &Args, SelectionDAG &DAG) { From lattner at cs.uiuc.edu Thu May 12 14:57:22 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Thu, 12 May 2005 14:57:22 -0500 Subject: [llvm-commits] CVS: llvm/include/llvm/Target/TargetLowering.h Message-ID: <200505121957.j4CJvMXJ031043@apoc.cs.uiuc.edu> Changes in directory llvm/include/llvm/Target: TargetLowering.h updated: 1.11 -> 1.12 --- Log message: LowerCallTo now takes the cc to use --- Diffs of the changes: (+2 -1) TargetLowering.h | 3 ++- 1 files changed, 2 insertions(+), 1 deletion(-) Index: llvm/include/llvm/Target/TargetLowering.h diff -u llvm/include/llvm/Target/TargetLowering.h:1.11 llvm/include/llvm/Target/TargetLowering.h:1.12 --- llvm/include/llvm/Target/TargetLowering.h:1.11 Wed May 11 21:02:21 2005 +++ llvm/include/llvm/Target/TargetLowering.h Thu May 12 14:57:08 2005 @@ -262,7 +262,8 @@ typedef std::vector > ArgListTy; virtual std::pair LowerCallTo(SDOperand Chain, const Type *RetTy, bool isVarArg, - SDOperand Callee, ArgListTy &Args, SelectionDAG &DAG) = 0; + unsigned CallingConv, SDOperand Callee, ArgListTy &Args, + SelectionDAG &DAG) = 0; /// LowerVAStart - This lowers the llvm.va_start intrinsic. If not /// implemented, this method prints a message and aborts. From lattner at cs.uiuc.edu Thu May 12 14:57:12 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Thu, 12 May 2005 14:57:12 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp SelectionDAGISel.cpp Message-ID: <200505121957.j4CJvCG5030667@apoc.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen/SelectionDAG: LegalizeDAG.cpp updated: 1.115 -> 1.116 SelectionDAGISel.cpp updated: 1.52 -> 1.53 --- Log message: Pass calling convention to use into lower call to --- Diffs of the changes: (+8 -7) LegalizeDAG.cpp | 8 ++++---- SelectionDAGISel.cpp | 7 ++++--- 2 files changed, 8 insertions(+), 7 deletions(-) Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.115 llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.116 --- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.115 Thu May 12 14:27:51 2005 +++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Thu May 12 14:56:57 2005 @@ -928,7 +928,7 @@ } std::pair CallResult = - TLI.LowerCallTo(Tmp1, Type::VoidTy, false, + TLI.LowerCallTo(Tmp1, Type::VoidTy, false, 0, DAG.getExternalSymbol(FnName, IntPtr), Args, DAG); Result = LegalizeOp(CallResult.second); break; @@ -1253,7 +1253,7 @@ Args.push_back(std::make_pair(Tmp1, T)); // FIXME: should use ExpandLibCall! std::pair CallResult = - TLI.LowerCallTo(DAG.getEntryNode(), T, false, + TLI.LowerCallTo(DAG.getEntryNode(), T, false, 0, DAG.getExternalSymbol(FnName, VT), Args, DAG); Result = LegalizeOp(CallResult.first); break; @@ -2102,7 +2102,7 @@ // Splice the libcall in wherever FindInputOutputChains tells us to. const Type *RetTy = MVT::getTypeForValueType(Node->getValueType(0)); std::pair CallInfo = - TLI.LowerCallTo(InChain, RetTy, false, Callee, Args, DAG); + TLI.LowerCallTo(InChain, RetTy, false, 0, Callee, Args, DAG); SpliceCallInto(CallInfo.second, OutChain); NeedsAnotherIteration = true; @@ -2198,7 +2198,7 @@ const Type *RetTy = MVT::getTypeForValueType(DestTy); std::pair CallResult = - TLI.LowerCallTo(InChain, RetTy, false, Callee, Args, DAG); + TLI.LowerCallTo(InChain, RetTy, false, 0, Callee, Args, DAG); SpliceCallInto(CallResult.second, OutChain); return CallResult.first; Index: llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp diff -u llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.52 llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.53 --- llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.52 Wed May 11 13:57:06 2005 +++ llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp Thu May 12 14:56:57 2005 @@ -773,7 +773,8 @@ const FunctionType *FTy = cast(PT->getElementType()); std::pair Result = - TLI.LowerCallTo(getRoot(), I.getType(), FTy->isVarArg(), Callee, Args, DAG); + TLI.LowerCallTo(getRoot(), I.getType(), FTy->isVarArg(), I.getCallingConv(), + Callee, Args, DAG); if (I.getType() != Type::VoidTy) setValue(&I, Result.first); DAG.setRoot(Result.second); @@ -798,7 +799,7 @@ Args.push_back(std::make_pair(Src, TLI.getTargetData().getIntPtrType())); std::pair Result = - TLI.LowerCallTo(getRoot(), I.getType(), false, + TLI.LowerCallTo(getRoot(), I.getType(), false, 0, DAG.getExternalSymbol("malloc", IntPtr), Args, DAG); setValue(&I, Result.first); // Pointers always fit in registers @@ -811,7 +812,7 @@ TLI.getTargetData().getIntPtrType())); MVT::ValueType IntPtr = TLI.getPointerTy(); std::pair Result = - TLI.LowerCallTo(getRoot(), Type::VoidTy, false, + TLI.LowerCallTo(getRoot(), Type::VoidTy, false, 0, DAG.getExternalSymbol("free", IntPtr), Args, DAG); DAG.setRoot(Result.second); } From lattner at cs.uiuc.edu Thu May 12 14:57:04 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Thu, 12 May 2005 14:57:04 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/X86/X86ISelPattern.cpp Message-ID: <200505121957.j4CJv4F8030611@apoc.cs.uiuc.edu> Changes in directory llvm/lib/Target/X86: X86ISelPattern.cpp updated: 1.121 -> 1.122 --- Log message: Pass in Calling Convention to use into LowerCallTo --- Diffs of the changes: (+3 -3) X86ISelPattern.cpp | 6 +++--- 1 files changed, 3 insertions(+), 3 deletions(-) Index: llvm/lib/Target/X86/X86ISelPattern.cpp diff -u llvm/lib/Target/X86/X86ISelPattern.cpp:1.121 llvm/lib/Target/X86/X86ISelPattern.cpp:1.122 --- llvm/lib/Target/X86/X86ISelPattern.cpp:1.121 Wed May 11 00:00:34 2005 +++ llvm/lib/Target/X86/X86ISelPattern.cpp Thu May 12 14:56:45 2005 @@ -110,7 +110,7 @@ /// LowerCallTo - This hook lowers an abstract call to a function into an /// actual call. virtual std::pair - LowerCallTo(SDOperand Chain, const Type *RetTy, bool isVarArg, + LowerCallTo(SDOperand Chain, const Type *RetTy, bool isVarArg, unsigned CC, SDOperand Callee, ArgListTy &Args, SelectionDAG &DAG); virtual std::pair @@ -208,8 +208,8 @@ } std::pair -X86TargetLowering::LowerCallTo(SDOperand Chain, - const Type *RetTy, bool isVarArg, +X86TargetLowering::LowerCallTo(SDOperand Chain, const Type *RetTy, + bool isVarArg, unsigned CallingConv, SDOperand Callee, ArgListTy &Args, SelectionDAG &DAG) { // Count how many bytes are to be pushed on the stack. unsigned NumBytes = 0; From criswell at cs.uiuc.edu Thu May 12 16:06:23 2005 From: criswell at cs.uiuc.edu (John Criswell) Date: Thu, 12 May 2005 16:06:23 -0500 Subject: [llvm-commits] CVS: llvm/test/Regression/CodeGen/PowerPC/fma.ll Message-ID: <200505122106.QAA20132@choi.cs.uiuc.edu> Changes in directory llvm/test/Regression/CodeGen/PowerPC: fma.ll updated: 1.3 -> 1.4 --- Log message: Fix this test on Solaris. Solaris grep is more traditional and (AFAIK) does not support regexs. Also, single quotes should disable all shell interpretation, so no backslashes should be needed (and, in fact, keep Solaris from working). --- Diffs of the changes: (+1 -1) fma.ll | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-) Index: llvm/test/Regression/CodeGen/PowerPC/fma.ll diff -u llvm/test/Regression/CodeGen/PowerPC/fma.ll:1.3 llvm/test/Regression/CodeGen/PowerPC/fma.ll:1.4 --- llvm/test/Regression/CodeGen/PowerPC/fma.ll:1.3 Fri Apr 15 23:25:48 2005 +++ llvm/test/Regression/CodeGen/PowerPC/fma.ll Thu May 12 16:06:05 2005 @@ -1,4 +1,4 @@ -; RUN: llvm-as < %s | llc -march=ppc32 | grep 'fn\?madd\|fn\?msub' | wc -l | grep 7 +; RUN: llvm-as < %s | llc -march=ppc32 | egrep 'fn?madd|fn?msub' | wc -l | grep 7 double %test_FMADD1(double %A, double %B, double %C) { %D = mul double %A, %B From criswell at cs.uiuc.edu Thu May 12 16:25:49 2005 From: criswell at cs.uiuc.edu (John Criswell) Date: Thu, 12 May 2005 16:25:49 -0500 Subject: [llvm-commits] CVS: llvm/docs/CFEBuildInstrs.html Message-ID: <200505122125.QAA20467@choi.cs.uiuc.edu> Changes in directory llvm/docs: CFEBuildInstrs.html updated: 1.47 -> 1.48 --- Log message: Shameless update of copyright years. --- Diffs of the changes: (+2 -2) CFEBuildInstrs.html | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) Index: llvm/docs/CFEBuildInstrs.html diff -u llvm/docs/CFEBuildInstrs.html:1.47 llvm/docs/CFEBuildInstrs.html:1.48 --- llvm/docs/CFEBuildInstrs.html:1.47 Tue Mar 1 11:19:21 2005 +++ llvm/docs/CFEBuildInstrs.html Thu May 12 16:25:32 2005 @@ -292,7 +292,7 @@
     
    -Copyright (c) 2003, 2004 University of Illinois at Urbana-Champaign.
    +Copyright (c) 2003, 2004, 2005 University of Illinois at Urbana-Champaign.
     All rights reserved.
     
     Developed by:
    @@ -346,7 +346,7 @@
     
       Brian Gaeke
    LLVM Compiler Infrastructure
    - Last modified: $Date: 2005/03/01 17:19:21 $ + Last modified: $Date: 2005/05/12 21:25:32 $ From brukman at cs.uiuc.edu Thu May 12 16:39:12 2005 From: brukman at cs.uiuc.edu (Misha Brukman) Date: Thu, 12 May 2005 16:39:12 -0500 Subject: [llvm-commits] CVS: llvm/LICENSE.TXT Message-ID: <200505122139.QAA29925@zion.cs.uiuc.edu> Changes in directory llvm: LICENSE.TXT updated: 1.24 -> 1.25 --- Log message: Remove extraneous colons after program names for consistency --- Diffs of the changes: (+4 -4) LICENSE.TXT | 8 ++++---- 1 files changed, 4 insertions(+), 4 deletions(-) Index: llvm/LICENSE.TXT diff -u llvm/LICENSE.TXT:1.24 llvm/LICENSE.TXT:1.25 --- llvm/LICENSE.TXT:1.24 Sat Jan 8 13:10:44 2005 +++ llvm/LICENSE.TXT Thu May 12 16:39:01 2005 @@ -64,9 +64,9 @@ System Library llvm/lib/System Compiler Driver llvm/tools/llvmc PowerPC Backend llvm/lib/Target/PowerPC -bzip2: llvm/lib/Support/bzip2/LICENSE -Autoconf: llvm/autoconf +bzip2 llvm/lib/Support/bzip2/LICENSE +Autoconf llvm/autoconf llvm/projects/ModuleMaker/autoconf llvm/projects/sample/autoconf -Burg: llvm/utils/Burg -GNU Libc: llvm/runtime/GCCLibraries/libc +Burg llvm/utils/Burg +GNU Libc llvm/runtime/GCCLibraries/libc From brukman at cs.uiuc.edu Thu May 12 16:41:59 2005 From: brukman at cs.uiuc.edu (Misha Brukman) Date: Thu, 12 May 2005 16:41:59 -0500 Subject: [llvm-commits] CVS: llvm/utils/vim/vimrc Message-ID: <200505122141.QAA29991@zion.cs.uiuc.edu> Changes in directory llvm/utils/vim: vimrc updated: 1.1 -> 1.2 --- Log message: * Fix wording of the warning * Add autoindent, smartindent, and smarttab options to the file --- Diffs of the changes: (+8 -2) vimrc | 10 ++++++++-- 1 files changed, 8 insertions(+), 2 deletions(-) Index: llvm/utils/vim/vimrc diff -u llvm/utils/vim/vimrc:1.1 llvm/utils/vim/vimrc:1.2 --- llvm/utils/vim/vimrc:1.1 Sun Apr 24 12:05:04 2005 +++ llvm/utils/vim/vimrc Thu May 12 16:41:48 2005 @@ -2,8 +2,7 @@ " Maintainer: LLVM Team, http://llvm.cs.uiuc.edu " Updated: 2005-04-24 " WARNING: Read before you source in all these commands and macros! Some -" of them may change VIM behavior that you depend on and the -" settings here may depend on other settings that you may have. +" of them may change VIM behavior that you depend on. " Wrap text at 80 cols set textwidth=80 @@ -13,6 +12,13 @@ set shiftwidth=2 set expandtab +" Optional +" C/C++ programming helpers +set autoindent +set smartindent +" Add and delete spaces in increments of `shiftwidth' for tabs +set smarttab + " Enable filetype detection filetype on From brukman at cs.uiuc.edu Thu May 12 16:49:22 2005 From: brukman at cs.uiuc.edu (Misha Brukman) Date: Thu, 12 May 2005 16:49:22 -0500 Subject: [llvm-commits] CVS: llvm/autoconf/configure.ac Message-ID: <200505122149.QAA30130@zion.cs.uiuc.edu> Changes in directory llvm/autoconf: configure.ac updated: 1.175 -> 1.176 --- Log message: Remove extraneous `U ' in copyright line --- Diffs of the changes: (+1 -1) configure.ac | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-) Index: llvm/autoconf/configure.ac diff -u llvm/autoconf/configure.ac:1.175 llvm/autoconf/configure.ac:1.176 --- llvm/autoconf/configure.ac:1.175 Fri Apr 22 13:00:14 2005 +++ llvm/autoconf/configure.ac Thu May 12 16:49:11 2005 @@ -35,7 +35,7 @@ dnl Provide a copyright substitution and ensure the copyright notice is included dnl in the output of --version option of the generated configure script. -AC_SUBST(LLVM_COPYRIGHT,["Copyright (c) 2003-2005 U University of Illinois at Urbana-Champaign."]) +AC_SUBST(LLVM_COPYRIGHT,["Copyright (c) 2003-2005 University of Illinois at Urbana-Champaign."]) AC_COPYRIGHT($LLVM_COPYRIGHT) dnl Indicate that we require autoconf 2.59 or later. Ths is needed because we From brukman at cs.uiuc.edu Thu May 12 16:56:14 2005 From: brukman at cs.uiuc.edu (Misha Brukman) Date: Thu, 12 May 2005 16:56:14 -0500 Subject: [llvm-commits] CVS: llvm/autoconf/configure.ac Message-ID: <200505122156.QAA30318@zion.cs.uiuc.edu> Changes in directory llvm/autoconf: configure.ac updated: 1.176 -> 1.177 --- Log message: llvm-fefw doesn't exist (yet) --- Diffs of the changes: (+0 -1) configure.ac | 1 - 1 files changed, 1 deletion(-) Index: llvm/autoconf/configure.ac diff -u llvm/autoconf/configure.ac:1.176 llvm/autoconf/configure.ac:1.177 --- llvm/autoconf/configure.ac:1.176 Thu May 12 16:49:11 2005 +++ llvm/autoconf/configure.ac Thu May 12 16:56:03 2005 @@ -74,7 +74,6 @@ "llvm-gcc") AC_CONFIG_SUBDIRS([projects/llvm-gcc]) ;; "llvm-java") AC_CONFIG_SUBDIRS([projects/llvm-java]) ;; "llvm-tv") AC_CONFIG_SUBDIRS([projects/llvm-tv]) ;; - "llvm-fefw") AC_CONFIG_SUBDIRS([projects/llvm-fefw]) ;; "llvm-poolalloc") AC_CONFIG_SUBDIRS([projects/llvm-poolalloc]) ;; *) AC_MSG_WARN([Unknown project (${i}) won't be configured automatically]) From brukman at cs.uiuc.edu Thu May 12 16:57:31 2005 From: brukman at cs.uiuc.edu (Misha Brukman) Date: Thu, 12 May 2005 16:57:31 -0500 Subject: [llvm-commits] CVS: llvm-test/autoconf/configure.ac Message-ID: <200505122157.QAA30612@zion.cs.uiuc.edu> Changes in directory llvm-test/autoconf: configure.ac updated: 1.18 -> 1.19 --- Log message: PerfectClub benchmarks don't work, at least not with f2c --- Diffs of the changes: (+0 -3) configure.ac | 3 --- 1 files changed, 3 deletions(-) Index: llvm-test/autoconf/configure.ac diff -u llvm-test/autoconf/configure.ac:1.18 llvm-test/autoconf/configure.ac:1.19 --- llvm-test/autoconf/configure.ac:1.18 Sun Apr 24 19:39:33 2005 +++ llvm-test/autoconf/configure.ac Thu May 12 16:57:20 2005 @@ -31,8 +31,6 @@ AC_CONFIG_MAKEFILE(External/Makefile) AC_CONFIG_MAKEFILE(External/Makefile.external) AC_CONFIG_MAKEFILE(External/Povray/Makefile) -AC_CONFIG_MAKEFILE(External/PerfectClub/Makefile) -AC_CONFIG_MAKEFILE(External/PerfectClub/Makefile.perfect) AC_CONFIG_MAKEFILE(External/SPEC/Makefile) AC_CONFIG_MAKEFILE(External/SPEC/Makefile.spec) AC_CONFIG_MAKEFILE(External/SPEC/Makefile.spec2000) @@ -108,7 +106,6 @@ EXTERNAL_BENCHMARK(sweep3d,/home/vadve/criswell/umt2k) EXTERNAL_BENCHMARK(fpgrowth,/home/vadve/shared/benchmarks/fpgrowth) EXTERNAL_BENCHMARK(boxedsim,/home/vadve/shared/benchmarks/boxed-sim) -EXTERNAL_BENCHMARK(perfect,/home/vadve/shared/benchmarks/perfectclub) dnl Check for f2c CHECK_F2C_ALL() From brukman at cs.uiuc.edu Thu May 12 17:00:25 2005 From: brukman at cs.uiuc.edu (Misha Brukman) Date: Thu, 12 May 2005 17:00:25 -0500 Subject: [llvm-commits] CVS: llvm-test/External/PerfectClub/Makefile Makefile.perfect Sandbox.sh Message-ID: <200505122200.RAA30745@zion.cs.uiuc.edu> Changes in directory llvm-test/External/PerfectClub: Makefile (r1.3) removed Makefile.perfect (r1.1) removed Sandbox.sh (r1.1) removed --- Log message: Perfect Club doesn't work, at least not with f2c --- Diffs of the changes: (+0 -0) 0 files changed From brukman at cs.uiuc.edu Thu May 12 17:00:25 2005 From: brukman at cs.uiuc.edu (Misha Brukman) Date: Thu, 12 May 2005 17:00:25 -0500 Subject: [llvm-commits] CVS: llvm-test/External/PerfectClub/flo52/Makefile Message-ID: <200505122200.RAA30765@zion.cs.uiuc.edu> Changes in directory llvm-test/External/PerfectClub/flo52: Makefile (r1.1) removed --- Log message: Perfect Club doesn't work, at least not with f2c --- Diffs of the changes: (+0 -0) 0 files changed From brukman at cs.uiuc.edu Thu May 12 17:00:25 2005 From: brukman at cs.uiuc.edu (Misha Brukman) Date: Thu, 12 May 2005 17:00:25 -0500 Subject: [llvm-commits] CVS: llvm-test/External/PerfectClub/qcd/Makefile Message-ID: <200505122200.RAA30785@zion.cs.uiuc.edu> Changes in directory llvm-test/External/PerfectClub/qcd: Makefile (r1.1) removed --- Log message: Perfect Club doesn't work, at least not with f2c --- Diffs of the changes: (+0 -0) 0 files changed From brukman at cs.uiuc.edu Thu May 12 17:00:25 2005 From: brukman at cs.uiuc.edu (Misha Brukman) Date: Thu, 12 May 2005 17:00:25 -0500 Subject: [llvm-commits] CVS: llvm-test/External/PerfectClub/adm/Makefile Message-ID: <200505122200.RAA30750@zion.cs.uiuc.edu> Changes in directory llvm-test/External/PerfectClub/adm: Makefile (r1.4) removed --- Log message: Perfect Club doesn't work, at least not with f2c --- Diffs of the changes: (+0 -0) 0 files changed From brukman at cs.uiuc.edu Thu May 12 17:00:25 2005 From: brukman at cs.uiuc.edu (Misha Brukman) Date: Thu, 12 May 2005 17:00:25 -0500 Subject: [llvm-commits] CVS: llvm-test/External/PerfectClub/trfd/Makefile Message-ID: <200505122200.RAA30805@zion.cs.uiuc.edu> Changes in directory llvm-test/External/PerfectClub/trfd: Makefile (r1.1) removed --- Log message: Perfect Club doesn't work, at least not with f2c --- Diffs of the changes: (+0 -0) 0 files changed From brukman at cs.uiuc.edu Thu May 12 17:00:25 2005 From: brukman at cs.uiuc.edu (Misha Brukman) Date: Thu, 12 May 2005 17:00:25 -0500 Subject: [llvm-commits] CVS: llvm-test/External/PerfectClub/dyfesm/Makefile Message-ID: <200505122200.RAA30760@zion.cs.uiuc.edu> Changes in directory llvm-test/External/PerfectClub/dyfesm: Makefile (r1.1) removed --- Log message: Perfect Club doesn't work, at least not with f2c --- Diffs of the changes: (+0 -0) 0 files changed From brukman at cs.uiuc.edu Thu May 12 17:00:25 2005 From: brukman at cs.uiuc.edu (Misha Brukman) Date: Thu, 12 May 2005 17:00:25 -0500 Subject: [llvm-commits] CVS: llvm-test/External/PerfectClub/ocean/Makefile Message-ID: <200505122200.RAA30780@zion.cs.uiuc.edu> Changes in directory llvm-test/External/PerfectClub/ocean: Makefile (r1.1) removed --- Log message: Perfect Club doesn't work, at least not with f2c --- Diffs of the changes: (+0 -0) 0 files changed From brukman at cs.uiuc.edu Thu May 12 17:00:25 2005 From: brukman at cs.uiuc.edu (Misha Brukman) Date: Thu, 12 May 2005 17:00:25 -0500 Subject: [llvm-commits] CVS: llvm-test/External/PerfectClub/arc2d/Makefile Message-ID: <200505122200.RAA30755@zion.cs.uiuc.edu> Changes in directory llvm-test/External/PerfectClub/arc2d: Makefile (r1.2) removed --- Log message: Perfect Club doesn't work, at least not with f2c --- Diffs of the changes: (+0 -0) 0 files changed From brukman at cs.uiuc.edu Thu May 12 17:00:25 2005 From: brukman at cs.uiuc.edu (Misha Brukman) Date: Thu, 12 May 2005 17:00:25 -0500 Subject: [llvm-commits] CVS: llvm-test/External/PerfectClub/spec77/Makefile Message-ID: <200505122200.RAA30790@zion.cs.uiuc.edu> Changes in directory llvm-test/External/PerfectClub/spec77: Makefile (r1.1) removed --- Log message: Perfect Club doesn't work, at least not with f2c --- Diffs of the changes: (+0 -0) 0 files changed From brukman at cs.uiuc.edu Thu May 12 17:00:25 2005 From: brukman at cs.uiuc.edu (Misha Brukman) Date: Thu, 12 May 2005 17:00:25 -0500 Subject: [llvm-commits] CVS: llvm-test/External/PerfectClub/mdg/Makefile Message-ID: <200505122200.RAA30770@zion.cs.uiuc.edu> Changes in directory llvm-test/External/PerfectClub/mdg: Makefile (r1.1) removed --- Log message: Perfect Club doesn't work, at least not with f2c --- Diffs of the changes: (+0 -0) 0 files changed From brukman at cs.uiuc.edu Thu May 12 17:00:25 2005 From: brukman at cs.uiuc.edu (Misha Brukman) Date: Thu, 12 May 2005 17:00:25 -0500 Subject: [llvm-commits] CVS: llvm-test/External/PerfectClub/mg3d/Makefile Message-ID: <200505122200.RAA30775@zion.cs.uiuc.edu> Changes in directory llvm-test/External/PerfectClub/mg3d: Makefile (r1.1) removed --- Log message: Perfect Club doesn't work, at least not with f2c --- Diffs of the changes: (+0 -0) 0 files changed From brukman at cs.uiuc.edu Thu May 12 17:00:25 2005 From: brukman at cs.uiuc.edu (Misha Brukman) Date: Thu, 12 May 2005 17:00:25 -0500 Subject: [llvm-commits] CVS: llvm-test/External/PerfectClub/track/Makefile Message-ID: <200505122200.RAA30800@zion.cs.uiuc.edu> Changes in directory llvm-test/External/PerfectClub/track: Makefile (r1.1) removed --- Log message: Perfect Club doesn't work, at least not with f2c --- Diffs of the changes: (+0 -0) 0 files changed From brukman at cs.uiuc.edu Thu May 12 17:00:25 2005 From: brukman at cs.uiuc.edu (Misha Brukman) Date: Thu, 12 May 2005 17:00:25 -0500 Subject: [llvm-commits] CVS: llvm-test/External/PerfectClub/spice/Makefile Message-ID: <200505122200.RAA30795@zion.cs.uiuc.edu> Changes in directory llvm-test/External/PerfectClub/spice: Makefile (r1.1) removed --- Log message: Perfect Club doesn't work, at least not with f2c --- Diffs of the changes: (+0 -0) 0 files changed From brukman at cs.uiuc.edu Thu May 12 17:15:55 2005 From: brukman at cs.uiuc.edu (Misha Brukman) Date: Thu, 12 May 2005 17:15:55 -0500 Subject: [llvm-commits] CVS: llvm/configure Message-ID: <200505122215.RAA30930@zion.cs.uiuc.edu> Changes in directory llvm: configure updated: 1.181 -> 1.182 --- Log message: * Remove reference to llvm-fefw * Fix copyright line --- Diffs of the changes: (+30 -35) configure | 65 ++++++++++++++++++++++++++++---------------------------------- 1 files changed, 30 insertions(+), 35 deletions(-) Index: llvm/configure diff -u llvm/configure:1.181 llvm/configure:1.182 --- llvm/configure:1.181 Fri Apr 22 13:00:34 2005 +++ llvm/configure Thu May 12 17:15:34 2005 @@ -437,7 +437,6 @@ ac_subdirs_all="$ac_subdirs_all projects/llvm-gcc" ac_subdirs_all="$ac_subdirs_all projects/llvm-java" ac_subdirs_all="$ac_subdirs_all projects/llvm-tv" -ac_subdirs_all="$ac_subdirs_all projects/llvm-fefw" ac_subdirs_all="$ac_subdirs_all projects/llvm-poolalloc" # Factoring default headers for most tests. ac_includes_default="\ @@ -1526,7 +1525,7 @@ -LLVM_COPYRIGHT="Copyright (c) 2003-2005 U University of Illinois at Urbana-Champaign." +LLVM_COPYRIGHT="Copyright (c) 2003-2005 University of Illinois at Urbana-Champaign." @@ -1601,10 +1600,6 @@ subdirs="$subdirs projects/llvm-tv" ;; - "llvm-fefw") - -subdirs="$subdirs projects/llvm-fefw" - ;; "llvm-poolalloc") subdirs="$subdirs projects/llvm-poolalloc" @@ -8237,7 +8232,7 @@ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < conftest.$ac_ext + echo '#line 10226 "configure"' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? @@ -10713,7 +10708,7 @@ # Provide some information about the compiler. -echo "$as_me:10716:" \ +echo "$as_me:10711:" \ "checking for Fortran 77 compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 @@ -11770,11 +11765,11 @@ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:11773: $lt_compile\"" >&5) + (eval echo "\"\$as_me:11768: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:11777: \$? = $ac_status" >&5 + echo "$as_me:11772: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings @@ -12013,11 +12008,11 @@ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:12016: $lt_compile\"" >&5) + (eval echo "\"\$as_me:12011: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:12020: \$? = $ac_status" >&5 + echo "$as_me:12015: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings @@ -12073,11 +12068,11 @@ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:12076: $lt_compile\"" >&5) + (eval echo "\"\$as_me:12071: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:12080: \$? = $ac_status" >&5 + echo "$as_me:12075: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -14258,7 +14253,7 @@ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < conftest.$ac_ext <&5) + (eval echo "\"\$as_me:16547: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:16556: \$? = $ac_status" >&5 + echo "$as_me:16551: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings @@ -16609,11 +16604,11 @@ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:16612: $lt_compile\"" >&5) + (eval echo "\"\$as_me:16607: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:16616: \$? = $ac_status" >&5 + echo "$as_me:16611: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -17970,7 +17965,7 @@ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < conftest.$ac_ext <&5) + (eval echo "\"\$as_me:18903: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:18912: \$? = $ac_status" >&5 + echo "$as_me:18907: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings @@ -18965,11 +18960,11 @@ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:18968: $lt_compile\"" >&5) + (eval echo "\"\$as_me:18963: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:18972: \$? = $ac_status" >&5 + echo "$as_me:18967: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -21004,11 +20999,11 @@ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:21007: $lt_compile\"" >&5) + (eval echo "\"\$as_me:21002: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:21011: \$? = $ac_status" >&5 + echo "$as_me:21006: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings @@ -21247,11 +21242,11 @@ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:21250: $lt_compile\"" >&5) + (eval echo "\"\$as_me:21245: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:21254: \$? = $ac_status" >&5 + echo "$as_me:21249: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings @@ -21307,11 +21302,11 @@ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:21310: $lt_compile\"" >&5) + (eval echo "\"\$as_me:21305: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:21314: \$? = $ac_status" >&5 + echo "$as_me:21309: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -23492,7 +23487,7 @@ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < conftest.$ac_ext < Changes in directory llvm-test: configure updated: 1.17 -> 1.18 --- Log message: Perfect Club is gone --- Diffs of the changes: (+29 -91) configure | 120 ++++++++++++++------------------------------------------------ 1 files changed, 29 insertions(+), 91 deletions(-) Index: llvm-test/configure diff -u llvm-test/configure:1.17 llvm-test/configure:1.18 --- llvm-test/configure:1.17 Sun Apr 24 19:56:48 2005 +++ llvm-test/configure Thu May 12 17:16:09 2005 @@ -465,7 +465,7 @@ # include #endif" -ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS LLVM_SRC LLVM_OBJ DISABLE_LLC_DIFFS CXX CXXFLAGS LDFLAGS CPPFLAGS ac_ct_CXX EXEEXT OBJEXT CC CFLAGS ac_ct_CC CPP ifGNUmake LEX LEXLIB LEX_OUTPUT_ROOT FLEX YACC BISON build build_cpu build_vendor build_os host host_cpu host_vendor host_os EGREP LN_S ECHO AR ac_ct_AR RANLIB ac_ct_RANLIB STRIP ac_ct_STRIP CXXCPP F77 FFLAGS ac_ct_F77 LIBTOOL SPEC95_ROOT USE_SPEC95 SPEC2000_ROOT USE_SPEC2000 POVRAY_ROOT USE_POVRAY NAMD_ROOT USE_NAMD SWEEP3D_ROOT USE_SWEEP3D FPGROWTH_ROOT USE_FPGROWTH BOXEDSIM_ROOT USE_BOXEDSIM PERFECT_ROOT USE_PERFECT F2C F2C_INC F2C_LIB USE_F2C LIBOBJS LTLIBOBJS' +ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS LLVM_SRC LLVM_OBJ DISABLE_LLC_DIFFS CXX CXXFLAGS LDFLAGS CPPFLAGS ac_ct_CXX EXEEXT OBJEXT CC CFLAGS ac_ct_CC CPP ifGNUmake LEX LEXLIB LEX_OUTPUT_ROOT FLEX YACC BISON build build_cpu build_vendor build_os host host_cpu host_vendor host_os EGREP LN_S ECHO AR ac_ct_AR RANLIB ac_ct_RANLIB STRIP ac_ct_STRIP CXXCPP F77 FFLAGS ac_ct_F77 LIBTOOL SPEC95_ROOT USE_SPEC95 SPEC2000_ROOT USE_SPEC2000 POVRAY_ROOT USE_POVRAY NAMD_ROOT USE_NAMD SWEEP3D_ROOT USE_SWEEP3D FPGROWTH_ROOT USE_FPGROWTH BOXEDSIM_ROOT USE_BOXEDSIM F2C F2C_INC F2C_LIB USE_F2C LIBOBJS LTLIBOBJS' ac_subst_files='' # Initialize some variables set by options. @@ -1037,7 +1037,6 @@ --enable-sweep3d=ARG Use sweep3d as a benchmark (srcs in DIR) --enable-fpgrowth=ARG Use fpgrowth as a benchmark (srcs in DIR) --enable-boxedsim=ARG Use boxedsim as a benchmark (srcs in DIR) - --enable-perfect=ARG Use perfect as a benchmark (srcs in DIR) Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] @@ -1613,12 +1612,6 @@ ac_config_commands="$ac_config_commands External/Povray/Makefile" - ac_config_commands="$ac_config_commands External/PerfectClub/Makefile" - - - ac_config_commands="$ac_config_commands External/PerfectClub/Makefile.perfect" - - ac_config_commands="$ac_config_commands External/SPEC/Makefile" @@ -3988,7 +3981,7 @@ ;; *-*-irix6*) # Find out which ABI we are using. - echo '#line 3991 "configure"' > conftest.$ac_ext + echo '#line 3984 "configure"' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? @@ -4862,7 +4855,7 @@ # Provide some information about the compiler. -echo "$as_me:4865:" \ +echo "$as_me:4858:" \ "checking for Fortran 77 compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 @@ -5919,11 +5912,11 @@ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:5922: $lt_compile\"" >&5) + (eval echo "\"\$as_me:5915: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:5926: \$? = $ac_status" >&5 + echo "$as_me:5919: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings @@ -6162,11 +6155,11 @@ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:6165: $lt_compile\"" >&5) + (eval echo "\"\$as_me:6158: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:6169: \$? = $ac_status" >&5 + echo "$as_me:6162: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings @@ -6222,11 +6215,11 @@ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:6225: $lt_compile\"" >&5) + (eval echo "\"\$as_me:6218: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:6229: \$? = $ac_status" >&5 + echo "$as_me:6222: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -8407,7 +8400,7 @@ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < conftest.$ac_ext <&5) + (eval echo "\"\$as_me:10694: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:10705: \$? = $ac_status" >&5 + echo "$as_me:10698: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings @@ -10758,11 +10751,11 @@ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:10761: $lt_compile\"" >&5) + (eval echo "\"\$as_me:10754: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:10765: \$? = $ac_status" >&5 + echo "$as_me:10758: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -12119,7 +12112,7 @@ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < conftest.$ac_ext <&5) + (eval echo "\"\$as_me:13050: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:13061: \$? = $ac_status" >&5 + echo "$as_me:13054: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings @@ -13114,11 +13107,11 @@ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:13117: $lt_compile\"" >&5) + (eval echo "\"\$as_me:13110: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:13121: \$? = $ac_status" >&5 + echo "$as_me:13114: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -15153,11 +15146,11 @@ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:15156: $lt_compile\"" >&5) + (eval echo "\"\$as_me:15149: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:15160: \$? = $ac_status" >&5 + echo "$as_me:15153: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings @@ -15396,11 +15389,11 @@ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:15399: $lt_compile\"" >&5) + (eval echo "\"\$as_me:15392: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:15403: \$? = $ac_status" >&5 + echo "$as_me:15396: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings @@ -15456,11 +15449,11 @@ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:15459: $lt_compile\"" >&5) + (eval echo "\"\$as_me:15452: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:15463: \$? = $ac_status" >&5 + echo "$as_me:15456: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -17641,7 +17634,7 @@ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < conftest.$ac_ext <&5 -echo $ECHO_N "checking for perfect benchmark sources... $ECHO_C" >&6 -case "$checkresult" in -auto|yes) - defaultdir=/home/vadve/shared/benchmarks/perfectclub - if test -d "$defaultdir" - then - PERFECT_ROOT=$defaultdir - - USE_PERFECT=USE_PERFECT=1 - - checkresult="yes, found in $defaultdir" - else - checkresult=no - fi - ;; -no) - - - checkresult=no - ;; -*) if test -d "$checkresult" - then - PERFECT_ROOT="$checkresult" - - USE_PERFECT=USE_PERFECT=1 - - checkresult="yes, in $checkresult" - else - - - checkresult="no, not found in $checkresult" - fi - ;; -esac -echo "$as_me:$LINENO: result: $checkresult" >&5 -echo "${ECHO_T}$checkresult" >&6 - - - # Check whether --with-f2c or --without-f2c was given. if test "${with_f2c+set}" = set; then @@ -20226,8 +20172,6 @@ "External/Makefile" ) CONFIG_COMMANDS="$CONFIG_COMMANDS External/Makefile" ;; "External/Makefile.external" ) CONFIG_COMMANDS="$CONFIG_COMMANDS External/Makefile.external" ;; "External/Povray/Makefile" ) CONFIG_COMMANDS="$CONFIG_COMMANDS External/Povray/Makefile" ;; - "External/PerfectClub/Makefile" ) CONFIG_COMMANDS="$CONFIG_COMMANDS External/PerfectClub/Makefile" ;; - "External/PerfectClub/Makefile.perfect" ) CONFIG_COMMANDS="$CONFIG_COMMANDS External/PerfectClub/Makefile.perfect" ;; "External/SPEC/Makefile" ) CONFIG_COMMANDS="$CONFIG_COMMANDS External/SPEC/Makefile" ;; "External/SPEC/Makefile.spec" ) CONFIG_COMMANDS="$CONFIG_COMMANDS External/SPEC/Makefile.spec" ;; "External/SPEC/Makefile.spec2000" ) CONFIG_COMMANDS="$CONFIG_COMMANDS External/SPEC/Makefile.spec2000" ;; @@ -20381,8 +20325,6 @@ s, at USE_FPGROWTH@,$USE_FPGROWTH,;t t s, at BOXEDSIM_ROOT@,$BOXEDSIM_ROOT,;t t s, at USE_BOXEDSIM@,$USE_BOXEDSIM,;t t -s, at PERFECT_ROOT@,$PERFECT_ROOT,;t t -s, at USE_PERFECT@,$USE_PERFECT,;t t s, at F2C@,$F2C,;t t s, at F2C_INC@,$F2C_INC,;t t s, at F2C_LIB@,$F2C_LIB,;t t @@ -20778,10 +20720,6 @@ ${SHELL} ${llvm_src}/autoconf/install-sh -c ${srcdir}/External/Makefile.external External/Makefile.external ;; External/Povray/Makefile ) ${llvm_src}/autoconf/mkinstalldirs `dirname External/Povray/Makefile` ${SHELL} ${llvm_src}/autoconf/install-sh -c ${srcdir}/External/Povray/Makefile External/Povray/Makefile ;; - External/PerfectClub/Makefile ) ${llvm_src}/autoconf/mkinstalldirs `dirname External/PerfectClub/Makefile` - ${SHELL} ${llvm_src}/autoconf/install-sh -c ${srcdir}/External/PerfectClub/Makefile External/PerfectClub/Makefile ;; - External/PerfectClub/Makefile.perfect ) ${llvm_src}/autoconf/mkinstalldirs `dirname External/PerfectClub/Makefile.perfect` - ${SHELL} ${llvm_src}/autoconf/install-sh -c ${srcdir}/External/PerfectClub/Makefile.perfect External/PerfectClub/Makefile.perfect ;; External/SPEC/Makefile ) ${llvm_src}/autoconf/mkinstalldirs `dirname External/SPEC/Makefile` ${SHELL} ${llvm_src}/autoconf/install-sh -c ${srcdir}/External/SPEC/Makefile External/SPEC/Makefile ;; External/SPEC/Makefile.spec ) ${llvm_src}/autoconf/mkinstalldirs `dirname External/SPEC/Makefile.spec` From lattner at cs.uiuc.edu Thu May 12 18:06:45 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Thu, 12 May 2005 18:06:45 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/X86/X86ISelPattern.cpp Message-ID: <200505122306.j4CN6j3o009835@apoc.cs.uiuc.edu> Changes in directory llvm/lib/Target/X86: X86ISelPattern.cpp updated: 1.122 -> 1.123 --- Log message: Add a new -enable-x86-fastcc option that enables passing the first two integer values in registers for the fastcc calling conv. --- Diffs of the changes: (+424 -11) X86ISelPattern.cpp | 435 +++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 424 insertions(+), 11 deletions(-) Index: llvm/lib/Target/X86/X86ISelPattern.cpp diff -u llvm/lib/Target/X86/X86ISelPattern.cpp:1.122 llvm/lib/Target/X86/X86ISelPattern.cpp:1.123 --- llvm/lib/Target/X86/X86ISelPattern.cpp:1.122 Thu May 12 14:56:45 2005 +++ llvm/lib/Target/X86/X86ISelPattern.cpp Thu May 12 18:06:28 2005 @@ -14,6 +14,7 @@ #include "X86.h" #include "X86InstrBuilder.h" #include "X86RegisterInfo.h" +#include "llvm/CallingConv.h" #include "llvm/Constants.h" #include "llvm/Instructions.h" #include "llvm/Function.h" @@ -33,6 +34,11 @@ #include using namespace llvm; +// FIXME: temporary. +#include "llvm/Support/CommandLine.h" +static cl::opt EnableFastCC("enable-x86-fastcc", cl::Hidden, + cl::desc("Enable fastcc on X86")); + //===----------------------------------------------------------------------===// // X86TargetLowering - X86 Implementation of the TargetLowering interface namespace { @@ -123,11 +129,46 @@ virtual std::pair LowerFrameReturnAddress(bool isFrameAddr, SDOperand Chain, unsigned Depth, SelectionDAG &DAG); + private: + // C Calling Convention implementation. + std::vector LowerCCCArguments(Function &F, SelectionDAG &DAG); + std::pair + LowerCCCCallTo(SDOperand Chain, const Type *RetTy, bool isVarArg, + SDOperand Callee, ArgListTy &Args, SelectionDAG &DAG); + + // Fast Calling Convention implementation. + std::vector LowerFastCCArguments(Function &F, SelectionDAG &DAG); + std::pair + LowerFastCCCallTo(SDOperand Chain, const Type *RetTy, + SDOperand Callee, ArgListTy &Args, SelectionDAG &DAG); }; } std::vector X86TargetLowering::LowerArguments(Function &F, SelectionDAG &DAG) { + if (F.getCallingConv() == CallingConv::Fast && EnableFastCC) + return LowerFastCCArguments(F, DAG); + return LowerCCCArguments(F, DAG); +} + +std::pair +X86TargetLowering::LowerCallTo(SDOperand Chain, const Type *RetTy, + bool isVarArg, unsigned CallingConv, + SDOperand Callee, ArgListTy &Args, + SelectionDAG &DAG) { + assert((!isVarArg || CallingConv == CallingConv::C) && + "Only C takes varargs!"); + if (CallingConv == CallingConv::Fast && EnableFastCC) + return LowerFastCCCallTo(Chain, RetTy, Callee, Args, DAG); + return LowerCCCCallTo(Chain, RetTy, isVarArg, Callee, Args, DAG); +} + +//===----------------------------------------------------------------------===// +// C Calling Convention implementation +//===----------------------------------------------------------------------===// + +std::vector +X86TargetLowering::LowerCCCArguments(Function &F, SelectionDAG &DAG) { std::vector ArgValues; MachineFunction &MF = DAG.getMachineFunction(); @@ -208,9 +249,9 @@ } std::pair -X86TargetLowering::LowerCallTo(SDOperand Chain, const Type *RetTy, - bool isVarArg, unsigned CallingConv, - SDOperand Callee, ArgListTy &Args, SelectionDAG &DAG) { +X86TargetLowering::LowerCCCCallTo(SDOperand Chain, const Type *RetTy, + bool isVarArg, SDOperand Callee, + ArgListTy &Args, SelectionDAG &DAG) { // Count how many bytes are to be pushed on the stack. unsigned NumBytes = 0; @@ -322,6 +363,305 @@ return std::make_pair(Result, Chain); } +//===----------------------------------------------------------------------===// +// Fast Calling Convention implementation +//===----------------------------------------------------------------------===// +// +// The X86 'fast' calling convention passes up to two integer arguments in +// registers (an appropriate portion of EAX/EDX), passes arguments in C order, +// and requires that the callee pop its arguments off the stack (allowing proper +// tail calls), and has the same return value conventions as C calling convs. +// +// Note that this can be enhanced in the future to pass fp vals in registers +// (when we have a global fp allocator) and do other tricks. +// +std::vector +X86TargetLowering::LowerFastCCArguments(Function &F, SelectionDAG &DAG) { + std::vector ArgValues; + + MachineFunction &MF = DAG.getMachineFunction(); + MachineFrameInfo *MFI = MF.getFrameInfo(); + + // Add DAG nodes to load the arguments... On entry to a function the stack + // frame looks like this: + // + // [ESP] -- return address + // [ESP + 4] -- first nonreg argument (leftmost lexically) + // [ESP + 8] -- second nonreg argument, if first argument is 4 bytes in size + // ... + unsigned ArgOffset = 0; // Frame mechanisms handle retaddr slot + + // Keep track of the number of integer regs passed so far. This can be either + // 0 (neither EAX or EDX used), 1 (EAX is used) or 2 (EAX and EDX are both + // used). + unsigned NumIntRegs = 0; + + for (Function::arg_iterator I = F.arg_begin(), E = F.arg_end(); I != E; ++I) { + MVT::ValueType ObjectVT = getValueType(I->getType()); + unsigned ArgIncrement = 4; + unsigned ObjSize = 0; + SDOperand ArgValue; + + switch (ObjectVT) { + default: assert(0 && "Unhandled argument type!"); + case MVT::i1: + case MVT::i8: + if (NumIntRegs < 2) { + if (!I->use_empty()) { + MF.addLiveIn(NumIntRegs ? X86::DL : X86::AL); + ArgValue = DAG.getCopyFromReg(NumIntRegs ? X86::DL : X86::AL, MVT::i8, + DAG.getRoot()); + DAG.setRoot(ArgValue.getValue(1)); + } + ++NumIntRegs; + break; + } + + ObjSize = 1; + break; + case MVT::i16: + if (NumIntRegs < 2) { + if (!I->use_empty()) { + MF.addLiveIn(NumIntRegs ? X86::DX : X86::AX); + ArgValue = DAG.getCopyFromReg(NumIntRegs ? X86::DX : X86::AX, + MVT::i16, DAG.getRoot()); + DAG.setRoot(ArgValue.getValue(1)); + } + ++NumIntRegs; + break; + } + ObjSize = 2; + break; + case MVT::i32: + if (NumIntRegs < 2) { + if (!I->use_empty()) { + MF.addLiveIn(NumIntRegs ? X86::EDX : X86::EAX); + ArgValue = DAG.getCopyFromReg(NumIntRegs ? X86::EDX : X86::EAX, + MVT::i32, DAG.getRoot()); + DAG.setRoot(ArgValue.getValue(1)); + } + ++NumIntRegs; + break; + } + ObjSize = 4; + break; + case MVT::i64: + if (NumIntRegs == 0) { + if (!I->use_empty()) { + MF.addLiveIn(X86::EDX); + MF.addLiveIn(X86::EAX); + + SDOperand Low=DAG.getCopyFromReg(X86::EAX, MVT::i32, DAG.getRoot()); + SDOperand Hi =DAG.getCopyFromReg(X86::EDX, MVT::i32, Low.getValue(1)); + DAG.setRoot(Hi.getValue(1)); + + ArgValue = DAG.getNode(ISD::BUILD_PAIR, MVT::i64, Low, Hi); + } + NumIntRegs = 2; + break; + } else if (NumIntRegs == 1) { + if (!I->use_empty()) { + MF.addLiveIn(X86::EDX); + SDOperand Low = DAG.getCopyFromReg(X86::EDX, MVT::i32, DAG.getRoot()); + DAG.setRoot(Low.getValue(1)); + + // Load the high part from memory. + // Create the frame index object for this incoming parameter... + int FI = MFI->CreateFixedObject(4, ArgOffset); + SDOperand FIN = DAG.getFrameIndex(FI, MVT::i32); + SDOperand Hi = DAG.getLoad(MVT::i32, DAG.getEntryNode(), FIN, + DAG.getSrcValue(NULL)); + ArgValue = DAG.getNode(ISD::BUILD_PAIR, MVT::i64, Low, Hi); + } + ArgOffset += 4; + NumIntRegs = 2; + break; + } + ObjSize = ArgIncrement = 8; + break; + case MVT::f32: ObjSize = 4; break; + case MVT::f64: ObjSize = ArgIncrement = 8; break; + } + + // Don't codegen dead arguments. FIXME: remove this check when we can nuke + // dead loads. + if (ObjSize && !I->use_empty()) { + // Create the frame index object for this incoming parameter... + int FI = MFI->CreateFixedObject(ObjSize, ArgOffset); + + // Create the SelectionDAG nodes corresponding to a load from this + // parameter. + SDOperand FIN = DAG.getFrameIndex(FI, MVT::i32); + + ArgValue = DAG.getLoad(ObjectVT, DAG.getEntryNode(), FIN, + DAG.getSrcValue(NULL)); + } else if (ArgValue.Val == 0) { + if (MVT::isInteger(ObjectVT)) + ArgValue = DAG.getConstant(0, ObjectVT); + else + ArgValue = DAG.getConstantFP(0, ObjectVT); + } + ArgValues.push_back(ArgValue); + + if (ObjSize) + ArgOffset += ArgIncrement; // Move on to the next argument. + } + + // If the function takes variable number of arguments, make a frame index for + // the start of the first vararg value... for expansion of llvm.va_start. + if (F.isVarArg()) + VarArgsFrameIndex = MFI->CreateFixedObject(1, ArgOffset); + ReturnAddrIndex = 0; // No return address slot generated yet. + + // Finally, inform the code generator which regs we return values in. + switch (getValueType(F.getReturnType())) { + default: assert(0 && "Unknown type!"); + case MVT::isVoid: break; + case MVT::i1: + case MVT::i8: + case MVT::i16: + case MVT::i32: + MF.addLiveOut(X86::EAX); + break; + case MVT::i64: + MF.addLiveOut(X86::EAX); + MF.addLiveOut(X86::EDX); + break; + case MVT::f32: + case MVT::f64: + MF.addLiveOut(X86::ST0); + break; + } + return ArgValues; +} + +std::pair +X86TargetLowering::LowerFastCCCallTo(SDOperand Chain, const Type *RetTy, + SDOperand Callee, + ArgListTy &Args, SelectionDAG &DAG) { + // Count how many bytes are to be pushed on the stack. + unsigned NumBytes = 0; + + // Keep track of the number of integer regs passed so far. This can be either + // 0 (neither EAX or EDX used), 1 (EAX is used) or 2 (EAX and EDX are both + // used). + unsigned NumIntRegs = 0; + + for (unsigned i = 0, e = Args.size(); i != e; ++i) + switch (getValueType(Args[i].second)) { + default: assert(0 && "Unknown value type!"); + case MVT::i1: + case MVT::i8: + case MVT::i16: + case MVT::i32: + if (NumIntRegs < 2) { + ++NumIntRegs; + break; + } + // fall through + case MVT::f32: + NumBytes += 4; + break; + case MVT::i64: + if (NumIntRegs == 0) { + NumIntRegs = 2; + break; + } else if (NumIntRegs == 1) { + NumIntRegs = 2; + NumBytes += 4; + break; + } + + // fall through + case MVT::f64: + NumBytes += 8; + break; + } + + Chain = DAG.getNode(ISD::ADJCALLSTACKDOWN, MVT::Other, Chain, + DAG.getConstant(NumBytes, getPointerTy())); + + // Arguments go on the stack in reverse order, as specified by the ABI. + unsigned ArgOffset = 0; + SDOperand StackPtr = DAG.getCopyFromReg(X86::ESP, MVT::i32, + DAG.getEntryNode()); + NumIntRegs = 0; + std::vector Stores; + std::vector RegValuesToPass; + for (unsigned i = 0, e = Args.size(); i != e; ++i) { + switch (getValueType(Args[i].second)) { + default: assert(0 && "Unexpected ValueType for argument!"); + case MVT::i1: + case MVT::i8: + case MVT::i16: + case MVT::i32: + if (NumIntRegs < 2) { + RegValuesToPass.push_back(Args[i].first); + ++NumIntRegs; + break; + } + // Fall through + case MVT::f32: { + SDOperand PtrOff = DAG.getConstant(ArgOffset, getPointerTy()); + PtrOff = DAG.getNode(ISD::ADD, MVT::i32, StackPtr, PtrOff); + Stores.push_back(DAG.getNode(ISD::STORE, MVT::Other, Chain, + Args[i].first, PtrOff, + DAG.getSrcValue(NULL))); + ArgOffset += 4; + break; + } + case MVT::i64: + if (NumIntRegs < 2) { // Can pass part of it in regs? + SDOperand Hi = DAG.getNode(ISD::EXTRACT_ELEMENT, MVT::i32, + Args[i].first, DAG.getConstant(1, MVT::i32)); + SDOperand Lo = DAG.getNode(ISD::EXTRACT_ELEMENT, MVT::i32, + Args[i].first, DAG.getConstant(0, MVT::i32)); + RegValuesToPass.push_back(Lo); + ++NumIntRegs; + if (NumIntRegs < 2) { // Pass both parts in regs? + RegValuesToPass.push_back(Hi); + ++NumIntRegs; + } else { + // Pass the high part in memory. + SDOperand PtrOff = DAG.getConstant(ArgOffset, getPointerTy()); + PtrOff = DAG.getNode(ISD::ADD, MVT::i32, StackPtr, PtrOff); + Stores.push_back(DAG.getNode(ISD::STORE, MVT::Other, Chain, + Args[i].first, PtrOff, + DAG.getSrcValue(NULL))); + ArgOffset += 4; + } + break; + } + // Fall through + case MVT::f64: + SDOperand PtrOff = DAG.getConstant(ArgOffset, getPointerTy()); + PtrOff = DAG.getNode(ISD::ADD, MVT::i32, StackPtr, PtrOff); + Stores.push_back(DAG.getNode(ISD::STORE, MVT::Other, Chain, + Args[i].first, PtrOff, + DAG.getSrcValue(NULL))); + ArgOffset += 8; + break; + } + } + if (!Stores.empty()) + Chain = DAG.getNode(ISD::TokenFactor, MVT::Other, Stores); + + std::vector RetVals; + MVT::ValueType RetTyVT = getValueType(RetTy); + if (RetTyVT != MVT::isVoid) + RetVals.push_back(RetTyVT); + RetVals.push_back(MVT::Other); + + SDOperand TheCall = SDOperand(DAG.getCall(RetVals, Chain, Callee, + RegValuesToPass), 0); + Chain = TheCall.getValue(RetTyVT != MVT::isVoid); + Chain = DAG.getNode(ISD::ADJCALLSTACKUP, MVT::Other, Chain, + DAG.getConstant(NumBytes, getPointerTy())); + return std::make_pair(TheCall, Chain); +} + + + std::pair X86TargetLowering:: LowerFrameReturnAddress(bool isFrameAddress, SDOperand Chain, unsigned Depth, @@ -340,7 +680,8 @@ if (!isFrameAddress) // Just load the return address - Result = DAG.getLoad(MVT::i32, DAG.getEntryNode(), RetAddrFI, DAG.getSrcValue(NULL)); + Result = DAG.getLoad(MVT::i32, DAG.getEntryNode(), RetAddrFI, + DAG.getSrcValue(NULL)); else Result = DAG.getNode(ISD::SUB, MVT::i32, RetAddrFI, DAG.getConstant(4, MVT::i32)); @@ -1397,10 +1738,11 @@ SDOperand Op0, Op1; if (Node->getOpcode() == ISD::CopyFromReg) { - // FIXME: Handle copy from physregs! - - // Just use the specified register as our input. - return dyn_cast(Node)->getReg(); + if (MRegisterInfo::isVirtualRegister(cast(Node)->getReg()) || + cast(Node)->getReg() == X86::ESP) { + // Just use the specified register as our input. + return cast(Node)->getReg(); + } } unsigned &Reg = ExprMap[N]; @@ -1440,6 +1782,29 @@ default: Node->dump(); assert(0 && "Node not handled!\n"); + case ISD::CopyFromReg: + Select(N.getOperand(0)); + if (Result == 1) { + Reg = Result = ExprMap[N.getValue(0)] = + MakeReg(N.getValue(0).getValueType()); + } + switch (Node->getValueType(0)) { + default: assert(0 && "Cannot CopyFromReg this!"); + case MVT::i1: + case MVT::i8: + BuildMI(BB, X86::MOV8rr, 1, + Result).addReg(cast(Node)->getReg()); + return Result; + case MVT::i16: + BuildMI(BB, X86::MOV16rr, 1, + Result).addReg(cast(Node)->getReg()); + return Result; + case MVT::i32: + BuildMI(BB, X86::MOV32rr, 1, + Result).addReg(cast(Node)->getReg()); + return Result; + } + case ISD::FrameIndex: Tmp1 = cast(N)->getIndex(); addFrameReference(BuildMI(BB, X86::LEA32r, 4, Result), (int)Tmp1); @@ -2643,17 +3008,60 @@ BuildMI(BB, X86::MOV32rr, 1, Result).addReg(X86::ESP); return Result; - case ISD::CALL: + case ISD::CALL: { // The chain for this call is now lowered. ExprMap.insert(std::make_pair(N.getValue(Node->getNumValues()-1), 1)); + bool isDirect = isa(N.getOperand(1)) || + isa(N.getOperand(1)); + unsigned Callee = 0; + if (isDirect) { + Select(N.getOperand(0)); + } else { + if (getRegPressure(N.getOperand(0)) > getRegPressure(N.getOperand(1))) { + Select(N.getOperand(0)); + Callee = SelectExpr(N.getOperand(1)); + } else { + Callee = SelectExpr(N.getOperand(1)); + Select(N.getOperand(0)); + } + } + + // If this call has values to pass in registers, do so now. + if (Node->getNumOperands() > 2) { + // The first value is passed in (a part of) EAX, the second in EDX. + unsigned RegOp1 = SelectExpr(N.getOperand(2)); + unsigned RegOp2 = + Node->getNumOperands() > 3 ? SelectExpr(N.getOperand(3)) : 0; + + switch (N.getOperand(2).getValueType()) { + default: assert(0 && "Bad thing to pass in regs"); + case MVT::i1: + case MVT::i8: BuildMI(BB, X86::MOV8rr , 1,X86::AL).addReg(RegOp1); break; + case MVT::i16: BuildMI(BB, X86::MOV16rr, 1,X86::AX).addReg(RegOp1); break; + case MVT::i32: BuildMI(BB, X86::MOV32rr, 1,X86::EAX).addReg(RegOp1);break; + } + if (RegOp2) + switch (N.getOperand(3).getValueType()) { + default: assert(0 && "Bad thing to pass in regs"); + case MVT::i1: + case MVT::i8: + BuildMI(BB, X86::MOV8rr , 1, X86::DL).addReg(RegOp2); + break; + case MVT::i16: + BuildMI(BB, X86::MOV16rr, 1, X86::DX).addReg(RegOp2); + break; + case MVT::i32: + BuildMI(BB, X86::MOV32rr, 1, X86::EDX).addReg(RegOp2); + break; + } + } + if (GlobalAddressSDNode *GASD = dyn_cast(N.getOperand(1))) { - Select(N.getOperand(0)); BuildMI(BB, X86::CALLpcrel32, 1).addGlobalAddress(GASD->getGlobal(),true); } else if (ExternalSymbolSDNode *ESSDN = dyn_cast(N.getOperand(1))) { - Select(N.getOperand(0)); BuildMI(BB, X86::CALLpcrel32, 1).addExternalSymbol(ESSDN->getSymbol(), true); } else { @@ -2688,6 +3096,7 @@ break; } return Result+N.ResNo; + } case ISD::READPORT: // First, determine that the size of the operand falls within the acceptable // range for this architecture. @@ -3125,6 +3534,10 @@ ExprMap.erase(N); SelectExpr(N); return; + case ISD::CopyFromReg: + ExprMap.erase(N); + SelectExpr(N.getValue(0)); + return; case ISD::TRUNCSTORE: { // truncstore chain, val, ptr :storety // On X86, we can represent all types except for Bool and Float natively. From lattner at cs.uiuc.edu Thu May 12 18:07:14 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Thu, 12 May 2005 18:07:14 -0500 Subject: [llvm-commits] CVS: llvm-test/Makefile.programs Message-ID: <200505122307.j4CN7E3f009849@apoc.cs.uiuc.edu> Changes in directory llvm-test: Makefile.programs updated: 1.154 -> 1.155 --- Log message: Use -enable-x86-fastcc for x86 llc-beta --- Diffs of the changes: (+3 -3) Makefile.programs | 6 +++--- 1 files changed, 3 insertions(+), 3 deletions(-) Index: llvm-test/Makefile.programs diff -u llvm-test/Makefile.programs:1.154 llvm-test/Makefile.programs:1.155 --- llvm-test/Makefile.programs:1.154 Sun May 8 18:39:07 2005 +++ llvm-test/Makefile.programs Thu May 12 18:07:00 2005 @@ -188,13 +188,13 @@ ifeq ($(ARCH),PowerPC) LLCBETAOPTION := -enable-cc-opts -else +endif ifeq ($(ARCH),Alpha) LLCBETAOPTION := -enable-alpha-intfpdiv -enable-alpha-ftoi #-enable-lsr-for-alpha -else -LLCBETAOPTION := -enable-pattern-isel=1 endif +ifeq ($(ARCH),x86) +LLCBETAOPTION := -enable-x86-fastcc endif # Given a version of the entire program linked together into a single unit of From lattner at cs.uiuc.edu Thu May 12 18:09:18 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Thu, 12 May 2005 18:09:18 -0500 Subject: [llvm-commits] CVS: llvm/test/Regression/CodeGen/X86/fast-cc-pass-in-regs.ll Message-ID: <200505122309.j4CN9Iai009880@apoc.cs.uiuc.edu> Changes in directory llvm/test/Regression/CodeGen/X86: fast-cc-pass-in-regs.ll added (r1.1) --- Log message: reg test --- Diffs of the changes: (+14 -0) fast-cc-pass-in-regs.ll | 14 ++++++++++++++ 1 files changed, 14 insertions(+) Index: llvm/test/Regression/CodeGen/X86/fast-cc-pass-in-regs.ll diff -c /dev/null llvm/test/Regression/CodeGen/X86/fast-cc-pass-in-regs.ll:1.1 *** /dev/null Thu May 12 18:09:14 2005 --- llvm/test/Regression/CodeGen/X86/fast-cc-pass-in-regs.ll Thu May 12 18:09:04 2005 *************** *** 0 **** --- 1,14 ---- + ; llvm-as < %s | llc -x86-asm-syntax=intel -enable-x86-fastcc | grep 'mov %EDX, 1' + + ; check that fastcc is passing stuff in regs. + + declare fastcc long %callee(long) + + long %caller() { + %X = call fastcc long %callee(long 4294967299) ;; (1ULL << 32) + 3 + ret long %X + } + + fastcc long %caller2(long %X) { + ret long %X + } From lattner at cs.uiuc.edu Thu May 12 18:23:36 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Thu, 12 May 2005 18:23:36 -0500 Subject: [llvm-commits] CVS: llvm/include/llvm/CodeGen/SelectionDAGNodes.h Message-ID: <200505122323.j4CNNa12012146@apoc.cs.uiuc.edu> Changes in directory llvm/include/llvm/CodeGen: SelectionDAGNodes.h updated: 1.38 -> 1.39 --- Log message: rename the ADJCALLSTACKDOWN/ADJCALLSTACKUP nodes to be CALLSEQ_START/BEGIN. --- Diffs of the changes: (+6 -6) SelectionDAGNodes.h | 12 ++++++------ 1 files changed, 6 insertions(+), 6 deletions(-) Index: llvm/include/llvm/CodeGen/SelectionDAGNodes.h diff -u llvm/include/llvm/CodeGen/SelectionDAGNodes.h:1.38 llvm/include/llvm/CodeGen/SelectionDAGNodes.h:1.39 --- llvm/include/llvm/CodeGen/SelectionDAGNodes.h:1.38 Wed May 11 13:56:45 2005 +++ llvm/include/llvm/CodeGen/SelectionDAGNodes.h Thu May 12 18:23:19 2005 @@ -245,12 +245,12 @@ MEMMOVE, MEMCPY, - // ADJCALLSTACKDOWN/ADJCALLSTACKUP - These operators mark the beginning and - // end of a call sequence and indicate how much the stack pointer needs to - // be adjusted for that particular call. The first operand is a chain, the - // second is a ConstantSDNode of intptr type. - ADJCALLSTACKDOWN, // Beginning of a call sequence - ADJCALLSTACKUP, // End of a call sequence + // CALLSEQ_START/CALLSEQ_END - These operators mark the beginning and end of + // a call sequence, and carry arbitrary information that target might want + // to know. The first operand is a chain, the rest are specified by the + // target and not touched by the DAG optimizers. + CALLSEQ_START, // Beginning of a call sequence + CALLSEQ_END, // End of a call sequence // SRCVALUE - This corresponds to a Value*, and is used to associate memory // locations with their value. This allows one use alias analysis From lattner at cs.uiuc.edu Thu May 12 18:24:05 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Thu, 12 May 2005 18:24:05 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/Alpha/AlphaISelPattern.cpp Message-ID: <200505122324.j4CNO5tn012948@apoc.cs.uiuc.edu> Changes in directory llvm/lib/Target/Alpha: AlphaISelPattern.cpp updated: 1.110 -> 1.111 --- Log message: rename the ADJCALLSTACKDOWN/ADJCALLSTACKUP nodes to be CALLSEQ_START/BEGIN. --- Diffs of the changes: (+5 -5) AlphaISelPattern.cpp | 10 +++++----- 1 files changed, 5 insertions(+), 5 deletions(-) Index: llvm/lib/Target/Alpha/AlphaISelPattern.cpp diff -u llvm/lib/Target/Alpha/AlphaISelPattern.cpp:1.110 llvm/lib/Target/Alpha/AlphaISelPattern.cpp:1.111 --- llvm/lib/Target/Alpha/AlphaISelPattern.cpp:1.110 Thu May 12 14:56:42 2005 +++ llvm/lib/Target/Alpha/AlphaISelPattern.cpp Thu May 12 18:23:49 2005 @@ -311,7 +311,7 @@ if (Args.size() > 6) NumBytes = (Args.size() - 6) * 8; - Chain = DAG.getNode(ISD::ADJCALLSTACKDOWN, MVT::Other, Chain, + Chain = DAG.getNode(ISD::CALLSEQ_START, MVT::Other, Chain, DAG.getConstant(NumBytes, getPointerTy())); std::vector args_to_use; for (unsigned i = 0, e = Args.size(); i != e; ++i) @@ -346,7 +346,7 @@ SDOperand TheCall = SDOperand(DAG.getCall(RetVals, Chain, Callee, args_to_use), 0); Chain = TheCall.getValue(RetTyVT != MVT::isVoid); - Chain = DAG.getNode(ISD::ADJCALLSTACKUP, MVT::Other, Chain, + Chain = DAG.getNode(ISD::CALLSEQ_END, MVT::Other, Chain, DAG.getConstant(NumBytes, getPointerTy())); return std::make_pair(TheCall, Chain); } @@ -2247,12 +2247,12 @@ SelectExpr(N); return; - case ISD::ADJCALLSTACKDOWN: - case ISD::ADJCALLSTACKUP: + case ISD::CALLSEQ_START: + case ISD::CALLSEQ_END: Select(N.getOperand(0)); Tmp1 = cast(N.getOperand(1))->getValue(); - Opc = N.getOpcode() == ISD::ADJCALLSTACKDOWN ? Alpha::ADJUSTSTACKDOWN : + Opc = N.getOpcode() == ISD::CALLSEQ_START ? Alpha::ADJUSTSTACKDOWN : Alpha::ADJUSTSTACKUP; BuildMI(BB, Opc, 1).addImm(Tmp1); return; From lattner at cs.uiuc.edu Thu May 12 18:24:09 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Thu, 12 May 2005 18:24:09 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/PowerPC/PPC32ISelPattern.cpp PPC64ISelPattern.cpp Message-ID: <200505122324.j4CNO9wJ013125@apoc.cs.uiuc.edu> Changes in directory llvm/lib/Target/PowerPC: PPC32ISelPattern.cpp updated: 1.86 -> 1.87 PPC64ISelPattern.cpp updated: 1.16 -> 1.17 --- Log message: rename the ADJCALLSTACKDOWN/ADJCALLSTACKUP nodes to be CALLSEQ_START/BEGIN. --- Diffs of the changes: (+12 -12) PPC32ISelPattern.cpp | 12 ++++++------ PPC64ISelPattern.cpp | 12 ++++++------ 2 files changed, 12 insertions(+), 12 deletions(-) Index: llvm/lib/Target/PowerPC/PPC32ISelPattern.cpp diff -u llvm/lib/Target/PowerPC/PPC32ISelPattern.cpp:1.86 llvm/lib/Target/PowerPC/PPC32ISelPattern.cpp:1.87 --- llvm/lib/Target/PowerPC/PPC32ISelPattern.cpp:1.86 Thu May 12 14:56:45 2005 +++ llvm/lib/Target/PowerPC/PPC32ISelPattern.cpp Thu May 12 18:23:53 2005 @@ -291,7 +291,7 @@ unsigned NumBytes = 24; if (Args.empty()) { - Chain = DAG.getNode(ISD::ADJCALLSTACKDOWN, MVT::Other, Chain, + Chain = DAG.getNode(ISD::CALLSEQ_START, MVT::Other, Chain, DAG.getConstant(NumBytes, getPointerTy())); } else { for (unsigned i = 0, e = Args.size(); i != e; ++i) @@ -316,7 +316,7 @@ // Adjust the stack pointer for the new arguments... // These operations are automatically eliminated by the prolog/epilog pass - Chain = DAG.getNode(ISD::ADJCALLSTACKDOWN, MVT::Other, Chain, + Chain = DAG.getNode(ISD::CALLSEQ_START, MVT::Other, Chain, DAG.getConstant(NumBytes, getPointerTy())); // Set up a copy of the stack pointer for use loading and storing any @@ -447,7 +447,7 @@ SDOperand TheCall = SDOperand(DAG.getCall(RetVals, Chain, Callee, args_to_use), 0); Chain = TheCall.getValue(RetTyVT != MVT::isVoid); - Chain = DAG.getNode(ISD::ADJCALLSTACKUP, MVT::Other, Chain, + Chain = DAG.getNode(ISD::CALLSEQ_END, MVT::Other, Chain, DAG.getConstant(NumBytes, getPointerTy())); return std::make_pair(TheCall, Chain); } @@ -2382,11 +2382,11 @@ for (unsigned i = 0, e = Node->getNumOperands(); i != e; ++i) Select(Node->getOperand(i)); return; - case ISD::ADJCALLSTACKDOWN: - case ISD::ADJCALLSTACKUP: + case ISD::CALLSEQ_START: + case ISD::CALLSEQ_END: Select(N.getOperand(0)); Tmp1 = cast(N.getOperand(1))->getValue(); - Opc = N.getOpcode() == ISD::ADJCALLSTACKDOWN ? PPC::ADJCALLSTACKDOWN : + Opc = N.getOpcode() == ISD::CALLSEQ_START ? PPC::ADJCALLSTACKDOWN : PPC::ADJCALLSTACKUP; BuildMI(BB, Opc, 1).addImm(Tmp1); return; Index: llvm/lib/Target/PowerPC/PPC64ISelPattern.cpp diff -u llvm/lib/Target/PowerPC/PPC64ISelPattern.cpp:1.16 llvm/lib/Target/PowerPC/PPC64ISelPattern.cpp:1.17 --- llvm/lib/Target/PowerPC/PPC64ISelPattern.cpp:1.16 Thu May 12 14:56:45 2005 +++ llvm/lib/Target/PowerPC/PPC64ISelPattern.cpp Thu May 12 18:23:53 2005 @@ -247,7 +247,7 @@ unsigned NumBytes = 48; if (Args.empty()) { - Chain = DAG.getNode(ISD::ADJCALLSTACKDOWN, MVT::Other, Chain, + Chain = DAG.getNode(ISD::CALLSEQ_START, MVT::Other, Chain, DAG.getConstant(NumBytes, getPointerTy())); } else { NumBytes = 8 * Args.size(); // All arguments are rounded up to 8 bytes @@ -258,7 +258,7 @@ // Adjust the stack pointer for the new arguments... // These operations are automatically eliminated by the prolog/epilog pass - Chain = DAG.getNode(ISD::ADJCALLSTACKDOWN, MVT::Other, Chain, + Chain = DAG.getNode(ISD::CALLSEQ_START, MVT::Other, Chain, DAG.getConstant(NumBytes, getPointerTy())); // Set up a copy of the stack pointer for use loading and storing any @@ -351,7 +351,7 @@ SDOperand TheCall = SDOperand(DAG.getCall(RetVals, Chain, Callee, args_to_use), 0); Chain = TheCall.getValue(RetTyVT != MVT::isVoid); - Chain = DAG.getNode(ISD::ADJCALLSTACKUP, MVT::Other, Chain, + Chain = DAG.getNode(ISD::CALLSEQ_END, MVT::Other, Chain, DAG.getConstant(NumBytes, getPointerTy())); return std::make_pair(TheCall, Chain); } @@ -1495,11 +1495,11 @@ for (unsigned i = 0, e = Node->getNumOperands(); i != e; ++i) Select(Node->getOperand(i)); return; - case ISD::ADJCALLSTACKDOWN: - case ISD::ADJCALLSTACKUP: + case ISD::CALLSEQ_START: + case ISD::CALLSEQ_END: Select(N.getOperand(0)); Tmp1 = cast(N.getOperand(1))->getValue(); - Opc = N.getOpcode() == ISD::ADJCALLSTACKDOWN ? PPC::ADJCALLSTACKDOWN : + Opc = N.getOpcode() == ISD::CALLSEQ_START ? PPC::ADJCALLSTACKDOWN : PPC::ADJCALLSTACKUP; BuildMI(BB, Opc, 1).addImm(Tmp1); return; From lattner at cs.uiuc.edu Thu May 12 18:24:21 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Thu, 12 May 2005 18:24:21 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp SelectionDAG.cpp Message-ID: <200505122324.j4CNOL8X013139@apoc.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen/SelectionDAG: LegalizeDAG.cpp updated: 1.116 -> 1.117 SelectionDAG.cpp updated: 1.108 -> 1.109 --- Log message: rename the ADJCALLSTACKDOWN/ADJCALLSTACKUP nodes to be CALLSEQ_START/BEGIN. --- Diffs of the changes: (+22 -22) LegalizeDAG.cpp | 32 ++++++++++++++++---------------- SelectionDAG.cpp | 12 ++++++------ 2 files changed, 22 insertions(+), 22 deletions(-) Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.116 llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.117 --- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.116 Thu May 12 14:56:57 2005 +++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Thu May 12 18:24:06 2005 @@ -323,8 +323,8 @@ break; } - case ISD::ADJCALLSTACKDOWN: - case ISD::ADJCALLSTACKUP: + case ISD::CALLSEQ_START: + case ISD::CALLSEQ_END: Tmp1 = LegalizeOp(Node->getOperand(0)); // Legalize the chain. // There is no need to legalize the size argument (Operand #1) Tmp2 = Node->getOperand(0); @@ -339,7 +339,7 @@ DAG.getNode(ISD::PCMARKER, MVT::Other, Tmp2, DAG.getConstant(0, MVT::i32)); } - // Note that we do not create new ADJCALLSTACK DOWN/UP nodes here. These + // Note that we do not create new CALLSEQ_DOWN/UP nodes here. These // nodes are treated specially and are mutated in place. This makes the dag // legalization process more efficient and also makes libcall insertion // easier. @@ -1945,9 +1945,9 @@ static void FindLatestAdjCallStackDown(SDNode *Node, SDNode *&Found) { if (Node->getNodeDepth() <= Found->getNodeDepth()) return; - // If we found an ADJCALLSTACKDOWN, we already know this node occurs later + // If we found an CALLSEQ_START, we already know this node occurs later // than the Found node. Just remember this node and return. - if (Node->getOpcode() == ISD::ADJCALLSTACKDOWN) { + if (Node->getOpcode() == ISD::CALLSEQ_START) { Found = Node; return; } @@ -1970,9 +1970,9 @@ static void FindEarliestAdjCallStackUp(SDNode *Node, SDNode *&Found) { if (Found && Node->getNodeDepth() >= Found->getNodeDepth()) return; - // If we found an ADJCALLSTACKUP, we already know this node occurs earlier + // If we found an CALLSEQ_END, we already know this node occurs earlier // than the Found node. Just remember this node and return. - if (Node->getOpcode() == ISD::ADJCALLSTACKUP) { + if (Node->getOpcode() == ISD::CALLSEQ_END) { Found = Node; return; } @@ -1988,9 +1988,9 @@ } /// FindAdjCallStackUp - Given a chained node that is part of a call sequence, -/// find the ADJCALLSTACKUP node that terminates the call sequence. +/// find the CALLSEQ_END node that terminates the call sequence. static SDNode *FindAdjCallStackUp(SDNode *Node) { - if (Node->getOpcode() == ISD::ADJCALLSTACKUP) + if (Node->getOpcode() == ISD::CALLSEQ_END) return Node; if (Node->use_empty()) return 0; // No adjcallstackup @@ -2003,7 +2003,7 @@ for (SDNode::use_iterator UI = Node->use_begin(), E = Node->use_end(); ; ++UI) { - assert(UI != E && "Didn't find a user of the tokchain, no ADJCALLSTACKUP!"); + assert(UI != E && "Didn't find a user of the tokchain, no CALLSEQ_END!"); // Make sure to only follow users of our token chain. SDNode *User = *UI; @@ -2016,10 +2016,10 @@ } /// FindAdjCallStackDown - Given a chained node that is part of a call sequence, -/// find the ADJCALLSTACKDOWN node that initiates the call sequence. +/// find the CALLSEQ_START node that initiates the call sequence. static SDNode *FindAdjCallStackDown(SDNode *Node) { assert(Node && "Didn't find adjcallstackdown for a call??"); - if (Node->getOpcode() == ISD::ADJCALLSTACKDOWN) return Node; + if (Node->getOpcode() == ISD::CALLSEQ_START) return Node; assert(Node->getOperand(0).getValueType() == MVT::Other && "Node doesn't have a token chain argument!"); @@ -2040,11 +2040,11 @@ FindLatestAdjCallStackDown(OpNode, LatestAdjCallStackDown); //std::cerr<<"Found node: "; LatestAdjCallStackDown->dump(); std::cerr <<"\n"; - // It is possible that no ISD::ADJCALLSTACKDOWN was found because there is no + // It is possible that no ISD::CALLSEQ_START was found because there is no // previous call in the function. LatestCallStackDown may in that case be - // the entry node itself. Do not attempt to find a matching ADJCALLSTACKUP - // unless LatestCallStackDown is an ADJCALLSTACKDOWN. - if (LatestAdjCallStackDown->getOpcode() == ISD::ADJCALLSTACKDOWN) + // the entry node itself. Do not attempt to find a matching CALLSEQ_END + // unless LatestCallStackDown is an CALLSEQ_START. + if (LatestAdjCallStackDown->getOpcode() == ISD::CALLSEQ_START) LatestAdjCallStackUp = FindAdjCallStackUp(LatestAdjCallStackDown); else LatestAdjCallStackUp = Entry.Val; Index: llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp diff -u llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:1.108 llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:1.109 --- llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:1.108 Thu May 12 01:27:02 2005 +++ llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp Thu May 12 18:24:06 2005 @@ -1194,7 +1194,7 @@ // Memoize this node if possible. SDNode *N; - if (Opcode != ISD::ADJCALLSTACKDOWN && Opcode != ISD::ADJCALLSTACKUP) { + if (Opcode != ISD::CALLSEQ_START && Opcode != ISD::CALLSEQ_END) { SDNode *&BON = BinaryOps[std::make_pair(Opcode, std::make_pair(N1, N2))]; if (BON) return SDOperand(BON, 0); @@ -1214,11 +1214,11 @@ } // setAdjCallChain - This method changes the token chain of an -// ADJCALLSTACKDOWN/UP node to be the specified operand. +// CALLSEQ_START/END node to be the specified operand. void SDNode::setAdjCallChain(SDOperand N) { assert(N.getValueType() == MVT::Other); - assert((getOpcode() == ISD::ADJCALLSTACKDOWN || - getOpcode() == ISD::ADJCALLSTACKUP) && "Cannot adjust this node!"); + assert((getOpcode() == ISD::CALLSEQ_START || + getOpcode() == ISD::CALLSEQ_END) && "Cannot adjust this node!"); Operands[0].Val->removeUser(this); Operands[0] = N; @@ -1690,8 +1690,8 @@ case ISD::BRCONDTWOWAY: return "brcondtwoway"; case ISD::RET: return "ret"; case ISD::CALL: return "call"; - case ISD::ADJCALLSTACKDOWN: return "adjcallstackdown"; - case ISD::ADJCALLSTACKUP: return "adjcallstackup"; + case ISD::CALLSEQ_START: return "callseq_end"; + case ISD::CALLSEQ_END: return "callseq_start"; // Other operators case ISD::LOAD: return "load"; From lattner at cs.uiuc.edu Thu May 12 18:24:23 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Thu, 12 May 2005 18:24:23 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/X86/X86ISelPattern.cpp Message-ID: <200505122324.j4CNONa3013145@apoc.cs.uiuc.edu> Changes in directory llvm/lib/Target/X86: X86ISelPattern.cpp updated: 1.123 -> 1.124 --- Log message: rename the ADJCALLSTACKDOWN/ADJCALLSTACKUP nodes to be CALLSEQ_START/BEGIN. --- Diffs of the changes: (+9 -9) X86ISelPattern.cpp | 18 +++++++++--------- 1 files changed, 9 insertions(+), 9 deletions(-) Index: llvm/lib/Target/X86/X86ISelPattern.cpp diff -u llvm/lib/Target/X86/X86ISelPattern.cpp:1.123 llvm/lib/Target/X86/X86ISelPattern.cpp:1.124 --- llvm/lib/Target/X86/X86ISelPattern.cpp:1.123 Thu May 12 18:06:28 2005 +++ llvm/lib/Target/X86/X86ISelPattern.cpp Thu May 12 18:23:38 2005 @@ -257,7 +257,7 @@ if (Args.empty()) { // Save zero bytes. - Chain = DAG.getNode(ISD::ADJCALLSTACKDOWN, MVT::Other, Chain, + Chain = DAG.getNode(ISD::CALLSEQ_START, MVT::Other, Chain, DAG.getConstant(0, getPointerTy())); } else { for (unsigned i = 0, e = Args.size(); i != e; ++i) @@ -276,7 +276,7 @@ break; } - Chain = DAG.getNode(ISD::ADJCALLSTACKDOWN, MVT::Other, Chain, + Chain = DAG.getNode(ISD::CALLSEQ_START, MVT::Other, Chain, DAG.getConstant(NumBytes, getPointerTy())); // Arguments go on the stack in reverse order, as specified by the ABI. @@ -329,7 +329,7 @@ SDOperand TheCall = SDOperand(DAG.getCall(RetVals, Chain, Callee), 0); Chain = TheCall.getValue(RetTyVT != MVT::isVoid); - Chain = DAG.getNode(ISD::ADJCALLSTACKUP, MVT::Other, Chain, + Chain = DAG.getNode(ISD::CALLSEQ_END, MVT::Other, Chain, DAG.getConstant(NumBytes, getPointerTy())); return std::make_pair(TheCall, Chain); } @@ -578,7 +578,7 @@ break; } - Chain = DAG.getNode(ISD::ADJCALLSTACKDOWN, MVT::Other, Chain, + Chain = DAG.getNode(ISD::CALLSEQ_START, MVT::Other, Chain, DAG.getConstant(NumBytes, getPointerTy())); // Arguments go on the stack in reverse order, as specified by the ABI. @@ -655,7 +655,7 @@ SDOperand TheCall = SDOperand(DAG.getCall(RetVals, Chain, Callee, RegValuesToPass), 0); Chain = TheCall.getValue(RetTyVT != MVT::isVoid); - Chain = DAG.getNode(ISD::ADJCALLSTACKUP, MVT::Other, Chain, + Chain = DAG.getNode(ISD::CALLSEQ_END, MVT::Other, Chain, DAG.getConstant(NumBytes, getPointerTy())); return std::make_pair(TheCall, Chain); } @@ -3669,13 +3669,13 @@ addFullAddress(BuildMI(BB, Opc, 4+1), AM).addReg(Tmp1); return; } - case ISD::ADJCALLSTACKDOWN: - case ISD::ADJCALLSTACKUP: + case ISD::CALLSEQ_START: + case ISD::CALLSEQ_END: Select(N.getOperand(0)); Tmp1 = cast(N.getOperand(1))->getValue(); - Opc = N.getOpcode() == ISD::ADJCALLSTACKDOWN ? X86::ADJCALLSTACKDOWN : - X86::ADJCALLSTACKUP; + Opc = N.getOpcode() == ISD::CALLSEQ_START ? X86::ADJCALLSTACKDOWN : + X86::ADJCALLSTACKUP; BuildMI(BB, Opc, 1).addImm(Tmp1); return; case ISD::MEMSET: { From lattner at cs.uiuc.edu Thu May 12 18:24:06 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Thu, 12 May 2005 18:24:06 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/IA64/IA64ISelPattern.cpp Message-ID: <200505122324.j4CNO6Zp012958@apoc.cs.uiuc.edu> Changes in directory llvm/lib/Target/IA64: IA64ISelPattern.cpp updated: 1.39 -> 1.40 --- Log message: rename the ADJCALLSTACKDOWN/ADJCALLSTACKUP nodes to be CALLSEQ_START/BEGIN. --- Diffs of the changes: (+6 -6) IA64ISelPattern.cpp | 12 ++++++------ 1 files changed, 6 insertions(+), 6 deletions(-) Index: llvm/lib/Target/IA64/IA64ISelPattern.cpp diff -u llvm/lib/Target/IA64/IA64ISelPattern.cpp:1.39 llvm/lib/Target/IA64/IA64ISelPattern.cpp:1.40 --- llvm/lib/Target/IA64/IA64ISelPattern.cpp:1.39 Thu May 12 14:56:45 2005 +++ llvm/lib/Target/IA64/IA64ISelPattern.cpp Thu May 12 18:23:51 2005 @@ -333,7 +333,7 @@ MF.getInfo()->outRegsUsed= std::max(outRegsUsed, MF.getInfo()->outRegsUsed); - Chain = DAG.getNode(ISD::ADJCALLSTACKDOWN, MVT::Other, Chain, + Chain = DAG.getNode(ISD::CALLSEQ_START, MVT::Other, Chain, DAG.getConstant(NumBytes, getPointerTy())); std::vector args_to_use; @@ -373,7 +373,7 @@ SDOperand TheCall = SDOperand(DAG.getCall(RetVals, Chain, Callee, args_to_use), 0); Chain = TheCall.getValue(RetTyVT != MVT::isVoid); - Chain = DAG.getNode(ISD::ADJCALLSTACKUP, MVT::Other, Chain, + Chain = DAG.getNode(ISD::CALLSEQ_END, MVT::Other, Chain, DAG.getConstant(NumBytes, getPointerTy())); return std::make_pair(TheCall, Chain); } @@ -2425,13 +2425,13 @@ return; } - case ISD::ADJCALLSTACKDOWN: - case ISD::ADJCALLSTACKUP: { + case ISD::CALLSEQ_START: + case ISD::CALLSEQ_END: { Select(N.getOperand(0)); Tmp1 = cast(N.getOperand(1))->getValue(); - Opc = N.getOpcode() == ISD::ADJCALLSTACKDOWN ? IA64::ADJUSTCALLSTACKDOWN : - IA64::ADJUSTCALLSTACKUP; + Opc = N.getOpcode() == ISD::CALLSEQ_START ? IA64::ADJUSTCALLSTACKDOWN : + IA64::ADJUSTCALLSTACKUP; BuildMI(BB, Opc, 1).addImm(Tmp1); return; } From lattner at cs.uiuc.edu Thu May 12 18:24:58 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Thu, 12 May 2005 18:24:58 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Message-ID: <200505122324.j4CNOwAF013772@apoc.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen/SelectionDAG: LegalizeDAG.cpp updated: 1.117 -> 1.118 --- Log message: update comment --- Diffs of the changes: (+1 -1) LegalizeDAG.cpp | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-) Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.117 llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.118 --- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.117 Thu May 12 18:24:06 2005 +++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Thu May 12 18:24:44 2005 @@ -326,7 +326,7 @@ case ISD::CALLSEQ_START: case ISD::CALLSEQ_END: Tmp1 = LegalizeOp(Node->getOperand(0)); // Legalize the chain. - // There is no need to legalize the size argument (Operand #1) + // Do not try to legalize the target-specific arguments (#1+) Tmp2 = Node->getOperand(0); if (Tmp1 != Tmp2) { Node->setAdjCallChain(Tmp1); From lattner at cs.uiuc.edu Thu May 12 18:51:57 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Thu, 12 May 2005 18:51:57 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp Message-ID: <200505122351.j4CNpvan014581@apoc.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen/SelectionDAG: SelectionDAG.cpp updated: 1.109 -> 1.110 --- Log message: fix a bad typeo --- Diffs of the changes: (+2 -2) SelectionDAG.cpp | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) Index: llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp diff -u llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:1.109 llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:1.110 --- llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:1.109 Thu May 12 18:24:06 2005 +++ llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp Thu May 12 18:51:40 2005 @@ -1690,8 +1690,8 @@ case ISD::BRCONDTWOWAY: return "brcondtwoway"; case ISD::RET: return "ret"; case ISD::CALL: return "call"; - case ISD::CALLSEQ_START: return "callseq_end"; - case ISD::CALLSEQ_END: return "callseq_start"; + case ISD::CALLSEQ_START: return "callseq_start"; + case ISD::CALLSEQ_END: return "callseq_end"; // Other operators case ISD::LOAD: return "load"; From lattner at cs.uiuc.edu Thu May 12 23:21:15 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Thu, 12 May 2005 23:21:15 -0500 Subject: [llvm-commits] CVS: llvm/test/Regression/CodeGen/X86/fast-cc-pass-in-regs.ll Message-ID: <200505130421.j4D4LFbG014878@apoc.cs.uiuc.edu> Changes in directory llvm/test/Regression/CodeGen/X86: fast-cc-pass-in-regs.ll updated: 1.1 -> 1.2 --- Log message: add a correct run line --- Diffs of the changes: (+1 -1) fast-cc-pass-in-regs.ll | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-) Index: llvm/test/Regression/CodeGen/X86/fast-cc-pass-in-regs.ll diff -u llvm/test/Regression/CodeGen/X86/fast-cc-pass-in-regs.ll:1.1 llvm/test/Regression/CodeGen/X86/fast-cc-pass-in-regs.ll:1.2 --- llvm/test/Regression/CodeGen/X86/fast-cc-pass-in-regs.ll:1.1 Thu May 12 18:09:04 2005 +++ llvm/test/Regression/CodeGen/X86/fast-cc-pass-in-regs.ll Thu May 12 23:20:57 2005 @@ -1,4 +1,4 @@ -; llvm-as < %s | llc -x86-asm-syntax=intel -enable-x86-fastcc | grep 'mov %EDX, 1' +; RUN: llvm-as < %s | llc -x86-asm-syntax=intel -enable-x86-fastcc | grep 'mov %EDX, 1' ; check that fastcc is passing stuff in regs. From lattner at cs.uiuc.edu Thu May 12 23:45:29 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Thu, 12 May 2005 23:45:29 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Message-ID: <200505130445.j4D4jTRG015536@apoc.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen/SelectionDAG: LegalizeDAG.cpp updated: 1.118 -> 1.119 --- Log message: do not call expandop on the same value more than once. This fixes X86/2004-02-22-Casts.llx --- Diffs of the changes: (+5 -4) LegalizeDAG.cpp | 9 +++++---- 1 files changed, 5 insertions(+), 4 deletions(-) Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.118 llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.119 --- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.118 Thu May 12 18:24:44 2005 +++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Thu May 12 23:45:13 2005 @@ -2131,10 +2131,6 @@ assert(Source.getValueType() == MVT::i64 && "Only handle expand from i64!"); if (!isSigned) { - // If this is unsigned, and not supported, first perform the conversion to - // signed, then adjust the result if the sign bit is set. - SDOperand SignedConv = ExpandIntToFP(true, DestTy, Source); - assert(Source.getValueType() == MVT::i64 && "This only works for 64-bit -> FP"); // The 64-bit value loaded will be incorrectly if the 'sign bit' of the @@ -2143,6 +2139,11 @@ SDOperand Lo, Hi; ExpandOp(Source, Lo, Hi); + // If this is unsigned, and not supported, first perform the conversion to + // signed, then adjust the result if the sign bit is set. + SDOperand SignedConv = ExpandIntToFP(true, DestTy, + DAG.getNode(ISD::BUILD_PAIR, Source.getValueType(), Lo, Hi)); + SDOperand SignSet = DAG.getSetCC(ISD::SETLT, TLI.getSetCCResultTy(), Hi, DAG.getConstant(0, Hi.getValueType())); SDOperand Zero = getIntPtrConstant(0), Four = getIntPtrConstant(4); From lattner at cs.uiuc.edu Thu May 12 23:52:14 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Thu, 12 May 2005 23:52:14 -0500 Subject: [llvm-commits] CVS: llvm/test/Regression/Debugger/funccall.ll Message-ID: <200505130452.j4D4qEIE015610@apoc.cs.uiuc.edu> Changes in directory llvm/test/Regression/Debugger: funccall.ll updated: 1.10 -> 1.11 --- Log message: disable this test for now. --- Diffs of the changes: (+1 -0) funccall.ll | 1 + 1 files changed, 1 insertion(+) Index: llvm/test/Regression/Debugger/funccall.ll diff -u llvm/test/Regression/Debugger/funccall.ll:1.10 llvm/test/Regression/Debugger/funccall.ll:1.11 --- llvm/test/Regression/Debugger/funccall.ll:1.10 Fri Mar 11 21:43:38 2005 +++ llvm/test/Regression/Debugger/funccall.ll Thu May 12 23:51:58 2005 @@ -8,6 +8,7 @@ ;; RUN: llvm-as -f %s -o %t.bc ;; RUN: llvm-db %t.bc < %t.commands | grep 'in main at funccall.c:11:2' +;; XFAIL: * ;; Debugger type declarations %lldb.compile_unit = type { uint, ushort, ushort, sbyte*, sbyte*, sbyte*, {}* } From lattner at cs.uiuc.edu Fri May 13 00:06:31 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Fri, 13 May 2005 00:06:31 -0500 Subject: [llvm-commits] CVS: llvm-test/Makefile.config.in Message-ID: <200505130506.j4D56Vuc016627@apoc.cs.uiuc.edu> Changes in directory llvm-test: Makefile.config.in updated: 1.13 -> 1.14 --- Log message: This is gone --- Diffs of the changes: (+0 -4) Makefile.config.in | 4 ---- 1 files changed, 4 deletions(-) Index: llvm-test/Makefile.config.in diff -u llvm-test/Makefile.config.in:1.13 llvm-test/Makefile.config.in:1.14 --- llvm-test/Makefile.config.in:1.13 Sun Apr 24 17:25:59 2005 +++ llvm-test/Makefile.config.in Fri May 13 00:06:14 2005 @@ -68,9 +68,5 @@ @USE_BOXEDSIM@ BOXEDSIM_ROOT := @BOXEDSIM_ROOT@ -# Path to the Perfect Club benchmarks source code - at USE_PERFECT@ -PERFECT_ROOT := @PERFECT_ROOT@ - # Disable LLC diffs for testing. @DISABLE_LLC_DIFFS@ From lattner at cs.uiuc.edu Fri May 13 00:09:27 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Fri, 13 May 2005 00:09:27 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Message-ID: <200505130509.j4D59RDR016642@apoc.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen/SelectionDAG: LegalizeDAG.cpp updated: 1.119 -> 1.120 --- Log message: rename variables and functions to match renamed DAG nodes. Bonus feature: I can actually remember which one is which now! --- Diffs of the changes: (+32 -32) LegalizeDAG.cpp | 64 ++++++++++++++++++++++++++++---------------------------- 1 files changed, 32 insertions(+), 32 deletions(-) Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.119 llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.120 --- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.119 Thu May 12 23:45:13 2005 +++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Fri May 13 00:09:11 2005 @@ -1939,10 +1939,10 @@ return true; } -/// FindLatestAdjCallStackDown - Scan up the dag to find the latest (highest -/// NodeDepth) node that is an AdjCallStackDown operation and occurs later than +/// FindLatestCallSeqStart - Scan up the dag to find the latest (highest +/// NodeDepth) node that is an CallSeqStart operation and occurs later than /// Found. -static void FindLatestAdjCallStackDown(SDNode *Node, SDNode *&Found) { +static void FindLatestCallSeqStart(SDNode *Node, SDNode *&Found) { if (Node->getNodeDepth() <= Found->getNodeDepth()) return; // If we found an CALLSEQ_START, we already know this node occurs later @@ -1956,18 +1956,18 @@ assert(Node->getNumOperands() != 0 && "All leaves should have depth equal to the entry node!"); for (unsigned i = 0, e = Node->getNumOperands()-1; i != e; ++i) - FindLatestAdjCallStackDown(Node->getOperand(i).Val, Found); + FindLatestCallSeqStart(Node->getOperand(i).Val, Found); // Tail recurse for the last iteration. - FindLatestAdjCallStackDown(Node->getOperand(Node->getNumOperands()-1).Val, + FindLatestCallSeqStart(Node->getOperand(Node->getNumOperands()-1).Val, Found); } -/// FindEarliestAdjCallStackUp - Scan down the dag to find the earliest (lowest -/// NodeDepth) node that is an AdjCallStackUp operation and occurs more recent +/// FindEarliestCallSeqEnd - Scan down the dag to find the earliest (lowest +/// NodeDepth) node that is an CallSeqEnd operation and occurs more recent /// than Found. -static void FindEarliestAdjCallStackUp(SDNode *Node, SDNode *&Found) { +static void FindEarliestCallSeqEnd(SDNode *Node, SDNode *&Found) { if (Found && Node->getNodeDepth() >= Found->getNodeDepth()) return; // If we found an CALLSEQ_END, we already know this node occurs earlier @@ -1981,22 +1981,22 @@ SDNode::use_iterator UI = Node->use_begin(), E = Node->use_end(); if (UI == E) return; for (--E; UI != E; ++UI) - FindEarliestAdjCallStackUp(*UI, Found); + FindEarliestCallSeqEnd(*UI, Found); // Tail recurse for the last iteration. - FindEarliestAdjCallStackUp(*UI, Found); + FindEarliestCallSeqEnd(*UI, Found); } -/// FindAdjCallStackUp - Given a chained node that is part of a call sequence, +/// FindCallSeqEnd - Given a chained node that is part of a call sequence, /// find the CALLSEQ_END node that terminates the call sequence. -static SDNode *FindAdjCallStackUp(SDNode *Node) { +static SDNode *FindCallSeqEnd(SDNode *Node) { if (Node->getOpcode() == ISD::CALLSEQ_END) return Node; if (Node->use_empty()) - return 0; // No adjcallstackup + return 0; // No CallSeqEnd if (Node->hasOneUse()) // Simple case, only has one user to check. - return FindAdjCallStackUp(*Node->use_begin()); + return FindCallSeqEnd(*Node->use_begin()); SDOperand TheChain(Node, Node->getNumValues()-1); assert(TheChain.getValueType() == MVT::Other && "Is not a token chain!"); @@ -2009,21 +2009,21 @@ SDNode *User = *UI; for (unsigned i = 0, e = User->getNumOperands(); i != e; ++i) if (User->getOperand(i) == TheChain) - return FindAdjCallStackUp(User); + return FindCallSeqEnd(User); } assert(0 && "Unreachable"); abort(); } -/// FindAdjCallStackDown - Given a chained node that is part of a call sequence, +/// FindCallSeqStart - Given a chained node that is part of a call sequence, /// find the CALLSEQ_START node that initiates the call sequence. -static SDNode *FindAdjCallStackDown(SDNode *Node) { - assert(Node && "Didn't find adjcallstackdown for a call??"); +static SDNode *FindCallSeqStart(SDNode *Node) { + assert(Node && "Didn't find callseq_start for a call??"); if (Node->getOpcode() == ISD::CALLSEQ_START) return Node; assert(Node->getOperand(0).getValueType() == MVT::Other && "Node doesn't have a token chain argument!"); - return FindAdjCallStackDown(Node->getOperand(0).Val); + return FindCallSeqStart(Node->getOperand(0).Val); } @@ -2035,31 +2035,31 @@ /// end of the call chain. static SDOperand FindInputOutputChains(SDNode *OpNode, SDNode *&OutChain, SDOperand Entry) { - SDNode *LatestAdjCallStackDown = Entry.Val; - SDNode *LatestAdjCallStackUp = 0; - FindLatestAdjCallStackDown(OpNode, LatestAdjCallStackDown); - //std::cerr<<"Found node: "; LatestAdjCallStackDown->dump(); std::cerr <<"\n"; + SDNode *LatestCallSeqStart = Entry.Val; + SDNode *LatestCallSeqEnd = 0; + FindLatestCallSeqStart(OpNode, LatestCallSeqStart); + //std::cerr<<"Found node: "; LatestCallSeqStart->dump(); std::cerr <<"\n"; // It is possible that no ISD::CALLSEQ_START was found because there is no // previous call in the function. LatestCallStackDown may in that case be // the entry node itself. Do not attempt to find a matching CALLSEQ_END // unless LatestCallStackDown is an CALLSEQ_START. - if (LatestAdjCallStackDown->getOpcode() == ISD::CALLSEQ_START) - LatestAdjCallStackUp = FindAdjCallStackUp(LatestAdjCallStackDown); + if (LatestCallSeqStart->getOpcode() == ISD::CALLSEQ_START) + LatestCallSeqEnd = FindCallSeqEnd(LatestCallSeqStart); else - LatestAdjCallStackUp = Entry.Val; - assert(LatestAdjCallStackUp && "NULL return from FindAdjCallStackUp"); + LatestCallSeqEnd = Entry.Val; + assert(LatestCallSeqEnd && "NULL return from FindCallSeqEnd"); // Finally, find the first call that this must come before, first we find the - // adjcallstackup that ends the call. + // CallSeqEnd that ends the call. OutChain = 0; - FindEarliestAdjCallStackUp(OpNode, OutChain); + FindEarliestCallSeqEnd(OpNode, OutChain); - // If we found one, translate from the adj up to the adjdown. + // If we found one, translate from the adj up to the callseq_start. if (OutChain) - OutChain = FindAdjCallStackDown(OutChain); + OutChain = FindCallSeqStart(OutChain); - return SDOperand(LatestAdjCallStackUp, 0); + return SDOperand(LatestCallSeqEnd, 0); } /// SpliceCallInto - Given the result chain of a libcall (CallResult), and a From lattner at cs.uiuc.edu Fri May 13 00:17:14 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Fri, 13 May 2005 00:17:14 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Message-ID: <200505130517.j4D5HEw4016972@apoc.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen/SelectionDAG: LegalizeDAG.cpp updated: 1.120 -> 1.121 --- Log message: Fix a problem that nate reduced for me. --- Diffs of the changes: (+2 -1) LegalizeDAG.cpp | 3 ++- 1 files changed, 2 insertions(+), 1 deletion(-) Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.120 llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.121 --- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.120 Fri May 13 00:09:11 2005 +++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Fri May 13 00:17:00 2005 @@ -2009,7 +2009,8 @@ SDNode *User = *UI; for (unsigned i = 0, e = User->getNumOperands(); i != e; ++i) if (User->getOperand(i) == TheChain) - return FindCallSeqEnd(User); + if (SDNode *Result = FindCallSeqEnd(User)) + return Result; } assert(0 && "Unreachable"); abort(); From lattner at cs.uiuc.edu Fri May 13 00:31:02 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Fri, 13 May 2005 00:31:02 -0500 Subject: [llvm-commits] CVS: llvm-gcc/gcc/llvm-types.c Message-ID: <200505130531.j4D5V2JZ018311@apoc.cs.uiuc.edu> Changes in directory llvm-gcc/gcc: llvm-types.c updated: 1.21 -> 1.22 --- Log message: Fix a bug in a recent patch that caused llvm-gcc to crash on recursive unions sometimes. This fixes the 126.gcc failure. --- Diffs of the changes: (+5 -2) llvm-types.c | 7 +++++-- 1 files changed, 5 insertions(+), 2 deletions(-) Index: llvm-gcc/gcc/llvm-types.c diff -u llvm-gcc/gcc/llvm-types.c:1.21 llvm-gcc/gcc/llvm-types.c:1.22 --- llvm-gcc/gcc/llvm-types.c:1.21 Tue May 10 17:33:16 2005 +++ llvm-gcc/gcc/llvm-types.c Fri May 13 00:30:45 2005 @@ -952,8 +952,11 @@ /* Check to see that element i+1 starts at offsetof(i)+sizeof(STy[i]). */ for (i = 0, e = Ty->NumElements; i != e-1; ++i) - if (Ty->x.Struct.MemberOffsets[i] + llvm_type_get_size(Ty->Elements[i]) != - Ty->x.Struct.MemberOffsets[i+1]) + if (Ty->Elements[i] == 0) + return 1; + else if (Ty->x.Struct.MemberOffsets[i] + + llvm_type_get_size(Ty->Elements[i]) != + Ty->x.Struct.MemberOffsets[i+1]) return 1; /* Check for tail padding. */ From lattner at cs.uiuc.edu Fri May 13 01:10:29 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Fri, 13 May 2005 01:10:29 -0500 Subject: [llvm-commits] CVS: llvm/lib/Transforms/Scalar/LowerInvoke.cpp Message-ID: <200505130610.j4D6AT7q021884@apoc.cs.uiuc.edu> Changes in directory llvm/lib/Transforms/Scalar: LowerInvoke.cpp updated: 1.23 -> 1.24 --- Log message: Prefer int 0 instead of long 0 for GEP arguments. --- Diffs of the changes: (+3 -3) LowerInvoke.cpp | 6 +++--- 1 files changed, 3 insertions(+), 3 deletions(-) Index: llvm/lib/Transforms/Scalar/LowerInvoke.cpp diff -u llvm/lib/Transforms/Scalar/LowerInvoke.cpp:1.23 llvm/lib/Transforms/Scalar/LowerInvoke.cpp:1.24 --- llvm/lib/Transforms/Scalar/LowerInvoke.cpp:1.23 Fri May 6 01:48:21 2005 +++ llvm/lib/Transforms/Scalar/LowerInvoke.cpp Fri May 13 01:10:12 2005 @@ -157,7 +157,7 @@ GlobalVariable *MsgGV = new GlobalVariable(Msg->getType(), true, GlobalValue::InternalLinkage, Msg, "abortmsg", &M); - std::vector GEPIdx(2, Constant::getNullValue(Type::LongTy)); + std::vector GEPIdx(2, Constant::getNullValue(Type::IntTy)); AbortMessage = ConstantExpr::getGetElementPtr(MsgGV, GEPIdx); } else { // The abort message for cheap EH support tells the user that EH is not @@ -170,7 +170,7 @@ GlobalVariable *MsgGV = new GlobalVariable(Msg->getType(), true, GlobalValue::InternalLinkage, Msg, "abortmsg", &M); - std::vector GEPIdx(2, Constant::getNullValue(Type::LongTy)); + std::vector GEPIdx(2, Constant::getNullValue(Type::IntTy)); AbortMessage = ConstantExpr::getGetElementPtr(MsgGV, GEPIdx); } } @@ -355,7 +355,7 @@ // Now that we have a pointer to the whole record, remove the entry from the // JBList. std::vector Idx; - Idx.push_back(Constant::getNullValue(Type::LongTy)); + Idx.push_back(Constant::getNullValue(Type::IntTy)); Idx.push_back(ConstantUInt::get(Type::UIntTy, 0)); Value *NextFieldPtr = new GetElementPtrInst(RecPtr, Idx, "NextField", RI); Value *NextRec = new LoadInst(NextFieldPtr, "NextRecord", RI); From lattner at cs.uiuc.edu Fri May 13 01:27:26 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Fri, 13 May 2005 01:27:26 -0500 Subject: [llvm-commits] CVS: llvm/lib/Transforms/Scalar/LowerInvoke.cpp Message-ID: <200505130627.j4D6ROjo022539@apoc.cs.uiuc.edu> Changes in directory llvm/lib/Transforms/Scalar: LowerInvoke.cpp updated: 1.24 -> 1.25 --- Log message: When lowering invokes to calls, amke sure to preserve the calling conv. This fixes Ptrdist/anagram with x86 llcbeta --- Diffs of the changes: (+9 -7) LowerInvoke.cpp | 16 +++++++++------- 1 files changed, 9 insertions(+), 7 deletions(-) Index: llvm/lib/Transforms/Scalar/LowerInvoke.cpp diff -u llvm/lib/Transforms/Scalar/LowerInvoke.cpp:1.24 llvm/lib/Transforms/Scalar/LowerInvoke.cpp:1.25 --- llvm/lib/Transforms/Scalar/LowerInvoke.cpp:1.24 Fri May 13 01:10:12 2005 +++ llvm/lib/Transforms/Scalar/LowerInvoke.cpp Fri May 13 01:27:02 2005 @@ -205,9 +205,10 @@ if (InvokeInst *II = dyn_cast(BB->getTerminator())) { // Insert a normal call instruction... std::string Name = II->getName(); II->setName(""); - Value *NewCall = new CallInst(II->getCalledValue(), - std::vector(II->op_begin()+3, - II->op_end()), Name,II); + CallInst *NewCall = new CallInst(II->getCalledValue(), + std::vector(II->op_begin()+3, + II->op_end()), Name, II); + NewCall->setCallingConv(II->getCallingConv()); II->replaceAllUsesWith(NewCall); // Insert an unconditional branch to the normal destination. @@ -286,10 +287,11 @@ // Insert a normal call instruction on the normal execution path. std::string Name = II->getName(); II->setName(""); - Value *NewCall = new CallInst(II->getCalledValue(), - std::vector(II->op_begin()+3, - II->op_end()), Name, - InsertLoc); + CallInst *NewCall = new CallInst(II->getCalledValue(), + std::vector(II->op_begin()+3, + II->op_end()), Name, + InsertLoc); + NewCall->setCallingConv(II->getCallingConv()); II->replaceAllUsesWith(NewCall); // If we got this far, then no exception was thrown and we can pop our From reid at x10sys.com Fri May 13 02:05:48 2005 From: reid at x10sys.com (Reid Spencer) Date: Fri, 13 May 2005 02:05:48 -0500 Subject: [llvm-commits] CVS: llvm/lib/Support/Compressor.cpp Message-ID: <200505130705.CAA01184@zion.cs.uiuc.edu> Changes in directory llvm/lib/Support: Compressor.cpp updated: 1.17 -> 1.18 --- Log message: Make sure that decompression checks for the case that bzip2 returns BZ_OK (meaning more data is expected) but there is no more input data. In this case, the input file is probably truncated. Generate an exception that indicates this case when its detected. --- Diffs of the changes: (+6 -4) Compressor.cpp | 10 ++++++---- 1 files changed, 6 insertions(+), 4 deletions(-) Index: llvm/lib/Support/Compressor.cpp diff -u llvm/lib/Support/Compressor.cpp:1.17 llvm/lib/Support/Compressor.cpp:1.18 --- llvm/lib/Support/Compressor.cpp:1.17 Thu Apr 21 23:08:29 2005 +++ llvm/lib/Support/Compressor.cpp Fri May 13 02:05:37 2005 @@ -408,7 +408,8 @@ // Decompress it int bzerr = BZ_OK; - while (BZ_OK == (bzerr = BZ2_bzDecompress(&bzdata))) { + while ( BZ_OK == (bzerr = BZ2_bzDecompress(&bzdata)) && + bzdata.avail_in != 0 ) { if (0 != getdata_uns(bzdata.next_out, bzdata.avail_out,cb,context)) { BZ2_bzDecompressEnd(&bzdata); throw std::string("Can't allocate output buffer"); @@ -420,11 +421,12 @@ case BZ_MEM_ERROR: throw std::string("Out of memory"); case BZ_DATA_ERROR: throw std::string("Data integrity error"); case BZ_DATA_ERROR_MAGIC:throw std::string("Data is not BZIP2"); + case BZ_OK: throw std::string("Insufficient input for bzip2"); + case BZ_STREAM_END: break; default: throw("Ooops"); - case BZ_STREAM_END: - break; } + // Finish result = bzdata.total_out_lo32; if (sizeof(size_t) == sizeof(uint64_t)) @@ -474,7 +476,7 @@ // Set up the context and writer WriterContext ctxt(&out,size / 2); - // Compress everything after the magic number (which we'll alter) + // Decompress everything after the magic number (which we'll alter) size_t zipSize = Compressor::decompress(in,size, WriterContext::callback, (void*)&ctxt); From lattner at cs.uiuc.edu Fri May 13 02:08:21 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Fri, 13 May 2005 02:08:21 -0500 Subject: [llvm-commits] CVS: llvm/include/llvm/CodeGen/MachineFunction.h Message-ID: <200505130708.j4D78Lrq008869@apoc.cs.uiuc.edu> Changes in directory llvm/include/llvm/CodeGen: MachineFunction.h updated: 1.53 -> 1.54 --- Log message: allow a virtual register to be associated with live-in values. --- Diffs of the changes: (+14 -7) MachineFunction.h | 21 ++++++++++++++------- 1 files changed, 14 insertions(+), 7 deletions(-) Index: llvm/include/llvm/CodeGen/MachineFunction.h diff -u llvm/include/llvm/CodeGen/MachineFunction.h:1.53 llvm/include/llvm/CodeGen/MachineFunction.h:1.54 --- llvm/include/llvm/CodeGen/MachineFunction.h:1.53 Thu Apr 21 22:45:18 2005 +++ llvm/include/llvm/CodeGen/MachineFunction.h Fri May 13 02:07:52 2005 @@ -108,7 +108,10 @@ /// LiveIns/LiveOuts - Keep track of the physical registers that are /// livein/liveout of the function. Live in values are typically arguments in /// registers, live out values are typically return values in registers. - std::vector LiveIns, LiveOuts; + /// LiveIn values are allowed to have virtual registers associated with them, + /// stored in the second element. + std::vector > LiveIns; + std::vector LiveOuts; public: MachineFunction(const Function *Fn, const TargetMachine &TM); @@ -177,16 +180,20 @@ /// addLiveIn/Out - Add the specified register as a live in/out. Note that it /// is an error to add the same register to the same set more than once. - void addLiveIn(unsigned Reg) { LiveIns.push_back(Reg); } + void addLiveIn(unsigned Reg, unsigned vreg = 0) { + LiveIns.push_back(std::make_pair(Reg, vreg)); + } void addLiveOut(unsigned Reg) { LiveOuts.push_back(Reg); } // Iteration support for live in/out sets. These sets are kept in sorted // order by their register number. - typedef std::vector::const_iterator liveinout_iterator; - liveinout_iterator livein_begin() const { return LiveIns.begin(); } - liveinout_iterator livein_end() const { return LiveIns.end(); } - liveinout_iterator liveout_begin() const { return LiveOuts.begin(); } - liveinout_iterator liveout_end() const { return LiveOuts.end(); } + typedef std::vector >::const_iterator + livein_iterator; + typedef std::vector::const_iterator liveout_iterator; + livein_iterator livein_begin() const { return LiveIns.begin(); } + livein_iterator livein_end() const { return LiveIns.end(); } + liveout_iterator liveout_begin() const { return LiveOuts.begin(); } + liveout_iterator liveout_end() const { return LiveOuts.end(); } /// getBlockNumbered - MachineBasicBlocks are automatically numbered when they /// are inserted into the machine function. The block number for a machine From lattner at cs.uiuc.edu Fri May 13 02:08:21 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Fri, 13 May 2005 02:08:21 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/LiveIntervalAnalysis.cpp LiveVariables.cpp Message-ID: <200505130708.j4D78LCB008875@apoc.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen: LiveIntervalAnalysis.cpp updated: 1.139 -> 1.140 LiveVariables.cpp updated: 1.49 -> 1.50 --- Log message: allow a virtual register to be associated with live-in values. --- Diffs of the changes: (+8 -8) LiveIntervalAnalysis.cpp | 8 ++++---- LiveVariables.cpp | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) Index: llvm/lib/CodeGen/LiveIntervalAnalysis.cpp diff -u llvm/lib/CodeGen/LiveIntervalAnalysis.cpp:1.139 llvm/lib/CodeGen/LiveIntervalAnalysis.cpp:1.140 --- llvm/lib/CodeGen/LiveIntervalAnalysis.cpp:1.139 Thu Apr 21 17:33:33 2005 +++ llvm/lib/CodeGen/LiveIntervalAnalysis.cpp Fri May 13 02:08:07 2005 @@ -95,7 +95,7 @@ // beginning of the function that we will pretend "defines" the values. This // is to make the interval analysis simpler by providing a number. if (fn.livein_begin() != fn.livein_end()) { - unsigned FirstLiveIn = *fn.livein_begin(); + unsigned FirstLiveIn = fn.livein_begin()->first; // Find a reg class that contains this live in. const TargetRegisterClass *RC = 0; @@ -128,11 +128,11 @@ // Note intervals due to live-in values. if (fn.livein_begin() != fn.livein_end()) { MachineBasicBlock *Entry = fn.begin(); - for (MachineFunction::liveinout_iterator I = fn.livein_begin(), + for (MachineFunction::livein_iterator I = fn.livein_begin(), E = fn.livein_end(); I != E; ++I) { handlePhysicalRegisterDef(Entry, Entry->begin(), - getOrCreateInterval(*I), 0, 0); - for (const unsigned* AS = mri_->getAliasSet(*I); *AS; ++AS) + getOrCreateInterval(I->first), 0, 0); + for (const unsigned* AS = mri_->getAliasSet(I->first); *AS; ++AS) handlePhysicalRegisterDef(Entry, Entry->begin(), getOrCreateInterval(*AS), 0, 0); } Index: llvm/lib/CodeGen/LiveVariables.cpp diff -u llvm/lib/CodeGen/LiveVariables.cpp:1.49 llvm/lib/CodeGen/LiveVariables.cpp:1.50 --- llvm/lib/CodeGen/LiveVariables.cpp:1.49 Thu Apr 21 17:33:33 2005 +++ llvm/lib/CodeGen/LiveVariables.cpp Fri May 13 02:08:07 2005 @@ -165,11 +165,11 @@ VirtRegInfo.resize(64); // Mark live-in registers as live-in. - for (MachineFunction::liveinout_iterator I = MF.livein_begin(), + for (MachineFunction::livein_iterator I = MF.livein_begin(), E = MF.livein_end(); I != E; ++I) { - assert(MRegisterInfo::isPhysicalRegister(*I) && + assert(MRegisterInfo::isPhysicalRegister(I->first) && "Cannot have a live-in virtual register!"); - HandlePhysRegDef(*I, 0); + HandlePhysRegDef(I->first, 0); } // Calculate live variable information in depth first order on the CFG of the @@ -272,7 +272,7 @@ // it as using all of the live-out values in the function. if (!MBB->empty() && TII.isReturn(MBB->back().getOpcode())) { MachineInstr *Ret = &MBB->back(); - for (MachineFunction::liveinout_iterator I = MF.liveout_begin(), + for (MachineFunction::liveout_iterator I = MF.liveout_begin(), E = MF.liveout_end(); I != E; ++I) { assert(MRegisterInfo::isPhysicalRegister(*I) && "Cannot have a live-in virtual register!"); From lattner at cs.uiuc.edu Fri May 13 02:09:22 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Fri, 13 May 2005 02:09:22 -0500 Subject: [llvm-commits] CVS: llvm/lib/Transforms/Scalar/InstructionCombining.cpp Message-ID: <200505130709.j4D79MmQ009754@apoc.cs.uiuc.edu> Changes in directory llvm/lib/Transforms/Scalar: InstructionCombining.cpp updated: 1.343 -> 1.344 --- Log message: calling a function with the wrong CC is undefined, turn it into an unreachable instruction. This is useful for catching optimizers that don't preserve calling conventions --- Diffs of the changes: (+14 -0) InstructionCombining.cpp | 14 ++++++++++++++ 1 files changed, 14 insertions(+) Index: llvm/lib/Transforms/Scalar/InstructionCombining.cpp diff -u llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.343 llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.344 --- llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.343 Sun May 8 23:58:36 2005 +++ llvm/lib/Transforms/Scalar/InstructionCombining.cpp Fri May 13 02:09:09 2005 @@ -4115,6 +4115,20 @@ Value *Callee = CS.getCalledValue(); + if (Function *CalleeF = dyn_cast(Callee)) + if (CalleeF->getCallingConv() != CS.getCallingConv()) { + Instruction *OldCall = CS.getInstruction(); + // If the call and callee calling conventions don't match, this call must + // be unreachable, as the call is undefined. + new StoreInst(ConstantBool::True, + UndefValue::get(PointerType::get(Type::BoolTy)), OldCall); + if (!OldCall->use_empty()) + OldCall->replaceAllUsesWith(UndefValue::get(OldCall->getType())); + if (isa(OldCall)) // Not worth removing an invoke here. + return EraseInstFromFunction(*OldCall); + return 0; + } + if (isa(Callee) || isa(Callee)) { // This instruction is not reachable, just remove it. We insert a store to // undef so that we know that this code is not reachable, despite the fact From lattner at cs.uiuc.edu Fri May 13 02:23:21 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Fri, 13 May 2005 02:23:21 -0500 Subject: [llvm-commits] CVS: llvm/include/llvm/CodeGen/SelectionDAGISel.h Message-ID: <200505130723.j4D7NLbX014038@apoc.cs.uiuc.edu> Changes in directory llvm/include/llvm/CodeGen: SelectionDAGISel.h updated: 1.4 -> 1.5 --- Log message: add a new method --- Diffs of the changes: (+1 -0) SelectionDAGISel.h | 1 + 1 files changed, 1 insertion(+) Index: llvm/include/llvm/CodeGen/SelectionDAGISel.h diff -u llvm/include/llvm/CodeGen/SelectionDAGISel.h:1.4 llvm/include/llvm/CodeGen/SelectionDAGISel.h:1.5 --- llvm/include/llvm/CodeGen/SelectionDAGISel.h:1.4 Thu Apr 21 15:38:00 2005 +++ llvm/include/llvm/CodeGen/SelectionDAGISel.h Fri May 13 02:23:03 2005 @@ -48,6 +48,7 @@ unsigned MakeReg(MVT::ValueType VT); + virtual void EmitFunctionEntryCode(Function &Fn, MachineFunction &MF) {} virtual void InstructionSelectBasicBlock(SelectionDAG &SD) = 0; private: From lattner at cs.uiuc.edu Fri May 13 02:23:35 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Fri, 13 May 2005 02:23:35 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp Message-ID: <200505130723.j4D7NZ0P014275@apoc.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen/SelectionDAG: SelectionDAGISel.cpp updated: 1.53 -> 1.54 --- Log message: Allow targets to emit code into the entry block of each function --- Diffs of the changes: (+2 -0) SelectionDAGISel.cpp | 2 ++ 1 files changed, 2 insertions(+) Index: llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp diff -u llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.53 llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.54 --- llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.53 Thu May 12 14:56:57 2005 +++ llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp Fri May 13 02:23:21 2005 @@ -932,6 +932,8 @@ FunctionLoweringInfo FuncInfo(TLI, Fn, MF); + EmitFunctionEntryCode(Fn, MF); + for (Function::iterator I = Fn.begin(), E = Fn.end(); I != E; ++I) SelectBasicBlock(I, MF, FuncInfo); From lattner at cs.uiuc.edu Fri May 13 02:33:46 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Fri, 13 May 2005 02:33:46 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp Message-ID: <200505130733.j4D7Xk91015415@apoc.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen/SelectionDAG: SelectionDAGISel.cpp updated: 1.54 -> 1.55 --- Log message: Emit function entry code after lowering hte arguments. --- Diffs of the changes: (+2 -2) SelectionDAGISel.cpp | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) Index: llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp diff -u llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.54 llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.55 --- llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.54 Fri May 13 02:23:21 2005 +++ llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp Fri May 13 02:33:32 2005 @@ -932,8 +932,6 @@ FunctionLoweringInfo FuncInfo(TLI, Fn, MF); - EmitFunctionEntryCode(Fn, MF); - for (Function::iterator I = Fn.begin(), E = Fn.end(); I != E; ++I) SelectBasicBlock(I, MF, FuncInfo); @@ -1012,6 +1010,8 @@ } } } + + EmitFunctionEntryCode(F, SDL.DAG.getMachineFunction()); } // See if there are any block-local arguments that need to be emitted in this From lattner at cs.uiuc.edu Fri May 13 02:38:26 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Fri, 13 May 2005 02:38:26 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/X86/X86ISelPattern.cpp Message-ID: <200505130738.j4D7cQDB016123@apoc.cs.uiuc.edu> Changes in directory llvm/lib/Target/X86: X86ISelPattern.cpp updated: 1.124 -> 1.125 --- Log message: Do not CopyFromReg physregs for live-in values. Instead, create a vreg for each live in, and copy the regs from the vregs. As the very first thing we do in the function, insert copies from the pregs to the vregs. This fixes problems where the token chain of CopyFromReg was not enough to allow reordering of the copyfromreg nodes and other unchained nodes (e.g. div, which clobbers eax on intel). --- Diffs of the changes: (+70 -31) X86ISelPattern.cpp | 101 ++++++++++++++++++++++++++++++++++++----------------- 1 files changed, 70 insertions(+), 31 deletions(-) Index: llvm/lib/Target/X86/X86ISelPattern.cpp diff -u llvm/lib/Target/X86/X86ISelPattern.cpp:1.124 llvm/lib/Target/X86/X86ISelPattern.cpp:1.125 --- llvm/lib/Target/X86/X86ISelPattern.cpp:1.124 Thu May 12 18:23:38 2005 +++ llvm/lib/Target/X86/X86ISelPattern.cpp Fri May 13 02:38:09 2005 @@ -375,6 +375,19 @@ // Note that this can be enhanced in the future to pass fp vals in registers // (when we have a global fp allocator) and do other tricks. // + +/// AddLiveIn - This helper function adds the specified physical register to the +/// MachineFunction as a live in value. It also creates a corresponding virtual +/// register for it. +static unsigned AddLiveIn(MachineFunction &MF, unsigned PReg, + TargetRegisterClass *RC) { + assert(RC->contains(PReg) && "Not the correct regclass!"); + unsigned VReg = MF.getSSARegMap()->createVirtualRegister(RC); + MF.addLiveIn(PReg, VReg); + return VReg; +} + + std::vector X86TargetLowering::LowerFastCCArguments(Function &F, SelectionDAG &DAG) { std::vector ArgValues; @@ -408,9 +421,9 @@ case MVT::i8: if (NumIntRegs < 2) { if (!I->use_empty()) { - MF.addLiveIn(NumIntRegs ? X86::DL : X86::AL); - ArgValue = DAG.getCopyFromReg(NumIntRegs ? X86::DL : X86::AL, MVT::i8, - DAG.getRoot()); + unsigned VReg = AddLiveIn(MF, NumIntRegs ? X86::DL : X86::AL, + X86::R8RegisterClass); + ArgValue = DAG.getCopyFromReg(VReg, MVT::i8, DAG.getRoot()); DAG.setRoot(ArgValue.getValue(1)); } ++NumIntRegs; @@ -422,9 +435,9 @@ case MVT::i16: if (NumIntRegs < 2) { if (!I->use_empty()) { - MF.addLiveIn(NumIntRegs ? X86::DX : X86::AX); - ArgValue = DAG.getCopyFromReg(NumIntRegs ? X86::DX : X86::AX, - MVT::i16, DAG.getRoot()); + unsigned VReg = AddLiveIn(MF, NumIntRegs ? X86::DX : X86::AX, + X86::R16RegisterClass); + ArgValue = DAG.getCopyFromReg(VReg, MVT::i16, DAG.getRoot()); DAG.setRoot(ArgValue.getValue(1)); } ++NumIntRegs; @@ -435,9 +448,9 @@ case MVT::i32: if (NumIntRegs < 2) { if (!I->use_empty()) { - MF.addLiveIn(NumIntRegs ? X86::EDX : X86::EAX); - ArgValue = DAG.getCopyFromReg(NumIntRegs ? X86::EDX : X86::EAX, - MVT::i32, DAG.getRoot()); + unsigned VReg = AddLiveIn(MF,NumIntRegs ? X86::EDX : X86::EAX, + X86::R32RegisterClass); + ArgValue = DAG.getCopyFromReg(VReg, MVT::i32, DAG.getRoot()); DAG.setRoot(ArgValue.getValue(1)); } ++NumIntRegs; @@ -448,11 +461,11 @@ case MVT::i64: if (NumIntRegs == 0) { if (!I->use_empty()) { - MF.addLiveIn(X86::EDX); - MF.addLiveIn(X86::EAX); + unsigned BotReg = AddLiveIn(MF, X86::EAX, X86::R32RegisterClass); + unsigned TopReg = AddLiveIn(MF, X86::EDX, X86::R32RegisterClass); - SDOperand Low=DAG.getCopyFromReg(X86::EAX, MVT::i32, DAG.getRoot()); - SDOperand Hi =DAG.getCopyFromReg(X86::EDX, MVT::i32, Low.getValue(1)); + SDOperand Low=DAG.getCopyFromReg(BotReg, MVT::i32, DAG.getRoot()); + SDOperand Hi =DAG.getCopyFromReg(TopReg, MVT::i32, Low.getValue(1)); DAG.setRoot(Hi.getValue(1)); ArgValue = DAG.getNode(ISD::BUILD_PAIR, MVT::i64, Low, Hi); @@ -461,8 +474,8 @@ break; } else if (NumIntRegs == 1) { if (!I->use_empty()) { - MF.addLiveIn(X86::EDX); - SDOperand Low = DAG.getCopyFromReg(X86::EDX, MVT::i32, DAG.getRoot()); + unsigned BotReg = AddLiveIn(MF, X86::EDX, X86::R32RegisterClass); + SDOperand Low = DAG.getCopyFromReg(BotReg, MVT::i32, DAG.getRoot()); DAG.setRoot(Low.getValue(1)); // Load the high part from memory. @@ -760,6 +773,8 @@ /// SelectionDAGISel when it has created a SelectionDAG for us to codegen. virtual void InstructionSelectBasicBlock(SelectionDAG &DAG); + virtual void EmitFunctionEntryCode(Function &Fn, MachineFunction &MF); + bool isFoldableLoad(SDOperand Op, SDOperand OtherOp, bool FloatPromoteOk = false); void EmitFoldedLoad(SDOperand Op, X86AddressMode &AM); @@ -795,6 +810,36 @@ addFrameReference(BuildMI(BB, X86::FLDCW16m, 4), CWFrameIdx); } +void ISel::EmitFunctionEntryCode(Function &Fn, MachineFunction &MF) { + // If this function has live-in values, emit the copies from pregs to vregs at + // the top of the function, before anything else. + MachineBasicBlock *BB = MF.begin(); + if (MF.livein_begin() != MF.livein_end()) { + SSARegMap *RegMap = MF.getSSARegMap(); + for (MachineFunction::livein_iterator LI = MF.livein_begin(), + E = MF.livein_end(); LI != E; ++LI) { + const TargetRegisterClass *RC = RegMap->getRegClass(LI->second); + if (RC == X86::R8RegisterClass) { + BuildMI(BB, X86::MOV8rr, 1, LI->second).addReg(LI->first); + } else if (RC == X86::R16RegisterClass) { + BuildMI(BB, X86::MOV16rr, 1, LI->second).addReg(LI->first); + } else if (RC == X86::R32RegisterClass) { + BuildMI(BB, X86::MOV32rr, 1, LI->second).addReg(LI->first); + } else if (RC == X86::RFPRegisterClass) { + BuildMI(BB, X86::FpMOV, 1, LI->second).addReg(LI->first); + } else { + assert(0 && "Unknown regclass!"); + } + } + } + + + // If this is main, emit special code for main. + if (Fn.hasExternalLinkage() && Fn.getName() == "main") + EmitSpecialCodeForMain(BB, MF.getFrameInfo()); +} + + /// InstructionSelectBasicBlock - This callback is invoked by SelectionDAGISel /// when it has created a SelectionDAG for us to codegen. void ISel::InstructionSelectBasicBlock(SelectionDAG &DAG) { @@ -807,23 +852,17 @@ // of them is a PHI of a floating point value, we need to insert an // FP_REG_KILL. SSARegMap *RegMap = MF->getSSARegMap(); - for (MachineBasicBlock::iterator I = BB->begin(), E = BB->end(); - I != E; ++I) { - assert(I->getOpcode() == X86::PHI && - "Isn't just PHI nodes?"); - if (RegMap->getRegClass(I->getOperand(0).getReg()) == - X86::RFPRegisterClass) { - ContainsFPCode = true; - break; + if (BB != MF->begin()) + for (MachineBasicBlock::iterator I = BB->begin(), E = BB->end(); + I != E; ++I) { + assert(I->getOpcode() == X86::PHI && + "Isn't just PHI nodes?"); + if (RegMap->getRegClass(I->getOperand(0).getReg()) == + X86::RFPRegisterClass) { + ContainsFPCode = true; + break; + } } - } - - // If this is the entry block of main, emit special code for main. - if (BB == MF->begin()) { - const Function *F = MF->getFunction(); - if (F->hasExternalLinkage() && F->getName() == "main") - EmitSpecialCodeForMain(BB, MF->getFrameInfo()); - } // Compute the RegPressureMap, which is an approximation for the number of // registers required to compute each node. From duraid at octopus.com.au Fri May 13 05:08:45 2005 From: duraid at octopus.com.au (Duraid Madina) Date: Fri, 13 May 2005 05:08:45 -0500 Subject: [llvm-commits] CVS: llvm-test/SingleSource/UnitTests/2005-05-11-Popcount-ffs-fls.c Message-ID: <200505131008.FAA13087@zion.cs.uiuc.edu> Changes in directory llvm-test/SingleSource/UnitTests: 2005-05-11-Popcount-ffs-fls.c updated: 1.2 -> 1.3 --- Log message: stop testing ctz/clz of zero, as GCC doesn't define these. now, the native/LLC /CBE outputs should match so this test can finally start passing --- Diffs of the changes: (+5 -1) 2005-05-11-Popcount-ffs-fls.c | 6 +++++- 1 files changed, 5 insertions(+), 1 deletion(-) Index: llvm-test/SingleSource/UnitTests/2005-05-11-Popcount-ffs-fls.c diff -u llvm-test/SingleSource/UnitTests/2005-05-11-Popcount-ffs-fls.c:1.2 llvm-test/SingleSource/UnitTests/2005-05-11-Popcount-ffs-fls.c:1.3 --- llvm-test/SingleSource/UnitTests/2005-05-11-Popcount-ffs-fls.c:1.2 Thu May 12 14:36:19 2005 +++ llvm-test/SingleSource/UnitTests/2005-05-11-Popcount-ffs-fls.c Fri May 13 05:08:33 2005 @@ -49,7 +49,11 @@ int main(void) { long long l; - for(i=-10; i<139045193; i*=-3) { + /* note: we don't test zero, because the _native_ test will get it + * wrong (GCC returns garbage for ctz/clz of 0), and the nightly tester + * will wrongly conclude that CBE and LLC are both failing. + */ + for(i=10; i<139045193; i*=-3) { printf("LLVM: n: %d, clz(n): %d, popcount(n): %d, ctz(n): %d\n", i, __builtin_clz(i), __builtin_popcount(i), __builtin_ctz(i)); printf("REF : n: %d, clz(n): %d, popcount(n): %d, ctz(n): %d\n", From alenhar2 at cs.uiuc.edu Fri May 13 10:42:24 2005 From: alenhar2 at cs.uiuc.edu (Andrew Lenharth) Date: Fri, 13 May 2005 10:42:24 -0500 Subject: [llvm-commits] CVS: llvm/test/Regression/CodeGen/Alpha/zapnot2.ll Message-ID: <200505131542.j4DFgOHr025941@apoc.cs.uiuc.edu> Changes in directory llvm/test/Regression/CodeGen/Alpha: zapnot2.ll updated: 1.1 -> 1.2 --- Log message: fixed test case --- Diffs of the changes: (+1 -1) zapnot2.ll | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-) Index: llvm/test/Regression/CodeGen/Alpha/zapnot2.ll diff -u llvm/test/Regression/CodeGen/Alpha/zapnot2.ll:1.1 llvm/test/Regression/CodeGen/Alpha/zapnot2.ll:1.2 --- llvm/test/Regression/CodeGen/Alpha/zapnot2.ll:1.1 Thu Apr 14 11:17:49 2005 +++ llvm/test/Regression/CodeGen/Alpha/zapnot2.ll Fri May 13 10:42:07 2005 @@ -6,5 +6,5 @@ long %bar(long %x) { entry: %tmp.1 = and long %x, 255 ; [#uses=1] - ret long %tmp.2 + ret long %tmp.1 } From lattner at cs.uiuc.edu Fri May 13 10:45:12 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Fri, 13 May 2005 10:45:12 -0500 Subject: [llvm-commits] CVS: llvm/test/Regression/CodeGen/Alpha/dg.exp Message-ID: <200505131545.j4DFjCjD026576@apoc.cs.uiuc.edu> Changes in directory llvm/test/Regression/CodeGen/Alpha: dg.exp added (r1.1) --- Log message: let dj run this --- Diffs of the changes: (+3 -0) dg.exp | 3 +++ 1 files changed, 3 insertions(+) Index: llvm/test/Regression/CodeGen/Alpha/dg.exp diff -c /dev/null llvm/test/Regression/CodeGen/Alpha/dg.exp:1.1 *** /dev/null Fri May 13 10:45:05 2005 --- llvm/test/Regression/CodeGen/Alpha/dg.exp Fri May 13 10:44:55 2005 *************** *** 0 **** --- 1,3 ---- + load_lib llvm-dg.exp + + llvm-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.{ll}]] $objdir $srcdir $subdir $target_triplet $llvmgcc $llvmgxx $prcontext From lattner at cs.uiuc.edu Fri May 13 10:48:56 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Fri, 13 May 2005 10:48:56 -0500 Subject: [llvm-commits] CVS: llvm/test/Regression/Transforms/Inline/invoke_test-3.ll Message-ID: <200505131548.j4DFmu4s027613@apoc.cs.uiuc.edu> Changes in directory llvm/test/Regression/Transforms/Inline: invoke_test-3.ll updated: 1.4 -> 1.5 --- Log message: Fix buggy test --- Diffs of the changes: (+2 -4) invoke_test-3.ll | 6 ++---- 1 files changed, 2 insertions(+), 4 deletions(-) Index: llvm/test/Regression/Transforms/Inline/invoke_test-3.ll diff -u llvm/test/Regression/Transforms/Inline/invoke_test-3.ll:1.4 llvm/test/Regression/Transforms/Inline/invoke_test-3.ll:1.5 --- llvm/test/Regression/Transforms/Inline/invoke_test-3.ll:1.4 Tue Sep 16 10:29:32 2003 +++ llvm/test/Regression/Transforms/Inline/invoke_test-3.ll Fri May 13 10:48:41 2005 @@ -1,10 +1,9 @@ ; Test that any rethrown exceptions in an inlined function are automatically ; turned into branches to the invoke destination. -; RUN: llvm-as < %s | opt -inline | llvm-dis | not grep 'call void %llvm.unwind' +; RUN: llvm-as < %s | opt -inline | llvm-dis | not grep unwind$ declare void %might_throw() -declare void %llvm.unwind() implementation @@ -13,8 +12,7 @@ cont: ret int 0 exc: ; This just rethrows the exception! - call void %llvm.unwind() - ret int 123 ; DEAD! + unwind } ; caller returns true if might_throw throws an exception... which gets From lattner at cs.uiuc.edu Fri May 13 10:51:22 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Fri, 13 May 2005 10:51:22 -0500 Subject: [llvm-commits] CVS: llvm/test/Regression/Transforms/LevelRaise/2002-04-09-MissedRaise.ll Message-ID: <200505131551.j4DFpMAB028995@apoc.cs.uiuc.edu> Changes in directory llvm/test/Regression/Transforms/LevelRaise: 2002-04-09-MissedRaise.ll updated: 1.3 -> 1.4 --- Log message: fix buggy test --- Diffs of the changes: (+4 -4) 2002-04-09-MissedRaise.ll | 8 ++++---- 1 files changed, 4 insertions(+), 4 deletions(-) Index: llvm/test/Regression/Transforms/LevelRaise/2002-04-09-MissedRaise.ll diff -u llvm/test/Regression/Transforms/LevelRaise/2002-04-09-MissedRaise.ll:1.3 llvm/test/Regression/Transforms/LevelRaise/2002-04-09-MissedRaise.ll:1.4 --- llvm/test/Regression/Transforms/LevelRaise/2002-04-09-MissedRaise.ll:1.3 Tue Sep 16 10:29:36 2003 +++ llvm/test/Regression/Transforms/LevelRaise/2002-04-09-MissedRaise.ll Fri May 13 10:51:07 2005 @@ -18,7 +18,7 @@ br label %bb1 bb1: ;[#uses=2] - %reg108 = cast int * %x to sbyte * ; [#uses=1] + %reg108 = cast int * %x to ulong ; [#uses=1] %cond219 = setgt ulong 12, 13 ; [#uses=1] br bool %cond219, label %bb3, label %bb2 @@ -33,9 +33,9 @@ %cast222 = cast int %reg111 to uint ; [#uses=1] %reg113 = shl uint %cast222, ubyte 2 ; [#uses=1] %cast114 = cast uint %reg113 to ulong ; [#uses=1] - %cast115 = cast ulong %cast114 to sbyte * ; [#uses=1] - %reg116 = add sbyte * %reg108, %cast115 ; [#uses=1] - %cast223 = cast sbyte * %reg116 to int * ; [#uses=1] + %cast115 = cast ulong %cast114 to ulong ; [#uses=1] + %reg116 = add ulong %reg108, %cast115 ; [#uses=1] + %cast223 = cast ulong %reg116 to int * ; [#uses=1] store int %j, int * %cast223 %reg118 = add uint %cast224, 1 ; [#uses=1] %cond220 = setle uint %reg118, 13 ; [#uses=1] From lattner at cs.uiuc.edu Fri May 13 10:51:46 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Fri, 13 May 2005 10:51:46 -0500 Subject: [llvm-commits] CVS: llvm/test/Regression/Transforms/SCCP/sccptest.ll Message-ID: <200505131551.j4DFpkgV029077@apoc.cs.uiuc.edu> Changes in directory llvm/test/Regression/Transforms/SCCP: sccptest.ll updated: 1.5 -> 1.6 --- Log message: fix buggy test --- Diffs of the changes: (+1 -1) sccptest.ll | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-) Index: llvm/test/Regression/Transforms/SCCP/sccptest.ll diff -u llvm/test/Regression/Transforms/SCCP/sccptest.ll:1.5 llvm/test/Regression/Transforms/SCCP/sccptest.ll:1.6 --- llvm/test/Regression/Transforms/SCCP/sccptest.ll:1.5 Tue Sep 16 10:29:49 2003 +++ llvm/test/Regression/Transforms/SCCP/sccptest.ll Fri May 13 10:51:31 2005 @@ -3,7 +3,7 @@ ; ; RUN: llvm-as < %s | opt -sccp -constprop -dce -cfgsimplify | llvm-dis | not grep BB3 -int %test function(int %i0, int %j0) { +int %testfunction(int %i0, int %j0) { BB1: br label %BB2 BB2: From reid at x10sys.com Fri May 13 11:18:10 2005 From: reid at x10sys.com (Reid Spencer) Date: Fri, 13 May 2005 11:18:10 -0500 Subject: [llvm-commits] CVS: llvm/projects/Stacker/lib/Makefile Message-ID: <200505131618.LAA32035@zion.cs.uiuc.edu> Changes in directory llvm/projects/Stacker/lib: Makefile updated: 1.4 -> 1.5 --- Log message: Don't build runtime if tools-only :) --- Diffs of the changes: (+4 -1) Makefile | 5 ++++- 1 files changed, 4 insertions(+), 1 deletion(-) Index: llvm/projects/Stacker/lib/Makefile diff -u llvm/projects/Stacker/lib/Makefile:1.4 llvm/projects/Stacker/lib/Makefile:1.5 --- llvm/projects/Stacker/lib/Makefile:1.4 Sun Oct 10 19:56:41 2004 +++ llvm/projects/Stacker/lib/Makefile Fri May 13 11:17:58 2005 @@ -5,6 +5,9 @@ ##===----------------------------------------------------------------------===## LEVEL = .. -DIRS = compiler runtime +DIRS = compiler +ifneq ($(MAKECMDGOALS),tools-only) +DIRS += runtime +endif include $(LEVEL)/Makefile.common From lattner at cs.uiuc.edu Fri May 13 11:19:11 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Fri, 13 May 2005 11:19:11 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/PowerPC/PPC32ISelPattern.cpp Message-ID: <200505131619.j4DGJBHJ032659@apoc.cs.uiuc.edu> Changes in directory llvm/lib/Target/PowerPC: PPC32ISelPattern.cpp updated: 1.87 -> 1.88 --- Log message: Realize that we don't support fmod directly, fixing CodeGen/Generic/print-arith-fp.ll --- Diffs of the changes: (+3 -1) PPC32ISelPattern.cpp | 4 +++- 1 files changed, 3 insertions(+), 1 deletion(-) Index: llvm/lib/Target/PowerPC/PPC32ISelPattern.cpp diff -u llvm/lib/Target/PowerPC/PPC32ISelPattern.cpp:1.87 llvm/lib/Target/PowerPC/PPC32ISelPattern.cpp:1.88 --- llvm/lib/Target/PowerPC/PPC32ISelPattern.cpp:1.87 Thu May 12 18:23:53 2005 +++ llvm/lib/Target/PowerPC/PPC32ISelPattern.cpp Fri May 13 11:18:54 2005 @@ -64,13 +64,15 @@ setOperationAction(ISD::SREM, MVT::i32, Expand); setOperationAction(ISD::UREM, MVT::i32, Expand); - // We don't support sin/cos/sqrt + // We don't support sin/cos/sqrt/fmod setOperationAction(ISD::FSIN , MVT::f64, Expand); setOperationAction(ISD::FCOS , MVT::f64, Expand); setOperationAction(ISD::FSQRT, MVT::f64, Expand); + setOperationAction(ISD::SREM , MVT::f64, Expand); setOperationAction(ISD::FSIN , MVT::f32, Expand); setOperationAction(ISD::FCOS , MVT::f32, Expand); setOperationAction(ISD::FSQRT, MVT::f32, Expand); + setOperationAction(ISD::SREM , MVT::f32, Expand); //PowerPC does not have CTPOP or CTTZ setOperationAction(ISD::CTPOP, MVT::i32 , Expand); From lattner at cs.uiuc.edu Fri May 13 11:20:39 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Fri, 13 May 2005 11:20:39 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/PowerPC/PPC64ISelPattern.cpp Message-ID: <200505131620.j4DGKd5P000659@apoc.cs.uiuc.edu> Changes in directory llvm/lib/Target/PowerPC: PPC64ISelPattern.cpp updated: 1.17 -> 1.18 --- Log message: Realize that we don't support fmod directly, fixing CodeGen/Generic/print-arith-fp.ll --- Diffs of the changes: (+3 -1) PPC64ISelPattern.cpp | 4 +++- 1 files changed, 3 insertions(+), 1 deletion(-) Index: llvm/lib/Target/PowerPC/PPC64ISelPattern.cpp diff -u llvm/lib/Target/PowerPC/PPC64ISelPattern.cpp:1.17 llvm/lib/Target/PowerPC/PPC64ISelPattern.cpp:1.18 --- llvm/lib/Target/PowerPC/PPC64ISelPattern.cpp:1.17 Thu May 12 18:23:53 2005 +++ llvm/lib/Target/PowerPC/PPC64ISelPattern.cpp Fri May 13 11:20:22 2005 @@ -55,13 +55,15 @@ setOperationAction(ISD::MEMSET, MVT::Other, Expand); setOperationAction(ISD::MEMCPY, MVT::Other, Expand); - // We don't support sin/cos/sqrt + // We don't support sin/cos/sqrt/fmod setOperationAction(ISD::FSIN , MVT::f64, Expand); setOperationAction(ISD::FCOS , MVT::f64, Expand); setOperationAction(ISD::FSQRT, MVT::f64, Expand); + setOperationAction(ISD::SREM , MVT::f64, Expand); setOperationAction(ISD::FSIN , MVT::f32, Expand); setOperationAction(ISD::FCOS , MVT::f32, Expand); setOperationAction(ISD::FSQRT, MVT::f32, Expand); + setOperationAction(ISD::SREM , MVT::f32, Expand); // PPC 64 has i16 and i32 but no i8 (or i1) SEXTLOAD setOperationAction(ISD::SEXTLOAD, MVT::i1, Expand); From lattner at cs.uiuc.edu Fri May 13 11:21:12 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Fri, 13 May 2005 11:21:12 -0500 Subject: [llvm-commits] CVS: llvm/test/Regression/CodeGen/X86/fast-cc-pass-in-regs.ll Message-ID: <200505131621.j4DGLC31000695@apoc.cs.uiuc.edu> Changes in directory llvm/test/Regression/CodeGen/X86: fast-cc-pass-in-regs.ll updated: 1.2 -> 1.3 --- Log message: Force x86 backend --- Diffs of the changes: (+1 -1) fast-cc-pass-in-regs.ll | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-) Index: llvm/test/Regression/CodeGen/X86/fast-cc-pass-in-regs.ll diff -u llvm/test/Regression/CodeGen/X86/fast-cc-pass-in-regs.ll:1.2 llvm/test/Regression/CodeGen/X86/fast-cc-pass-in-regs.ll:1.3 --- llvm/test/Regression/CodeGen/X86/fast-cc-pass-in-regs.ll:1.2 Thu May 12 23:20:57 2005 +++ llvm/test/Regression/CodeGen/X86/fast-cc-pass-in-regs.ll Fri May 13 11:20:59 2005 @@ -1,4 +1,4 @@ -; RUN: llvm-as < %s | llc -x86-asm-syntax=intel -enable-x86-fastcc | grep 'mov %EDX, 1' +; RUN: llvm-as < %s | llc -march=x86 -x86-asm-syntax=intel -enable-x86-fastcc | grep 'mov %EDX, 1' ; check that fastcc is passing stuff in regs. From criswell at cs.uiuc.edu Fri May 13 12:36:19 2005 From: criswell at cs.uiuc.edu (John Criswell) Date: Fri, 13 May 2005 12:36:19 -0500 Subject: [llvm-commits] CVS: llvm/test/Regression/CodeGen/Alpha/ctlz.ll ctpop.ll neg1.ll s4addq.ll Message-ID: <200505131736.MAA24703@choi.cs.uiuc.edu> Changes in directory llvm/test/Regression/CodeGen/Alpha: ctlz.ll updated: 1.2 -> 1.3 ctpop.ll updated: 1.2 -> 1.3 neg1.ll updated: 1.1 -> 1.2 s4addq.ll updated: 1.3 -> 1.4 --- Log message: These tests are currently expected to fail. --- Diffs of the changes: (+4 -0) ctlz.ll | 1 + ctpop.ll | 1 + neg1.ll | 1 + s4addq.ll | 1 + 4 files changed, 4 insertions(+) Index: llvm/test/Regression/CodeGen/Alpha/ctlz.ll diff -u llvm/test/Regression/CodeGen/Alpha/ctlz.ll:1.2 llvm/test/Regression/CodeGen/Alpha/ctlz.ll:1.3 --- llvm/test/Regression/CodeGen/Alpha/ctlz.ll:1.2 Wed May 4 10:56:34 2005 +++ llvm/test/Regression/CodeGen/Alpha/ctlz.ll Fri May 13 12:36:00 2005 @@ -1,4 +1,5 @@ ; Make sure this testcase codegens to the ctlz instruction +; XFAIL: * ; RUN: llvm-as < %s | llc -march=alpha -enable-alpha-CT | grep 'ctlz' declare ubyte %llvm.ctlz(ubyte) Index: llvm/test/Regression/CodeGen/Alpha/ctpop.ll diff -u llvm/test/Regression/CodeGen/Alpha/ctpop.ll:1.2 llvm/test/Regression/CodeGen/Alpha/ctpop.ll:1.3 --- llvm/test/Regression/CodeGen/Alpha/ctpop.ll:1.2 Wed May 4 10:56:34 2005 +++ llvm/test/Regression/CodeGen/Alpha/ctpop.ll Fri May 13 12:36:00 2005 @@ -1,4 +1,5 @@ ; Make sure this testcase codegens to the ctpop instruction +; XFAIL: * ; RUN: llvm-as < %s | llc -march=alpha -enable-alpha-CT | grep 'ctpop' declare long %llvm.ctpop(long) Index: llvm/test/Regression/CodeGen/Alpha/neg1.ll diff -u llvm/test/Regression/CodeGen/Alpha/neg1.ll:1.1 llvm/test/Regression/CodeGen/Alpha/neg1.ll:1.2 --- llvm/test/Regression/CodeGen/Alpha/neg1.ll:1.1 Fri Apr 8 11:46:44 2005 +++ llvm/test/Regression/CodeGen/Alpha/neg1.ll Fri May 13 12:36:00 2005 @@ -1,4 +1,5 @@ ; Make sure this testcase codegens to the lda -1 instruction +; XFAIL: * ; RUN: llvm-as < %s | llc -march=alpha | grep '-1' implementation ; Functions: Index: llvm/test/Regression/CodeGen/Alpha/s4addq.ll diff -u llvm/test/Regression/CodeGen/Alpha/s4addq.ll:1.3 llvm/test/Regression/CodeGen/Alpha/s4addq.ll:1.4 --- llvm/test/Regression/CodeGen/Alpha/s4addq.ll:1.3 Thu Apr 7 12:47:00 2005 +++ llvm/test/Regression/CodeGen/Alpha/s4addq.ll Fri May 13 12:36:00 2005 @@ -1,4 +1,5 @@ ; Make sure this testcase codegens to the S4ADDQ instruction +; XFAIL: * ; RUN: llvm-as < %s | llc -march=alpha | grep 's4addq' implementation ; Functions: From reid at x10sys.com Fri May 13 12:43:05 2005 From: reid at x10sys.com (Reid Spencer) Date: Fri, 13 May 2005 12:43:05 -0500 Subject: [llvm-commits] CVS: llvm/projects/Stacker/lib/Makefile Message-ID: <200505131743.MAA32473@zion.cs.uiuc.edu> Changes in directory llvm/projects/Stacker/lib: Makefile updated: 1.5 -> 1.6 --- Log message: The previous hack didn't work because tools-only isn't defined and isn't a target at this level of build. There shouldn't be a problem with building the runtime library without llvm-gcc because the Makefile.rules checks for an empty LLVMGCC variable before building bytecode modules. --- Diffs of the changes: (+1 -4) Makefile | 5 +---- 1 files changed, 1 insertion(+), 4 deletions(-) Index: llvm/projects/Stacker/lib/Makefile diff -u llvm/projects/Stacker/lib/Makefile:1.5 llvm/projects/Stacker/lib/Makefile:1.6 --- llvm/projects/Stacker/lib/Makefile:1.5 Fri May 13 11:17:58 2005 +++ llvm/projects/Stacker/lib/Makefile Fri May 13 12:42:54 2005 @@ -5,9 +5,6 @@ ##===----------------------------------------------------------------------===## LEVEL = .. -DIRS = compiler -ifneq ($(MAKECMDGOALS),tools-only) -DIRS += runtime -endif +DIRS = compiler runtime include $(LEVEL)/Makefile.common From lattner at cs.uiuc.edu Fri May 13 12:44:52 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Fri, 13 May 2005 12:44:52 -0500 Subject: [llvm-commits] CVS: llvm-www/pubs/2005-05-04-LattnerPHDThesis.pdf Message-ID: <200505131744.j4DHiqgc001137@apoc.cs.uiuc.edu> Changes in directory llvm-www/pubs: 2005-05-04-LattnerPHDThesis.pdf updated: 1.1 -> 1.2 --- Log message: Various typeo fixes --- Diffs of the changes: (+3690 -3647) 2005-05-04-LattnerPHDThesis.pdf | 7335 ++++++++++++++++++++-------------------- 1 files changed, 3688 insertions(+), 3647 deletions(-) Index: llvm-www/pubs/2005-05-04-LattnerPHDThesis.pdf diff -u llvm-www/pubs/2005-05-04-LattnerPHDThesis.pdf:1.1 llvm-www/pubs/2005-05-04-LattnerPHDThesis.pdf:1.2 --- llvm-www/pubs/2005-05-04-LattnerPHDThesis.pdf:1.1 Wed May 4 18:18:52 2005 +++ llvm-www/pubs/2005-05-04-LattnerPHDThesis.pdf Fri May 13 12:44:35 2005 @@ -855,7 +855,7 @@ << /S /GoTo /D (subsection.8.2.2) >> endobj 576 0 obj -(8.2.2 Automatic use of Superpages for Inproved TLB Effectiveness) +(8.2.2 Automatic use of Superpages for Improved TLB Effectiveness) endobj 577 0 obj << /S /GoTo /D (subsection.8.2.3) >> @@ -2004,18 +2004,16 @@ /ProcSet [ /PDF /Text ] >> endobj 793 0 obj << -/Length 1273 +/Length 1271 /Filter /FlateDecode >> stream -x??Y?r?6??+t y??-F???(??'?hJY?S?????A??#??o????2????e??Fe???#??C-:7D?YY??;K???\?>?^c??-x???8}???o at r????X?.???6?hm????xqQUn????*/T 0??K ??@3Ks -?`??(C(??8??wx?[?3??'!??pZ?n[=^?ur??T:?(OF?g?+24??,??Y -(??T??Ua? *? ??j 3hz?????nH; ??*?B?&?J???985?1???g?+?)?Q???*??eS???^??D?????D????U )????u??x???J=? ?(OF?g?+24??,??Y? +(???0??Ua? *? -?m?f????????v???P +?-???jX?????nk?j? ?~??F?^?d?$???4?$????N????Z?E'????z<}K_?F?????????P??????u? .?M?K?????8?/?M?{wja ^ B?B??X0????/?.v???iZ'??P?H??6?)????9??1gg?u??M'????Y?@.t????S)???G%L????P????y Ey<??W<%???ae??? ?HO F?????c)?7?-"?D????%??(> >> endobj @@ -2987,16 +2985,17 @@ /ProcSet [ /PDF /Text ] >> endobj 1019 0 obj << -/Length 2302 +/Length 2309 /Filter /FlateDecode >> stream -x??Y?o????"?2+?(?R??Z??@?%?Z?m^????M?}????h[?b?5I ????|1?]???]v?K?8??????????_??.M?:???D?xx?.n?F?&??o?`6[?gQOK4?L??v?Y??;^=i? =n????H??x}: +\?????+L'?2?? K@ dmq??M#????z???6??F_?t?m??8???????#P????????p4N???thzgF?? ????\??z????.E???????ER?nY?8??=Is??????iE???7K????@?????d5@?D???VK???>??t>??)????t?&?&???-??L0Nz"??? v#???w?l=?!?????G?e???UH>???'??As??x??? 0????a8???:?g?? @??o=y(l???y?G?1? OhTn?$??Ro?"?p~????/????o?X?`)??j?#I?5????? PQfd???x??*??????#??u?B|7??u????u?U?Y?? >??P?$????|?S???#???W???!?????;N??X:K??J???X????? V??t)?J?eq??n?2_m????e?t?0? ^????|+??J????7?WO???C?&?14? ??P?/gN??xoxA[??%?M? u??Gp???`?&???@? ?+1?,jw??wqw??? ????t?i?????]??????S? ?\y??y?d;??????E?????????9????p ??a?G?9????/JQz/N! O:9?6?0?????????Fh?&?,G?c? ?P8nZ+??????????$h???4>??????X???t*+?F?{J'??&.jk`,?~?Y??????"?Mv??x???`?E?7??????H?0 g????>?LR>?FK? ??^?T?{s4D?^c?m$?Z'H?Ipy?@SX"?w/E?| ??v???@?7O ??`???G???'???w*)???,?? ?Itt?3?rP????>?????EOL? -t?zZ5?e?,???n?@rx-?ZEOY?L?T?????????$?+zA??T?~?(@w??a-??H?????d0q???U???*?????)?????%?E???b?8{?+??#?????I??)???????]?c??;[&??C??4?6TA?'?C?Z???&???]????@{?}???? x?Wn??]?{?9?.??O??????--?_?U???|S????+x??YYo??~?_?G5??uy?EH??+?v?.??o??w?4K???h??f???E??;^= q? =n????H??y}?+\U????L'?2???K@ dW?qt?M#?????jR????z??!+??t???3f-?~[?+Mu??K ?W???j????~??5?g???"j??A?L?J?vX?{U?B"+??????.??<8?@??f*??????3?'=$??E?????? ??@???:y????????+?H~N????? endobj 1018 0 obj << /Type /Page @@ -3231,18 +3230,19 @@ /ProcSet [ /PDF /Text ] >> endobj 1071 0 obj << -/Length 2401 +/Length 2380 /Filter /FlateDecode >> stream -x??XK??? ?????2????z?????eL9l?P?e[3zx??G~}H~?????,??b?X?G????~?]?eA?IxW????????az~wOG?z:?????7?(???6??T6?8/?~???v??J??j??9?7?W?{x3P?i??i?13a????4?t???M?{SM?-?Q?o?I{/????rCz?!????hM5BB???g???&L7???4"????oO?o??/?Hv??`4??x+???MC4dd?E"???V?iW???? |a???(?? -?+ ??4c?|-?@???D?'?????9?A -?WV:H???_????T]LEGm????%e??5|???{|???z?`JD6????PX?*????=?C??Zv6?`.X?(4???????F?b?????w'?? -???}????G?K??&????8X?h?wq?5m???0^??p?ga?|??$????3??O??? V5?%f????v?U2??R8???K?bs? ?e??tb?)Q?s????9?????)??r0d?'>s|Xc?[{??|?Dtk????V??k3?&???f?b?8?v?rL?Xo?????#Q???(0,4????!??? ?S'7?3?ft?(?????v/;[?????????@?????J?????Wb9??=US?QN??~aI^?p?&???_?~?????????n?P d??W???i???n"QI??_K?K2r???`.C?C??9??{a ??^??>?T??P)Q?'G????`?}?(??$s9?4?3?U?f??????? j_??3??lX??????p??0????????Hy???/:??"?y7????"?[??B??????$???|?9b??I'?&p??8CU??V??c??*?P??E??8??Gy?%4??5\??6???,NSq&??|??4?n<?Ws???J???@"?tB'???IS???5.???$??-???V??jC?W! Z??????????RG]?^?u ??R???-f??(Z3?9??? 0?^j???4??5 ???/??V?! r,???YS0 q?~9'? ???<}?/0jO?endstream endobj 1070 0 obj << /Type /Page @@ -3255,42 +3255,42 @@ 1072 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[0 1 0] -/Rect [329.538 533.666 347.894 542.688] +/Rect [277.867 533.666 296.223 542.688] /Subtype /Link /A << /S /GoTo /D (cite.TofteTalpin:POPL94) >> >> endobj 1073 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[0 1 0] -/Rect [352.941 533.666 371.298 542.688] +/Rect [302.484 533.666 320.84 542.688] /Subtype /Link /A << /S /GoTo /D (cite.TofteBirkedal:TOPLAS98) >> >> endobj 1074 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[0 1 0] -/Rect [376.345 533.666 383.792 542.688] +/Rect [327.101 533.666 334.548 542.688] /Subtype /Link /A << /S /GoTo /D (cite.Aiken:PLDI95) >> >> endobj 1075 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[0 1 0] -/Rect [388.84 533.666 401.741 542.688] +/Rect [340.809 533.666 353.711 542.688] /Subtype /Link /A << /S /GoTo /D (cite.Hallenberg:PLDI02) >> >> endobj 1076 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[0 1 0] -/Rect [406.789 533.666 419.691 542.688] +/Rect [359.972 533.666 372.873 542.688] /Subtype /Link /A << /S /GoTo /D (cite.Chin:RegionInference:PLDI04) >> >> endobj 1077 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[0 1 0] -/Rect [424.738 533.666 437.64 542.688] +/Rect [379.134 533.666 392.036 542.688] /Subtype /Link /A << /S /GoTo /D (cite.CheremRugina:RegionsForJava:ISMM04) >> >> endobj @@ -3420,16 +3420,13 @@ /Filter /FlateDecode >> stream -x??XK??6????? ??z???N6?.??b?@???l3-KJ??????>???`??"Y$?????SB?S???d'y?t?|????????S???d??|???Kt???6it?l?$?&?6?4j6?l???#~/?a?;?T???????42m???Y}?????+???????????h??=?S3`???Xk????C?O_??????[??{?D???mK??BG?`^:?%??N?h?V??U;y? -?t??%Eb6NkB?R????rUO?&i?a?5??\? f?u?[?j;ct?/W?.????C???V?g"??O? &???cc1??,?????)??,/?m^?I?????dtx????????M& -??"?? Y*&?/?3?-????t0???-??????Kj???;??}:Y(i0>R?.??????~i?cQ,??? ???????}F??? -?3??[U--?S??L?F?*??q-??@TS?y????;=>&O?d?/c?-???So?@???/??W^{t~?'??:M2W?2B!?+??@p_(/?LL?????.I???_:?1?p~?????hy?(????m?5?bY?????D?????F???\?v?p??L` M|?ko?????QK1?m?????h???????uL\??~3 ?a? ?o?'])?????O????A? U????{8NIE}j[??[w4?3???wiDsT?Z???$=?=w??sI??????????UV{?^E???+???.L??l ?-???"??X???m)??k? ?/? {?????_x?W???K???F%9UQ?''?y???????o&eendstream +x??XK??F??W??,?l??????+?B?n?D??:R7I3{??V?\0??????? few??v?T?Jz[?fXI???C7?l??h?4?}wL??I????=l ?? *??E??*Y? ???????????A ???6 6?%?$J??u??1dI>????8 ??+U??j? ?#?W?y?XE?? l?(p??&s?k??????Y?#H1???j#???7?r^o?5????~?~ ?? ?D??z?8??Z??k??or??5Z?"???'???LGN??????6?????i??p#????T +??1???iI???;?,?"??GM?????<?`?ly?a?? ?d??C>? /r????^??G?E>???I???????%?xp?N?????? a?y?v}?ym???????N?????0=B???|?v??G???o???'/? +>?W???f??s??VqD??=?4???KzL{?F?5???????;m?????p????????V?_" F?a3???P??A??(KM?D?*D?q+[??"???~???/|???X + m?W? ?F?j`aw???E>????*?a{?^?*h?sW?:(?I?????,?C???[?[? ??Gk:]?bH?|?{?HX??Gl????)??g? ?/??M??O?????mM???>??(??r????????????H%?endstream endobj 1103 0 obj << /Type /Page @@ -3807,19 +3804,21 @@ /ProcSet [ /PDF /Text ] >> endobj 1177 0 obj << -/Length 2426 +/Length 2431 /Filter /FlateDecode >> stream -x??X[??6~??bq??????Tm*??????I4 ?$`9f???o?$?%?r??%???n? ???2{(?:N???>|????S?{H??N???=Q=???O?i?F???7U}?l????6YxW*:????4?i?U???????MP H?/????#?a????e??h:????F???I?4??Gw??`????BMz???I????????n=??3??~y?D?fi\g???#???c??#a-?SE -la`v?g:??S7tcL????V;?Z???(?RItvA3%y??^???>?h?x????p:?b4????1x?)?d??}:???(?xD??????i???4bR????N???G7???l ??q????|? [?????3????[?C?-???????b?x?-?1 L??????d_xbOd?Y????}??xcI???????$ky@? ????q?B??@$??? ?c???(???e???l?PN3??"?!(???/ V?E%B?eJ??:Bh"zc"?"???k??O???????8??p?D?m???K??x?????m(?[?p:$???????HT]?&R?W?Zd?5\ ?,??x{?4_?-E`^???<-W??/1yj?d)????@A???x???[}???N???????;???bO! \m?d?RH??r.???G?y"??pCA???{8a?2-a_E??WW???f?K??K]]?W7?Z?(??????.@?5(?[^.??????`k?endstream +x??YKs?6????Q?L???gnIj?jSI?V??e?-?????%?????EJ???-W?$?+??(???d? ???!?;?a?`???"???T??????$?z????}?z??)^????[x??????B?B`?"??p~x0$??x?gr7???C?#0??+b?QLm9??j?[?K?+?Muv??II????'k?D?????0??v?,%J?nD??%?b??5 ????3?)?R~???u?u??80?_??+??E-?`?L?t?,rH%????!??!\T???I?KH????F????]VO? +????;???1??8.??+:????:-?n??`LG?2-I2|???dbt??/^D??o*?M> >> endobj 1180 0 obj << @@ -7990,21 +7989,29 @@ /ProcSet [ /PDF /Text ] >> endobj 1853 0 obj << -/Length 2505 +/Length 2508 /Filter /FlateDecode >> stream -x??Z?????_??L?T'? ?- dU?;I1?b??????" /?z???[??X?cl*????RSRjJJM?,????du?6-L&?X??eJ???M?%???[??eQRPN?L8?~'Bv??F???_??AP?J;???y/?? ???)?5T??? *?e?i:? YQG{?%?pH?N????q?qW ??????/???%??/-?MI0Q?iW(???m?5?,,??ZP)w??e??h?{?W?2?o?c???8??{?????fC??G ?>x?(?f\??p?eWP(\?kj?x??I`??????9???}Q?+????UeYtW???hG?1 -???_?G?!? z?1??e??;r?a??e?????!???S??H at L/?>?E????g????C?l? ~N?J +{?f.??????????w??>??w??/????)??m?,Q????(??{8k???w????tVHnaO???0xl4 ????? _p?:???+ o ?=?w?????Y:n?g??qh??$ -` y?????2????ap????zO??/?S?????f?????e?W??Jj??\T,?*H?_`i?`qs??J? -?3[B??? ?qB?~?j?;??????7??xe"??TMp|?? .???:?-~??l>?vs???S6?mT??n?:???~????~p???kG?}9??? ?Po???(D????oL\>?9??U? ???(w\?Q-?6?{??.?i?M???+???S???_???/D?q#?sjLdT??O?A?-?????0????/?HM#??D-??dB,rf7????????w????@???????H???N???? S???G?x0???r??Nz??^??+?E?tQ??? {??????b?e? +?3[b??? ??B?~?j?;?2????7???x?"??VMp|?? .O??>?+????k???o??c]?+ ?g?????3?+j? +?C#?r??8??6b???*????0??? +(??K R??? ???XVq#??*=8?? +?M endobj 1852 0 obj << /Type /Page @@ -20269,21 +20276,18 @@ /ProcSet [ /PDF /Text ] >> endobj 3505 0 obj << -/Length 2267 +/Length 2268 /Filter /FlateDecode >> stream -x??XKo?8????$?????? ?5??b?}`d?&Z?$w&?????"M'?,?-???e?E?um????F??6~Vs?Q??H??P\?l??rz -?o-??H=?\?VPu?_????????L??8jbp3x??a?qp? ?6?@?D ??3'???[?1??T? -?Yz???E[???F?+??uw???k?Ji????W? 8?R?????#pSm?')? ?B???A??????.?0???V???Hay??k?????C ?|YR?8f;??xd?????]?Kt{??>??@}? Z???H??e??[?Uw~???5??_R?2w????J??f????ee?????*??2??i*?>???????% endstream +x??XKo7??W{?????s\ 6??? +r?}?zzf?C????????????Q??????*???^47[?gn?&???????man?????w????7f??????s???'_???|?????*"?Hx>?v??vsk??acG?,????f?MV''?????-?????d:?{|?:??? ?h0???-?O2???????? ? lx?;!?qYY?t???+??X?{?,*Z??G~??:??}7b???????IwY????|[$???????9??y??An??????}??b????????[?Jt?k??e?N??d!?;?tB?C??Z??:?M?E??UF;?=?!rk?N?NG?g=y?????"????y? +???e?O\???{??T??? ?$?#)|?5N??S????? ?p??N\ +_????????X?C?? ??y???k???L??V???Hay??K?????C ?|YR?8f;??xd?????]?Kt{??>??@}? Z???H??e??[?Uw~???5??_R?2u????J??f????ee?????*??2??i*???x?????% endstream endobj 3504 0 obj << /Type /Page @@ -21936,19 +21940,21 @@ /Length1 802 /Length2 1502 /Length3 532 -/Length 2081 +/Length 2082 /Filter /FlateDecode >> stream -x??R{8T?6?6FIJ?RY!cf?1Q?`fr?q? ???23?Y?53??%?6?0??Qm?x"???](;??"l"??D?.??t?N{??? ?bh?????[? @????^?????l? -??,?/??,&????A?????H$)????W?7??G? ??@?@e8??P" -??. @??? D$Q?-9?????)??P?D"??j??HQB$?L???8X?\=EB???D? !9?I???e????0??#??W????>??O?t?c?_???L?"?a?a??)=?O ?=o1&?9??9=4???=??????????.P?v??`????X?? -E@T7??S???;?/y?????py??|???)??v? |? ?r????????/?; ?R????r?w?rG?a??C?U/?O ??t?????c?lH ??J?]b??????W}Aq??]??5?????l???] ???:^\ ????x*G??  ?dA???:??+Jx?@??a?G??C?@?a?{?C xCb ?88 ???`7??#8?L $DP????k)B??P??2?)???"? ?@!8??P9 R&?o????.?aP0c?????????% +DR ?[?E?????ds??Mq??0?ME?0?P|1? q?| ??????!??m??f\?=^?????l? ???L????x???????H ?hA$??B???+??Y4?-???u??@e8??P"k` ?#(?"?? ?P?l??B?(n?0?(+?Z?]??????F+?\???????[??H?[?ehn ?C??R????*>?????g2?_]?s?!???.??% +Tld ????N?|v+?'?`?!{??Z???XZ??"??`-E?7?='77'h?!M +t???zA}b/??`O?? c????K?k???7?t} ?Gq?S3???{???r????%??{? k?????U?\3?Mn???.8??? =\>??}??? ?ep^?5?fm?yqG???n'?O??ZMspjK=??4K?|+?J???;???????P?FSKo?:??q?t? +?????|??b{KO?`i????;????u?????????????~t*`5?P)C??J?b??3??^Y??'?}??????y)[?.??????j????73??7Y????Lz??3S??? ?=??|W?z??( +?c??(??x???i|??????G%3???"2??l?T?}??m?c??K??z.l??e?J{????zPO?n???ZfO?E?$*;???b??%?>Xcd??FA-}s?g`???Z?U?d??h??Z?-?]????^(??O??p?4<+1[?Z> endobj 3380 0 obj << /Ascent 694 /CapHeight 686 /Descent -194 -/FontName /TAAERN+CMBX6 +/FontName /JDNGQL+CMBX6 /ItalicAngle 0 /StemV 130 /XHeight 444 @@ -21988,25 +21994,27 @@ /Filter /FlateDecode >> stream -x???yE?ls???????KRi?b@?;CxoR?w?i?k?w7???^m9?y?i??5??7k$ ???HN???!=?????c????s?}??-\9~H9Y????_???3??> ????3?i,^^8O?\??{????????fa???d=?q????%???????T&?k???_??5X?*"!??1????Y??!???i????;??l???+???k????N??????CX????!?\?1[i???T?{ *?~s$?RL|?|??'???f?>- ?\?7???i???????I??????n?)~?4??v?l???w?2????e?????o?[E?n2????t????w.??f?]j??*5?^5???J -1'MX?8:&K??I_???I?4R???%;?!4GH??y???)z{\?|Q?}l????????|??;3Am"3]?? -??????:a??????F??? p??????i?V.?b*????rW?|???$???aI???XI??)_49??Ev?s???" ?J?i???#??!r3K????VMaA??????3?"l?^7XE?'??? I?B??C TU?V0?????Z???M%?V|????8u}????k?Y8??wK????H???"6??F??;"?P??:?e?x?rc?C??}q???-?d&??????4?/? -.w ??F;???R?ts????8?.!l?????z?bx~??`8???T?????6?B9??????$u]Y?VC/n?0A?\??/??"u?tP+>T??V^5??E?$? t4??????|g?%??U??)?O?:!6??\????g?$]?R??,jJ?'??g?Ap?F?!?????{*????????????T?uCy????'????qh'??}O?]9??~`??R???????????fK?Pr?3??]~?j_doQK;??^??? f?s?h??????????n???Fg???f??p?su?4ut?E? ?}?'QY<-???HX?fX^??????^M???'5#-??.???Z???O[6d???z? + ?K?i??> ?tS?? q?5;???w???t&?? ?7??.????V??0?j`6??y?(j?????????pdr4?=??L???;?6kX??w?IJ-?W}???Z??B?z?/XE??'}?? -y????unj?????\3]?,??'???Z=? <&?$&?p?????{??K:??;?????2???Up\???U4w?!p?F??????????G???H)?"?B=?JN1?d)T1:???`? xI???'k?')????s??C???n???? ??O??^?(???u?i"???5??k???K????cRKhI???b???fny??U????d?Ysi?.y?????? ?O4@??( -?D at Q?A?? -endstream +x???yO`? J?c????z???????i??JY?_??r?P#^ +?&????????K?????2M./? F!???t4>??b??&? ?Hgo??7????$????0?g????)E{?E?????iS?j=?u/>?&????\ ??8_7 y{k?\j#??1???k;)???????? ?u?i??E>/??3K????}u?(????_.q?s???h k??4~`-??VV????;_??K??~!Z?4??&y{???g=?@k?;T^???j?~??%K^K?Z?b????#?d)?~?7???=?j]q????gIjE??????TL?EJ?x??xkCV?;?^?????Yv?U?????[???????V;??????????"??????&x??`.?( ou?n?Q?z>???g?9y}?:W??z???A???????e?j??Z??#???|?U?????l?'?@b?h4y?e?3??f?F????3??*g>?7??xt?5???1?????H????^v?????bV??????????Ek?+?Yj????`ki?'?3D?{??^??~M ?i???{?y=?sS??3?s??4cI?O?P6{??I??*?j???(???23??^S?/???L8T??rG???L%Mw'???*??????"??*??? z fN???#???6C ??%j?(T?R???A?Z?ogWpnz?E }?@?s????>=??6b??`??????`??a?2??+X????OA???b?U{9????Pak+??X???R??sg6V????????????n??w?OAM??]?-?j?????? ?!? +$Y4???:(?zX??1????g?S??sz&???@????^??????q?? ?)???N?????3??D]HT$?|I??[?L +??*D????? ?r?y?p????AE????tx_???.? +??q?'Z4??8??s???[?96??????>??? ???Wl??.???b?1??uW'7 ?????4?kr??v*eE>g?k&??`?+?A?)D> endobj 2526 0 obj << /Ascent 611 /CapHeight 611 /Descent -222 -/FontName /ETIMOC+CMITT10 +/FontName /LOOLMR+CMITT10 /ItalicAngle -14 /StemV 69 /XHeight 431 @@ -22046,21 +22054,26 @@ /Filter /FlateDecode >> stream -x???i????#?:=?????i???????@??t??N?m?[???:????g???w????=???^i??.???J??k?l?GAc-???;?f???f?knU?u?@??????????2????tB????????w???)?F???rAZTpK?????b??9C?cpm,??;$r??^?n???????jdME?{?ds????fu?/????L~????????}????????k??l?;. -#?????wjm7?yLY?=y???????}??s?c?>? ??Zef:?????Wt??????-?n???j?VA?Tj0??o???a ?>!\???????????? ?W.4????+K?I]?!?FT???Z?y?o?z4Z>G9??????>wcA??????Q^9?wg??^?478?????? ?v????o? P??+|??S?S??Dy???R?k\Y?X:?m"?>???m??2?$??G??????t?q|,?KF-'??_??'?????/?%~?>e???-G?9??@???\DsLb???j?&?%?HL ?V!??\???\"?a??3??b ?&??????h??)??????;????e??N?h?n???NL?? ??-3.\???^??\b?/}??? ?????_`C}?p#\?????_5??y?c?,x[jxwq?K????(?5W?J?)Y?|???A??.?HXtmx]O?.lW?6????????a??UF??9\?????Y?P3'?#????B?"_?????????? ?????????VA2?c[ tv??6?j?F9?`???x???% -a??iXz??^?H??T?GG6?@??W}U*??????5SX?-??=?? ????? -??????P?=?k??u??_?j?^?c??f???B'??B?? ?d? ?c?Ye??.????y%?*SM?r?f???e??^????m^L??^?;}??}?|?sU6??re?9?MA??\??T????BDn? ?q| _y??b??o?? -??d&????U?/O???f?Z?`z??\???n?eLm?????b??? -i u ?????^).?XU??-???d??????q??? ?*???4???8?R4<[V?z??|wF?s -??]*????? ????????uh?=P[p? =??>????@??2??? {p?????endstream +x???i?????-H?V??5?K??\Kw?L????Z;xt~????7?|?;??'?.?x???;????^N]V v???|"????6??3Y??n?????"?F^??s???o??A???C?&%????uM?a????9???Fn?3#u??Y??????u?I???d??????q????3?V?R?G???g?N=?????Q?&?Q7?-l?&??j??>?????*??????A]?]?????}????"k'o????}??u?B???h?2?;?a?/o=??O?e?3??On?????<;??1#????4m2???? ??n??1??M?3Wx??V????p???????U}??@?S?9??oY?????x4D???\?5???l}?? y????N??h????????V? +.????Ky 7????{??zT?????}?eyY???s?)??]@a??K??'^?||W??????KgV???Y=?????;&?^??4?b?i`!p???mh?{??q?|? +V_????J??:,??%=?? 5o?c????~#???8 bJS2???/??1;??0??(?N?S?? ?????"??ql[?L?|@????G??A?jd$?E?g??9??'2??>6?k2??^1]?q?P?Y?k?] ~?Q(???????/???v?? ????&????????9????????9#0?{\???????B???3??????N??F????Oo??0q??#=7?????????p?B?U+%?????4/???DQW?:?pK??sO:3???K?si????h?p??+??mg?".???37?}???2?e? ??[?"=w4GD??????D???_W?6/EtT????x?? +????/q+v4e??"6DM9% ????=???y-?? ?`?)??m???????Rw??/?>???v??g?j?7??E??~A?uK?a???H???|????@??{????|??@????9??Sx5@????oPv?t???8??8(?~Z??@??T?G6yC????|T???????5SX?R?=?s??^,?Q?u??u????t???s at q2???Y\?r???'H??m?q)?k`%c"?????+0??pzP??e"?FBD??Pg<0????#?d??I{TZ_?7?P?;?g??u?]@?r??>c??z???B'??B??5?t?-?}?Ee??6????y%?2Km?r?z???e??n????->l??n??=?%???|?s????r??9????"??{?Uc?X?B\/?????*??b??~/??J??d????M??/N?g???? ??U??w???gL??Y??????N'?/????+???~`????K|??Q??5v????h??W?eh?CY??pTp 7'"[V?f??Z2??%??}?[(????? ?6????????0G???< z?|??+?!?"`??Iq??8???endstream endobj 2097 0 obj << /Type /Font @@ -22069,14 +22082,14 @@ /FirstChar 45 /LastChar 116 /Widths 3681 0 R -/BaseFont /PXNHTP+CMTT12 +/BaseFont /HZZEFS+CMTT12 /FontDescriptor 2095 0 R >> endobj 2095 0 obj << /Ascent 611 /CapHeight 611 /Descent -222 -/FontName /PXNHTP+CMTT12 +/FontName /HZZEFS+CMTT12 /ItalicAngle 0 /StemV 65 /XHeight 431 @@ -22096,16 +22109,13 @@ /Length1 784 /Length2 1446 /Length3 532 -/Length 2026 +/Length 2027 /Filter /FlateDecode >> stream -x??U{8T?n+9???t?v??0?4;?K?lB??1?f??Yk???i?%? -O!??M????~????J$??JHr+???????????_?m??44?-8????*?}U?????d?=f???cI?$??? ?q?S??h?C{????????z?q???M??v????f[N?I?}???{??h?7Gw(G???(|Z?????*???9n;?N????,?n??f???[???:^???&??V???|?n??;?b[?/??va?R?M? ?-_ -?]??>?9U4~??????q]?C?;?0?f~UE??k???R?oaA;?????e???z???3?????ego??????I?)yy? Uw???nu?????#:r7?\Y????]?)g??j??j5???(?????K???????t?>(?>G6z> endobj 1843 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 -/FontName /JMKVWX+CMMI12 +/FontName /QUEXPJ+CMMI12 /ItalicAngle -14 /StemV 65 /XHeight 431 @@ -22141,13 +22151,16 @@ /Length1 1482 /Length2 8437 /Length3 532 -/Length 9316 +/Length 9314 /Filter /FlateDecode >> stream -x???UT\?????$x?????-^?? ??N??? ?4H???,\t?}???>????GW????o??Ys???(zjMv)k?%H? e?????I -?9????e\A@?=?Y?-v ????I8??0 ??????0 ????a. ,????????????0 ??????4??F??????ix??0 ??????4????_?????n?ew??)????$m\>d? ?????????B,?i?b+vO ?+;?>C??)r??%?????,?Il??? ?????N 4???0|????O??ff[99?n??2??4i??5??iU-???'U? ????m?Gk?}?z?????~????o??b"?????~E0p???0???k ???D\?X~p??FZ???kJU?????:e?qD????Ft???i4u?? ?!?=????+3?)??V?v????_g?+g_8?+9??4???i?? ?? ?Q???;??5?b?????)a#?=????[??"z?%4~?[?g???Y?i w?????5r?cUJ|??,???????~?8? _*?'??????\!??WF?}??|T'B???V#~y??\?K ?;??Lu?j?4????X?????S?S??? D?K!\(kx}g????????o??-?&'s3??E-?Zb& ????W???f /n??U??91? _? ???bW??- j?.???8%N????]??6??D??y4Q1!?n\???Ng?j??'4L??uO??fn? ?????kr +?&'s3??E-?Zb& ????W???f /n??U??91? _? ???bW??- j?.???8%N????]??6??D??y4Q1!?n\???ng?j??'4L??uO??fn? ?????kr ? w?-??T2??.QS1?????i?y??????????????w: 1u6?{t???T???5?*?/?F???????0?r?;???????????y? o?m?M?}_y+5?Z7??^[(A?\(????B???))e?x??????10??7K??DE?V&??E?????{U??;?U??;=?? ???&??Q??G?????5?+??????=????????lf??%?,?S?h?& b??s???????????S??i7?L???mlJ?v?D????r&?+??ZvdrEX?????w??a]???{??3?%#f??5???Oe)CR 7 ???s? ??????"???R?? ?d(?e???SpI??????~F?@?V???\??B-??i#*B??W?i???A??um5??=???W??????pk???????L?*(????/????? _%A?$??5?Sh????????fDC??( ; A?n??%??v?????|?J??>? ???r??}??(?O??????????5Ezi?2o??\|FdBm??qO?Oh??=?h??kS?9Q???? ?,??w/???? Q=?q????k????8?L????A3N{????}z?*???????????#?j???|?v?.?.??|?)???y??&?*??x???3S?p?f??????p?,?e??aSd?2??A ???8zM??T????dIX?"8o?3??? RS??? ??~?y?-r'?t?y? JtQT?H?? ???HWiZ?IT?_??{??Nc?????3??h ????????z??c? r???w??y??????}??~Yf/r?>?9'?p ??2,?Is???????jo???D??????????wv -?8v?8?.?O????????t?g<7??2?ZBz???j?~nz"?Yn???V`?)kn??+?8v?8?.?O????????t?g<7??2?ZBz???j?~nz"?Yn???V`?)kn?? endobj 1715 0 obj << /Type /Font @@ -22194,14 +22207,14 @@ /FirstChar 40 /LastChar 122 /Widths 3685 0 R -/BaseFont /GVZDIH+CMBX8 +/BaseFont /TSCWDF+CMBX8 /FontDescriptor 1713 0 R >> endobj 1713 0 obj << /Ascent 694 /CapHeight 686 /Descent -194 -/FontName /GVZDIH+CMBX8 +/FontName /TSCWDF+CMBX8 /ItalicAngle 0 /StemV 122 /XHeight 444 @@ -22225,31 +22238,37 @@ /Filter /FlateDecode >> stream -x???U\\???!Mp-??N?^?KZT?=?Cp?? A?'????/???S?@??s??,??F?????}?;???T?? %????V5?????`???????????q?L)??L?????Q ?*F?? -W?? -?=Yr?&???U-c???(W?V?1?????V?_????????w????z?????7W{qD?:????EV??q?]????d+)M?ak??<~?vP?K(?yK"?`O.~4?mO6???;?F`z??????o?Zf ??"???kX`????[?  ???????6?%??9=????'T??F-1?e?'s??+tLi=I:?43j?k ??,;!?????Q?m~?NLy ???d^??g? 9???8?A?Lz??????f??k??>?2?Q?3??f?7?u8j?94????yX%*2??Eb?K? _? ?l?hf??i?+Jf?I? -???DX?> ???;??^T??z?&?3?????io?e<$?%4??0K?????9W?v?aC D?8Q?v?_?q?RC?>O?^nm?y??v??m?w,B?!L?F??1????u??1????"QV?K??#G?R?9He"?&Kj???5????&????9~}??2/??l??????????U[&????(?p;???^???_r???f}??p??????[?y???!? ??(?????+?M?????)cc??????????m?|?O??2? ??d?x??m???#X|\J$?s??hq?|??? F??J?????}?,W?B{a??2?}?_??E?#?D??(s?oe?A?X?&?A ^??k?o,??5hf????c??N?????|?&?????@?n?7?? h t~?5?s'?g?R?_???,*?? Cy?E??\y?E|O????%o???u$?U??-???#A{b??U??R1;'???}133?/??.O??y???k ? ?t? Q??f????Zo!z???8???iP??/?i??g?a(?.r????X??C?{??yQ]???Z?c???B??.q?0?yLb9a???k?p???#?7`?N??ga?5r?:?S??C?/?*??OZE??V?o??? ???T4?N?????;??91?? bCq??T???*???e9?e ??mK??="?U?VczA?????????/?.??5$U?x??9?e5?????t???Wt???.??I?e?"??}D??C??1?\2?(?)???`I??DT:S? -??????u~??????:?F??wD????+^?#? ??Ra?-1?,??n???ke[A???-?=?}??M????hU??e:???lH???7w]?{?????hF4D??M?ry??a?(??dJ? -z?s(?i??nU?>???sb??_??H?a&?. ????*?e?+??nlZ"CWIg0??????@??Lyo0??i?XW???????l?vHw?'iU? ?????x\Uj+f?J????XD??#????P'?Y6??6?P?va?+???t???????3}?????~?~?}??~?_X????|???CH/0?K?Z???^??O????l>~???M<= ???(??=&?~b??C0???ep?n?Nr?T???9$0?[?]??/o???G?`s??X?????????????????????%??2??@?? i??c7???E??r??' -VW?z?xV???eca?@0/_G??????;???*`?v?"??,??e?v~f?2C?i??I?>* ???vem??q?A$????m??/??a)-?8?}7?a?? 7 c????#N/h -??f????>????. ??Z??5???1-Wd6??]$????/SJ??t4?z?????x?V%H???^??\???7?? ???j?w'S?|?"???.??h8?R,R?????P-???K$}?9???A?;???????-??h??E?????4?or???|?n?>????+??@?l????E?Sw???>C+???????????>B?v?c????9???^b????????c? ?)???Q? +???+>1}7?_H???YC?7o?r????Zd|?g?M??i???6W????????D p??? ?C?o?G G?JG?5? ?'?+? ?&???4n?(?????J??????u??~?Y?>`J??&???!.?;KQ??b?A%=???4C?1M\+?R???????>????? a??ce?Qh?ci3??????RN?G??'?????G-???1?\??1??{?R?G??~?RxioI??????f?????x?~??LO?sC???Z???~?????????a???2????F?m??v??y?%qN_r0`?? Uk?Q[?a????.? +?fZO??5???Zu3?NH?-w at o{?^???@^B?v ?????*H?}?(?o?)???a????P?oC???h???????? Q?v???w*????_d??n?!)????.9?R???1r???l?H?C:R4??w?~????N?_P????m???b?s???HV?LsOe??@?(?j?,M?^??5\???dm?~<9?'??^?[?2#?? ?t???K????Q??y?????F?????v???m???Z???u:e?p??xU?m?UI?lMr}w?S?????Y????RY1yy????>????u??1????"QV?K??#G?R?He"?&Kj??? ?????:?M?s????e^?/??q?c#S??????L??? ?Q|a?R????C???Da???da?+h?K%?#v~???C?xD)C?_a?R3??BC:M????J???Jty?=??M?7JJ??RP at B?4?DK_DYA'???Xe/hA?M???UZT|f?b??r?????5????????Q?>??(??5??+?M?????)cc??????????m?|?O??dZ??jfX??8??v/??tz???8??????m?I/I? P??;??Wd +@/!?c???w?e????:U?TCpa??Xs????e???$*?sw!J??O???L??JIS??l?. ????RG1+?T?????" +x?47??:????4??y?:?? c]?% ??7?&?????e?????0?K?Sf?;??????n????B???^???F????,?Z?W?????f???????h_?????????{???M3?):??ES?s?????6t?vE]W~y3]?????4??T^?q?V76$??????`<???G^???PG]?,????t:???~1?U?p?'?????H??????Zn?*?3? +??8}1???Ix?????N?>$?O??{??Xq??(???k?je? ?|k?~??????I^]???a??????N^?? +??? m??n'g?m??D??U6??d?\,?:??>#?H??6???+H\???????Tt??(og;,}?0*/B????V?Flw?V?????&?? QK? ???7m?6U??? ?|????????j?b>b?????? ??#m?ml???1??4 (J??]?(<?t???g>U???:?$d??%zZ??????????????i?_Fy? r????'??W ?Sra:ng2J?k;8????5ivY?)??{"?!a??2??_='"???D??,?Et??}?1TP+??t?l?#R?L)?w^????EWkNv?mV? j?{?Jr9 ?W?\6)?n?[?!???Ly??o,#???F??>??c?";1/'P-??zo???$nY?Jr"?4U?q??x&oK?N???wk? 2(???(B?? M???\?. Qr\?;???p??m ?W????^???5?I?!+ ?_?????0v[5??U???V^???Nm??=P?hY??????n7=?-?y?^??}??QsL????p?}??????8??7&?JS????D`?l??m^& +vR??Z??C???+"??v [?[|X????z&9?AJ?????? O?`????K{??x??P%??,? +#???c?,?\~S?O?-T?YW?3?O= ?6??)??/?-?#Q??faS+X??1+???O??1??[???WO?9???3dH?)}????J\?\?.?j?-??G??q??|uU|?"?????h8?R,R?????P-???K$}?9???A?;????????O?g#x???I??o?^%?O?)????????d?????B!?A??*??a?????/??Ds(???3E?b?-M??endstream endobj 1712 0 obj << /Type /Font @@ -22258,14 +22277,14 @@ /FirstChar 12 /LastChar 122 /Widths 3687 0 R -/BaseFont /QLZIDS+CMTI8 +/BaseFont /LDQKCA+CMTI8 /FontDescriptor 1710 0 R >> endobj 1710 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 -/FontName /QLZIDS+CMTI8 +/FontName /LDQKCA+CMTI8 /ItalicAngle -14 /StemV 73 /XHeight 431 @@ -22292,13 +22311,13 @@ x?SU ?uL?OJu??+?5?3?Rp? ?4S0?3?RUu.JM,???sI,I?R0??4Tp,MW04U00?22?26?RUp?/?,?L?(Q?p?)2Wp?M-?LN?S?M,?H??????????ZR???????Q??Z?ZT????eh????\????????r?g^Z??9D8?? @'????T*???q????J???B7??4'?/1d<(?0?s3s*? ?s JKR?|?SR??????B?????Y??.?Y???????????kh?g`l -??,v??HM ?,I?PHK?)N?????;z`??{{?iCb,???WRY??`?P ?"??0*??P?6?300*B+?.???????t#S3?????J.?QF?? +??,v??HM ?,I?PHK?)N?????;z`???:??F?iCb,???WRY??`?P ?"??0*??P?6?300*B+?.???????t#S3?????J.?QF?? ?? ?y)? ?@????? ?E?@???0????_Q?k??k Tihld?`naV??.4/??4??E??????????????p????? ?????d??????[??ok[Y????*V}??'????~ bG?????`?y???%K^-|????x?E ?d???E[${?z??,^??k??? ???n?W6wM???????pa??9?????=????s??r? ?y)/????~???V?$-%)??+??2??W?}~???"g??????b????1????u?ts???.???NY*!v_???N???U??)?o??!}?_>s??0M,??2??Y ???K???|??????6???1?N????I?????W??Zr1?V<1??}Y?? ??/ ??o6n}?D ????g???l>?`????;?_?????????yq???(?J????W=OnhR?l??????.g?Jw??+*S??(z?o(?????? ???av???|?Yy?f??????\??#E??cu???????v???+??>H?\?|????t??l????"?a???????&l?s????}????q|?rl??N-??1/?N?E??Q??????^?b??O?GU??E??z??A???????n?|gxj?U?T?G15?d?/4e<)z??{cj???????{\???ow?????-|oRWi??V?m????O???????M????8??9???h? ???????2?Y??gJ?ZuG -???????????????l.+???????????????l. endobj 1705 0 obj << /Type /Font @@ -22307,14 +22326,14 @@ /FirstChar 48 /LastChar 48 /Widths 3689 0 R -/BaseFont /KSIRLR+CMSY6 +/BaseFont /MAOMXF+CMSY6 /FontDescriptor 1703 0 R >> endobj 1703 0 obj << /Ascent 750 /CapHeight 683 /Descent -194 -/FontName /KSIRLR+CMSY6 +/FontName /MAOMXF+CMSY6 /ItalicAngle -14 /StemV 93 /XHeight 431 @@ -22338,17 +22357,26 @@ /Filter /FlateDecode >> stream -x???w????u????x]o~C15???b?bPq?????#%$h?q ??b4?xP????-??U?I)?$i-????? ?-(??yR?????_?(?/O(? ?^?? ??dfvA2%?^/? aS??j??^&???v6???&T_??mNvd?53?3??G?f?^_?????$?????E?l?jE????[??~=S?t?? s????jn$?f ??]_W??O??O;8?SwX?r7??~dH????#?|?J?e??????????;??'x?e0????(0???? ?????EI???|????1?q2??{???A???????ESS?g?]???6?P?qz>"??$b???^?=S)?8?8d?E??*?j?3?L??p?Qs)?B????&?????\'s?I?'??6??O??DTX?-7w?????T???? -??&??ra? ?b?r??zY?WN??X?-??????- 4YuM??4?/k???8?) -??? -n?????~??(?:ZC??????vw.o?+ TB7???n?????f?6?? ?h?,???9?`????H????u?a?A#???L?M???=xN??~FS?=????|Q??t???????:?A???Rn:?????Lr?it???Q???? ???@3R{//? Z?? I????B?tXd?Y^ \%Vz???2k??`??+?????b????u ?y?????g?b????????O??B???_?s4?it=?y???cI?h?????v}.???????]O????\Po=??l?zf???????7f???);?r;?qc????8e ??[d#?NCc?VQ???6%?????U?I??x??g?>?SS%Uy??!.?????x??? ?b?0??v?M????f?L?H???O??[?]7???>?C??g???|r?l??=?|G~?j??c??v"?4d?-Rx??{?) ?b??)?tD??%??F?:$2?V??+???B?R?o?P?a????????qe?????Z?L??X?????`W???%?Y?%?u??T?! ?????d-w?7??I??Wt?K??vV? ??y???lw??S?.?????|&?)???S+??6????Y4??'?xu?L????????}z?\CO?????#G??#?T?w????O ??u???G????"e?}hX??b????d "Zuv=?u3HJ???O???T??F???% -?7??? ?{???T??????m]J,%/?`liv?:k???RY???M&??3?83|?|??n???bk?P?M0?s?????yH??'MX??`=S??;F+O?|EaZG?dy?=l?????X ??????SAb0$??0$\P??????AJ?W??j?^*?@?N??~???k?=???i?.?B?[s??%'r??FyTx??.?F??T.[?? ??{*???C??&??H???vw? b??dv?g??.&???(E?5???Z?n:-?pLu???6???????0l???J???l?$???????_????u??E 1??4L??pp"??q+i ??H ?@?c?I |86?p???~nUN?h? ?"9+?????z???Xc????<'??>V??S??V???N????VF)?????? ???m?W8i(?R???????;?q??$?6V?p?x????n?S? +w??n??#??????-???MJ???&9???????Y3m????!k?#?C&|M?????*??{?\T7??L??{E?k?Q#?L_?{?Y?HC??e??n&?^????(=???M?1??%?p^?G??!f??NA?#??? a??M?}????????:?Z??L?U???p??%?????R???? IBKw????f?cEE???Y??\???A?? ?9p??ku??}???gM??F]M1??Ij????????59n?3?? ?, O?le??&8 ?[?J??IC??]R??X?6?V???/??? uue6?~&?[J???z??l? ? ?%??'?{Eg?{?6?6>??8Ka??6?s?.?x$???!??2??-??`?evR???)U/????K??q????????j?F????????? +?????2{? Y??Y%;?;DBB?V|!???xb[R?)b??? MA#???F??G???,TTclv??(A?b??iy??k}??>Ev>???q??m???VA}??#}?]???M????"9??s?J?:???Ng2?+o`??"DVa\?s?W?g???^.?h????BI?6??? ??O +??Q?? ??xy?} ???$??AZ???y??U????|J?? >????bA_MU??L??:?v/??#?!?K???[U?R??H?az?L?otP??10E??Z??i??? ?9???'vE?'???[??jo???;N?Z=?????\?????E-?b-??X?s?y%??>>_??Z?rD?9!7l??????Wp4???U?????,4????xJn??xBTf???"??? +??w;v?\?]??_?N??????^? ??w??J? ???'?_???j;?N?a?????????6{??y5???T????Z????????2a{e???[v???|?????a?7??mr?\?4b?0%V???oq???x+U??Gr?h?3???u??7 J???-O?GU{P?e??am?^??????GD?}L|????'????"??8???,??,?????r???-???X??n7WW2y^d?H7vh?\?9?uR?KsG?? +??1g?,}i???j???T5=0?q?? ]j???L?? ???fdPiVE??? +?$u}Uq????ZO?j3R????w*??+???e?,?d???n ??j_a????? {Ji?????????G*A$?? m?W????8??Z???????P???:k??[???T?i???OZu?%?8?0?^???U3%?U???~xXO^??? O=G?)??,?WV<\?i?s #?T????? ???W?p?k?;? ?5D????$??T?s????5{mB5?~??]> endobj 1685 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 -/FontName /PSWCPW+CMMI6 +/FontName /LGFUVG+CMMI6 /ItalicAngle -14 /StemV 85 /XHeight 431 @@ -22384,21 +22412,24 @@ /Length1 822 /Length2 1640 /Length3 532 -/Length 2234 +/Length 2233 /Filter /FlateDecode >> stream -x??Ry3k??????l93f^????,Kt?HI?4J?"??5???R8?r?q?e"I???sn??{??????y????=???|?Jr??4?H?h S?-?`?;~?-it?)@?gR?Y$?T2 ??H?=?{ ?9?o??V??I&?(???!??M?@d?? 0%??-??$ -??i??i?j(??D??l1h4?"? b??- -?4-??[???;'eC????"??Z/?????1??????v{???^?????_????p??(Nw??vu?}6?Q???????f?????8=}7k??_??#?,?\???NO?1?{*?-P??? ?`?[+?M?? ???????z????u:dT????????? ????????????% ?????T?9??W??????V?V"t?????~k1X?n ?|?3;?K$?-?wQo??3???????j???2S/???i?I2*:?y[????? ??r)???uxU??#@??????l????2\??#?#???N??? wrb????G?^j?H?????14z,{H?e?6UfD?iD?&?????.+?t??R??"m????S?R?D:UL???R????%?t??I?W????e????{??x??:????\"?Y??'??T??2?T??h?+S,r?{?4-?!@??U???F??5???????????????2q?f??%s????Z????X??e_l ?pGN??y) ?[?:??&i?G??K? ??=Zm~??TM???.?`?A????x?j??????E????-=b6r??H??Q$&u2????>?Db??Q? uY??a??g&0~??K[v??Zk?-???G??C~\Z -??7pwn?l??s???!?X2W_i*e???B[6??*???l-?p??4???F -}???|??H??R??vtL?e??Lm?????_z?F??K??W???A??h??????? ?A?S?@??+x??RyYC?z?)?c+'[Y&?$???=?v???????????~???{>???,?tL????60????F???? ?6 +??lI? ?X??1?62B?L@??????Q?2` ?h?+?N?+???&y ????phP???F??<"?|?;??[?L?(?}??x ?B???0@?(D0 + ??+pX?????0z@??(??i?????+?2??? +?I?????????? ?0 at 0 $ `?I\???3??? ?Kv??Y??\t?l????%0$???+??9;N????Cre?W?????dQ?????"??;??bO?k5^p??}k??i????p???????+m??????)5?r(?a?F????}z(?9l?R-}=?6?s?????k?% 3~?;"??syO?wq?e????+x?r??_????B?f????QBO????@????^???3P???8O?i? ?1+?&a???U??{f?~??????0:h?ART~??Wq?N? ???>?c?? /N?F1??VZ\t!?a:(?????ZW???d>???x??1???z?`????E )???g??L???????.m??zGx???\??A??qi?J??7?wnbm??s}??!?X*W_i&m???b[6??"???l#?p??4h??F??>j?^!l{?Tw??[{:???iP????|J?/=????%+???? +? ? i??'???i?N4ceL?oU????gn?????U?}?Hg?????6ff]?m?n?F?K?f?%u"L?s?deN?????8???????m+?^?~K-?h??i??1?"???E??{4m??;?0 at n?J\???N}<??????b??g??L???I?05?;?9?I???cC??s/?7?4??.)??????'$Oc?d<-?(?Nendstream endobj 1670 0 obj << /Type /Font @@ -22407,14 +22438,14 @@ /FirstChar 42 /LastChar 118 /Widths 3693 0 R -/BaseFont /BEMOUN+CMTT8 +/BaseFont /NKGGGL+CMTT8 /FontDescriptor 1668 0 R >> endobj 1668 0 obj << /Ascent 611 /CapHeight 611 /Descent -222 -/FontName /BEMOUN+CMTT8 +/FontName /NKGGGL+CMTT8 /ItalicAngle 0 /StemV 76 /XHeight 431 @@ -22438,20 +22469,16 @@ /Filter /FlateDecode >> stream -x??Sy?9??{?Um?uL(L/?????`QX@??w?X??Nd?$?d??8 ?a.??CG??H-??{???"S????& ?Ha2h?-??8}??b??a?N_??`??0?`rD-?(?0????-????^F??-???-???c?b7??T????|_)U?WVU -???5?1?%hF????sbLb#*???R?bKw??t>?W???7??|?Dw?&?Q????w?Bd?85Z? ?Z?j?g*??0???????v?{?5??yQ2w+???'??;N?`?Y_?+??i6?=4r>???s0- ?"????S??V??????4???6Ea??>?t?????I??????Am??J???U,??U?U??z????z?J6l|?v?jtK???^??????i?1?).? yE??O??Z???Y?-61VM ??????R??>Z??gL??k?d?2d{????X???????+??T*??+?f -???p?????}U?? ???*xR?so?!Mjz?y?bM?a?3$~t?????J????Q}???[?h ?????*?m?vH??Q?????j?????????}???9??Y????G????kfu??ALs????????~??4#???n?8???u?/M?_[h6?pe==?k?????4:k??n????U?9?T|? #m?????F????M??????g?? -????Q???pV???'?Hb7U#Da ?????D?(~?Q? ?0or?l#m??B?????{????m??n.?|???Q??cyb?&U? -o[???wV?? NLI??d?? W???????G?u%_???9gu??o?&?(?>????????=-9s??d??x?p?|R??m_??hl}G??=??????(???p|?Z??LJ?}??'-????????Y??1???????a?VV?D?D??:Za?u????R??S??-??w?R???????J??B????#*R? 0?:9Y??Z?S+rQv?E ?r??$]?c;?w ?he??Z??#??????|?+?],?@?!?m|X??Y?E???c??? ?K?%??|?s????L?U??????*?6???;??f???w???c?a?e???}~????x????RoZA?I?g??5|?]?f??@f_b??z@???K??W?JkCe???Kl???`??e?2y*?????J?r?m?N?=??T??%,?????2:???????? ????????q? ?*?9??{?Um?u??'h?dpt?(,0??w?X??n?I??0#q@?52?D.??CG??H?)?/?Q?9????? ?AD&1+??{???"S????& ?Ha2hA+? +)??? x?hl?+2(?[??????+??W?oS?Z?%A ?? ??? =c?E??@???`?"????t??w?f???Ap?+?a??P?Y,?$13Ves??&??D?l?P????Y:8?vQ?i~???????aAyqau|???g????{?^?q?Z?{R/8?b&y??\3??;Z)????_?X#??L|??G?k???i??s??M????+1????rNE???3F??7???0???G_?PRN??u?????}?Z?k??6???Ym?????K6?vg?x?U??t??zn????????M???'?????????s5?>OO????sC?7???=m????]?QS?n??0zP?r??q?N8????^????}??????)? 1s?@X????????! ?s???_?1? ??????)??S?L7??{??d??M??KW??]I???-??.?A???[??/J???d?????1?G?O?})??6?:?????t[???/]??uz?x?5|?o??c?pZ*4w`?M at n?i4????P?~Qz???Z????]JX ??]?,??#??l??????a?>>/?0?^?M >?E?????????L'?g?&?y???y??BzU???:D6???}?-2?"???2?b_&M&?3??U?U.???I??????27????z?^z?a?4?8~?.??????????wv????????????j?C}'?V?s??2?Oa%;Dq.???'s???c???????zh??r?=!?b????x?????$?g??S??=?RG???_?9?+j?jN??Vq ?4A????|??S?C??{??>?f?W???\?[??bW?(??=T?P??????K??I?v?RMLeX?? ?:?> endobj 1664 0 obj << /Ascent 750 /CapHeight 683 /Descent -194 -/FontName /JBHVFS+CMSY8 +/FontName /HAKARK+CMSY8 /ItalicAngle -14 /StemV 89 /XHeight 431 @@ -22491,15 +22518,13 @@ /Filter /FlateDecode >> stream -x??Ry???3/?Y??g ?B?d???D?K?"kvY?!QR?P?Lu:_???s?:??>???}_??\??~??,muQx7??#)???Z?????>??`))}?JB?q?$P ?kj?]?-t?@????@?????_?????+??????Bp??1?R?X2 $-?8???t?P%?D???x??J55(?k???T-??frN???+??4??(Z#????(ij+^(]|?A??o????0??u?3?Va?Jn????4%??i1Xd????9??????????K?>??Z{?????^?W?????L?@Z?????r9?!?-W?z?eR??#%????{?m?? w??U????L?u8???b:????iW^??Ul?????$??0??`T??y?D?.???9?R?????9??????:X?E?:?-????(????A??X????????_{Ut???g???ww??\?? ?????K?=e?K??S}m{+>?d+9??????X=F? ??58??>?}?U???(??}?&e?????{&(????? r???!*???????h????!???F???O?n\oU???????>?[_5??C??7? ?zz???? VRj?RN??F???????k????G=?~SZ??(?P ?u???q=??? 6z?1??0et??|K'^???iG??????%QM\(d46Y???q????????? -g???K6??\|6??+??n?Y???4????f??P?%???2??Z???z?o`3Z??8?????7????&?? P!~???r???9?o?q-???r?????b??x"??PK}???????rIrJk?????$i?(Q????>?????.?>y?X??????O?'?:g?U??)*?i????Rt??5>??C???W?~+??w6+??.JR?k?^??pf????????v??????N????f???????? l?n???4t??L?nn??s>X?q0\"b?Rn?`?@?>J???g?????Y????8??,|?9Qe?wJ%?c???m??CQVs???:-?????-?+?1n|?/????;????? ?n?xK9q?5?<`R)?1N?et?H???ie???U???rZ?m7?a??9x???Ub?ck?d?Fi ?UVwt)????P???qvA??? ?H b?G?xDh????????r%?????E???!?i`'*?+??l?'?l?f?h3x?DU????#'??.???B??????????p?mk????X?>?????ioD?'G?}s$?S???????X?zZ??????\)Axa?????a??eQ}/wr?ee?x?p?I??4????=??E?$????????|??A?^?yYY?{????b??L?U?R????}(J???I??????5<W ?? -????????J???J??ZU??Ps?????hj??B??|e?? -c"??_?Mm??' ?I3??a?tg? }wm??LS? ?a?a??Q?^]x)????,????{&z)?w??????w??g???^?X_??s;1??.?E???8r2?A?NP?K?0[??0?J??K{??vO??[???]??F??Hu????????g?l???R???z??F????AV????D\?cv\w?\??.]??[xm??WK ???**?L??a???)??~?? -????F?]??A?2??(????? ?????????Ju????????H ?J ???o??+x??Ry???3/?Y??g I?,?.?????b?Vd?.?!$"??"g???:}???????????????]?#%fi??????FxI?????m??0+??Id?????],H@#]q??+???5????D?$????+??+???[=?,??Z????t?+??????YD?????C-??? ?E ? ??????????vj?mD#EU_??4:????-??4?X#?P'? 0???7??a?C?'v ??]??6?s?m??k?"???s"*yd?_?q43h???y +???????a????|iur????V?TpDH_???1??d?V?X?????vim1?}?H?u???.????"??EH?i??A"???w??d?]r?&??? ???|$???X???/?P??+??S5?ohx??i???1?_35??????l??*????<:;d/l?Q????6????*+?D?]?"Z??Oh???=?C?N???*???Dy??0????h5?> endobj 1612 0 obj << /Ascent 514 /CapHeight 683 /Descent 0 -/FontName /WSCBZE+CMCSC10 +/FontName /BUOSPT+CMCSC10 /ItalicAngle 0 /StemV 72 /XHeight 431 @@ -22535,41 +22560,55 @@ /Length1 1426 /Length2 10382 /Length3 532 -/Length 11252 +/Length 11251 /Filter /FlateDecode >> stream x???UX???? ?&??]???d???5?Kp'?w ???????[??+9k_?s??]uSo?Zo??UOQ?*?2?????$??? ,?,?-rr~3???M??IS{;?)? ?I?????????[\???F?????? ?Z?x?? ??.`?@???d?????{??Z????? ???(bgn0??32??;n?,i?2U?--r??? 31????n?5?`f??????r-???L5i,O???}R?? ???k?2??? ?/:??T??????5? s?"l??35?S?a?????7>??4????42UH??????[,??-"?B??b0?&?????7??}?f@????+??D??O?W??:E?D?h???Wd???-?{-?'??3????+??????\@/3H?)???*kQ?.?0?Uyw??????=kDq>??I????A??b??d?"m ?$???])?T%??!?O???B"W???????\??#??"???T??PMm?? ????Y?? ??F???g0f???^1#2r?OR?? ??/??kskA?#???ka????'m|XD?n'??fHVRL%?-?^?h?68ZZ?4???h+??>?{??n-?t??????S8?4\????A????q?O&?;????D???????|z~?k??$ ?????%?? ?Q%???4??k????}S????p%?p??h??! 0????1?;????HyXZ?L????????*??????? )]???3n???F??/?d???ata0E??@?$?8??O65???}??)??uI5??? [?Pn????_Mv~s2??,??D&^??! -?????(?k?N?D??|6l?S??t?*??7O?#?@^xw??????Hj?69*S?w???/I???=?????l2?.hH?r?cz??c`???????vk?Q? ??%?T????\?4?????.5;??~?C???c????t???PR?j?Fh?y(Rz?eA?c ?????ot???E??#x????c?m???9u,?&;2??a?iH._2????U???<}??;?????;?,i?8?A=??m?S?!?FQ????\?'6?3?T???8??-8f??ln?E???z?? l?,?:6?3 vk3 -s~?~)M???pd?M?b???? ~afA?xGp??X??N_m??? ???b?4&?d???nc????????M???????!?#?78K7l?? dW??G)????H???4????Y???????P0??m?????q??u%n?sx?Z?V??F+A (Q9??/o??|?[?`a?-?k?A???-?v??Z{!????^??1 \??????'?o?C??}EVh??--??mT&B?? ???m?T?p????+??{??b?wm??}6?N?????2<>?????kv?p?m???_"?J(????? ?????Mb?* *???~?y?????C?E??*??]??1-?5???!??-S???W?l3??L????1_??=_;k??2u?)'??k9??B?ra???RL???+C?zs?/??>@???,&Dm? ???I{?????e??9????O???? -p??????\Sq?Pw???l?"???????0 `.t ? wHak?c?v@?W?{Y???3????K??x???? 9R???F???r?*Js??JR+?7 ?+??x???)?3x&,?S??'?m0O)?U+??Hj?H???!J????"??`???%?u-????_??^???\???;?%?g4????X??4???5?u???????? y?Cj???+d??j~??dh?"?~ ?+? G???2"9?5M??R??c5,?n??3?M??>?w??$??].?&@??G?j3Ze4????>}zY^S? N????N???^??>M?g?Y??,?:?m ?????D???A????PrV?Uv?>?%TM?@?2Es?GV?0Z????a??8???m??N??&??V{($???k??{f?U??fv`J:9??Shx??c????C?~?y?qv????????)?=?8?"???[i??/??b?9r s|j??????Z?t?[J{?Xtv?N?ve-B??|??F??q??????!?.K?g?U9$" *k/??Z??m?D??W??t{?????K["u1G?=???k?x??$.?up??M ?l??ag??5y6??1?N????Yb???8 #??X????^?(]?3???7q?dG??dX?7????? ???m?j??7W'?????}d???^X?H?=?WZ?!\??{f??0?T??F???? U3L(??;?????u???????z?w??Z"3???%???&?8/)??~s{q??ABhueJ?x??????????)=Cpd'^???!??m o1Z??:??????M?/?M;?1??Y?? d??\d, -q?|?}??5??={???7?D?+n?"?2?~?4?????J?p5??Bp:=Z???V????B???w???m??]@?:?>(?(??;???s????{L?;?H@?*doE???)?T???i~????]9??:?4s??X?{Zu?'FV??i?l?]??a-?n?/>5??????B?^9?lMR?t?p$??? ??i.;w?~;C'??H?P=O46??ROM;????l:??M?z?rf]??U??)$Pkz?????&Sr?r?-?;J]H??v?~lBX?2ph!?X???jR??p????L????4??v??]^?g?#^??&%????????d???~'B?`?;j#Fy??????6aA?BVM????!??\j?2??W?x??$-??"?u???????s???(?w7??????d??????V?OjR]J#qe????*d??bm?B?w`zL&!et?x?? ?WU$??#v\??z?8KN???D?r9d????20?p$i?D9???v`o ??????%f?????G?&yp ???P4`Nm7?I+%?^?????; (_*?u???u???n?w???k???!41y??Tj???&<\?(?? -??za? \?,#|?U?|("?6??l??n&???r????e`"GX???i??6?????`|?E#y!?:????p?:?? I?l?/???h?9f>?|? ?*???+????lJ?????????y?*fp?YO?1?n?q?C/?Zj?Nk*{y? v?a-?x??@y?t+?R? J??mB?[[ p?m?,????b??8\??&?????!F?M??W????D?#MZA?? ?/M??@`:?*?S????????m?j[1wUq?X??U?: S?A??"LR??????o??9^dR?[V?C(??B}*??sJ???$e{?U??? W?n???F??n at B{=3D?i#w?M??/?????T???lN?iRG?%s3?Ok???+?H???????8??*?e5Q\??u?y|????|Z"?!G???UU? ?8???e?^ -?C1?F~4??oQ?$J???\Z|?a'v??K????W9????d6?v ?[?W?T?G$D????Z?? ?? - -???}.k?2"23}????Hxt1H??????????lPr?I??")??? -?,????}????C??M??m???0ChTE?Qh?=????^c?h?G?q?l????m?j?Q???cj??G?? -?anYIz? ?n5%?A?Dg??-?V?Mf?????????T??>?????Ilb[A<2?Y??Jg+rr~3???M??IS{;?)? ?I?????????[\???F?????? ?Z?x?? ??.`?@???d?????{??Z????? ???(bgn0??32??;n?,i?2U?-+r??? 31????n?5?`f??????r+?!?7M????O??i??!v+?d?????Y5? ?????of-??7???[Y??????_?f??????? ?l???o6????N?[]????M??????g???M??/|S?????JT????????????|8+w +X????I????????E????eMg?DM\????B_|TONT2U??? +???N??F/=?m??????Q???L??????R"?#?3c?,w)????c???????I?5????T?'?E??{M+D??E5?PC????^)??)}HG??:}w?+?N?,G???????1'?RQ???D?Pme.<?c??9A??7D?I~RZ?Q?????l?????'?E??????`???|?+]???G>t?[AuV?* ?x?C??.0A3MM~O#S?D?A???=?b?!L2?/?>?J% +??]???_???M? ?ak*kycfa????3"#??$U~ ?}????6??8? ???? +Y?q???E??v?l?d%?T????? ??;`????MCO???m?????????OW???Z>??O???*x??:;:??d??m??J)??Z?!??????XM?Q???O (Z?????U?XO#x?? + Q??7e??????As?j ???D???rMl?~F?@?????%?=??p? mF at E??H&h|????e????.???? q?;?9??p?H????T????? )f???'Zv??0?Gz?F)?a?????????J??T+WBp +?x??????+?Ph??.J8?>H???a?nA?????2?????H?@F?c%??IU,????+??w'?????|???B???P??LD?p?g?F??,K????-l??????[J?N????K(??????R??q???94h???i?)J??? %e??h???"?W\:???+?)?F?? [?i ;?G?L???Q?6?????S??i?#C?F????%?|???^????????+?^???#lq??&????c~??:e?R,`???)?5{b?83J?=l?c????a.??vX$| ??n`@??3?t?q?/V?d?]L?];6z?TNc?}??p????]+u???Vd+??k#??i!9q????2??O4???{??+G??u^?????UO$?q_2M???LTn???? ]h?h6cB?+?,??~?r6D????q??? ???w????Pl?}????&QB'?????gs???^???????k?"???????? +7???Q????*??+? ?nzcN_L?G^??R3FS?p? `?D????56/x ??I??. ???{????C?.???`tT??D??C?(%?N`? ??Tv+P}[??M???n???+???MS?v?;???M??fx,?????N8)x ??????f-}#@?c\???p???JE??S?+??ZW??9????j?l?2?9 ?v?????c????d1;}Pz?D?r?C??1????V<~??Hm?|=???F??P&???+?_Fp???????? ~???m???? +???v??J???T?)T?pFi???Ye5bn54????h1S3+??k??/?C???f??FRlN????? ????8?R?%Z?X??%?8?H?????m?J?Huhhk?e"NP? ?z;???7??S?aWe?W}2?Eo?;\y?b7 H5w3u?R?B???5??O[b?????yc?:??v?)????Z??P(m???c? +???????:WY???.3????z?C? !?????????Vz???Up?v? ????E?W???%???pp??A&QYXyEs?????K?H? M????;???-?9???8X???]4b~?*???(?)???}*??zh?????2O?z?>7???*m @"[Q?U???}??R????;??/?A|?31??7XL???4??$m?????H?:?U?5????_;F?9??j?????????[`??f??[???R5???@?[?????2??? +??????????u?/???+e???/?tt*P$? )?O9k.?U??R?j??l??uF??? :u'????????Hs?.Mm`?P0?!?})3*?????FcT????hV???)?? A? d?gv,y?4?s+?MF??RR???dT?}?_??KT?`??M?+ud???|U??\^]?/??AS?VN???\?????t???`?W ?@o]? ???m3?v1?J???tGlM?"?????"pB?(*??w??Y;?s??3????#??ye????E5Q???T?S??VW? ?) +?lm-;?xr?(?? ?HA?U;%d??c???T">?i?v?j]$7qOm.???Lr$YGQ?>?k??!??t?q?5 ]??? *?Ah*&??w?s??#?B+????T?c?? ??z??=??y???2'??????????? ?[?U??????)(?? ???? u?8???B?v ???Y?d???$M?I???q5XG^??*?h???]??yR???????~hS?]???q?K%????i?@?5l.I3??=9?o????8J +? ??#?????????????????^~q?????8o{ XT6?,?{?G??P?;?IO????d)}??m?hfh1??-sH?a?2Ob?{???xS??Ju?^?X??Z?D3l"Q?>???? ?JA??%~?0?6?"????'h?????.????}G?k????;?sX??=?=iwwO?a????? ??y??+*????^?~??A-^7??A~?EQ^&?e????hC?3? fn???%??Cs at Y?@?b????iN?\??9YQ%|/T?.+M??h??|'????LZ?? ?D6??????e??Bz|???K?^?!?Nb??+?u????6??s????N??o??0j??B"??????gv_;?af?????8???9?? ????;??g7[O??*?a/?3,?v?????c z? +?f?"?"???????? ?&?|??K?????k??NJd?????B?+?V?^P??d?????%?w??bx?*?j?????y?0?)5??=?q????zbl3}?????1V?9? ?????u&?? k??j???A?4?z?w?XG??IB??u?N! s?.?0??p???*a???77???I???;???????? +???!??u??f~??e??????o????8?z???w} ???????p0?????>S????'Jj#??3^|?d?8??? ?`?????? 'JBs?_M????"?P>??^3G?u!5zva=mJ?3??m??aH???Ja??{`M?!}4eZ?_K???????????z?7??P?? ?F? ????A5????1?A??Tk?????Fp?????e?# +?{???_??2 ??4?????tk??]?ZL??i?6??? ?Kn{????B?K??{??q??)? ?^????C?Z??????z?/??y@??>????m?F?? +3?FU????3?+???1?????y?J?f?*????Ve ?> endobj 1303 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 -/FontName /MQZSYI+CMMI9 +/FontName /CLFWPZ+CMMI9 /ItalicAngle -14 /StemV 74 /XHeight 431 @@ -22610,7 +22649,7 @@ >> stream x???S|?Q??c??d??m?N*N*?m?????m???????????s9s5???f??????K?&%TP?4?54??q?e?c???Hr?`HI?L ?,lmD ?L?-????+???? /??#?j?,?fX=fzg/?R???r?PN?? ?????|B?H$?Dr?????h??l? !]?c???*(????c????_???) ??TaSFS????}??k?SW?}????I??T~N??lV???o/????m?)?&??L* N?'????@?uqw? j#n,V??8??C????al?ku&C?b?:??????\ ?7?;a?!f???|J????????????!G?{M+??q`??a??/}????I???g?????? W?f??????~h??~%t???H???Y????>????E0???Y?5?T?:?F??e?zv???I??????`U?p? ???p?n&0?!K?Da??jIH:z K?w????{M ?CQ? ??N?A???g??Pb>[E0???Y?5?T?:?F??e?zv???I??????`U?p? ???p?n&0?!K?Da??jIH:z K?w????{M ?CQ? ??N?A???g??Pb>[> endobj 1221 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 -/FontName /GCEYUG+CMTI9 +/FontName /NTWOEW+CMTI9 /ItalicAngle -14 /StemV 70 /XHeight 431 @@ -22709,16 +22748,22 @@ /Filter /FlateDecode >> stream -x??Si\r`[??R ????s??????=??n????dv?d?p?????JD?f??1???\????3??#1??^7Ent?p?? ????i?1??f????????f?G?,?&M????:7??L^?5IWC???X???5??????fj#Rom!N?}???+???7t?o]?7Kx7*??r_\`8??,??>g????x????N[???HO?????2?6??N?vy??R!?AT?fH?????@M??O????V?(?[jO?$?2C??ns??"1?r??? ?A??8????x???HA)????`??]?M:;n-?????q???(jo???`??g?l???{?W?;?e??]?|=X????SM??????T??w -? Gb{?y?aYS?J?????????P?U?????Q]v?????U3&t?vK??7??d????}? ??lZj?\? ?$??M?????p??? +\I???????|m{???/x???Evg?[a?yH? ?????f????W???r?,0_?Fe??2f?`????mic?Y??m???7????5?H???>?,??b??????????djT?S {1?? xp????d?p?#Q??????????I?????G??????kV ??n6{????7?0?Yz??%??,?????:m,qPSc/qE?????*{ ?????Mn??????1??$????8????;?amt(?s?????E????????kZs$?-?c?$!??v:????j?X??C???S??m??A?"?^?????A?s?v?U8i)#4?@?????????p_ ???d?;??<[????????)?o??9??c?;??rH(??'(??A???f??????)C??<=?????t?TM'w?????:?K??????} ?Z??V?????m=r?^n????D=?S??????]x?/||???IX?????-E?????e?cOFW???(E?g???r ?[???-?JsB???1rw??qy-I????f%l?? ?%?|?????KG??z???????O??*?????7??Wr?,s??XL?Zz???????3?_S.??????z?????V?^4?%<^"?d?qy?r-????? ?=?Y?u???????Y??????]!?ID??'S? ????? ?WT7U? 1s???_???@?,8_?IN?Vu?^uJ~|'Y? ??Qc?H8,?UX??g?+??Aj?&*t(????/?Y????,??/??! m?Ui???*0?U?:?gY????5b?P????\????gz#Ns????????c??l??-$I?%U;??K??4??l???O?Cn? ?????)????B4h?m???~???? ?w?,? ???\r?6?a?R?C???R7v????WL?N +'"g???M??6e??EV??1|??l?bYU???????zD??RXt?p?????A?i?1Cj??????u?g?E4-?&?[???>???LA?%IOS???X?o?j??????3??w??&??u???v?????-??%???? ~(.0??#?????m?&??Zv???? ???m?*?>??I?v??_??(??V?????+?=r;H%}Wc???[?? 0???-?}?????i?q????>??!??EQ?%? +N??T???v?\???|???????K??????A]/68????7????|?d???m????C%CU?w?=Z??z{(q????_bI?0?????]???/s?t?S?s4WD??????|??Ot?s0??W?y?K?O?S?U?*?????OF???b ?]?.?$?IXk??Z?_????Y?????????? +???????-K??HL???????O???MV!?G#?H?+???_K3?B??/???%[ ?=??S?|}???3???S?????x0l?)??l??+?G???^?8???u7?????S?=????????2K#????r??f?P??0???x3?h?'??]???????jk??????< ?x??D?J?? ??g?N5l?j]??*?p?#P`R8r?I???eM?)?????>f??BI?6y?>Fm???+??V??2?Z?-\????GP?u+b3?o,p?tX???u?|??j??N??~vMs??`??:??,}???\???[???Sb +4?z??l???4??zvT??z?L???cTr??s?s/+????C??p??Y???{??=O????Jn?E?????@VSg?b?2?1??k??XK???W-?(?iE??E?_??%BM???W??B?+??*E-endstream endobj 1220 0 obj << /Type /Font @@ -22727,14 +22772,14 @@ /FirstChar 0 /LastChar 105 /Widths 3703 0 R -/BaseFont /DSLZCB+CMSY9 +/BaseFont /NHWFHA+CMSY9 /FontDescriptor 1218 0 R >> endobj 1218 0 obj << /Ascent 750 /CapHeight 683 /Descent -194 -/FontName /DSLZCB+CMSY9 +/FontName /NHWFHA+CMSY9 /ItalicAngle -14 /StemV 87 /XHeight 431 @@ -22758,35 +22803,34 @@ /Filter /FlateDecode >> stream -x???U\\??????"???? ?NR?;!?[?@pw?]6Np? 4x???;'??{?}?????g????Ys?Zt??:lR?`K?<a?b???I??9???d??{0H?p q???-?]?G?CQM?@G??_O??5M {D????S?n???~3lo???-T??nNN????jus? ??1ao???=?]z?????V"??????L?#2?I?~IPo???@]L?s*Qqe^?7??????E???| s?j???? vM?0???a????Bfp???????&???i???Ncz}?,?m?@???a?&????*??#????w???No????y??q>??E???y??$!?M?8??4????C?? -Pr????????oTN??1??%??????F}???e???z?4Z???e?t?5?p? -1???tY???)4??@!?-W?T??2I? ?3m?r?{O5?q?WO????r!??+??,T???'????U?{d?2|??8?Vr??x?e>?pe?k??m??g?m?f????eR??O???fzM??B? -??n?@???,???t?2?S??n?c????6K?D?????E?J??Ko???h]?C?@8*?g[???!???4??=?-l??M0??_ H?5?x??^???U?#?l}????W?i44u?(?r??:???? /???^W/??????I??Q??A??&??? ?fMldS?+/J????64mM????7q????J???(???M?u??A?5I?Nz????w??????z`Feq?hR?????y????D???????B? -2? /o?;?^@*????????_????[\z?VX??Sr$ -?:b'?-vc?K??OI?mE?D???MJ_u????Z ?$y?nQ???*'???????u?A?n??#`"?????`0%??hS???s?????+7e-U?????n1?(???< a??Y?0?????hc]B9????gm?R?? ?QE??????4?C?.m?d?R?vP???}???eG??T????,?????A(??)+;????C??R??$?F?w?C???? ]j???????;r?iE4Y-(?K-"G"??*?u??Q??8???7/01?eT?.??f???n????C?6eP??{?.??.?i????'????A????? ?UQ????????d.` `? ???s???"9,?:#????P??????y?????????D?b09? n???(?C3Cha`O_q?????d?Y???B??cf???_n??,???w?{3#?X?R??9;????7??????^?X??%+?E2???% ?d???g0??!??N1?  A?;??????#e8?????q?O??Vo? BuD?m??m????f&.?????1?.?]???TD+???b*?{(??4F?\UT)??'ccp???\?????????P?^u/?v"??W|?.??]?? L?j???g??4nN@??/?U??? >}??g??GT=!?Qa?N.~?N?DA??? v?s?7c??r[????J???91?73???`????=] ???Sf>?g? \6???!??:?e??XrT?? p}3U?!R?}l?F?+F(???c?m:??????Zjbb?i?M?8?*??1_??@L?????-?G?????K ??X?Uqo??????0??|?XR`? n[??6?w????T?5???:?9?u?,?%???=x???)???au8[?If;tO?????*??u?]pU??F??K???'?????y?] -??S6? 5??w: -???T?I.Vn??A????0?????r?8??????H?]@^??R?:;??v?*?(8Q?x?WD?f?D?&??;?? ? o6??-n???H????^?&???i? Y? g"???Ou? ?!???hV??>???04 ???2:y???U????g ?-?c?M?g6S??X??o??`aU[?r??e??%?f??? -j9?N]_y??>? uk???????????K??C??*???????B4y?|e?9?????|?$?N,??/?X????H??| 6??^?s?8?j?2?X????{=#? k =?! ????%?g ??D0uI???f?Nh??x??x?????1?_Y6=aF ?S???8?!??8?tfv?D???u5?>?S???k~z???Z?D'??q(?Fiin?%w?????8??????G{b?6??.nW?8?5???X???^??@Q??v??.j^?=d}?a?8!-???????????#???b?[?p?????Sp? ???Z??C???=?dz(? -??8.Z???7?9z?7??:?j_?0???????F?z??S?O:?Sk?iG???N?^??c??l?(C?????????w??????3$????Ff?p?c??q??Q??On??VGb76???????7)f(4?????/??0Q???+Bv?4???V?X)~??f???}z?/8??wU+ ?z???]?)- ??UK?YFk5* -|F???&?2^?????}?G`? 4??D?~?v???????1??8zr??p? u????& ?U????C? ????[?z??{xr?????.?]?k?D1???j3+zj??_?????1~7?e?)c?eW??G?M???J?????B3mO????By?&??%L 6 X9????z/?|"?r?j???K?_l"?^g?e?|??XR?5=xE????9_WR?35?v4??????)???q Ly????k??S? X?a??? ?M^8~?@PWe ?g?w??e??? ??#???xNed???@FL??Y?Tk":?Z??!?[~???QZ3?k????C???l??7???Sm??X0?t????p?? -rL???(?=??GV-??Bl?????@????????^YE/?`????h?%_?>?Q?f???s??ki?$?V0???'$?p ??6x?????????81??F??'??%?Q]?????????#?C0+???j??q????j???bb6???????OR????u=??/?)??t?j8Dl??^??s?T??5}??-?????;?h??K'?nh%?c?y&??"?.???v?????w+02R?[???|sETY???a????? ?n.o??{ {t????0????cs>?F?? -??#?6 -??-???6~?#?\@?_?y[?$??Y?????%v2z????4\%Z?Uk???y???y???p^+????? ?5[? r|N??lZ?????P??~?t?j?m??umA????????T???h???VLL??G?`?q???-?qP6??????5???X????c?ez???#?t???? T??ZnG??t_s???mW?sV}w??c?%R??????+??? ??r?g?? ???I??>b?8?R???LC;*skQ=9?g?,?F[?w??b????? HJ?r?????[r????? ???}????P?:?Y???????C8???_??sOG??Es~U67?x?el?J?N?)\? ?b?P?"?(??`?E?>z?P????????EF?6?O=?fh???0qA?????6?Pn???????.J7??W/?~???G??.|/aEDT?VRLnQ?}?hG?Cn!?ah);_???;M)?iIN\U8W?m?9???g?r@[??????J?M??H?@C?????7??a}??g??GT=!?Qa?N.~?V?TA??? v?K4?c??r[????J???91?7s???????=]W???=??w??v \ ? K??j?cY_0?o,??su???7?fqcG^??Z?/?F? ???Sf>?g? ]7???!??:?e??XrT?? p?}3U1?R?}ln?&+?(???c?m:??????Zjbb?i?MF81*F???????($? =<[??ZQ?m?+V?q?x??]:qVw;?????/k?>????n??a?????,p#2*?x????~*??X?Y?????;?$??g?c???;??TZ?0J?i"?c???vf?}!???o?)?A?Z +???????I??;q??K?????7???Qn????p?? ?[K?$/`??W2V?W_?g?p?9?X??#??7n?k??e?U?q?? ?=sP?E?_???e?kC? ??m?,?0?l??n?#??3????-?b?????T?7?+~??*? +j_????g ?????????L???K???f?/?V??N??m????F???w?????k???B?0??4??????w???W1p4&L????7{4??|??=??g?? H??]3??k?@&6{?????? /?M?v"????iGq???????@????,?T????_s?e??????????_?IM??t7???2?fY?_?l.%qs?~?h???3?6???(in_????\???g2?_? ????^??e"??]?=?cJevcO??LE?q_????????2?b#e?wZO? (??????&???.??????p? ???'??B?x?k?.? e??/?'NQ!]?w?????BL???s2`T!9?eh!??X?1?&?$??ud????:???4????B[?}????.?*?E????'Q???iR????.?????)\????;?v?R??$+?C?? ???\???crd?Tq??mW??v?? +?. ??X?v??\\^e{d?}??T??+??[3Z +?R? ??????7???7??Y?y?RZ?W?KBG'??E,?`hR??c>u? `?9Dg?Vz?fSQ???????==? ????%?W??DuI???f?NX??U?U?f????%??/6?V??B??V>8x.)??? +???L????+i??m;??C5`?[??gX??%??? ?a5u?~11?zA?????')?S???d?????K:j5"??{/Q??9b??@jz??["1????W|)?????E??q????5??\G???&~???S?pybjm{W??r??h?-q?C??e?JD?? +?,(0-j?e???9%I?gYc +?????CHl??? S??????????????? +?y o???ab)Xv?z??????@W?B3?t?w???!.=aV??? ???i?"?2????? 6N???tR`?????Af?*H???N?KP[?????mH??CK???? ?$hU?o'?^6????|qef?x?Q??6a ??? ?Cegnr?|???[4??K?}T??g??-y??9?ID0?@6??|?|?????????~|??_?p=w?Qmu?X_A?l?td??9 +%??TOQ?o?[R????t???p?M?*?-km?+h\5??hZ?,+J?,???AfS?;????e??w?????`?9??4Y?+G??u? ???Q??^?o`j,x?-????i?????#??J?+?:??%G???Kud??>T????M????G????;?A???Z??FMr???G^? W?Fv??g?KG???%3??0?M?L???E??tX?q??=|??=?????Az????dP?P?,?Y??????Xf???.G?????Y[+??n?04?#+S?nFV?o??K??2|H?00-K+?1?q h?/???iH?d_w????(??O????ME4???`8?"%???? `B?=???P,?b???\q=??,1??Q?x&????L???F?K?2??$;AVv1?t?&rS???? > endobj 1215 0 obj << /Ascent 694 /CapHeight 686 /Descent -194 -/FontName /HMTXSC+CMBX9 +/FontName /XHBBMU+CMBX9 /ItalicAngle 0 /StemV 117 /XHeight 444 @@ -22827,7 +22871,7 @@ >> stream x???e\??????P?P<8?????. ???Rh?"??@?-??"E??mq?'k??W{??x????????s??F)-???srW ?=??H?M?????~^??[????\[2??>??b?^??I" %(?Q?{^U?^c(???????c7????;??"???2S?? ?zC?????Z?2z??a+l?ymm??V??8+u??????1T1??X??$?)P?Wu?8???????i]? ?^?hl????(?T?' ?FB%????i? o??????T????k???!"?~?@????U?????!#$Y#?,F&7???Bz???]??????A?O??>???V??A61\6???_X?v?4f?? ;g?~$??nP??l+,?????D??.?)k^oN?;h???? L?)?a?%?/?? y6??)?gL?u???r?|R0??{?m????Yni?????b? P????SRu8?k?r?gW??????7???????????}?N?]??9?7??????v??~(??7,m?w(???|c?1?zHY?"G?o?&??9???????Uo:?B W$?P??wFI??zO*?i?t??4??~(??7????2??G?t?g???xqf)??W?/???z8Y???J?F?P?`?&????+?????c????E??Q?? ???F=???=/b???????6?YS Z??D3??[????X> endobj 1194 0 obj << /Ascent 611 /CapHeight 611 /Descent -222 -/FontName /CCDUEK+CMTT9 +/FontName /RJTMKQ+CMTT9 /ItalicAngle 0 /StemV 74 /XHeight 431 @@ -22891,7 +22935,7 @@ stream x???UX???p?k??N??.??5???????????,?{????????J??/??:??o?d??Uo??$J? ????@ {;F^??? ?????B? h?bio'f??????-????????? ?Z???N\+????????? ?Z???N\ 3H??/9Y?? ???$f??????de?????B???_??? AVN??O?_?r? AV?!???/Y??u???? X??[C??N.M? ???:J6?4????uw?????`??p???K?W?????7?{???&?l*[?*??'%??QQj??????U? ?/ ?+?<'5?^gw _g1Z? ?1i?@@ -22955,7 +22999,7 @@ ?J?????o??b?^ ??????/1?g?_>Es?J&?;???F?T?<2vs .????(@???????q??\3??????y? ?8??|??HR?lh??;VHV?QyZ??]*??? 1???W(?(???9?F? ??????;??A?????????%W&{??K)??? ?g?M0??r????_??????W???j?9D??^???3??(b???6`S>?w??T????????8f W^?,??> endobj 1154 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 -/FontName /MEBXGZ+CMR9 +/FontName /URKISY+CMR9 /ItalicAngle 0 /StemV 74 /XHeight 431 @@ -22991,25 +23035,22 @@ /Length1 911 /Length2 2612 /Length3 532 -/Length 3256 +/Length 3257 /Filter /FlateDecode >> stream -x??Si????V?y?d??'Wz?[??k?\??gWYX|?????^?c.??v?[??}?????,????????j????j?zN4TB??M}?(8?????????q?0??3??? ??????? ?@????ca?q;???Vj?kON?{??e??]*???N?r? Asj ??N????g??????*?v??zq2?f?G?e?5??D???N????~3????w??9???"??Y?Vi?}Aox???E?T??@&(#6??Nj???@?8?????Y;;?_??EE1ZN?j?!?=????=?7[??S???u+e}B?%??/???y>??9#?ls,??9fv??7???????fW?T??Uc??n??Z??Z^(I,d?S?(????iL??"s?????F?@????`F?#???(1?wH?q?N?M??????|????c???B E??V?6????7???????}'T;?o\?Rc????S???to?QN???????z?Q?u?/I?V:?m??4~K?l2???? -?>4??!/h?;:?SE?B??{????;0bJ=?w??`3??9?Y??%??E?$??i+?'?????6??I??K 5X?(??????ic??????? ???S?!??cz |??B???xZ?w????+???#W???N?.^?p??1:?D???` ?X-?Z4?b????5??t??????10r$???lNnkz???k?c?? vY?/?????NH\??V??r??????l?sJ at X ?? Q?!R-?\?aQ??0Kk????7??V??{`?????s?c???j:CynQN?!??Z?`?P?4?????V{?Tt6[7?>????g????vWX???R??h??????z?^?LC?+vC??0Q}?*????????,?'?V???'??z?B?3Omlk?m?)7???_?U?V??l??f]4?Q?????????? "$? ?? ?;???endstream +x??Sy??x\??????q~?g4_??}???>?{75E;};?????4y?J?7???>???@{?????a??????o???x?Gc??|uk???"?%W??V?=???\X??L???T???M?K;??5alr?t???q??????1???,??v5??h^SA?O?L???S??R??l?>Y???p798?g?1.?g???z??Z?A??:???M??B?u?s????I??>?o(? ???? ????????Z???????tM?????XR}????Jg\???lj??_)??R??o?q????R?fx^ ?G?/]&?I?b;o???????-??z?]t}??i???????U??yE}??[)???L*????Op??6???????????????RJ+?6U?fr?J?,?M:P'wl49???]z??%G\???GD?%???F,?K?q??A?c?~??"?ZG$?ks??~??#?????????X?<r?/T???%0?U?(?@M6_???6VM???z???f?}??-?](???q??\??v????????)???B??h8?7?-AO?Z?????????]-iJ??;?N?h?!?g?2???:9?!?"|G?Y7?n???k?K???|:?????v.B ka?s!?2D??K4*J?fi-8Q0?????J?s! ,??6??b?`L?^Mg(?- +??9??]+?J????_??j????f?????p???|??? +k6?X??I,?{ ???cOy?~sn?_n???? /??????sNn???9|T???d?5?8Roh??H?] ??c-??????f ?S????FG{??9?}?E?????pV???S???????????kb??M??W? +7??%?< ?????????+U???&g?X?m?,w{H??Jf?????????Kg?k?? .:l9?3??R?K\?.+k??? u???? Pf????}?!,??cEMJ?_1?&Qe???s??g?J???(w ?5?9??u?j5??cS?.???^[?=???_??!?^p /S??O??????+?+3$U??X??QM?f????*#^|E?c??8>?m?????7?????m-LT????yq/4yD?0?????o??>?????S??Zt?d???i??{??U?;;?i?Yz??4J?:??| ?3??0 at bA??wA?!?n???endstream endobj 1153 0 obj << /Type /Font @@ -23018,14 +23059,14 @@ /FirstChar 48 /LastChar 57 /Widths 3711 0 R -/BaseFont /SUUNHU+CMR6 +/BaseFont /RITNVK+CMR6 /FontDescriptor 1151 0 R >> endobj 1151 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 -/FontName /SUUNHU+CMR6 +/FontName /RITNVK+CMR6 /ItalicAngle 0 /StemV 83 /XHeight 431 @@ -23049,21 +23090,18 @@ /Filter /FlateDecode >> stream -x??Si????>?????t?p*?&???SU?j4*8!K?n^???|???|??bu??C%y??????n?PU??K?P??<???]??Dz???????$? ??b?? hn~+???-???s8??m?Ls??,??'???=??B^???t??qM???ys??V?.~%?????????i?????+? AqQ3? [K'??]???????"?? -A?????p5??G??F?]?]? ?J???Y,??%7p??9???8?Yw??Z?Ar?????D??w4?ZP?i?D??Qw???%??z???:??K??K?#Em?P?=???????7?E???????G?/E[;???/?r???Ym? ??????CQ????rYC????????.{?`}z??Gk??9w?w? -eV?=U? *?o?????D???W?????82??;?Jd2@`G%?4???c?Wqv ??$??f?HD???Z(=m?????nEd?"???Ht? R?K?????s ?}?_?8"?q$4???_b??X8%?Gj#?(!Q?????]???}???D??:???a??$9????f?????u??8????L?;??{m?4??LynI?+??h???y?EruG)D?b??9RT?K'm?G?\?6?o???r?Nl?1W??;?X ?e#??????C6'???N??/s:, ?}??qL +?1e??JC?2???Gv +;Z?o?%??N?????4?w?1????(??BW??o???????~!??=??O?u???/?8??o?)4;b?+~???{???;??4T}L~b6s??p ??e??>5?4?Ho?0???r???'`+F&3$??iM?4E???#?~??5??&vr#g=V?{??p6???????C?Kt?i?*D?Nk??Y?/?????v>L ??&?????!S??U????>O:???????j??,??l??O???E?+f?I??.1?kFTw??km?????r?l?< ???!(??X??~?J?{i?X????:?=??>??^-???7???K?s???z??|?9??^?Xn????$????? iI\??|?E?`ixM??*N~kV ?5d?5??5???P???s{???t????=h?( ??9?0?^???" ?%?`$??n?9?E??[?gO?W?{({??????;~???~0?7>{? ??x????sM?R?z?!??M??A???s?????|?D?;???Fp\???m??0?9?;?S%????N?U?Yc?D???GZzC?k +qW?oT?o\??c?????)??V??_???V?pM?MSt[e?Dp|???????~y?k?e?,=?????q??? ?A?????J?????8?h?y.$??I?i??C???e?1???y???M??{?z],fx?>?slxp???B7???f?W???????%???????_a+??=?NM????V'?"iK??}??[??????j?%0???u?[[8?k/q??l3J?????-?????????! (???uS?G???n?kK??0Qg??7e??1(X?n?s? ??2o ???i$? ?,??'?f?qE??{?????|\??????IU?????X?f??? ???[kyX??????{|?Fn?D???bOhyf +?m?H?1??4u\e??r??????? +J?;?su??A*????+jG????*???r? j?/S}pp?a?}KN???4??| ?/??Q endobj 1028 0 obj << /Type /Font @@ -23072,14 +23110,14 @@ /FirstChar 0 /LastChar 105 /Widths 3713 0 R -/BaseFont /PRCPDV+CMSY10 +/BaseFont /YBPRGY+CMSY10 /FontDescriptor 1026 0 R >> endobj 1026 0 obj << /Ascent 750 /CapHeight 683 /Descent -194 -/FontName /PRCPDV+CMSY10 +/FontName /YBPRGY+CMSY10 /ItalicAngle -14 /StemV 85 /XHeight 431 @@ -23105,53 +23143,65 @@ stream x???UX?M?? ??{?!?[??\?;?C??n????=8??{???n??of?df??h_8?{?zj????? *2e!c?!Pd?????? ?Vga?023 #RQ?? ?A6??@^ @?/??-`???????+?X???? `b`?-??,*???W???????M???[? -h?g[?p???????Qx????n?oba??????????????_???/?c???,?B???_??? ?V?|??l?B??/[???????le????B???_?r? ?V?!??????\?B???_?r????KX????^]V??[?x?9??{???9?DH??O 33x??5r??????-?6???w?t",?BZ?|??]?S,O?D???%uy&t??T????I?{?u??Mso%T?L?u??%? 8Bko??>????^-M?(?<?}??%!??5?????????.C??~;tSY??y?I???co?T82@??????8S+@)??D???2?O????????g??IF??????\???'????`J???-?`??J????=??k,?;?????-??,?q1>??0????e??<\?t??.?$?e?Q??????Y?S?u??Kr)?N"??C??3?Y?V?n-?)??N ??????x???L?I|_}%???O?U?f?/???7?*=?????k=??Y???|?W7?????s3????V?w??'?H6?????[????E????? ?5??J???{}?/L ???dL(??-???-^???? m???????????L??$%(?l???P??7a]??!}3&??&???8???jLA5????????.U\?-C??fl?*?Ey`??G??@? ?X?!?N?B ??3???????LbN,nf???B:????d?v Wd??????#z?G??#??EM???U?+b??? _{?P2G?Kf?H??o-p??i??????q????? -????5PA`??????????????u???;r??????-?d!h???fi?????s%;?/Q2 -j??#?n?? ???gj????cL??Q$??X??&?\z????????jZ??????Cn?? VY?]?{t|??????\?J??w??^C<z@s?u?????" R~??os}P??CzQ?"z?w?"3?> ????k??,T{??????A?????6Ob?-????????/???9?70 ??y_?z???? - ??*4?'U?\??@:?8\?+????U??T??i?"????"???_?%?b?KH?{?X??W-?d???H????<? 5?;??? ~";??)?&g?[?N?9YH#?a??5 l??????? - ???#?5x?? ,??????ur???iw????????z?ds??????}????o????B???3? S?7??pw??v?O{Mq??v0???????l?-!s??d???x?????Z??zt ???&w??y??ahi??????????] -??S!?0 ??1Rc-??? ?$!?8T*d1??+&n??????p?C?P?Z??7^m?V????[#??:?a?%_5??RO??"Qh:????;pY??9??C??UT?? %;??????`y?^?k??????J?????@bq3D/???????e???8?%???N???d?=q?f?su 9??x? ????z????3#xx/Y?*??%<-l?? ??????(???N????d7D??>?^?? ?? ?? w??6?&n?!??eE -?0??LE?(#?7????B??n???Y?!????>? `?h?q?????L????????? ?m$0??6??r?4J??et7i:??c?B_R?*??A??,C?a@?$?N????E? -?55 ??nF??`Z??&?????)A?B?,???"?4?????_?????F -??>??O?}]8_??sF?H"??????T ?????!???~dH???? x?????N?]?b{ ?f???x?E {??$??8??mix1?? [?u?"??????-?[N??? 32?S`??S??= ???KxR????Y8-f$?(zl9[??x,{?p/???Y?z?3?j?b??Z??-`1?O?????(}JM?8uXI?n??K??u??L?C?' ?.^?? $|?yD??X)??yE?ue 1? -?I}??????=-?)?D??C????sf???P??T??Rlm???\???\??8?J??`?????AO????.iM?t?oo4-*-??l?????Q?NX >~?4?] U!'t%c?+??????j?(??@Q???l?? 9?H?O???yk4h?W2???AEUG???N??)?>.:?[*?m??Bj?4X???ANVV???"F?Mj??l?!??g?~?????O?r?9?d????E???j-???;??? ???y???0/c?<?}?U?|???:Y??yt?i??R?????????>????c*7?*m?5D? -?r??]????$???05???x,=k???Mc#??'??????q?)>w??yZ? o?)`????Z??'?p??(??#???Q??`'?W????Q-?x??k???"??J?C??}???+l?{Getf\?DO?#?q?>j7?;%a?F??}?+??? +4???k} ?? -? ?LX?\b?5?o????n?c{?????,F???? -??????W??H???????O?%?.>???/?%?7??K?+"\k?o? ???q?u?K\3 ?uC"??N?Ib? ??Z?j-Rk',?{?d??m? {w??t? ???9??D/Z?>5/???#?M??v?l\?@K ?K??U??1K;???H4???? ?%?d1???m: ry?n4???|?bb?????K - I?????@??2?4?Rd;r>jX?!0??\$??n?????qL?L?q?o?9?!??? ?;?1?#0?????H|(d?W- ?h??f????(???????%pQF?[Y?????@;??]|?!???u?? ????@??????????'2#???C?Zo????'?M???C?U????0LY?????^???? -l_???f????;??????????k R?????y Hh?'?9???{?gB? nZ???? ?=?/~??XM?????y???{L6??'???C&?a???|???p..????\??DF???L?U??'&M?A5d'??; ?&.??;q?$????K?#?3??Zn66???A?+?#????? ?U?L???[?-???L?? C?w???w?[5?????+2?m?"f??\6?9?}?!??-?G???]???v??Y?????n?-_ I?? ?E???b]fq_G/???[m-G?"?????n)%???.??.?r? ????j??????}E???vd?3k 'kez>I?Z ?WQ?Kq5??TF??\N??M????;? ?"?3O????u?V??yT?]^?M/&I{.?d??`M'K,}az??????Ng???B???+???Sz???9?[ ,?e4,?TS>]?v[M?????Om????#Ig???1}??j??5??(EC?^??C????a,.?KJ?s?????WN??*m+?!'G?(?i????+o???q?????0J?]ut'?}?Q?Bno??,5?????2fA"?C????YC?1s?3TD-?a?????5]???i???Y5[D?>T{?Uk????$??1{S??M ???;?c at q?????+`???????+?X???? `b`?+`?????!?w?8+6fb?9???? `?G??????L???? ??LvN G???????p?l??F@??b????ApOB???w"?????!p b?&.p??/?????,!????d???????C?z??&np=?????????xYT??[???????????7????????????????g???? ?X????? v7? ??? ?y?!??????_n??/?Y??`'??,e????? ?`3???`+?_??? ??I!???/[9??`+??l??????B???d[???`+??l??/??7??0???? ?? ????`??sz??LUs????@ff.??'j?do???m???M???(? +4B\?} +?Hn +.???,???6m??????D +X???*?bG?V??X???? ?K??L????8.~?g?2????????J?~?&??cK~p???4{}?)??6Z??Q0?y>x??@#???? ?G???'=??K]'?U??6"?? t? e??P???u??????7x+k?"?????,Sa????????K??6?V[?????p9!?h???"???????Q????C6???????f?VW???rK?s????0"/??_??????\^??4k?/?$?????7???/????S?Y?(?t??j????7? ?M+7G???^????.?T????_:1???;?????YF??j?X??$?~S?n?/??Z?j?}??^?KB?kkz0?_?-;+?\?fw?v???6?????#@=?? ?pd???????q?V?R?Q?u?e???o)?? ???|%????}?g/?? <@O?7????? ?O[??????,s??{ra?XxwBY?O?[.5Y??b|T?a?w????y???J!]?I??|9?#A???4 ???f!???R?D?7????gF?+?&Q????5b????!G?{?+7?p??*???.E?,?2?i at B??6:???Oy '??Y????????A??xS?#?6U?4?F????# 0????? ?l ?{(J??Y???'D???[?:2[?? ?V???????7?.?X?$????e??'??!w?Z??? ?????6?[7?\?(~??PF??l???w?v%?M?????????????$??_l??}pR.??f"???H??Q?:??W?n?o$?+?n?G?q-???OG?/@??????|??c???????k?cj? ??^m??7;p?"?Pyh7???5~TC??Q?P?A?X?W?@@???MyD??7???c.?X?V at .?~|4??z????3??_?z????P?[ +B?1)Z???d;??8?cK?+?? ?u5??\aIJP?? +?????o??UC?fL5M(?a?q?? ???j?;?a???]??n[?~???8UB?? :??l??.???P?p+B???7?n[g?M??S?)4?(??X??F?? >?? ????=R?>? ,??D: ??2V??HI'5S?|) +?|(?n??$?{c?T??? ??|?eK??o?=Xt]?j4???B +o3????%???B +?1?-?+??,?5v???e??|#]+?\????b>??"T-ggWz>JE?[? ?%/??]l?V? 3? M|???7? +?????????????y k ???*yJ?S0?oW.@?f?????L????k?pk???Q=?????r?R?^?????Jm#????YO]-?Y&V???!Tgf????1 "?nQ???T??5r?????f??[4b +]?)B3=??9&?9?cbG?4?>?????O???(?}???+??????&}B??3{?%??1 ?+??y??'???t}:"?w?j333!x?9Z?1?6B??I?????/???JKVv?Ajx\???? +??X9?!???V?/qQE?e3~?!j~^b???????j??+?jf????kd??N??]??| +???M???N?A.{a??4au?????B???\?????? +6"?c?????;?????x6?"????;a!J/E@??@?????Ryp????pi??jL?~?8???S???????$??D]?*?l?t?K?????gV=?o?? +?x?8^kgi?????:)?L?.#?????b?7=g?qY??????ylc,?>?iF???8???9?J?6J?2]??(???=??k?a:?w??:????m?-x7t)??A?????&~#?? ?????t???????}????E?6??Ef0}?A-?????Y??,q{????%] ?m??.[6(???????_??Yso`?W??l???w5?#Uh`?N?B ?~??t$ bq?W??U?P1?PyR????y??L??????]?????t-?t wR???Z2?N??q?s???B??t???u?0??Hx???U????S???tfU]?j????????T????? ? +???f???[-??[R?x????t?M??Idaw0??=?+ +??????????|'??'????wRD ??p??b@C???%JC at L g??%???????(??lc??{??, at 7?s?k??i?2??\???T??sCY3;@Nw?cBG`??k5? ??P?"?Z@:??????%?Q&#C???K,???t?? ?-???vL???C??`?4??+_??e9?')w?OdF?3?? ????????O??????f??9=a?:??_SYQ?C?R? ???w?? x??Q&c +?]???;?[???U??U?io?? ?Rtj?3 ?L??S?U????5????U?N??W??MAM??oaF???l?HR????? -*8?????3w(A??p?U +?+??r%???|????,?-???"????l?7wN?"?Q}v?J[?jkp??w,c=?????k???s?u -??????E?c+9 ?RJ????IG?????c(??W??ckv?3P??|?>?????'??X\:??D?6?_i0???U?V*pCN??Qn?p???W?<1=???Ue7*?a?????$NJ?&????(???Yj, at i??ae??*D??FO??y???'[???!%??? ???z~????(VU?????????????w}i2?h+?T??8?}??:??,_????<?!? ??h??i=7|??(c??g4??Z?????? k?>gS?????j???}??`??zM?I?_c???????wb?????/\{e??v?"?%??e?^?? ?&???&?z??p?R~AH=?o?q?e+????)?r>,\ |?!??G???'?dF??????VS????L?Z??}G???????'??$k?,???"?KG???B?R???z?b????W?]????O?j?????? ?|??&;?1?V?????{??ZG?????L?3???m??R?9??73?R,?"???C2? ????P??l?(?'?.%?j????Y?>?7?g???8?P??9/?{?#???+??y???(2?Y +c?> endobj 1023 0 obj << /Ascent 694 /CapHeight 686 /Descent -194 -/FontName /DHANPH+CMBX10 +/FontName /VFNZTQ+CMBX10 /ItalicAngle 0 /StemV 114 /XHeight 444 @@ -23192,7 +23242,7 @@ >> stream x???UX????qK? ?? ???Bp??i?w?-@???w+@???w ??]@W?af&??#?' ?????";4?? ?[? ?7?YB?k ?h??}?????*?.??["g??V??>Z??c??E??X?oCrt?U??????;?;o]~A?[?8?$?7i?'+?m???b4??\???U?Z.????M;?;?R?W?E^&???q??L ????L?Q ??f'Sy??P????:6ae%????? ?'6????q+??d?7<+???w+z?@@ -23240,7 +23290,7 @@ ?1aL?}??0?E?8UW??????d?M?^?O ?????:?j?????q??q&E??0e?w?q??k? 3??'?????>y?????c?.$|~ ?M%=?AX????G?O=? ???b?]?du???C??Z??r??????V?C ?-'$??t?? ?|????@????"?/?|??????6??T?[????L$??!????C??w'?K???^f??O?\????????N????>%?\??k????J[?&C|?=u????U?H ?+*j????>8+??Z?c???{?1?kb,? ?> endobj 720 0 obj << /Ascent 611 /CapHeight 611 /Descent -222 -/FontName /RZUVEF+CMTT10 +/FontName /JFZYNL+CMTT10 /ItalicAngle 0 /StemV 69 /XHeight 431 @@ -23276,50 +23326,56 @@ /Length1 1914 /Length2 12057 /Length3 532 -/Length 13137 +/Length 13136 /Filter /FlateDecode >> stream -x???U\?????;???Np n?? 0??`?C ???w O??Np????????J?~/??:?7|???~]]]?_?k?IZ8????]??????*??-??'??O??t?/ C??????X??????{?"p ?I?y???}???AE>???? ?2??????,#?b\??H?+?5a?':?_?xR?d??r??????D?????O5???}?????Mj?)?{?#????$????????~?s{ r ??;??}U???F9?O??g f?I[?'???8??????p:?"??L???s)??#?(^Gu3?0Ef?I U????S??N????-T??????>???`r??"?????P`U&??%Z????K???????q0/B+??????C?B9?????cL|?|h#???M?}?????y0A?_??;YL????RAGI s\%??,?Rx?f??yk?M?G???Z?pzY???b?X??????? ?0f?z?f?????+?~?/5??????eRE?R??x?e????*Fw?A??w???p0eh?1L?????????+2]R????K?{??B??? I\$????1'[/??SK????ix_- ?w??w?!s ?X?3x? ?(??OZ?>?d??????? ???qH???Wx?go(:z???4????B?f%G??r???-?0???m1! 8????j??{> 7x?k??>1CD@??3?}??????J?+N[????e?? JWO??v????V?m9?g?E%??%??eY?6??p4R?F???Z+"???6x?r}W?:??de??c ?e??????L???????????Y?HP???N?E?@G????&G??9?X?r???????TH??4?`^?^RN??k???c??%???&?!t?!$??l??? ??????/??Z????????E>??m? uj???g?ZF?!?ts?,E??[8?@??j/?????)????x{p?^???V?_??J?f???Jjs????????>???5??R?c??6Gw?Q#}????E?&?????H[q%?0?6?H?W??(?s?a?????Y?5?j?U?DA ???yq??Y???GA:???C??9?=~?@??/D??b??=. at 5??8??2??%?V???k?$???N???O?a??Y??O??????u???? ~AWfn??RV?!?d????w?+i??G??Xx???"??Vx|?X;?????O??????%??(??`??"?3S=??~????=???_SQf ?????????{????C??8??K[>??f???M?o6s7?????{??? ?e? -^?B{??w Nl?BT?;???8?q??????E?B?a?2??6??S?2??b5?9?4???#-?&=?u?8?E??G ???n^??,?Z?Xm???'H??qbU?Hw?O???1zOC*A????~???d??=j7"??!??t0Q?= ?????(??Zgz[?%H3???k??? ??B]O$v??V?Jt???[?:?W?&?I?iLH?S??]|?1"?E2Y?3>5l1?E?%????f?H]?S5h?`??t?bX??p??>????J?*+?Q\YM?QR?y?]1??-???????M#Z(Oj? ???K? ?,? V???-??????qB???BV??????y??=t? zP? -6???,???|4?vR?GG??l????|????\?-.1?5???,????5?1??A2I?Vk?y???f?bT???U??W7b???!?$?8`?/???v'?5$-D?????????Z???P?V???1?1 4:?"??????{Md??l??3nlOz?W?Mn??D-<"'?????x??n?@"!r?W??i?tg7?d8?n??z?;??G???U??cJb|?j???????wu????E????`??X\\??M?????Q?????#?&N?u??h??)??K???,???hH??L????R?"&_FD???P?h???&??do???0??3Z jjw????*?+T?fo?QG??u???w?Bf???M?? -ji?Y TL???{???f'??_3X?????K:S??:V??????g?F?R???H?g??BBX?m?!T?[??? w'? ?)f???ps2????i3????Zw????}??h9?34?????IW?v?k??gf6!?R??p???????[??ZF?.?? ??????"_?^|:Ci??J?{+?B???UNZ|G?7??w???b)?????^??N?X?3 ?sP?L???h?,=fy%)??* g??~?4h?1?t&Oz??E???U??J???&?????r'??>???e??$"[%?L? ?$?c?w{???<[L??G)i????0?*[i???w??M??x ? -$?;nBk?B?vL?J?9"?? ??D?i???M????D???U??]????N*?]??n?*??{?Z?b?.s[y??DnE?$??U=-??????^???U??Z?^{???[?????? W????:?G???\U?U9Y\u?? B??0?D?P?Q???)x?qp???b_?_rW?t???cq$Q`d^???k.y?+ W??>:o#??5???r5D??FS?????P??????; -$),-??OY1Pa??l??;??uN.?4?????Bg?T?k0d6?J?|VQ?^ ???zh????xaL??]N???x???&??0(?x?r????Jq?o????,???(???^?p?h?tT?K^??tNBW?^?b??R9?n?? ????b?Nm?????X? -?{??V?? -??da????? ?q?!u??;@??a???^?W??????F-?|??'6+??7w??]???f???I???G?V&&?Szwv???!(?9?Q??n]??R??6Lu?]???|X9??yyp?\?0??"??? ?a?h5No?;w????+?-4c???????6?[?3f??~\?c?????G3??x S????d???q?:?p??7]?q1Xi?^???0C?E???$pS/X??i????td??RtB???z?X?b +?q??/?;??????6?&-??q]4?u? M????r?|?hTT??*;??X?S?A?y???c;?}k?t?.?????] ?Qv??z??Z?A???????u??????O?V?za?r,?O?0?5qlt?P>?z3?jm?,cs?????V??4"?/?%??gGi ?fj?6?zxR??????ZBN?[?7???UQEo??6? ?B#??n??/ ??????#`]??? b?2?CH?=??P?N??b[3??r?:???????????J??u??e??6u?2`???e?+1??z??q?2u???? X9?????????@????I??R,?~????'Y?1D???????"@8o|?C=q??6?[=E??????s?rN?;?H??1?yYK(?S?I1)hs8{??P?,u?%4?????????x1?l????????? Dc???F??Z?X?W??mg???N?8??`.?(??b?p??V_?4??w??-??????8??q????gat?-w? ???Yv?w?6RY ??k"???Ac???5??z*1?/?????3xb?r~Qr?I??????;?t7?yV???L}???????"}???\?Xr66??5z??i???vk??Qj???9??9?!qR;! O?pzkv9o?&?_?_E7????9-%?_??p????-??????,???? ??:S\?:gT$????????@kc??????-?1z? ????g'u]F???k Q??-???^??%??&??7?b}C????3??P???gE 3d?ED?qo}#;v??S?M??N?????w?e?????NnuC?=?Gu>??H?5'? ? ???f?%El ?????:??M????? \???1???75??z?4_Q?X??????????'??/?????????([??? _??s?T?h?~?1?Rp??1??_????`???|?????X??+?Dmd\m?M?K?!j???AD???W#?a\]?@?SMa?g???f?m??? -1?(3.????????$b???????}1?f??3?IY???B"?M0???3!3???G?v??[x\M'??b??];[|??}???W??Ulu?n?AJF?^Y?%????????P????mh???,??j;?X}???,??-?l??????1Ym??i\?????t?%d?$R{B_??}B?4?`1np??+??<$>? -??h???????-????Rv??t?]???vv.??T??????$st?!? ^Y?????6>a?tF?(???)?C???a???????}??????7h,??X??U?\MR????7:???????? -?o??*'?rH?*??u;y?k??????2??H={#????:bR?H??w?????,-???!??{????N? a_ ??!8???a?\2?????C?????}?? ???S?_j?Y?HQQ?S$ 7{%?1???p??Oz???3M?1????G?p?d%+????-Z}?FZyB?3???Ki}??%}??Q^T6????03Uk3I????????????o?'????K^??????KQ?????D? ???????P8=|L??\?'=?G? ??Edi??Q?0??gd??Iu ?G.K=?+?? -??*???????.??VSDj_???+=??e?]c#J???'????ta?8??0E^K?z{?7 ?^V???K-=???N??x??-Z??3gWH??????^?e?_?.XO?m?????>fE/'?z!?I?|??Q??Z?N?E???T?v!?M~?{??sz?"-(}o???G????Y???????O0???P; ???+x???U\??????6??????`????@pww?????? ???SB????@??p???_?????n??/???w*????gR???'??[??I`??w??_?bG\x??M?B????????K??#?U%?{????(???L??K1??]??'0?????!??U`QX????v1?+/4??? ???.?x??-?????????P\??^?q? \([??s???2 +)?3z?$???U?q?+?y?'?[?G>^,??|A???G???t?Y??J?K????X?1,??! ??TY??]?????_?o?y??O??o.=??s???3k8K@?2ib,?!?n#`RR???%]oJ???O}?)M?:??q?)*;]Z????6???l2.w??????`?????5gn???B?c??-?tH???PW??????Z?~?????*Nu+m??dK?N????q?6])??????E??*O?J??'Z"??q ?m?????(Fw?w???B2z???DI~??+?1!??C?+E \e?? ??3?4+?i?????Qw???4??????J]??????R" +?????)Z?_.'v???d>?2cOu8"???J_?K{z????{K'???mx??????????0?}:D?T +V??vkJ???/7??D ?G?1\&s?6?? ??n??[??v??$2??}?V3?????M2??M????pU????),?pO)??22v?;iB?_?E"C???J??E?~{??lI?g???4DO???5???t?O??uY????h'???????!vo????*????T??\????'W(?C??^???~].oh~?pEq%J?!.?5?R???r?Lq\?/zI# O??>????v"_"???n???q@??X5?Fp?????B?H`?jv??*?u???'????????????t???>????????I?sHk??J3???+??G?~i>LP)??>??(??"?????;?t?IO????"Ob !?u^???L?0G?^!s'U?t+5[???pL????y?7VI??|c??0?f/???T_?-w??2T?A?y???.??????=????c_????W?h??y[?????I?h??(??? g?8???????U??y5? ?l????^+??????9A,?0????n2OZj^??H???M??~,???I?"??e+?K?G?p?K?lr?'????c????Q???????C#???)/?F #o?V???????1??G6t(?????v5?4?w?0???Sm#K??Q???}?????p?Q?+?W%;???h?I?L????y???Qz0+|?r??U?G??A??+i???????7/?]f??G?0?xg0!?D???w ?'?@W????????~??.?S?Y?! uao????%wP2??V?a? ??`?"??6:???? -4?G)??q??n?????-??0?sg`???H???[????? ??,'<? q????L??????????d?v`r???n/$~??????_???5S??b r??.???a???M???t??`?????NG??y%?M?H"?YX????g?LT{????^.?????Adb?zQ?????p??P??z?r+?+ /+R??9????6%^??I??S??M?j?W{Y?0??4-C???x\?I0?)fj ????1???0??bSc?9??A?????q-\X??.???I??????z???M??????/??D?1???J??????????E?=V?/?& f@? A??[S?.???9?0 +?67???@???V??B]?B?????E4??7???*???5)?5t?y?U??7?Z???JPw!??S`?d??!?ZwM2?I9` ????0?f=%?}W O??z&??5??0????6V?L;?FI??JW%s????:????e??C ??{???p:8&??n???????W???= g?s??????p6dp=8h??"???u?~???\??3s?-\[?????>?g???+?\/??dnT/???H?K??>??S?+v"\4???????k????&?]????1I9/?J,O????-??!??,???5?3^~dp?6??Nr?O????D ?\??l??t?N&????Y??d??z????1?????q?d??t4??}-7?|??I&?L??BaEYmQMV ???????-?~R???????????>_mO??k'??s? +d?6\??M0S4N?X\???j-?????t?+,?so>? h?||~?I:? ??p???@?^???!?`nq???]??RQ@?8???~?f?Dl+f????J?E?s^?'>?L?X????????z?k????x?=??^?%???_4c D??*??^,"2????C?h?_ j??}???Zu-AT?3?9z?w`kJ??-?9??6?Z0q? l?G???ksg??\TJ???m?*?4???^H??O?Ho Uf +=jY??v3;?1?AK?v1? +???????????5?u?[?'L?y?:???E~eT??V4{0mQ?H??"????? q???y?`d|4?%?>??????}?+??xcZ??g'?G;?y??@?KU?uT,sd'??l?D??n?P????/?j?+3??k??}y?iGp>@?K???dL4K?^?.??? +?!???< +??#?L?C???F??PR$?wOz*}????Z at m:@+? +e???4???N????Ow?@?" +{>f10?8??(&~??{8m=)??]??,?&???_d}T??? Ed?~6??????q9??z??Lm???<9????1???-???M?N!?i9?\????l???p???>?+&Q?? |(:b1??h{??$.?F??v??)5?????#p{???!?[i?@E?N???8R +???r?????w?/???? ???E??????P;??z?u??P????i?????VK?_fn??"2\D?q?????[???qD??>9?????]M?Rt????)???zG?NwP+d[r?*pcx??????&????????6?l???9?5??x???U??|?]??!gZ"vH??u??G??.CK??@7??R???#???N??????I???<+G?8?$??????????)?? Rfa7m?H?????NsUD?O?5?;?}??~??i?>&???j?k?;?}S??e\#2?Z]?r???Jr?T??w^???zV???n(N?s??[?n??UJ??????M?H?B?(V???B??^?T???D??32!??t$??0??[???P?? ~???s? ???+????? ???A\\??>?B??$] ??]?N(??????hq? ??\p?g&v???i?????> endobj 701 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 -/FontName /GYJBJV+CMR8 +/FontName /VZLCDH+CMR8 /ItalicAngle 0 /StemV 76 /XHeight 431 @@ -23355,36 +23411,41 @@ /Length1 1135 /Length2 5781 /Length3 532 -/Length 6531 +/Length 6530 /Filter /FlateDecode >> stream -x???e\?]??i?A at jh??S%??f????[@??ph?F at B?khQ:?CZiP???y??????|:?s?_???k???k???IK?W ??(???|?-??$@@BB?????I?I????a.?p???@??W?@? ?Z[:?-v?????-??????}d??`^????-??4]?C?]3 ????.b????Y?u?z??9??%?6?J?m?k?Qm??????C???Xm??@?}w????)1????]D92H???o?t%?%>r??hb?-;??Y#???>??aj??nOG^????????Jv*?v?\?R????????2v???(?7???\#3Z6%dE??XUU???y????M?880}?W=??9??OI?????d=e?? 7????~|?p?????A?[*1??\??!??G??-?Sh?p????:[1Q?"9?????&?????7#??BV??`????o?c:b?D?(x?t???R?????55e?1(9?,??qMa??`???ml?LG0?|?~O?3???5?o???s?u?I%v???l'???p+???b?S??tK?????&?Aq??????f?/qK??S?OQ?????L?t??P??NG???R?!?r??z? ??? ???. b???t_)-???SW6?1???ah:/i???kqho?#I?$[???r???;?\?Uy??&q` ???/???f???)???4j??B??+???.????$?? b?7??c7??b??????T???i?[?.|??f???y;z_????2?f,:I?KNI?,???j ?R??d?L?,???????/?????{q?x+Q*????? g??/0EZ?"?????w9??}rk&??+l?>J??~?MjH?C??17???????Q???????2?????1??V7??NmXG???.?ZU,?c???F??C2?]????? -?\|??+Y?`????????0?1??)??v[P?J?@;]?d???? dKD@ju?? ?*?(?-N?Q???C -d?/? ??$?D?) $r???YD?U? -??????M?Zl??Q?V?q???????'s?????`}:???s???X??L???z~??V? 9*? -??y?R????|????????K8?d w??buXendstream +x???e\?]??i?A at jh??S%??[?????[@??ph?F at B?khQ:?CZiP???y??????|:?s?_???k???k???I[?W?+???|?+????v??N???m??P/?????m????/?h=q????????(? +?????-%("?++f#j?Z??$????R,N7:dQ?p[X-R?owQ?l^?A?pDFj-#I?W+?lE?i?d?P?z??R!gn??????%Fv_?Sf??,??K=?????GV????X?~f????q?C???,?k?F +?Ev?z2???R????? l?????$?[jM?69+??+?$?? ?8??????2???[|?????z ?I???9Y?W1??G??"%????n?#?i?????*^L??o0q?)b?u??b???N??????"??? ???P3?(R?*?x????DJ?f`s^n????7?9`??]??|???;?6??t0?eU+????5?%*???D?Fp??Y^?(?Q??? ?P???\?mO?G????p?D????H?w?d??DIH22RT63?o?4? ???l?*?P?????Z?Zg r??????#?:G??%SX?W?!??C? ????k?rI?QnOj?????Xi?*r???je??f??!f???7O#*\?T?(7???!?p?tP???kRI? ???R??~?x9G??l??#????V??"?sv?\??????J?4G5??Z?u.?3{^??a:k?MzZ{3r),d?P???-???=?#??O???WKW??35????F???????uw?1?*!??/?Y_?1?l??'d?GLc??0?}?g??=#;h???$aJ????A???mO?d?&?H[,(0?22???&???- U?IS???=?5??>??[)??????:?Y?????7?????j??ig??f#??)?Q?1E6Iq?j???c?/{U?u >W?^Q?c??8???x?87+??i?z???`????*~9?????[3?c(??D3????n??}?o???&?~-?? &???z?0?O? ?&?F??$???)VqC?@ ????R ?@??4??:)!?????.???_???(^Gv?????0???4x??94",??m??4$-=???k&Z?=????X 1S?J? IPk?c????Ms|5????CF?{??O? ?5S??#????|?j??t?XJ?2?a?b?l?????J+?$!W+&)e?????P?(??2?/y???PlX?x?1??js?????2?`???ie??:???h'?"c.?????????'$??????????r.y-?H?,+](??+??7?}:?S????8:?? +???O{???Ng4?p?ex?????S?e3???A????#???|?N??p???Kj????,/?'?p3?? +?c???}R-^??~R?0?????????7?|??)#c?t???78?}6?]???????=??m3?^?I6????ph?*??????e??I???w?M???? G?R$v?????[x?????{?/>??R?????55e??Jr?f_%???? ~?????"?=h???L?3&?d??t?1??t? @]???????:R+/?{h2???????KRF4g?~E?u???&d:???6_????v??j?H??\????oL??G? j;????%???a??O?0r+?zf???H*?lrJ??l|??J?G ?b\{,caXq"R?$)V=?G x!? o???.eK?Y??E)?e?g?S?LHN?????I%?,7w?rH??????'??"w;A???g??{? ??Q? ?H?????{???G?yU?bm)T2?]??v?t?u.??J???j??=\????????i,P?<5?1?e?Q????????? :?G?9???:'?E??????q????L??:???`??rY??R???3????N-?????? ???nt??TQu??c???????????r????yy??N?P?tVt??q ??,$}G?+?Js?????? X]r????_??`E?.J?&;???g??JJ?????Ea??WI???8{??(? Cc0f,???? L?????n?`?]?} B_?????$?1?S +??h??=0%???? ?3?eg??H?(E???N?? ???+??<?V?U????Q?? ??!??????S??)????c??#?`????cN???6?k????*?r?????l????$\?????T/???QN ? }?W?(zn?:%????o??????????,0????iY^?K1??vk??? _???C???j????}?u?Z ??pKE??b??q~???]VM??/)??^ ??Rid??pEEqmqpZ5???1???????i~????r?"?????A????;? ???C=??????? +%???????4?K??a0N?????\U???n?S?? ?]?"?2?'?`~?iX??O?j)??O??:??6??P??`?????>????^???????p????F??wL4??{V? +?!??Ye?u??Hw?????D????=N???C?3??:4?RQ?y*?g????D??@?????~?T???Lg}????h???????.D?4?????|?IP?Ee+-??????.??? a?\?g=]04?4b)*?B&Q? [?H???P?,?{????????c????J????8????^N?z?%?a????cE???#???Cc???+'O _??r?*k]?k/Ud^z??XV?f at 8qA??G??7yS?o????????????i??YY?B\??O?+b ????V?t??=??IV???QO26U?u]??1//?v?Y?o????P/?u??W?&Y?[E??<;?z#?6>???f?????l???G?; :l?F3O?-?'?v6??R=??? )oR%??r?_??.??~???g??!??????????? ???t??n??n?????? ??T?????B?%???????(?????????Qy? H???:h)?I:RQx???c????z7?9?? ??I??D,'????V???b??k?- ++???>i?E?(?L?????_lu?d????? ???i????A??q3??G??A?%&?x??U?b??1??K?E??ZD$??4?`+??+{T?2???r????????D? ??'T?? ?p?N??+25?G_?{sXF.?*?qd??o?? +w???????{)R5 +? '=<~z?Sc]P???1????o6??!/Ct?G????\a?Mo{+?XaSN?S?t??F?(?|ng?+ ka?ct?S9d[P?J?@;]?d???? dKD@ju?? ?*?(?-N?Q???? d?/? ??&?D?) $r???YD??? +??????K?Zl??Q?^?q???????'s?????`:???s???X??L????~??V? 9*? +??y?R????|??????6?`+8?dw??m?Oendstream endobj 698 0 obj << /Type /Font @@ -23393,14 +23454,14 @@ /FirstChar 28 /LastChar 121 /Widths 3721 0 R -/BaseFont /NLUQRJ+CMMI8 +/BaseFont /LNPWJH+CMMI8 /FontDescriptor 696 0 R >> endobj 696 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 -/FontName /NLUQRJ+CMMI8 +/FontName /LNPWJH+CMMI8 /ItalicAngle -14 /StemV 78 /XHeight 431 @@ -23426,7 +23487,7 @@ stream x???UT]M????Kp?xp???u?n!?!????????=xpw8|???O????\????O???}???jmP?*(1?%lm?XY>Dee?X????????@'s[1'?' ??`??????? ? jk?????? ?Q???".??5????? k?d?~???? -?dkdt????|?g?#?+???4fD`a?9 ???6L?x??1?p?W?????S.@?wS???????4????0? 0????????a?N.?le%g`????v??X?[}?_??v?N@???1????????,?????f?? ????mL??+?dkdt????|?g?#?+???4fD`a?9 ???6L?x??1?p?W?????S.@?wS???????4????0? 0????????a?N.?le%g`????v??X?[}?_??v?N@???1????????,?????f?? ????mL?? 9????`kG????N??? k???????@???|?H???v?`=?O?[??'?2H ?R???>W?Qx?,X???&?9?-e ?A[??@g???j??Gh?Y?>????:?4f??$ .? -T]V9??+???????"el???????Si1,???1?D??[???Wp5l?:p??x????????????v?/?i???B?yD???6"? B???;-Di???O???J???:???G??|?Y297/x@??? @@ -23465,7 +23526,7 @@ ?r%??? ??)??d???/?w??j????QK??e??j>?????8k???zee????)??b? ;????!???G;k?#???KU},?w?xe >????%"?L??`a???+?nV2???????Y~U>P?)o ?v???4???y?,,$???C??/???G!????~PN???&e4$?Pq+Od??????s??,?0 ?^?9???$Wh?pC?2?USvc ???9???j??6?|?&??7?">2iK?C?qV[ w??l?f?83!?????B?R|?^@&?q???~i?Z5\??%?iCvb?x?$$? tH???.uXRJ?????*???{??????8z?.G2?~9???>c?@81 ?vX?X?f??yK _E??6?'SL<'?B????????]?}?r\?M ?qO N*?m?gj?????Gn?????M????M?????i?g`?????E?Xru?|?dxE\G????Z??`???dl> endobj 693 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 -/FontName /FIPQYP+CMMI10 +/FontName /SNSBEQ+CMMI10 /ItalicAngle -14 /StemV 72 /XHeight 431 @@ -23501,81 +23562,74 @@ /Length1 1884 /Length2 16249 /Length3 532 -/Length 17330 +/Length 17329 /Filter /FlateDecode >> stream -x???cx????c[??b??m???????N'?m???&?s?????=??=?Z??=?????1???+? -?????:?2?1~?(K02-??3?-????3? ?Y???? ????W0? ????c???f?~:Y???R?)?O+???yO?????Vv????_?i??~Z9???VN????_?i??~Z????Vn] ?V?????_?i??~Z}???>u???((h??E??? ?e?ad????-?z?x??????dK????~9??-mE ? ??c??xJ?u>< r??????:??K?aa??z?LtK5?+3!??:Zd??b?? "?88-???3 at 6???B ?4?f????}?t ??z_R?s????nr?[BI??M??>~?}ko?????c???]]?qgS,?oO?#v?Rt?$??M???R?-('? -?u????}???o??"?xO9t?*??|-,*m?a% %9!)??v?u?K? ??*????????Q7??2??l?????R?[?D??7F?p VC???-/{=???!!Hs]u???-?y? ???i?Q??>???????Z?h?}t? Cu?t?x?)?D?_??z???&6???y;??Da??~??x?C6??z"?0m;?5:?Z-mf?9?'??????HT?pM?D??:??v??B??7?4?(?k???%:??6?Ef3/.??K??xS???v?4'{?=w?&T?S???V??x??{&@98?NG???~?X-??D???J??i?????)p4????p??PxM3?M???p???3??A?=y???tE?-????h]zL??$|?>8q?f?Oe_7)?}$???{?&+'k???A??MYm#UAB??h???"??q????????p????{4?P???? ??3????T+????PI?????B?? -?? ?2S?Q??7?lv???/)s?????\?????|??????y???????##1?`?;?|n?5n?+??r???j'?V?w1?m??x??B?4?????????l???-?A????\?8?N?mC????Mg?3???GZn??)m???M?OPF?R?? -??Eci??hZ??s????K?p?D?3} ???E?,~??kU?M????A]??o?-j ????':_m?]Z1Sr>S +?????i???l????W6s?f?v??????*9?????b????E9????4M????????:P -Cp???X?~?????;dA?t6????6? # -?????@u????-Z s2;?m_?5e??????7?'N??E?z???7????u?v?X?^??=u????{?MD??i?%.,5c??????(??LO?f-?R3?nt?t[?????T#??s????r??P???r??<(X??n??9?M??x?h??_?????t?/fW?v??'(?Uy4?]+k\F?D?????%???T?%?B?!n#9?%?i-??F?????+N?????0?d.?",???_%_?/? ?g?????+???@?-??d?J????[8]????k? ~??xN?i???P????X?[ f;?n????2?U??q??wO??o?`%V??j?+*?r?????L? M?q??6um?b??Y ?fb??[???u?@ZN*??"KGFt?^? -?f%j? ????}???G?V? -?r??????tm????'?g???"Q90M-??p?5.2?/?m,?"?@X[i97R??2?-?????HJ?7?P?P??62:?d?;8G?#Ad??EW?_?I???3?O?K:Sv?2??h~?p#1`???]??Eu1.?1????rQV? ?4WS?#K??NL??$s??? -{??,7 ?#?D?>??i,?d???M?A??????????f??!?'TX????Y>?`??6????Y??|x?????????z? ????H?2??q?hD[a??1?[=??????`;?#? gU????#6i???`X?_J??d? ?????}]?????UB|`??]J?????k?????AOY?q??|^??2O???]??Xz??H?C??F???EObh?????.Zq?3m???\?2??????M??D$??f?j???F???h??-F?$*d~???36?a??G? ?r???? |XRJe???&n?????? K?9.???6['?????i?~????o????????6?.?Uj;Vql?AZv??_?0??-?&^"!??F?W??Rp??K?S[[??c??&r??5??oX?Z|=?E?X?????.???.?A??A?????>6T; ?O?b??O?Z)???>S??S-j?A?%?`>D?@??j????ya?? y???`??F?B???:?c?? ?,????jH'????"Yc?Nb???$????$?,~K?X????v9@??bl?i? j???`?%?pOgIQ?]-oNN ??J??????R???!???+Y??C???(;?????AY ?Z??U??d - ?*???f??G9?]?$?]M at O?H5??e ??? ?? ??????/$?"?7A{?-"[??l-?)?????J????[??C??? ???cJ ~???/b?twiX???o??~???\????????B$?/?+l??'?O????^m???hhVW??.??"??9???????\,?;??a?s?o? %?6\????#}?M{?@?u0?@:?????j??F???-?+u???:Y?.?+????kE?t??|{?)?? -?I'?OZw????????oB?kN-(??H????4k???x$?,x?j?L????@??????#???J -??zHT??-B??@h;`z?I??]?^????:?r??????HI]????????Q?H}?/????4?XYq???!??KO????Y??????8"M??%<-?? O?0y??U+h9??O??o?u?Z?U?W?]?.?[5l???wE ?7p??e.%#w??sYhs?$?ia2Gz?\??SH??h?:????z???]??????K?)?L-Q?J?$??6K?{t?-B????O ??M?? ???L????3IX?CS???S4??O???g??u??[SK??b?:?Y???d82?? h??Y?0E??0e??}CW???9??k??H??1U1??ZR?h??????h+????2?03L??v???I??t??? -?}???X?[???v?P????kC`o8?3??? ??)?a ????J??@ ???Q?bc5QS{?????fp???-of? e?FD ??%?D ???t??M?????\y^???@?I_???PeG?j??K'????KY`?d??GVq???????)?o???D?G????d?`Z?w???X??e?fd????? -???t?q?????kGd?x?X???b?0????Wp????o?nf?LC[?*???B?PV?dsk]???7?????*??a??z???a???I???t"?bpz?@???????K(d5??Y?x??V???]?/.???yFg???Q????QW?)*?p_?h .5??2G;?P?-???2?,4?*??#???????O??N?;???q??szdvy??p?@??*??Z#??_???Uj????3???L$+???/???o???Iu???????:L_?:R},F?w??: ??7?gG????L? -?????{T??DVe?{?y???s????M]??&T?;2??T??vX????{+?_S?d-??`???????Y??]???U ???|x ???{?+????????%;/?J? ???m?}?gJ#S?C1?u??pKB?????9??S??p k ?{,???j>1???2??*]??z?? @:O??=???@?Gx??8??????-p8?HA???v????R=????6?? ??|??pm??????8??c9C???p?????;N???????,F???ot??D??)??q?U"???_Z+r???J(??O????g^G?:??D[?Ak%???'e??h??CN?K??= TP????z6?E????????@?4d?<6??????G??? ??8? -?r)?`aA(??|h??????|????????Cq? ??"?;??Y??????)?q???|WaA?l????Z=??S??c??\???5????>??!?9?3?~fb???????2.B???"?g:f????z??,x?!E???XT?['????B~?;? JL6???P?c?6??????R?Pzz7??rTnsU???????fZ{5????kN?C???}1??????IXj????????`?-?M????:?w?h??.6i  ??3????wd?w??N+?x5????I?y??I??j??????6???c?nP;?*????A??X}cK?s??????f??L??0[W????66xUNZB8:???@8??9????y???B?? %? ?`?&????9???Wy?2 ????SQ???????^z ??r?W?+????????u?3???+ ?-?Q???v?\??G? 6?9???`?~?p???kb?V?i???o?????????IC? ?%???y?????n3????V?M????k?*/?k0?" - %#DJ????d?\?G??!:(????`??[????z????? :Z??"??5???? ???Y??Sb??{?g??u?MC/b?dV8??????!?%?~?????`? ?U??>??Uer?6;?C??3????b???>??+?i????W???? ??Q -u?T?e"??Y [??k????U??W?????y???j.??????????????2????W^?????Q-?:D,3??$2>v? 3???/?b??t?W?^?9?wo???o???x{?P????n?-??j?D??Qg??!A?????y?g??8Qd m4$???#??UC? ???a??#{??aPVB`&Zv8?Q?P{ ??d?,bw????bg%:??#???F|???5?/B"?&??6Q??b@?*? o?A??7????:???c?????B1?-???????.4zJ??h??? -??B?????_@?H?*u7c5?U?? -?-?????]???&?C???A?l1?;?Iy????'}?3? ?g7????m????J:L??-r???? rLh??%f??"?4??h?r{l?7f?N??.M ???U\??R???x???d???@?U,;???.L??? \?F[????,?@>qH??O???????#??z?1 #?????xO?,???"????????}????8????6?:N/??=?q?K?u?:????y?????-EK??U:?=??d{j?[!???m?%??;???)~s????5Z??2i?I ???]???? ???j?L??c&b?I???o??<]?+vt,????????W{'?xd?l?qp??2?sB -?u??????VZ?l??}?|:???P%????4?? ???yK?F??v??5w?f????Y?????\?????,???_?h????{?+????a??%u?E???W^??p?s?{?%?? ?]????6?4o?5?*??????G??os<,????UF?&???>??7l`7?????b????+????????w???????>?JO?p?~??vq?? -?x]k5?p?0, H?IM,*??M,??+x???cx????c[??b??m'?m?il????m????qN??}{?g???Z??????3&RBy%Z#[cQ['ZF:??+??O[???????4?C????SQ?}?I??O????"??>]d??????t??q|????????????????>?????????gu???Y]????????????W ??M??9??}???? ??F?g?????/?|????????w??X0|?Y???N????_g?????~??6????_?ie?~Z????V????_?i??~Z9???V.????_?????_?i??~Zy???V????O??{9 + +??y?2?1h?>???7??rr~??3Ul????%??O$???????????.}??7??^???n??0+???\?)????"??e????i????A?i\tg?\(?MS?????A???H?R??F&??X?^C?J?A??C?h???? ? ??t@??{?3??V?????V???\:???O???.??J????-}&?W`S???a???????o??=????????q??????1k????-???? +?@?f?3??nI????)??????n?eQ>mY????? ?b??=???M2?|{?\???N{?z?b?}}BX~?$?"??N0?vg??6(???1?????y???Q{?)?:??y????1>?1S,j???w??k?k???qT)??K?$A?V?????L0Q?T??Y?^??`Xd:?IOv?|?^:??/*+?7Yp?B?:_??}JZ??0Hf?????Rh?????????9?a????? +??}?_?????ig??????.z?q?*?r??Jm???? l?l????"|w????D[m??V????P??????w?G?}1?r???E?\???]???}??`QE?;??]?L ^???q?E???-5?/iLY?D?@w????? ?hr!V?6,??b?*?l???????+)???p5(????0??~<?@??W?8???i?Ts?,??`???bV?DA@??^? +? ?w??L7?????I??Jg?]Z???}`???;oLvmf*??N?{?n?j?????? +??6: N3??aM?r?y??W7??~?gj??2????Bq??K??B?????O>B?????C????????.D??f-F??p?????BC?Y???????????L F?ciC?t?u?0??????,?????aT?f?cb"L^%????Y???????$??f??????M??????J??#NL??i???$T?? 5?}kYHG?4?yk!??A??\???-??Y???S???b?o?9u2h?????3w?@??????gr at g1?I?;??V' ?????d?Q\B?? +=H0+???J?oQ???? ?f??}f?w97??(??}?$??????7?l????b?????-??? ??????;??/???????????4(?B???????????D?????????B9,??.lhKu??v?7R????q??AY???Ly?rU??L??-??a?7?????0??~??S??@?2*?g???????L)?W?#+??E???.?G??-???=?????\??5V????%=?-??????????U?-u??Mj??Q??U???B5&?>zQ????c? ?>,[??6?P?`?T???y:??Se"b??, Q???uUm?@? @U?,? ??*??n?I ??;?????He?"??????u<0?~W^?e??kEW??????\$??0S?+?]?@ae?I?&?+&?Dd?07Zo?&i+??v?m7????X???/?-?T1'?2????)????0????F??h????2Aw???????:Y??????tqz?3w??}5?????k? +?????Z U ?$?lJW"*g????y![?0s??)??>?(1uo??F???u??"Q`?u?M??????3U?@g???E????? B&lj?\?????K????+f???g??????S??i?%??p?N??????E? "?????m? J??l???h1;???8??3%?????L?? us???????????{?? +I?f?Tn??????8d?;??0????^?W??Z??????5?> ??iF??????????U'C???h????H??x1???????U???v+dw??}??8n?/F?yu???7??r>?$?V 28?v?????t???3Q,???E":???????iv?(??-??l ?$? +P?????M??x?\^l???~?*???0Y?????v#?? ??????]U?+?6 +S ????W??t????Z2???j?)??=??? `?u???$?"E?????F?????3?e?V5N?:??IzS'gt?o? "{+)???.Qy? ?]Dg??|??m???d:????Pu# + M1d+O?V???t?{?oE)?0x???Y?X???_6?Xt^??b t??2??L+T^???sH[?\D???? ????-]?I????)??E?Ir????r?R??????[{??Bp?"%uu???Vh?.FziN+?Z8?Y????@????*b?0???^??@?8??t??O??f?1[??JZ??U?????Np?????U???C??S?O? ??????? ??S? +L????uF?? ???;??W?-????????0-N??6??'?^?????;3?}f?O9J???Wpd???t?B??_?$?z????x$?-c>3???|?????W?}?????`X:h??Pj???5????c?C??q??T????Xi??,V??k??9????S [K??C7I? /?.???2?03L?)?v???I??t??? +?????X?k???v?P??7??k}@o????@??)?a ???? +??+YX??%,?@?Gz#?8?eyF?U?????sg?k ???#?????^??P?:?a??d,I?2t?3GS[~a?\NH??8?h^???#2??C?????~??\????_T ??f75g +???????&???B?PZ?h}kU???7?????*??n????1???>[=?:???D????(???wC_?q??*????-?j;?$?w?v\?????Z????????STT????j8\jvK?e?v?<??????T?w???Y7F??i|c +KQ????A???M]??W?? ` ??g?l?7?q?$?N??????;??1???v??h-?r\q??Akg\???$X?{fz6`?????1#? ?1n$^?????]??H???7???p-?fE?E???RUS?7???"}??y??;kL?(;??L?Kx????6???e[?Kw?????? m????q?+??d8Q"?N?/??!FW?"?Q??9?|&?_??V?|y?i?? ?[(???>av +???y?k?em1?a????????9?,I\P???SA1j?Z?6???rkJL|+_??w2?0,?2?~6?R?????Z?~X??l{m?m<????,b?????/???Ha???'?~?Nw???N?X??1;?U? =???G??e?[?z at yQJ?????:??g&6h??;-*b?U??(?z??L??v???f??Q??L??E?u?;?+?E?s???d?\??? ?5?n?G I-?'? ???{?{-[?6G??a?+,`=t??W???????(~[?!V?s?>t?????z?~?? L??? +V4???2??9/??????)??h?@?QU?xb!N????dk?????yJ?? +??? ??? n?|???N?b????@?)?s?K?~G?x??????g???????????????????z5?v??? j?[??r?3h??k?ol?|.|3>?>?-?`????gk+?????H? G?=??!?BXxu9???XH?r?D!???DU??2?+O?n??b???????????Dtf?????\?C?+9?/??2o??4ta8???T???[?L?K?!? ???l?` 9/Y??W?????iV?????_?>1azi?}?'??\?Ag????4 ???Pq.????1?x??H?e.j??}qw?n?}??Qs???*??0???H?C??YN??8??Q5??,?z??Si"?@?3??-?9?3????f$??????5=??>*????V?3???f?n???E=C?wcx/t???9??J%W??[? )??t????Q???r?? m_t ??G?? +??????0?f*????p??u?K??d&?L???&sh??H???q???e?dm??q6?@?.S??i[5????e???{???_[?2?????;??H????c???9??? ^?9?j???8???4$??$???J????k??????8?v?????????<??????????? +.??????Q??( g???????- ??T?"4????9O????????T 5_pp? /??OX?%v?p???~V?$?????H????`n~?;??|kg?? ??W?@?;?? ??[=Blp???v????d????0?g???%`/??~f???i??v.U ??IE?+j???qN8??,<-??r? ???G??????{f M??D=5??;?LK?y>?i![?/p?)?%V$(,W#???_b?W?@ER???k"??/???????????v*??> endobj 632 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 -/FontName /VAIXHN+CMTI10 +/FontName /KCZUDD+CMTI10 /ItalicAngle -14 /StemV 68 /XHeight 431 @@ -23616,8 +23670,7 @@ >> stream x???UX???p??Cp??????!H??????4x?`??]?????????????????1?\k??/?G%UzaS{c???? =33@T^D??????@A!?4r???3r?-4C`T???L??????%\ml?l??_?????l-m?? ?Tv?c?w????s?>???m?H?????ZC=?"6??r?? :???z#t?'G??&?"2???g~?v6c??\7iG?\????n%? ?z?BM?KA?G??pK~????(?s??0??WK?????w??u?_p5p?????:dt`?q2?5? ?? @@ -23658,7 +23711,7 @@ ??? DH????????c?????4?9?? ??Bd+??P'?QK???`?i??? ??????a|0} vV"&??5?????{?A??'??B w????^? ?P?.?>???o??????kt??e??Q?????N"?k?4? 1????"??k??`??I??N]P??W?NV;b%?*E/U??y ? ???K???6W????`??? ?*2?"???(vWI?,?[)(?Vb?>j?]????T?h(??w?'??Ge?oo?? ?????(?????{?????V??  ?|E;M???xu?=cm]?q?_?S?z???U7?3DZ?a????8> endobj 620 0 obj << /Ascent 694 /CapHeight 686 /Descent -194 -/FontName /SALNLK+CMBX12 +/FontName /YBPGMZ+CMBX12 /ItalicAngle 0 /StemV 109 /XHeight 444 @@ -23694,12 +23747,12 @@ /Length1 2369 /Length2 17526 /Length3 532 -/Length 18846 +/Length 18847 /Filter /FlateDecode >> stream -x???eT]M?p?{p 8wwwwwwww ?????!8Npww?????N??????8s??U?V?^By%c;CQ;[gZN???"=????^??D???????V????????51~-????9+x???eT]M?p?{p 8wwwwwwww ?????!8Npww?????N??????8s??U?V?^By%c;CQ;[gZN???"=????^??D???????V????????51~+????9 ?3?s?6qr?+?@g`a????ro???O????gT??f?E?& G:??.?);???>??RX7?`????x??????te??E1??`?}?)x1??6;????1W{W??G*Jl??[?AI?J0?W??P??s?????????????QB?d?%??????K???????3?0-??v9??^ -2???t?jl??????_??)Y??t????%QFVi ??????\b -??o10??M?YA?~???> ??h/8"?s?-]?k?????p"!9S?????q??&?V ?G??????TmyIy?1@?&?\?z?C??Y????\%?+ ?!f?],a???<0Z? ?i>Hn??_??h?&??]???>?<:????x??1}????je??3 ???p?????3-??%????+uc< ???82?M????c???on??{??y'*_?nKB?G?T^?RI?&?;?????_ ???c???@??? ?$?Z?(?=????m????o4q??\}?{8?Vq&???h??2Q?\?X?.?4?VF????/:??5?:}$?`"x^?{`?O??C??0z :?? ????(??0?*?e??m??f?s?*??5????? -Q?B?xRSK?GK_?*???ue\??Q,??[?Fg? ?MS???5@?:vr?^GM????,^\N????#??)??3ny ????}n????7E?????cA5??????o???%?????+?I|r????GGAT??d?c5CN??iI!w???PR`?=F???*d?(G4??8Q?Cr???0???B???? C#]????T_w5??M?dn?[?????8=q? Xe???&?2o????.???? 7?\?????>????gT??f?E?& G:??.?);???>??RX7?`????x??????te??E1??`?}?)x1??6;????1W{W??G*Jl??[?AI?J0?W??P??s?????????????QB?d?%????????????3?8+?m/,=??????y?I??5?.v?O?4?KI??Q???{v/??}?S??zG?t?f_?$???x4.????%azfI3??????\l??o0??m?Y~?^???>?M??^pD"+???U???e /D? <6????]y?G?L??Y?u]5?YH?cS3??????????)?bF?H???|k???,? +?ge#Z?7???w??????%9??_?????p?j??#w?d? N??X??0??a????9??>Y????z "?P????J??f?2X^???$?(CpAN???wC?!??&?(??????P?????H??~#^ew????7?tOT????@5R???7?????hD???bP??o?+????] +???Rn!???z7{????ryhq?? ?X?MJ?7?t?j?+Xr????U2G_?`???y??lSS V\?T" 6 ??l}z???4?X? ?^p?g(Kg6????a??JB?????????'?7?????g??l?q??? +'' ??h???.w??!-??YN}b?E@???]?????+.D`.;??Vj:??}?????0L?G?$????q-?sbI?7?;?;??~????+H!???wv??%??}????X,??x/?zg??F?sbm?;yV?:??2??UG???O?pM}???}?yJ?S????Lk??X?w???o?8Dfq?"y???;)Wf*??????T????1?ux?????RE?%M?h????h???~? 3??I?v??Fo??t)?????`?4??]?J??:??????????//?Q?k????ep?MMT@ endobj 614 0 obj << /Type /Font @@ -23771,14 +23822,14 @@ /FirstChar 2 /LastChar 127 /Widths 3729 0 R -/BaseFont /TEQVDA+CMR10 +/BaseFont /FSNKLU+CMR10 /FontDescriptor 612 0 R >> endobj 612 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 -/FontName /TEQVDA+CMR10 +/FontName /FSNKLU+CMR10 /ItalicAngle 0 /StemV 69 /XHeight 431 @@ -23802,15 +23853,25 @@ /Filter /FlateDecode >> stream -x???ymgt8????/?6F???Y??QN?L????g,:&????E?R??5?i?4????W"?+;r????v??QK??V(?\U?\??*??????iP???-?t[m?};?????p?g?*G??????????_?? 6/v?BBSY"J*?1N??_???f>G?g???{|V?=?R???vM??3???QB??$?UX:????g?pW ??????R?W?? ??|c??^???iF5?M?????~Eq??zC?g?C?d???1?|??n??? ?wf?zw6+'???i????w??X_??{?]???$?P?H?&P-l?I?HI?=???n ?????l????L?????-??????(b?jdd????}?SSb?\4???=??lUKQy?g???q^p?b ??????2B???? ??pF?<???{?? "??%endstream +x???y3??6?????2??,g1??kM??d??r?A??r??%??S?????>????6x??g?'@?O/?|?X??Q?36???????????=!#_?y/??????(????.?"?aV?????&???:?G???`v??|%?Q????,9j??=??;????"S?????{K????%??[m~F?`??iV ?"??7F?op +YkA?h??v?S?]z7?-*??/?V1????8`??J??q????^a }???? %?i??%???o??[t?O?;:jw?? ?H55?k7????D}?t!O??K???6?rm???d$  |?8+?09?k?j???i?f???K.?p*K?q?>?!?>????y???????N?a???-?(,?Wr?? ? o??mTi??{??????t??w?`"+???(??8?r??E?s/;0s????????}:C?8G??8?(7erH?(??K??i*V?>L???V???a?#????2??????lc#? ?b??o??|?~Jk;???8T?X????c'????) +)????5?0Bf?49??Y???s???m?LQ?? ??s?>8?u?v?U +?t??Q???$GT?*?=???F??:s????S?? k-?F?5;??#a=??q?* w????????k9?C7j_?3???3u??k??*5??????N.????x?PU??n?Y????@?L?nk????e??N?p?????J?;? LP??0???????a???=vi-?E??wC-?69?? ?g??^F??4/????p}K?????l{ST??vpx5~?a+????\?0s?mJP=y?..????g?9?J?%???Q?T????W????P?=?x?O???x?V_??Hw+A???wZZ?9$???f???h?V???.J;`_/H?a?R|2???7/?`?~??Vg??sF??J?6lq??Ur??0???V?]B???Z???{?q???????????/U??? -,???&?`J??^????S?7???w:,$q?Qj???J????'???D?^???o???)?K?V???1l?=???$]s?????~X?)??9f??$i????C????^???????M?iD???ZT1?:?3},?FV???4Q???mg??????!Z8\o?????.??9~??DL`g????F)?L?b??4???A?'t?F??????v???l?-?Sv=j?W%?*?????????{?g??/???Nl??:???E?=????9Qs5??g[?F9k???W???u????={????U???+M?????^ ?~????? ?( ??????x/0\??2Eu?>N?2?Uw??|'??y?Yw??3"1??m?2)w?I???e???? !!?'?????d??!{?M?RTt/?kD??2h?? ?f???????????# +S??????????#Ou?$??TJ?+.?V=k;d*8L?sUIk??!???^?vD?2?A?!Nn?" ????I????????=?N?????l;(???????W w?B,J?????4???*?? ????????,"%??l????N?V??C?F5?\M?????~eI????????f)z???c???0?\o[o ?????jQI +n0???U??V???W???.a?YY*8???&M?Z??f)#e????TS??L?zbKr??[;??  +?Q?t? cI?;~???K?? ???&e?2???5?(Hw???0??Z?S?????@??>??F???c???1??s??9~z???9????n~Qs????L?=?g3??'??t?s??5=??al?w?P?k??3^??r???Z,??p-?i)?2=A???.?????u??&?????T?jQu??&??????Z2???M?f??Z?P?}??Xc5rv5L?U{? 3??x?Ca???:v?Z???????2??!????h???m??.???/?????K?bn^??d k??bk???C?gE?a/??mx?C o???}?????}??\W?k ?w?)????>E?phj?=n??_?y????C??Nx??2?g&???)???9 ??AA?Rq???R?&?G?? +??aqa|_????????????V????????????HMO???i??f?B?U.???' ??`??v?J6???E?+C??? b?L???,?[??n? V??}?Zd?????4&z+?}???????????????%B?????????? \??8{????N?????W{?;N?I???endstream endobj 611 0 obj << /Type /Font @@ -23819,14 +23880,14 @@ /FirstChar 65 /LastChar 90 /Widths 3731 0 R -/BaseFont /AUTIMJ+CMR12 +/BaseFont /RFZHXQ+CMR12 /FontDescriptor 609 0 R >> endobj 609 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 -/FontName /AUTIMJ+CMR12 +/FontName /RFZHXQ+CMR12 /ItalicAngle 0 /StemV 65 /XHeight 431 @@ -25241,7 +25302,7 @@ 3747 0 obj << /Author(Chris Lattner)/Title(Macroscopic Data Structure Analysis and Optimization: Chris Lattner Ph.D. Dissertation)/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfTeX-1.00b)/Keywords() /Producer (pdfTeX-1.0b-pdfcrypt) -/CreationDate (D:20050504180600) +/CreationDate (D:20050513124300) >> endobj xref 0 3748 @@ -25251,602 +25312,602 @@ 0000000004 00000 f 0000000000 00000 f 0000000009 00000 n -0000079293 00000 n -0001552646 00000 n +0000079291 00000 n +0001552637 00000 n 0000000054 00000 n 0000000094 00000 n -0000089712 00000 n -0001552538 00000 n +0000089717 00000 n +0001552529 00000 n 0000000141 00000 n 0000000203 00000 n -0000089765 00000 n -0001552464 00000 n +0000089770 00000 n +0001552455 00000 n 0000000256 00000 n 0000000304 00000 n -0000094504 00000 n -0001552390 00000 n +0000094509 00000 n +0001552381 00000 n 0000000357 00000 n 0000000407 00000 n -0000101821 00000 n -0001552268 00000 n +0000101806 00000 n +0001552259 00000 n 0000000455 00000 n 0000000516 00000 n -0000101878 00000 n -0001552194 00000 n +0000101863 00000 n +0001552185 00000 n 0000000569 00000 n 0000000630 00000 n -0000105224 00000 n -0001552107 00000 n +0000105209 00000 n +0001552098 00000 n 0000000683 00000 n 0000000739 00000 n -0000105277 00000 n -0001552033 00000 n +0000105262 00000 n +0001552024 00000 n 0000000792 00000 n 0000000845 00000 n -0000108816 00000 n -0001551947 00000 n +0000108801 00000 n +0001551938 00000 n 0000000893 00000 n 0000000953 00000 n -0000111809 00000 n -0001551874 00000 n +0000111794 00000 n +0001551865 00000 n 0000001001 00000 n 0000001043 00000 n -0000114198 00000 n -0001551747 00000 n +0000114183 00000 n +0001551738 00000 n 0000001089 00000 n 0000001150 00000 n -0000114251 00000 n -0001551673 00000 n +0000114236 00000 n +0001551664 00000 n 0000001198 00000 n 0000001233 00000 n -0000130389 00000 n -0001551550 00000 n +0000130379 00000 n +0001551541 00000 n 0000001281 00000 n 0000001326 00000 n -0000130446 00000 n -0001551476 00000 n +0000130436 00000 n +0001551467 00000 n 0000001379 00000 n 0000001440 00000 n -0000134079 00000 n -0001551389 00000 n +0000134069 00000 n +0001551380 00000 n 0000001493 00000 n 0000001580 00000 n -0000146488 00000 n -0001551302 00000 n +0000146478 00000 n +0001551293 00000 n 0000001633 00000 n 0000001709 00000 n -0000146545 00000 n -0001551215 00000 n +0000146535 00000 n +0001551206 00000 n 0000001762 00000 n 0000001824 00000 n -0000160422 00000 n -0001551141 00000 n +0000160412 00000 n +0001551132 00000 n 0000001877 00000 n 0000001951 00000 n -0000196811 00000 n -0001551016 00000 n +0000196801 00000 n +0001551007 00000 n 0000001999 00000 n 0000002052 00000 n -0000196864 00000 n -0001550942 00000 n +0000196854 00000 n +0001550933 00000 n 0000002105 00000 n 0000002178 00000 n -0000203943 00000 n -0001550855 00000 n +0000203933 00000 n +0001550846 00000 n 0000002231 00000 n 0000002309 00000 n -0000207904 00000 n -0001550768 00000 n +0000207894 00000 n +0001550759 00000 n 0000002362 00000 n 0000002424 00000 n -0000210988 00000 n -0001550681 00000 n +0000210978 00000 n +0001550672 00000 n 0000002477 00000 n 0000002539 00000 n -0000211045 00000 n -0001550592 00000 n +0000211035 00000 n +0001550583 00000 n 0000002592 00000 n 0000002660 00000 n -0000213809 00000 n -0001550515 00000 n +0000213799 00000 n +0001550506 00000 n 0000002714 00000 n 0000002796 00000 n -0000216871 00000 n -0001550386 00000 n +0000216861 00000 n +0001550377 00000 n 0000002845 00000 n 0000002897 00000 n -0000216928 00000 n -0001550307 00000 n +0000216918 00000 n +0001550298 00000 n 0000002951 00000 n 0000002998 00000 n -0000239530 00000 n -0001550228 00000 n +0000239520 00000 n +0001550219 00000 n 0000003052 00000 n 0000003106 00000 n -0000247036 00000 n -0001550136 00000 n +0000247026 00000 n +0001550127 00000 n 0000003155 00000 n 0000003191 00000 n -0000259577 00000 n -0001550058 00000 n +0000259567 00000 n +0001550049 00000 n 0000003240 00000 n 0000003274 00000 n -0000262855 00000 n -0001549926 00000 n +0000262845 00000 n +0001549917 00000 n 0000003321 00000 n 0000003374 00000 n -0000272388 00000 n -0001549809 00000 n +0000272378 00000 n +0001549800 00000 n 0000003423 00000 n 0000003471 00000 n -0000288548 00000 n -0001549744 00000 n +0000288538 00000 n +0001549735 00000 n 0000003525 00000 n 0000003573 00000 n -0000306359 00000 n -0001549613 00000 n +0000306349 00000 n +0001549604 00000 n 0000003622 00000 n 0000003668 00000 n -0000306413 00000 n -0001549534 00000 n +0000306403 00000 n +0001549525 00000 n 0000003722 00000 n 0000003774 00000 n -0000315132 00000 n -0001549441 00000 n +0000315122 00000 n +0001549432 00000 n 0000003828 00000 n 0000003874 00000 n -0000322495 00000 n -0001549348 00000 n +0000322485 00000 n +0001549339 00000 n 0000003928 00000 n 0000003978 00000 n -0000357076 00000 n -0001549255 00000 n +0000357066 00000 n +0001549246 00000 n 0000004032 00000 n 0000004081 00000 n -0000360457 00000 n -0001549162 00000 n +0000360447 00000 n +0001549153 00000 n 0000004135 00000 n 0000004180 00000 n -0000360515 00000 n -0001549083 00000 n +0000360505 00000 n +0001549074 00000 n 0000004234 00000 n 0000004279 00000 n -0000364184 00000 n -0001548952 00000 n +0000364174 00000 n +0001548943 00000 n 0000004328 00000 n 0000004393 00000 n -0000364240 00000 n -0001548873 00000 n +0000364230 00000 n +0001548864 00000 n 0000004447 00000 n 0000004490 00000 n -0000371148 00000 n -0001548780 00000 n +0000371138 00000 n +0001548771 00000 n 0000004544 00000 n 0000004594 00000 n -0000375022 00000 n -0001548687 00000 n +0000375012 00000 n +0001548678 00000 n 0000004648 00000 n 0000004729 00000 n -0000375080 00000 n -0001548594 00000 n +0000375070 00000 n +0001548585 00000 n 0000004783 00000 n 0000004859 00000 n -0000383488 00000 n -0001548501 00000 n +0000383481 00000 n +0001548492 00000 n 0000004913 00000 n 0000004981 00000 n -0000383542 00000 n -0001548408 00000 n +0000383535 00000 n +0001548399 00000 n 0000005035 00000 n 0000005100 00000 n -0000387131 00000 n -0001548329 00000 n +0000387124 00000 n +0001548320 00000 n 0000005154 00000 n 0000005197 00000 n -0000387189 00000 n -0001548198 00000 n +0000387182 00000 n +0001548189 00000 n 0000005246 00000 n 0000005290 00000 n -0000387247 00000 n -0001548119 00000 n +0000387240 00000 n +0001548110 00000 n 0000005344 00000 n 0000005409 00000 n -0000418517 00000 n -0001548026 00000 n +0000418510 00000 n +0001548017 00000 n 0000005463 00000 n 0000005526 00000 n -0000441762 00000 n -0001547947 00000 n +0000441755 00000 n +0001547938 00000 n 0000005580 00000 n 0000005631 00000 n -0000454369 00000 n -0001547816 00000 n +0000454362 00000 n +0001547807 00000 n 0000005680 00000 n 0000005716 00000 n -0000458439 00000 n -0001547737 00000 n +0000458432 00000 n +0001547728 00000 n 0000005770 00000 n 0000005810 00000 n -0000458493 00000 n -0001547644 00000 n +0000458486 00000 n +0001547635 00000 n 0000005864 00000 n 0000005930 00000 n -0000464015 00000 n -0001547565 00000 n +0000464008 00000 n +0001547556 00000 n 0000005984 00000 n 0000006048 00000 n -0000466843 00000 n -0001547486 00000 n +0000466836 00000 n +0001547477 00000 n 0000006097 00000 n 0000006170 00000 n -0000473150 00000 n -0001547353 00000 n +0000473143 00000 n +0001547344 00000 n 0000006217 00000 n 0000006310 00000 n -0000473204 00000 n -0001547236 00000 n +0000473197 00000 n +0001547227 00000 n 0000006359 00000 n 0000006421 00000 n -0000476796 00000 n -0001547157 00000 n +0000476789 00000 n +0001547148 00000 n 0000006475 00000 n 0000006544 00000 n -0000481214 00000 n -0001547078 00000 n +0000481207 00000 n +0001547069 00000 n 0000006598 00000 n 0000006669 00000 n -0000487161 00000 n -0001546947 00000 n +0000487154 00000 n +0001546938 00000 n 0000006718 00000 n 0000006797 00000 n -0000491006 00000 n -0001546868 00000 n +0000490999 00000 n +0001546859 00000 n 0000006851 00000 n 0000006911 00000 n -0000494997 00000 n -0001546789 00000 n +0000494990 00000 n +0001546780 00000 n 0000006965 00000 n 0000007018 00000 n -0000506024 00000 n -0001546658 00000 n +0000506017 00000 n +0001546649 00000 n 0000007067 00000 n 0000007136 00000 n -0000506078 00000 n -0001546579 00000 n +0000506071 00000 n +0001546570 00000 n 0000007190 00000 n 0000007236 00000 n -0000509267 00000 n -0001546486 00000 n +0000509260 00000 n +0001546477 00000 n 0000007290 00000 n 0000007340 00000 n -0000509325 00000 n -0001546393 00000 n +0000509318 00000 n +0001546384 00000 n 0000007394 00000 n 0000007444 00000 n -0000513288 00000 n -0001546314 00000 n +0000513281 00000 n +0001546305 00000 n 0000007498 00000 n 0000007545 00000 n -0000513342 00000 n -0001546183 00000 n +0000513335 00000 n +0001546174 00000 n 0000007594 00000 n 0000007660 00000 n -0000517329 00000 n -0001546104 00000 n +0000517322 00000 n +0001546095 00000 n 0000007714 00000 n 0000007755 00000 n -0000572066 00000 n -0001546025 00000 n +0000572059 00000 n +0001546016 00000 n 0000007809 00000 n 0000007852 00000 n -0000578865 00000 n -0001545894 00000 n +0000578858 00000 n +0001545885 00000 n 0000007901 00000 n 0000007974 00000 n -0000585410 00000 n -0001545815 00000 n +0000585403 00000 n +0001545806 00000 n 0000008028 00000 n 0000008089 00000 n -0000621684 00000 n -0001545736 00000 n +0000621677 00000 n +0001545727 00000 n 0000008143 00000 n 0000008194 00000 n -0000624313 00000 n -0001545657 00000 n +0000624306 00000 n +0001545648 00000 n 0000008243 00000 n 0000008295 00000 n -0000634794 00000 n -0001545524 00000 n +0000634787 00000 n +0001545515 00000 n 0000008342 00000 n 0000008397 00000 n -0000642180 00000 n -0001545407 00000 n +0000642173 00000 n +0001545398 00000 n 0000008446 00000 n 0000008509 00000 n -0000645407 00000 n -0001545328 00000 n +0000645400 00000 n +0001545319 00000 n 0000008563 00000 n 0000008619 00000 n -0000663992 00000 n -0001545249 00000 n +0000663985 00000 n +0001545240 00000 n 0000008673 00000 n 0000008724 00000 n -0000668076 00000 n -0001545118 00000 n +0000668069 00000 n +0001545109 00000 n 0000008773 00000 n 0000008836 00000 n -0000668130 00000 n -0001545039 00000 n +0000668123 00000 n +0001545030 00000 n 0000008890 00000 n 0000008966 00000 n -0000672101 00000 n -0001544946 00000 n +0000672094 00000 n +0001544937 00000 n 0000009020 00000 n 0000009093 00000 n -0000688345 00000 n -0001544867 00000 n +0000688338 00000 n +0001544858 00000 n 0000009147 00000 n 0000009220 00000 n -0000696347 00000 n -0001544774 00000 n +0000696340 00000 n +0001544765 00000 n 0000009269 00000 n 0000009315 00000 n -0000699151 00000 n -0001544643 00000 n +0000699144 00000 n +0001544634 00000 n 0000009364 00000 n 0000009422 00000 n -0000699205 00000 n -0001544564 00000 n +0000699198 00000 n +0001544555 00000 n 0000009476 00000 n 0000009535 00000 n -0000699263 00000 n -0001544485 00000 n +0000699256 00000 n +0001544476 00000 n 0000009589 00000 n 0000009647 00000 n -0000708943 00000 n -0001544354 00000 n +0000708936 00000 n +0001544345 00000 n 0000009696 00000 n 0000009740 00000 n -0000708997 00000 n -0001544275 00000 n +0000708990 00000 n +0001544266 00000 n 0000009794 00000 n 0000009846 00000 n -0000712474 00000 n -0001544182 00000 n +0000712467 00000 n +0001544173 00000 n 0000009900 00000 n 0000009952 00000 n -0000716154 00000 n -0001544103 00000 n +0000716147 00000 n +0001544094 00000 n 0000010006 00000 n 0000010060 00000 n -0000719903 00000 n -0001544010 00000 n +0000719896 00000 n +0001544001 00000 n 0000010109 00000 n 0000010145 00000 n -0000736030 00000 n -0001543931 00000 n +0000736023 00000 n +0001543922 00000 n 0000010194 00000 n 0000010269 00000 n -0000739384 00000 n -0001543798 00000 n +0000739377 00000 n +0001543789 00000 n 0000010316 00000 n 0000010376 00000 n -0000742088 00000 n -0001543681 00000 n +0000742081 00000 n +0001543672 00000 n 0000010425 00000 n 0000010467 00000 n -0000742142 00000 n -0001543602 00000 n +0000742135 00000 n +0001543593 00000 n 0000010521 00000 n 0000010606 00000 n -0000746528 00000 n -0001543509 00000 n +0000746521 00000 n +0001543500 00000 n 0000010660 00000 n 0000010720 00000 n -0000763747 00000 n -0001543416 00000 n +0000763740 00000 n +0001543407 00000 n 0000010774 00000 n 0000010842 00000 n -0000786123 00000 n -0001543323 00000 n +0000786116 00000 n +0001543314 00000 n 0000010896 00000 n 0000010958 00000 n -0000789300 00000 n -0001543244 00000 n +0000789293 00000 n +0001543235 00000 n 0000011012 00000 n 0000011063 00000 n -0000789710 00000 n -0001543113 00000 n +0000789703 00000 n +0001543104 00000 n 0000011112 00000 n 0000011177 00000 n -0000793422 00000 n -0001543034 00000 n +0000793415 00000 n +0001543025 00000 n 0000011231 00000 n 0000011300 00000 n -0000793480 00000 n -0001542941 00000 n +0000793473 00000 n +0001542932 00000 n 0000011354 00000 n 0000011407 00000 n -0000796555 00000 n -0001542862 00000 n +0000796548 00000 n +0001542853 00000 n 0000011461 00000 n 0000011520 00000 n -0000826397 00000 n -0001542731 00000 n +0000826390 00000 n +0001542722 00000 n 0000011569 00000 n 0000011645 00000 n -0000830108 00000 n -0001542652 00000 n +0000830101 00000 n +0001542643 00000 n 0000011699 00000 n 0000011764 00000 n -0000830162 00000 n -0001542559 00000 n +0000830155 00000 n +0001542550 00000 n 0000011818 00000 n 0000011885 00000 n -0000834637 00000 n -0001542466 00000 n +0000834630 00000 n +0001542457 00000 n 0000011939 00000 n 0000012020 00000 n -0000838243 00000 n -0001542373 00000 n +0000838236 00000 n +0001542364 00000 n 0000012074 00000 n 0000012166 00000 n -0000851851 00000 n -0001542280 00000 n +0000851844 00000 n +0001542271 00000 n 0000012220 00000 n 0000012303 00000 n -0000875018 00000 n -0001542187 00000 n +0000875011 00000 n +0001542178 00000 n 0000012357 00000 n 0000012422 00000 n -0000878648 00000 n -0001542108 00000 n +0000878641 00000 n +0001542099 00000 n 0000012476 00000 n 0000012537 00000 n -0000975614 00000 n -0001542029 00000 n +0000975607 00000 n +0001542020 00000 n 0000012586 00000 n 0000012665 00000 n -0000984165 00000 n -0001541896 00000 n +0000984158 00000 n +0001541887 00000 n 0000012712 00000 n 0000012773 00000 n -0001017828 00000 n -0001541779 00000 n +0001017821 00000 n +0001541770 00000 n 0000012822 00000 n 0000012872 00000 n -0001028673 00000 n -0001541700 00000 n +0001028666 00000 n +0001541691 00000 n 0000012926 00000 n 0000012987 00000 n -0001032006 00000 n -0001541607 00000 n +0001031999 00000 n +0001541598 00000 n 0000013041 00000 n 0000013102 00000 n -0001045914 00000 n -0001541514 00000 n +0001045907 00000 n +0001541505 00000 n 0000013156 00000 n 0000013217 00000 n -0001050157 00000 n -0001541435 00000 n +0001050150 00000 n +0001541426 00000 n 0000013271 00000 n 0000013352 00000 n -0001054124 00000 n -0001541304 00000 n +0001054117 00000 n +0001541295 00000 n 0000013401 00000 n 0000013452 00000 n -0001054182 00000 n -0001541225 00000 n +0001054175 00000 n +0001541216 00000 n 0000013506 00000 n 0000013567 00000 n -0001062168 00000 n -0001541132 00000 n +0001062161 00000 n +0001541123 00000 n 0000013621 00000 n 0000013682 00000 n -0001071715 00000 n -0001541053 00000 n +0001071708 00000 n +0001541044 00000 n 0000013736 00000 n 0000013797 00000 n -0001075133 00000 n -0001540922 00000 n +0001075126 00000 n +0001540913 00000 n 0000013846 00000 n 0000013904 00000 n -0001075191 00000 n -0001540843 00000 n +0001075184 00000 n +0001540834 00000 n 0000013958 00000 n 0000014009 00000 n -0001075249 00000 n -0001540750 00000 n +0001075242 00000 n +0001540741 00000 n 0000014063 00000 n 0000014122 00000 n -0001079490 00000 n -0001540657 00000 n +0001079483 00000 n +0001540648 00000 n 0000014176 00000 n 0000014237 00000 n -0001079548 00000 n -0001540564 00000 n +0001079541 00000 n +0001540555 00000 n 0000014291 00000 n 0000014356 00000 n -0001082722 00000 n -0001540485 00000 n +0001082715 00000 n +0001540476 00000 n 0000014410 00000 n 0000014459 00000 n -0001082780 00000 n -0001540354 00000 n +0001082773 00000 n +0001540345 00000 n 0000014508 00000 n 0000014552 00000 n -0001086486 00000 n -0001540275 00000 n +0001086479 00000 n +0001540266 00000 n 0000014606 00000 n 0000014651 00000 n -0001162253 00000 n -0001540196 00000 n +0001162246 00000 n +0001540187 00000 n 0000014705 00000 n 0000014782 00000 n -0001166218 00000 n -0001540103 00000 n +0001166211 00000 n +0001540094 00000 n 0000014831 00000 n 0000014867 00000 n -0001169769 00000 n -0001540024 00000 n +0001169762 00000 n +0001540015 00000 n 0000014916 00000 n 0000014967 00000 n -0001173222 00000 n -0001539891 00000 n +0001173215 00000 n +0001539882 00000 n 0000015014 00000 n 0000015094 00000 n -0001177160 00000 n -0001539774 00000 n +0001177153 00000 n +0001539765 00000 n 0000015143 00000 n 0000015221 00000 n -0001177218 00000 n -0001539695 00000 n +0001177211 00000 n +0001539686 00000 n 0000015275 00000 n 0000015353 00000 n -0001181750 00000 n -0001539602 00000 n +0001181743 00000 n +0001539593 00000 n 0000015407 00000 n 0000015470 00000 n -0001184949 00000 n -0001539523 00000 n +0001184942 00000 n +0001539514 00000 n 0000015524 00000 n 0000015600 00000 n -0001185007 00000 n -0001539392 00000 n +0001185000 00000 n +0001539383 00000 n 0000015649 00000 n 0000015725 00000 n -0001185065 00000 n -0001539313 00000 n +0001185058 00000 n +0001539304 00000 n 0000015779 00000 n 0000015836 00000 n -0001192103 00000 n -0001539220 00000 n +0001192097 00000 n +0001539211 00000 n 0000015890 00000 n 0000015974 00000 n -0001195923 00000 n -0001539127 00000 n +0001195917 00000 n +0001539118 00000 n 0000016028 00000 n 0000016084 00000 n -0001199489 00000 n -0001539034 00000 n +0001199483 00000 n +0001539025 00000 n 0000016138 00000 n 0000016210 00000 n -0001203571 00000 n -0001538955 00000 n +0001203565 00000 n +0001538946 00000 n 0000016264 00000 n 0000016334 00000 n -0001207492 00000 n -0001538876 00000 n +0001207486 00000 n +0001538867 00000 n 0000016383 00000 n 0000016414 00000 n -0001210513 00000 n -0001538782 00000 n +0001210507 00000 n +0001538773 00000 n 0000016461 00000 n 0000016501 00000 n -0001538688 00000 n +0001538679 00000 n 0000016548 00000 n 0000016578 00000 n -0001538608 00000 n +0001538599 00000 n 0000016625 00000 n 0000016663 00000 n 0000017368 00000 n @@ -25854,20 +25915,20 @@ 0000016716 00000 n 0000017480 00000 n 0000017533 00000 n -0001532177 00000 n -0001527554 00000 n -0001532015 00000 n -0001525807 00000 n -0001506677 00000 n -0001525645 00000 n -0001532697 00000 n +0001532168 00000 n +0001527545 00000 n +0001532006 00000 n +0001525798 00000 n +0001506667 00000 n +0001525636 00000 n +0001532688 00000 n 0000020018 00000 n 0000019794 00000 n 0000017671 00000 n 0000019906 00000 n -0001505461 00000 n -0001492248 00000 n -0001505297 00000 n +0001505451 00000 n +0001492238 00000 n +0001505287 00000 n 0000019961 00000 n 0000020654 00000 n 0000020487 00000 n @@ -25877,9 +25938,9 @@ 0000020957 00000 n 0000020726 00000 n 0000021069 00000 n -0001491014 00000 n -0001473398 00000 n -0001490850 00000 n +0001491004 00000 n +0001473389 00000 n +0001490840 00000 n 0000023721 00000 n 0000023498 00000 n 0000021209 00000 n @@ -25938,17 +25999,17 @@ 0000035075 00000 n 0000035234 00000 n 0000035393 00000 n -0001472275 00000 n -0001459753 00000 n -0001472111 00000 n -0001458905 00000 n -0001452090 00000 n -0001458742 00000 n +0001472266 00000 n +0001459744 00000 n +0001472102 00000 n +0001458896 00000 n +0001452082 00000 n +0001458733 00000 n 0000035550 00000 n 0000035708 00000 n -0001450625 00000 n -0001437204 00000 n -0001450463 00000 n +0001450617 00000 n +0001437197 00000 n +0001450455 00000 n 0000035867 00000 n 0000036026 00000 n 0000036185 00000 n @@ -25965,9 +26026,9 @@ 0000037898 00000 n 0000038057 00000 n 0000038215 00000 n -0001435839 00000 n -0001422725 00000 n -0001435675 00000 n +0001435832 00000 n +0001422718 00000 n +0001435668 00000 n 0000038368 00000 n 0000038527 00000 n 0000038686 00000 n @@ -25986,7 +26047,7 @@ 0000040715 00000 n 0000040868 00000 n 0000041026 00000 n -0001532815 00000 n +0001532806 00000 n 0000051001 00000 n 0000043422 00000 n 0000041361 00000 n @@ -26036,2963 +26097,2963 @@ 0000050480 00000 n 0000050638 00000 n 0000050796 00000 n -0000056719 00000 n -0000052439 00000 n +0000056717 00000 n +0000052437 00000 n 0000051086 00000 n -0000056664 00000 n -0000052763 00000 n -0000052922 00000 n -0000053081 00000 n -0000053240 00000 n -0000053398 00000 n -0000053557 00000 n -0000053710 00000 n -0000053868 00000 n -0000054027 00000 n -0000054178 00000 n -0000054331 00000 n -0000054482 00000 n -0000054635 00000 n -0000054794 00000 n -0000054953 00000 n -0000055112 00000 n -0000055265 00000 n -0000055424 00000 n -0000055583 00000 n -0000055742 00000 n -0000055901 00000 n -0000056059 00000 n -0000056211 00000 n -0000056362 00000 n -0000056513 00000 n -0000065036 00000 n -0000059045 00000 n -0000056804 00000 n -0000064925 00000 n -0000064980 00000 n -0000059457 00000 n -0000059609 00000 n -0000059761 00000 n -0000059913 00000 n -0000060065 00000 n -0000060217 00000 n -0000060369 00000 n -0000060521 00000 n -0000060673 00000 n -0000060825 00000 n -0000060977 00000 n -0000061128 00000 n -0000061279 00000 n -0000061430 00000 n -0000061581 00000 n -0000061733 00000 n -0000061885 00000 n -0000062037 00000 n -0000062187 00000 n -0000062340 00000 n -0000062493 00000 n -0000062646 00000 n -0000062799 00000 n -0000062952 00000 n -0000063105 00000 n -0000063258 00000 n -0000063410 00000 n -0000063561 00000 n -0000063713 00000 n -0000063865 00000 n -0000064015 00000 n -0000064167 00000 n -0000064319 00000 n -0000064471 00000 n -0000064622 00000 n -0000064774 00000 n -0000142585 00000 n -0000143119 00000 n -0000150724 00000 n -0000155530 00000 n -0000156477 00000 n -0000196921 00000 n -0000233044 00000 n -0000236639 00000 n -0000281508 00000 n -0000288485 00000 n -0000294357 00000 n -0000310228 00000 n -0000317966 00000 n -0000322434 00000 n -0000334121 00000 n -0000340752 00000 n -0000352646 00000 n -0000357013 00000 n -0000380329 00000 n -0000395188 00000 n -0000418575 00000 n -0000441700 00000 n -0000445704 00000 n -0000450597 00000 n -0000481151 00000 n -0000487098 00000 n -0000540417 00000 n -0000540480 00000 n -0000540542 00000 n -0000559497 00000 n -0000559560 00000 n -0000559623 00000 n -0000581684 00000 n -0000588009 00000 n -0000590271 00000 n -0000075449 00000 n -0000067427 00000 n -0000065134 00000 n -0000075394 00000 n -0000067943 00000 n -0000068096 00000 n -0000068248 00000 n -0000068401 00000 n -0000068553 00000 n -0000068705 00000 n -0000068857 00000 n -0000069008 00000 n -0000069160 00000 n -0000069312 00000 n -0000069464 00000 n -0000069616 00000 n -0000069768 00000 n -0000069920 00000 n -0000070072 00000 n -0000070225 00000 n -0000070378 00000 n -0000070530 00000 n -0000070682 00000 n -0000070833 00000 n -0000070983 00000 n -0000071135 00000 n -0000071287 00000 n -0000071439 00000 n -0000071591 00000 n -0000071743 00000 n -0000071896 00000 n -0000072048 00000 n -0000072201 00000 n -0000072354 00000 n -0000072507 00000 n -0000072660 00000 n -0000072812 00000 n -0000072964 00000 n -0000073115 00000 n -0000073266 00000 n -0000073416 00000 n -0000073568 00000 n -0000073720 00000 n -0000073872 00000 n -0000074024 00000 n -0000074176 00000 n -0000074328 00000 n -0000074481 00000 n -0000074634 00000 n -0000074787 00000 n -0000074940 00000 n -0000075093 00000 n -0000075243 00000 n -0000592632 00000 n -0000616733 00000 n -0000616796 00000 n -0000616859 00000 n -0000645461 00000 n -0000659806 00000 n -0000659868 00000 n -0000672159 00000 n -0000684455 00000 n -0000692262 00000 n -0000704494 00000 n -0000747525 00000 n -0000763684 00000 n -0000763804 00000 n -0000773687 00000 n -0000786177 00000 n -0000789647 00000 n -0000823161 00000 n -0000823224 00000 n -0000830220 00000 n -0000851788 00000 n -0000867002 00000 n -0000867063 00000 n -0000875075 00000 n -0000902942 00000 n -0000903004 00000 n -0000965812 00000 n -0000965874 00000 n -0000984219 00000 n -0001007249 00000 n -0001007312 00000 n -0001017765 00000 n -0001024560 00000 n -0001028731 00000 n -0001032060 00000 n -0001037861 00000 n -0001041400 00000 n -0001045968 00000 n -0001059276 00000 n -0001062109 00000 n -0001068097 00000 n -0001071773 00000 n -0001079428 00000 n -0001086544 00000 n -0001158488 00000 n -0000076136 00000 n -0000075797 00000 n -0000075534 00000 n -0000076081 00000 n -0000075929 00000 n -0001196516 00000 n -0000079345 00000 n -0000078261 00000 n -0000076208 00000 n -0000078434 00000 n -0000078614 00000 n -0000078782 00000 n -0000078961 00000 n -0000079125 00000 n -0001532933 00000 n -0001235302 00000 n -0001253929 00000 n -0001232242 00000 n -0001260025 00000 n -0000082429 00000 n -0000082256 00000 n -0000079444 00000 n -0000082372 00000 n -0000086760 00000 n -0000084898 00000 n -0000082515 00000 n -0000085116 00000 n -0000085282 00000 n -0000085453 00000 n -0001421464 00000 n -0001408055 00000 n -0001421298 00000 n -0001407085 00000 n -0001403555 00000 n -0001406920 00000 n -0000085622 00000 n -0000085801 00000 n -0000085967 00000 n -0000086130 00000 n -0000086282 00000 n -0000086445 00000 n -0000086604 00000 n -0001247800 00000 n -0001269516 00000 n -0001244468 00000 n -0001269049 00000 n -0001251017 00000 n -0001223094 00000 n -0001251076 00000 n -0000089822 00000 n -0000089246 00000 n -0000086887 00000 n -0000089392 00000 n -0000089552 00000 n -0000094560 00000 n -0000092499 00000 n -0000089908 00000 n -0000092726 00000 n -0000092878 00000 n -0000093031 00000 n -0000093190 00000 n -0000093359 00000 n -0000093525 00000 n -0000093686 00000 n -0000093854 00000 n -0000094020 00000 n -0000094198 00000 n -0000094351 00000 n -0001244645 00000 n -0001244409 00000 n -0001226255 00000 n -0001235420 00000 n -0001232360 00000 n -0001262957 00000 n -0001232301 00000 n -0000098700 00000 n -0000097141 00000 n -0000094659 00000 n -0000097341 00000 n -0000097508 00000 n -0000097679 00000 n -0000097840 00000 n -0000098005 00000 n -0000098181 00000 n -0000098363 00000 n -0000098546 00000 n -0001266435 00000 n -0001266376 00000 n -0001223153 00000 n -0001244527 00000 n -0001232419 00000 n -0001232128 00000 n -0000101935 00000 n -0000101194 00000 n -0000098786 00000 n -0000101349 00000 n -0000101502 00000 n -0000101668 00000 n -0001533058 00000 n -0001251135 00000 n -0000105334 00000 n -0000104573 00000 n -0000102047 00000 n -0000104728 00000 n -0000104878 00000 n -0000105052 00000 n -0001253697 00000 n -0001247623 00000 n -0000108873 00000 n -0000107827 00000 n -0000105433 00000 n -0000108000 00000 n -0000108159 00000 n -0000108312 00000 n -0000108479 00000 n -0000108644 00000 n -0001238624 00000 n -0001253811 00000 n -0001269281 00000 n -0001257008 00000 n -0000111866 00000 n -0000110387 00000 n -0000109000 00000 n -0000110587 00000 n -0000110740 00000 n -0000110893 00000 n -0000111046 00000 n -0000111198 00000 n -0000111351 00000 n -0000111504 00000 n -0000111656 00000 n -0000114308 00000 n -0000113902 00000 n -0000111966 00000 n -0000114039 00000 n -0001232595 00000 n -0000118181 00000 n -0000117205 00000 n -0000114394 00000 n -0000117378 00000 n -0000117540 00000 n -0000117701 00000 n -0000117861 00000 n -0000118021 00000 n -0001244704 00000 n -0001238565 00000 n -0001232183 00000 n -0001238683 00000 n -0001235479 00000 n -0000122274 00000 n -0000121307 00000 n -0000118281 00000 n -0000121480 00000 n -0000121646 00000 n -0000121807 00000 n -0000121956 00000 n -0000122120 00000 n -0001403117 00000 n -0001399577 00000 n -0001402954 00000 n -0001398025 00000 n -0001381436 00000 n -0001397861 00000 n -0001533183 00000 n -0001238506 00000 n -0001269104 00000 n -0001253870 00000 n -0001253988 00000 n -0001274074 00000 n -0000126272 00000 n -0000125240 00000 n -0000122401 00000 n -0000126215 00000 n -0000125413 00000 n -0000125582 00000 n -0000125743 00000 n -0000125909 00000 n -0000126064 00000 n -0001241441 00000 n -0001226079 00000 n -0001247741 00000 n -0000130503 00000 n -0000128865 00000 n -0000126358 00000 n -0000130332 00000 n -0000129065 00000 n -0000129238 00000 n -0000129393 00000 n -0000129547 00000 n -0000129702 00000 n -0000129855 00000 n -0000130010 00000 n -0000130172 00000 n -0001250958 00000 n -0000134136 00000 n -0000133561 00000 n -0000130615 00000 n -0000134022 00000 n -0000133707 00000 n -0000133867 00000 n -0001380256 00000 n -0001370931 00000 n -0001380091 00000 n -0001274041 00000 n -0000138205 00000 n -0000137175 00000 n -0000134316 00000 n -0000138148 00000 n -0000137348 00000 n -0000137502 00000 n -0000137656 00000 n -0000137834 00000 n -0000137987 00000 n -0000216986 00000 n -0000220790 00000 n -0000143182 00000 n -0000141249 00000 n -0000138304 00000 n -0000141703 00000 n -0000141760 00000 n -0000141819 00000 n -0001369873 00000 n -0001359953 00000 n -0001369708 00000 n -0001359034 00000 n -0001355708 00000 n -0001358870 00000 n -0001354453 00000 n -0001339297 00000 n -0001354288 00000 n -0000141878 00000 n -0000141937 00000 n -0000141996 00000 n -0000142055 00000 n -0000142114 00000 n -0000142173 00000 n -0000142232 00000 n -0000142291 00000 n -0000142350 00000 n -0000142408 00000 n -0000142467 00000 n -0000142526 00000 n -0000141395 00000 n -0000141549 00000 n -0000142648 00000 n -0000142707 00000 n -0000142766 00000 n -0000142825 00000 n -0000142884 00000 n -0000142942 00000 n -0000143001 00000 n -0000143060 00000 n -0000146602 00000 n -0000146139 00000 n -0000143337 00000 n -0000146431 00000 n -0000146276 00000 n -0001533308 00000 n -0001274008 00000 n -0000150787 00000 n -0000149515 00000 n -0000146756 00000 n -0000150314 00000 n -0000149679 00000 n -0000149845 00000 n -0000150371 00000 n -0000150430 00000 n -0000150489 00000 n -0000150548 00000 n -0000150607 00000 n -0000150665 00000 n -0000150006 00000 n -0000150160 00000 n -0001229456 00000 n -0001232536 00000 n -0000156540 00000 n -0000154356 00000 n -0000150915 00000 n -0000154472 00000 n -0000154529 00000 n -0000154588 00000 n -0000154646 00000 n -0000154705 00000 n -0000154764 00000 n -0000154823 00000 n -0000154882 00000 n -0000154941 00000 n -0000155000 00000 n -0000155059 00000 n -0000155118 00000 n -0000155176 00000 n -0000155235 00000 n -0000155294 00000 n -0000155353 00000 n -0000155412 00000 n -0000155471 00000 n -0000155593 00000 n -0000155652 00000 n -0000155711 00000 n -0000155770 00000 n -0000155829 00000 n -0000155888 00000 n -0000155947 00000 n -0000156006 00000 n -0000156065 00000 n -0000156124 00000 n -0000156182 00000 n -0000156241 00000 n -0000156300 00000 n -0001338277 00000 n -0001326737 00000 n -0001338112 00000 n -0000156359 00000 n -0000156418 00000 n -0000160479 00000 n -0000159580 00000 n -0000156723 00000 n -0000160365 00000 n -0000159744 00000 n -0000159898 00000 n -0000160053 00000 n -0000160208 00000 n -0001273975 00000 n -0001273942 00000 n -0001229280 00000 n -0000163065 00000 n -0000197160 00000 n -0000162919 00000 n -0000160646 00000 n -0000196754 00000 n -0000196445 00000 n -0000196599 00000 n -0000196984 00000 n -0000197043 00000 n -0000197102 00000 n -0000196283 00000 n -0000196340 00000 n -0000196421 00000 n -0000200974 00000 n -0000199804 00000 n -0000197288 00000 n -0000200803 00000 n -0000200860 00000 n -0000200915 00000 n -0000199977 00000 n -0000200146 00000 n -0000200306 00000 n -0000200472 00000 n -0000200640 00000 n -0001223212 00000 n -0001223035 00000 n -0000203999 00000 n -0000203770 00000 n -0000201074 00000 n -0000203886 00000 n -0001533433 00000 n -0000207961 00000 n -0000206899 00000 n -0000204112 00000 n -0000207847 00000 n -0000207072 00000 n -0000207226 00000 n -0000207381 00000 n -0000207534 00000 n -0000207694 00000 n -0001273909 00000 n -0001250723 00000 n -0000211102 00000 n -0000210449 00000 n -0000208101 00000 n -0000210931 00000 n -0000210595 00000 n -0000210765 00000 n -0001229221 00000 n -0001263252 00000 n -0000213867 00000 n -0000213636 00000 n -0000211188 00000 n -0000213752 00000 n -0000217045 00000 n -0000216189 00000 n -0000213953 00000 n -0000216814 00000 n -0000216344 00000 n -0000216499 00000 n -0000216654 00000 n -0000220849 00000 n -0000220112 00000 n -0000217158 00000 n -0000220733 00000 n -0000220267 00000 n -0000220420 00000 n -0000220573 00000 n -0001273876 00000 n -0000223947 00000 n -0000223345 00000 n -0000221004 00000 n -0000223642 00000 n -0000223699 00000 n -0000223758 00000 n -0000223821 00000 n -0000223884 00000 n -0000223482 00000 n -0001533558 00000 n -0000226102 00000 n -0000233107 00000 n -0000225956 00000 n -0000224102 00000 n -0000232928 00000 n -0000232985 00000 n -0000232620 00000 n -0000232774 00000 n -0000229182 00000 n -0000229239 00000 n -0000229304 00000 n -0000230363 00000 n -0000230386 00000 n -0000230692 00000 n -0000232597 00000 n -0001273843 00000 n -0000236701 00000 n -0000236068 00000 n -0000233264 00000 n -0000236523 00000 n -0000236580 00000 n -0000236214 00000 n -0000236368 00000 n -0001273810 00000 n -0000239647 00000 n -0000239357 00000 n -0000236856 00000 n -0000239473 00000 n -0000239588 00000 n -0000244025 00000 n -0000242188 00000 n -0000239760 00000 n -0000243850 00000 n -0000243907 00000 n -0000242397 00000 n -0000242557 00000 n -0000242717 00000 n -0000242878 00000 n -0000243038 00000 n -0000243199 00000 n -0000243966 00000 n -0000243361 00000 n -0000243526 00000 n -0000243690 00000 n -0001238329 00000 n -0001244350 00000 n -0001263311 00000 n -0001235656 00000 n -0000247094 00000 n -0000246684 00000 n -0000244112 00000 n -0000246979 00000 n -0000246821 00000 n -0000251342 00000 n -0000249939 00000 n -0000247193 00000 n -0000251285 00000 n -0000250130 00000 n -0000250289 00000 n -0000250453 00000 n -0000250623 00000 n -0000250791 00000 n -0000250954 00000 n -0000251125 00000 n -0001533683 00000 n -0001254047 00000 n -0001250664 00000 n -0001241558 00000 n -0001263193 00000 n -0001254224 00000 n -0001229573 00000 n -0000257126 00000 n -0000254030 00000 n -0000251415 00000 n -0000257069 00000 n -0000254311 00000 n -0000254478 00000 n -0000254638 00000 n -0000254790 00000 n -0000254943 00000 n -0000255109 00000 n -0000255278 00000 n -0000255436 00000 n -0000255603 00000 n -0000255763 00000 n -0000255931 00000 n -0000256092 00000 n -0000256257 00000 n -0000256418 00000 n -0000256579 00000 n -0000256743 00000 n -0000256909 00000 n -0001266022 00000 n -0001223329 00000 n -0001256890 00000 n -0001265967 00000 n -0001259907 00000 n -0001269222 00000 n -0001226138 00000 n -0000259631 00000 n -0000259230 00000 n -0000257199 00000 n -0000259520 00000 n -0000259367 00000 n -0000263027 00000 n -0000261799 00000 n -0000259717 00000 n -0000262798 00000 n -0000262909 00000 n -0000261972 00000 n -0000262137 00000 n -0000262302 00000 n -0000262471 00000 n -0000262639 00000 n -0000262968 00000 n -0001238742 00000 n -0001269457 00000 n -0001241382 00000 n -0001269163 00000 n -0001235597 00000 n -0000268001 00000 n -0000266006 00000 n -0000263140 00000 n -0000267885 00000 n -0000266224 00000 n -0000266404 00000 n -0000267942 00000 n -0000266571 00000 n -0000266738 00000 n -0000266899 00000 n -0000267064 00000 n -0000267228 00000 n -0000267389 00000 n -0000267554 00000 n -0000267722 00000 n -0001266081 00000 n -0001266140 00000 n -0001223271 00000 n -0001229631 00000 n -0001247564 00000 n -0001241794 00000 n -0001262843 00000 n -0000272445 00000 n -0000270730 00000 n -0000268114 00000 n -0000272331 00000 n -0000270939 00000 n -0000271094 00000 n -0000271249 00000 n -0000271404 00000 n -0000271558 00000 n -0000271710 00000 n -0000271864 00000 n -0000272018 00000 n -0000272178 00000 n -0000276149 00000 n -0000275627 00000 n -0000272544 00000 n -0000276092 00000 n -0000275773 00000 n -0000275933 00000 n -0001533808 00000 n -0000281571 00000 n -0000279003 00000 n -0000276288 00000 n -0000279294 00000 n -0000279351 00000 n -0000279411 00000 n -0000279471 00000 n -0000279531 00000 n -0000279591 00000 n -0000279651 00000 n -0000279711 00000 n -0000279771 00000 n -0000279830 00000 n -0000279890 00000 n -0000279950 00000 n -0000280010 00000 n -0000280070 00000 n -0000280130 00000 n -0000280190 00000 n -0000280250 00000 n -0000280310 00000 n -0000280369 00000 n -0000280429 00000 n -0000280489 00000 n -0000280549 00000 n -0000280609 00000 n -0000280669 00000 n -0000280729 00000 n -0000280789 00000 n -0000280849 00000 n -0000280908 00000 n -0000280968 00000 n -0000281028 00000 n -0000281088 00000 n -0000281148 00000 n -0000281208 00000 n -0000281268 00000 n -0000281328 00000 n -0000281388 00000 n -0000281448 00000 n -0000279140 00000 n -0000284488 00000 n -0000285438 00000 n -0000286206 00000 n -0000288606 00000 n -0000284315 00000 n -0000281767 00000 n -0000288428 00000 n -0000287661 00000 n -0000287816 00000 n -0000287968 00000 n -0000288121 00000 n -0001326273 00000 n -0001322963 00000 n -0001326106 00000 n -0000288276 00000 n -0000285209 00000 n -0000285266 00000 n -0000285331 00000 n -0000285416 00000 n -0000285977 00000 n -0000286034 00000 n -0000286099 00000 n -0000286184 00000 n -0000287432 00000 n -0000287489 00000 n -0000287554 00000 n -0000287639 00000 n -0000302885 00000 n -0000291646 00000 n -0000293107 00000 n -0000294538 00000 n -0000291509 00000 n -0000288816 00000 n -0000294300 00000 n -0000294420 00000 n -0000294479 00000 n -0000294147 00000 n -0000292878 00000 n -0000292935 00000 n -0000293000 00000 n -0000293085 00000 n -0000293918 00000 n -0000293975 00000 n -0000294040 00000 n -0000294125 00000 n -0000298500 00000 n -0000297429 00000 n -0000294720 00000 n -0000298384 00000 n -0000298441 00000 n -0000297602 00000 n -0000297756 00000 n -0000297911 00000 n -0000298063 00000 n -0000298216 00000 n -0001273777 00000 n -0000302944 00000 n -0000302020 00000 n -0000298640 00000 n -0000302828 00000 n -0000302184 00000 n -0000302364 00000 n -0000302520 00000 n -0001322046 00000 n -0001318870 00000 n -0001321882 00000 n -0000302674 00000 n -0001318311 00000 n -0001315791 00000 n -0001318146 00000 n -0001273744 00000 n -0000306471 00000 n -0000305673 00000 n -0000303139 00000 n -0000306302 00000 n -0000305828 00000 n -0000305983 00000 n -0000306150 00000 n -0001533933 00000 n -0000310289 00000 n -0000309879 00000 n -0000306584 00000 n -0000310171 00000 n -0000310016 00000 n -0001315209 00000 n -0001310760 00000 n -0001315044 00000 n -0000315186 00000 n -0000314130 00000 n -0000310513 00000 n -0000315075 00000 n -0000314303 00000 n -0000314457 00000 n -0000314611 00000 n -0000314766 00000 n -0000314921 00000 n -0001273711 00000 n -0000333934 00000 n -0000318027 00000 n -0000317793 00000 n -0000315407 00000 n -0000317909 00000 n -0001310444 00000 n -0001309005 00000 n -0001310280 00000 n -0000322553 00000 n -0000321587 00000 n -0000318226 00000 n -0000322377 00000 n -0001308085 00000 n -0001299881 00000 n -0001307920 00000 n -0001298894 00000 n -0001289291 00000 n -0001298729 00000 n -0000321751 00000 n -0000321907 00000 n -0000322061 00000 n -0000322217 00000 n -0001273678 00000 n -0001273645 00000 n -0000326713 00000 n -0000325812 00000 n -0000322803 00000 n -0000326597 00000 n -0000325976 00000 n -0000326135 00000 n -0000326654 00000 n -0000326288 00000 n -0000326442 00000 n -0000329717 00000 n -0000331022 00000 n -0000332296 00000 n -0000334182 00000 n -0000329562 00000 n -0000326852 00000 n -0000333877 00000 n -0000333993 00000 n -0000334057 00000 n -0000333409 00000 n -0000333563 00000 n -0000333717 00000 n -0001534058 00000 n -0000330793 00000 n -0000330850 00000 n -0000330915 00000 n -0000331000 00000 n -0000332067 00000 n -0000332124 00000 n -0000332189 00000 n -0000332274 00000 n -0000333180 00000 n -0000333237 00000 n -0000333302 00000 n -0000333387 00000 n -0000337863 00000 n -0000337048 00000 n -0000334407 00000 n -0000337688 00000 n -0000337745 00000 n -0000337203 00000 n -0000337357 00000 n -0000337523 00000 n -0000337804 00000 n -0001262898 00000 n -0000340815 00000 n -0000340399 00000 n -0000337989 00000 n -0000340695 00000 n -0000340536 00000 n -0000344628 00000 n -0000348307 00000 n -0000352709 00000 n -0000344446 00000 n -0000341000 00000 n -0000352589 00000 n -0000351655 00000 n -0000351808 00000 n -0000351969 00000 n -0000352124 00000 n -0000352279 00000 n -0000352434 00000 n -0000345810 00000 n -0000345867 00000 n -0000345948 00000 n -0000347147 00000 n -0000347169 00000 n -0000347429 00000 n -0000347500 00000 n -0000348285 00000 n -0000349225 00000 n -0000349282 00000 n -0000349363 00000 n -0000350562 00000 n -0000350584 00000 n -0000350840 00000 n -0000350907 00000 n -0000351633 00000 n -0001257067 00000 n -0001273612 00000 n -0000355431 00000 n -0000357134 00000 n -0000355294 00000 n -0000352922 00000 n -0000356956 00000 n -0000356801 00000 n -0000356572 00000 n -0000356629 00000 n -0000356694 00000 n -0000356779 00000 n -0000360573 00000 n -0000360097 00000 n -0000357276 00000 n -0000360400 00000 n -0000360234 00000 n -0000364298 00000 n -0000363339 00000 n -0000360712 00000 n -0000364127 00000 n -0000363503 00000 n -0000363662 00000 n -0000363817 00000 n -0000363972 00000 n -0001534183 00000 n -0000367763 00000 n -0000367239 00000 n -0000364436 00000 n -0000367706 00000 n -0000367385 00000 n -0000367541 00000 n -0001273579 00000 n -0000371206 00000 n -0000370632 00000 n -0000367944 00000 n -0000371091 00000 n -0000370778 00000 n -0000370938 00000 n -0000378013 00000 n -0000375138 00000 n -0000374010 00000 n -0000371332 00000 n -0000374965 00000 n -0001288943 00000 n -0001286631 00000 n -0001288778 00000 n -0000374183 00000 n -0000374338 00000 n -0000374498 00000 n -0000374657 00000 n -0000374811 00000 n -0000380392 00000 n -0000377876 00000 n -0000375290 00000 n -0000379267 00000 n -0000379324 00000 n -0000379388 00000 n -0000379452 00000 n -0000379516 00000 n -0000379580 00000 n -0000379644 00000 n -0000379708 00000 n -0000379771 00000 n -0000379833 00000 n -0000379895 00000 n -0000379957 00000 n -0000380019 00000 n -0000380081 00000 n -0000380143 00000 n -0000380205 00000 n -0000380267 00000 n -0000379112 00000 n -0000378883 00000 n -0000378940 00000 n -0000379005 00000 n -0000379090 00000 n -0000383600 00000 n -0000383315 00000 n -0000380588 00000 n -0000383431 00000 n -0000387305 00000 n -0000386285 00000 n -0000383740 00000 n -0000387074 00000 n -0000386449 00000 n -0000386604 00000 n -0000386757 00000 n -0000386921 00000 n -0001534308 00000 n -0001273546 00000 n -0000391411 00000 n -0000390398 00000 n -0000387458 00000 n -0000391354 00000 n -0000390571 00000 n -0000390724 00000 n -0000390879 00000 n -0000391034 00000 n -0000391194 00000 n -0001273513 00000 n -0000395251 00000 n -0000395015 00000 n -0000391539 00000 n -0000395131 00000 n -0000398089 00000 n -0000408101 00000 n -0000421383 00000 n -0000431748 00000 n -0000418638 00000 n -0000397889 00000 n -0000395365 00000 n -0000418460 00000 n -0000417209 00000 n -0000417363 00000 n -0000417518 00000 n -0000417673 00000 n -0000417828 00000 n -0000417983 00000 n -0000418138 00000 n -0000418293 00000 n -0000404996 00000 n -0000405400 00000 n -0000406476 00000 n -0000407558 00000 n -0000407581 00000 n -0000407835 00000 n -0000414104 00000 n -0000414508 00000 n -0000415584 00000 n -0000416666 00000 n -0000416689 00000 n -0000416943 00000 n -0001273480 00000 n -0001273447 00000 n -0000441820 00000 n -0000421237 00000 n -0000418864 00000 n -0000441643 00000 n -0000441329 00000 n -0000441488 00000 n -0000428643 00000 n -0000429047 00000 n -0000430123 00000 n -0000431205 00000 n -0000431228 00000 n -0000431482 00000 n -0000438224 00000 n -0000438628 00000 n -0000439704 00000 n -0000440786 00000 n -0000440809 00000 n -0000441063 00000 n -0000445767 00000 n -0000445531 00000 n -0000441991 00000 n -0000445647 00000 n -0000450660 00000 n -0000450069 00000 n -0000445867 00000 n -0000450540 00000 n -0000450215 00000 n -0000450370 00000 n -0001534433 00000 n -0001259848 00000 n -0000454427 00000 n -0000453677 00000 n -0000450773 00000 n -0000454312 00000 n -0000453832 00000 n -0000454000 00000 n -0000454155 00000 n -0001244291 00000 n -0001273414 00000 n -0000458551 00000 n -0000457216 00000 n -0000454580 00000 n -0000458382 00000 n -0000457398 00000 n -0000457566 00000 n -0000457732 00000 n -0000457893 00000 n -0000458056 00000 n -0000458223 00000 n -0001250840 00000 n -0001260143 00000 n -0000464072 00000 n -0000461596 00000 n -0000458650 00000 n -0000463958 00000 n -0000461841 00000 n -0000462006 00000 n -0000462173 00000 n -0000462336 00000 n -0000462499 00000 n -0000462655 00000 n -0000462820 00000 n -0000462984 00000 n -0000463153 00000 n -0000463320 00000 n -0000463478 00000 n -0000463632 00000 n -0000463793 00000 n -0001253752 00000 n -0001241735 00000 n -0001238447 00000 n -0001273381 00000 n -0000466897 00000 n -0000466670 00000 n -0000464238 00000 n -0000466786 00000 n -0000470123 00000 n -0000469085 00000 n -0000466983 00000 n -0000470066 00000 n -0000469258 00000 n -0000469418 00000 n -0000469581 00000 n -0000469751 00000 n -0000469915 00000 n -0000473262 00000 n -0000472126 00000 n -0000470196 00000 n -0000473093 00000 n -0000472299 00000 n -0000472452 00000 n -0000472605 00000 n -0000472766 00000 n -0000472940 00000 n -0001534558 00000 n -0001250899 00000 n -0000476854 00000 n -0000476124 00000 n -0000473375 00000 n -0000476739 00000 n -0000476279 00000 n -0000476432 00000 n -0000476586 00000 n -0000481272 00000 n -0000479544 00000 n -0000477020 00000 n -0000479834 00000 n -0000479891 00000 n -0000479955 00000 n -0000480018 00000 n -0000480082 00000 n -0000480146 00000 n -0000480206 00000 n -0000480265 00000 n -0000480325 00000 n -0000480385 00000 n -0000480449 00000 n -0000480512 00000 n -0000480576 00000 n -0000480640 00000 n -0000480704 00000 n -0000480768 00000 n -0000480832 00000 n -0000480895 00000 n -0000480959 00000 n -0000481023 00000 n -0000481087 00000 n -0000479681 00000 n -0000487219 00000 n -0000483881 00000 n -0000481468 00000 n -0000485781 00000 n -0000485838 00000 n -0000485902 00000 n -0000485965 00000 n -0000486029 00000 n -0000486093 00000 n -0000486153 00000 n -0000486212 00000 n -0000486272 00000 n -0000486332 00000 n -0000486396 00000 n -0000486459 00000 n -0000486523 00000 n -0000486587 00000 n -0000486651 00000 n -0000486715 00000 n -0000486779 00000 n -0000486842 00000 n -0000486906 00000 n -0000486970 00000 n -0000487034 00000 n -0000484099 00000 n -0000484268 00000 n -0000484437 00000 n -0000484606 00000 n -0000484764 00000 n -0000484934 00000 n -0000485103 00000 n -0000485291 00000 n -0000485463 00000 n -0001285992 00000 n -0001281870 00000 n -0001285826 00000 n -0000485630 00000 n -0001226197 00000 n -0001235243 00000 n -0001235188 00000 n -0001250782 00000 n -0001232477 00000 n -0001266199 00000 n -0001257244 00000 n -0001254106 00000 n -0001260261 00000 n -0000491417 00000 n -0000490156 00000 n -0000487388 00000 n -0000490949 00000 n -0000490320 00000 n -0000490476 00000 n -0000490635 00000 n -0000490794 00000 n -0000491063 00000 n -0000491122 00000 n -0000491181 00000 n -0000491240 00000 n -0000491299 00000 n -0000491358 00000 n -0000495055 00000 n -0000494483 00000 n -0000491583 00000 n -0000494940 00000 n -0000494629 00000 n -0000494783 00000 n -0000498303 00000 n -0000497425 00000 n -0000495194 00000 n -0000497717 00000 n -0000497774 00000 n -0000497833 00000 n -0000497892 00000 n -0000497951 00000 n -0000498009 00000 n -0000498068 00000 n -0000497562 00000 n -0000498127 00000 n -0000498186 00000 n -0000498245 00000 n -0001534683 00000 n -0001273348 00000 n -0000501917 00000 n -0000501568 00000 n -0000498484 00000 n -0000501860 00000 n -0000501705 00000 n -0001273315 00000 n -0000506136 00000 n -0000505159 00000 n -0000502098 00000 n -0000505967 00000 n -0000505323 00000 n -0000505488 00000 n -0000505644 00000 n -0000505813 00000 n -0001247506 00000 n -0001273282 00000 n -0000509383 00000 n -0000508717 00000 n -0000506330 00000 n -0000509210 00000 n -0000508863 00000 n -0000509030 00000 n -0000513400 00000 n -0000512045 00000 n -0000509497 00000 n -0000513231 00000 n -0000512227 00000 n -0000512387 00000 n -0000512568 00000 n -0000512745 00000 n -0000512916 00000 n -0000513076 00000 n -0001241323 00000 n -0001260084 00000 n -0001257126 00000 n -0000518088 00000 n -0000525655 00000 n -0000533079 00000 n -0000541242 00000 n -0000548263 00000 n -0000552967 00000 n -0000517387 00000 n -0000516486 00000 n -0000513553 00000 n -0000517272 00000 n -0000516650 00000 n -0000516805 00000 n -0000516957 00000 n -0000517113 00000 n -0001273249 00000 n -0000540603 00000 n -0000517972 00000 n -0000517541 00000 n -0000540360 00000 n -0001534808 00000 n -0000523793 00000 n -0000524301 00000 n -0000525377 00000 n -0000525400 00000 n -0000531217 00000 n -0000531725 00000 n -0000532801 00000 n -0000532824 00000 n -0000538498 00000 n -0000539006 00000 n -0000540082 00000 n -0000540105 00000 n -0000559685 00000 n -0000541126 00000 n -0000540736 00000 n -0000559440 00000 n -0000546401 00000 n -0000546909 00000 n -0000547985 00000 n -0000548008 00000 n -0000551105 00000 n -0000551613 00000 n -0000552689 00000 n -0000552712 00000 n -0000557578 00000 n -0000558086 00000 n -0000559162 00000 n -0000559185 00000 n -0000563404 00000 n -0000562714 00000 n -0000559818 00000 n -0000563347 00000 n -0000562869 00000 n -0000563023 00000 n -0000563178 00000 n -0000568253 00000 n -0000566294 00000 n -0000563531 00000 n -0000568196 00000 n -0000566512 00000 n -0000566671 00000 n -0000566837 00000 n -0000566996 00000 n -0000567165 00000 n -0000567347 00000 n -0000567519 00000 n -0000567695 00000 n -0000567861 00000 n -0000568032 00000 n -0001235538 00000 n -0001241499 00000 n -0001256949 00000 n -0000572124 00000 n -0000570889 00000 n -0000568367 00000 n -0000572009 00000 n -0000571071 00000 n -0000571240 00000 n -0000571394 00000 n -0000571548 00000 n -0000571702 00000 n -0000571856 00000 n -0000575733 00000 n -0000575061 00000 n -0000572264 00000 n -0000575676 00000 n -0000575216 00000 n -0000575369 00000 n -0000575523 00000 n -0000581747 00000 n -0000577980 00000 n -0000575847 00000 n -0000578808 00000 n -0000578144 00000 n -0000578923 00000 n -0000578987 00000 n -0000579051 00000 n -0000579115 00000 n -0000579179 00000 n -0000579243 00000 n -0000579307 00000 n -0000579367 00000 n -0000579427 00000 n -0000579487 00000 n -0000579547 00000 n -0000579607 00000 n -0000579667 00000 n -0000579731 00000 n -0000579795 00000 n -0000579859 00000 n -0000579923 00000 n -0000579987 00000 n -0000580051 00000 n -0000580114 00000 n -0000580174 00000 n -0000580234 00000 n -0000580294 00000 n -0000580354 00000 n -0000580414 00000 n -0000580474 00000 n -0000580533 00000 n -0000580597 00000 n -0000580661 00000 n -0000580725 00000 n -0000580789 00000 n -0000580853 00000 n -0000580917 00000 n -0000580981 00000 n -0000581045 00000 n -0000581109 00000 n -0000581173 00000 n -0000581237 00000 n -0000581301 00000 n -0000581365 00000 n -0000581429 00000 n -0000581493 00000 n -0000581556 00000 n -0000581620 00000 n -0000578296 00000 n -0000578475 00000 n -0000578657 00000 n -0001534933 00000 n -0001244236 00000 n -0000593363 00000 n -0000601707 00000 n -0000609940 00000 n -0000585468 00000 n -0000584411 00000 n -0000581889 00000 n -0000585353 00000 n -0000584584 00000 n -0000584736 00000 n -0000584888 00000 n -0000585043 00000 n -0000585198 00000 n -0000588071 00000 n -0000587836 00000 n -0000585567 00000 n -0000587952 00000 n -0000590333 00000 n -0000590098 00000 n -0000588186 00000 n -0000590214 00000 n -0000592694 00000 n -0000592459 00000 n -0000590448 00000 n -0000592575 00000 n -0000616920 00000 n -0000593247 00000 n -0000592809 00000 n -0000616676 00000 n -0000598553 00000 n -0000599005 00000 n -0000600081 00000 n -0000601163 00000 n -0000601186 00000 n -0000601441 00000 n -0000606787 00000 n -0000607239 00000 n -0000608315 00000 n -0000609397 00000 n -0000609420 00000 n -0000609674 00000 n -0000613523 00000 n -0000613975 00000 n -0000615051 00000 n -0000616133 00000 n -0000616156 00000 n -0000616410 00000 n -0000621742 00000 n -0000619703 00000 n -0000617053 00000 n -0000621627 00000 n -0000619930 00000 n -0000620085 00000 n -0000620240 00000 n -0000620395 00000 n -0000620550 00000 n -0000620703 00000 n -0000620857 00000 n -0000621012 00000 n -0000621166 00000 n -0000621321 00000 n -0000621474 00000 n -0001535058 00000 n -0000624371 00000 n -0000624140 00000 n -0000621856 00000 n -0000624256 00000 n -0000627720 00000 n -0000627006 00000 n -0000624485 00000 n -0000627663 00000 n -0000627161 00000 n -0000627326 00000 n -0000627491 00000 n -0000631297 00000 n -0000630297 00000 n -0000627821 00000 n -0000631122 00000 n -0000631179 00000 n -0000630461 00000 n -0000630620 00000 n -0000630787 00000 n -0000630951 00000 n -0000631238 00000 n -0000631940 00000 n -0000631767 00000 n -0000631397 00000 n -0000631883 00000 n -0000634848 00000 n -0000634444 00000 n -0000632013 00000 n -0000634737 00000 n -0000634581 00000 n -0001273216 00000 n -0000637921 00000 n -0000637748 00000 n -0000635002 00000 n -0000637864 00000 n -0001535183 00000 n -0000642238 00000 n -0000640529 00000 n -0000638008 00000 n -0000642123 00000 n -0000640738 00000 n -0000640891 00000 n -0000641044 00000 n -0000641198 00000 n -0000641353 00000 n -0000641507 00000 n -0000641661 00000 n -0000641815 00000 n -0000641969 00000 n -0000649531 00000 n -0000650981 00000 n -0000652825 00000 n -0000645524 00000 n -0000644724 00000 n -0000642378 00000 n -0000645350 00000 n -0000644879 00000 n -0000645032 00000 n -0000645190 00000 n -0000659929 00000 n -0000649385 00000 n -0000645636 00000 n -0000654962 00000 n -0000655019 00000 n -0000655078 00000 n -0000655137 00000 n -0000655196 00000 n -0000655255 00000 n -0000655312 00000 n -0000655371 00000 n -0000655430 00000 n -0000655489 00000 n -0000655548 00000 n -0000655607 00000 n -0000655666 00000 n -0000655725 00000 n -0000655784 00000 n -0000655842 00000 n -0000655901 00000 n -0000655960 00000 n -0000656019 00000 n -0000656078 00000 n -0000656137 00000 n -0000656196 00000 n -0000656255 00000 n -0000656314 00000 n -0000656373 00000 n -0000656432 00000 n -0000656490 00000 n -0000656549 00000 n -0000656608 00000 n -0000656667 00000 n -0000656726 00000 n -0000656785 00000 n -0000656844 00000 n -0000656903 00000 n -0000656962 00000 n -0000657020 00000 n -0000657079 00000 n -0000657138 00000 n -0000657197 00000 n -0000657256 00000 n -0000657315 00000 n -0000657379 00000 n -0000657443 00000 n -0000657507 00000 n -0000657571 00000 n -0000657633 00000 n -0000657697 00000 n -0000657761 00000 n -0000657825 00000 n -0000657889 00000 n -0000657953 00000 n -0000658017 00000 n -0000658081 00000 n -0000658145 00000 n -0000658208 00000 n -0000658272 00000 n -0000658336 00000 n -0000658400 00000 n -0000658464 00000 n -0000658528 00000 n -0000658592 00000 n -0000658656 00000 n -0000658720 00000 n -0000658784 00000 n -0000658848 00000 n -0000658911 00000 n -0000658975 00000 n -0000659039 00000 n -0000659103 00000 n -0000659167 00000 n -0000659231 00000 n -0000659295 00000 n -0000659359 00000 n -0000659423 00000 n -0000659486 00000 n -0000659550 00000 n -0000659614 00000 n -0000659678 00000 n -0000659742 00000 n -0000654657 00000 n -0001281246 00000 n -0001276916 00000 n -0001281079 00000 n -0000654810 00000 n -0000650752 00000 n -0000650809 00000 n -0000650874 00000 n -0000650959 00000 n -0000652595 00000 n -0000652652 00000 n -0000652717 00000 n -0000652802 00000 n -0000654427 00000 n -0000654484 00000 n -0000654549 00000 n -0000654634 00000 n -0000664046 00000 n -0000663157 00000 n -0000660184 00000 n -0000663935 00000 n -0000663321 00000 n -0000663474 00000 n -0000663628 00000 n -0000663781 00000 n -0000668188 00000 n -0000667045 00000 n -0000664172 00000 n -0000668019 00000 n -0000667218 00000 n -0000667378 00000 n -0000667538 00000 n -0000667698 00000 n -0000667853 00000 n -0001226373 00000 n -0000672222 00000 n -0000671426 00000 n -0000668341 00000 n -0000672044 00000 n -0000671581 00000 n -0000671735 00000 n -0000671887 00000 n -0001535308 00000 n -0000676325 00000 n -0000675807 00000 n -0000672417 00000 n -0000676268 00000 n -0000675953 00000 n -0000676109 00000 n -0001273183 00000 n -0000679514 00000 n -0000680788 00000 n -0000684518 00000 n -0000679398 00000 n -0000676507 00000 n -0000682065 00000 n -0000682122 00000 n -0000682181 00000 n -0000682239 00000 n -0000682298 00000 n -0000682357 00000 n -0000682416 00000 n -0000682475 00000 n -0000682534 00000 n -0000682593 00000 n -0000682652 00000 n -0000682711 00000 n -0000682769 00000 n -0000682828 00000 n -0000682887 00000 n -0000682946 00000 n -0000683005 00000 n -0000683064 00000 n -0000683123 00000 n -0000683182 00000 n -0000683241 00000 n -0000683305 00000 n -0000683368 00000 n -0000683432 00000 n -0000683496 00000 n -0000683560 00000 n -0000683624 00000 n -0000683688 00000 n -0000683752 00000 n -0000683816 00000 n -0000683880 00000 n -0000683943 00000 n -0000684007 00000 n -0000684071 00000 n -0000684135 00000 n -0000684199 00000 n -0000684263 00000 n -0000684327 00000 n -0000684391 00000 n -0000680559 00000 n -0000680616 00000 n -0000680681 00000 n -0000680766 00000 n -0000681836 00000 n -0000681893 00000 n -0000681958 00000 n -0000682043 00000 n -0000688399 00000 n -0000687838 00000 n -0000684773 00000 n -0000688288 00000 n -0000687984 00000 n -0000688135 00000 n -0000692325 00000 n -0000691420 00000 n -0000688551 00000 n -0000692205 00000 n -0000691584 00000 n -0000691738 00000 n -0000691892 00000 n -0000692046 00000 n -0000696405 00000 n -0000695334 00000 n -0000692481 00000 n -0000696290 00000 n -0000695507 00000 n -0000695660 00000 n -0000695820 00000 n -0000695974 00000 n -0000696134 00000 n -0000699321 00000 n -0000698978 00000 n -0000696517 00000 n -0000699094 00000 n -0001535433 00000 n -0000704557 00000 n -0000702568 00000 n -0000699420 00000 n -0000703554 00000 n -0000702741 00000 n -0000703611 00000 n -0000703670 00000 n -0000703729 00000 n -0000703788 00000 n -0000703847 00000 n -0000703905 00000 n -0000703964 00000 n -0000704023 00000 n -0000704082 00000 n -0000704141 00000 n -0000704200 00000 n -0000704259 00000 n -0000704318 00000 n -0000704377 00000 n -0000704435 00000 n -0000702896 00000 n -0000703050 00000 n -0000703211 00000 n -0000703394 00000 n -0001273150 00000 n -0000709055 00000 n -0000707404 00000 n -0000704753 00000 n -0000708886 00000 n -0000707604 00000 n -0000707757 00000 n -0000707910 00000 n -0000708063 00000 n -0000708225 00000 n -0000708395 00000 n -0000708557 00000 n -0000708723 00000 n -0001226024 00000 n -0001260202 00000 n -0001244586 00000 n -0001270975 00000 n -0000712596 00000 n -0000712127 00000 n -0000709154 00000 n -0000712417 00000 n -0000712264 00000 n -0000712532 00000 n -0000716212 00000 n -0000715317 00000 n -0000712709 00000 n -0000716097 00000 n -0000715481 00000 n -0000715634 00000 n -0000715785 00000 n -0000715937 00000 n -0000719839 00000 n -0000719961 00000 n -0000719121 00000 n -0000716311 00000 n -0000719782 00000 n -0000719276 00000 n -0000719431 00000 n -0000719610 00000 n -0000728139 00000 n -0000722864 00000 n -0000720100 00000 n -0000728082 00000 n -0000723253 00000 n -0000723414 00000 n -0000723576 00000 n -0000723743 00000 n -0000723905 00000 n -0000724074 00000 n -0000724241 00000 n -0000724409 00000 n -0000724573 00000 n -0000724739 00000 n -0000724918 00000 n -0000725086 00000 n -0000725268 00000 n -0000725434 00000 n -0000725598 00000 n -0000725763 00000 n -0000725926 00000 n -0000726090 00000 n -0000726251 00000 n -0000726415 00000 n -0000726582 00000 n -0000726753 00000 n -0000726914 00000 n -0000727080 00000 n -0000727256 00000 n -0000727439 00000 n -0000727592 00000 n -0000727745 00000 n -0000727900 00000 n -0001535558 00000 n -0001238388 00000 n -0001229339 00000 n -0001247682 00000 n -0001226314 00000 n -0001226491 00000 n -0001241676 00000 n -0001247859 00000 n -0001229166 00000 n -0000731991 00000 n -0000731076 00000 n -0000728225 00000 n -0000731934 00000 n -0000731240 00000 n -0000731423 00000 n -0000731589 00000 n -0000731759 00000 n -0001263134 00000 n -0001247918 00000 n -0000736088 00000 n -0000734577 00000 n -0000732077 00000 n -0000735973 00000 n -0000734768 00000 n -0000734935 00000 n -0000735106 00000 n -0000735267 00000 n -0000735432 00000 n -0000735608 00000 n -0000735790 00000 n -0000737154 00000 n -0000736807 00000 n -0000736200 00000 n -0000737097 00000 n -0000736944 00000 n -0000739438 00000 n -0000738875 00000 n -0000737227 00000 n -0000739327 00000 n -0000739021 00000 n -0000739174 00000 n -0000742200 00000 n -0000741739 00000 n -0000739524 00000 n -0000742031 00000 n -0000741876 00000 n -0000747588 00000 n -0000745360 00000 n -0000742300 00000 n -0000746471 00000 n -0000745542 00000 n -0000745702 00000 n -0000745856 00000 n -0000746010 00000 n -0000746582 00000 n -0000746641 00000 n -0000746700 00000 n -0000746759 00000 n -0000746818 00000 n -0000746877 00000 n -0000746936 00000 n -0000746994 00000 n -0000747053 00000 n -0000747112 00000 n -0000747171 00000 n -0000747230 00000 n -0000747289 00000 n -0000747348 00000 n -0000747407 00000 n -0000747466 00000 n -0000746164 00000 n -0000746317 00000 n -0001535683 00000 n -0000750450 00000 n -0000763867 00000 n -0000750304 00000 n -0000747784 00000 n -0000762921 00000 n -0000762978 00000 n -0000763037 00000 n -0000763095 00000 n -0000763154 00000 n -0000763213 00000 n -0000763272 00000 n -0000763331 00000 n -0000763390 00000 n -0000763449 00000 n -0000763508 00000 n -0000763567 00000 n -0000763625 00000 n -0000762608 00000 n -0000762767 00000 n -0000762446 00000 n -0000762503 00000 n -0000762584 00000 n -0000766705 00000 n -0000773749 00000 n -0000766550 00000 n -0000764052 00000 n -0000773630 00000 n -0000773164 00000 n -0000773316 00000 n -0000773470 00000 n -0000773003 00000 n -0000773060 00000 n -0000773141 00000 n -0000776535 00000 n -0000786240 00000 n -0000776380 00000 n -0000773865 00000 n -0000786066 00000 n -0000785609 00000 n -0000785763 00000 n -0000785915 00000 n -0000785448 00000 n -0000785505 00000 n -0000785586 00000 n -0000789768 00000 n -0000788952 00000 n -0000786382 00000 n -0000789243 00000 n -0000789089 00000 n -0000789354 00000 n -0000789412 00000 n -0000789471 00000 n -0000789530 00000 n -0000789588 00000 n -0000793656 00000 n -0000792235 00000 n -0000789923 00000 n -0000793365 00000 n -0000792417 00000 n -0000792577 00000 n -0000792737 00000 n -0000792896 00000 n -0000793048 00000 n -0000793538 00000 n -0000793212 00000 n -0000793597 00000 n -0000796613 00000 n -0000796148 00000 n -0000793795 00000 n -0000796440 00000 n -0000796497 00000 n -0000796285 00000 n -0001535808 00000 n -0000798917 00000 n -0000812938 00000 n -0000823287 00000 n -0000798771 00000 n -0000796740 00000 n -0000823104 00000 n -0000822796 00000 n -0000822950 00000 n -0000812776 00000 n -0000812833 00000 n -0000812914 00000 n -0000822635 00000 n -0000822692 00000 n -0000822773 00000 n -0000826455 00000 n -0000825722 00000 n -0000823418 00000 n -0000826340 00000 n -0000825877 00000 n -0000826032 00000 n -0000826185 00000 n -0000830283 00000 n -0000829598 00000 n -0000826541 00000 n -0000830051 00000 n -0000829744 00000 n -0000829897 00000 n -0000834695 00000 n -0000833889 00000 n -0000830396 00000 n -0000834516 00000 n -0000834044 00000 n -0000834573 00000 n -0000834204 00000 n -0000834357 00000 n -0000840462 00000 n -0000845939 00000 n -0000838301 00000 n -0000837563 00000 n -0000834794 00000 n -0000838186 00000 n -0000837718 00000 n -0000837873 00000 n -0000838026 00000 n -0000853810 00000 n -0000854534 00000 n -0000860761 00000 n -0000851909 00000 n -0000840307 00000 n -0000838400 00000 n -0000851731 00000 n -0000851269 00000 n -0000851423 00000 n -0000851577 00000 n -0001535933 00000 n -0000842745 00000 n -0000843237 00000 n -0000844313 00000 n -0000845395 00000 n -0000845418 00000 n -0000845673 00000 n -0000848076 00000 n -0000848568 00000 n -0000849644 00000 n -0000850726 00000 n -0000850749 00000 n -0000851003 00000 n -0000853874 00000 n -0000853637 00000 n -0000852040 00000 n -0000853753 00000 n -0000867125 00000 n -0000854418 00000 n -0000853961 00000 n -0000866945 00000 n -0000857567 00000 n -0000858059 00000 n -0000859135 00000 n -0000860217 00000 n -0000860240 00000 n -0000860495 00000 n -0000863752 00000 n -0000864244 00000 n -0000865320 00000 n -0000866402 00000 n -0000866425 00000 n -0000866679 00000 n -0000869264 00000 n -0000875137 00000 n -0000869127 00000 n -0000867243 00000 n -0000874961 00000 n -0000874806 00000 n -0000871660 00000 n -0000872104 00000 n -0000873180 00000 n -0000874262 00000 n -0000874285 00000 n -0000874540 00000 n -0000878705 00000 n -0000877796 00000 n -0000875266 00000 n -0000878591 00000 n -0000877960 00000 n -0000878119 00000 n -0000878278 00000 n -0000878432 00000 n -0000883769 00000 n -0000894810 00000 n -0000883075 00000 n -0000881847 00000 n -0000878791 00000 n -0000882959 00000 n -0000883016 00000 n -0000882029 00000 n -0000882184 00000 n -0000882339 00000 n -0000882495 00000 n -0000882650 00000 n -0000882805 00000 n -0001273117 00000 n -0000903065 00000 n -0000883653 00000 n -0000883216 00000 n -0000902885 00000 n -0001536058 00000 n -0000894562 00000 n -0000902637 00000 n -0000908010 00000 n -0000938714 00000 n -0000907374 00000 n -0000905791 00000 n -0000903199 00000 n -0000907258 00000 n -0000905991 00000 n -0000906146 00000 n -0000906301 00000 n -0000907315 00000 n -0000906460 00000 n -0000906622 00000 n -0000906791 00000 n -0000906950 00000 n -0000907104 00000 n -0001241617 00000 n -0000965936 00000 n -0000907894 00000 n -0000907461 00000 n -0000965755 00000 n -0000938466 00000 n -0000965507 00000 n -0000969869 00000 n -0000969014 00000 n -0000966070 00000 n -0000969812 00000 n -0000969178 00000 n -0000969334 00000 n -0000969487 00000 n -0000969652 00000 n -0001273084 00000 n -0000972950 00000 n -0000972536 00000 n -0000969996 00000 n -0000972834 00000 n -0000972673 00000 n -0000972891 00000 n -0001250609 00000 n -0000975668 00000 n -0000974945 00000 n -0000973050 00000 n -0000975557 00000 n -0000975100 00000 n -0000975253 00000 n -0000975405 00000 n -0000977903 00000 n -0000986864 00000 n -0000994153 00000 n -0000984281 00000 n -0000977712 00000 n -0000975754 00000 n -0000984108 00000 n -0000982941 00000 n -0000983118 00000 n -0000983281 00000 n -0000983447 00000 n -0000983623 00000 n -0000983778 00000 n -0000983934 00000 n -0001536183 00000 n -0000982780 00000 n -0000982837 00000 n -0000982918 00000 n -0001263075 00000 n -0001270857 00000 n -0001247392 00000 n -0001254165 00000 n -0001273051 00000 n -0001273018 00000 n -0001010319 00000 n -0001011691 00000 n -0001012724 00000 n -0001007375 00000 n -0000986655 00000 n -0000984451 00000 n -0001007192 00000 n -0001005805 00000 n -0001005955 00000 n -0001006108 00000 n -0001006262 00000 n -0001006418 00000 n -0001006573 00000 n -0001006728 00000 n -0001006883 00000 n -0001007038 00000 n -0000993992 00000 n -0000994049 00000 n -0000994130 00000 n -0001005643 00000 n -0001005700 00000 n -0001005781 00000 n -0001272985 00000 n -0001017886 00000 n -0001010182 00000 n -0001007546 00000 n -0001014231 00000 n -0001014076 00000 n -0001014288 00000 n -0001014351 00000 n -0001014414 00000 n -0001014477 00000 n -0001014540 00000 n -0001014603 00000 n -0001014666 00000 n -0001014729 00000 n -0001014792 00000 n -0001014855 00000 n -0001014917 00000 n -0001014980 00000 n -0001015043 00000 n -0001015106 00000 n -0001015169 00000 n -0001015232 00000 n -0001015295 00000 n -0001015358 00000 n -0001015421 00000 n -0001015483 00000 n -0001015546 00000 n -0001015609 00000 n -0001015672 00000 n -0001015735 00000 n -0001015798 00000 n -0001015861 00000 n -0001015924 00000 n -0001015987 00000 n -0001016050 00000 n -0001016113 00000 n -0001016176 00000 n -0001016239 00000 n -0001016302 00000 n -0001016365 00000 n -0001016428 00000 n -0001016490 00000 n -0001016553 00000 n -0001016616 00000 n -0001016679 00000 n -0001016742 00000 n -0001016806 00000 n -0001016870 00000 n -0001016934 00000 n -0001016998 00000 n -0001017062 00000 n -0001017126 00000 n -0001017190 00000 n -0001017254 00000 n -0001017318 00000 n -0001017382 00000 n -0001017445 00000 n -0001017509 00000 n -0001017573 00000 n -0001017637 00000 n -0001017701 00000 n -0001011462 00000 n -0001011519 00000 n -0001011584 00000 n -0001011669 00000 n -0001012495 00000 n -0001012552 00000 n -0001012617 00000 n -0001012702 00000 n -0001013847 00000 n -0001013904 00000 n -0001013969 00000 n -0001014054 00000 n -0001024623 00000 n -0001021491 00000 n -0001018100 00000 n -0001022441 00000 n -0001022498 00000 n -0001022557 00000 n -0001022616 00000 n -0001022675 00000 n -0001022734 00000 n -0001022793 00000 n -0001022852 00000 n -0001022911 00000 n -0001022970 00000 n -0001023028 00000 n -0001023087 00000 n -0001023146 00000 n -0001023205 00000 n -0001023264 00000 n -0001023323 00000 n -0001023382 00000 n -0001023441 00000 n -0001023500 00000 n -0001023558 00000 n -0001023617 00000 n -0001023676 00000 n -0001023735 00000 n -0001023794 00000 n -0001023853 00000 n -0001023912 00000 n -0001023971 00000 n -0001024030 00000 n -0001024089 00000 n -0001024148 00000 n -0001024206 00000 n -0001024265 00000 n -0001024324 00000 n -0001024383 00000 n -0001024442 00000 n -0001024501 00000 n -0001021664 00000 n -0001021820 00000 n -0001021980 00000 n -0001022135 00000 n -0001022287 00000 n -0001272952 00000 n -0001028794 00000 n -0001027333 00000 n -0001024818 00000 n -0001028616 00000 n -0001027524 00000 n -0001027674 00000 n -0001027824 00000 n -0001027983 00000 n -0001028142 00000 n -0001028302 00000 n -0001028462 00000 n -0001032300 00000 n -0001031491 00000 n -0001028906 00000 n -0001031949 00000 n -0001031637 00000 n -0001032123 00000 n -0001032182 00000 n -0001032241 00000 n -0001031791 00000 n -0001035411 00000 n -0001037924 00000 n -0001035256 00000 n -0001032440 00000 n -0001037804 00000 n -0001037343 00000 n -0001037496 00000 n -0001037650 00000 n -0001536308 00000 n -0001037113 00000 n -0001037170 00000 n -0001037235 00000 n -0001037320 00000 n -0001041463 00000 n -0001041052 00000 n -0001038081 00000 n -0001041343 00000 n -0001041189 00000 n -0001046031 00000 n -0001044918 00000 n -0001041616 00000 n -0001045857 00000 n -0001045091 00000 n -0001045245 00000 n -0001045398 00000 n -0001045551 00000 n -0001045704 00000 n -0001050215 00000 n -0001049320 00000 n -0001046210 00000 n -0001050100 00000 n -0001049484 00000 n -0001049639 00000 n -0001049792 00000 n -0001049945 00000 n -0001272919 00000 n -0001054240 00000 n -0001053105 00000 n -0001050394 00000 n -0001054067 00000 n -0001053278 00000 n -0001053432 00000 n -0001053592 00000 n -0001053752 00000 n -0001053912 00000 n -0001059338 00000 n -0001057965 00000 n -0001054378 00000 n -0001058749 00000 n -0001058129 00000 n -0001058283 00000 n -0001058438 00000 n -0001058593 00000 n -0001058806 00000 n -0001058865 00000 n -0001058924 00000 n -0001058982 00000 n -0001059040 00000 n -0001059099 00000 n -0001059158 00000 n -0001059217 00000 n -0001272886 00000 n -0001272853 00000 n -0001062225 00000 n -0001061936 00000 n -0001059532 00000 n -0001062052 00000 n -0001536433 00000 n -0001065360 00000 n -0001066778 00000 n -0001068160 00000 n -0001065214 00000 n -0001062378 00000 n -0001068040 00000 n -0001067732 00000 n -0001067887 00000 n -0001066549 00000 n -0001066606 00000 n -0001066671 00000 n -0001066756 00000 n -0001067503 00000 n -0001067560 00000 n -0001067625 00000 n -0001067710 00000 n -0001071836 00000 n -0001071202 00000 n -0001068371 00000 n -0001071658 00000 n -0001071348 00000 n -0001071503 00000 n -0001075307 00000 n -0001074622 00000 n -0001071975 00000 n -0001075076 00000 n -0001074768 00000 n -0001074922 00000 n -0001079605 00000 n -0001078315 00000 n -0001075419 00000 n -0001078605 00000 n -0001078452 00000 n -0001078662 00000 n -0001078721 00000 n -0001078780 00000 n -0001078839 00000 n -0001078898 00000 n -0001078957 00000 n -0001079015 00000 n -0001079074 00000 n -0001079133 00000 n -0001079192 00000 n -0001079251 00000 n -0001079310 00000 n -0001079369 00000 n -0001082838 00000 n -0001081891 00000 n -0001079774 00000 n -0001082665 00000 n -0001082055 00000 n -0001082207 00000 n -0001082360 00000 n -0001082512 00000 n -0001086607 00000 n -0001085616 00000 n -0001082937 00000 n -0001086429 00000 n -0001276473 00000 n -0001274107 00000 n -0001276309 00000 n -0001085780 00000 n -0001085933 00000 n -0001086103 00000 n -0001086265 00000 n -0001536558 00000 n -0001087950 00000 n -0001108005 00000 n -0001128040 00000 n -0001146454 00000 n -0001158551 00000 n -0001087834 00000 n -0001086707 00000 n -0001158368 00000 n -0001158425 00000 n -0001104819 00000 n -0001105303 00000 n -0001106379 00000 n -0001107461 00000 n -0001107485 00000 n -0001107739 00000 n -0001124854 00000 n -0001125338 00000 n -0001126414 00000 n -0001127496 00000 n -0001127520 00000 n -0001127774 00000 n -0001143268 00000 n -0001143752 00000 n -0001144828 00000 n -0001145910 00000 n -0001145934 00000 n -0001146188 00000 n -0001155183 00000 n -0001155667 00000 n -0001156743 00000 n -0001157825 00000 n -0001157848 00000 n -0001158102 00000 n -0001162307 00000 n -0001161740 00000 n -0001158713 00000 n -0001162196 00000 n -0001161886 00000 n -0001162041 00000 n -0001272820 00000 n -0001166276 00000 n -0001165140 00000 n -0001162461 00000 n -0001166161 00000 n -0001165313 00000 n -0001165489 00000 n -0001165665 00000 n -0001165828 00000 n -0001165995 00000 n -0001222976 00000 n -0001169827 00000 n -0001169051 00000 n -0001166388 00000 n -0001169712 00000 n -0001169206 00000 n -0001169370 00000 n -0001169547 00000 n -0001270916 00000 n -0001266258 00000 n -0001171020 00000 n -0001170847 00000 n -0001169926 00000 n -0001170963 00000 n -0001173394 00000 n -0001173049 00000 n -0001171093 00000 n -0001173165 00000 n -0001173276 00000 n -0001173335 00000 n -0001536683 00000 n -0001177276 00000 n -0001175857 00000 n -0001173493 00000 n -0001176985 00000 n -0001177042 00000 n -0001176039 00000 n -0001177101 00000 n -0001176199 00000 n -0001176352 00000 n -0001176505 00000 n -0001176665 00000 n -0001176825 00000 n -0001263016 00000 n -0001181808 00000 n -0001179979 00000 n -0001177375 00000 n -0001181693 00000 n -0001180188 00000 n -0001180348 00000 n -0001180508 00000 n -0001180679 00000 n -0001180854 00000 n -0001181019 00000 n -0001181185 00000 n -0001181356 00000 n -0001181521 00000 n -0001269340 00000 n -0001266494 00000 n -0001185123 00000 n -0001184235 00000 n -0001181894 00000 n -0001184892 00000 n -0001184390 00000 n -0001184556 00000 n -0001184727 00000 n -0001188609 00000 n -0001187559 00000 n -0001185222 00000 n -0001188552 00000 n -0001187732 00000 n -0001187898 00000 n -0001188065 00000 n -0001188232 00000 n -0001188385 00000 n -0001257185 00000 n -0001192161 00000 n -0001191057 00000 n -0001188709 00000 n -0001192046 00000 n -0001191230 00000 n -0001191397 00000 n -0001191564 00000 n -0001191727 00000 n -0001191887 00000 n -0001259966 00000 n -0001266317 00000 n -0001229514 00000 n -0001196638 00000 n -0001194892 00000 n -0001192261 00000 n -0001195866 00000 n -0001195065 00000 n -0001195224 00000 n -0001195383 00000 n -0001195977 00000 n -0001196037 00000 n -0001196097 00000 n -0001196157 00000 n -0001196217 00000 n -0001196277 00000 n -0001196337 00000 n -0001196397 00000 n -0001196456 00000 n -0001195534 00000 n -0001195702 00000 n -0001196579 00000 n -0001536808 00000 n -0001229398 00000 n -0001256835 00000 n -0001199547 00000 n -0001199257 00000 n -0001196820 00000 n -0001199373 00000 n -0001199430 00000 n -0001203747 00000 n -0001201967 00000 n -0001199660 00000 n -0001203514 00000 n -0001202167 00000 n -0001202337 00000 n -0001202506 00000 n -0001202685 00000 n -0001203629 00000 n -0001202853 00000 n -0001203688 00000 n -0001203014 00000 n -0001203182 00000 n -0001203345 00000 n -0001269398 00000 n -0001226432 00000 n -0001247447 00000 n -0001207550 00000 n -0001206382 00000 n -0001203860 00000 n -0001207376 00000 n -0001206555 00000 n -0001206724 00000 n -0001206887 00000 n -0001207048 00000 n -0001207433 00000 n -0001207221 00000 n -0001257303 00000 n -0001235361 00000 n -0001208232 00000 n -0001208059 00000 n -0001207663 00000 n -0001208175 00000 n -0001210567 00000 n -0001210340 00000 n -0001208305 00000 n -0001210456 00000 n -0001213918 00000 n -0001213571 00000 n -0001210694 00000 n -0001213861 00000 n -0001213708 00000 n -0001536933 00000 n -0001217680 00000 n -0001216840 00000 n -0001214032 00000 n -0001217623 00000 n -0001217004 00000 n -0001217160 00000 n -0001217318 00000 n -0001217470 00000 n -0001220645 00000 n -0001219978 00000 n -0001217780 00000 n -0001220588 00000 n -0001220133 00000 n -0001220282 00000 n -0001220435 00000 n -0001223388 00000 n -0001222803 00000 n -0001220732 00000 n -0001222919 00000 n -0001226550 00000 n -0001225851 00000 n -0001223500 00000 n -0001225967 00000 n -0001229690 00000 n -0001228993 00000 n -0001226662 00000 n -0001229109 00000 n -0001232654 00000 n -0001231955 00000 n -0001229776 00000 n -0001232071 00000 n -0001537058 00000 n -0001235715 00000 n -0001235015 00000 n -0001232753 00000 n -0001235131 00000 n -0001238801 00000 n -0001238156 00000 n -0001235801 00000 n -0001238272 00000 n -0001241853 00000 n -0001241150 00000 n -0001238887 00000 n -0001241266 00000 n -0001244763 00000 n -0001244063 00000 n -0001241939 00000 n -0001244179 00000 n -0001247977 00000 n -0001247219 00000 n -0001244849 00000 n -0001247335 00000 n -0001251194 00000 n -0001250436 00000 n -0001248063 00000 n -0001250552 00000 n -0001537183 00000 n -0001254283 00000 n -0001253524 00000 n -0001251293 00000 n -0001253640 00000 n -0001257362 00000 n -0001256662 00000 n -0001254382 00000 n -0001256778 00000 n -0001260320 00000 n -0001259675 00000 n -0001257448 00000 n -0001259791 00000 n -0001263370 00000 n -0001262670 00000 n -0001260419 00000 n -0001262786 00000 n -0001266553 00000 n -0001265794 00000 n -0001263456 00000 n -0001265910 00000 n -0001269575 00000 n -0001268876 00000 n -0001266652 00000 n -0001268992 00000 n -0001537308 00000 n -0001271034 00000 n -0001270684 00000 n -0001269661 00000 n -0001270800 00000 n -0001272721 00000 n -0001272354 00000 n -0001271120 00000 n -0001272664 00000 n -0001272491 00000 n -0001276781 00000 n -0001276683 00000 n -0001281676 00000 n -0001281479 00000 n -0001286422 00000 n -0001286225 00000 n -0001289192 00000 n -0001289147 00000 n -0001299510 00000 n -0001299223 00000 n -0001308678 00000 n -0001308369 00000 n -0001310673 00000 n -0001310648 00000 n -0001315577 00000 n -0001315433 00000 n -0001318708 00000 n -0001318523 00000 n -0001322646 00000 n -0001322379 00000 n -0001326559 00000 n -0001326484 00000 n -0001338898 00000 n -0001338591 00000 n -0001355251 00000 n -0001354873 00000 n -0001359631 00000 n -0001359374 00000 n -0001370555 00000 n -0001370207 00000 n -0001380925 00000 n -0001380636 00000 n -0001399016 00000 n -0001398586 00000 n -0001403424 00000 n -0001403363 00000 n -0001407696 00000 n -0001407435 00000 n -0001422264 00000 n -0001421889 00000 n -0001436649 00000 n -0001436308 00000 n -0001451500 00000 n -0001451117 00000 n -0001459428 00000 n -0001459169 00000 n -0001472960 00000 n -0001472613 00000 n -0001491843 00000 n -0001491452 00000 n -0001506279 00000 n -0001505890 00000 n -0001526902 00000 n -0001526433 00000 n -0001532512 00000 n -0001532405 00000 n -0001537406 00000 n -0001537530 00000 n -0001537656 00000 n -0001537782 00000 n -0001537908 00000 n -0001538034 00000 n -0001538160 00000 n -0001538249 00000 n -0001538376 00000 n -0001538456 00000 n -0001538530 00000 n -0001552755 00000 n -0001583080 00000 n -0001583121 00000 n -0001583161 00000 n -0001583409 00000 n +0000056662 00000 n +0000052761 00000 n +0000052920 00000 n +0000053079 00000 n +0000053238 00000 n +0000053396 00000 n +0000053555 00000 n +0000053708 00000 n +0000053866 00000 n +0000054025 00000 n +0000054176 00000 n +0000054329 00000 n +0000054480 00000 n +0000054633 00000 n +0000054792 00000 n +0000054951 00000 n +0000055110 00000 n +0000055263 00000 n +0000055422 00000 n +0000055581 00000 n +0000055740 00000 n +0000055899 00000 n +0000056057 00000 n +0000056209 00000 n +0000056360 00000 n +0000056511 00000 n +0000065034 00000 n +0000059043 00000 n +0000056802 00000 n +0000064923 00000 n +0000064978 00000 n +0000059455 00000 n +0000059607 00000 n +0000059759 00000 n +0000059911 00000 n +0000060063 00000 n +0000060215 00000 n +0000060367 00000 n +0000060519 00000 n +0000060671 00000 n +0000060823 00000 n +0000060975 00000 n +0000061126 00000 n +0000061277 00000 n +0000061428 00000 n +0000061579 00000 n +0000061731 00000 n +0000061883 00000 n +0000062035 00000 n +0000062185 00000 n +0000062338 00000 n +0000062491 00000 n +0000062644 00000 n +0000062797 00000 n +0000062950 00000 n +0000063103 00000 n +0000063256 00000 n +0000063408 00000 n +0000063559 00000 n +0000063711 00000 n +0000063863 00000 n +0000064013 00000 n +0000064165 00000 n +0000064317 00000 n +0000064469 00000 n +0000064620 00000 n +0000064772 00000 n +0000142575 00000 n +0000143109 00000 n +0000150714 00000 n +0000155520 00000 n +0000156467 00000 n +0000196911 00000 n +0000233034 00000 n +0000236629 00000 n +0000281498 00000 n +0000288475 00000 n +0000294347 00000 n +0000310218 00000 n +0000317956 00000 n +0000322424 00000 n +0000334111 00000 n +0000340742 00000 n +0000352636 00000 n +0000357003 00000 n +0000380322 00000 n +0000395181 00000 n +0000418568 00000 n +0000441693 00000 n +0000445697 00000 n +0000450590 00000 n +0000481144 00000 n +0000487091 00000 n +0000540410 00000 n +0000540473 00000 n +0000540535 00000 n +0000559490 00000 n +0000559553 00000 n +0000559616 00000 n +0000581677 00000 n +0000588002 00000 n +0000590264 00000 n +0000075447 00000 n +0000067425 00000 n +0000065132 00000 n +0000075392 00000 n +0000067941 00000 n +0000068094 00000 n +0000068246 00000 n +0000068399 00000 n +0000068551 00000 n +0000068703 00000 n +0000068855 00000 n +0000069006 00000 n +0000069158 00000 n +0000069310 00000 n +0000069462 00000 n +0000069614 00000 n +0000069766 00000 n +0000069918 00000 n +0000070070 00000 n +0000070223 00000 n +0000070376 00000 n +0000070528 00000 n +0000070680 00000 n +0000070831 00000 n +0000070981 00000 n +0000071133 00000 n +0000071285 00000 n +0000071437 00000 n +0000071589 00000 n +0000071741 00000 n +0000071894 00000 n +0000072046 00000 n +0000072199 00000 n +0000072352 00000 n +0000072505 00000 n +0000072658 00000 n +0000072810 00000 n +0000072962 00000 n +0000073113 00000 n +0000073264 00000 n +0000073414 00000 n +0000073566 00000 n +0000073718 00000 n +0000073870 00000 n +0000074022 00000 n +0000074174 00000 n +0000074326 00000 n +0000074479 00000 n +0000074632 00000 n +0000074785 00000 n +0000074938 00000 n +0000075091 00000 n +0000075241 00000 n +0000592625 00000 n +0000616726 00000 n +0000616789 00000 n +0000616852 00000 n +0000645454 00000 n +0000659799 00000 n +0000659861 00000 n +0000672152 00000 n +0000684448 00000 n +0000692255 00000 n +0000704487 00000 n +0000747518 00000 n +0000763677 00000 n +0000763797 00000 n +0000773680 00000 n +0000786170 00000 n +0000789640 00000 n +0000823154 00000 n +0000823217 00000 n +0000830213 00000 n +0000851781 00000 n +0000866995 00000 n +0000867056 00000 n +0000875068 00000 n +0000902935 00000 n +0000902997 00000 n +0000965805 00000 n +0000965867 00000 n +0000984212 00000 n +0001007242 00000 n +0001007305 00000 n +0001017758 00000 n +0001024553 00000 n +0001028724 00000 n +0001032053 00000 n +0001037854 00000 n +0001041393 00000 n +0001045961 00000 n +0001059269 00000 n +0001062102 00000 n +0001068090 00000 n +0001071766 00000 n +0001079421 00000 n +0001086537 00000 n +0001158481 00000 n +0000076134 00000 n +0000075795 00000 n +0000075532 00000 n +0000076079 00000 n +0000075927 00000 n +0001196510 00000 n +0000079343 00000 n +0000078259 00000 n +0000076206 00000 n +0000078432 00000 n +0000078612 00000 n +0000078780 00000 n +0000078959 00000 n +0000079123 00000 n +0001532924 00000 n +0001235296 00000 n +0001253923 00000 n +0001232236 00000 n +0001260019 00000 n +0000082427 00000 n +0000082254 00000 n +0000079442 00000 n +0000082370 00000 n +0000086765 00000 n +0000084903 00000 n +0000082513 00000 n +0000085121 00000 n +0000085287 00000 n +0000085458 00000 n +0001421457 00000 n +0001408048 00000 n +0001421291 00000 n +0001407078 00000 n +0001403548 00000 n +0001406913 00000 n +0000085627 00000 n +0000085806 00000 n +0000085972 00000 n +0000086135 00000 n +0000086287 00000 n +0000086450 00000 n +0000086609 00000 n +0001247794 00000 n +0001269510 00000 n +0001244462 00000 n +0001269043 00000 n +0001251011 00000 n +0001223088 00000 n +0001251070 00000 n +0000089827 00000 n +0000089251 00000 n +0000086892 00000 n +0000089397 00000 n +0000089557 00000 n +0000094565 00000 n +0000092504 00000 n +0000089913 00000 n +0000092731 00000 n +0000092883 00000 n +0000093036 00000 n +0000093195 00000 n +0000093364 00000 n +0000093530 00000 n +0000093691 00000 n +0000093859 00000 n +0000094025 00000 n +0000094203 00000 n +0000094356 00000 n +0001244639 00000 n +0001244403 00000 n +0001226249 00000 n +0001235414 00000 n +0001232354 00000 n +0001262951 00000 n +0001232295 00000 n +0000098685 00000 n +0000097125 00000 n +0000094664 00000 n +0000097325 00000 n +0000097492 00000 n +0000097662 00000 n +0000097823 00000 n +0000097989 00000 n +0000098165 00000 n +0000098348 00000 n +0000098531 00000 n +0001266429 00000 n +0001266370 00000 n +0001223147 00000 n +0001244521 00000 n +0001232413 00000 n +0001232122 00000 n +0000101920 00000 n +0000101179 00000 n +0000098771 00000 n +0000101334 00000 n +0000101487 00000 n +0000101653 00000 n +0001533049 00000 n +0001251129 00000 n +0000105319 00000 n +0000104558 00000 n +0000102032 00000 n +0000104713 00000 n +0000104863 00000 n +0000105037 00000 n +0001253691 00000 n +0001247617 00000 n +0000108858 00000 n +0000107812 00000 n +0000105418 00000 n +0000107985 00000 n +0000108144 00000 n +0000108297 00000 n +0000108464 00000 n +0000108629 00000 n +0001238618 00000 n +0001253805 00000 n +0001269275 00000 n +0001257002 00000 n +0000111851 00000 n +0000110372 00000 n +0000108985 00000 n +0000110572 00000 n +0000110725 00000 n +0000110878 00000 n +0000111031 00000 n +0000111183 00000 n +0000111336 00000 n +0000111489 00000 n +0000111641 00000 n +0000114293 00000 n +0000113887 00000 n +0000111951 00000 n +0000114024 00000 n +0001232589 00000 n +0000118166 00000 n +0000117190 00000 n +0000114379 00000 n +0000117363 00000 n +0000117525 00000 n +0000117686 00000 n +0000117846 00000 n +0000118006 00000 n +0001244698 00000 n +0001238559 00000 n +0001232177 00000 n +0001238677 00000 n +0001235473 00000 n +0000122259 00000 n +0000121292 00000 n +0000118266 00000 n +0000121465 00000 n +0000121631 00000 n +0000121792 00000 n +0000121941 00000 n +0000122105 00000 n +0001403110 00000 n +0001399569 00000 n +0001402947 00000 n +0001398017 00000 n +0001381428 00000 n +0001397853 00000 n +0001533174 00000 n +0001238500 00000 n +0001269098 00000 n +0001253864 00000 n +0001253982 00000 n +0001274068 00000 n +0000126257 00000 n +0000125225 00000 n +0000122386 00000 n +0000126200 00000 n +0000125398 00000 n +0000125567 00000 n +0000125728 00000 n +0000125894 00000 n +0000126049 00000 n +0001241435 00000 n +0001226073 00000 n +0001247735 00000 n +0000130493 00000 n +0000128855 00000 n +0000126343 00000 n +0000130322 00000 n +0000129055 00000 n +0000129228 00000 n +0000129383 00000 n +0000129537 00000 n +0000129692 00000 n +0000129845 00000 n +0000130000 00000 n +0000130162 00000 n +0001250952 00000 n +0000134126 00000 n +0000133551 00000 n +0000130605 00000 n +0000134012 00000 n +0000133697 00000 n +0000133857 00000 n +0001380248 00000 n +0001370923 00000 n +0001380083 00000 n +0001274035 00000 n +0000138195 00000 n +0000137165 00000 n +0000134306 00000 n +0000138138 00000 n +0000137338 00000 n +0000137492 00000 n +0000137646 00000 n +0000137824 00000 n +0000137977 00000 n +0000216976 00000 n +0000220780 00000 n +0000143172 00000 n +0000141239 00000 n +0000138294 00000 n +0000141693 00000 n +0000141750 00000 n +0000141809 00000 n +0001369865 00000 n +0001359945 00000 n +0001369700 00000 n +0001359026 00000 n +0001355700 00000 n +0001358862 00000 n +0001354445 00000 n +0001339289 00000 n +0001354280 00000 n +0000141868 00000 n +0000141927 00000 n +0000141986 00000 n +0000142045 00000 n +0000142104 00000 n +0000142163 00000 n +0000142222 00000 n +0000142281 00000 n +0000142340 00000 n +0000142398 00000 n +0000142457 00000 n +0000142516 00000 n +0000141385 00000 n +0000141539 00000 n +0000142638 00000 n +0000142697 00000 n +0000142756 00000 n +0000142815 00000 n +0000142874 00000 n +0000142932 00000 n +0000142991 00000 n +0000143050 00000 n +0000146592 00000 n +0000146129 00000 n +0000143327 00000 n +0000146421 00000 n +0000146266 00000 n +0001533299 00000 n +0001274002 00000 n +0000150777 00000 n +0000149505 00000 n +0000146746 00000 n +0000150304 00000 n +0000149669 00000 n +0000149835 00000 n +0000150361 00000 n +0000150420 00000 n +0000150479 00000 n +0000150538 00000 n +0000150597 00000 n +0000150655 00000 n +0000149996 00000 n +0000150150 00000 n +0001229450 00000 n +0001232530 00000 n +0000156530 00000 n +0000154346 00000 n +0000150905 00000 n +0000154462 00000 n +0000154519 00000 n +0000154578 00000 n +0000154636 00000 n +0000154695 00000 n +0000154754 00000 n +0000154813 00000 n +0000154872 00000 n +0000154931 00000 n +0000154990 00000 n +0000155049 00000 n +0000155108 00000 n +0000155166 00000 n +0000155225 00000 n +0000155284 00000 n +0000155343 00000 n +0000155402 00000 n +0000155461 00000 n +0000155583 00000 n +0000155642 00000 n +0000155701 00000 n +0000155760 00000 n +0000155819 00000 n +0000155878 00000 n +0000155937 00000 n +0000155996 00000 n +0000156055 00000 n +0000156114 00000 n +0000156172 00000 n +0000156231 00000 n +0000156290 00000 n +0001338269 00000 n +0001326730 00000 n +0001338104 00000 n +0000156349 00000 n +0000156408 00000 n +0000160469 00000 n +0000159570 00000 n +0000156713 00000 n +0000160355 00000 n +0000159734 00000 n +0000159888 00000 n +0000160043 00000 n +0000160198 00000 n +0001273969 00000 n +0001273936 00000 n +0001229274 00000 n +0000163055 00000 n +0000197150 00000 n +0000162909 00000 n +0000160636 00000 n +0000196744 00000 n +0000196435 00000 n +0000196589 00000 n +0000196974 00000 n +0000197033 00000 n +0000197092 00000 n +0000196273 00000 n +0000196330 00000 n +0000196411 00000 n +0000200964 00000 n +0000199794 00000 n +0000197278 00000 n +0000200793 00000 n +0000200850 00000 n +0000200905 00000 n +0000199967 00000 n +0000200136 00000 n +0000200296 00000 n +0000200462 00000 n +0000200630 00000 n +0001223206 00000 n +0001223029 00000 n +0000203989 00000 n +0000203760 00000 n +0000201064 00000 n +0000203876 00000 n +0001533424 00000 n +0000207951 00000 n +0000206889 00000 n +0000204102 00000 n +0000207837 00000 n +0000207062 00000 n +0000207216 00000 n +0000207371 00000 n +0000207524 00000 n +0000207684 00000 n +0001273903 00000 n +0001250717 00000 n +0000211092 00000 n +0000210439 00000 n +0000208091 00000 n +0000210921 00000 n +0000210585 00000 n +0000210755 00000 n +0001229215 00000 n +0001263246 00000 n +0000213857 00000 n +0000213626 00000 n +0000211178 00000 n +0000213742 00000 n +0000217035 00000 n +0000216179 00000 n +0000213943 00000 n +0000216804 00000 n +0000216334 00000 n +0000216489 00000 n +0000216644 00000 n +0000220839 00000 n +0000220102 00000 n +0000217148 00000 n +0000220723 00000 n +0000220257 00000 n +0000220410 00000 n +0000220563 00000 n +0001273870 00000 n +0000223937 00000 n +0000223335 00000 n +0000220994 00000 n +0000223632 00000 n +0000223689 00000 n +0000223748 00000 n +0000223811 00000 n +0000223874 00000 n +0000223472 00000 n +0001533549 00000 n +0000226092 00000 n +0000233097 00000 n +0000225946 00000 n +0000224092 00000 n +0000232918 00000 n +0000232975 00000 n +0000232610 00000 n +0000232764 00000 n +0000229172 00000 n +0000229229 00000 n +0000229294 00000 n +0000230353 00000 n +0000230376 00000 n +0000230682 00000 n +0000232587 00000 n +0001273837 00000 n +0000236691 00000 n +0000236058 00000 n +0000233254 00000 n +0000236513 00000 n +0000236570 00000 n +0000236204 00000 n +0000236358 00000 n +0001273804 00000 n +0000239637 00000 n +0000239347 00000 n +0000236846 00000 n +0000239463 00000 n +0000239578 00000 n +0000244015 00000 n +0000242178 00000 n +0000239750 00000 n +0000243840 00000 n +0000243897 00000 n +0000242387 00000 n +0000242547 00000 n +0000242707 00000 n +0000242868 00000 n +0000243028 00000 n +0000243189 00000 n +0000243956 00000 n +0000243351 00000 n +0000243516 00000 n +0000243680 00000 n +0001238323 00000 n +0001244344 00000 n +0001263305 00000 n +0001235650 00000 n +0000247084 00000 n +0000246674 00000 n +0000244102 00000 n +0000246969 00000 n +0000246811 00000 n +0000251332 00000 n +0000249929 00000 n +0000247183 00000 n +0000251275 00000 n +0000250120 00000 n +0000250279 00000 n +0000250443 00000 n +0000250613 00000 n +0000250781 00000 n +0000250944 00000 n +0000251115 00000 n +0001533674 00000 n +0001254041 00000 n +0001250658 00000 n +0001241552 00000 n +0001263187 00000 n +0001254218 00000 n +0001229567 00000 n +0000257116 00000 n +0000254020 00000 n +0000251405 00000 n +0000257059 00000 n +0000254301 00000 n +0000254468 00000 n +0000254628 00000 n +0000254780 00000 n +0000254933 00000 n +0000255099 00000 n +0000255268 00000 n +0000255426 00000 n +0000255593 00000 n +0000255753 00000 n +0000255921 00000 n +0000256082 00000 n +0000256247 00000 n +0000256408 00000 n +0000256569 00000 n +0000256733 00000 n +0000256899 00000 n +0001266016 00000 n +0001223323 00000 n +0001256884 00000 n +0001265961 00000 n +0001259901 00000 n +0001269216 00000 n +0001226132 00000 n +0000259621 00000 n +0000259220 00000 n +0000257189 00000 n +0000259510 00000 n +0000259357 00000 n +0000263017 00000 n +0000261789 00000 n +0000259707 00000 n +0000262788 00000 n +0000262899 00000 n +0000261962 00000 n +0000262127 00000 n +0000262292 00000 n +0000262461 00000 n +0000262629 00000 n +0000262958 00000 n +0001238736 00000 n +0001269451 00000 n +0001241376 00000 n +0001269157 00000 n +0001235591 00000 n +0000267991 00000 n +0000265996 00000 n +0000263130 00000 n +0000267875 00000 n +0000266214 00000 n +0000266394 00000 n +0000267932 00000 n +0000266561 00000 n +0000266728 00000 n +0000266889 00000 n +0000267054 00000 n +0000267218 00000 n +0000267379 00000 n +0000267544 00000 n +0000267712 00000 n +0001266075 00000 n +0001266134 00000 n +0001223265 00000 n +0001229625 00000 n +0001247558 00000 n +0001241788 00000 n +0001262837 00000 n +0000272435 00000 n +0000270720 00000 n +0000268104 00000 n +0000272321 00000 n +0000270929 00000 n +0000271084 00000 n +0000271239 00000 n +0000271394 00000 n +0000271548 00000 n +0000271700 00000 n +0000271854 00000 n +0000272008 00000 n +0000272168 00000 n +0000276139 00000 n +0000275617 00000 n +0000272534 00000 n +0000276082 00000 n +0000275763 00000 n +0000275923 00000 n +0001533799 00000 n +0000281561 00000 n +0000278993 00000 n +0000276278 00000 n +0000279284 00000 n +0000279341 00000 n +0000279401 00000 n +0000279461 00000 n +0000279521 00000 n +0000279581 00000 n +0000279641 00000 n +0000279701 00000 n +0000279761 00000 n +0000279820 00000 n +0000279880 00000 n +0000279940 00000 n +0000280000 00000 n +0000280060 00000 n +0000280120 00000 n +0000280180 00000 n +0000280240 00000 n +0000280300 00000 n +0000280359 00000 n +0000280419 00000 n +0000280479 00000 n +0000280539 00000 n +0000280599 00000 n +0000280659 00000 n +0000280719 00000 n +0000280779 00000 n +0000280839 00000 n +0000280898 00000 n +0000280958 00000 n +0000281018 00000 n +0000281078 00000 n +0000281138 00000 n +0000281198 00000 n +0000281258 00000 n +0000281318 00000 n +0000281378 00000 n +0000281438 00000 n +0000279130 00000 n +0000284478 00000 n +0000285428 00000 n +0000286196 00000 n +0000288596 00000 n +0000284305 00000 n +0000281757 00000 n +0000288418 00000 n +0000287651 00000 n +0000287806 00000 n +0000287958 00000 n +0000288111 00000 n +0001326266 00000 n +0001322956 00000 n +0001326099 00000 n +0000288266 00000 n +0000285199 00000 n +0000285256 00000 n +0000285321 00000 n +0000285406 00000 n +0000285967 00000 n +0000286024 00000 n +0000286089 00000 n +0000286174 00000 n +0000287422 00000 n +0000287479 00000 n +0000287544 00000 n +0000287629 00000 n +0000302875 00000 n +0000291636 00000 n +0000293097 00000 n +0000294528 00000 n +0000291499 00000 n +0000288806 00000 n +0000294290 00000 n +0000294410 00000 n +0000294469 00000 n +0000294137 00000 n +0000292868 00000 n +0000292925 00000 n +0000292990 00000 n +0000293075 00000 n +0000293908 00000 n +0000293965 00000 n +0000294030 00000 n +0000294115 00000 n +0000298490 00000 n +0000297419 00000 n +0000294710 00000 n +0000298374 00000 n +0000298431 00000 n +0000297592 00000 n +0000297746 00000 n +0000297901 00000 n +0000298053 00000 n +0000298206 00000 n +0001273771 00000 n +0000302934 00000 n +0000302010 00000 n +0000298630 00000 n +0000302818 00000 n +0000302174 00000 n +0000302354 00000 n +0000302510 00000 n +0001322039 00000 n +0001318863 00000 n +0001321875 00000 n +0000302664 00000 n +0001318304 00000 n +0001315785 00000 n +0001318139 00000 n +0001273738 00000 n +0000306461 00000 n +0000305663 00000 n +0000303129 00000 n +0000306292 00000 n +0000305818 00000 n +0000305973 00000 n +0000306140 00000 n +0001533924 00000 n +0000310279 00000 n +0000309869 00000 n +0000306574 00000 n +0000310161 00000 n +0000310006 00000 n +0001315203 00000 n +0001310754 00000 n +0001315038 00000 n +0000315176 00000 n +0000314120 00000 n +0000310503 00000 n +0000315065 00000 n +0000314293 00000 n +0000314447 00000 n +0000314601 00000 n +0000314756 00000 n +0000314911 00000 n +0001273705 00000 n +0000333924 00000 n +0000318017 00000 n +0000317783 00000 n +0000315397 00000 n +0000317899 00000 n +0001310438 00000 n +0001308999 00000 n +0001310274 00000 n +0000322543 00000 n +0000321577 00000 n +0000318216 00000 n +0000322367 00000 n +0001308079 00000 n +0001299875 00000 n +0001307914 00000 n +0001298888 00000 n +0001289287 00000 n +0001298723 00000 n +0000321741 00000 n +0000321897 00000 n +0000322051 00000 n +0000322207 00000 n +0001273672 00000 n +0001273639 00000 n +0000326703 00000 n +0000325802 00000 n +0000322793 00000 n +0000326587 00000 n +0000325966 00000 n +0000326125 00000 n +0000326644 00000 n +0000326278 00000 n +0000326432 00000 n +0000329707 00000 n +0000331012 00000 n +0000332286 00000 n +0000334172 00000 n +0000329552 00000 n +0000326842 00000 n +0000333867 00000 n +0000333983 00000 n +0000334047 00000 n +0000333399 00000 n +0000333553 00000 n +0000333707 00000 n +0001534049 00000 n +0000330783 00000 n +0000330840 00000 n +0000330905 00000 n +0000330990 00000 n +0000332057 00000 n +0000332114 00000 n +0000332179 00000 n +0000332264 00000 n +0000333170 00000 n +0000333227 00000 n +0000333292 00000 n +0000333377 00000 n +0000337853 00000 n +0000337038 00000 n +0000334397 00000 n +0000337678 00000 n +0000337735 00000 n +0000337193 00000 n +0000337347 00000 n +0000337513 00000 n +0000337794 00000 n +0001262892 00000 n +0000340805 00000 n +0000340389 00000 n +0000337979 00000 n +0000340685 00000 n +0000340526 00000 n +0000344618 00000 n +0000348297 00000 n +0000352699 00000 n +0000344436 00000 n +0000340990 00000 n +0000352579 00000 n +0000351645 00000 n +0000351798 00000 n +0000351959 00000 n +0000352114 00000 n +0000352269 00000 n +0000352424 00000 n +0000345800 00000 n +0000345857 00000 n +0000345938 00000 n +0000347137 00000 n +0000347159 00000 n +0000347419 00000 n +0000347490 00000 n +0000348275 00000 n +0000349215 00000 n +0000349272 00000 n +0000349353 00000 n +0000350552 00000 n +0000350574 00000 n +0000350830 00000 n +0000350897 00000 n +0000351623 00000 n +0001257061 00000 n +0001273606 00000 n +0000355421 00000 n +0000357124 00000 n +0000355284 00000 n +0000352912 00000 n +0000356946 00000 n +0000356791 00000 n +0000356562 00000 n +0000356619 00000 n +0000356684 00000 n +0000356769 00000 n +0000360563 00000 n +0000360087 00000 n +0000357266 00000 n +0000360390 00000 n +0000360224 00000 n +0000364288 00000 n +0000363329 00000 n +0000360702 00000 n +0000364117 00000 n +0000363493 00000 n +0000363652 00000 n +0000363807 00000 n +0000363962 00000 n +0001534174 00000 n +0000367753 00000 n +0000367229 00000 n +0000364426 00000 n +0000367696 00000 n +0000367375 00000 n +0000367531 00000 n +0001273573 00000 n +0000371196 00000 n +0000370622 00000 n +0000367934 00000 n +0000371081 00000 n +0000370768 00000 n +0000370928 00000 n +0000378006 00000 n +0000375128 00000 n +0000374000 00000 n +0000371322 00000 n +0000374955 00000 n +0001288939 00000 n +0001286626 00000 n +0001288774 00000 n +0000374173 00000 n +0000374328 00000 n +0000374488 00000 n +0000374647 00000 n +0000374801 00000 n +0000380385 00000 n +0000377869 00000 n +0000375280 00000 n +0000379260 00000 n +0000379317 00000 n +0000379381 00000 n +0000379445 00000 n +0000379509 00000 n +0000379573 00000 n +0000379637 00000 n +0000379701 00000 n +0000379764 00000 n +0000379826 00000 n +0000379888 00000 n +0000379950 00000 n +0000380012 00000 n +0000380074 00000 n +0000380136 00000 n +0000380198 00000 n +0000380260 00000 n +0000379105 00000 n +0000378876 00000 n +0000378933 00000 n +0000378998 00000 n +0000379083 00000 n +0000383593 00000 n +0000383308 00000 n +0000380581 00000 n +0000383424 00000 n +0000387298 00000 n +0000386278 00000 n +0000383733 00000 n +0000387067 00000 n +0000386442 00000 n +0000386597 00000 n +0000386750 00000 n +0000386914 00000 n +0001534299 00000 n +0001273540 00000 n +0000391404 00000 n +0000390391 00000 n +0000387451 00000 n +0000391347 00000 n +0000390564 00000 n +0000390717 00000 n +0000390872 00000 n +0000391027 00000 n +0000391187 00000 n +0001273507 00000 n +0000395244 00000 n +0000395008 00000 n +0000391532 00000 n +0000395124 00000 n +0000398082 00000 n +0000408094 00000 n +0000421376 00000 n +0000431741 00000 n +0000418631 00000 n +0000397882 00000 n +0000395358 00000 n +0000418453 00000 n +0000417202 00000 n +0000417356 00000 n +0000417511 00000 n +0000417666 00000 n +0000417821 00000 n +0000417976 00000 n +0000418131 00000 n +0000418286 00000 n +0000404989 00000 n +0000405393 00000 n +0000406469 00000 n +0000407551 00000 n +0000407574 00000 n +0000407828 00000 n +0000414097 00000 n +0000414501 00000 n +0000415577 00000 n +0000416659 00000 n +0000416682 00000 n +0000416936 00000 n +0001273474 00000 n +0001273441 00000 n +0000441813 00000 n +0000421230 00000 n +0000418857 00000 n +0000441636 00000 n +0000441322 00000 n +0000441481 00000 n +0000428636 00000 n +0000429040 00000 n +0000430116 00000 n +0000431198 00000 n +0000431221 00000 n +0000431475 00000 n +0000438217 00000 n +0000438621 00000 n +0000439697 00000 n +0000440779 00000 n +0000440802 00000 n +0000441056 00000 n +0000445760 00000 n +0000445524 00000 n +0000441984 00000 n +0000445640 00000 n +0000450653 00000 n +0000450062 00000 n +0000445860 00000 n +0000450533 00000 n +0000450208 00000 n +0000450363 00000 n +0001534424 00000 n +0001259842 00000 n +0000454420 00000 n +0000453670 00000 n +0000450766 00000 n +0000454305 00000 n +0000453825 00000 n +0000453993 00000 n +0000454148 00000 n +0001244285 00000 n +0001273408 00000 n +0000458544 00000 n +0000457209 00000 n +0000454573 00000 n +0000458375 00000 n +0000457391 00000 n +0000457559 00000 n +0000457725 00000 n +0000457886 00000 n +0000458049 00000 n +0000458216 00000 n +0001250834 00000 n +0001260137 00000 n +0000464065 00000 n +0000461589 00000 n +0000458643 00000 n +0000463951 00000 n +0000461834 00000 n +0000461999 00000 n +0000462166 00000 n +0000462329 00000 n +0000462492 00000 n +0000462648 00000 n +0000462813 00000 n +0000462977 00000 n +0000463146 00000 n +0000463313 00000 n +0000463471 00000 n +0000463625 00000 n +0000463786 00000 n +0001253746 00000 n +0001241729 00000 n +0001238441 00000 n +0001273375 00000 n +0000466890 00000 n +0000466663 00000 n +0000464231 00000 n +0000466779 00000 n +0000470116 00000 n +0000469078 00000 n +0000466976 00000 n +0000470059 00000 n +0000469251 00000 n +0000469411 00000 n +0000469574 00000 n +0000469744 00000 n +0000469908 00000 n +0000473255 00000 n +0000472119 00000 n +0000470189 00000 n +0000473086 00000 n +0000472292 00000 n +0000472445 00000 n +0000472598 00000 n +0000472759 00000 n +0000472933 00000 n +0001534549 00000 n +0001250893 00000 n +0000476847 00000 n +0000476117 00000 n +0000473368 00000 n +0000476732 00000 n +0000476272 00000 n +0000476425 00000 n +0000476579 00000 n +0000481265 00000 n +0000479537 00000 n +0000477013 00000 n +0000479827 00000 n +0000479884 00000 n +0000479948 00000 n +0000480011 00000 n +0000480075 00000 n +0000480139 00000 n +0000480199 00000 n +0000480258 00000 n +0000480318 00000 n +0000480378 00000 n +0000480442 00000 n +0000480505 00000 n +0000480569 00000 n +0000480633 00000 n +0000480697 00000 n +0000480761 00000 n +0000480825 00000 n +0000480888 00000 n +0000480952 00000 n +0000481016 00000 n +0000481080 00000 n +0000479674 00000 n +0000487212 00000 n +0000483874 00000 n +0000481461 00000 n +0000485774 00000 n +0000485831 00000 n +0000485895 00000 n +0000485958 00000 n +0000486022 00000 n +0000486086 00000 n +0000486146 00000 n +0000486205 00000 n +0000486265 00000 n +0000486325 00000 n +0000486389 00000 n +0000486452 00000 n +0000486516 00000 n +0000486580 00000 n +0000486644 00000 n +0000486708 00000 n +0000486772 00000 n +0000486835 00000 n +0000486899 00000 n +0000486963 00000 n +0000487027 00000 n +0000484092 00000 n +0000484261 00000 n +0000484430 00000 n +0000484599 00000 n +0000484757 00000 n +0000484927 00000 n +0000485096 00000 n +0000485284 00000 n +0000485456 00000 n +0001285987 00000 n +0001281865 00000 n +0001285821 00000 n +0000485623 00000 n +0001226191 00000 n +0001235237 00000 n +0001235182 00000 n +0001250776 00000 n +0001232471 00000 n +0001266193 00000 n +0001257238 00000 n +0001254100 00000 n +0001260255 00000 n +0000491410 00000 n +0000490149 00000 n +0000487381 00000 n +0000490942 00000 n +0000490313 00000 n +0000490469 00000 n +0000490628 00000 n +0000490787 00000 n +0000491056 00000 n +0000491115 00000 n +0000491174 00000 n +0000491233 00000 n +0000491292 00000 n +0000491351 00000 n +0000495048 00000 n +0000494476 00000 n +0000491576 00000 n +0000494933 00000 n +0000494622 00000 n +0000494776 00000 n +0000498296 00000 n +0000497418 00000 n +0000495187 00000 n +0000497710 00000 n +0000497767 00000 n +0000497826 00000 n +0000497885 00000 n +0000497944 00000 n +0000498002 00000 n +0000498061 00000 n +0000497555 00000 n +0000498120 00000 n +0000498179 00000 n +0000498238 00000 n +0001534674 00000 n +0001273342 00000 n +0000501910 00000 n +0000501561 00000 n +0000498477 00000 n +0000501853 00000 n +0000501698 00000 n +0001273309 00000 n +0000506129 00000 n +0000505152 00000 n +0000502091 00000 n +0000505960 00000 n +0000505316 00000 n +0000505481 00000 n +0000505637 00000 n +0000505806 00000 n +0001247500 00000 n +0001273276 00000 n +0000509376 00000 n +0000508710 00000 n +0000506323 00000 n +0000509203 00000 n +0000508856 00000 n +0000509023 00000 n +0000513393 00000 n +0000512038 00000 n +0000509490 00000 n +0000513224 00000 n +0000512220 00000 n +0000512380 00000 n +0000512561 00000 n +0000512738 00000 n +0000512909 00000 n +0000513069 00000 n +0001241317 00000 n +0001260078 00000 n +0001257120 00000 n +0000518081 00000 n +0000525648 00000 n +0000533072 00000 n +0000541235 00000 n +0000548256 00000 n +0000552960 00000 n +0000517380 00000 n +0000516479 00000 n +0000513546 00000 n +0000517265 00000 n +0000516643 00000 n +0000516798 00000 n +0000516950 00000 n +0000517106 00000 n +0001273243 00000 n +0000540596 00000 n +0000517965 00000 n +0000517534 00000 n +0000540353 00000 n +0001534799 00000 n +0000523786 00000 n +0000524294 00000 n +0000525370 00000 n +0000525393 00000 n +0000531210 00000 n +0000531718 00000 n +0000532794 00000 n +0000532817 00000 n +0000538491 00000 n +0000538999 00000 n +0000540075 00000 n +0000540098 00000 n +0000559678 00000 n +0000541119 00000 n +0000540729 00000 n +0000559433 00000 n +0000546394 00000 n +0000546902 00000 n +0000547978 00000 n +0000548001 00000 n +0000551098 00000 n +0000551606 00000 n +0000552682 00000 n +0000552705 00000 n +0000557571 00000 n +0000558079 00000 n +0000559155 00000 n +0000559178 00000 n +0000563397 00000 n +0000562707 00000 n +0000559811 00000 n +0000563340 00000 n +0000562862 00000 n +0000563016 00000 n +0000563171 00000 n +0000568246 00000 n +0000566287 00000 n +0000563524 00000 n +0000568189 00000 n +0000566505 00000 n +0000566664 00000 n +0000566830 00000 n +0000566989 00000 n +0000567158 00000 n +0000567340 00000 n +0000567512 00000 n +0000567688 00000 n +0000567854 00000 n +0000568025 00000 n +0001235532 00000 n +0001241493 00000 n +0001256943 00000 n +0000572117 00000 n +0000570882 00000 n +0000568360 00000 n +0000572002 00000 n +0000571064 00000 n +0000571233 00000 n +0000571387 00000 n +0000571541 00000 n +0000571695 00000 n +0000571849 00000 n +0000575726 00000 n +0000575054 00000 n +0000572257 00000 n +0000575669 00000 n +0000575209 00000 n +0000575362 00000 n +0000575516 00000 n +0000581740 00000 n +0000577973 00000 n +0000575840 00000 n +0000578801 00000 n +0000578137 00000 n +0000578916 00000 n +0000578980 00000 n +0000579044 00000 n +0000579108 00000 n +0000579172 00000 n +0000579236 00000 n +0000579300 00000 n +0000579360 00000 n +0000579420 00000 n +0000579480 00000 n +0000579540 00000 n +0000579600 00000 n +0000579660 00000 n +0000579724 00000 n +0000579788 00000 n +0000579852 00000 n +0000579916 00000 n +0000579980 00000 n +0000580044 00000 n +0000580107 00000 n +0000580167 00000 n +0000580227 00000 n +0000580287 00000 n +0000580347 00000 n +0000580407 00000 n +0000580467 00000 n +0000580526 00000 n +0000580590 00000 n +0000580654 00000 n +0000580718 00000 n +0000580782 00000 n +0000580846 00000 n +0000580910 00000 n +0000580974 00000 n +0000581038 00000 n +0000581102 00000 n +0000581166 00000 n +0000581230 00000 n +0000581294 00000 n +0000581358 00000 n +0000581422 00000 n +0000581486 00000 n +0000581549 00000 n +0000581613 00000 n +0000578289 00000 n +0000578468 00000 n +0000578650 00000 n +0001534924 00000 n +0001244230 00000 n +0000593356 00000 n +0000601700 00000 n +0000609933 00000 n +0000585461 00000 n +0000584404 00000 n +0000581882 00000 n +0000585346 00000 n +0000584577 00000 n +0000584729 00000 n +0000584881 00000 n +0000585036 00000 n +0000585191 00000 n +0000588064 00000 n +0000587829 00000 n +0000585560 00000 n +0000587945 00000 n +0000590326 00000 n +0000590091 00000 n +0000588179 00000 n +0000590207 00000 n +0000592687 00000 n +0000592452 00000 n +0000590441 00000 n +0000592568 00000 n +0000616913 00000 n +0000593240 00000 n +0000592802 00000 n +0000616669 00000 n +0000598546 00000 n +0000598998 00000 n +0000600074 00000 n +0000601156 00000 n +0000601179 00000 n +0000601434 00000 n +0000606780 00000 n +0000607232 00000 n +0000608308 00000 n +0000609390 00000 n +0000609413 00000 n +0000609667 00000 n +0000613516 00000 n +0000613968 00000 n +0000615044 00000 n +0000616126 00000 n +0000616149 00000 n +0000616403 00000 n +0000621735 00000 n +0000619696 00000 n +0000617046 00000 n +0000621620 00000 n +0000619923 00000 n +0000620078 00000 n +0000620233 00000 n +0000620388 00000 n +0000620543 00000 n +0000620696 00000 n +0000620850 00000 n +0000621005 00000 n +0000621159 00000 n +0000621314 00000 n +0000621467 00000 n +0001535049 00000 n +0000624364 00000 n +0000624133 00000 n +0000621849 00000 n +0000624249 00000 n +0000627713 00000 n +0000626999 00000 n +0000624478 00000 n +0000627656 00000 n +0000627154 00000 n +0000627319 00000 n +0000627484 00000 n +0000631290 00000 n +0000630290 00000 n +0000627814 00000 n +0000631115 00000 n +0000631172 00000 n +0000630454 00000 n +0000630613 00000 n +0000630780 00000 n +0000630944 00000 n +0000631231 00000 n +0000631933 00000 n +0000631760 00000 n +0000631390 00000 n +0000631876 00000 n +0000634841 00000 n +0000634437 00000 n +0000632006 00000 n +0000634730 00000 n +0000634574 00000 n +0001273210 00000 n +0000637914 00000 n +0000637741 00000 n +0000634995 00000 n +0000637857 00000 n +0001535174 00000 n +0000642231 00000 n +0000640522 00000 n +0000638001 00000 n +0000642116 00000 n +0000640731 00000 n +0000640884 00000 n +0000641037 00000 n +0000641191 00000 n +0000641346 00000 n +0000641500 00000 n +0000641654 00000 n +0000641808 00000 n +0000641962 00000 n +0000649524 00000 n +0000650974 00000 n +0000652818 00000 n +0000645517 00000 n +0000644717 00000 n +0000642371 00000 n +0000645343 00000 n +0000644872 00000 n +0000645025 00000 n +0000645183 00000 n +0000659922 00000 n +0000649378 00000 n +0000645629 00000 n +0000654955 00000 n +0000655012 00000 n +0000655071 00000 n +0000655130 00000 n +0000655189 00000 n +0000655248 00000 n +0000655305 00000 n +0000655364 00000 n +0000655423 00000 n +0000655482 00000 n +0000655541 00000 n +0000655600 00000 n +0000655659 00000 n +0000655718 00000 n +0000655777 00000 n +0000655835 00000 n +0000655894 00000 n +0000655953 00000 n +0000656012 00000 n +0000656071 00000 n +0000656130 00000 n +0000656189 00000 n +0000656248 00000 n +0000656307 00000 n +0000656366 00000 n +0000656425 00000 n +0000656483 00000 n +0000656542 00000 n +0000656601 00000 n +0000656660 00000 n +0000656719 00000 n +0000656778 00000 n +0000656837 00000 n +0000656896 00000 n +0000656955 00000 n +0000657013 00000 n +0000657072 00000 n +0000657131 00000 n +0000657190 00000 n +0000657249 00000 n +0000657308 00000 n +0000657372 00000 n +0000657436 00000 n +0000657500 00000 n +0000657564 00000 n +0000657626 00000 n +0000657690 00000 n +0000657754 00000 n +0000657818 00000 n +0000657882 00000 n +0000657946 00000 n +0000658010 00000 n +0000658074 00000 n +0000658138 00000 n +0000658201 00000 n +0000658265 00000 n +0000658329 00000 n +0000658393 00000 n +0000658457 00000 n +0000658521 00000 n +0000658585 00000 n +0000658649 00000 n +0000658713 00000 n +0000658777 00000 n +0000658841 00000 n +0000658904 00000 n +0000658968 00000 n +0000659032 00000 n +0000659096 00000 n +0000659160 00000 n +0000659224 00000 n +0000659288 00000 n +0000659352 00000 n +0000659416 00000 n +0000659479 00000 n +0000659543 00000 n +0000659607 00000 n +0000659671 00000 n +0000659735 00000 n +0000654650 00000 n +0001281241 00000 n +0001276911 00000 n +0001281074 00000 n +0000654803 00000 n +0000650745 00000 n +0000650802 00000 n +0000650867 00000 n +0000650952 00000 n +0000652588 00000 n +0000652645 00000 n +0000652710 00000 n +0000652795 00000 n +0000654420 00000 n +0000654477 00000 n +0000654542 00000 n +0000654627 00000 n +0000664039 00000 n +0000663150 00000 n +0000660177 00000 n +0000663928 00000 n +0000663314 00000 n +0000663467 00000 n +0000663621 00000 n +0000663774 00000 n +0000668181 00000 n +0000667038 00000 n +0000664165 00000 n +0000668012 00000 n +0000667211 00000 n +0000667371 00000 n +0000667531 00000 n +0000667691 00000 n +0000667846 00000 n +0001226367 00000 n +0000672215 00000 n +0000671419 00000 n +0000668334 00000 n +0000672037 00000 n +0000671574 00000 n +0000671728 00000 n +0000671880 00000 n +0001535299 00000 n +0000676318 00000 n +0000675800 00000 n +0000672410 00000 n +0000676261 00000 n +0000675946 00000 n +0000676102 00000 n +0001273177 00000 n +0000679507 00000 n +0000680781 00000 n +0000684511 00000 n +0000679391 00000 n +0000676500 00000 n +0000682058 00000 n +0000682115 00000 n +0000682174 00000 n +0000682232 00000 n +0000682291 00000 n +0000682350 00000 n +0000682409 00000 n +0000682468 00000 n +0000682527 00000 n +0000682586 00000 n +0000682645 00000 n +0000682704 00000 n +0000682762 00000 n +0000682821 00000 n +0000682880 00000 n +0000682939 00000 n +0000682998 00000 n +0000683057 00000 n +0000683116 00000 n +0000683175 00000 n +0000683234 00000 n +0000683298 00000 n +0000683361 00000 n +0000683425 00000 n +0000683489 00000 n +0000683553 00000 n +0000683617 00000 n +0000683681 00000 n +0000683745 00000 n +0000683809 00000 n +0000683873 00000 n +0000683936 00000 n +0000684000 00000 n +0000684064 00000 n +0000684128 00000 n +0000684192 00000 n +0000684256 00000 n +0000684320 00000 n +0000684384 00000 n +0000680552 00000 n +0000680609 00000 n +0000680674 00000 n +0000680759 00000 n +0000681829 00000 n +0000681886 00000 n +0000681951 00000 n +0000682036 00000 n +0000688392 00000 n +0000687831 00000 n +0000684766 00000 n +0000688281 00000 n +0000687977 00000 n +0000688128 00000 n +0000692318 00000 n +0000691413 00000 n +0000688544 00000 n +0000692198 00000 n +0000691577 00000 n +0000691731 00000 n +0000691885 00000 n +0000692039 00000 n +0000696398 00000 n +0000695327 00000 n +0000692474 00000 n +0000696283 00000 n +0000695500 00000 n +0000695653 00000 n +0000695813 00000 n +0000695967 00000 n +0000696127 00000 n +0000699314 00000 n +0000698971 00000 n +0000696510 00000 n +0000699087 00000 n +0001535424 00000 n +0000704550 00000 n +0000702561 00000 n +0000699413 00000 n +0000703547 00000 n +0000702734 00000 n +0000703604 00000 n +0000703663 00000 n +0000703722 00000 n +0000703781 00000 n +0000703840 00000 n +0000703898 00000 n +0000703957 00000 n +0000704016 00000 n +0000704075 00000 n +0000704134 00000 n +0000704193 00000 n +0000704252 00000 n +0000704311 00000 n +0000704370 00000 n +0000704428 00000 n +0000702889 00000 n +0000703043 00000 n +0000703204 00000 n +0000703387 00000 n +0001273144 00000 n +0000709048 00000 n +0000707397 00000 n +0000704746 00000 n +0000708879 00000 n +0000707597 00000 n +0000707750 00000 n +0000707903 00000 n +0000708056 00000 n +0000708218 00000 n +0000708388 00000 n +0000708550 00000 n +0000708716 00000 n +0001226018 00000 n +0001260196 00000 n +0001244580 00000 n +0001270969 00000 n +0000712589 00000 n +0000712120 00000 n +0000709147 00000 n +0000712410 00000 n +0000712257 00000 n +0000712525 00000 n +0000716205 00000 n +0000715310 00000 n +0000712702 00000 n +0000716090 00000 n +0000715474 00000 n +0000715627 00000 n +0000715778 00000 n +0000715930 00000 n +0000719832 00000 n +0000719954 00000 n +0000719114 00000 n +0000716304 00000 n +0000719775 00000 n +0000719269 00000 n +0000719424 00000 n +0000719603 00000 n +0000728132 00000 n +0000722857 00000 n +0000720093 00000 n +0000728075 00000 n +0000723246 00000 n +0000723407 00000 n +0000723569 00000 n +0000723736 00000 n +0000723898 00000 n +0000724067 00000 n +0000724234 00000 n +0000724402 00000 n +0000724566 00000 n +0000724732 00000 n +0000724911 00000 n +0000725079 00000 n +0000725261 00000 n +0000725427 00000 n +0000725591 00000 n +0000725756 00000 n +0000725919 00000 n +0000726083 00000 n +0000726244 00000 n +0000726408 00000 n +0000726575 00000 n +0000726746 00000 n +0000726907 00000 n +0000727073 00000 n +0000727249 00000 n +0000727432 00000 n +0000727585 00000 n +0000727738 00000 n +0000727893 00000 n +0001535549 00000 n +0001238382 00000 n +0001229333 00000 n +0001247676 00000 n +0001226308 00000 n +0001226485 00000 n +0001241670 00000 n +0001247853 00000 n +0001229160 00000 n +0000731984 00000 n +0000731069 00000 n +0000728218 00000 n +0000731927 00000 n +0000731233 00000 n +0000731416 00000 n +0000731582 00000 n +0000731752 00000 n +0001263128 00000 n +0001247912 00000 n +0000736081 00000 n +0000734570 00000 n +0000732070 00000 n +0000735966 00000 n +0000734761 00000 n +0000734928 00000 n +0000735099 00000 n +0000735260 00000 n +0000735425 00000 n +0000735601 00000 n +0000735783 00000 n +0000737147 00000 n +0000736800 00000 n +0000736193 00000 n +0000737090 00000 n +0000736937 00000 n +0000739431 00000 n +0000738868 00000 n +0000737220 00000 n +0000739320 00000 n +0000739014 00000 n +0000739167 00000 n +0000742193 00000 n +0000741732 00000 n +0000739517 00000 n +0000742024 00000 n +0000741869 00000 n +0000747581 00000 n +0000745353 00000 n +0000742293 00000 n +0000746464 00000 n +0000745535 00000 n +0000745695 00000 n +0000745849 00000 n +0000746003 00000 n +0000746575 00000 n +0000746634 00000 n +0000746693 00000 n +0000746752 00000 n +0000746811 00000 n +0000746870 00000 n +0000746929 00000 n +0000746987 00000 n +0000747046 00000 n +0000747105 00000 n +0000747164 00000 n +0000747223 00000 n +0000747282 00000 n +0000747341 00000 n +0000747400 00000 n +0000747459 00000 n +0000746157 00000 n +0000746310 00000 n +0001535674 00000 n +0000750443 00000 n +0000763860 00000 n +0000750297 00000 n +0000747777 00000 n +0000762914 00000 n +0000762971 00000 n +0000763030 00000 n +0000763088 00000 n +0000763147 00000 n +0000763206 00000 n +0000763265 00000 n +0000763324 00000 n +0000763383 00000 n +0000763442 00000 n +0000763501 00000 n +0000763560 00000 n +0000763618 00000 n +0000762601 00000 n +0000762760 00000 n +0000762439 00000 n +0000762496 00000 n +0000762577 00000 n +0000766698 00000 n +0000773742 00000 n +0000766543 00000 n +0000764045 00000 n +0000773623 00000 n +0000773157 00000 n +0000773309 00000 n +0000773463 00000 n +0000772996 00000 n +0000773053 00000 n +0000773134 00000 n +0000776528 00000 n +0000786233 00000 n +0000776373 00000 n +0000773858 00000 n +0000786059 00000 n +0000785602 00000 n +0000785756 00000 n +0000785908 00000 n +0000785441 00000 n +0000785498 00000 n +0000785579 00000 n +0000789761 00000 n +0000788945 00000 n +0000786375 00000 n +0000789236 00000 n +0000789082 00000 n +0000789347 00000 n +0000789405 00000 n +0000789464 00000 n +0000789523 00000 n +0000789581 00000 n +0000793649 00000 n +0000792228 00000 n +0000789916 00000 n +0000793358 00000 n +0000792410 00000 n +0000792570 00000 n +0000792730 00000 n +0000792889 00000 n +0000793041 00000 n +0000793531 00000 n +0000793205 00000 n +0000793590 00000 n +0000796606 00000 n +0000796141 00000 n +0000793788 00000 n +0000796433 00000 n +0000796490 00000 n +0000796278 00000 n +0001535799 00000 n +0000798910 00000 n +0000812931 00000 n +0000823280 00000 n +0000798764 00000 n +0000796733 00000 n +0000823097 00000 n +0000822789 00000 n +0000822943 00000 n +0000812769 00000 n +0000812826 00000 n +0000812907 00000 n +0000822628 00000 n +0000822685 00000 n +0000822766 00000 n +0000826448 00000 n +0000825715 00000 n +0000823411 00000 n +0000826333 00000 n +0000825870 00000 n +0000826025 00000 n +0000826178 00000 n +0000830276 00000 n +0000829591 00000 n +0000826534 00000 n +0000830044 00000 n +0000829737 00000 n +0000829890 00000 n +0000834688 00000 n +0000833882 00000 n +0000830389 00000 n +0000834509 00000 n +0000834037 00000 n +0000834566 00000 n +0000834197 00000 n +0000834350 00000 n +0000840455 00000 n +0000845932 00000 n +0000838294 00000 n +0000837556 00000 n +0000834787 00000 n +0000838179 00000 n +0000837711 00000 n +0000837866 00000 n +0000838019 00000 n +0000853803 00000 n +0000854527 00000 n +0000860754 00000 n +0000851902 00000 n +0000840300 00000 n +0000838393 00000 n +0000851724 00000 n +0000851262 00000 n +0000851416 00000 n +0000851570 00000 n +0001535924 00000 n +0000842738 00000 n +0000843230 00000 n +0000844306 00000 n +0000845388 00000 n +0000845411 00000 n +0000845666 00000 n +0000848069 00000 n +0000848561 00000 n +0000849637 00000 n +0000850719 00000 n +0000850742 00000 n +0000850996 00000 n +0000853867 00000 n +0000853630 00000 n +0000852033 00000 n +0000853746 00000 n +0000867118 00000 n +0000854411 00000 n +0000853954 00000 n +0000866938 00000 n +0000857560 00000 n +0000858052 00000 n +0000859128 00000 n +0000860210 00000 n +0000860233 00000 n +0000860488 00000 n +0000863745 00000 n +0000864237 00000 n +0000865313 00000 n +0000866395 00000 n +0000866418 00000 n +0000866672 00000 n +0000869257 00000 n +0000875130 00000 n +0000869120 00000 n +0000867236 00000 n +0000874954 00000 n +0000874799 00000 n +0000871653 00000 n +0000872097 00000 n +0000873173 00000 n +0000874255 00000 n +0000874278 00000 n +0000874533 00000 n +0000878698 00000 n +0000877789 00000 n +0000875259 00000 n +0000878584 00000 n +0000877953 00000 n +0000878112 00000 n +0000878271 00000 n +0000878425 00000 n +0000883762 00000 n +0000894803 00000 n +0000883068 00000 n +0000881840 00000 n +0000878784 00000 n +0000882952 00000 n +0000883009 00000 n +0000882022 00000 n +0000882177 00000 n +0000882332 00000 n +0000882488 00000 n +0000882643 00000 n +0000882798 00000 n +0001273111 00000 n +0000903058 00000 n +0000883646 00000 n +0000883209 00000 n +0000902878 00000 n +0001536049 00000 n +0000894555 00000 n +0000902630 00000 n +0000908003 00000 n +0000938707 00000 n +0000907367 00000 n +0000905784 00000 n +0000903192 00000 n +0000907251 00000 n +0000905984 00000 n +0000906139 00000 n +0000906294 00000 n +0000907308 00000 n +0000906453 00000 n +0000906615 00000 n +0000906784 00000 n +0000906943 00000 n +0000907097 00000 n +0001241611 00000 n +0000965929 00000 n +0000907887 00000 n +0000907454 00000 n +0000965748 00000 n +0000938459 00000 n +0000965500 00000 n +0000969862 00000 n +0000969007 00000 n +0000966063 00000 n +0000969805 00000 n +0000969171 00000 n +0000969327 00000 n +0000969480 00000 n +0000969645 00000 n +0001273078 00000 n +0000972943 00000 n +0000972529 00000 n +0000969989 00000 n +0000972827 00000 n +0000972666 00000 n +0000972884 00000 n +0001250603 00000 n +0000975661 00000 n +0000974938 00000 n +0000973043 00000 n +0000975550 00000 n +0000975093 00000 n +0000975246 00000 n +0000975398 00000 n +0000977896 00000 n +0000986857 00000 n +0000994146 00000 n +0000984274 00000 n +0000977705 00000 n +0000975747 00000 n +0000984101 00000 n +0000982934 00000 n +0000983111 00000 n +0000983274 00000 n +0000983440 00000 n +0000983616 00000 n +0000983771 00000 n +0000983927 00000 n +0001536174 00000 n +0000982773 00000 n +0000982830 00000 n +0000982911 00000 n +0001263069 00000 n +0001270851 00000 n +0001247386 00000 n +0001254159 00000 n +0001273045 00000 n +0001273012 00000 n +0001010312 00000 n +0001011684 00000 n +0001012717 00000 n +0001007368 00000 n +0000986648 00000 n +0000984444 00000 n +0001007185 00000 n +0001005798 00000 n +0001005948 00000 n +0001006101 00000 n +0001006255 00000 n +0001006411 00000 n +0001006566 00000 n +0001006721 00000 n +0001006876 00000 n +0001007031 00000 n +0000993985 00000 n +0000994042 00000 n +0000994123 00000 n +0001005636 00000 n +0001005693 00000 n +0001005774 00000 n +0001272979 00000 n +0001017879 00000 n +0001010175 00000 n +0001007539 00000 n +0001014224 00000 n +0001014069 00000 n +0001014281 00000 n +0001014344 00000 n +0001014407 00000 n +0001014470 00000 n +0001014533 00000 n +0001014596 00000 n +0001014659 00000 n +0001014722 00000 n +0001014785 00000 n +0001014848 00000 n +0001014910 00000 n +0001014973 00000 n +0001015036 00000 n +0001015099 00000 n +0001015162 00000 n +0001015225 00000 n +0001015288 00000 n +0001015351 00000 n +0001015414 00000 n +0001015476 00000 n +0001015539 00000 n +0001015602 00000 n +0001015665 00000 n +0001015728 00000 n +0001015791 00000 n +0001015854 00000 n +0001015917 00000 n +0001015980 00000 n +0001016043 00000 n +0001016106 00000 n +0001016169 00000 n +0001016232 00000 n +0001016295 00000 n +0001016358 00000 n +0001016421 00000 n +0001016483 00000 n +0001016546 00000 n +0001016609 00000 n +0001016672 00000 n +0001016735 00000 n +0001016799 00000 n +0001016863 00000 n +0001016927 00000 n +0001016991 00000 n +0001017055 00000 n +0001017119 00000 n +0001017183 00000 n +0001017247 00000 n +0001017311 00000 n +0001017375 00000 n +0001017438 00000 n +0001017502 00000 n +0001017566 00000 n +0001017630 00000 n +0001017694 00000 n +0001011455 00000 n +0001011512 00000 n +0001011577 00000 n +0001011662 00000 n +0001012488 00000 n +0001012545 00000 n +0001012610 00000 n +0001012695 00000 n +0001013840 00000 n +0001013897 00000 n +0001013962 00000 n +0001014047 00000 n +0001024616 00000 n +0001021484 00000 n +0001018093 00000 n +0001022434 00000 n +0001022491 00000 n +0001022550 00000 n +0001022609 00000 n +0001022668 00000 n +0001022727 00000 n +0001022786 00000 n +0001022845 00000 n +0001022904 00000 n +0001022963 00000 n +0001023021 00000 n +0001023080 00000 n +0001023139 00000 n +0001023198 00000 n +0001023257 00000 n +0001023316 00000 n +0001023375 00000 n +0001023434 00000 n +0001023493 00000 n +0001023551 00000 n +0001023610 00000 n +0001023669 00000 n +0001023728 00000 n +0001023787 00000 n +0001023846 00000 n +0001023905 00000 n +0001023964 00000 n +0001024023 00000 n +0001024082 00000 n +0001024141 00000 n +0001024199 00000 n +0001024258 00000 n +0001024317 00000 n +0001024376 00000 n +0001024435 00000 n +0001024494 00000 n +0001021657 00000 n +0001021813 00000 n +0001021973 00000 n +0001022128 00000 n +0001022280 00000 n +0001272946 00000 n +0001028787 00000 n +0001027326 00000 n +0001024811 00000 n +0001028609 00000 n +0001027517 00000 n +0001027667 00000 n +0001027817 00000 n +0001027976 00000 n +0001028135 00000 n +0001028295 00000 n +0001028455 00000 n +0001032293 00000 n +0001031484 00000 n +0001028899 00000 n +0001031942 00000 n +0001031630 00000 n +0001032116 00000 n +0001032175 00000 n +0001032234 00000 n +0001031784 00000 n +0001035404 00000 n +0001037917 00000 n +0001035249 00000 n +0001032433 00000 n +0001037797 00000 n +0001037336 00000 n +0001037489 00000 n +0001037643 00000 n +0001536299 00000 n +0001037106 00000 n +0001037163 00000 n +0001037228 00000 n +0001037313 00000 n +0001041456 00000 n +0001041045 00000 n +0001038074 00000 n +0001041336 00000 n +0001041182 00000 n +0001046024 00000 n +0001044911 00000 n +0001041609 00000 n +0001045850 00000 n +0001045084 00000 n +0001045238 00000 n +0001045391 00000 n +0001045544 00000 n +0001045697 00000 n +0001050208 00000 n +0001049313 00000 n +0001046203 00000 n +0001050093 00000 n +0001049477 00000 n +0001049632 00000 n +0001049785 00000 n +0001049938 00000 n +0001272913 00000 n +0001054233 00000 n +0001053098 00000 n +0001050387 00000 n +0001054060 00000 n +0001053271 00000 n +0001053425 00000 n +0001053585 00000 n +0001053745 00000 n +0001053905 00000 n +0001059331 00000 n +0001057958 00000 n +0001054371 00000 n +0001058742 00000 n +0001058122 00000 n +0001058276 00000 n +0001058431 00000 n +0001058586 00000 n +0001058799 00000 n +0001058858 00000 n +0001058917 00000 n +0001058975 00000 n +0001059033 00000 n +0001059092 00000 n +0001059151 00000 n +0001059210 00000 n +0001272880 00000 n +0001272847 00000 n +0001062218 00000 n +0001061929 00000 n +0001059525 00000 n +0001062045 00000 n +0001536424 00000 n +0001065353 00000 n +0001066771 00000 n +0001068153 00000 n +0001065207 00000 n +0001062371 00000 n +0001068033 00000 n +0001067725 00000 n +0001067880 00000 n +0001066542 00000 n +0001066599 00000 n +0001066664 00000 n +0001066749 00000 n +0001067496 00000 n +0001067553 00000 n +0001067618 00000 n +0001067703 00000 n +0001071829 00000 n +0001071195 00000 n +0001068364 00000 n +0001071651 00000 n +0001071341 00000 n +0001071496 00000 n +0001075300 00000 n +0001074615 00000 n +0001071968 00000 n +0001075069 00000 n +0001074761 00000 n +0001074915 00000 n +0001079598 00000 n +0001078308 00000 n +0001075412 00000 n +0001078598 00000 n +0001078445 00000 n +0001078655 00000 n +0001078714 00000 n +0001078773 00000 n +0001078832 00000 n +0001078891 00000 n +0001078950 00000 n +0001079008 00000 n +0001079067 00000 n +0001079126 00000 n +0001079185 00000 n +0001079244 00000 n +0001079303 00000 n +0001079362 00000 n +0001082831 00000 n +0001081884 00000 n +0001079767 00000 n +0001082658 00000 n +0001082048 00000 n +0001082200 00000 n +0001082353 00000 n +0001082505 00000 n +0001086600 00000 n +0001085609 00000 n +0001082930 00000 n +0001086422 00000 n +0001276468 00000 n +0001274101 00000 n +0001276304 00000 n +0001085773 00000 n +0001085926 00000 n +0001086096 00000 n +0001086258 00000 n +0001536549 00000 n +0001087943 00000 n +0001107998 00000 n +0001128033 00000 n +0001146447 00000 n +0001158544 00000 n +0001087827 00000 n +0001086700 00000 n +0001158361 00000 n +0001158418 00000 n +0001104812 00000 n +0001105296 00000 n +0001106372 00000 n +0001107454 00000 n +0001107478 00000 n +0001107732 00000 n +0001124847 00000 n +0001125331 00000 n +0001126407 00000 n +0001127489 00000 n +0001127513 00000 n +0001127767 00000 n +0001143261 00000 n +0001143745 00000 n +0001144821 00000 n +0001145903 00000 n +0001145927 00000 n +0001146181 00000 n +0001155176 00000 n +0001155660 00000 n +0001156736 00000 n +0001157818 00000 n +0001157841 00000 n +0001158095 00000 n +0001162300 00000 n +0001161733 00000 n +0001158706 00000 n +0001162189 00000 n +0001161879 00000 n +0001162034 00000 n +0001272814 00000 n +0001166269 00000 n +0001165133 00000 n +0001162454 00000 n +0001166154 00000 n +0001165306 00000 n +0001165482 00000 n +0001165658 00000 n +0001165821 00000 n +0001165988 00000 n +0001222970 00000 n +0001169820 00000 n +0001169044 00000 n +0001166381 00000 n +0001169705 00000 n +0001169199 00000 n +0001169363 00000 n +0001169540 00000 n +0001270910 00000 n +0001266252 00000 n +0001171013 00000 n +0001170840 00000 n +0001169919 00000 n +0001170956 00000 n +0001173387 00000 n +0001173042 00000 n +0001171086 00000 n +0001173158 00000 n +0001173269 00000 n +0001173328 00000 n +0001536674 00000 n +0001177269 00000 n +0001175850 00000 n +0001173486 00000 n +0001176978 00000 n +0001177035 00000 n +0001176032 00000 n +0001177094 00000 n +0001176192 00000 n +0001176345 00000 n +0001176498 00000 n +0001176658 00000 n +0001176818 00000 n +0001263010 00000 n +0001181801 00000 n +0001179972 00000 n +0001177368 00000 n +0001181686 00000 n +0001180181 00000 n +0001180341 00000 n +0001180501 00000 n +0001180672 00000 n +0001180847 00000 n +0001181012 00000 n +0001181178 00000 n +0001181349 00000 n +0001181514 00000 n +0001269334 00000 n +0001266488 00000 n +0001185116 00000 n +0001184228 00000 n +0001181887 00000 n +0001184885 00000 n +0001184383 00000 n +0001184549 00000 n +0001184720 00000 n +0001188602 00000 n +0001187552 00000 n +0001185215 00000 n +0001188545 00000 n +0001187725 00000 n +0001187891 00000 n +0001188058 00000 n +0001188225 00000 n +0001188378 00000 n +0001257179 00000 n +0001192155 00000 n +0001191051 00000 n +0001188702 00000 n +0001192040 00000 n +0001191224 00000 n +0001191391 00000 n +0001191558 00000 n +0001191721 00000 n +0001191881 00000 n +0001259960 00000 n +0001266311 00000 n +0001229508 00000 n +0001196632 00000 n +0001194886 00000 n +0001192255 00000 n +0001195860 00000 n +0001195059 00000 n +0001195218 00000 n +0001195377 00000 n +0001195971 00000 n +0001196031 00000 n +0001196091 00000 n +0001196151 00000 n +0001196211 00000 n +0001196271 00000 n +0001196331 00000 n +0001196391 00000 n +0001196450 00000 n +0001195528 00000 n +0001195696 00000 n +0001196573 00000 n +0001536799 00000 n +0001229392 00000 n +0001256829 00000 n +0001199541 00000 n +0001199251 00000 n +0001196814 00000 n +0001199367 00000 n +0001199424 00000 n +0001203741 00000 n +0001201961 00000 n +0001199654 00000 n +0001203508 00000 n +0001202161 00000 n +0001202331 00000 n +0001202500 00000 n +0001202679 00000 n +0001203623 00000 n +0001202847 00000 n +0001203682 00000 n +0001203008 00000 n +0001203176 00000 n +0001203339 00000 n +0001269392 00000 n +0001226426 00000 n +0001247441 00000 n +0001207544 00000 n +0001206376 00000 n +0001203854 00000 n +0001207370 00000 n +0001206549 00000 n +0001206718 00000 n +0001206881 00000 n +0001207042 00000 n +0001207427 00000 n +0001207215 00000 n +0001257297 00000 n +0001235355 00000 n +0001208226 00000 n +0001208053 00000 n +0001207657 00000 n +0001208169 00000 n +0001210561 00000 n +0001210334 00000 n +0001208299 00000 n +0001210450 00000 n +0001213912 00000 n +0001213565 00000 n +0001210688 00000 n +0001213855 00000 n +0001213702 00000 n +0001536924 00000 n +0001217674 00000 n +0001216834 00000 n +0001214026 00000 n +0001217617 00000 n +0001216998 00000 n +0001217154 00000 n +0001217312 00000 n +0001217464 00000 n +0001220639 00000 n +0001219972 00000 n +0001217774 00000 n +0001220582 00000 n +0001220127 00000 n +0001220276 00000 n +0001220429 00000 n +0001223382 00000 n +0001222797 00000 n +0001220726 00000 n +0001222913 00000 n +0001226544 00000 n +0001225845 00000 n +0001223494 00000 n +0001225961 00000 n +0001229684 00000 n +0001228987 00000 n +0001226656 00000 n +0001229103 00000 n +0001232648 00000 n +0001231949 00000 n +0001229770 00000 n +0001232065 00000 n +0001537049 00000 n +0001235709 00000 n +0001235009 00000 n +0001232747 00000 n +0001235125 00000 n +0001238795 00000 n +0001238150 00000 n +0001235795 00000 n +0001238266 00000 n +0001241847 00000 n +0001241144 00000 n +0001238881 00000 n +0001241260 00000 n +0001244757 00000 n +0001244057 00000 n +0001241933 00000 n +0001244173 00000 n +0001247971 00000 n +0001247213 00000 n +0001244843 00000 n +0001247329 00000 n +0001251188 00000 n +0001250430 00000 n +0001248057 00000 n +0001250546 00000 n +0001537174 00000 n +0001254277 00000 n +0001253518 00000 n +0001251287 00000 n +0001253634 00000 n +0001257356 00000 n +0001256656 00000 n +0001254376 00000 n +0001256772 00000 n +0001260314 00000 n +0001259669 00000 n +0001257442 00000 n +0001259785 00000 n +0001263364 00000 n +0001262664 00000 n +0001260413 00000 n +0001262780 00000 n +0001266547 00000 n +0001265788 00000 n +0001263450 00000 n +0001265904 00000 n +0001269569 00000 n +0001268870 00000 n +0001266646 00000 n +0001268986 00000 n +0001537299 00000 n +0001271028 00000 n +0001270678 00000 n +0001269655 00000 n +0001270794 00000 n +0001272715 00000 n +0001272348 00000 n +0001271114 00000 n +0001272658 00000 n +0001272485 00000 n +0001276776 00000 n +0001276678 00000 n +0001281671 00000 n +0001281474 00000 n +0001286417 00000 n +0001286220 00000 n +0001289188 00000 n +0001289143 00000 n +0001299504 00000 n +0001299217 00000 n +0001308672 00000 n +0001308363 00000 n +0001310667 00000 n +0001310642 00000 n +0001315571 00000 n +0001315427 00000 n +0001318701 00000 n +0001318516 00000 n +0001322639 00000 n +0001322372 00000 n +0001326552 00000 n +0001326477 00000 n +0001338890 00000 n +0001338583 00000 n +0001355243 00000 n +0001354865 00000 n +0001359623 00000 n +0001359366 00000 n +0001370547 00000 n +0001370199 00000 n +0001380917 00000 n +0001380628 00000 n +0001399008 00000 n +0001398578 00000 n +0001403417 00000 n +0001403356 00000 n +0001407689 00000 n +0001407428 00000 n +0001422257 00000 n +0001421882 00000 n +0001436642 00000 n +0001436301 00000 n +0001451492 00000 n +0001451109 00000 n +0001459419 00000 n +0001459160 00000 n +0001472951 00000 n +0001472604 00000 n +0001491833 00000 n +0001491442 00000 n +0001506269 00000 n +0001505880 00000 n +0001526893 00000 n +0001526424 00000 n +0001532503 00000 n +0001532396 00000 n +0001537397 00000 n +0001537521 00000 n +0001537647 00000 n +0001537773 00000 n +0001537899 00000 n +0001538025 00000 n +0001538151 00000 n +0001538240 00000 n +0001538367 00000 n +0001538447 00000 n +0001538521 00000 n +0001552746 00000 n +0001583071 00000 n +0001583112 00000 n +0001583152 00000 n +0001583400 00000 n trailer << /Size 3748 @@ -29000,5 +29061,5 @@ /Info 3747 0 R >> startxref -1583697 +1583688 %%EOF From lattner at cs.uiuc.edu Fri May 13 12:57:04 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Fri, 13 May 2005 12:57:04 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/X86/X86InstrInfo.td Message-ID: <200505131757.j4DHv4ot001575@apoc.cs.uiuc.edu> Changes in directory llvm/lib/Target/X86: X86InstrInfo.td updated: 1.123 -> 1.124 --- Log message: add 'ret imm' instruction --- Diffs of the changes: (+3 -1) X86InstrInfo.td | 4 +++- 1 files changed, 3 insertions(+), 1 deletion(-) Index: llvm/lib/Target/X86/X86InstrInfo.td diff -u llvm/lib/Target/X86/X86InstrInfo.td:1.123 llvm/lib/Target/X86/X86InstrInfo.td:1.124 --- llvm/lib/Target/X86/X86InstrInfo.td:1.123 Mon May 9 15:49:20 2005 +++ llvm/lib/Target/X86/X86InstrInfo.td Fri May 13 12:56:48 2005 @@ -152,9 +152,11 @@ // Control Flow Instructions... // -// Return instruction... +// Return instructions. let isTerminator = 1, isReturn = 1, isBarrier = 1 in def RET : I<0xC3, RawFrm, (ops), "ret">; +let isTerminator = 1, isReturn = 1, isBarrier = 1 in + def RETI : Ii16<0xC2, RawFrm, (ops i16imm:$amt), "ret $amt">; // All branches are RawFrm, Void, Branch, and Terminators let isBranch = 1, isTerminator = 1 in From lattner at cs.uiuc.edu Fri May 13 13:03:27 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Fri, 13 May 2005 13:03:27 -0500 Subject: [llvm-commits] CVS: llvm-test/MultiSource/Applications/hbd/cp.cpp Message-ID: <200505131803.j4DI3RRu001894@apoc.cs.uiuc.edu> Changes in directory llvm-test/MultiSource/Applications/hbd: cp.cpp updated: 1.1 -> 1.2 --- Log message: remove ^M's --- Diffs of the changes: (+83 -83) cp.cpp | 166 ++++++++++++++++++++++++++++++++--------------------------------- 1 files changed, 83 insertions(+), 83 deletions(-) Index: llvm-test/MultiSource/Applications/hbd/cp.cpp diff -u llvm-test/MultiSource/Applications/hbd/cp.cpp:1.1 llvm-test/MultiSource/Applications/hbd/cp.cpp:1.2 --- llvm-test/MultiSource/Applications/hbd/cp.cpp:1.1 Fri Feb 27 12:06:48 2004 +++ llvm-test/MultiSource/Applications/hbd/cp.cpp Fri May 13 13:03:14 2005 @@ -1,83 +1,83 @@ -/* cp.cpp */ -/* - Java Decompiler - Copyright (c) 1994-2003, Pete Ryland. - Distributed under the GNU GPL Version 2. - This package is available from http://pdr.cx/hbd/ -*/ - -#include "general.h" -#include "cp.h" -#include "file.h" -#include "err.h" -#include "class.h" -#include "consts.h" - -void ConstPool::read(Classfile *c, u16 *imports_count) { - if ((constant_pool = new cp_info[(constant_pool_count = get16(c->infile, &c->infile_pos))]) == 0) memerr(); - for (int j = 1, i = constant_pool_count - 1; i--;) { - cp_info *cpi = &constant_pool[j++]; - cpi->tag = (unsigned char)get8(c->infile, &c->infile_pos); - unsigned short size; - D(fprintf(c->outfile, "\npos: 0x%05X\tindex: %4d\t",c->infile_pos,j-1)) - switch(cpi->tag) { - case CONSTANT_Utf8: - if ((cpi->chp = new char[(size = get16(c->infile, &c->infile_pos)) + 1]) == 0) memerr(); - getstr(cpi->chp, size, c->infile); - cpi->chp[size] = '\0'; - D(fprintf(c->outfile, "UTF8: %s\t", cpi->chp)) - break; - case CONSTANT_Unicode: D(fprintf(c->outfile, "Unicode\t")) /* unused */ - break; - case CONSTANT_Integer: - cpi->i = get32(c->infile, &c->infile_pos); - D(fprintf(c->outfile, "32-bit int: 0x%8lX\t", cpi->i)) - break; - case CONSTANT_Float: - cpi->i = get32(c->infile, &c->infile_pos); - D(fprintf(c->outfile, "32-bit float: %.25G\t", cpi->f)) - break; - case CONSTANT_Long: - cpi->i = get32(c->infile, &c->infile_pos); - cpi = &constant_pool[j++]; - cpi->tag = 0; - cpi->i = get32(c->infile, &c->infile_pos); - D(((cpi - 1)->i) ? fprintf(c->outfile, "64-bit int: 0x%lX%08lX", (cpi - 1)->i, cpi->i) : fprintf(c->outfile, "64-bit int: 0x%lX", cpi->i)) - if (i--) continue; - break; - case CONSTANT_Double: - *(((unsigned long *)&cpi->i) + 1) = get32(c->infile, &c->infile_pos); - cpi->i = get32(c->infile, &c->infile_pos); - D(fprintf(c->outfile, "64-bit float: %.25G\t",(float)*(double*)(&cpi->i))) constant_pool[j++].tag = 0; - if (i--) continue; - break; - case CONSTANT_Class: - imports_count++; - cpi->i = get16(c->infile, &c->infile_pos); - D(fprintf(c->outfile, "Class: name = index %d\t", (int)cpi->i)) - break; - case CONSTANT_String: - cpi->i = get16(c->infile, &c->infile_pos); - D(fprintf(c->outfile, "String: index %d\t", (int)cpi->i)) - break; - case CONSTANT_Fieldref: - case CONSTANT_Methodref: - case CONSTANT_InterfaceMethodref: - if ((cpi->p = new Ref) == 0) memerr(); - ((Ref*)cpi->p)->class_index = get16(c->infile, &c->infile_pos); - ((Ref*)cpi->p)->name_and_type = get16(c->infile, &c->infile_pos); - D(fprintf(c->outfile, "Ref: class_index %d, n&t_index %d\t", ((Ref*)cpi->p)->class_index, ((Ref*)cpi->p)->name_and_type)) - break; - case CONSTANT_NameAndType: - imports_count++; - if ((cpi->p = new NameAndType) == 0) memerr(); - ((NameAndType*)cpi->p)->name_index = get16(c->infile, &c->infile_pos); - ((NameAndType*)cpi->p)->signature_index = get16(c->infile, &c->infile_pos); - D(fprintf(c->outfile, "Name&Type: name_index %d, sig_index %d\t", ((NameAndType*)cpi->p)->name_index, ((NameAndType*)cpi->p)->signature_index)) - break; - default: - fprintf(stderr, "Error reading constant pool entry %d of %d at file pos 0x%08x!\n", j, constant_pool_count, c->infile_pos); - fatalerror(CP_ERR); - } - } -} +/* cp.cpp */ +/* + Java Decompiler + Copyright (c) 1994-2003, Pete Ryland. + Distributed under the GNU GPL Version 2. + This package is available from http://pdr.cx/hbd/ +*/ + +#include "general.h" +#include "cp.h" +#include "file.h" +#include "err.h" +#include "class.h" +#include "consts.h" + +void ConstPool::read(Classfile *c, u16 *imports_count) { + if ((constant_pool = new cp_info[(constant_pool_count = get16(c->infile, &c->infile_pos))]) == 0) memerr(); + for (int j = 1, i = constant_pool_count - 1; i--;) { + cp_info *cpi = &constant_pool[j++]; + cpi->tag = (unsigned char)get8(c->infile, &c->infile_pos); + unsigned short size; + D(fprintf(c->outfile, "\npos: 0x%05X\tindex: %4d\t",c->infile_pos,j-1)) + switch(cpi->tag) { + case CONSTANT_Utf8: + if ((cpi->chp = new char[(size = get16(c->infile, &c->infile_pos)) + 1]) == 0) memerr(); + getstr(cpi->chp, size, c->infile); + cpi->chp[size] = '\0'; + D(fprintf(c->outfile, "UTF8: %s\t", cpi->chp)) + break; + case CONSTANT_Unicode: D(fprintf(c->outfile, "Unicode\t")) /* unused */ + break; + case CONSTANT_Integer: + cpi->i = get32(c->infile, &c->infile_pos); + D(fprintf(c->outfile, "32-bit int: 0x%8lX\t", cpi->i)) + break; + case CONSTANT_Float: + cpi->i = get32(c->infile, &c->infile_pos); + D(fprintf(c->outfile, "32-bit float: %.25G\t", cpi->f)) + break; + case CONSTANT_Long: + cpi->i = get32(c->infile, &c->infile_pos); + cpi = &constant_pool[j++]; + cpi->tag = 0; + cpi->i = get32(c->infile, &c->infile_pos); + D(((cpi - 1)->i) ? fprintf(c->outfile, "64-bit int: 0x%lX%08lX", (cpi - 1)->i, cpi->i) : fprintf(c->outfile, "64-bit int: 0x%lX", cpi->i)) + if (i--) continue; + break; + case CONSTANT_Double: + *(((unsigned long *)&cpi->i) + 1) = get32(c->infile, &c->infile_pos); + cpi->i = get32(c->infile, &c->infile_pos); + D(fprintf(c->outfile, "64-bit float: %.25G\t",(float)*(double*)(&cpi->i))) constant_pool[j++].tag = 0; + if (i--) continue; + break; + case CONSTANT_Class: + imports_count++; + cpi->i = get16(c->infile, &c->infile_pos); + D(fprintf(c->outfile, "Class: name = index %d\t", (int)cpi->i)) + break; + case CONSTANT_String: + cpi->i = get16(c->infile, &c->infile_pos); + D(fprintf(c->outfile, "String: index %d\t", (int)cpi->i)) + break; + case CONSTANT_Fieldref: + case CONSTANT_Methodref: + case CONSTANT_InterfaceMethodref: + if ((cpi->p = new Ref) == 0) memerr(); + ((Ref*)cpi->p)->class_index = get16(c->infile, &c->infile_pos); + ((Ref*)cpi->p)->name_and_type = get16(c->infile, &c->infile_pos); + D(fprintf(c->outfile, "Ref: class_index %d, n&t_index %d\t", ((Ref*)cpi->p)->class_index, ((Ref*)cpi->p)->name_and_type)) + break; + case CONSTANT_NameAndType: + imports_count++; + if ((cpi->p = new NameAndType) == 0) memerr(); + ((NameAndType*)cpi->p)->name_index = get16(c->infile, &c->infile_pos); + ((NameAndType*)cpi->p)->signature_index = get16(c->infile, &c->infile_pos); + D(fprintf(c->outfile, "Name&Type: name_index %d, sig_index %d\t", ((NameAndType*)cpi->p)->name_index, ((NameAndType*)cpi->p)->signature_index)) + break; + default: + fprintf(stderr, "Error reading constant pool entry %d of %d at file pos 0x%08x!\n", j, constant_pool_count, c->infile_pos); + fatalerror(CP_ERR); + } + } +} From lattner at cs.uiuc.edu Fri May 13 13:06:55 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Fri, 13 May 2005 13:06:55 -0500 Subject: [llvm-commits] CVS: llvm-test/MultiSource/Applications/hbd/cp.cpp Message-ID: <200505131806.j4DI6tBd002010@apoc.cs.uiuc.edu> Changes in directory llvm-test/MultiSource/Applications/hbd: cp.cpp updated: 1.2 -> 1.3 --- Log message: explicitly zero memory, new does not do this --- Diffs of the changes: (+1 -0) cp.cpp | 1 + 1 files changed, 1 insertion(+) Index: llvm-test/MultiSource/Applications/hbd/cp.cpp diff -u llvm-test/MultiSource/Applications/hbd/cp.cpp:1.2 llvm-test/MultiSource/Applications/hbd/cp.cpp:1.3 --- llvm-test/MultiSource/Applications/hbd/cp.cpp:1.2 Fri May 13 13:03:14 2005 +++ llvm-test/MultiSource/Applications/hbd/cp.cpp Fri May 13 13:06:41 2005 @@ -15,6 +15,7 @@ void ConstPool::read(Classfile *c, u16 *imports_count) { if ((constant_pool = new cp_info[(constant_pool_count = get16(c->infile, &c->infile_pos))]) == 0) memerr(); + constant_pool->tag = 0; for (int j = 1, i = constant_pool_count - 1; i--;) { cp_info *cpi = &constant_pool[j++]; cpi->tag = (unsigned char)get8(c->infile, &c->infile_pos); From lattner at cs.uiuc.edu Fri May 13 13:08:08 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Fri, 13 May 2005 13:08:08 -0500 Subject: [llvm-commits] CVS: llvm-test/MultiSource/Applications/hbd/class.cpp Message-ID: <200505131808.j4DI8838002136@apoc.cs.uiuc.edu> Changes in directory llvm-test/MultiSource/Applications/hbd: class.cpp updated: 1.1 -> 1.2 --- Log message: fix problems with new[]/delete --- Diffs of the changes: (+5 -5) class.cpp | 10 +++++----- 1 files changed, 5 insertions(+), 5 deletions(-) Index: llvm-test/MultiSource/Applications/hbd/class.cpp diff -u llvm-test/MultiSource/Applications/hbd/class.cpp:1.1 llvm-test/MultiSource/Applications/hbd/class.cpp:1.2 --- llvm-test/MultiSource/Applications/hbd/class.cpp:1.1 Fri Feb 27 12:06:47 2004 +++ llvm-test/MultiSource/Applications/hbd/class.cpp Fri May 13 13:07:50 2005 @@ -55,7 +55,7 @@ fprintf(stderr, "Could not open file %s\n", argv[1]); goto defaultcase_hbt; } - delete tmpstr; + delete [] tmpstr; break; default: defaultcase_hbt: fatalerror(COMMAND_LINE_ERR_HBT, progname); @@ -209,7 +209,7 @@ for (tint = numimports - 2; tint>=0; tint--) { if (!strcmp(imports[tint], tstr)) { --numimports; - delete tstr; + delete [] tstr; break; } } @@ -252,7 +252,7 @@ for (tint = numimports - 2; tint>=0; tint--) { if (!strcmp(imports[tint], tstr)) { --numimports; - delete tstr; + delete [] tstr; break; } } @@ -358,7 +358,7 @@ fprintf(outfile, "\n"); char *tmpstr = new char[access_flags.strlen() + 1]; fprintf(outfile, "%sclass %s ", access_flags.toString(tmpstr), this_class_name); - delete tmpstr; + delete [] tmpstr; if (super_class) { if (!strcmp(tmpstr = cp(super_class)->chp, "Object")) { super_class_name = "Object"; @@ -380,7 +380,7 @@ field_info &fi = *(fields[j++]); tmpstr = new char[fi.access_flags.strlen() + 1]; fprintf(outfile, "\n %s", fi.access_flags.toString(tmpstr)); - delete tmpstr; + delete [] tmpstr; tmpstr = fi.sig; printsigname(this, outfile, tmpstr, fi.name, 0); if (fi.isconstant) { From lattner at cs.uiuc.edu Fri May 13 13:09:15 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Fri, 13 May 2005 13:09:15 -0500 Subject: [llvm-commits] CVS: llvm-test/MultiSource/Applications/hbd/decomp.cpp Message-ID: <200505131809.j4DI9FXR002163@apoc.cs.uiuc.edu> Changes in directory llvm-test/MultiSource/Applications/hbd: decomp.cpp updated: 1.1 -> 1.2 --- Log message: use delete[] for new[]'d memory --- Diffs of the changes: (+1 -1) decomp.cpp | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-) Index: llvm-test/MultiSource/Applications/hbd/decomp.cpp diff -u llvm-test/MultiSource/Applications/hbd/decomp.cpp:1.1 llvm-test/MultiSource/Applications/hbd/decomp.cpp:1.2 --- llvm-test/MultiSource/Applications/hbd/decomp.cpp:1.1 Fri Feb 27 12:06:48 2004 +++ llvm-test/MultiSource/Applications/hbd/decomp.cpp Fri May 13 13:08:59 2005 @@ -146,7 +146,7 @@ strptr = new char[mi->access_flags.strlen() + 1]; fprintf(c->outfile, "\n %s", mi->access_flags.toString(strptr)); - delete strptr; + delete [] strptr; char *tmp = mi->sig; if (printsigname(c, c->outfile, tmp, mi->name, mi)) return 1; for (int m = 0; m != mi->num_throws;) { From lattner at cs.uiuc.edu Fri May 13 13:10:57 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Fri, 13 May 2005 13:10:57 -0500 Subject: [llvm-commits] CVS: llvm-test/MultiSource/Applications/hbd/class.cpp d1-pushc.cpp d2-pushl.cpp d3-popl.cpp d4-array.cpp d5-stack.cpp d6-arith.cpp d7-cntrl.cpp d8-ret.cpp d9-swtch.cpp da-field.cpp db-meth.cpp dc-misc.cpp err.cpp exp.cpp hbd.cpp id.cpp op.cpp sig.cpp version.cpp Message-ID: <200505131810.j4DIAvQb002283@apoc.cs.uiuc.edu> Changes in directory llvm-test/MultiSource/Applications/hbd: class.cpp updated: 1.2 -> 1.3 d1-pushc.cpp updated: 1.1 -> 1.2 d2-pushl.cpp updated: 1.1 -> 1.2 d3-popl.cpp updated: 1.1 -> 1.2 d4-array.cpp updated: 1.1 -> 1.2 d5-stack.cpp updated: 1.1 -> 1.2 d6-arith.cpp updated: 1.1 -> 1.2 d7-cntrl.cpp updated: 1.1 -> 1.2 d8-ret.cpp updated: 1.1 -> 1.2 d9-swtch.cpp updated: 1.1 -> 1.2 da-field.cpp updated: 1.1 -> 1.2 db-meth.cpp updated: 1.1 -> 1.2 dc-misc.cpp updated: 1.1 -> 1.2 err.cpp updated: 1.1 -> 1.2 exp.cpp updated: 1.1 -> 1.2 hbd.cpp updated: 1.1 -> 1.2 id.cpp updated: 1.1 -> 1.2 op.cpp updated: 1.1 -> 1.2 sig.cpp updated: 1.1 -> 1.2 version.cpp updated: 1.1 -> 1.2 --- Log message: remove ^M's --- Diffs of the changes: (+1381 -1380) class.cpp | 1 d1-pushc.cpp | 160 ++++++++++----------- d2-pushl.cpp | 120 ++++++++-------- d3-popl.cpp | 232 +++++++++++++++---------------- d4-array.cpp | 136 +++++++++--------- d5-stack.cpp | 78 +++++----- d6-arith.cpp | 198 +++++++++++++------------- d7-cntrl.cpp | 168 +++++++++++----------- d8-ret.cpp | 70 ++++----- d9-swtch.cpp | 86 +++++------ da-field.cpp | 224 +++++++++++++++--------------- db-meth.cpp | 234 +++++++++++++++---------------- dc-misc.cpp | 64 ++++---- err.cpp | 64 ++++---- exp.cpp | 434 +++++++++++++++++++++++++++++------------------------------ hbd.cpp | 42 ++--- id.cpp | 54 +++---- op.cpp | 60 ++++---- sig.cpp | 290 +++++++++++++++++++-------------------- version.cpp | 46 +++--- 20 files changed, 1381 insertions(+), 1380 deletions(-) Index: llvm-test/MultiSource/Applications/hbd/class.cpp diff -u llvm-test/MultiSource/Applications/hbd/class.cpp:1.2 llvm-test/MultiSource/Applications/hbd/class.cpp:1.3 --- llvm-test/MultiSource/Applications/hbd/class.cpp:1.2 Fri May 13 13:07:50 2005 +++ llvm-test/MultiSource/Applications/hbd/class.cpp Fri May 13 13:10:43 2005 @@ -29,6 +29,7 @@ functoinsert = 0; outfile = stdout; infile = stdin; progname = *argv++; + options = (CL_Options)0; if (strcmp(progname + strlen(progname) - 3, "hbt") == 0) { for (; (--argc) && (**argv == '-'); argv++) { options = (CL_Options)0; Index: llvm-test/MultiSource/Applications/hbd/d1-pushc.cpp diff -u llvm-test/MultiSource/Applications/hbd/d1-pushc.cpp:1.1 llvm-test/MultiSource/Applications/hbd/d1-pushc.cpp:1.2 --- llvm-test/MultiSource/Applications/hbd/d1-pushc.cpp:1.1 Fri Feb 27 12:06:48 2004 +++ llvm-test/MultiSource/Applications/hbd/d1-pushc.cpp Fri May 13 13:10:43 2005 @@ -1,80 +1,80 @@ -/* d1-pushc.cpp */ -/* - Java Decompiler - Copyright (c) 1994-2003, Pete Ryland. - Distributed under the GNU GPL Version 2. - This package is available from http://pdr.cx/hbd/ -*/ - -#include -#include "exp.h" -#include "class.h" -#include "decomp.h" -#include "cp.h" -#include "consts.h" - -int pushimm(Classfile *c) /* push immediate value e.g. bipush 34 */ -{ - int pcval = currpc - 1; - int val = JDNEXT8S(); - if (ch == 0x11) { val<<=8; val+=JDNEXT8U(); } - char *temp_str = new char[32]; - sprintf(temp_str, "%i", val); - *stkptr++ = new Exp(pcval, temp_str, INT, IM); /* id->linfo = val */ - return 0; -} - -int pushconst(Classfile *c) /* push value from cp e.g. ldc1 #3 */ -{ - int pcval = currpc - 1; - int val = JDNEXT8U(); - if (ch != 0x12) { val<<=8; val+=JDNEXT8U(); } - Type idtype; - char tmpstr[1024]; - cp_info *cpi = c->cp[val]; - switch (cpi->tag) { - case CONSTANT_Integer: - sprintf(tmpstr, "0x%lX", cpi->i); - idtype = INT; -// id->linfo = cpi->i; - break; - case CONSTANT_Long: - if (cpi->i) - sprintf(tmpstr, "0x%lX%08lXL", cpi->i, (cpi + 1)->i); - else - sprintf(tmpstr, "0x%lXL", (cpi + 1)->i); - idtype = LONG; -// id->linfo = (cpi + 1)->i; -// id->llinfo[2] = cpi->i; - break; - case CONSTANT_Float: - sprintf(tmpstr, "%.25Gf", cpi->f); - idtype = FLOAT; -// id->dinfo = cpi->f; - break; - case CONSTANT_Double: - sprintf(tmpstr, "%.25Gd", *(double *)&cpi->i); - idtype = DOUBLE; -// id->dinfo = *(double*)&cpi->i; - break; - case CONSTANT_String: - sprintf(tmpstr, "\"%s\"", c->cp[cpi->i]->chp); - idtype = OBJECT; /* java.lang.String */ -// id->dinfo = (int)c->cp[cpi->i]->chp; - break; - default: - fprintf(stderr, "Unkown tag %d on constant\n", cpi->tag); - return -1; - } - char *idname = new char[strlen(tmpstr) + 1]; - strcpy(idname, tmpstr); - *stkptr++ = new Exp(pcval, idname, idtype, CP, val); - return 0; -} - -int pushimp(Classfile *c) /* push implied immediate value e.g. iconst_m1 */ -{ - *stkptr++ = new Exp(currpc - 1, ch - 1); - return 0; -} - +/* d1-pushc.cpp */ +/* + Java Decompiler + Copyright (c) 1994-2003, Pete Ryland. + Distributed under the GNU GPL Version 2. + This package is available from http://pdr.cx/hbd/ +*/ + +#include +#include "exp.h" +#include "class.h" +#include "decomp.h" +#include "cp.h" +#include "consts.h" + +int pushimm(Classfile *c) /* push immediate value e.g. bipush 34 */ +{ + int pcval = currpc - 1; + int val = JDNEXT8S(); + if (ch == 0x11) { val<<=8; val+=JDNEXT8U(); } + char *temp_str = new char[32]; + sprintf(temp_str, "%i", val); + *stkptr++ = new Exp(pcval, temp_str, INT, IM); /* id->linfo = val */ + return 0; +} + +int pushconst(Classfile *c) /* push value from cp e.g. ldc1 #3 */ +{ + int pcval = currpc - 1; + int val = JDNEXT8U(); + if (ch != 0x12) { val<<=8; val+=JDNEXT8U(); } + Type idtype; + char tmpstr[1024]; + cp_info *cpi = c->cp[val]; + switch (cpi->tag) { + case CONSTANT_Integer: + sprintf(tmpstr, "0x%lX", cpi->i); + idtype = INT; +// id->linfo = cpi->i; + break; + case CONSTANT_Long: + if (cpi->i) + sprintf(tmpstr, "0x%lX%08lXL", cpi->i, (cpi + 1)->i); + else + sprintf(tmpstr, "0x%lXL", (cpi + 1)->i); + idtype = LONG; +// id->linfo = (cpi + 1)->i; +// id->llinfo[2] = cpi->i; + break; + case CONSTANT_Float: + sprintf(tmpstr, "%.25Gf", cpi->f); + idtype = FLOAT; +// id->dinfo = cpi->f; + break; + case CONSTANT_Double: + sprintf(tmpstr, "%.25Gd", *(double *)&cpi->i); + idtype = DOUBLE; +// id->dinfo = *(double*)&cpi->i; + break; + case CONSTANT_String: + sprintf(tmpstr, "\"%s\"", c->cp[cpi->i]->chp); + idtype = OBJECT; /* java.lang.String */ +// id->dinfo = (int)c->cp[cpi->i]->chp; + break; + default: + fprintf(stderr, "Unkown tag %d on constant\n", cpi->tag); + return -1; + } + char *idname = new char[strlen(tmpstr) + 1]; + strcpy(idname, tmpstr); + *stkptr++ = new Exp(pcval, idname, idtype, CP, val); + return 0; +} + +int pushimp(Classfile *c) /* push implied immediate value e.g. iconst_m1 */ +{ + *stkptr++ = new Exp(currpc - 1, ch - 1); + return 0; +} + Index: llvm-test/MultiSource/Applications/hbd/d2-pushl.cpp diff -u llvm-test/MultiSource/Applications/hbd/d2-pushl.cpp:1.1 llvm-test/MultiSource/Applications/hbd/d2-pushl.cpp:1.2 --- llvm-test/MultiSource/Applications/hbd/d2-pushl.cpp:1.1 Fri Feb 27 12:06:48 2004 +++ llvm-test/MultiSource/Applications/hbd/d2-pushl.cpp Fri May 13 13:10:43 2005 @@ -1,60 +1,60 @@ -/* d2-pushl.cpp */ -/* - Java Decompiler - Copyright (c) 1994-2003, Pete Ryland. - Distributed under the GNU GPL Version 2. - This package is available from http://pdr.cx/hbd/ -*/ - -#include "general.h" -#include "exp.h" -#include "decomp.h" -#include "method.h" - -int pushlocal(Classfile *c) /* push value from local (or params) */ -{ - int pcval = currpc - 1; - int val; - Type idtype = VOID; - if (ch < 0x1A) { - val = JDNEXT8S(); - switch (ch) { - case 0x15: idtype = INT; break; - case 0x16: idtype = LONG; break; - case 0x17: idtype = FLOAT; break; - case 0x18: idtype = DOUBLE; break; - case 0x19: idtype = OBJECT; break; - } - } else if (ch < 0x1E) { - val = ch - 0x1A; - idtype = INT; - } else if (ch < 0x22) { - val = ch - 0x1E; - idtype = LONG; - } else if (ch < 0x26) { - val = ch - 0x22; - idtype = FLOAT; - } else if (ch < 0x2A) { - val = ch - 0x26; - idtype = DOUBLE; - } else /* if (ch < 0x2E) */ { - val = ch - 0x2A; - idtype = OBJECT; - } - char *tmpstr = miptr->local_names[val], *idname; - if (tmpstr) { - idname = new char[strlen(tmpstr) + 1]; - strcpy(idname, tmpstr); - } else { - fprintf(stderr, "Error in code: local used before defined.\n"); - return 1; - } - Exp *e = new Exp(pcval, idname, idtype, LO, val); -// if((lastaction == 16)&&(!strcmp((*(donestkptr-1))->exp1->e->id->name,id->name))) { -// *stkptr++ = *(--donestkptr); - *stkptr++ = e; -// } else { -// *stkptr++ = e; -// } - return 0; -} +/* d2-pushl.cpp */ +/* + Java Decompiler + Copyright (c) 1994-2003, Pete Ryland. + Distributed under the GNU GPL Version 2. + This package is available from http://pdr.cx/hbd/ +*/ + +#include "general.h" +#include "exp.h" +#include "decomp.h" +#include "method.h" + +int pushlocal(Classfile *c) /* push value from local (or params) */ +{ + int pcval = currpc - 1; + int val; + Type idtype = VOID; + if (ch < 0x1A) { + val = JDNEXT8S(); + switch (ch) { + case 0x15: idtype = INT; break; + case 0x16: idtype = LONG; break; + case 0x17: idtype = FLOAT; break; + case 0x18: idtype = DOUBLE; break; + case 0x19: idtype = OBJECT; break; + } + } else if (ch < 0x1E) { + val = ch - 0x1A; + idtype = INT; + } else if (ch < 0x22) { + val = ch - 0x1E; + idtype = LONG; + } else if (ch < 0x26) { + val = ch - 0x22; + idtype = FLOAT; + } else if (ch < 0x2A) { + val = ch - 0x26; + idtype = DOUBLE; + } else /* if (ch < 0x2E) */ { + val = ch - 0x2A; + idtype = OBJECT; + } + char *tmpstr = miptr->local_names[val], *idname; + if (tmpstr) { + idname = new char[strlen(tmpstr) + 1]; + strcpy(idname, tmpstr); + } else { + fprintf(stderr, "Error in code: local used before defined.\n"); + return 1; + } + Exp *e = new Exp(pcval, idname, idtype, LO, val); +// if((lastaction == 16)&&(!strcmp((*(donestkptr-1))->exp1->e->id->name,id->name))) { +// *stkptr++ = *(--donestkptr); + *stkptr++ = e; +// } else { +// *stkptr++ = e; +// } + return 0; +} Index: llvm-test/MultiSource/Applications/hbd/d3-popl.cpp diff -u llvm-test/MultiSource/Applications/hbd/d3-popl.cpp:1.1 llvm-test/MultiSource/Applications/hbd/d3-popl.cpp:1.2 --- llvm-test/MultiSource/Applications/hbd/d3-popl.cpp:1.1 Fri Feb 27 12:06:48 2004 +++ llvm-test/MultiSource/Applications/hbd/d3-popl.cpp Fri May 13 13:10:43 2005 @@ -1,116 +1,116 @@ -/* d3-popl.cpp */ -/* - Java Decompiler - Copyright (c) 1994-2003, Pete Ryland. - Distributed under the GNU GPL Version 2. - This package is available from http://pdr.cx/hbd/ -*/ - -#include -#include "exp.h" -#include "class.h" -#include "decomp.h" -#include "cp.h" - -int storelocal(Classfile *c) /* pop value to local (including params) */ -{ - unsigned pcval = currpc - 1; - int val; - Type idtype = VOID; - if (ch < 0x3B) { - switch (ch) { - case 0x36: idtype = INT; break; - case 0x37: idtype = LONG; break; - case 0x38: idtype = FLOAT; break; - case 0x39: idtype = DOUBLE; break; - case 0x3A: idtype = OBJECT; break; - } - val = JDNEXT8S(); - } else if (ch < 0x3F) { - val = ch - 0x3B; - idtype = INT; - } else if (ch < 0x43) { - val = ch - 0x3F; - idtype = LONG; - } else if (ch < 0x47) { - val = ch - 0x43; - idtype = FLOAT; - } else if (ch < 0x4B) { - val = ch - 0x47; - idtype = DOUBLE; - } else { - val = ch - 0x4B; - idtype = OBJECT; - } -// if (val) { - char *tmpstr = miptr->local_names[val], *idname; - if (tmpstr) { - idname = new char[strlen(tmpstr) + 1]; - strcpy(idname, tmpstr); - idtype = miptr->local_types[val]; - } else { - idname = miptr->local_names[val] = new char[7]; - sprintf(idname, "var%d", val); - if ((miptr->local_types[val] == VOID)||(miptr->local_types[val] == UNKNOWN)) { - if (idtype != INT) - miptr->local_types[val] = idtype; - else - miptr->local_types[val] = UNKNOWN; - } - } - Exp *e1 = new Exp(pcval, idname, idtype, LO, val); - Exp *e2 = *(--stkptr); - Exp *e = new Exp(pcval, min(pcval, e2->minpc), BINARY, idtype, ASSIGN, e1, e2); - if (!tmpstr) miptr->local_firstuses[val] = e->minpc; - if ((e2->e->type == INT) && (e1->e->type == BOOLEAN)) - if ((e2->e == std_exps + 2)||(e2->e == std_exps + 3)) /* 0 or 1 */ - e2->e += 13; /* false or true */ - else - /* CMPEQ */; - *donestkptr++ = e; - return 0; -} - -int iinclocal(Classfile *c) /* increment local by value */ -{ - int pcval = currpc - 1; - int val; - val = JDNEXT8S(); - char *id1name; - char *tmpstr = miptr->local_names[val]; - if (tmpstr) { -// id1name = new char[strlen(tmpstr) + 1]; -// strcpy(id1name, tmpstr); - id1name = tmpstr; - } else { - printf("Local int used before defined.\n"); - return 1; - } - if (miptr->local_types[val] == UNKNOWN) miptr->local_types[val] = INT; -// if (miptr->local_types[val] == UNKNOWN) miptr->local_types[val] = INT; -// if (miptr->local_types[val] == VOID) miptr->local_types[val] = INT; - if ((miptr->local_types[val] != INT)&&(miptr->local_types[val] != SHORT)) { - printf("Incrementation of local var%d of type %d i.e. %s.\n", val, miptr->local_types[val], type2str[miptr->local_types[val]]); - return 1; - } - int incnum = JDNEXT8S(); -// id2->linfo = incnum; - Exp *e; - if ((incnum!=1)&&(incnum!=-1)) { - Exp *e1 = new Exp(pcval, id1name, INT, LO, val); - char *id2name = new char[5]; sprintf(id2name, "%ld", labs(incnum)); - Exp *e2 = new Exp(pcval, id2name, INT, IM); - e = new Exp(pcval, BINARY, INT, (incnum<0)?SUBASSIGN:ADDASSIGN, e1, e2); - } else { - Exp *e1 = new Exp(pcval, id1name, INT, LO, val); - e = new Exp(pcval, PREUNARY, INT, (incnum<0)?DEC:INC, e1); - } - - if ((lastaction == 4)&&(!strcmp((*(stkptr-1))->e->id->name,id1name))) { - e->e->et = POSTUNARY; e->minpc = min(e->minpc, (*(stkptr-1))->minpc); - *(stkptr-1) = e; - } else { - *donestkptr++ = e; - } - return 0; -} +/* d3-popl.cpp */ +/* + Java Decompiler + Copyright (c) 1994-2003, Pete Ryland. + Distributed under the GNU GPL Version 2. + This package is available from http://pdr.cx/hbd/ +*/ + +#include +#include "exp.h" +#include "class.h" +#include "decomp.h" +#include "cp.h" + +int storelocal(Classfile *c) /* pop value to local (including params) */ +{ + unsigned pcval = currpc - 1; + int val; + Type idtype = VOID; + if (ch < 0x3B) { + switch (ch) { + case 0x36: idtype = INT; break; + case 0x37: idtype = LONG; break; + case 0x38: idtype = FLOAT; break; + case 0x39: idtype = DOUBLE; break; + case 0x3A: idtype = OBJECT; break; + } + val = JDNEXT8S(); + } else if (ch < 0x3F) { + val = ch - 0x3B; + idtype = INT; + } else if (ch < 0x43) { + val = ch - 0x3F; + idtype = LONG; + } else if (ch < 0x47) { + val = ch - 0x43; + idtype = FLOAT; + } else if (ch < 0x4B) { + val = ch - 0x47; + idtype = DOUBLE; + } else { + val = ch - 0x4B; + idtype = OBJECT; + } +// if (val) { + char *tmpstr = miptr->local_names[val], *idname; + if (tmpstr) { + idname = new char[strlen(tmpstr) + 1]; + strcpy(idname, tmpstr); + idtype = miptr->local_types[val]; + } else { + idname = miptr->local_names[val] = new char[7]; + sprintf(idname, "var%d", val); + if ((miptr->local_types[val] == VOID)||(miptr->local_types[val] == UNKNOWN)) { + if (idtype != INT) + miptr->local_types[val] = idtype; + else + miptr->local_types[val] = UNKNOWN; + } + } + Exp *e1 = new Exp(pcval, idname, idtype, LO, val); + Exp *e2 = *(--stkptr); + Exp *e = new Exp(pcval, min(pcval, e2->minpc), BINARY, idtype, ASSIGN, e1, e2); + if (!tmpstr) miptr->local_firstuses[val] = e->minpc; + if ((e2->e->type == INT) && (e1->e->type == BOOLEAN)) + if ((e2->e == std_exps + 2)||(e2->e == std_exps + 3)) /* 0 or 1 */ + e2->e += 13; /* false or true */ + else + /* CMPEQ */; + *donestkptr++ = e; + return 0; +} + +int iinclocal(Classfile *c) /* increment local by value */ +{ + int pcval = currpc - 1; + int val; + val = JDNEXT8S(); + char *id1name; + char *tmpstr = miptr->local_names[val]; + if (tmpstr) { +// id1name = new char[strlen(tmpstr) + 1]; +// strcpy(id1name, tmpstr); + id1name = tmpstr; + } else { + printf("Local int used before defined.\n"); + return 1; + } + if (miptr->local_types[val] == UNKNOWN) miptr->local_types[val] = INT; +// if (miptr->local_types[val] == UNKNOWN) miptr->local_types[val] = INT; +// if (miptr->local_types[val] == VOID) miptr->local_types[val] = INT; + if ((miptr->local_types[val] != INT)&&(miptr->local_types[val] != SHORT)) { + printf("Incrementation of local var%d of type %d i.e. %s.\n", val, miptr->local_types[val], type2str[miptr->local_types[val]]); + return 1; + } + int incnum = JDNEXT8S(); +// id2->linfo = incnum; + Exp *e; + if ((incnum!=1)&&(incnum!=-1)) { + Exp *e1 = new Exp(pcval, id1name, INT, LO, val); + char *id2name = new char[5]; sprintf(id2name, "%ld", labs(incnum)); + Exp *e2 = new Exp(pcval, id2name, INT, IM); + e = new Exp(pcval, BINARY, INT, (incnum<0)?SUBASSIGN:ADDASSIGN, e1, e2); + } else { + Exp *e1 = new Exp(pcval, id1name, INT, LO, val); + e = new Exp(pcval, PREUNARY, INT, (incnum<0)?DEC:INC, e1); + } + + if ((lastaction == 4)&&(!strcmp((*(stkptr-1))->e->id->name,id1name))) { + e->e->et = POSTUNARY; e->minpc = min(e->minpc, (*(stkptr-1))->minpc); + *(stkptr-1) = e; + } else { + *donestkptr++ = e; + } + return 0; +} Index: llvm-test/MultiSource/Applications/hbd/d4-array.cpp diff -u llvm-test/MultiSource/Applications/hbd/d4-array.cpp:1.1 llvm-test/MultiSource/Applications/hbd/d4-array.cpp:1.2 --- llvm-test/MultiSource/Applications/hbd/d4-array.cpp:1.1 Fri Feb 27 12:06:48 2004 +++ llvm-test/MultiSource/Applications/hbd/d4-array.cpp Fri May 13 13:10:44 2005 @@ -1,68 +1,68 @@ -/* d4-array.cpp */ -/* - Java Decompiler - Copyright (c) 1994-2003, Pete Ryland. - Distributed under the GNU GPL Version 2. - This package is available from http://pdr.cx/hbd/ -*/ - -#include "exp.h" -#include "class.h" -#include "decomp.h" -#include "cp.h" - -int anewarray(Classfile *c) -{ - unsigned pcval = currpc - 1; - int val = JDNEXT16U(); - char *class_name = c->cp(val)->chp; - Exp *e1 = new Exp(pcval, class_name, VOID, NO); - Exp *e2 = new Exp(pcval, ARRAYACCESS, VOID, ID, e1, *(stkptr-1)); - *(stkptr-1) = new Exp(pcval, min(pcval, e2->exp2->minpc), PREUNARY, ARRAY, NEW, e2); - return 0; -} - -int multianewarray(Classfile *c) -{ - printf("Multi"); - unsigned pcval = currpc - 1; - /*int val = */JDNEXT16U(); -// char *class_name; // = c->constant_pool[c->constant_pool[val].i].cp; -// for (val = JDNEXT8U(); val--;) { -// --stkptr; -// } stkptr++; - Exp *e1 = *(stkptr-1); - *(stkptr-1) = new Exp(pcval, min(pcval, e1->minpc), PREUNARY, ARRAY, NEW, e1); - return 0; -} - -int doarraylength(Classfile *c) /* 190 == 0xBE */ -{ - unsigned pcval = currpc - 1; - Exp *e1 = *(stkptr-1); - Exp *e2 = new Exp(pcval, "length", VOID, NO); - *(stkptr-1) = new Exp(pcval, min(pcval, e1->minpc), BINARY, INT, DOT, e1, e2); - return 0; -} - -int doarrayget(Classfile *c) -{ - unsigned pcval = currpc - 1; - Exp *e2 = *(--stkptr); - Exp *e1 = *(stkptr-1); - *(stkptr-1) = new Exp(pcval, min(min(pcval, e1->minpc), e2->minpc), ARRAYACCESS, - (Type)(ch - (0x2E - INT)), ID, e1, e2); - return 0; -} - -int doarrayput(Classfile *c) -{ - unsigned pcval = currpc - 1; - Exp *e4 = *(--stkptr); - Exp *e3 = *(--stkptr); - Exp *e2 = *(--stkptr); - unsigned minpcval = min(min(pcval, e2->minpc), e3->minpc); - Exp *e1 = new Exp(pcval, minpcval, ARRAYACCESS, OBJECT, ID, e2, e3); - *donestkptr++ = new Exp(pcval, minpcval, BINARY, OBJECT, ASSIGN, e1, e4); - return 0; -} +/* d4-array.cpp */ +/* + Java Decompiler + Copyright (c) 1994-2003, Pete Ryland. + Distributed under the GNU GPL Version 2. + This package is available from http://pdr.cx/hbd/ +*/ + +#include "exp.h" +#include "class.h" +#include "decomp.h" +#include "cp.h" + +int anewarray(Classfile *c) +{ + unsigned pcval = currpc - 1; + int val = JDNEXT16U(); + char *class_name = c->cp(val)->chp; + Exp *e1 = new Exp(pcval, class_name, VOID, NO); + Exp *e2 = new Exp(pcval, ARRAYACCESS, VOID, ID, e1, *(stkptr-1)); + *(stkptr-1) = new Exp(pcval, min(pcval, e2->exp2->minpc), PREUNARY, ARRAY, NEW, e2); + return 0; +} + +int multianewarray(Classfile *c) +{ + printf("Multi"); + unsigned pcval = currpc - 1; + /*int val = */JDNEXT16U(); +// char *class_name; // = c->constant_pool[c->constant_pool[val].i].cp; +// for (val = JDNEXT8U(); val--;) { +// --stkptr; +// } stkptr++; + Exp *e1 = *(stkptr-1); + *(stkptr-1) = new Exp(pcval, min(pcval, e1->minpc), PREUNARY, ARRAY, NEW, e1); + return 0; +} + +int doarraylength(Classfile *c) /* 190 == 0xBE */ +{ + unsigned pcval = currpc - 1; + Exp *e1 = *(stkptr-1); + Exp *e2 = new Exp(pcval, "length", VOID, NO); + *(stkptr-1) = new Exp(pcval, min(pcval, e1->minpc), BINARY, INT, DOT, e1, e2); + return 0; +} + +int doarrayget(Classfile *c) +{ + unsigned pcval = currpc - 1; + Exp *e2 = *(--stkptr); + Exp *e1 = *(stkptr-1); + *(stkptr-1) = new Exp(pcval, min(min(pcval, e1->minpc), e2->minpc), ARRAYACCESS, + (Type)(ch - (0x2E - INT)), ID, e1, e2); + return 0; +} + +int doarrayput(Classfile *c) +{ + unsigned pcval = currpc - 1; + Exp *e4 = *(--stkptr); + Exp *e3 = *(--stkptr); + Exp *e2 = *(--stkptr); + unsigned minpcval = min(min(pcval, e2->minpc), e3->minpc); + Exp *e1 = new Exp(pcval, minpcval, ARRAYACCESS, OBJECT, ID, e2, e3); + *donestkptr++ = new Exp(pcval, minpcval, BINARY, OBJECT, ASSIGN, e1, e4); + return 0; +} Index: llvm-test/MultiSource/Applications/hbd/d5-stack.cpp diff -u llvm-test/MultiSource/Applications/hbd/d5-stack.cpp:1.1 llvm-test/MultiSource/Applications/hbd/d5-stack.cpp:1.2 --- llvm-test/MultiSource/Applications/hbd/d5-stack.cpp:1.1 Fri Feb 27 12:06:48 2004 +++ llvm-test/MultiSource/Applications/hbd/d5-stack.cpp Fri May 13 13:10:44 2005 @@ -1,39 +1,39 @@ -/* d5-stack.cpp */ -/* - Java Decompiler - Copyright (c) 1994-2003, Pete Ryland. - Distributed under the GNU GPL Version 2. - This package is available from http://pdr.cx/hbd/ -*/ - -#include "exp.h" -#include "class.h" -#include "decomp.h" -#include "cp.h" - -int dopop(Classfile *c) -{ - if (stkptr != stack) *donestkptr++ = *(--stkptr); - return 0; -} - - -int dodup(Classfile *c) -{ - if ((*(stkptr-1))->e->op != NEW) { - *stkptr = *(stkptr-1); - (*stkptr)->numrefs++; - stkptr++; - } - return 0; -} - -int dodup_x1(Classfile *c) -{ - *stkptr = *(stkptr-1); - *(stkptr-1) = *(stkptr-2); - *(stkptr-2) = *stkptr; - (*stkptr)->numrefs++; - stkptr++; - return 0; -} +/* d5-stack.cpp */ +/* + Java Decompiler + Copyright (c) 1994-2003, Pete Ryland. + Distributed under the GNU GPL Version 2. + This package is available from http://pdr.cx/hbd/ +*/ + +#include "exp.h" +#include "class.h" +#include "decomp.h" +#include "cp.h" + +int dopop(Classfile *c) +{ + if (stkptr != stack) *donestkptr++ = *(--stkptr); + return 0; +} + + +int dodup(Classfile *c) +{ + if ((*(stkptr-1))->e->op != NEW) { + *stkptr = *(stkptr-1); + (*stkptr)->numrefs++; + stkptr++; + } + return 0; +} + +int dodup_x1(Classfile *c) +{ + *stkptr = *(stkptr-1); + *(stkptr-1) = *(stkptr-2); + *(stkptr-2) = *stkptr; + (*stkptr)->numrefs++; + stkptr++; + return 0; +} Index: llvm-test/MultiSource/Applications/hbd/d6-arith.cpp diff -u llvm-test/MultiSource/Applications/hbd/d6-arith.cpp:1.1 llvm-test/MultiSource/Applications/hbd/d6-arith.cpp:1.2 --- llvm-test/MultiSource/Applications/hbd/d6-arith.cpp:1.1 Fri Feb 27 12:06:48 2004 +++ llvm-test/MultiSource/Applications/hbd/d6-arith.cpp Fri May 13 13:10:44 2005 @@ -1,99 +1,99 @@ -/* d6-arith.cpp */ -/* - Java Decompiler - Copyright (c) 1994-2003, Pete Ryland. - Distributed under the GNU GPL Version 2. - This package is available from http://pdr.cx/hbd/ -*/ - -#include "exp.h" -#include "class.h" -#include "decomp.h" -#include "cp.h" - -extern int cond_pcend; -extern Exp *cond_e; -extern Exp *cond_e2; -extern Exp **cond_donestkptr; -extern Exp **cond_stkptr; - -int pushbinop(Classfile *c) /* push binary operation, popping operands e.g. lxor */ -{ - unsigned pcval = currpc - 1; - Exp *e2 = *(--stkptr); - Exp *e1 = *(stkptr-1); - *(stkptr-1) = new Exp(pcval, min(min(e1->minpc, e2->minpc), pcval), BINARY, - e1->e->type, - (Op)((ch < 0x74)? - ((ch - 0x60) >> 2) : (0x07 + ((ch - 0x78) >> 1))), - e1, e2); - return 0; -} - -int pushunop(Classfile *c) /* push unary operation, popping operand e.g. lneg */ -{ - unsigned pcval = currpc - 1, branch_pc; - char *tmpstr, *buff; - Exp *e1 = *(stkptr-1); - Op eop = CAST; - Type etype = VOID; - int val; - switch (ch) { - case 0x74: case 0x75: case 0x76: case 0x77: eop = NEG; etype = e1->e->type; break; - case 0x88: case 0x8B: case 0x8E: etype = INT; break; - case 0x85: case 0x8C: case 0x8F: etype = LONG; break; - case 0x86: case 0x89: case 0x90: etype = FLOAT; break; - case 0x87: case 0x8A: case 0x8D: etype = DOUBLE; break; - case 0x91: etype = BYTE; break; - case 0x92: etype = CHAR; break; - case 0x93: etype = SHORT; break; - case 0xBF: - --stkptr; - *donestkptr++ = new Exp(pcval, min(e1->minpc, pcval), PREUNARY, VOID, THROW, e1); - return 0; - case 0xBB: - val = JDNEXT16U(); - tmpstr = c->cp(val)->chp; - buff = new char[strlen(tmpstr) + 1]; strcpy(buff, tmpstr); - e1 = new Exp(pcval, buff, VOID, CP, val); - *(stkptr++) = new Exp(pcval, min(e1->minpc, pcval), PREUNARY, OBJECT, NEW, e1); -// if ((ch = JDNEXT8()) == 0x59) -// return actiontable[actions[ch = JDNEXT8()]](); -// else -// return actiontable[actions[ch]](); - case 0xBA: eop = NEW; break; - case 0xA7: /* GOTO really shouldn't be here! */ - if (stkptr!=stack) { -// if (stkptr!=(stack+1)) { fprintf(stderr, "Error in conditional operator!\n"); return 1; } - if (cond_pcend != -1) { fprintf(stderr, "Can't handle recursive conditional operators!\n"); return 1; } - cond_pcend = pcval + JDNEXT16S(); - cond_stkptr = stkptr; - cond_e2 = *(--stkptr); - --donestkptr; - if ((*donestkptr)->e->et == BRANCH) { - if ((*donestkptr)->branch_pc != currpc) { - fprintf(stderr, "Error in conditional operator!\n"); return 1; - } - cond_e = *donestkptr; - } else { - fprintf(stderr, "Use of comma operator in conditionals not yet supported.\n"); - return 1; - } - cond_donestkptr = donestkptr; - return 0; - } - branch_pc = pcval + JDNEXT16S(); - tmpstr = new char[100]; - sprintf(tmpstr,"label%i", branch_pc); - buff = new char[strlen(tmpstr) + 1]; strcpy(buff, tmpstr); - delete tmpstr; - e1 = new Exp(pcval, buff, VOID/*label*/, IM); - *donestkptr++ = new Exp(pcval, PREUNARY, VOID, GOTO, e1, branch_pc); - return 0; - default: - fprintf(stderr, "Error in pushing unary operation\n"); - exit(-1); - } - *(stkptr-1) = new Exp(pcval, min(e1->minpc, pcval), PREUNARY, etype, eop, e1); - return 0; -} +/* d6-arith.cpp */ +/* + Java Decompiler + Copyright (c) 1994-2003, Pete Ryland. + Distributed under the GNU GPL Version 2. + This package is available from http://pdr.cx/hbd/ +*/ + +#include "exp.h" +#include "class.h" +#include "decomp.h" +#include "cp.h" + +extern int cond_pcend; +extern Exp *cond_e; +extern Exp *cond_e2; +extern Exp **cond_donestkptr; +extern Exp **cond_stkptr; + +int pushbinop(Classfile *c) /* push binary operation, popping operands e.g. lxor */ +{ + unsigned pcval = currpc - 1; + Exp *e2 = *(--stkptr); + Exp *e1 = *(stkptr-1); + *(stkptr-1) = new Exp(pcval, min(min(e1->minpc, e2->minpc), pcval), BINARY, + e1->e->type, + (Op)((ch < 0x74)? + ((ch - 0x60) >> 2) : (0x07 + ((ch - 0x78) >> 1))), + e1, e2); + return 0; +} + +int pushunop(Classfile *c) /* push unary operation, popping operand e.g. lneg */ +{ + unsigned pcval = currpc - 1, branch_pc; + char *tmpstr, *buff; + Exp *e1 = *(stkptr-1); + Op eop = CAST; + Type etype = VOID; + int val; + switch (ch) { + case 0x74: case 0x75: case 0x76: case 0x77: eop = NEG; etype = e1->e->type; break; + case 0x88: case 0x8B: case 0x8E: etype = INT; break; + case 0x85: case 0x8C: case 0x8F: etype = LONG; break; + case 0x86: case 0x89: case 0x90: etype = FLOAT; break; + case 0x87: case 0x8A: case 0x8D: etype = DOUBLE; break; + case 0x91: etype = BYTE; break; + case 0x92: etype = CHAR; break; + case 0x93: etype = SHORT; break; + case 0xBF: + --stkptr; + *donestkptr++ = new Exp(pcval, min(e1->minpc, pcval), PREUNARY, VOID, THROW, e1); + return 0; + case 0xBB: + val = JDNEXT16U(); + tmpstr = c->cp(val)->chp; + buff = new char[strlen(tmpstr) + 1]; strcpy(buff, tmpstr); + e1 = new Exp(pcval, buff, VOID, CP, val); + *(stkptr++) = new Exp(pcval, min(e1->minpc, pcval), PREUNARY, OBJECT, NEW, e1); +// if ((ch = JDNEXT8()) == 0x59) +// return actiontable[actions[ch = JDNEXT8()]](); +// else +// return actiontable[actions[ch]](); + case 0xBA: eop = NEW; break; + case 0xA7: /* GOTO really shouldn't be here! */ + if (stkptr!=stack) { +// if (stkptr!=(stack+1)) { fprintf(stderr, "Error in conditional operator!\n"); return 1; } + if (cond_pcend != -1) { fprintf(stderr, "Can't handle recursive conditional operators!\n"); return 1; } + cond_pcend = pcval + JDNEXT16S(); + cond_stkptr = stkptr; + cond_e2 = *(--stkptr); + --donestkptr; + if ((*donestkptr)->e->et == BRANCH) { + if ((*donestkptr)->branch_pc != currpc) { + fprintf(stderr, "Error in conditional operator!\n"); return 1; + } + cond_e = *donestkptr; + } else { + fprintf(stderr, "Use of comma operator in conditionals not yet supported.\n"); + return 1; + } + cond_donestkptr = donestkptr; + return 0; + } + branch_pc = pcval + JDNEXT16S(); + tmpstr = new char[100]; + sprintf(tmpstr,"label%i", branch_pc); + buff = new char[strlen(tmpstr) + 1]; strcpy(buff, tmpstr); + delete tmpstr; + e1 = new Exp(pcval, buff, VOID/*label*/, IM); + *donestkptr++ = new Exp(pcval, PREUNARY, VOID, GOTO, e1, branch_pc); + return 0; + default: + fprintf(stderr, "Error in pushing unary operation\n"); + exit(-1); + } + *(stkptr-1) = new Exp(pcval, min(e1->minpc, pcval), PREUNARY, etype, eop, e1); + return 0; +} Index: llvm-test/MultiSource/Applications/hbd/d7-cntrl.cpp diff -u llvm-test/MultiSource/Applications/hbd/d7-cntrl.cpp:1.1 llvm-test/MultiSource/Applications/hbd/d7-cntrl.cpp:1.2 --- llvm-test/MultiSource/Applications/hbd/d7-cntrl.cpp:1.1 Fri Feb 27 12:06:48 2004 +++ llvm-test/MultiSource/Applications/hbd/d7-cntrl.cpp Fri May 13 13:10:44 2005 @@ -1,84 +1,84 @@ -/* d7-cntrl.cpp */ -/* - Java Decompiler - Copyright (c) 1994-2003, Pete Ryland. - Distributed under the GNU GPL Version 2. - This package is available from http://pdr.cx/hbd/ -*/ - -#include "exp.h" -#include "class.h" -#include "decomp.h" -#include "cp.h" - -int cond_pcend; -Exp *cond_e; -Exp *cond_e2; -Exp **cond_donestkptr; -Exp **cond_stkptr; - -int doif1(Classfile *c) -{ - unsigned pcval = currpc - 1; - Exp *e = *(--stkptr), *e1, *e2; - switch (e->e->type) { - case CMPTYPE: - if (e->e->op != CMP) { fprintf(stderr, "doif1 error\n"); return 1; } - e->e->op = (Op)(EQUAL + ch - 0x99); e->e->type = BOOLEAN; - break; - case BOOLEAN: - if (ch == 0x99) // ifeq (ie if false) - if (notexp(&e)) { fprintf(stderr, "doif1 error\n"); return 1; } - break; - case INT: - e1 = *stkptr; e2 = new Exp(pcval, I0EXP); - e = new Exp(pcval, e1->minpc, BINARY, BOOLEAN, (Op)(EQUAL + ch - 0x99), e1, e2); - break; - case OBJECT: - e1 = *stkptr; e2 = new Exp(pcval, NULLEXP); - e = new Exp(pcval, e1->minpc, BINARY, BOOLEAN, (Op)(EQUAL + ch - 0xC6), e1, e2); - break; - default: - break; - } - *donestkptr++ = new Exp(pcval, e->minpc, IFEXP, e, pcval + JDNEXT16S()); - return 0; -} - -int doif2(Classfile *c) -{ - unsigned pcval = currpc - 1; - Exp *e2 = *(--stkptr); - Exp *e1 = *(--stkptr); - Exp *e = new Exp(pcval, min(e1->minpc, e2->minpc), BINARY, BOOLEAN, - (Op)(EQUAL + ((ch - 0x9F) % 6)), e1, e2); - *donestkptr++ = new Exp(pcval, e->minpc, /*std_exp*/IFEXP, e, - /*branch_pc*/pcval + JDNEXT16S()); - return 0; -} - -int docmp(Classfile *c) -{ - unsigned pcval = currpc - 1; - Exp *e2 = *(--stkptr); - Exp *e1 = *(stkptr-1); - *(stkptr-1) = new Exp(pcval, min(e1->minpc, e2->minpc), BINARY, CMPTYPE, CMP, e1, e2); - return 0; -} - -int finishconditional(Classfile *c) { - if ((stkptr != cond_stkptr) || (donestkptr != cond_donestkptr)) - { fprintf(stderr, "Error cond\n"); return 1; } - cond_e->e++; - if ((cond_e->exp1->e->op > LESSOREQUAL) || (cond_e->exp1->e->op < EQUAL)) { - if (cond_e->exp1->e->type != BOOLEAN) { fprintf(stderr, "Can't not a non-boolean\n"); return 1; } - Exp *e1 = cond_e->exp1; - cond_e->exp1 = new Exp(currpc, e1->minpc, PREUNARY, BOOLEAN, NOT_BOOL, e1); - } else { - *((int*)(&cond_e->exp1->e->op)) ^= 1; - } - cond_e->exp2 = cond_e2; cond_e->exp3 = *(stkptr-1); - *(stkptr-1) = cond_e; - cond_pcend = -1; - return 0; -} +/* d7-cntrl.cpp */ +/* + Java Decompiler + Copyright (c) 1994-2003, Pete Ryland. + Distributed under the GNU GPL Version 2. + This package is available from http://pdr.cx/hbd/ +*/ + +#include "exp.h" +#include "class.h" +#include "decomp.h" +#include "cp.h" + +int cond_pcend; +Exp *cond_e; +Exp *cond_e2; +Exp **cond_donestkptr; +Exp **cond_stkptr; + +int doif1(Classfile *c) +{ + unsigned pcval = currpc - 1; + Exp *e = *(--stkptr), *e1, *e2; + switch (e->e->type) { + case CMPTYPE: + if (e->e->op != CMP) { fprintf(stderr, "doif1 error\n"); return 1; } + e->e->op = (Op)(EQUAL + ch - 0x99); e->e->type = BOOLEAN; + break; + case BOOLEAN: + if (ch == 0x99) // ifeq (ie if false) + if (notexp(&e)) { fprintf(stderr, "doif1 error\n"); return 1; } + break; + case INT: + e1 = *stkptr; e2 = new Exp(pcval, I0EXP); + e = new Exp(pcval, e1->minpc, BINARY, BOOLEAN, (Op)(EQUAL + ch - 0x99), e1, e2); + break; + case OBJECT: + e1 = *stkptr; e2 = new Exp(pcval, NULLEXP); + e = new Exp(pcval, e1->minpc, BINARY, BOOLEAN, (Op)(EQUAL + ch - 0xC6), e1, e2); + break; + default: + break; + } + *donestkptr++ = new Exp(pcval, e->minpc, IFEXP, e, pcval + JDNEXT16S()); + return 0; +} + +int doif2(Classfile *c) +{ + unsigned pcval = currpc - 1; + Exp *e2 = *(--stkptr); + Exp *e1 = *(--stkptr); + Exp *e = new Exp(pcval, min(e1->minpc, e2->minpc), BINARY, BOOLEAN, + (Op)(EQUAL + ((ch - 0x9F) % 6)), e1, e2); + *donestkptr++ = new Exp(pcval, e->minpc, /*std_exp*/IFEXP, e, + /*branch_pc*/pcval + JDNEXT16S()); + return 0; +} + +int docmp(Classfile *c) +{ + unsigned pcval = currpc - 1; + Exp *e2 = *(--stkptr); + Exp *e1 = *(stkptr-1); + *(stkptr-1) = new Exp(pcval, min(e1->minpc, e2->minpc), BINARY, CMPTYPE, CMP, e1, e2); + return 0; +} + +int finishconditional(Classfile *c) { + if ((stkptr != cond_stkptr) || (donestkptr != cond_donestkptr)) + { fprintf(stderr, "Error cond\n"); return 1; } + cond_e->e++; + if ((cond_e->exp1->e->op > LESSOREQUAL) || (cond_e->exp1->e->op < EQUAL)) { + if (cond_e->exp1->e->type != BOOLEAN) { fprintf(stderr, "Can't not a non-boolean\n"); return 1; } + Exp *e1 = cond_e->exp1; + cond_e->exp1 = new Exp(currpc, e1->minpc, PREUNARY, BOOLEAN, NOT_BOOL, e1); + } else { + *((int*)(&cond_e->exp1->e->op)) ^= 1; + } + cond_e->exp2 = cond_e2; cond_e->exp3 = *(stkptr-1); + *(stkptr-1) = cond_e; + cond_pcend = -1; + return 0; +} Index: llvm-test/MultiSource/Applications/hbd/d8-ret.cpp diff -u llvm-test/MultiSource/Applications/hbd/d8-ret.cpp:1.1 llvm-test/MultiSource/Applications/hbd/d8-ret.cpp:1.2 --- llvm-test/MultiSource/Applications/hbd/d8-ret.cpp:1.1 Fri Feb 27 12:06:48 2004 +++ llvm-test/MultiSource/Applications/hbd/d8-ret.cpp Fri May 13 13:10:44 2005 @@ -1,35 +1,35 @@ -/* d8-ret.cpp */ -/* - Java Decompiler - Copyright (c) 1994-2003, Pete Ryland. - Distributed under the GNU GPL Version 2. - This package is available from http://pdr.cx/hbd/ -*/ - -#include "exp.h" -#include "class.h" -#include "decomp.h" -#include "cp.h" - -int doreturn(Classfile *c) /* push return op, popping operand e.g. ireturn LO3 */ -{ - unsigned pcval = currpc - 1; - if (ch == 0xB1) { - if (bufflength > 0) { - Exp *e1 = new Exp(pcval, "/* void */", VOID, IM); - *donestkptr++ = new Exp(pcval, PREUNARY, VOID, RETURN, e1); - } - } else { - Exp *e1 = *(stkptr-1); - if ((e1->e->type == INT) && (miptr->ret_type == BOOLEAN)) { - if ((e1->e == std_exps + 2)||(e1->e == std_exps + 3)) - e1->e += 13; /* convert 0 or 1 to false or true */ - else - /* CMPEQ */; - } - --stkptr; - *donestkptr++ = new Exp(pcval, min(pcval, e1->minpc), PREUNARY, VOID, RETURN, e1); - } - return 0; -} - +/* d8-ret.cpp */ +/* + Java Decompiler + Copyright (c) 1994-2003, Pete Ryland. + Distributed under the GNU GPL Version 2. + This package is available from http://pdr.cx/hbd/ +*/ + +#include "exp.h" +#include "class.h" +#include "decomp.h" +#include "cp.h" + +int doreturn(Classfile *c) /* push return op, popping operand e.g. ireturn LO3 */ +{ + unsigned pcval = currpc - 1; + if (ch == 0xB1) { + if (bufflength > 0) { + Exp *e1 = new Exp(pcval, "/* void */", VOID, IM); + *donestkptr++ = new Exp(pcval, PREUNARY, VOID, RETURN, e1); + } + } else { + Exp *e1 = *(stkptr-1); + if ((e1->e->type == INT) && (miptr->ret_type == BOOLEAN)) { + if ((e1->e == std_exps + 2)||(e1->e == std_exps + 3)) + e1->e += 13; /* convert 0 or 1 to false or true */ + else + /* CMPEQ */; + } + --stkptr; + *donestkptr++ = new Exp(pcval, min(pcval, e1->minpc), PREUNARY, VOID, RETURN, e1); + } + return 0; +} + Index: llvm-test/MultiSource/Applications/hbd/d9-swtch.cpp diff -u llvm-test/MultiSource/Applications/hbd/d9-swtch.cpp:1.1 llvm-test/MultiSource/Applications/hbd/d9-swtch.cpp:1.2 --- llvm-test/MultiSource/Applications/hbd/d9-swtch.cpp:1.1 Fri Feb 27 12:06:48 2004 +++ llvm-test/MultiSource/Applications/hbd/d9-swtch.cpp Fri May 13 13:10:44 2005 @@ -1,43 +1,43 @@ -/* d9-swtch.cpp */ -/* - Java Decompiler - Copyright (c) 1994-2003, Pete Ryland. - Distributed under the GNU GPL Version 2. - This package is available from http://pdr.cx/hbd/ -*/ - -#include "exp.h" -#include "class.h" -#include "decomp.h" -#include "cp.h" - -int dotableswitch(Classfile *c) -{ - unsigned pcval = currpc - 1; - while(currpc%4) JDNEXT8U(); - Exp *e1 = *(--stkptr); - unsigned defaultpc = JDNEXT32S(); - unsigned low = JDNEXT32S(), high = JDNEXT32S(), numcases = high - low + 1; - Case *tcase = new Case[numcases]; - *donestkptr++ = new Exp(pcval, e1->minpc, SWITCH, VOID, ID, e1, defaultpc, numcases, tcase); - for (unsigned m = low; m <= high;) { - tcase->caseval = m++; - (tcase++)->branch_pc = JDNEXT32S(); - } - return 0; -} - -int doluswitch(Classfile *c) -{ - unsigned pcval = currpc - 1; - while(currpc%4) JDNEXT8U(); - Exp *e1 = *(--stkptr); - unsigned defaultpc = JDNEXT32U(), numcases = JDNEXT32U(); - Case *tcase = new Case[numcases]; - *donestkptr++ = new Exp(pcval, e1->minpc, SWITCH, VOID, ID, e1, defaultpc, numcases, tcase); - for (unsigned m = numcases; m--;) { - tcase->caseval = JDNEXT32U(); - (tcase++)->branch_pc = JDNEXT32U(); - } - return 0; -} +/* d9-swtch.cpp */ +/* + Java Decompiler + Copyright (c) 1994-2003, Pete Ryland. + Distributed under the GNU GPL Version 2. + This package is available from http://pdr.cx/hbd/ +*/ + +#include "exp.h" +#include "class.h" +#include "decomp.h" +#include "cp.h" + +int dotableswitch(Classfile *c) +{ + unsigned pcval = currpc - 1; + while(currpc%4) JDNEXT8U(); + Exp *e1 = *(--stkptr); + unsigned defaultpc = JDNEXT32S(); + unsigned low = JDNEXT32S(), high = JDNEXT32S(), numcases = high - low + 1; + Case *tcase = new Case[numcases]; + *donestkptr++ = new Exp(pcval, e1->minpc, SWITCH, VOID, ID, e1, defaultpc, numcases, tcase); + for (unsigned m = low; m <= high;) { + tcase->caseval = m++; + (tcase++)->branch_pc = JDNEXT32S(); + } + return 0; +} + +int doluswitch(Classfile *c) +{ + unsigned pcval = currpc - 1; + while(currpc%4) JDNEXT8U(); + Exp *e1 = *(--stkptr); + unsigned defaultpc = JDNEXT32U(), numcases = JDNEXT32U(); + Case *tcase = new Case[numcases]; + *donestkptr++ = new Exp(pcval, e1->minpc, SWITCH, VOID, ID, e1, defaultpc, numcases, tcase); + for (unsigned m = numcases; m--;) { + tcase->caseval = JDNEXT32U(); + (tcase++)->branch_pc = JDNEXT32U(); + } + return 0; +} Index: llvm-test/MultiSource/Applications/hbd/da-field.cpp diff -u llvm-test/MultiSource/Applications/hbd/da-field.cpp:1.1 llvm-test/MultiSource/Applications/hbd/da-field.cpp:1.2 --- llvm-test/MultiSource/Applications/hbd/da-field.cpp:1.1 Fri Feb 27 12:06:48 2004 +++ llvm-test/MultiSource/Applications/hbd/da-field.cpp Fri May 13 13:10:44 2005 @@ -1,112 +1,112 @@ -/* da-field.cpp */ -/* - Java Decompiler - Copyright (c) 1994-2003, Pete Ryland. - Distributed under the GNU GPL Version 2. - This package is available from http://pdr.cx/hbd/ -*/ - -#include "exp.h" -#include "class.h" -#include "decomp.h" -#include "cp.h" -#include "field.h" - -int doget(Classfile *c) -{ - unsigned pcval = currpc - 1; - int val = JDNEXT16S(); - Ref *mr = (Ref*)c->cp[val]->p; - NameAndType *nt = (NameAndType*)c->cp[mr->name_and_type]->p; - char *tmpstr = c->cp[nt->name_index]->chp; - Exp *e = new Exp(pcval, tmpstr, sig2type(c->cp[nt->signature_index]->chp), CP, val); - if (ch == 0xB2) { /* getstatic */ - Exp *e1; - tmpstr = c->cp(mr->class_index)->chp; -// int tmpint = strlen(c->package_name); - if (strcmp(tmpstr, c->this_class_name)) { - Exp *e2 = new Exp(pcval, tmpstr, VOID, NO); - e1 = new Exp(pcval, BINARY, e->e->type, DOT, e2, e); - e->e->type = VOID; - } else { - e1 = e; - } - *stkptr++ = e1; - return 0; - } else { /* getfield */ - if (((*(stkptr-1))->e->et == IDENT) && !strcmp((*(stkptr-1))->e->id->name,"this")) { - /* this.bar == bar */ - e->minpc = min(pcval, (*(stkptr-1))->minpc); - *(stkptr-1) = e; return 0; - } else { - /* foo.bar */ - *(stkptr-1) = new Exp(pcval, min(pcval, (*(stkptr-1))->minpc), BINARY, - e->e->type, DOT, *(stkptr-1), e); - e->e->type = VOID; - return 0; - } - } -} - -int doput(Classfile *c) -{ - unsigned pcval = currpc - 1; - int val = JDNEXT16S(); - Ref *mr = (Ref*)c->cp[val]->p; - NameAndType *nt = (NameAndType*)c->cp[mr->name_and_type]->p; - char *tmpstr = c->cp[nt->name_index]->chp; - Exp *e = new Exp(pcval, tmpstr, sig2type(c->cp[nt->signature_index]->chp), NO); - if (ch == 0xB3) { /* putstatic */ - Exp *e1; - tmpstr = c->cp(mr->class_index)->chp; - if (strcmp(tmpstr, c->this_class_name)) { - Exp *e2 = new Exp(pcval, tmpstr, VOID, NO); - e1 = new Exp(pcval, BINARY, e->e->type, DOT, e2, e); - e->e->type = VOID; - } else { - e1 = e; - } - Exp *e3 = *(--stkptr); - if ((e3->e->type == INT) && (e1->e->type == BOOLEAN)) { - if ((e3->e == std_exps + 2)||(e3->e == std_exps + 3)) - e3->e += 13; - else - /* CMPEQ */; - } - *donestkptr++ = new Exp(pcval, min(pcval, e3->minpc), BINARY, - e1->e->type, ASSIGN, e1, e3); - return 0; - } else { /* putfield */ - Exp *e3 = *(stkptr-2); - if ((e3->e->et == IDENT) && !strcmp(e3->e->id->name,"this")) { - /* this.bar == bar */ - e3 = *(--stkptr); - if ((e3->e->type == INT) && (e->e->type == BOOLEAN)) { - if ((e3->e == std_exps + 2)||(e3->e == std_exps + 3)) - e3->e += 13; - else - /* CMPEQ */; - } - stkptr--; - *donestkptr++ = new Exp(pcval, min(min(pcval, (*stkptr)->minpc), - (*stkptr)->minpc), - BINARY, e->e->type, ASSIGN, e, e3); - return 0; - } else { - /* foo.bar */ - Exp *e1 = new Exp(pcval, min((*(stkptr-1))->minpc, pcval), BINARY, - e->e->type, DOT, e3, e); - e->e->type = VOID; - e3 = *(--stkptr); - if ((e3->e->type == INT) && (e1->e->type == BOOLEAN)) { - if ((e3->e == std_exps + 2)||(e3->e == std_exps + 3)) - e3->e += 13; - else - /* CMPEQ */; - } - *donestkptr++ = new Exp(pcval, min(e3->minpc, e1->minpc), BINARY, - e1->e->type, ASSIGN, e1, e3); - return 0; - } - } -} +/* da-field.cpp */ +/* + Java Decompiler + Copyright (c) 1994-2003, Pete Ryland. + Distributed under the GNU GPL Version 2. + This package is available from http://pdr.cx/hbd/ +*/ + +#include "exp.h" +#include "class.h" +#include "decomp.h" +#include "cp.h" +#include "field.h" + +int doget(Classfile *c) +{ + unsigned pcval = currpc - 1; + int val = JDNEXT16S(); + Ref *mr = (Ref*)c->cp[val]->p; + NameAndType *nt = (NameAndType*)c->cp[mr->name_and_type]->p; + char *tmpstr = c->cp[nt->name_index]->chp; + Exp *e = new Exp(pcval, tmpstr, sig2type(c->cp[nt->signature_index]->chp), CP, val); + if (ch == 0xB2) { /* getstatic */ + Exp *e1; + tmpstr = c->cp(mr->class_index)->chp; +// int tmpint = strlen(c->package_name); + if (strcmp(tmpstr, c->this_class_name)) { + Exp *e2 = new Exp(pcval, tmpstr, VOID, NO); + e1 = new Exp(pcval, BINARY, e->e->type, DOT, e2, e); + e->e->type = VOID; + } else { + e1 = e; + } + *stkptr++ = e1; + return 0; + } else { /* getfield */ + if (((*(stkptr-1))->e->et == IDENT) && !strcmp((*(stkptr-1))->e->id->name,"this")) { + /* this.bar == bar */ + e->minpc = min(pcval, (*(stkptr-1))->minpc); + *(stkptr-1) = e; return 0; + } else { + /* foo.bar */ + *(stkptr-1) = new Exp(pcval, min(pcval, (*(stkptr-1))->minpc), BINARY, + e->e->type, DOT, *(stkptr-1), e); + e->e->type = VOID; + return 0; + } + } +} + +int doput(Classfile *c) +{ + unsigned pcval = currpc - 1; + int val = JDNEXT16S(); + Ref *mr = (Ref*)c->cp[val]->p; + NameAndType *nt = (NameAndType*)c->cp[mr->name_and_type]->p; + char *tmpstr = c->cp[nt->name_index]->chp; + Exp *e = new Exp(pcval, tmpstr, sig2type(c->cp[nt->signature_index]->chp), NO); + if (ch == 0xB3) { /* putstatic */ + Exp *e1; + tmpstr = c->cp(mr->class_index)->chp; + if (strcmp(tmpstr, c->this_class_name)) { + Exp *e2 = new Exp(pcval, tmpstr, VOID, NO); + e1 = new Exp(pcval, BINARY, e->e->type, DOT, e2, e); + e->e->type = VOID; + } else { + e1 = e; + } + Exp *e3 = *(--stkptr); + if ((e3->e->type == INT) && (e1->e->type == BOOLEAN)) { + if ((e3->e == std_exps + 2)||(e3->e == std_exps + 3)) + e3->e += 13; + else + /* CMPEQ */; + } + *donestkptr++ = new Exp(pcval, min(pcval, e3->minpc), BINARY, + e1->e->type, ASSIGN, e1, e3); + return 0; + } else { /* putfield */ + Exp *e3 = *(stkptr-2); + if ((e3->e->et == IDENT) && !strcmp(e3->e->id->name,"this")) { + /* this.bar == bar */ + e3 = *(--stkptr); + if ((e3->e->type == INT) && (e->e->type == BOOLEAN)) { + if ((e3->e == std_exps + 2)||(e3->e == std_exps + 3)) + e3->e += 13; + else + /* CMPEQ */; + } + stkptr--; + *donestkptr++ = new Exp(pcval, min(min(pcval, (*stkptr)->minpc), + (*stkptr)->minpc), + BINARY, e->e->type, ASSIGN, e, e3); + return 0; + } else { + /* foo.bar */ + Exp *e1 = new Exp(pcval, min((*(stkptr-1))->minpc, pcval), BINARY, + e->e->type, DOT, e3, e); + e->e->type = VOID; + e3 = *(--stkptr); + if ((e3->e->type == INT) && (e1->e->type == BOOLEAN)) { + if ((e3->e == std_exps + 2)||(e3->e == std_exps + 3)) + e3->e += 13; + else + /* CMPEQ */; + } + *donestkptr++ = new Exp(pcval, min(e3->minpc, e1->minpc), BINARY, + e1->e->type, ASSIGN, e1, e3); + return 0; + } + } +} Index: llvm-test/MultiSource/Applications/hbd/db-meth.cpp diff -u llvm-test/MultiSource/Applications/hbd/db-meth.cpp:1.1 llvm-test/MultiSource/Applications/hbd/db-meth.cpp:1.2 --- llvm-test/MultiSource/Applications/hbd/db-meth.cpp:1.1 Fri Feb 27 12:06:48 2004 +++ llvm-test/MultiSource/Applications/hbd/db-meth.cpp Fri May 13 13:10:44 2005 @@ -1,117 +1,117 @@ -/* db-meth.cpp */ -/* - Java Decompiler - Copyright (c) 1994-2003, Pete Ryland. - Distributed under the GNU GPL Version 2. - This package is available from http://pdr.cx/hbd/ -*/ - -#include "exp.h" -#include "class.h" -#include "decomp.h" -#include "cp.h" - -int invokefunc(Classfile *c) -{ - unsigned pcval = currpc - 1; - unsigned minpcval = pcval; - int i; - Type exptypes[256]; - int val = JDNEXT16S(); - Ref *mr = (Ref*)c->cp[val]->p; - NameAndType *nt = (NameAndType*)c->cp[mr->name_and_type]->p; - char *classname = c->cp(mr->class_index)->chp; - char *tmpstr = c->cp[nt->signature_index]->chp; - char *name = c->cp[nt->name_index]->chp; - Exp **el = new Exp*[strlen(tmpstr)-2]; - Exp *e1 = new Exp(pcval, name, VOID, NO); - unsigned numexps = 0; - while (*(++tmpstr) != ')') { - exptypes[numexps++] = sig2type(tmpstr); - if (*tmpstr == '[') tmpstr++; - if (*tmpstr == 'L') while (*(++tmpstr) != ';') /* do nothing */; - } - Type etype = sig2type(tmpstr + 1); - Exp **elp = el; - for (i = numexps; i--;) { - if (((*(--stkptr))->e->type == INT) && (exptypes[i] == BOOLEAN)) { - if (((*stkptr)->e == std_exps + 2)||((*stkptr)->e == std_exps + 3)) - (*stkptr)->e += 13; - else - /* CMPEQ */; - } - *elp++ = *stkptr; - minpcval = min(minpcval, (*stkptr)->minpc); - } - if (ch == 0xB9) { /* invokeinterface */ - if (numexps != (unsigned)(JDNEXT8U() - 1)) { - fprintf(stderr,"Error in interface method invocation - nargs doesn't match.\n"); - return 1; - } - JDNEXT8U(); /* reserved byte */ - } - if (ch != 0xB8) { /* invokevirtual OR invokenonvirtual OR invokeinterface */ - if (((*(stkptr-1))->e->et == IDENT) && !strcmp((*(stkptr-1))->e->id->name,"this")) { - /* this.bar(...) == bar(...) */ - if (strcmp(classname,c->this_class_name)) { /* super.bar(...) */ - if (!strcmp(name,"")) { /* super() */ - e1->e->id->name = "super"; - minpcval = min(minpcval, (*(stkptr-1))->minpc); - Exp *e = new Exp(pcval, minpcval, FUNCTIONCALL, etype, ID, e1, numexps, el); - if (etype == VOID) { - --stkptr; *donestkptr++ = e; - } else *(stkptr-1) = e; - return 0; - } - minpcval = min(minpcval, (*(stkptr-1))->minpc); - Exp *e2 = new Exp(pcval, "super", VOID, NO); - Exp *e3 = new Exp(pcval, minpcval, BINARY, FUNC, DOT, e2, e1); - Exp *e = new Exp(pcval, minpcval, FUNCTIONCALL, etype, ID, e3, numexps, el); - if (etype == VOID) { - --stkptr; *donestkptr++ = e; - } else *(stkptr-1) = e; - return 0; - } else { - if (!strcmp(name,"")) { - minpcval = min(minpcval, (*(stkptr-1))->minpc); - e1->e->id->name = "this"; - } - Exp *e = new Exp(pcval, minpcval, FUNCTIONCALL, etype, ID, e1, numexps, el); - if (e->e->type == VOID) { - --stkptr; *donestkptr++ = e; - } else *(stkptr-1) = e; - return 0; - } - } else { - /* foo.bar(...) */ - Exp *e; - if (!strcmp(name,"")) { - /* killexp(e1)? */ - minpcval = min(minpcval, (*(stkptr-1))->minpc); - e = new Exp(pcval, minpcval, FUNCTIONCALL, OBJECT, ID, *(stkptr-1), numexps, el); - } else { - minpcval = min(minpcval, (*(stkptr-1))->minpc); - Exp *e3 = new Exp(pcval, minpcval, BINARY, FUNC, DOT, *(stkptr-1), e1); - e = new Exp(pcval, minpcval, FUNCTIONCALL, etype, ID, e3, numexps, el); - } - if ((e->exp1->e->op != NEW) && (etype == VOID)) { - --stkptr; *donestkptr++ = e; - } else *(stkptr-1) = e; - return 0; - } - } else { /* invokestatic */ - Exp *e; - tmpstr = c->cp(mr->class_index)->chp; - if (strcmp(tmpstr, c->this_class_name)) { - Exp *e2 = new Exp(pcval, tmpstr, VOID, NO); - Exp *e3 = new Exp(pcval, minpcval, BINARY, FUNC, DOT, e2, e1); - e = new Exp(pcval, minpcval, FUNCTIONCALL, etype, ID, e3, numexps, el); - } else - e = new Exp(pcval, minpcval, FUNCTIONCALL, etype, ID, e1, numexps, el); - if (etype == VOID) - *donestkptr++ = e; - else - *stkptr++ = e; - return 0; - } -} +/* db-meth.cpp */ +/* + Java Decompiler + Copyright (c) 1994-2003, Pete Ryland. + Distributed under the GNU GPL Version 2. + This package is available from http://pdr.cx/hbd/ +*/ + +#include "exp.h" +#include "class.h" +#include "decomp.h" +#include "cp.h" + +int invokefunc(Classfile *c) +{ + unsigned pcval = currpc - 1; + unsigned minpcval = pcval; + int i; + Type exptypes[256]; + int val = JDNEXT16S(); + Ref *mr = (Ref*)c->cp[val]->p; + NameAndType *nt = (NameAndType*)c->cp[mr->name_and_type]->p; + char *classname = c->cp(mr->class_index)->chp; + char *tmpstr = c->cp[nt->signature_index]->chp; + char *name = c->cp[nt->name_index]->chp; + Exp **el = new Exp*[strlen(tmpstr)-2]; + Exp *e1 = new Exp(pcval, name, VOID, NO); + unsigned numexps = 0; + while (*(++tmpstr) != ')') { + exptypes[numexps++] = sig2type(tmpstr); + if (*tmpstr == '[') tmpstr++; + if (*tmpstr == 'L') while (*(++tmpstr) != ';') /* do nothing */; + } + Type etype = sig2type(tmpstr + 1); + Exp **elp = el; + for (i = numexps; i--;) { + if (((*(--stkptr))->e->type == INT) && (exptypes[i] == BOOLEAN)) { + if (((*stkptr)->e == std_exps + 2)||((*stkptr)->e == std_exps + 3)) + (*stkptr)->e += 13; + else + /* CMPEQ */; + } + *elp++ = *stkptr; + minpcval = min(minpcval, (*stkptr)->minpc); + } + if (ch == 0xB9) { /* invokeinterface */ + if (numexps != (unsigned)(JDNEXT8U() - 1)) { + fprintf(stderr,"Error in interface method invocation - nargs doesn't match.\n"); + return 1; + } + JDNEXT8U(); /* reserved byte */ + } + if (ch != 0xB8) { /* invokevirtual OR invokenonvirtual OR invokeinterface */ + if (((*(stkptr-1))->e->et == IDENT) && !strcmp((*(stkptr-1))->e->id->name,"this")) { + /* this.bar(...) == bar(...) */ + if (strcmp(classname,c->this_class_name)) { /* super.bar(...) */ + if (!strcmp(name,"")) { /* super() */ + e1->e->id->name = "super"; + minpcval = min(minpcval, (*(stkptr-1))->minpc); + Exp *e = new Exp(pcval, minpcval, FUNCTIONCALL, etype, ID, e1, numexps, el); + if (etype == VOID) { + --stkptr; *donestkptr++ = e; + } else *(stkptr-1) = e; + return 0; + } + minpcval = min(minpcval, (*(stkptr-1))->minpc); + Exp *e2 = new Exp(pcval, "super", VOID, NO); + Exp *e3 = new Exp(pcval, minpcval, BINARY, FUNC, DOT, e2, e1); + Exp *e = new Exp(pcval, minpcval, FUNCTIONCALL, etype, ID, e3, numexps, el); + if (etype == VOID) { + --stkptr; *donestkptr++ = e; + } else *(stkptr-1) = e; + return 0; + } else { + if (!strcmp(name,"")) { + minpcval = min(minpcval, (*(stkptr-1))->minpc); + e1->e->id->name = "this"; + } + Exp *e = new Exp(pcval, minpcval, FUNCTIONCALL, etype, ID, e1, numexps, el); + if (e->e->type == VOID) { + --stkptr; *donestkptr++ = e; + } else *(stkptr-1) = e; + return 0; + } + } else { + /* foo.bar(...) */ + Exp *e; + if (!strcmp(name,"")) { + /* killexp(e1)? */ + minpcval = min(minpcval, (*(stkptr-1))->minpc); + e = new Exp(pcval, minpcval, FUNCTIONCALL, OBJECT, ID, *(stkptr-1), numexps, el); + } else { + minpcval = min(minpcval, (*(stkptr-1))->minpc); + Exp *e3 = new Exp(pcval, minpcval, BINARY, FUNC, DOT, *(stkptr-1), e1); + e = new Exp(pcval, minpcval, FUNCTIONCALL, etype, ID, e3, numexps, el); + } + if ((e->exp1->e->op != NEW) && (etype == VOID)) { + --stkptr; *donestkptr++ = e; + } else *(stkptr-1) = e; + return 0; + } + } else { /* invokestatic */ + Exp *e; + tmpstr = c->cp(mr->class_index)->chp; + if (strcmp(tmpstr, c->this_class_name)) { + Exp *e2 = new Exp(pcval, tmpstr, VOID, NO); + Exp *e3 = new Exp(pcval, minpcval, BINARY, FUNC, DOT, e2, e1); + e = new Exp(pcval, minpcval, FUNCTIONCALL, etype, ID, e3, numexps, el); + } else + e = new Exp(pcval, minpcval, FUNCTIONCALL, etype, ID, e1, numexps, el); + if (etype == VOID) + *donestkptr++ = e; + else + *stkptr++ = e; + return 0; + } +} Index: llvm-test/MultiSource/Applications/hbd/dc-misc.cpp diff -u llvm-test/MultiSource/Applications/hbd/dc-misc.cpp:1.1 llvm-test/MultiSource/Applications/hbd/dc-misc.cpp:1.2 --- llvm-test/MultiSource/Applications/hbd/dc-misc.cpp:1.1 Fri Feb 27 12:06:48 2004 +++ llvm-test/MultiSource/Applications/hbd/dc-misc.cpp Fri May 13 13:10:44 2005 @@ -1,32 +1,32 @@ -/* dc-misc.cpp */ -/* - Java Decompiler - Copyright (c) 1994-2003, Pete Ryland. - Distributed under the GNU GPL Version 2. - This package is available from http://pdr.cx/hbd/ -*/ - -#include "exp.h" -#include "class.h" -#include "decomp.h" -#include "cp.h" - -int docheckcast(Classfile *c) -{ - unsigned pcval = currpc - 1; - unsigned val = JDNEXT16U(); - Exp *e1 = *(stkptr-1); - Exp *e2 = new Exp(pcval, c->cp(val)->chp, OBJECT, CP, val); - *(stkptr-1) = new Exp(pcval, min(e1->minpc, pcval), PREUNARY, OBJECT, CAST, e1, e2); - return 0; -} - -int doinstanceof(Classfile *c) -{ - unsigned pcval = currpc - 1; - unsigned val = JDNEXT16U(); - Exp *e1 = *(stkptr-1); - Exp *e2 = new Exp(pcval, c->cp(val)->chp, OBJECT, CP, val); - *(stkptr-1) = new Exp(pcval, e1->minpc, BINARY, BOOLEAN, INSTANCEOF, e1, e2); - return 0; -} +/* dc-misc.cpp */ +/* + Java Decompiler + Copyright (c) 1994-2003, Pete Ryland. + Distributed under the GNU GPL Version 2. + This package is available from http://pdr.cx/hbd/ +*/ + +#include "exp.h" +#include "class.h" +#include "decomp.h" +#include "cp.h" + +int docheckcast(Classfile *c) +{ + unsigned pcval = currpc - 1; + unsigned val = JDNEXT16U(); + Exp *e1 = *(stkptr-1); + Exp *e2 = new Exp(pcval, c->cp(val)->chp, OBJECT, CP, val); + *(stkptr-1) = new Exp(pcval, min(e1->minpc, pcval), PREUNARY, OBJECT, CAST, e1, e2); + return 0; +} + +int doinstanceof(Classfile *c) +{ + unsigned pcval = currpc - 1; + unsigned val = JDNEXT16U(); + Exp *e1 = *(stkptr-1); + Exp *e2 = new Exp(pcval, c->cp(val)->chp, OBJECT, CP, val); + *(stkptr-1) = new Exp(pcval, e1->minpc, BINARY, BOOLEAN, INSTANCEOF, e1, e2); + return 0; +} Index: llvm-test/MultiSource/Applications/hbd/err.cpp diff -u llvm-test/MultiSource/Applications/hbd/err.cpp:1.1 llvm-test/MultiSource/Applications/hbd/err.cpp:1.2 --- llvm-test/MultiSource/Applications/hbd/err.cpp:1.1 Fri Feb 27 12:06:48 2004 +++ llvm-test/MultiSource/Applications/hbd/err.cpp Fri May 13 13:10:44 2005 @@ -1,32 +1,32 @@ -/* err.cpp */ -/* - Java Decompiler - Copyright (c) 1994-2003, Pete Ryland. - Distributed under the GNU GPL Version 2. - This package is available from http://pdr.cx/hbd/ -*/ - -#include -#include -#include "general.h" -#include "options.h" - -char *errmsgs[] = { - "Unknown error.", - "Out of memory error.", - DEBUG_ON? "Usage: %s [-O] [-D] InFile.class [OutFile.java]\n" - :"Usage: %s [-O] InFile.class [OutFile.java]\n", - DEBUG_ON? "Usage: %s [-D] -Ifuncname InFile.class\n" - :"Usage: %s -Ifuncname InFile.class\n", - "Not a class.", - "Unsupported Class Version.", - "3" -}; -void fatalerror(int msgid,...) -{ - va_list ap; - va_start(ap, msgid); - vfprintf(stderr, errmsgs[msgid], ap); - va_end(ap); - exit(msgid); -} +/* err.cpp */ +/* + Java Decompiler + Copyright (c) 1994-2003, Pete Ryland. + Distributed under the GNU GPL Version 2. + This package is available from http://pdr.cx/hbd/ +*/ + +#include +#include +#include "general.h" +#include "options.h" + +char *errmsgs[] = { + "Unknown error.", + "Out of memory error.", + DEBUG_ON? "Usage: %s [-O] [-D] InFile.class [OutFile.java]\n" + :"Usage: %s [-O] InFile.class [OutFile.java]\n", + DEBUG_ON? "Usage: %s [-D] -Ifuncname InFile.class\n" + :"Usage: %s -Ifuncname InFile.class\n", + "Not a class.", + "Unsupported Class Version.", + "3" +}; +void fatalerror(int msgid,...) +{ + va_list ap; + va_start(ap, msgid); + vfprintf(stderr, errmsgs[msgid], ap); + va_end(ap); + exit(msgid); +} Index: llvm-test/MultiSource/Applications/hbd/exp.cpp diff -u llvm-test/MultiSource/Applications/hbd/exp.cpp:1.1 llvm-test/MultiSource/Applications/hbd/exp.cpp:1.2 --- llvm-test/MultiSource/Applications/hbd/exp.cpp:1.1 Fri Feb 27 12:06:49 2004 +++ llvm-test/MultiSource/Applications/hbd/exp.cpp Fri May 13 13:10:44 2005 @@ -1,217 +1,217 @@ -/* exp.cpp */ -/* - Java Decompiler - Copyright (c) 1994-2003, Pete Ryland. - Distributed under the GNU GPL Version 2. - This package is available from http://pdr.cx/hbd/ -*/ - -#include -#include -#include -#include "exp.h" - -Exp_ std_exps[] = { - Exp_(&idnull), Exp_(&idneg1), Exp_(&id0i), Exp_(&id1i), Exp_(&id2i), Exp_(&id3i), - Exp_(&id4i), Exp_(&id5i), Exp_(&id0L), Exp_(&id1L), Exp_(&id0f), Exp_(&id1f), - Exp_(&id2f), Exp_(&id0d), Exp_(&id1d), Exp_(&idfalse), Exp_(&idtrue), - Exp_(1, BRANCH, VOID, ID, 0), Exp_(1, TERNARY, BOOLEAN, COND, 0) -}; - -void killexp(Exp *e) { - if (!(--e->numrefs)) { - if (!e->e->isstd) { - if (e->e->et == IDENT) { -// delete e->e->id->name; -// delete e->e->id; - } -// delete e->e; - } -// delete e; - } -} - -int notexp(Exp **e_ptr) { - Exp *e = *e_ptr; - switch (e->e->op) { - case NOT_BOOL: - *e_ptr = e->exp1; - killexp(e); - break; - case OR_BOOL: - e->e->op = AND_BOOL; - notexp(&(e->exp1)); - notexp(&(e->exp2)); - break; - case AND_BOOL: - e->e->op = OR_BOOL; - notexp(&(e->exp1)); - notexp(&(e->exp2)); - break; - case OR: case AND: - notexp(&(e->exp1)); - notexp(&(e->exp2)); - case EQUAL: case NOTEQUAL: case LESS: case GREATEROREQUAL: - case GREATER: case LESSOREQUAL: - *((int*)(&e->e->op)) ^= 1; - break; - default: - if (e->e->type != BOOLEAN) { - fprintf(stderr, "Can't not a non-boolean\n"); - return 1; - } - *e_ptr = new Exp(e->pc, e->minpc, PREUNARY, BOOLEAN, NOT_BOOL, e); - } - return 0; -} - -/* -Exp::Exp(int pcval, char *idname, Type idtype) { - numrefs = 1; - minpc = pc = pcval; - e = new Exp_; - e->isstd = 0; - e->et = IDENT; - e->op = ID; - e->type = idtype; - e->id = new Id; - e->id->name = idname; -} -*/ - -char *Exp::toString(unsigned nextpc) { - char *e1, *e2, *e3, *o, *o2, *s, *t1; - int sizestr, i; - switch (e->et) { - case IDENT: - s = new char[strlen(e->id->name) + 1]; - strcpy(s, e->id->name); - return s; - case PREUNARY: - exp1->numrefs += numrefs-1; - e1 = exp1->toString(0); - if (e->op == CAST) { - if (e->type == OBJECT) { - exp2->numrefs += numrefs-1; - e2 = exp2->toString(0); - killexp(exp2); - o = new char[strlen(e2) + 3]; - sprintf(o, "(%s)", e2); - delete e2; - } else { - o = new char[strlen(type2str[e->type]) + 3]; - sprintf(o, "(%s)", type2str[e->type]); - } - } else { - o = strdup(op2str[e->op]); - } - s = new char[5 + strlen(o) + strlen(e1)]; - if (op_prec[exp1->e->op] < (op_prec[e->op] + 0)) - sprintf(s, "%s(%s)", o, e1); - else - sprintf(s, "%s%s", o, e1); - killexp(exp1); delete e1; delete o; - return s; - case POSTUNARY: - exp1->numrefs += numrefs-1; - e1 = exp1->toString(0); o = op2str[e->op]; - s = new char[5 + strlen(o) + strlen(e1)]; - sprintf(s, (op_prec[exp1->e->op] < (op_prec[e->op] + 0))?"(%s)%s":"%s%s", e1, o); - killexp(exp1); delete e1; - return s; - case BINARY: - exp1->numrefs += numrefs-1; - exp2->numrefs += numrefs-1; - e1 = exp1->toString(0); e2 = exp2->toString(0); - o = op2str[e->op]; - t1 = new char[9 + strlen(o)]; - sprintf(t1, "%s%s%s", - (op_prec[exp1->e->op] < (op_prec[e->op] + 0))?"(%s)":"%s", - o, (op_prec[exp2->e->op] < (op_prec[e->op] + 0))?"(%s)":"%s"); - s = new char[strlen(t1) + strlen(e1) + strlen(e2) - 3]; - sprintf(s, t1, e1, e2); delete t1; - killexp(exp1); killexp(exp2); delete e1; delete e2; - return s; - case TERNARY: - exp1->numrefs += numrefs-1; exp2->numrefs += numrefs-1; exp3->numrefs += numrefs-1; - e1 = exp1->toString(0); e2 = exp2->toString(0); e3 = exp3->toString(0); - o = op2str[e->op]; o2 = op2str[e->op + 1]; - t1 = new char[19]; - sprintf(t1, "%s%s%s%s%s", - (op_prec[exp1->e->op] < (op_prec[e->op] + 0))?"(%s)":"%s", - o, (op_prec[exp2->e->op] < (op_prec[e->op] + 0))?"(%s)":"%s", - o2, (op_prec[exp3->e->op] < (op_prec[e->op] + 0))?"(%s)":"%s"); - s = new char[strlen(t1) + strlen(e1) + strlen(e2) + strlen(e3) - 5]; - sprintf(s, t1, e1, e2, e3); delete t1; - killexp(exp1); killexp(exp2); killexp(exp3); - delete e1; delete e2; delete e3; - return s; - case FUNCTIONCALL: - t1 = new char[256]; - exp1->numrefs += numrefs-1; - e1 = exp1->toString(0); sizestr = strlen(e1) + 3; - sprintf(t1, "%s(", e1); - killexp(exp1); delete e1; - i = numexps; - if (i) { - while (--i) { - explist[i]->numrefs += numrefs-1; - e1 = explist[i]->toString(0); strcat(t1, e1); sizestr += strlen(e1) + 2; - killexp(explist[i]); delete e1; strcat(t1, ", "); - } - explist[0]->numrefs += numrefs-1; - e1 = explist[0]->toString(0); strcat(t1, e1); sizestr += strlen(e1); - killexp(explist[0]); delete e1; - } - strcat(t1,")"); - s = new char[sizestr]; - strcpy(s, t1); - delete t1; - return s; - case ARRAYACCESS: - exp1->numrefs += numrefs-1; exp2->numrefs += numrefs-1; - e1 = exp1->toString(0); e2 = exp2->toString(0); - s = new char[strlen(e1) + strlen(e2) + 3]; - sprintf(s, "%s[%s]", e1, e2); - killexp(exp1); killexp(exp2); delete e1; delete e2; - return s; - case BRANCH: -// if ((unsigned)e->op > minpc) { -// { -// intlist *i = indents_end, *j; -// if ((!i) || (i->node >= branch_pc)) { -// indents_end = new intlist; -// indents_end->node = branch_pc; -// indents_end->next = i; -// } else { -// while ((i->next) && (i->next->node < branch_pc)) i = i->next; -// j = i->next; i = i->next = new intlist; i->next = j; -// i->node = branch_pc; -// } -// indentlevel++; - notexp(&exp1); - exp1->numrefs += numrefs-1; - e1 = exp1->toString(0); - s = new char[strlen(e1) + 8]; - sprintf(s, "if (%s) {", e1); -// } else { -// exp1->numrefs += numrefs-1; -// e1 = exp1->toString(0); -// s = new char[strlen(e1) + 21]; -// sprintf(s, "if (%s) goto label%d", e1, branch_pc); -// } - killexp(exp1); delete e1; - return s; - case SWITCH: - exp1->numrefs += numrefs-1; - e1 = exp1->toString(0); - s = new char[strlen(e1) + 29]; - sprintf(s, "switch (%s) default: label%d", e1, default_pc); - killexp(exp1); delete e1; - return s; - default: - fprintf(stderr, "Error converting expressions to strings. %d\n", e->et); - exit(-1); - return 0; - } -} +/* exp.cpp */ +/* + Java Decompiler + Copyright (c) 1994-2003, Pete Ryland. + Distributed under the GNU GPL Version 2. + This package is available from http://pdr.cx/hbd/ +*/ + +#include +#include +#include +#include "exp.h" + +Exp_ std_exps[] = { + Exp_(&idnull), Exp_(&idneg1), Exp_(&id0i), Exp_(&id1i), Exp_(&id2i), Exp_(&id3i), + Exp_(&id4i), Exp_(&id5i), Exp_(&id0L), Exp_(&id1L), Exp_(&id0f), Exp_(&id1f), + Exp_(&id2f), Exp_(&id0d), Exp_(&id1d), Exp_(&idfalse), Exp_(&idtrue), + Exp_(1, BRANCH, VOID, ID, 0), Exp_(1, TERNARY, BOOLEAN, COND, 0) +}; + +void killexp(Exp *e) { + if (!(--e->numrefs)) { + if (!e->e->isstd) { + if (e->e->et == IDENT) { +// delete e->e->id->name; +// delete e->e->id; + } +// delete e->e; + } +// delete e; + } +} + +int notexp(Exp **e_ptr) { + Exp *e = *e_ptr; + switch (e->e->op) { + case NOT_BOOL: + *e_ptr = e->exp1; + killexp(e); + break; + case OR_BOOL: + e->e->op = AND_BOOL; + notexp(&(e->exp1)); + notexp(&(e->exp2)); + break; + case AND_BOOL: + e->e->op = OR_BOOL; + notexp(&(e->exp1)); + notexp(&(e->exp2)); + break; + case OR: case AND: + notexp(&(e->exp1)); + notexp(&(e->exp2)); + case EQUAL: case NOTEQUAL: case LESS: case GREATEROREQUAL: + case GREATER: case LESSOREQUAL: + *((int*)(&e->e->op)) ^= 1; + break; + default: + if (e->e->type != BOOLEAN) { + fprintf(stderr, "Can't not a non-boolean\n"); + return 1; + } + *e_ptr = new Exp(e->pc, e->minpc, PREUNARY, BOOLEAN, NOT_BOOL, e); + } + return 0; +} + +/* +Exp::Exp(int pcval, char *idname, Type idtype) { + numrefs = 1; + minpc = pc = pcval; + e = new Exp_; + e->isstd = 0; + e->et = IDENT; + e->op = ID; + e->type = idtype; + e->id = new Id; + e->id->name = idname; +} +*/ + +char *Exp::toString(unsigned nextpc) { + char *e1, *e2, *e3, *o, *o2, *s, *t1; + int sizestr, i; + switch (e->et) { + case IDENT: + s = new char[strlen(e->id->name) + 1]; + strcpy(s, e->id->name); + return s; + case PREUNARY: + exp1->numrefs += numrefs-1; + e1 = exp1->toString(0); + if (e->op == CAST) { + if (e->type == OBJECT) { + exp2->numrefs += numrefs-1; + e2 = exp2->toString(0); + killexp(exp2); + o = new char[strlen(e2) + 3]; + sprintf(o, "(%s)", e2); + delete e2; + } else { + o = new char[strlen(type2str[e->type]) + 3]; + sprintf(o, "(%s)", type2str[e->type]); + } + } else { + o = strdup(op2str[e->op]); + } + s = new char[5 + strlen(o) + strlen(e1)]; + if (op_prec[exp1->e->op] < (op_prec[e->op] + 0)) + sprintf(s, "%s(%s)", o, e1); + else + sprintf(s, "%s%s", o, e1); + killexp(exp1); delete e1; delete o; + return s; + case POSTUNARY: + exp1->numrefs += numrefs-1; + e1 = exp1->toString(0); o = op2str[e->op]; + s = new char[5 + strlen(o) + strlen(e1)]; + sprintf(s, (op_prec[exp1->e->op] < (op_prec[e->op] + 0))?"(%s)%s":"%s%s", e1, o); + killexp(exp1); delete e1; + return s; + case BINARY: + exp1->numrefs += numrefs-1; + exp2->numrefs += numrefs-1; + e1 = exp1->toString(0); e2 = exp2->toString(0); + o = op2str[e->op]; + t1 = new char[9 + strlen(o)]; + sprintf(t1, "%s%s%s", + (op_prec[exp1->e->op] < (op_prec[e->op] + 0))?"(%s)":"%s", + o, (op_prec[exp2->e->op] < (op_prec[e->op] + 0))?"(%s)":"%s"); + s = new char[strlen(t1) + strlen(e1) + strlen(e2) - 3]; + sprintf(s, t1, e1, e2); delete t1; + killexp(exp1); killexp(exp2); delete e1; delete e2; + return s; + case TERNARY: + exp1->numrefs += numrefs-1; exp2->numrefs += numrefs-1; exp3->numrefs += numrefs-1; + e1 = exp1->toString(0); e2 = exp2->toString(0); e3 = exp3->toString(0); + o = op2str[e->op]; o2 = op2str[e->op + 1]; + t1 = new char[19]; + sprintf(t1, "%s%s%s%s%s", + (op_prec[exp1->e->op] < (op_prec[e->op] + 0))?"(%s)":"%s", + o, (op_prec[exp2->e->op] < (op_prec[e->op] + 0))?"(%s)":"%s", + o2, (op_prec[exp3->e->op] < (op_prec[e->op] + 0))?"(%s)":"%s"); + s = new char[strlen(t1) + strlen(e1) + strlen(e2) + strlen(e3) - 5]; + sprintf(s, t1, e1, e2, e3); delete t1; + killexp(exp1); killexp(exp2); killexp(exp3); + delete e1; delete e2; delete e3; + return s; + case FUNCTIONCALL: + t1 = new char[256]; + exp1->numrefs += numrefs-1; + e1 = exp1->toString(0); sizestr = strlen(e1) + 3; + sprintf(t1, "%s(", e1); + killexp(exp1); delete e1; + i = numexps; + if (i) { + while (--i) { + explist[i]->numrefs += numrefs-1; + e1 = explist[i]->toString(0); strcat(t1, e1); sizestr += strlen(e1) + 2; + killexp(explist[i]); delete e1; strcat(t1, ", "); + } + explist[0]->numrefs += numrefs-1; + e1 = explist[0]->toString(0); strcat(t1, e1); sizestr += strlen(e1); + killexp(explist[0]); delete e1; + } + strcat(t1,")"); + s = new char[sizestr]; + strcpy(s, t1); + delete t1; + return s; + case ARRAYACCESS: + exp1->numrefs += numrefs-1; exp2->numrefs += numrefs-1; + e1 = exp1->toString(0); e2 = exp2->toString(0); + s = new char[strlen(e1) + strlen(e2) + 3]; + sprintf(s, "%s[%s]", e1, e2); + killexp(exp1); killexp(exp2); delete e1; delete e2; + return s; + case BRANCH: +// if ((unsigned)e->op > minpc) { +// { +// intlist *i = indents_end, *j; +// if ((!i) || (i->node >= branch_pc)) { +// indents_end = new intlist; +// indents_end->node = branch_pc; +// indents_end->next = i; +// } else { +// while ((i->next) && (i->next->node < branch_pc)) i = i->next; +// j = i->next; i = i->next = new intlist; i->next = j; +// i->node = branch_pc; +// } +// indentlevel++; + notexp(&exp1); + exp1->numrefs += numrefs-1; + e1 = exp1->toString(0); + s = new char[strlen(e1) + 8]; + sprintf(s, "if (%s) {", e1); +// } else { +// exp1->numrefs += numrefs-1; +// e1 = exp1->toString(0); +// s = new char[strlen(e1) + 21]; +// sprintf(s, "if (%s) goto label%d", e1, branch_pc); +// } + killexp(exp1); delete e1; + return s; + case SWITCH: + exp1->numrefs += numrefs-1; + e1 = exp1->toString(0); + s = new char[strlen(e1) + 29]; + sprintf(s, "switch (%s) default: label%d", e1, default_pc); + killexp(exp1); delete e1; + return s; + default: + fprintf(stderr, "Error converting expressions to strings. %d\n", e->et); + exit(-1); + return 0; + } +} Index: llvm-test/MultiSource/Applications/hbd/hbd.cpp diff -u llvm-test/MultiSource/Applications/hbd/hbd.cpp:1.1 llvm-test/MultiSource/Applications/hbd/hbd.cpp:1.2 --- llvm-test/MultiSource/Applications/hbd/hbd.cpp:1.1 Fri Feb 27 12:06:49 2004 +++ llvm-test/MultiSource/Applications/hbd/hbd.cpp Fri May 13 13:10:44 2005 @@ -1,21 +1,21 @@ -/* hbd.cpp */ -/* - Java Decompiler - Copyright (c) 1994-2003, Pete Ryland. - Distributed under the GNU GPL Version 2. - This package is available from http://pdr.cx/hbd/ -*/ - -#include -#include "class.h" - -int debugon = 0; - -int main(int argc, char **argv) -{ - fprintf(stderr, "HomeBrew Decompiler. Copyright (c) 1994-2003 Pete Ryland.\n"); - Classfile c(argc, argv); - c.read(); - c.print(); - return 0; -} +/* hbd.cpp */ +/* + Java Decompiler + Copyright (c) 1994-2003, Pete Ryland. + Distributed under the GNU GPL Version 2. + This package is available from http://pdr.cx/hbd/ +*/ + +#include +#include "class.h" + +int debugon = 0; + +int main(int argc, char **argv) +{ + fprintf(stderr, "HomeBrew Decompiler. Copyright (c) 1994-2003 Pete Ryland.\n"); + Classfile c(argc, argv); + c.read(); + c.print(); + return 0; +} Index: llvm-test/MultiSource/Applications/hbd/id.cpp diff -u llvm-test/MultiSource/Applications/hbd/id.cpp:1.1 llvm-test/MultiSource/Applications/hbd/id.cpp:1.2 --- llvm-test/MultiSource/Applications/hbd/id.cpp:1.1 Fri Feb 27 12:06:49 2004 +++ llvm-test/MultiSource/Applications/hbd/id.cpp Fri May 13 13:10:44 2005 @@ -1,27 +1,27 @@ -/* id.cpp */ -/* - Java Decompiler - Copyright (c) 1994-2003, Pete Ryland. - Distributed under the GNU GPL Version 2. - This package is available from http://pdr.cx/hbd/ -*/ - -#include "id.h" - -Id idnull = {"null", OBJECT, IM, 0}, - idneg1 = {"-1", INT, IM, 0}, - id0i = {"0", INT, IM, 0}, - id1i = {"1", INT, IM, 0}, - id2i = {"2", INT, IM, 0}, - id3i = {"3", INT, IM, 0}, - id4i = {"4", INT, IM, 0}, - id5i = {"5", INT, IM, 0}, - id0L = {"0L", LONG, IM, 0}, - id1L = {"1L", LONG, IM, 0}, - id0f = {"0.0f", FLOAT, IM, 0}, - id1f = {"1.0f", FLOAT, IM, 0}, - id2f = {"2.0f", FLOAT, IM, 0}, - id0d = {"0.0d", DOUBLE, IM, 0}, - id1d = {"1.0d", DOUBLE, IM, 0}, - idfalse = {"false", BOOLEAN, IM, 0}, - idtrue = {"true", BOOLEAN, IM, 0}; +/* id.cpp */ +/* + Java Decompiler + Copyright (c) 1994-2003, Pete Ryland. + Distributed under the GNU GPL Version 2. + This package is available from http://pdr.cx/hbd/ +*/ + +#include "id.h" + +Id idnull = {"null", OBJECT, IM, 0}, + idneg1 = {"-1", INT, IM, 0}, + id0i = {"0", INT, IM, 0}, + id1i = {"1", INT, IM, 0}, + id2i = {"2", INT, IM, 0}, + id3i = {"3", INT, IM, 0}, + id4i = {"4", INT, IM, 0}, + id5i = {"5", INT, IM, 0}, + id0L = {"0L", LONG, IM, 0}, + id1L = {"1L", LONG, IM, 0}, + id0f = {"0.0f", FLOAT, IM, 0}, + id1f = {"1.0f", FLOAT, IM, 0}, + id2f = {"2.0f", FLOAT, IM, 0}, + id0d = {"0.0d", DOUBLE, IM, 0}, + id1d = {"1.0d", DOUBLE, IM, 0}, + idfalse = {"false", BOOLEAN, IM, 0}, + idtrue = {"true", BOOLEAN, IM, 0}; Index: llvm-test/MultiSource/Applications/hbd/op.cpp diff -u llvm-test/MultiSource/Applications/hbd/op.cpp:1.1 llvm-test/MultiSource/Applications/hbd/op.cpp:1.2 --- llvm-test/MultiSource/Applications/hbd/op.cpp:1.1 Fri Feb 27 12:06:49 2004 +++ llvm-test/MultiSource/Applications/hbd/op.cpp Fri May 13 13:10:44 2005 @@ -1,30 +1,30 @@ -/* op.cpp */ -/* - Java Decompiler - Copyright (c) 1994-2003, Pete Ryland. - Distributed under the GNU GPL Version 2. - This package is available from http://pdr.cx/hbd/ -*/ - -char *op2str[] = { - " + ", " - ", " * ", " / ", " %% ", ".", " = ", " << ", - " >> ", " >>> ", " & ", " | ", " ^ ", "~", "-", "(cast)", - "return ", "throw ", "new ", "goto ", " += ", " -= ", "++", "--", - " ? ", " : ", " error ", " cmp ", " == ", " != ", " < ", " >= ", - " > ", " <= ", "!", " && ", " || ", " instanceof ", ", ", - "" -}; -int op_prec[] = { - 27, 27, 29, 29, 29, 39, 2, 26, - 26, 26, 19, 17, 18, 32, 32, 39, - 38, 38, 38, 38, 2, 2, 32, 32, - 14, 14, 39, 20, 20, 20, 22, 22, - 22, 22, 32, 16, 15, 32, 1, - 39 -}; -int op_assoc[] = { - 0,0,0,0,0,0,1,0, 0,0,0,0,0,0,0,0, - 0,0,1,1,0,0,0,0, 0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0, - 0 -}; +/* op.cpp */ +/* + Java Decompiler + Copyright (c) 1994-2003, Pete Ryland. + Distributed under the GNU GPL Version 2. + This package is available from http://pdr.cx/hbd/ +*/ + +char *op2str[] = { + " + ", " - ", " * ", " / ", " %% ", ".", " = ", " << ", + " >> ", " >>> ", " & ", " | ", " ^ ", "~", "-", "(cast)", + "return ", "throw ", "new ", "goto ", " += ", " -= ", "++", "--", + " ? ", " : ", " error ", " cmp ", " == ", " != ", " < ", " >= ", + " > ", " <= ", "!", " && ", " || ", " instanceof ", ", ", + "" +}; +int op_prec[] = { + 27, 27, 29, 29, 29, 39, 2, 26, + 26, 26, 19, 17, 18, 32, 32, 39, + 38, 38, 38, 38, 2, 2, 32, 32, + 14, 14, 39, 20, 20, 20, 22, 22, + 22, 22, 32, 16, 15, 32, 1, + 39 +}; +int op_assoc[] = { + 0,0,0,0,0,0,1,0, 0,0,0,0,0,0,0,0, + 0,0,1,1,0,0,0,0, 0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0, + 0 +}; Index: llvm-test/MultiSource/Applications/hbd/sig.cpp diff -u llvm-test/MultiSource/Applications/hbd/sig.cpp:1.1 llvm-test/MultiSource/Applications/hbd/sig.cpp:1.2 --- llvm-test/MultiSource/Applications/hbd/sig.cpp:1.1 Fri Feb 27 12:06:49 2004 +++ llvm-test/MultiSource/Applications/hbd/sig.cpp Fri May 13 13:10:44 2005 @@ -1,145 +1,145 @@ -/* sig.cpp */ -/* - Java Decompiler - Copyright (c) 1994-2003, Pete Ryland. - Distributed under the GNU GPL Version 2. - This package is available from http://pdr.cx/hbd/ -*/ - -#include -#include -#include "general.h" -#include "class.h" -#include "method.h" -#include "sig.h" -#include "err.h" - -char *type2str[] = { - "void", "byte", "char", "short", "int", "long", "float", "double", "object" -}; - -Type sig2type(char* sig) -{ - switch (*sig) { - case SIGNATURE_BYTE: return BYTE; - case SIGNATURE_CHAR: return CHAR; - case SIGNATURE_DOUBLE: return DOUBLE; - case SIGNATURE_FLOAT: return FLOAT; - case SIGNATURE_INT: return INT; - case SIGNATURE_LONG: return LONG; - case SIGNATURE_CLASS: return OBJECT; - case SIGNATURE_SHORT: return SHORT; - case SIGNATURE_BOOLEAN: return BOOLEAN; - case SIGNATURE_ARRAY: return OBJECT; - case SIGNATURE_FUNC: return FUNC; - case SIGNATURE_VOID: return VOID; - default: - fprintf(stderr, "Error converting signature to a type.\n"); - exit(1); - } - return VOID; -} - -int printsigname(Classfile *c, FILE* outfile, char *&sig, char *name, void *mip) -{ - method_info_ptr mi = (method_info_ptr)mip; - int i; - char *t, *t2; - switch(*sig++) { - case SIGNATURE_BYTE: fprintf(outfile, "byte %s", name); return 0; - case SIGNATURE_CHAR: fprintf(outfile, "char %s", name); return 0; - case SIGNATURE_DOUBLE: fprintf(outfile, "double %s", name); return 0; - case SIGNATURE_FLOAT: fprintf(outfile, "float %s", name); return 0; - case SIGNATURE_INT: fprintf(outfile, "int %s", name); return 0; - case SIGNATURE_LONG: fprintf(outfile, "long %s", name); return 0; - case SIGNATURE_CLASS: - t = sig; - while (*sig++ != ';') ; - if ((t2 = new char[sig - t]) == 0) memerr(); - strncpy(t2, t, sig - t - 1); - t2[sig - t - 1] = '\0'; - t = t2; - if (!strncmp(t, "java/lang/", 10)) t += 10; - else while ((t2 = strchr(t2, '/')) != 0) *t2 = '.'; - i = c->package_name?strlen(c->package_name):0; - if (c->package_name && !strncmp(t, c->package_name, i)) t += i + 1; - fprintf(outfile, "%s %s", t, name); - return 0; - case SIGNATURE_SHORT: fprintf(outfile, "short %s", name); return 0; - case SIGNATURE_BOOLEAN: fprintf(outfile, "boolean %s", name); return 0; - case SIGNATURE_ARRAY: - i = 0; - while ((*sig >= '0') && (*sig <= '9')) i = (i * 10) + *sig++ - '0'; - printsigname(c, outfile, sig, name, mi); - if (i) fprintf(outfile, "[%d]", i); else fprintf(outfile, "[]"); - return 0; - case SIGNATURE_FUNC: - if (!mi) { - fprintf(stderr, "Non-function with function sig!\n"); - return 0; - } - t = sig; - while (*sig++ != SIGNATURE_ENDFUNC) /* skip for now */; - if (!strcmp(name, "")) { -// fprintf(outfile, "\b"); - return 0; - } - if ((mi->ret_sig = new char[strlen(sig) + 1]) == 0) memerr(); - strcpy(mi->ret_sig, sig); - mi->ret_type = sig2type(mi->ret_sig); - if (strcmp(name, "")) - printsigname(c, outfile, sig, name, mi); /* return type and name */ - else - fprintf(outfile, "%s", c->this_class_name); - fprintf(outfile, "("); - mi->max_locals++; - if (!mi->local_variable_table_length) { - if (((mi->local_names = new char_ptr[mi->max_locals]) == 0) || - ((mi->local_sigs = new char_ptr[mi->max_locals]) == 0) || - ((mi->local_types = new Type[mi->max_locals]) == 0) || - ((mi->local_firstuses = new unsigned[mi->max_locals]) == 0)) memerr(); - for (int it = mi->max_locals; it--; ) { - mi->local_firstuses[it] = 0; - mi->local_names[it] = mi->local_sigs[it] = 0; - mi->local_types[it] = VOID; - } - if ((mi->access_flags & ACC_STATIC) == 0) { - mi->local_names[0] = "this"; - mi->local_sigs[0] = "L"; - mi->local_types[0] = OBJECT; - mi->local_firstuses[0] = 0; - } - } - i = ((mi->access_flags & ACC_STATIC) == 0) ? 1 : 0; - while (*t != SIGNATURE_ENDFUNC) { - if (mi->local_variable_table_length) { - if (strcmp(t,mi->local_sigs[i])) { - fprintf(stderr, "Function Parameter type mismatch\n"); - return 1; - } - printsigname(c, outfile, t,mi->local_names[i],mi); - } else { - if ((mi->local_names[i] = new char[6]) == 0) memerr(); - sprintf(mi->local_names[i], "var%d", i); - char *t2 = t; - printsigname(c, outfile, t,mi->local_names[i],mi); - if ((mi->local_sigs[i] = new char[t - t2 + 1]) == 0) memerr(); - strncpy(mi->local_sigs[i], t2, t-t2); - mi->local_sigs[i][t-t2] = '\0'; - mi->local_types[i] = sig2type(mi->local_sigs[i]); - mi->local_firstuses[i] = 0; - } - if ((*(t-1) == 'D') || (*(t-1) == 'J')) i++; - i++; - if (*t != SIGNATURE_ENDFUNC) fprintf(outfile, ", "); - } - fprintf(outfile, ")"); - return 0; - case SIGNATURE_VOID: fprintf(outfile, "void %s", name); return 0; -// case 0: fprintf(outfile, "%s", name); return 0; - default: - fprintf(stderr, "Error reading type signature!\n"); - return 1; - } -} - +/* sig.cpp */ +/* + Java Decompiler + Copyright (c) 1994-2003, Pete Ryland. + Distributed under the GNU GPL Version 2. + This package is available from http://pdr.cx/hbd/ +*/ + +#include +#include +#include "general.h" +#include "class.h" +#include "method.h" +#include "sig.h" +#include "err.h" + +char *type2str[] = { + "void", "byte", "char", "short", "int", "long", "float", "double", "object" +}; + +Type sig2type(char* sig) +{ + switch (*sig) { + case SIGNATURE_BYTE: return BYTE; + case SIGNATURE_CHAR: return CHAR; + case SIGNATURE_DOUBLE: return DOUBLE; + case SIGNATURE_FLOAT: return FLOAT; + case SIGNATURE_INT: return INT; + case SIGNATURE_LONG: return LONG; + case SIGNATURE_CLASS: return OBJECT; + case SIGNATURE_SHORT: return SHORT; + case SIGNATURE_BOOLEAN: return BOOLEAN; + case SIGNATURE_ARRAY: return OBJECT; + case SIGNATURE_FUNC: return FUNC; + case SIGNATURE_VOID: return VOID; + default: + fprintf(stderr, "Error converting signature to a type.\n"); + exit(1); + } + return VOID; +} + +int printsigname(Classfile *c, FILE* outfile, char *&sig, char *name, void *mip) +{ + method_info_ptr mi = (method_info_ptr)mip; + int i; + char *t, *t2; + switch(*sig++) { + case SIGNATURE_BYTE: fprintf(outfile, "byte %s", name); return 0; + case SIGNATURE_CHAR: fprintf(outfile, "char %s", name); return 0; + case SIGNATURE_DOUBLE: fprintf(outfile, "double %s", name); return 0; + case SIGNATURE_FLOAT: fprintf(outfile, "float %s", name); return 0; + case SIGNATURE_INT: fprintf(outfile, "int %s", name); return 0; + case SIGNATURE_LONG: fprintf(outfile, "long %s", name); return 0; + case SIGNATURE_CLASS: + t = sig; + while (*sig++ != ';') ; + if ((t2 = new char[sig - t]) == 0) memerr(); + strncpy(t2, t, sig - t - 1); + t2[sig - t - 1] = '\0'; + t = t2; + if (!strncmp(t, "java/lang/", 10)) t += 10; + else while ((t2 = strchr(t2, '/')) != 0) *t2 = '.'; + i = c->package_name?strlen(c->package_name):0; + if (c->package_name && !strncmp(t, c->package_name, i)) t += i + 1; + fprintf(outfile, "%s %s", t, name); + return 0; + case SIGNATURE_SHORT: fprintf(outfile, "short %s", name); return 0; + case SIGNATURE_BOOLEAN: fprintf(outfile, "boolean %s", name); return 0; + case SIGNATURE_ARRAY: + i = 0; + while ((*sig >= '0') && (*sig <= '9')) i = (i * 10) + *sig++ - '0'; + printsigname(c, outfile, sig, name, mi); + if (i) fprintf(outfile, "[%d]", i); else fprintf(outfile, "[]"); + return 0; + case SIGNATURE_FUNC: + if (!mi) { + fprintf(stderr, "Non-function with function sig!\n"); + return 0; + } + t = sig; + while (*sig++ != SIGNATURE_ENDFUNC) /* skip for now */; + if (!strcmp(name, "")) { +// fprintf(outfile, "\b"); + return 0; + } + if ((mi->ret_sig = new char[strlen(sig) + 1]) == 0) memerr(); + strcpy(mi->ret_sig, sig); + mi->ret_type = sig2type(mi->ret_sig); + if (strcmp(name, "")) + printsigname(c, outfile, sig, name, mi); /* return type and name */ + else + fprintf(outfile, "%s", c->this_class_name); + fprintf(outfile, "("); + mi->max_locals++; + if (!mi->local_variable_table_length) { + if (((mi->local_names = new char_ptr[mi->max_locals]) == 0) || + ((mi->local_sigs = new char_ptr[mi->max_locals]) == 0) || + ((mi->local_types = new Type[mi->max_locals]) == 0) || + ((mi->local_firstuses = new unsigned[mi->max_locals]) == 0)) memerr(); + for (int it = mi->max_locals; it--; ) { + mi->local_firstuses[it] = 0; + mi->local_names[it] = mi->local_sigs[it] = 0; + mi->local_types[it] = VOID; + } + if ((mi->access_flags & ACC_STATIC) == 0) { + mi->local_names[0] = "this"; + mi->local_sigs[0] = "L"; + mi->local_types[0] = OBJECT; + mi->local_firstuses[0] = 0; + } + } + i = ((mi->access_flags & ACC_STATIC) == 0) ? 1 : 0; + while (*t != SIGNATURE_ENDFUNC) { + if (mi->local_variable_table_length) { + if (strcmp(t,mi->local_sigs[i])) { + fprintf(stderr, "Function Parameter type mismatch\n"); + return 1; + } + printsigname(c, outfile, t,mi->local_names[i],mi); + } else { + if ((mi->local_names[i] = new char[6]) == 0) memerr(); + sprintf(mi->local_names[i], "var%d", i); + char *t2 = t; + printsigname(c, outfile, t,mi->local_names[i],mi); + if ((mi->local_sigs[i] = new char[t - t2 + 1]) == 0) memerr(); + strncpy(mi->local_sigs[i], t2, t-t2); + mi->local_sigs[i][t-t2] = '\0'; + mi->local_types[i] = sig2type(mi->local_sigs[i]); + mi->local_firstuses[i] = 0; + } + if ((*(t-1) == 'D') || (*(t-1) == 'J')) i++; + i++; + if (*t != SIGNATURE_ENDFUNC) fprintf(outfile, ", "); + } + fprintf(outfile, ")"); + return 0; + case SIGNATURE_VOID: fprintf(outfile, "void %s", name); return 0; +// case 0: fprintf(outfile, "%s", name); return 0; + default: + fprintf(stderr, "Error reading type signature!\n"); + return 1; + } +} + Index: llvm-test/MultiSource/Applications/hbd/version.cpp diff -u llvm-test/MultiSource/Applications/hbd/version.cpp:1.1 llvm-test/MultiSource/Applications/hbd/version.cpp:1.2 --- llvm-test/MultiSource/Applications/hbd/version.cpp:1.1 Fri Feb 27 12:06:50 2004 +++ llvm-test/MultiSource/Applications/hbd/version.cpp Fri May 13 13:10:44 2005 @@ -1,23 +1,23 @@ -/* version.cpp */ -/* - Java Decompiler - Copyright (c) 1994-2003, Pete Ryland. - Distributed under the GNU GPL Version 2. - This package is available from http://pdr.cx/hbd/ -*/ - -#include -#include "general.h" -#include "version.h" -#include "file.h" -#include "err.h" -#include "class.h" - -void ClassVersion::read(Classfile *c) { - minor_version = get16(c->infile, &c->infile_pos); - if ((major_version = get16(c->infile, &c->infile_pos)) != 45) - fatalerror(BAD_VERSION_ERR); - else if (minor_version != 3) { - fprintf(stderr, "Warning: Class Version 45.%d. (Program designed for ver 45.3)\n", minor_version); - } -} +/* version.cpp */ +/* + Java Decompiler + Copyright (c) 1994-2003, Pete Ryland. + Distributed under the GNU GPL Version 2. + This package is available from http://pdr.cx/hbd/ +*/ + +#include +#include "general.h" +#include "version.h" +#include "file.h" +#include "err.h" +#include "class.h" + +void ClassVersion::read(Classfile *c) { + minor_version = get16(c->infile, &c->infile_pos); + if ((major_version = get16(c->infile, &c->infile_pos)) != 45) + fatalerror(BAD_VERSION_ERR); + else if (minor_version != 3) { + fprintf(stderr, "Warning: Class Version 45.%d. (Program designed for ver 45.3)\n", minor_version); + } +} From lattner at cs.uiuc.edu Fri May 13 13:14:31 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Fri, 13 May 2005 13:14:31 -0500 Subject: [llvm-commits] CVS: llvm-test/MultiSource/Applications/hbd/exp.cpp Message-ID: <200505131814.j4DIEVS6002381@apoc.cs.uiuc.edu> Changes in directory llvm-test/MultiSource/Applications/hbd: exp.cpp updated: 1.2 -> 1.3 --- Log message: Fix some mismatched free/delete/delete[]'s. --- Diffs of the changes: (+14 -14) exp.cpp | 28 ++++++++++++++-------------- 1 files changed, 14 insertions(+), 14 deletions(-) Index: llvm-test/MultiSource/Applications/hbd/exp.cpp diff -u llvm-test/MultiSource/Applications/hbd/exp.cpp:1.2 llvm-test/MultiSource/Applications/hbd/exp.cpp:1.3 --- llvm-test/MultiSource/Applications/hbd/exp.cpp:1.2 Fri May 13 13:10:44 2005 +++ llvm-test/MultiSource/Applications/hbd/exp.cpp Fri May 13 13:14:14 2005 @@ -97,7 +97,7 @@ killexp(exp2); o = new char[strlen(e2) + 3]; sprintf(o, "(%s)", e2); - delete e2; + delete [] e2; } else { o = new char[strlen(type2str[e->type]) + 3]; sprintf(o, "(%s)", type2str[e->type]); @@ -110,14 +110,14 @@ sprintf(s, "%s(%s)", o, e1); else sprintf(s, "%s%s", o, e1); - killexp(exp1); delete e1; delete o; + killexp(exp1); delete [] e1; free(o); return s; case POSTUNARY: exp1->numrefs += numrefs-1; e1 = exp1->toString(0); o = op2str[e->op]; s = new char[5 + strlen(o) + strlen(e1)]; sprintf(s, (op_prec[exp1->e->op] < (op_prec[e->op] + 0))?"(%s)%s":"%s%s", e1, o); - killexp(exp1); delete e1; + killexp(exp1); delete [] e1; return s; case BINARY: exp1->numrefs += numrefs-1; @@ -129,8 +129,8 @@ (op_prec[exp1->e->op] < (op_prec[e->op] + 0))?"(%s)":"%s", o, (op_prec[exp2->e->op] < (op_prec[e->op] + 0))?"(%s)":"%s"); s = new char[strlen(t1) + strlen(e1) + strlen(e2) - 3]; - sprintf(s, t1, e1, e2); delete t1; - killexp(exp1); killexp(exp2); delete e1; delete e2; + sprintf(s, t1, e1, e2); delete [] t1; + killexp(exp1); killexp(exp2); delete [] e1; delete [] e2; return s; case TERNARY: exp1->numrefs += numrefs-1; exp2->numrefs += numrefs-1; exp3->numrefs += numrefs-1; @@ -142,38 +142,38 @@ o, (op_prec[exp2->e->op] < (op_prec[e->op] + 0))?"(%s)":"%s", o2, (op_prec[exp3->e->op] < (op_prec[e->op] + 0))?"(%s)":"%s"); s = new char[strlen(t1) + strlen(e1) + strlen(e2) + strlen(e3) - 5]; - sprintf(s, t1, e1, e2, e3); delete t1; + sprintf(s, t1, e1, e2, e3); delete [] t1; killexp(exp1); killexp(exp2); killexp(exp3); - delete e1; delete e2; delete e3; + delete [] e1; delete [] e2; delete [] e3; return s; case FUNCTIONCALL: t1 = new char[256]; exp1->numrefs += numrefs-1; e1 = exp1->toString(0); sizestr = strlen(e1) + 3; sprintf(t1, "%s(", e1); - killexp(exp1); delete e1; + killexp(exp1); delete [] e1; i = numexps; if (i) { while (--i) { explist[i]->numrefs += numrefs-1; e1 = explist[i]->toString(0); strcat(t1, e1); sizestr += strlen(e1) + 2; - killexp(explist[i]); delete e1; strcat(t1, ", "); + killexp(explist[i]); delete [] e1; strcat(t1, ", "); } explist[0]->numrefs += numrefs-1; e1 = explist[0]->toString(0); strcat(t1, e1); sizestr += strlen(e1); - killexp(explist[0]); delete e1; + killexp(explist[0]); delete [] e1; } strcat(t1,")"); s = new char[sizestr]; strcpy(s, t1); - delete t1; + delete [] t1; return s; case ARRAYACCESS: exp1->numrefs += numrefs-1; exp2->numrefs += numrefs-1; e1 = exp1->toString(0); e2 = exp2->toString(0); s = new char[strlen(e1) + strlen(e2) + 3]; sprintf(s, "%s[%s]", e1, e2); - killexp(exp1); killexp(exp2); delete e1; delete e2; + killexp(exp1); killexp(exp2); delete [] e1; delete [] e2; return s; case BRANCH: // if ((unsigned)e->op > minpc) { @@ -200,14 +200,14 @@ // s = new char[strlen(e1) + 21]; // sprintf(s, "if (%s) goto label%d", e1, branch_pc); // } - killexp(exp1); delete e1; + killexp(exp1); delete [] e1; return s; case SWITCH: exp1->numrefs += numrefs-1; e1 = exp1->toString(0); s = new char[strlen(e1) + 29]; sprintf(s, "switch (%s) default: label%d", e1, default_pc); - killexp(exp1); delete e1; + killexp(exp1); delete [] e1; return s; default: fprintf(stderr, "Error converting expressions to strings. %d\n", e->et); From lattner at cs.uiuc.edu Fri May 13 13:19:45 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Fri, 13 May 2005 13:19:45 -0500 Subject: [llvm-commits] CVS: llvm/test/Regression/Transforms/LevelRaise/2002-04-09-MissedRaise.ll Message-ID: <200505131819.j4DIJjZ3002496@apoc.cs.uiuc.edu> Changes in directory llvm/test/Regression/Transforms/LevelRaise: 2002-04-09-MissedRaise.ll (r1.4) removed --- Log message: remove test --- Diffs of the changes: (+0 -0) 0 files changed From reid at x10sys.com Fri May 13 13:30:24 2005 From: reid at x10sys.com (Reid Spencer) Date: Fri, 13 May 2005 13:30:24 -0500 Subject: [llvm-commits] CVS: llvm/autoconf/configure.ac Message-ID: <200505131830.NAA00317@zion.cs.uiuc.edu> Changes in directory llvm/autoconf: configure.ac updated: 1.177 -> 1.178 --- Log message: Fix the "stacker doesn't build without llvm-gcc" problem. The configure script was defaulting the LLVMGCC variable to "llvm-gcc" if it couldn't find llvm-gcc and --with-llvmgccdir was not specified. In this case, there is no llvm-gcc available on the system so we shouldn't assume that the user's path will find it any better than configure could. The fix is to default it to an empty string. If LLVMGCC is empty, the makefiles will avoid building things that depend on llvm-gcc and give a nice warning message to that effect. --- Diffs of the changes: (+2 -2) configure.ac | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) Index: llvm/autoconf/configure.ac diff -u llvm/autoconf/configure.ac:1.177 llvm/autoconf/configure.ac:1.178 --- llvm/autoconf/configure.ac:1.177 Thu May 12 16:56:03 2005 +++ llvm/autoconf/configure.ac Fri May 13 13:30:13 2005 @@ -354,8 +354,8 @@ AC_SUBST(ETAGSFLAGS,$ETAGSFLAGS) if test "$WITH_LLVMGCCDIR" = "default" ; then - AC_PATH_PROG(LLVMGCC, [llvm-gcc], [llvm-gcc]) - AC_PATH_PROG(LLVMGXX, [llvm-g++], [llvm-g++]) + AC_PATH_PROG(LLVMGCC, [llvm-gcc], []) + AC_PATH_PROG(LLVMGXX, [llvm-g++], []) else LLVMGCC=$WITH_LLVMGCCDIR/bin/llvm-gcc LLVMGXX=$WITH_LLVMGCCDIR/bin/llvm-g++ From reid at x10sys.com Fri May 13 13:30:24 2005 From: reid at x10sys.com (Reid Spencer) Date: Fri, 13 May 2005 13:30:24 -0500 Subject: [llvm-commits] CVS: llvm/configure Message-ID: <200505131830.NAA00321@zion.cs.uiuc.edu> Changes in directory llvm: configure updated: 1.182 -> 1.183 --- Log message: Fix the "stacker doesn't build without llvm-gcc" problem. The configure script was defaulting the LLVMGCC variable to "llvm-gcc" if it couldn't find llvm-gcc and --with-llvmgccdir was not specified. In this case, there is no llvm-gcc available on the system so we shouldn't assume that the user's path will find it any better than configure could. The fix is to default it to an empty string. If LLVMGCC is empty, the makefiles will avoid building things that depend on llvm-gcc and give a nice warning message to that effect. --- Diffs of the changes: (+0 -2) configure | 2 -- 1 files changed, 2 deletions(-) Index: llvm/configure diff -u llvm/configure:1.182 llvm/configure:1.183 --- llvm/configure:1.182 Thu May 12 17:15:34 2005 +++ llvm/configure Fri May 13 13:30:13 2005 @@ -24648,7 +24648,6 @@ done done - test -z "$ac_cv_path_LLVMGCC" && ac_cv_path_LLVMGCC="llvm-gcc" ;; esac fi @@ -24688,7 +24687,6 @@ done done - test -z "$ac_cv_path_LLVMGXX" && ac_cv_path_LLVMGXX="llvm-g++" ;; esac fi From reid at x10sys.com Fri May 13 13:33:05 2005 From: reid at x10sys.com (Reid Spencer) Date: Fri, 13 May 2005 13:33:05 -0500 Subject: [llvm-commits] CVS: llvm/Makefile.rules Message-ID: <200505131833.NAA00346@zion.cs.uiuc.edu> Changes in directory llvm: Makefile.rules updated: 1.308 -> 1.309 --- Log message: * Make some warning messages stand out a bit by putting **** at the end * Fix a typo that prevents BuildMode from being printed --- Diffs of the changes: (+3 -3) Makefile.rules | 6 +++--- 1 files changed, 3 insertions(+), 3 deletions(-) Index: llvm/Makefile.rules diff -u llvm/Makefile.rules:1.308 llvm/Makefile.rules:1.309 --- llvm/Makefile.rules:1.308 Thu Mar 10 22:15:18 2005 +++ llvm/Makefile.rules Fri May 13 13:32:54 2005 @@ -563,7 +563,7 @@ ifdef MODULE_NAME ifeq ($(strip $(LLVMGCC)),) -$(warning Modules require llvm-gcc but no llvm-gcc is available) +$(warning Modules require llvm-gcc but no llvm-gcc is available ****) else Module := $(LibDir)/$(MODULE_NAME).bc @@ -574,7 +574,7 @@ endif $(Module): $(BUILT_SOURCES) $(ObjectsBC) $(LibDir)/.dir $(GCCLD) - $(Echo) Building $(BuildMOde) Bytecode Module $(notdir $@) + $(Echo) Building $(BuildMode) Bytecode Module $(notdir $@) $(Verb) $(LinkModule) -o $@ $(ObjectsBC) all-local:: $(Module) @@ -663,7 +663,7 @@ #--------------------------------------------------------- ifdef BYTECODE_LIBRARY ifeq ($(strip $(LLVMGCC)),) -$(warning Bytecode libraries require llvm-gcc which could not be found) +$(warning Bytecode libraries require llvm-gcc which could not be found ****) else # make the C and C++ compilers strip debug info out of bytecode libraries. From lattner at cs.uiuc.edu Fri May 13 13:38:14 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Fri, 13 May 2005 13:38:14 -0500 Subject: [llvm-commits] CVS: llvm/test/Regression/Debugger/funccall.ll Message-ID: <200505131838.j4DIcEut008738@apoc.cs.uiuc.edu> Changes in directory llvm/test/Regression/Debugger: funccall.ll updated: 1.11 -> 1.12 --- Log message: This passes on sparc --- Diffs of the changes: (+1 -1) funccall.ll | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-) Index: llvm/test/Regression/Debugger/funccall.ll diff -u llvm/test/Regression/Debugger/funccall.ll:1.11 llvm/test/Regression/Debugger/funccall.ll:1.12 --- llvm/test/Regression/Debugger/funccall.ll:1.11 Thu May 12 23:51:58 2005 +++ llvm/test/Regression/Debugger/funccall.ll Fri May 13 13:37:58 2005 @@ -8,7 +8,7 @@ ;; RUN: llvm-as -f %s -o %t.bc ;; RUN: llvm-db %t.bc < %t.commands | grep 'in main at funccall.c:11:2' -;; XFAIL: * +;; XFAIL: x86,x86_64,powerpc,alpha,ia64 ;; Debugger type declarations %lldb.compile_unit = type { uint, ushort, ushort, sbyte*, sbyte*, sbyte*, {}* } From lattner at cs.uiuc.edu Fri May 13 13:40:33 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Fri, 13 May 2005 13:40:33 -0500 Subject: [llvm-commits] CVS: llvm/include/llvm/CodeGen/SelectionDAG.h SelectionDAGNodes.h Message-ID: <200505131840.j4DIeXm8009669@apoc.cs.uiuc.edu> Changes in directory llvm/include/llvm/CodeGen: SelectionDAG.h updated: 1.24 -> 1.25 SelectionDAGNodes.h updated: 1.39 -> 1.40 --- Log message: add TAILCALL node --- Diffs of the changes: (+7 -5) SelectionDAG.h | 8 ++++---- SelectionDAGNodes.h | 4 +++- 2 files changed, 7 insertions(+), 5 deletions(-) Index: llvm/include/llvm/CodeGen/SelectionDAG.h diff -u llvm/include/llvm/CodeGen/SelectionDAG.h:1.24 llvm/include/llvm/CodeGen/SelectionDAG.h:1.25 --- llvm/include/llvm/CodeGen/SelectionDAG.h:1.24 Mon May 9 15:21:27 2005 +++ llvm/include/llvm/CodeGen/SelectionDAG.h Fri May 13 13:40:17 2005 @@ -129,8 +129,8 @@ /// getCall - Note that this destroys the vector of RetVals passed in. /// SDNode *getCall(std::vector &RetVals, SDOperand Chain, - SDOperand Callee) { - SDNode *NN = new SDNode(ISD::CALL, Chain, Callee); + SDOperand Callee, bool isTailCall = false) { + SDNode *NN = new SDNode(isTailCall ? ISD::TAILCALL : ISD::CALL, Chain, Callee); NN->setValueTypes(RetVals); AllNodes.push_back(NN); return NN; @@ -140,10 +140,10 @@ /// where arguments are passed in physical registers. This destroys the /// RetVals and ArgsInRegs vectors. SDNode *getCall(std::vector &RetVals, SDOperand Chain, - SDOperand Callee, std::vector &ArgsInRegs) { + SDOperand Callee, std::vector &ArgsInRegs, bool isTailCall = false) { ArgsInRegs.insert(ArgsInRegs.begin(), Callee); ArgsInRegs.insert(ArgsInRegs.begin(), Chain); - SDNode *NN = new SDNode(ISD::CALL, ArgsInRegs); + SDNode *NN = new SDNode(isTailCall ? ISD::TAILCALL : ISD::CALL, ArgsInRegs); NN->setValueTypes(RetVals); AllNodes.push_back(NN); return NN; Index: llvm/include/llvm/CodeGen/SelectionDAGNodes.h diff -u llvm/include/llvm/CodeGen/SelectionDAGNodes.h:1.39 llvm/include/llvm/CodeGen/SelectionDAGNodes.h:1.40 --- llvm/include/llvm/CodeGen/SelectionDAGNodes.h:1.39 Thu May 12 18:23:19 2005 +++ llvm/include/llvm/CodeGen/SelectionDAGNodes.h Fri May 13 13:40:17 2005 @@ -234,8 +234,10 @@ // CALL - Call to a function pointer. The first operand is the chain, the // second is the destination function pointer (a GlobalAddress for a direct // call). Arguments have already been lowered to explicit DAGs according to - // the calling convention in effect here. + // the calling convention in effect here. TAILCALL is the same as CALL, but + // the callee is known not to access the stack of the caller. CALL, + TAILCALL, // MEMSET/MEMCPY/MEMMOVE - The first operand is the chain, and the rest // correspond to the operands of the LLVM intrinsic functions. The only From lattner at cs.uiuc.edu Fri May 13 13:44:00 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Fri, 13 May 2005 13:44:00 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp SelectionDAG.cpp Message-ID: <200505131844.j4DIi0EJ014403@apoc.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen/SelectionDAG: LegalizeDAG.cpp updated: 1.121 -> 1.122 SelectionDAG.cpp updated: 1.110 -> 1.111 --- Log message: Handle TAILCALL node --- Diffs of the changes: (+10 -3) LegalizeDAG.cpp | 12 +++++++++--- SelectionDAG.cpp | 1 + 2 files changed, 10 insertions(+), 3 deletions(-) Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.121 llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.122 --- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.121 Fri May 13 00:17:00 2005 +++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Fri May 13 13:43:43 2005 @@ -361,6 +361,7 @@ AddLegalizedOperand(SDOperand(Node, 1), Result.getValue(1)); return Result.getValue(Op.ResNo); + case ISD::TAILCALL: case ISD::CALL: { Tmp1 = LegalizeOp(Node->getOperand(0)); // Legalize the chain. Tmp2 = LegalizeOp(Node->getOperand(1)); // Legalize the callee. @@ -377,7 +378,8 @@ RetTyVTs.reserve(Node->getNumValues()); for (unsigned i = 0, e = Node->getNumValues(); i != e; ++i) RetTyVTs.push_back(Node->getValueType(i)); - Result = SDOperand(DAG.getCall(RetTyVTs, Tmp1, Tmp2, Ops), 0); + Result = SDOperand(DAG.getCall(RetTyVTs, Tmp1, Tmp2, Ops, + Node->getOpcode() == ISD::TAILCALL), 0); } else { Result = Result.getValue(0); } @@ -1689,6 +1691,7 @@ Tmp3 = PromoteOp(Node->getOperand(2)); // Legalize the op1 Result = DAG.getNode(ISD::SELECT, NVT, Tmp1, Tmp2, Tmp3); break; + case ISD::TAILCALL: case ISD::CALL: { Tmp1 = LegalizeOp(Node->getOperand(0)); // Legalize the chain. Tmp2 = LegalizeOp(Node->getOperand(1)); // Legalize the callee. @@ -1703,7 +1706,8 @@ RetTyVTs.reserve(2); RetTyVTs.push_back(NVT); RetTyVTs.push_back(MVT::Other); - SDNode *NC = DAG.getCall(RetTyVTs, Tmp1, Tmp2, Ops); + SDNode *NC = DAG.getCall(RetTyVTs, Tmp1, Tmp2, Ops, + Node->getOpcode() == ISD::TAILCALL); Result = SDOperand(NC, 0); // Insert the new chain mapping. @@ -2341,6 +2345,7 @@ std::swap(Lo, Hi); break; } + case ISD::TAILCALL: case ISD::CALL: { SDOperand Chain = LegalizeOp(Node->getOperand(0)); // Legalize the chain. SDOperand Callee = LegalizeOp(Node->getOperand(1)); // Legalize the callee. @@ -2360,7 +2365,8 @@ RetTyVTs.push_back(NVT); RetTyVTs.push_back(NVT); RetTyVTs.push_back(MVT::Other); - SDNode *NC = DAG.getCall(RetTyVTs, Chain, Callee, Ops); + SDNode *NC = DAG.getCall(RetTyVTs, Chain, Callee, Ops, + Node->getOpcode() == ISD::TAILCALL); Lo = SDOperand(NC, 0); Hi = SDOperand(NC, 1); Index: llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp diff -u llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:1.110 llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:1.111 --- llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:1.110 Thu May 12 18:51:40 2005 +++ llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp Fri May 13 13:43:43 2005 @@ -1690,6 +1690,7 @@ case ISD::BRCONDTWOWAY: return "brcondtwoway"; case ISD::RET: return "ret"; case ISD::CALL: return "call"; + case ISD::TAILCALL:return "tailcall"; case ISD::CALLSEQ_START: return "callseq_start"; case ISD::CALLSEQ_END: return "callseq_end"; From lattner at cs.uiuc.edu Fri May 13 13:50:23 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Fri, 13 May 2005 13:50:23 -0500 Subject: [llvm-commits] CVS: llvm/include/llvm/Target/TargetLowering.h Message-ID: <200505131850.j4DIoNQo020992@apoc.cs.uiuc.edu> Changes in directory llvm/include/llvm/Target: TargetLowering.h updated: 1.12 -> 1.13 --- Log message: Add an isTailCall flag to LowerCallTo --- Diffs of the changes: (+2 -2) TargetLowering.h | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) Index: llvm/include/llvm/Target/TargetLowering.h diff -u llvm/include/llvm/Target/TargetLowering.h:1.12 llvm/include/llvm/Target/TargetLowering.h:1.13 --- llvm/include/llvm/Target/TargetLowering.h:1.12 Thu May 12 14:57:08 2005 +++ llvm/include/llvm/Target/TargetLowering.h Fri May 13 13:50:07 2005 @@ -262,8 +262,8 @@ typedef std::vector > ArgListTy; virtual std::pair LowerCallTo(SDOperand Chain, const Type *RetTy, bool isVarArg, - unsigned CallingConv, SDOperand Callee, ArgListTy &Args, - SelectionDAG &DAG) = 0; + unsigned CallingConv, bool isTailCall, SDOperand Callee, + ArgListTy &Args, SelectionDAG &DAG) = 0; /// LowerVAStart - This lowers the llvm.va_start intrinsic. If not /// implemented, this method prints a message and aborts. From lattner at cs.uiuc.edu Fri May 13 13:50:39 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Fri, 13 May 2005 13:50:39 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/Alpha/AlphaISelPattern.cpp Message-ID: <200505131850.j4DIodDt021019@apoc.cs.uiuc.edu> Changes in directory llvm/lib/Target/Alpha: AlphaISelPattern.cpp updated: 1.111 -> 1.112 --- Log message: Add an isTailCall flag to LowerCallTo --- Diffs of the changes: (+3 -2) AlphaISelPattern.cpp | 5 +++-- 1 files changed, 3 insertions(+), 2 deletions(-) Index: llvm/lib/Target/Alpha/AlphaISelPattern.cpp diff -u llvm/lib/Target/Alpha/AlphaISelPattern.cpp:1.111 llvm/lib/Target/Alpha/AlphaISelPattern.cpp:1.112 --- llvm/lib/Target/Alpha/AlphaISelPattern.cpp:1.111 Thu May 12 18:23:49 2005 +++ llvm/lib/Target/Alpha/AlphaISelPattern.cpp Fri May 13 13:50:25 2005 @@ -119,7 +119,8 @@ /// actual call. virtual std::pair LowerCallTo(SDOperand Chain, const Type *RetTy, bool isVarArg, unsigned CC, - SDOperand Callee, ArgListTy &Args, SelectionDAG &DAG); + bool isTailCall, SDOperand Callee, ArgListTy &Args, + SelectionDAG &DAG); virtual std::pair LowerVAStart(SDOperand Chain, SelectionDAG &DAG); @@ -304,7 +305,7 @@ std::pair AlphaTargetLowering::LowerCallTo(SDOperand Chain, const Type *RetTy, bool isVarArg, - unsigned CallingConv, + unsigned CallingConv, bool isTailCall, SDOperand Callee, ArgListTy &Args, SelectionDAG &DAG) { int NumBytes = 0; From lattner at cs.uiuc.edu Fri May 13 13:50:41 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Fri, 13 May 2005 13:50:41 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/IA64/IA64ISelPattern.cpp Message-ID: <200505131850.j4DIofDX021026@apoc.cs.uiuc.edu> Changes in directory llvm/lib/Target/IA64: IA64ISelPattern.cpp updated: 1.40 -> 1.41 --- Log message: Add an isTailCall flag to LowerCallTo --- Diffs of the changes: (+3 -2) IA64ISelPattern.cpp | 5 +++-- 1 files changed, 3 insertions(+), 2 deletions(-) Index: llvm/lib/Target/IA64/IA64ISelPattern.cpp diff -u llvm/lib/Target/IA64/IA64ISelPattern.cpp:1.40 llvm/lib/Target/IA64/IA64ISelPattern.cpp:1.41 --- llvm/lib/Target/IA64/IA64ISelPattern.cpp:1.40 Thu May 12 18:23:51 2005 +++ llvm/lib/Target/IA64/IA64ISelPattern.cpp Fri May 13 13:50:27 2005 @@ -110,7 +110,8 @@ /// actual call. virtual std::pair LowerCallTo(SDOperand Chain, const Type *RetTy, bool isVarArg, unsigned CC, - SDOperand Callee, ArgListTy &Args, SelectionDAG &DAG); + bool isTailCall, SDOperand Callee, ArgListTy &Args, + SelectionDAG &DAG); virtual std::pair LowerVAStart(SDOperand Chain, SelectionDAG &DAG); @@ -310,7 +311,7 @@ std::pair IA64TargetLowering::LowerCallTo(SDOperand Chain, const Type *RetTy, bool isVarArg, - unsigned CallingConv, + unsigned CallingConv, bool isTailCall, SDOperand Callee, ArgListTy &Args, SelectionDAG &DAG) { From lattner at cs.uiuc.edu Fri May 13 13:50:45 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Fri, 13 May 2005 13:50:45 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/X86/X86ISelPattern.cpp Message-ID: <200505131850.j4DIojHH021051@apoc.cs.uiuc.edu> Changes in directory llvm/lib/Target/X86: X86ISelPattern.cpp updated: 1.125 -> 1.126 --- Log message: Add an isTailCall flag to LowerCallTo --- Diffs of the changes: (+9 -3) X86ISelPattern.cpp | 12 +++++++++--- 1 files changed, 9 insertions(+), 3 deletions(-) Index: llvm/lib/Target/X86/X86ISelPattern.cpp diff -u llvm/lib/Target/X86/X86ISelPattern.cpp:1.125 llvm/lib/Target/X86/X86ISelPattern.cpp:1.126 --- llvm/lib/Target/X86/X86ISelPattern.cpp:1.125 Fri May 13 02:38:09 2005 +++ llvm/lib/Target/X86/X86ISelPattern.cpp Fri May 13 13:50:31 2005 @@ -45,6 +45,7 @@ class X86TargetLowering : public TargetLowering { int VarArgsFrameIndex; // FrameIndex for start of varargs area. int ReturnAddrIndex; // FrameIndex for return slot. + int BytesToPopOnReturn; // Number of bytes ret should pop. public: X86TargetLowering(TargetMachine &TM) : TargetLowering(TM) { // Set up the TargetLowering object. @@ -117,7 +118,8 @@ /// actual call. virtual std::pair LowerCallTo(SDOperand Chain, const Type *RetTy, bool isVarArg, unsigned CC, - SDOperand Callee, ArgListTy &Args, SelectionDAG &DAG); + bool isTailCall, SDOperand Callee, ArgListTy &Args, + SelectionDAG &DAG); virtual std::pair LowerVAStart(SDOperand Chain, SelectionDAG &DAG); @@ -154,6 +156,7 @@ std::pair X86TargetLowering::LowerCallTo(SDOperand Chain, const Type *RetTy, bool isVarArg, unsigned CallingConv, + bool isTailCall, SDOperand Callee, ArgListTy &Args, SelectionDAG &DAG) { assert((!isVarArg || CallingConv == CallingConv::C) && @@ -330,7 +333,8 @@ SDOperand TheCall = SDOperand(DAG.getCall(RetVals, Chain, Callee), 0); Chain = TheCall.getValue(RetTyVT != MVT::isVoid); Chain = DAG.getNode(ISD::CALLSEQ_END, MVT::Other, Chain, - DAG.getConstant(NumBytes, getPointerTy())); + DAG.getConstant(NumBytes, getPointerTy()), + DAG.getConstant(0, getPointerTy())); return std::make_pair(TheCall, Chain); } @@ -669,7 +673,9 @@ RegValuesToPass), 0); Chain = TheCall.getValue(RetTyVT != MVT::isVoid); Chain = DAG.getNode(ISD::CALLSEQ_END, MVT::Other, Chain, - DAG.getConstant(NumBytes, getPointerTy())); + DAG.getConstant(NumBytes, getPointerTy()), + // The callee pops the arguments off the stack. + DAG.getConstant(ArgOffset, getPointerTy())); return std::make_pair(TheCall, Chain); } From lattner at cs.uiuc.edu Fri May 13 13:50:56 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Fri, 13 May 2005 13:50:56 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp SelectionDAGISel.cpp Message-ID: <200505131850.j4DIou8H021464@apoc.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen/SelectionDAG: LegalizeDAG.cpp updated: 1.122 -> 1.123 SelectionDAGISel.cpp updated: 1.55 -> 1.56 --- Log message: Add an isTailCall flag to LowerCallTo --- Diffs of the changes: (+11 -7) LegalizeDAG.cpp | 11 +++++++---- SelectionDAGISel.cpp | 7 ++++--- 2 files changed, 11 insertions(+), 7 deletions(-) Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.122 llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.123 --- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.122 Fri May 13 13:43:43 2005 +++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Fri May 13 13:50:42 2005 @@ -18,6 +18,7 @@ #include "llvm/Target/TargetLowering.h" #include "llvm/Target/TargetData.h" #include "llvm/Target/TargetOptions.h" +#include "llvm/CallingConv.h" #include "llvm/Constants.h" #include using namespace llvm; @@ -930,7 +931,7 @@ } std::pair CallResult = - TLI.LowerCallTo(Tmp1, Type::VoidTy, false, 0, + TLI.LowerCallTo(Tmp1, Type::VoidTy, false, CallingConv::C, false, DAG.getExternalSymbol(FnName, IntPtr), Args, DAG); Result = LegalizeOp(CallResult.second); break; @@ -1255,7 +1256,7 @@ Args.push_back(std::make_pair(Tmp1, T)); // FIXME: should use ExpandLibCall! std::pair CallResult = - TLI.LowerCallTo(DAG.getEntryNode(), T, false, 0, + TLI.LowerCallTo(DAG.getEntryNode(), T, false, CallingConv::C, true, DAG.getExternalSymbol(FnName, VT), Args, DAG); Result = LegalizeOp(CallResult.first); break; @@ -2107,7 +2108,8 @@ // Splice the libcall in wherever FindInputOutputChains tells us to. const Type *RetTy = MVT::getTypeForValueType(Node->getValueType(0)); std::pair CallInfo = - TLI.LowerCallTo(InChain, RetTy, false, 0, Callee, Args, DAG); + TLI.LowerCallTo(InChain, RetTy, false, CallingConv::C, false, + Callee, Args, DAG); SpliceCallInto(CallInfo.second, OutChain); NeedsAnotherIteration = true; @@ -2204,7 +2206,8 @@ const Type *RetTy = MVT::getTypeForValueType(DestTy); std::pair CallResult = - TLI.LowerCallTo(InChain, RetTy, false, 0, Callee, Args, DAG); + TLI.LowerCallTo(InChain, RetTy, false, CallingConv::C, true, + Callee, Args, DAG); SpliceCallInto(CallResult.second, OutChain); return CallResult.first; Index: llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp diff -u llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.55 llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.56 --- llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.55 Fri May 13 02:33:32 2005 +++ llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp Fri May 13 13:50:42 2005 @@ -13,6 +13,7 @@ #define DEBUG_TYPE "isel" #include "llvm/CodeGen/SelectionDAGISel.h" +#include "llvm/CallingConv.h" #include "llvm/Constants.h" #include "llvm/DerivedTypes.h" #include "llvm/Function.h" @@ -774,7 +775,7 @@ std::pair Result = TLI.LowerCallTo(getRoot(), I.getType(), FTy->isVarArg(), I.getCallingConv(), - Callee, Args, DAG); + I.isTailCall(), Callee, Args, DAG); if (I.getType() != Type::VoidTy) setValue(&I, Result.first); DAG.setRoot(Result.second); @@ -799,7 +800,7 @@ Args.push_back(std::make_pair(Src, TLI.getTargetData().getIntPtrType())); std::pair Result = - TLI.LowerCallTo(getRoot(), I.getType(), false, 0, + TLI.LowerCallTo(getRoot(), I.getType(), false, CallingConv::C, true, DAG.getExternalSymbol("malloc", IntPtr), Args, DAG); setValue(&I, Result.first); // Pointers always fit in registers @@ -812,7 +813,7 @@ TLI.getTargetData().getIntPtrType())); MVT::ValueType IntPtr = TLI.getPointerTy(); std::pair Result = - TLI.LowerCallTo(getRoot(), Type::VoidTy, false, 0, + TLI.LowerCallTo(getRoot(), Type::VoidTy, false, CallingConv::C, true, DAG.getExternalSymbol("free", IntPtr), Args, DAG); DAG.setRoot(Result.second); } From lattner at cs.uiuc.edu Fri May 13 13:50:43 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Fri, 13 May 2005 13:50:43 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/PowerPC/PPC32ISelPattern.cpp PPC64ISelPattern.cpp Message-ID: <200505131850.j4DIohcl021041@apoc.cs.uiuc.edu> Changes in directory llvm/lib/Target/PowerPC: PPC32ISelPattern.cpp updated: 1.88 -> 1.89 PPC64ISelPattern.cpp updated: 1.18 -> 1.19 --- Log message: Add an isTailCall flag to LowerCallTo --- Diffs of the changes: (+6 -4) PPC32ISelPattern.cpp | 5 +++-- PPC64ISelPattern.cpp | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) Index: llvm/lib/Target/PowerPC/PPC32ISelPattern.cpp diff -u llvm/lib/Target/PowerPC/PPC32ISelPattern.cpp:1.88 llvm/lib/Target/PowerPC/PPC32ISelPattern.cpp:1.89 --- llvm/lib/Target/PowerPC/PPC32ISelPattern.cpp:1.88 Fri May 13 11:18:54 2005 +++ llvm/lib/Target/PowerPC/PPC32ISelPattern.cpp Fri May 13 13:50:29 2005 @@ -94,7 +94,8 @@ /// actual call. virtual std::pair LowerCallTo(SDOperand Chain, const Type *RetTy, bool isVarArg, unsigned CC, - SDOperand Callee, ArgListTy &Args, SelectionDAG &DAG); + bool isTailCall, SDOperand Callee, ArgListTy &Args, + SelectionDAG &DAG); virtual std::pair LowerVAStart(SDOperand Chain, SelectionDAG &DAG); @@ -281,7 +282,7 @@ std::pair PPC32TargetLowering::LowerCallTo(SDOperand Chain, const Type *RetTy, bool isVarArg, - unsigned CallingConv, + unsigned CallingConv, bool isTailCall, SDOperand Callee, ArgListTy &Args, SelectionDAG &DAG) { // args_to_use will accumulate outgoing args for the ISD::CALL case in Index: llvm/lib/Target/PowerPC/PPC64ISelPattern.cpp diff -u llvm/lib/Target/PowerPC/PPC64ISelPattern.cpp:1.18 llvm/lib/Target/PowerPC/PPC64ISelPattern.cpp:1.19 --- llvm/lib/Target/PowerPC/PPC64ISelPattern.cpp:1.18 Fri May 13 11:20:22 2005 +++ llvm/lib/Target/PowerPC/PPC64ISelPattern.cpp Fri May 13 13:50:29 2005 @@ -94,7 +94,8 @@ /// actual call. virtual std::pair LowerCallTo(SDOperand Chain, const Type *RetTy, bool isVarArg, unsigned CC, - SDOperand Callee, ArgListTy &Args, SelectionDAG &DAG); + bool isTailCall, SDOperand Callee, ArgListTy &Args, + SelectionDAG &DAG); virtual std::pair LowerVAStart(SDOperand Chain, SelectionDAG &DAG); @@ -237,7 +238,7 @@ std::pair PPC64TargetLowering::LowerCallTo(SDOperand Chain, const Type *RetTy, bool isVarArg, - unsigned CallingConv, + unsigned CallingConv, bool isTailCall, SDOperand Callee, ArgListTy &Args, SelectionDAG &DAG) { // args_to_use will accumulate outgoing args for the ISD::CALL case in From lattner at cs.uiuc.edu Fri May 13 14:42:49 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Fri, 13 May 2005 14:42:49 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/SparcV9/InstrSched/InstrScheduling.cpp Message-ID: <200505131942.j4DJgnU8025494@apoc.cs.uiuc.edu> Changes in directory llvm/lib/Target/SparcV9/InstrSched: InstrScheduling.cpp updated: 1.82 -> 1.83 --- Log message: hide this option --- Diffs of the changes: (+1 -1) InstrScheduling.cpp | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-) Index: llvm/lib/Target/SparcV9/InstrSched/InstrScheduling.cpp diff -u llvm/lib/Target/SparcV9/InstrSched/InstrScheduling.cpp:1.82 llvm/lib/Target/SparcV9/InstrSched/InstrScheduling.cpp:1.83 --- llvm/lib/Target/SparcV9/InstrSched/InstrScheduling.cpp:1.82 Thu Apr 21 18:27:12 2005 +++ llvm/lib/Target/SparcV9/InstrSched/InstrScheduling.cpp Fri May 13 14:42:31 2005 @@ -28,7 +28,7 @@ SchedDebugLevel_t SchedDebugLevel; -static cl::opt EnableFillingDelaySlots("sched-fill-delay-slots", +static cl::opt EnableFillingDelaySlots("sched-fill-delay-slots", cl::Hidden, cl::desc("Fill branch delay slots during local scheduling")); static cl::opt From lattner at cs.uiuc.edu Fri May 13 14:44:35 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Fri, 13 May 2005 14:44:35 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/SparcV9/SparcV9TargetMachine.cpp Message-ID: <200505131944.j4DJiZvL025647@apoc.cs.uiuc.edu> Changes in directory llvm/lib/Target/SparcV9: SparcV9TargetMachine.cpp updated: 1.135 -> 1.136 --- Log message: hide this option --- Diffs of the changes: (+1 -1) SparcV9TargetMachine.cpp | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-) Index: llvm/lib/Target/SparcV9/SparcV9TargetMachine.cpp diff -u llvm/lib/Target/SparcV9/SparcV9TargetMachine.cpp:1.135 llvm/lib/Target/SparcV9/SparcV9TargetMachine.cpp:1.136 --- llvm/lib/Target/SparcV9/SparcV9TargetMachine.cpp:1.135 Thu Apr 21 18:25:42 2005 +++ llvm/lib/Target/SparcV9/SparcV9TargetMachine.cpp Fri May 13 14:44:21 2005 @@ -58,7 +58,7 @@ cl::opt DisablePeephole("disable-peephole", cl::desc("Disable peephole optimization pass")); - cl::opt EmitMappingInfoOpt("enable-maps", + cl::opt EmitMappingInfoOpt("enable-maps", cl::ReallyHidden, cl::location(EmitMappingInfo), cl::init(false), cl::desc("Emit LLVM-to-MachineCode mapping info to assembly")); From lattner at cs.uiuc.edu Fri May 13 14:45:59 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Fri, 13 May 2005 14:45:59 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/SparcV9/SparcV9TargetMachine.cpp Message-ID: <200505131945.j4DJjxOY025956@apoc.cs.uiuc.edu> Changes in directory llvm/lib/Target/SparcV9: SparcV9TargetMachine.cpp updated: 1.136 -> 1.137 --- Log message: clarify that these are v9 options --- Diffs of the changes: (+3 -3) SparcV9TargetMachine.cpp | 6 +++--- 1 files changed, 3 insertions(+), 3 deletions(-) Index: llvm/lib/Target/SparcV9/SparcV9TargetMachine.cpp diff -u llvm/lib/Target/SparcV9/SparcV9TargetMachine.cpp:1.136 llvm/lib/Target/SparcV9/SparcV9TargetMachine.cpp:1.137 --- llvm/lib/Target/SparcV9/SparcV9TargetMachine.cpp:1.136 Fri May 13 14:44:21 2005 +++ llvm/lib/Target/SparcV9/SparcV9TargetMachine.cpp Fri May 13 14:45:45 2005 @@ -53,10 +53,10 @@ namespace { cl::opt DisableSched("disable-sched", - cl::desc("Disable local scheduling pass")); + cl::desc("Disable sparcv9 local scheduling pass")); cl::opt DisablePeephole("disable-peephole", - cl::desc("Disable peephole optimization pass")); + cl::desc("Disable sparcv9 peephole optimization pass")); cl::opt EmitMappingInfoOpt("enable-maps", cl::ReallyHidden, cl::location(EmitMappingInfo), @@ -64,7 +64,7 @@ cl::desc("Emit LLVM-to-MachineCode mapping info to assembly")); cl::opt EnableModSched("enable-modsched", - cl::desc("Enable modulo scheduling pass instead of local scheduling"), cl::Hidden); + cl::desc("Enable sparcv9 modulo scheduling pass instead of local scheduling"), cl::Hidden); // Register the target. RegisterTarget X("sparcv9", " SPARC V9"); From criswell at cs.uiuc.edu Fri May 13 14:48:33 2005 From: criswell at cs.uiuc.edu (John Criswell) Date: Fri, 13 May 2005 14:48:33 -0500 Subject: [llvm-commits] CVS: llvm/docs/TestingGuide.html Message-ID: <200505131948.OAA13762@choi.cs.uiuc.edu> Changes in directory llvm/docs: TestingGuide.html updated: 1.25 -> 1.26 --- Log message: Minor corrections and clarifications. --- Diffs of the changes: (+6 -6) TestingGuide.html | 12 ++++++------ 1 files changed, 6 insertions(+), 6 deletions(-) Index: llvm/docs/TestingGuide.html diff -u llvm/docs/TestingGuide.html:1.25 llvm/docs/TestingGuide.html:1.26 --- llvm/docs/TestingGuide.html:1.25 Thu Mar 10 16:51:59 2005 +++ llvm/docs/TestingGuide.html Fri May 13 14:48:07 2005 @@ -396,8 +396,8 @@ tests. By default, it will run all of these tests.

    To run only the DejaGNU driven tests, run gmake at the -command line in llvm/tests. To run a specific directory of tests, use the -TESTSUITE variable. +command line in llvm/test. To run a specific directory of tests, use +the TESTSUITE variable.

    For example, to run the Regression tests, type @@ -422,7 +422,7 @@ properly configured.

  • Use the configure script found in the llvm-test source directory:
    - $BUILD_SRC_DIR/configure --with-llvmsrc=$LLVM_SRC_ROOT --with-llvmobj=$LLVM_OBJ_ROOT + $LLVM_SRC_ROOT/projects/llvm-test/configure --with-llvmsrc=$LLVM_SRC_ROOT --with-llvmobj=$LLVM_OBJ_ROOT
  • gmake
  • @@ -450,7 +450,7 @@ the result for such tests will be XFAIL (eXpected FAILure). In this way, you can tell the difference between an expected and unexpected failure.

    -

    The tests in llvm-test have no such feature as of this time. If the +

    The tests in llvm-test have no such feature at this time. If the test passes, only warnings and other miscellaneous output will be generated. If a test fails, a large <program> FAILED message will be displayed. This will help you separate benign warnings from actual test failures.

    @@ -516,9 +516,9 @@ Valid HTML 4.01! - John T. Criswell
    + John T. Criswell, Reid Spencer, and Tanya Lattner
    The LLVM Compiler Infrastructure
    - Last modified: $Date: 2005/03/10 22:51:59 $ + Last modified: $Date: 2005/05/13 19:48:07 $ From lattner at cs.uiuc.edu Fri May 13 14:48:51 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Fri, 13 May 2005 14:48:51 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/TargetMachine.cpp Message-ID: <200505131948.j4DJmp2q025978@apoc.cs.uiuc.edu> Changes in directory llvm/lib/Target: TargetMachine.cpp updated: 1.38 -> 1.39 --- Log message: capitalize --- Diffs of the changes: (+1 -1) TargetMachine.cpp | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-) Index: llvm/lib/Target/TargetMachine.cpp diff -u llvm/lib/Target/TargetMachine.cpp:1.38 llvm/lib/Target/TargetMachine.cpp:1.39 --- llvm/lib/Target/TargetMachine.cpp:1.38 Fri Apr 29 23:09:52 2005 +++ llvm/lib/Target/TargetMachine.cpp Fri May 13 14:48:34 2005 @@ -44,7 +44,7 @@ cl::location(NoExcessFPPrecision), cl::init(false)); cl::opt PatternISel("enable-pattern-isel", - cl::desc("sets the pattern ISel off(0), on(1), default(2)"), + cl::desc("Turn the pattern ISel off(0), on(1), default(2)"), cl::location(PatternISelTriState), cl::init(2)); cl::opt From alenhar2 at cs.uiuc.edu Fri May 13 14:49:18 2005 From: alenhar2 at cs.uiuc.edu (Andrew Lenharth) Date: Fri, 13 May 2005 14:49:18 -0500 Subject: [llvm-commits] CVS: llvm/test/Regression/CodeGen/Alpha/ctlz.ll ctpop.ll neg1.ll s4addq.ll Message-ID: <200505131949.OAA13783@choi.cs.uiuc.edu> Changes in directory llvm/test/Regression/CodeGen/Alpha: ctlz.ll updated: 1.3 -> 1.4 ctpop.ll updated: 1.3 -> 1.4 neg1.ll updated: 1.2 -> 1.3 s4addq.ll updated: 1.4 -> 1.5 --- Log message: fix regression tests --- Diffs of the changes: (+4 -7) ctlz.ll | 3 +-- ctpop.ll | 2 +- neg1.ll | 3 +-- s4addq.ll | 3 +-- 4 files changed, 4 insertions(+), 7 deletions(-) Index: llvm/test/Regression/CodeGen/Alpha/ctlz.ll diff -u llvm/test/Regression/CodeGen/Alpha/ctlz.ll:1.3 llvm/test/Regression/CodeGen/Alpha/ctlz.ll:1.4 --- llvm/test/Regression/CodeGen/Alpha/ctlz.ll:1.3 Fri May 13 12:36:00 2005 +++ llvm/test/Regression/CodeGen/Alpha/ctlz.ll Fri May 13 14:49:01 2005 @@ -1,6 +1,5 @@ ; Make sure this testcase codegens to the ctlz instruction -; XFAIL: * -; RUN: llvm-as < %s | llc -march=alpha -enable-alpha-CT | grep 'ctlz' +; RUN: llvm-as < %s | llc -march=alpha -enable-alpha-CT | grep -i 'ctlz' declare ubyte %llvm.ctlz(ubyte) Index: llvm/test/Regression/CodeGen/Alpha/ctpop.ll diff -u llvm/test/Regression/CodeGen/Alpha/ctpop.ll:1.3 llvm/test/Regression/CodeGen/Alpha/ctpop.ll:1.4 --- llvm/test/Regression/CodeGen/Alpha/ctpop.ll:1.3 Fri May 13 12:36:00 2005 +++ llvm/test/Regression/CodeGen/Alpha/ctpop.ll Fri May 13 14:49:02 2005 @@ -1,6 +1,6 @@ ; Make sure this testcase codegens to the ctpop instruction ; XFAIL: * -; RUN: llvm-as < %s | llc -march=alpha -enable-alpha-CT | grep 'ctpop' +; RUN: llvm-as < %s | llc -march=alpha -enable-alpha-CT | grep -i 'ctpop' declare long %llvm.ctpop(long) Index: llvm/test/Regression/CodeGen/Alpha/neg1.ll diff -u llvm/test/Regression/CodeGen/Alpha/neg1.ll:1.2 llvm/test/Regression/CodeGen/Alpha/neg1.ll:1.3 --- llvm/test/Regression/CodeGen/Alpha/neg1.ll:1.2 Fri May 13 12:36:00 2005 +++ llvm/test/Regression/CodeGen/Alpha/neg1.ll Fri May 13 14:49:02 2005 @@ -1,6 +1,5 @@ ; Make sure this testcase codegens to the lda -1 instruction -; XFAIL: * -; RUN: llvm-as < %s | llc -march=alpha | grep '-1' +; RUN: llvm-as < %s | llc -march=alpha | grep '\-1' implementation ; Functions: Index: llvm/test/Regression/CodeGen/Alpha/s4addq.ll diff -u llvm/test/Regression/CodeGen/Alpha/s4addq.ll:1.4 llvm/test/Regression/CodeGen/Alpha/s4addq.ll:1.5 --- llvm/test/Regression/CodeGen/Alpha/s4addq.ll:1.4 Fri May 13 12:36:00 2005 +++ llvm/test/Regression/CodeGen/Alpha/s4addq.ll Fri May 13 14:49:02 2005 @@ -1,12 +1,11 @@ ; Make sure this testcase codegens to the S4ADDQ instruction -; XFAIL: * ; RUN: llvm-as < %s | llc -march=alpha | grep 's4addq' implementation ; Functions: long %bar(long %x, long %y) { entry: - %tmp.1 = shl long %x, ubyte 3 ; [#uses=1] + %tmp.1 = shl long %x, ubyte 2 ; [#uses=1] %tmp.3 = add long %tmp.1, %y ; [#uses=1] ret long %tmp.3 } From lattner at cs.uiuc.edu Fri May 13 14:49:25 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Fri, 13 May 2005 14:49:25 -0500 Subject: [llvm-commits] CVS: llvm/lib/Support/CommandLine.cpp Message-ID: <200505131949.j4DJnPPn025996@apoc.cs.uiuc.edu> Changes in directory llvm/lib/Support: CommandLine.cpp updated: 1.60 -> 1.61 --- Log message: Capitalize --- Diffs of the changes: (+3 -3) CommandLine.cpp | 6 +++--- 1 files changed, 3 insertions(+), 3 deletions(-) Index: llvm/lib/Support/CommandLine.cpp diff -u llvm/lib/Support/CommandLine.cpp:1.60 llvm/lib/Support/CommandLine.cpp:1.61 --- llvm/lib/Support/CommandLine.cpp:1.60 Tue May 10 18:20:17 2005 +++ llvm/lib/Support/CommandLine.cpp Fri May 13 14:49:09 2005 @@ -945,17 +945,17 @@ HelpPrinter HiddenPrinter(true); cl::opt > -HOp("help", cl::desc("display available options (--help-hidden for more)"), +HOp("help", cl::desc("Display available options (--help-hidden for more)"), cl::location(NormalPrinter), cl::ValueDisallowed); cl::opt > -HHOp("help-hidden", cl::desc("display all available options"), +HHOp("help-hidden", cl::desc("Display all available options"), cl::location(HiddenPrinter), cl::Hidden, cl::ValueDisallowed); // Define the --version option that prints out the LLVM version for the tool VersionPrinter VersionPrinterInstance; cl::opt > -VersOp("version", cl::desc("display the version"), +VersOp("version", cl::desc("Display the version of this program"), cl::location(VersionPrinterInstance), cl::ValueDisallowed); From lattner at cs.uiuc.edu Fri May 13 15:01:27 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Fri, 13 May 2005 15:01:27 -0500 Subject: [llvm-commits] CVS: llvm/docs/CommandGuide/llc.pod Message-ID: <200505132001.j4DK1Rvv026105@apoc.cs.uiuc.edu> Changes in directory llvm/docs/CommandGuide: llc.pod updated: 1.8 -> 1.9 --- Log message: update this manual --- Diffs of the changes: (+38 -36) llc.pod | 74 ++++++++++++++++++++++++++++++++-------------------------------- 1 files changed, 38 insertions(+), 36 deletions(-) Index: llvm/docs/CommandGuide/llc.pod diff -u llvm/docs/CommandGuide/llc.pod:1.8 llvm/docs/CommandGuide/llc.pod:1.9 --- llvm/docs/CommandGuide/llc.pod:1.8 Mon Jan 24 23:04:49 2005 +++ llvm/docs/CommandGuide/llc.pod Fri May 13 15:01:11 2005 @@ -12,11 +12,11 @@ The B command compiles LLVM bytecode into assembly language for a specified architecture. The assembly language output can then be passed through -a native assembler and linker to generate native code. +a native assembler and linker to generate a native executable. -The choice of architecture for the output assembly code is automatically -determined from the input bytecode file, unless a B<-m> option is used to override -the default. +The choice of architecture for the output assembly code is automatically +determined from the input bytecode file, unless the B<-march> option is used to +override the default. =head1 OPTIONS @@ -33,8 +33,14 @@ Other B options are as follows: +=head2 End-user Options + =over +=item B<--help> + +Print a summary of command line options. + =item B<-f> Overwrite output files. By default, B will refuse to overwrite @@ -42,42 +48,32 @@ =item B<-march>=I -Specify the architecture for which to generate assembly. Valid -architectures are: - -=over - -=item I - -Intel IA-32 (Pentium and above) - -=item I - -32-bit PowerPC (MacOS X, 32-bit ABI) - -=item I - -64-bit SPARC V9 - -=item I - -Emit C code, not assembly - -=back +Specify the architecture for which to generate assembly, overriding the target +encoded in the bytecode file. See the output of B for a list of +valid architectures. =item B<--disable-fp-elim> Disable frame pointer elimination optimization. +=item B<--disable-excess-fp-precision> + +Disable optimizations that may produce excess precision for floating point. +Note that this option can dramatically slow down code on some systems +(e.g. X86). + +=item B<--enable-unsafe-fp-math> + +Enable optimizations that make unsafe assumptions about IEEE math (e.g. that +addition is associative) or may not work for all input ranges. These +optimizations allow the code generator to make use of some instructions which +would otherwise not be usable (such as fsin on X86). + =item B<--enable-correct-eh-support> Instruct the B pass to insert code for correct exception handling support. This is expensive and is by default omitted for efficiency. -=item B<--help> - -Print a summary of command line options. - =item B<--stats> Print statistics recorded by code-generation passes. @@ -87,6 +83,18 @@ Record the amount of time needed for each pass and print a report to standard error. +=item B<--load>=F + +Dynamically load F (a path to a dynamically shared object) that +implements an LLVM target. This will permit the target name to be used with the +B<-march> option so that code can be generated for that target. + +=back + +=head2 Tuning/Configuration Options + +=over + =item B<--print-machineinstrs> Print generated machine code between compilation phases (useful for debugging). @@ -134,12 +142,6 @@ =back -=item B<--load>=F - -Dynamically load F (a path to a dynamically shared object) that -implements an LLVM target. This will permit the target name to be used with the -B<-march> option so that code can be generated for that target. - =back =head2 Intel IA-32-specific Options From lattner at cs.uiuc.edu Fri May 13 15:03:34 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Fri, 13 May 2005 15:03:34 -0500 Subject: [llvm-commits] CVS: llvm/docs/CommandGuide/llvm-extract.pod Message-ID: <200505132003.j4DK3YR1026142@apoc.cs.uiuc.edu> Changes in directory llvm/docs/CommandGuide: llvm-extract.pod updated: 1.3 -> 1.4 --- Log message: this detail is not needed here --- Diffs of the changes: (+0 -9) llvm-extract.pod | 9 --------- 1 files changed, 9 deletions(-) Index: llvm/docs/CommandGuide/llvm-extract.pod diff -u llvm/docs/CommandGuide/llvm-extract.pod:1.3 llvm/docs/CommandGuide/llvm-extract.pod:1.4 --- llvm/docs/CommandGuide/llvm-extract.pod:1.3 Sun Apr 24 12:45:22 2005 +++ llvm/docs/CommandGuide/llvm-extract.pod Fri May 13 15:03:17 2005 @@ -45,15 +45,6 @@ Specify the output filename. If filename is "-" (the default), then B sends its output to standard output. -=item B<--stats> - -Print statistics. - -=item B<--time-passes> - -Record the amount of time needed for each pass and print it to standard -error. - =back =head1 EXIT STATUS From lattner at cs.uiuc.edu Fri May 13 15:04:50 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Fri, 13 May 2005 15:04:50 -0500 Subject: [llvm-commits] CVS: llvm/docs/CommandGuide/llvm-as.pod llvm-dis.pod Message-ID: <200505132004.j4DK4ohV026191@apoc.cs.uiuc.edu> Changes in directory llvm/docs/CommandGuide: llvm-as.pod updated: 1.3 -> 1.4 llvm-dis.pod updated: 1.2 -> 1.3 --- Log message: these don't use passes --- Diffs of the changes: (+0 -14) llvm-as.pod | 9 --------- llvm-dis.pod | 5 ----- 2 files changed, 14 deletions(-) Index: llvm/docs/CommandGuide/llvm-as.pod diff -u llvm/docs/CommandGuide/llvm-as.pod:1.3 llvm/docs/CommandGuide/llvm-as.pod:1.4 --- llvm/docs/CommandGuide/llvm-as.pod:1.3 Mon Nov 15 14:39:30 2004 +++ llvm/docs/CommandGuide/llvm-as.pod Fri May 13 15:04:33 2005 @@ -59,15 +59,6 @@ Specify the output file name. If F is C<->, then B sends its output to standard output. -=item B<--stats> - -Print statistics. - -=item B<--time-passes> - -Record the amount of time needed for each pass and print it to standard -error. - =back =head1 EXIT STATUS Index: llvm/docs/CommandGuide/llvm-dis.pod diff -u llvm/docs/CommandGuide/llvm-dis.pod:1.2 llvm/docs/CommandGuide/llvm-dis.pod:1.3 --- llvm/docs/CommandGuide/llvm-dis.pod:1.2 Fri Jul 2 11:06:19 2004 +++ llvm/docs/CommandGuide/llvm-dis.pod Fri May 13 15:04:33 2005 @@ -42,11 +42,6 @@ Specify the output file name. If F is -, then the output is sent to standard output. -=item B<-time-passes> - -Record the amount of time needed for each pass and print it to standard -error. - =back =head1 EXIT STATUS From lattner at cs.uiuc.edu Fri May 13 15:08:51 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Fri, 13 May 2005 15:08:51 -0500 Subject: [llvm-commits] CVS: llvm/docs/CommandGuide/llvm-ranlib.pod Message-ID: <200505132008.j4DK8pPB026242@apoc.cs.uiuc.edu> Changes in directory llvm/docs/CommandGuide: llvm-ranlib.pod updated: 1.3 -> 1.4 --- Log message: fix link to llvm-ar --- Diffs of the changes: (+1 -1) llvm-ranlib.pod | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-) Index: llvm/docs/CommandGuide/llvm-ranlib.pod diff -u llvm/docs/CommandGuide/llvm-ranlib.pod:1.3 llvm/docs/CommandGuide/llvm-ranlib.pod:1.4 --- llvm/docs/CommandGuide/llvm-ranlib.pod:1.3 Sun Nov 28 21:37:54 2004 +++ llvm/docs/CommandGuide/llvm-ranlib.pod Fri May 13 15:08:34 2005 @@ -43,7 +43,7 @@ =head1 SEE ALSO -L, L +L, ranlib(1) =head1 AUTHORS From lattner at cs.uiuc.edu Fri May 13 15:09:47 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Fri, 13 May 2005 15:09:47 -0500 Subject: [llvm-commits] CVS: llvm/docs/CommandGuide/llvmgcc.pod llvmgxx.pod Message-ID: <200505132009.j4DK9lgr026288@apoc.cs.uiuc.edu> Changes in directory llvm/docs/CommandGuide: llvmgcc.pod updated: 1.4 -> 1.5 llvmgxx.pod updated: 1.4 -> 1.5 --- Log message: note how to disable inlining --- Diffs of the changes: (+18 -2) llvmgcc.pod | 10 +++++++++- llvmgxx.pod | 10 +++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) Index: llvm/docs/CommandGuide/llvmgcc.pod diff -u llvm/docs/CommandGuide/llvmgcc.pod:1.4 llvm/docs/CommandGuide/llvmgcc.pod:1.5 --- llvm/docs/CommandGuide/llvmgcc.pod:1.4 Wed Dec 22 00:47:25 2004 +++ llvm/docs/CommandGuide/llvmgcc.pod Fri May 13 15:09:33 2005 @@ -64,9 +64,17 @@ Link in the library libI.[bc | a | so]. This library should be a bytecode library. +=item B<-Wa,>I
    -

    The number of elements is a constant integer value, elementtype may +

    The number of elements is a constant integer value; elementtype may be any integral or floating point type.

    Examples:
    @@ -923,7 +923,6 @@
    Floating point constants use standard decimal notation (e.g. 123.421), exponential notation (e.g. 1.23421e+2), or a more precise hexadecimal - notation. Floating point constants have an optional hexadecimal notation (see below). Floating point constants must have a floating point type.
    @@ -1022,7 +1021,7 @@

    The string 'undef' is recognized as a type-less constant that has - no specific value. Undefined values may be of any type, and be used anywhere + no specific value. Undefined values may be of any type and be used anywhere a constant is permitted.

    Undefined values indicate to the compiler that the program is well defined @@ -1038,7 +1037,7 @@

    Constant expressions are used to allow expressions involving other constants to be used as constants. Constant expressions may be of any first class type, and may involve any LLVM operation +href="#t_firstclass">first class type and may involve any LLVM operation that does not have side effects (e.g. load and call are not supported). The following is the syntax for constant expressions:

    @@ -1072,7 +1071,8 @@

    The LLVM instruction set consists of several different classifications of instructions: terminator -instructions, binary instructions, , binary instructions, +bitwise binary instructions, memory instructions, and other instructions.

    @@ -1109,7 +1109,7 @@
    Overview:

    The 'ret' instruction is used to return control flow (and a -value) from a function, back to the caller.

    +value) from a function back to the caller.

    There are two forms of the 'ret' instruction: one that returns a value and then causes control flow, and one that just causes control flow to occur.

    @@ -1248,7 +1248,7 @@
    1. -

      The optional "cconv" marker indicates which calling + The optional "cconv" marker indicates which calling convention the call should use. If none is specified, the call defaults to using C calling conventions.

    2. @@ -1800,7 +1800,7 @@
      Overview:

      The 'free' instruction returns memory back to the unused -memory heap, to be reallocated in the future.

      +memory heap to be reallocated in the future.

      Arguments:

      'value' shall be a pointer value that points to a value @@ -1833,7 +1833,7 @@ a shorter version of the first that defaults to allocating one element.

      'type' may be any sized type.

      Semantics:
      -

      Memory is allocated, a pointer is returned. 'alloca'd +

      Memory is allocated; a pointer is returned. 'alloca'd memory is automatically released when the function returns. The 'alloca' instruction is commonly used to represent automatic variables that must have an address available. When the function returns (either with the There are two arguments to the 'store' instruction: a value to store and an address to store it into. The type of the '<pointer>' operand must be a pointer to the type of the '<value>' -operand. If the store is marked as volatile then the +operand. If the store is marked as volatile, then the optimizer is not allowed to modify the number or order of execution of this store with other volatile load and store instructions.

      @@ -1919,7 +1919,7 @@ provided depend on the type of the first pointer argument. The 'getelementptr' instruction is used to index down through the type levels of a structure. When indexing into a structure, only uint -integer constants are allowed. When indexing into an array or pointer +integer constants are allowed. When indexing into an array or pointer, int and long indexes are allowed of any sign.

      For example, let's consider a C code fragment and how it gets @@ -1960,7 +1960,7 @@

      Semantics:

      The index types specified for the 'getelementptr' instruction depend -on the pointer type that is being index into. Pointer +on the pointer type that is being indexed into. Pointer and array types require uint, int, ulong, or long values, and structure types require uint constants.

      @@ -3298,7 +3298,7 @@ Chris Lattner
      The LLVM Compiler Infrastructure
      - Last modified: $Date: 2005/05/12 16:55:34 $ + Last modified: $Date: 2005/05/13 22:25:59 $ From lattner at cs.uiuc.edu Fri May 13 17:47:14 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Fri, 13 May 2005 17:47:14 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/X86/X86ISelPattern.cpp Message-ID: <200505132247.j4DMlEXu012028@apoc.cs.uiuc.edu> Changes in directory llvm/lib/Target/X86: X86ISelPattern.cpp updated: 1.131 -> 1.132 --- Log message: fix typo --- Diffs of the changes: (+3 -3) X86ISelPattern.cpp | 6 +++--- 1 files changed, 3 insertions(+), 3 deletions(-) Index: llvm/lib/Target/X86/X86ISelPattern.cpp diff -u llvm/lib/Target/X86/X86ISelPattern.cpp:1.131 llvm/lib/Target/X86/X86ISelPattern.cpp:1.132 --- llvm/lib/Target/X86/X86ISelPattern.cpp:1.131 Fri May 13 17:13:49 2005 +++ llvm/lib/Target/X86/X86ISelPattern.cpp Fri May 13 17:46:57 2005 @@ -50,7 +50,7 @@ X86TargetLowering(TargetMachine &TM) : TargetLowering(TM) { // Set up the TargetLowering object. - // X86 is wierd, it always uses i8 for shift amounts and setcc results. + // X86 is weird, it always uses i8 for shift amounts and setcc results. setShiftAmountType(MVT::i8); setSetCCResultType(MVT::i8); setSetCCResultContents(ZeroOrOneSetCCResult); @@ -173,7 +173,7 @@ } //===----------------------------------------------------------------------===// -// C Calling Convention implementation +// C Calling Convention implementation //===----------------------------------------------------------------------===// std::vector @@ -377,7 +377,7 @@ } //===----------------------------------------------------------------------===// -// Fast Calling Convention implementation +// Fast Calling Convention implementation //===----------------------------------------------------------------------===// // // The X86 'fast' calling convention passes up to two integer arguments in From lattner at cs.uiuc.edu Fri May 13 17:55:01 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Fri, 13 May 2005 17:55:01 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/MachineFunction.cpp Message-ID: <200505132255.j4DMt1nf012635@apoc.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen: MachineFunction.cpp updated: 1.78 -> 1.79 --- Log message: print stack object alignment in -print-machineinstr dumps --- Diffs of the changes: (+4 -2) MachineFunction.cpp | 6 ++++-- 1 files changed, 4 insertions(+), 2 deletions(-) Index: llvm/lib/CodeGen/MachineFunction.cpp diff -u llvm/lib/CodeGen/MachineFunction.cpp:1.78 llvm/lib/CodeGen/MachineFunction.cpp:1.79 --- llvm/lib/CodeGen/MachineFunction.cpp:1.78 Thu Apr 21 17:33:33 2005 +++ llvm/lib/CodeGen/MachineFunction.cpp Fri May 13 17:54:44 2005 @@ -266,11 +266,13 @@ for (unsigned i = 0, e = Objects.size(); i != e; ++i) { const StackObject &SO = Objects[i]; - OS << " is "; + OS << " : "; if (SO.Size == 0) OS << "variable sized"; else - OS << SO.Size << " byte" << (SO.Size != 1 ? "s" : " "); + OS << "size is " << SO.Size << " byte" << (SO.Size != 1 ? "s," : ","); + OS << " alignment is " << SO.Alignment << " byte" + << (SO.Alignment != 1 ? "s," : ","); if (i < NumFixedObjects) OS << " fixed"; From lattner at cs.uiuc.edu Fri May 13 18:14:34 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Fri, 13 May 2005 18:14:34 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp Message-ID: <200505132314.j4DNEYaS013494@apoc.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen/SelectionDAG: SelectionDAGISel.cpp updated: 1.56 -> 1.57 --- Log message: Align doubles on 8-byte boundaries if possible. --- Diffs of the changes: (+9 -0) SelectionDAGISel.cpp | 9 +++++++++ 1 files changed, 9 insertions(+) Index: llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp diff -u llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.56 llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.57 --- llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.56 Fri May 13 13:50:42 2005 +++ llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp Fri May 13 18:14:17 2005 @@ -140,6 +140,15 @@ const Type *Ty = AI->getAllocatedType(); uint64_t TySize = TLI.getTargetData().getTypeSize(Ty); unsigned Align = TLI.getTargetData().getTypeAlignment(Ty); + + // If the alignment of the value is smaller than the size of the value, + // and if the size of the value is particularly small (<= 8 bytes), + // round up to the size of the value for potentially better performance. + // + // FIXME: This could be made better with a preferred alignment hook in + // TargetData. It serves primarily to 8-byte align doubles for X86. + if (Align < TySize && TySize <= 8) Align = TySize; + TySize *= CUI->getValue(); // Get total allocated size. StaticAllocaMap[AI] = MF.getFrameInfo()->CreateStackObject((unsigned)TySize, Align); From lattner at cs.uiuc.edu Fri May 13 18:36:03 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Fri, 13 May 2005 18:36:03 -0500 Subject: [llvm-commits] CVS: llvm/lib/Bytecode/Writer/Writer.cpp Message-ID: <200505132336.j4DNa3wU013584@apoc.cs.uiuc.edu> Changes in directory llvm/lib/Bytecode/Writer: Writer.cpp updated: 1.104 -> 1.105 --- Log message: fix the assertion --- Diffs of the changes: (+1 -1) Writer.cpp | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-) Index: llvm/lib/Bytecode/Writer/Writer.cpp diff -u llvm/lib/Bytecode/Writer/Writer.cpp:1.104 llvm/lib/Bytecode/Writer/Writer.cpp:1.105 --- llvm/lib/Bytecode/Writer/Writer.cpp:1.104 Fri May 6 21:44:04 2005 +++ llvm/lib/Bytecode/Writer/Writer.cpp Fri May 13 18:35:47 2005 @@ -607,7 +607,7 @@ } void BytecodeWriter::outputInstruction(const Instruction &I) { - assert(I.getOpcode() < 62 && "Opcode too big???"); + assert(I.getOpcode() < 56 && "Opcode too big???"); unsigned Opcode = I.getOpcode(); unsigned NumOperands = I.getNumOperands(); From lattner at cs.uiuc.edu Fri May 13 18:49:27 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Fri, 13 May 2005 18:49:27 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/X86/X86ISelPattern.cpp Message-ID: <200505132349.j4DNnRNC017498@apoc.cs.uiuc.edu> Changes in directory llvm/lib/Target/X86: X86ISelPattern.cpp updated: 1.132 -> 1.133 --- Log message: Make sure the start of the arg area and the end (after the RA is pushed) is always 8-byte aligned for fastcc --- Diffs of the changes: (+22 -2) X86ISelPattern.cpp | 24 ++++++++++++++++++++++-- 1 files changed, 22 insertions(+), 2 deletions(-) Index: llvm/lib/Target/X86/X86ISelPattern.cpp diff -u llvm/lib/Target/X86/X86ISelPattern.cpp:1.132 llvm/lib/Target/X86/X86ISelPattern.cpp:1.133 --- llvm/lib/Target/X86/X86ISelPattern.cpp:1.132 Fri May 13 17:46:57 2005 +++ llvm/lib/Target/X86/X86ISelPattern.cpp Fri May 13 18:49:10 2005 @@ -385,6 +385,10 @@ // and requires that the callee pop its arguments off the stack (allowing proper // tail calls), and has the same return value conventions as C calling convs. // +// This calling convention always arranges for the callee pop value to be 8n+4 +// bytes, which is needed for tail recursion elimination and stack alignment +// reasons. +// // Note that this can be enhanced in the future to pass fp vals in registers // (when we have a global fp allocator) and do other tricks. // @@ -533,6 +537,11 @@ ArgOffset += ArgIncrement; // Move on to the next argument. } + // Make sure the instruction takes 8n+4 bytes to make sure the start of the + // arguments and the arguments after the retaddr has been pushed are aligned. + if ((ArgOffset & 7) == 0) + ArgOffset += 4; + VarArgsFrameIndex = 0xAAAAAAA; // fastcc functions can't have varargs. ReturnAddrIndex = 0; // No return address slot generated yet. BytesToPopOnReturn = ArgOffset; // Callee pops all stack arguments. @@ -602,6 +611,11 @@ break; } + // Make sure the instruction takes 8n+4 bytes to make sure the start of the + // arguments and the arguments after the retaddr has been pushed are aligned. + if ((NumBytes & 7) == 0) + NumBytes += 4; + Chain = DAG.getNode(ISD::CALLSEQ_START, MVT::Other, Chain, DAG.getConstant(NumBytes, getPointerTy())); @@ -679,8 +693,14 @@ SDOperand TheCall = SDOperand(DAG.getCall(RetVals, Chain, Callee, RegValuesToPass, isTailCall), 0); Chain = TheCall.getValue(RetTyVT != MVT::isVoid); + + // Make sure the instruction takes 8n+4 bytes to make sure the start of the + // arguments and the arguments after the retaddr has been pushed are aligned. + if ((ArgOffset & 7) == 0) + ArgOffset += 4; + Chain = DAG.getNode(ISD::CALLSEQ_END, MVT::Other, Chain, - DAG.getConstant(NumBytes, getPointerTy()), + DAG.getConstant(ArgOffset, getPointerTy()), // The callee pops the arguments off the stack. DAG.getConstant(ArgOffset, getPointerTy())); return std::make_pair(TheCall, Chain); @@ -3781,7 +3801,7 @@ PrevI = BB->end(); BuildMI(*BB, PrevI, X86::ADJCALLSTACKUP, 2).addImm(Tmp1).addImm(Tmp2); } else { - BuildMI(*BB, PrevI, X86::ADJCALLSTACKUP, 2).addImm(Tmp1).addImm(Tmp2); + BuildMI(BB, X86::ADJCALLSTACKUP, 2).addImm(Tmp1).addImm(Tmp2); } return; case ISD::MEMSET: { From reid at x10sys.com Fri May 13 19:06:17 2005 From: reid at x10sys.com (Reid Spencer) Date: Fri, 13 May 2005 19:06:17 -0500 Subject: [llvm-commits] CVS: llvm/docs/BytecodeFormat.html Message-ID: <200505140006.TAA04419@zion.cs.uiuc.edu> Changes in directory llvm/docs: BytecodeFormat.html updated: 1.38 -> 1.39 --- Log message: Document the pseudo-instruction opcodes in opcode range 56-63. These are used to support things like volatile load/store, tail calls, and calling conventions without reserving space for the additional information. --- Diffs of the changes: (+37 -1) BytecodeFormat.html | 38 +++++++++++++++++++++++++++++++++++++- 1 files changed, 37 insertions(+), 1 deletion(-) Index: llvm/docs/BytecodeFormat.html diff -u llvm/docs/BytecodeFormat.html:1.38 llvm/docs/BytecodeFormat.html:1.39 --- llvm/docs/BytecodeFormat.html:1.38 Fri May 6 17:57:39 2005 +++ llvm/docs/BytecodeFormat.html Fri May 13 19:06:06 2005 @@ -1601,10 +1601,46 @@ Select3421.2 UserOp13511.0 UserOp23611.0 + + Pseudo Instructions* + + Invoke+CC 5651.5 + Invoke+FastCC5751.5 + Call+CC5851.5 + Call+FastCC+TailCall5951.5 + Call+FastCC6051.5 + Call+CCC+TailCall6151.5 + Load+Volatile6231.3 + Store+Volatile6331.3 +

      * Note: +These aren't really opcodes from an LLVM language prespeective. They encode +information into other opcodes without reserving space for that information. +For example, opcode=63 is a Volatile Store. The opcode for this +instruction is 25 (Store) but we encode it as 63 to indicate that is a Volatile +Store. The same is done for the calling conventions and tail calls. +In each of these entries in range 56-63, the opcode is documented as the base +opcode (Invoke, Call, Store) plus some set of modifiers, as follows:

      +
      +
      CC
      +
      This means a generic (user defined) calling convention number is specified + in a VBR that follows the opcode immediately. This is used when the calling + convention for the Invoke or the Call instruction is not one of the LLVM + standard ones (like FastCC or CCC) +
      +
      FastCC
      +
      This indicates that the Call or Invoke is using the FastCC calling + convention which puts arguments in registers to avoid stack loading.
      +
      CCC
      +
      This indicates that the Call or Invoke is using the "C" calling convention + which is specified by the C99 language.
      +
      TailCall
      +
      This indicates that the Call or Invoke is a tail call.
      +
      +
      @@ -1902,7 +1938,7 @@ Reid Spencer and Chris Lattner
      The LLVM Compiler Infrastructure
      -Last modified: $Date: 2005/05/06 22:57:39 $ +Last modified: $Date: 2005/05/14 00:06:06 $ From lattner at cs.uiuc.edu Fri May 13 20:27:03 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Fri, 13 May 2005 20:27:03 -0500 Subject: [llvm-commits] CVS: llvm/docs/BytecodeFormat.html Message-ID: <200505140127.j4E1R3km017600@apoc.cs.uiuc.edu> Changes in directory llvm/docs: BytecodeFormat.html updated: 1.39 -> 1.40 --- Log message: user ops are not encoded in the bc format --- Diffs of the changes: (+1 -3) BytecodeFormat.html | 4 +--- 1 files changed, 1 insertion(+), 3 deletions(-) Index: llvm/docs/BytecodeFormat.html diff -u llvm/docs/BytecodeFormat.html:1.39 llvm/docs/BytecodeFormat.html:1.40 --- llvm/docs/BytecodeFormat.html:1.39 Fri May 13 19:06:06 2005 +++ llvm/docs/BytecodeFormat.html Fri May 13 20:26:46 2005 @@ -1599,8 +1599,6 @@ VANext3211.0 VAArg3311.0 Select3421.2 - UserOp13511.0 - UserOp23611.0 Pseudo Instructions* @@ -1938,7 +1936,7 @@ Reid Spencer and Chris Lattner
      The LLVM Compiler Infrastructure
      -Last modified: $Date: 2005/05/14 00:06:06 $ +Last modified: $Date: 2005/05/14 01:26:46 $ From lattner at cs.uiuc.edu Fri May 13 20:30:32 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Fri, 13 May 2005 20:30:32 -0500 Subject: [llvm-commits] CVS: llvm/docs/BytecodeFormat.html Message-ID: <200505140130.j4E1UW6x017642@apoc.cs.uiuc.edu> Changes in directory llvm/docs: BytecodeFormat.html updated: 1.40 -> 1.41 --- Log message: minor changes --- Diffs of the changes: (+8 -9) BytecodeFormat.html | 17 ++++++++--------- 1 files changed, 8 insertions(+), 9 deletions(-) Index: llvm/docs/BytecodeFormat.html diff -u llvm/docs/BytecodeFormat.html:1.40 llvm/docs/BytecodeFormat.html:1.41 --- llvm/docs/BytecodeFormat.html:1.40 Fri May 13 20:26:46 2005 +++ llvm/docs/BytecodeFormat.html Fri May 13 20:30:15 2005 @@ -1624,19 +1624,18 @@ opcode (Invoke, Call, Store) plus some set of modifiers, as follows:

      CC
      -
      This means a generic (user defined) calling convention number is specified - in a VBR that follows the opcode immediately. This is used when the calling - convention for the Invoke or the Call instruction is not one of the LLVM - standard ones (like FastCC or CCC) +
      This means an arbitrary calling convention is specified + in a VBR that follows the opcode. This is used when the instruction cannot + be encoded with one of the more compact forms.
      FastCC
      This indicates that the Call or Invoke is using the FastCC calling - convention which puts arguments in registers to avoid stack loading.
      + convention.
      CCC
      -
      This indicates that the Call or Invoke is using the "C" calling convention - which is specified by the C99 language.
      +
      This indicates that the Call or Invoke is using the native "C" calling + convention.
      TailCall
      -
      This indicates that the Call or Invoke is a tail call.
      +
      This indicates that the Call has the 'tail' modifier.
      @@ -1936,7 +1935,7 @@ Reid Spencer and Chris Lattner
      The LLVM Compiler Infrastructure
      -Last modified: $Date: 2005/05/14 01:26:46 $ +Last modified: $Date: 2005/05/14 01:30:15 $ From lattner at cs.uiuc.edu Fri May 13 21:33:37 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Fri, 13 May 2005 21:33:37 -0500 Subject: [llvm-commits] CVS: llvm/test/Regression/Debugger/funccall.c funccall.ll Message-ID: <200505140233.j4E2Xbwh020264@apoc.cs.uiuc.edu> Changes in directory llvm/test/Regression/Debugger: funccall.c updated: 1.3 -> 1.4 funccall.ll updated: 1.12 -> 1.13 --- Log message: Fix this --- Diffs of the changes: (+2 -2) funccall.c | 2 +- funccall.ll | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) Index: llvm/test/Regression/Debugger/funccall.c diff -u llvm/test/Regression/Debugger/funccall.c:1.3 llvm/test/Regression/Debugger/funccall.c:1.4 --- llvm/test/Regression/Debugger/funccall.c:1.3 Sat Apr 23 16:26:11 2005 +++ llvm/test/Regression/Debugger/funccall.c Fri May 13 21:33:20 2005 @@ -14,4 +14,4 @@ } // This is the source that corresponds to funccall.ll -// RUN: exit 0 +// RUN: echo foo Index: llvm/test/Regression/Debugger/funccall.ll diff -u llvm/test/Regression/Debugger/funccall.ll:1.12 llvm/test/Regression/Debugger/funccall.ll:1.13 --- llvm/test/Regression/Debugger/funccall.ll:1.12 Fri May 13 13:37:58 2005 +++ llvm/test/Regression/Debugger/funccall.ll Fri May 13 21:33:20 2005 @@ -8,7 +8,7 @@ ;; RUN: llvm-as -f %s -o %t.bc ;; RUN: llvm-db %t.bc < %t.commands | grep 'in main at funccall.c:11:2' -;; XFAIL: x86,x86_64,powerpc,alpha,ia64 +; XFAIL: i.86|powerpc|alpha|ia64 ;; Debugger type declarations %lldb.compile_unit = type { uint, ushort, ushort, sbyte*, sbyte*, sbyte*, {}* } From lattner at cs.uiuc.edu Fri May 13 21:35:55 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Fri, 13 May 2005 21:35:55 -0500 Subject: [llvm-commits] CVS: llvm/test/Regression/CodeGen/Alpha/ctpop.ll Message-ID: <200505140235.j4E2Zt4b020326@apoc.cs.uiuc.edu> Changes in directory llvm/test/Regression/CodeGen/Alpha: ctpop.ll updated: 1.4 -> 1.5 --- Log message: this passes --- Diffs of the changes: (+0 -1) ctpop.ll | 1 - 1 files changed, 1 deletion(-) Index: llvm/test/Regression/CodeGen/Alpha/ctpop.ll diff -u llvm/test/Regression/CodeGen/Alpha/ctpop.ll:1.4 llvm/test/Regression/CodeGen/Alpha/ctpop.ll:1.5 --- llvm/test/Regression/CodeGen/Alpha/ctpop.ll:1.4 Fri May 13 14:49:02 2005 +++ llvm/test/Regression/CodeGen/Alpha/ctpop.ll Fri May 13 21:35:38 2005 @@ -1,5 +1,4 @@ ; Make sure this testcase codegens to the ctpop instruction -; XFAIL: * ; RUN: llvm-as < %s | llc -march=alpha -enable-alpha-CT | grep -i 'ctpop' declare long %llvm.ctpop(long) From lattner at cs.uiuc.edu Sat May 14 00:34:32 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Sat, 14 May 2005 00:34:32 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/LiveInterval.cpp LiveInterval.h LiveIntervalAnalysis.cpp Message-ID: <200505140534.j4E5YWmW021804@apoc.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen: LiveInterval.cpp updated: 1.20 -> 1.21 LiveInterval.h updated: 1.13 -> 1.14 LiveIntervalAnalysis.cpp updated: 1.140 -> 1.141 --- Log message: Print the symbolic register name in a register allocator debug dump. --- Diffs of the changes: (+29 -17) LiveInterval.cpp | 28 +++++++++++++++++----------- LiveInterval.h | 8 +++++++- LiveIntervalAnalysis.cpp | 10 +++++----- 3 files changed, 29 insertions(+), 17 deletions(-) Index: llvm/lib/CodeGen/LiveInterval.cpp diff -u llvm/lib/CodeGen/LiveInterval.cpp:1.20 llvm/lib/CodeGen/LiveInterval.cpp:1.21 --- llvm/lib/CodeGen/LiveInterval.cpp:1.20 Thu Apr 21 17:33:33 2005 +++ llvm/lib/CodeGen/LiveInterval.cpp Sat May 14 00:34:15 2005 @@ -20,6 +20,7 @@ #include "LiveInterval.h" #include "llvm/ADT/STLExtras.h" +#include "llvm/Target/MRegisterInfo.h" #include #include #include @@ -351,17 +352,22 @@ std::cerr << *this << "\n"; } - -std::ostream& llvm::operator<<(std::ostream& os, const LiveInterval& li) { - os << "%reg" << li.reg << ',' << li.weight; - if (li.empty()) - return os << "EMPTY"; - - os << " = "; - for (LiveInterval::Ranges::const_iterator i = li.ranges.begin(), - e = li.ranges.end(); i != e; ++i) - os << *i; - return os; +void LiveInterval::print(std::ostream &OS, const MRegisterInfo *MRI) const { + if (MRI && MRegisterInfo::isPhysicalRegister(reg)) + OS << MRI->getName(reg); + else + OS << "%reg" << reg; + + OS << ',' << weight; + + if (empty()) + OS << "EMPTY"; + else { + OS << " = "; + for (LiveInterval::Ranges::const_iterator I = ranges.begin(), + E = ranges.end(); I != E; ++I) + OS << *I; + } } void LiveInterval::dump() const { Index: llvm/lib/CodeGen/LiveInterval.h diff -u llvm/lib/CodeGen/LiveInterval.h:1.13 llvm/lib/CodeGen/LiveInterval.h:1.14 --- llvm/lib/CodeGen/LiveInterval.h:1.13 Wed Nov 17 22:31:10 2004 +++ llvm/lib/CodeGen/LiveInterval.h Sat May 14 00:34:15 2005 @@ -26,6 +26,8 @@ #include namespace llvm { + class MRegisterInfo; + /// LiveRange structure - This represents a simple register range in the /// program, with an inclusive start point and an exclusive end point. /// These ranges are rendered as [start,end). @@ -175,6 +177,7 @@ return beginNumber() < other.beginNumber(); } + void print(std::ostream &OS, const MRegisterInfo *MRI = 0) const; void dump() const; private: @@ -185,7 +188,10 @@ LiveInterval& operator=(const LiveInterval& rhs); // DO NOT IMPLEMENT }; - std::ostream& operator<<(std::ostream& os, const LiveInterval& li); + inline std::ostream &operator<<(std::ostream &OS, const LiveInterval &LI) { + LI.print(OS); + return OS; + } } #endif Index: llvm/lib/CodeGen/LiveIntervalAnalysis.cpp diff -u llvm/lib/CodeGen/LiveIntervalAnalysis.cpp:1.140 llvm/lib/CodeGen/LiveIntervalAnalysis.cpp:1.141 --- llvm/lib/CodeGen/LiveIntervalAnalysis.cpp:1.140 Fri May 13 02:08:07 2005 +++ llvm/lib/CodeGen/LiveIntervalAnalysis.cpp Sat May 14 00:34:15 2005 @@ -142,11 +142,11 @@ numIntervals += getNumIntervals(); -#if 1 - DEBUG(std::cerr << "********** INTERVALS **********\n"); - DEBUG(for (iterator I = begin(), E = end(); I != E; ++I) - std::cerr << I->second << "\n"); -#endif + DEBUG(std::cerr << "********** INTERVALS **********\n"; + for (iterator I = begin(), E = end(); I != E; ++I) { + I->second.print(std::cerr, mri_); + std::cerr << "\n"; + }); // join intervals if requested if (EnableJoining) joinIntervals(); From lattner at cs.uiuc.edu Sat May 14 00:34:38 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Sat, 14 May 2005 00:34:38 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Message-ID: <200505140534.j4E5YcKd021811@apoc.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen/SelectionDAG: LegalizeDAG.cpp updated: 1.123 -> 1.124 --- Log message: Allow targets to have a custom int64->fp expander if desired --- Diffs of the changes: (+11 -0) LegalizeDAG.cpp | 11 +++++++++++ 1 files changed, 11 insertions(+) Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.123 llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.124 --- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.123 Fri May 13 13:50:42 2005 +++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Sat May 14 00:33:54 2005 @@ -2176,6 +2176,17 @@ return DAG.getNode(ISD::ADD, DestTy, SignedConv, FudgeInReg); } + // Check to see if the target has a custom way to lower this. If so, use it. + switch (TLI.getOperationAction(ISD::SINT_TO_FP, Source.getValueType())) { + default: assert(0 && "This action not implemented for this operation!"); + case TargetLowering::Legal: + case TargetLowering::Expand: + break; // This case is handled below. + case TargetLowering::Custom: + Source = DAG.getNode(ISD::SINT_TO_FP, DestTy, Source); + return LegalizeOp(TLI.LowerOperation(Source)); + } + // Expand the source, then glue it back together for the call. We must expand // the source in case it is shared (this pass of legalize must traverse it). SDOperand SrcLo, SrcHi; From duraid at octopus.com.au Sat May 14 00:48:25 2005 From: duraid at octopus.com.au (Duraid Madina) Date: Sat, 14 May 2005 00:48:25 -0500 Subject: [llvm-commits] CVS: llvm/docs/ReleaseNotes.html Message-ID: <200505140548.AAA05824@zion.cs.uiuc.edu> Changes in directory llvm/docs: ReleaseNotes.html updated: 1.314 -> 1.315 --- Log message: add a bit about the known problems on IA64 --- Diffs of the changes: (+25 -1) ReleaseNotes.html | 26 +++++++++++++++++++++++++- 1 files changed, 25 insertions(+), 1 deletion(-) Index: llvm/docs/ReleaseNotes.html diff -u llvm/docs/ReleaseNotes.html:1.314 llvm/docs/ReleaseNotes.html:1.315 --- llvm/docs/ReleaseNotes.html:1.314 Fri May 13 16:55:49 2005 +++ llvm/docs/ReleaseNotes.html Sat May 14 00:48:13 2005 @@ -597,6 +597,30 @@
      + + + +
      + +
        + +
      • C++ programs are likely to fail on IA64, as calls to setjmp are +made where the argument is not 16-byte aligned, as required on IA64. (Strictly +speaking this is not a bug in the IA64 back-end; it will also be encountered +when building C++ programs using the C back-end.)
      • + +
      • There are a few ABI violations which will lead to problems +when mixing LLVM output with code built with other compilers, +particularly for C++ and floating-point programs.
      • + +
      • Vararg functions are not supported.
      • + +
      + +
      +
      Additional Information @@ -629,7 +653,7 @@ src="http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01!" /> The LLVM Compiler Infrastructure
      - Last modified: $Date: 2005/05/13 21:55:49 $ + Last modified: $Date: 2005/05/14 05:48:13 $ From lattner at cs.uiuc.edu Sat May 14 00:51:05 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Sat, 14 May 2005 00:51:05 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp SelectionDAGISel.cpp Message-ID: <200505140551.j4E5p5qb023278@apoc.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen/SelectionDAG: LegalizeDAG.cpp updated: 1.124 -> 1.125 SelectionDAGISel.cpp updated: 1.57 -> 1.58 --- Log message: LowerOperation takes a dag --- Diffs of the changes: (+3 -3) LegalizeDAG.cpp | 4 ++-- SelectionDAGISel.cpp | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.124 llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.125 --- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.124 Sat May 14 00:33:54 2005 +++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Sat May 14 00:50:48 2005 @@ -941,7 +941,7 @@ Ops.push_back(Tmp1); Ops.push_back(Tmp2); Ops.push_back(Tmp3); Ops.push_back(Tmp4); Ops.push_back(Tmp5); Result = DAG.getNode(Node->getOpcode(), MVT::Other, Ops); - Result = TLI.LowerOperation(Result); + Result = TLI.LowerOperation(Result, DAG); Result = LegalizeOp(Result); break; } @@ -2184,7 +2184,7 @@ break; // This case is handled below. case TargetLowering::Custom: Source = DAG.getNode(ISD::SINT_TO_FP, DestTy, Source); - return LegalizeOp(TLI.LowerOperation(Source)); + return LegalizeOp(TLI.LowerOperation(Source, DAG)); } // Expand the source, then glue it back together for the call. We must expand Index: llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp diff -u llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.57 llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.58 --- llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.57 Fri May 13 18:14:17 2005 +++ llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp Sat May 14 00:50:48 2005 @@ -901,7 +901,7 @@ return std::make_pair(DAG.getConstant(0, getPointerTy()), Chain); } -SDOperand TargetLowering::LowerOperation(SDOperand Op) { +SDOperand TargetLowering::LowerOperation(SDOperand Op, SelectionDAG &DAG) { assert(0 && "LowerOperation not implemented for this target!"); abort(); return SDOperand(); From lattner at cs.uiuc.edu Sat May 14 00:51:19 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Sat, 14 May 2005 00:51:19 -0500 Subject: [llvm-commits] CVS: llvm/include/llvm/Target/TargetLowering.h Message-ID: <200505140551.j4E5pJeN023290@apoc.cs.uiuc.edu> Changes in directory llvm/include/llvm/Target: TargetLowering.h updated: 1.13 -> 1.14 --- Log message: Pass the dag into LowerOperation --- Diffs of the changes: (+1 -1) TargetLowering.h | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-) Index: llvm/include/llvm/Target/TargetLowering.h diff -u llvm/include/llvm/Target/TargetLowering.h:1.13 llvm/include/llvm/Target/TargetLowering.h:1.14 --- llvm/include/llvm/Target/TargetLowering.h:1.13 Fri May 13 13:50:07 2005 +++ llvm/include/llvm/Target/TargetLowering.h Sat May 14 00:51:05 2005 @@ -299,7 +299,7 @@ /// which are registered to use 'custom' lowering. This callback is invoked. /// If the target has no operations that require custom lowering, it need not /// implement this. The default implementation of this aborts. - virtual SDOperand LowerOperation(SDOperand Op); + virtual SDOperand LowerOperation(SDOperand Op, SelectionDAG &DAG); private: From reid at x10sys.com Sat May 14 00:52:18 2005 From: reid at x10sys.com (Reid Spencer) Date: Sat, 14 May 2005 00:52:18 -0500 Subject: [llvm-commits] CVS: llvm/llvm.spec Message-ID: <200505140552.AAA05848@zion.cs.uiuc.edu> Changes in directory llvm: llvm.spec updated: 1.2 -> 1.3 --- Log message: Some minor adjustments for the 1.5 release. --- Diffs of the changes: (+7 -3) llvm.spec | 10 +++++++--- 1 files changed, 7 insertions(+), 3 deletions(-) Index: llvm/llvm.spec diff -u llvm/llvm.spec:1.2 llvm/llvm.spec:1.3 --- llvm/llvm.spec:1.2 Mon Aug 16 10:17:40 2004 +++ llvm/llvm.spec Sat May 14 00:52:07 2005 @@ -1,6 +1,6 @@ Summary: Static and JIT research compiler infrastructure Name: llvm -Version: 1.3 +Version: 1.5 Release: 0 License: U of Illinois/NCSA Open Source License Group: Development/Languages @@ -12,11 +12,13 @@ Requires: /sbin/ldconfig %description -LLVM is a new infrastructure designed for compile-time, link-time, runtime, +LLVM is a compiler infrastructure designed for compile-time, link-time, runtime, and "idle-time" optimization of programs from arbitrary programming languages. LLVM is written in C++ and has been developed since 2000 at the University of Illinois. It currently supports compilation of C and C++ -programs, using front-ends derived from GCC 3.4. +programs, using front-ends derived from GCC 3.4. The compiler infrastructure +includes mirror sets of programming tools as well as libraries with equivalent +functionality. %prep %setup -q -n llvm @@ -51,6 +53,8 @@ %{_includedir}/llvm %changelog +* Fri May 13 2005 Reid Spencer +- Minor adjustments for the 1.5 release * Mon Feb 09 2003 Brian R. Gaeke - Initial working version of RPM spec file. From lattner at cs.uiuc.edu Sat May 14 01:19:27 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Sat, 14 May 2005 01:19:27 -0500 Subject: [llvm-commits] CVS: llvm/include/llvm/CodeGen/SelectionDAGNodes.h Message-ID: <200505140619.j4E6JRBu024026@apoc.cs.uiuc.edu> Changes in directory llvm/include/llvm/CodeGen: SelectionDAGNodes.h updated: 1.40 -> 1.41 --- Log message: add accessors --- Diffs of the changes: (+8 -0) SelectionDAGNodes.h | 8 ++++++++ 1 files changed, 8 insertions(+) Index: llvm/include/llvm/CodeGen/SelectionDAGNodes.h diff -u llvm/include/llvm/CodeGen/SelectionDAGNodes.h:1.40 llvm/include/llvm/CodeGen/SelectionDAGNodes.h:1.41 --- llvm/include/llvm/CodeGen/SelectionDAGNodes.h:1.40 Fri May 13 13:40:17 2005 +++ llvm/include/llvm/CodeGen/SelectionDAGNodes.h Sat May 14 01:19:11 2005 @@ -491,6 +491,10 @@ assert(Num < Operands.size() && "Invalid child # of SDNode!"); return Operands[Num]; } + typedef std::vector::const_iterator op_iterator; + op_iterator op_begin() const { return Operands.begin(); } + op_iterator op_end() const { return Operands.end(); } + /// getNumValues - Return the number of values defined/returned by this /// operator. @@ -503,6 +507,10 @@ assert(ResNo < Values.size() && "Illegal result number!"); return Values[ResNo]; } + + typedef std::vector::const_iterator value_iterator; + value_iterator value_begin() const { return Values.begin(); } + value_iterator value_end() const { return Values.end(); } /// getOperationName - Return the opcode of this operation for printing. /// From lattner at cs.uiuc.edu Sat May 14 01:20:22 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Sat, 14 May 2005 01:20:22 -0500 Subject: [llvm-commits] CVS: llvm/include/llvm/CodeGen/SelectionDAG.h Message-ID: <200505140620.j4E6KMbu024050@apoc.cs.uiuc.edu> Changes in directory llvm/include/llvm/CodeGen: SelectionDAG.h updated: 1.25 -> 1.26 --- Log message: Add a way to construct an arbitrary node, cleanly. --- Diffs of the changes: (+12 -2) SelectionDAG.h | 14 ++++++++++++-- 1 files changed, 12 insertions(+), 2 deletions(-) Index: llvm/include/llvm/CodeGen/SelectionDAG.h diff -u llvm/include/llvm/CodeGen/SelectionDAG.h:1.25 llvm/include/llvm/CodeGen/SelectionDAG.h:1.26 --- llvm/include/llvm/CodeGen/SelectionDAG.h:1.25 Fri May 13 13:40:17 2005 +++ llvm/include/llvm/CodeGen/SelectionDAG.h Sat May 14 01:20:08 2005 @@ -130,7 +130,8 @@ /// SDNode *getCall(std::vector &RetVals, SDOperand Chain, SDOperand Callee, bool isTailCall = false) { - SDNode *NN = new SDNode(isTailCall ? ISD::TAILCALL : ISD::CALL, Chain, Callee); + SDNode *NN = new SDNode(isTailCall ? ISD::TAILCALL : ISD::CALL, Chain, + Callee); NN->setValueTypes(RetVals); AllNodes.push_back(NN); return NN; @@ -140,7 +141,8 @@ /// where arguments are passed in physical registers. This destroys the /// RetVals and ArgsInRegs vectors. SDNode *getCall(std::vector &RetVals, SDOperand Chain, - SDOperand Callee, std::vector &ArgsInRegs, bool isTailCall = false) { + SDOperand Callee, std::vector &ArgsInRegs, + bool isTailCall = false) { ArgsInRegs.insert(ArgsInRegs.begin(), Callee); ArgsInRegs.insert(ArgsInRegs.begin(), Chain); SDNode *NN = new SDNode(isTailCall ? ISD::TAILCALL : ISD::CALL, ArgsInRegs); @@ -169,6 +171,8 @@ SDOperand N1, SDOperand N2, SDOperand N3, SDOperand N4); SDOperand getNode(unsigned Opcode, MVT::ValueType VT, std::vector &Children); + SDOperand getNode(unsigned Opcode, std::vector &ResultTys, + std::vector &Ops); // getNode - These versions take an extra value type for extending and // truncating loads, stores, rounds, extends etc. @@ -182,6 +186,7 @@ SDOperand N2, SDOperand N3, SDOperand N4, MVT::ValueType EVT); + /// getLoad - Loads are not normal binary operators: their result type is not /// determined by their operands, and they produce a value AND a token chain. /// @@ -220,6 +225,11 @@ std::map FrameIndices; std::map ConstantPoolIndices; std::map BBNodes; + std::map, + std::vector > >, + SDNode*> ArbitraryNodes; + std::map ExternalSymbols; struct EVTStruct { unsigned Opcode; From lattner at cs.uiuc.edu Sat May 14 01:20:39 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Sat, 14 May 2005 01:20:39 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp Message-ID: <200505140620.j4E6KdWY024064@apoc.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen/SelectionDAG: SelectionDAG.cpp updated: 1.111 -> 1.112 --- Log message: add a getNode() version that allows construction of any node type. --- Diffs of the changes: (+33 -9) SelectionDAG.cpp | 42 +++++++++++++++++++++++++++++++++--------- 1 files changed, 33 insertions(+), 9 deletions(-) Index: llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp diff -u llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:1.111 llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:1.112 --- llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:1.111 Fri May 13 13:43:43 2005 +++ llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp Sat May 14 01:20:26 2005 @@ -257,6 +257,13 @@ BinaryOps.erase(std::make_pair(N->getOpcode(), std::make_pair(N->getOperand(0), N->getOperand(1)))); + else { + // Remove the node from the ArbitraryNodes map. + std::vector RV(N->value_begin(), N->value_end()); + std::vector Ops(N->op_begin(), N->op_end()); + ArbitraryNodes.erase(std::make_pair(N->getOpcode(), + std::make_pair(RV, Ops))); + } break; } @@ -1410,29 +1417,29 @@ } SDOperand SelectionDAG::getNode(unsigned Opcode, MVT::ValueType VT, - std::vector &Children) { - switch (Children.size()) { + std::vector &Ops) { + switch (Ops.size()) { case 0: return getNode(Opcode, VT); - case 1: return getNode(Opcode, VT, Children[0]); - case 2: return getNode(Opcode, VT, Children[0], Children[1]); - case 3: return getNode(Opcode, VT, Children[0], Children[1], Children[2]); + case 1: return getNode(Opcode, VT, Ops[0]); + case 2: return getNode(Opcode, VT, Ops[0], Ops[1]); + case 3: return getNode(Opcode, VT, Ops[0], Ops[1], Ops[2]); default: break; } - ConstantSDNode *N1C = dyn_cast(Children[1].Val); + ConstantSDNode *N1C = dyn_cast(Ops[1].Val); switch (Opcode) { default: break; case ISD::BRCONDTWOWAY: if (N1C) if (N1C->getValue()) // Unconditional branch to true dest. - return getNode(ISD::BR, MVT::Other, Children[0], Children[2]); + return getNode(ISD::BR, MVT::Other, Ops[0], Ops[2]); else // Unconditional branch to false dest. - return getNode(ISD::BR, MVT::Other, Children[0], Children[3]); + return getNode(ISD::BR, MVT::Other, Ops[0], Ops[3]); break; } // FIXME: MEMOIZE!! - SDNode *N = new SDNode(Opcode, Children); + SDNode *N = new SDNode(Opcode, Ops); if (Opcode != ISD::ADD_PARTS && Opcode != ISD::SUB_PARTS) { N->setValueTypes(VT); } else { @@ -1443,6 +1450,23 @@ return SDOperand(N, 0); } +SDOperand SelectionDAG::getNode(unsigned Opcode, + std::vector &ResultTys, + std::vector &Ops) { + if (ResultTys.size() == 1) + return getNode(Opcode, ResultTys[0], Ops); + + + // Memoize the node. + SDNode *&N = ArbitraryNodes[std::make_pair(Opcode, std::make_pair(ResultTys, + Ops))]; + if (N) return SDOperand(N, 0); + N = new SDNode(Opcode, Ops); + N->setValueTypes(ResultTys); + return SDOperand(N, 0); +} + + SDOperand SelectionDAG::getNode(unsigned Opcode, MVT::ValueType VT,SDOperand N1, MVT::ValueType EVT) { From lattner at cs.uiuc.edu Sat May 14 01:35:04 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Sat, 14 May 2005 01:35:04 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Message-ID: <200505140635.j4E6Z4oi024458@apoc.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen/SelectionDAG: LegalizeDAG.cpp updated: 1.125 -> 1.126 --- Log message: legalize target-specific operations --- Diffs of the changes: (+23 -0) LegalizeDAG.cpp | 23 +++++++++++++++++++++++ 1 files changed, 23 insertions(+) Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.125 llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.126 --- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.125 Sat May 14 00:50:48 2005 +++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Sat May 14 01:34:48 2005 @@ -197,6 +197,29 @@ switch (Node->getOpcode()) { default: + if (Node->getOpcode() >= ISD::BUILTIN_OP_END) { + // If this is a target node, legalize it by legalizing the operands then + // passing it through. + std::vector Ops; + bool Changed = false; + for (unsigned i = 0, e = Node->getNumOperands(); i != e; ++i) { + Ops.push_back(LegalizeOp(Node->getOperand(i))); + Changed = Changed || Node->getOperand(i) != Ops.back(); + } + if (Changed) + if (Node->getNumValues() == 1) + Result = DAG.getNode(Node->getOpcode(), Node->getValueType(0), Ops); + else { + std::vector VTs(Node->value_begin(), + Node->value_end()); + Result = DAG.getNode(Node->getOpcode(), VTs, Ops); + } + + for (unsigned i = 0, e = Node->getNumValues(); i != e; ++i) + AddLegalizedOperand(Op.getValue(i), Result.getValue(i)); + return Result.getValue(Op.ResNo); + } + // Otherwise this is an unhandled builtin node. splat. std::cerr << "NODE: "; Node->dump(); std::cerr << "\n"; assert(0 && "Do not know how to legalize this operator!"); abort(); From lattner at cs.uiuc.edu Sat May 14 01:43:13 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Sat, 14 May 2005 01:43:13 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp Message-ID: <200505140643.j4E6hDCG025076@apoc.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen/SelectionDAG: SelectionDAG.cpp updated: 1.112 -> 1.113 --- Log message: Wrap long line, actually add node to the graph. --- Diffs of the changes: (+3 -1) SelectionDAG.cpp | 4 +++- 1 files changed, 3 insertions(+), 1 deletion(-) Index: llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp diff -u llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:1.112 llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:1.113 --- llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:1.112 Sat May 14 01:20:26 2005 +++ llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp Sat May 14 01:42:57 2005 @@ -1463,6 +1463,7 @@ if (N) return SDOperand(N, 0); N = new SDNode(Opcode, Ops); N->setValueTypes(ResultTys); + AllNodes.push_back(N); return SDOperand(N, 0); } @@ -1572,7 +1573,8 @@ } SDOperand SelectionDAG::getNode(unsigned Opcode, MVT::ValueType VT,SDOperand N1, - SDOperand N2, SDOperand N3, SDOperand N4, MVT::ValueType EVT) { + SDOperand N2, SDOperand N3, SDOperand N4, + MVT::ValueType EVT) { switch (Opcode) { default: assert(0 && "Bad opcode for this accessor!"); case ISD::TRUNCSTORE: From lattner at cs.uiuc.edu Sat May 14 01:52:21 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Sat, 14 May 2005 01:52:21 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/X86/X86ISelPattern.cpp Message-ID: <200505140652.j4E6qL4e026500@apoc.cs.uiuc.edu> Changes in directory llvm/lib/Target/X86: X86ISelPattern.cpp updated: 1.133 -> 1.134 --- Log message: use a target-specific node and custom expander to lower long->FP to FILD64m. This should fix some missing symbols problems on BSD and improve performance of programs that use that operation. --- Diffs of the changes: (+74 -0) X86ISelPattern.cpp | 74 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 74 insertions(+) Index: llvm/lib/Target/X86/X86ISelPattern.cpp diff -u llvm/lib/Target/X86/X86ISelPattern.cpp:1.133 llvm/lib/Target/X86/X86ISelPattern.cpp:1.134 --- llvm/lib/Target/X86/X86ISelPattern.cpp:1.133 Fri May 13 18:49:10 2005 +++ llvm/lib/Target/X86/X86ISelPattern.cpp Sat May 14 01:52:07 2005 @@ -39,6 +39,22 @@ static cl::opt EnableFastCC("enable-x86-fastcc", cl::Hidden, cl::desc("Enable fastcc on X86")); +namespace { + // X86 Specific DAG Nodes + namespace X86ISD { + enum NodeType { + // Start the numbering where the builtin ops leave off. + FIRST_NUMBER = ISD::BUILTIN_OP_END, + + /// FILD64m - This instruction implements SINT_TO_FP with a + /// 64-bit source in memory and a FP reg result. This corresponds to + /// the X86::FILD64m instruction. It has two inputs (token chain and + /// address) and two outputs (FP value and token chain). + FILD64m, + }; + } +} + //===----------------------------------------------------------------------===// // X86TargetLowering - X86 Implementation of the TargetLowering interface namespace { @@ -66,6 +82,7 @@ // well. /**/ addRegisterClass(MVT::i1, X86::R8RegisterClass); + setOperationAction(ISD::SINT_TO_FP , MVT::i64 , Custom); setOperationAction(ISD::BRCONDTWOWAY , MVT::Other, Expand); setOperationAction(ISD::MEMMOVE , MVT::Other, Expand); setOperationAction(ISD::SIGN_EXTEND_INREG, MVT::i16 , Expand); @@ -114,6 +131,10 @@ // unsigned getBytesToPopOnReturn() const { return BytesToPopOnReturn; } + /// LowerOperation - Provide custom lowering hooks for some operations. + /// + virtual SDOperand LowerOperation(SDOperand Op, SelectionDAG &DAG); + /// LowerArguments - This hook must be implemented to indicate how we should /// lower the arguments for the specified function, into the specified DAG. virtual std::vector @@ -735,6 +756,36 @@ return std::make_pair(Result, Chain); } +/// LowerOperation - Provide custom lowering hooks for some operations. +/// +SDOperand X86TargetLowering::LowerOperation(SDOperand Op, SelectionDAG &DAG) { + switch (Op.getOpcode()) { + default: assert(0 && "Should not custom lower this!"); + case ISD::SINT_TO_FP: + assert(Op.getValueType() == MVT::f64 && + Op.getOperand(0).getValueType() == MVT::i64 && + "Unknown SINT_TO_FP to lower!"); + // We lower sint64->FP into a store to a temporary stack slot, followed by a + // FILD64m node. + MachineFunction &MF = DAG.getMachineFunction(); + int SSFI = MF.getFrameInfo()->CreateStackObject(8, 8); + SDOperand StackSlot = DAG.getFrameIndex(SSFI, getPointerTy()); + SDOperand Store = DAG.getNode(ISD::STORE, MVT::Other, DAG.getEntryNode(), + Op.getOperand(0), StackSlot, DAG.getSrcValue(NULL)); + std::vector RTs; + RTs.push_back(MVT::f64); + RTs.push_back(MVT::Other); + std::vector Ops; + Ops.push_back(Store); + Ops.push_back(StackSlot); + return DAG.getNode(X86ISD::FILD64m, RTs, Ops); + } +} + + +//===----------------------------------------------------------------------===// +// Pattern Matcher Implementation +//===----------------------------------------------------------------------===// namespace { /// X86ISelAddressMode - This corresponds to X86AddressMode, but uses @@ -2945,6 +2996,28 @@ addFullAddress(BuildMI(BB, Opc, 4, Result), AM); } return Result; + case X86ISD::FILD64m: + // Make sure we generate both values. + assert(Result != 1 && N.getValueType() == MVT::f64); + if (!ExprMap.insert(std::make_pair(N.getValue(1), 1)).second) + assert(0 && "Load already emitted!?"); + + { + X86AddressMode AM; + + SDOperand Chain = N.getOperand(0); + SDOperand Address = N.getOperand(1); + if (getRegPressure(Chain) > getRegPressure(Address)) { + Select(Chain); + SelectAddress(Address, AM); + } else { + SelectAddress(Address, AM); + Select(Chain); + } + + addFullAddress(BuildMI(BB, X86::FILD64m, 4, Result), AM); + } + return Result; case ISD::EXTLOAD: // Arbitrarily codegen extloads as MOVZX* case ISD::ZEXTLOAD: { @@ -3619,6 +3692,7 @@ SelectExpr(N); return; case ISD::CopyFromReg: + case X86ISD::FILD64m: ExprMap.erase(N); SelectExpr(N.getValue(0)); return; From lattner at cs.uiuc.edu Sat May 14 02:09:47 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Sat, 14 May 2005 02:09:47 -0500 Subject: [llvm-commits] CVS: llvm/test/Regression/CodeGen/X86/fildll.ll Message-ID: <200505140709.j4E79lYh026677@apoc.cs.uiuc.edu> Changes in directory llvm/test/Regression/CodeGen/X86: fildll.ll added (r1.1) --- Log message: Ensure these casts are done with the hardware fildll instruction --- Diffs of the changes: (+11 -0) fildll.ll | 11 +++++++++++ 1 files changed, 11 insertions(+) Index: llvm/test/Regression/CodeGen/X86/fildll.ll diff -c /dev/null llvm/test/Regression/CodeGen/X86/fildll.ll:1.1 *** /dev/null Sat May 14 02:09:36 2005 --- llvm/test/Regression/CodeGen/X86/fildll.ll Sat May 14 02:09:25 2005 *************** *** 0 **** --- 1,11 ---- + ; RUN: llvm-as < %s | llc -march=x86 -x86-asm-syntax=att | grep fildll | wc -l | grep 2 + + fastcc double %sint64_to_fp(long %X) { + %R = cast long %X to double + ret double %R + } + + fastcc double %uint64_to_fp(ulong %X) { + %R = cast ulong %X to double + ret double %R + } From lattner at cs.uiuc.edu Sat May 14 02:25:23 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Sat, 14 May 2005 02:25:23 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp SelectionDAG.cpp Message-ID: <200505140725.j4E7PNb9031457@apoc.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen/SelectionDAG: LegalizeDAG.cpp updated: 1.126 -> 1.127 SelectionDAG.cpp updated: 1.113 -> 1.114 --- Log message: Use the general mechanism for creating multi-value nodes instead of using special case hacks. --- Diffs of the changes: (+60 -56) LegalizeDAG.cpp | 52 +++++++++++++++++++++++++------------------- SelectionDAG.cpp | 64 +++++++++++++++++++++++++------------------------------ 2 files changed, 60 insertions(+), 56 deletions(-) Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.126 llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.127 --- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.126 Sat May 14 01:34:48 2005 +++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Sat May 14 02:25:05 2005 @@ -1056,8 +1056,10 @@ Ops.push_back(LegalizeOp(Node->getOperand(i))); Changed |= Ops.back() != Node->getOperand(i); } - if (Changed) - Result = DAG.getNode(Node->getOpcode(), Node->getValueType(0), Ops); + if (Changed) { + std::vector VTs(Node->value_begin(), Node->value_end()); + Result = DAG.getNode(Node->getOpcode(), VTs, Ops); + } // Since these produce multiple values, make sure to remember that we // legalized all of them. @@ -1784,32 +1786,34 @@ ExpandOp(RHS, RHSL, RHSH); // FIXME: this should be moved to the dag combiner someday. - if (NodeOp == ISD::ADD_PARTS || NodeOp == ISD::SUB_PARTS) - if (LHSL.getValueType() == MVT::i32) { - SDOperand LowEl; - if (ConstantSDNode *C = dyn_cast(LHSL)) - if (C->getValue() == 0) - LowEl = RHSL; - if (ConstantSDNode *C = dyn_cast(RHSL)) - if (C->getValue() == 0) - LowEl = LHSL; - if (LowEl.Val) { - // Turn this into an add/sub of the high part only. - SDOperand HiEl = - DAG.getNode(NodeOp == ISD::ADD_PARTS ? ISD::ADD : ISD::SUB, - LowEl.getValueType(), LHSH, RHSH); - Lo = LowEl; - Hi = HiEl; - return; - } + assert(NodeOp == ISD::ADD_PARTS || NodeOp == ISD::SUB_PARTS); + if (LHSL.getValueType() == MVT::i32) { + SDOperand LowEl; + if (ConstantSDNode *C = dyn_cast(LHSL)) + if (C->getValue() == 0) + LowEl = RHSL; + if (ConstantSDNode *C = dyn_cast(RHSL)) + if (C->getValue() == 0) + LowEl = LHSL; + if (LowEl.Val) { + // Turn this into an add/sub of the high part only. + SDOperand HiEl = + DAG.getNode(NodeOp == ISD::ADD_PARTS ? ISD::ADD : ISD::SUB, + LowEl.getValueType(), LHSH, RHSH); + Lo = LowEl; + Hi = HiEl; + return; } + } std::vector Ops; Ops.push_back(LHSL); Ops.push_back(LHSH); Ops.push_back(RHSL); Ops.push_back(RHSH); - Lo = DAG.getNode(NodeOp, LHSL.getValueType(), Ops); + + std::vector VTs(2, LHSL.getValueType()); + Lo = DAG.getNode(NodeOp, VTs, Ops); Hi = Lo.getValue(1); } @@ -1824,7 +1828,11 @@ Ops.push_back(LHSL); Ops.push_back(LHSH); Ops.push_back(Amt); - Lo = DAG.getNode(NodeOp, LHSL.getValueType(), Ops); + std::vector VTs; + VTs.push_back(LHSL.getValueType()); + VTs.push_back(LHSH.getValueType()); + VTs.push_back(Amt.getValueType()); + Lo = DAG.getNode(NodeOp, VTs, Ops); Hi = Lo.getValue(1); } Index: llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp diff -u llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:1.113 llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:1.114 --- llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:1.113 Sat May 14 01:42:57 2005 +++ llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp Sat May 14 02:25:05 2005 @@ -1347,44 +1347,20 @@ else return N1; // Never-taken branch break; - // FIXME: figure out how to safely handle things like - // int foo(int x) { return 1 << (x & 255); } - // int bar() { return foo(256); } -#if 0 - case ISD::SRA_PARTS: - case ISD::SRL_PARTS: - case ISD::SHL_PARTS: - if (N3.getOpcode() == ISD::SIGN_EXTEND_INREG && - cast(N3)->getExtraValueType() != MVT::i1) - return getNode(Opcode, VT, N1, N2, N3.getOperand(0)); - else if (N3.getOpcode() == ISD::AND) - if (ConstantSDNode *AndRHS = dyn_cast(N3.getOperand(1))) { - // If the and is only masking out bits that cannot effect the shift, - // eliminate the and. - unsigned NumBits = MVT::getSizeInBits(VT)*2; - if ((AndRHS->getValue() & (NumBits-1)) == NumBits-1) - return getNode(Opcode, VT, N1, N2, N3.getOperand(0)); - } - break; -#endif } SDNode *N = new SDNode(Opcode, N1, N2, N3); switch (Opcode) { + case ISD::SRA_PARTS: + case ISD::SRL_PARTS: + case ISD::SHL_PARTS: + assert(0 && "Should not get here!"); default: N->setValueTypes(VT); break; case ISD::DYNAMIC_STACKALLOC: // DYNAMIC_STACKALLOC produces pointer and chain N->setValueTypes(VT, MVT::Other); break; - - case ISD::SRA_PARTS: - case ISD::SRL_PARTS: - case ISD::SHL_PARTS: { - std::vector V(N->getNumOperands()-1, VT); - N->setValueTypes(V); - break; - } } // FIXME: memoize NODES @@ -1428,6 +1404,9 @@ ConstantSDNode *N1C = dyn_cast(Ops[1].Val); switch (Opcode) { + case ISD::ADD_PARTS: + case ISD::SUB_PARTS: + assert(0 && "Shouldn't be here, should set multiple retvals"); default: break; case ISD::BRCONDTWOWAY: if (N1C) @@ -1440,12 +1419,7 @@ // FIXME: MEMOIZE!! SDNode *N = new SDNode(Opcode, Ops); - if (Opcode != ISD::ADD_PARTS && Opcode != ISD::SUB_PARTS) { - N->setValueTypes(VT); - } else { - std::vector V(N->getNumOperands()/2, VT); - N->setValueTypes(V); - } + N->setValueTypes(VT); AllNodes.push_back(N); return SDOperand(N, 0); } @@ -1456,6 +1430,28 @@ if (ResultTys.size() == 1) return getNode(Opcode, ResultTys[0], Ops); + // FIXME: figure out how to safely handle things like + // int foo(int x) { return 1 << (x & 255); } + // int bar() { return foo(256); } +#if 0 + switch (Opcode) { + case ISD::SRA_PARTS: + case ISD::SRL_PARTS: + case ISD::SHL_PARTS: + if (N3.getOpcode() == ISD::SIGN_EXTEND_INREG && + cast(N3)->getExtraValueType() != MVT::i1) + return getNode(Opcode, VT, N1, N2, N3.getOperand(0)); + else if (N3.getOpcode() == ISD::AND) + if (ConstantSDNode *AndRHS = dyn_cast(N3.getOperand(1))) { + // If the and is only masking out bits that cannot effect the shift, + // eliminate the and. + unsigned NumBits = MVT::getSizeInBits(VT)*2; + if ((AndRHS->getValue() & (NumBits-1)) == NumBits-1) + return getNode(Opcode, VT, N1, N2, N3.getOperand(0)); + } + break; + } +#endif // Memoize the node. SDNode *&N = ArbitraryNodes[std::make_pair(Opcode, std::make_pair(ResultTys, From lattner at cs.uiuc.edu Sat May 14 02:30:11 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Sat, 14 May 2005 02:30:11 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp SelectionDAG.cpp SelectionDAGISel.cpp Message-ID: <200505140730.j4E7UB83000833@apoc.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen/SelectionDAG: LegalizeDAG.cpp updated: 1.127 -> 1.128 SelectionDAG.cpp updated: 1.114 -> 1.115 SelectionDAGISel.cpp updated: 1.58 -> 1.59 --- Log message: Eliminate special purpose hacks for dynamic_stack_alloc. --- Diffs of the changes: (+15 -20) LegalizeDAG.cpp | 10 ++++++---- SelectionDAG.cpp | 14 +------------- SelectionDAGISel.cpp | 11 ++++++++--- 3 files changed, 15 insertions(+), 20 deletions(-) Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.127 llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.128 --- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.127 Sat May 14 02:25:05 2005 +++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Sat May 14 02:29:57 2005 @@ -373,10 +373,12 @@ Tmp2 = LegalizeOp(Node->getOperand(1)); // Legalize the size. Tmp3 = LegalizeOp(Node->getOperand(2)); // Legalize the alignment. if (Tmp1 != Node->getOperand(0) || Tmp2 != Node->getOperand(1) || - Tmp3 != Node->getOperand(2)) - Result = DAG.getNode(ISD::DYNAMIC_STACKALLOC, Node->getValueType(0), - Tmp1, Tmp2, Tmp3); - else + Tmp3 != Node->getOperand(2)) { + std::vector VTs(Node->value_begin(), Node->value_end()); + std::vector Ops; + Ops.push_back(Tmp1); Ops.push_back(Tmp2); Ops.push_back(Tmp3); + Result = DAG.getNode(ISD::DYNAMIC_STACKALLOC, VTs, Ops); + } else Result = Op.getValue(0); // Since this op produces two values, make sure to remember that we Index: llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp diff -u llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:1.114 llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:1.115 --- llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:1.114 Sat May 14 02:25:05 2005 +++ llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp Sat May 14 02:29:57 2005 @@ -1350,19 +1350,7 @@ } SDNode *N = new SDNode(Opcode, N1, N2, N3); - switch (Opcode) { - case ISD::SRA_PARTS: - case ISD::SRL_PARTS: - case ISD::SHL_PARTS: - assert(0 && "Should not get here!"); - default: - N->setValueTypes(VT); - break; - case ISD::DYNAMIC_STACKALLOC: // DYNAMIC_STACKALLOC produces pointer and chain - N->setValueTypes(VT, MVT::Other); - break; - } - + N->setValueTypes(VT); // FIXME: memoize NODES AllNodes.push_back(N); return SDOperand(N, 0); Index: llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp diff -u llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.58 llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.59 --- llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.58 Sat May 14 00:50:48 2005 +++ llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp Sat May 14 02:29:57 2005 @@ -617,9 +617,14 @@ getIntPtrConstant(~(uint64_t)(StackAlign-1))); } - SDOperand DSA = DAG.getNode(ISD::DYNAMIC_STACKALLOC, AllocSize.getValueType(), - getRoot(), AllocSize, - getIntPtrConstant(Align)); + std::vector VTs; + VTs.push_back(AllocSize.getValueType()); + VTs.push_back(MVT::Other); + std::vector Ops; + Ops.push_back(getRoot()); + Ops.push_back(AllocSize); + Ops.push_back(getIntPtrConstant(Align)); + SDOperand DSA = DAG.getNode(ISD::DYNAMIC_STACKALLOC, VTs, Ops); DAG.setRoot(setValue(&I, DSA).getValue(1)); // Inform the Frame Information that we have just allocated a variable-sized From lattner at cs.uiuc.edu Sat May 14 02:32:31 2005 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Sat, 14 May 2005 02:32:31 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp Message-ID: <200505140732.j4E7WVBt000851@apoc.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen/SelectionDAG: SelectionDAG.cpp updated: 1.115 -> 1.116 --- Log message: Turn this into a wrapper for a simpler version of getNode. --- Diffs of the changes: (+7 -8) SelectionDAG.cpp | 15 +++++++-------- 1 files changed, 7 insertions(+), 8 deletions(-) Index: llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp diff -u llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:1.115 llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:1.116 --- llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:1.115 Sat May 14 02:29:57 2005 +++ llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp Sat May 14 02:32:14 2005 @@ -1359,14 +1359,13 @@ SDOperand SelectionDAG::getNode(unsigned Opcode, MVT::ValueType VT, SDOperand N1, SDOperand N2, SDOperand N3, SDOperand N4) { - assert(Opcode == ISD::STORE && "Only stores should use this"); - - SDNode *N = new SDNode(Opcode, N1, N2, N3, N4); - N->setValueTypes(VT); - - // FIXME: memoize NODES - AllNodes.push_back(N); - return SDOperand(N, 0); + std::vector Ops; + Ops.reserve(4); + Ops.push_back(N1); + Ops.push_back(N2); + Ops.push_back(N3); + Ops.push_back(N4); + return getNod